2 * Copyright (C) 2015 Masahiro Yamada <yamada.masahiro@socionext.com>
4 * SPDX-License-Identifier: GPL-2.0+
10 #include <linux/sizes.h>
11 #include <mach/init.h>
12 #include <mach/sg-regs.h>
14 int proxstream2_memconf_init(const struct uniphier_board_data *bd)
17 unsigned long size_per_word;
19 tmp = readl(SG_MEMCONF);
21 tmp &= ~(SG_MEMCONF_CH2_SZ_MASK | SG_MEMCONF_CH2_NUM_MASK);
23 switch (bd->dram_ch2_width) {
25 tmp |= SG_MEMCONF_CH2_NUM_1;
26 size_per_word = bd->dram_ch2_size;
29 tmp |= SG_MEMCONF_CH2_NUM_2;
30 size_per_word = bd->dram_ch2_size >> 1;
33 pr_err("error: unsupported DRAM Ch2 width\n");
38 switch (size_per_word) {
40 tmp |= SG_MEMCONF_CH2_SZ_64M;
43 tmp |= SG_MEMCONF_CH2_SZ_128M;
46 tmp |= SG_MEMCONF_CH2_SZ_256M;
49 tmp |= SG_MEMCONF_CH2_SZ_512M;
52 pr_err("error: unsupported DRAM Ch2 size\n");
57 tmp &= ~SG_MEMCONF_CH2_DISABLE;
59 tmp |= SG_MEMCONF_CH2_DISABLE;
61 writel(tmp, SG_MEMCONF);