]> git.sur5r.net Git - u-boot/blob - drivers/ddr/marvell/a38x/ddr3_training_ip_prv_if.h
ARM: mvebu: a38x: sync ddr training code with upstream
[u-boot] / drivers / ddr / marvell / a38x / ddr3_training_ip_prv_if.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (C) Marvell International Ltd. and its affiliates
4  */
5
6 #ifndef _DDR3_TRAINING_IP_PRV_IF_H
7 #define _DDR3_TRAINING_IP_PRV_IF_H
8
9 #include "ddr3_training_ip.h"
10 #include "ddr3_training_ip_flow.h"
11 #include "ddr3_training_ip_bist.h"
12
13 enum hws_static_config_type {
14         WRITE_LEVELING_STATIC,
15         READ_LEVELING_STATIC
16 };
17
18 struct ddr3_device_info {
19         u32 device_id;
20         u32 ck_delay;
21 };
22
23 typedef int (*HWS_TIP_DUNIT_MUX_SELECT_FUNC_PTR)(u8 dev_num, int enable);
24 typedef int (*HWS_TIP_DUNIT_REG_READ_FUNC_PTR)(
25         u8 dev_num, enum hws_access_type interface_access, u32 if_id,
26         u32 offset, u32 *data, u32 mask);
27 typedef int (*HWS_TIP_DUNIT_REG_WRITE_FUNC_PTR)(
28         u8 dev_num, enum hws_access_type interface_access, u32 if_id,
29         u32 offset, u32 data, u32 mask);
30 typedef int (*HWS_TIP_GET_FREQ_CONFIG_INFO)(
31         u8 dev_num, enum hws_ddr_freq freq,
32         struct hws_tip_freq_config_info *freq_config_info);
33 typedef int (*HWS_TIP_GET_DEVICE_INFO)(
34         u8 dev_num, struct ddr3_device_info *info_ptr);
35 typedef int (*HWS_GET_CS_CONFIG_FUNC_PTR)(
36         u8 dev_num, u32 cs_mask, struct hws_cs_config_info *cs_info);
37 typedef int (*HWS_SET_FREQ_DIVIDER_FUNC_PTR)(
38         u8 dev_num, u32 if_id, enum hws_ddr_freq freq);
39 typedef int (*HWS_GET_INIT_FREQ)(u8 dev_num, enum hws_ddr_freq *freq);
40 typedef int (*HWS_TRAINING_IP_IF_WRITE_FUNC_PTR)(
41         u32 dev_num, enum hws_access_type access_type, u32 dunit_id,
42         u32 reg_addr, u32 data, u32 mask);
43 typedef int (*HWS_TRAINING_IP_IF_READ_FUNC_PTR)(
44         u32 dev_num, enum hws_access_type access_type, u32 dunit_id,
45         u32 reg_addr, u32 *data, u32 mask);
46 typedef int (*HWS_TRAINING_IP_BUS_WRITE_FUNC_PTR)(
47         u32 dev_num, enum hws_access_type dunit_access_type, u32 if_id,
48         enum hws_access_type phy_access_type, u32 phy_id,
49         enum hws_ddr_phy phy_type, u32 reg_addr, u32 data);
50 typedef int (*HWS_TRAINING_IP_BUS_READ_FUNC_PTR)(
51         u32 dev_num, u32 if_id, enum hws_access_type phy_access_type,
52         u32 phy_id, enum hws_ddr_phy phy_type, u32 reg_addr, u32 *data);
53 typedef int (*HWS_TRAINING_IP_ALGO_RUN_FUNC_PTR)(
54         u32 dev_num, enum hws_algo_type algo_type);
55 typedef int (*HWS_TRAINING_IP_SET_FREQ_FUNC_PTR)(
56         u32 dev_num, enum hws_access_type access_type, u32 if_id,
57         enum hws_ddr_freq frequency);
58 typedef int (*HWS_TRAINING_IP_INIT_CONTROLLER_FUNC_PTR)(
59         u32 dev_num, struct init_cntr_param *init_cntr_prm);
60 typedef int (*HWS_TRAINING_IP_PBS_RX_FUNC_PTR)(u32 dev_num);
61 typedef int (*HWS_TRAINING_IP_PBS_TX_FUNC_PTR)(u32 dev_num);
62 typedef int (*HWS_TRAINING_IP_SELECT_CONTROLLER_FUNC_PTR)(
63         u32 dev_num, int enable);
64 typedef int (*HWS_TRAINING_IP_TOPOLOGY_MAP_LOAD_FUNC_PTR)(
65         u32 dev_num, struct mv_ddr_topology_map *tm);
66 typedef int (*HWS_TRAINING_IP_STATIC_CONFIG_FUNC_PTR)(
67         u32 dev_num, enum hws_ddr_freq frequency,
68         enum hws_static_config_type static_config_type, u32 if_id);
69 typedef int (*HWS_TRAINING_IP_EXTERNAL_READ_PTR)(
70         u32 dev_num, u32 if_id, u32 ddr_addr, u32 num_bursts, u32 *data);
71 typedef int (*HWS_TRAINING_IP_EXTERNAL_WRITE_PTR)(
72         u32 dev_num, u32 if_id, u32 ddr_addr, u32 num_bursts, u32 *data);
73 typedef int (*HWS_TRAINING_IP_BIST_ACTIVATE)(
74         u32 dev_num, enum hws_pattern pattern, enum hws_access_type access_type,
75         u32 if_num, enum hws_dir direction,
76         enum hws_stress_jump addr_stress_jump,
77         enum hws_pattern_duration duration,
78         enum hws_bist_operation oper_type, u32 offset, u32 cs_num,
79         u32 pattern_addr_length);
80 typedef int (*HWS_TRAINING_IP_BIST_READ_RESULT)(
81         u32 dev_num, u32 if_id, struct bist_result *pst_bist_result);
82 typedef int (*HWS_TRAINING_IP_LOAD_TOPOLOGY)(u32 dev_num, u32 config_num);
83 typedef int (*HWS_TRAINING_IP_READ_LEVELING)(u32 dev_num, u32 config_num);
84 typedef int (*HWS_TRAINING_IP_WRITE_LEVELING)(u32 dev_num, u32 config_num);
85 typedef u32 (*HWS_TRAINING_IP_GET_TEMP)(u8 dev_num);
86 typedef u8 (*HWS_TRAINING_IP_GET_RATIO)(u32 freq);
87
88 struct hws_tip_config_func_db {
89         HWS_TIP_DUNIT_MUX_SELECT_FUNC_PTR tip_dunit_mux_select_func;
90         void (*mv_ddr_dunit_read)(u32 addr, u32 mask, u32 *data);
91         void (*mv_ddr_dunit_write)(u32 addr, u32 mask, u32 data);
92         HWS_TIP_GET_FREQ_CONFIG_INFO tip_get_freq_config_info_func;
93         HWS_TIP_GET_DEVICE_INFO tip_get_device_info_func;
94         HWS_SET_FREQ_DIVIDER_FUNC_PTR tip_set_freq_divider_func;
95         HWS_GET_CS_CONFIG_FUNC_PTR tip_get_cs_config_info;
96         HWS_TRAINING_IP_GET_TEMP tip_get_temperature;
97         HWS_TRAINING_IP_GET_RATIO tip_get_clock_ratio;
98         HWS_TRAINING_IP_EXTERNAL_READ_PTR tip_external_read;
99         HWS_TRAINING_IP_EXTERNAL_WRITE_PTR tip_external_write;
100         int (*mv_ddr_phy_read)(enum hws_access_type phy_access,
101                                u32 phy, enum hws_ddr_phy phy_type,
102                                u32 reg_addr, u32 *data);
103         int (*mv_ddr_phy_write)(enum hws_access_type phy_access,
104                                 u32 phy, enum hws_ddr_phy phy_type,
105                                 u32 reg_addr, u32 data,
106                                 enum hws_operation op_type);
107 };
108
109 int ddr3_tip_init_config_func(u32 dev_num,
110                               struct hws_tip_config_func_db *config_func);
111 int ddr3_tip_register_xsb_info(u32 dev_num,
112                                struct hws_xsb_info *xsb_info_table);
113 enum hws_result *ddr3_tip_get_result_ptr(u32 stage);
114 int ddr3_set_freq_config_info(struct hws_tip_freq_config_info *table);
115 int print_device_info(u8 dev_num);
116
117 #endif /* _DDR3_TRAINING_IP_PRV_IF_H */