[U-Boot] Enabling ARM DCache (and MMU setup) in U-Boot
Drasko DRASKOVIC
drasko.draskovic at gmail.com
Tue Mar 31 14:20:15 CEST 2009
>On Mon, Mar 30, 2009 at 10:31 PM, Jean-Christophe PLAGNIOL-VILLARD wrote:
>before booting linux you must disable the cache which will be re-enable by
>linux.
OK. Is that done in bootm.c? I can see lines :
/*
* We have reached the point of no return: we are going to
* overwrite all exception vector code, so we cannot easily
* recover from any failures any more...
*/
iflag = disable_interrupts();
#ifdef CONFIG_AMIGAONEG3SE
/*
* We've possible left the caches enabled during
* bios emulation, so turn them off again
*/
icache_disable();
invalidate_l1_instruction_cache();
flush_data_cache();
dcache_disable();
#endif
Looks like only interrupts are disabled, and caches only in the case of
AMIGAONE (whatever that might be). There are no other calls to cache_disable
functions. I already use ICache, and cmd_bootm.c like presented (thus no
call to icache_disable() here), and it works. Only that copying image from
Flash is slow, so I want to speed it up with enablilng DCache.
>Could you give us more details about your soc, u-boot verison and linux
>version
u-boot-1.1.6, linux version is linux-2.6.25.10, although that is not
important because I have no problem with this but with slow access to Flash
and SDRAM, as I said before. Core is ARM926.
As I understand, these things have to be set up in the order to enable
DCache :
1. Page tables
2. The Translation Lookaside Buffer (TLB)
3. Domains and access permission
4. Caches and write buffer
5. The CP15:c1 control register
6. The Fast Context Switch Extension
Now, that seems like a lot of work to be done, and reading manual is not
extremely helpful, so I was wondering if somebody already done similar thing
in U-Boot, for ARM9 platform, so I could reuse some work or examine examples
to figure out how this is done.
Best regards,
Drasko
More information about the U-Boot
mailing list