Commit e6f61622d32327907f824154c7f88ddce3c700cc
Committed by
Stefan Roese
1 parent
2b4ffbf6b4
Exists in
smarc_8mq_lf_v2020.04
and in
11 other branches
ARM: mvebu: a38x: restore support for setting timing
This restores support for configuring the timing mode based on the ddr_topology. This was originally implemented in commit 90bcc3d38d2b ("driver/ddr: Add support for setting timing in hws_topology_map") but was removed as part of the upstream sync. Signed-off-by: Chris Packham <judge.packham@gmail.com> Signed-off-by: Stefan Roese <sr@denx.de>
Showing 9 changed files with 29 additions and 11 deletions Side-by-side Diff
- board/CZ.NIC/turris_omnia/turris_omnia.c
- board/Marvell/db-88f6820-amc/db-88f6820-amc.c
- board/Marvell/db-88f6820-gp/db-88f6820-gp.c
- board/gdsys/a38x/controlcenterdc.c
- board/solidrun/clearfog/clearfog.c
- drivers/ddr/marvell/a38x/ddr3_training.c
- drivers/ddr/marvell/a38x/ddr_topology_def.h
- drivers/ddr/marvell/a38x/mv_ddr_plat.c
- drivers/ddr/marvell/a38x/mv_ddr_topology.h
board/CZ.NIC/turris_omnia/turris_omnia.c
... | ... | @@ -214,7 +214,8 @@ |
214 | 214 | MV_DDR_DIE_CAP_4GBIT, /* mem_size */ |
215 | 215 | DDR_FREQ_800, /* frequency */ |
216 | 216 | 0, 0, /* cas_wl cas_l */ |
217 | - MV_DDR_TEMP_NORMAL} }, /* temperature */ | |
217 | + MV_DDR_TEMP_NORMAL, /* temperature */ | |
218 | + MV_DDR_TIM_2T} }, /* timing */ | |
218 | 219 | BUS_MASK_32BIT, /* Busses mask */ |
219 | 220 | MV_DDR_CFG_DEFAULT, /* ddr configuration data source */ |
220 | 221 | { {0} }, /* raw spd data */ |
... | ... | @@ -235,7 +236,8 @@ |
235 | 236 | MV_DDR_DIE_CAP_8GBIT, /* mem_size */ |
236 | 237 | DDR_FREQ_800, /* frequency */ |
237 | 238 | 0, 0, /* cas_wl cas_l */ |
238 | - MV_DDR_TEMP_NORMAL} }, /* temperature */ | |
239 | + MV_DDR_TEMP_NORMAL, /* temperature */ | |
240 | + MV_DDR_TIM_2T} }, /* timing */ | |
239 | 241 | BUS_MASK_32BIT, /* Busses mask */ |
240 | 242 | MV_DDR_CFG_DEFAULT, /* ddr configuration data source */ |
241 | 243 | { {0} }, /* raw spd data */ |
board/Marvell/db-88f6820-amc/db-88f6820-amc.c
... | ... | @@ -69,7 +69,8 @@ |
69 | 69 | MV_DDR_DIE_CAP_2GBIT, /* mem_size */ |
70 | 70 | DDR_FREQ_800, /* frequency */ |
71 | 71 | 0, 0, /* cas_wl cas_l */ |
72 | - MV_DDR_TEMP_LOW} }, /* temperature */ | |
72 | + MV_DDR_TEMP_LOW, /* temperature */ | |
73 | + MV_DDR_TIM_DEFAULT} }, /* timing */ | |
73 | 74 | BUS_MASK_32BIT, /* Busses mask */ |
74 | 75 | MV_DDR_CFG_DEFAULT, /* ddr configuration data source */ |
75 | 76 | { {0} }, /* raw spd data */ |
board/Marvell/db-88f6820-gp/db-88f6820-gp.c
... | ... | @@ -90,7 +90,8 @@ |
90 | 90 | MV_DDR_DIE_CAP_4GBIT, /* mem_size */ |
91 | 91 | DDR_FREQ_800, /* frequency */ |
92 | 92 | 0, 0, /* cas_wl cas_l */ |
93 | - MV_DDR_TEMP_LOW} }, /* temperature */ | |
93 | + MV_DDR_TEMP_LOW, /* temperature */ | |
94 | + MV_DDR_TIM_DEFAULT} }, /* timing */ | |
94 | 95 | BUS_MASK_32BIT, /* Busses mask */ |
95 | 96 | MV_DDR_CFG_DEFAULT, /* ddr configuration data source */ |
96 | 97 | { {0} }, /* raw spd data */ |
board/gdsys/a38x/controlcenterdc.c
... | ... | @@ -53,7 +53,8 @@ |
53 | 53 | MV_DDR_DIE_CAP_4GBIT, /* mem_size */ |
54 | 54 | DDR_FREQ_533, /* frequency */ |
55 | 55 | 0, 0, /* cas_wl cas_l */ |
56 | - MV_DDR_TEMP_LOW} }, /* temperature */ | |
56 | + MV_DDR_TEMP_LOW, /* temperature */ | |
57 | + MV_DDR_TIM_DEFAULT} }, /* timing */ | |
57 | 58 | BUS_MASK_32BIT, /* Busses mask */ |
58 | 59 | MV_DDR_CFG_DEFAULT, /* ddr configuration data source */ |
59 | 60 | { {0} }, /* raw spd data */ |
board/solidrun/clearfog/clearfog.c
... | ... | @@ -83,7 +83,8 @@ |
83 | 83 | MV_DDR_DIE_CAP_4GBIT, /* mem_size */ |
84 | 84 | DDR_FREQ_800, /* frequency */ |
85 | 85 | 0, 0, /* cas_wl cas_l */ |
86 | - MV_DDR_TEMP_LOW} }, /* temperature */ | |
86 | + MV_DDR_TEMP_LOW, /* temperature */ | |
87 | + MV_DDR_TIM_DEFAULT} }, /* timing */ | |
87 | 88 | BUS_MASK_32BIT, /* Busses mask */ |
88 | 89 | MV_DDR_CFG_DEFAULT, /* ddr configuration data source */ |
89 | 90 | { {0} }, /* raw spd data */ |
drivers/ddr/marvell/a38x/ddr3_training.c
... | ... | @@ -365,6 +365,7 @@ |
365 | 365 | u32 octets_per_if_num = ddr3_tip_dev_attr_get(dev_num, MV_ATTR_OCTET_PER_INTERFACE); |
366 | 366 | struct mv_ddr_topology_map *tm = mv_ddr_topology_map_get(); |
367 | 367 | enum hws_ddr_freq freq = tm->interface_params[0].memory_freq; |
368 | + enum mv_ddr_timing timing; | |
368 | 369 | |
369 | 370 | DEBUG_TRAINING_IP(DEBUG_LEVEL_TRACE, |
370 | 371 | ("Init_controller, do_mrs_phy=%d, is_ctrl64_bit=%d\n", |
371 | 372 | |
... | ... | @@ -603,8 +604,12 @@ |
603 | 604 | DUNIT_CTRL_HIGH_REG, |
604 | 605 | (init_cntr_prm->msys_init << 7), (1 << 7))); |
605 | 606 | |
607 | + timing = tm->interface_params[if_id].timing; | |
608 | + | |
606 | 609 | if (mode_2t != 0xff) { |
607 | 610 | t2t = mode_2t; |
611 | + } else if (timing != MV_DDR_TIM_DEFAULT) { | |
612 | + t2t = (timing == MV_DDR_TIM_2T) ? 1 : 0; | |
608 | 613 | } else { |
609 | 614 | /* calculate number of CS (per interface) */ |
610 | 615 | CHECK_STATUS(calc_cs_num |
... | ... | @@ -1268,6 +1273,7 @@ |
1268 | 1273 | u32 octets_per_if_num = ddr3_tip_dev_attr_get(dev_num, MV_ATTR_OCTET_PER_INTERFACE); |
1269 | 1274 | struct mv_ddr_topology_map *tm = mv_ddr_topology_map_get(); |
1270 | 1275 | unsigned int tclk; |
1276 | + enum mv_ddr_timing timing = tm->interface_params[if_id].timing; | |
1271 | 1277 | |
1272 | 1278 | DEBUG_TRAINING_IP(DEBUG_LEVEL_TRACE, |
1273 | 1279 | ("dev %d access %d IF %d freq %d\n", dev_num, |
... | ... | @@ -1410,6 +1416,8 @@ |
1410 | 1416 | /* Calculate 2T mode */ |
1411 | 1417 | if (mode_2t != 0xff) { |
1412 | 1418 | t2t = mode_2t; |
1419 | + } else if (timing != MV_DDR_TIM_DEFAULT) { | |
1420 | + t2t = (timing == MV_DDR_TIM_2T) ? 1 : 0; | |
1413 | 1421 | } else { |
1414 | 1422 | /* Calculate number of CS per interface */ |
1415 | 1423 | CHECK_STATUS(calc_cs_num(dev_num, if_id, &cs_num)); |
drivers/ddr/marvell/a38x/ddr_topology_def.h
drivers/ddr/marvell/a38x/mv_ddr_plat.c
... | ... | @@ -674,11 +674,6 @@ |
674 | 674 | dfs_low_freq = DFS_LOW_FREQ_VALUE; |
675 | 675 | calibration_update_control = 1; |
676 | 676 | |
677 | -#ifdef CONFIG_ARMADA_38X | |
678 | - /* For a38x only, change to 2T mode to resolve low freq instability */ | |
679 | - mode_2t = 1; | |
680 | -#endif | |
681 | - | |
682 | 677 | ddr3_tip_a38x_get_medium_freq(dev_num, &medium_freq); |
683 | 678 | |
684 | 679 | return MV_OK; |
drivers/ddr/marvell/a38x/mv_ddr_topology.h
... | ... | @@ -36,6 +36,12 @@ |
36 | 36 | MV_DDR_TEMP_HIGH |
37 | 37 | }; |
38 | 38 | |
39 | +enum mv_ddr_timing { | |
40 | + MV_DDR_TIM_DEFAULT, | |
41 | + MV_DDR_TIM_1T, | |
42 | + MV_DDR_TIM_2T | |
43 | +}; | |
44 | + | |
39 | 45 | enum mv_ddr_timing_data { |
40 | 46 | MV_DDR_TCK_AVG_MIN, /* sdram min cycle time (t ck avg min) */ |
41 | 47 | MV_DDR_TAA_MIN, /* min cas latency time (t aa min) */ |