1 /* SPDX-License-Identifier: GPL-2.0-only */
3 #include <baseboard/variants.h>
4 #include <soc/romstage.h>
8 static const struct mb_cfg ddr4_mem_config
= {
12 /* Baseboard uses only 100ohm Rcomp resistor */
15 /* Baseboard Rcomp target values */
16 .targets
= { 50, 20, 25, 25, 25 },
19 .ect
= true, /* Early Command Training */
21 .UserBd
= BOARD_TYPE_MOBILE
,
23 .LpDdrDqDqsReTraining
= 1,
26 .dq_pins_interleaved
= false,
30 static const struct mb_cfg lpddr4_mem_config
= {
31 .type
= MEM_TYPE_LP4X
,
36 .dq0
= { 0, 2, 3, 1, 6, 7, 5, 4, },
37 .dq1
= { 10, 8, 11, 9, 14, 12, 13, 15, },
40 .dq0
= { 12, 8, 14, 10, 11, 13, 15, 9, },
41 .dq1
= { 5, 0, 7, 3, 6, 2, 1, 4, },
44 .dq0
= { 3, 0, 2, 1, 6, 5, 4, 7, },
45 .dq1
= { 12, 13, 14, 15, 10, 9, 8, 11, },
48 .dq0
= { 2, 6, 7, 1, 3, 4, 0, 5, },
49 .dq1
= { 9, 13, 8, 15, 14, 11, 12, 10, },
52 .dq0
= { 3, 0, 1, 2, 7, 4, 6, 5, },
53 .dq1
= { 10, 8, 11, 9, 14, 13, 12, 15, },
56 .dq0
= { 10, 12, 14, 8, 9, 13, 15, 11, },
57 .dq1
= { 3, 7, 6, 2, 0, 4, 5, 1, },
60 .dq0
= { 12, 15, 14, 13, 9, 10, 11, 8, },
61 .dq1
= { 7, 4, 6, 5, 0, 1, 3, 2, },
64 .dq0
= { 0, 2, 4, 3, 1, 6, 7, 5, },
65 .dq1
= { 13, 9, 10, 11, 8, 12, 14, 15, },
69 /* DQS CPU<>DRAM map */
71 .ddr0
= { .dqs0
= 0, .dqs1
= 1 },
72 .ddr1
= { .dqs0
= 1, .dqs1
= 0 },
73 .ddr2
= { .dqs0
= 0, .dqs1
= 1 },
74 .ddr3
= { .dqs0
= 0, .dqs1
= 1 },
75 .ddr4
= { .dqs0
= 0, .dqs1
= 1 },
76 .ddr5
= { .dqs0
= 1, .dqs1
= 0 },
77 .ddr6
= { .dqs0
= 1, .dqs1
= 0 },
78 .ddr7
= { .dqs0
= 0, .dqs1
= 1 },
81 .LpDdrDqDqsReTraining
= 1,
83 .ect
= true, /* Early Command Training */
85 .UserBd
= BOARD_TYPE_MOBILE
,
88 static const struct mb_cfg lp5_mem_config
= {
89 .type
= MEM_TYPE_LP5X
,
94 .dq0
= { 3, 2, 1, 0, 5, 4, 6, 7, },
95 .dq1
= { 15, 14, 12, 13, 8, 9, 10, 11, },
98 .dq0
= { 0, 2, 3, 1, 5, 7, 4, 6, },
99 .dq1
= { 14, 13, 15, 12, 8, 9, 11, 10, },
102 .dq0
= { 1, 2, 0, 3, 4, 6, 5, 7, },
103 .dq1
= { 15, 13, 12, 14, 9, 10, 8, 11, },
106 .dq0
= { 2, 1, 3, 0, 7, 4, 5, 6, },
107 .dq1
= { 13, 12, 15, 14, 9, 11, 8, 10, },
110 .dq0
= { 1, 2, 3, 0, 6, 4, 5, 7, },
111 .dq1
= { 15, 13, 14, 12, 10, 9, 8, 11, },
114 .dq0
= { 1, 0, 3, 2, 6, 7, 4, 5, },
115 .dq1
= { 14, 12, 15, 13, 8, 9, 10, 11, },
118 .dq0
= { 0, 2, 1, 3, 4, 7, 5, 6, },
119 .dq1
= { 12, 13, 15, 14, 9, 11, 10, 8, },
122 .dq0
= { 3, 2, 1, 0, 5, 4, 6, 7, },
123 .dq1
= { 13, 15, 11, 12, 10, 9, 14, 8, },
127 /* DQS CPU<>DRAM map */
129 .ddr0
= { .dqs0
= 0, .dqs1
= 1 },
130 .ddr1
= { .dqs0
= 0, .dqs1
= 1 },
131 .ddr2
= { .dqs0
= 0, .dqs1
= 1 },
132 .ddr3
= { .dqs0
= 0, .dqs1
= 1 },
133 .ddr4
= { .dqs0
= 0, .dqs1
= 1 },
134 .ddr5
= { .dqs0
= 0, .dqs1
= 1 },
135 .ddr6
= { .dqs0
= 0, .dqs1
= 1 },
136 .ddr7
= { .dqs0
= 0, .dqs1
= 1 }
139 .ect
= false, /* Early Command Training */
141 .LpDdrDqDqsReTraining
= 1,
143 .UserBd
= BOARD_TYPE_MOBILE
,
150 static const struct mb_cfg ddr5_mem_config
= {
151 .type
= MEM_TYPE_DDR5
,
154 /* Baseboard uses only 100ohm Rcomp resistor */
157 /* Baseboard Rcomp target values */
158 .targets
= { 50, 30, 30, 30, 27 },
161 .ect
= true, /* Early Command Training */
163 .UserBd
= BOARD_TYPE_MOBILE
,
165 .LpDdrDqDqsReTraining
= 1,
168 .dq_pins_interleaved
= false,
172 static const struct mb_cfg adlm_lp4_mem_config
= {
173 .type
= MEM_TYPE_LP4X
,
178 .dq0
= { 13, 12, 14, 8, 11, 10, 9, 15, }, /* DDR0_DQ0[7:0] */
179 .dq1
= { 3, 2, 7, 6, 0, 1, 5, 4, }, /* DDR0_DQ1[7:0] */
182 .dq0
= { 11, 15, 10, 9, 12, 8, 14, 13, }, /* DDR1_DQ0[7:0] */
183 .dq1
= { 0, 1, 7, 6, 2, 5, 4, 3, }, /* DDR1_DQ1[7:0] */
186 .dq0
= { 6, 7, 3, 2, 0, 4, 1, 5, }, /* DDR2_DQ0[7:0] */
187 .dq1
= { 14, 8, 13, 12, 11, 9, 10, 15, }, /* DDR2_DQ1[7:0] */
190 .dq0
= { 2, 6, 7, 3, 1, 5, 0, 4, }, /* DDR3_DQ0[7:0] */
191 .dq1
= { 8, 14, 13, 12, 10, 11, 9, 15, }, /* DDR3_DQ1[7:0] */
194 .dq0
= { 8, 14, 13, 12, 10, 11, 9, 15, }, /* DDR3_DQ1[7:0] */
195 .dq1
= { 1, 0, 5, 4, 6, 2, 3, 7, }, /* DDR4_DQ1[7:0] */
198 .dq0
= { 8, 10, 9, 12, 14, 11, 13, 15, }, /* DDR5_DQ0[7:0] */
199 .dq1
= { 0, 7, 2, 6, 3, 1, 4, 5, }, /* DDR5_DQ1[7:0] */
202 .dq0
= { 14, 12, 9, 8, 15, 10, 13, 11, }, /* DDR6_DQ0[7:0] */
203 .dq1
= { 4, 0, 5, 6, 3, 2, 1, 7, }, /* DDR6_DQ1[7:0] */
206 .dq0
= { 10, 15, 12, 11, 9, 14, 13, 8, }, /* DDR7_DQ0[7:0] */
207 .dq1
= { 7, 1, 2, 3, 6, 0, 5, 4, }, /* DDR7_DQ1[7:0] */
211 /* DQS CPU<>DRAM map */
213 .ddr0
= { .dqs0
= 1, .dqs1
= 0 },
214 .ddr1
= { .dqs0
= 1, .dqs1
= 0 },
215 .ddr2
= { .dqs0
= 0, .dqs1
= 1 },
216 .ddr3
= { .dqs0
= 0, .dqs1
= 1 },
217 .ddr4
= { .dqs0
= 1, .dqs1
= 0 },
218 .ddr5
= { .dqs0
= 1, .dqs1
= 0 },
219 .ddr6
= { .dqs0
= 1, .dqs1
= 0 },
220 .ddr7
= { .dqs0
= 1, .dqs1
= 0 }
223 .ect
= true, /* Early Command Training */
227 .LpDdrDqDqsReTraining
= 1,
229 .UserBd
= BOARD_TYPE_ULT_ULX
,
232 static const struct mb_cfg adlm_lp5_mem_config
= {
233 .type
= MEM_TYPE_LP5X
,
238 .dq0
= { 4, 5, 7, 6, 3, 2, 1, 0, },
239 .dq1
= { 12, 10, 8, 15, 11, 9, 14, 13, },
242 .dq0
= { 1, 0, 2, 3, 7, 4, 5, 6, },
243 .dq1
= { 14, 15, 10, 11, 13, 12, 8, 9, },
246 .dq0
= { 7, 4, 2, 0, 3, 1, 6, 5, },
247 .dq1
= { 14, 13, 15, 12, 8, 9, 10, 11, },
250 .dq0
= { 3, 2, 0, 1, 7, 5, 6, 4, },
251 .dq1
= { 12, 14, 15, 13, 11, 8, 10, 9, },
254 .dq0
= { 2, 3, 0, 1, 6, 4, 7, 5, },
255 .dq1
= { 14, 9, 11, 13, 12, 8, 15, 10, },
258 .dq0
= { 4, 7, 3, 1, 5, 2, 6, 0, },
259 .dq1
= { 14, 8, 11, 9, 12, 15, 10, 13, },
262 .dq0
= { 10, 11, 13, 9, 15, 12, 8, 14, },
263 .dq1
= { 2, 4, 7, 0, 6, 3, 5, 1, },
266 .dq0
= { 13, 15, 11, 14, 10, 12, 8, 9, },
267 .dq1
= { 6, 5, 4, 7, 3, 1, 2, 0, },
271 /* DQS CPU<>DRAM map */
273 .ddr0
= { .dqs0
= 0, .dqs1
= 1 },
274 .ddr1
= { .dqs0
= 0, .dqs1
= 1 },
275 .ddr2
= { .dqs0
= 0, .dqs1
= 1 },
276 .ddr3
= { .dqs0
= 0, .dqs1
= 1 },
277 .ddr4
= { .dqs0
= 0, .dqs1
= 1 },
278 .ddr5
= { .dqs0
= 0, .dqs1
= 1 },
279 .ddr6
= { .dqs0
= 1, .dqs1
= 0 },
280 .ddr7
= { .dqs0
= 1, .dqs1
= 0 }
283 .ect
= false, /* Early Command Training */
285 .UserBd
= BOARD_TYPE_ULT_ULX
,
292 const struct mb_cfg
*variant_memory_params(void)
294 int board_id
= get_board_id();
299 return &lpddr4_mem_config
;
302 return &ddr4_mem_config
;
305 return &ddr5_mem_config
;
308 return &lp5_mem_config
;
310 return &adlm_lp4_mem_config
;
312 return &adlm_lp5_mem_config
;
314 die("unsupported board id : 0x%x\n", board_id
);