xref: /rk3399_rockchip-uboot/arch/arm/include/asm/arch-rockchip/sdram_rk3399.h (revision b8dc613cbc483a8abfcf4203e4fa0e18f60b1d27)
1fa437430SKever Yang /*
2fa437430SKever Yang  * Copyright (C) 2016-2017 Rockchip Electronics Co., Ltd
3fa437430SKever Yang  *
4fa437430SKever Yang  * SPDX-License-Identifier:     GPL-2.0+
5fa437430SKever Yang  */
6fa437430SKever Yang 
7fa437430SKever Yang #ifndef _ASM_ARCH_SDRAM_RK3399_H
8fa437430SKever Yang #define _ASM_ARCH_SDRAM_RK3399_H
95685f66aSYouMin Chen #include <asm/arch/sdram_common.h>
10*5e6e8f2dSYouMin Chen #include <asm/arch/sdram_msch.h>
11fa437430SKever Yang 
12fa437430SKever Yang struct rk3399_ddr_pctl_regs {
13fa437430SKever Yang 	u32 denali_ctl[332];
14fa437430SKever Yang };
15fa437430SKever Yang 
16fa437430SKever Yang struct rk3399_ddr_publ_regs {
17fa437430SKever Yang 	u32 denali_phy[959];
18fa437430SKever Yang };
19fa437430SKever Yang 
20fa437430SKever Yang struct rk3399_ddr_pi_regs {
21fa437430SKever Yang 	u32 denali_pi[200];
22fa437430SKever Yang };
23fa437430SKever Yang 
24fa437430SKever Yang struct rk3399_ddr_cic_regs {
25fa437430SKever Yang 	u32 cic_ctrl0;
26fa437430SKever Yang 	u32 cic_ctrl1;
27fa437430SKever Yang 	u32 cic_idle_th;
28fa437430SKever Yang 	u32 cic_cg_wait_th;
29fa437430SKever Yang 	u32 cic_status0;
30fa437430SKever Yang 	u32 cic_status1;
31fa437430SKever Yang 	u32 cic_ctrl2;
32fa437430SKever Yang 	u32 cic_ctrl3;
33fa437430SKever Yang 	u32 cic_ctrl4;
34fa437430SKever Yang };
35fa437430SKever Yang 
36fa437430SKever Yang /* DENALI_CTL_00 */
37fa437430SKever Yang #define START		1
38fa437430SKever Yang 
39fa437430SKever Yang /* DENALI_CTL_68 */
40fa437430SKever Yang #define PWRUP_SREFRESH_EXIT	(1 << 16)
41fa437430SKever Yang 
42fa437430SKever Yang /* DENALI_CTL_274 */
43fa437430SKever Yang #define MEM_RST_VALID	1
44fa437430SKever Yang 
45*5e6e8f2dSYouMin Chen struct msch_regs {
46*5e6e8f2dSYouMin Chen 	u32 coreid;
47*5e6e8f2dSYouMin Chen 	u32 revisionid;
48*5e6e8f2dSYouMin Chen 	u32 ddrconf;
49*5e6e8f2dSYouMin Chen 	u32 ddrsize;
50*5e6e8f2dSYouMin Chen 	union noc_ddrtiminga0 ddrtiminga0;
51*5e6e8f2dSYouMin Chen 	union noc_ddrtimingb0 ddrtimingb0;
52*5e6e8f2dSYouMin Chen 	union noc_ddrtimingc0 ddrtimingc0;
53*5e6e8f2dSYouMin Chen 	union noc_devtodev0 devtodev0;
54*5e6e8f2dSYouMin Chen 	u32 reserved0[(0x110 - 0x20) / 4];
55*5e6e8f2dSYouMin Chen 	union noc_ddrmode ddrmode;
56*5e6e8f2dSYouMin Chen 	u32 reserved1[(0x1000 - 0x114) / 4];
57*5e6e8f2dSYouMin Chen 	u32 agingx0;
58*5e6e8f2dSYouMin Chen };
59*5e6e8f2dSYouMin Chen 
60*5e6e8f2dSYouMin Chen struct sdram_msch_timings {
61*5e6e8f2dSYouMin Chen 	union noc_ddrtiminga0 ddrtiminga0;
62*5e6e8f2dSYouMin Chen 	union noc_ddrtimingb0 ddrtimingb0;
63*5e6e8f2dSYouMin Chen 	union noc_ddrtimingc0 ddrtimingc0;
64*5e6e8f2dSYouMin Chen 	union noc_devtodev0 devtodev0;
65*5e6e8f2dSYouMin Chen 	union noc_ddrmode ddrmode;
66*5e6e8f2dSYouMin Chen 	u32 agingx0;
67*5e6e8f2dSYouMin Chen };
68*5e6e8f2dSYouMin Chen 
69fa437430SKever Yang struct rk3399_sdram_channel {
7031d8c61dSYouMin Chen 	struct sdram_cap_info cap_info;
7131d8c61dSYouMin Chen 	struct sdram_msch_timings noc_timings;
72fa437430SKever Yang };
73fa437430SKever Yang 
74fa437430SKever Yang struct rk3399_sdram_params {
75fa437430SKever Yang 	struct rk3399_sdram_channel ch[2];
7631d8c61dSYouMin Chen 	struct sdram_base_params base;
77fa437430SKever Yang 	struct rk3399_ddr_pctl_regs pctl_regs;
78fa437430SKever Yang 	struct rk3399_ddr_pi_regs pi_regs;
79fa437430SKever Yang 	struct rk3399_ddr_publ_regs phy_regs;
80fa437430SKever Yang };
81fa437430SKever Yang 
82fa437430SKever Yang #define PI_CA_TRAINING		(1 << 0)
83fa437430SKever Yang #define PI_WRITE_LEVELING	(1 << 1)
84fa437430SKever Yang #define PI_READ_GATE_TRAINING	(1 << 2)
85fa437430SKever Yang #define PI_READ_LEVELING	(1 << 3)
86fa437430SKever Yang #define PI_WDQ_LEVELING		(1 << 4)
87fa437430SKever Yang #define PI_FULL_TRAINING	0xff
88fa437430SKever Yang 
8931d8c61dSYouMin Chen enum {
9031d8c61dSYouMin Chen 	STRIDE_128B = 0,
9131d8c61dSYouMin Chen 	STRIDE_256B = 1,
9231d8c61dSYouMin Chen 	STRIDE_512B = 2,
9331d8c61dSYouMin Chen 	STRIDE_4KB = 3,
9431d8c61dSYouMin Chen 	UN_STRIDE = 4,
9531d8c61dSYouMin Chen 	PART_STRIDE = 5
9631d8c61dSYouMin Chen };
9731d8c61dSYouMin Chen 
98fa437430SKever Yang #endif
99