1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27#include <linux/sched.h>
28#include <linux/delay.h>
29#include <linux/slab.h>
30#include <linux/module.h>
31#include <linux/bio.h>
32#include <linux/dma-mapping.h>
33#include <linux/crc7.h>
34#include <linux/crc-itu-t.h>
35#include <linux/scatterlist.h>
36
37#include <linux/mmc/host.h>
38#include <linux/mmc/mmc.h>
39#include <linux/mmc/slot-gpio.h>
40
41#include <linux/spi/spi.h>
42#include <linux/spi/mmc_spi.h>
43
44#include <asm/unaligned.h>
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80#define SPI_MMC_RESPONSE_CODE(x) ((x) & 0x1f)
81#define SPI_RESPONSE_ACCEPTED ((2 << 1)|1)
82#define SPI_RESPONSE_CRC_ERR ((5 << 1)|1)
83#define SPI_RESPONSE_WRITE_ERR ((6 << 1)|1)
84
85
86
87
88#define SPI_TOKEN_SINGLE 0xfe
89#define SPI_TOKEN_MULTI_WRITE 0xfc
90#define SPI_TOKEN_STOP_TRAN 0xfd
91
92#define MMC_SPI_BLOCKSIZE 512
93
94
95
96
97
98
99
100
101#define r1b_timeout (HZ * 3)
102
103
104
105
106
107
108
109
110#define MMC_SPI_BLOCKSATONCE 128
111
112
113
114
115
116
117
118
119struct scratch {
120 u8 status[29];
121 u8 data_token;
122 __be16 crc_val;
123};
124
125struct mmc_spi_host {
126 struct mmc_host *mmc;
127 struct spi_device *spi;
128
129 unsigned char power_mode;
130 u16 powerup_msecs;
131
132 struct mmc_spi_platform_data *pdata;
133
134
135 struct spi_transfer token, t, crc, early_status;
136 struct spi_message m;
137
138
139 struct spi_transfer status;
140 struct spi_message readback;
141
142
143 struct device *dma_dev;
144
145
146 struct scratch *data;
147 dma_addr_t data_dma;
148
149
150
151
152
153 void *ones;
154 dma_addr_t ones_dma;
155};
156
157
158
159
160
161
162
163
164static inline int mmc_cs_off(struct mmc_spi_host *host)
165{
166
167 return spi_setup(host->spi);
168}
169
170static int
171mmc_spi_readbytes(struct mmc_spi_host *host, unsigned len)
172{
173 int status;
174
175 if (len > sizeof(*host->data)) {
176 WARN_ON(1);
177 return -EIO;
178 }
179
180 host->status.len = len;
181
182 if (host->dma_dev)
183 dma_sync_single_for_device(host->dma_dev,
184 host->data_dma, sizeof(*host->data),
185 DMA_FROM_DEVICE);
186
187 status = spi_sync_locked(host->spi, &host->readback);
188
189 if (host->dma_dev)
190 dma_sync_single_for_cpu(host->dma_dev,
191 host->data_dma, sizeof(*host->data),
192 DMA_FROM_DEVICE);
193
194 return status;
195}
196
197static int mmc_spi_skip(struct mmc_spi_host *host, unsigned long timeout,
198 unsigned n, u8 byte)
199{
200 u8 *cp = host->data->status;
201 unsigned long start = jiffies;
202
203 while (1) {
204 int status;
205 unsigned i;
206
207 status = mmc_spi_readbytes(host, n);
208 if (status < 0)
209 return status;
210
211 for (i = 0; i < n; i++) {
212 if (cp[i] != byte)
213 return cp[i];
214 }
215
216 if (time_is_before_jiffies(start + timeout))
217 break;
218
219
220
221
222
223 if (time_is_before_jiffies(start+1))
224 schedule();
225 }
226 return -ETIMEDOUT;
227}
228
229static inline int
230mmc_spi_wait_unbusy(struct mmc_spi_host *host, unsigned long timeout)
231{
232 return mmc_spi_skip(host, timeout, sizeof(host->data->status), 0);
233}
234
235static int mmc_spi_readtoken(struct mmc_spi_host *host, unsigned long timeout)
236{
237 return mmc_spi_skip(host, timeout, 1, 0xff);
238}
239
240
241
242
243
244
245
246
247
248
249
250static char *maptype(struct mmc_command *cmd)
251{
252 switch (mmc_spi_resp_type(cmd)) {
253 case MMC_RSP_SPI_R1: return "R1";
254 case MMC_RSP_SPI_R1B: return "R1B";
255 case MMC_RSP_SPI_R2: return "R2/R5";
256 case MMC_RSP_SPI_R3: return "R3/R4/R7";
257 default: return "?";
258 }
259}
260
261
262static int mmc_spi_response_get(struct mmc_spi_host *host,
263 struct mmc_command *cmd, int cs_on)
264{
265 u8 *cp = host->data->status;
266 u8 *end = cp + host->t.len;
267 int value = 0;
268 int bitshift;
269 u8 leftover = 0;
270 unsigned short rotator;
271 int i;
272 char tag[32];
273
274 snprintf(tag, sizeof(tag), " ... CMD%d response SPI_%s",
275 cmd->opcode, maptype(cmd));
276
277
278
279
280
281
282
283 cp += 8;
284 while (cp < end && *cp == 0xff)
285 cp++;
286
287
288 if (cp == end) {
289 cp = host->data->status;
290 end = cp+1;
291
292
293
294
295
296
297
298
299
300
301
302
303 for (i = 2; i < 16; i++) {
304 value = mmc_spi_readbytes(host, 1);
305 if (value < 0)
306 goto done;
307 if (*cp != 0xff)
308 goto checkstatus;
309 }
310 value = -ETIMEDOUT;
311 goto done;
312 }
313
314checkstatus:
315 bitshift = 0;
316 if (*cp & 0x80) {
317
318 rotator = *cp++ << 8;
319
320 if (cp == end) {
321 value = mmc_spi_readbytes(host, 1);
322 if (value < 0)
323 goto done;
324 cp = host->data->status;
325 end = cp+1;
326 }
327 rotator |= *cp++;
328 while (rotator & 0x8000) {
329 bitshift++;
330 rotator <<= 1;
331 }
332 cmd->resp[0] = rotator >> 8;
333 leftover = rotator;
334 } else {
335 cmd->resp[0] = *cp++;
336 }
337 cmd->error = 0;
338
339
340 if (cmd->resp[0] != 0) {
341 if ((R1_SPI_PARAMETER | R1_SPI_ADDRESS)
342 & cmd->resp[0])
343 value = -EFAULT;
344 else if (R1_SPI_ILLEGAL_COMMAND & cmd->resp[0])
345 value = -ENOSYS;
346 else if (R1_SPI_COM_CRC & cmd->resp[0])
347 value = -EILSEQ;
348 else if ((R1_SPI_ERASE_SEQ | R1_SPI_ERASE_RESET)
349 & cmd->resp[0])
350 value = -EIO;
351
352 }
353
354 switch (mmc_spi_resp_type(cmd)) {
355
356
357
358
359 case MMC_RSP_SPI_R1B:
360
361 while (cp < end && *cp == 0)
362 cp++;
363 if (cp == end)
364 mmc_spi_wait_unbusy(host, r1b_timeout);
365 break;
366
367
368
369
370 case MMC_RSP_SPI_R2:
371
372 if (cp == end) {
373 value = mmc_spi_readbytes(host, 1);
374 if (value < 0)
375 goto done;
376 cp = host->data->status;
377 end = cp+1;
378 }
379 if (bitshift) {
380 rotator = leftover << 8;
381 rotator |= *cp << bitshift;
382 cmd->resp[0] |= (rotator & 0xFF00);
383 } else {
384 cmd->resp[0] |= *cp << 8;
385 }
386 break;
387
388
389 case MMC_RSP_SPI_R3:
390 rotator = leftover << 8;
391 cmd->resp[1] = 0;
392 for (i = 0; i < 4; i++) {
393 cmd->resp[1] <<= 8;
394
395 if (cp == end) {
396 value = mmc_spi_readbytes(host, 1);
397 if (value < 0)
398 goto done;
399 cp = host->data->status;
400 end = cp+1;
401 }
402 if (bitshift) {
403 rotator |= *cp++ << bitshift;
404 cmd->resp[1] |= (rotator >> 8);
405 rotator <<= 8;
406 } else {
407 cmd->resp[1] |= *cp++;
408 }
409 }
410 break;
411
412
413 case MMC_RSP_SPI_R1:
414 break;
415
416 default:
417 dev_dbg(&host->spi->dev, "bad response type %04x\n",
418 mmc_spi_resp_type(cmd));
419 if (value >= 0)
420 value = -EINVAL;
421 goto done;
422 }
423
424 if (value < 0)
425 dev_dbg(&host->spi->dev, "%s: resp %04x %08x\n",
426 tag, cmd->resp[0], cmd->resp[1]);
427
428
429 if (value >= 0 && cs_on)
430 return value;
431done:
432 if (value < 0)
433 cmd->error = value;
434 mmc_cs_off(host);
435 return value;
436}
437
438
439
440
441
442
443
444static int
445mmc_spi_command_send(struct mmc_spi_host *host,
446 struct mmc_request *mrq,
447 struct mmc_command *cmd, int cs_on)
448{
449 struct scratch *data = host->data;
450 u8 *cp = data->status;
451 int status;
452 struct spi_transfer *t;
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467 memset(cp, 0xff, sizeof(data->status));
468
469 cp[1] = 0x40 | cmd->opcode;
470 put_unaligned_be32(cmd->arg, cp+2);
471 cp[6] = crc7_be(0, cp+1, 5) | 0x01;
472 cp += 7;
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509 if (cs_on && (mrq->data->flags & MMC_DATA_READ)) {
510 cp += 2;
511
512 } else {
513 cp += 10;
514 if (cmd->flags & MMC_RSP_SPI_S2)
515 cp++;
516 else if (cmd->flags & MMC_RSP_SPI_B4)
517 cp += 4;
518 else if (cmd->flags & MMC_RSP_BUSY)
519 cp = data->status + sizeof(data->status);
520
521 }
522
523 dev_dbg(&host->spi->dev, " mmc_spi: CMD%d, resp %s\n",
524 cmd->opcode, maptype(cmd));
525
526
527 spi_message_init(&host->m);
528
529 t = &host->t;
530 memset(t, 0, sizeof(*t));
531 t->tx_buf = t->rx_buf = data->status;
532 t->tx_dma = t->rx_dma = host->data_dma;
533 t->len = cp - data->status;
534 t->cs_change = 1;
535 spi_message_add_tail(t, &host->m);
536
537 if (host->dma_dev) {
538 host->m.is_dma_mapped = 1;
539 dma_sync_single_for_device(host->dma_dev,
540 host->data_dma, sizeof(*host->data),
541 DMA_BIDIRECTIONAL);
542 }
543 status = spi_sync_locked(host->spi, &host->m);
544
545 if (host->dma_dev)
546 dma_sync_single_for_cpu(host->dma_dev,
547 host->data_dma, sizeof(*host->data),
548 DMA_BIDIRECTIONAL);
549 if (status < 0) {
550 dev_dbg(&host->spi->dev, " ... write returned %d\n", status);
551 cmd->error = status;
552 return status;
553 }
554
555
556 return mmc_spi_response_get(host, cmd, cs_on);
557}
558
559
560
561
562
563
564
565
566
567
568
569
570static void
571mmc_spi_setup_data_message(
572 struct mmc_spi_host *host,
573 int multiple,
574 enum dma_data_direction direction)
575{
576 struct spi_transfer *t;
577 struct scratch *scratch = host->data;
578 dma_addr_t dma = host->data_dma;
579
580 spi_message_init(&host->m);
581 if (dma)
582 host->m.is_dma_mapped = 1;
583
584
585
586
587 if (direction == DMA_TO_DEVICE) {
588 t = &host->token;
589 memset(t, 0, sizeof(*t));
590 t->len = 1;
591 if (multiple)
592 scratch->data_token = SPI_TOKEN_MULTI_WRITE;
593 else
594 scratch->data_token = SPI_TOKEN_SINGLE;
595 t->tx_buf = &scratch->data_token;
596 if (dma)
597 t->tx_dma = dma + offsetof(struct scratch, data_token);
598 spi_message_add_tail(t, &host->m);
599 }
600
601
602
603
604 t = &host->t;
605 memset(t, 0, sizeof(*t));
606 t->tx_buf = host->ones;
607 t->tx_dma = host->ones_dma;
608
609 spi_message_add_tail(t, &host->m);
610
611 t = &host->crc;
612 memset(t, 0, sizeof(*t));
613 t->len = 2;
614 if (direction == DMA_TO_DEVICE) {
615
616 t->tx_buf = &scratch->crc_val;
617 if (dma)
618 t->tx_dma = dma + offsetof(struct scratch, crc_val);
619 } else {
620 t->tx_buf = host->ones;
621 t->tx_dma = host->ones_dma;
622 t->rx_buf = &scratch->crc_val;
623 if (dma)
624 t->rx_dma = dma + offsetof(struct scratch, crc_val);
625 }
626 spi_message_add_tail(t, &host->m);
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642 if (multiple || direction == DMA_TO_DEVICE) {
643 t = &host->early_status;
644 memset(t, 0, sizeof(*t));
645 t->len = (direction == DMA_TO_DEVICE)
646 ? sizeof(scratch->status)
647 : 1;
648 t->tx_buf = host->ones;
649 t->tx_dma = host->ones_dma;
650 t->rx_buf = scratch->status;
651 if (dma)
652 t->rx_dma = dma + offsetof(struct scratch, status);
653 t->cs_change = 1;
654 spi_message_add_tail(t, &host->m);
655 }
656}
657
658
659
660
661
662
663
664
665
666
667
668
669
670static int
671mmc_spi_writeblock(struct mmc_spi_host *host, struct spi_transfer *t,
672 unsigned long timeout)
673{
674 struct spi_device *spi = host->spi;
675 int status, i;
676 struct scratch *scratch = host->data;
677 u32 pattern;
678
679 if (host->mmc->use_spi_crc)
680 scratch->crc_val = cpu_to_be16(
681 crc_itu_t(0, t->tx_buf, t->len));
682 if (host->dma_dev)
683 dma_sync_single_for_device(host->dma_dev,
684 host->data_dma, sizeof(*scratch),
685 DMA_BIDIRECTIONAL);
686
687 status = spi_sync_locked(spi, &host->m);
688
689 if (status != 0) {
690 dev_dbg(&spi->dev, "write error (%d)\n", status);
691 return status;
692 }
693
694 if (host->dma_dev)
695 dma_sync_single_for_cpu(host->dma_dev,
696 host->data_dma, sizeof(*scratch),
697 DMA_BIDIRECTIONAL);
698
699
700
701
702
703
704
705
706
707
708
709
710
711 pattern = get_unaligned_be32(scratch->status);
712
713
714 pattern |= 0xE0000000;
715
716
717 while (pattern & 0x80000000)
718 pattern <<= 1;
719
720 pattern >>= 27;
721
722 switch (pattern) {
723 case SPI_RESPONSE_ACCEPTED:
724 status = 0;
725 break;
726 case SPI_RESPONSE_CRC_ERR:
727
728 status = -EILSEQ;
729 break;
730 case SPI_RESPONSE_WRITE_ERR:
731
732
733
734 status = -EIO;
735 break;
736 default:
737 status = -EPROTO;
738 break;
739 }
740 if (status != 0) {
741 dev_dbg(&spi->dev, "write error %02x (%d)\n",
742 scratch->status[0], status);
743 return status;
744 }
745
746 t->tx_buf += t->len;
747 if (host->dma_dev)
748 t->tx_dma += t->len;
749
750
751
752
753 for (i = 4; i < sizeof(scratch->status); i++) {
754
755 if (scratch->status[i] & 0x01)
756 return 0;
757 }
758 return mmc_spi_wait_unbusy(host, timeout);
759}
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777static int
778mmc_spi_readblock(struct mmc_spi_host *host, struct spi_transfer *t,
779 unsigned long timeout)
780{
781 struct spi_device *spi = host->spi;
782 int status;
783 struct scratch *scratch = host->data;
784 unsigned int bitshift;
785 u8 leftover;
786
787
788
789
790 status = mmc_spi_readbytes(host, 1);
791 if (status < 0)
792 return status;
793 status = scratch->status[0];
794 if (status == 0xff || status == 0)
795 status = mmc_spi_readtoken(host, timeout);
796
797 if (status < 0) {
798 dev_dbg(&spi->dev, "read error %02x (%d)\n", status, status);
799 return status;
800 }
801
802
803
804
805 bitshift = 7;
806 while (status & 0x80) {
807 status <<= 1;
808 bitshift--;
809 }
810 leftover = status << 1;
811
812 if (host->dma_dev) {
813 dma_sync_single_for_device(host->dma_dev,
814 host->data_dma, sizeof(*scratch),
815 DMA_BIDIRECTIONAL);
816 dma_sync_single_for_device(host->dma_dev,
817 t->rx_dma, t->len,
818 DMA_FROM_DEVICE);
819 }
820
821 status = spi_sync_locked(spi, &host->m);
822
823 if (host->dma_dev) {
824 dma_sync_single_for_cpu(host->dma_dev,
825 host->data_dma, sizeof(*scratch),
826 DMA_BIDIRECTIONAL);
827 dma_sync_single_for_cpu(host->dma_dev,
828 t->rx_dma, t->len,
829 DMA_FROM_DEVICE);
830 }
831
832 if (bitshift) {
833
834
835
836 u8 *cp = t->rx_buf;
837 unsigned int len;
838 unsigned int bitright = 8 - bitshift;
839 u8 temp;
840 for (len = t->len; len; len--) {
841 temp = *cp;
842 *cp++ = leftover | (temp >> bitshift);
843 leftover = temp << bitright;
844 }
845 cp = (u8 *) &scratch->crc_val;
846 temp = *cp;
847 *cp++ = leftover | (temp >> bitshift);
848 leftover = temp << bitright;
849 temp = *cp;
850 *cp = leftover | (temp >> bitshift);
851 }
852
853 if (host->mmc->use_spi_crc) {
854 u16 crc = crc_itu_t(0, t->rx_buf, t->len);
855
856 be16_to_cpus(&scratch->crc_val);
857 if (scratch->crc_val != crc) {
858 dev_dbg(&spi->dev, "read - crc error: crc_val=0x%04x, "
859 "computed=0x%04x len=%d\n",
860 scratch->crc_val, crc, t->len);
861 return -EILSEQ;
862 }
863 }
864
865 t->rx_buf += t->len;
866 if (host->dma_dev)
867 t->rx_dma += t->len;
868
869 return 0;
870}
871
872
873
874
875
876
877static void
878mmc_spi_data_do(struct mmc_spi_host *host, struct mmc_command *cmd,
879 struct mmc_data *data, u32 blk_size)
880{
881 struct spi_device *spi = host->spi;
882 struct device *dma_dev = host->dma_dev;
883 struct spi_transfer *t;
884 enum dma_data_direction direction;
885 struct scatterlist *sg;
886 unsigned n_sg;
887 int multiple = (data->blocks > 1);
888 u32 clock_rate;
889 unsigned long timeout;
890
891 direction = mmc_get_dma_dir(data);
892 mmc_spi_setup_data_message(host, multiple, direction);
893 t = &host->t;
894
895 if (t->speed_hz)
896 clock_rate = t->speed_hz;
897 else
898 clock_rate = spi->max_speed_hz;
899
900 timeout = data->timeout_ns +
901 data->timeout_clks * 1000000 / clock_rate;
902 timeout = usecs_to_jiffies((unsigned int)(timeout / 1000)) + 1;
903
904
905
906
907 for (sg = data->sg, n_sg = data->sg_len; n_sg; n_sg--, sg++) {
908 int status = 0;
909 dma_addr_t dma_addr = 0;
910 void *kmap_addr;
911 unsigned length = sg->length;
912 enum dma_data_direction dir = direction;
913
914
915
916
917 if (dma_dev) {
918
919 if ((sg->offset != 0 || length != PAGE_SIZE)
920 && dir == DMA_FROM_DEVICE)
921 dir = DMA_BIDIRECTIONAL;
922
923 dma_addr = dma_map_page(dma_dev, sg_page(sg), 0,
924 PAGE_SIZE, dir);
925 if (dma_mapping_error(dma_dev, dma_addr)) {
926 data->error = -EFAULT;
927 break;
928 }
929 if (direction == DMA_TO_DEVICE)
930 t->tx_dma = dma_addr + sg->offset;
931 else
932 t->rx_dma = dma_addr + sg->offset;
933 }
934
935
936 kmap_addr = kmap(sg_page(sg));
937 if (direction == DMA_TO_DEVICE)
938 t->tx_buf = kmap_addr + sg->offset;
939 else
940 t->rx_buf = kmap_addr + sg->offset;
941
942
943 while (length) {
944 t->len = min(length, blk_size);
945
946 dev_dbg(&host->spi->dev,
947 " mmc_spi: %s block, %d bytes\n",
948 (direction == DMA_TO_DEVICE)
949 ? "write"
950 : "read",
951 t->len);
952
953 if (direction == DMA_TO_DEVICE)
954 status = mmc_spi_writeblock(host, t, timeout);
955 else
956 status = mmc_spi_readblock(host, t, timeout);
957 if (status < 0)
958 break;
959
960 data->bytes_xfered += t->len;
961 length -= t->len;
962
963 if (!multiple)
964 break;
965 }
966
967
968 if (direction == DMA_FROM_DEVICE)
969 flush_kernel_dcache_page(sg_page(sg));
970 kunmap(sg_page(sg));
971 if (dma_dev)
972 dma_unmap_page(dma_dev, dma_addr, PAGE_SIZE, dir);
973
974 if (status < 0) {
975 data->error = status;
976 dev_dbg(&spi->dev, "%s status %d\n",
977 (direction == DMA_TO_DEVICE)
978 ? "write" : "read",
979 status);
980 break;
981 }
982 }
983
984
985
986
987
988
989
990 if (direction == DMA_TO_DEVICE && multiple) {
991 struct scratch *scratch = host->data;
992 int tmp;
993 const unsigned statlen = sizeof(scratch->status);
994
995 dev_dbg(&spi->dev, " mmc_spi: STOP_TRAN\n");
996
997
998
999
1000
1001
1002 INIT_LIST_HEAD(&host->m.transfers);
1003 list_add(&host->early_status.transfer_list,
1004 &host->m.transfers);
1005
1006 memset(scratch->status, 0xff, statlen);
1007 scratch->status[0] = SPI_TOKEN_STOP_TRAN;
1008
1009 host->early_status.tx_buf = host->early_status.rx_buf;
1010 host->early_status.tx_dma = host->early_status.rx_dma;
1011 host->early_status.len = statlen;
1012
1013 if (host->dma_dev)
1014 dma_sync_single_for_device(host->dma_dev,
1015 host->data_dma, sizeof(*scratch),
1016 DMA_BIDIRECTIONAL);
1017
1018 tmp = spi_sync_locked(spi, &host->m);
1019
1020 if (host->dma_dev)
1021 dma_sync_single_for_cpu(host->dma_dev,
1022 host->data_dma, sizeof(*scratch),
1023 DMA_BIDIRECTIONAL);
1024
1025 if (tmp < 0) {
1026 if (!data->error)
1027 data->error = tmp;
1028 return;
1029 }
1030
1031
1032
1033
1034
1035 for (tmp = 2; tmp < statlen; tmp++) {
1036 if (scratch->status[tmp] != 0)
1037 return;
1038 }
1039 tmp = mmc_spi_wait_unbusy(host, timeout);
1040 if (tmp < 0 && !data->error)
1041 data->error = tmp;
1042 }
1043}
1044
1045
1046
1047
1048
1049
1050
1051static void mmc_spi_request(struct mmc_host *mmc, struct mmc_request *mrq)
1052{
1053 struct mmc_spi_host *host = mmc_priv(mmc);
1054 int status = -EINVAL;
1055 int crc_retry = 5;
1056 struct mmc_command stop;
1057
1058#ifdef DEBUG
1059
1060 {
1061 struct mmc_command *cmd;
1062 int invalid = 0;
1063
1064 cmd = mrq->cmd;
1065 if (!mmc_spi_resp_type(cmd)) {
1066 dev_dbg(&host->spi->dev, "bogus command\n");
1067 cmd->error = -EINVAL;
1068 invalid = 1;
1069 }
1070
1071 cmd = mrq->stop;
1072 if (cmd && !mmc_spi_resp_type(cmd)) {
1073 dev_dbg(&host->spi->dev, "bogus STOP command\n");
1074 cmd->error = -EINVAL;
1075 invalid = 1;
1076 }
1077
1078 if (invalid) {
1079 dump_stack();
1080 mmc_request_done(host->mmc, mrq);
1081 return;
1082 }
1083 }
1084#endif
1085
1086
1087 spi_bus_lock(host->spi->master);
1088
1089crc_recover:
1090
1091 status = mmc_spi_command_send(host, mrq, mrq->cmd, mrq->data != NULL);
1092 if (status == 0 && mrq->data) {
1093 mmc_spi_data_do(host, mrq->cmd, mrq->data, mrq->data->blksz);
1094
1095
1096
1097
1098
1099
1100
1101
1102 if (mrq->data->error == -EILSEQ && crc_retry) {
1103 stop.opcode = MMC_STOP_TRANSMISSION;
1104 stop.arg = 0;
1105 stop.flags = MMC_RSP_SPI_R1B | MMC_RSP_R1B | MMC_CMD_AC;
1106 status = mmc_spi_command_send(host, mrq, &stop, 0);
1107 crc_retry--;
1108 mrq->data->error = 0;
1109 goto crc_recover;
1110 }
1111
1112 if (mrq->stop)
1113 status = mmc_spi_command_send(host, mrq, mrq->stop, 0);
1114 else
1115 mmc_cs_off(host);
1116 }
1117
1118
1119 spi_bus_unlock(host->spi->master);
1120
1121 mmc_request_done(host->mmc, mrq);
1122}
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132static void mmc_spi_initsequence(struct mmc_spi_host *host)
1133{
1134
1135
1136
1137 mmc_spi_wait_unbusy(host, r1b_timeout);
1138 mmc_spi_readbytes(host, 10);
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154 host->spi->mode |= SPI_CS_HIGH;
1155 if (spi_setup(host->spi) != 0) {
1156
1157 dev_warn(&host->spi->dev,
1158 "can't change chip-select polarity\n");
1159 host->spi->mode &= ~SPI_CS_HIGH;
1160 } else {
1161 mmc_spi_readbytes(host, 18);
1162
1163 host->spi->mode &= ~SPI_CS_HIGH;
1164 if (spi_setup(host->spi) != 0) {
1165
1166 dev_err(&host->spi->dev,
1167 "can't restore chip-select polarity\n");
1168 }
1169 }
1170}
1171
1172static char *mmc_powerstring(u8 power_mode)
1173{
1174 switch (power_mode) {
1175 case MMC_POWER_OFF: return "off";
1176 case MMC_POWER_UP: return "up";
1177 case MMC_POWER_ON: return "on";
1178 }
1179 return "?";
1180}
1181
1182static void mmc_spi_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
1183{
1184 struct mmc_spi_host *host = mmc_priv(mmc);
1185
1186 if (host->power_mode != ios->power_mode) {
1187 int canpower;
1188
1189 canpower = host->pdata && host->pdata->setpower;
1190
1191 dev_dbg(&host->spi->dev, "mmc_spi: power %s (%d)%s\n",
1192 mmc_powerstring(ios->power_mode),
1193 ios->vdd,
1194 canpower ? ", can switch" : "");
1195
1196
1197
1198
1199 if (canpower) {
1200 switch (ios->power_mode) {
1201 case MMC_POWER_OFF:
1202 case MMC_POWER_UP:
1203 host->pdata->setpower(&host->spi->dev,
1204 ios->vdd);
1205 if (ios->power_mode == MMC_POWER_UP)
1206 msleep(host->powerup_msecs);
1207 }
1208 }
1209
1210
1211 if (ios->power_mode == MMC_POWER_ON)
1212 mmc_spi_initsequence(host);
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223 if (canpower && ios->power_mode == MMC_POWER_OFF) {
1224 int mres;
1225 u8 nullbyte = 0;
1226
1227 host->spi->mode &= ~(SPI_CPOL|SPI_CPHA);
1228 mres = spi_setup(host->spi);
1229 if (mres < 0)
1230 dev_dbg(&host->spi->dev,
1231 "switch to SPI mode 0 failed\n");
1232
1233 if (spi_write(host->spi, &nullbyte, 1) < 0)
1234 dev_dbg(&host->spi->dev,
1235 "put spi signals to low failed\n");
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246 msleep(10);
1247 if (mres == 0) {
1248 host->spi->mode |= (SPI_CPOL|SPI_CPHA);
1249 mres = spi_setup(host->spi);
1250 if (mres < 0)
1251 dev_dbg(&host->spi->dev,
1252 "switch back to SPI mode 3"
1253 " failed\n");
1254 }
1255 }
1256
1257 host->power_mode = ios->power_mode;
1258 }
1259
1260 if (host->spi->max_speed_hz != ios->clock && ios->clock != 0) {
1261 int status;
1262
1263 host->spi->max_speed_hz = ios->clock;
1264 status = spi_setup(host->spi);
1265 dev_dbg(&host->spi->dev,
1266 "mmc_spi: clock to %d Hz, %d\n",
1267 host->spi->max_speed_hz, status);
1268 }
1269}
1270
1271static const struct mmc_host_ops mmc_spi_ops = {
1272 .request = mmc_spi_request,
1273 .set_ios = mmc_spi_set_ios,
1274 .get_ro = mmc_gpio_get_ro,
1275 .get_cd = mmc_gpio_get_cd,
1276};
1277
1278
1279
1280
1281
1282
1283
1284
1285static irqreturn_t
1286mmc_spi_detect_irq(int irq, void *mmc)
1287{
1288 struct mmc_spi_host *host = mmc_priv(mmc);
1289 u16 delay_msec = max(host->pdata->detect_delay, (u16)100);
1290
1291 mmc_detect_change(mmc, msecs_to_jiffies(delay_msec));
1292 return IRQ_HANDLED;
1293}
1294
1295static int mmc_spi_probe(struct spi_device *spi)
1296{
1297 void *ones;
1298 struct mmc_host *mmc;
1299 struct mmc_spi_host *host;
1300 int status;
1301 bool has_ro = false;
1302
1303
1304
1305
1306 if (spi->master->flags & SPI_MASTER_HALF_DUPLEX)
1307 return -EINVAL;
1308
1309
1310
1311
1312
1313
1314
1315 if (spi->mode != SPI_MODE_3)
1316 spi->mode = SPI_MODE_0;
1317 spi->bits_per_word = 8;
1318
1319 status = spi_setup(spi);
1320 if (status < 0) {
1321 dev_dbg(&spi->dev, "needs SPI mode %02x, %d KHz; %d\n",
1322 spi->mode, spi->max_speed_hz / 1000,
1323 status);
1324 return status;
1325 }
1326
1327
1328
1329
1330
1331
1332
1333 status = -ENOMEM;
1334 ones = kmalloc(MMC_SPI_BLOCKSIZE, GFP_KERNEL);
1335 if (!ones)
1336 goto nomem;
1337 memset(ones, 0xff, MMC_SPI_BLOCKSIZE);
1338
1339 mmc = mmc_alloc_host(sizeof(*host), &spi->dev);
1340 if (!mmc)
1341 goto nomem;
1342
1343 mmc->ops = &mmc_spi_ops;
1344 mmc->max_blk_size = MMC_SPI_BLOCKSIZE;
1345 mmc->max_segs = MMC_SPI_BLOCKSATONCE;
1346 mmc->max_req_size = MMC_SPI_BLOCKSATONCE * MMC_SPI_BLOCKSIZE;
1347 mmc->max_blk_count = MMC_SPI_BLOCKSATONCE;
1348
1349 mmc->caps = MMC_CAP_SPI;
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359 mmc->f_min = 400000;
1360 mmc->f_max = spi->max_speed_hz;
1361
1362 host = mmc_priv(mmc);
1363 host->mmc = mmc;
1364 host->spi = spi;
1365
1366 host->ones = ones;
1367
1368
1369
1370
1371 host->pdata = mmc_spi_get_pdata(spi);
1372 if (host->pdata)
1373 mmc->ocr_avail = host->pdata->ocr_mask;
1374 if (!mmc->ocr_avail) {
1375 dev_warn(&spi->dev, "ASSUMING 3.2-3.4 V slot power\n");
1376 mmc->ocr_avail = MMC_VDD_32_33|MMC_VDD_33_34;
1377 }
1378 if (host->pdata && host->pdata->setpower) {
1379 host->powerup_msecs = host->pdata->powerup_msecs;
1380 if (!host->powerup_msecs || host->powerup_msecs > 250)
1381 host->powerup_msecs = 250;
1382 }
1383
1384 dev_set_drvdata(&spi->dev, mmc);
1385
1386
1387 host->data = kmalloc(sizeof(*host->data), GFP_KERNEL);
1388 if (!host->data)
1389 goto fail_nobuf1;
1390
1391 if (spi->master->dev.parent->dma_mask) {
1392 struct device *dev = spi->master->dev.parent;
1393
1394 host->dma_dev = dev;
1395 host->ones_dma = dma_map_single(dev, ones,
1396 MMC_SPI_BLOCKSIZE, DMA_TO_DEVICE);
1397 if (dma_mapping_error(dev, host->ones_dma))
1398 goto fail_ones_dma;
1399 host->data_dma = dma_map_single(dev, host->data,
1400 sizeof(*host->data), DMA_BIDIRECTIONAL);
1401 if (dma_mapping_error(dev, host->data_dma))
1402 goto fail_data_dma;
1403
1404 dma_sync_single_for_cpu(host->dma_dev,
1405 host->data_dma, sizeof(*host->data),
1406 DMA_BIDIRECTIONAL);
1407 }
1408
1409
1410 spi_message_init(&host->readback);
1411 host->readback.is_dma_mapped = (host->dma_dev != NULL);
1412
1413 spi_message_add_tail(&host->status, &host->readback);
1414 host->status.tx_buf = host->ones;
1415 host->status.tx_dma = host->ones_dma;
1416 host->status.rx_buf = &host->data->status;
1417 host->status.rx_dma = host->data_dma + offsetof(struct scratch, status);
1418 host->status.cs_change = 1;
1419
1420
1421 if (host->pdata && host->pdata->init) {
1422 status = host->pdata->init(&spi->dev, mmc_spi_detect_irq, mmc);
1423 if (status != 0)
1424 goto fail_glue_init;
1425 }
1426
1427
1428 if (host->pdata) {
1429 mmc->caps |= host->pdata->caps;
1430 mmc->caps2 |= host->pdata->caps2;
1431 }
1432
1433 status = mmc_add_host(mmc);
1434 if (status != 0)
1435 goto fail_add_host;
1436
1437 if (host->pdata && host->pdata->flags & MMC_SPI_USE_CD_GPIO) {
1438 status = mmc_gpio_request_cd(mmc, host->pdata->cd_gpio,
1439 host->pdata->cd_debounce);
1440 if (status != 0)
1441 goto fail_add_host;
1442
1443
1444
1445
1446
1447 mmc->caps &= ~MMC_CAP_NEEDS_POLL;
1448 mmc_gpiod_request_cd_irq(mmc);
1449 }
1450
1451 if (host->pdata && host->pdata->flags & MMC_SPI_USE_RO_GPIO) {
1452 has_ro = true;
1453 status = mmc_gpio_request_ro(mmc, host->pdata->ro_gpio);
1454 if (status != 0)
1455 goto fail_add_host;
1456 }
1457
1458 dev_info(&spi->dev, "SD/MMC host %s%s%s%s%s\n",
1459 dev_name(&mmc->class_dev),
1460 host->dma_dev ? "" : ", no DMA",
1461 has_ro ? "" : ", no WP",
1462 (host->pdata && host->pdata->setpower)
1463 ? "" : ", no poweroff",
1464 (mmc->caps & MMC_CAP_NEEDS_POLL)
1465 ? ", cd polling" : "");
1466 return 0;
1467
1468fail_add_host:
1469 mmc_remove_host (mmc);
1470fail_glue_init:
1471 if (host->dma_dev)
1472 dma_unmap_single(host->dma_dev, host->data_dma,
1473 sizeof(*host->data), DMA_BIDIRECTIONAL);
1474fail_data_dma:
1475 if (host->dma_dev)
1476 dma_unmap_single(host->dma_dev, host->ones_dma,
1477 MMC_SPI_BLOCKSIZE, DMA_TO_DEVICE);
1478fail_ones_dma:
1479 kfree(host->data);
1480
1481fail_nobuf1:
1482 mmc_free_host(mmc);
1483 mmc_spi_put_pdata(spi);
1484 dev_set_drvdata(&spi->dev, NULL);
1485
1486nomem:
1487 kfree(ones);
1488 return status;
1489}
1490
1491
1492static int mmc_spi_remove(struct spi_device *spi)
1493{
1494 struct mmc_host *mmc = dev_get_drvdata(&spi->dev);
1495 struct mmc_spi_host *host;
1496
1497 if (mmc) {
1498 host = mmc_priv(mmc);
1499
1500
1501 if (host->pdata && host->pdata->exit)
1502 host->pdata->exit(&spi->dev, mmc);
1503
1504 mmc_remove_host(mmc);
1505
1506 if (host->dma_dev) {
1507 dma_unmap_single(host->dma_dev, host->ones_dma,
1508 MMC_SPI_BLOCKSIZE, DMA_TO_DEVICE);
1509 dma_unmap_single(host->dma_dev, host->data_dma,
1510 sizeof(*host->data), DMA_BIDIRECTIONAL);
1511 }
1512
1513 kfree(host->data);
1514 kfree(host->ones);
1515
1516 spi->max_speed_hz = mmc->f_max;
1517 mmc_free_host(mmc);
1518 mmc_spi_put_pdata(spi);
1519 dev_set_drvdata(&spi->dev, NULL);
1520 }
1521 return 0;
1522}
1523
1524static const struct of_device_id mmc_spi_of_match_table[] = {
1525 { .compatible = "mmc-spi-slot", },
1526 {},
1527};
1528MODULE_DEVICE_TABLE(of, mmc_spi_of_match_table);
1529
1530static struct spi_driver mmc_spi_driver = {
1531 .driver = {
1532 .name = "mmc_spi",
1533 .of_match_table = mmc_spi_of_match_table,
1534 },
1535 .probe = mmc_spi_probe,
1536 .remove = mmc_spi_remove,
1537};
1538
1539module_spi_driver(mmc_spi_driver);
1540
1541MODULE_AUTHOR("Mike Lavender, David Brownell, "
1542 "Hans-Peter Nilsson, Jan Nikitenko");
1543MODULE_DESCRIPTION("SPI SD/MMC host driver");
1544MODULE_LICENSE("GPL");
1545MODULE_ALIAS("spi:mmc_spi");
1546