summaryrefslogtreecommitdiffstats
path: root/arch/ppc/boot/simple/misc-mv64x60.c
diff options
context:
space:
mode:
authorMark A. Greer <mgreer@mvista.com>2005-09-04 00:55:56 +0200
committerLinus Torvalds <torvalds@evo.osdl.org>2005-09-05 09:06:00 +0200
commitd01c08c9ae91c1526d4564b400b3e0e04b49d1ba (patch)
treea1cc06a5342fdaf6185d2655a636cc181d56cb08 /arch/ppc/boot/simple/misc-mv64x60.c
parent[PATCH] ppc32: Added cputable entry for 7448 (diff)
downloadlinux-d01c08c9ae91c1526d4564b400b3e0e04b49d1ba.tar.xz
linux-d01c08c9ae91c1526d4564b400b3e0e04b49d1ba.zip
[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/simple/misc-mv64x60.c')
-rw-r--r--arch/ppc/boot/simple/misc-mv64x60.c27
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 7e88fc6d207d..258d4599fadc 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)
{