183d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0 */ 2f1df9364SStefan Roese /* 3f1df9364SStefan Roese * Copyright (C) Marvell International Ltd. and its affiliates 4f1df9364SStefan Roese */ 5f1df9364SStefan Roese 6f1df9364SStefan Roese #ifndef _DDR_TOPOLOGY_DEF_H 7f1df9364SStefan Roese #define _DDR_TOPOLOGY_DEF_H 8f1df9364SStefan Roese 9f1df9364SStefan Roese #include "ddr3_training_ip_def.h" 102b4ffbf6SChris Packham #include "mv_ddr_topology.h" 112b4ffbf6SChris Packham #include "mv_ddr_spd.h" 122b4ffbf6SChris Packham #include "ddr3_logging_def.h" 1390bcc3d3SMarek Behún 14*ebb1a593SChris Packham #define MV_DDR_MAX_BUS_NUM 9 15*ebb1a593SChris Packham #define MV_DDR_MAX_IFACE_NUM 1 16*ebb1a593SChris Packham 17f1df9364SStefan Roese struct bus_params { 18f1df9364SStefan Roese /* Chip Select (CS) bitmask (bits 0-CS0, bit 1- CS1 ...) */ 19f1df9364SStefan Roese u8 cs_bitmask; 20f1df9364SStefan Roese 21f1df9364SStefan Roese /* 22f1df9364SStefan Roese * mirror enable/disable 23f1df9364SStefan Roese * (bits 0-CS0 mirroring, bit 1- CS1 mirroring ...) 24f1df9364SStefan Roese */ 25f1df9364SStefan Roese int mirror_enable_bitmask; 26f1df9364SStefan Roese 27f1df9364SStefan Roese /* DQS Swap (polarity) - true if enable */ 28f1df9364SStefan Roese int is_dqs_swap; 29f1df9364SStefan Roese 30f1df9364SStefan Roese /* CK swap (polarity) - true if enable */ 31f1df9364SStefan Roese int is_ck_swap; 32f1df9364SStefan Roese }; 33f1df9364SStefan Roese 34f1df9364SStefan Roese struct if_params { 35f1df9364SStefan Roese /* bus configuration */ 36*ebb1a593SChris Packham struct bus_params as_bus_params[MV_DDR_MAX_BUS_NUM]; 37f1df9364SStefan Roese 38f1df9364SStefan Roese /* Speed Bin Table */ 39*ebb1a593SChris Packham enum mv_ddr_speed_bin speed_bin_index; 40f1df9364SStefan Roese 412b4ffbf6SChris Packham /* sdram device width */ 422b4ffbf6SChris Packham enum mv_ddr_dev_width bus_width; 43f1df9364SStefan Roese 442b4ffbf6SChris Packham /* total sdram capacity per die, megabits */ 452b4ffbf6SChris Packham enum mv_ddr_die_capacity memory_size; 46f1df9364SStefan Roese 47f1df9364SStefan Roese /* The DDR frequency for each interfaces */ 48*ebb1a593SChris Packham enum mv_ddr_freq memory_freq; 49f1df9364SStefan Roese 50f1df9364SStefan Roese /* 51f1df9364SStefan Roese * delay CAS Write Latency 52f1df9364SStefan Roese * - 0 for using default value (jedec suggested) 53f1df9364SStefan Roese */ 54f1df9364SStefan Roese u8 cas_wl; 55f1df9364SStefan Roese 56f1df9364SStefan Roese /* 57f1df9364SStefan Roese * delay CAS Latency 58f1df9364SStefan Roese * - 0 for using default value (jedec suggested) 59f1df9364SStefan Roese */ 60f1df9364SStefan Roese u8 cas_l; 61f1df9364SStefan Roese 62f1df9364SStefan Roese /* operation temperature */ 632b4ffbf6SChris Packham enum mv_ddr_temperature interface_temp; 64e6f61622SChris Packham 65e6f61622SChris Packham /* 2T vs 1T mode (by default computed from number of CSs) */ 66e6f61622SChris Packham enum mv_ddr_timing timing; 67f1df9364SStefan Roese }; 68f1df9364SStefan Roese 69*ebb1a593SChris Packham /* memory electrical configuration */ 70*ebb1a593SChris Packham struct mv_ddr_mem_edata { 71*ebb1a593SChris Packham enum mv_ddr_rtt_nom_park_evalue rtt_nom; 72*ebb1a593SChris Packham enum mv_ddr_rtt_nom_park_evalue rtt_park[MAX_CS_NUM]; 73*ebb1a593SChris Packham enum mv_ddr_rtt_wr_evalue rtt_wr[MAX_CS_NUM]; 74*ebb1a593SChris Packham enum mv_ddr_dic_evalue dic; 75*ebb1a593SChris Packham }; 76*ebb1a593SChris Packham 77*ebb1a593SChris Packham /* phy electrical configuration */ 78*ebb1a593SChris Packham struct mv_ddr_phy_edata { 79*ebb1a593SChris Packham enum mv_ddr_ohm_evalue drv_data_p; 80*ebb1a593SChris Packham enum mv_ddr_ohm_evalue drv_data_n; 81*ebb1a593SChris Packham enum mv_ddr_ohm_evalue drv_ctrl_p; 82*ebb1a593SChris Packham enum mv_ddr_ohm_evalue drv_ctrl_n; 83*ebb1a593SChris Packham enum mv_ddr_ohm_evalue odt_p[MAX_CS_NUM]; 84*ebb1a593SChris Packham enum mv_ddr_ohm_evalue odt_n[MAX_CS_NUM]; 85*ebb1a593SChris Packham }; 86*ebb1a593SChris Packham 87*ebb1a593SChris Packham /* mac electrical configuration */ 88*ebb1a593SChris Packham struct mv_ddr_mac_edata { 89*ebb1a593SChris Packham enum mv_ddr_odt_cfg_evalue odt_cfg_pat; 90*ebb1a593SChris Packham enum mv_ddr_odt_cfg_evalue odt_cfg_wr; 91*ebb1a593SChris Packham enum mv_ddr_odt_cfg_evalue odt_cfg_rd; 92*ebb1a593SChris Packham }; 93*ebb1a593SChris Packham 94*ebb1a593SChris Packham struct mv_ddr_edata { 95*ebb1a593SChris Packham struct mv_ddr_mem_edata mem_edata; 96*ebb1a593SChris Packham struct mv_ddr_phy_edata phy_edata; 97*ebb1a593SChris Packham struct mv_ddr_mac_edata mac_edata; 98*ebb1a593SChris Packham }; 99*ebb1a593SChris Packham 1002b4ffbf6SChris Packham struct mv_ddr_topology_map { 1012b4ffbf6SChris Packham /* debug level configuration */ 1022b4ffbf6SChris Packham enum mv_ddr_debug_level debug_level; 1032b4ffbf6SChris Packham 104f1df9364SStefan Roese /* Number of interfaces (default is 12) */ 105f1df9364SStefan Roese u8 if_act_mask; 106f1df9364SStefan Roese 107f1df9364SStefan Roese /* Controller configuration per interface */ 108*ebb1a593SChris Packham struct if_params interface_params[MV_DDR_MAX_IFACE_NUM]; 109f1df9364SStefan Roese 110f1df9364SStefan Roese /* Bit mask for active buses */ 1112b4ffbf6SChris Packham u16 bus_act_mask; 1122b4ffbf6SChris Packham 1132b4ffbf6SChris Packham /* source of ddr configuration data */ 1142b4ffbf6SChris Packham enum mv_ddr_cfg_src cfg_src; 1152b4ffbf6SChris Packham 1162b4ffbf6SChris Packham /* raw spd data */ 1172b4ffbf6SChris Packham union mv_ddr_spd_data spd_data; 1182b4ffbf6SChris Packham 1192b4ffbf6SChris Packham /* timing parameters */ 1202b4ffbf6SChris Packham unsigned int timing_data[MV_DDR_TDATA_LAST]; 121*ebb1a593SChris Packham 122*ebb1a593SChris Packham /* electrical configuration */ 123*ebb1a593SChris Packham struct mv_ddr_edata edata; 124*ebb1a593SChris Packham 125*ebb1a593SChris Packham /* electrical parameters */ 126*ebb1a593SChris Packham unsigned int electrical_data[MV_DDR_EDATA_LAST]; 127f1df9364SStefan Roese }; 128f1df9364SStefan Roese 129*ebb1a593SChris Packham enum mv_ddr_iface_mode { 130*ebb1a593SChris Packham MV_DDR_RAR_ENA, 131*ebb1a593SChris Packham MV_DDR_RAR_DIS, 132*ebb1a593SChris Packham }; 133*ebb1a593SChris Packham 134*ebb1a593SChris Packham enum mv_ddr_iface_state { 135*ebb1a593SChris Packham MV_DDR_IFACE_NRDY, /* not ready */ 136*ebb1a593SChris Packham MV_DDR_IFACE_INIT, /* init'd */ 137*ebb1a593SChris Packham MV_DDR_IFACE_RDY, /* ready */ 138*ebb1a593SChris Packham MV_DDR_IFACE_DNE /* does not exist */ 139*ebb1a593SChris Packham }; 140*ebb1a593SChris Packham 141*ebb1a593SChris Packham enum mv_ddr_validation { 142*ebb1a593SChris Packham MV_DDR_VAL_DIS, 143*ebb1a593SChris Packham MV_DDR_VAL_RX, 144*ebb1a593SChris Packham MV_DDR_VAL_TX, 145*ebb1a593SChris Packham MV_DDR_VAL_RX_TX 146*ebb1a593SChris Packham }; 147*ebb1a593SChris Packham 148*ebb1a593SChris Packham struct mv_ddr_iface { 149*ebb1a593SChris Packham /* base addr of ap ddr interface belongs to */ 150*ebb1a593SChris Packham unsigned int ap_base; 151*ebb1a593SChris Packham 152*ebb1a593SChris Packham /* ddr interface id */ 153*ebb1a593SChris Packham unsigned int id; 154*ebb1a593SChris Packham 155*ebb1a593SChris Packham /* ddr interface state */ 156*ebb1a593SChris Packham enum mv_ddr_iface_state state; 157*ebb1a593SChris Packham 158*ebb1a593SChris Packham /* ddr interface mode (rar enabled/disabled) */ 159*ebb1a593SChris Packham enum mv_ddr_iface_mode iface_mode; 160*ebb1a593SChris Packham 161*ebb1a593SChris Packham /* ddr interface base address */ 162*ebb1a593SChris Packham unsigned long long iface_base_addr; 163*ebb1a593SChris Packham 164*ebb1a593SChris Packham /* ddr interface size - ddr flow will update this parameter */ 165*ebb1a593SChris Packham unsigned long long iface_byte_size; 166*ebb1a593SChris Packham 167*ebb1a593SChris Packham /* ddr i2c spd data address */ 168*ebb1a593SChris Packham unsigned int spd_data_addr; 169*ebb1a593SChris Packham 170*ebb1a593SChris Packham /* ddr i2c spd page 0 select address */ 171*ebb1a593SChris Packham unsigned int spd_page_sel_addr; 172*ebb1a593SChris Packham 173*ebb1a593SChris Packham /* ddr interface validation mode */ 174*ebb1a593SChris Packham enum mv_ddr_validation validation; 175*ebb1a593SChris Packham 176*ebb1a593SChris Packham /* ddr interface topology map */ 177*ebb1a593SChris Packham struct mv_ddr_topology_map tm; 178*ebb1a593SChris Packham }; 179*ebb1a593SChris Packham 180*ebb1a593SChris Packham struct mv_ddr_iface *mv_ddr_iface_get(void); 181*ebb1a593SChris Packham 182f1df9364SStefan Roese /* DDR3 training global configuration parameters */ 183f1df9364SStefan Roese struct tune_train_params { 184f1df9364SStefan Roese u32 ck_delay; 185f1df9364SStefan Roese u32 phy_reg3_val; 1862b4ffbf6SChris Packham u32 g_zpri_data; 1872b4ffbf6SChris Packham u32 g_znri_data; 1882b4ffbf6SChris Packham u32 g_zpri_ctrl; 1892b4ffbf6SChris Packham u32 g_znri_ctrl; 1902b4ffbf6SChris Packham u32 g_zpodt_data; 1912b4ffbf6SChris Packham u32 g_znodt_data; 1922b4ffbf6SChris Packham u32 g_zpodt_ctrl; 1932b4ffbf6SChris Packham u32 g_znodt_ctrl; 1942b4ffbf6SChris Packham u32 g_dic; 1952b4ffbf6SChris Packham u32 g_odt_config; 1962b4ffbf6SChris Packham u32 g_rtt_nom; 1972b4ffbf6SChris Packham u32 g_rtt_wr; 1982b4ffbf6SChris Packham u32 g_rtt_park; 199f1df9364SStefan Roese }; 200f1df9364SStefan Roese 201f1df9364SStefan Roese #endif /* _DDR_TOPOLOGY_DEF_H */ 202