[U-Boot] [PATCH 0/8] armv7: cache maintenance operations

Aneesh V
2010-12-22T11:54:50Z

With D-cache and MMU enabled for ARM in u-boot it becomes imperative to
support a minimal set of cache maintenance operations and necessary
initializations before enabling MMU.

This series of patches attempt to do the following for armv7:
* Necessary initialization sequence before enabling MMU that includes
invalidation of TLB, data caches, branch predictor array etc.
* Framework for supporting SOC specific outer caches in a generic manner
(using a structure of function pointers - inspired by the Linux
implementation)
* Generic armv7 cache maintenance operations for caches known to the CPU
* Support for ARM PL310 L2 cache controller used in OMAP4
* Cleanup of the cleanup_before_linux() function
* Adapting all armv7 SOCs to use the new framework and removing
duplicated code

Testing:
* Extensive testing on OMAP4430SDP and OMAP3430SDP by creating coherency
issues and solving them using the maintenance routines
- Eg: memfill a region of memory with a known pattern
- Invalidate the region
- Read back and compare the region with the original pattern
- If match fails it means that invalidate is successful
- Now add a flush call just before the invalidate
- If match succeeds it means that flush was successful
- Outer caches were tested with experiments involving making the
function pointers NULL
* Kernel booting on OMAP4430SDP and OMAP3430SDP

Aneesh V (8):
arm: make default implementation of cache_flush() weakly linked
armv7: cache maintenance operations for armv7
armv7: integrate cache maintenance support
arm: minor fixes for cache and mmu handling
armv7: add PL310 support to u-boot
armv7: adapt omap4 to the new cache maintenance framework
armv7: adapt omap3 to the new cache maintenance framework
armv7: adapt s5pc1xx to the new cache maintenance framework

arch/arm/cpu/armv7/Makefile | 2 +-
arch/arm/cpu/armv7/cache_v7.c | 359 +++++++++++++++++++++++++
arch/arm/cpu/armv7/config.mk | 2 +-
arch/arm/cpu/armv7/cpu.c | 47 ++--
arch/arm/cpu/armv7/omap3/Makefile | 1 -
arch/arm/cpu/armv7/omap3/board.c | 151 +++++++++--
arch/arm/cpu/armv7/omap3/cache.S | 263 ------------------
arch/arm/cpu/armv7/omap3/lowlevel_init.S | 30 ++
arch/arm/cpu/armv7/omap4/board.c | 25 ++-
arch/arm/cpu/armv7/omap4/lowlevel_init.S | 17 ++
arch/arm/cpu/armv7/s5pc1xx/cache.S | 86 +------
arch/arm/cpu/armv7/s5pc1xx/clock.c | 12 +
arch/arm/cpu/armv7/start.S | 18 ++-
arch/arm/include/asm/arch-omap3/omap3.h | 20 ++
arch/arm/include/asm/arch-omap3/sys_proto.h | 10 +-
arch/arm/include/asm/arch-omap4/omap4.h | 6 +
arch/arm/include/asm/arch-omap4/sys_proto.h | 3 +-
arch/arm/include/asm/arch-s5pc1xx/sys_proto.h | 4 +-
arch/arm/include/asm/armv7.h | 63 +++++
arch/arm/include/asm/pl310.h | 49 ++++
arch/arm/lib/Makefile | 1 +
arch/arm/lib/board.c | 6 +
arch/arm/lib/cache-cp15.c | 18 ++-
arch/arm/lib/cache-pl310.c | 114 ++++++++
arch/arm/lib/cache.c | 20 +-
include/common.h | 5 +-
include/configs/omap4_panda.h | 6 +-
include/configs/omap4_sdp4430.h | 6 +-
28 files changed, 929 insertions(+), 415 deletions(-)
create mode 100644 arch/arm/cpu/armv7/cache_v7.c
delete mode 100644 arch/arm/cpu/armv7/omap3/cache.S
create mode 100644 arch/arm/include/asm/armv7.h
create mode 100644 arch/arm/include/asm/pl310.h
create mode 100644 arch/arm/lib/cache-pl310.c