xref: /optee_os/core/include/drivers/sam/sama7-ddr.h (revision 9ba9163746e3fba86a46ab7e35ac8e5b87ff4b27)
1*9ba91637STony Han /* SPDX-License-Identifier: BSD-2-Clause */
2*9ba91637STony Han /*
3*9ba91637STony Han  * Microchip SAMA7 UDDR Controller and DDR3 PHY Controller registers offsets
4*9ba91637STony Han  * and bit definitions.
5*9ba91637STony Han  *
6*9ba91637STony Han  * Copyright (C) [2024] Microchip Technology Inc. and its subsidiaries
7*9ba91637STony Han  *
8*9ba91637STony Han  * Author: Tony Han <tony.han@microchip.com>
9*9ba91637STony Han  */
10*9ba91637STony Han 
11*9ba91637STony Han #ifndef __SAMA7_DDR_H__
12*9ba91637STony Han #define __SAMA7_DDR_H__
13*9ba91637STony Han 
14*9ba91637STony Han /* DDR3PHY */
15*9ba91637STony Han /* DDR3PHY PHY Initialization Register */
16*9ba91637STony Han #define DDR3PHY_PIR		0x04
17*9ba91637STony Han #define DDR3PHY_PIR_DLLBYP	BIT(17)	/* DLL Bypass */
18*9ba91637STony Han #define DDR3PHY_PIR_ITMSRST	BIT(4)	/* Interface Timing Module Soft Reset */
19*9ba91637STony Han #define DDR3PHY_PIR_DLLLOCK	BIT(2)	/* DLL Lock */
20*9ba91637STony Han #define DDR3PHY_PIR_DLLSRST	BIT(1)	/* DLL Soft Rest */
21*9ba91637STony Han #define DDR3PHY_PIR_INIT	BIT(0)	/* Initialization Trigger */
22*9ba91637STony Han 
23*9ba91637STony Han /* DDR3PHY PHY General Configuration Register */
24*9ba91637STony Han #define DDR3PHY_PGCR		0x08
25*9ba91637STony Han #define DDR3PHY_PGCR_CKDV1	BIT(13)	/* CK# Disable Value */
26*9ba91637STony Han #define DDR3PHY_PGCR_CKDV0	BIT(12)	/* CK Disable Value */
27*9ba91637STony Han 
28*9ba91637STony Han /* DDR3PHY PHY General Status Register */
29*9ba91637STony Han #define DDR3PHY_PGSR		0x0C
30*9ba91637STony Han #define DDR3PHY_PGSR_IDONE	BIT(0)	/* Initialization Done */
31*9ba91637STony Han 
32*9ba91637STony Han /* DDR3PHY AC DLL Control Register */
33*9ba91637STony Han #define DDR3PHY_ACDLLCR		0x14
34*9ba91637STony Han #define DDR3PHY_ACDLLCR_DLLSRST BIT(30)	/* DLL Soft Reset */
35*9ba91637STony Han 
36*9ba91637STony Han /* DDR3PHY AC I/O Configuration Register */
37*9ba91637STony Han #define DDR3PHY_ACIOCR			0x24
38*9ba91637STony Han #define DDR3PHY_ACIOCR_CSPDD_CS0	BIT(18)	/* CS#[0] Power Down Driver */
39*9ba91637STony Han #define DDR3PHY_ACIOCR_CKPDD_CK0	BIT(8)	/* CK[0] Power Down Driver */
40*9ba91637STony Han #define DDR3PHY_ACIORC_ACPDD		BIT(3)	/* AC Power Down Driver */
41*9ba91637STony Han 
42*9ba91637STony Han /* DDR3PHY DATX8 Common Configuration Register */
43*9ba91637STony Han #define DDR3PHY_DXCCR			0x28
44*9ba91637STony Han #define DDR3PHY_DXCCR_DXPDR		BIT(3)	/* Data Power Down Receiver */
45*9ba91637STony Han 
46*9ba91637STony Han /* DDR3PHY DDR System General Configuration Register */
47*9ba91637STony Han #define DDR3PHY_DSGCR			0x2C
48*9ba91637STony Han #define DDR3PHY_DSGCR_ODTPDD_ODT0	BIT(20)	/* ODT[0] Power Down Driver */
49*9ba91637STony Han 
50*9ba91637STony Han /* ZQ status register 0 */
51*9ba91637STony Han #define DDR3PHY_ZQ0SR0			0x188
52*9ba91637STony Han /* impedance select offset */
53*9ba91637STony Han #define DDR3PHY_ZQ0SR0_PDO_OFF		0  /* Pull-down output */
54*9ba91637STony Han #define DDR3PHY_ZQ0SR0_PUO_OFF		5  /* Pull-up output */
55*9ba91637STony Han #define DDR3PHY_ZQ0SR0_PDODT_OFF	10 /* Pull-down on-die termination*/
56*9ba91637STony Han #define DDR3PHY_ZQ0SRO_PUODT_OFF	15 /* Pull-up on-die termination */
57*9ba91637STony Han 
58*9ba91637STony Han /* DDR3PHY DATX8 DLL Control Register */
59*9ba91637STony Han #define DDR3PHY_DX0DLLCR		0x1CC
60*9ba91637STony Han #define DDR3PHY_DX1DLLCR		0x20C	/* DATX8 DLL Control Register */
61*9ba91637STony Han #define DDR3PHY_DXDLLCR_DLLDIS		BIT(31)	/* DLL Disable */
62*9ba91637STony Han 
63*9ba91637STony Han /* UDDRC */
64*9ba91637STony Han /* UDDRC Operating Mode Status Register */
65*9ba91637STony Han #define UDDRC_STAT			0x04
66*9ba91637STony Han /* SDRAM is not in Self-refresh */
67*9ba91637STony Han #define UDDRC_STAT_SELFREF_TYPE_DIS	SHIFT_U32(0, 4)
68*9ba91637STony Han /* SDRAM is in Self-refresh, which was caused by PHY Master Request */
69*9ba91637STony Han #define UDDRC_STAT_SELFREF_TYPE_PHY	SHIFT_U32(1, 4)
70*9ba91637STony Han /* SDRAM is in Self-refresh, which was not caused solely under
71*9ba91637STony Han  * Automatic Self-refresh control
72*9ba91637STony Han  */
73*9ba91637STony Han #define UDDRC_STAT_SELFREF_TYPE_SW	SHIFT_U32(2, 4)
74*9ba91637STony Han /* SDRAM is in Self-refresh, which was caused by Automatic Self-refresh only */
75*9ba91637STony Han #define UDDRC_STAT_SELFREF_TYPE_AUTO	SHIFT_U32(3, 4)
76*9ba91637STony Han #define UDDRC_STAT_SELFREF_TYPE_MSK	GENMASK_32(5, 4)
77*9ba91637STony Han #define UDDRC_STAT_OPMODE_INIT		0
78*9ba91637STony Han #define UDDRC_STAT_OPMODE_NORMAL	1
79*9ba91637STony Han #define UDDRC_STAT_OPMODE_PWRDOWN	2
80*9ba91637STony Han #define UDDRC_STAT_OPMODE_SELF_REFRESH	3
81*9ba91637STony Han #define UDDRC_STAT_OPMODE_MSK		GENMASK_32(2, 0)
82*9ba91637STony Han 
83*9ba91637STony Han /* UDDRC Low Power Control Register */
84*9ba91637STony Han #define UDDRC_PWRCTL			0x30
85*9ba91637STony Han #define UDDRC_PWRCTL_SELFREF_EN		BIT(0)	/* Automatic self-refresh */
86*9ba91637STony Han #define UDDRC_PWRCTL_SELFREF_SW		BIT(5)	/* Software self-refresh */
87*9ba91637STony Han 
88*9ba91637STony Han /* UDDRC DFI Miscellaneous Control Register */
89*9ba91637STony Han #define UDDRC_DFIMISC			0x1B0
90*9ba91637STony Han /* PHY initialization complete enable signal */
91*9ba91637STony Han #define UDDRC_DFIMISC_DFI_INIT_COMPLETE_EN BIT(0)
92*9ba91637STony Han 
93*9ba91637STony Han /* UDDRC Software Register Programming Control Enable */
94*9ba91637STony Han #define UDDRC_SWCTRL			0x320
95*9ba91637STony Han /* Enable quasi-dynamic register programming outside reset */
96*9ba91637STony Han #define UDDRC_SWCTRL_SW_DONE		BIT(0)
97*9ba91637STony Han 
98*9ba91637STony Han /* UDDRC Software Register Programming Control Status */
99*9ba91637STony Han #define UDDRC_SWSTAT			0x324
100*9ba91637STony Han #define UDDRC_SWSTAT_SW_DONE_ACK	BIT(0)	/* Register programming done */
101*9ba91637STony Han 
102*9ba91637STony Han /* UDDRC Port Status Register */
103*9ba91637STony Han #define UDDRC_PSTAT			0x3FC
104*9ba91637STony Han /* Read + writes outstanding transactions on all ports */
105*9ba91637STony Han #define UDDRC_PSTAT_ALL_PORTS		0x1F001F
106*9ba91637STony Han 
107*9ba91637STony Han #define UDDRC_PCTRL_0			0x490	/* Port 0 Control Register */
108*9ba91637STony Han #define UDDRC_PCTRL_1			0x540	/* Port 1 Control Register */
109*9ba91637STony Han #define UDDRC_PCTRL_2			0x5F0	/* Port 2 Control Register */
110*9ba91637STony Han #define UDDRC_PCTRL_3			0x6A0	/* Port 3 Control Register */
111*9ba91637STony Han #define UDDRC_PCTRL_4			0x750	/* Port 4 Control Register */
112*9ba91637STony Han 
113*9ba91637STony Han #endif /* __SAMA7_DDR_H__ */
114