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