> Subject: [PATCH v2 29/33] mips_malta: Setup GT64120 BARs in nanoMIPS > bootloader > > From: Paul Burton <pbur...@wavecomp.com> > > Setup the GT64120 BARs in the nanoMIPS bootloader, in the same way that > they are setup in the MIPS32 bootloader. This is necessary for Linux to > be able to access peripherals, including the UART. > > Signed-off-by: Paul Burton <pbur...@wavecomp.com> > Signed-off-by: Yongbok Kim <yongbok....@mips.com> > Signed-off-by: Aleksandar Markovic <amarko...@wavecomp.com> > Signed-off-by: Stefan Markovic <smarko...@wavecomp.com> > --- > hw/mips/mips_malta.c | 73 > ++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 73 insertions(+) >
Reviewed-by: Aleksandar Markovic <amarko...@wavecomp.com> > diff --git a/hw/mips/mips_malta.c b/hw/mips/mips_malta.c > index 4bc9036..d1a7c1f 100644 > --- a/hw/mips/mips_malta.c > +++ b/hw/mips/mips_malta.c > @@ -664,6 +664,79 @@ static void write_bootloader_nanomips(uint8_t *base, > int64_t run_addr, > /* lui a3,%hi(loaderparams.ram_low_size) */ > stw_p(p++, 0x80e7); stw_p(p++, NM_LO(loaderparams.ram_low_size)); > /* ori a3,a3,%lo(loaderparams.ram_low_size) > */ > + > + /* Load BAR registers as done by YAMON */ > + stw_p(p++, 0xe040); stw_p(p++, 0x0681); > + /* lui t1, %hi(0xb4000000) */ > +#ifdef TARGET_WORDS_BIGENDIAN > + stw_p(p++, 0xe020); stw_p(p++, 0x0be1); > + /* lui t0, %hi(0xdf000000) */ > +#else > + stw_p(p++, 0x0020); stw_p(p++, 0x00df); > + /* addiu[32] t0, $0, 0xdf */ > +#endif > + stw_p(p++, 0x8422); stw_p(p++, 0x9068); > + /* sw t0, 0x68(t1) */ > + > + stw_p(p++, 0xe040); stw_p(p++, 0x077d); > + /* lui t1, %hi(0xbbe00000) */ > +#ifdef TARGET_WORDS_BIGENDIAN > + stw_p(p++, 0xe020); stw_p(p++, 0x0801); > + /* lui t0, %hi(0xc0000000) */ > +#else > + stw_p(p++, 0x0020); stw_p(p++, 0x00c0); > + /* addiu[32] t0, $0, 0xc0 */ > +#endif > + stw_p(p++, 0x8422); stw_p(p++, 0x9048); > + /* sw t0, 0x48(t1) */ > +#ifdef TARGET_WORDS_BIGENDIAN > + stw_p(p++, 0xe020); stw_p(p++, 0x0800); > + /* lui t0, %hi(0x40000000) */ > +#else > + stw_p(p++, 0x0020); stw_p(p++, 0x0040); > + /* addiu[32] t0, $0, 0x40 */ > +#endif > + stw_p(p++, 0x8422); stw_p(p++, 0x9050); > + /* sw t0, 0x50(t1) */ > + > +#ifdef TARGET_WORDS_BIGENDIAN > + stw_p(p++, 0xe020); stw_p(p++, 0x0001); > + /* lui t0, %hi(0x80000000) */ > +#else > + stw_p(p++, 0x0020); stw_p(p++, 0x0080); > + /* addiu[32] t0, $0, 0x80 */ > +#endif > + stw_p(p++, 0x8422); stw_p(p++, 0x9058); > + /* sw t0, 0x58(t1) */ > +#ifdef TARGET_WORDS_BIGENDIAN > + stw_p(p++, 0xe020); stw_p(p++, 0x07e0); > + /* lui t0, %hi(0x3f000000) */ > +#else > + stw_p(p++, 0x0020); stw_p(p++, 0x003f); > + /* addiu[32] t0, $0, 0x3f */ > +#endif > + stw_p(p++, 0x8422); stw_p(p++, 0x9060); > + /* sw t0, 0x60(t1) */ > + > +#ifdef TARGET_WORDS_BIGENDIAN > + stw_p(p++, 0xe020); stw_p(p++, 0x0821); > + /* lui t0, %hi(0xc1000000) */ > +#else > + stw_p(p++, 0x0020); stw_p(p++, 0x00c1); > + /* addiu[32] t0, $0, 0xc1 */ > +#endif > + stw_p(p++, 0x8422); stw_p(p++, 0x9080); > + /* sw t0, 0x80(t1) */ > +#ifdef TARGET_WORDS_BIGENDIAN > + stw_p(p++, 0xe020); stw_p(p++, 0x0bc0); > + /* lui t0, %hi(0x5e000000) */ > +#else > + stw_p(p++, 0x0020); stw_p(p++, 0x005e); > + /* addiu[32] t0, $0, 0x5e */ > +#endif > + stw_p(p++, 0x8422); stw_p(p++, 0x9088); > + /* sw t0, 0x88(t1) */ > + > stw_p(p++, 0xe320 | NM_HI1(kernel_entry)); > stw_p(p++, NM_HI2(kernel_entry)); > /* lui t9,%hi(kernel_entry) */ > -- > 2.7.4 > >