xref: /rk3399_rockchip-uboot/arch/arm/mach-rmobile/include/mach/sh_sdhi.h (revision 1fdafb2e3dfecdc4129a8062ad25b1adb32b0efb)
17a7d246dSNobuhiro Iwamatsu /*
27a7d246dSNobuhiro Iwamatsu  * drivers/mmc/sh-sdhi.h
37a7d246dSNobuhiro Iwamatsu  *
45eada1dbSKouei Abe  * SD/MMC driver for Renesas rmobile ARM SoCs
57a7d246dSNobuhiro Iwamatsu  *
65eada1dbSKouei Abe  * Copyright (C) 2013-2017 Renesas Electronics Corporation
77a7d246dSNobuhiro Iwamatsu  * Copyright (C) 2008-2009 Renesas Solutions Corp.
87a7d246dSNobuhiro Iwamatsu  *
97a7d246dSNobuhiro Iwamatsu  * SPDX-License-Identifier:	GPL-2.0
107a7d246dSNobuhiro Iwamatsu  */
117a7d246dSNobuhiro Iwamatsu 
127a7d246dSNobuhiro Iwamatsu #ifndef _SH_SDHI_H
137a7d246dSNobuhiro Iwamatsu #define _SH_SDHI_H
147a7d246dSNobuhiro Iwamatsu 
157a7d246dSNobuhiro Iwamatsu #define SDHI_CMD			(0x0000 >> 1)
167a7d246dSNobuhiro Iwamatsu #define SDHI_PORTSEL			(0x0004 >> 1)
177a7d246dSNobuhiro Iwamatsu #define SDHI_ARG0			(0x0008 >> 1)
187a7d246dSNobuhiro Iwamatsu #define SDHI_ARG1			(0x000C >> 1)
197a7d246dSNobuhiro Iwamatsu #define SDHI_STOP			(0x0010 >> 1)
207a7d246dSNobuhiro Iwamatsu #define SDHI_SECCNT			(0x0014 >> 1)
217a7d246dSNobuhiro Iwamatsu #define SDHI_RSP00			(0x0018 >> 1)
227a7d246dSNobuhiro Iwamatsu #define SDHI_RSP01			(0x001C >> 1)
237a7d246dSNobuhiro Iwamatsu #define SDHI_RSP02			(0x0020 >> 1)
247a7d246dSNobuhiro Iwamatsu #define SDHI_RSP03			(0x0024 >> 1)
257a7d246dSNobuhiro Iwamatsu #define SDHI_RSP04			(0x0028 >> 1)
267a7d246dSNobuhiro Iwamatsu #define SDHI_RSP05			(0x002C >> 1)
277a7d246dSNobuhiro Iwamatsu #define SDHI_RSP06			(0x0030 >> 1)
287a7d246dSNobuhiro Iwamatsu #define SDHI_RSP07			(0x0034 >> 1)
297a7d246dSNobuhiro Iwamatsu #define SDHI_INFO1			(0x0038 >> 1)
307a7d246dSNobuhiro Iwamatsu #define SDHI_INFO2			(0x003C >> 1)
317a7d246dSNobuhiro Iwamatsu #define SDHI_INFO1_MASK			(0x0040 >> 1)
327a7d246dSNobuhiro Iwamatsu #define SDHI_INFO2_MASK			(0x0044 >> 1)
337a7d246dSNobuhiro Iwamatsu #define SDHI_CLK_CTRL			(0x0048 >> 1)
347a7d246dSNobuhiro Iwamatsu #define SDHI_SIZE			(0x004C >> 1)
357a7d246dSNobuhiro Iwamatsu #define SDHI_OPTION			(0x0050 >> 1)
367a7d246dSNobuhiro Iwamatsu #define SDHI_ERR_STS1			(0x0058 >> 1)
377a7d246dSNobuhiro Iwamatsu #define SDHI_ERR_STS2			(0x005C >> 1)
387a7d246dSNobuhiro Iwamatsu #define SDHI_BUF0			(0x0060 >> 1)
397a7d246dSNobuhiro Iwamatsu #define SDHI_SDIO_MODE			(0x0068 >> 1)
407a7d246dSNobuhiro Iwamatsu #define SDHI_SDIO_INFO1			(0x006C >> 1)
417a7d246dSNobuhiro Iwamatsu #define SDHI_SDIO_INFO1_MASK		(0x0070 >> 1)
427a7d246dSNobuhiro Iwamatsu #define SDHI_CC_EXT_MODE		(0x01B0 >> 1)
437a7d246dSNobuhiro Iwamatsu #define SDHI_SOFT_RST			(0x01C0 >> 1)
447a7d246dSNobuhiro Iwamatsu #define SDHI_VERSION			(0x01C4 >> 1)
457a7d246dSNobuhiro Iwamatsu #define SDHI_HOST_MODE			(0x01C8 >> 1)
467a7d246dSNobuhiro Iwamatsu #define SDHI_SDIF_MODE			(0x01CC >> 1)
477a7d246dSNobuhiro Iwamatsu #define SDHI_EXT_SWAP			(0x01E0 >> 1)
487a7d246dSNobuhiro Iwamatsu #define SDHI_SD_DMACR			(0x0324 >> 1)
497a7d246dSNobuhiro Iwamatsu 
507a7d246dSNobuhiro Iwamatsu /* SDHI CMD VALUE */
517a7d246dSNobuhiro Iwamatsu #define CMD_MASK			0x0000ffff
527a7d246dSNobuhiro Iwamatsu 
537a7d246dSNobuhiro Iwamatsu /* SDHI_PORTSEL */
547a7d246dSNobuhiro Iwamatsu #define USE_1PORT			(1 << 8) /* 1 port */
557a7d246dSNobuhiro Iwamatsu 
567a7d246dSNobuhiro Iwamatsu /* SDHI_ARG */
577a7d246dSNobuhiro Iwamatsu #define ARG0_MASK			0x0000ffff
587a7d246dSNobuhiro Iwamatsu #define ARG1_MASK			0x0000ffff
597a7d246dSNobuhiro Iwamatsu 
607a7d246dSNobuhiro Iwamatsu /* SDHI_STOP */
617a7d246dSNobuhiro Iwamatsu #define STOP_SEC_ENABLE			(1 << 8)
627a7d246dSNobuhiro Iwamatsu 
637a7d246dSNobuhiro Iwamatsu /* SDHI_INFO1 */
647a7d246dSNobuhiro Iwamatsu #define INFO1_RESP_END			(1 << 0)
657a7d246dSNobuhiro Iwamatsu #define INFO1_ACCESS_END		(1 << 2)
667a7d246dSNobuhiro Iwamatsu #define INFO1_CARD_RE			(1 << 3)
677a7d246dSNobuhiro Iwamatsu #define INFO1_CARD_IN			(1 << 4)
687a7d246dSNobuhiro Iwamatsu #define INFO1_ISD0CD			(1 << 5)
697a7d246dSNobuhiro Iwamatsu #define INFO1_WRITE_PRO			(1 << 7)
707a7d246dSNobuhiro Iwamatsu #define INFO1_DATA3_CARD_RE		(1 << 8)
717a7d246dSNobuhiro Iwamatsu #define INFO1_DATA3_CARD_IN		(1 << 9)
727a7d246dSNobuhiro Iwamatsu #define INFO1_DATA3			(1 << 10)
737a7d246dSNobuhiro Iwamatsu 
747a7d246dSNobuhiro Iwamatsu /* SDHI_INFO2 */
757a7d246dSNobuhiro Iwamatsu #define INFO2_CMD_ERROR			(1 << 0)
767a7d246dSNobuhiro Iwamatsu #define INFO2_CRC_ERROR			(1 << 1)
777a7d246dSNobuhiro Iwamatsu #define INFO2_END_ERROR			(1 << 2)
787a7d246dSNobuhiro Iwamatsu #define INFO2_TIMEOUT			(1 << 3)
797a7d246dSNobuhiro Iwamatsu #define INFO2_BUF_ILL_WRITE		(1 << 4)
807a7d246dSNobuhiro Iwamatsu #define INFO2_BUF_ILL_READ		(1 << 5)
817a7d246dSNobuhiro Iwamatsu #define INFO2_RESP_TIMEOUT		(1 << 6)
827a7d246dSNobuhiro Iwamatsu #define INFO2_SDDAT0			(1 << 7)
837a7d246dSNobuhiro Iwamatsu #define INFO2_BRE_ENABLE		(1 << 8)
847a7d246dSNobuhiro Iwamatsu #define INFO2_BWE_ENABLE		(1 << 9)
857a7d246dSNobuhiro Iwamatsu #define INFO2_CBUSY			(1 << 14)
867a7d246dSNobuhiro Iwamatsu #define INFO2_ILA			(1 << 15)
877a7d246dSNobuhiro Iwamatsu #define INFO2_ALL_ERR			(0x807f)
887a7d246dSNobuhiro Iwamatsu 
897a7d246dSNobuhiro Iwamatsu /* SDHI_INFO1_MASK */
907a7d246dSNobuhiro Iwamatsu #define INFO1M_RESP_END			(1 << 0)
917a7d246dSNobuhiro Iwamatsu #define INFO1M_ACCESS_END		(1 << 2)
927a7d246dSNobuhiro Iwamatsu #define INFO1M_CARD_RE			(1 << 3)
937a7d246dSNobuhiro Iwamatsu #define INFO1M_CARD_IN			(1 << 4)
947a7d246dSNobuhiro Iwamatsu #define INFO1M_DATA3_CARD_RE		(1 << 8)
957a7d246dSNobuhiro Iwamatsu #define INFO1M_DATA3_CARD_IN		(1 << 9)
967a7d246dSNobuhiro Iwamatsu #define INFO1M_ALL			(0xffff)
977a7d246dSNobuhiro Iwamatsu #define INFO1M_SET			(INFO1M_RESP_END |	\
987a7d246dSNobuhiro Iwamatsu 					INFO1M_ACCESS_END |	\
997a7d246dSNobuhiro Iwamatsu 					INFO1M_DATA3_CARD_RE |	\
1007a7d246dSNobuhiro Iwamatsu 					INFO1M_DATA3_CARD_IN)
1017a7d246dSNobuhiro Iwamatsu 
1027a7d246dSNobuhiro Iwamatsu /* SDHI_INFO2_MASK */
1037a7d246dSNobuhiro Iwamatsu #define INFO2M_CMD_ERROR		(1 << 0)
1047a7d246dSNobuhiro Iwamatsu #define INFO2M_CRC_ERROR		(1 << 1)
1057a7d246dSNobuhiro Iwamatsu #define INFO2M_END_ERROR		(1 << 2)
1067a7d246dSNobuhiro Iwamatsu #define INFO2M_TIMEOUT			(1 << 3)
1077a7d246dSNobuhiro Iwamatsu #define INFO2M_BUF_ILL_WRITE		(1 << 4)
1087a7d246dSNobuhiro Iwamatsu #define INFO2M_BUF_ILL_READ		(1 << 5)
1097a7d246dSNobuhiro Iwamatsu #define INFO2M_RESP_TIMEOUT		(1 << 6)
1107a7d246dSNobuhiro Iwamatsu #define INFO2M_BRE_ENABLE		(1 << 8)
1117a7d246dSNobuhiro Iwamatsu #define INFO2M_BWE_ENABLE		(1 << 9)
1127a7d246dSNobuhiro Iwamatsu #define INFO2M_ILA			(1 << 15)
1137a7d246dSNobuhiro Iwamatsu #define INFO2M_ALL			(0xffff)
1147a7d246dSNobuhiro Iwamatsu #define INFO2M_ALL_ERR			(0x807f)
1157a7d246dSNobuhiro Iwamatsu 
1167a7d246dSNobuhiro Iwamatsu /* SDHI_CLK_CTRL */
1177a7d246dSNobuhiro Iwamatsu #define CLK_ENABLE			(1 << 8)
1187a7d246dSNobuhiro Iwamatsu 
1197a7d246dSNobuhiro Iwamatsu /* SDHI_OPTION */
120*91a16c3bSKouei Abe #define OPT_BUS_WIDTH_M			(5 << 13)	/* 101b (15-13bit) */
121*91a16c3bSKouei Abe #define OPT_BUS_WIDTH_1			(4 << 13)	/* bus width = 1 bit */
122*91a16c3bSKouei Abe #define OPT_BUS_WIDTH_4			(0 << 13)	/* bus width = 4 bit */
123*91a16c3bSKouei Abe #define OPT_BUS_WIDTH_8			(1 << 13)	/* bus width = 8 bit */
1247a7d246dSNobuhiro Iwamatsu 
1257a7d246dSNobuhiro Iwamatsu /* SDHI_ERR_STS1 */
1267a7d246dSNobuhiro Iwamatsu #define ERR_STS1_CRC_ERROR		((1 << 11) | (1 << 10) | (1 << 9) | \
1277a7d246dSNobuhiro Iwamatsu 					(1 << 8) | (1 << 5))
1287a7d246dSNobuhiro Iwamatsu #define ERR_STS1_CMD_ERROR		((1 << 4) | (1 << 3) | (1 << 2) | \
1297a7d246dSNobuhiro Iwamatsu 					(1 << 1) | (1 << 0))
1307a7d246dSNobuhiro Iwamatsu 
1317a7d246dSNobuhiro Iwamatsu /* SDHI_ERR_STS2 */
1327a7d246dSNobuhiro Iwamatsu #define ERR_STS2_RES_TIMEOUT		(1 << 0)
1337a7d246dSNobuhiro Iwamatsu #define ERR_STS2_RES_STOP_TIMEOUT	((1 << 0) | (1 << 1))
1347a7d246dSNobuhiro Iwamatsu #define ERR_STS2_SYS_ERROR		((1 << 6) | (1 << 5) | (1 << 4) | \
1357a7d246dSNobuhiro Iwamatsu 					(1 << 3) | (1 << 2) | (1 << 1) | \
1367a7d246dSNobuhiro Iwamatsu 					(1 << 0))
1377a7d246dSNobuhiro Iwamatsu 
1387a7d246dSNobuhiro Iwamatsu /* SDHI_SDIO_MODE */
1397a7d246dSNobuhiro Iwamatsu #define SDIO_MODE_ON			(1 << 0)
1407a7d246dSNobuhiro Iwamatsu #define SDIO_MODE_OFF			(0 << 0)
1417a7d246dSNobuhiro Iwamatsu 
1427a7d246dSNobuhiro Iwamatsu /* SDHI_SDIO_INFO1 */
1437a7d246dSNobuhiro Iwamatsu #define SDIO_INFO1_IOIRQ		(1 << 0)
1447a7d246dSNobuhiro Iwamatsu #define SDIO_INFO1_EXPUB52		(1 << 14)
1457a7d246dSNobuhiro Iwamatsu #define SDIO_INFO1_EXWT			(1 << 15)
1467a7d246dSNobuhiro Iwamatsu 
1477a7d246dSNobuhiro Iwamatsu /* SDHI_SDIO_INFO1_MASK */
1487a7d246dSNobuhiro Iwamatsu #define SDIO_INFO1M_CLEAR		((1 << 1) | (1 << 2))
1497a7d246dSNobuhiro Iwamatsu #define SDIO_INFO1M_ON			((1 << 15) | (1 << 14) | (1 << 2) | \
1507a7d246dSNobuhiro Iwamatsu 					 (1 << 1) | (1 << 0))
1517a7d246dSNobuhiro Iwamatsu 
1527a7d246dSNobuhiro Iwamatsu /* SDHI_EXT_SWAP */
1537a7d246dSNobuhiro Iwamatsu #define SET_SWAP			((1 << 6) | (1 << 7))	/* SWAP */
1547a7d246dSNobuhiro Iwamatsu 
1557a7d246dSNobuhiro Iwamatsu /* SDHI_SOFT_RST */
1567a7d246dSNobuhiro Iwamatsu #define SOFT_RST_ON			(0 << 0)
1577a7d246dSNobuhiro Iwamatsu #define SOFT_RST_OFF			(1 << 0)
1587a7d246dSNobuhiro Iwamatsu 
1597a7d246dSNobuhiro Iwamatsu #define	CLKDEV_SD_DATA			25000000	/* 25 MHz */
1607a7d246dSNobuhiro Iwamatsu #define CLKDEV_HS_DATA			50000000	/* 50 MHz */
1617a7d246dSNobuhiro Iwamatsu #define CLKDEV_MMC_DATA			20000000	/* 20MHz */
1627a7d246dSNobuhiro Iwamatsu #define	CLKDEV_INIT			400000		/* 100 - 400 KHz */
1637a7d246dSNobuhiro Iwamatsu 
1647a7d246dSNobuhiro Iwamatsu /* For quirk */
1655eada1dbSKouei Abe #define SH_SDHI_QUIRK_16BIT_BUF		BIT(0)
1665eada1dbSKouei Abe #define SH_SDHI_QUIRK_64BIT_BUF		BIT(1)
1675eada1dbSKouei Abe 
1687a7d246dSNobuhiro Iwamatsu int sh_sdhi_init(unsigned long addr, int ch, unsigned long quirks);
1697a7d246dSNobuhiro Iwamatsu 
1707a7d246dSNobuhiro Iwamatsu #endif /* _SH_SDHI_H */
171