xref: /rk3399_rockchip-uboot/arch/arm/include/asm/arch-rockchip/sdram_pctl_px30.h (revision 5d4a323c781a8f997dbac59d5a73c71fa1c7e0ad)
174803decSYouMin Chen /* SPDX-License-Identifier:     GPL-2.0+ */
274803decSYouMin Chen /*
374803decSYouMin Chen  * Copyright (C) 2018 Rockchip Electronics Co., Ltd
474803decSYouMin Chen  */
574803decSYouMin Chen 
674803decSYouMin Chen #ifndef _ASM_ARCH_SDRAM_PCTL_PX30_H
774803decSYouMin Chen #define _ASM_ARCH_SDRAM_PCTL_PX30_H
85685f66aSYouMin Chen #include <asm/arch/sdram_common.h>
974803decSYouMin Chen 
1074803decSYouMin Chen struct ddr_pctl_regs {
119442a4b3SYouMin Chen 	u32 pctl[35][2];
1274803decSYouMin Chen };
1374803decSYouMin Chen 
14*5d4a323cSTang Yun ping /* DDRCTL registers define */
1574803decSYouMin Chen #define DDR_PCTL2_MSTR			0x0
1674803decSYouMin Chen #define DDR_PCTL2_STAT			0x4
1774803decSYouMin Chen #define DDR_PCTL2_MSTR1			0x8
1874803decSYouMin Chen #define DDR_PCTL2_MRCTRL0		0x10
1974803decSYouMin Chen #define DDR_PCTL2_MRCTRL1		0x14
2074803decSYouMin Chen #define DDR_PCTL2_MRSTAT		0x18
2174803decSYouMin Chen #define DDR_PCTL2_MRCTRL2		0x1c
2274803decSYouMin Chen #define DDR_PCTL2_DERATEEN		0x20
2374803decSYouMin Chen #define DDR_PCTL2_DERATEINT		0x24
249442a4b3SYouMin Chen #define DDR_PCTL2_MSTR2			0x28
2574803decSYouMin Chen #define DDR_PCTL2_PWRCTL		0x30
2674803decSYouMin Chen #define DDR_PCTL2_PWRTMG		0x34
2774803decSYouMin Chen #define DDR_PCTL2_HWLPCTL		0x38
2874803decSYouMin Chen #define DDR_PCTL2_RFSHCTL0		0x50
2974803decSYouMin Chen #define DDR_PCTL2_RFSHCTL1		0x54
3074803decSYouMin Chen #define DDR_PCTL2_RFSHCTL2		0x58
3174803decSYouMin Chen #define DDR_PCTL2_RFSHCTL4		0x5c
3274803decSYouMin Chen #define DDR_PCTL2_RFSHCTL3		0x60
3374803decSYouMin Chen #define DDR_PCTL2_RFSHTMG		0x64
3474803decSYouMin Chen #define DDR_PCTL2_RFSHTMG1		0x68
3574803decSYouMin Chen #define DDR_PCTL2_RFSHCTL5		0x6c
36600d0322STang Yun ping #define DDR_PCTL2_ECCCFG0		0x70
37600d0322STang Yun ping #define DDR_PCTL2_ECCCFG1		0x74
38600d0322STang Yun ping #define DDR_PCTL2_ECCSTAT		0x78
39600d0322STang Yun ping #define DDR_PCTL2_ECCCTL		0x7c
40600d0322STang Yun ping #define DDR_PCTL2_ECCERRCNT		0x80
41600d0322STang Yun ping #define DDR_PCTL2_ECCCADDR0		0x84
42600d0322STang Yun ping #define DDR_PCTL2_ECCCADDR1		0x88
43600d0322STang Yun ping #define DDR_PCTL2_ECCCSYN0		0x8c
44600d0322STang Yun ping #define DDR_PCTL2_ECCCSYN1		0x90
45600d0322STang Yun ping #define DDR_PCTL2_ECCCSYN2		0x94
46600d0322STang Yun ping #define DDR_PCTL2_ECCBITMASK0		0x98
47600d0322STang Yun ping #define DDR_PCTL2_ECCBITMASK1		0x9c
48600d0322STang Yun ping #define DDR_PCTL2_ECCBITMASK2		0xa0
49600d0322STang Yun ping #define DDR_PCTL2_ECCUADR0		0xa4
50600d0322STang Yun ping #define DDR_PCTL2_ECCUADR1		0xa8
51600d0322STang Yun ping #define DDR_PCTL2_ECCUSYNC0		0xac
52600d0322STang Yun ping #define DDR_PCTL2_ECCUSYNC1		0xb0
53600d0322STang Yun ping #define DDR_PCTL2_ECCUSYNC2		0xb4
54600d0322STang Yun ping #define DDR_PCTL2_ECCPOSISONADDR0	0xb8
55600d0322STang Yun ping #define DDR_PCTL2_ECCPOSISONADDR1	0xbc
5674803decSYouMin Chen #define DDR_PCTL2_INIT0			0xd0
5774803decSYouMin Chen #define DDR_PCTL2_INIT1			0xd4
5874803decSYouMin Chen #define DDR_PCTL2_INIT2			0xd8
5974803decSYouMin Chen #define DDR_PCTL2_INIT3			0xdc
6074803decSYouMin Chen #define DDR_PCTL2_INIT4			0xe0
6174803decSYouMin Chen #define DDR_PCTL2_INIT5			0xe4
6274803decSYouMin Chen #define DDR_PCTL2_INIT6			0xe8
6374803decSYouMin Chen #define DDR_PCTL2_INIT7			0xec
6474803decSYouMin Chen #define DDR_PCTL2_DIMMCTL		0xf0
6574803decSYouMin Chen #define DDR_PCTL2_RANKCTL		0xf4
6674803decSYouMin Chen #define DDR_PCTL2_CHCTL			0xfc
6774803decSYouMin Chen #define DDR_PCTL2_DRAMTMG0		0x100
6874803decSYouMin Chen #define DDR_PCTL2_DRAMTMG1		0x104
6974803decSYouMin Chen #define DDR_PCTL2_DRAMTMG2		0x108
7074803decSYouMin Chen #define DDR_PCTL2_DRAMTMG3		0x10c
7174803decSYouMin Chen #define DDR_PCTL2_DRAMTMG4		0x110
7274803decSYouMin Chen #define DDR_PCTL2_DRAMTMG5		0x114
7374803decSYouMin Chen #define DDR_PCTL2_DRAMTMG6		0x118
7474803decSYouMin Chen #define DDR_PCTL2_DRAMTMG7		0x11c
7574803decSYouMin Chen #define DDR_PCTL2_DRAMTMG8		0x120
7674803decSYouMin Chen #define DDR_PCTL2_DRAMTMG9		0x124
7774803decSYouMin Chen #define DDR_PCTL2_DRAMTMG10		0x128
7874803decSYouMin Chen #define DDR_PCTL2_DRAMTMG11		0x12c
7974803decSYouMin Chen #define DDR_PCTL2_DRAMTMG12		0x130
8074803decSYouMin Chen #define DDR_PCTL2_DRAMTMG13		0x134
8174803decSYouMin Chen #define DDR_PCTL2_DRAMTMG14		0x138
8274803decSYouMin Chen #define DDR_PCTL2_DRAMTMG15		0x13c
8374803decSYouMin Chen #define DDR_PCTL2_DRAMTMG16		0x140
8474803decSYouMin Chen #define DDR_PCTL2_ZQCTL0		0x180
8574803decSYouMin Chen #define DDR_PCTL2_ZQCTL1		0x184
8674803decSYouMin Chen #define DDR_PCTL2_ZQCTL2		0x188
8774803decSYouMin Chen #define DDR_PCTL2_ZQSTAT		0x18c
8874803decSYouMin Chen #define DDR_PCTL2_DFITMG0		0x190
8974803decSYouMin Chen #define DDR_PCTL2_DFITMG1		0x194
9074803decSYouMin Chen #define DDR_PCTL2_DFILPCFG0		0x198
9174803decSYouMin Chen #define DDR_PCTL2_DFILPCFG1		0x19c
9274803decSYouMin Chen #define DDR_PCTL2_DFIUPD0		0x1a0
9374803decSYouMin Chen #define DDR_PCTL2_DFIUPD1		0x1a4
9474803decSYouMin Chen #define DDR_PCTL2_DFIUPD2		0x1a8
9574803decSYouMin Chen #define DDR_PCTL2_DFIMISC		0x1b0
9674803decSYouMin Chen #define DDR_PCTL2_DFITMG2		0x1b4
9774803decSYouMin Chen #define DDR_PCTL2_DFITMG3		0x1b8
9874803decSYouMin Chen #define DDR_PCTL2_DFISTAT		0x1bc
9974803decSYouMin Chen #define DDR_PCTL2_DBICTL		0x1c0
10074803decSYouMin Chen #define DDR_PCTL2_ADDRMAP0		0x200
10174803decSYouMin Chen #define DDR_PCTL2_ADDRMAP1		0x204
10274803decSYouMin Chen #define DDR_PCTL2_ADDRMAP2		0x208
10374803decSYouMin Chen #define DDR_PCTL2_ADDRMAP3		0x20c
10474803decSYouMin Chen #define DDR_PCTL2_ADDRMAP4		0x210
10574803decSYouMin Chen #define DDR_PCTL2_ADDRMAP5		0x214
10674803decSYouMin Chen #define DDR_PCTL2_ADDRMAP6		0x218
10774803decSYouMin Chen #define DDR_PCTL2_ADDRMAP7		0x21c
10874803decSYouMin Chen #define DDR_PCTL2_ADDRMAP8		0x220
10974803decSYouMin Chen #define DDR_PCTL2_ADDRMAP9		0x224
11074803decSYouMin Chen #define DDR_PCTL2_ADDRMAP10		0x228
11174803decSYouMin Chen #define DDR_PCTL2_ADDRMAP11		0x22c
11274803decSYouMin Chen #define DDR_PCTL2_ODTCFG		0x240
11374803decSYouMin Chen #define DDR_PCTL2_ODTMAP		0x244
11474803decSYouMin Chen #define DDR_PCTL2_SCHED			0x250
11574803decSYouMin Chen #define DDR_PCTL2_SCHED1		0x254
11674803decSYouMin Chen #define DDR_PCTL2_PERFHPR1		0x25c
11774803decSYouMin Chen #define DDR_PCTL2_PERFLPR1		0x264
11874803decSYouMin Chen #define DDR_PCTL2_PERFWR1		0x26c
11974803decSYouMin Chen #define DDR_PCTL2_DQMAP0		0x280
12074803decSYouMin Chen #define DDR_PCTL2_DQMAP1		0x284
12174803decSYouMin Chen #define DDR_PCTL2_DQMAP2		0x288
12274803decSYouMin Chen #define DDR_PCTL2_DQMAP3		0x28c
12374803decSYouMin Chen #define DDR_PCTL2_DQMAP4		0x290
12474803decSYouMin Chen #define DDR_PCTL2_DQMAP5		0x294
12574803decSYouMin Chen #define DDR_PCTL2_DBG0			0x300
12674803decSYouMin Chen #define DDR_PCTL2_DBG1			0x304
12774803decSYouMin Chen #define DDR_PCTL2_DBGCAM		0x308
12874803decSYouMin Chen #define DDR_PCTL2_DBGCMD		0x30c
12974803decSYouMin Chen #define DDR_PCTL2_DBGSTAT		0x310
13074803decSYouMin Chen #define DDR_PCTL2_SWCTL			0x320
13174803decSYouMin Chen #define DDR_PCTL2_SWSTAT		0x324
13274803decSYouMin Chen #define DDR_PCTL2_POISONCFG		0x36c
13374803decSYouMin Chen #define DDR_PCTL2_POISONSTAT		0x370
13474803decSYouMin Chen #define DDR_PCTL2_ADVECCINDEX		0x374
13574803decSYouMin Chen #define DDR_PCTL2_ADVECCSTAT		0x378
13674803decSYouMin Chen #define DDR_PCTL2_PSTAT			0x3fc
13774803decSYouMin Chen #define DDR_PCTL2_PCCFG			0x400
13874803decSYouMin Chen #define DDR_PCTL2_PCFGR_n		0x404
13974803decSYouMin Chen #define DDR_PCTL2_PCFGW_n		0x408
14074803decSYouMin Chen #define DDR_PCTL2_PCTRL_n		0x490
14174803decSYouMin Chen 
1429442a4b3SYouMin Chen #define UMCTL2_REGS_FREQ(n)	\
1439442a4b3SYouMin Chen 	((0x1000 * (n) + (((n) > 0) ? 0x1000 : 0)))
1449442a4b3SYouMin Chen 
145600d0322STang Yun ping /* PCTL2_MSTR */
1469442a4b3SYouMin Chen #define PCTL2_FREQUENCY_MODE_MASK	(1)
1479442a4b3SYouMin Chen #define PCTL2_FREQUENCY_MODE_SHIFT	(29)
1489442a4b3SYouMin Chen #define PCTL2_DLL_OFF_MODE		BIT(15)
1499442a4b3SYouMin Chen /* PCTL2_STAT */
1509442a4b3SYouMin Chen #define PCTL2_SELFREF_TYPE_MASK		(3 << 4)
1519442a4b3SYouMin Chen #define PCTL2_SELFREF_TYPE_SR_NOT_AUTO	(2 << 4)
1529442a4b3SYouMin Chen #define PCTL2_OPERATING_MODE_MASK	(7)
153600d0322STang Yun ping #define PCTL2_OPERATING_MODE_INIT	(0)
154600d0322STang Yun ping #define PCTL2_OPERATING_MODE_NORMAL	(1)
155600d0322STang Yun ping #define PCTL2_OPERATING_MODE_PD		(2)
1569442a4b3SYouMin Chen #define PCTL2_OPERATING_MODE_SR		(3)
1579442a4b3SYouMin Chen /* PCTL2_MRCTRL0 */
1589442a4b3SYouMin Chen #define PCTL2_MR_WR			BIT(31)
1599442a4b3SYouMin Chen #define PCTL2_MR_ADDR_SHIFT		(12)
1609442a4b3SYouMin Chen #define PCTL2_MR_RANK_SHIFT		(4)
1619442a4b3SYouMin Chen #define PCTL2_MR_TYPE_WR		(0)
1629442a4b3SYouMin Chen #define PCTL2_MR_TYPE_RD		(1)
1639442a4b3SYouMin Chen /* PCTL2_MRCTRL1 */
1649442a4b3SYouMin Chen #define PCTL2_MR_ADDRESS_SHIFT		(8)
1659442a4b3SYouMin Chen #define PCTL2_MR_DATA_MASK		(0xff)
166600d0322STang Yun ping /* PCTL2_MRSTAT */
167600d0322STang Yun ping #define PCTL2_MR_WR_BUSY		BIT(0)
1689442a4b3SYouMin Chen /* PCTL2_DERATEEN */
1699442a4b3SYouMin Chen #define PCTL2_DERATE_ENABLE		(1)
1709442a4b3SYouMin Chen /* PCTL2_PWRCTL */
1719442a4b3SYouMin Chen #define PCTL2_SELFREF_SW		BIT(5)
1729442a4b3SYouMin Chen #define PCTL2_POWERDOWN_EN		BIT(1)
1739442a4b3SYouMin Chen #define PCTL2_SELFREF_EN		(1)
1749442a4b3SYouMin Chen /* PCTL2_PWRTMG */
1759442a4b3SYouMin Chen #define PCTL2_SELFREF_TO_X32_MASK	(0xFF)
1769442a4b3SYouMin Chen #define PCTL2_SELFREF_TO_X32_SHIFT	(16)
1779442a4b3SYouMin Chen #define PCTL2_POWERDOWN_TO_X32_MASK	(0x1F)
1789442a4b3SYouMin Chen /* PCTL2_INIT3 */
1799442a4b3SYouMin Chen #define PCTL2_DDR34_MR0_SHIFT		(16)
1809442a4b3SYouMin Chen #define PCTL2_LPDDR234_MR1_SHIFT	(16)
1819442a4b3SYouMin Chen #define PCTL2_DDR34_MR1_SHIFT		(0)
1829442a4b3SYouMin Chen #define PCTL2_LPDDR234_MR2_SHIFT	(0)
1839442a4b3SYouMin Chen /* PCTL2_INIT4 */
1849442a4b3SYouMin Chen #define PCTL2_DDR34_MR2_SHIFT		(16)
1859442a4b3SYouMin Chen #define PCTL2_LPDDR234_MR3_SHIFT	(16)
1869442a4b3SYouMin Chen #define PCTL2_DDR34_MR3_SHIFT		(0)
1879442a4b3SYouMin Chen #define PCTL2_LPDDR4_MR13_SHIFT		(0)
1889442a4b3SYouMin Chen 
1899442a4b3SYouMin Chen /* PCTL2_INIT6 */
1909442a4b3SYouMin Chen #define PCTL2_DDR4_MR4_SHIFT		(16)
1919442a4b3SYouMin Chen #define PCTL2_LPDDR4_MR11_SHIFT		(16)
1929442a4b3SYouMin Chen #define PCTL2_DDR4_MR5_SHIFT		(0)
1939442a4b3SYouMin Chen #define PCTL2_LPDDR4_MR12_SHIFT		(0)
1949442a4b3SYouMin Chen 
1959442a4b3SYouMin Chen /* PCTL2_INIT7 */
1969442a4b3SYouMin Chen #define PCTL2_LPDDR4_MR22_SHIFT		(16)
1979442a4b3SYouMin Chen #define PCTL2_DDR4_MR6_SHIFT		(0)
1989442a4b3SYouMin Chen #define PCTL2_LPDDR4_MR14_SHIFT		(0)
1999442a4b3SYouMin Chen 
2009442a4b3SYouMin Chen #define PCTL2_MR_MASK			(0xffff)
2019442a4b3SYouMin Chen 
2029442a4b3SYouMin Chen /* PCTL2_RFSHCTL3 */
2039442a4b3SYouMin Chen #define PCTL2_DIS_AUTO_REFRESH		(1)
2049442a4b3SYouMin Chen /* PCTL2_ZQCTL0 */
2059442a4b3SYouMin Chen #define PCTL2_DIS_AUTO_ZQ		BIT(31)
2069442a4b3SYouMin Chen #define PCTL2_DIS_SRX_ZQCL		BIT(30)
2079442a4b3SYouMin Chen /* PCTL2_DFILPCFG0 */
2089442a4b3SYouMin Chen #define PCTL2_DFI_LP_EN_SR		BIT(8)
2099442a4b3SYouMin Chen #define PCTL2_DFI_LP_EN_SR_MASK		BIT(8)
2109442a4b3SYouMin Chen #define PCTL2_DFI_LP_EN_SR_SHIFT	(8)
2119442a4b3SYouMin Chen /* PCTL2_DFIMISC */
2129442a4b3SYouMin Chen #define PCTL2_DFI_INIT_COMPLETE_EN	(1)
2139442a4b3SYouMin Chen /* PCTL2_DFISTAT */
2149442a4b3SYouMin Chen #define PCTL2_DFI_LP_ACK		BIT(1)
2159442a4b3SYouMin Chen #define PCTL2_DFI_INIT_COMPLETE		(1)
2169442a4b3SYouMin Chen /* PCTL2_DBG1 */
2179442a4b3SYouMin Chen #define PCTL2_DIS_HIF			BIT(1)
2189442a4b3SYouMin Chen /* PCTL2_DBGCAM */
2199442a4b3SYouMin Chen #define PCTL2_DBG_WR_Q_EMPTY		BIT(26)
2209442a4b3SYouMin Chen #define PCTL2_DBG_RD_Q_EMPTY		BIT(25)
2219442a4b3SYouMin Chen #define PCTL2_DBG_LPR_Q_DEPTH_MASK	(0xffff << 8)
2229442a4b3SYouMin Chen #define PCTL2_DBG_LPR_Q_DEPTH_EMPTY	(0x0 << 8)
2239442a4b3SYouMin Chen /* PCTL2_DBGCMD */
2249442a4b3SYouMin Chen #define PCTL2_RANK1_REFRESH		BIT(1)
2259442a4b3SYouMin Chen #define PCTL2_RANK0_REFRESH		(1)
2269442a4b3SYouMin Chen /* PCTL2_DBGSTAT */
2279442a4b3SYouMin Chen #define PCTL2_RANK1_REFRESH_BUSY	BIT(1)
2289442a4b3SYouMin Chen #define PCTL2_RANK0_REFRESH_BUSY	(1)
2299442a4b3SYouMin Chen /* PCTL2_SWCTL */
2309442a4b3SYouMin Chen #define PCTL2_SW_DONE			(1)
2319442a4b3SYouMin Chen #define PCTL2_SW_DONE_CLEAR		(0)
2329442a4b3SYouMin Chen /* PCTL2_SWSTAT */
2339442a4b3SYouMin Chen #define PCTL2_SW_DONE_ACK		(1)
2349442a4b3SYouMin Chen /* PCTL2_PSTAT */
2359442a4b3SYouMin Chen #define PCTL2_WR_PORT_BUSY_0		BIT(16)
2369442a4b3SYouMin Chen #define PCTL2_RD_PORT_BUSY_0		(1)
2379442a4b3SYouMin Chen /* PCTL2_PCTRLn */
2389442a4b3SYouMin Chen #define PCTL2_PORT_EN			(1)
23974803decSYouMin Chen 
240600d0322STang Yun ping /* PCTL2_ECCCFG0 */
241600d0322STang Yun ping #define ECC_MODE_MASK			(0x7)
242600d0322STang Yun ping #define ECC_MODE_DIS			(0)
243600d0322STang Yun ping #define ECC_MODE_SEC			(0x4)
244600d0322STang Yun ping #define ECC_MODE_ADV			(0x5)
245600d0322STang Yun ping #define ECC_MODE_SHIFT			(0)
246600d0322STang Yun ping #define ECC_TEST_MODE			BIT(3)
247600d0322STang Yun ping #define ECC_DIS_SCRUB			BIT(4)
248600d0322STang Yun ping #define ECC_TYPE_SIDEBAND		(0)
249600d0322STang Yun ping #define ECC_TYPE_INLINE			(1)
250600d0322STang Yun ping #define ECC_TYPE_MASK			(1)
251600d0322STang Yun ping #define ECC_TYPE_SHIFT			(5)
252600d0322STang Yun ping 
25374803decSYouMin Chen void pctl_read_mr(void __iomem *pctl_base, u32 rank, u32 mr_num);
25474803decSYouMin Chen int pctl_write_mr(void __iomem *pctl_base, u32 rank, u32 mr_num, u32 arg,
25574803decSYouMin Chen 		  u32 dramtype);
25674803decSYouMin Chen int pctl_write_vrefdq(void __iomem *pctl_base, u32 rank, u32 vrefrate,
25774803decSYouMin Chen 		      u32 dramtype);
25874803decSYouMin Chen 
25974803decSYouMin Chen u32 pctl_dis_zqcs_aref(void __iomem *pctl_base);
26074803decSYouMin Chen void pctl_rest_zqcs_aref(void __iomem *pctl_base, u32 dis_auto_zq);
26174803decSYouMin Chen 
26274803decSYouMin Chen u32 pctl_remodify_sdram_params(struct ddr_pctl_regs *pctl_regs,
26374803decSYouMin Chen 			       struct sdram_cap_info *cap_info,
26474803decSYouMin Chen 			       u32 dram_type);
26574803decSYouMin Chen int pctl_cfg(void __iomem *pctl_base, struct ddr_pctl_regs *pctl_regs,
26674803decSYouMin Chen 	     u32 sr_idle, u32 pd_idle);
26774803decSYouMin Chen 
268e1652d39SZhihuan He void send_a_refresh(void __iomem *pctl_base, u32 cs);
269e1652d39SZhihuan He 
27074803decSYouMin Chen #endif
271