2 * Copyright (C) 2011-2015 Panasonic Corporation
3 * Author: Masahiro Yamada <yamada.m@jp.panasonic.com>
5 * SPDX-License-Identifier: GPL-2.0+
9 #include <linux/sizes.h>
11 #include <mach/sg-regs.h>
13 static inline u32 sg_memconf_val_ch0(unsigned long size, int num)
15 int size_mb = size / num;
20 ret = SG_MEMCONF_CH0_SZ_64M;
23 ret = SG_MEMCONF_CH0_SZ_128M;
26 ret = SG_MEMCONF_CH0_SZ_256M;
29 ret = SG_MEMCONF_CH0_SZ_512M;
32 ret = SG_MEMCONF_CH0_SZ_1G;
41 ret |= SG_MEMCONF_CH0_NUM_1;
44 ret |= SG_MEMCONF_CH0_NUM_2;
53 static inline u32 sg_memconf_val_ch1(unsigned long size, int num)
55 int size_mb = size / num;
60 ret = SG_MEMCONF_CH1_SZ_64M;
63 ret = SG_MEMCONF_CH1_SZ_128M;
66 ret = SG_MEMCONF_CH1_SZ_256M;
69 ret = SG_MEMCONF_CH1_SZ_512M;
72 ret = SG_MEMCONF_CH1_SZ_1G;
81 ret |= SG_MEMCONF_CH1_NUM_1;
84 ret |= SG_MEMCONF_CH1_NUM_2;
93 void memconf_init(void)
98 tmp = sg_memconf_val_ch0(CONFIG_SDRAM0_SIZE, CONFIG_DDR_NUM_CH0);
99 tmp |= sg_memconf_val_ch1(CONFIG_SDRAM1_SIZE, CONFIG_DDR_NUM_CH1);
100 #if CONFIG_SDRAM0_BASE + CONFIG_SDRAM0_SIZE < CONFIG_SDRAM1_BASE
101 tmp |= SG_MEMCONF_SPARSEMEM;
103 writel(tmp, SG_MEMCONF);