diff options
author | Juergen Beisert <juergen@kreuzholzen.de> | 2009-10-27 19:57:35 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2009-10-28 09:44:41 +0100 |
commit | afae995ef9acd5ef6caa6ee2ba39540cf213f90c (patch) | |
tree | acf66d798440a934ffd262c3bc7a9880dbe87218 | |
parent | 16fe431ce75c91ec5cb6c2ed53801582c8672e2a (diff) | |
download | barebox-afae995ef9acd5ef6caa6ee2ba39540cf213f90c.tar.gz barebox-afae995ef9acd5ef6caa6ee2ba39540cf213f90c.tar.xz |
S3C24xx: Provide a generic way to detect memory size
This patch adds code to determine the current available SDRAM size. It relies
on other routines setting up the SDRAM controller, because it only read back
their settings.
Signed-off-by: Juergen Beisert <juergen@kreuzholzen.de>
-rw-r--r-- | arch/arm/mach-s3c24xx/generic.c | 48 | ||||
-rw-r--r-- | include/asm-arm/arch-s3c24xx/s3c24xx-generic.h | 1 |
2 files changed, 48 insertions, 1 deletions
diff --git a/arch/arm/mach-s3c24xx/generic.c b/arch/arm/mach-s3c24xx/generic.c index 864977d7b8..515731a5a4 100644 --- a/arch/arm/mach-s3c24xx/generic.c +++ b/arch/arm/mach-s3c24xx/generic.c @@ -19,7 +19,7 @@ */ /** * @file - * @brief Basic clock and timer handling for S3C24xx CPUs + * @brief Basic clock, sdram and timer handling for S3C24xx CPUs */ #include <config.h> @@ -124,6 +124,52 @@ uint32_t s3c24xx_get_uclk(void) } /** + * Calculate the amount of connected and available memory + * @return Memory size in bytes + */ +uint32_t s3c24x0_get_memory_size(void) +{ + uint32_t reg, size; + + /* + * detect the current memory size + */ + reg = readl(BANKSIZE); + + switch (reg & 0x7) { + case 0: + size = 32 * 1024 * 1024; + break; + case 1: + size = 64 * 1024 * 1024; + break; + case 2: + size = 128 * 1024 * 1024; + break; + case 4: + size = 2 * 1024 * 1024; + break; + case 5: + size = 4 * 1024 * 1024; + break; + case 6: + size = 8 * 1024 * 1024; + break; + default: + size = 16 * 1024 * 1024; + break; + } + + /* + * Is bank7 also configured for SDRAM usage? + */ + if ((readl(BANKCON7) & (0x3 << 15)) == (0x3 << 15)) + size <<= 1; /* also count this bank */ + + return size; +} + +/** * Show the user the current clock settings */ int s3c24xx_dump_clocks(void) diff --git a/include/asm-arm/arch-s3c24xx/s3c24xx-generic.h b/include/asm-arm/arch-s3c24xx/s3c24xx-generic.h index 1691138279..b8abcf1d9c 100644 --- a/include/asm-arm/arch-s3c24xx/s3c24xx-generic.h +++ b/include/asm-arm/arch-s3c24xx/s3c24xx-generic.h @@ -30,3 +30,4 @@ uint32_t s3c24xx_get_fclk(void); uint32_t s3c24xx_get_hclk(void); uint32_t s3c24xx_get_pclk(void); uint32_t s3c24xx_get_uclk(void); +uint32_t s3c24x0_get_memory_size(void); |