diff --git a/arch/arm/mach-imx/esdctl.c b/arch/arm/mach-imx/esdctl.c index a4eb3f1..b8f048e 100644 --- a/arch/arm/mach-imx/esdctl.c +++ b/arch/arm/mach-imx/esdctl.c @@ -75,7 +75,7 @@ if (ctlval & (1 << 17)) width = 4; - size = (1 << cols) * (1 << rows) * banks * width; + size = memory_sdram_size(cols, rows, banks, width); return min_t(unsigned long, size, SZ_64M); } @@ -100,7 +100,7 @@ if ((ctlval & ESDCTL0_DSIZ_MASK) == ESDCTL0_DSIZ_31_0) width = 4; - size = (1 << cols) * (1 << rows) * banks * width; + size = memory_sdram_size(cols, rows, banks, width); return min_t(unsigned long, size, SZ_256M); } @@ -127,7 +127,6 @@ { u32 ctlval = readl(esdctlbase + ESDCTL_V4_ESDCTL0); u32 esdmisc = readl(esdctlbase + ESDCTL_V4_ESDMISC); - unsigned long size; int rows, cols, width = 2, banks = 8; if (cs == 0 && !(ctlval & ESDCTL_V4_ESDCTLx_SDE0)) @@ -153,9 +152,7 @@ if (esdmisc & ESDCTL_V4_ESDMISC_BANKS_4) banks = 4; - size = (1 << cols) * (1 << rows) * banks * width; - - return size; + return memory_sdram_size(cols, rows, banks, width); } /* @@ -166,7 +163,6 @@ { u32 ctlval = readl(mmdcbase + MDCTL); u32 mdmisc = readl(mmdcbase + MDMISC); - u64 size; int rows, cols, width = 2, banks = 8; if (cs == 0 && !(ctlval & MMDCx_MDCTL_SDE0)) @@ -192,9 +188,7 @@ if (mdmisc & MMDCx_MDMISC_DDR_4_BANKS) banks = 4; - size = (u64)(1 << cols) * (1 << rows) * banks * width; - - return size; + return memory_sdram_size(cols, rows, banks, width); } static void add_mem(unsigned long base0, unsigned long size0, diff --git a/include/memory.h b/include/memory.h index 56d16d2..73ee766 100644 --- a/include/memory.h +++ b/include/memory.h @@ -32,4 +32,12 @@ int memory_bank_first_find_space(resource_size_t *retstart, resource_size_t *retend); +static inline u64 memory_sdram_size(unsigned int cols, + unsigned int rows, + unsigned int banks, + unsigned int width) +{ + return (u64)banks * width << (rows + cols); +} + #endif