xref: /linux/include/soc/at91/at91sam9_ddrsdr.h (revision 2874c5fd284268364ece81a7bd936f3c8168e567)
1*2874c5fdSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
2f0a0a58eSAlexandre Belloni /*
3f0a0a58eSAlexandre Belloni  * Header file for the Atmel DDR/SDR SDRAM Controller
4f0a0a58eSAlexandre Belloni  *
5f0a0a58eSAlexandre Belloni  * Copyright (C) 2010 Atmel Corporation
6f0a0a58eSAlexandre Belloni  *	Nicolas Ferre <nicolas.ferre@atmel.com>
7f0a0a58eSAlexandre Belloni  */
8f0a0a58eSAlexandre Belloni #ifndef AT91SAM9_DDRSDR_H
9f0a0a58eSAlexandre Belloni #define AT91SAM9_DDRSDR_H
10f0a0a58eSAlexandre Belloni 
11f0a0a58eSAlexandre Belloni #define AT91_DDRSDRC_MR		0x00	/* Mode Register */
12f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_MODE	(0x7 << 0)		/* Command Mode */
13f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_MODE_NORMAL	0
14f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_MODE_NOP		1
15f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_MODE_PRECHARGE	2
16f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_MODE_LMR		3
17f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_MODE_REFRESH	4
18f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_MODE_EXT_LMR	5
19f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_MODE_DEEP		6
20f0a0a58eSAlexandre Belloni 
21f0a0a58eSAlexandre Belloni #define AT91_DDRSDRC_RTR	0x04	/* Refresh Timer Register */
22f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_COUNT	(0xfff << 0)		/* Refresh Timer Counter */
23f0a0a58eSAlexandre Belloni 
24f0a0a58eSAlexandre Belloni #define AT91_DDRSDRC_CR		0x08	/* Configuration Register */
25f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_NC		(3 << 0)		/* Number of Column Bits */
26f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_NC_SDR8	(0 << 0)
27f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_NC_SDR9	(1 << 0)
28f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_NC_SDR10	(2 << 0)
29f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_NC_SDR11	(3 << 0)
30f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_NC_DDR9	(0 << 0)
31f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_NC_DDR10	(1 << 0)
32f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_NC_DDR11	(2 << 0)
33f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_NC_DDR12	(3 << 0)
34f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_NR		(3 << 2)		/* Number of Row Bits */
35f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_NR_11	(0 << 2)
36f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_NR_12	(1 << 2)
37f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_NR_13	(2 << 2)
38f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_NR_14	(3 << 2)
39f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_CAS	(7 << 4)		/* CAS Latency */
40f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_CAS_2	(2 << 4)
41f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_CAS_3	(3 << 4)
42f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_CAS_25	(6 << 4)
43f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_RST_DLL	(1 << 7)		/* Reset DLL */
44f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_DICDS	(1 << 8)		/* Output impedance control */
45f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_DIS_DLL	(1 << 9)		/* Disable DLL [SAM9 Only] */
46f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_OCD	(1 << 12)		/* Off-Chip Driver [SAM9 Only] */
47f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_DQMS	(1 << 16)		/* Mask Data is Shared [SAM9 Only] */
48f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_ACTBST	(1 << 18)		/* Active Bank X to Burst Stop Read Access Bank Y [SAM9 Only] */
49f0a0a58eSAlexandre Belloni 
50f0a0a58eSAlexandre Belloni #define AT91_DDRSDRC_T0PR	0x0C	/* Timing 0 Register */
51f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_TRAS	(0xf <<  0)		/* Active to Precharge delay */
52f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_TRCD	(0xf <<  4)		/* Row to Column delay */
53f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_TWR	(0xf <<  8)		/* Write recovery delay */
54f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_TRC	(0xf << 12)		/* Row cycle delay */
55f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_TRP	(0xf << 16)		/* Row precharge delay */
56f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_TRRD	(0xf << 20)		/* Active BankA to BankB */
57f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_TWTR	(0x7 << 24)		/* Internal Write to Read delay */
58f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_RED_WRRD	(0x1 << 27)		/* Reduce Write to Read Delay [SAM9 Only] */
59f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_TMRD	(0xf << 28)		/* Load mode to active/refresh delay */
60f0a0a58eSAlexandre Belloni 
61f0a0a58eSAlexandre Belloni #define AT91_DDRSDRC_T1PR	0x10	/* Timing 1 Register */
62f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_TRFC	(0x1f << 0)		/* Row Cycle Delay */
63f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_TXSNR	(0xff << 8)		/* Exit self-refresh to non-read */
64f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_TXSRD	(0xff << 16)		/* Exit self-refresh to read */
65f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_TXP	(0xf  << 24)		/* Exit power-down delay */
66f0a0a58eSAlexandre Belloni 
67f0a0a58eSAlexandre Belloni #define AT91_DDRSDRC_T2PR	0x14	/* Timing 2 Register [SAM9 Only] */
68f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_TXARD	(0xf  << 0)		/* Exit active power down delay to read command in mode "Fast Exit" */
69f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_TXARDS	(0xf  << 4)		/* Exit active power down delay to read command in mode "Slow Exit" */
70f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_TRPA	(0xf  << 8)		/* Row Precharge All delay */
71f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_TRTP	(0x7  << 12)		/* Read to Precharge delay */
72f0a0a58eSAlexandre Belloni 
73f0a0a58eSAlexandre Belloni #define AT91_DDRSDRC_LPR	0x1C	/* Low Power Register */
74f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_LPCB	(3 << 0)		/* Low-power Configurations */
75f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_LPCB_DISABLE		0
76f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_LPCB_SELF_REFRESH		1
77f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_LPCB_POWER_DOWN		2
78f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_LPCB_DEEP_POWER_DOWN	3
79f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_CLKFR	(1 << 2)	/* Clock Frozen */
80e3f0a401SAlexandre Belloni #define		AT91_DDRSDRC_LPDDR2_PWOFF	(1 << 3)	/* LPDDR Power Off */
81f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_PASR	(7 << 4)	/* Partial Array Self Refresh */
82f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_TCSR	(3 << 8)	/* Temperature Compensated Self Refresh */
83f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_DS		(3 << 10)	/* Drive Strength */
84f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_TIMEOUT	(3 << 12)	/* Time to define when Low Power Mode is enabled */
85f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_TIMEOUT_0_CLK_CYCLES	(0 << 12)
86f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_TIMEOUT_64_CLK_CYCLES	(1 << 12)
87f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_TIMEOUT_128_CLK_CYCLES	(2 << 12)
88f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_APDE	(1 << 16)	 /* Active power down exit time */
89f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_UPD_MR	(3 << 20)	 /* Update load mode register and extended mode register */
90f0a0a58eSAlexandre Belloni 
91f0a0a58eSAlexandre Belloni #define AT91_DDRSDRC_MDR	0x20	/* Memory Device Register */
9202f513a0SPeter Rosin #define		AT91_DDRSDRC_MD		(7 << 0)	/* Memory Device Type */
93f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_MD_SDR		0
94f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_MD_LOW_POWER_SDR	1
95f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_MD_LOW_POWER_DDR	3
96e3f0a401SAlexandre Belloni #define			AT91_DDRSDRC_MD_LPDDR3		5
97f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_MD_DDR2		6	/* [SAM9 Only] */
98e3f0a401SAlexandre Belloni #define			AT91_DDRSDRC_MD_LPDDR2		7
99f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_DBW	(1 << 4)		/* Data Bus Width */
100f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_DBW_32BITS		(0 <<  4)
101f0a0a58eSAlexandre Belloni #define			AT91_DDRSDRC_DBW_16BITS		(1 <<  4)
102f0a0a58eSAlexandre Belloni 
103f0a0a58eSAlexandre Belloni #define AT91_DDRSDRC_DLL	0x24	/* DLL Information Register */
104f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_MDINC	(1 << 0)		/* Master Delay increment */
105f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_MDDEC	(1 << 1)		/* Master Delay decrement */
106f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_MDOVF	(1 << 2)		/* Master Delay Overflow */
107f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_MDVAL	(0xff <<  8)		/* Master Delay value */
108f0a0a58eSAlexandre Belloni 
109f0a0a58eSAlexandre Belloni #define AT91_DDRSDRC_HS		0x2C	/* High Speed Register [SAM9 Only] */
110f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_DIS_ATCP_RD	(1 << 2)	/* Anticip read access is disabled */
111f0a0a58eSAlexandre Belloni 
112f0a0a58eSAlexandre Belloni #define AT91_DDRSDRC_DELAY(n)	(0x30 + (0x4 * (n)))	/* Delay I/O Register n */
113f0a0a58eSAlexandre Belloni 
114f0a0a58eSAlexandre Belloni #define AT91_DDRSDRC_WPMR	0xE4	/* Write Protect Mode Register [SAM9 Only] */
115f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_WP		(1 << 0)		/* Write protect enable */
116f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_WPKEY	(0xffffff << 8)		/* Write protect key */
117f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_KEY	(0x444452 << 8)		/* Write protect key = "DDR" */
118f0a0a58eSAlexandre Belloni 
119f0a0a58eSAlexandre Belloni #define AT91_DDRSDRC_WPSR	0xE8	/* Write Protect Status Register [SAM9 Only] */
120f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_WPVS	(1 << 0)		/* Write protect violation status */
121f0a0a58eSAlexandre Belloni #define		AT91_DDRSDRC_WPVSRC	(0xffff << 8)		/* Write protect violation source */
122f0a0a58eSAlexandre Belloni 
123f0a0a58eSAlexandre Belloni #endif
124