| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * Copyright (C) Marvell International Ltd. and its affiliates |
| */ |
| |
| #ifndef _DDR3_TRAINING_IP_H_ |
| #define _DDR3_TRAINING_IP_H_ |
| |
| #include "ddr_topology_def.h" |
| |
| #define TIP_ENG_LOCK 0x02000000 |
| #define TIP_TX_DLL_RANGE_MAX 64 |
| |
| #define GET_MIN(arg1, arg2) ((arg1) < (arg2)) ? (arg1) : (arg2) |
| #define GET_MAX(arg1, arg2) ((arg1) < (arg2)) ? (arg2) : (arg1) |
| |
| #define INIT_CONTROLLER_MASK_BIT 0x00000001 |
| #define STATIC_LEVELING_MASK_BIT 0x00000002 |
| #define SET_LOW_FREQ_MASK_BIT 0x00000004 |
| #define LOAD_PATTERN_MASK_BIT 0x00000008 |
| #define SET_MEDIUM_FREQ_MASK_BIT 0x00000010 |
| #define WRITE_LEVELING_MASK_BIT 0x00000020 |
| #define LOAD_PATTERN_2_MASK_BIT 0x00000040 |
| #define READ_LEVELING_MASK_BIT 0x00000080 |
| #define SW_READ_LEVELING_MASK_BIT 0x00000100 |
| #define WRITE_LEVELING_SUPP_MASK_BIT 0x00000200 |
| #define PBS_RX_MASK_BIT 0x00000400 |
| #define PBS_TX_MASK_BIT 0x00000800 |
| #define SET_TARGET_FREQ_MASK_BIT 0x00001000 |
| #define ADJUST_DQS_MASK_BIT 0x00002000 |
| #define WRITE_LEVELING_TF_MASK_BIT 0x00004000 |
| #define LOAD_PATTERN_HIGH_MASK_BIT 0x00008000 |
| #define READ_LEVELING_TF_MASK_BIT 0x00010000 |
| #define WRITE_LEVELING_SUPP_TF_MASK_BIT 0x00020000 |
| #define DM_PBS_TX_MASK_BIT 0x00040000 |
| #define RL_DQS_BURST_MASK_BIT 0x00080000 |
| #define CENTRALIZATION_RX_MASK_BIT 0x00100000 |
| #define CENTRALIZATION_TX_MASK_BIT 0x00200000 |
| #define TX_EMPHASIS_MASK_BIT 0x00400000 |
| #define PER_BIT_READ_LEVELING_TF_MASK_BIT 0x00800000 |
| #define VREF_CALIBRATION_MASK_BIT 0x01000000 |
| #define WRITE_LEVELING_LF_MASK_BIT 0x02000000 |
| |
| /* DDR4 Specific Training Mask bits */ |
| #if defined (CONFIG_DDR4) |
| #define RECEIVER_CALIBRATION_MASK_BIT 0x04000000 |
| #define WL_PHASE_CORRECTION_MASK_BIT 0x08000000 |
| #define DQ_VREF_CALIBRATION_MASK_BIT 0x10000000 |
| #define DQ_MAPPING_MASK_BIT 0x20000000 |
| #define DM_TUNING_MASK_BIT 0x40000000 |
| #endif /* CONFIG_DDR4 */ |
| |
| enum hws_result { |
| TEST_FAILED = 0, |
| TEST_SUCCESS = 1, |
| NO_TEST_DONE = 2 |
| }; |
| |
| enum hws_training_result { |
| RESULT_PER_BIT, |
| RESULT_PER_BYTE |
| }; |
| |
| enum auto_tune_stage { |
| INIT_CONTROLLER, |
| STATIC_LEVELING, |
| SET_LOW_FREQ, |
| LOAD_PATTERN, |
| SET_MEDIUM_FREQ, |
| WRITE_LEVELING, |
| LOAD_PATTERN_2, |
| READ_LEVELING, |
| #if defined(CONFIG_DDR4) |
| SW_READ_LEVELING, |
| #endif /* CONFIG_DDR4 */ |
| WRITE_LEVELING_SUPP, |
| PBS_RX, |
| PBS_TX, |
| SET_TARGET_FREQ, |
| ADJUST_DQS, |
| WRITE_LEVELING_TF, |
| READ_LEVELING_TF, |
| WRITE_LEVELING_SUPP_TF, |
| DM_PBS_TX, |
| VREF_CALIBRATION, |
| CENTRALIZATION_RX, |
| CENTRALIZATION_TX, |
| TX_EMPHASIS, |
| LOAD_PATTERN_HIGH, |
| PER_BIT_READ_LEVELING_TF, |
| #if defined(CONFIG_DDR4) |
| RECEIVER_CALIBRATION, |
| WL_PHASE_CORRECTION, |
| DQ_VREF_CALIBRATION, |
| DM_TUNING, |
| DQ_MAPPING, |
| #endif /* CONFIG_DDR4 */ |
| WRITE_LEVELING_LF, |
| MAX_STAGE_LIMIT |
| }; |
| |
| enum hws_access_type { |
| ACCESS_TYPE_UNICAST = 0, |
| ACCESS_TYPE_MULTICAST = 1 |
| }; |
| |
| enum hws_algo_type { |
| ALGO_TYPE_DYNAMIC, |
| ALGO_TYPE_STATIC |
| }; |
| |
| struct init_cntr_param { |
| int is_ctrl64_bit; |
| int do_mrs_phy; |
| int init_phy; |
| int msys_init; |
| }; |
| |
| struct pattern_info { |
| u8 num_of_phases_tx; |
| u8 tx_burst_size; |
| u8 delay_between_bursts; |
| u8 num_of_phases_rx; |
| u32 start_addr; |
| u8 pattern_len; |
| }; |
| |
| struct cs_element { |
| u8 cs_num; |
| u8 num_of_cs; |
| }; |
| |
| struct hws_tip_freq_config_info { |
| u8 is_supported; |
| u8 bw_per_freq; |
| u8 rate_per_freq; |
| }; |
| |
| struct hws_cs_config_info { |
| u32 cs_reg_value; |
| u32 cs_cbe_value; |
| }; |
| |
| struct dfx_access { |
| u8 pipe; |
| u8 client; |
| }; |
| |
| struct hws_xsb_info { |
| struct dfx_access *dfx_table; |
| }; |
| |
| int ddr3_tip_register_dq_table(u32 dev_num, u32 *table); |
| int hws_ddr3_tip_select_ddr_controller(u32 dev_num, int enable); |
| int hws_ddr3_tip_init_controller(u32 dev_num, |
| struct init_cntr_param *init_cntr_prm); |
| 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 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); |
| #endif /* _DDR3_TRAINING_IP_H_ */ |