Merge tag 'ktest-v5.13' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt...
[linux-2.6-microblaze.git] / drivers / mmc / host / cavium.c
1 /*
2  * Shared part of driver for MMC/SDHC controller on Cavium OCTEON and
3  * ThunderX SOCs.
4  *
5  * This file is subject to the terms and conditions of the GNU General Public
6  * License.  See the file "COPYING" in the main directory of this archive
7  * for more details.
8  *
9  * Copyright (C) 2012-2017 Cavium Inc.
10  * Authors:
11  *   David Daney <david.daney@cavium.com>
12  *   Peter Swain <pswain@cavium.com>
13  *   Steven J. Hill <steven.hill@cavium.com>
14  *   Jan Glauber <jglauber@cavium.com>
15  */
16 #include <linux/bitfield.h>
17 #include <linux/delay.h>
18 #include <linux/dma-direction.h>
19 #include <linux/dma-mapping.h>
20 #include <linux/gpio/consumer.h>
21 #include <linux/interrupt.h>
22 #include <linux/mmc/mmc.h>
23 #include <linux/mmc/slot-gpio.h>
24 #include <linux/module.h>
25 #include <linux/regulator/consumer.h>
26 #include <linux/scatterlist.h>
27 #include <linux/time.h>
28
29 #include "cavium.h"
30
31 const char *cvm_mmc_irq_names[] = {
32         "MMC Buffer",
33         "MMC Command",
34         "MMC DMA",
35         "MMC Command Error",
36         "MMC DMA Error",
37         "MMC Switch",
38         "MMC Switch Error",
39         "MMC DMA int Fifo",
40         "MMC DMA int",
41 };
42
43 /*
44  * The Cavium MMC host hardware assumes that all commands have fixed
45  * command and response types.  These are correct if MMC devices are
46  * being used.  However, non-MMC devices like SD use command and
47  * response types that are unexpected by the host hardware.
48  *
49  * The command and response types can be overridden by supplying an
50  * XOR value that is applied to the type.  We calculate the XOR value
51  * from the values in this table and the flags passed from the MMC
52  * core.
53  */
54 static struct cvm_mmc_cr_type cvm_mmc_cr_types[] = {
55         {0, 0},         /* CMD0 */
56         {0, 3},         /* CMD1 */
57         {0, 2},         /* CMD2 */
58         {0, 1},         /* CMD3 */
59         {0, 0},         /* CMD4 */
60         {0, 1},         /* CMD5 */
61         {0, 1},         /* CMD6 */
62         {0, 1},         /* CMD7 */
63         {1, 1},         /* CMD8 */
64         {0, 2},         /* CMD9 */
65         {0, 2},         /* CMD10 */
66         {1, 1},         /* CMD11 */
67         {0, 1},         /* CMD12 */
68         {0, 1},         /* CMD13 */
69         {1, 1},         /* CMD14 */
70         {0, 0},         /* CMD15 */
71         {0, 1},         /* CMD16 */
72         {1, 1},         /* CMD17 */
73         {1, 1},         /* CMD18 */
74         {3, 1},         /* CMD19 */
75         {2, 1},         /* CMD20 */
76         {0, 0},         /* CMD21 */
77         {0, 0},         /* CMD22 */
78         {0, 1},         /* CMD23 */
79         {2, 1},         /* CMD24 */
80         {2, 1},         /* CMD25 */
81         {2, 1},         /* CMD26 */
82         {2, 1},         /* CMD27 */
83         {0, 1},         /* CMD28 */
84         {0, 1},         /* CMD29 */
85         {1, 1},         /* CMD30 */
86         {1, 1},         /* CMD31 */
87         {0, 0},         /* CMD32 */
88         {0, 0},         /* CMD33 */
89         {0, 0},         /* CMD34 */
90         {0, 1},         /* CMD35 */
91         {0, 1},         /* CMD36 */
92         {0, 0},         /* CMD37 */
93         {0, 1},         /* CMD38 */
94         {0, 4},         /* CMD39 */
95         {0, 5},         /* CMD40 */
96         {0, 0},         /* CMD41 */
97         {2, 1},         /* CMD42 */
98         {0, 0},         /* CMD43 */
99         {0, 0},         /* CMD44 */
100         {0, 0},         /* CMD45 */
101         {0, 0},         /* CMD46 */
102         {0, 0},         /* CMD47 */
103         {0, 0},         /* CMD48 */
104         {0, 0},         /* CMD49 */
105         {0, 0},         /* CMD50 */
106         {0, 0},         /* CMD51 */
107         {0, 0},         /* CMD52 */
108         {0, 0},         /* CMD53 */
109         {0, 0},         /* CMD54 */
110         {0, 1},         /* CMD55 */
111         {0xff, 0xff},   /* CMD56 */
112         {0, 0},         /* CMD57 */
113         {0, 0},         /* CMD58 */
114         {0, 0},         /* CMD59 */
115         {0, 0},         /* CMD60 */
116         {0, 0},         /* CMD61 */
117         {0, 0},         /* CMD62 */
118         {0, 0}          /* CMD63 */
119 };
120
121 static struct cvm_mmc_cr_mods cvm_mmc_get_cr_mods(struct mmc_command *cmd)
122 {
123         struct cvm_mmc_cr_type *cr;
124         u8 hardware_ctype, hardware_rtype;
125         u8 desired_ctype = 0, desired_rtype = 0;
126         struct cvm_mmc_cr_mods r;
127
128         cr = cvm_mmc_cr_types + (cmd->opcode & 0x3f);
129         hardware_ctype = cr->ctype;
130         hardware_rtype = cr->rtype;
131         if (cmd->opcode == MMC_GEN_CMD)
132                 hardware_ctype = (cmd->arg & 1) ? 1 : 2;
133
134         switch (mmc_cmd_type(cmd)) {
135         case MMC_CMD_ADTC:
136                 desired_ctype = (cmd->data->flags & MMC_DATA_WRITE) ? 2 : 1;
137                 break;
138         case MMC_CMD_AC:
139         case MMC_CMD_BC:
140         case MMC_CMD_BCR:
141                 desired_ctype = 0;
142                 break;
143         }
144
145         switch (mmc_resp_type(cmd)) {
146         case MMC_RSP_NONE:
147                 desired_rtype = 0;
148                 break;
149         case MMC_RSP_R1:/* MMC_RSP_R5, MMC_RSP_R6, MMC_RSP_R7 */
150         case MMC_RSP_R1B:
151                 desired_rtype = 1;
152                 break;
153         case MMC_RSP_R2:
154                 desired_rtype = 2;
155                 break;
156         case MMC_RSP_R3: /* MMC_RSP_R4 */
157                 desired_rtype = 3;
158                 break;
159         }
160         r.ctype_xor = desired_ctype ^ hardware_ctype;
161         r.rtype_xor = desired_rtype ^ hardware_rtype;
162         return r;
163 }
164
165 static void check_switch_errors(struct cvm_mmc_host *host)
166 {
167         u64 emm_switch;
168
169         emm_switch = readq(host->base + MIO_EMM_SWITCH(host));
170         if (emm_switch & MIO_EMM_SWITCH_ERR0)
171                 dev_err(host->dev, "Switch power class error\n");
172         if (emm_switch & MIO_EMM_SWITCH_ERR1)
173                 dev_err(host->dev, "Switch hs timing error\n");
174         if (emm_switch & MIO_EMM_SWITCH_ERR2)
175                 dev_err(host->dev, "Switch bus width error\n");
176 }
177
178 static void clear_bus_id(u64 *reg)
179 {
180         u64 bus_id_mask = GENMASK_ULL(61, 60);
181
182         *reg &= ~bus_id_mask;
183 }
184
185 static void set_bus_id(u64 *reg, int bus_id)
186 {
187         clear_bus_id(reg);
188         *reg |= FIELD_PREP(GENMASK(61, 60), bus_id);
189 }
190
191 static int get_bus_id(u64 reg)
192 {
193         return FIELD_GET(GENMASK_ULL(61, 60), reg);
194 }
195
196 /*
197  * We never set the switch_exe bit since that would interfere
198  * with the commands send by the MMC core.
199  */
200 static void do_switch(struct cvm_mmc_host *host, u64 emm_switch)
201 {
202         int retries = 100;
203         u64 rsp_sts;
204         int bus_id;
205
206         /*
207          * Modes setting only taken from slot 0. Work around that hardware
208          * issue by first switching to slot 0.
209          */
210         bus_id = get_bus_id(emm_switch);
211         clear_bus_id(&emm_switch);
212         writeq(emm_switch, host->base + MIO_EMM_SWITCH(host));
213
214         set_bus_id(&emm_switch, bus_id);
215         writeq(emm_switch, host->base + MIO_EMM_SWITCH(host));
216
217         /* wait for the switch to finish */
218         do {
219                 rsp_sts = readq(host->base + MIO_EMM_RSP_STS(host));
220                 if (!(rsp_sts & MIO_EMM_RSP_STS_SWITCH_VAL))
221                         break;
222                 udelay(10);
223         } while (--retries);
224
225         check_switch_errors(host);
226 }
227
228 static bool switch_val_changed(struct cvm_mmc_slot *slot, u64 new_val)
229 {
230         /* Match BUS_ID, HS_TIMING, BUS_WIDTH, POWER_CLASS, CLK_HI, CLK_LO */
231         u64 match = 0x3001070fffffffffull;
232
233         return (slot->cached_switch & match) != (new_val & match);
234 }
235
236 static void set_wdog(struct cvm_mmc_slot *slot, unsigned int ns)
237 {
238         u64 timeout;
239
240         if (!slot->clock)
241                 return;
242
243         if (ns)
244                 timeout = (slot->clock * ns) / NSEC_PER_SEC;
245         else
246                 timeout = (slot->clock * 850ull) / 1000ull;
247         writeq(timeout, slot->host->base + MIO_EMM_WDOG(slot->host));
248 }
249
250 static void cvm_mmc_reset_bus(struct cvm_mmc_slot *slot)
251 {
252         struct cvm_mmc_host *host = slot->host;
253         u64 emm_switch, wdog;
254
255         emm_switch = readq(slot->host->base + MIO_EMM_SWITCH(host));
256         emm_switch &= ~(MIO_EMM_SWITCH_EXE | MIO_EMM_SWITCH_ERR0 |
257                         MIO_EMM_SWITCH_ERR1 | MIO_EMM_SWITCH_ERR2);
258         set_bus_id(&emm_switch, slot->bus_id);
259
260         wdog = readq(slot->host->base + MIO_EMM_WDOG(host));
261         do_switch(slot->host, emm_switch);
262
263         slot->cached_switch = emm_switch;
264
265         msleep(20);
266
267         writeq(wdog, slot->host->base + MIO_EMM_WDOG(host));
268 }
269
270 /* Switch to another slot if needed */
271 static void cvm_mmc_switch_to(struct cvm_mmc_slot *slot)
272 {
273         struct cvm_mmc_host *host = slot->host;
274         struct cvm_mmc_slot *old_slot;
275         u64 emm_sample, emm_switch;
276
277         if (slot->bus_id == host->last_slot)
278                 return;
279
280         if (host->last_slot >= 0 && host->slot[host->last_slot]) {
281                 old_slot = host->slot[host->last_slot];
282                 old_slot->cached_switch = readq(host->base + MIO_EMM_SWITCH(host));
283                 old_slot->cached_rca = readq(host->base + MIO_EMM_RCA(host));
284         }
285
286         writeq(slot->cached_rca, host->base + MIO_EMM_RCA(host));
287         emm_switch = slot->cached_switch;
288         set_bus_id(&emm_switch, slot->bus_id);
289         do_switch(host, emm_switch);
290
291         emm_sample = FIELD_PREP(MIO_EMM_SAMPLE_CMD_CNT, slot->cmd_cnt) |
292                      FIELD_PREP(MIO_EMM_SAMPLE_DAT_CNT, slot->dat_cnt);
293         writeq(emm_sample, host->base + MIO_EMM_SAMPLE(host));
294
295         host->last_slot = slot->bus_id;
296 }
297
298 static void do_read(struct cvm_mmc_host *host, struct mmc_request *req,
299                     u64 dbuf)
300 {
301         struct sg_mapping_iter *smi = &host->smi;
302         int data_len = req->data->blocks * req->data->blksz;
303         int bytes_xfered, shift = -1;
304         u64 dat = 0;
305
306         /* Auto inc from offset zero */
307         writeq((0x10000 | (dbuf << 6)), host->base + MIO_EMM_BUF_IDX(host));
308
309         for (bytes_xfered = 0; bytes_xfered < data_len;) {
310                 if (smi->consumed >= smi->length) {
311                         if (!sg_miter_next(smi))
312                                 break;
313                         smi->consumed = 0;
314                 }
315
316                 if (shift < 0) {
317                         dat = readq(host->base + MIO_EMM_BUF_DAT(host));
318                         shift = 56;
319                 }
320
321                 while (smi->consumed < smi->length && shift >= 0) {
322                         ((u8 *)smi->addr)[smi->consumed] = (dat >> shift) & 0xff;
323                         bytes_xfered++;
324                         smi->consumed++;
325                         shift -= 8;
326                 }
327         }
328
329         sg_miter_stop(smi);
330         req->data->bytes_xfered = bytes_xfered;
331         req->data->error = 0;
332 }
333
334 static void do_write(struct mmc_request *req)
335 {
336         req->data->bytes_xfered = req->data->blocks * req->data->blksz;
337         req->data->error = 0;
338 }
339
340 static void set_cmd_response(struct cvm_mmc_host *host, struct mmc_request *req,
341                              u64 rsp_sts)
342 {
343         u64 rsp_hi, rsp_lo;
344
345         if (!(rsp_sts & MIO_EMM_RSP_STS_RSP_VAL))
346                 return;
347
348         rsp_lo = readq(host->base + MIO_EMM_RSP_LO(host));
349
350         switch (FIELD_GET(MIO_EMM_RSP_STS_RSP_TYPE, rsp_sts)) {
351         case 1:
352         case 3:
353                 req->cmd->resp[0] = (rsp_lo >> 8) & 0xffffffff;
354                 req->cmd->resp[1] = 0;
355                 req->cmd->resp[2] = 0;
356                 req->cmd->resp[3] = 0;
357                 break;
358         case 2:
359                 req->cmd->resp[3] = rsp_lo & 0xffffffff;
360                 req->cmd->resp[2] = (rsp_lo >> 32) & 0xffffffff;
361                 rsp_hi = readq(host->base + MIO_EMM_RSP_HI(host));
362                 req->cmd->resp[1] = rsp_hi & 0xffffffff;
363                 req->cmd->resp[0] = (rsp_hi >> 32) & 0xffffffff;
364                 break;
365         }
366 }
367
368 static int get_dma_dir(struct mmc_data *data)
369 {
370         return (data->flags & MMC_DATA_WRITE) ? DMA_TO_DEVICE : DMA_FROM_DEVICE;
371 }
372
373 static int finish_dma_single(struct cvm_mmc_host *host, struct mmc_data *data)
374 {
375         data->bytes_xfered = data->blocks * data->blksz;
376         data->error = 0;
377         dma_unmap_sg(host->dev, data->sg, data->sg_len, get_dma_dir(data));
378         return 1;
379 }
380
381 static int finish_dma_sg(struct cvm_mmc_host *host, struct mmc_data *data)
382 {
383         u64 fifo_cfg;
384         int count;
385
386         /* Check if there are any pending requests left */
387         fifo_cfg = readq(host->dma_base + MIO_EMM_DMA_FIFO_CFG(host));
388         count = FIELD_GET(MIO_EMM_DMA_FIFO_CFG_COUNT, fifo_cfg);
389         if (count)
390                 dev_err(host->dev, "%u requests still pending\n", count);
391
392         data->bytes_xfered = data->blocks * data->blksz;
393         data->error = 0;
394
395         /* Clear and disable FIFO */
396         writeq(BIT_ULL(16), host->dma_base + MIO_EMM_DMA_FIFO_CFG(host));
397         dma_unmap_sg(host->dev, data->sg, data->sg_len, get_dma_dir(data));
398         return 1;
399 }
400
401 static int finish_dma(struct cvm_mmc_host *host, struct mmc_data *data)
402 {
403         if (host->use_sg && data->sg_len > 1)
404                 return finish_dma_sg(host, data);
405         else
406                 return finish_dma_single(host, data);
407 }
408
409 static int check_status(u64 rsp_sts)
410 {
411         if (rsp_sts & MIO_EMM_RSP_STS_RSP_BAD_STS ||
412             rsp_sts & MIO_EMM_RSP_STS_RSP_CRC_ERR ||
413             rsp_sts & MIO_EMM_RSP_STS_BLK_CRC_ERR)
414                 return -EILSEQ;
415         if (rsp_sts & MIO_EMM_RSP_STS_RSP_TIMEOUT ||
416             rsp_sts & MIO_EMM_RSP_STS_BLK_TIMEOUT)
417                 return -ETIMEDOUT;
418         if (rsp_sts & MIO_EMM_RSP_STS_DBUF_ERR)
419                 return -EIO;
420         return 0;
421 }
422
423 /* Try to clean up failed DMA. */
424 static void cleanup_dma(struct cvm_mmc_host *host, u64 rsp_sts)
425 {
426         u64 emm_dma;
427
428         emm_dma = readq(host->base + MIO_EMM_DMA(host));
429         emm_dma |= FIELD_PREP(MIO_EMM_DMA_VAL, 1) |
430                    FIELD_PREP(MIO_EMM_DMA_DAT_NULL, 1);
431         set_bus_id(&emm_dma, get_bus_id(rsp_sts));
432         writeq(emm_dma, host->base + MIO_EMM_DMA(host));
433 }
434
435 irqreturn_t cvm_mmc_interrupt(int irq, void *dev_id)
436 {
437         struct cvm_mmc_host *host = dev_id;
438         struct mmc_request *req;
439         u64 emm_int, rsp_sts;
440         bool host_done;
441
442         if (host->need_irq_handler_lock)
443                 spin_lock(&host->irq_handler_lock);
444         else
445                 __acquire(&host->irq_handler_lock);
446
447         /* Clear interrupt bits (write 1 clears ). */
448         emm_int = readq(host->base + MIO_EMM_INT(host));
449         writeq(emm_int, host->base + MIO_EMM_INT(host));
450
451         if (emm_int & MIO_EMM_INT_SWITCH_ERR)
452                 check_switch_errors(host);
453
454         req = host->current_req;
455         if (!req)
456                 goto out;
457
458         rsp_sts = readq(host->base + MIO_EMM_RSP_STS(host));
459         /*
460          * dma_val set means DMA is still in progress. Don't touch
461          * the request and wait for the interrupt indicating that
462          * the DMA is finished.
463          */
464         if ((rsp_sts & MIO_EMM_RSP_STS_DMA_VAL) && host->dma_active)
465                 goto out;
466
467         if (!host->dma_active && req->data &&
468             (emm_int & MIO_EMM_INT_BUF_DONE)) {
469                 unsigned int type = (rsp_sts >> 7) & 3;
470
471                 if (type == 1)
472                         do_read(host, req, rsp_sts & MIO_EMM_RSP_STS_DBUF);
473                 else if (type == 2)
474                         do_write(req);
475         }
476
477         host_done = emm_int & MIO_EMM_INT_CMD_DONE ||
478                     emm_int & MIO_EMM_INT_DMA_DONE ||
479                     emm_int & MIO_EMM_INT_CMD_ERR  ||
480                     emm_int & MIO_EMM_INT_DMA_ERR;
481
482         if (!(host_done && req->done))
483                 goto no_req_done;
484
485         req->cmd->error = check_status(rsp_sts);
486
487         if (host->dma_active && req->data)
488                 if (!finish_dma(host, req->data))
489                         goto no_req_done;
490
491         set_cmd_response(host, req, rsp_sts);
492         if ((emm_int & MIO_EMM_INT_DMA_ERR) &&
493             (rsp_sts & MIO_EMM_RSP_STS_DMA_PEND))
494                 cleanup_dma(host, rsp_sts);
495
496         host->current_req = NULL;
497         req->done(req);
498
499 no_req_done:
500         if (host->dmar_fixup_done)
501                 host->dmar_fixup_done(host);
502         if (host_done)
503                 host->release_bus(host);
504 out:
505         if (host->need_irq_handler_lock)
506                 spin_unlock(&host->irq_handler_lock);
507         else
508                 __release(&host->irq_handler_lock);
509         return IRQ_RETVAL(emm_int != 0);
510 }
511
512 /*
513  * Program DMA_CFG and if needed DMA_ADR.
514  * Returns 0 on error, DMA address otherwise.
515  */
516 static u64 prepare_dma_single(struct cvm_mmc_host *host, struct mmc_data *data)
517 {
518         u64 dma_cfg, addr;
519         int count, rw;
520
521         count = dma_map_sg(host->dev, data->sg, data->sg_len,
522                            get_dma_dir(data));
523         if (!count)
524                 return 0;
525
526         rw = (data->flags & MMC_DATA_WRITE) ? 1 : 0;
527         dma_cfg = FIELD_PREP(MIO_EMM_DMA_CFG_EN, 1) |
528                   FIELD_PREP(MIO_EMM_DMA_CFG_RW, rw);
529 #ifdef __LITTLE_ENDIAN
530         dma_cfg |= FIELD_PREP(MIO_EMM_DMA_CFG_ENDIAN, 1);
531 #endif
532         dma_cfg |= FIELD_PREP(MIO_EMM_DMA_CFG_SIZE,
533                               (sg_dma_len(&data->sg[0]) / 8) - 1);
534
535         addr = sg_dma_address(&data->sg[0]);
536         if (!host->big_dma_addr)
537                 dma_cfg |= FIELD_PREP(MIO_EMM_DMA_CFG_ADR, addr);
538         writeq(dma_cfg, host->dma_base + MIO_EMM_DMA_CFG(host));
539
540         pr_debug("[%s] sg_dma_len: %u  total sg_elem: %d\n",
541                  (rw) ? "W" : "R", sg_dma_len(&data->sg[0]), count);
542
543         if (host->big_dma_addr)
544                 writeq(addr, host->dma_base + MIO_EMM_DMA_ADR(host));
545         return addr;
546 }
547
548 /*
549  * Queue complete sg list into the FIFO.
550  * Returns 0 on error, 1 otherwise.
551  */
552 static u64 prepare_dma_sg(struct cvm_mmc_host *host, struct mmc_data *data)
553 {
554         struct scatterlist *sg;
555         u64 fifo_cmd, addr;
556         int count, i, rw;
557
558         count = dma_map_sg(host->dev, data->sg, data->sg_len,
559                            get_dma_dir(data));
560         if (!count)
561                 return 0;
562         if (count > 16)
563                 goto error;
564
565         /* Enable FIFO by removing CLR bit */
566         writeq(0, host->dma_base + MIO_EMM_DMA_FIFO_CFG(host));
567
568         for_each_sg(data->sg, sg, count, i) {
569                 /* Program DMA address */
570                 addr = sg_dma_address(sg);
571                 if (addr & 7)
572                         goto error;
573                 writeq(addr, host->dma_base + MIO_EMM_DMA_FIFO_ADR(host));
574
575                 /*
576                  * If we have scatter-gather support we also have an extra
577                  * register for the DMA addr, so no need to check
578                  * host->big_dma_addr here.
579                  */
580                 rw = (data->flags & MMC_DATA_WRITE) ? 1 : 0;
581                 fifo_cmd = FIELD_PREP(MIO_EMM_DMA_FIFO_CMD_RW, rw);
582
583                 /* enable interrupts on the last element */
584                 fifo_cmd |= FIELD_PREP(MIO_EMM_DMA_FIFO_CMD_INTDIS,
585                                        (i + 1 == count) ? 0 : 1);
586
587 #ifdef __LITTLE_ENDIAN
588                 fifo_cmd |= FIELD_PREP(MIO_EMM_DMA_FIFO_CMD_ENDIAN, 1);
589 #endif
590                 fifo_cmd |= FIELD_PREP(MIO_EMM_DMA_FIFO_CMD_SIZE,
591                                        sg_dma_len(sg) / 8 - 1);
592                 /*
593                  * The write copies the address and the command to the FIFO
594                  * and increments the FIFO's COUNT field.
595                  */
596                 writeq(fifo_cmd, host->dma_base + MIO_EMM_DMA_FIFO_CMD(host));
597                 pr_debug("[%s] sg_dma_len: %u  sg_elem: %d/%d\n",
598                          (rw) ? "W" : "R", sg_dma_len(sg), i, count);
599         }
600
601         /*
602          * In difference to prepare_dma_single we don't return the
603          * address here, as it would not make sense for scatter-gather.
604          * The dma fixup is only required on models that don't support
605          * scatter-gather, so that is not a problem.
606          */
607         return 1;
608
609 error:
610         WARN_ON_ONCE(1);
611         dma_unmap_sg(host->dev, data->sg, data->sg_len, get_dma_dir(data));
612         /* Disable FIFO */
613         writeq(BIT_ULL(16), host->dma_base + MIO_EMM_DMA_FIFO_CFG(host));
614         return 0;
615 }
616
617 static u64 prepare_dma(struct cvm_mmc_host *host, struct mmc_data *data)
618 {
619         if (host->use_sg && data->sg_len > 1)
620                 return prepare_dma_sg(host, data);
621         else
622                 return prepare_dma_single(host, data);
623 }
624
625 static u64 prepare_ext_dma(struct mmc_host *mmc, struct mmc_request *mrq)
626 {
627         struct cvm_mmc_slot *slot = mmc_priv(mmc);
628         u64 emm_dma;
629
630         emm_dma = FIELD_PREP(MIO_EMM_DMA_VAL, 1) |
631                   FIELD_PREP(MIO_EMM_DMA_SECTOR,
632                              mmc_card_is_blockaddr(mmc->card) ? 1 : 0) |
633                   FIELD_PREP(MIO_EMM_DMA_RW,
634                              (mrq->data->flags & MMC_DATA_WRITE) ? 1 : 0) |
635                   FIELD_PREP(MIO_EMM_DMA_BLOCK_CNT, mrq->data->blocks) |
636                   FIELD_PREP(MIO_EMM_DMA_CARD_ADDR, mrq->cmd->arg);
637         set_bus_id(&emm_dma, slot->bus_id);
638
639         if (mmc_card_mmc(mmc->card) || (mmc_card_sd(mmc->card) &&
640             (mmc->card->scr.cmds & SD_SCR_CMD23_SUPPORT)))
641                 emm_dma |= FIELD_PREP(MIO_EMM_DMA_MULTI, 1);
642
643         pr_debug("[%s] blocks: %u  multi: %d\n",
644                 (emm_dma & MIO_EMM_DMA_RW) ? "W" : "R",
645                  mrq->data->blocks, (emm_dma & MIO_EMM_DMA_MULTI) ? 1 : 0);
646         return emm_dma;
647 }
648
649 static void cvm_mmc_dma_request(struct mmc_host *mmc,
650                                 struct mmc_request *mrq)
651 {
652         struct cvm_mmc_slot *slot = mmc_priv(mmc);
653         struct cvm_mmc_host *host = slot->host;
654         struct mmc_data *data;
655         u64 emm_dma, addr;
656
657         if (!mrq->data || !mrq->data->sg || !mrq->data->sg_len ||
658             !mrq->stop || mrq->stop->opcode != MMC_STOP_TRANSMISSION) {
659                 dev_err(&mmc->card->dev, "Error: %s no data\n", __func__);
660                 goto error;
661         }
662
663         cvm_mmc_switch_to(slot);
664
665         data = mrq->data;
666         pr_debug("DMA request  blocks: %d  block_size: %d  total_size: %d\n",
667                  data->blocks, data->blksz, data->blocks * data->blksz);
668         if (data->timeout_ns)
669                 set_wdog(slot, data->timeout_ns);
670
671         WARN_ON(host->current_req);
672         host->current_req = mrq;
673
674         emm_dma = prepare_ext_dma(mmc, mrq);
675         addr = prepare_dma(host, data);
676         if (!addr) {
677                 dev_err(host->dev, "prepare_dma failed\n");
678                 goto error;
679         }
680
681         host->dma_active = true;
682         host->int_enable(host, MIO_EMM_INT_CMD_ERR | MIO_EMM_INT_DMA_DONE |
683                          MIO_EMM_INT_DMA_ERR);
684
685         if (host->dmar_fixup)
686                 host->dmar_fixup(host, mrq->cmd, data, addr);
687
688         /*
689          * If we have a valid SD card in the slot, we set the response
690          * bit mask to check for CRC errors and timeouts only.
691          * Otherwise, use the default power reset value.
692          */
693         if (mmc_card_sd(mmc->card))
694                 writeq(0x00b00000ull, host->base + MIO_EMM_STS_MASK(host));
695         else
696                 writeq(0xe4390080ull, host->base + MIO_EMM_STS_MASK(host));
697         writeq(emm_dma, host->base + MIO_EMM_DMA(host));
698         return;
699
700 error:
701         mrq->cmd->error = -EINVAL;
702         if (mrq->done)
703                 mrq->done(mrq);
704         host->release_bus(host);
705 }
706
707 static void do_read_request(struct cvm_mmc_host *host, struct mmc_request *mrq)
708 {
709         sg_miter_start(&host->smi, mrq->data->sg, mrq->data->sg_len,
710                        SG_MITER_ATOMIC | SG_MITER_TO_SG);
711 }
712
713 static void do_write_request(struct cvm_mmc_host *host, struct mmc_request *mrq)
714 {
715         unsigned int data_len = mrq->data->blocks * mrq->data->blksz;
716         struct sg_mapping_iter *smi = &host->smi;
717         unsigned int bytes_xfered;
718         int shift = 56;
719         u64 dat = 0;
720
721         /* Copy data to the xmit buffer before issuing the command. */
722         sg_miter_start(smi, mrq->data->sg, mrq->data->sg_len, SG_MITER_FROM_SG);
723
724         /* Auto inc from offset zero, dbuf zero */
725         writeq(0x10000ull, host->base + MIO_EMM_BUF_IDX(host));
726
727         for (bytes_xfered = 0; bytes_xfered < data_len;) {
728                 if (smi->consumed >= smi->length) {
729                         if (!sg_miter_next(smi))
730                                 break;
731                         smi->consumed = 0;
732                 }
733
734                 while (smi->consumed < smi->length && shift >= 0) {
735                         dat |= (u64)((u8 *)smi->addr)[smi->consumed] << shift;
736                         bytes_xfered++;
737                         smi->consumed++;
738                         shift -= 8;
739                 }
740
741                 if (shift < 0) {
742                         writeq(dat, host->base + MIO_EMM_BUF_DAT(host));
743                         shift = 56;
744                         dat = 0;
745                 }
746         }
747         sg_miter_stop(smi);
748 }
749
750 static void cvm_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
751 {
752         struct cvm_mmc_slot *slot = mmc_priv(mmc);
753         struct cvm_mmc_host *host = slot->host;
754         struct mmc_command *cmd = mrq->cmd;
755         struct cvm_mmc_cr_mods mods;
756         u64 emm_cmd, rsp_sts;
757         int retries = 100;
758
759         /*
760          * Note about locking:
761          * All MMC devices share the same bus and controller. Allow only a
762          * single user of the bootbus/MMC bus at a time. The lock is acquired
763          * on all entry points from the MMC layer.
764          *
765          * For requests the lock is only released after the completion
766          * interrupt!
767          */
768         host->acquire_bus(host);
769
770         if (cmd->opcode == MMC_READ_MULTIPLE_BLOCK ||
771             cmd->opcode == MMC_WRITE_MULTIPLE_BLOCK)
772                 return cvm_mmc_dma_request(mmc, mrq);
773
774         cvm_mmc_switch_to(slot);
775
776         mods = cvm_mmc_get_cr_mods(cmd);
777
778         WARN_ON(host->current_req);
779         host->current_req = mrq;
780
781         if (cmd->data) {
782                 if (cmd->data->flags & MMC_DATA_READ)
783                         do_read_request(host, mrq);
784                 else
785                         do_write_request(host, mrq);
786
787                 if (cmd->data->timeout_ns)
788                         set_wdog(slot, cmd->data->timeout_ns);
789         } else
790                 set_wdog(slot, 0);
791
792         host->dma_active = false;
793         host->int_enable(host, MIO_EMM_INT_CMD_DONE | MIO_EMM_INT_CMD_ERR);
794
795         emm_cmd = FIELD_PREP(MIO_EMM_CMD_VAL, 1) |
796                   FIELD_PREP(MIO_EMM_CMD_CTYPE_XOR, mods.ctype_xor) |
797                   FIELD_PREP(MIO_EMM_CMD_RTYPE_XOR, mods.rtype_xor) |
798                   FIELD_PREP(MIO_EMM_CMD_IDX, cmd->opcode) |
799                   FIELD_PREP(MIO_EMM_CMD_ARG, cmd->arg);
800         set_bus_id(&emm_cmd, slot->bus_id);
801         if (cmd->data && mmc_cmd_type(cmd) == MMC_CMD_ADTC)
802                 emm_cmd |= FIELD_PREP(MIO_EMM_CMD_OFFSET,
803                                 64 - ((cmd->data->blocks * cmd->data->blksz) / 8));
804
805         writeq(0, host->base + MIO_EMM_STS_MASK(host));
806
807 retry:
808         rsp_sts = readq(host->base + MIO_EMM_RSP_STS(host));
809         if (rsp_sts & MIO_EMM_RSP_STS_DMA_VAL ||
810             rsp_sts & MIO_EMM_RSP_STS_CMD_VAL ||
811             rsp_sts & MIO_EMM_RSP_STS_SWITCH_VAL ||
812             rsp_sts & MIO_EMM_RSP_STS_DMA_PEND) {
813                 udelay(10);
814                 if (--retries)
815                         goto retry;
816         }
817         if (!retries)
818                 dev_err(host->dev, "Bad status: %llx before command write\n", rsp_sts);
819         writeq(emm_cmd, host->base + MIO_EMM_CMD(host));
820 }
821
822 static void cvm_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
823 {
824         struct cvm_mmc_slot *slot = mmc_priv(mmc);
825         struct cvm_mmc_host *host = slot->host;
826         int clk_period = 0, power_class = 10, bus_width = 0;
827         u64 clock, emm_switch;
828
829         host->acquire_bus(host);
830         cvm_mmc_switch_to(slot);
831
832         /* Set the power state */
833         switch (ios->power_mode) {
834         case MMC_POWER_ON:
835                 break;
836
837         case MMC_POWER_OFF:
838                 cvm_mmc_reset_bus(slot);
839                 if (host->global_pwr_gpiod)
840                         host->set_shared_power(host, 0);
841                 else if (!IS_ERR(mmc->supply.vmmc))
842                         mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, 0);
843                 break;
844
845         case MMC_POWER_UP:
846                 if (host->global_pwr_gpiod)
847                         host->set_shared_power(host, 1);
848                 else if (!IS_ERR(mmc->supply.vmmc))
849                         mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, ios->vdd);
850                 break;
851         }
852
853         /* Convert bus width to HW definition */
854         switch (ios->bus_width) {
855         case MMC_BUS_WIDTH_8:
856                 bus_width = 2;
857                 break;
858         case MMC_BUS_WIDTH_4:
859                 bus_width = 1;
860                 break;
861         case MMC_BUS_WIDTH_1:
862                 bus_width = 0;
863                 break;
864         }
865
866         /* DDR is available for 4/8 bit bus width */
867         if (ios->bus_width && ios->timing == MMC_TIMING_MMC_DDR52)
868                 bus_width |= 4;
869
870         /* Change the clock frequency. */
871         clock = ios->clock;
872         if (clock > 52000000)
873                 clock = 52000000;
874         slot->clock = clock;
875
876         if (clock)
877                 clk_period = (host->sys_freq + clock - 1) / (2 * clock);
878
879         emm_switch = FIELD_PREP(MIO_EMM_SWITCH_HS_TIMING,
880                                 (ios->timing == MMC_TIMING_MMC_HS)) |
881                      FIELD_PREP(MIO_EMM_SWITCH_BUS_WIDTH, bus_width) |
882                      FIELD_PREP(MIO_EMM_SWITCH_POWER_CLASS, power_class) |
883                      FIELD_PREP(MIO_EMM_SWITCH_CLK_HI, clk_period) |
884                      FIELD_PREP(MIO_EMM_SWITCH_CLK_LO, clk_period);
885         set_bus_id(&emm_switch, slot->bus_id);
886
887         if (!switch_val_changed(slot, emm_switch))
888                 goto out;
889
890         set_wdog(slot, 0);
891         do_switch(host, emm_switch);
892         slot->cached_switch = emm_switch;
893 out:
894         host->release_bus(host);
895 }
896
897 static const struct mmc_host_ops cvm_mmc_ops = {
898         .request        = cvm_mmc_request,
899         .set_ios        = cvm_mmc_set_ios,
900         .get_ro         = mmc_gpio_get_ro,
901         .get_cd         = mmc_gpio_get_cd,
902 };
903
904 static void cvm_mmc_set_clock(struct cvm_mmc_slot *slot, unsigned int clock)
905 {
906         struct mmc_host *mmc = slot->mmc;
907
908         clock = min(clock, mmc->f_max);
909         clock = max(clock, mmc->f_min);
910         slot->clock = clock;
911 }
912
913 static int cvm_mmc_init_lowlevel(struct cvm_mmc_slot *slot)
914 {
915         struct cvm_mmc_host *host = slot->host;
916         u64 emm_switch;
917
918         /* Enable this bus slot. */
919         host->emm_cfg |= (1ull << slot->bus_id);
920         writeq(host->emm_cfg, slot->host->base + MIO_EMM_CFG(host));
921         udelay(10);
922
923         /* Program initial clock speed and power. */
924         cvm_mmc_set_clock(slot, slot->mmc->f_min);
925         emm_switch = FIELD_PREP(MIO_EMM_SWITCH_POWER_CLASS, 10);
926         emm_switch |= FIELD_PREP(MIO_EMM_SWITCH_CLK_HI,
927                                  (host->sys_freq / slot->clock) / 2);
928         emm_switch |= FIELD_PREP(MIO_EMM_SWITCH_CLK_LO,
929                                  (host->sys_freq / slot->clock) / 2);
930
931         /* Make the changes take effect on this bus slot. */
932         set_bus_id(&emm_switch, slot->bus_id);
933         do_switch(host, emm_switch);
934
935         slot->cached_switch = emm_switch;
936
937         /*
938          * Set watchdog timeout value and default reset value
939          * for the mask register. Finally, set the CARD_RCA
940          * bit so that we can get the card address relative
941          * to the CMD register for CMD7 transactions.
942          */
943         set_wdog(slot, 0);
944         writeq(0xe4390080ull, host->base + MIO_EMM_STS_MASK(host));
945         writeq(1, host->base + MIO_EMM_RCA(host));
946         return 0;
947 }
948
949 static int cvm_mmc_of_parse(struct device *dev, struct cvm_mmc_slot *slot)
950 {
951         u32 id, cmd_skew = 0, dat_skew = 0, bus_width = 0;
952         struct device_node *node = dev->of_node;
953         struct mmc_host *mmc = slot->mmc;
954         u64 clock_period;
955         int ret;
956
957         ret = of_property_read_u32(node, "reg", &id);
958         if (ret) {
959                 dev_err(dev, "Missing or invalid reg property on %pOF\n", node);
960                 return ret;
961         }
962
963         if (id >= CAVIUM_MAX_MMC || slot->host->slot[id]) {
964                 dev_err(dev, "Invalid reg property on %pOF\n", node);
965                 return -EINVAL;
966         }
967
968         ret = mmc_regulator_get_supply(mmc);
969         if (ret)
970                 return ret;
971         /*
972          * Legacy Octeon firmware has no regulator entry, fall-back to
973          * a hard-coded voltage to get a sane OCR.
974          */
975         if (IS_ERR(mmc->supply.vmmc))
976                 mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
977
978         /* Common MMC bindings */
979         ret = mmc_of_parse(mmc);
980         if (ret)
981                 return ret;
982
983         /* Set bus width */
984         if (!(mmc->caps & (MMC_CAP_8_BIT_DATA | MMC_CAP_4_BIT_DATA))) {
985                 of_property_read_u32(node, "cavium,bus-max-width", &bus_width);
986                 if (bus_width == 8)
987                         mmc->caps |= MMC_CAP_8_BIT_DATA | MMC_CAP_4_BIT_DATA;
988                 else if (bus_width == 4)
989                         mmc->caps |= MMC_CAP_4_BIT_DATA;
990         }
991
992         /* Set maximum and minimum frequency */
993         if (!mmc->f_max)
994                 of_property_read_u32(node, "spi-max-frequency", &mmc->f_max);
995         if (!mmc->f_max || mmc->f_max > 52000000)
996                 mmc->f_max = 52000000;
997         mmc->f_min = 400000;
998
999         /* Sampling register settings, period in picoseconds */
1000         clock_period = 1000000000000ull / slot->host->sys_freq;
1001         of_property_read_u32(node, "cavium,cmd-clk-skew", &cmd_skew);
1002         of_property_read_u32(node, "cavium,dat-clk-skew", &dat_skew);
1003         slot->cmd_cnt = (cmd_skew + clock_period / 2) / clock_period;
1004         slot->dat_cnt = (dat_skew + clock_period / 2) / clock_period;
1005
1006         return id;
1007 }
1008
1009 int cvm_mmc_of_slot_probe(struct device *dev, struct cvm_mmc_host *host)
1010 {
1011         struct cvm_mmc_slot *slot;
1012         struct mmc_host *mmc;
1013         int ret, id;
1014
1015         mmc = mmc_alloc_host(sizeof(struct cvm_mmc_slot), dev);
1016         if (!mmc)
1017                 return -ENOMEM;
1018
1019         slot = mmc_priv(mmc);
1020         slot->mmc = mmc;
1021         slot->host = host;
1022
1023         ret = cvm_mmc_of_parse(dev, slot);
1024         if (ret < 0)
1025                 goto error;
1026         id = ret;
1027
1028         /* Set up host parameters */
1029         mmc->ops = &cvm_mmc_ops;
1030
1031         /*
1032          * We only have a 3.3v supply, we cannot support any
1033          * of the UHS modes. We do support the high speed DDR
1034          * modes up to 52MHz.
1035          *
1036          * Disable bounce buffers for max_segs = 1
1037          */
1038         mmc->caps |= MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED |
1039                      MMC_CAP_CMD23 | MMC_CAP_POWER_OFF_CARD | MMC_CAP_3_3V_DDR;
1040
1041         if (host->use_sg)
1042                 mmc->max_segs = 16;
1043         else
1044                 mmc->max_segs = 1;
1045
1046         /* DMA size field can address up to 8 MB */
1047         mmc->max_seg_size = min_t(unsigned int, 8 * 1024 * 1024,
1048                                   dma_get_max_seg_size(host->dev));
1049         mmc->max_req_size = mmc->max_seg_size;
1050         /* External DMA is in 512 byte blocks */
1051         mmc->max_blk_size = 512;
1052         /* DMA block count field is 15 bits */
1053         mmc->max_blk_count = 32767;
1054
1055         slot->clock = mmc->f_min;
1056         slot->bus_id = id;
1057         slot->cached_rca = 1;
1058
1059         host->acquire_bus(host);
1060         host->slot[id] = slot;
1061         cvm_mmc_switch_to(slot);
1062         cvm_mmc_init_lowlevel(slot);
1063         host->release_bus(host);
1064
1065         ret = mmc_add_host(mmc);
1066         if (ret) {
1067                 dev_err(dev, "mmc_add_host() returned %d\n", ret);
1068                 slot->host->slot[id] = NULL;
1069                 goto error;
1070         }
1071         return 0;
1072
1073 error:
1074         mmc_free_host(slot->mmc);
1075         return ret;
1076 }
1077
1078 int cvm_mmc_of_slot_remove(struct cvm_mmc_slot *slot)
1079 {
1080         mmc_remove_host(slot->mmc);
1081         slot->host->slot[slot->bus_id] = NULL;
1082         mmc_free_host(slot->mmc);
1083         return 0;
1084 }