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