xref: /openbmc/u-boot/arch/arm/include/asm/arch-rockchip/sdram_rk3399.h (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */
2fa437430SKever Yang /*
3fa437430SKever Yang  * Copyright (C) 2016-2017 Rockchip Electronics Co., Ltd
4fa437430SKever Yang  */
5fa437430SKever Yang 
6fa437430SKever Yang #ifndef _ASM_ARCH_SDRAM_RK3399_H
7fa437430SKever Yang #define _ASM_ARCH_SDRAM_RK3399_H
8fa437430SKever Yang 
9fa437430SKever Yang enum {
10fa437430SKever Yang 	DDR3 = 0x3,
11fa437430SKever Yang 	LPDDR2 = 0x5,
12fa437430SKever Yang 	LPDDR3 = 0x6,
13fa437430SKever Yang 	LPDDR4 = 0x7,
14fa437430SKever Yang 	UNUSED = 0xFF
15fa437430SKever Yang };
16fa437430SKever Yang 
17fa437430SKever Yang struct rk3399_ddr_pctl_regs {
18fa437430SKever Yang 	u32 denali_ctl[332];
19fa437430SKever Yang };
20fa437430SKever Yang 
21fa437430SKever Yang struct rk3399_ddr_publ_regs {
22fa437430SKever Yang 	u32 denali_phy[959];
23fa437430SKever Yang };
24fa437430SKever Yang 
25fa437430SKever Yang struct rk3399_ddr_pi_regs {
26fa437430SKever Yang 	u32 denali_pi[200];
27fa437430SKever Yang };
28fa437430SKever Yang 
29fa437430SKever Yang struct rk3399_msch_regs {
30fa437430SKever Yang 	u32 coreid;
31fa437430SKever Yang 	u32 revisionid;
32fa437430SKever Yang 	u32 ddrconf;
33fa437430SKever Yang 	u32 ddrsize;
34fa437430SKever Yang 	u32 ddrtiminga0;
35fa437430SKever Yang 	u32 ddrtimingb0;
36fa437430SKever Yang 	u32 ddrtimingc0;
37fa437430SKever Yang 	u32 devtodev0;
38fa437430SKever Yang 	u32 reserved0[(0x110 - 0x20) / 4];
39fa437430SKever Yang 	u32 ddrmode;
40fa437430SKever Yang 	u32 reserved1[(0x1000 - 0x114) / 4];
41fa437430SKever Yang 	u32 agingx0;
42fa437430SKever Yang };
43fa437430SKever Yang 
44fa437430SKever Yang struct rk3399_msch_timings {
45fa437430SKever Yang 	u32 ddrtiminga0;
46fa437430SKever Yang 	u32 ddrtimingb0;
47fa437430SKever Yang 	u32 ddrtimingc0;
48fa437430SKever Yang 	u32 devtodev0;
49fa437430SKever Yang 	u32 ddrmode;
50fa437430SKever Yang 	u32 agingx0;
51fa437430SKever Yang };
52fa437430SKever Yang 
53fa437430SKever Yang struct rk3399_ddr_cic_regs {
54fa437430SKever Yang 	u32 cic_ctrl0;
55fa437430SKever Yang 	u32 cic_ctrl1;
56fa437430SKever Yang 	u32 cic_idle_th;
57fa437430SKever Yang 	u32 cic_cg_wait_th;
58fa437430SKever Yang 	u32 cic_status0;
59fa437430SKever Yang 	u32 cic_status1;
60fa437430SKever Yang 	u32 cic_ctrl2;
61fa437430SKever Yang 	u32 cic_ctrl3;
62fa437430SKever Yang 	u32 cic_ctrl4;
63fa437430SKever Yang };
64fa437430SKever Yang 
65fa437430SKever Yang /* DENALI_CTL_00 */
66fa437430SKever Yang #define START		1
67fa437430SKever Yang 
68fa437430SKever Yang /* DENALI_CTL_68 */
69fa437430SKever Yang #define PWRUP_SREFRESH_EXIT	(1 << 16)
70fa437430SKever Yang 
71fa437430SKever Yang /* DENALI_CTL_274 */
72fa437430SKever Yang #define MEM_RST_VALID	1
73fa437430SKever Yang 
74fa437430SKever Yang struct rk3399_sdram_channel {
75fa437430SKever Yang 	unsigned int rank;
76fa437430SKever Yang 	/* dram column number, 0 means this channel is invalid */
77fa437430SKever Yang 	unsigned int col;
78fa437430SKever Yang 	/* dram bank number, 3:8bank, 2:4bank */
79fa437430SKever Yang 	unsigned int bk;
80fa437430SKever Yang 	/* channel buswidth, 2:32bit, 1:16bit, 0:8bit */
81fa437430SKever Yang 	unsigned int bw;
82fa437430SKever Yang 	/* die buswidth, 2:32bit, 1:16bit, 0:8bit */
83fa437430SKever Yang 	unsigned int dbw;
84fa437430SKever Yang 	/*
85fa437430SKever Yang 	 * row_3_4 = 1: 6Gb or 12Gb die
86fa437430SKever Yang 	 * row_3_4 = 0: normal die, power of 2
87fa437430SKever Yang 	 */
88fa437430SKever Yang 	unsigned int row_3_4;
89fa437430SKever Yang 	unsigned int cs0_row;
90fa437430SKever Yang 	unsigned int cs1_row;
91fa437430SKever Yang 	unsigned int ddrconfig;
92fa437430SKever Yang 	struct rk3399_msch_timings noc_timings;
93fa437430SKever Yang };
94fa437430SKever Yang 
95fa437430SKever Yang struct rk3399_base_params {
96fa437430SKever Yang 	unsigned int ddr_freq;
97fa437430SKever Yang 	unsigned int dramtype;
98fa437430SKever Yang 	unsigned int num_channels;
99fa437430SKever Yang 	unsigned int stride;
100fa437430SKever Yang 	unsigned int odt;
101fa437430SKever Yang };
102fa437430SKever Yang 
103fa437430SKever Yang struct rk3399_sdram_params {
104fa437430SKever Yang 	struct rk3399_sdram_channel ch[2];
105fa437430SKever Yang 	struct rk3399_base_params base;
106fa437430SKever Yang 	struct rk3399_ddr_pctl_regs pctl_regs;
107fa437430SKever Yang 	struct rk3399_ddr_pi_regs pi_regs;
108fa437430SKever Yang 	struct rk3399_ddr_publ_regs phy_regs;
109fa437430SKever Yang };
110fa437430SKever Yang 
111fa437430SKever Yang #define PI_CA_TRAINING		(1 << 0)
112fa437430SKever Yang #define PI_WRITE_LEVELING	(1 << 1)
113fa437430SKever Yang #define PI_READ_GATE_TRAINING	(1 << 2)
114fa437430SKever Yang #define PI_READ_LEVELING	(1 << 3)
115fa437430SKever Yang #define PI_WDQ_LEVELING		(1 << 4)
116fa437430SKever Yang #define PI_FULL_TRAINING	0xff
117fa437430SKever Yang 
118fa437430SKever Yang #endif
119