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