xref: /optee_os/core/include/drivers/sam/at91_ddr.h (revision fbe66cf83199aa6a2aca9f93384cf1ad9185a5f6)
1aa161c19SClément Léger /* SPDX-License-Identifier: BSD-2-Clause */
2aa161c19SClément Léger /*
3aa161c19SClément Léger  * Header file for the Atmel DDR/SDR SDRAM Controller
4aa161c19SClément Léger  *
5aa161c19SClément Léger  * Copyright (C) 2010 Atmel Corporation
6aa161c19SClément Léger  *	Nicolas Ferre <nicolas.ferre@atmel.com>
7aa161c19SClément Léger  */
8aa161c19SClément Léger 
9*fbe66cf8SEtienne Carriere #ifndef __DRIVERS_SAM_AT91_DDRSDR_H
10*fbe66cf8SEtienne Carriere #define __DRIVERS_SAM_AT91_DDRSDR_H
11aa161c19SClément Léger 
12aa161c19SClément Léger /* Mode Register */
13aa161c19SClément Léger #define AT91_DDRSDRC_MR				0x00
14aa161c19SClément Léger /* Command Mode */
15aa161c19SClément Léger #define	AT91_DDRSDRC_MODE			SHIFT_U32(0x7, 0)
16aa161c19SClément Léger #define	AT91_DDRSDRC_MODE_NORMAL		0
17aa161c19SClément Léger #define	AT91_DDRSDRC_MODE_NOP			1
18aa161c19SClément Léger #define	AT91_DDRSDRC_MODE_PRECHARGE		2
19aa161c19SClément Léger #define	AT91_DDRSDRC_MODE_LMR			3
20aa161c19SClément Léger #define	AT91_DDRSDRC_MODE_REFRESH		4
21aa161c19SClément Léger #define	AT91_DDRSDRC_MODE_EXT_LMR		5
22aa161c19SClément Léger #define	AT91_DDRSDRC_MODE_DEEP			6
23aa161c19SClément Léger 
24aa161c19SClément Léger /* Refresh Timer Register */
25aa161c19SClément Léger #define AT91_DDRSDRC_RTR			0x04
26aa161c19SClément Léger /* Refresh Timer Counter */
27aa161c19SClément Léger #define	AT91_DDRSDRC_COUNT			SHIFT_U32(0xfff, 0)
28aa161c19SClément Léger 
29aa161c19SClément Léger /* Configuration Register */
30aa161c19SClément Léger #define AT91_DDRSDRC_CR				0x08
31aa161c19SClément Léger /* Number of Column Bits */
32aa161c19SClément Léger #define	AT91_DDRSDRC_NC				SHIFT_U32(3, 0)
33aa161c19SClément Léger #define	AT91_DDRSDRC_NC_SDR8			SHIFT_U32(0, 0)
34aa161c19SClément Léger #define	AT91_DDRSDRC_NC_SDR9			BIT(0)
35aa161c19SClément Léger #define	AT91_DDRSDRC_NC_SDR10			SHIFT_U32(2, 0)
36aa161c19SClément Léger #define	AT91_DDRSDRC_NC_SDR11			SHIFT_U32(3, 0)
37aa161c19SClément Léger #define	AT91_DDRSDRC_NC_DDR9			SHIFT_U32(0, 0)
38aa161c19SClément Léger #define	AT91_DDRSDRC_NC_DDR10			BIT(0)
39aa161c19SClément Léger #define	AT91_DDRSDRC_NC_DDR11			SHIFT_U32(2, 0)
40aa161c19SClément Léger #define	AT91_DDRSDRC_NC_DDR12			SHIFT_U32(3, 0)
41aa161c19SClément Léger /* Number of Row Bits */
42aa161c19SClément Léger #define	AT91_DDRSDRC_NR				SHIFT_U32(3, 2)
43aa161c19SClément Léger #define	AT91_DDRSDRC_NR_11			SHIFT_U32(0, 2)
44aa161c19SClément Léger #define	AT91_DDRSDRC_NR_12			BIT(2)
45aa161c19SClément Léger #define	AT91_DDRSDRC_NR_13			SHIFT_U32(2, 2)
46aa161c19SClément Léger #define	AT91_DDRSDRC_NR_14			SHIFT_U32(3, 2)
47aa161c19SClément Léger /* CAS Latency */
48aa161c19SClément Léger #define	AT91_DDRSDRC_CAS			SHIFT_U32(7, 4)
49aa161c19SClément Léger #define	AT91_DDRSDRC_CAS_2			SHIFT_U32(2, 4)
50aa161c19SClément Léger #define	AT91_DDRSDRC_CAS_3			SHIFT_U32(3, 4)
51aa161c19SClément Léger #define	AT91_DDRSDRC_CAS_25			SHIFT_U32(6, 4)
52aa161c19SClément Léger /* Reset DLL */
53aa161c19SClément Léger #define	AT91_DDRSDRC_RST_DLL			BIT(7)
54aa161c19SClément Léger /* Output impedance control */
55aa161c19SClément Léger #define	AT91_DDRSDRC_DICDS			BIT(8)
56aa161c19SClément Léger /* Disable DLL [SAM9 Only] */
57aa161c19SClément Léger #define	AT91_DDRSDRC_DIS_DLL			BIT(9)
58aa161c19SClément Léger /* Off-Chip Driver [SAM9 Only] */
59aa161c19SClément Léger #define	AT91_DDRSDRC_OCD			BIT(12)
60aa161c19SClément Léger /* Mask Data is Shared [SAM9 Only] */
61aa161c19SClément Léger #define	AT91_DDRSDRC_DQMS			BIT(16)
62aa161c19SClément Léger /* Active Bank X to Burst Stop Read Access Bank Y [SAM9 Only] */
63aa161c19SClément Léger #define	AT91_DDRSDRC_ACTBST			BIT(18)
64aa161c19SClément Léger 
65aa161c19SClément Léger /* Timing 0 Register */
66aa161c19SClément Léger #define AT91_DDRSDRC_T0PR			0x0C
67aa161c19SClément Léger /* Active to Precharge delay */
68aa161c19SClément Léger #define	AT91_DDRSDRC_TRAS			SHIFT_U32(0xf, 0)
69aa161c19SClément Léger /* Row to Column delay */
70aa161c19SClément Léger #define	AT91_DDRSDRC_TRCD			SHIFT_U32(0xf, 4)
71aa161c19SClément Léger /* Write recovery delay */
72aa161c19SClément Léger #define	AT91_DDRSDRC_TWR			SHIFT_U32(0xf, 8)
73aa161c19SClément Léger /* Row cycle delay */
74aa161c19SClément Léger #define	AT91_DDRSDRC_TRC			SHIFT_U32(0xf, 12)
75aa161c19SClément Léger /* Row precharge delay */
76aa161c19SClément Léger #define	AT91_DDRSDRC_TRP			SHIFT_U32(0xf, 16)
77aa161c19SClément Léger /* Active BankA to BankB */
78aa161c19SClément Léger #define	AT91_DDRSDRC_TRRD			SHIFT_U32(0xf, 20)
79aa161c19SClément Léger /* Internal Write to Read delay */
80aa161c19SClément Léger #define	AT91_DDRSDRC_TWTR			SHIFT_U32(0x7, 24)
81aa161c19SClément Léger /* Reduce Write to Read Delay [SAM9 Only] */
82aa161c19SClément Léger #define	AT91_DDRSDRC_RED_WRRD			SHIFT_U32(0x1, 27)
83aa161c19SClément Léger /* Load mode to active/refresh delay */
84aa161c19SClément Léger #define	AT91_DDRSDRC_TMRD			SHIFT_U32(0xf, 28)
85aa161c19SClément Léger 
86aa161c19SClément Léger /* Timing 1 Register */
87aa161c19SClément Léger #define AT91_DDRSDRC_T1PR			0x10
88aa161c19SClément Léger /* Row Cycle Delay */
89aa161c19SClément Léger #define	AT91_DDRSDRC_TRFC			SHIFT_U32(0x1f, 0)
90aa161c19SClément Léger /* Exit self-refresh to non-read */
91aa161c19SClément Léger #define	AT91_DDRSDRC_TXSNR			SHIFT_U32(0xff, 8)
92aa161c19SClément Léger /* Exit self-refresh to read */
93aa161c19SClément Léger #define	AT91_DDRSDRC_TXSRD			SHIFT_U32(0xff, 16)
94aa161c19SClément Léger /* Exit power-down delay */
95aa161c19SClément Léger #define	AT91_DDRSDRC_TXP			SHIFT_U32(0xf, 24)
96aa161c19SClément Léger 
97aa161c19SClément Léger /* Timing 2 Register [SAM9 Only] */
98aa161c19SClément Léger #define AT91_DDRSDRC_T2PR			0x14
99aa161c19SClément Léger /* Exit active power down delay to read command in mode "Fast Exit" */
100aa161c19SClément Léger #define	AT91_DDRSDRC_TXARD			SHIFT_U32(0xf, 0)
101aa161c19SClément Léger /* Exit active power down delay to read command in mode "Slow Exit" */
102aa161c19SClément Léger #define	AT91_DDRSDRC_TXARDS			SHIFT_U32(0xf, 4)
103aa161c19SClément Léger /* Row Precharge All delay */
104aa161c19SClément Léger #define	AT91_DDRSDRC_TRPA			SHIFT_U32(0xf, 8)
105aa161c19SClément Léger /* Read to Precharge delay */
106aa161c19SClément Léger #define	AT91_DDRSDRC_TRTP			SHIFT_U32(0x7, 12)
107aa161c19SClément Léger 
108aa161c19SClément Léger /* Low Power Register */
109aa161c19SClément Léger #define AT91_DDRSDRC_LPR			0x1C
110aa161c19SClément Léger /* Low-power Configurations */
111aa161c19SClément Léger #define	AT91_DDRSDRC_LPCB			SHIFT_U32(3, 0)
112aa161c19SClément Léger #define	AT91_DDRSDRC_LPCB_DISABLE		0
113aa161c19SClément Léger #define	AT91_DDRSDRC_LPCB_SELF_REFRESH		1
114aa161c19SClément Léger #define	AT91_DDRSDRC_LPCB_POWER_DOWN		2
115aa161c19SClément Léger #define	AT91_DDRSDRC_LPCB_DEEP_POWER_DOWN	3
116aa161c19SClément Léger /* Clock Frozen */
117aa161c19SClément Léger #define	AT91_DDRSDRC_CLKFR			BIT(2)
118aa161c19SClément Léger /* LPDDR Power Off */
119aa161c19SClément Léger #define	AT91_DDRSDRC_LPDDR2_PWOFF		BIT(3)
120aa161c19SClément Léger /* Partial Array Self Refresh */
121aa161c19SClément Léger #define	AT91_DDRSDRC_PASR			SHIFT_U32(7, 4)
122aa161c19SClément Léger /* Temperature Compensated Self Refresh */
123aa161c19SClément Léger #define	AT91_DDRSDRC_TCSR			SHIFT_U32(3, 8)
124aa161c19SClément Léger /* Drive Strength */
125aa161c19SClément Léger #define	AT91_DDRSDRC_DS				SHIFT_U32(3, 10)
126aa161c19SClément Léger /* Time to define when Low Power Mode is enabled */
127aa161c19SClément Léger #define	AT91_DDRSDRC_TIMEOUT			SHIFT_U32(3, 12)
128aa161c19SClément Léger #define	AT91_DDRSDRC_TIMEOUT_0_CLK_CYCLES	SHIFT_U32(0, 12)
129aa161c19SClément Léger #define	AT91_DDRSDRC_TIMEOUT_64_CLK_CYCLES	BIT(12)
130aa161c19SClément Léger #define	AT91_DDRSDRC_TIMEOUT_128_CLK_CYCLES	SHIFT_U32(2, 12)
131aa161c19SClément Léger /* Active power down exit time */
132aa161c19SClément Léger #define	AT91_DDRSDRC_APDE			BIT(16)
133aa161c19SClément Léger /* Update load mode register and extended mode register */
134aa161c19SClément Léger #define	AT91_DDRSDRC_UPD_MR			SHIFT_U32(3, 20)
135aa161c19SClément Léger 
136aa161c19SClément Léger /* Memory Device Register */
137aa161c19SClément Léger #define AT91_DDRSDRC_MDR			0x20
138aa161c19SClément Léger /* Memory Device Type */
139aa161c19SClément Léger #define	AT91_DDRSDRC_MD				SHIFT_U32(7, 0)
140aa161c19SClément Léger #define	AT91_DDRSDRC_MD_SDR			0
141aa161c19SClément Léger #define	AT91_DDRSDRC_MD_LOW_POWER_SDR		1
142aa161c19SClément Léger #define	AT91_DDRSDRC_MD_LOW_POWER_DDR		3
143aa161c19SClément Léger #define	AT91_DDRSDRC_MD_LPDDR3			5
144aa161c19SClément Léger /* [SAM9 Only] */
145aa161c19SClément Léger #define	AT91_DDRSDRC_MD_DDR2			6
146aa161c19SClément Léger #define	AT91_DDRSDRC_MD_LPDDR2			7
147aa161c19SClément Léger /* Data Bus Width */
148aa161c19SClément Léger #define AT91_DDRSDRC_DBW			BIT(4)
149aa161c19SClément Léger #define	AT91_DDRSDRC_DBW_32BITS			SHIFT_U32(0, 4)
150aa161c19SClément Léger #define	AT91_DDRSDRC_DBW_16BITS			BIT(4)
151aa161c19SClément Léger 
152aa161c19SClément Léger /* DLL Information Register */
153aa161c19SClément Léger #define AT91_DDRSDRC_DLL			0x24
154aa161c19SClément Léger /* Master Delay increment */
155aa161c19SClément Léger #define	AT91_DDRSDRC_MDINC			BIT(0)
156aa161c19SClément Léger /* Master Delay decrement */
157aa161c19SClément Léger #define	AT91_DDRSDRC_MDDEC			BIT(1)
158aa161c19SClément Léger /* Master Delay Overflow */
159aa161c19SClément Léger #define	AT91_DDRSDRC_MDOVF			BIT(2)
160aa161c19SClément Léger /* Master Delay value */
161aa161c19SClément Léger #define	AT91_DDRSDRC_MDVAL			SHIFT_U32(0xff, 8)
162aa161c19SClément Léger 
163aa161c19SClément Léger /* High Speed Register [SAM9 Only] */
164aa161c19SClément Léger #define AT91_DDRSDRC_HS				0x2C
165aa161c19SClément Léger /* Anticip read access is disabled */
166aa161c19SClément Léger #define	AT91_DDRSDRC_DIS_ATCP_RD		BIT(2)
167aa161c19SClément Léger 
168aa161c19SClément Léger /* Delay I/O Register n */
169aa161c19SClément Léger #define AT91_DDRSDRC_DELAY(n)			(0x30 + (0x4 * (n)))
170aa161c19SClément Léger 
171aa161c19SClément Léger /* Write Protect Mode Register [SAM9 Only] */
172aa161c19SClément Léger #define AT91_DDRSDRC_WPMR			0xE4
173aa161c19SClément Léger /* Write protect enable */
174aa161c19SClément Léger #define	AT91_DDRSDRC_WP				BIT(0)
175aa161c19SClément Léger /* Write protect key */
176aa161c19SClément Léger #define	AT91_DDRSDRC_WPKEY			SHIFT_U32(0xffffff, 8)
177aa161c19SClément Léger /* Write protect key = "DDR" */
178aa161c19SClément Léger #define	AT91_DDRSDRC_KEY			SHIFT_U32(0x444452, 8)
179aa161c19SClément Léger 
180aa161c19SClément Léger /* Write Protect Status Register [SAM9 Only] */
181aa161c19SClément Léger #define AT91_DDRSDRC_WPSR			0xE8
182aa161c19SClément Léger /* Write protect violation status */
183aa161c19SClément Léger #define	AT91_DDRSDRC_WPVS			BIT(0)
184aa161c19SClément Léger /* Write protect violation source */
185aa161c19SClément Léger #define	AT91_DDRSDRC_WPVSRC			SHIFT_U32(0xffff, 8)
186aa161c19SClément Léger 
187aa161c19SClément Léger #endif
188