Merge tag 'mmc-2021-9-13' of https://source.denx.de/u-boot/custodians/u-boot-mmc
[platform/kernel/u-boot.git] / drivers / mmc / fsl_esdhc.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright 2007, 2010-2011 Freescale Semiconductor, Inc
4  * Copyright 2019-2021 NXP
5  * Andy Fleming
6  *
7  * Based vaguely on the pxa mmc code:
8  * (C) Copyright 2003
9  * Kyle Harris, Nexus Technologies, Inc. kharris@nexus-tech.net
10  */
11
12 #include <config.h>
13 #include <common.h>
14 #include <command.h>
15 #include <cpu_func.h>
16 #include <errno.h>
17 #include <hwconfig.h>
18 #include <mmc.h>
19 #include <part.h>
20 #include <malloc.h>
21 #include <fsl_esdhc.h>
22 #include <fdt_support.h>
23 #include <asm/cache.h>
24 #include <asm/global_data.h>
25 #include <asm/io.h>
26 #include <dm.h>
27 #include <dm/device_compat.h>
28 #include <linux/bitops.h>
29 #include <linux/delay.h>
30 #include <linux/dma-mapping.h>
31 #include <sdhci.h>
32
33 DECLARE_GLOBAL_DATA_PTR;
34
35 struct fsl_esdhc {
36         uint    dsaddr;         /* SDMA system address register */
37         uint    blkattr;        /* Block attributes register */
38         uint    cmdarg;         /* Command argument register */
39         uint    xfertyp;        /* Transfer type register */
40         uint    cmdrsp0;        /* Command response 0 register */
41         uint    cmdrsp1;        /* Command response 1 register */
42         uint    cmdrsp2;        /* Command response 2 register */
43         uint    cmdrsp3;        /* Command response 3 register */
44         uint    datport;        /* Buffer data port register */
45         uint    prsstat;        /* Present state register */
46         uint    proctl;         /* Protocol control register */
47         uint    sysctl;         /* System Control Register */
48         uint    irqstat;        /* Interrupt status register */
49         uint    irqstaten;      /* Interrupt status enable register */
50         uint    irqsigen;       /* Interrupt signal enable register */
51         uint    autoc12err;     /* Auto CMD error status register */
52         uint    hostcapblt;     /* Host controller capabilities register */
53         uint    wml;            /* Watermark level register */
54         char    reserved1[8];   /* reserved */
55         uint    fevt;           /* Force event register */
56         uint    admaes;         /* ADMA error status register */
57         uint    adsaddrl;       /* ADMA system address low register */
58         uint    adsaddrh;       /* ADMA system address high register */
59         char    reserved2[156];
60         uint    hostver;        /* Host controller version register */
61         char    reserved3[4];   /* reserved */
62         uint    dmaerraddr;     /* DMA error address register */
63         char    reserved4[4];   /* reserved */
64         uint    dmaerrattr;     /* DMA error attribute register */
65         char    reserved5[4];   /* reserved */
66         uint    hostcapblt2;    /* Host controller capabilities register 2 */
67         char    reserved6[8];   /* reserved */
68         uint    tbctl;          /* Tuning block control register */
69         char    reserved7[32];  /* reserved */
70         uint    sdclkctl;       /* SD clock control register */
71         uint    sdtimingctl;    /* SD timing control register */
72         char    reserved8[20];  /* reserved */
73         uint    dllcfg0;        /* DLL config 0 register */
74         uint    dllcfg1;        /* DLL config 1 register */
75         char    reserved9[8];   /* reserved */
76         uint    dllstat0;       /* DLL status 0 register */
77         char    reserved10[664];/* reserved */
78         uint    esdhcctl;       /* eSDHC control register */
79 };
80
81 struct fsl_esdhc_plat {
82         struct mmc_config cfg;
83         struct mmc mmc;
84 };
85
86 /**
87  * struct fsl_esdhc_priv
88  *
89  * @esdhc_regs: registers of the sdhc controller
90  * @sdhc_clk: Current clk of the sdhc controller
91  * @bus_width: bus width, 1bit, 4bit or 8bit
92  * @cfg: mmc config
93  * @mmc: mmc
94  * Following is used when Driver Model is enabled for MMC
95  * @dev: pointer for the device
96  * @cd_gpio: gpio for card detection
97  * @wp_gpio: gpio for write protection
98  */
99 struct fsl_esdhc_priv {
100         struct fsl_esdhc *esdhc_regs;
101         unsigned int sdhc_clk;
102         bool is_sdhc_per_clk;
103         unsigned int clock;
104 #if !CONFIG_IS_ENABLED(DM_MMC)
105         struct mmc *mmc;
106 #endif
107         struct udevice *dev;
108         struct sdhci_adma_desc *adma_desc_table;
109         dma_addr_t dma_addr;
110 };
111
112 /* Return the XFERTYP flags for a given command and data packet */
113 static uint esdhc_xfertyp(struct mmc_cmd *cmd, struct mmc_data *data)
114 {
115         uint xfertyp = 0;
116
117         if (data) {
118                 xfertyp |= XFERTYP_DPSEL;
119                 if (!IS_ENABLED(CONFIG_SYS_FSL_ESDHC_USE_PIO) &&
120                     cmd->cmdidx != MMC_CMD_SEND_TUNING_BLOCK &&
121                     cmd->cmdidx != MMC_CMD_SEND_TUNING_BLOCK_HS200)
122                         xfertyp |= XFERTYP_DMAEN;
123                 if (data->blocks > 1) {
124                         xfertyp |= XFERTYP_MSBSEL;
125                         xfertyp |= XFERTYP_BCEN;
126                         if (IS_ENABLED(CONFIG_SYS_FSL_ERRATUM_ESDHC111))
127                                 xfertyp |= XFERTYP_AC12EN;
128                 }
129
130                 if (data->flags & MMC_DATA_READ)
131                         xfertyp |= XFERTYP_DTDSEL;
132         }
133
134         if (cmd->resp_type & MMC_RSP_CRC)
135                 xfertyp |= XFERTYP_CCCEN;
136         if (cmd->resp_type & MMC_RSP_OPCODE)
137                 xfertyp |= XFERTYP_CICEN;
138         if (cmd->resp_type & MMC_RSP_136)
139                 xfertyp |= XFERTYP_RSPTYP_136;
140         else if (cmd->resp_type & MMC_RSP_BUSY)
141                 xfertyp |= XFERTYP_RSPTYP_48_BUSY;
142         else if (cmd->resp_type & MMC_RSP_PRESENT)
143                 xfertyp |= XFERTYP_RSPTYP_48;
144
145         if (cmd->cmdidx == MMC_CMD_STOP_TRANSMISSION)
146                 xfertyp |= XFERTYP_CMDTYP_ABORT;
147
148         return XFERTYP_CMD(cmd->cmdidx) | xfertyp;
149 }
150
151 /*
152  * PIO Read/Write Mode reduce the performace as DMA is not used in this mode.
153  */
154 static void esdhc_pio_read_write(struct fsl_esdhc_priv *priv,
155                                  struct mmc_data *data)
156 {
157         struct fsl_esdhc *regs = priv->esdhc_regs;
158         uint blocks;
159         char *buffer;
160         uint databuf;
161         uint size;
162         uint irqstat;
163         ulong start;
164
165         if (data->flags & MMC_DATA_READ) {
166                 blocks = data->blocks;
167                 buffer = data->dest;
168                 while (blocks) {
169                         start = get_timer(0);
170                         size = data->blocksize;
171                         irqstat = esdhc_read32(&regs->irqstat);
172                         while (!(esdhc_read32(&regs->prsstat) & PRSSTAT_BREN)) {
173                                 if (get_timer(start) > PIO_TIMEOUT) {
174                                         printf("\nData Read Failed in PIO Mode.");
175                                         return;
176                                 }
177                         }
178                         while (size && (!(irqstat & IRQSTAT_TC))) {
179                                 udelay(100); /* Wait before last byte transfer complete */
180                                 irqstat = esdhc_read32(&regs->irqstat);
181                                 databuf = in_le32(&regs->datport);
182                                 *((uint *)buffer) = databuf;
183                                 buffer += 4;
184                                 size -= 4;
185                         }
186                         blocks--;
187                 }
188         } else {
189                 blocks = data->blocks;
190                 buffer = (char *)data->src;
191                 while (blocks) {
192                         start = get_timer(0);
193                         size = data->blocksize;
194                         irqstat = esdhc_read32(&regs->irqstat);
195                         while (!(esdhc_read32(&regs->prsstat) & PRSSTAT_BWEN)) {
196                                 if (get_timer(start) > PIO_TIMEOUT) {
197                                         printf("\nData Write Failed in PIO Mode.");
198                                         return;
199                                 }
200                         }
201                         while (size && (!(irqstat & IRQSTAT_TC))) {
202                                 udelay(100); /* Wait before last byte transfer complete */
203                                 databuf = *((uint *)buffer);
204                                 buffer += 4;
205                                 size -= 4;
206                                 irqstat = esdhc_read32(&regs->irqstat);
207                                 out_le32(&regs->datport, databuf);
208                         }
209                         blocks--;
210                 }
211         }
212 }
213
214 static void esdhc_setup_watermark_level(struct fsl_esdhc_priv *priv,
215                                         struct mmc_data *data)
216 {
217         struct fsl_esdhc *regs = priv->esdhc_regs;
218         uint wml_value = data->blocksize / 4;
219
220         if (data->flags & MMC_DATA_READ) {
221                 if (wml_value > WML_RD_WML_MAX)
222                         wml_value = WML_RD_WML_MAX_VAL;
223
224                 esdhc_clrsetbits32(&regs->wml, WML_RD_WML_MASK, wml_value);
225         } else {
226                 if (wml_value > WML_WR_WML_MAX)
227                         wml_value = WML_WR_WML_MAX_VAL;
228
229                 esdhc_clrsetbits32(&regs->wml, WML_WR_WML_MASK,
230                                    wml_value << 16);
231         }
232 }
233
234 static void esdhc_setup_dma(struct fsl_esdhc_priv *priv, struct mmc_data *data)
235 {
236         uint trans_bytes = data->blocksize * data->blocks;
237         struct fsl_esdhc *regs = priv->esdhc_regs;
238         phys_addr_t adma_addr;
239         void *buf;
240
241         if (data->flags & MMC_DATA_WRITE)
242                 buf = (void *)data->src;
243         else
244                 buf = data->dest;
245
246         priv->dma_addr = dma_map_single(buf, trans_bytes,
247                                         mmc_get_dma_dir(data));
248
249         if (IS_ENABLED(CONFIG_FSL_ESDHC_SUPPORT_ADMA2) &&
250             priv->adma_desc_table) {
251                 debug("Using ADMA2\n");
252                 /* prefer ADMA2 if it is available */
253                 sdhci_prepare_adma_table(priv->adma_desc_table, data,
254                                          priv->dma_addr);
255
256                 adma_addr = virt_to_phys(priv->adma_desc_table);
257                 esdhc_write32(&regs->adsaddrl, lower_32_bits(adma_addr));
258                 if (IS_ENABLED(CONFIG_DMA_ADDR_T_64BIT))
259                         esdhc_write32(&regs->adsaddrh, upper_32_bits(adma_addr));
260                 esdhc_clrsetbits32(&regs->proctl, PROCTL_DMAS_MASK,
261                                    PROCTL_DMAS_ADMA2);
262         } else {
263                 debug("Using SDMA\n");
264                 if (upper_32_bits(priv->dma_addr))
265                         printf("Cannot use 64 bit addresses with SDMA\n");
266                 esdhc_write32(&regs->dsaddr, lower_32_bits(priv->dma_addr));
267                 esdhc_clrsetbits32(&regs->proctl, PROCTL_DMAS_MASK,
268                                    PROCTL_DMAS_SDMA);
269         }
270
271         esdhc_write32(&regs->blkattr, data->blocks << 16 | data->blocksize);
272 }
273
274 static int esdhc_setup_data(struct fsl_esdhc_priv *priv, struct mmc *mmc,
275                             struct mmc_data *data)
276 {
277         int timeout;
278         bool is_write = data->flags & MMC_DATA_WRITE;
279         struct fsl_esdhc *regs = priv->esdhc_regs;
280
281         if (is_write && !(esdhc_read32(&regs->prsstat) & PRSSTAT_WPSPL)) {
282                 printf("Can not write to locked SD card.\n");
283                 return -EINVAL;
284         }
285
286         if (IS_ENABLED(CONFIG_SYS_FSL_ESDHC_USE_PIO))
287                 esdhc_setup_watermark_level(priv, data);
288         else
289                 esdhc_setup_dma(priv, data);
290
291         /* Calculate the timeout period for data transactions */
292         /*
293          * 1)Timeout period = (2^(timeout+13)) SD Clock cycles
294          * 2)Timeout period should be minimum 0.250sec as per SD Card spec
295          *  So, Number of SD Clock cycles for 0.25sec should be minimum
296          *              (SD Clock/sec * 0.25 sec) SD Clock cycles
297          *              = (mmc->clock * 1/4) SD Clock cycles
298          * As 1) >=  2)
299          * => (2^(timeout+13)) >= mmc->clock * 1/4
300          * Taking log2 both the sides
301          * => timeout + 13 >= log2(mmc->clock/4)
302          * Rounding up to next power of 2
303          * => timeout + 13 = log2(mmc->clock/4) + 1
304          * => timeout + 13 = fls(mmc->clock/4)
305          *
306          * However, the MMC spec "It is strongly recommended for hosts to
307          * implement more than 500ms timeout value even if the card
308          * indicates the 250ms maximum busy length."  Even the previous
309          * value of 300ms is known to be insufficient for some cards.
310          * So, we use
311          * => timeout + 13 = fls(mmc->clock/2)
312          */
313         timeout = fls(mmc->clock/2);
314         timeout -= 13;
315
316         if (timeout > 14)
317                 timeout = 14;
318
319         if (timeout < 0)
320                 timeout = 0;
321
322         if (IS_ENABLED(CONFIG_SYS_FSL_ERRATUM_ESDHC_A001) &&
323             (timeout == 4 || timeout == 8 || timeout == 12))
324                 timeout++;
325
326         if (IS_ENABLED(ESDHCI_QUIRK_BROKEN_TIMEOUT_VALUE))
327                 timeout = 0xE;
328
329         esdhc_clrsetbits32(&regs->sysctl, SYSCTL_TIMEOUT_MASK, timeout << 16);
330
331         return 0;
332 }
333
334 /*
335  * Sends a command out on the bus.  Takes the mmc pointer,
336  * a command pointer, and an optional data pointer.
337  */
338 static int esdhc_send_cmd_common(struct fsl_esdhc_priv *priv, struct mmc *mmc,
339                                  struct mmc_cmd *cmd, struct mmc_data *data)
340 {
341         int     err = 0;
342         uint    xfertyp;
343         uint    irqstat;
344         u32     flags = IRQSTAT_CC | IRQSTAT_CTOE;
345         struct fsl_esdhc *regs = priv->esdhc_regs;
346         unsigned long start;
347
348         if (IS_ENABLED(CONFIG_SYS_FSL_ERRATUM_ESDHC111) &&
349             cmd->cmdidx == MMC_CMD_STOP_TRANSMISSION)
350                 return 0;
351
352         esdhc_write32(&regs->irqstat, -1);
353
354         sync();
355
356         /* Wait for the bus to be idle */
357         while ((esdhc_read32(&regs->prsstat) & PRSSTAT_CICHB) ||
358                         (esdhc_read32(&regs->prsstat) & PRSSTAT_CIDHB))
359                 ;
360
361         while (esdhc_read32(&regs->prsstat) & PRSSTAT_DLA)
362                 ;
363
364         /* Set up for a data transfer if we have one */
365         if (data) {
366                 err = esdhc_setup_data(priv, mmc, data);
367                 if(err)
368                         return err;
369         }
370
371         /* Figure out the transfer arguments */
372         xfertyp = esdhc_xfertyp(cmd, data);
373
374         /* Mask all irqs */
375         esdhc_write32(&regs->irqsigen, 0);
376
377         /* Send the command */
378         esdhc_write32(&regs->cmdarg, cmd->cmdarg);
379         esdhc_write32(&regs->xfertyp, xfertyp);
380
381         if (cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK ||
382             cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK_HS200)
383                 flags = IRQSTAT_BRR;
384
385         /* Wait for the command to complete */
386         start = get_timer(0);
387         while (!(esdhc_read32(&regs->irqstat) & flags)) {
388                 if (get_timer(start) > 1000) {
389                         err = -ETIMEDOUT;
390                         goto out;
391                 }
392         }
393
394         irqstat = esdhc_read32(&regs->irqstat);
395
396         if (irqstat & CMD_ERR) {
397                 err = -ECOMM;
398                 goto out;
399         }
400
401         if (irqstat & IRQSTAT_CTOE) {
402                 err = -ETIMEDOUT;
403                 goto out;
404         }
405
406         /* Workaround for ESDHC errata ENGcm03648 */
407         if (!data && (cmd->resp_type & MMC_RSP_BUSY)) {
408                 int timeout = 6000;
409
410                 /* Poll on DATA0 line for cmd with busy signal for 600 ms */
411                 while (timeout > 0 && !(esdhc_read32(&regs->prsstat) &
412                                         PRSSTAT_DAT0)) {
413                         udelay(100);
414                         timeout--;
415                 }
416
417                 if (timeout <= 0) {
418                         printf("Timeout waiting for DAT0 to go high!\n");
419                         err = -ETIMEDOUT;
420                         goto out;
421                 }
422         }
423
424         /* Copy the response to the response buffer */
425         if (cmd->resp_type & MMC_RSP_136) {
426                 u32 cmdrsp3, cmdrsp2, cmdrsp1, cmdrsp0;
427
428                 cmdrsp3 = esdhc_read32(&regs->cmdrsp3);
429                 cmdrsp2 = esdhc_read32(&regs->cmdrsp2);
430                 cmdrsp1 = esdhc_read32(&regs->cmdrsp1);
431                 cmdrsp0 = esdhc_read32(&regs->cmdrsp0);
432                 cmd->response[0] = (cmdrsp3 << 8) | (cmdrsp2 >> 24);
433                 cmd->response[1] = (cmdrsp2 << 8) | (cmdrsp1 >> 24);
434                 cmd->response[2] = (cmdrsp1 << 8) | (cmdrsp0 >> 24);
435                 cmd->response[3] = (cmdrsp0 << 8);
436         } else
437                 cmd->response[0] = esdhc_read32(&regs->cmdrsp0);
438
439         /* Wait until all of the blocks are transferred */
440         if (data) {
441                 if (IS_ENABLED(CONFIG_SYS_FSL_ESDHC_USE_PIO)) {
442                         esdhc_pio_read_write(priv, data);
443                 } else {
444                         flags = DATA_COMPLETE;
445                         if (cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK ||
446                             cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK_HS200)
447                                 flags = IRQSTAT_BRR;
448
449                         do {
450                                 irqstat = esdhc_read32(&regs->irqstat);
451
452                                 if (irqstat & IRQSTAT_DTOE) {
453                                         err = -ETIMEDOUT;
454                                         goto out;
455                                 }
456
457                                 if (irqstat & DATA_ERR) {
458                                         err = -ECOMM;
459                                         goto out;
460                                 }
461                         } while ((irqstat & flags) != flags);
462
463                         /*
464                          * Need invalidate the dcache here again to avoid any
465                          * cache-fill during the DMA operations such as the
466                          * speculative pre-fetching etc.
467                          */
468                         dma_unmap_single(priv->dma_addr,
469                                          data->blocks * data->blocksize,
470                                          mmc_get_dma_dir(data));
471                 }
472         }
473
474 out:
475         /* Reset CMD and DATA portions on error */
476         if (err) {
477                 esdhc_write32(&regs->sysctl, esdhc_read32(&regs->sysctl) |
478                               SYSCTL_RSTC);
479                 while (esdhc_read32(&regs->sysctl) & SYSCTL_RSTC)
480                         ;
481
482                 if (data) {
483                         esdhc_write32(&regs->sysctl,
484                                       esdhc_read32(&regs->sysctl) |
485                                       SYSCTL_RSTD);
486                         while ((esdhc_read32(&regs->sysctl) & SYSCTL_RSTD))
487                                 ;
488                 }
489         }
490
491         esdhc_write32(&regs->irqstat, -1);
492
493         return err;
494 }
495
496 static void set_sysctl(struct fsl_esdhc_priv *priv, struct mmc *mmc, uint clock)
497 {
498         struct fsl_esdhc *regs = priv->esdhc_regs;
499         int div = 1;
500         int pre_div = 2;
501         unsigned int sdhc_clk = priv->sdhc_clk;
502         u32 time_out;
503         u32 value;
504         uint clk;
505
506         if (clock < mmc->cfg->f_min)
507                 clock = mmc->cfg->f_min;
508
509         while (sdhc_clk / (16 * pre_div) > clock && pre_div < 256)
510                 pre_div *= 2;
511
512         while (sdhc_clk / (div * pre_div) > clock && div < 16)
513                 div++;
514
515         if (IS_ENABLED(CONFIG_SYS_FSL_ERRATUM_A011334) &&
516             clock == 200000000 && mmc->selected_mode == MMC_HS_400) {
517                 u32 div_ratio = pre_div * div;
518
519                 if (div_ratio <= 4) {
520                         pre_div = 4;
521                         div = 1;
522                 } else if (div_ratio <= 8) {
523                         pre_div = 4;
524                         div = 2;
525                 } else if (div_ratio <= 12) {
526                         pre_div = 4;
527                         div = 3;
528                 } else {
529                         printf("unsupported clock division.\n");
530                 }
531         }
532
533         mmc->clock = sdhc_clk / pre_div / div;
534         priv->clock = mmc->clock;
535
536         pre_div >>= 1;
537         div -= 1;
538
539         clk = (pre_div << 8) | (div << 4);
540
541         esdhc_clrbits32(&regs->sysctl, SYSCTL_CKEN);
542
543         esdhc_clrsetbits32(&regs->sysctl, SYSCTL_CLOCK_MASK, clk);
544
545         time_out = 20;
546         value = PRSSTAT_SDSTB;
547         while (!(esdhc_read32(&regs->prsstat) & value)) {
548                 if (time_out == 0) {
549                         printf("fsl_esdhc: Internal clock never stabilised.\n");
550                         break;
551                 }
552                 time_out--;
553                 mdelay(1);
554         }
555
556         esdhc_setbits32(&regs->sysctl, SYSCTL_PEREN | SYSCTL_CKEN);
557 }
558
559 static void esdhc_clock_control(struct fsl_esdhc_priv *priv, bool enable)
560 {
561         struct fsl_esdhc *regs = priv->esdhc_regs;
562         u32 value;
563         u32 time_out;
564
565         value = esdhc_read32(&regs->sysctl);
566
567         if (enable)
568                 value |= SYSCTL_CKEN;
569         else
570                 value &= ~SYSCTL_CKEN;
571
572         esdhc_write32(&regs->sysctl, value);
573
574         time_out = 20;
575         value = PRSSTAT_SDSTB;
576         while (!(esdhc_read32(&regs->prsstat) & value)) {
577                 if (time_out == 0) {
578                         printf("fsl_esdhc: Internal clock never stabilised.\n");
579                         break;
580                 }
581                 time_out--;
582                 mdelay(1);
583         }
584 }
585
586 static void esdhc_flush_async_fifo(struct fsl_esdhc_priv *priv)
587 {
588         struct fsl_esdhc *regs = priv->esdhc_regs;
589         u32 time_out;
590
591         esdhc_setbits32(&regs->esdhcctl, ESDHCCTL_FAF);
592
593         time_out = 20;
594         while (esdhc_read32(&regs->esdhcctl) & ESDHCCTL_FAF) {
595                 if (time_out == 0) {
596                         printf("fsl_esdhc: Flush asynchronous FIFO timeout.\n");
597                         break;
598                 }
599                 time_out--;
600                 mdelay(1);
601         }
602 }
603
604 static void esdhc_tuning_block_enable(struct fsl_esdhc_priv *priv,
605                                       bool en)
606 {
607         struct fsl_esdhc *regs = priv->esdhc_regs;
608
609         esdhc_clock_control(priv, false);
610         esdhc_flush_async_fifo(priv);
611         if (en)
612                 esdhc_setbits32(&regs->tbctl, TBCTL_TB_EN);
613         else
614                 esdhc_clrbits32(&regs->tbctl, TBCTL_TB_EN);
615         esdhc_clock_control(priv, true);
616 }
617
618 static void esdhc_exit_hs400(struct fsl_esdhc_priv *priv)
619 {
620         struct fsl_esdhc *regs = priv->esdhc_regs;
621
622         esdhc_clrbits32(&regs->sdtimingctl, FLW_CTL_BG);
623         esdhc_clrbits32(&regs->sdclkctl, CMD_CLK_CTL);
624
625         esdhc_clock_control(priv, false);
626         esdhc_clrbits32(&regs->tbctl, HS400_MODE);
627         esdhc_clock_control(priv, true);
628
629         esdhc_clrbits32(&regs->dllcfg0, DLL_FREQ_SEL | DLL_ENABLE);
630         esdhc_clrbits32(&regs->tbctl, HS400_WNDW_ADJUST);
631
632         esdhc_tuning_block_enable(priv, false);
633 }
634
635 static int esdhc_set_timing(struct fsl_esdhc_priv *priv, enum bus_mode mode)
636 {
637         struct fsl_esdhc *regs = priv->esdhc_regs;
638         ulong start;
639         u32 val;
640
641         /* Exit HS400 mode before setting any other mode */
642         if (esdhc_read32(&regs->tbctl) & HS400_MODE &&
643             mode != MMC_HS_400)
644                 esdhc_exit_hs400(priv);
645
646         esdhc_clock_control(priv, false);
647
648         if (mode == MMC_HS_200)
649                 esdhc_clrsetbits32(&regs->autoc12err, UHSM_MASK,
650                                    UHSM_SDR104_HS200);
651         if (mode == MMC_HS_400) {
652                 esdhc_setbits32(&regs->tbctl, HS400_MODE);
653                 esdhc_setbits32(&regs->sdclkctl, CMD_CLK_CTL);
654                 esdhc_clock_control(priv, true);
655
656                 if (priv->clock == 200000000)
657                         esdhc_setbits32(&regs->dllcfg0, DLL_FREQ_SEL);
658
659                 esdhc_setbits32(&regs->dllcfg0, DLL_ENABLE);
660
661                 esdhc_setbits32(&regs->dllcfg0, DLL_RESET);
662                 udelay(1);
663                 esdhc_clrbits32(&regs->dllcfg0, DLL_RESET);
664
665                 start = get_timer(0);
666                 val = DLL_STS_SLV_LOCK;
667                 while (!(esdhc_read32(&regs->dllstat0) & val)) {
668                         if (get_timer(start) > 1000) {
669                                 printf("fsl_esdhc: delay chain lock timeout\n");
670                                 return -ETIMEDOUT;
671                         }
672                 }
673
674                 esdhc_setbits32(&regs->tbctl, HS400_WNDW_ADJUST);
675
676                 esdhc_clock_control(priv, false);
677                 esdhc_flush_async_fifo(priv);
678         }
679         esdhc_clock_control(priv, true);
680         return 0;
681 }
682
683 static int esdhc_set_ios_common(struct fsl_esdhc_priv *priv, struct mmc *mmc)
684 {
685         struct fsl_esdhc *regs = priv->esdhc_regs;
686         int ret;
687
688         if (priv->is_sdhc_per_clk) {
689                 /* Select to use peripheral clock */
690                 esdhc_clock_control(priv, false);
691                 esdhc_setbits32(&regs->esdhcctl, ESDHCCTL_PCS);
692                 esdhc_clock_control(priv, true);
693         }
694
695         if (mmc->selected_mode == MMC_HS_400)
696                 esdhc_tuning_block_enable(priv, true);
697
698         /* Set the clock speed */
699         if (priv->clock != mmc->clock)
700                 set_sysctl(priv, mmc, mmc->clock);
701
702         /* Set timing */
703         ret = esdhc_set_timing(priv, mmc->selected_mode);
704         if (ret)
705                 return ret;
706
707         /* Set the bus width */
708         esdhc_clrbits32(&regs->proctl, PROCTL_DTW_4 | PROCTL_DTW_8);
709
710         if (mmc->bus_width == 4)
711                 esdhc_setbits32(&regs->proctl, PROCTL_DTW_4);
712         else if (mmc->bus_width == 8)
713                 esdhc_setbits32(&regs->proctl, PROCTL_DTW_8);
714
715         return 0;
716 }
717
718 static void esdhc_enable_cache_snooping(struct fsl_esdhc *regs)
719 {
720 #ifdef CONFIG_ARCH_MPC830X
721         immap_t *immr = (immap_t *)CONFIG_SYS_IMMR;
722         sysconf83xx_t *sysconf = &immr->sysconf;
723
724         setbits_be32(&sysconf->sdhccr, 0x02000000);
725 #else
726         esdhc_write32(&regs->esdhcctl, 0x00000040);
727 #endif
728 }
729
730 static int esdhc_init_common(struct fsl_esdhc_priv *priv, struct mmc *mmc)
731 {
732         struct fsl_esdhc *regs = priv->esdhc_regs;
733         ulong start;
734
735         /* Reset the entire host controller */
736         esdhc_setbits32(&regs->sysctl, SYSCTL_RSTA);
737
738         /* Wait until the controller is available */
739         start = get_timer(0);
740         while ((esdhc_read32(&regs->sysctl) & SYSCTL_RSTA)) {
741                 if (get_timer(start) > 1000)
742                         return -ETIMEDOUT;
743         }
744
745         /* Clean TBCTL[TB_EN] which is not able to be reset by reset all */
746         esdhc_clrbits32(&regs->tbctl, TBCTL_TB_EN);
747
748         esdhc_enable_cache_snooping(regs);
749
750         esdhc_setbits32(&regs->sysctl, SYSCTL_HCKEN | SYSCTL_IPGEN);
751
752         /* Set the initial clock speed */
753         set_sysctl(priv, mmc, 400000);
754
755         /* Disable the BRR and BWR bits in IRQSTAT */
756         esdhc_clrbits32(&regs->irqstaten, IRQSTATEN_BRR | IRQSTATEN_BWR);
757
758         /* Put the PROCTL reg back to the default */
759         esdhc_write32(&regs->proctl, PROCTL_INIT);
760
761         /* Set timout to the maximum value */
762         esdhc_clrsetbits32(&regs->sysctl, SYSCTL_TIMEOUT_MASK, 14 << 16);
763
764         if (IS_ENABLED(CONFIG_SYS_FSL_ESDHC_UNRELIABLE_PULSE_DETECTION_WORKAROUND))
765                 esdhc_clrbits32(&regs->dllcfg1, DLL_PD_PULSE_STRETCH_SEL);
766
767         return 0;
768 }
769
770 static int esdhc_getcd_common(struct fsl_esdhc_priv *priv)
771 {
772         struct fsl_esdhc *regs = priv->esdhc_regs;
773
774 #ifdef CONFIG_ESDHC_DETECT_QUIRK
775         if (CONFIG_ESDHC_DETECT_QUIRK)
776                 return 1;
777 #endif
778         if (esdhc_read32(&regs->prsstat) & PRSSTAT_CINS)
779                 return 1;
780
781         return 0;
782 }
783
784 static void fsl_esdhc_get_cfg_common(struct fsl_esdhc_priv *priv,
785                                      struct mmc_config *cfg)
786 {
787         struct fsl_esdhc *regs = priv->esdhc_regs;
788         u32 caps;
789
790         caps = esdhc_read32(&regs->hostcapblt);
791
792         /*
793          * For eSDHC, power supply is through peripheral circuit. Some eSDHC
794          * versions have value 0 of the bit but that does not reflect the
795          * truth. 3.3V is common for SD/MMC, and is supported for all boards
796          * with eSDHC in current u-boot. So, make 3.3V is supported in
797          * default in code. CONFIG_FSL_ESDHC_VS33_NOT_SUPPORT can be enabled
798          * if future board does not support 3.3V.
799          */
800         caps |= HOSTCAPBLT_VS33;
801         if (IS_ENABLED(CONFIG_FSL_ESDHC_VS33_NOT_SUPPORT))
802                 caps &= ~HOSTCAPBLT_VS33;
803
804         if (IS_ENABLED(CONFIG_SYS_FSL_ERRATUM_ESDHC135))
805                 caps &= ~(HOSTCAPBLT_SRS | HOSTCAPBLT_VS18 | HOSTCAPBLT_VS30);
806         if (caps & HOSTCAPBLT_VS18)
807                 cfg->voltages |= MMC_VDD_165_195;
808         if (caps & HOSTCAPBLT_VS30)
809                 cfg->voltages |= MMC_VDD_29_30 | MMC_VDD_30_31;
810         if (caps & HOSTCAPBLT_VS33)
811                 cfg->voltages |= MMC_VDD_32_33 | MMC_VDD_33_34;
812
813         cfg->name = "FSL_SDHC";
814
815         if (caps & HOSTCAPBLT_HSS)
816                 cfg->host_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS;
817
818         cfg->f_min = 400000;
819         cfg->f_max = min(priv->sdhc_clk, (u32)200000000);
820         cfg->b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT;
821 }
822
823 #ifdef CONFIG_OF_LIBFDT
824 __weak int esdhc_status_fixup(void *blob, const char *compat)
825 {
826         if (IS_ENABLED(CONFIG_FSL_ESDHC_PIN_MUX) && !hwconfig("esdhc")) {
827                 do_fixup_by_compat(blob, compat, "status", "disabled",
828                                 sizeof("disabled"), 1);
829                 return 1;
830         }
831
832         return 0;
833 }
834
835
836 #if CONFIG_IS_ENABLED(DM_MMC)
837 static int fsl_esdhc_get_cd(struct udevice *dev);
838 static void esdhc_disable_for_no_card(void *blob)
839 {
840         struct udevice *dev;
841
842         for (uclass_first_device(UCLASS_MMC, &dev);
843              dev;
844              uclass_next_device(&dev)) {
845                 char esdhc_path[50];
846
847                 if (fsl_esdhc_get_cd(dev))
848                         continue;
849
850                 snprintf(esdhc_path, sizeof(esdhc_path), "/soc/esdhc@%lx",
851                          (unsigned long)dev_read_addr(dev));
852                 do_fixup_by_path(blob, esdhc_path, "status", "disabled",
853                                  sizeof("disabled"), 1);
854         }
855 }
856 #else
857 static void esdhc_disable_for_no_card(void *blob)
858 {
859 }
860 #endif
861
862 void fdt_fixup_esdhc(void *blob, struct bd_info *bd)
863 {
864         const char *compat = "fsl,esdhc";
865
866         if (esdhc_status_fixup(blob, compat))
867                 return;
868
869         if (IS_ENABLED(CONFIG_FSL_ESDHC_33V_IO_RELIABILITY_WORKAROUND))
870                 esdhc_disable_for_no_card(blob);
871
872         do_fixup_by_compat_u32(blob, compat, "clock-frequency",
873                                gd->arch.sdhc_clk, 1);
874 }
875 #endif
876
877 #if !CONFIG_IS_ENABLED(DM_MMC)
878 static int esdhc_getcd(struct mmc *mmc)
879 {
880         struct fsl_esdhc_priv *priv = mmc->priv;
881
882         return esdhc_getcd_common(priv);
883 }
884
885 static int esdhc_init(struct mmc *mmc)
886 {
887         struct fsl_esdhc_priv *priv = mmc->priv;
888
889         return esdhc_init_common(priv, mmc);
890 }
891
892 static int esdhc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
893                           struct mmc_data *data)
894 {
895         struct fsl_esdhc_priv *priv = mmc->priv;
896
897         return esdhc_send_cmd_common(priv, mmc, cmd, data);
898 }
899
900 static int esdhc_set_ios(struct mmc *mmc)
901 {
902         struct fsl_esdhc_priv *priv = mmc->priv;
903
904         return esdhc_set_ios_common(priv, mmc);
905 }
906
907 static const struct mmc_ops esdhc_ops = {
908         .getcd          = esdhc_getcd,
909         .init           = esdhc_init,
910         .send_cmd       = esdhc_send_cmd,
911         .set_ios        = esdhc_set_ios,
912 };
913
914 int fsl_esdhc_initialize(struct bd_info *bis, struct fsl_esdhc_cfg *cfg)
915 {
916         struct fsl_esdhc_plat *plat;
917         struct fsl_esdhc_priv *priv;
918         struct mmc_config *mmc_cfg;
919         struct mmc *mmc;
920
921         if (!cfg)
922                 return -EINVAL;
923
924         priv = calloc(sizeof(struct fsl_esdhc_priv), 1);
925         if (!priv)
926                 return -ENOMEM;
927         plat = calloc(sizeof(struct fsl_esdhc_plat), 1);
928         if (!plat) {
929                 free(priv);
930                 return -ENOMEM;
931         }
932
933         priv->esdhc_regs = (struct fsl_esdhc *)(unsigned long)(cfg->esdhc_base);
934         priv->sdhc_clk = cfg->sdhc_clk;
935         if (gd->arch.sdhc_per_clk)
936                 priv->is_sdhc_per_clk = true;
937
938         mmc_cfg = &plat->cfg;
939
940         if (cfg->max_bus_width == 8) {
941                 mmc_cfg->host_caps |= MMC_MODE_1BIT | MMC_MODE_4BIT |
942                                       MMC_MODE_8BIT;
943         } else if (cfg->max_bus_width == 4) {
944                 mmc_cfg->host_caps |= MMC_MODE_1BIT | MMC_MODE_4BIT;
945         } else if (cfg->max_bus_width == 1) {
946                 mmc_cfg->host_caps |= MMC_MODE_1BIT;
947         } else {
948                 mmc_cfg->host_caps |= MMC_MODE_1BIT | MMC_MODE_4BIT |
949                                       MMC_MODE_8BIT;
950                 printf("No max bus width provided. Assume 8-bit supported.\n");
951         }
952
953         if (IS_ENABLED(CONFIG_ESDHC_DETECT_8_BIT_QUIRK))
954                 mmc_cfg->host_caps &= ~MMC_MODE_8BIT;
955
956         mmc_cfg->ops = &esdhc_ops;
957
958         fsl_esdhc_get_cfg_common(priv, mmc_cfg);
959
960         mmc = mmc_create(mmc_cfg, priv);
961         if (!mmc)
962                 return -EIO;
963
964         priv->mmc = mmc;
965         return 0;
966 }
967
968 int fsl_esdhc_mmc_init(struct bd_info *bis)
969 {
970         struct fsl_esdhc_cfg *cfg;
971
972         cfg = calloc(sizeof(struct fsl_esdhc_cfg), 1);
973         cfg->esdhc_base = CONFIG_SYS_FSL_ESDHC_ADDR;
974         /* Prefer peripheral clock which provides higher frequency. */
975         if (gd->arch.sdhc_per_clk)
976                 cfg->sdhc_clk = gd->arch.sdhc_per_clk;
977         else
978                 cfg->sdhc_clk = gd->arch.sdhc_clk;
979         return fsl_esdhc_initialize(bis, cfg);
980 }
981 #else /* DM_MMC */
982 static int fsl_esdhc_probe(struct udevice *dev)
983 {
984         struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
985         struct fsl_esdhc_plat *plat = dev_get_plat(dev);
986         struct fsl_esdhc_priv *priv = dev_get_priv(dev);
987         u32 caps, hostver;
988         fdt_addr_t addr;
989         struct mmc *mmc;
990         int ret;
991
992         addr = dev_read_addr(dev);
993         if (addr == FDT_ADDR_T_NONE)
994                 return -EINVAL;
995 #ifdef CONFIG_PPC
996         priv->esdhc_regs = (struct fsl_esdhc *)lower_32_bits(addr);
997 #else
998         priv->esdhc_regs = (struct fsl_esdhc *)addr;
999 #endif
1000         priv->dev = dev;
1001
1002         if (IS_ENABLED(CONFIG_FSL_ESDHC_SUPPORT_ADMA2)) {
1003                 /*
1004                  * Only newer eSDHC controllers can do ADMA2 if the ADMA flag
1005                  * is set in the host capabilities register.
1006                  */
1007                 caps = esdhc_read32(&priv->esdhc_regs->hostcapblt);
1008                 hostver = esdhc_read32(&priv->esdhc_regs->hostver);
1009                 if (caps & HOSTCAPBLT_DMAS &&
1010                     HOSTVER_VENDOR(hostver) > VENDOR_V_22) {
1011                         priv->adma_desc_table = sdhci_adma_init();
1012                         if (!priv->adma_desc_table)
1013                                 debug("Could not allocate ADMA tables, falling back to SDMA\n");
1014                 }
1015         }
1016
1017         if (gd->arch.sdhc_per_clk) {
1018                 priv->sdhc_clk = gd->arch.sdhc_per_clk;
1019                 priv->is_sdhc_per_clk = true;
1020         } else {
1021                 priv->sdhc_clk = gd->arch.sdhc_clk;
1022         }
1023
1024         if (priv->sdhc_clk <= 0) {
1025                 dev_err(dev, "Unable to get clk for %s\n", dev->name);
1026                 return -EINVAL;
1027         }
1028
1029         fsl_esdhc_get_cfg_common(priv, &plat->cfg);
1030
1031         mmc_of_parse(dev, &plat->cfg);
1032
1033         mmc = &plat->mmc;
1034         mmc->cfg = &plat->cfg;
1035         mmc->dev = dev;
1036
1037         upriv->mmc = mmc;
1038
1039         ret = esdhc_init_common(priv, mmc);
1040         if (ret)
1041                 return ret;
1042
1043         if (IS_ENABLED(CONFIG_FSL_ESDHC_33V_IO_RELIABILITY_WORKAROUND) &&
1044             !fsl_esdhc_get_cd(dev))
1045                 esdhc_setbits32(&priv->esdhc_regs->proctl, PROCTL_VOLT_SEL);
1046
1047         return 0;
1048 }
1049
1050 static int fsl_esdhc_get_cd(struct udevice *dev)
1051 {
1052         struct fsl_esdhc_plat *plat = dev_get_plat(dev);
1053         struct fsl_esdhc_priv *priv = dev_get_priv(dev);
1054
1055         if (plat->cfg.host_caps & MMC_CAP_NONREMOVABLE)
1056                 return 1;
1057
1058         return esdhc_getcd_common(priv);
1059 }
1060
1061 static int fsl_esdhc_send_cmd(struct udevice *dev, struct mmc_cmd *cmd,
1062                               struct mmc_data *data)
1063 {
1064         struct fsl_esdhc_plat *plat = dev_get_plat(dev);
1065         struct fsl_esdhc_priv *priv = dev_get_priv(dev);
1066
1067         return esdhc_send_cmd_common(priv, &plat->mmc, cmd, data);
1068 }
1069
1070 static int fsl_esdhc_set_ios(struct udevice *dev)
1071 {
1072         struct fsl_esdhc_plat *plat = dev_get_plat(dev);
1073         struct fsl_esdhc_priv *priv = dev_get_priv(dev);
1074
1075         return esdhc_set_ios_common(priv, &plat->mmc);
1076 }
1077
1078 static int fsl_esdhc_reinit(struct udevice *dev)
1079 {
1080         struct fsl_esdhc_plat *plat = dev_get_plat(dev);
1081         struct fsl_esdhc_priv *priv = dev_get_priv(dev);
1082
1083         return esdhc_init_common(priv, &plat->mmc);
1084 }
1085
1086 #ifdef MMC_SUPPORTS_TUNING
1087 static int fsl_esdhc_execute_tuning(struct udevice *dev, uint32_t opcode)
1088 {
1089         struct fsl_esdhc_plat *plat = dev_get_plat(dev);
1090         struct fsl_esdhc_priv *priv = dev_get_priv(dev);
1091         struct fsl_esdhc *regs = priv->esdhc_regs;
1092         struct mmc *mmc = &plat->mmc;
1093         u32 val, irqstaten;
1094         int i;
1095
1096         if (IS_ENABLED(CONFIG_SYS_FSL_ERRATUM_A011334) &&
1097             plat->mmc.hs400_tuning)
1098                 set_sysctl(priv, mmc, mmc->clock);
1099
1100         esdhc_tuning_block_enable(priv, true);
1101         esdhc_setbits32(&regs->autoc12err, EXECUTE_TUNING);
1102
1103         irqstaten = esdhc_read32(&regs->irqstaten);
1104         esdhc_write32(&regs->irqstaten, IRQSTATEN_BRR);
1105
1106         for (i = 0; i < MAX_TUNING_LOOP; i++) {
1107                 mmc_send_tuning(mmc, opcode, NULL);
1108                 mdelay(1);
1109
1110                 val = esdhc_read32(&regs->autoc12err);
1111                 if (!(val & EXECUTE_TUNING)) {
1112                         if (val & SMPCLKSEL)
1113                                 break;
1114                 }
1115         }
1116
1117         esdhc_write32(&regs->irqstaten, irqstaten);
1118
1119         if (i != MAX_TUNING_LOOP) {
1120                 if (plat->mmc.hs400_tuning)
1121                         esdhc_setbits32(&regs->sdtimingctl, FLW_CTL_BG);
1122                 return 0;
1123         }
1124
1125         printf("fsl_esdhc: tuning failed!\n");
1126         esdhc_clrbits32(&regs->autoc12err, SMPCLKSEL);
1127         esdhc_clrbits32(&regs->autoc12err, EXECUTE_TUNING);
1128         esdhc_tuning_block_enable(priv, false);
1129         return -ETIMEDOUT;
1130 }
1131 #endif
1132
1133 int fsl_esdhc_hs400_prepare_ddr(struct udevice *dev)
1134 {
1135         struct fsl_esdhc_priv *priv = dev_get_priv(dev);
1136
1137         esdhc_tuning_block_enable(priv, false);
1138         return 0;
1139 }
1140
1141 static const struct dm_mmc_ops fsl_esdhc_ops = {
1142         .get_cd         = fsl_esdhc_get_cd,
1143         .send_cmd       = fsl_esdhc_send_cmd,
1144         .set_ios        = fsl_esdhc_set_ios,
1145 #ifdef MMC_SUPPORTS_TUNING
1146         .execute_tuning = fsl_esdhc_execute_tuning,
1147 #endif
1148         .reinit = fsl_esdhc_reinit,
1149         .hs400_prepare_ddr = fsl_esdhc_hs400_prepare_ddr,
1150 };
1151
1152 static const struct udevice_id fsl_esdhc_ids[] = {
1153         { .compatible = "fsl,esdhc", },
1154         { /* sentinel */ }
1155 };
1156
1157 static int fsl_esdhc_bind(struct udevice *dev)
1158 {
1159         struct fsl_esdhc_plat *plat = dev_get_plat(dev);
1160
1161         return mmc_bind(dev, &plat->mmc, &plat->cfg);
1162 }
1163
1164 U_BOOT_DRIVER(fsl_esdhc) = {
1165         .name   = "fsl-esdhc-mmc",
1166         .id     = UCLASS_MMC,
1167         .of_match = fsl_esdhc_ids,
1168         .ops    = &fsl_esdhc_ops,
1169         .bind   = fsl_esdhc_bind,
1170         .probe  = fsl_esdhc_probe,
1171         .plat_auto      = sizeof(struct fsl_esdhc_plat),
1172         .priv_auto      = sizeof(struct fsl_esdhc_priv),
1173 };
1174 #endif