2 * Copyright (C) 2011-2015 Masahiro Yamada <yamada.masahiro@socionext.com>
4 * SPDX-License-Identifier: GPL-2.0+
8 #include <linux/sizes.h>
10 #include <mach/sg-regs.h>
12 static inline u32 sg_memconf_val_ch0(unsigned long size, int num)
14 int size_mb = size / num;
19 ret = SG_MEMCONF_CH0_SZ_64M;
22 ret = SG_MEMCONF_CH0_SZ_128M;
25 ret = SG_MEMCONF_CH0_SZ_256M;
28 ret = SG_MEMCONF_CH0_SZ_512M;
31 ret = SG_MEMCONF_CH0_SZ_1G;
40 ret |= SG_MEMCONF_CH0_NUM_1;
43 ret |= SG_MEMCONF_CH0_NUM_2;
52 static inline u32 sg_memconf_val_ch1(unsigned long size, int num)
54 int size_mb = size / num;
59 ret = SG_MEMCONF_CH1_SZ_64M;
62 ret = SG_MEMCONF_CH1_SZ_128M;
65 ret = SG_MEMCONF_CH1_SZ_256M;
68 ret = SG_MEMCONF_CH1_SZ_512M;
71 ret = SG_MEMCONF_CH1_SZ_1G;
80 ret |= SG_MEMCONF_CH1_NUM_1;
83 ret |= SG_MEMCONF_CH1_NUM_2;
92 void memconf_init(void)
97 tmp = sg_memconf_val_ch0(CONFIG_SDRAM0_SIZE, CONFIG_DDR_NUM_CH0);
98 tmp |= sg_memconf_val_ch1(CONFIG_SDRAM1_SIZE, CONFIG_DDR_NUM_CH1);
99 #if CONFIG_SDRAM0_BASE + CONFIG_SDRAM0_SIZE < CONFIG_SDRAM1_BASE
100 tmp |= SG_MEMCONF_SPARSEMEM;
102 writel(tmp, SG_MEMCONF);