xref: /OK3568_Linux_fs/u-boot/arch/arm/mach-at91/include/mach/at91_spi.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * [origin: Linux kernel include/asm-arm/arch-at91/at91_spi.h]
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Copyright (C) 2005 Ivan Kokshaysky
5*4882a593Smuzhiyun  * Copyright (C) SAN People
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * Serial Peripheral Interface (SPI) registers.
8*4882a593Smuzhiyun  * Based on AT91RM9200 datasheet revision E.
9*4882a593Smuzhiyun  *
10*4882a593Smuzhiyun  * SPDX-License-Identifier:	GPL-2.0+
11*4882a593Smuzhiyun  */
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #ifndef AT91_SPI_H
14*4882a593Smuzhiyun #define AT91_SPI_H
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun #include <asm/arch/at91_pdc.h>
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun typedef struct at91_spi {
19*4882a593Smuzhiyun 	u32		cr;		/* 0x00 Control Register */
20*4882a593Smuzhiyun 	u32		mr;		/* 0x04 Mode Register */
21*4882a593Smuzhiyun 	u32		rdr;		/* 0x08 Receive Data Register */
22*4882a593Smuzhiyun 	u32		tdr;		/* 0x0C Transmit Data Register */
23*4882a593Smuzhiyun 	u32		sr;		/* 0x10 Status Register */
24*4882a593Smuzhiyun 	u32		ier;		/* 0x14 Interrupt Enable Register */
25*4882a593Smuzhiyun 	u32		idr;		/* 0x18 Interrupt Disable Register */
26*4882a593Smuzhiyun 	u32		imr;		/* 0x1C Interrupt Mask Register */
27*4882a593Smuzhiyun 	u32		reserve1[4];
28*4882a593Smuzhiyun 	u32		csr[4];		/* 0x30 Chip Select Register 0-3 */
29*4882a593Smuzhiyun 	u32		reserve2[48];
30*4882a593Smuzhiyun 	at91_pdc_t	pdc;
31*4882a593Smuzhiyun } at91_spi_t;
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun #ifdef CONFIG_ATMEL_LEGACY
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun #define AT91_SPI_CR			0x00		/* Control Register */
36*4882a593Smuzhiyun #define		AT91_SPI_SPIEN		(1 <<  0)		/* SPI Enable */
37*4882a593Smuzhiyun #define		AT91_SPI_SPIDIS		(1 <<  1)		/* SPI Disable */
38*4882a593Smuzhiyun #define		AT91_SPI_SWRST		(1 <<  7)		/* SPI Software Reset */
39*4882a593Smuzhiyun #define		AT91_SPI_LASTXFER	(1 << 24)		/* Last Transfer [SAM9261 only] */
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun #define AT91_SPI_MR			0x04		/* Mode Register */
42*4882a593Smuzhiyun #define		AT91_SPI_MSTR		(1    <<  0)		/* Master/Slave Mode */
43*4882a593Smuzhiyun #define		AT91_SPI_PS		(1    <<  1)		/* Peripheral Select */
44*4882a593Smuzhiyun #define			AT91_SPI_PS_FIXED	(0 << 1)
45*4882a593Smuzhiyun #define			AT91_SPI_PS_VARIABLE	(1 << 1)
46*4882a593Smuzhiyun #define		AT91_SPI_PCSDEC		(1    <<  2)		/* Chip Select Decode */
47*4882a593Smuzhiyun #define		AT91_SPI_DIV32		(1    <<  3)		/* Clock Selection [AT91RM9200 only] */
48*4882a593Smuzhiyun #define		AT91_SPI_MODFDIS	(1    <<  4)		/* Mode Fault Detection */
49*4882a593Smuzhiyun #define		AT91_SPI_LLB		(1    <<  7)		/* Local Loopback Enable */
50*4882a593Smuzhiyun #define		AT91_SPI_PCS		(0xf  << 16)		/* Peripheral Chip Select */
51*4882a593Smuzhiyun #define		AT91_SPI_DLYBCS		(0xff << 24)		/* Delay Between Chip Selects */
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun #define AT91_SPI_RDR		0x08			/* Receive Data Register */
54*4882a593Smuzhiyun #define		AT91_SPI_RD		(0xffff <<  0)		/* Receive Data */
55*4882a593Smuzhiyun #define		AT91_SPI_PCS		(0xf	<< 16)		/* Peripheral Chip Select */
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun #define AT91_SPI_TDR		0x0c			/* Transmit Data Register */
58*4882a593Smuzhiyun #define		AT91_SPI_TD		(0xffff <<  0)		/* Transmit Data */
59*4882a593Smuzhiyun #define		AT91_SPI_PCS		(0xf	<< 16)		/* Peripheral Chip Select */
60*4882a593Smuzhiyun #define		AT91_SPI_LASTXFER	(1	<< 24)		/* Last Transfer [SAM9261 only] */
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun #define AT91_SPI_SR		0x10			/* Status Register */
63*4882a593Smuzhiyun #define		AT91_SPI_RDRF		(1 <<  0)		/* Receive Data Register Full */
64*4882a593Smuzhiyun #define		AT91_SPI_TDRE		(1 <<  1)		/* Transmit Data Register Full */
65*4882a593Smuzhiyun #define		AT91_SPI_MODF		(1 <<  2)		/* Mode Fault Error */
66*4882a593Smuzhiyun #define		AT91_SPI_OVRES		(1 <<  3)		/* Overrun Error Status */
67*4882a593Smuzhiyun #define		AT91_SPI_ENDRX		(1 <<  4)		/* End of RX buffer */
68*4882a593Smuzhiyun #define		AT91_SPI_ENDTX		(1 <<  5)		/* End of TX buffer */
69*4882a593Smuzhiyun #define		AT91_SPI_RXBUFF		(1 <<  6)		/* RX Buffer Full */
70*4882a593Smuzhiyun #define		AT91_SPI_TXBUFE		(1 <<  7)		/* TX Buffer Empty */
71*4882a593Smuzhiyun #define		AT91_SPI_NSSR		(1 <<  8)		/* NSS Rising [SAM9261 only] */
72*4882a593Smuzhiyun #define		AT91_SPI_TXEMPTY	(1 <<  9)		/* Transmission Register Empty [SAM9261 only] */
73*4882a593Smuzhiyun #define		AT91_SPI_SPIENS		(1 << 16)		/* SPI Enable Status */
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun #define AT91_SPI_IER		0x14			/* Interrupt Enable Register */
76*4882a593Smuzhiyun #define AT91_SPI_IDR		0x18			/* Interrupt Disable Register */
77*4882a593Smuzhiyun #define AT91_SPI_IMR		0x1c			/* Interrupt Mask Register */
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun #define AT91_SPI_CSR(n)		(0x30 + ((n) * 4))	/* Chip Select Registers 0-3 */
80*4882a593Smuzhiyun #define		AT91_SPI_CPOL		(1    <<  0)		/* Clock Polarity */
81*4882a593Smuzhiyun #define		AT91_SPI_NCPHA		(1    <<  1)		/* Clock Phase */
82*4882a593Smuzhiyun #define		AT91_SPI_CSAAT		(1    <<  3)		/* Chip Select Active After Transfer [SAM9261 only] */
83*4882a593Smuzhiyun #define		AT91_SPI_BITS		(0xf  <<  4)		/* Bits Per Transfer */
84*4882a593Smuzhiyun #define			AT91_SPI_BITS_8		(0 << 4)
85*4882a593Smuzhiyun #define			AT91_SPI_BITS_9		(1 << 4)
86*4882a593Smuzhiyun #define			AT91_SPI_BITS_10	(2 << 4)
87*4882a593Smuzhiyun #define			AT91_SPI_BITS_11	(3 << 4)
88*4882a593Smuzhiyun #define			AT91_SPI_BITS_12	(4 << 4)
89*4882a593Smuzhiyun #define			AT91_SPI_BITS_13	(5 << 4)
90*4882a593Smuzhiyun #define			AT91_SPI_BITS_14	(6 << 4)
91*4882a593Smuzhiyun #define			AT91_SPI_BITS_15	(7 << 4)
92*4882a593Smuzhiyun #define			AT91_SPI_BITS_16	(8 << 4)
93*4882a593Smuzhiyun #define		AT91_SPI_SCBR		(0xff <<  8)		/* Serial Clock Baud Rate */
94*4882a593Smuzhiyun #define		AT91_SPI_DLYBS		(0xff << 16)		/* Delay before SPCK */
95*4882a593Smuzhiyun #define		AT91_SPI_DLYBCT		(0xff << 24)		/* Delay between Consecutive Transfers */
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun #define AT91_SPI_RPR		0x0100			/* Receive Pointer Register */
98*4882a593Smuzhiyun 
99*4882a593Smuzhiyun #define AT91_SPI_RCR		0x0104			/* Receive Counter Register */
100*4882a593Smuzhiyun 
101*4882a593Smuzhiyun #define AT91_SPI_TPR		0x0108			/* Transmit Pointer Register */
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun #define AT91_SPI_TCR		0x010c			/* Transmit Counter Register */
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun #define AT91_SPI_RNPR		0x0110			/* Receive Next Pointer Register */
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun #define AT91_SPI_RNCR		0x0114			/* Receive Next Counter Register */
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun #define AT91_SPI_TNPR		0x0118			/* Transmit Next Pointer Register */
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun #define AT91_SPI_TNCR		0x011c			/* Transmit Next Counter Register */
112*4882a593Smuzhiyun 
113*4882a593Smuzhiyun #define AT91_SPI_PTCR		0x0120			/* PDC Transfer Control Register */
114*4882a593Smuzhiyun #define		AT91_SPI_RXTEN		(0x1 << 0)		/* Receiver Transfer Enable */
115*4882a593Smuzhiyun #define		AT91_SPI_RXTDIS		(0x1 << 1)		/* Receiver Transfer Disable */
116*4882a593Smuzhiyun #define		AT91_SPI_TXTEN		(0x1 << 8)		/* Transmitter Transfer Enable */
117*4882a593Smuzhiyun #define		AT91_SPI_TXTDIS		(0x1 << 9)		/* Transmitter Transfer Disable */
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun #define AT91_SPI_PTSR		0x0124			/* PDC Transfer Status Register */
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun #endif /* CONFIG_ATMEL_LEGACY */
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun #endif
124