1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /* NVIDIA Tegra SPI controller (T114 and later) */
3
4 #include <arch/cache.h>
5 #include <device/mmio.h>
6 #include <assert.h>
7 #include <console/console.h>
8 #include <delay.h>
9 #include <spi-generic.h>
10 #include <spi_flash.h>
11 #include <soc/addressmap.h>
12 #include <soc/dma.h>
13 #include <soc/spi.h>
14 #include <symbols.h>
15 #include <types.h>
16
17 #if defined(CONFIG_DEBUG_SPI) && CONFIG_DEBUG_SPI
18 # define DEBUG_SPI(x,...) printk(BIOS_DEBUG, "TEGRA_SPI: " x)
19 #else
20 # define DEBUG_SPI(x,...)
21 #endif
22
23 /*
24 * 64 packets in FIFO mode, BLOCK_SIZE packets in DMA mode. Packets can vary
25 * in size from 4 to 32 bits. To keep things simple we'll use 8-bit packets.
26 */
27 #define SPI_PACKET_SIZE_BYTES 1
28 #define SPI_MAX_TRANSFER_BYTES_FIFO (64 * SPI_PACKET_SIZE_BYTES)
29 #define SPI_MAX_TRANSFER_BYTES_DMA (65535 * SPI_PACKET_SIZE_BYTES)
30
31 /*
32 * This is used to workaround an issue seen where it may take some time for
33 * packets to show up in the FIFO after they have been received and the
34 * BLOCK_COUNT has been incremented.
35 */
36 #define SPI_FIFO_XFER_TIMEOUT_US 1000
37
38 /* COMMAND1 */
39 #define SPI_CMD1_GO (1 << 31)
40 #define SPI_CMD1_M_S (1 << 30)
41 #define SPI_CMD1_MODE_MASK 0x3
42 #define SPI_CMD1_MODE_SHIFT 28
43 #define SPI_CMD1_CS_SEL_MASK 0x3
44 #define SPI_CMD1_CS_SEL_SHIFT 26
45 #define SPI_CMD1_CS_POL_INACTIVE3 (1 << 25)
46 #define SPI_CMD1_CS_POL_INACTIVE2 (1 << 24)
47 #define SPI_CMD1_CS_POL_INACTIVE1 (1 << 23)
48 #define SPI_CMD1_CS_POL_INACTIVE0 (1 << 22)
49 #define SPI_CMD1_CS_SW_HW (1 << 21)
50 #define SPI_CMD1_CS_SW_VAL (1 << 20)
51 #define SPI_CMD1_IDLE_SDA_MASK 0x3
52 #define SPI_CMD1_IDLE_SDA_SHIFT 18
53 #define SPI_CMD1_BIDIR (1 << 17)
54 #define SPI_CMD1_LSBI_FE (1 << 16)
55 #define SPI_CMD1_LSBY_FE (1 << 15)
56 #define SPI_CMD1_BOTH_EN_BIT (1 << 14)
57 #define SPI_CMD1_BOTH_EN_BYTE (1 << 13)
58 #define SPI_CMD1_RX_EN (1 << 12)
59 #define SPI_CMD1_TX_EN (1 << 11)
60 #define SPI_CMD1_PACKED (1 << 5)
61 #define SPI_CMD1_BIT_LEN_MASK 0x1f
62 #define SPI_CMD1_BIT_LEN_SHIFT 0
63
64 /* COMMAND2 */
65 #define SPI_CMD2_TX_CLK_TAP_DELAY (1 << 6)
66 #define SPI_CMD2_TX_CLK_TAP_DELAY_MASK (0x3F << 6)
67 #define SPI_CMD2_RX_CLK_TAP_DELAY (1 << 0)
68 #define SPI_CMD2_RX_CLK_TAP_DELAY_MASK (0x3F << 0)
69
70 /* SPI_TRANS_STATUS */
71 #define SPI_STATUS_RDY (1 << 30)
72 #define SPI_STATUS_SLV_IDLE_COUNT_MASK 0xff
73 #define SPI_STATUS_SLV_IDLE_COUNT_SHIFT 16
74 #define SPI_STATUS_BLOCK_COUNT 0xffff
75 #define SPI_STATUS_BLOCK_COUNT_SHIFT 0
76
77 /* SPI_FIFO_STATUS */
78 #define SPI_FIFO_STATUS_CS_INACTIVE (1 << 31)
79 #define SPI_FIFO_STATUS_FRAME_END (1 << 30)
80 #define SPI_FIFO_STATUS_RX_FIFO_FULL_COUNT_MASK 0x7f
81 #define SPI_FIFO_STATUS_RX_FIFO_FULL_COUNT_SHIFT 23
82 #define SPI_FIFO_STATUS_TX_FIFO_EMPTY_COUNT_MASK 0x7f
83 #define SPI_FIFO_STATUS_TX_FIFO_EMPTY_COUNT_SHIFT 16
84 #define SPI_FIFO_STATUS_RX_FIFO_FLUSH (1 << 15)
85 #define SPI_FIFO_STATUS_TX_FIFO_FLUSH (1 << 14)
86 #define SPI_FIFO_STATUS_ERR (1 << 8)
87 #define SPI_FIFO_STATUS_TX_FIFO_OVF (1 << 7)
88 #define SPI_FIFO_STATUS_TX_FIFO_UNR (1 << 6)
89 #define SPI_FIFO_STATUS_RX_FIFO_OVF (1 << 5)
90 #define SPI_FIFO_STATUS_RX_FIFO_UNR (1 << 4)
91 #define SPI_FIFO_STATUS_TX_FIFO_FULL (1 << 3)
92 #define SPI_FIFO_STATUS_TX_FIFO_EMPTY (1 << 2)
93 #define SPI_FIFO_STATUS_RX_FIFO_FULL (1 << 1)
94 #define SPI_FIFO_STATUS_RX_FIFO_EMPTY (1 << 0)
95
96 /* SPI_DMA_CTL */
97 #define SPI_DMA_CTL_DMA (1 << 31)
98 #define SPI_DMA_CTL_CONT (1 << 30)
99 #define SPI_DMA_CTL_IE_RX (1 << 29)
100 #define SPI_DMA_CTL_IE_TX (1 << 28)
101 #define SPI_DMA_CTL_RX_TRIG_MASK 0x3
102 #define SPI_DMA_CTL_RX_TRIG_SHIFT 19
103 #define SPI_DMA_CTL_TX_TRIG_MASK 0x3
104 #define SPI_DMA_CTL_TX_TRIG_SHIFT 15
105
106 /* SPI_DMA_BLK */
107 #define SPI_DMA_CTL_BLOCK_SIZE_MASK 0xffff
108 #define SPI_DMA_CTL_BLOCK_SIZE_SHIFT 0
109
110 static struct tegra_spi_channel tegra_spi_channels[] = {
111 /*
112 * Note: Tegra pinmux must be setup for corresponding SPI channel in
113 * order for its registers to be accessible. If pinmux has not been
114 * set up, access to the channel's registers will simply hang.
115 *
116 * TODO(dhendrix): Clarify or remove this comment (is clock setup
117 * necessary first, or just pinmux, or both?)
118 */
119 {
120 .slave = { .bus = 1, },
121 .regs = (struct tegra_spi_regs *)TEGRA_SPI1_BASE,
122 .req_sel = APBDMA_SLAVE_SL2B1,
123 },
124 {
125 .slave = { .bus = 2, },
126 .regs = (struct tegra_spi_regs *)TEGRA_SPI2_BASE,
127 .req_sel = APBDMA_SLAVE_SL2B2,
128 },
129 {
130 .slave = { .bus = 3, },
131 .regs = (struct tegra_spi_regs *)TEGRA_SPI3_BASE,
132 .req_sel = APBDMA_SLAVE_SL2B3,
133 },
134 {
135 .slave = { .bus = 4, },
136 .regs = (struct tegra_spi_regs *)TEGRA_SPI4_BASE,
137 .req_sel = APBDMA_SLAVE_SL2B4,
138 },
139 {
140 .slave = { .bus = 5, },
141 .regs = (struct tegra_spi_regs *)TEGRA_SPI5_BASE,
142 .req_sel = APBDMA_SLAVE_SL2B5,
143 },
144 {
145 .slave = { .bus = 6, },
146 .regs = (struct tegra_spi_regs *)TEGRA_SPI6_BASE,
147 .req_sel = APBDMA_SLAVE_SL2B6,
148 },
149 {
150 .slave = { .bus = 7, },
151 .regs = (struct tegra_spi_regs *)TEGRA_QSPI_BASE,
152 .req_sel = APBDMA_SLAVE_QSPI,
153 },
154 };
155
156 enum spi_direction {
157 SPI_SEND,
158 SPI_RECEIVE,
159 };
160
tegra_spi_init(unsigned int bus)161 struct tegra_spi_channel *tegra_spi_init(unsigned int bus)
162 {
163 int i;
164 struct tegra_spi_channel *spi = NULL;
165
166 for (i = 0; i < ARRAY_SIZE(tegra_spi_channels); i++) {
167 if (tegra_spi_channels[i].slave.bus == bus) {
168 spi = &tegra_spi_channels[i];
169 break;
170 }
171 }
172 if (!spi)
173 return NULL;
174
175 /* software drives chip-select, set value to high */
176 setbits32(&spi->regs->command1,
177 SPI_CMD1_CS_SW_HW | SPI_CMD1_CS_SW_VAL);
178
179 /* 8-bit transfers, unpacked mode, most significant bit first */
180 clrbits32(&spi->regs->command1,
181 SPI_CMD1_BIT_LEN_MASK | SPI_CMD1_PACKED);
182 setbits32(&spi->regs->command1, 7 << SPI_CMD1_BIT_LEN_SHIFT);
183
184 return spi;
185 }
186
to_tegra_spi(int bus)187 static struct tegra_spi_channel * const to_tegra_spi(int bus) {
188 return &tegra_spi_channels[bus - 1];
189 }
190
spi_ctrlr_claim_bus(const struct spi_slave * slave)191 static int spi_ctrlr_claim_bus(const struct spi_slave *slave)
192 {
193 struct tegra_spi_regs *regs = to_tegra_spi(slave->bus)->regs;
194 u32 val;
195
196 tegra_spi_init(slave->bus);
197
198 val = read32(®s->command1);
199
200 /* select appropriate chip-select line */
201 val &= ~(SPI_CMD1_CS_SEL_MASK << SPI_CMD1_CS_SEL_SHIFT);
202 val |= (slave->cs << SPI_CMD1_CS_SEL_SHIFT);
203
204 /* drive chip-select with the inverse of the "inactive" value */
205 if (val & (SPI_CMD1_CS_POL_INACTIVE0 << slave->cs))
206 val &= ~SPI_CMD1_CS_SW_VAL;
207 else
208 val |= SPI_CMD1_CS_SW_VAL;
209
210 write32(®s->command1, val);
211 return 0;
212 }
213
spi_ctrlr_release_bus(const struct spi_slave * slave)214 static void spi_ctrlr_release_bus(const struct spi_slave *slave)
215 {
216 struct tegra_spi_regs *regs = to_tegra_spi(slave->bus)->regs;
217 u32 val;
218
219 val = read32(®s->command1);
220
221 if (val & (SPI_CMD1_CS_POL_INACTIVE0 << slave->cs))
222 val |= SPI_CMD1_CS_SW_VAL;
223 else
224 val &= ~SPI_CMD1_CS_SW_VAL;
225
226 write32(®s->command1, val);
227 }
228
dump_fifo_status(struct tegra_spi_channel * spi)229 static void dump_fifo_status(struct tegra_spi_channel *spi)
230 {
231 u32 status = read32(&spi->regs->fifo_status);
232
233 printk(BIOS_INFO, "Raw FIFO status: 0x%08x\n", status);
234 if (status & SPI_FIFO_STATUS_TX_FIFO_OVF)
235 printk(BIOS_INFO, "\tTx overflow detected\n");
236 if (status & SPI_FIFO_STATUS_TX_FIFO_UNR)
237 printk(BIOS_INFO, "\tTx underrun detected\n");
238 if (status & SPI_FIFO_STATUS_RX_FIFO_OVF)
239 printk(BIOS_INFO, "\tRx overflow detected\n");
240 if (status & SPI_FIFO_STATUS_RX_FIFO_UNR)
241 printk(BIOS_INFO, "\tRx underrun detected\n");
242
243 printk(BIOS_INFO, "TX_FIFO: 0x%08x, TX_DATA: 0x%08x\n",
244 read32(&spi->regs->tx_fifo), read32(&spi->regs->tx_data));
245 printk(BIOS_INFO, "RX_FIFO: 0x%08x, RX_DATA: 0x%08x\n",
246 read32(&spi->regs->rx_fifo), read32(&spi->regs->rx_data));
247 }
248
clear_fifo_status(struct tegra_spi_channel * spi)249 static void clear_fifo_status(struct tegra_spi_channel *spi)
250 {
251 clrbits32(&spi->regs->fifo_status,
252 SPI_FIFO_STATUS_ERR |
253 SPI_FIFO_STATUS_TX_FIFO_OVF |
254 SPI_FIFO_STATUS_TX_FIFO_UNR |
255 SPI_FIFO_STATUS_RX_FIFO_OVF |
256 SPI_FIFO_STATUS_RX_FIFO_UNR);
257 }
258
dump_spi_regs(struct tegra_spi_channel * spi)259 static void dump_spi_regs(struct tegra_spi_channel *spi)
260 {
261 printk(BIOS_INFO, "SPI regs:\n"
262 "\tdma_blk: 0x%08x\n"
263 "\tcommand1: 0x%08x\n"
264 "\tdma_ctl: 0x%08x\n"
265 "\ttrans_status: 0x%08x\n",
266 read32(&spi->regs->dma_blk),
267 read32(&spi->regs->command1),
268 read32(&spi->regs->dma_ctl),
269 read32(&spi->regs->trans_status));
270 }
271
dump_dma_regs(struct apb_dma_channel * dma)272 static void dump_dma_regs(struct apb_dma_channel *dma)
273 {
274 if (dma) {
275 printk(BIOS_INFO, "DMA regs:\n"
276 "\tahb_ptr: 0x%08x\n"
277 "\tapb_ptr: 0x%08x\n"
278 "\tahb_seq: 0x%08x\n"
279 "\tapb_seq: 0x%08x\n"
280 "\tcsr: 0x%08x\n"
281 "\tcsre: 0x%08x\n"
282 "\twcount: 0x%08x\n"
283 "\tdma_byte_sta: 0x%08x\n"
284 "\tword_transfer: 0x%08x\n",
285 read32(&dma->regs->ahb_ptr),
286 read32(&dma->regs->apb_ptr),
287 read32(&dma->regs->ahb_seq),
288 read32(&dma->regs->apb_seq),
289 read32(&dma->regs->csr),
290 read32(&dma->regs->csre),
291 read32(&dma->regs->wcount),
292 read32(&dma->regs->dma_byte_sta),
293 read32(&dma->regs->word_transfer));
294 }
295 }
296
spi_byte_count(struct tegra_spi_channel * spi)297 static inline unsigned int spi_byte_count(struct tegra_spi_channel *spi)
298 {
299 /* FIXME: Make this take total packet size into account */
300 return read32(&spi->regs->trans_status) &
301 (SPI_STATUS_BLOCK_COUNT << SPI_STATUS_BLOCK_COUNT_SHIFT);
302 }
303
tegra_spi_wait(struct tegra_spi_channel * spi)304 static void tegra_spi_wait(struct tegra_spi_channel *spi)
305 {
306 uint32_t dma_blk_count = 1 + (read32(&spi->regs->dma_blk) &
307 (SPI_DMA_CTL_BLOCK_SIZE_MASK <<
308 SPI_DMA_CTL_BLOCK_SIZE_SHIFT));
309
310 while ((read32(&spi->regs->trans_status) & SPI_STATUS_RDY) !=
311 SPI_STATUS_RDY)
312 ;
313
314 /*
315 * If RDY bit is set, we should never encounter the condition that
316 * blocks processed is not equal to the number programmed in dma_blk
317 * register.
318 */
319 ASSERT(spi_byte_count(spi) == dma_blk_count);
320 }
321
fifo_error(struct tegra_spi_channel * spi)322 static int fifo_error(struct tegra_spi_channel *spi)
323 {
324 return read32(&spi->regs->fifo_status) & SPI_FIFO_STATUS_ERR ? 1 : 0;
325 }
326
flush_fifos(struct tegra_spi_channel * spi)327 static void flush_fifos(struct tegra_spi_channel *spi)
328 {
329 const uint32_t flush_mask = SPI_FIFO_STATUS_TX_FIFO_FLUSH |
330 SPI_FIFO_STATUS_RX_FIFO_FLUSH;
331
332 uint32_t fifo_status = read32(&spi->regs->fifo_status);
333 fifo_status |= flush_mask;
334 write32(&spi->regs->fifo_status, fifo_status);
335
336 while (read32(&spi->regs->fifo_status) & flush_mask)
337 ;
338 }
339
tegra_spi_pio_prepare(struct tegra_spi_channel * spi,unsigned int bytes,enum spi_direction dir)340 static int tegra_spi_pio_prepare(struct tegra_spi_channel *spi,
341 unsigned int bytes, enum spi_direction dir)
342 {
343 u8 *p = spi->out_buf;
344 unsigned int todo = MIN(bytes, SPI_MAX_TRANSFER_BYTES_FIFO);
345 u32 enable_mask;
346
347 flush_fifos(spi);
348
349 if (dir == SPI_SEND)
350 enable_mask = SPI_CMD1_TX_EN;
351 else
352 enable_mask = SPI_CMD1_RX_EN;
353
354 /*
355 * BLOCK_SIZE in SPI_DMA_BLK register applies to both DMA and
356 * PIO transfers. And, it should be programmed before RX_EN or
357 * TX_EN is set.
358 */
359 write32(&spi->regs->dma_blk, todo - 1);
360
361 setbits32(&spi->regs->command1, enable_mask);
362
363 if (dir == SPI_SEND) {
364 unsigned int to_fifo = bytes;
365 while (to_fifo) {
366 write32(&spi->regs->tx_fifo, *p);
367 p++;
368 to_fifo--;
369 }
370 }
371
372 return todo;
373 }
374
tegra_spi_pio_start(struct tegra_spi_channel * spi)375 static void tegra_spi_pio_start(struct tegra_spi_channel *spi)
376 {
377 setbits32(&spi->regs->trans_status, SPI_STATUS_RDY);
378 /*
379 * Need to stabilize other reg bit before GO bit set.
380 *
381 * From IAS:
382 * For successful operation at various freq combinations, min of 4-5
383 * spi_clk cycle delay might be required before enabling PIO or DMA bit.
384 * This is needed to overcome the MCP between core and pad_macro.
385 * The worst case delay calculation can be done considering slowest
386 * qspi_clk as 1 MHz. based on that 1 us delay should be enough before
387 * enabling pio or dma.
388 */
389 udelay(2);
390 setbits32(&spi->regs->command1, SPI_CMD1_GO);
391 /* Need to wait a few cycles before command1 register is read */
392 udelay(1);
393 /* Make sure the write to command1 completes. */
394 read32(&spi->regs->command1);
395 }
396
rx_fifo_count(struct tegra_spi_channel * spi)397 static inline u32 rx_fifo_count(struct tegra_spi_channel *spi)
398 {
399 return (read32(&spi->regs->fifo_status) >>
400 SPI_FIFO_STATUS_RX_FIFO_FULL_COUNT_SHIFT) &
401 SPI_FIFO_STATUS_RX_FIFO_FULL_COUNT_MASK;
402 }
403
tegra_spi_pio_finish(struct tegra_spi_channel * spi)404 static int tegra_spi_pio_finish(struct tegra_spi_channel *spi)
405 {
406 u8 *p = spi->in_buf;
407
408 clrbits32(&spi->regs->command1, SPI_CMD1_RX_EN | SPI_CMD1_TX_EN);
409
410 ASSERT(rx_fifo_count(spi) == spi_byte_count(spi));
411
412 if (p) {
413 while (!(read32(&spi->regs->fifo_status) &
414 SPI_FIFO_STATUS_RX_FIFO_EMPTY)) {
415 *p = read8(&spi->regs->rx_fifo);
416 p++;
417 }
418 }
419
420 if (fifo_error(spi)) {
421 printk(BIOS_ERR, "%s: ERROR:\n", __func__);
422 dump_spi_regs(spi);
423 dump_fifo_status(spi);
424 return -1;
425 }
426
427 return 0;
428 }
429
setup_dma_params(struct tegra_spi_channel * spi,struct apb_dma_channel * dma)430 static void setup_dma_params(struct tegra_spi_channel *spi,
431 struct apb_dma_channel *dma)
432 {
433 /* APB bus width = 8-bits, address wrap for each word */
434 clrbits32(&dma->regs->apb_seq,
435 APB_BUS_WIDTH_MASK << APB_BUS_WIDTH_SHIFT);
436 /* AHB 1 word burst, bus width = 32 bits (fixed in hardware),
437 * no address wrapping */
438 clrsetbits32(&dma->regs->ahb_seq,
439 (AHB_BURST_MASK << AHB_BURST_SHIFT),
440 4 << AHB_BURST_SHIFT);
441
442 /* Set ONCE mode to transfer one "block" at a time (64KB) and enable
443 * flow control. */
444 clrbits32(&dma->regs->csr,
445 APB_CSR_REQ_SEL_MASK << APB_CSR_REQ_SEL_SHIFT);
446 setbits32(&dma->regs->csr, APB_CSR_ONCE | APB_CSR_FLOW |
447 (spi->req_sel << APB_CSR_REQ_SEL_SHIFT));
448 }
449
tegra_spi_dma_prepare(struct tegra_spi_channel * spi,unsigned int bytes,enum spi_direction dir)450 static int tegra_spi_dma_prepare(struct tegra_spi_channel *spi,
451 unsigned int bytes, enum spi_direction dir)
452 {
453 unsigned int todo, wcount;
454
455 /*
456 * For DMA we need to think of things in terms of word count.
457 * AHB width is fixed at 32-bits. To avoid overrunning
458 * the in/out buffers we must align down. (Note: lowest 2-bits
459 * in WCOUNT register are ignored, and WCOUNT seems to count
460 * words starting at n-1)
461 *
462 * Example: If "bytes" is 7 and we are transferring 1-byte at a time,
463 * WCOUNT should be 4. The remaining 3 bytes must be transferred
464 * using PIO.
465 */
466 todo = MIN(bytes, SPI_MAX_TRANSFER_BYTES_DMA - TEGRA_DMA_ALIGN_BYTES);
467 todo = ALIGN_DOWN(todo, TEGRA_DMA_ALIGN_BYTES);
468 wcount = ALIGN_DOWN(todo - TEGRA_DMA_ALIGN_BYTES, TEGRA_DMA_ALIGN_BYTES);
469
470 flush_fifos(spi);
471
472 if (dir == SPI_SEND) {
473 spi->dma_out = dma_claim();
474 if (!spi->dma_out)
475 return -1;
476
477 /* ensure bytes to send will be visible to DMA controller */
478 dcache_clean_by_mva(spi->out_buf, bytes);
479
480 write32(&spi->dma_out->regs->apb_ptr,
481 (uintptr_t)&spi->regs->tx_fifo);
482 write32(&spi->dma_out->regs->ahb_ptr, (uintptr_t)spi->out_buf);
483 setbits32(&spi->dma_out->regs->csr, APB_CSR_DIR);
484 setup_dma_params(spi, spi->dma_out);
485 write32(&spi->dma_out->regs->wcount, wcount);
486 } else {
487 spi->dma_in = dma_claim();
488 if (!spi->dma_in)
489 return -1;
490
491 /* avoid data collisions */
492 dcache_clean_invalidate_by_mva(spi->in_buf, bytes);
493
494 write32(&spi->dma_in->regs->apb_ptr,
495 (uintptr_t)&spi->regs->rx_fifo);
496 write32(&spi->dma_in->regs->ahb_ptr, (uintptr_t)spi->in_buf);
497 clrbits32(&spi->dma_in->regs->csr, APB_CSR_DIR);
498 setup_dma_params(spi, spi->dma_in);
499 write32(&spi->dma_in->regs->wcount, wcount);
500 }
501
502 /* BLOCK_SIZE starts at n-1 */
503 write32(&spi->regs->dma_blk, todo - 1);
504 return todo;
505 }
506
tegra_spi_dma_start(struct tegra_spi_channel * spi)507 static void tegra_spi_dma_start(struct tegra_spi_channel *spi)
508 {
509 /*
510 * The RDY bit in SPI_TRANS_STATUS needs to be cleared manually
511 * (set bit to clear) between each transaction. Otherwise the next
512 * transaction does not start.
513 */
514 setbits32(&spi->regs->trans_status, SPI_STATUS_RDY);
515
516 struct apb_dma * const apb_dma = (struct apb_dma *)TEGRA_APB_DMA_BASE;
517
518 /*
519 * The DMA triggers have units of packets. As each packet is currently
520 * 1 byte the triggers need to be set to 4 packets (0b01) to match
521 * the AHB 32-bit (4 byte) tranfser. Otherwise the FIFO errors can
522 * occur.
523 */
524 if (spi->dma_out) {
525 /* Enable secure access for the channel. */
526 setbits32(&apb_dma->security_reg,
527 SECURITY_EN_BIT(spi->dma_out->num));
528 clrsetbits32(&spi->regs->dma_ctl,
529 SPI_DMA_CTL_TX_TRIG_MASK << SPI_DMA_CTL_TX_TRIG_SHIFT,
530 1 << SPI_DMA_CTL_TX_TRIG_SHIFT);
531 setbits32(&spi->regs->command1, SPI_CMD1_TX_EN);
532 }
533 if (spi->dma_in) {
534 /* Enable secure access for the channel. */
535 setbits32(&apb_dma->security_reg,
536 SECURITY_EN_BIT(spi->dma_in->num));
537 clrsetbits32(&spi->regs->dma_ctl,
538 SPI_DMA_CTL_RX_TRIG_MASK << SPI_DMA_CTL_RX_TRIG_SHIFT,
539 1 << SPI_DMA_CTL_RX_TRIG_SHIFT);
540 setbits32(&spi->regs->command1, SPI_CMD1_RX_EN);
541 }
542
543 /*
544 * To avoid underrun conditions, enable APB DMA before SPI DMA for
545 * Tx and enable SPI DMA before APB DMA before Rx.
546 */
547 if (spi->dma_out)
548 dma_start(spi->dma_out);
549 setbits32(&spi->regs->dma_ctl, SPI_DMA_CTL_DMA);
550 if (spi->dma_in)
551 dma_start(spi->dma_in);
552 }
553
tegra_spi_dma_finish(struct tegra_spi_channel * spi)554 static int tegra_spi_dma_finish(struct tegra_spi_channel *spi)
555 {
556 int ret;
557 unsigned int todo;
558
559 struct apb_dma * const apb_dma = (struct apb_dma *)TEGRA_APB_DMA_BASE;
560
561 if (spi->dma_in) {
562 todo = read32(&spi->dma_in->regs->wcount);
563
564 while ((read32(&spi->dma_in->regs->dma_byte_sta) < todo) ||
565 dma_busy(spi->dma_in))
566 ;
567 dma_stop(spi->dma_in);
568 clrbits32(&spi->regs->command1, SPI_CMD1_RX_EN);
569 /* Disable secure access for the channel. */
570 clrbits32(&apb_dma->security_reg,
571 SECURITY_EN_BIT(spi->dma_in->num));
572 dma_release(spi->dma_in);
573 }
574
575 if (spi->dma_out) {
576 todo = read32(&spi->dma_out->regs->wcount);
577
578 while ((read32(&spi->dma_out->regs->dma_byte_sta) < todo) ||
579 dma_busy(spi->dma_out))
580 ;
581 clrbits32(&spi->regs->command1, SPI_CMD1_TX_EN);
582 dma_stop(spi->dma_out);
583 /* Disable secure access for the channel. */
584 clrbits32(&apb_dma->security_reg,
585 SECURITY_EN_BIT(spi->dma_out->num));
586 dma_release(spi->dma_out);
587 }
588
589 if (fifo_error(spi)) {
590 printk(BIOS_ERR, "%s: ERROR:\n", __func__);
591 dump_dma_regs(spi->dma_out);
592 dump_dma_regs(spi->dma_in);
593 dump_spi_regs(spi);
594 dump_fifo_status(spi);
595 ret = -1;
596 goto done;
597 }
598
599 ret = 0;
600 done:
601 spi->dma_in = NULL;
602 spi->dma_out = NULL;
603 return ret;
604 }
605
606 /*
607 * xfer_setup() prepares a transfer. It does sanity checking, alignment, and
608 * sets transfer mode used by this channel (if not set already).
609 *
610 * A few caveats to watch out for:
611 * - The number of bytes which can be transferred may be smaller than the
612 * number of bytes the caller specifies. The number of bytes ready for
613 * a transfer will be returned (unless an error occurs).
614 *
615 * - Only one mode can be used for both RX and TX. The transfer mode of the
616 * SPI channel (spi->xfer_mode) is checked each time this function is called.
617 * If conflicting modes are detected, spi->xfer_mode will be set to
618 * XFER_MODE_NONE and an error will be returned.
619 *
620 * Returns bytes ready for transfer if successful, <0 to indicate error.
621 */
xfer_setup(struct tegra_spi_channel * spi,void * buf,unsigned int bytes,enum spi_direction dir)622 static int xfer_setup(struct tegra_spi_channel *spi, void *buf,
623 unsigned int bytes, enum spi_direction dir)
624 {
625 unsigned int line_size = dcache_line_bytes();
626 unsigned int align;
627 int ret = -1;
628
629 if (!bytes)
630 return 0;
631
632 if (dir == SPI_SEND)
633 spi->out_buf = buf;
634 else if (dir == SPI_RECEIVE)
635 spi->in_buf = buf;
636
637 /*
638 * Alignment consideratons:
639 * When we enable caching we'll need to clean/invalidate portions of
640 * memory. So we need to be careful about memory alignment. Also, DMA
641 * likes to operate on 4-bytes at a time on the AHB side. So for
642 * example, if we only want to receive 1 byte, 4 bytes will be
643 * written in memory even if those extra 3 bytes are beyond the length
644 * we want.
645 *
646 * For now we'll use PIO to send/receive unaligned bytes. We may
647 * consider setting aside some space for a kind of bounce buffer to
648 * stay in DMA mode once we have a chance to benchmark the two
649 * approaches.
650 */
651
652 if (bytes < line_size) {
653 if (spi->xfer_mode == XFER_MODE_DMA) {
654 spi->xfer_mode = XFER_MODE_NONE;
655 ret = -1;
656 } else {
657 spi->xfer_mode = XFER_MODE_PIO;
658 ret = tegra_spi_pio_prepare(spi, bytes, dir);
659 }
660 goto done;
661 }
662
663 /* transfer bytes before the aligned boundary */
664 align = line_size - ((uintptr_t)buf % line_size);
665 if ((align != 0) && (align != line_size)) {
666 if (spi->xfer_mode == XFER_MODE_DMA) {
667 spi->xfer_mode = XFER_MODE_NONE;
668 ret = -1;
669 } else {
670 spi->xfer_mode = XFER_MODE_PIO;
671 ret = tegra_spi_pio_prepare(spi, align, dir);
672 }
673 goto done;
674 }
675
676 /* do aligned DMA transfer */
677 align = (((uintptr_t)buf + bytes) % line_size);
678 if (bytes - align > 0) {
679 unsigned int dma_bytes = bytes - align;
680
681 if (spi->xfer_mode == XFER_MODE_PIO) {
682 spi->xfer_mode = XFER_MODE_NONE;
683 ret = -1;
684 } else {
685 spi->xfer_mode = XFER_MODE_DMA;
686 ret = tegra_spi_dma_prepare(spi, dma_bytes, dir);
687 }
688
689 goto done;
690 }
691
692 /* transfer any remaining unaligned bytes */
693 if (align) {
694 if (spi->xfer_mode == XFER_MODE_DMA) {
695 spi->xfer_mode = XFER_MODE_NONE;
696 ret = -1;
697 } else {
698 spi->xfer_mode = XFER_MODE_PIO;
699 ret = tegra_spi_pio_prepare(spi, align, dir);
700 }
701 goto done;
702 }
703
704 done:
705 return ret;
706 }
707
xfer_start(struct tegra_spi_channel * spi)708 static void xfer_start(struct tegra_spi_channel *spi)
709 {
710 if (spi->xfer_mode == XFER_MODE_DMA)
711 tegra_spi_dma_start(spi);
712 else
713 tegra_spi_pio_start(spi);
714 }
715
xfer_wait(struct tegra_spi_channel * spi)716 static void xfer_wait(struct tegra_spi_channel *spi)
717 {
718 tegra_spi_wait(spi);
719 }
720
xfer_finish(struct tegra_spi_channel * spi)721 static int xfer_finish(struct tegra_spi_channel *spi)
722 {
723 int ret;
724
725 if (spi->xfer_mode == XFER_MODE_DMA)
726 ret = tegra_spi_dma_finish(spi);
727 else
728 ret = tegra_spi_pio_finish(spi);
729
730 spi->xfer_mode = XFER_MODE_NONE;
731 return ret;
732 }
733
spi_ctrlr_xfer(const struct spi_slave * slave,const void * dout,size_t out_bytes,void * din,size_t in_bytes)734 static int spi_ctrlr_xfer(const struct spi_slave *slave, const void *dout,
735 size_t out_bytes, void *din, size_t in_bytes)
736 {
737 struct tegra_spi_channel *spi = to_tegra_spi(slave->bus);
738 u8 *out_buf = (u8 *)dout;
739 u8 *in_buf = (u8 *)din;
740 size_t todo;
741 int ret = 0;
742
743 /* tegra bus numbers start at 1 */
744 ASSERT(slave->bus >= 1 && slave->bus <= ARRAY_SIZE(tegra_spi_channels));
745
746 while (out_bytes || in_bytes) {
747 int x = 0;
748
749 if (out_bytes == 0)
750 todo = in_bytes;
751 else if (in_bytes == 0)
752 todo = out_bytes;
753 else
754 todo = MIN(out_bytes, in_bytes);
755
756 if (out_bytes) {
757 x = xfer_setup(spi, out_buf, todo, SPI_SEND);
758 if (x < 0) {
759 if (spi->xfer_mode == XFER_MODE_NONE) {
760 spi->xfer_mode = XFER_MODE_PIO;
761 continue;
762 } else {
763 ret = -1;
764 break;
765 }
766 }
767 }
768 if (in_bytes) {
769 x = xfer_setup(spi, in_buf, todo, SPI_RECEIVE);
770 if (x < 0) {
771 if (spi->xfer_mode == XFER_MODE_NONE) {
772 spi->xfer_mode = XFER_MODE_PIO;
773 continue;
774 } else {
775 ret = -1;
776 break;
777 }
778 }
779 }
780
781 /*
782 * Note: Some devices (such as Chrome EC) are sensitive to
783 * delays, so be careful when adding debug prints not to
784 * cause timeouts between transfers.
785 */
786 xfer_start(spi);
787 xfer_wait(spi);
788 if (xfer_finish(spi)) {
789 ret = -1;
790 break;
791 }
792
793 /* Post-processing. */
794 if (out_bytes) {
795 out_bytes -= x;
796 out_buf += x;
797 }
798 if (in_bytes) {
799 in_bytes -= x;
800 in_buf += x;
801 }
802 }
803
804 if (ret < 0) {
805 printk(BIOS_ERR, "%s: Error detected\n", __func__);
806 printk(BIOS_ERR, "Transaction size: %zu, bytes remaining: "
807 "%zu out / %zu in\n", todo, out_bytes, in_bytes);
808 clear_fifo_status(spi);
809 }
810 return ret;
811 }
812
813 static const struct spi_ctrlr spi_ctrlr = {
814 .claim_bus = spi_ctrlr_claim_bus,
815 .release_bus = spi_ctrlr_release_bus,
816 .xfer = spi_ctrlr_xfer,
817 .max_xfer_size = SPI_CTRLR_DEFAULT_MAX_XFER_SIZE,
818 };
819
820 const struct spi_ctrlr_buses spi_ctrlr_bus_map[] = {
821 {
822 .ctrlr = &spi_ctrlr,
823 .bus_start = 1,
824 .bus_end = ARRAY_SIZE(tegra_spi_channels)
825 },
826 };
827
828 const size_t spi_ctrlr_bus_map_count = ARRAY_SIZE(spi_ctrlr_bus_map);
829