Currently add_mem() tries to merge the memory banks if they are
continuous. Add a option to avoid this merge which is not always useful
e.g. for devices with memory > 4G.

Signed-off-by: Marco Felsch <m.fel...@pengutronix.de>
---
 arch/arm/mach-imx/esdctl.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/arch/arm/mach-imx/esdctl.c b/arch/arm/mach-imx/esdctl.c
index 1798ad48e50a..54c62c47338e 100644
--- a/arch/arm/mach-imx/esdctl.c
+++ b/arch/arm/mach-imx/esdctl.c
@@ -183,14 +183,14 @@ static inline u64 __imx6_mmdc_sdram_size(void __iomem 
*mmdcbase, int cs)
 }
 
 static int add_mem(unsigned long base0, unsigned long size0,
-               unsigned long base1, unsigned long size1)
+                  unsigned long base1, unsigned long size1, bool force_split)
 {
        int ret0 = 0, ret1 = 0;
 
        debug("%s: cs0 base: 0x%08lx cs0 size: 0x%08lx\n", __func__, base0, 
size0);
        debug("%s: cs1 base: 0x%08lx cs1 size: 0x%08lx\n", __func__, base1, 
size1);
 
-       if (base0 + size0 == base1 && size1 > 0) {
+       if (!force_split && base0 + size0 == base1 && size1 > 0) {
                /*
                 * concatenate both chip selects to a single bank
                 */
@@ -229,13 +229,13 @@ static inline void imx_esdctl_v2_disable_default(void 
__iomem *esdctlbase)
 static int imx_esdctl_v1_add_mem(void *esdctlbase, struct imx_esdctl_data 
*data)
 {
        return add_mem(data->base0, imx_v1_sdram_size(esdctlbase, 0),
-                       data->base1, imx_v1_sdram_size(esdctlbase, 1));
+                      data->base1, imx_v1_sdram_size(esdctlbase, 1), false);
 }
 
 static int imx_esdctl_v2_add_mem(void *esdctlbase, struct imx_esdctl_data 
*data)
 {
        return add_mem(data->base0, imx_v2_sdram_size(esdctlbase, 0),
-                       data->base1, imx_v2_sdram_size(esdctlbase, 1));
+                      data->base1, imx_v2_sdram_size(esdctlbase, 1), false);
 }
 
 static int imx_esdctl_v2_bug_add_mem(void *esdctlbase, struct imx_esdctl_data 
*data)
@@ -243,19 +243,19 @@ static int imx_esdctl_v2_bug_add_mem(void *esdctlbase, 
struct imx_esdctl_data *d
        imx_esdctl_v2_disable_default(esdctlbase);
 
        return add_mem(data->base0, imx_v2_sdram_size(esdctlbase, 0),
-                       data->base1, imx_v2_sdram_size(esdctlbase, 1));
+                      data->base1, imx_v2_sdram_size(esdctlbase, 1), false);
 }
 
 static int imx_esdctl_v3_add_mem(void *esdctlbase, struct imx_esdctl_data 
*data)
 {
        return add_mem(data->base0, imx_v3_sdram_size(esdctlbase, 0),
-                       data->base1, imx_v3_sdram_size(esdctlbase, 1));
+                      data->base1, imx_v3_sdram_size(esdctlbase, 1), false);
 }
 
 static int imx_esdctl_v4_add_mem(void *esdctlbase, struct imx_esdctl_data 
*data)
 {
        return add_mem(data->base0, imx_v4_sdram_size(esdctlbase, 0),
-                       data->base1, imx_v4_sdram_size(esdctlbase, 1));
+                      data->base1, imx_v4_sdram_size(esdctlbase, 1), false);
 }
 
 /*
-- 
2.39.2


Reply via email to