xref: /openbmc/u-boot/drivers/ddr/marvell/a38x/mv_ddr_topology.h (revision 8cb8c0c6a83bef319023ac2e967a85e1e92e18bc)
12b4ffbf6SChris Packham /* SPDX-License-Identifier: GPL-2.0 */
22b4ffbf6SChris Packham /*
32b4ffbf6SChris Packham  * Copyright (C) Marvell International Ltd. and its affiliates
42b4ffbf6SChris Packham  */
52b4ffbf6SChris Packham 
62b4ffbf6SChris Packham #ifndef _MV_DDR_TOPOLOGY_H
72b4ffbf6SChris Packham #define _MV_DDR_TOPOLOGY_H
82b4ffbf6SChris Packham 
9*ebb1a593SChris Packham #define MAX_CS_NUM	4
10*ebb1a593SChris Packham 
11*ebb1a593SChris Packham enum mv_ddr_speed_bin {
12*ebb1a593SChris Packham 	SPEED_BIN_DDR_800D,
13*ebb1a593SChris Packham 	SPEED_BIN_DDR_800E,
14*ebb1a593SChris Packham 	SPEED_BIN_DDR_1066E,
15*ebb1a593SChris Packham 	SPEED_BIN_DDR_1066F,
16*ebb1a593SChris Packham 	SPEED_BIN_DDR_1066G,
17*ebb1a593SChris Packham 	SPEED_BIN_DDR_1333F,
18*ebb1a593SChris Packham 	SPEED_BIN_DDR_1333G,
19*ebb1a593SChris Packham 	SPEED_BIN_DDR_1333H,
20*ebb1a593SChris Packham 	SPEED_BIN_DDR_1333J,
21*ebb1a593SChris Packham 	SPEED_BIN_DDR_1600G,
22*ebb1a593SChris Packham 	SPEED_BIN_DDR_1600H,
23*ebb1a593SChris Packham 	SPEED_BIN_DDR_1600J,
24*ebb1a593SChris Packham 	SPEED_BIN_DDR_1600K,
25*ebb1a593SChris Packham 	SPEED_BIN_DDR_1866J,
26*ebb1a593SChris Packham 	SPEED_BIN_DDR_1866K,
27*ebb1a593SChris Packham 	SPEED_BIN_DDR_1866L,
28*ebb1a593SChris Packham 	SPEED_BIN_DDR_1866M,
29*ebb1a593SChris Packham 	SPEED_BIN_DDR_2133K,
30*ebb1a593SChris Packham 	SPEED_BIN_DDR_2133L,
31*ebb1a593SChris Packham 	SPEED_BIN_DDR_2133M,
32*ebb1a593SChris Packham 	SPEED_BIN_DDR_2133N,
33*ebb1a593SChris Packham 
34*ebb1a593SChris Packham 	SPEED_BIN_DDR_1333H_EXT,
35*ebb1a593SChris Packham 	SPEED_BIN_DDR_1600K_EXT,
36*ebb1a593SChris Packham 	SPEED_BIN_DDR_1866M_EXT
37*ebb1a593SChris Packham };
38*ebb1a593SChris Packham 
39*ebb1a593SChris Packham enum mv_ddr_freq {
40*ebb1a593SChris Packham 	MV_DDR_FREQ_LOW_FREQ,
41*ebb1a593SChris Packham 	MV_DDR_FREQ_400,
42*ebb1a593SChris Packham 	MV_DDR_FREQ_533,
43*ebb1a593SChris Packham 	MV_DDR_FREQ_667,
44*ebb1a593SChris Packham 	MV_DDR_FREQ_800,
45*ebb1a593SChris Packham 	MV_DDR_FREQ_933,
46*ebb1a593SChris Packham 	MV_DDR_FREQ_1066,
47*ebb1a593SChris Packham 	MV_DDR_FREQ_311,
48*ebb1a593SChris Packham 	MV_DDR_FREQ_333,
49*ebb1a593SChris Packham 	MV_DDR_FREQ_467,
50*ebb1a593SChris Packham 	MV_DDR_FREQ_850,
51*ebb1a593SChris Packham 	MV_DDR_FREQ_600,
52*ebb1a593SChris Packham 	MV_DDR_FREQ_300,
53*ebb1a593SChris Packham 	MV_DDR_FREQ_900,
54*ebb1a593SChris Packham 	MV_DDR_FREQ_360,
55*ebb1a593SChris Packham 	MV_DDR_FREQ_1000,
56*ebb1a593SChris Packham 	MV_DDR_FREQ_LAST,
57*ebb1a593SChris Packham 	MV_DDR_FREQ_SAR
58*ebb1a593SChris Packham };
59*ebb1a593SChris Packham 
60*ebb1a593SChris Packham enum mv_ddr_speed_bin_timing {
61*ebb1a593SChris Packham 	SPEED_BIN_TRCD,
62*ebb1a593SChris Packham 	SPEED_BIN_TRP,
63*ebb1a593SChris Packham 	SPEED_BIN_TRAS,
64*ebb1a593SChris Packham 	SPEED_BIN_TRC,
65*ebb1a593SChris Packham 	SPEED_BIN_TRRD1K,
66*ebb1a593SChris Packham 	SPEED_BIN_TRRD2K,
67*ebb1a593SChris Packham 	SPEED_BIN_TPD,
68*ebb1a593SChris Packham 	SPEED_BIN_TFAW1K,
69*ebb1a593SChris Packham 	SPEED_BIN_TFAW2K,
70*ebb1a593SChris Packham 	SPEED_BIN_TWTR,
71*ebb1a593SChris Packham 	SPEED_BIN_TRTP,
72*ebb1a593SChris Packham 	SPEED_BIN_TWR,
73*ebb1a593SChris Packham 	SPEED_BIN_TMOD,
74*ebb1a593SChris Packham 	SPEED_BIN_TXPDLL,
75*ebb1a593SChris Packham 	SPEED_BIN_TXSDLL
76*ebb1a593SChris Packham };
77*ebb1a593SChris Packham 
782b4ffbf6SChris Packham /* ddr bus masks */
792b4ffbf6SChris Packham #define BUS_MASK_32BIT			0xf
802b4ffbf6SChris Packham #define BUS_MASK_32BIT_ECC		0x1f
812b4ffbf6SChris Packham #define BUS_MASK_16BIT			0x3
822b4ffbf6SChris Packham #define BUS_MASK_16BIT_ECC		0x13
832b4ffbf6SChris Packham #define BUS_MASK_16BIT_ECC_PUP3		0xb
842b4ffbf6SChris Packham #define MV_DDR_64BIT_BUS_MASK		0xff
852b4ffbf6SChris Packham #define MV_DDR_64BIT_ECC_PUP8_BUS_MASK	0x1ff
862b4ffbf6SChris Packham #define MV_DDR_32BIT_ECC_PUP8_BUS_MASK	0x10f
872b4ffbf6SChris Packham 
88*ebb1a593SChris Packham #define MV_DDR_CS_BITMASK_1CS		0x1
89*ebb1a593SChris Packham #define MV_DDR_CS_BITMASK_2CS		0x3
90*ebb1a593SChris Packham 
91*ebb1a593SChris Packham #define MV_DDR_ONE_SPHY_PER_DUNIT	1
92*ebb1a593SChris Packham #define MV_DDR_TWO_SPHY_PER_DUNIT	2
93*ebb1a593SChris Packham 
942b4ffbf6SChris Packham /* source of ddr configuration data */
952b4ffbf6SChris Packham enum mv_ddr_cfg_src {
962b4ffbf6SChris Packham 	MV_DDR_CFG_DEFAULT,	/* based on data in mv_ddr_topology_map structure */
972b4ffbf6SChris Packham 	MV_DDR_CFG_SPD,		/* based on data in spd */
982b4ffbf6SChris Packham 	MV_DDR_CFG_USER,	/* based on data from user */
992b4ffbf6SChris Packham 	MV_DDR_CFG_STATIC,	/* based on data from user in register-value format */
1002b4ffbf6SChris Packham 	MV_DDR_CFG_LAST
1012b4ffbf6SChris Packham };
1022b4ffbf6SChris Packham 
1032b4ffbf6SChris Packham enum mv_ddr_temperature {
1042b4ffbf6SChris Packham 	MV_DDR_TEMP_LOW,
1052b4ffbf6SChris Packham 	MV_DDR_TEMP_NORMAL,
1062b4ffbf6SChris Packham 	MV_DDR_TEMP_HIGH
1072b4ffbf6SChris Packham };
1082b4ffbf6SChris Packham 
109e6f61622SChris Packham enum mv_ddr_timing {
110e6f61622SChris Packham 	MV_DDR_TIM_DEFAULT,
111e6f61622SChris Packham 	MV_DDR_TIM_1T,
112e6f61622SChris Packham 	MV_DDR_TIM_2T
113e6f61622SChris Packham };
114e6f61622SChris Packham 
1152b4ffbf6SChris Packham enum mv_ddr_timing_data {
1162b4ffbf6SChris Packham 	MV_DDR_TCK_AVG_MIN, /* sdram min cycle time (t ck avg min) */
1172b4ffbf6SChris Packham 	MV_DDR_TAA_MIN, /* min cas latency time (t aa min) */
1182b4ffbf6SChris Packham 	MV_DDR_TRFC1_MIN, /* min refresh recovery delay time (t rfc1 min) */
1192b4ffbf6SChris Packham 	MV_DDR_TWR_MIN, /* min write recovery time (t wr min) */
1202b4ffbf6SChris Packham 	MV_DDR_TRCD_MIN, /* min ras to cas delay time (t rcd min) */
1212b4ffbf6SChris Packham 	MV_DDR_TRP_MIN, /* min row precharge delay time (t rp min) */
1222b4ffbf6SChris Packham 	MV_DDR_TRC_MIN, /* min active to active/refresh delay time (t rc min) */
1232b4ffbf6SChris Packham 	MV_DDR_TRAS_MIN, /* min active to precharge delay time (t ras min) */
1242b4ffbf6SChris Packham 	MV_DDR_TRRD_S_MIN, /* min activate to activate delay time (t rrd_s min), diff bank group */
1252b4ffbf6SChris Packham 	MV_DDR_TRRD_L_MIN, /* min activate to activate delay time (t rrd_l min), same bank group */
126*ebb1a593SChris Packham 	MV_DDR_TCCD_L_MIN, /* min cas to cas delay time (t ccd_l min), same bank group */
1272b4ffbf6SChris Packham 	MV_DDR_TFAW_MIN, /* min four activate window delay time (t faw min) */
1282b4ffbf6SChris Packham 	MV_DDR_TWTR_S_MIN, /* min write to read time (t wtr s min), diff bank group */
1292b4ffbf6SChris Packham 	MV_DDR_TWTR_L_MIN, /* min write to read time (t wtr l min), same bank group */
1302b4ffbf6SChris Packham 	MV_DDR_TDATA_LAST
1312b4ffbf6SChris Packham };
1322b4ffbf6SChris Packham 
133*ebb1a593SChris Packham enum mv_ddr_electrical_data {
134*ebb1a593SChris Packham 	MV_DDR_CK_DLY,
135*ebb1a593SChris Packham 	MV_DDR_PHY_REG3,
136*ebb1a593SChris Packham 	MV_DDR_ZPRI_DATA,
137*ebb1a593SChris Packham 	MV_DDR_ZNRI_DATA,
138*ebb1a593SChris Packham 	MV_DDR_ZPRI_CTRL,
139*ebb1a593SChris Packham 	MV_DDR_ZNRI_CTRL,
140*ebb1a593SChris Packham 	MV_DDR_ZPODT_DATA,
141*ebb1a593SChris Packham 	MV_DDR_ZNODT_DATA,
142*ebb1a593SChris Packham 	MV_DDR_ZPODT_CTRL,
143*ebb1a593SChris Packham 	MV_DDR_ZNODT_CTRL,
144*ebb1a593SChris Packham 	MV_DDR_DIC,
145*ebb1a593SChris Packham 	MV_DDR_ODT_CFG,
146*ebb1a593SChris Packham 	MV_DDR_RTT_NOM,
147*ebb1a593SChris Packham 	MV_DDR_RTT_WR,
148*ebb1a593SChris Packham 	MV_DDR_RTT_PARK,
149*ebb1a593SChris Packham 	MV_DDR_EDATA_LAST
150*ebb1a593SChris Packham };
151*ebb1a593SChris Packham 
152*ebb1a593SChris Packham /* memory electrical configuration values */
153*ebb1a593SChris Packham enum mv_ddr_rtt_nom_park_evalue {
154*ebb1a593SChris Packham 	MV_DDR_RTT_NOM_PARK_RZQ_DISABLE,
155*ebb1a593SChris Packham 	MV_DDR_RTT_NOM_PARK_RZQ_DIV4,	/* 60-Ohm; RZQ = 240-Ohm */
156*ebb1a593SChris Packham 	MV_DDR_RTT_NOM_PARK_RZQ_DIV2,	/* 120-Ohm; RZQ = 240-Ohm */
157*ebb1a593SChris Packham 	MV_DDR_RTT_NOM_PARK_RZQ_DIV6,	/* 40-Ohm; RZQ = 240-Ohm */
158*ebb1a593SChris Packham 	MV_DDR_RTT_NOM_PARK_RZQ_DIV1,	/* 240-Ohm; RZQ = 240-Ohm */
159*ebb1a593SChris Packham 	MV_DDR_RTT_NOM_PARK_RZQ_DIV5,	/* 48-Ohm; RZQ = 240-Ohm */
160*ebb1a593SChris Packham 	MV_DDR_RTT_NOM_PARK_RZQ_DIV3,	/* 80-Ohm; RZQ = 240-Ohm */
161*ebb1a593SChris Packham 	MV_DDR_RTT_NOM_PARK_RZQ_DIV7,	/* 34-Ohm; RZQ = 240-Ohm */
162*ebb1a593SChris Packham 	MV_DDR_RTT_NOM_PARK_RZQ_LAST
163*ebb1a593SChris Packham };
164*ebb1a593SChris Packham 
165*ebb1a593SChris Packham enum mv_ddr_rtt_wr_evalue {
166*ebb1a593SChris Packham 	MV_DDR_RTT_WR_DYN_ODT_OFF,
167*ebb1a593SChris Packham 	MV_DDR_RTT_WR_RZQ_DIV2,	/* 120-Ohm; RZQ = 240-Ohm */
168*ebb1a593SChris Packham 	MV_DDR_RTT_WR_RZQ_DIV1,	/* 240-Ohm; RZQ = 240-Ohm */
169*ebb1a593SChris Packham 	MV_DDR_RTT_WR_HIZ,
170*ebb1a593SChris Packham 	MV_DDR_RTT_WR_RZQ_DIV3,	/* 80-Ohm; RZQ = 240-Ohm */
171*ebb1a593SChris Packham 	MV_DDR_RTT_WR_RZQ_LAST
172*ebb1a593SChris Packham };
173*ebb1a593SChris Packham 
174*ebb1a593SChris Packham enum mv_ddr_dic_evalue {
175*ebb1a593SChris Packham 	MV_DDR_DIC_RZQ_DIV7,	/* 34-Ohm; RZQ = 240-Ohm */
176*ebb1a593SChris Packham 	MV_DDR_DIC_RZQ_DIV5,	/* 48-Ohm; RZQ = 240-Ohm */
177*ebb1a593SChris Packham 	MV_DDR_DIC_RZQ_LAST
178*ebb1a593SChris Packham };
179*ebb1a593SChris Packham 
180*ebb1a593SChris Packham /* phy electrical configuration values */
181*ebb1a593SChris Packham enum mv_ddr_ohm_evalue {
182*ebb1a593SChris Packham 	MV_DDR_OHM_30 = 30,
183*ebb1a593SChris Packham 	MV_DDR_OHM_48 = 48,
184*ebb1a593SChris Packham 	MV_DDR_OHM_60 = 60,
185*ebb1a593SChris Packham 	MV_DDR_OHM_80 = 80,
186*ebb1a593SChris Packham 	MV_DDR_OHM_120 = 120,
187*ebb1a593SChris Packham 	MV_DDR_OHM_240 = 240,
188*ebb1a593SChris Packham 	MV_DDR_OHM_LAST
189*ebb1a593SChris Packham };
190*ebb1a593SChris Packham 
191*ebb1a593SChris Packham /* mac electrical configuration values */
192*ebb1a593SChris Packham enum mv_ddr_odt_cfg_evalue {
193*ebb1a593SChris Packham 	MV_DDR_ODT_CFG_NORMAL,
194*ebb1a593SChris Packham 	MV_DDR_ODT_CFG_ALWAYS_ON,
195*ebb1a593SChris Packham 	MV_DDR_ODT_CFG_LAST
196*ebb1a593SChris Packham };
197*ebb1a593SChris Packham 
1982b4ffbf6SChris Packham enum mv_ddr_dev_width { /* sdram device width */
1992b4ffbf6SChris Packham 	MV_DDR_DEV_WIDTH_4BIT,
2002b4ffbf6SChris Packham 	MV_DDR_DEV_WIDTH_8BIT,
2012b4ffbf6SChris Packham 	MV_DDR_DEV_WIDTH_16BIT,
2022b4ffbf6SChris Packham 	MV_DDR_DEV_WIDTH_32BIT,
2032b4ffbf6SChris Packham 	MV_DDR_DEV_WIDTH_LAST
2042b4ffbf6SChris Packham };
2052b4ffbf6SChris Packham 
2062b4ffbf6SChris Packham enum mv_ddr_die_capacity { /* total sdram capacity per die, megabits */
2072b4ffbf6SChris Packham 	MV_DDR_DIE_CAP_256MBIT,
2082b4ffbf6SChris Packham 	MV_DDR_DIE_CAP_512MBIT = 0,
2092b4ffbf6SChris Packham 	MV_DDR_DIE_CAP_1GBIT,
2102b4ffbf6SChris Packham 	MV_DDR_DIE_CAP_2GBIT,
2112b4ffbf6SChris Packham 	MV_DDR_DIE_CAP_4GBIT,
2122b4ffbf6SChris Packham 	MV_DDR_DIE_CAP_8GBIT,
2132b4ffbf6SChris Packham 	MV_DDR_DIE_CAP_16GBIT,
2142b4ffbf6SChris Packham 	MV_DDR_DIE_CAP_32GBIT,
2152b4ffbf6SChris Packham 	MV_DDR_DIE_CAP_12GBIT,
2162b4ffbf6SChris Packham 	MV_DDR_DIE_CAP_24GBIT,
2172b4ffbf6SChris Packham 	MV_DDR_DIE_CAP_LAST
2182b4ffbf6SChris Packham };
2192b4ffbf6SChris Packham 
2202b4ffbf6SChris Packham enum mv_ddr_pkg_rank { /* number of package ranks per dimm */
2212b4ffbf6SChris Packham 	MV_DDR_PKG_RANK_1,
2222b4ffbf6SChris Packham 	MV_DDR_PKG_RANK_2,
2232b4ffbf6SChris Packham 	MV_DDR_PKG_RANK_3,
2242b4ffbf6SChris Packham 	MV_DDR_PKG_RANK_4,
2252b4ffbf6SChris Packham 	MV_DDR_PKG_RANK_5,
2262b4ffbf6SChris Packham 	MV_DDR_PKG_RANK_6,
2272b4ffbf6SChris Packham 	MV_DDR_PKG_RANK_7,
2282b4ffbf6SChris Packham 	MV_DDR_PKG_RANK_8,
2292b4ffbf6SChris Packham 	MV_DDR_PKG_RANK_LAST
2302b4ffbf6SChris Packham };
2312b4ffbf6SChris Packham 
2322b4ffbf6SChris Packham enum mv_ddr_pri_bus_width { /* number of primary bus width bits */
2332b4ffbf6SChris Packham 	MV_DDR_PRI_BUS_WIDTH_8,
2342b4ffbf6SChris Packham 	MV_DDR_PRI_BUS_WIDTH_16,
2352b4ffbf6SChris Packham 	MV_DDR_PRI_BUS_WIDTH_32,
2362b4ffbf6SChris Packham 	MV_DDR_PRI_BUS_WIDTH_64,
2372b4ffbf6SChris Packham 	MV_DDR_PRI_BUS_WIDTH_LAST
2382b4ffbf6SChris Packham };
2392b4ffbf6SChris Packham 
2402b4ffbf6SChris Packham enum mv_ddr_bus_width_ext { /* number of extension bus width bits */
2412b4ffbf6SChris Packham 	MV_DDR_BUS_WIDTH_EXT_0,
2422b4ffbf6SChris Packham 	MV_DDR_BUS_WIDTH_EXT_8,
2432b4ffbf6SChris Packham 	MV_DDR_BUS_WIDTH_EXT_LAST
2442b4ffbf6SChris Packham };
2452b4ffbf6SChris Packham 
2462b4ffbf6SChris Packham enum mv_ddr_die_count {
2472b4ffbf6SChris Packham 	MV_DDR_DIE_CNT_1,
2482b4ffbf6SChris Packham 	MV_DDR_DIE_CNT_2,
2492b4ffbf6SChris Packham 	MV_DDR_DIE_CNT_3,
2502b4ffbf6SChris Packham 	MV_DDR_DIE_CNT_4,
2512b4ffbf6SChris Packham 	MV_DDR_DIE_CNT_5,
2522b4ffbf6SChris Packham 	MV_DDR_DIE_CNT_6,
2532b4ffbf6SChris Packham 	MV_DDR_DIE_CNT_7,
2542b4ffbf6SChris Packham 	MV_DDR_DIE_CNT_8,
2552b4ffbf6SChris Packham 	MV_DDR_DIE_CNT_LAST
2562b4ffbf6SChris Packham };
2572b4ffbf6SChris Packham 
258*ebb1a593SChris Packham #define IS_ACTIVE(mask, id) \
259*ebb1a593SChris Packham 	((mask) & (1 << (id)))
260*ebb1a593SChris Packham 
261*ebb1a593SChris Packham #define VALIDATE_ACTIVE(mask, id)		\
262*ebb1a593SChris Packham 	{					\
263*ebb1a593SChris Packham 	if (IS_ACTIVE(mask, id) == 0)		\
264*ebb1a593SChris Packham 		continue;			\
265*ebb1a593SChris Packham 	}
266*ebb1a593SChris Packham 
267*ebb1a593SChris Packham #define IS_IF_ACTIVE(if_mask, if_id) \
268*ebb1a593SChris Packham 	((if_mask) & (1 << (if_id)))
269*ebb1a593SChris Packham 
270*ebb1a593SChris Packham #define VALIDATE_IF_ACTIVE(mask, id)		\
271*ebb1a593SChris Packham 	{					\
272*ebb1a593SChris Packham 	if (IS_IF_ACTIVE(mask, id) == 0)	\
273*ebb1a593SChris Packham 		continue;			\
274*ebb1a593SChris Packham 	}
275*ebb1a593SChris Packham 
276*ebb1a593SChris Packham #define IS_BUS_ACTIVE(if_mask , if_id) \
277*ebb1a593SChris Packham 	(((if_mask) >> (if_id)) & 1)
278*ebb1a593SChris Packham 
279*ebb1a593SChris Packham #define VALIDATE_BUS_ACTIVE(mask, id)		\
280*ebb1a593SChris Packham 	{					\
281*ebb1a593SChris Packham 	if (IS_BUS_ACTIVE(mask, id) == 0)	\
282*ebb1a593SChris Packham 		continue;			\
283*ebb1a593SChris Packham 	}
284*ebb1a593SChris Packham 
285*ebb1a593SChris Packham #define DDR3_IS_ECC_PUP3_MODE(if_mask)		\
286*ebb1a593SChris Packham 	(((if_mask) == BUS_MASK_16BIT_ECC_PUP3) ? 1 : 0)
287*ebb1a593SChris Packham 
288*ebb1a593SChris Packham #define DDR3_IS_ECC_PUP4_MODE(if_mask)		\
289*ebb1a593SChris Packham 	(((if_mask) == BUS_MASK_32BIT_ECC ||	\
290*ebb1a593SChris Packham 	  (if_mask) == BUS_MASK_16BIT_ECC) ? 1 : 0)
291*ebb1a593SChris Packham 
292*ebb1a593SChris Packham #define DDR3_IS_16BIT_DRAM_MODE(mask)		\
293*ebb1a593SChris Packham 	(((mask) == BUS_MASK_16BIT ||		\
294*ebb1a593SChris Packham 	  (mask) == BUS_MASK_16BIT_ECC ||	\
295*ebb1a593SChris Packham 	  (mask) == BUS_MASK_16BIT_ECC_PUP3) ? 1 : 0)
296*ebb1a593SChris Packham 
297*ebb1a593SChris Packham #define DDR3_IS_ECC_PUP8_MODE(if_mask)				\
298*ebb1a593SChris Packham 	(((if_mask) == MV_DDR_32BIT_ECC_PUP8_BUS_MASK ||	\
299*ebb1a593SChris Packham 	  (if_mask) == MV_DDR_64BIT_ECC_PUP8_BUS_MASK) ? 1 : 0)
300*ebb1a593SChris Packham 
301*ebb1a593SChris Packham #define MV_DDR_IS_64BIT_DRAM_MODE(mask)					\
302*ebb1a593SChris Packham 	((((mask) & MV_DDR_64BIT_BUS_MASK) == MV_DDR_64BIT_BUS_MASK) ||	\
303*ebb1a593SChris Packham 	 (((mask) & MV_DDR_64BIT_ECC_PUP8_BUS_MASK) == MV_DDR_64BIT_ECC_PUP8_BUS_MASK) ? 1 : 0)
304*ebb1a593SChris Packham 
305*ebb1a593SChris Packham #define MV_DDR_IS_32BIT_IN_64BIT_DRAM_MODE(mask, sphys)		\
306*ebb1a593SChris Packham 	(((sphys) == 9) &&					\
307*ebb1a593SChris Packham 	(((mask) == BUS_MASK_32BIT) ||				\
308*ebb1a593SChris Packham 	 ((mask) == MV_DDR_32BIT_ECC_PUP8_BUS_MASK)) ? 1 : 0)
309*ebb1a593SChris Packham 
310*ebb1a593SChris Packham #define MV_DDR_IS_HALF_BUS_DRAM_MODE(mask, sphys)		\
311*ebb1a593SChris Packham 	(MV_DDR_IS_32BIT_IN_64BIT_DRAM_MODE(mask, sphys) ||	\
312*ebb1a593SChris Packham 	 DDR3_IS_16BIT_DRAM_MODE(mask))
313*ebb1a593SChris Packham 
314*ebb1a593SChris Packham struct mv_ddr_topology_map *mv_ddr_topology_map_get(void);
3152b4ffbf6SChris Packham unsigned int mv_ddr_cl_calc(unsigned int taa_min, unsigned int tclk);
3162b4ffbf6SChris Packham unsigned int mv_ddr_cwl_calc(unsigned int tclk);
317*ebb1a593SChris Packham int mv_ddr_topology_map_update(void);
3182b4ffbf6SChris Packham unsigned short mv_ddr_bus_bit_mask_get(void);
3192b4ffbf6SChris Packham unsigned int mv_ddr_if_bus_width_get(void);
320*ebb1a593SChris Packham unsigned int mv_ddr_cs_num_get(void);
321*ebb1a593SChris Packham int mv_ddr_is_ecc_ena(void);
322*ebb1a593SChris Packham unsigned long long mv_ddr_mem_sz_per_cs_get(void);
323*ebb1a593SChris Packham unsigned long long mv_ddr_mem_sz_get(void);
324*ebb1a593SChris Packham unsigned int mv_ddr_rtt_nom_get(void);
325*ebb1a593SChris Packham unsigned int mv_ddr_rtt_park_get(void);
326*ebb1a593SChris Packham unsigned int mv_ddr_rtt_wr_get(void);
327*ebb1a593SChris Packham unsigned int mv_ddr_dic_get(void);
3282b4ffbf6SChris Packham 
3292b4ffbf6SChris Packham #endif /* _MV_DDR_TOPOLOGY_H */
330