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