ARM: mvebu: Armada-38x DDR training update
v2 cover ARM: mvebu: Armada-38x DDR training update
Hi All,
I had a faulty board to debug at $dayjob. Part of that involved trying the latest DDR training code from Marvell. That didn't fix by problem (I suspect a manufacturing issue with that board).
Since I've done the work anyway I figured I'd send this out. Most of the delta is code movement and tidy up. There's very little behavioural change for A38X. This may however be useful if/when someone starts looking at the newer Armada-3700/3900 SoCs.
Changes in v2:
- record sha1 of the commit we're syncing to.
- Highlight some of the fixes that affect a38x
Chris Packham (1):
ARM: mvebu: a38x: sync ddr training code with mv_ddr-armada-18.09.02
board/CZ.NIC/turris_omnia/turris_omnia.c | 4 +- board/Marvell/db-88f6820-amc/db-88f6820-amc.c | 2 +- board/Marvell/db-88f6820-gp/db-88f6820-gp.c | 2 +- board/gdsys/a38x/controlcenterdc.c | 2 +- board/kobol/helios4/helios4.c | 2 +- board/solidrun/clearfog/clearfog.c | 2 +- drivers/ddr/marvell/a38x/ddr3_debug.c | 414 +-------------- drivers/ddr/marvell/a38x/ddr3_init.c | 91 +--- drivers/ddr/marvell/a38x/ddr3_init.h | 43 +- drivers/ddr/marvell/a38x/ddr3_topology_def.h | 78 --- drivers/ddr/marvell/a38x/ddr3_training.c | 484 +++++++++--------- drivers/ddr/marvell/a38x/ddr3_training_bist.c | 1 + .../a38x/ddr3_training_centralization.c | 3 + drivers/ddr/marvell/a38x/ddr3_training_db.c | 172 ++++--- .../ddr/marvell/a38x/ddr3_training_hw_algo.c | 1 + drivers/ddr/marvell/a38x/ddr3_training_ip.h | 38 -- .../ddr/marvell/a38x/ddr3_training_ip_def.h | 31 -- .../marvell/a38x/ddr3_training_ip_engine.c | 2 + .../marvell/a38x/ddr3_training_ip_engine.h | 1 + .../ddr/marvell/a38x/ddr3_training_ip_flow.h | 91 +--- .../marvell/a38x/ddr3_training_ip_prv_if.h | 10 +- .../ddr/marvell/a38x/ddr3_training_leveling.c | 75 +-- .../ddr/marvell/a38x/ddr3_training_leveling.h | 1 - drivers/ddr/marvell/a38x/ddr3_training_pbs.c | 7 +- drivers/ddr/marvell/a38x/ddr_topology_def.h | 107 +++- drivers/ddr/marvell/a38x/ddr_training_ip_db.h | 2 - drivers/ddr/marvell/a38x/dram_if.h | 13 + .../ddr/marvell/a38x/mv_ddr_build_message.c | 2 +- drivers/ddr/marvell/a38x/mv_ddr_common.h | 38 +- drivers/ddr/marvell/a38x/mv_ddr_plat.c | 181 ++++--- drivers/ddr/marvell/a38x/mv_ddr_plat.h | 12 +- drivers/ddr/marvell/a38x/mv_ddr_regs.h | 19 + drivers/ddr/marvell/a38x/mv_ddr_spd.c | 16 +- drivers/ddr/marvell/a38x/mv_ddr_topology.c | 215 ++++++-- drivers/ddr/marvell/a38x/mv_ddr_topology.h | 214 +++++++- drivers/ddr/marvell/a38x/mv_ddr_training_db.h | 40 ++ drivers/ddr/marvell/a38x/xor.c | 8 +- 37 files changed, 1163 insertions(+), 1261 deletions(-) delete mode 100644 drivers/ddr/marvell/a38x/ddr3_topology_def.h create mode 100644 drivers/ddr/marvell/a38x/dram_if.h create mode 100644 drivers/ddr/marvell/a38x/mv_ddr_training_db.h
Signature · 1 line
2.19.2
PATCH v2 1/1 ARM: mvebu: a38x: sync ddr training code with mv_ddr-armada-18.09.02
This syncs drivers/ddr/marvell/a38x/ with the mv_ddr-armada-18.09 branch of https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell.git.
Specifically this syncs with commit 99d772547314 ("Bump mv_ddr to release armada-18.09.2").
The complete log of changes is best obtained from the mv-ddr-marvell.git repository but some relevant highlights are:
ddr3: add missing txsdll parameter
ddr3: fix tfaw timimg parameter
ddr3: fix trrd timimg parameter
merge ddr3 topology header file with mv_ddr_topology one
mv_ddr: a38x: fix zero memory size scrubbing issue
The upstream code is incorporated omitting the portions not relevant to Armada-38x and DDR3. After that a semi-automated step is used to drop unused features with unifdef
find drivers/ddr/marvell/a38x/ -name '*.[ch]' | \
xargs unifdef -m -UMV_DDR -UMV_DDR_ATF -UCONFIG_DDR4 \
-UCONFIG_APN806 -UCONFIG_MC_STATIC \
-UCONFIG_MC_STATIC_PRINT -UCONFIG_PHY_STATIC \
-UCONFIG_64BIT -UCONFIG_A3700 -UA3900 -UA80X0 \
-UA70X0---
I've tested this on the db-88f6820-amc and build tested the other affected boards.
Changes in v2:
- record sha1 of the commit we're syncing to.
- Highlight some of the fixes that affect a38x
board/CZ.NIC/turris_omnia/turris_omnia.c | 4 +- board/Marvell/db-88f6820-amc/db-88f6820-amc.c | 2 +- board/Marvell/db-88f6820-gp/db-88f6820-gp.c | 2 +- board/gdsys/a38x/controlcenterdc.c | 2 +- board/kobol/helios4/helios4.c | 2 +- board/solidrun/clearfog/clearfog.c | 2 +- drivers/ddr/marvell/a38x/ddr3_debug.c | 414 +-------------- drivers/ddr/marvell/a38x/ddr3_init.c | 91 +--- drivers/ddr/marvell/a38x/ddr3_init.h | 43 +- drivers/ddr/marvell/a38x/ddr3_topology_def.h | 78 --- drivers/ddr/marvell/a38x/ddr3_training.c | 484 +++++++++--------- drivers/ddr/marvell/a38x/ddr3_training_bist.c | 1 + .../a38x/ddr3_training_centralization.c | 3 + drivers/ddr/marvell/a38x/ddr3_training_db.c | 172 ++++--- .../ddr/marvell/a38x/ddr3_training_hw_algo.c | 1 + drivers/ddr/marvell/a38x/ddr3_training_ip.h | 38 -- .../ddr/marvell/a38x/ddr3_training_ip_def.h | 31 -- .../marvell/a38x/ddr3_training_ip_engine.c | 2 + .../marvell/a38x/ddr3_training_ip_engine.h | 1 + .../ddr/marvell/a38x/ddr3_training_ip_flow.h | 91 +--- .../marvell/a38x/ddr3_training_ip_prv_if.h | 10 +- .../ddr/marvell/a38x/ddr3_training_leveling.c | 75 +-- .../ddr/marvell/a38x/ddr3_training_leveling.h | 1 - drivers/ddr/marvell/a38x/ddr3_training_pbs.c | 7 +- drivers/ddr/marvell/a38x/ddr_topology_def.h | 107 +++- drivers/ddr/marvell/a38x/ddr_training_ip_db.h | 2 - drivers/ddr/marvell/a38x/dram_if.h | 13 + .../ddr/marvell/a38x/mv_ddr_build_message.c | 2 +- drivers/ddr/marvell/a38x/mv_ddr_common.h | 38 +- drivers/ddr/marvell/a38x/mv_ddr_plat.c | 181 ++++--- drivers/ddr/marvell/a38x/mv_ddr_plat.h | 12 +- drivers/ddr/marvell/a38x/mv_ddr_regs.h | 19 + drivers/ddr/marvell/a38x/mv_ddr_spd.c | 16 +- drivers/ddr/marvell/a38x/mv_ddr_topology.c | 215 ++++++-- drivers/ddr/marvell/a38x/mv_ddr_topology.h | 214 +++++++- drivers/ddr/marvell/a38x/mv_ddr_training_db.h | 40 ++ drivers/ddr/marvell/a38x/xor.c | 8 +- 37 files changed, 1163 insertions(+), 1261 deletions(-) delete mode 100644 drivers/ddr/marvell/a38x/ddr3_topology_def.h create mode 100644 drivers/ddr/marvell/a38x/dram_if.h create mode 100644 drivers/ddr/marvell/a38x/mv_ddr_training_db.h
board/CZ.NIC/turris_omnia/turris_omnia.c +2 -2
@@ -212,7 +212,7 @@ static struct mv_ddr_topology_map board_topology_map_1g = {SPEED_BIN_DDR_1600K ,/* speed_bin */ MV_DDR_DEV_WIDTH_16BIT ,/* memory_width */ MV_DDR_DIE_CAP_4GBIT ,/* mem_size */ -DDR_FREQ_800 ,/* frequency */ +MV_DDR_FREQ_800 ,/* frequency */ 0 ,0 ,/* cas_wl cas_l */ MV_DDR_TEMP_NORMAL ,/* temperature */ MV_DDR_TIM_2T} }, /* timing */
@@ -234,7 +234,7 @@ static struct mv_ddr_topology_map board_topology_map_2g = {SPEED_BIN_DDR_1600K ,/* speed_bin */ MV_DDR_DEV_WIDTH_16BIT ,/* memory_width */ MV_DDR_DIE_CAP_8GBIT ,/* mem_size */ -DDR_FREQ_800 ,/* frequency */ +MV_DDR_FREQ_800 ,/* frequency */ 0 ,0 ,/* cas_wl cas_l */ MV_DDR_TEMP_NORMAL ,/* temperature */ MV_DDR_TIM_2T} }, /* timing */
board/Marvell/db-88f6820-amc/db-88f6820-amc.c +1 -1
@@ -67,7 +67,7 @@ static struct mv_ddr_topology_map board_topology_map = {SPEED_BIN_DDR_1866L ,/* speed_bin */ MV_DDR_DEV_WIDTH_8BIT ,/* memory_width */ MV_DDR_DIE_CAP_2GBIT ,/* mem_size */ -DDR_FREQ_800 ,/* frequency */ +MV_DDR_FREQ_800 ,/* frequency */ 0 ,0 ,/* cas_wl cas_l */ MV_DDR_TEMP_LOW ,/* temperature */ MV_DDR_TIM_DEFAULT} }, /* timing */
board/Marvell/db-88f6820-gp/db-88f6820-gp.c +1 -1
@@ -88,7 +88,7 @@ static struct mv_ddr_topology_map board_topology_map = {SPEED_BIN_DDR_1866L ,/* speed_bin */ MV_DDR_DEV_WIDTH_8BIT ,/* memory_width */ MV_DDR_DIE_CAP_4GBIT ,/* mem_size */ -DDR_FREQ_800 ,/* frequency */ +MV_DDR_FREQ_800 ,/* frequency */ 0 ,0 ,/* cas_wl cas_l */ MV_DDR_TEMP_LOW ,/* temperature */ MV_DDR_TIM_DEFAULT} }, /* timing */
board/gdsys/a38x/controlcenterdc.c +1 -1
@@ -51,7 +51,7 @@ static struct mv_ddr_topology_map ddr_topology_map = {SPEED_BIN_DDR_1600K ,/* speed_bin */ MV_DDR_DEV_WIDTH_16BIT ,/* memory_width */ MV_DDR_DIE_CAP_4GBIT ,/* mem_size */ -DDR_FREQ_533 ,/* frequency */ +MV_DDR_FREQ_533 ,/* frequency */ 0 ,0 ,/* cas_wl cas_l */ MV_DDR_TEMP_LOW ,/* temperature */ MV_DDR_TIM_DEFAULT} }, /* timing */
board/kobol/helios4/helios4.c +1 -1
@@ -78,7 +78,7 @@ static struct mv_ddr_topology_map board_topology_map = {SPEED_BIN_DDR_1600K ,/* speed_bin */ MV_DDR_DEV_WIDTH_16BIT ,/* memory_width */ MV_DDR_DIE_CAP_8GBIT ,/* mem_size */ -DDR_FREQ_800 ,/* frequency */ +MV_DDR_FREQ_800 ,/* frequency */ 0 ,0 ,/* cas_wl cas_l */ MV_DDR_TEMP_LOW ,/* temperature */ MV_DDR_TIM_DEFAULT} }, /* timing */
board/solidrun/clearfog/clearfog.c +1 -1
@@ -65,7 +65,7 @@ static struct mv_ddr_topology_map board_topology_map = {SPEED_BIN_DDR_1600K ,/* speed_bin */ MV_DDR_DEV_WIDTH_16BIT ,/* memory_width */ MV_DDR_DIE_CAP_4GBIT ,/* mem_size */ -DDR_FREQ_800 ,/* frequency */ +MV_DDR_FREQ_800 ,/* frequency */ 0 ,0 ,/* cas_wl cas_l */ MV_DDR_TEMP_LOW ,/* temperature */ MV_DDR_TIM_DEFAULT} }, /* timing */
drivers/ddr/marvell/a38x/ddr3_debug.c +25 -389
500 lines not on this page · raw message
drivers/ddr/marvell/a38x/ddr3_init.c +4 -87
135 lines not on this page · raw message
drivers/ddr/marvell/a38x/ddr3_init.h +18 -25
117 lines not on this page · raw message
drivers/ddr/marvell/a38x/ddr3_topology_def.h deleted +0 -78
78 lines not on this page · raw message
drivers/ddr/marvell/a38x/ddr3_training.c +243 -241
763 lines not on this page · raw message
drivers/ddr/marvell/a38x/ddr3_training_bist.c +1 -0
@@ -4,6 +4,7 @@*/ #include "ddr3_init.h" +#include "mv_ddr_regs.h" static u32 bist_offset =32 ;enum hws_pattern sweep_pattern =PATTERN_KILLER_DQ0 ;
drivers/ddr/marvell/a38x/ddr3_training_centralization.c +3 -0
@@ -4,6 +4,7 @@*/ #include "ddr3_init.h" +#include "mv_ddr_regs.h" #define VALIDATE_WIN_LENGTH (e1, e2, maxsize) \ (((e2) + 1 > (e1) + (u8)MIN_WINDOW_SIZE) && \
@@ -698,6 +699,8 @@ int ddr3_tip_print_centralization_result(u32 dev_num)u32 octets_per_if_num =ddr3_tip_dev_attr_get (dev_num,MV_ATTR_OCTET_PER_INTERFACE );struct mv_ddr_topology_map *tm =mv_ddr_topology_map_get (); + dev_num = dev_num; +printf ("Centralization Results\n" );printf ("I/F0 Result[0 - success 1-fail 2 - state_2 3 - state_3] ...\n" );for (if_id =0 ; if_id <=MAX_INTERFACE_NUM -1 ; if_id++) {
drivers/ddr/marvell/a38x/ddr3_training_db.c +113 -59
286 lines not on this page · raw message
drivers/ddr/marvell/a38x/ddr3_training_hw_algo.c +1 -0
@@ -4,6 +4,7 @@*/ #include "ddr3_init.h" +#include "mv_ddr_regs.h" #define VREF_INITIAL_STEP 3#define VREF_SECOND_STEP 1
drivers/ddr/marvell/a38x/ddr3_training_ip.h +0 -38
@@ -6,12 +6,8 @@#ifndef _DDR3_TRAINING_IP_H_#define _DDR3_TRAINING_IP_H_ -#include "ddr3_training_ip_def.h" #include "ddr_topology_def.h" -#include "ddr_training_ip_db.h" -#define MAX_CS_NUM 4 -#define MAX_TOTAL_BUS_NUM (MAX_INTERFACE_NUM * MAX_BUS_NUM)#define TIP_ENG_LOCK 0x02000000#define TIP_TX_DLL_RANGE_MAX 64
@@ -112,40 +108,11 @@ struct pattern_info {u8 pattern_len; }; -/* CL value for each frequency */ -struct cl_val_per_freq { -u8 cl_val[DDR_FREQ_LAST ]; -}; -struct cs_element {u8 cs_num;u8 num_of_cs; }; -struct mode_info { -/* 32 bits representing MRS bits */ -u32 reg_mr0[MAX_INTERFACE_NUM ]; -u32 reg_mr1[MAX_INTERFACE_NUM ]; -u32 reg_mr2[MAX_INTERFACE_NUM ]; -u32 reg_m_r3[MAX_INTERFACE_NUM ]; -/* -* Each element in array represent read_data_sample register delay for -* a specific interface. -* Each register, 4 bits[0+CS*8 to 4+CS*8] represent Number of DDR -* cycles from read command until data is ready to be fetched from -* the PHY, when accessing CS. -*/ -u32 read_data_sample[MAX_INTERFACE_NUM ]; -/* -* Each element in array represent read_data_sample register delay for -* a specific interface. -* Each register, 4 bits[0+CS*8 to 4+CS*8] represent the total delay -* from read command until opening the read mask, when accessing CS. -* This field defines the delay in DDR cycles granularity. -*/ -u32 read_data_ready[MAX_INTERFACE_NUM ]; -}; -struct hws_tip_freq_config_info {u8 is_supported;u8 bw_per_freq;
@@ -173,12 +140,7 @@ int hws_ddr3_tip_init_controller(u32 dev_num,int hws_ddr3_tip_load_topology_map (u32 dev_num,struct mv_ddr_topology_map *topology);int hws_ddr3_tip_run_alg (u32 dev_num,enum hws_algo_type algo_type); -int hws_ddr3_tip_mode_read (u32 dev_num,struct mode_info *mode_info); -int hws_ddr3_tip_read_training_result (u32 dev_num, -enum hws_result result[MAX_STAGE_LIMIT ][MAX_INTERFACE_NUM ]);int ddr3_tip_is_pup_lock (u32 *pup_buf,enum hws_training_result read_mode);u8 ddr3_tip_get_buf_min (u8 *buf_ptr);u8 ddr3_tip_get_buf_max (u8 *buf_ptr); -uint64_t mv_ddr_get_memory_size_per_cs_in_bits (void ); -uint64_t mv_ddr_get_total_memory_size_in_bits (void );#endif /* _DDR3_TRAINING_IP_H_ */
drivers/ddr/marvell/a38x/ddr3_training_ip_def.h +0 -31
@@ -75,32 +75,6 @@#define GET_RESULT_STATE (res) (res)#define SET_RESULT_STATE (res, state) (res = state) -#define _1K 0x00000400 -#define _4K 0x00001000 -#define _8K 0x00002000 -#define _16K 0x00004000 -#define _32K 0x00008000 -#define _64K 0x00010000 -#define _128K 0x00020000 -#define _256K 0x00040000 -#define _512K 0x00080000 - -#define _1M 0x00100000 -#define _2M 0x00200000 -#define _4M 0x00400000 -#define _8M 0x00800000 -#define _16M 0x01000000 -#define _32M 0x02000000 -#define _64M 0x04000000 -#define _128M 0x08000000 -#define _256M 0x10000000 -#define _512M 0x20000000 - -#define _1G 0x40000000 -#define _2G 0x80000000 -#define _4G 0x100000000 -#define _8G 0x200000000 -#define ADDR_SIZE_512MB 0x04000000#define ADDR_SIZE_1GB 0x08000000#define ADDR_SIZE_2GB 0x10000000
@@ -126,11 +100,6 @@ enum hws_search_dir {HWS_SEARCH_DIR_LIMIT }; -enum hws_page_size { -PAGE_SIZE_1K , -PAGE_SIZE_2K -}; -enum hws_operation {OPERATION_READ =0 ,OPERATION_WRITE =1
drivers/ddr/marvell/a38x/ddr3_training_ip_engine.c +2 -0
@@ -4,6 +4,8 @@*/ #include "ddr3_init.h" +#include "mv_ddr_regs.h" +#include "ddr_training_ip_db.h" #define PATTERN_1 0x55555555#define PATTERN_2 0xaaaaaaaa
drivers/ddr/marvell/a38x/ddr3_training_ip_engine.h +1 -0
@@ -8,6 +8,7 @@#include "ddr3_training_ip_def.h" #include "ddr3_training_ip_flow.h" +#include "ddr3_training_ip_pbs.h" #define EDGE_1 0#define EDGE_2 1
drivers/ddr/marvell/a38x/ddr3_training_ip_flow.h +8 -83
136 lines not on this page · raw message
drivers/ddr/marvell/a38x/ddr3_training_ip_prv_if.h +5 -5
@@ -28,15 +28,15 @@ typedef int (*HWS_TIP_DUNIT_REG_WRITE_FUNC_PTR)( u8 dev_num, enum hws_access_type interface_access, u32 if_id, u32 offset, u32 data, u32 mask);typedef int (*HWS_TIP_GET_FREQ_CONFIG_INFO )( -u8 dev_num,enum hws_ddr_freq freq, +u8 dev_num,enum mv_ddr_freq freq,struct hws_tip_freq_config_info *freq_config_info);typedef int (*HWS_TIP_GET_DEVICE_INFO )(u8 dev_num,struct ddr3_device_info *info_ptr);typedef int (*HWS_GET_CS_CONFIG_FUNC_PTR )(u8 dev_num,u32 cs_mask,struct hws_cs_config_info *cs_info);typedef int (*HWS_SET_FREQ_DIVIDER_FUNC_PTR )( -u8 dev_num,u32 if_id,enum hws_ddr_freq freq); -typedef int (*HWS_GET_INIT_FREQ )(u8 dev_num,enum hws_ddr_freq *freq); +u8 dev_num,u32 if_id,enum mv_ddr_freq freq); +typedef int (*HWS_GET_INIT_FREQ )(u8 dev_num,enum mv_ddr_freq *freq);typedef int (*HWS_TRAINING_IP_IF_WRITE_FUNC_PTR )(u32 dev_num,enum hws_access_type access_type,u32 dunit_id,u32 reg_addr,u32 data,u32 mask);
@@ -54,7 +54,7 @@ typedef int (*HWS_TRAINING_IP_ALGO_RUN_FUNC_PTR)( u32 dev_num, enum hws_algo_type algo_type);typedef int (*HWS_TRAINING_IP_SET_FREQ_FUNC_PTR )(u32 dev_num,enum hws_access_type access_type,u32 if_id, -enum hws_ddr_freq frequency); +enum mv_ddr_freq frequency);typedef int (*HWS_TRAINING_IP_INIT_CONTROLLER_FUNC_PTR )(u32 dev_num,struct init_cntr_param *init_cntr_prm);typedef int (*HWS_TRAINING_IP_PBS_RX_FUNC_PTR )(u32 dev_num);
@@ -64,7 +64,7 @@ typedef int (*HWS_TRAINING_IP_SELECT_CONTROLLER_FUNC_PTR)(typedef int (*HWS_TRAINING_IP_TOPOLOGY_MAP_LOAD_FUNC_PTR )(u32 dev_num,struct mv_ddr_topology_map *tm);typedef int (*HWS_TRAINING_IP_STATIC_CONFIG_FUNC_PTR )( -u32 dev_num,enum hws_ddr_freq frequency, +u32 dev_num,enum mv_ddr_freq frequency,enum hws_static_config_type static_config_type,u32 if_id);typedef int (*HWS_TRAINING_IP_EXTERNAL_READ_PTR )(u32 dev_num,u32 if_id,u32 ddr_addr,u32 num_bursts,u32 *data);
drivers/ddr/marvell/a38x/ddr3_training_leveling.c +27 -48
171 lines not on this page · raw message
drivers/ddr/marvell/a38x/ddr3_training_leveling.h +0 -1
@@ -11,6 +11,5 @@int ddr3_tip_print_wl_supp_result (u32 dev_num);int ddr3_tip_calc_cs_mask (u32 dev_num,u32 if_id,u32 effective_cs,u32 *cs_mask); -u32 ddr3_tip_max_cs_get (u32 dev_num);#endif /* _DDR3_TRAINING_LEVELING_H_ */
drivers/ddr/marvell/a38x/ddr3_training_pbs.c +5 -2
@@ -4,6 +4,9 @@*/ #include "ddr3_init.h" +#include "mv_ddr_training_db.h" +#include "mv_ddr_common.h" +#include "mv_ddr_regs.h" #define TYPICAL_PBS_VALUE 12
@@ -33,7 +36,7 @@ static u8 pup_state[MAX_INTERFACE_NUM][MAX_BUS_NUM];int ddr3_tip_pbs (u32 dev_num,enum pbs_dir pbs_mode) {u32 res0[MAX_INTERFACE_NUM ]; -int adll_tap =MEGA / freq_val[medium_freq] /64 ; +int adll_tap =MEGA /mv_ddr_freq_get (medium_freq) /64 ;int pad_num =0 ;enum hws_search_dir search_dir = (pbs_mode ==PBS_RX_MODE ) ?HWS_HIGH2LOW :HWS_LOW2HIGH ;
@@ -921,7 +924,7 @@ int ddr3_tip_pbs_tx(u32 uidev_num)int ddr3_tip_print_all_pbs_result (u32 dev_num) {u32 curr_cs; -u32 max_cs =ddr3_tip_max_cs_get (dev_num); +unsigned int max_cs =mv_ddr_cs_num_get ();for (curr_cs =0 ; curr_cs < max_cs; curr_cs++) {ddr3_tip_print_pbs_result (dev_num, curr_cs,PBS_RX_MODE );
drivers/ddr/marvell/a38x/ddr_topology_def.h +97 -10
151 lines not on this page · raw message
drivers/ddr/marvell/a38x/ddr_training_ip_db.h +0 -2
@@ -6,10 +6,8 @@#ifndef _DDR_TRAINING_IP_DB_H_#define _DDR_TRAINING_IP_DB_H_ -#include "ddr_topology_def.h" #include "ddr3_training_ip_db.h" -u32 speed_bin_table (u8 index,enum speed_bin_table_elements element);u32 pattern_table_get_word (u32 dev_num,enum hws_pattern type,u8 index);#endif /* _DDR3_TRAINING_IP_DB_H_ */
drivers/ddr/marvell/a38x/dram_if.h new file +13 -0
@@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* +* Copyright (C) 2016 Marvell International Ltd. +*/ + +#ifndef _DRAM_IF_H_ +#define _DRAM_IF_H_ + +/* TODO: update atf to this new prototype */ +int dram_init (void ); +void dram_mmap_config (void ); +unsigned long long dram_iface_mem_sz_get (void ); +#endif /* _DRAM_IF_H_ */
drivers/ddr/marvell/a38x/mv_ddr_build_message.c +1 -1
@@ -1,3 +1,3 @@// SPDX-License-Identifier: GPL-2.0 const char mv_ddr_build_message[] ="" ; -const char mv_ddr_version_string[] ="mv_ddr: mv_ddr-armada-17.10.4" ; +const char mv_ddr_version_string[] ="mv_ddr: mv_ddr-armada-18.09.2" ;
drivers/ddr/marvell/a38x/mv_ddr_common.h +36 -2
@@ -9,10 +9,44 @@extern const char mv_ddr_build_message[];extern const char mv_ddr_version_string[]; -#define MV_DDR_NUM_BITS_IN_BYTE 8 -#define MV_DDR_MEGA_BITS (1024 * 1024) +#define _1K 0x00000400 +#define _4K 0x00001000 +#define _8K 0x00002000 +#define _16K 0x00004000 +#define _32K 0x00008000 +#define _64K 0x00010000 +#define _128K 0x00020000 +#define _256K 0x00040000 +#define _512K 0x00080000 + +#define _1M 0x00100000 +#define _2M 0x00200000 +#define _4M 0x00400000 +#define _8M 0x00800000 +#define _16M 0x01000000 +#define _32M 0x02000000 +#define _64M 0x04000000 +#define _128M 0x08000000 +#define _256M 0x10000000 +#define _512M 0x20000000 + +#define _1G 0x40000000 +#define _2G 0x80000000 +#define _4G 0x100000000 +#define _8G 0x200000000 +#define _16G 0x400000000 +#define _32G 0x800000000 +#define _64G 0x1000000000 +#define _128G 0x2000000000 + +#define MEGA 1000000 +#define MV_DDR_MEGABYTE (1024 * 1024)#define MV_DDR_32_BITS_MASK 0xffffffff +#define GET_MAX_VALUE (x, y) \ + (((x) > (y)) ? (x) : (y)) + +void mv_ddr_ver_print (void );unsigned int ceil_div (unsigned int x,unsigned int y);unsigned int time_to_nclk (unsigned int t,unsigned int tclk);int round_div (unsigned int dividend,unsigned int divisor,unsigned int *quotient);
drivers/ddr/marvell/a38x/mv_ddr_plat.c +88 -93
318 lines not on this page · raw message
drivers/ddr/marvell/a38x/mv_ddr_regs.h +19 -0
Lines of this file are not shown. View the raw message.
drivers/ddr/marvell/a38x/mv_ddr_topology.c +181 -34
215 lines not on this page · raw message
drivers/ddr/marvell/a38x/mv_ddr_topology.h +207 -7
214 lines not on this page · raw message
drivers/ddr/marvell/a38x/mv_ddr_training_db.h new file +40 -0
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Signature · 1 line
2.19.2
Part of the diff is not shown here. View the raw message.
PATCH v2 1/1 ARM: mvebu: a38x: sync ddr training code with mv_ddr-armada-18.09.02
Quoted 18 lines · Chris Packham
This syncs
drivers/ddr/marvell/a38x/with the mv_ddr-armada-18.09 branch of https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell.git.
Specifically this syncs with commit99d772547314("Bumpmv_ddrto release armada-18.09.2").The complete log of changes is best obtained from the mv-ddr-marvell.git repository but some relevant highlights are:
ddr3: add missing txsdll parameter
ddr3: fix tfaw timimg parameter
ddr3: fix trrd timimg parameter
merge ddr3 topology header file withmv_ddr_topologyone
mv_ddr: a38x: fix zero memory size scrubbing issueThe upstream code is incorporated omitting the portions not relevant to Armada-38x and DDR3. After that a semi-automated step is used to drop unused features with unifdef
Quoted 8 lines
find drivers/ddr/marvell/a38x/ -name '*.[ch]' | \ xargs unifdef -m -UMV_DDR -UMV_DDR_ATF -UCONFIG_DDR4 \ -UCONFIG_APN806 -UCONFIG_MC_STATIC \ -UCONFIG_MC_STATIC_PRINT -UCONFIG_PHY_STATIC \ -UCONFIG_64BIT -UCONFIG_A3700 -UA3900 -UA80X0 \ -UA70X0Signed-off-by Chris Packham <[email protected]>
Thanks,
Stefan
PATCH v2 1/1 ARM: mvebu: a38x: sync ddr training code with mv_ddr-armada-18.09.02
In reply to Chris PackhamHi Chris,
Quoted 18 lines · Chris Packham
This syncs
drivers/ddr/marvell/a38x/with the mv_ddr-armada-18.09 branch of https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell.git.
Specifically this syncs with commit99d772547314("Bumpmv_ddrto release armada-18.09.2").The complete log of changes is best obtained from the mv-ddr-marvell.git repository but some relevant highlights are:
ddr3: add missing txsdll parameter
ddr3: fix tfaw timimg parameter
ddr3: fix trrd timimg parameter
merge ddr3 topology header file withmv_ddr_topologyone
mv_ddr: a38x: fix zero memory size scrubbing issueThe upstream code is incorporated omitting the portions not relevant to Armada-38x and DDR3. After that a semi-automated step is used to drop unused features with unifdef
Quoted 8 lines
find drivers/ddr/marvell/a38x/ -name '*.[ch]' | \ xargs unifdef -m -UMV_DDR -UMV_DDR_ATF -UCONFIG_DDR4 \ -UCONFIG_APN806 -UCONFIG_MC_STATIC \ -UCONFIG_MC_STATIC_PRINT -UCONFIG_PHY_STATIC \ -UCONFIG_64BIT -UCONFIG_A3700 -UA3900 -UA80X0 \ -UA70X0Signed-off-by Chris Packham <[email protected]>
Tested on SolidRun Clearfog Base with Armada 388.
baruch
Signature · 3 lines
http://baruch.siach.name/blog/ ~. .~ Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
- baruch at tkos.co.il - tel: +972.52.368.4656, http://www.tkos.co.il -PATCH v2 1/1 ARM: mvebu: a38x: sync ddr training code with mv_ddr-armada-18.09.02
In reply to Chris PackhamQuoted 18 lines · Chris Packham
This syncs
drivers/ddr/marvell/a38x/with the mv_ddr-armada-18.09 branch of https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell.git.
Specifically this syncs with commit99d772547314("Bumpmv_ddrto release armada-18.09.2").The complete log of changes is best obtained from the mv-ddr-marvell.git repository but some relevant highlights are:
ddr3: add missing txsdll parameter
ddr3: fix tfaw timimg parameter
ddr3: fix trrd timimg parameter
merge ddr3 topology header file withmv_ddr_topologyone
mv_ddr: a38x: fix zero memory size scrubbing issueThe upstream code is incorporated omitting the portions not relevant to Armada-38x and DDR3. After that a semi-automated step is used to drop unused features with unifdef
Quoted 8 lines
find drivers/ddr/marvell/a38x/ -name '*.[ch]' | \ xargs unifdef -m -UMV_DDR -UMV_DDR_ATF -UCONFIG_DDR4 \ -UCONFIG_APN806 -UCONFIG_MC_STATIC \ -UCONFIG_MC_STATIC_PRINT -UCONFIG_PHY_STATIC \ -UCONFIG_64BIT -UCONFIG_A3700 -UA3900 -UA80X0 \ -UA70X0Signed-off-by Chris Packham <[email protected]>
Applied to u-boot-marvell/master.
Thanks,
Stefan