xref: /openbmc/linux/drivers/mmc/host/pxamci.h (revision 1c6a0718)
11c6a0718SPierre Ossman #undef MMC_STRPCL
21c6a0718SPierre Ossman #undef MMC_STAT
31c6a0718SPierre Ossman #undef MMC_CLKRT
41c6a0718SPierre Ossman #undef MMC_SPI
51c6a0718SPierre Ossman #undef MMC_CMDAT
61c6a0718SPierre Ossman #undef MMC_RESTO
71c6a0718SPierre Ossman #undef MMC_RDTO
81c6a0718SPierre Ossman #undef MMC_BLKLEN
91c6a0718SPierre Ossman #undef MMC_NOB
101c6a0718SPierre Ossman #undef MMC_PRTBUF
111c6a0718SPierre Ossman #undef MMC_I_MASK
121c6a0718SPierre Ossman #undef END_CMD_RES
131c6a0718SPierre Ossman #undef PRG_DONE
141c6a0718SPierre Ossman #undef DATA_TRAN_DONE
151c6a0718SPierre Ossman #undef MMC_I_REG
161c6a0718SPierre Ossman #undef MMC_CMD
171c6a0718SPierre Ossman #undef MMC_ARGH
181c6a0718SPierre Ossman #undef MMC_ARGL
191c6a0718SPierre Ossman #undef MMC_RES
201c6a0718SPierre Ossman #undef MMC_RXFIFO
211c6a0718SPierre Ossman #undef MMC_TXFIFO
221c6a0718SPierre Ossman 
231c6a0718SPierre Ossman #define MMC_STRPCL	0x0000
241c6a0718SPierre Ossman #define STOP_CLOCK		(1 << 0)
251c6a0718SPierre Ossman #define START_CLOCK		(2 << 0)
261c6a0718SPierre Ossman 
271c6a0718SPierre Ossman #define MMC_STAT	0x0004
281c6a0718SPierre Ossman #define STAT_END_CMD_RES		(1 << 13)
291c6a0718SPierre Ossman #define STAT_PRG_DONE			(1 << 12)
301c6a0718SPierre Ossman #define STAT_DATA_TRAN_DONE		(1 << 11)
311c6a0718SPierre Ossman #define STAT_CLK_EN			(1 << 8)
321c6a0718SPierre Ossman #define STAT_RECV_FIFO_FULL		(1 << 7)
331c6a0718SPierre Ossman #define STAT_XMIT_FIFO_EMPTY		(1 << 6)
341c6a0718SPierre Ossman #define STAT_RES_CRC_ERR		(1 << 5)
351c6a0718SPierre Ossman #define STAT_SPI_READ_ERROR_TOKEN	(1 << 4)
361c6a0718SPierre Ossman #define STAT_CRC_READ_ERROR		(1 << 3)
371c6a0718SPierre Ossman #define STAT_CRC_WRITE_ERROR		(1 << 2)
381c6a0718SPierre Ossman #define STAT_TIME_OUT_RESPONSE		(1 << 1)
391c6a0718SPierre Ossman #define STAT_READ_TIME_OUT		(1 << 0)
401c6a0718SPierre Ossman 
411c6a0718SPierre Ossman #define MMC_CLKRT	0x0008		/* 3 bit */
421c6a0718SPierre Ossman 
431c6a0718SPierre Ossman #define MMC_SPI		0x000c
441c6a0718SPierre Ossman #define SPI_CS_ADDRESS		(1 << 3)
451c6a0718SPierre Ossman #define SPI_CS_EN		(1 << 2)
461c6a0718SPierre Ossman #define CRC_ON			(1 << 1)
471c6a0718SPierre Ossman #define SPI_EN			(1 << 0)
481c6a0718SPierre Ossman 
491c6a0718SPierre Ossman #define MMC_CMDAT	0x0010
501c6a0718SPierre Ossman #define CMDAT_DMAEN		(1 << 7)
511c6a0718SPierre Ossman #define CMDAT_INIT		(1 << 6)
521c6a0718SPierre Ossman #define CMDAT_BUSY		(1 << 5)
531c6a0718SPierre Ossman #define CMDAT_STREAM		(1 << 4)	/* 1 = stream */
541c6a0718SPierre Ossman #define CMDAT_WRITE		(1 << 3)	/* 1 = write */
551c6a0718SPierre Ossman #define CMDAT_DATAEN		(1 << 2)
561c6a0718SPierre Ossman #define CMDAT_RESP_NONE		(0 << 0)
571c6a0718SPierre Ossman #define CMDAT_RESP_SHORT	(1 << 0)
581c6a0718SPierre Ossman #define CMDAT_RESP_R2		(2 << 0)
591c6a0718SPierre Ossman #define CMDAT_RESP_R3		(3 << 0)
601c6a0718SPierre Ossman 
611c6a0718SPierre Ossman #define MMC_RESTO	0x0014	/* 7 bit */
621c6a0718SPierre Ossman 
631c6a0718SPierre Ossman #define MMC_RDTO	0x0018	/* 16 bit */
641c6a0718SPierre Ossman 
651c6a0718SPierre Ossman #define MMC_BLKLEN	0x001c	/* 10 bit */
661c6a0718SPierre Ossman 
671c6a0718SPierre Ossman #define MMC_NOB		0x0020	/* 16 bit */
681c6a0718SPierre Ossman 
691c6a0718SPierre Ossman #define MMC_PRTBUF	0x0024
701c6a0718SPierre Ossman #define BUF_PART_FULL		(1 << 0)
711c6a0718SPierre Ossman 
721c6a0718SPierre Ossman #define MMC_I_MASK	0x0028
731c6a0718SPierre Ossman 
741c6a0718SPierre Ossman /*PXA27x MMC interrupts*/
751c6a0718SPierre Ossman #define SDIO_SUSPEND_ACK  	(1 << 12)
761c6a0718SPierre Ossman #define SDIO_INT          	(1 << 11)
771c6a0718SPierre Ossman #define RD_STALLED        	(1 << 10)
781c6a0718SPierre Ossman #define RES_ERR           	(1 << 9)
791c6a0718SPierre Ossman #define DAT_ERR           	(1 << 8)
801c6a0718SPierre Ossman #define TINT              	(1 << 7)
811c6a0718SPierre Ossman 
821c6a0718SPierre Ossman /*PXA2xx MMC interrupts*/
831c6a0718SPierre Ossman #define TXFIFO_WR_REQ		(1 << 6)
841c6a0718SPierre Ossman #define RXFIFO_RD_REQ		(1 << 5)
851c6a0718SPierre Ossman #define CLK_IS_OFF		(1 << 4)
861c6a0718SPierre Ossman #define STOP_CMD		(1 << 3)
871c6a0718SPierre Ossman #define END_CMD_RES		(1 << 2)
881c6a0718SPierre Ossman #define PRG_DONE		(1 << 1)
891c6a0718SPierre Ossman #define DATA_TRAN_DONE		(1 << 0)
901c6a0718SPierre Ossman 
911c6a0718SPierre Ossman #ifdef CONFIG_PXA27x
921c6a0718SPierre Ossman #define MMC_I_MASK_ALL          0x00001fff
931c6a0718SPierre Ossman #else
941c6a0718SPierre Ossman #define MMC_I_MASK_ALL          0x0000007f
951c6a0718SPierre Ossman #endif
961c6a0718SPierre Ossman 
971c6a0718SPierre Ossman #define MMC_I_REG	0x002c
981c6a0718SPierre Ossman /* same as MMC_I_MASK */
991c6a0718SPierre Ossman 
1001c6a0718SPierre Ossman #define MMC_CMD		0x0030
1011c6a0718SPierre Ossman 
1021c6a0718SPierre Ossman #define MMC_ARGH	0x0034	/* 16 bit */
1031c6a0718SPierre Ossman 
1041c6a0718SPierre Ossman #define MMC_ARGL	0x0038	/* 16 bit */
1051c6a0718SPierre Ossman 
1061c6a0718SPierre Ossman #define MMC_RES		0x003c	/* 16 bit */
1071c6a0718SPierre Ossman 
1081c6a0718SPierre Ossman #define MMC_RXFIFO	0x0040	/* 8 bit */
1091c6a0718SPierre Ossman 
1101c6a0718SPierre Ossman #define MMC_TXFIFO	0x0044	/* 8 bit */
1111c6a0718SPierre Ossman 
1121c6a0718SPierre Ossman /*
1131c6a0718SPierre Ossman  * The base MMC clock rate
1141c6a0718SPierre Ossman  */
1151c6a0718SPierre Ossman #ifdef CONFIG_PXA27x
1161c6a0718SPierre Ossman #define CLOCKRATE_MIN	304688
1171c6a0718SPierre Ossman #define CLOCKRATE_MAX	19500000
1181c6a0718SPierre Ossman #else
1191c6a0718SPierre Ossman #define CLOCKRATE_MIN	312500
1201c6a0718SPierre Ossman #define CLOCKRATE_MAX	20000000
1211c6a0718SPierre Ossman #endif
1221c6a0718SPierre Ossman 
1231c6a0718SPierre Ossman #define CLOCKRATE	CLOCKRATE_MAX
1241c6a0718SPierre Ossman 
125