From be956f096f51ab8eae32f4ba58b1cd4716d057b1 Mon Sep 17 00:00:00 2001 From: Greg Watson Date: Sun, 5 Oct 2003 05:13:12 +0000 Subject: size memory git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1192 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1 --- src/cpu/ppc/ppc4xx/mem.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/src/cpu/ppc/ppc4xx/mem.c b/src/cpu/ppc/ppc4xx/mem.c index 9fa6daa19b..f1bd2f8b8e 100644 --- a/src/cpu/ppc/ppc4xx/mem.c +++ b/src/cpu/ppc/ppc4xx/mem.c @@ -1,7 +1,59 @@ +#include #include +#include + +#define SDRAM0_CFGADDR 0x010 +#define SDRAM0_CFGDATA 0x011 + +#define SDRAM0_B0CR 0x40 +#define SDRAM0_B1CR 0x44 +#define SDRAM0_B2CR 0x48 +#define SDRAM0_B3CR 0x4C + +#define BA_MASK 0xffc00000 +#define BA_SHIFT 22 +#define SZ_MASK 0x000e0000 +#define SZ_SHIFT 17 +#define AM_MASK 0x0000e000 +#define AM_SHIFT 13 +#define BE_MASK 0x00000001 +#define BE_SHIFT 0 + +struct mem_range mem_bank[4]; + +void +getmemrange(int bank, unsigned int reg) +{ + unsigned int val; + unsigned int size; + + mtdcr(SDRAM0_CFGADDR, reg); + val = mfdcr(SDRAM0_CFGDATA); + + if ((val & BE_MASK) == 0) + { + mem_bank[bank].basek = 0; + mem_bank[bank].sizek = 0; + return; + } + + size = ((val & BA_MASK) >> BA_SHIFT); + mem_bank[bank].basek = size * 1024; + + size = 4 << ((val & SZ_MASK) >> SZ_SHIFT); + mem_bank[bank].sizek = size * 1024; + + printk_info("mem bank %d: basek %d, sizek %d\n", bank, mem_bank[bank].basek, mem_bank[bank].sizek); +} struct mem_range * sizeram(void) { - return 0; + getmemrange(0, SDRAM0_B0CR); + getmemrange(1, SDRAM0_B1CR); + getmemrange(2, SDRAM0_B2CR); + getmemrange(3, SDRAM0_B3CR); + + return mem_bank; } + -- cgit v1.2.3