blob: e6fe8a04289bf2d07eee80f2421c70eb303001a1 [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001/* SPDX-License-Identifier: GPL-2.0 */
Stefan Roese5ffceb82015-03-26 15:36:56 +01002/*
3 * Copyright (C) Marvell International Ltd. and its affiliates
Stefan Roese5ffceb82015-03-26 15:36:56 +01004 */
5
6#ifndef _DDR_TOPOLOGY_DEF_H
7#define _DDR_TOPOLOGY_DEF_H
8
9#include "ddr3_training_ip_def.h"
Chris Packham1a07d212018-05-10 13:28:29 +120010#include "mv_ddr_topology.h"
11#include "mv_ddr_spd.h"
12#include "ddr3_logging_def.h"
Marek BehĂșnf8bf75f2017-06-09 19:28:40 +020013
Chris Packham4bf81db2018-12-03 14:26:49 +130014#define MV_DDR_MAX_BUS_NUM 9
15#define MV_DDR_MAX_IFACE_NUM 1
16
Stefan Roese5ffceb82015-03-26 15:36:56 +010017struct 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
34struct if_params {
35 /* bus configuration */
Chris Packham4bf81db2018-12-03 14:26:49 +130036 struct bus_params as_bus_params[MV_DDR_MAX_BUS_NUM];
Stefan Roese5ffceb82015-03-26 15:36:56 +010037
38 /* Speed Bin Table */
Chris Packham4bf81db2018-12-03 14:26:49 +130039 enum mv_ddr_speed_bin speed_bin_index;
Stefan Roese5ffceb82015-03-26 15:36:56 +010040
Chris Packham1a07d212018-05-10 13:28:29 +120041 /* sdram device width */
42 enum mv_ddr_dev_width bus_width;
Stefan Roese5ffceb82015-03-26 15:36:56 +010043
Chris Packham1a07d212018-05-10 13:28:29 +120044 /* total sdram capacity per die, megabits */
45 enum mv_ddr_die_capacity memory_size;
Stefan Roese5ffceb82015-03-26 15:36:56 +010046
47 /* The DDR frequency for each interfaces */
Chris Packham4bf81db2018-12-03 14:26:49 +130048 enum mv_ddr_freq memory_freq;
Stefan Roese5ffceb82015-03-26 15:36:56 +010049
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 */
Chris Packham1a07d212018-05-10 13:28:29 +120063 enum mv_ddr_temperature interface_temp;
Chris Packham3a09e132018-05-10 13:28:30 +120064
65 /* 2T vs 1T mode (by default computed from number of CSs) */
66 enum mv_ddr_timing timing;
Stefan Roese5ffceb82015-03-26 15:36:56 +010067};
68
Chris Packham4bf81db2018-12-03 14:26:49 +130069/* memory electrical configuration */
70struct 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 */
78struct 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 */
88struct 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
94struct 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
Chris Packham1a07d212018-05-10 13:28:29 +1200100struct mv_ddr_topology_map {
101 /* debug level configuration */
102 enum mv_ddr_debug_level debug_level;
103
Stefan Roese5ffceb82015-03-26 15:36:56 +0100104 /* Number of interfaces (default is 12) */
105 u8 if_act_mask;
106
107 /* Controller configuration per interface */
Chris Packham4bf81db2018-12-03 14:26:49 +1300108 struct if_params interface_params[MV_DDR_MAX_IFACE_NUM];
Stefan Roese5ffceb82015-03-26 15:36:56 +0100109
Stefan Roese5ffceb82015-03-26 15:36:56 +0100110 /* Bit mask for active buses */
Chris Packham1a07d212018-05-10 13:28:29 +1200111 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];
Chris Packham4bf81db2018-12-03 14:26:49 +1300121
122 /* electrical configuration */
123 struct mv_ddr_edata edata;
124
125 /* electrical parameters */
126 unsigned int electrical_data[MV_DDR_EDATA_LAST];
127};
128
129enum mv_ddr_iface_mode {
130 MV_DDR_RAR_ENA,
131 MV_DDR_RAR_DIS,
Stefan Roese5ffceb82015-03-26 15:36:56 +0100132};
133
Chris Packham4bf81db2018-12-03 14:26:49 +1300134enum 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
141enum 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
148struct 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
180struct mv_ddr_iface *mv_ddr_iface_get(void);
181
Stefan Roese5ffceb82015-03-26 15:36:56 +0100182/* DDR3 training global configuration parameters */
183struct tune_train_params {
184 u32 ck_delay;
Stefan Roese5ffceb82015-03-26 15:36:56 +0100185 u32 phy_reg3_val;
Chris Packham1a07d212018-05-10 13:28:29 +1200186 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;
Stefan Roese5ffceb82015-03-26 15:36:56 +0100199};
200
201#endif /* _DDR_TOPOLOGY_DEF_H */