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.felsch@xxxxxxxxxxxxxx> --- 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