From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shinya Kuribayashi Date: Thu, 13 Sep 2007 18:54:34 +0900 Subject: [U-Boot-Users] MIPS cache management (and build) questions. In-Reply-To: <760873.90830.qm@web54005.mail.re2.yahoo.com> References: <760873.90830.qm@web54005.mail.re2.yahoo.com> Message-ID: <46E908DA.4080001@necel.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Paul, Paul Marciano wrote: > I'm working on bringing U-Boot 1.2.0 up on a MIPS 24Kc > core (MIPS32R2). It has gone relatively smoothly - > with a couple of hiccups that I want to point out here > in case I'm missing something. Nice. I'd like to see that. > 1. I needed to gdb through the code, so I turned off > -Os, and the build failed with strcmp and friends > missing. It seems that the MIPS port in-lines them > with -Os but omits them completely without it. Adding > 'C' versions of the functions fixed that. I've also fixed and the patch checked in. Please try 1.3.0-rc1. > 2. I'm using do_bootelf() to invoke my image. The > lines: > addr = load_elf_image(addr); > ... > if (dcache_status()) > dcache_disable(); > ... > (function call through addr) > > The comment embedded in the code says the dcache is > flushed already, but in cpu/mips/cpu.c, the function > flush_cache() is empty so the dcache isn't flushed. > > As it's not flushed, and dcache_disable() just turns > it off, if the run address is somewhere that hasn't > naturally spilled out of the dcache during the load, > the CPU will fetch garbage. > > Also, as the 'addr' variable is now on the stack (in a > non-optimized compile), that variable pops out of > existence and jumping through it shoots the processor > off into the weeds. Hope this helps. Sorry for no description. I have to be add later... Thanks, Shinya Kuribayashi --- common/cmd_elf.c | 2 ++ include/asm-mips/addrspace.h | 2 +- 2 files changed, 3 insertions(+), 1 deletions(-) diff --git a/common/cmd_elf.c b/common/cmd_elf.c index 63a5593..f1057d4 100644 --- a/common/cmd_elf.c +++ b/common/cmd_elf.c @@ -55,12 +55,14 @@ int do_bootelf (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) printf ("## Starting application at 0x%08lx ...\n", addr); +#if 0 /* * QNX images require the data cache is disabled. * Data cache is already flushed, so just turn it off. */ if (dcache_status ()) dcache_disable (); +#endif /* * pass address parameter as argv[0] (aka command name), diff --git a/include/asm-mips/addrspace.h b/include/asm-mips/addrspace.h index 90e8840..bfdc06f 100644 --- a/include/asm-mips/addrspace.h +++ b/include/asm-mips/addrspace.h @@ -49,7 +49,7 @@ cannot access physical memory directly from core */ #define UNCACHED_SDRAM(a) (((unsigned long)(a)) | 0x20000000) #else /* !CONFIG_AU1X00 */ -#define UNCACHED_SDRAM(a) PHYSADDR(a) +#define UNCACHED_SDRAM(a) KSEG1ADDR(a) #endif /* CONFIG_AU1X00 */ #endif /* __ASSEMBLY__ */ /*