1 // SPDX-License-Identifier: GPL-2.0+
3 // Copyright 2013 Freescale Semiconductor, Inc.
6 // Freescale DSPI driver
7 // This file contains a driver for the Freescale DSPI
10 #include <linux/delay.h>
11 #include <linux/dmaengine.h>
12 #include <linux/dma-mapping.h>
13 #include <linux/interrupt.h>
14 #include <linux/kernel.h>
15 #include <linux/module.h>
16 #include <linux/of_device.h>
17 #include <linux/pinctrl/consumer.h>
18 #include <linux/regmap.h>
19 #include <linux/spi/spi.h>
20 #include <linux/spi/spi-fsl-dspi.h>
22 #define DRIVER_NAME "fsl-dspi"
25 #define SPI_MCR_MASTER BIT(31)
26 #define SPI_MCR_PCSIS(x) ((x) << 16)
27 #define SPI_MCR_CLR_TXF BIT(11)
28 #define SPI_MCR_CLR_RXF BIT(10)
29 #define SPI_MCR_XSPI BIT(3)
30 #define SPI_MCR_DIS_TXF BIT(13)
31 #define SPI_MCR_DIS_RXF BIT(12)
32 #define SPI_MCR_HALT BIT(0)
35 #define SPI_TCR_GET_TCNT(x) (((x) & GENMASK(31, 16)) >> 16)
37 #define SPI_CTAR(x) (0x0c + (((x) & GENMASK(1, 0)) * 4))
38 #define SPI_CTAR_FMSZ(x) (((x) << 27) & GENMASK(30, 27))
39 #define SPI_CTAR_CPOL BIT(26)
40 #define SPI_CTAR_CPHA BIT(25)
41 #define SPI_CTAR_LSBFE BIT(24)
42 #define SPI_CTAR_PCSSCK(x) (((x) << 22) & GENMASK(23, 22))
43 #define SPI_CTAR_PASC(x) (((x) << 20) & GENMASK(21, 20))
44 #define SPI_CTAR_PDT(x) (((x) << 18) & GENMASK(19, 18))
45 #define SPI_CTAR_PBR(x) (((x) << 16) & GENMASK(17, 16))
46 #define SPI_CTAR_CSSCK(x) (((x) << 12) & GENMASK(15, 12))
47 #define SPI_CTAR_ASC(x) (((x) << 8) & GENMASK(11, 8))
48 #define SPI_CTAR_DT(x) (((x) << 4) & GENMASK(7, 4))
49 #define SPI_CTAR_BR(x) ((x) & GENMASK(3, 0))
50 #define SPI_CTAR_SCALE_BITS 0xf
52 #define SPI_CTAR0_SLAVE 0x0c
55 #define SPI_SR_TCFQF BIT(31)
56 #define SPI_SR_TFUF BIT(27)
57 #define SPI_SR_TFFF BIT(25)
58 #define SPI_SR_CMDTCF BIT(23)
59 #define SPI_SR_SPEF BIT(21)
60 #define SPI_SR_RFOF BIT(19)
61 #define SPI_SR_TFIWF BIT(18)
62 #define SPI_SR_RFDF BIT(17)
63 #define SPI_SR_CMDFFF BIT(16)
64 #define SPI_SR_CLEAR (SPI_SR_TCFQF | \
65 SPI_SR_TFUF | SPI_SR_TFFF | \
66 SPI_SR_CMDTCF | SPI_SR_SPEF | \
67 SPI_SR_RFOF | SPI_SR_TFIWF | \
68 SPI_SR_RFDF | SPI_SR_CMDFFF)
70 #define SPI_RSER_TFFFE BIT(25)
71 #define SPI_RSER_TFFFD BIT(24)
72 #define SPI_RSER_RFDFE BIT(17)
73 #define SPI_RSER_RFDFD BIT(16)
76 #define SPI_RSER_TCFQE BIT(31)
77 #define SPI_RSER_CMDTCFE BIT(23)
79 #define SPI_PUSHR 0x34
80 #define SPI_PUSHR_CMD_CONT BIT(15)
81 #define SPI_PUSHR_CMD_CTAS(x) (((x) << 12 & GENMASK(14, 12)))
82 #define SPI_PUSHR_CMD_EOQ BIT(11)
83 #define SPI_PUSHR_CMD_CTCNT BIT(10)
84 #define SPI_PUSHR_CMD_PCS(x) (BIT(x) & GENMASK(5, 0))
86 #define SPI_PUSHR_SLAVE 0x34
90 #define SPI_TXFR0 0x3c
91 #define SPI_TXFR1 0x40
92 #define SPI_TXFR2 0x44
93 #define SPI_TXFR3 0x48
94 #define SPI_RXFR0 0x7c
95 #define SPI_RXFR1 0x80
96 #define SPI_RXFR2 0x84
97 #define SPI_RXFR3 0x88
99 #define SPI_CTARE(x) (0x11c + (((x) & GENMASK(1, 0)) * 4))
100 #define SPI_CTARE_FMSZE(x) (((x) & 0x1) << 16)
101 #define SPI_CTARE_DTCP(x) ((x) & 0x7ff)
103 #define SPI_SREX 0x13c
105 #define SPI_FRAME_BITS(bits) SPI_CTAR_FMSZ((bits) - 1)
106 #define SPI_FRAME_EBITS(bits) SPI_CTARE_FMSZE(((bits) - 1) >> 4)
108 #define DMA_COMPLETION_TIMEOUT msecs_to_jiffies(3000)
114 enum dspi_trans_mode
{
119 struct fsl_dspi_devtype_data
{
120 enum dspi_trans_mode trans_mode
;
138 static const struct fsl_dspi_devtype_data devtype_data
[] = {
140 .trans_mode
= DSPI_DMA_MODE
,
141 .max_clock_factor
= 2,
145 /* Has A-011218 DMA erratum */
146 .trans_mode
= DSPI_XSPI_MODE
,
147 .max_clock_factor
= 8,
151 /* Has A-011218 DMA erratum */
152 .trans_mode
= DSPI_XSPI_MODE
,
153 .max_clock_factor
= 8,
157 .trans_mode
= DSPI_XSPI_MODE
,
158 .max_clock_factor
= 8,
162 /* Has A-011218 DMA erratum */
163 .trans_mode
= DSPI_XSPI_MODE
,
164 .max_clock_factor
= 8,
168 /* Has A-011218 DMA erratum */
169 .trans_mode
= DSPI_XSPI_MODE
,
170 .max_clock_factor
= 8,
174 .trans_mode
= DSPI_XSPI_MODE
,
175 .max_clock_factor
= 8,
179 .trans_mode
= DSPI_XSPI_MODE
,
180 .max_clock_factor
= 8,
184 .trans_mode
= DSPI_XSPI_MODE
,
185 .max_clock_factor
= 8,
189 .trans_mode
= DSPI_DMA_MODE
,
190 .max_clock_factor
= 8,
195 struct fsl_dspi_dma
{
197 struct dma_chan
*chan_tx
;
198 dma_addr_t tx_dma_phys
;
199 struct completion cmd_tx_complete
;
200 struct dma_async_tx_descriptor
*tx_desc
;
203 struct dma_chan
*chan_rx
;
204 dma_addr_t rx_dma_phys
;
205 struct completion cmd_rx_complete
;
206 struct dma_async_tx_descriptor
*rx_desc
;
210 struct spi_controller
*ctlr
;
211 struct platform_device
*pdev
;
213 struct regmap
*regmap
;
214 struct regmap
*regmap_pushr
;
218 struct spi_transfer
*cur_transfer
;
219 struct spi_message
*cur_msg
;
220 struct chip_data
*cur_chip
;
226 const struct fsl_dspi_devtype_data
*devtype_data
;
228 struct completion xfer_done
;
230 struct fsl_dspi_dma
*dma
;
233 int oper_bits_per_word
;
238 * Offsets for CMD and TXDATA within SPI_PUSHR when accessed
239 * individually (in XSPI mode)
244 void (*host_to_dev
)(struct fsl_dspi
*dspi
, u32
*txdata
);
245 void (*dev_to_host
)(struct fsl_dspi
*dspi
, u32 rxdata
);
248 static void dspi_native_host_to_dev(struct fsl_dspi
*dspi
, u32
*txdata
)
250 switch (dspi
->oper_word_size
) {
252 *txdata
= *(u8
*)dspi
->tx
;
255 *txdata
= *(u16
*)dspi
->tx
;
258 *txdata
= *(u32
*)dspi
->tx
;
261 dspi
->tx
+= dspi
->oper_word_size
;
264 static void dspi_native_dev_to_host(struct fsl_dspi
*dspi
, u32 rxdata
)
266 switch (dspi
->oper_word_size
) {
268 *(u8
*)dspi
->rx
= rxdata
;
271 *(u16
*)dspi
->rx
= rxdata
;
274 *(u32
*)dspi
->rx
= rxdata
;
277 dspi
->rx
+= dspi
->oper_word_size
;
280 static void dspi_8on32_host_to_dev(struct fsl_dspi
*dspi
, u32
*txdata
)
282 *txdata
= cpu_to_be32(*(u32
*)dspi
->tx
);
283 dspi
->tx
+= sizeof(u32
);
286 static void dspi_8on32_dev_to_host(struct fsl_dspi
*dspi
, u32 rxdata
)
288 *(u32
*)dspi
->rx
= be32_to_cpu(rxdata
);
289 dspi
->rx
+= sizeof(u32
);
292 static void dspi_8on16_host_to_dev(struct fsl_dspi
*dspi
, u32
*txdata
)
294 *txdata
= cpu_to_be16(*(u16
*)dspi
->tx
);
295 dspi
->tx
+= sizeof(u16
);
298 static void dspi_8on16_dev_to_host(struct fsl_dspi
*dspi
, u32 rxdata
)
300 *(u16
*)dspi
->rx
= be16_to_cpu(rxdata
);
301 dspi
->rx
+= sizeof(u16
);
304 static void dspi_16on32_host_to_dev(struct fsl_dspi
*dspi
, u32
*txdata
)
306 u16 hi
= *(u16
*)dspi
->tx
;
307 u16 lo
= *(u16
*)(dspi
->tx
+ 2);
309 *txdata
= (u32
)hi
<< 16 | lo
;
310 dspi
->tx
+= sizeof(u32
);
313 static void dspi_16on32_dev_to_host(struct fsl_dspi
*dspi
, u32 rxdata
)
315 u16 hi
= rxdata
& 0xffff;
316 u16 lo
= rxdata
>> 16;
318 *(u16
*)dspi
->rx
= lo
;
319 *(u16
*)(dspi
->rx
+ 2) = hi
;
320 dspi
->rx
+= sizeof(u32
);
324 * Pop one word from the TX buffer for pushing into the
325 * PUSHR register (TX FIFO)
327 static u32
dspi_pop_tx(struct fsl_dspi
*dspi
)
332 dspi
->host_to_dev(dspi
, &txdata
);
333 dspi
->len
-= dspi
->oper_word_size
;
337 /* Prepare one TX FIFO entry (txdata plus cmd) */
338 static u32
dspi_pop_tx_pushr(struct fsl_dspi
*dspi
)
340 u16 cmd
= dspi
->tx_cmd
, data
= dspi_pop_tx(dspi
);
342 if (spi_controller_is_slave(dspi
->ctlr
))
346 cmd
|= SPI_PUSHR_CMD_CONT
;
347 return cmd
<< 16 | data
;
350 /* Push one word to the RX buffer from the POPR register (RX FIFO) */
351 static void dspi_push_rx(struct fsl_dspi
*dspi
, u32 rxdata
)
355 dspi
->dev_to_host(dspi
, rxdata
);
358 static void dspi_tx_dma_callback(void *arg
)
360 struct fsl_dspi
*dspi
= arg
;
361 struct fsl_dspi_dma
*dma
= dspi
->dma
;
363 complete(&dma
->cmd_tx_complete
);
366 static void dspi_rx_dma_callback(void *arg
)
368 struct fsl_dspi
*dspi
= arg
;
369 struct fsl_dspi_dma
*dma
= dspi
->dma
;
373 for (i
= 0; i
< dspi
->words_in_flight
; i
++)
374 dspi_push_rx(dspi
, dspi
->dma
->rx_dma_buf
[i
]);
377 complete(&dma
->cmd_rx_complete
);
380 static int dspi_next_xfer_dma_submit(struct fsl_dspi
*dspi
)
382 struct device
*dev
= &dspi
->pdev
->dev
;
383 struct fsl_dspi_dma
*dma
= dspi
->dma
;
387 for (i
= 0; i
< dspi
->words_in_flight
; i
++)
388 dspi
->dma
->tx_dma_buf
[i
] = dspi_pop_tx_pushr(dspi
);
390 dma
->tx_desc
= dmaengine_prep_slave_single(dma
->chan_tx
,
392 dspi
->words_in_flight
*
393 DMA_SLAVE_BUSWIDTH_4_BYTES
,
395 DMA_PREP_INTERRUPT
| DMA_CTRL_ACK
);
397 dev_err(dev
, "Not able to get desc for DMA xfer\n");
401 dma
->tx_desc
->callback
= dspi_tx_dma_callback
;
402 dma
->tx_desc
->callback_param
= dspi
;
403 if (dma_submit_error(dmaengine_submit(dma
->tx_desc
))) {
404 dev_err(dev
, "DMA submit failed\n");
408 dma
->rx_desc
= dmaengine_prep_slave_single(dma
->chan_rx
,
410 dspi
->words_in_flight
*
411 DMA_SLAVE_BUSWIDTH_4_BYTES
,
413 DMA_PREP_INTERRUPT
| DMA_CTRL_ACK
);
415 dev_err(dev
, "Not able to get desc for DMA xfer\n");
419 dma
->rx_desc
->callback
= dspi_rx_dma_callback
;
420 dma
->rx_desc
->callback_param
= dspi
;
421 if (dma_submit_error(dmaengine_submit(dma
->rx_desc
))) {
422 dev_err(dev
, "DMA submit failed\n");
426 reinit_completion(&dspi
->dma
->cmd_rx_complete
);
427 reinit_completion(&dspi
->dma
->cmd_tx_complete
);
429 dma_async_issue_pending(dma
->chan_rx
);
430 dma_async_issue_pending(dma
->chan_tx
);
432 if (spi_controller_is_slave(dspi
->ctlr
)) {
433 wait_for_completion_interruptible(&dspi
->dma
->cmd_rx_complete
);
437 time_left
= wait_for_completion_timeout(&dspi
->dma
->cmd_tx_complete
,
438 DMA_COMPLETION_TIMEOUT
);
439 if (time_left
== 0) {
440 dev_err(dev
, "DMA tx timeout\n");
441 dmaengine_terminate_all(dma
->chan_tx
);
442 dmaengine_terminate_all(dma
->chan_rx
);
446 time_left
= wait_for_completion_timeout(&dspi
->dma
->cmd_rx_complete
,
447 DMA_COMPLETION_TIMEOUT
);
448 if (time_left
== 0) {
449 dev_err(dev
, "DMA rx timeout\n");
450 dmaengine_terminate_all(dma
->chan_tx
);
451 dmaengine_terminate_all(dma
->chan_rx
);
458 static void dspi_setup_accel(struct fsl_dspi
*dspi
);
460 static int dspi_dma_xfer(struct fsl_dspi
*dspi
)
462 struct spi_message
*message
= dspi
->cur_msg
;
463 struct device
*dev
= &dspi
->pdev
->dev
;
467 * dspi->len gets decremented by dspi_pop_tx_pushr in
468 * dspi_next_xfer_dma_submit
471 /* Figure out operational bits-per-word for this chunk */
472 dspi_setup_accel(dspi
);
474 dspi
->words_in_flight
= dspi
->len
/ dspi
->oper_word_size
;
475 if (dspi
->words_in_flight
> dspi
->devtype_data
->fifo_size
)
476 dspi
->words_in_flight
= dspi
->devtype_data
->fifo_size
;
478 message
->actual_length
+= dspi
->words_in_flight
*
479 dspi
->oper_word_size
;
481 ret
= dspi_next_xfer_dma_submit(dspi
);
483 dev_err(dev
, "DMA transfer failed\n");
491 static int dspi_request_dma(struct fsl_dspi
*dspi
, phys_addr_t phy_addr
)
493 int dma_bufsize
= dspi
->devtype_data
->fifo_size
* 2;
494 struct device
*dev
= &dspi
->pdev
->dev
;
495 struct dma_slave_config cfg
;
496 struct fsl_dspi_dma
*dma
;
499 dma
= devm_kzalloc(dev
, sizeof(*dma
), GFP_KERNEL
);
503 dma
->chan_rx
= dma_request_chan(dev
, "rx");
504 if (IS_ERR(dma
->chan_rx
)) {
505 dev_err(dev
, "rx dma channel not available\n");
506 ret
= PTR_ERR(dma
->chan_rx
);
510 dma
->chan_tx
= dma_request_chan(dev
, "tx");
511 if (IS_ERR(dma
->chan_tx
)) {
512 dev_err(dev
, "tx dma channel not available\n");
513 ret
= PTR_ERR(dma
->chan_tx
);
517 dma
->tx_dma_buf
= dma_alloc_coherent(dma
->chan_tx
->device
->dev
,
518 dma_bufsize
, &dma
->tx_dma_phys
,
520 if (!dma
->tx_dma_buf
) {
525 dma
->rx_dma_buf
= dma_alloc_coherent(dma
->chan_rx
->device
->dev
,
526 dma_bufsize
, &dma
->rx_dma_phys
,
528 if (!dma
->rx_dma_buf
) {
533 cfg
.src_addr
= phy_addr
+ SPI_POPR
;
534 cfg
.dst_addr
= phy_addr
+ SPI_PUSHR
;
535 cfg
.src_addr_width
= DMA_SLAVE_BUSWIDTH_4_BYTES
;
536 cfg
.dst_addr_width
= DMA_SLAVE_BUSWIDTH_4_BYTES
;
537 cfg
.src_maxburst
= 1;
538 cfg
.dst_maxburst
= 1;
540 cfg
.direction
= DMA_DEV_TO_MEM
;
541 ret
= dmaengine_slave_config(dma
->chan_rx
, &cfg
);
543 dev_err(dev
, "can't configure rx dma channel\n");
545 goto err_slave_config
;
548 cfg
.direction
= DMA_MEM_TO_DEV
;
549 ret
= dmaengine_slave_config(dma
->chan_tx
, &cfg
);
551 dev_err(dev
, "can't configure tx dma channel\n");
553 goto err_slave_config
;
557 init_completion(&dma
->cmd_tx_complete
);
558 init_completion(&dma
->cmd_rx_complete
);
563 dma_free_coherent(dma
->chan_rx
->device
->dev
,
564 dma_bufsize
, dma
->rx_dma_buf
, dma
->rx_dma_phys
);
566 dma_free_coherent(dma
->chan_tx
->device
->dev
,
567 dma_bufsize
, dma
->tx_dma_buf
, dma
->tx_dma_phys
);
569 dma_release_channel(dma
->chan_tx
);
571 dma_release_channel(dma
->chan_rx
);
573 devm_kfree(dev
, dma
);
579 static void dspi_release_dma(struct fsl_dspi
*dspi
)
581 int dma_bufsize
= dspi
->devtype_data
->fifo_size
* 2;
582 struct fsl_dspi_dma
*dma
= dspi
->dma
;
588 dma_free_coherent(dma
->chan_tx
->device
->dev
, dma_bufsize
,
589 dma
->tx_dma_buf
, dma
->tx_dma_phys
);
590 dma_release_channel(dma
->chan_tx
);
594 dma_free_coherent(dma
->chan_rx
->device
->dev
, dma_bufsize
,
595 dma
->rx_dma_buf
, dma
->rx_dma_phys
);
596 dma_release_channel(dma
->chan_rx
);
600 static void hz_to_spi_baud(char *pbr
, char *br
, int speed_hz
,
601 unsigned long clkrate
)
603 /* Valid baud rate pre-scaler values */
604 int pbr_tbl
[4] = {2, 3, 5, 7};
605 int brs
[16] = { 2, 4, 6, 8,
607 256, 512, 1024, 2048,
608 4096, 8192, 16384, 32768 };
609 int scale_needed
, scale
, minscale
= INT_MAX
;
612 scale_needed
= clkrate
/ speed_hz
;
613 if (clkrate
% speed_hz
)
616 for (i
= 0; i
< ARRAY_SIZE(brs
); i
++)
617 for (j
= 0; j
< ARRAY_SIZE(pbr_tbl
); j
++) {
618 scale
= brs
[i
] * pbr_tbl
[j
];
619 if (scale
>= scale_needed
) {
620 if (scale
< minscale
) {
629 if (minscale
== INT_MAX
) {
630 pr_warn("Can not find valid baud rate,speed_hz is %d,clkrate is %ld, we use the max prescaler value.\n",
632 *pbr
= ARRAY_SIZE(pbr_tbl
) - 1;
633 *br
= ARRAY_SIZE(brs
) - 1;
637 static void ns_delay_scale(char *psc
, char *sc
, int delay_ns
,
638 unsigned long clkrate
)
640 int scale_needed
, scale
, minscale
= INT_MAX
;
641 int pscale_tbl
[4] = {1, 3, 5, 7};
645 scale_needed
= div_u64_rem((u64
)delay_ns
* clkrate
, NSEC_PER_SEC
,
650 for (i
= 0; i
< ARRAY_SIZE(pscale_tbl
); i
++)
651 for (j
= 0; j
<= SPI_CTAR_SCALE_BITS
; j
++) {
652 scale
= pscale_tbl
[i
] * (2 << j
);
653 if (scale
>= scale_needed
) {
654 if (scale
< minscale
) {
663 if (minscale
== INT_MAX
) {
664 pr_warn("Cannot find correct scale values for %dns delay at clkrate %ld, using max prescaler value",
666 *psc
= ARRAY_SIZE(pscale_tbl
) - 1;
667 *sc
= SPI_CTAR_SCALE_BITS
;
671 static void dspi_pushr_cmd_write(struct fsl_dspi
*dspi
, u16 cmd
)
674 * The only time when the PCS doesn't need continuation after this word
675 * is when it's last. We need to look ahead, because we actually call
676 * dspi_pop_tx (the function that decrements dspi->len) _after_
677 * dspi_pushr_cmd_write with XSPI mode. As for how much in advance? One
678 * word is enough. If there's more to transmit than that,
679 * dspi_xspi_write will know to split the FIFO writes in 2, and
680 * generate a new PUSHR command with the final word that will have PCS
681 * deasserted (not continued) here.
683 if (dspi
->len
> dspi
->oper_word_size
)
684 cmd
|= SPI_PUSHR_CMD_CONT
;
685 regmap_write(dspi
->regmap_pushr
, dspi
->pushr_cmd
, cmd
);
688 static void dspi_pushr_txdata_write(struct fsl_dspi
*dspi
, u16 txdata
)
690 regmap_write(dspi
->regmap_pushr
, dspi
->pushr_tx
, txdata
);
693 static void dspi_xspi_fifo_write(struct fsl_dspi
*dspi
, int num_words
)
695 int num_bytes
= num_words
* dspi
->oper_word_size
;
696 u16 tx_cmd
= dspi
->tx_cmd
;
699 * If the PCS needs to de-assert (i.e. we're at the end of the buffer
700 * and cs_change does not want the PCS to stay on), then we need a new
701 * PUSHR command, since this one (for the body of the buffer)
702 * necessarily has the CONT bit set.
703 * So send one word less during this go, to force a split and a command
704 * with a single word next time, when CONT will be unset.
706 if (!(dspi
->tx_cmd
& SPI_PUSHR_CMD_CONT
) && num_bytes
== dspi
->len
)
707 tx_cmd
|= SPI_PUSHR_CMD_EOQ
;
710 regmap_write(dspi
->regmap
, SPI_CTARE(0),
711 SPI_FRAME_EBITS(dspi
->oper_bits_per_word
) |
712 SPI_CTARE_DTCP(num_words
));
715 * Write the CMD FIFO entry first, and then the two
716 * corresponding TX FIFO entries (or one...).
718 dspi_pushr_cmd_write(dspi
, tx_cmd
);
720 /* Fill TX FIFO with as many transfers as possible */
721 while (num_words
--) {
722 u32 data
= dspi_pop_tx(dspi
);
724 dspi_pushr_txdata_write(dspi
, data
& 0xFFFF);
725 if (dspi
->oper_bits_per_word
> 16)
726 dspi_pushr_txdata_write(dspi
, data
>> 16);
730 static u32
dspi_popr_read(struct fsl_dspi
*dspi
)
734 regmap_read(dspi
->regmap
, SPI_POPR
, &rxdata
);
738 static void dspi_fifo_read(struct fsl_dspi
*dspi
)
740 int num_fifo_entries
= dspi
->words_in_flight
;
742 /* Read one FIFO entry and push to rx buffer */
743 while (num_fifo_entries
--)
744 dspi_push_rx(dspi
, dspi_popr_read(dspi
));
747 static void dspi_setup_accel(struct fsl_dspi
*dspi
)
749 struct spi_transfer
*xfer
= dspi
->cur_transfer
;
750 bool odd
= !!(dspi
->len
& 1);
752 /* No accel for frames not multiple of 8 bits at the moment */
753 if (xfer
->bits_per_word
% 8)
756 if (!odd
&& dspi
->len
<= dspi
->devtype_data
->fifo_size
* 2) {
757 dspi
->oper_bits_per_word
= 16;
758 } else if (odd
&& dspi
->len
<= dspi
->devtype_data
->fifo_size
) {
759 dspi
->oper_bits_per_word
= 8;
761 /* Start off with maximum supported by hardware */
762 if (dspi
->devtype_data
->trans_mode
== DSPI_XSPI_MODE
)
763 dspi
->oper_bits_per_word
= 32;
765 dspi
->oper_bits_per_word
= 16;
768 * And go down only if the buffer can't be sent with
772 if (dspi
->len
>= DIV_ROUND_UP(dspi
->oper_bits_per_word
, 8))
775 dspi
->oper_bits_per_word
/= 2;
776 } while (dspi
->oper_bits_per_word
> 8);
779 if (xfer
->bits_per_word
== 8 && dspi
->oper_bits_per_word
== 32) {
780 dspi
->dev_to_host
= dspi_8on32_dev_to_host
;
781 dspi
->host_to_dev
= dspi_8on32_host_to_dev
;
782 } else if (xfer
->bits_per_word
== 8 && dspi
->oper_bits_per_word
== 16) {
783 dspi
->dev_to_host
= dspi_8on16_dev_to_host
;
784 dspi
->host_to_dev
= dspi_8on16_host_to_dev
;
785 } else if (xfer
->bits_per_word
== 16 && dspi
->oper_bits_per_word
== 32) {
786 dspi
->dev_to_host
= dspi_16on32_dev_to_host
;
787 dspi
->host_to_dev
= dspi_16on32_host_to_dev
;
790 dspi
->dev_to_host
= dspi_native_dev_to_host
;
791 dspi
->host_to_dev
= dspi_native_host_to_dev
;
792 dspi
->oper_bits_per_word
= xfer
->bits_per_word
;
795 dspi
->oper_word_size
= DIV_ROUND_UP(dspi
->oper_bits_per_word
, 8);
798 * Update CTAR here (code is common for XSPI and DMA modes).
799 * We will update CTARE in the portion specific to XSPI, when we
800 * also know the preload value (DTCP).
802 regmap_write(dspi
->regmap
, SPI_CTAR(0),
803 dspi
->cur_chip
->ctar_val
|
804 SPI_FRAME_BITS(dspi
->oper_bits_per_word
));
807 static void dspi_fifo_write(struct fsl_dspi
*dspi
)
809 int num_fifo_entries
= dspi
->devtype_data
->fifo_size
;
810 struct spi_transfer
*xfer
= dspi
->cur_transfer
;
811 struct spi_message
*msg
= dspi
->cur_msg
;
812 int num_words
, num_bytes
;
814 dspi_setup_accel(dspi
);
816 /* In XSPI mode each 32-bit word occupies 2 TX FIFO entries */
817 if (dspi
->oper_word_size
== 4)
818 num_fifo_entries
/= 2;
821 * Integer division intentionally trims off odd (or non-multiple of 4)
822 * numbers of bytes at the end of the buffer, which will be sent next
823 * time using a smaller oper_word_size.
825 num_words
= dspi
->len
/ dspi
->oper_word_size
;
826 if (num_words
> num_fifo_entries
)
827 num_words
= num_fifo_entries
;
829 /* Update total number of bytes that were transferred */
830 num_bytes
= num_words
* dspi
->oper_word_size
;
831 msg
->actual_length
+= num_bytes
;
832 dspi
->progress
+= num_bytes
/ DIV_ROUND_UP(xfer
->bits_per_word
, 8);
835 * Update shared variable for use in the next interrupt (both in
836 * dspi_fifo_read and in dspi_fifo_write).
838 dspi
->words_in_flight
= num_words
;
840 spi_take_timestamp_pre(dspi
->ctlr
, xfer
, dspi
->progress
, !dspi
->irq
);
842 dspi_xspi_fifo_write(dspi
, num_words
);
844 * Everything after this point is in a potential race with the next
845 * interrupt, so we must never use dspi->words_in_flight again since it
846 * might already be modified by the next dspi_fifo_write.
849 spi_take_timestamp_post(dspi
->ctlr
, dspi
->cur_transfer
,
850 dspi
->progress
, !dspi
->irq
);
853 static int dspi_rxtx(struct fsl_dspi
*dspi
)
855 dspi_fifo_read(dspi
);
861 dspi_fifo_write(dspi
);
866 static int dspi_poll(struct fsl_dspi
*dspi
)
872 regmap_read(dspi
->regmap
, SPI_SR
, &spi_sr
);
873 regmap_write(dspi
->regmap
, SPI_SR
, spi_sr
);
875 if (spi_sr
& SPI_SR_CMDTCF
)
882 return dspi_rxtx(dspi
);
885 static irqreturn_t
dspi_interrupt(int irq
, void *dev_id
)
887 struct fsl_dspi
*dspi
= (struct fsl_dspi
*)dev_id
;
890 regmap_read(dspi
->regmap
, SPI_SR
, &spi_sr
);
891 regmap_write(dspi
->regmap
, SPI_SR
, spi_sr
);
893 if (!(spi_sr
& SPI_SR_CMDTCF
))
896 if (dspi_rxtx(dspi
) == 0)
897 complete(&dspi
->xfer_done
);
902 static int dspi_transfer_one_message(struct spi_controller
*ctlr
,
903 struct spi_message
*message
)
905 struct fsl_dspi
*dspi
= spi_controller_get_devdata(ctlr
);
906 struct spi_device
*spi
= message
->spi
;
907 struct spi_transfer
*transfer
;
910 message
->actual_length
= 0;
912 list_for_each_entry(transfer
, &message
->transfers
, transfer_list
) {
913 dspi
->cur_transfer
= transfer
;
914 dspi
->cur_msg
= message
;
915 dspi
->cur_chip
= spi_get_ctldata(spi
);
916 /* Prepare command word for CMD FIFO */
917 dspi
->tx_cmd
= SPI_PUSHR_CMD_CTAS(0) |
918 SPI_PUSHR_CMD_PCS(spi
->chip_select
);
919 if (list_is_last(&dspi
->cur_transfer
->transfer_list
,
920 &dspi
->cur_msg
->transfers
)) {
921 /* Leave PCS activated after last transfer when
924 if (transfer
->cs_change
)
925 dspi
->tx_cmd
|= SPI_PUSHR_CMD_CONT
;
927 /* Keep PCS active between transfers in same message
928 * when cs_change is not set, and de-activate PCS
929 * between transfers in the same message when
932 if (!transfer
->cs_change
)
933 dspi
->tx_cmd
|= SPI_PUSHR_CMD_CONT
;
936 dspi
->tx
= transfer
->tx_buf
;
937 dspi
->rx
= transfer
->rx_buf
;
938 dspi
->len
= transfer
->len
;
941 regmap_update_bits(dspi
->regmap
, SPI_MCR
,
942 SPI_MCR_CLR_TXF
| SPI_MCR_CLR_RXF
,
943 SPI_MCR_CLR_TXF
| SPI_MCR_CLR_RXF
);
945 spi_take_timestamp_pre(dspi
->ctlr
, dspi
->cur_transfer
,
946 dspi
->progress
, !dspi
->irq
);
948 if (dspi
->devtype_data
->trans_mode
== DSPI_DMA_MODE
) {
949 status
= dspi_dma_xfer(dspi
);
951 dspi_fifo_write(dspi
);
954 wait_for_completion(&dspi
->xfer_done
);
955 reinit_completion(&dspi
->xfer_done
);
958 status
= dspi_poll(dspi
);
959 } while (status
== -EINPROGRESS
);
965 spi_transfer_delay_exec(transfer
);
968 message
->status
= status
;
969 spi_finalize_current_message(ctlr
);
974 static int dspi_setup(struct spi_device
*spi
)
976 struct fsl_dspi
*dspi
= spi_controller_get_devdata(spi
->controller
);
977 unsigned char br
= 0, pbr
= 0, pcssck
= 0, cssck
= 0;
978 u32 cs_sck_delay
= 0, sck_cs_delay
= 0;
979 struct fsl_dspi_platform_data
*pdata
;
980 unsigned char pasc
= 0, asc
= 0;
981 struct chip_data
*chip
;
982 unsigned long clkrate
;
984 /* Only alloc on first setup */
985 chip
= spi_get_ctldata(spi
);
987 chip
= kzalloc(sizeof(struct chip_data
), GFP_KERNEL
);
992 pdata
= dev_get_platdata(&dspi
->pdev
->dev
);
995 of_property_read_u32(spi
->dev
.of_node
, "fsl,spi-cs-sck-delay",
998 of_property_read_u32(spi
->dev
.of_node
, "fsl,spi-sck-cs-delay",
1001 cs_sck_delay
= pdata
->cs_sck_delay
;
1002 sck_cs_delay
= pdata
->sck_cs_delay
;
1005 clkrate
= clk_get_rate(dspi
->clk
);
1006 hz_to_spi_baud(&pbr
, &br
, spi
->max_speed_hz
, clkrate
);
1008 /* Set PCS to SCK delay scale values */
1009 ns_delay_scale(&pcssck
, &cssck
, cs_sck_delay
, clkrate
);
1011 /* Set After SCK delay scale values */
1012 ns_delay_scale(&pasc
, &asc
, sck_cs_delay
, clkrate
);
1015 if (spi
->mode
& SPI_CPOL
)
1016 chip
->ctar_val
|= SPI_CTAR_CPOL
;
1017 if (spi
->mode
& SPI_CPHA
)
1018 chip
->ctar_val
|= SPI_CTAR_CPHA
;
1020 if (!spi_controller_is_slave(dspi
->ctlr
)) {
1021 chip
->ctar_val
|= SPI_CTAR_PCSSCK(pcssck
) |
1022 SPI_CTAR_CSSCK(cssck
) |
1023 SPI_CTAR_PASC(pasc
) |
1028 if (spi
->mode
& SPI_LSB_FIRST
)
1029 chip
->ctar_val
|= SPI_CTAR_LSBFE
;
1032 spi_set_ctldata(spi
, chip
);
1037 static void dspi_cleanup(struct spi_device
*spi
)
1039 struct chip_data
*chip
= spi_get_ctldata((struct spi_device
*)spi
);
1041 dev_dbg(&spi
->dev
, "spi_device %u.%u cleanup\n",
1042 spi
->controller
->bus_num
, spi
->chip_select
);
1047 static const struct of_device_id fsl_dspi_dt_ids
[] = {
1049 .compatible
= "fsl,vf610-dspi",
1050 .data
= &devtype_data
[VF610
],
1052 .compatible
= "fsl,ls1021a-v1.0-dspi",
1053 .data
= &devtype_data
[LS1021A
],
1055 .compatible
= "fsl,ls1012a-dspi",
1056 .data
= &devtype_data
[LS1012A
],
1058 .compatible
= "fsl,ls1028a-dspi",
1059 .data
= &devtype_data
[LS1028A
],
1061 .compatible
= "fsl,ls1043a-dspi",
1062 .data
= &devtype_data
[LS1043A
],
1064 .compatible
= "fsl,ls1046a-dspi",
1065 .data
= &devtype_data
[LS1046A
],
1067 .compatible
= "fsl,ls2080a-dspi",
1068 .data
= &devtype_data
[LS2080A
],
1070 .compatible
= "fsl,ls2085a-dspi",
1071 .data
= &devtype_data
[LS2085A
],
1073 .compatible
= "fsl,lx2160a-dspi",
1074 .data
= &devtype_data
[LX2160A
],
1078 MODULE_DEVICE_TABLE(of
, fsl_dspi_dt_ids
);
1080 #ifdef CONFIG_PM_SLEEP
1081 static int dspi_suspend(struct device
*dev
)
1083 struct fsl_dspi
*dspi
= dev_get_drvdata(dev
);
1086 disable_irq(dspi
->irq
);
1087 spi_controller_suspend(dspi
->ctlr
);
1088 clk_disable_unprepare(dspi
->clk
);
1090 pinctrl_pm_select_sleep_state(dev
);
1095 static int dspi_resume(struct device
*dev
)
1097 struct fsl_dspi
*dspi
= dev_get_drvdata(dev
);
1100 pinctrl_pm_select_default_state(dev
);
1102 ret
= clk_prepare_enable(dspi
->clk
);
1105 spi_controller_resume(dspi
->ctlr
);
1107 enable_irq(dspi
->irq
);
1111 #endif /* CONFIG_PM_SLEEP */
1113 static SIMPLE_DEV_PM_OPS(dspi_pm
, dspi_suspend
, dspi_resume
);
1115 static const struct regmap_range dspi_volatile_ranges
[] = {
1116 regmap_reg_range(SPI_MCR
, SPI_TCR
),
1117 regmap_reg_range(SPI_SR
, SPI_SR
),
1118 regmap_reg_range(SPI_PUSHR
, SPI_RXFR3
),
1121 static const struct regmap_access_table dspi_volatile_table
= {
1122 .yes_ranges
= dspi_volatile_ranges
,
1123 .n_yes_ranges
= ARRAY_SIZE(dspi_volatile_ranges
),
1126 static const struct regmap_config dspi_regmap_config
= {
1130 .max_register
= 0x88,
1131 .volatile_table
= &dspi_volatile_table
,
1134 static const struct regmap_range dspi_xspi_volatile_ranges
[] = {
1135 regmap_reg_range(SPI_MCR
, SPI_TCR
),
1136 regmap_reg_range(SPI_SR
, SPI_SR
),
1137 regmap_reg_range(SPI_PUSHR
, SPI_RXFR3
),
1138 regmap_reg_range(SPI_SREX
, SPI_SREX
),
1141 static const struct regmap_access_table dspi_xspi_volatile_table
= {
1142 .yes_ranges
= dspi_xspi_volatile_ranges
,
1143 .n_yes_ranges
= ARRAY_SIZE(dspi_xspi_volatile_ranges
),
1146 static const struct regmap_config dspi_xspi_regmap_config
[] = {
1151 .max_register
= 0x13c,
1152 .volatile_table
= &dspi_xspi_volatile_table
,
1159 .max_register
= 0x2,
1163 static int dspi_init(struct fsl_dspi
*dspi
)
1167 /* Set idle states for all chip select signals to high */
1168 mcr
= SPI_MCR_PCSIS(GENMASK(dspi
->ctlr
->max_native_cs
- 1, 0));
1170 if (dspi
->devtype_data
->trans_mode
== DSPI_XSPI_MODE
)
1171 mcr
|= SPI_MCR_XSPI
;
1172 if (!spi_controller_is_slave(dspi
->ctlr
))
1173 mcr
|= SPI_MCR_MASTER
;
1175 regmap_write(dspi
->regmap
, SPI_MCR
, mcr
);
1176 regmap_write(dspi
->regmap
, SPI_SR
, SPI_SR_CLEAR
);
1178 switch (dspi
->devtype_data
->trans_mode
) {
1179 case DSPI_XSPI_MODE
:
1180 regmap_write(dspi
->regmap
, SPI_RSER
, SPI_RSER_CMDTCFE
);
1183 regmap_write(dspi
->regmap
, SPI_RSER
,
1184 SPI_RSER_TFFFE
| SPI_RSER_TFFFD
|
1185 SPI_RSER_RFDFE
| SPI_RSER_RFDFD
);
1188 dev_err(&dspi
->pdev
->dev
, "unsupported trans_mode %u\n",
1189 dspi
->devtype_data
->trans_mode
);
1196 static int dspi_slave_abort(struct spi_master
*master
)
1198 struct fsl_dspi
*dspi
= spi_master_get_devdata(master
);
1201 * Terminate all pending DMA transactions for the SPI working
1204 if (dspi
->devtype_data
->trans_mode
== DSPI_DMA_MODE
) {
1205 dmaengine_terminate_sync(dspi
->dma
->chan_rx
);
1206 dmaengine_terminate_sync(dspi
->dma
->chan_tx
);
1209 /* Clear the internal DSPI RX and TX FIFO buffers */
1210 regmap_update_bits(dspi
->regmap
, SPI_MCR
,
1211 SPI_MCR_CLR_TXF
| SPI_MCR_CLR_RXF
,
1212 SPI_MCR_CLR_TXF
| SPI_MCR_CLR_RXF
);
1217 static int dspi_probe(struct platform_device
*pdev
)
1219 struct device_node
*np
= pdev
->dev
.of_node
;
1220 const struct regmap_config
*regmap_config
;
1221 struct fsl_dspi_platform_data
*pdata
;
1222 struct spi_controller
*ctlr
;
1223 int ret
, cs_num
, bus_num
= -1;
1224 struct fsl_dspi
*dspi
;
1225 struct resource
*res
;
1229 dspi
= devm_kzalloc(&pdev
->dev
, sizeof(*dspi
), GFP_KERNEL
);
1233 ctlr
= spi_alloc_master(&pdev
->dev
, 0);
1237 spi_controller_set_devdata(ctlr
, dspi
);
1238 platform_set_drvdata(pdev
, dspi
);
1243 ctlr
->setup
= dspi_setup
;
1244 ctlr
->transfer_one_message
= dspi_transfer_one_message
;
1245 ctlr
->dev
.of_node
= pdev
->dev
.of_node
;
1247 ctlr
->cleanup
= dspi_cleanup
;
1248 ctlr
->slave_abort
= dspi_slave_abort
;
1249 ctlr
->mode_bits
= SPI_CPOL
| SPI_CPHA
| SPI_LSB_FIRST
;
1251 pdata
= dev_get_platdata(&pdev
->dev
);
1253 ctlr
->num_chipselect
= ctlr
->max_native_cs
= pdata
->cs_num
;
1254 ctlr
->bus_num
= pdata
->bus_num
;
1256 /* Only Coldfire uses platform data */
1257 dspi
->devtype_data
= &devtype_data
[MCF5441X
];
1261 ret
= of_property_read_u32(np
, "spi-num-chipselects", &cs_num
);
1263 dev_err(&pdev
->dev
, "can't get spi-num-chipselects\n");
1266 ctlr
->num_chipselect
= ctlr
->max_native_cs
= cs_num
;
1268 of_property_read_u32(np
, "bus-num", &bus_num
);
1269 ctlr
->bus_num
= bus_num
;
1271 if (of_property_read_bool(np
, "spi-slave"))
1274 dspi
->devtype_data
= of_device_get_match_data(&pdev
->dev
);
1275 if (!dspi
->devtype_data
) {
1276 dev_err(&pdev
->dev
, "can't get devtype_data\n");
1281 big_endian
= of_device_is_big_endian(np
);
1284 dspi
->pushr_cmd
= 0;
1287 dspi
->pushr_cmd
= 2;
1291 if (dspi
->devtype_data
->trans_mode
== DSPI_XSPI_MODE
)
1292 ctlr
->bits_per_word_mask
= SPI_BPW_RANGE_MASK(4, 32);
1294 ctlr
->bits_per_word_mask
= SPI_BPW_RANGE_MASK(4, 16);
1296 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
1297 base
= devm_ioremap_resource(&pdev
->dev
, res
);
1299 ret
= PTR_ERR(base
);
1303 if (dspi
->devtype_data
->trans_mode
== DSPI_XSPI_MODE
)
1304 regmap_config
= &dspi_xspi_regmap_config
[0];
1306 regmap_config
= &dspi_regmap_config
;
1307 dspi
->regmap
= devm_regmap_init_mmio(&pdev
->dev
, base
, regmap_config
);
1308 if (IS_ERR(dspi
->regmap
)) {
1309 dev_err(&pdev
->dev
, "failed to init regmap: %ld\n",
1310 PTR_ERR(dspi
->regmap
));
1311 ret
= PTR_ERR(dspi
->regmap
);
1315 if (dspi
->devtype_data
->trans_mode
== DSPI_XSPI_MODE
) {
1316 dspi
->regmap_pushr
= devm_regmap_init_mmio(
1317 &pdev
->dev
, base
+ SPI_PUSHR
,
1318 &dspi_xspi_regmap_config
[1]);
1319 if (IS_ERR(dspi
->regmap_pushr
)) {
1321 "failed to init pushr regmap: %ld\n",
1322 PTR_ERR(dspi
->regmap_pushr
));
1323 ret
= PTR_ERR(dspi
->regmap_pushr
);
1328 dspi
->clk
= devm_clk_get(&pdev
->dev
, "dspi");
1329 if (IS_ERR(dspi
->clk
)) {
1330 ret
= PTR_ERR(dspi
->clk
);
1331 dev_err(&pdev
->dev
, "unable to get clock\n");
1334 ret
= clk_prepare_enable(dspi
->clk
);
1338 ret
= dspi_init(dspi
);
1342 dspi
->irq
= platform_get_irq(pdev
, 0);
1343 if (dspi
->irq
<= 0) {
1344 dev_info(&pdev
->dev
,
1345 "can't get platform irq, using poll mode\n");
1350 init_completion(&dspi
->xfer_done
);
1352 ret
= request_threaded_irq(dspi
->irq
, dspi_interrupt
, NULL
,
1353 IRQF_SHARED
, pdev
->name
, dspi
);
1355 dev_err(&pdev
->dev
, "Unable to attach DSPI interrupt\n");
1361 if (dspi
->devtype_data
->trans_mode
== DSPI_DMA_MODE
) {
1362 ret
= dspi_request_dma(dspi
, res
->start
);
1364 dev_err(&pdev
->dev
, "can't get dma channels\n");
1369 ctlr
->max_speed_hz
=
1370 clk_get_rate(dspi
->clk
) / dspi
->devtype_data
->max_clock_factor
;
1372 if (dspi
->devtype_data
->trans_mode
!= DSPI_DMA_MODE
)
1373 ctlr
->ptp_sts_supported
= true;
1375 ret
= spi_register_controller(ctlr
);
1377 dev_err(&pdev
->dev
, "Problem registering DSPI ctlr\n");
1385 free_irq(dspi
->irq
, dspi
);
1387 clk_disable_unprepare(dspi
->clk
);
1389 spi_controller_put(ctlr
);
1394 static int dspi_remove(struct platform_device
*pdev
)
1396 struct fsl_dspi
*dspi
= platform_get_drvdata(pdev
);
1398 /* Disconnect from the SPI framework */
1399 spi_unregister_controller(dspi
->ctlr
);
1401 /* Disable RX and TX */
1402 regmap_update_bits(dspi
->regmap
, SPI_MCR
,
1403 SPI_MCR_DIS_TXF
| SPI_MCR_DIS_RXF
,
1404 SPI_MCR_DIS_TXF
| SPI_MCR_DIS_RXF
);
1407 regmap_update_bits(dspi
->regmap
, SPI_MCR
, SPI_MCR_HALT
, SPI_MCR_HALT
);
1409 dspi_release_dma(dspi
);
1411 free_irq(dspi
->irq
, dspi
);
1412 clk_disable_unprepare(dspi
->clk
);
1417 static void dspi_shutdown(struct platform_device
*pdev
)
1422 static struct platform_driver fsl_dspi_driver
= {
1423 .driver
.name
= DRIVER_NAME
,
1424 .driver
.of_match_table
= fsl_dspi_dt_ids
,
1425 .driver
.owner
= THIS_MODULE
,
1426 .driver
.pm
= &dspi_pm
,
1427 .probe
= dspi_probe
,
1428 .remove
= dspi_remove
,
1429 .shutdown
= dspi_shutdown
,
1431 module_platform_driver(fsl_dspi_driver
);
1433 MODULE_DESCRIPTION("Freescale DSPI Controller Driver");
1434 MODULE_LICENSE("GPL");
1435 MODULE_ALIAS("platform:" DRIVER_NAME
);