xref: /rk3399_ARM-atf/drivers/renesas/common/emmc/emmc_registers.h (revision bf007a56e725eb2aff8be50c6b94aa0e7dffb6f2)
1b28c29d0SBiju Das /*
2b28c29d0SBiju Das  * Copyright (c) 2015-2020, Renesas Electronics Corporation. All rights reserved.
3b28c29d0SBiju Das  *
4b28c29d0SBiju Das  * SPDX-License-Identifier: BSD-3-Clause
5b28c29d0SBiju Das  */
6b28c29d0SBiju Das 
7b28c29d0SBiju Das #ifndef EMMC_REGISTERS_H
8b28c29d0SBiju Das #define EMMC_REGISTERS_H
9b28c29d0SBiju Das 
10b28c29d0SBiju Das /* MMC channel select */
11b28c29d0SBiju Das #define MMC_CH0		(0U)	/* SDHI2/MMC0 */
12b28c29d0SBiju Das #define MMC_CH1		(1U)	/* SDHI3/MMC1 */
13b28c29d0SBiju Das 
14*bf007a56SLad Prabhakar #if (RCAR_LSI == RCAR_E3)  || (RCAR_LSI == RZ_G2M) || (RCAR_LSI == RZ_G2H) || (RCAR_LSI == RZ_G2N)
15*bf007a56SLad Prabhakar #define USE_MMC_CH	(MMC_CH1)	/* R-Car E3 or RZ/G2{H,M,N} */
16*bf007a56SLad Prabhakar #else /* RCAR_LSI == RCAR_E3 || RCAR_LSI == RZ_G2{H,M,N} */
17b28c29d0SBiju Das #define USE_MMC_CH	(MMC_CH0)	/* R-Car H3/M3/M3N */
18*bf007a56SLad Prabhakar #endif /* RCAR_LSI == RCAR_E3 || RCAR_LSI == RZ_G2{H,M,N} */
19b28c29d0SBiju Das 
20b28c29d0SBiju Das #define BIT0	(0x00000001U)
21b28c29d0SBiju Das #define BIT1	(0x00000002U)
22b28c29d0SBiju Das #define BIT2	(0x00000004U)
23b28c29d0SBiju Das #define BIT3	(0x00000008U)
24b28c29d0SBiju Das #define BIT4	(0x00000010U)
25b28c29d0SBiju Das #define BIT5	(0x00000020U)
26b28c29d0SBiju Das #define BIT6	(0x00000040U)
27b28c29d0SBiju Das #define BIT7	(0x00000080U)
28b28c29d0SBiju Das #define BIT8	(0x00000100U)
29b28c29d0SBiju Das #define BIT9	(0x00000200U)
30b28c29d0SBiju Das #define BIT10	(0x00000400U)
31b28c29d0SBiju Das #define BIT11	(0x00000800U)
32b28c29d0SBiju Das #define BIT12	(0x00001000U)
33b28c29d0SBiju Das #define BIT13	(0x00002000U)
34b28c29d0SBiju Das #define BIT14	(0x00004000U)
35b28c29d0SBiju Das #define BIT15	(0x00008000U)
36b28c29d0SBiju Das #define BIT16	(0x00010000U)
37b28c29d0SBiju Das #define BIT17	(0x00020000U)
38b28c29d0SBiju Das #define BIT18	(0x00040000U)
39b28c29d0SBiju Das #define BIT19	(0x00080000U)
40b28c29d0SBiju Das #define BIT20	(0x00100000U)
41b28c29d0SBiju Das #define BIT21	(0x00200000U)
42b28c29d0SBiju Das #define BIT22	(0x00400000U)
43b28c29d0SBiju Das #define BIT23	(0x00800000U)
44b28c29d0SBiju Das #define BIT24	(0x01000000U)
45b28c29d0SBiju Das #define BIT25	(0x02000000U)
46b28c29d0SBiju Das #define BIT26	(0x04000000U)
47b28c29d0SBiju Das #define BIT27	(0x08000000U)
48b28c29d0SBiju Das #define BIT28	(0x10000000U)
49b28c29d0SBiju Das #define BIT29	(0x20000000U)
50b28c29d0SBiju Das #define BIT30	(0x40000000U)
51b28c29d0SBiju Das #define BIT31	(0x80000000U)
52b28c29d0SBiju Das 
53b28c29d0SBiju Das /* Clock Pulse Generator (CPG) registers */
54b28c29d0SBiju Das #define CPG_BASE	(0xE6150000U)
55b28c29d0SBiju Das /* Module stop status register 3 */
56b28c29d0SBiju Das #define CPG_MSTPSR3	(CPG_BASE + 0x0048U)
57b28c29d0SBiju Das /* System module stop control register 3 */
58b28c29d0SBiju Das #define CPG_SMSTPCR3	(CPG_BASE + 0x013CU)
59b28c29d0SBiju Das /* SDHI2 clock frequency control register */
60b28c29d0SBiju Das #define CPG_SD2CKCR	(CPG_BASE + 0x0268U)
61b28c29d0SBiju Das /* SDHI3 clock frequency control register */
62b28c29d0SBiju Das #define CPG_SD3CKCR	(CPG_BASE + 0x026CU)
63b28c29d0SBiju Das /* CPG Write Protect Register */
64b28c29d0SBiju Das #define CPG_CPGWPR	(CPG_BASE + 0x0900U)
65b28c29d0SBiju Das 
66b28c29d0SBiju Das #if USE_MMC_CH == MMC_CH0
67b28c29d0SBiju Das #define CPG_SDxCKCR		(CPG_SD2CKCR)	/* SDHI2/MMC0 */
68b28c29d0SBiju Das #else /* USE_MMC_CH == MMC_CH0 */
69b28c29d0SBiju Das #define CPG_SDxCKCR		(CPG_SD3CKCR)	/* SDHI3/MMC1 */
70b28c29d0SBiju Das #endif /* USE_MMC_CH == MMC_CH0 */
71b28c29d0SBiju Das 
72b28c29d0SBiju Das /* Boot Status register */
73b28c29d0SBiju Das #define  MFISBTSTSR			(0xE6260604U)
74b28c29d0SBiju Das 
75b28c29d0SBiju Das #define  MFISBTSTSR_BOOT_PARTITION	(0x00000010U)
76b28c29d0SBiju Das 
77b28c29d0SBiju Das /* eMMC registers */
78b28c29d0SBiju Das #define MMC0_SD_BASE		(0xEE140000U)
79b28c29d0SBiju Das #define MMC1_SD_BASE		(0xEE160000U)
80b28c29d0SBiju Das 
81b28c29d0SBiju Das #if USE_MMC_CH == MMC_CH0
82b28c29d0SBiju Das #define MMC_SD_BASE		(MMC0_SD_BASE)
83b28c29d0SBiju Das #else /* USE_MMC_CH == MMC_CH0 */
84b28c29d0SBiju Das #define MMC_SD_BASE		(MMC1_SD_BASE)
85b28c29d0SBiju Das #endif /* USE_MMC_CH == MMC_CH0 */
86b28c29d0SBiju Das 
87b28c29d0SBiju Das #define SD_CMD			(MMC_SD_BASE + 0x0000U)
88b28c29d0SBiju Das #define SD_PORTSEL		(MMC_SD_BASE + 0x0008U)
89b28c29d0SBiju Das #define SD_ARG			(MMC_SD_BASE + 0x0010U)
90b28c29d0SBiju Das #define SD_ARG1			(MMC_SD_BASE + 0x0018U)
91b28c29d0SBiju Das #define SD_STOP			(MMC_SD_BASE + 0x0020U)
92b28c29d0SBiju Das #define SD_SECCNT		(MMC_SD_BASE + 0x0028U)
93b28c29d0SBiju Das #define SD_RSP10		(MMC_SD_BASE + 0x0030U)
94b28c29d0SBiju Das #define SD_RSP1			(MMC_SD_BASE + 0x0038U)
95b28c29d0SBiju Das #define SD_RSP32		(MMC_SD_BASE + 0x0040U)
96b28c29d0SBiju Das #define SD_RSP3			(MMC_SD_BASE + 0x0048U)
97b28c29d0SBiju Das #define SD_RSP54		(MMC_SD_BASE + 0x0050U)
98b28c29d0SBiju Das #define SD_RSP5			(MMC_SD_BASE + 0x0058U)
99b28c29d0SBiju Das #define SD_RSP76		(MMC_SD_BASE + 0x0060U)
100b28c29d0SBiju Das #define SD_RSP7			(MMC_SD_BASE + 0x0068U)
101b28c29d0SBiju Das #define SD_INFO1		(MMC_SD_BASE + 0x0070U)
102b28c29d0SBiju Das #define SD_INFO2		(MMC_SD_BASE + 0x0078U)
103b28c29d0SBiju Das #define SD_INFO1_MASK		(MMC_SD_BASE + 0x0080U)
104b28c29d0SBiju Das #define SD_INFO2_MASK		(MMC_SD_BASE + 0x0088U)
105b28c29d0SBiju Das #define SD_CLK_CTRL		(MMC_SD_BASE + 0x0090U)
106b28c29d0SBiju Das #define SD_SIZE			(MMC_SD_BASE + 0x0098U)
107b28c29d0SBiju Das #define SD_OPTION		(MMC_SD_BASE + 0x00A0U)
108b28c29d0SBiju Das #define SD_ERR_STS1		(MMC_SD_BASE + 0x00B0U)
109b28c29d0SBiju Das #define SD_ERR_STS2		(MMC_SD_BASE + 0x00B8U)
110b28c29d0SBiju Das #define SD_BUF0			(MMC_SD_BASE + 0x00C0U)
111b28c29d0SBiju Das #define SDIO_MODE		(MMC_SD_BASE + 0x00D0U)
112b28c29d0SBiju Das #define SDIO_INFO1		(MMC_SD_BASE + 0x00D8U)
113b28c29d0SBiju Das #define SDIO_INFO1_MASK		(MMC_SD_BASE + 0x00E0U)
114b28c29d0SBiju Das #define CC_EXT_MODE		(MMC_SD_BASE + 0x0360U)
115b28c29d0SBiju Das #define SOFT_RST		(MMC_SD_BASE + 0x0380U)
116b28c29d0SBiju Das #define VERSION			(MMC_SD_BASE + 0x0388U)
117b28c29d0SBiju Das #define HOST_MODE		(MMC_SD_BASE + 0x0390U)
118b28c29d0SBiju Das #define DM_CM_DTRAN_MODE	(MMC_SD_BASE + 0x0820U)
119b28c29d0SBiju Das #define DM_CM_DTRAN_CTRL	(MMC_SD_BASE + 0x0828U)
120b28c29d0SBiju Das #define DM_CM_RST		(MMC_SD_BASE + 0x0830U)
121b28c29d0SBiju Das #define DM_CM_INFO1		(MMC_SD_BASE + 0x0840U)
122b28c29d0SBiju Das #define DM_CM_INFO1_MASK	(MMC_SD_BASE + 0x0848U)
123b28c29d0SBiju Das #define DM_CM_INFO2		(MMC_SD_BASE + 0x0850U)
124b28c29d0SBiju Das #define DM_CM_INFO2_MASK	(MMC_SD_BASE + 0x0858U)
125b28c29d0SBiju Das #define DM_DTRAN_ADDR		(MMC_SD_BASE + 0x0880U)
126b28c29d0SBiju Das 
127b28c29d0SBiju Das /* SD_INFO1 Registers */
128b28c29d0SBiju Das #define SD_INFO1_HPIRES		0x00010000UL /* Response Reception Completion */
129b28c29d0SBiju Das #define SD_INFO1_INFO10		0x00000400UL /* Indicates the SDDAT3 state */
130b28c29d0SBiju Das #define SD_INFO1_INFO9		0x00000200UL /* SDDAT3 Card Insertion */
131b28c29d0SBiju Das #define SD_INFO1_INFO8		0x00000100UL /* SDDAT3 Card Removal */
132b28c29d0SBiju Das #define SD_INFO1_INFO7		0x00000080UL /* Write Protect */
133b28c29d0SBiju Das #define SD_INFO1_INFO5		0x00000020UL /* Indicates the ISDCD state */
134b28c29d0SBiju Das #define SD_INFO1_INFO4		0x00000010UL /* ISDCD Card Insertion */
135b28c29d0SBiju Das #define SD_INFO1_INFO3		0x00000008UL /* ISDCD Card Removal */
136b28c29d0SBiju Das #define SD_INFO1_INFO2		0x00000004UL /* Access end */
137b28c29d0SBiju Das #define SD_INFO1_INFO0		0x00000001UL /* Response end */
138b28c29d0SBiju Das 
139b28c29d0SBiju Das /* SD_INFO2 Registers */
140b28c29d0SBiju Das #define SD_INFO2_ILA		0x00008000UL /* Illegal Access Error */
141b28c29d0SBiju Das #define SD_INFO2_CBSY		0x00004000UL /* Command Type Register Busy */
142b28c29d0SBiju Das #define SD_INFO2_SCLKDIVEN	0x00002000UL
143b28c29d0SBiju Das #define SD_INFO2_BWE		0x00000200UL /* SD_BUF Write Enable */
144b28c29d0SBiju Das #define SD_INFO2_BRE		0x00000100UL /* SD_BUF Read Enable */
145b28c29d0SBiju Das #define SD_INFO2_DAT0		0x00000080UL /* SDDAT0 */
146b28c29d0SBiju Das #define SD_INFO2_ERR6		0x00000040UL /* Response Timeout */
147b28c29d0SBiju Das #define SD_INFO2_ERR5		0x00000020UL /* SD_BUF Illegal Read Access */
148b28c29d0SBiju Das #define SD_INFO2_ERR4		0x00000010UL /* SD_BUF Illegal Write Access */
149b28c29d0SBiju Das #define SD_INFO2_ERR3		0x00000008UL /* Data Timeout */
150b28c29d0SBiju Das #define SD_INFO2_ERR2		0x00000004UL /* END Error */
151b28c29d0SBiju Das #define SD_INFO2_ERR1		0x00000002UL /* CRC Error */
152b28c29d0SBiju Das #define SD_INFO2_ERR0		0x00000001UL /* CMD Error */
153b28c29d0SBiju Das #define SD_INFO2_ALL_ERR	0x0000807FUL
154b28c29d0SBiju Das #define SD_INFO2_CLEAR		0x00000800UL /* BIT11 write value should always be 1. HWM_0003 */
155b28c29d0SBiju Das 
156b28c29d0SBiju Das /* SOFT_RST */
157b28c29d0SBiju Das #define SOFT_RST_SDRST		0x00000001UL
158b28c29d0SBiju Das 
159b28c29d0SBiju Das /* SD_CLK_CTRL */
160b28c29d0SBiju Das #define SD_CLK_CTRL_SDCLKOFFEN		0x00000200UL
161b28c29d0SBiju Das #define SD_CLK_CTRL_SCLKEN		0x00000100UL
162b28c29d0SBiju Das #define SD_CLK_CTRL_CLKDIV_MASK		0x000000FFUL
163b28c29d0SBiju Das #define SD_CLOCK_ENABLE			0x00000100UL
164b28c29d0SBiju Das #define SD_CLOCK_DISABLE		0x00000000UL
165b28c29d0SBiju Das #define SD_CLK_WRITE_MASK		0x000003FFUL
166b28c29d0SBiju Das #define SD_CLK_CLKDIV_CLEAR_MASK	0xFFFFFF0FUL
167b28c29d0SBiju Das 
168b28c29d0SBiju Das /* SD_OPTION */
169b28c29d0SBiju Das #define SD_OPTION_TIMEOUT_CNT_MASK	0x000000F0UL
170b28c29d0SBiju Das 
171b28c29d0SBiju Das /*
172b28c29d0SBiju Das  * MMC Clock Frequency
173b28c29d0SBiju Das  * 200MHz * 1/x = output clock
174b28c29d0SBiju Das  */
175b28c29d0SBiju Das #define MMC_CLK_OFF		0UL   /* Clock output is disabled */
176b28c29d0SBiju Das #define MMC_400KHZ		512UL /* 200MHz * 1/512 = 390 KHz */
177b28c29d0SBiju Das #define MMC_20MHZ		16UL  /* 200MHz * 1/16 = 12.5 MHz Normal speed mode */
178b28c29d0SBiju Das #define MMC_26MHZ		8UL   /* 200MHz * 1/8 = 25 MHz HS mode 26Mhz */
179b28c29d0SBiju Das #define MMC_52MHZ		4UL   /* 200MHz * 1/4 = 50 MHz HS mode 52Mhz */
180b28c29d0SBiju Das #define MMC_100MHZ		2UL   /* 200MHz * 1/2 = 100 MHz */
181b28c29d0SBiju Das #define MMC_200MHZ		1UL   /* 200MHz * 1/1 = 200 MHz */
182b28c29d0SBiju Das 
183b28c29d0SBiju Das #define MMC_FREQ_52MHZ		52000000UL
184b28c29d0SBiju Das #define MMC_FREQ_26MHZ		26000000UL
185b28c29d0SBiju Das #define MMC_FREQ_20MHZ		20000000UL
186b28c29d0SBiju Das 
187b28c29d0SBiju Das /* MMC Clock DIV */
188b28c29d0SBiju Das #define MMC_SD_CLK_START	0x00000100UL	/* CLOCK On */
189b28c29d0SBiju Das #define MMC_SD_CLK_STOP		(~0x00000100UL)	/* CLOCK stop */
190b28c29d0SBiju Das #define MMC_SD_CLK_DIV1		0x000000FFUL	/* 1/1 */
191b28c29d0SBiju Das #define MMC_SD_CLK_DIV2		0x00000000UL	/* 1/2 */
192b28c29d0SBiju Das #define MMC_SD_CLK_DIV4		0x00000001UL	/* 1/4 */
193b28c29d0SBiju Das #define MMC_SD_CLK_DIV8		0x00000002UL	/* 1/8 */
194b28c29d0SBiju Das #define MMC_SD_CLK_DIV16	0x00000004UL	/* 1/16 */
195b28c29d0SBiju Das #define MMC_SD_CLK_DIV32	0x00000008UL	/* 1/32 */
196b28c29d0SBiju Das #define MMC_SD_CLK_DIV64	0x00000010UL	/* 1/64 */
197b28c29d0SBiju Das #define MMC_SD_CLK_DIV128	0x00000020UL	/* 1/128 */
198b28c29d0SBiju Das #define MMC_SD_CLK_DIV256	0x00000040UL	/* 1/256 */
199b28c29d0SBiju Das #define MMC_SD_CLK_DIV512	0x00000080UL	/* 1/512 */
200b28c29d0SBiju Das 
201b28c29d0SBiju Das /* DM_CM_DTRAN_MODE */
202b28c29d0SBiju Das #define DM_CM_DTRAN_MODE_CH0		0x00000000UL	/* CH0(downstream) */
203b28c29d0SBiju Das #define DM_CM_DTRAN_MODE_CH1		0x00010000UL	/* CH1(upstream)   */
204b28c29d0SBiju Das #define DM_CM_DTRAN_MODE_BIT_WIDTH	0x00000030UL
205b28c29d0SBiju Das 
206b28c29d0SBiju Das /* CC_EXT_MODE */
207b28c29d0SBiju Das #define CC_EXT_MODE_DMASDRW_ENABLE	0x00000002UL	/* SD_BUF Read/Write DMA Transfer */
208b28c29d0SBiju Das #define CC_EXT_MODE_CLEAR		0x00001010UL	/* BIT 12 & 4 always 1. */
209b28c29d0SBiju Das 
210b28c29d0SBiju Das /* DM_CM_INFO_MASK */
211b28c29d0SBiju Das #define DM_CM_INFO_MASK_CLEAR		0xFFFCFFFEUL
212b28c29d0SBiju Das #define DM_CM_INFO_CH0_ENABLE		0x00010001UL
213b28c29d0SBiju Das #define DM_CM_INFO_CH1_ENABLE		0x00020001UL
214b28c29d0SBiju Das 
215b28c29d0SBiju Das /* DM_DTRAN_ADDR */
216b28c29d0SBiju Das #define DM_DTRAN_ADDR_WRITE_MASK	0xFFFFFFF8UL
217b28c29d0SBiju Das 
218b28c29d0SBiju Das /* DM_CM_DTRAN_CTRL */
219b28c29d0SBiju Das #define DM_CM_DTRAN_CTRL_START		0x00000001UL
220b28c29d0SBiju Das 
221b28c29d0SBiju Das /* SYSC Registers */
222b28c29d0SBiju Das #if USE_MMC_CH == MMC_CH0
223b28c29d0SBiju Das #define CPG_MSTP_MMC		(BIT12)	/* SDHI2/MMC0 */
224b28c29d0SBiju Das #else /* USE_MMC_CH == MMC_CH0 */
225b28c29d0SBiju Das #define CPG_MSTP_MMC		(BIT11)	/* SDHI3/MMC1 */
226b28c29d0SBiju Das #endif /* USE_MMC_CH == MMC_CH0 */
227b28c29d0SBiju Das 
228b28c29d0SBiju Das #endif /* EMMC_REGISTERS_H */
229