diff options
author | Mark A. Greer <mgreer@mvista.com> | 2005-09-03 15:55:56 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@evo.osdl.org> | 2005-09-05 00:06:00 -0700 |
commit | d01c08c9ae91c1526d4564b400b3e0e04b49d1ba (patch) | |
tree | a1cc06a5342fdaf6185d2655a636cc181d56cb08 /arch/ppc/boot | |
parent | bbde630b553d349307fe719486bc06f8cf9c1a2d (diff) | |
download | kernel_samsung_smdk4412-d01c08c9ae91c1526d4564b400b3e0e04b49d1ba.zip kernel_samsung_smdk4412-d01c08c9ae91c1526d4564b400b3e0e04b49d1ba.tar.gz kernel_samsung_smdk4412-d01c08c9ae91c1526d4564b400b3e0e04b49d1ba.tar.bz2 |
[PATCH] ppc32: mv64x60 updates & enhancements
Updates and enhancement to the ppc32 mv64x60 code:
- move code to get mem size from mem ctlr to bootwrapper
- address some errata in the mv64360 pic code
- some minor cleanups
- export one of the bridge's regs via sysfs so user daemon can watch for
extraction events
Signed-off-by: Mark A. Greer <mgreer@mvista.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/ppc/boot')
-rw-r--r-- | arch/ppc/boot/simple/misc-mv64x60.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/arch/ppc/boot/simple/misc-mv64x60.c b/arch/ppc/boot/simple/misc-mv64x60.c index 7e88fc6..258d459 100644 --- a/arch/ppc/boot/simple/misc-mv64x60.c +++ b/arch/ppc/boot/simple/misc-mv64x60.c @@ -19,6 +19,33 @@ extern struct bi_record *decompress_kernel(unsigned long load_addr, int num_words, unsigned long cksum); + +u32 size_reg[MV64x60_CPU2MEM_WINDOWS] = { + MV64x60_CPU2MEM_0_SIZE, MV64x60_CPU2MEM_1_SIZE, + MV64x60_CPU2MEM_2_SIZE, MV64x60_CPU2MEM_3_SIZE +}; + +/* Read mem ctlr to get the amount of mem in system */ +unsigned long +mv64360_get_mem_size(void) +{ + u32 enables, i, v; + u32 mem = 0; + + enables = in_le32((void __iomem *)CONFIG_MV64X60_NEW_BASE + + MV64360_CPU_BAR_ENABLE) & 0xf; + + for (i=0; i<MV64x60_CPU2MEM_WINDOWS; i++) + if (!(enables & (1<<i))) { + v = in_le32((void __iomem *)CONFIG_MV64X60_NEW_BASE + + size_reg[i]) & 0xffff; + v = (v + 1) << 16; + mem += v; + } + + return mem; +} + void mv64x60_move_base(void __iomem *old_base, void __iomem *new_base) { |