xref: /openbmc/u-boot/drivers/ddr/marvell/a38x/mv_ddr_topology.h (revision 2b4ffbf6b4944a0b3125fd2c9c0ba3568264367a)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (C) Marvell International Ltd. and its affiliates
4  */
5 
6 #ifndef _MV_DDR_TOPOLOGY_H
7 #define _MV_DDR_TOPOLOGY_H
8 
9 /* ddr bus masks */
10 #define BUS_MASK_32BIT			0xf
11 #define BUS_MASK_32BIT_ECC		0x1f
12 #define BUS_MASK_16BIT			0x3
13 #define BUS_MASK_16BIT_ECC		0x13
14 #define BUS_MASK_16BIT_ECC_PUP3		0xb
15 #define MV_DDR_64BIT_BUS_MASK		0xff
16 #define MV_DDR_64BIT_ECC_PUP8_BUS_MASK	0x1ff
17 #define MV_DDR_32BIT_ECC_PUP8_BUS_MASK	0x10f
18 
19 /* source of ddr configuration data */
20 enum mv_ddr_cfg_src {
21 	MV_DDR_CFG_DEFAULT,	/* based on data in mv_ddr_topology_map structure */
22 	MV_DDR_CFG_SPD,		/* based on data in spd */
23 	MV_DDR_CFG_USER,	/* based on data from user */
24 	MV_DDR_CFG_STATIC,	/* based on data from user in register-value format */
25 	MV_DDR_CFG_LAST
26 };
27 
28 enum mv_ddr_num_of_sub_phys_per_ddr_unit {
29 	SINGLE_SUB_PHY = 1,
30 	TWO_SUB_PHYS = 2
31 };
32 
33 enum mv_ddr_temperature {
34 	MV_DDR_TEMP_LOW,
35 	MV_DDR_TEMP_NORMAL,
36 	MV_DDR_TEMP_HIGH
37 };
38 
39 enum mv_ddr_timing_data {
40 	MV_DDR_TCK_AVG_MIN, /* sdram min cycle time (t ck avg min) */
41 	MV_DDR_TAA_MIN, /* min cas latency time (t aa min) */
42 	MV_DDR_TRFC1_MIN, /* min refresh recovery delay time (t rfc1 min) */
43 	MV_DDR_TWR_MIN, /* min write recovery time (t wr min) */
44 	MV_DDR_TRCD_MIN, /* min ras to cas delay time (t rcd min) */
45 	MV_DDR_TRP_MIN, /* min row precharge delay time (t rp min) */
46 	MV_DDR_TRC_MIN, /* min active to active/refresh delay time (t rc min) */
47 	MV_DDR_TRAS_MIN, /* min active to precharge delay time (t ras min) */
48 	MV_DDR_TRRD_S_MIN, /* min activate to activate delay time (t rrd_s min), diff bank group */
49 	MV_DDR_TRRD_L_MIN, /* min activate to activate delay time (t rrd_l min), same bank group */
50 	MV_DDR_TFAW_MIN, /* min four activate window delay time (t faw min) */
51 	MV_DDR_TWTR_S_MIN, /* min write to read time (t wtr s min), diff bank group */
52 	MV_DDR_TWTR_L_MIN, /* min write to read time (t wtr l min), same bank group */
53 	MV_DDR_TDATA_LAST
54 };
55 
56 enum mv_ddr_dev_width { /* sdram device width */
57 	MV_DDR_DEV_WIDTH_4BIT,
58 	MV_DDR_DEV_WIDTH_8BIT,
59 	MV_DDR_DEV_WIDTH_16BIT,
60 	MV_DDR_DEV_WIDTH_32BIT,
61 	MV_DDR_DEV_WIDTH_LAST
62 };
63 
64 enum mv_ddr_die_capacity { /* total sdram capacity per die, megabits */
65 	MV_DDR_DIE_CAP_256MBIT,
66 	MV_DDR_DIE_CAP_512MBIT = 0,
67 	MV_DDR_DIE_CAP_1GBIT,
68 	MV_DDR_DIE_CAP_2GBIT,
69 	MV_DDR_DIE_CAP_4GBIT,
70 	MV_DDR_DIE_CAP_8GBIT,
71 	MV_DDR_DIE_CAP_16GBIT,
72 	MV_DDR_DIE_CAP_32GBIT,
73 	MV_DDR_DIE_CAP_12GBIT,
74 	MV_DDR_DIE_CAP_24GBIT,
75 	MV_DDR_DIE_CAP_LAST
76 };
77 
78 enum mv_ddr_pkg_rank { /* number of package ranks per dimm */
79 	MV_DDR_PKG_RANK_1,
80 	MV_DDR_PKG_RANK_2,
81 	MV_DDR_PKG_RANK_3,
82 	MV_DDR_PKG_RANK_4,
83 	MV_DDR_PKG_RANK_5,
84 	MV_DDR_PKG_RANK_6,
85 	MV_DDR_PKG_RANK_7,
86 	MV_DDR_PKG_RANK_8,
87 	MV_DDR_PKG_RANK_LAST
88 };
89 
90 enum mv_ddr_pri_bus_width { /* number of primary bus width bits */
91 	MV_DDR_PRI_BUS_WIDTH_8,
92 	MV_DDR_PRI_BUS_WIDTH_16,
93 	MV_DDR_PRI_BUS_WIDTH_32,
94 	MV_DDR_PRI_BUS_WIDTH_64,
95 	MV_DDR_PRI_BUS_WIDTH_LAST
96 };
97 
98 enum mv_ddr_bus_width_ext { /* number of extension bus width bits */
99 	MV_DDR_BUS_WIDTH_EXT_0,
100 	MV_DDR_BUS_WIDTH_EXT_8,
101 	MV_DDR_BUS_WIDTH_EXT_LAST
102 };
103 
104 enum mv_ddr_die_count {
105 	MV_DDR_DIE_CNT_1,
106 	MV_DDR_DIE_CNT_2,
107 	MV_DDR_DIE_CNT_3,
108 	MV_DDR_DIE_CNT_4,
109 	MV_DDR_DIE_CNT_5,
110 	MV_DDR_DIE_CNT_6,
111 	MV_DDR_DIE_CNT_7,
112 	MV_DDR_DIE_CNT_8,
113 	MV_DDR_DIE_CNT_LAST
114 };
115 
116 unsigned int mv_ddr_cl_calc(unsigned int taa_min, unsigned int tclk);
117 unsigned int mv_ddr_cwl_calc(unsigned int tclk);
118 struct mv_ddr_topology_map *mv_ddr_topology_map_update(void);
119 struct dram_config *mv_ddr_dram_config_update(void);
120 unsigned short mv_ddr_bus_bit_mask_get(void);
121 unsigned int mv_ddr_if_bus_width_get(void);
122 
123 #endif /* _MV_DDR_TOPOLOGY_H */
124