blob: e05426079b4df27562d9ddcf9925ed729ad5a78e [file] [log] [blame]
xjb04a4022021-11-25 15:01:52 +08001/*
2 * Copyright (c) 2014, Fuzhou Rockchip Electronics Co., Ltd
3 * Author: Addy Ke <addy.ke@rock-chips.com>
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms and conditions of the GNU General Public License,
7 * version 2, as published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 */
15
16#include <linux/clk.h>
17#include <linux/dmaengine.h>
18#include <linux/interrupt.h>
19#include <linux/module.h>
20#include <linux/of.h>
21#include <linux/pinctrl/consumer.h>
22#include <linux/platform_device.h>
23#include <linux/spi/spi.h>
24#include <linux/pm_runtime.h>
25#include <linux/scatterlist.h>
26
27#define DRIVER_NAME "rockchip-spi"
28
29#define ROCKCHIP_SPI_CLR_BITS(reg, bits) \
30 writel_relaxed(readl_relaxed(reg) & ~(bits), reg)
31#define ROCKCHIP_SPI_SET_BITS(reg, bits) \
32 writel_relaxed(readl_relaxed(reg) | (bits), reg)
33
34/* SPI register offsets */
35#define ROCKCHIP_SPI_CTRLR0 0x0000
36#define ROCKCHIP_SPI_CTRLR1 0x0004
37#define ROCKCHIP_SPI_SSIENR 0x0008
38#define ROCKCHIP_SPI_SER 0x000c
39#define ROCKCHIP_SPI_BAUDR 0x0010
40#define ROCKCHIP_SPI_TXFTLR 0x0014
41#define ROCKCHIP_SPI_RXFTLR 0x0018
42#define ROCKCHIP_SPI_TXFLR 0x001c
43#define ROCKCHIP_SPI_RXFLR 0x0020
44#define ROCKCHIP_SPI_SR 0x0024
45#define ROCKCHIP_SPI_IPR 0x0028
46#define ROCKCHIP_SPI_IMR 0x002c
47#define ROCKCHIP_SPI_ISR 0x0030
48#define ROCKCHIP_SPI_RISR 0x0034
49#define ROCKCHIP_SPI_ICR 0x0038
50#define ROCKCHIP_SPI_DMACR 0x003c
51#define ROCKCHIP_SPI_DMATDLR 0x0040
52#define ROCKCHIP_SPI_DMARDLR 0x0044
53#define ROCKCHIP_SPI_TXDR 0x0400
54#define ROCKCHIP_SPI_RXDR 0x0800
55
56/* Bit fields in CTRLR0 */
57#define CR0_DFS_OFFSET 0
58
59#define CR0_CFS_OFFSET 2
60
61#define CR0_SCPH_OFFSET 6
62
63#define CR0_SCPOL_OFFSET 7
64
65#define CR0_CSM_OFFSET 8
66#define CR0_CSM_KEEP 0x0
67/* ss_n be high for half sclk_out cycles */
68#define CR0_CSM_HALF 0X1
69/* ss_n be high for one sclk_out cycle */
70#define CR0_CSM_ONE 0x2
71
72/* ss_n to sclk_out delay */
73#define CR0_SSD_OFFSET 10
74/*
75 * The period between ss_n active and
76 * sclk_out active is half sclk_out cycles
77 */
78#define CR0_SSD_HALF 0x0
79/*
80 * The period between ss_n active and
81 * sclk_out active is one sclk_out cycle
82 */
83#define CR0_SSD_ONE 0x1
84
85#define CR0_EM_OFFSET 11
86#define CR0_EM_LITTLE 0x0
87#define CR0_EM_BIG 0x1
88
89#define CR0_FBM_OFFSET 12
90#define CR0_FBM_MSB 0x0
91#define CR0_FBM_LSB 0x1
92
93#define CR0_BHT_OFFSET 13
94#define CR0_BHT_16BIT 0x0
95#define CR0_BHT_8BIT 0x1
96
97#define CR0_RSD_OFFSET 14
98
99#define CR0_FRF_OFFSET 16
100#define CR0_FRF_SPI 0x0
101#define CR0_FRF_SSP 0x1
102#define CR0_FRF_MICROWIRE 0x2
103
104#define CR0_XFM_OFFSET 18
105#define CR0_XFM_MASK (0x03 << SPI_XFM_OFFSET)
106#define CR0_XFM_TR 0x0
107#define CR0_XFM_TO 0x1
108#define CR0_XFM_RO 0x2
109
110#define CR0_OPM_OFFSET 20
111#define CR0_OPM_MASTER 0x0
112#define CR0_OPM_SLAVE 0x1
113
114#define CR0_MTM_OFFSET 0x21
115
116/* Bit fields in SER, 2bit */
117#define SER_MASK 0x3
118
119/* Bit fields in SR, 5bit */
120#define SR_MASK 0x1f
121#define SR_BUSY (1 << 0)
122#define SR_TF_FULL (1 << 1)
123#define SR_TF_EMPTY (1 << 2)
124#define SR_RF_EMPTY (1 << 3)
125#define SR_RF_FULL (1 << 4)
126
127/* Bit fields in ISR, IMR, ISR, RISR, 5bit */
128#define INT_MASK 0x1f
129#define INT_TF_EMPTY (1 << 0)
130#define INT_TF_OVERFLOW (1 << 1)
131#define INT_RF_UNDERFLOW (1 << 2)
132#define INT_RF_OVERFLOW (1 << 3)
133#define INT_RF_FULL (1 << 4)
134
135/* Bit fields in ICR, 4bit */
136#define ICR_MASK 0x0f
137#define ICR_ALL (1 << 0)
138#define ICR_RF_UNDERFLOW (1 << 1)
139#define ICR_RF_OVERFLOW (1 << 2)
140#define ICR_TF_OVERFLOW (1 << 3)
141
142/* Bit fields in DMACR */
143#define RF_DMA_EN (1 << 0)
144#define TF_DMA_EN (1 << 1)
145
146#define RXBUSY (1 << 0)
147#define TXBUSY (1 << 1)
148
149/* sclk_out: spi master internal logic in rk3x can support 50Mhz */
150#define MAX_SCLK_OUT 50000000
151
152/*
153 * SPI_CTRLR1 is 16-bits, so we should support lengths of 0xffff + 1. However,
154 * the controller seems to hang when given 0x10000, so stick with this for now.
155 */
156#define ROCKCHIP_SPI_MAX_TRANLEN 0xffff
157
158#define ROCKCHIP_SPI_MAX_CS_NUM 2
159
160enum rockchip_ssi_type {
161 SSI_MOTO_SPI = 0,
162 SSI_TI_SSP,
163 SSI_NS_MICROWIRE,
164};
165
166struct rockchip_spi_dma_data {
167 struct dma_chan *ch;
168 enum dma_transfer_direction direction;
169 dma_addr_t addr;
170};
171
172struct rockchip_spi {
173 struct device *dev;
174 struct spi_master *master;
175
176 struct clk *spiclk;
177 struct clk *apb_pclk;
178
179 void __iomem *regs;
180 /*depth of the FIFO buffer */
181 u32 fifo_len;
182 /* max bus freq supported */
183 u32 max_freq;
184 /* supported slave numbers */
185 enum rockchip_ssi_type type;
186
187 u16 mode;
188 u8 tmode;
189 u8 bpw;
190 u8 n_bytes;
191 u32 rsd_nsecs;
192 unsigned len;
193 u32 speed;
194
195 const void *tx;
196 const void *tx_end;
197 void *rx;
198 void *rx_end;
199
200 u32 state;
201 /* protect state */
202 spinlock_t lock;
203
204 bool cs_asserted[ROCKCHIP_SPI_MAX_CS_NUM];
205
206 u32 use_dma;
207 struct sg_table tx_sg;
208 struct sg_table rx_sg;
209 struct rockchip_spi_dma_data dma_rx;
210 struct rockchip_spi_dma_data dma_tx;
211 struct dma_slave_caps dma_caps;
212};
213
214static inline void spi_enable_chip(struct rockchip_spi *rs, int enable)
215{
216 writel_relaxed((enable ? 1 : 0), rs->regs + ROCKCHIP_SPI_SSIENR);
217}
218
219static inline void spi_set_clk(struct rockchip_spi *rs, u16 div)
220{
221 writel_relaxed(div, rs->regs + ROCKCHIP_SPI_BAUDR);
222}
223
224static inline void flush_fifo(struct rockchip_spi *rs)
225{
226 while (readl_relaxed(rs->regs + ROCKCHIP_SPI_RXFLR))
227 readl_relaxed(rs->regs + ROCKCHIP_SPI_RXDR);
228}
229
230static inline void wait_for_idle(struct rockchip_spi *rs)
231{
232 unsigned long timeout = jiffies + msecs_to_jiffies(5);
233
234 do {
235 if (!(readl_relaxed(rs->regs + ROCKCHIP_SPI_SR) & SR_BUSY))
236 return;
237 } while (!time_after(jiffies, timeout));
238
239 dev_warn(rs->dev, "spi controller is in busy state!\n");
240}
241
242static u32 get_fifo_len(struct rockchip_spi *rs)
243{
244 u32 fifo;
245
246 for (fifo = 2; fifo < 32; fifo++) {
247 writel_relaxed(fifo, rs->regs + ROCKCHIP_SPI_TXFTLR);
248 if (fifo != readl_relaxed(rs->regs + ROCKCHIP_SPI_TXFTLR))
249 break;
250 }
251
252 writel_relaxed(0, rs->regs + ROCKCHIP_SPI_TXFTLR);
253
254 return (fifo == 31) ? 0 : fifo;
255}
256
257static inline u32 tx_max(struct rockchip_spi *rs)
258{
259 u32 tx_left, tx_room;
260
261 tx_left = (rs->tx_end - rs->tx) / rs->n_bytes;
262 tx_room = rs->fifo_len - readl_relaxed(rs->regs + ROCKCHIP_SPI_TXFLR);
263
264 return min(tx_left, tx_room);
265}
266
267static inline u32 rx_max(struct rockchip_spi *rs)
268{
269 u32 rx_left = (rs->rx_end - rs->rx) / rs->n_bytes;
270 u32 rx_room = (u32)readl_relaxed(rs->regs + ROCKCHIP_SPI_RXFLR);
271
272 return min(rx_left, rx_room);
273}
274
275static void rockchip_spi_set_cs(struct spi_device *spi, bool enable)
276{
277 struct spi_master *master = spi->master;
278 struct rockchip_spi *rs = spi_master_get_devdata(master);
279 bool cs_asserted = !enable;
280
281 /* Return immediately for no-op */
282 if (cs_asserted == rs->cs_asserted[spi->chip_select])
283 return;
284
285 if (cs_asserted) {
286 /* Keep things powered as long as CS is asserted */
287 pm_runtime_get_sync(rs->dev);
288
289 ROCKCHIP_SPI_SET_BITS(rs->regs + ROCKCHIP_SPI_SER,
290 BIT(spi->chip_select));
291 } else {
292 ROCKCHIP_SPI_CLR_BITS(rs->regs + ROCKCHIP_SPI_SER,
293 BIT(spi->chip_select));
294
295 /* Drop reference from when we first asserted CS */
296 pm_runtime_put(rs->dev);
297 }
298
299 rs->cs_asserted[spi->chip_select] = cs_asserted;
300}
301
302static int rockchip_spi_prepare_message(struct spi_master *master,
303 struct spi_message *msg)
304{
305 struct rockchip_spi *rs = spi_master_get_devdata(master);
306 struct spi_device *spi = msg->spi;
307
308 rs->mode = spi->mode;
309
310 return 0;
311}
312
313static void rockchip_spi_handle_err(struct spi_master *master,
314 struct spi_message *msg)
315{
316 unsigned long flags;
317 struct rockchip_spi *rs = spi_master_get_devdata(master);
318
319 spin_lock_irqsave(&rs->lock, flags);
320
321 /*
322 * For DMA mode, we need terminate DMA channel and flush
323 * fifo for the next transfer if DMA thansfer timeout.
324 * handle_err() was called by core if transfer failed.
325 * Maybe it is reasonable for error handling here.
326 */
327 if (rs->use_dma) {
328 if (rs->state & RXBUSY) {
329 dmaengine_terminate_async(rs->dma_rx.ch);
330 flush_fifo(rs);
331 }
332
333 if (rs->state & TXBUSY)
334 dmaengine_terminate_async(rs->dma_tx.ch);
335 }
336
337 spin_unlock_irqrestore(&rs->lock, flags);
338}
339
340static int rockchip_spi_unprepare_message(struct spi_master *master,
341 struct spi_message *msg)
342{
343 struct rockchip_spi *rs = spi_master_get_devdata(master);
344
345 spi_enable_chip(rs, 0);
346
347 return 0;
348}
349
350static void rockchip_spi_pio_writer(struct rockchip_spi *rs)
351{
352 u32 max = tx_max(rs);
353 u32 txw = 0;
354
355 while (max--) {
356 if (rs->n_bytes == 1)
357 txw = *(u8 *)(rs->tx);
358 else
359 txw = *(u16 *)(rs->tx);
360
361 writel_relaxed(txw, rs->regs + ROCKCHIP_SPI_TXDR);
362 rs->tx += rs->n_bytes;
363 }
364}
365
366static void rockchip_spi_pio_reader(struct rockchip_spi *rs)
367{
368 u32 max = rx_max(rs);
369 u32 rxw;
370
371 while (max--) {
372 rxw = readl_relaxed(rs->regs + ROCKCHIP_SPI_RXDR);
373 if (rs->n_bytes == 1)
374 *(u8 *)(rs->rx) = (u8)rxw;
375 else
376 *(u16 *)(rs->rx) = (u16)rxw;
377 rs->rx += rs->n_bytes;
378 }
379}
380
381static int rockchip_spi_pio_transfer(struct rockchip_spi *rs)
382{
383 int remain = 0;
384
385 do {
386 if (rs->tx) {
387 remain = rs->tx_end - rs->tx;
388 rockchip_spi_pio_writer(rs);
389 }
390
391 if (rs->rx) {
392 remain = rs->rx_end - rs->rx;
393 rockchip_spi_pio_reader(rs);
394 }
395
396 cpu_relax();
397 } while (remain);
398
399 /* If tx, wait until the FIFO data completely. */
400 if (rs->tx)
401 wait_for_idle(rs);
402
403 spi_enable_chip(rs, 0);
404
405 return 0;
406}
407
408static void rockchip_spi_dma_rxcb(void *data)
409{
410 unsigned long flags;
411 struct rockchip_spi *rs = data;
412
413 spin_lock_irqsave(&rs->lock, flags);
414
415 rs->state &= ~RXBUSY;
416 if (!(rs->state & TXBUSY)) {
417 spi_enable_chip(rs, 0);
418 spi_finalize_current_transfer(rs->master);
419 }
420
421 spin_unlock_irqrestore(&rs->lock, flags);
422}
423
424static void rockchip_spi_dma_txcb(void *data)
425{
426 unsigned long flags;
427 struct rockchip_spi *rs = data;
428
429 /* Wait until the FIFO data completely. */
430 wait_for_idle(rs);
431
432 spin_lock_irqsave(&rs->lock, flags);
433
434 rs->state &= ~TXBUSY;
435 if (!(rs->state & RXBUSY)) {
436 spi_enable_chip(rs, 0);
437 spi_finalize_current_transfer(rs->master);
438 }
439
440 spin_unlock_irqrestore(&rs->lock, flags);
441}
442
443static int rockchip_spi_prepare_dma(struct rockchip_spi *rs)
444{
445 unsigned long flags;
446 struct dma_slave_config rxconf, txconf;
447 struct dma_async_tx_descriptor *rxdesc, *txdesc;
448
449 memset(&rxconf, 0, sizeof(rxconf));
450 memset(&txconf, 0, sizeof(txconf));
451
452 spin_lock_irqsave(&rs->lock, flags);
453 rs->state &= ~RXBUSY;
454 rs->state &= ~TXBUSY;
455 spin_unlock_irqrestore(&rs->lock, flags);
456
457 rxdesc = NULL;
458 if (rs->rx) {
459 rxconf.direction = rs->dma_rx.direction;
460 rxconf.src_addr = rs->dma_rx.addr;
461 rxconf.src_addr_width = rs->n_bytes;
462 if (rs->dma_caps.max_burst > 4)
463 rxconf.src_maxburst = 4;
464 else
465 rxconf.src_maxburst = 1;
466 dmaengine_slave_config(rs->dma_rx.ch, &rxconf);
467
468 rxdesc = dmaengine_prep_slave_sg(
469 rs->dma_rx.ch,
470 rs->rx_sg.sgl, rs->rx_sg.nents,
471 rs->dma_rx.direction, DMA_PREP_INTERRUPT);
472 if (!rxdesc)
473 return -EINVAL;
474
475 rxdesc->callback = rockchip_spi_dma_rxcb;
476 rxdesc->callback_param = rs;
477 }
478
479 txdesc = NULL;
480 if (rs->tx) {
481 txconf.direction = rs->dma_tx.direction;
482 txconf.dst_addr = rs->dma_tx.addr;
483 txconf.dst_addr_width = rs->n_bytes;
484 if (rs->dma_caps.max_burst > 4)
485 txconf.dst_maxburst = 4;
486 else
487 txconf.dst_maxburst = 1;
488 dmaengine_slave_config(rs->dma_tx.ch, &txconf);
489
490 txdesc = dmaengine_prep_slave_sg(
491 rs->dma_tx.ch,
492 rs->tx_sg.sgl, rs->tx_sg.nents,
493 rs->dma_tx.direction, DMA_PREP_INTERRUPT);
494 if (!txdesc) {
495 if (rxdesc)
496 dmaengine_terminate_sync(rs->dma_rx.ch);
497 return -EINVAL;
498 }
499
500 txdesc->callback = rockchip_spi_dma_txcb;
501 txdesc->callback_param = rs;
502 }
503
504 /* rx must be started before tx due to spi instinct */
505 if (rxdesc) {
506 spin_lock_irqsave(&rs->lock, flags);
507 rs->state |= RXBUSY;
508 spin_unlock_irqrestore(&rs->lock, flags);
509 dmaengine_submit(rxdesc);
510 dma_async_issue_pending(rs->dma_rx.ch);
511 }
512
513 if (txdesc) {
514 spin_lock_irqsave(&rs->lock, flags);
515 rs->state |= TXBUSY;
516 spin_unlock_irqrestore(&rs->lock, flags);
517 dmaengine_submit(txdesc);
518 dma_async_issue_pending(rs->dma_tx.ch);
519 }
520
521 return 0;
522}
523
524static void rockchip_spi_config(struct rockchip_spi *rs)
525{
526 u32 div = 0;
527 u32 dmacr = 0;
528 int rsd = 0;
529
530 u32 cr0 = (CR0_BHT_8BIT << CR0_BHT_OFFSET)
531 | (CR0_SSD_ONE << CR0_SSD_OFFSET)
532 | (CR0_EM_BIG << CR0_EM_OFFSET);
533
534 cr0 |= (rs->n_bytes << CR0_DFS_OFFSET);
535 cr0 |= ((rs->mode & 0x3) << CR0_SCPH_OFFSET);
536 cr0 |= (rs->tmode << CR0_XFM_OFFSET);
537 cr0 |= (rs->type << CR0_FRF_OFFSET);
538
539 if (rs->use_dma) {
540 if (rs->tx)
541 dmacr |= TF_DMA_EN;
542 if (rs->rx)
543 dmacr |= RF_DMA_EN;
544 }
545
546 if (WARN_ON(rs->speed > MAX_SCLK_OUT))
547 rs->speed = MAX_SCLK_OUT;
548
549 /* the minimum divisor is 2 */
550 if (rs->max_freq < 2 * rs->speed) {
551 clk_set_rate(rs->spiclk, 2 * rs->speed);
552 rs->max_freq = clk_get_rate(rs->spiclk);
553 }
554
555 /* div doesn't support odd number */
556 div = DIV_ROUND_UP(rs->max_freq, rs->speed);
557 div = (div + 1) & 0xfffe;
558
559 /* Rx sample delay is expressed in parent clock cycles (max 3) */
560 rsd = DIV_ROUND_CLOSEST(rs->rsd_nsecs * (rs->max_freq >> 8),
561 1000000000 >> 8);
562 if (!rsd && rs->rsd_nsecs) {
563 pr_warn_once("rockchip-spi: %u Hz are too slow to express %u ns delay\n",
564 rs->max_freq, rs->rsd_nsecs);
565 } else if (rsd > 3) {
566 rsd = 3;
567 pr_warn_once("rockchip-spi: %u Hz are too fast to express %u ns delay, clamping at %u ns\n",
568 rs->max_freq, rs->rsd_nsecs,
569 rsd * 1000000000U / rs->max_freq);
570 }
571 cr0 |= rsd << CR0_RSD_OFFSET;
572
573 writel_relaxed(cr0, rs->regs + ROCKCHIP_SPI_CTRLR0);
574
575 if (rs->n_bytes == 1)
576 writel_relaxed(rs->len - 1, rs->regs + ROCKCHIP_SPI_CTRLR1);
577 else if (rs->n_bytes == 2)
578 writel_relaxed((rs->len / 2) - 1, rs->regs + ROCKCHIP_SPI_CTRLR1);
579 else
580 writel_relaxed((rs->len * 2) - 1, rs->regs + ROCKCHIP_SPI_CTRLR1);
581
582 writel_relaxed(rs->fifo_len / 2 - 1, rs->regs + ROCKCHIP_SPI_TXFTLR);
583 writel_relaxed(rs->fifo_len / 2 - 1, rs->regs + ROCKCHIP_SPI_RXFTLR);
584
585 writel_relaxed(0, rs->regs + ROCKCHIP_SPI_DMATDLR);
586 writel_relaxed(0, rs->regs + ROCKCHIP_SPI_DMARDLR);
587 writel_relaxed(dmacr, rs->regs + ROCKCHIP_SPI_DMACR);
588
589 spi_set_clk(rs, div);
590
591 dev_dbg(rs->dev, "cr0 0x%x, div %d\n", cr0, div);
592}
593
594static size_t rockchip_spi_max_transfer_size(struct spi_device *spi)
595{
596 return ROCKCHIP_SPI_MAX_TRANLEN;
597}
598
599static int rockchip_spi_transfer_one(
600 struct spi_master *master,
601 struct spi_device *spi,
602 struct spi_transfer *xfer)
603{
604 int ret = 0;
605 struct rockchip_spi *rs = spi_master_get_devdata(master);
606
607 WARN_ON(readl_relaxed(rs->regs + ROCKCHIP_SPI_SSIENR) &&
608 (readl_relaxed(rs->regs + ROCKCHIP_SPI_SR) & SR_BUSY));
609
610 if (!xfer->tx_buf && !xfer->rx_buf) {
611 dev_err(rs->dev, "No buffer for transfer\n");
612 return -EINVAL;
613 }
614
615 if (xfer->len > ROCKCHIP_SPI_MAX_TRANLEN) {
616 dev_err(rs->dev, "Transfer is too long (%d)\n", xfer->len);
617 return -EINVAL;
618 }
619
620 rs->speed = xfer->speed_hz;
621 rs->bpw = xfer->bits_per_word;
622 rs->n_bytes = rs->bpw >> 3;
623
624 rs->tx = xfer->tx_buf;
625 rs->tx_end = rs->tx + xfer->len;
626 rs->rx = xfer->rx_buf;
627 rs->rx_end = rs->rx + xfer->len;
628 rs->len = xfer->len;
629
630 rs->tx_sg = xfer->tx_sg;
631 rs->rx_sg = xfer->rx_sg;
632
633 if (rs->tx && rs->rx)
634 rs->tmode = CR0_XFM_TR;
635 else if (rs->tx)
636 rs->tmode = CR0_XFM_TO;
637 else if (rs->rx)
638 rs->tmode = CR0_XFM_RO;
639
640 /* we need prepare dma before spi was enabled */
641 if (master->can_dma && master->can_dma(master, spi, xfer))
642 rs->use_dma = 1;
643 else
644 rs->use_dma = 0;
645
646 rockchip_spi_config(rs);
647
648 if (rs->use_dma) {
649 if (rs->tmode == CR0_XFM_RO) {
650 /* rx: dma must be prepared first */
651 ret = rockchip_spi_prepare_dma(rs);
652 spi_enable_chip(rs, 1);
653 } else {
654 /* tx or tr: spi must be enabled first */
655 spi_enable_chip(rs, 1);
656 ret = rockchip_spi_prepare_dma(rs);
657 }
658 /* successful DMA prepare means the transfer is in progress */
659 ret = ret ? ret : 1;
660 } else {
661 spi_enable_chip(rs, 1);
662 ret = rockchip_spi_pio_transfer(rs);
663 }
664
665 return ret;
666}
667
668static bool rockchip_spi_can_dma(struct spi_master *master,
669 struct spi_device *spi,
670 struct spi_transfer *xfer)
671{
672 struct rockchip_spi *rs = spi_master_get_devdata(master);
673
674 return (xfer->len > rs->fifo_len);
675}
676
677static int rockchip_spi_probe(struct platform_device *pdev)
678{
679 int ret;
680 struct rockchip_spi *rs;
681 struct spi_master *master;
682 struct resource *mem;
683 u32 rsd_nsecs;
684
685 master = spi_alloc_master(&pdev->dev, sizeof(struct rockchip_spi));
686 if (!master)
687 return -ENOMEM;
688
689 platform_set_drvdata(pdev, master);
690
691 rs = spi_master_get_devdata(master);
692
693 /* Get basic io resource and map it */
694 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
695 rs->regs = devm_ioremap_resource(&pdev->dev, mem);
696 if (IS_ERR(rs->regs)) {
697 ret = PTR_ERR(rs->regs);
698 goto err_put_master;
699 }
700
701 rs->apb_pclk = devm_clk_get(&pdev->dev, "apb_pclk");
702 if (IS_ERR(rs->apb_pclk)) {
703 dev_err(&pdev->dev, "Failed to get apb_pclk\n");
704 ret = PTR_ERR(rs->apb_pclk);
705 goto err_put_master;
706 }
707
708 rs->spiclk = devm_clk_get(&pdev->dev, "spiclk");
709 if (IS_ERR(rs->spiclk)) {
710 dev_err(&pdev->dev, "Failed to get spi_pclk\n");
711 ret = PTR_ERR(rs->spiclk);
712 goto err_put_master;
713 }
714
715 ret = clk_prepare_enable(rs->apb_pclk);
716 if (ret < 0) {
717 dev_err(&pdev->dev, "Failed to enable apb_pclk\n");
718 goto err_put_master;
719 }
720
721 ret = clk_prepare_enable(rs->spiclk);
722 if (ret < 0) {
723 dev_err(&pdev->dev, "Failed to enable spi_clk\n");
724 goto err_disable_apbclk;
725 }
726
727 spi_enable_chip(rs, 0);
728
729 rs->type = SSI_MOTO_SPI;
730 rs->master = master;
731 rs->dev = &pdev->dev;
732 rs->max_freq = clk_get_rate(rs->spiclk);
733
734 if (!of_property_read_u32(pdev->dev.of_node, "rx-sample-delay-ns",
735 &rsd_nsecs))
736 rs->rsd_nsecs = rsd_nsecs;
737
738 rs->fifo_len = get_fifo_len(rs);
739 if (!rs->fifo_len) {
740 dev_err(&pdev->dev, "Failed to get fifo length\n");
741 ret = -EINVAL;
742 goto err_disable_spiclk;
743 }
744
745 spin_lock_init(&rs->lock);
746
747 pm_runtime_set_active(&pdev->dev);
748 pm_runtime_enable(&pdev->dev);
749
750 master->auto_runtime_pm = true;
751 master->bus_num = pdev->id;
752 master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LOOP;
753 master->num_chipselect = ROCKCHIP_SPI_MAX_CS_NUM;
754 master->dev.of_node = pdev->dev.of_node;
755 master->bits_per_word_mask = SPI_BPW_MASK(16) | SPI_BPW_MASK(8);
756
757 master->set_cs = rockchip_spi_set_cs;
758 master->prepare_message = rockchip_spi_prepare_message;
759 master->unprepare_message = rockchip_spi_unprepare_message;
760 master->transfer_one = rockchip_spi_transfer_one;
761 master->max_transfer_size = rockchip_spi_max_transfer_size;
762 master->handle_err = rockchip_spi_handle_err;
763 master->flags = SPI_MASTER_GPIO_SS;
764
765 rs->dma_tx.ch = dma_request_chan(rs->dev, "tx");
766 if (IS_ERR(rs->dma_tx.ch)) {
767 /* Check tx to see if we need defer probing driver */
768 if (PTR_ERR(rs->dma_tx.ch) == -EPROBE_DEFER) {
769 ret = -EPROBE_DEFER;
770 goto err_disable_pm_runtime;
771 }
772 dev_warn(rs->dev, "Failed to request TX DMA channel\n");
773 rs->dma_tx.ch = NULL;
774 }
775
776 rs->dma_rx.ch = dma_request_chan(rs->dev, "rx");
777 if (IS_ERR(rs->dma_rx.ch)) {
778 if (PTR_ERR(rs->dma_rx.ch) == -EPROBE_DEFER) {
779 ret = -EPROBE_DEFER;
780 goto err_free_dma_tx;
781 }
782 dev_warn(rs->dev, "Failed to request RX DMA channel\n");
783 rs->dma_rx.ch = NULL;
784 }
785
786 if (rs->dma_tx.ch && rs->dma_rx.ch) {
787 dma_get_slave_caps(rs->dma_rx.ch, &(rs->dma_caps));
788 rs->dma_tx.addr = (dma_addr_t)(mem->start + ROCKCHIP_SPI_TXDR);
789 rs->dma_rx.addr = (dma_addr_t)(mem->start + ROCKCHIP_SPI_RXDR);
790 rs->dma_tx.direction = DMA_MEM_TO_DEV;
791 rs->dma_rx.direction = DMA_DEV_TO_MEM;
792
793 master->can_dma = rockchip_spi_can_dma;
794 master->dma_tx = rs->dma_tx.ch;
795 master->dma_rx = rs->dma_rx.ch;
796 }
797
798 ret = devm_spi_register_master(&pdev->dev, master);
799 if (ret < 0) {
800 dev_err(&pdev->dev, "Failed to register master\n");
801 goto err_free_dma_rx;
802 }
803
804 return 0;
805
806err_free_dma_rx:
807 if (rs->dma_rx.ch)
808 dma_release_channel(rs->dma_rx.ch);
809err_free_dma_tx:
810 if (rs->dma_tx.ch)
811 dma_release_channel(rs->dma_tx.ch);
812err_disable_pm_runtime:
813 pm_runtime_disable(&pdev->dev);
814err_disable_spiclk:
815 clk_disable_unprepare(rs->spiclk);
816err_disable_apbclk:
817 clk_disable_unprepare(rs->apb_pclk);
818err_put_master:
819 spi_master_put(master);
820
821 return ret;
822}
823
824static int rockchip_spi_remove(struct platform_device *pdev)
825{
826 struct spi_master *master = spi_master_get(platform_get_drvdata(pdev));
827 struct rockchip_spi *rs = spi_master_get_devdata(master);
828
829 pm_runtime_get_sync(&pdev->dev);
830
831 clk_disable_unprepare(rs->spiclk);
832 clk_disable_unprepare(rs->apb_pclk);
833
834 pm_runtime_put_noidle(&pdev->dev);
835 pm_runtime_disable(&pdev->dev);
836 pm_runtime_set_suspended(&pdev->dev);
837
838 if (rs->dma_tx.ch)
839 dma_release_channel(rs->dma_tx.ch);
840 if (rs->dma_rx.ch)
841 dma_release_channel(rs->dma_rx.ch);
842
843 spi_master_put(master);
844
845 return 0;
846}
847
848#ifdef CONFIG_PM_SLEEP
849static int rockchip_spi_suspend(struct device *dev)
850{
851 int ret;
852 struct spi_master *master = dev_get_drvdata(dev);
853 struct rockchip_spi *rs = spi_master_get_devdata(master);
854
855 ret = spi_master_suspend(rs->master);
856 if (ret < 0)
857 return ret;
858
859 ret = pm_runtime_force_suspend(dev);
860 if (ret < 0)
861 return ret;
862
863 pinctrl_pm_select_sleep_state(dev);
864
865 return 0;
866}
867
868static int rockchip_spi_resume(struct device *dev)
869{
870 int ret;
871 struct spi_master *master = dev_get_drvdata(dev);
872 struct rockchip_spi *rs = spi_master_get_devdata(master);
873
874 pinctrl_pm_select_default_state(dev);
875
876 ret = pm_runtime_force_resume(dev);
877 if (ret < 0)
878 return ret;
879
880 ret = spi_master_resume(rs->master);
881 if (ret < 0) {
882 clk_disable_unprepare(rs->spiclk);
883 clk_disable_unprepare(rs->apb_pclk);
884 }
885
886 return 0;
887}
888#endif /* CONFIG_PM_SLEEP */
889
890#ifdef CONFIG_PM
891static int rockchip_spi_runtime_suspend(struct device *dev)
892{
893 struct spi_master *master = dev_get_drvdata(dev);
894 struct rockchip_spi *rs = spi_master_get_devdata(master);
895
896 clk_disable_unprepare(rs->spiclk);
897 clk_disable_unprepare(rs->apb_pclk);
898
899 return 0;
900}
901
902static int rockchip_spi_runtime_resume(struct device *dev)
903{
904 int ret;
905 struct spi_master *master = dev_get_drvdata(dev);
906 struct rockchip_spi *rs = spi_master_get_devdata(master);
907
908 ret = clk_prepare_enable(rs->apb_pclk);
909 if (ret < 0)
910 return ret;
911
912 ret = clk_prepare_enable(rs->spiclk);
913 if (ret < 0)
914 clk_disable_unprepare(rs->apb_pclk);
915
916 return 0;
917}
918#endif /* CONFIG_PM */
919
920static const struct dev_pm_ops rockchip_spi_pm = {
921 SET_SYSTEM_SLEEP_PM_OPS(rockchip_spi_suspend, rockchip_spi_resume)
922 SET_RUNTIME_PM_OPS(rockchip_spi_runtime_suspend,
923 rockchip_spi_runtime_resume, NULL)
924};
925
926static const struct of_device_id rockchip_spi_dt_match[] = {
927 { .compatible = "rockchip,rv1108-spi", },
928 { .compatible = "rockchip,rk3036-spi", },
929 { .compatible = "rockchip,rk3066-spi", },
930 { .compatible = "rockchip,rk3188-spi", },
931 { .compatible = "rockchip,rk3228-spi", },
932 { .compatible = "rockchip,rk3288-spi", },
933 { .compatible = "rockchip,rk3368-spi", },
934 { .compatible = "rockchip,rk3399-spi", },
935 { },
936};
937MODULE_DEVICE_TABLE(of, rockchip_spi_dt_match);
938
939static struct platform_driver rockchip_spi_driver = {
940 .driver = {
941 .name = DRIVER_NAME,
942 .pm = &rockchip_spi_pm,
943 .of_match_table = of_match_ptr(rockchip_spi_dt_match),
944 },
945 .probe = rockchip_spi_probe,
946 .remove = rockchip_spi_remove,
947};
948
949module_platform_driver(rockchip_spi_driver);
950
951MODULE_AUTHOR("Addy Ke <addy.ke@rock-chips.com>");
952MODULE_DESCRIPTION("ROCKCHIP SPI Controller Driver");
953MODULE_LICENSE("GPL v2");