1
2
3
4
5
6
7
8
9
10
11
12
13
14#include <linux/clk.h>
15#include <linux/completion.h>
16#include <linux/debugfs.h>
17#include <linux/delay.h>
18#include <linux/dma-mapping.h>
19#include <linux/dmaengine.h>
20#include <linux/err.h>
21#include <linux/interrupt.h>
22#include <linux/io.h>
23#include <linux/kernel.h>
24#include <linux/module.h>
25#include <linux/of.h>
26#include <linux/of_address.h>
27#include <linux/of_device.h>
28#include <linux/gpio/consumer.h>
29#include <linux/gpio/machine.h>
30#include <linux/gpio/driver.h>
31#include <linux/of_irq.h>
32#include <linux/spi/spi.h>
33
34
35#define BCM2835_SPI_CS 0x00
36#define BCM2835_SPI_FIFO 0x04
37#define BCM2835_SPI_CLK 0x08
38#define BCM2835_SPI_DLEN 0x0c
39#define BCM2835_SPI_LTOH 0x10
40#define BCM2835_SPI_DC 0x14
41
42
43#define BCM2835_SPI_CS_LEN_LONG 0x02000000
44#define BCM2835_SPI_CS_DMA_LEN 0x01000000
45#define BCM2835_SPI_CS_CSPOL2 0x00800000
46#define BCM2835_SPI_CS_CSPOL1 0x00400000
47#define BCM2835_SPI_CS_CSPOL0 0x00200000
48#define BCM2835_SPI_CS_RXF 0x00100000
49#define BCM2835_SPI_CS_RXR 0x00080000
50#define BCM2835_SPI_CS_TXD 0x00040000
51#define BCM2835_SPI_CS_RXD 0x00020000
52#define BCM2835_SPI_CS_DONE 0x00010000
53#define BCM2835_SPI_CS_LEN 0x00002000
54#define BCM2835_SPI_CS_REN 0x00001000
55#define BCM2835_SPI_CS_ADCS 0x00000800
56#define BCM2835_SPI_CS_INTR 0x00000400
57#define BCM2835_SPI_CS_INTD 0x00000200
58#define BCM2835_SPI_CS_DMAEN 0x00000100
59#define BCM2835_SPI_CS_TA 0x00000080
60#define BCM2835_SPI_CS_CSPOL 0x00000040
61#define BCM2835_SPI_CS_CLEAR_RX 0x00000020
62#define BCM2835_SPI_CS_CLEAR_TX 0x00000010
63#define BCM2835_SPI_CS_CPOL 0x00000008
64#define BCM2835_SPI_CS_CPHA 0x00000004
65#define BCM2835_SPI_CS_CS_10 0x00000002
66#define BCM2835_SPI_CS_CS_01 0x00000001
67
68#define BCM2835_SPI_FIFO_SIZE 64
69#define BCM2835_SPI_FIFO_SIZE_3_4 48
70#define BCM2835_SPI_DMA_MIN_LENGTH 96
71#define BCM2835_SPI_NUM_CS 3
72#define BCM2835_SPI_MODE_BITS (SPI_CPOL | SPI_CPHA | SPI_CS_HIGH \
73 | SPI_NO_CS | SPI_3WIRE)
74
75#define DRV_NAME "spi-bcm2835"
76
77
78unsigned int polling_limit_us = 30;
79module_param(polling_limit_us, uint, 0664);
80MODULE_PARM_DESC(polling_limit_us,
81 "time in us to run a transfer in polling mode\n");
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123struct bcm2835_spi {
124 void __iomem *regs;
125 struct clk *clk;
126 int irq;
127 struct spi_transfer *tfr;
128 const u8 *tx_buf;
129 u8 *rx_buf;
130 int tx_len;
131 int rx_len;
132 int tx_prologue;
133 int rx_prologue;
134 unsigned int tx_spillover;
135 u32 prepare_cs[BCM2835_SPI_NUM_CS];
136
137 struct dentry *debugfs_dir;
138 u64 count_transfer_polling;
139 u64 count_transfer_irq;
140 u64 count_transfer_irq_after_polling;
141 u64 count_transfer_dma;
142
143 u8 chip_select;
144 unsigned int tx_dma_active;
145 unsigned int rx_dma_active;
146 struct dma_async_tx_descriptor *fill_tx_desc;
147 dma_addr_t fill_tx_addr;
148 struct dma_async_tx_descriptor *clear_rx_desc[BCM2835_SPI_NUM_CS];
149 dma_addr_t clear_rx_addr;
150 u32 clear_rx_cs[BCM2835_SPI_NUM_CS] ____cacheline_aligned;
151};
152
153#if defined(CONFIG_DEBUG_FS)
154static void bcm2835_debugfs_create(struct bcm2835_spi *bs,
155 const char *dname)
156{
157 char name[64];
158 struct dentry *dir;
159
160
161 snprintf(name, sizeof(name), "spi-bcm2835-%s", dname);
162
163
164 dir = debugfs_create_dir(name, NULL);
165 bs->debugfs_dir = dir;
166
167
168 debugfs_create_u64("count_transfer_polling", 0444, dir,
169 &bs->count_transfer_polling);
170 debugfs_create_u64("count_transfer_irq", 0444, dir,
171 &bs->count_transfer_irq);
172 debugfs_create_u64("count_transfer_irq_after_polling", 0444, dir,
173 &bs->count_transfer_irq_after_polling);
174 debugfs_create_u64("count_transfer_dma", 0444, dir,
175 &bs->count_transfer_dma);
176}
177
178static void bcm2835_debugfs_remove(struct bcm2835_spi *bs)
179{
180 debugfs_remove_recursive(bs->debugfs_dir);
181 bs->debugfs_dir = NULL;
182}
183#else
184static void bcm2835_debugfs_create(struct bcm2835_spi *bs,
185 const char *dname)
186{
187}
188
189static void bcm2835_debugfs_remove(struct bcm2835_spi *bs)
190{
191}
192#endif
193
194static inline u32 bcm2835_rd(struct bcm2835_spi *bs, unsigned reg)
195{
196 return readl(bs->regs + reg);
197}
198
199static inline void bcm2835_wr(struct bcm2835_spi *bs, unsigned reg, u32 val)
200{
201 writel(val, bs->regs + reg);
202}
203
204static inline void bcm2835_rd_fifo(struct bcm2835_spi *bs)
205{
206 u8 byte;
207
208 while ((bs->rx_len) &&
209 (bcm2835_rd(bs, BCM2835_SPI_CS) & BCM2835_SPI_CS_RXD)) {
210 byte = bcm2835_rd(bs, BCM2835_SPI_FIFO);
211 if (bs->rx_buf)
212 *bs->rx_buf++ = byte;
213 bs->rx_len--;
214 }
215}
216
217static inline void bcm2835_wr_fifo(struct bcm2835_spi *bs)
218{
219 u8 byte;
220
221 while ((bs->tx_len) &&
222 (bcm2835_rd(bs, BCM2835_SPI_CS) & BCM2835_SPI_CS_TXD)) {
223 byte = bs->tx_buf ? *bs->tx_buf++ : 0;
224 bcm2835_wr(bs, BCM2835_SPI_FIFO, byte);
225 bs->tx_len--;
226 }
227}
228
229
230
231
232
233
234
235
236
237
238
239static inline void bcm2835_rd_fifo_count(struct bcm2835_spi *bs, int count)
240{
241 u32 val;
242 int len;
243
244 bs->rx_len -= count;
245
246 while (count > 0) {
247 val = bcm2835_rd(bs, BCM2835_SPI_FIFO);
248 len = min(count, 4);
249 memcpy(bs->rx_buf, &val, len);
250 bs->rx_buf += len;
251 count -= 4;
252 }
253}
254
255
256
257
258
259
260
261
262
263
264
265static inline void bcm2835_wr_fifo_count(struct bcm2835_spi *bs, int count)
266{
267 u32 val;
268 int len;
269
270 bs->tx_len -= count;
271
272 while (count > 0) {
273 if (bs->tx_buf) {
274 len = min(count, 4);
275 memcpy(&val, bs->tx_buf, len);
276 bs->tx_buf += len;
277 } else {
278 val = 0;
279 }
280 bcm2835_wr(bs, BCM2835_SPI_FIFO, val);
281 count -= 4;
282 }
283}
284
285
286
287
288
289
290
291
292
293static inline void bcm2835_wait_tx_fifo_empty(struct bcm2835_spi *bs)
294{
295 while (!(bcm2835_rd(bs, BCM2835_SPI_CS) & BCM2835_SPI_CS_DONE))
296 cpu_relax();
297}
298
299
300
301
302
303
304static inline void bcm2835_rd_fifo_blind(struct bcm2835_spi *bs, int count)
305{
306 u8 val;
307
308 count = min(count, bs->rx_len);
309 bs->rx_len -= count;
310
311 while (count) {
312 val = bcm2835_rd(bs, BCM2835_SPI_FIFO);
313 if (bs->rx_buf)
314 *bs->rx_buf++ = val;
315 count--;
316 }
317}
318
319
320
321
322
323
324static inline void bcm2835_wr_fifo_blind(struct bcm2835_spi *bs, int count)
325{
326 u8 val;
327
328 count = min(count, bs->tx_len);
329 bs->tx_len -= count;
330
331 while (count) {
332 val = bs->tx_buf ? *bs->tx_buf++ : 0;
333 bcm2835_wr(bs, BCM2835_SPI_FIFO, val);
334 count--;
335 }
336}
337
338static void bcm2835_spi_reset_hw(struct spi_controller *ctlr)
339{
340 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr);
341 u32 cs = bcm2835_rd(bs, BCM2835_SPI_CS);
342
343
344 cs &= ~(BCM2835_SPI_CS_INTR |
345 BCM2835_SPI_CS_INTD |
346 BCM2835_SPI_CS_DMAEN |
347 BCM2835_SPI_CS_TA);
348
349
350
351
352
353
354 cs |= BCM2835_SPI_CS_DONE;
355
356 cs |= BCM2835_SPI_CS_CLEAR_RX | BCM2835_SPI_CS_CLEAR_TX;
357
358
359 bcm2835_wr(bs, BCM2835_SPI_CS, cs);
360
361 bcm2835_wr(bs, BCM2835_SPI_DLEN, 0);
362}
363
364static irqreturn_t bcm2835_spi_interrupt(int irq, void *dev_id)
365{
366 struct spi_controller *ctlr = dev_id;
367 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr);
368 u32 cs = bcm2835_rd(bs, BCM2835_SPI_CS);
369
370
371
372
373
374 if (cs & BCM2835_SPI_CS_RXF)
375 bcm2835_rd_fifo_blind(bs, BCM2835_SPI_FIFO_SIZE);
376 else if (cs & BCM2835_SPI_CS_RXR)
377 bcm2835_rd_fifo_blind(bs, BCM2835_SPI_FIFO_SIZE_3_4);
378
379 if (bs->tx_len && cs & BCM2835_SPI_CS_DONE)
380 bcm2835_wr_fifo_blind(bs, BCM2835_SPI_FIFO_SIZE);
381
382
383 bcm2835_rd_fifo(bs);
384
385 bcm2835_wr_fifo(bs);
386
387 if (!bs->rx_len) {
388
389 bcm2835_spi_reset_hw(ctlr);
390
391 complete(&ctlr->xfer_completion);
392 }
393
394 return IRQ_HANDLED;
395}
396
397static int bcm2835_spi_transfer_one_irq(struct spi_controller *ctlr,
398 struct spi_device *spi,
399 struct spi_transfer *tfr,
400 u32 cs, bool fifo_empty)
401{
402 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr);
403
404
405 bs->count_transfer_irq++;
406
407
408
409
410
411 bcm2835_wr(bs, BCM2835_SPI_CS, cs | BCM2835_SPI_CS_TA);
412
413
414 if (fifo_empty)
415 bcm2835_wr_fifo_blind(bs, BCM2835_SPI_FIFO_SIZE);
416 bcm2835_wr_fifo(bs);
417
418
419 cs |= BCM2835_SPI_CS_INTR | BCM2835_SPI_CS_INTD | BCM2835_SPI_CS_TA;
420 bcm2835_wr(bs, BCM2835_SPI_CS, cs);
421
422
423 return 1;
424}
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472static void bcm2835_spi_transfer_prologue(struct spi_controller *ctlr,
473 struct spi_transfer *tfr,
474 struct bcm2835_spi *bs,
475 u32 cs)
476{
477 int tx_remaining;
478
479 bs->tfr = tfr;
480 bs->tx_prologue = 0;
481 bs->rx_prologue = 0;
482 bs->tx_spillover = false;
483
484 if (bs->tx_buf && !sg_is_last(&tfr->tx_sg.sgl[0]))
485 bs->tx_prologue = sg_dma_len(&tfr->tx_sg.sgl[0]) & 3;
486
487 if (bs->rx_buf && !sg_is_last(&tfr->rx_sg.sgl[0])) {
488 bs->rx_prologue = sg_dma_len(&tfr->rx_sg.sgl[0]) & 3;
489
490 if (bs->rx_prologue > bs->tx_prologue) {
491 if (!bs->tx_buf || sg_is_last(&tfr->tx_sg.sgl[0])) {
492 bs->tx_prologue = bs->rx_prologue;
493 } else {
494 bs->tx_prologue += 4;
495 bs->tx_spillover =
496 !(sg_dma_len(&tfr->tx_sg.sgl[0]) & ~3);
497 }
498 }
499 }
500
501
502 if (!bs->tx_prologue)
503 return;
504
505
506 if (bs->rx_prologue) {
507 bcm2835_wr(bs, BCM2835_SPI_DLEN, bs->rx_prologue);
508 bcm2835_wr(bs, BCM2835_SPI_CS, cs | BCM2835_SPI_CS_TA
509 | BCM2835_SPI_CS_DMAEN);
510 bcm2835_wr_fifo_count(bs, bs->rx_prologue);
511 bcm2835_wait_tx_fifo_empty(bs);
512 bcm2835_rd_fifo_count(bs, bs->rx_prologue);
513 bcm2835_wr(bs, BCM2835_SPI_CS, cs | BCM2835_SPI_CS_CLEAR_RX
514 | BCM2835_SPI_CS_CLEAR_TX
515 | BCM2835_SPI_CS_DONE);
516
517 dma_sync_single_for_device(ctlr->dma_rx->device->dev,
518 sg_dma_address(&tfr->rx_sg.sgl[0]),
519 bs->rx_prologue, DMA_FROM_DEVICE);
520
521 sg_dma_address(&tfr->rx_sg.sgl[0]) += bs->rx_prologue;
522 sg_dma_len(&tfr->rx_sg.sgl[0]) -= bs->rx_prologue;
523 }
524
525 if (!bs->tx_buf)
526 return;
527
528
529
530
531
532 tx_remaining = bs->tx_prologue - bs->rx_prologue;
533 if (tx_remaining) {
534 bcm2835_wr(bs, BCM2835_SPI_DLEN, tx_remaining);
535 bcm2835_wr(bs, BCM2835_SPI_CS, cs | BCM2835_SPI_CS_TA
536 | BCM2835_SPI_CS_DMAEN);
537 bcm2835_wr_fifo_count(bs, tx_remaining);
538 bcm2835_wait_tx_fifo_empty(bs);
539 bcm2835_wr(bs, BCM2835_SPI_CS, cs | BCM2835_SPI_CS_CLEAR_TX
540 | BCM2835_SPI_CS_DONE);
541 }
542
543 if (likely(!bs->tx_spillover)) {
544 sg_dma_address(&tfr->tx_sg.sgl[0]) += bs->tx_prologue;
545 sg_dma_len(&tfr->tx_sg.sgl[0]) -= bs->tx_prologue;
546 } else {
547 sg_dma_len(&tfr->tx_sg.sgl[0]) = 0;
548 sg_dma_address(&tfr->tx_sg.sgl[1]) += 4;
549 sg_dma_len(&tfr->tx_sg.sgl[1]) -= 4;
550 }
551}
552
553
554
555
556
557
558
559
560
561static void bcm2835_spi_undo_prologue(struct bcm2835_spi *bs)
562{
563 struct spi_transfer *tfr = bs->tfr;
564
565 if (!bs->tx_prologue)
566 return;
567
568 if (bs->rx_prologue) {
569 sg_dma_address(&tfr->rx_sg.sgl[0]) -= bs->rx_prologue;
570 sg_dma_len(&tfr->rx_sg.sgl[0]) += bs->rx_prologue;
571 }
572
573 if (!bs->tx_buf)
574 goto out;
575
576 if (likely(!bs->tx_spillover)) {
577 sg_dma_address(&tfr->tx_sg.sgl[0]) -= bs->tx_prologue;
578 sg_dma_len(&tfr->tx_sg.sgl[0]) += bs->tx_prologue;
579 } else {
580 sg_dma_len(&tfr->tx_sg.sgl[0]) = bs->tx_prologue - 4;
581 sg_dma_address(&tfr->tx_sg.sgl[1]) -= 4;
582 sg_dma_len(&tfr->tx_sg.sgl[1]) += 4;
583 }
584out:
585 bs->tx_prologue = 0;
586}
587
588
589
590
591
592
593
594static void bcm2835_spi_dma_rx_done(void *data)
595{
596 struct spi_controller *ctlr = data;
597 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr);
598
599
600
601
602
603
604 dmaengine_terminate_async(ctlr->dma_tx);
605 bs->tx_dma_active = false;
606 bs->rx_dma_active = false;
607 bcm2835_spi_undo_prologue(bs);
608
609
610 bcm2835_spi_reset_hw(ctlr);
611
612 ;
613 complete(&ctlr->xfer_completion);
614}
615
616
617
618
619
620
621
622static void bcm2835_spi_dma_tx_done(void *data)
623{
624 struct spi_controller *ctlr = data;
625 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr);
626
627
628 while (!(bcm2835_rd(bs, BCM2835_SPI_CS) & BCM2835_SPI_CS_DONE))
629 bcm2835_wr(bs, BCM2835_SPI_CS,
630 bs->clear_rx_cs[bs->chip_select]);
631
632 bs->tx_dma_active = false;
633 smp_wmb();
634
635
636
637
638
639
640 if (cmpxchg(&bs->rx_dma_active, true, false))
641 dmaengine_terminate_async(ctlr->dma_rx);
642
643 bcm2835_spi_undo_prologue(bs);
644 bcm2835_spi_reset_hw(ctlr);
645 complete(&ctlr->xfer_completion);
646}
647
648
649
650
651
652
653
654
655
656
657
658
659static int bcm2835_spi_prepare_sg(struct spi_controller *ctlr,
660 struct spi_device *spi,
661 struct spi_transfer *tfr,
662 struct bcm2835_spi *bs,
663 bool is_tx)
664{
665 struct dma_chan *chan;
666 struct scatterlist *sgl;
667 unsigned int nents;
668 enum dma_transfer_direction dir;
669 unsigned long flags;
670
671 struct dma_async_tx_descriptor *desc;
672 dma_cookie_t cookie;
673
674 if (is_tx) {
675 dir = DMA_MEM_TO_DEV;
676 chan = ctlr->dma_tx;
677 nents = tfr->tx_sg.nents;
678 sgl = tfr->tx_sg.sgl;
679 flags = tfr->rx_buf ? 0 : DMA_PREP_INTERRUPT;
680 } else {
681 dir = DMA_DEV_TO_MEM;
682 chan = ctlr->dma_rx;
683 nents = tfr->rx_sg.nents;
684 sgl = tfr->rx_sg.sgl;
685 flags = DMA_PREP_INTERRUPT;
686 }
687
688 desc = dmaengine_prep_slave_sg(chan, sgl, nents, dir, flags);
689 if (!desc)
690 return -EINVAL;
691
692
693
694
695
696 if (!is_tx) {
697 desc->callback = bcm2835_spi_dma_rx_done;
698 desc->callback_param = ctlr;
699 } else if (!tfr->rx_buf) {
700 desc->callback = bcm2835_spi_dma_tx_done;
701 desc->callback_param = ctlr;
702 bs->chip_select = spi->chip_select;
703 }
704
705
706 cookie = dmaengine_submit(desc);
707
708 return dma_submit_error(cookie);
709}
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758static int bcm2835_spi_transfer_one_dma(struct spi_controller *ctlr,
759 struct spi_device *spi,
760 struct spi_transfer *tfr,
761 u32 cs)
762{
763 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr);
764 dma_cookie_t cookie;
765 int ret;
766
767
768 bs->count_transfer_dma++;
769
770
771
772
773
774 bcm2835_spi_transfer_prologue(ctlr, tfr, bs, cs);
775
776
777 if (bs->tx_buf) {
778 ret = bcm2835_spi_prepare_sg(ctlr, spi, tfr, bs, true);
779 } else {
780 cookie = dmaengine_submit(bs->fill_tx_desc);
781 ret = dma_submit_error(cookie);
782 }
783 if (ret)
784 goto err_reset_hw;
785
786
787 bcm2835_wr(bs, BCM2835_SPI_DLEN, bs->tx_len);
788
789
790 bcm2835_wr(bs, BCM2835_SPI_CS,
791 cs | BCM2835_SPI_CS_TA | BCM2835_SPI_CS_DMAEN);
792
793 bs->tx_dma_active = true;
794 smp_wmb();
795
796
797 dma_async_issue_pending(ctlr->dma_tx);
798
799
800
801
802
803 if (bs->rx_buf) {
804 ret = bcm2835_spi_prepare_sg(ctlr, spi, tfr, bs, false);
805 } else {
806 cookie = dmaengine_submit(bs->clear_rx_desc[spi->chip_select]);
807 ret = dma_submit_error(cookie);
808 }
809 if (ret) {
810
811 dmaengine_terminate_sync(ctlr->dma_tx);
812 bs->tx_dma_active = false;
813 goto err_reset_hw;
814 }
815
816
817 dma_async_issue_pending(ctlr->dma_rx);
818 bs->rx_dma_active = true;
819 smp_mb();
820
821
822
823
824
825 if (!bs->rx_buf && !bs->tx_dma_active &&
826 cmpxchg(&bs->rx_dma_active, true, false)) {
827 dmaengine_terminate_async(ctlr->dma_rx);
828 bcm2835_spi_reset_hw(ctlr);
829 }
830
831
832 return 1;
833
834err_reset_hw:
835 bcm2835_spi_reset_hw(ctlr);
836 bcm2835_spi_undo_prologue(bs);
837 return ret;
838}
839
840static bool bcm2835_spi_can_dma(struct spi_controller *ctlr,
841 struct spi_device *spi,
842 struct spi_transfer *tfr)
843{
844
845 if (tfr->len < BCM2835_SPI_DMA_MIN_LENGTH)
846 return false;
847
848
849 return true;
850}
851
852static void bcm2835_dma_release(struct spi_controller *ctlr,
853 struct bcm2835_spi *bs)
854{
855 int i;
856
857 if (ctlr->dma_tx) {
858 dmaengine_terminate_sync(ctlr->dma_tx);
859
860 if (bs->fill_tx_desc)
861 dmaengine_desc_free(bs->fill_tx_desc);
862
863 if (bs->fill_tx_addr)
864 dma_unmap_page_attrs(ctlr->dma_tx->device->dev,
865 bs->fill_tx_addr, sizeof(u32),
866 DMA_TO_DEVICE,
867 DMA_ATTR_SKIP_CPU_SYNC);
868
869 dma_release_channel(ctlr->dma_tx);
870 ctlr->dma_tx = NULL;
871 }
872
873 if (ctlr->dma_rx) {
874 dmaengine_terminate_sync(ctlr->dma_rx);
875
876 for (i = 0; i < BCM2835_SPI_NUM_CS; i++)
877 if (bs->clear_rx_desc[i])
878 dmaengine_desc_free(bs->clear_rx_desc[i]);
879
880 if (bs->clear_rx_addr)
881 dma_unmap_single(ctlr->dma_rx->device->dev,
882 bs->clear_rx_addr,
883 sizeof(bs->clear_rx_cs),
884 DMA_TO_DEVICE);
885
886 dma_release_channel(ctlr->dma_rx);
887 ctlr->dma_rx = NULL;
888 }
889}
890
891static void bcm2835_dma_init(struct spi_controller *ctlr, struct device *dev,
892 struct bcm2835_spi *bs)
893{
894 struct dma_slave_config slave_config;
895 const __be32 *addr;
896 dma_addr_t dma_reg_base;
897 int ret, i;
898
899
900 addr = of_get_address(ctlr->dev.of_node, 0, NULL, NULL);
901 if (!addr) {
902 dev_err(dev, "could not get DMA-register address - not using dma mode\n");
903 goto err;
904 }
905 dma_reg_base = be32_to_cpup(addr);
906
907
908 ctlr->dma_tx = dma_request_slave_channel(dev, "tx");
909 if (!ctlr->dma_tx) {
910 dev_err(dev, "no tx-dma configuration found - not using dma mode\n");
911 goto err;
912 }
913 ctlr->dma_rx = dma_request_slave_channel(dev, "rx");
914 if (!ctlr->dma_rx) {
915 dev_err(dev, "no rx-dma configuration found - not using dma mode\n");
916 goto err_release;
917 }
918
919
920
921
922
923
924 slave_config.dst_addr = (u32)(dma_reg_base + BCM2835_SPI_FIFO);
925 slave_config.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
926
927 ret = dmaengine_slave_config(ctlr->dma_tx, &slave_config);
928 if (ret)
929 goto err_config;
930
931 bs->fill_tx_addr = dma_map_page_attrs(ctlr->dma_tx->device->dev,
932 ZERO_PAGE(0), 0, sizeof(u32),
933 DMA_TO_DEVICE,
934 DMA_ATTR_SKIP_CPU_SYNC);
935 if (dma_mapping_error(ctlr->dma_tx->device->dev, bs->fill_tx_addr)) {
936 dev_err(dev, "cannot map zero page - not using DMA mode\n");
937 bs->fill_tx_addr = 0;
938 goto err_release;
939 }
940
941 bs->fill_tx_desc = dmaengine_prep_dma_cyclic(ctlr->dma_tx,
942 bs->fill_tx_addr,
943 sizeof(u32), 0,
944 DMA_MEM_TO_DEV, 0);
945 if (!bs->fill_tx_desc) {
946 dev_err(dev, "cannot prepare fill_tx_desc - not using DMA mode\n");
947 goto err_release;
948 }
949
950 ret = dmaengine_desc_set_reuse(bs->fill_tx_desc);
951 if (ret) {
952 dev_err(dev, "cannot reuse fill_tx_desc - not using DMA mode\n");
953 goto err_release;
954 }
955
956
957
958
959
960
961 slave_config.src_addr = (u32)(dma_reg_base + BCM2835_SPI_FIFO);
962 slave_config.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
963 slave_config.dst_addr = (u32)(dma_reg_base + BCM2835_SPI_CS);
964 slave_config.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
965
966 ret = dmaengine_slave_config(ctlr->dma_rx, &slave_config);
967 if (ret)
968 goto err_config;
969
970 bs->clear_rx_addr = dma_map_single(ctlr->dma_rx->device->dev,
971 bs->clear_rx_cs,
972 sizeof(bs->clear_rx_cs),
973 DMA_TO_DEVICE);
974 if (dma_mapping_error(ctlr->dma_rx->device->dev, bs->clear_rx_addr)) {
975 dev_err(dev, "cannot map clear_rx_cs - not using DMA mode\n");
976 bs->clear_rx_addr = 0;
977 goto err_release;
978 }
979
980 for (i = 0; i < BCM2835_SPI_NUM_CS; i++) {
981 bs->clear_rx_desc[i] = dmaengine_prep_dma_cyclic(ctlr->dma_rx,
982 bs->clear_rx_addr + i * sizeof(u32),
983 sizeof(u32), 0,
984 DMA_MEM_TO_DEV, 0);
985 if (!bs->clear_rx_desc[i]) {
986 dev_err(dev, "cannot prepare clear_rx_desc - not using DMA mode\n");
987 goto err_release;
988 }
989
990 ret = dmaengine_desc_set_reuse(bs->clear_rx_desc[i]);
991 if (ret) {
992 dev_err(dev, "cannot reuse clear_rx_desc - not using DMA mode\n");
993 goto err_release;
994 }
995 }
996
997
998 ctlr->can_dma = bcm2835_spi_can_dma;
999
1000 return;
1001
1002err_config:
1003 dev_err(dev, "issue configuring dma: %d - not using DMA mode\n",
1004 ret);
1005err_release:
1006 bcm2835_dma_release(ctlr, bs);
1007err:
1008 return;
1009}
1010
1011static int bcm2835_spi_transfer_one_poll(struct spi_controller *ctlr,
1012 struct spi_device *spi,
1013 struct spi_transfer *tfr,
1014 u32 cs)
1015{
1016 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr);
1017 unsigned long timeout;
1018
1019
1020 bs->count_transfer_polling++;
1021
1022
1023 bcm2835_wr(bs, BCM2835_SPI_CS, cs | BCM2835_SPI_CS_TA);
1024
1025
1026
1027
1028
1029 bcm2835_wr_fifo_blind(bs, BCM2835_SPI_FIFO_SIZE);
1030
1031
1032 timeout = jiffies + 2 + HZ * polling_limit_us / 1000000;
1033
1034
1035 while (bs->rx_len) {
1036
1037 bcm2835_wr_fifo(bs);
1038
1039
1040 bcm2835_rd_fifo(bs);
1041
1042
1043
1044
1045 if (bs->rx_len && time_after(jiffies, timeout)) {
1046 dev_dbg_ratelimited(&spi->dev,
1047 "timeout period reached: jiffies: %lu remaining tx/rx: %d/%d - falling back to interrupt mode\n",
1048 jiffies - timeout,
1049 bs->tx_len, bs->rx_len);
1050
1051
1052
1053 bs->count_transfer_irq_after_polling++;
1054
1055 return bcm2835_spi_transfer_one_irq(ctlr, spi,
1056 tfr, cs, false);
1057 }
1058 }
1059
1060
1061 bcm2835_spi_reset_hw(ctlr);
1062
1063 return 0;
1064}
1065
1066static int bcm2835_spi_transfer_one(struct spi_controller *ctlr,
1067 struct spi_device *spi,
1068 struct spi_transfer *tfr)
1069{
1070 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr);
1071 unsigned long spi_hz, clk_hz, cdiv, spi_used_hz;
1072 unsigned long hz_per_byte, byte_limit;
1073 u32 cs = bs->prepare_cs[spi->chip_select];
1074
1075
1076 spi_hz = tfr->speed_hz;
1077 clk_hz = clk_get_rate(bs->clk);
1078
1079 if (spi_hz >= clk_hz / 2) {
1080 cdiv = 2;
1081 } else if (spi_hz) {
1082
1083 cdiv = DIV_ROUND_UP(clk_hz, spi_hz);
1084 cdiv += (cdiv % 2);
1085
1086 if (cdiv >= 65536)
1087 cdiv = 0;
1088 } else {
1089 cdiv = 0;
1090 }
1091 spi_used_hz = cdiv ? (clk_hz / cdiv) : (clk_hz / 65536);
1092 bcm2835_wr(bs, BCM2835_SPI_CLK, cdiv);
1093
1094
1095 if (spi->mode & SPI_3WIRE && tfr->rx_buf)
1096 cs |= BCM2835_SPI_CS_REN;
1097
1098
1099 bs->tx_buf = tfr->tx_buf;
1100 bs->rx_buf = tfr->rx_buf;
1101 bs->tx_len = tfr->len;
1102 bs->rx_len = tfr->len;
1103
1104
1105
1106
1107
1108
1109
1110 hz_per_byte = polling_limit_us ? (9 * 1000000) / polling_limit_us : 0;
1111 byte_limit = hz_per_byte ? spi_used_hz / hz_per_byte : 1;
1112
1113
1114 if (tfr->len < byte_limit)
1115 return bcm2835_spi_transfer_one_poll(ctlr, spi, tfr, cs);
1116
1117
1118
1119
1120
1121 if (ctlr->can_dma && bcm2835_spi_can_dma(ctlr, spi, tfr))
1122 return bcm2835_spi_transfer_one_dma(ctlr, spi, tfr, cs);
1123
1124
1125 return bcm2835_spi_transfer_one_irq(ctlr, spi, tfr, cs, true);
1126}
1127
1128static int bcm2835_spi_prepare_message(struct spi_controller *ctlr,
1129 struct spi_message *msg)
1130{
1131 struct spi_device *spi = msg->spi;
1132 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr);
1133 int ret;
1134
1135 if (ctlr->can_dma) {
1136
1137
1138
1139
1140
1141 ret = spi_split_transfers_maxsize(ctlr, msg, 65532,
1142 GFP_KERNEL | GFP_DMA);
1143 if (ret)
1144 return ret;
1145 }
1146
1147
1148
1149
1150
1151 bcm2835_wr(bs, BCM2835_SPI_CS, bs->prepare_cs[spi->chip_select]);
1152
1153 return 0;
1154}
1155
1156static void bcm2835_spi_handle_err(struct spi_controller *ctlr,
1157 struct spi_message *msg)
1158{
1159 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr);
1160
1161
1162 dmaengine_terminate_sync(ctlr->dma_tx);
1163 bs->tx_dma_active = false;
1164 dmaengine_terminate_sync(ctlr->dma_rx);
1165 bs->rx_dma_active = false;
1166 bcm2835_spi_undo_prologue(bs);
1167
1168
1169 bcm2835_spi_reset_hw(ctlr);
1170}
1171
1172static int chip_match_name(struct gpio_chip *chip, void *data)
1173{
1174 return !strcmp(chip->label, data);
1175}
1176
1177static int bcm2835_spi_setup(struct spi_device *spi)
1178{
1179 struct spi_controller *ctlr = spi->controller;
1180 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr);
1181 struct gpio_chip *chip;
1182 enum gpio_lookup_flags lflags;
1183 u32 cs;
1184
1185
1186
1187
1188
1189
1190
1191 cs = BCM2835_SPI_CS_CS_10 | BCM2835_SPI_CS_CS_01;
1192 if (spi->mode & SPI_CPOL)
1193 cs |= BCM2835_SPI_CS_CPOL;
1194 if (spi->mode & SPI_CPHA)
1195 cs |= BCM2835_SPI_CS_CPHA;
1196 bs->prepare_cs[spi->chip_select] = cs;
1197
1198
1199
1200
1201
1202 if (ctlr->dma_rx) {
1203 bs->clear_rx_cs[spi->chip_select] = cs |
1204 BCM2835_SPI_CS_TA |
1205 BCM2835_SPI_CS_DMAEN |
1206 BCM2835_SPI_CS_CLEAR_RX;
1207 dma_sync_single_for_device(ctlr->dma_rx->device->dev,
1208 bs->clear_rx_addr,
1209 sizeof(bs->clear_rx_cs),
1210 DMA_TO_DEVICE);
1211 }
1212
1213
1214
1215
1216 if (spi->mode & SPI_NO_CS)
1217 return 0;
1218
1219
1220
1221
1222 if (spi->cs_gpiod)
1223 return 0;
1224 if (spi->chip_select > 1) {
1225
1226
1227
1228
1229 dev_err(&spi->dev,
1230 "setup: only two native chip-selects are supported\n");
1231 return -EINVAL;
1232 }
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244 chip = gpiochip_find("pinctrl-bcm2835", chip_match_name);
1245 if (!chip)
1246 return 0;
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256 if (of_property_read_bool(spi->dev.of_node, "spi-cs-high"))
1257 lflags = GPIO_ACTIVE_HIGH;
1258 else
1259 lflags = GPIO_ACTIVE_LOW;
1260 spi->cs_gpiod = gpiochip_request_own_desc(chip, 8 - spi->chip_select,
1261 DRV_NAME,
1262 lflags,
1263 GPIOD_OUT_LOW);
1264 if (IS_ERR(spi->cs_gpiod))
1265 return PTR_ERR(spi->cs_gpiod);
1266
1267
1268 dev_info(&spi->dev, "setting up native-CS%i to use GPIO\n",
1269 spi->chip_select);
1270
1271 return 0;
1272}
1273
1274static int bcm2835_spi_probe(struct platform_device *pdev)
1275{
1276 struct spi_controller *ctlr;
1277 struct bcm2835_spi *bs;
1278 int err;
1279
1280 ctlr = spi_alloc_master(&pdev->dev, ALIGN(sizeof(*bs),
1281 dma_get_cache_alignment()));
1282 if (!ctlr)
1283 return -ENOMEM;
1284
1285 platform_set_drvdata(pdev, ctlr);
1286
1287 ctlr->use_gpio_descriptors = true;
1288 ctlr->mode_bits = BCM2835_SPI_MODE_BITS;
1289 ctlr->bits_per_word_mask = SPI_BPW_MASK(8);
1290 ctlr->num_chipselect = BCM2835_SPI_NUM_CS;
1291 ctlr->setup = bcm2835_spi_setup;
1292 ctlr->transfer_one = bcm2835_spi_transfer_one;
1293 ctlr->handle_err = bcm2835_spi_handle_err;
1294 ctlr->prepare_message = bcm2835_spi_prepare_message;
1295 ctlr->dev.of_node = pdev->dev.of_node;
1296
1297 bs = spi_controller_get_devdata(ctlr);
1298
1299 bs->regs = devm_platform_ioremap_resource(pdev, 0);
1300 if (IS_ERR(bs->regs)) {
1301 err = PTR_ERR(bs->regs);
1302 goto out_controller_put;
1303 }
1304
1305 bs->clk = devm_clk_get(&pdev->dev, NULL);
1306 if (IS_ERR(bs->clk)) {
1307 err = PTR_ERR(bs->clk);
1308 dev_err(&pdev->dev, "could not get clk: %d\n", err);
1309 goto out_controller_put;
1310 }
1311
1312 bs->irq = platform_get_irq(pdev, 0);
1313 if (bs->irq <= 0) {
1314 err = bs->irq ? bs->irq : -ENODEV;
1315 goto out_controller_put;
1316 }
1317
1318 clk_prepare_enable(bs->clk);
1319
1320 bcm2835_dma_init(ctlr, &pdev->dev, bs);
1321
1322
1323 bcm2835_wr(bs, BCM2835_SPI_CS,
1324 BCM2835_SPI_CS_CLEAR_RX | BCM2835_SPI_CS_CLEAR_TX);
1325
1326 err = devm_request_irq(&pdev->dev, bs->irq, bcm2835_spi_interrupt, 0,
1327 dev_name(&pdev->dev), ctlr);
1328 if (err) {
1329 dev_err(&pdev->dev, "could not request IRQ: %d\n", err);
1330 goto out_clk_disable;
1331 }
1332
1333 err = devm_spi_register_controller(&pdev->dev, ctlr);
1334 if (err) {
1335 dev_err(&pdev->dev, "could not register SPI controller: %d\n",
1336 err);
1337 goto out_clk_disable;
1338 }
1339
1340 bcm2835_debugfs_create(bs, dev_name(&pdev->dev));
1341
1342 return 0;
1343
1344out_clk_disable:
1345 clk_disable_unprepare(bs->clk);
1346out_controller_put:
1347 spi_controller_put(ctlr);
1348 return err;
1349}
1350
1351static int bcm2835_spi_remove(struct platform_device *pdev)
1352{
1353 struct spi_controller *ctlr = platform_get_drvdata(pdev);
1354 struct bcm2835_spi *bs = spi_controller_get_devdata(ctlr);
1355
1356 bcm2835_debugfs_remove(bs);
1357
1358
1359 bcm2835_wr(bs, BCM2835_SPI_CS,
1360 BCM2835_SPI_CS_CLEAR_RX | BCM2835_SPI_CS_CLEAR_TX);
1361
1362 clk_disable_unprepare(bs->clk);
1363
1364 bcm2835_dma_release(ctlr, bs);
1365
1366 return 0;
1367}
1368
1369static const struct of_device_id bcm2835_spi_match[] = {
1370 { .compatible = "brcm,bcm2835-spi", },
1371 {}
1372};
1373MODULE_DEVICE_TABLE(of, bcm2835_spi_match);
1374
1375static struct platform_driver bcm2835_spi_driver = {
1376 .driver = {
1377 .name = DRV_NAME,
1378 .of_match_table = bcm2835_spi_match,
1379 },
1380 .probe = bcm2835_spi_probe,
1381 .remove = bcm2835_spi_remove,
1382};
1383module_platform_driver(bcm2835_spi_driver);
1384
1385MODULE_DESCRIPTION("SPI controller driver for Broadcom BCM2835");
1386MODULE_AUTHOR("Chris Boot <bootc@bootc.net>");
1387MODULE_LICENSE("GPL");
1388