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