xref: /rk3399_rockchip-uboot/arch/arm/include/asm/arch-rockchip/sdram_common.h (revision 8dd9db5d1cd5826638c3cdb5f681300ff2f29f3b)
1 /*
2  * Copyright (C) 2017 Rockchip Electronics Co., Ltd.
3  *
4  * SPDX-License-Identifier:     GPL-2.0+
5  */
6 
7 #ifndef _ASM_ARCH_SDRAM_COMMON_H
8 #define _ASM_ARCH_SDRAM_COMMON_H
9 
10 enum {
11 	DDR4 = 0,
12 	DDR2 = 2,
13 	DDR3 = 3,
14 	LPDDR2 = 5,
15 	LPDDR3 = 6,
16 	LPDDR4 = 7,
17 	UNUSED = 0xFF
18 };
19 
20 struct ddr_param {
21 	u32 count;
22 	u32 reserved;
23 	u64 para[8];
24 };
25 
26 /*
27  * sys_reg bitfield struct
28  * [31]		row_3_4_ch1
29  * [30]		row_3_4_ch0
30  * [29:28]	chinfo
31  * [27]		rank_ch1
32  * [26:25]	col_ch1
33  * [24]		bk_ch1
34  * [23:22]	low bits of cs0_row_ch1
35  * [21:20]	low bits of cs1_row_ch1
36  * [19:18]	bw_ch1
37  * [17:16]	dbw_ch1;
38  * [15:13]	ddrtype
39  * [12]		channelnum
40  * [11]		rank_ch0
41  * [10:9]	col_ch0,
42  * [8]		bk_ch0
43  * [7:6]	low bits of cs0_row_ch0
44  * [5:4]	low bits of cs1_row_ch0
45  * [3:2]	bw_ch0
46  * [1:0]	dbw_ch0
47  *
48  * sys_reg1 bitfield struct
49  * [7]		high bit of cs0_row_ch1
50  * [6]		high bit of cs1_row_ch1
51  * [5]		high bit of cs0_row_ch0
52  * [4]		high bit of cs1_row_ch0
53  * [3:2]	cs1_col_ch1
54  * [1:0]	cs1_col_ch0
55 */
56 #define SYS_REG_DDRTYPE_SHIFT		13
57 #define SYS_REG_DDRTYPE_MASK		7
58 #define SYS_REG_NUM_CH_SHIFT		12
59 #define SYS_REG_NUM_CH_MASK		1
60 #define SYS_REG_ROW_3_4_SHIFT(ch)	(30 + (ch))
61 #define SYS_REG_ROW_3_4_MASK		1
62 #define SYS_REG_CHINFO_SHIFT(ch)	(28 + (ch))
63 #define SYS_REG_RANK_SHIFT(ch)		(11 + (ch) * 16)
64 #define SYS_REG_RANK_MASK		1
65 #define SYS_REG_COL_SHIFT(ch)		(9 + (ch) * 16)
66 #define SYS_REG_COL_MASK		3
67 #define SYS_REG_BK_SHIFT(ch)		(8 + (ch) * 16)
68 #define SYS_REG_BK_MASK			1
69 #define SYS_REG_CS0_ROW_SHIFT(ch)	(6 + (ch) * 16)
70 #define SYS_REG_CS0_ROW_MASK		3
71 #define SYS_REG_CS1_ROW_SHIFT(ch)	(4 + (ch) * 16)
72 #define SYS_REG_CS1_ROW_MASK		3
73 #define SYS_REG_BW_SHIFT(ch)		(2 + (ch) * 16)
74 #define SYS_REG_BW_MASK			3
75 #define SYS_REG_DBW_SHIFT(ch)		((ch) * 16)
76 #define SYS_REG_DBW_MASK		3
77 
78 #define SYS_REG1_VERSION_SHIFT			28
79 #define SYS_REG1_VERSION_MASK			0xf
80 #define SYS_REG1_EXTEND_CS0_ROW_SHIFT(ch)	(5 + (ch) * 2)
81 #define SYS_REG1_EXTEND_CS0_ROW_MASK		1
82 #define SYS_REG1_EXTEND_CS1_ROW_SHIFT(ch)	(4 + (ch) * 2)
83 #define SYS_REG1_EXTEND_CS1_ROW_MASK		1
84 #define SYS_REG1_CS1_COL_SHIFT(ch)		(0 + (ch) * 2)
85 #define SYS_REG1_CS1_COL_MASK			3
86 
87 /* Get sdram size decode from reg */
88 size_t rockchip_sdram_size(phys_addr_t reg);
89 unsigned int get_page_size(void);
90 unsigned int get_ddr_bw(void);
91 
92 /* Called by U-Boot board_init_r for Rockchip SoCs */
93 int dram_init(void);
94 
95 /* Write ddr param to a known place for trustos */
96 int rockchip_setup_ddr_param(struct ddr_param *info);
97 
98 #endif
99