]>
git.ipfire.org Git - people/ms/u-boot.git/blob - arch/arm/mach-uniphier/memconf.c
2 * Copyright (C) 2011-2015 Panasonic Corporation
3 * Copyright (C) 2016 Socionext Inc.
4 * Author: Masahiro Yamada <yamada.masahiro@socionext.com>
6 * SPDX-License-Identifier: GPL-2.0+
10 #include <linux/errno.h>
12 #include <linux/sizes.h>
17 static int __uniphier_memconf_init(const struct uniphier_board_data
*bd
,
21 unsigned long size_per_word
;
24 switch (bd
->dram_ch
[0].width
) {
26 val
|= SG_MEMCONF_CH0_NUM_1
;
27 size_per_word
= bd
->dram_ch
[0].size
;
30 val
|= SG_MEMCONF_CH0_NUM_2
;
31 size_per_word
= bd
->dram_ch
[0].size
>> 1;
34 pr_err("error: unsupported DRAM ch0 width\n");
38 switch (size_per_word
) {
40 val
|= SG_MEMCONF_CH0_SZ_64M
;
43 val
|= SG_MEMCONF_CH0_SZ_128M
;
46 val
|= SG_MEMCONF_CH0_SZ_256M
;
49 val
|= SG_MEMCONF_CH0_SZ_512M
;
52 val
|= SG_MEMCONF_CH0_SZ_1G
;
55 pr_err("error: unsupported DRAM ch0 size\n");
60 switch (bd
->dram_ch
[1].width
) {
62 val
|= SG_MEMCONF_CH1_NUM_1
;
63 size_per_word
= bd
->dram_ch
[1].size
;
66 val
|= SG_MEMCONF_CH1_NUM_2
;
67 size_per_word
= bd
->dram_ch
[1].size
>> 1;
70 pr_err("error: unsupported DRAM ch1 width\n");
74 switch (size_per_word
) {
76 val
|= SG_MEMCONF_CH1_SZ_64M
;
79 val
|= SG_MEMCONF_CH1_SZ_128M
;
82 val
|= SG_MEMCONF_CH1_SZ_256M
;
85 val
|= SG_MEMCONF_CH1_SZ_512M
;
88 val
|= SG_MEMCONF_CH1_SZ_1G
;
91 pr_err("error: unsupported DRAM ch1 size\n");
96 if (bd
->flags
& UNIPHIER_BD_DRAM_SPARSE
)
97 val
|= SG_MEMCONF_SPARSEMEM
;
102 if (!bd
->dram_ch
[2].size
) {
103 val
|= SG_MEMCONF_CH2_DISABLE
;
108 switch (bd
->dram_ch
[2].width
) {
110 val
|= SG_MEMCONF_CH2_NUM_1
;
111 size_per_word
= bd
->dram_ch
[2].size
;
114 val
|= SG_MEMCONF_CH2_NUM_2
;
115 size_per_word
= bd
->dram_ch
[2].size
>> 1;
118 pr_err("error: unsupported DRAM ch2 width\n");
122 switch (size_per_word
) {
124 val
|= SG_MEMCONF_CH2_SZ_64M
;
127 val
|= SG_MEMCONF_CH2_SZ_128M
;
130 val
|= SG_MEMCONF_CH2_SZ_256M
;
133 val
|= SG_MEMCONF_CH2_SZ_512M
;
136 val
|= SG_MEMCONF_CH2_SZ_1G
;
139 pr_err("error: unsupported DRAM ch2 size\n");
144 writel(val
, SG_MEMCONF
);
149 int uniphier_memconf_2ch_init(const struct uniphier_board_data
*bd
)
151 return __uniphier_memconf_init(bd
, 0);
154 int uniphier_memconf_3ch_init(const struct uniphier_board_data
*bd
)
156 return __uniphier_memconf_init(bd
, 1);