ddr: marvell: a38x: allow board specific ODT configuration
[pandora-u-boot.git] / drivers / ddr / marvell / a38x / ddr_topology_def.h
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         /* ODT configuration */
129         u32 odt_config;
130
131         /* Clock enable mask */
132         u32 clk_enable;
133
134         /* Clock delay */
135         int ck_delay;
136 };
137
138 enum mv_ddr_iface_mode {
139         MV_DDR_RAR_ENA,
140         MV_DDR_RAR_DIS,
141 };
142
143 enum mv_ddr_iface_state {
144         MV_DDR_IFACE_NRDY,      /* not ready */
145         MV_DDR_IFACE_INIT,      /* init'd */
146         MV_DDR_IFACE_RDY,       /* ready */
147         MV_DDR_IFACE_DNE        /* does not exist */
148 };
149
150 enum mv_ddr_validation {
151         MV_DDR_VAL_DIS,
152         MV_DDR_VAL_RX,
153         MV_DDR_VAL_TX,
154         MV_DDR_VAL_RX_TX,
155         MV_DDR_MEMORY_CHECK
156 };
157
158 enum mv_ddr_sscg {
159         SSCG_EN,
160         SSCG_DIS,
161 };
162
163 struct mv_ddr_iface {
164         /* base addr of ap ddr interface belongs to */
165         unsigned int ap_base;
166
167         /* ddr interface id */
168         unsigned int id;
169
170         /* ddr interface state */
171         enum mv_ddr_iface_state state;
172
173         /* ddr interface mode (rar enabled/disabled) */
174         enum mv_ddr_iface_mode iface_mode;
175
176         /* ddr interface base address */
177         unsigned long long iface_base_addr;
178
179         /* ddr interface size - ddr flow will update this parameter */
180         unsigned long long iface_byte_size;
181
182         /* ddr i2c spd data address */
183         unsigned int spd_data_addr;
184
185         /* ddr i2c spd page 0 select address */
186         unsigned int spd_page_sel_addr;
187
188         /* ddr interface validation mode */
189         enum mv_ddr_validation validation;
190
191         /* ddr interface validation mode */
192         enum mv_ddr_sscg sscg;
193
194         /* ddr interface topology map */
195         struct mv_ddr_topology_map tm;
196 };
197
198 struct mv_ddr_iface *mv_ddr_iface_get(void);
199
200 /* DDR3 training global configuration parameters */
201 struct tune_train_params {
202         u32 ck_delay;
203         u32 phy_reg3_val;
204         u32 g_zpri_data;
205         u32 g_znri_data;
206         u32 g_zpri_ctrl;
207         u32 g_znri_ctrl;
208         u32 g_zpodt_data;
209         u32 g_znodt_data;
210         u32 g_zpodt_ctrl;
211         u32 g_znodt_ctrl;
212         u32 g_dic;
213         u32 g_odt_config;
214         u32 g_rtt_nom;
215         u32 g_rtt_wr;
216         u32 g_rtt_park;
217 };
218
219 #endif /* _DDR_TOPOLOGY_DEF_H */