| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * Copyright (C) Marvell International Ltd. and its affiliates |
| */ |
| |
| #ifndef _DDR_TOPOLOGY_DEF_H |
| #define _DDR_TOPOLOGY_DEF_H |
| |
| #include "ddr3_training_ip_def.h" |
| #include "mv_ddr_topology.h" |
| #include "mv_ddr_spd.h" |
| #include "ddr3_logging_def.h" |
| |
| #define MV_DDR_MAX_BUS_NUM 9 |
| #define MV_DDR_MAX_IFACE_NUM 1 |
| |
| struct bus_params { |
| /* Chip Select (CS) bitmask (bits 0-CS0, bit 1- CS1 ...) */ |
| u8 cs_bitmask; |
| |
| /* |
| * mirror enable/disable |
| * (bits 0-CS0 mirroring, bit 1- CS1 mirroring ...) |
| */ |
| int mirror_enable_bitmask; |
| |
| /* DQS Swap (polarity) - true if enable */ |
| int is_dqs_swap; |
| |
| /* CK swap (polarity) - true if enable */ |
| int is_ck_swap; |
| }; |
| |
| struct if_params { |
| /* bus configuration */ |
| struct bus_params as_bus_params[MV_DDR_MAX_BUS_NUM]; |
| |
| /* Speed Bin Table */ |
| enum mv_ddr_speed_bin speed_bin_index; |
| |
| /* sdram device width */ |
| enum mv_ddr_dev_width bus_width; |
| |
| /* total sdram capacity per die, megabits */ |
| enum mv_ddr_die_capacity memory_size; |
| |
| /* The DDR frequency for each interfaces */ |
| enum mv_ddr_freq memory_freq; |
| |
| /* |
| * delay CAS Write Latency |
| * - 0 for using default value (jedec suggested) |
| */ |
| u8 cas_wl; |
| |
| /* |
| * delay CAS Latency |
| * - 0 for using default value (jedec suggested) |
| */ |
| u8 cas_l; |
| |
| /* operation temperature */ |
| enum mv_ddr_temperature interface_temp; |
| |
| /* 2T vs 1T mode (by default computed from number of CSs) */ |
| enum mv_ddr_timing timing; |
| }; |
| |
| /* memory electrical configuration */ |
| struct mv_ddr_mem_edata { |
| enum mv_ddr_rtt_nom_park_evalue rtt_nom; |
| enum mv_ddr_rtt_nom_park_evalue rtt_park[MAX_CS_NUM]; |
| enum mv_ddr_rtt_wr_evalue rtt_wr[MAX_CS_NUM]; |
| enum mv_ddr_dic_evalue dic; |
| }; |
| |
| /* phy electrical configuration */ |
| struct mv_ddr_phy_edata { |
| enum mv_ddr_ohm_evalue drv_data_p; |
| enum mv_ddr_ohm_evalue drv_data_n; |
| enum mv_ddr_ohm_evalue drv_ctrl_p; |
| enum mv_ddr_ohm_evalue drv_ctrl_n; |
| enum mv_ddr_ohm_evalue odt_p[MAX_CS_NUM]; |
| enum mv_ddr_ohm_evalue odt_n[MAX_CS_NUM]; |
| }; |
| |
| /* mac electrical configuration */ |
| struct mv_ddr_mac_edata { |
| enum mv_ddr_odt_cfg_evalue odt_cfg_pat; |
| enum mv_ddr_odt_cfg_evalue odt_cfg_wr; |
| enum mv_ddr_odt_cfg_evalue odt_cfg_rd; |
| }; |
| |
| struct mv_ddr_edata { |
| struct mv_ddr_mem_edata mem_edata; |
| struct mv_ddr_phy_edata phy_edata; |
| struct mv_ddr_mac_edata mac_edata; |
| }; |
| |
| struct mv_ddr_topology_map { |
| /* debug level configuration */ |
| enum mv_ddr_debug_level debug_level; |
| |
| /* Number of interfaces (default is 12) */ |
| u8 if_act_mask; |
| |
| /* Controller configuration per interface */ |
| struct if_params interface_params[MV_DDR_MAX_IFACE_NUM]; |
| |
| /* Bit mask for active buses */ |
| u16 bus_act_mask; |
| |
| /* source of ddr configuration data */ |
| enum mv_ddr_cfg_src cfg_src; |
| |
| /* raw spd data */ |
| union mv_ddr_spd_data spd_data; |
| |
| /* timing parameters */ |
| unsigned int timing_data[MV_DDR_TDATA_LAST]; |
| |
| /* electrical configuration */ |
| struct mv_ddr_edata edata; |
| |
| /* electrical parameters */ |
| unsigned int electrical_data[MV_DDR_EDATA_LAST]; |
| }; |
| |
| enum mv_ddr_iface_mode { |
| MV_DDR_RAR_ENA, |
| MV_DDR_RAR_DIS, |
| }; |
| |
| enum mv_ddr_iface_state { |
| MV_DDR_IFACE_NRDY, /* not ready */ |
| MV_DDR_IFACE_INIT, /* init'd */ |
| MV_DDR_IFACE_RDY, /* ready */ |
| MV_DDR_IFACE_DNE /* does not exist */ |
| }; |
| |
| enum mv_ddr_validation { |
| MV_DDR_VAL_DIS, |
| MV_DDR_VAL_RX, |
| MV_DDR_VAL_TX, |
| MV_DDR_VAL_RX_TX |
| }; |
| |
| struct mv_ddr_iface { |
| /* base addr of ap ddr interface belongs to */ |
| unsigned int ap_base; |
| |
| /* ddr interface id */ |
| unsigned int id; |
| |
| /* ddr interface state */ |
| enum mv_ddr_iface_state state; |
| |
| /* ddr interface mode (rar enabled/disabled) */ |
| enum mv_ddr_iface_mode iface_mode; |
| |
| /* ddr interface base address */ |
| unsigned long long iface_base_addr; |
| |
| /* ddr interface size - ddr flow will update this parameter */ |
| unsigned long long iface_byte_size; |
| |
| /* ddr i2c spd data address */ |
| unsigned int spd_data_addr; |
| |
| /* ddr i2c spd page 0 select address */ |
| unsigned int spd_page_sel_addr; |
| |
| /* ddr interface validation mode */ |
| enum mv_ddr_validation validation; |
| |
| /* ddr interface topology map */ |
| struct mv_ddr_topology_map tm; |
| }; |
| |
| struct mv_ddr_iface *mv_ddr_iface_get(void); |
| |
| /* DDR3 training global configuration parameters */ |
| struct tune_train_params { |
| u32 ck_delay; |
| u32 phy_reg3_val; |
| u32 g_zpri_data; |
| u32 g_znri_data; |
| u32 g_zpri_ctrl; |
| u32 g_znri_ctrl; |
| u32 g_zpodt_data; |
| u32 g_znodt_data; |
| u32 g_zpodt_ctrl; |
| u32 g_znodt_ctrl; |
| u32 g_dic; |
| u32 g_odt_config; |
| u32 g_rtt_nom; |
| u32 g_rtt_wr; |
| u32 g_rtt_park; |
| }; |
| |
| #endif /* _DDR_TOPOLOGY_DEF_H */ |