coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
spi.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #ifndef __COREBOOT_SRC_SOC_ROCKCHIP_COMMON_INCLUDE_SOC_SPI_H
4 #define __COREBOOT_SRC_SOC_ROCKCHIP_COMMON_INCLUDE_SOC_SPI_H
5 
6 /* This driver serves as a CBFS media source. */
7 #include <spi-generic.h>
8 #include <stddef.h>
9 
10 struct rockchip_spi {
29  u32 reserved[(0x400-0x48)/4];
30  u32 txdr[0x100];
31  u32 rxdr[0x100];
32 };
33 check_member(rockchip_spi, rxdr, 0x800);
34 
35 #define SF_READ_DATA_CMD 0x3
36 
37 /* --------Bit fields in CTRLR0--------begin */
38 
39 #define SPI_DFS_OFFSET 0 /* Data Frame Size */
40 #define SPI_DFS_MASK 0x3
41 #define SPI_DFS_4BIT 0x00
42 #define SPI_DFS_8BIT 0x01
43 #define SPI_DFS_16BIT 0x02
44 #define SPI_DFS_RESV 0x03
45 
46 /* Control Frame Size */
47 #define SPI_CFS_OFFSET 2
48 #define SPI_CFS_MASK 0xF
49 
50 /* Serial Clock Phase */
51 #define SPI_SCPH_OFFSET 6
52 #define SPI_SCPH_MASK 0x1
53 
54 /* Serial clock toggles in middle of first data bit */
55 #define SPI_SCPH_TOGMID 0
56 
57 /* Serial clock toggles at start of first data bit */
58 #define SPI_SCPH_TOGSTA 1
59 
60 /* Serial Clock Polarity */
61 #define SPI_SCOL_OFFSET 7
62 #define SPI_SCOL_MASK 0x1
63 
64 /* Inactive state of clock serial clock is low */
65 #define SPI_SCOL_LOW 0
66 
67 /* Inactive state of clock serial clock is high */
68 #define SPI_SCOL_HIGH 1
69 
70 /* Chip Select Mode */
71 #define SPI_CSM_OFFSET 8
72 #define SPI_CSM_MASK 0x3
73 
74 /* ss_n keep low after every frame data is transferred */
75 #define SPI_CSM_KEEP 0x00
76 
77 /*
78  * ss_n be high for half sclk_out cycles after
79  * every frame data is transferred
80  */
81 #define SPI_CSM_HALF 0x01
82 
83 /* ss_n be high for one sclk_out cycle after every frame data is transferred */
84 #define SPI_CSM_ONE 0x02
85 #define SPI_CSM_RESV 0x03
86 
87 /* SSN to Sclk_out delay */
88 #define SPI_SSN_DELAY_OFFSET 10
89 #define SPI_SSN_DELAY_MASK 0x1
90 /* the period between ss_n active and sclk_out active is half sclk_out cycles */
91 #define SPI_SSN_DELAY_HALF 0x00
92 /* the period between ss_n active and sclk_out active is one sclk_out cycle */
93 #define SPI_SSN_DELAY_ONE 0x01
94 
95 /* Serial Endian Mode */
96 #define SPI_SEM_OFFSET 11
97 #define SPI_SEM_MASK 0x1
98 /* little endian */
99 #define SPI_SEM_LITTLE 0x00
100 /* big endian */
101 #define SPI_SEM_BIG 0x01
102 
103 /* First Bit Mode */
104 #define SPI_FBM_OFFSET 12
105 #define SPI_FBM_MASK 0x1
106 /* first bit in MSB */
107 #define SPI_FBM_MSB 0x00
108 /* first bit in LSB */
109 #define SPI_FBM_LSB 0x01
110 
111 /* Byte and Halfword Transform */
112 #define SPI_HALF_WORLD_TX_OFFSET 13
113 #define SPI_HALF_WORLD_MASK 0x1
114 /* apb 16bit write/read, spi 8bit write/read */
115 #define SPI_APB_16BIT 0x00
116 /* apb 8bit write/read, spi 8bit write/read */
117 #define SPI_APB_8BIT 0x01
118 
119 /* Rxd Sample Delay */
120 #define SPI_RXDSD_OFFSET 14
121 #define SPI_RXDSD_MASK 0x3
122 
123 /* Frame Format */
124 #define SPI_FRF_OFFSET 16
125 #define SPI_FRF_MASK 0x3
126 /* motorola spi */
127 #define SPI_FRF_SPI 0x00
128 /* Texas Instruments SSP*/
129 #define SPI_FRF_SSP 0x01
130 /* National Semiconductors Microwire */
131 #define SPI_FRF_MICROWIRE 0x02
132 #define SPI_FRF_RESV 0x03
133 
134 /* Transfer Mode */
135 #define SPI_TMOD_OFFSET 18
136 #define SPI_TMOD_MASK 0x3
137 /* xmit & recv */
138 #define SPI_TMOD_TR 0x00
139 /* xmit only */
140 #define SPI_TMOD_TO 0x01
141 /* recv only */
142 #define SPI_TMOD_RO 0x02
143 #define SPI_TMOD_RESV 0x03
144 
145 /* Operation Mode */
146 #define SPI_OMOD_OFFSET 20
147 #define SPI_OMOD_MASK 0x1
148 /* Master Mode */
149 #define SPI_OMOD_MASTER 0x00
150 /* Slave Mode */
151 #define SPI_OMOD_SLAVE 0x01
152 
153 /* --------Bit fields in CTRLR0--------end */
154 
155 /* TXFLR bits */
156 #define TXFLR_LEVEL_MASK 0x3f
157 
158 /* RXFLR bits */
159 #define RXFLR_LEVEL_MASK 0x3f
160 
161 /* Bit fields in SR, 7 bits */
162 #define SR_MASK 0x7f
163 #define SR_BUSY (1 << 0)
164 #define SR_TF_FULL (1 << 1)
165 #define SR_TF_EMPT (1 << 2)
166 #define SR_RF_EMPT (1 << 3)
167 #define SR_RF_FULL (1 << 4)
168 
169 /* Bit fields in ISR, IMR, RISR, 7 bits */
170 #define SPI_INT_TXEI (1 << 0)
171 #define SPI_INT_TXOI (1 << 1)
172 #define SPI_INT_RXUI (1 << 2)
173 #define SPI_INT_RXOI (1 << 3)
174 #define SPI_INT_RXFI (1 << 4)
175 
176 /* Bit fields in DMACR */
177 #define SPI_DMACR_TX_ENABLE (1 << 1)
178 #define SPI_DMACR_RX_ENABLE (1 << 0)
179 
180 /* Bit fields in ICR */
181 #define SPI_CLEAR_INT_ALL (1 << 0)
182 #define SPI_CLEAR_INT_RXUI (1 << 1)
183 #define SPI_CLEAR_INT_RXOI (1 << 2)
184 #define SPI_CLEAR_INT_TXOI (1 << 3)
185 
186 void rockchip_spi_init(unsigned int bus, unsigned int speed_hz);
187 
188 /* Set the receive sample delay in nanoseconds */
189 void rockchip_spi_set_sample_delay(unsigned int bus, unsigned int delay_ns);
190 
191 #endif /* ! __COREBOOT_SRC_SOC_ROCKCHIP_COMMON_INCLUDE_SOC_SPI_H */
check_member(tegra_spi_regs, spare_ctl, 0x18c)
void rockchip_spi_set_sample_delay(unsigned int bus, unsigned int delay_ns)
Definition: spi.c:122
void rockchip_spi_init(unsigned int bus, unsigned int speed_hz)
Definition: spi.c:84
uint32_t u32
Definition: stdint.h:51
Definition: device.h:76
u32 spienr
Definition: spi.h:13
u32 icr
Definition: spi.h:25
u32 damrdlr
Definition: spi.h:28
u32 reserved[(0x400-0x48)/4]
Definition: spi.h:29
u32 risr
Definition: spi.h:24
u32 dmacr
Definition: spi.h:26
u32 txftlr
Definition: spi.h:16
u32 ser
Definition: spi.h:14
u32 ctrlr0
Definition: spi.h:11
u32 txflr
Definition: spi.h:18
u32 sr
Definition: spi.h:20
u32 rxflr
Definition: spi.h:19
u32 rxdr[0x100]
Definition: spi.h:31
u32 ctrlr1
Definition: spi.h:12
u32 isr
Definition: spi.h:23
u32 damtdlr
Definition: spi.h:27
u32 baudr
Definition: spi.h:15
u32 txdr[0x100]
Definition: spi.h:30
u32 ipr
Definition: spi.h:21
u32 rxftlr
Definition: spi.h:17
u32 imr
Definition: spi.h:22