1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * Freescale eSDHC controller driver. 4 * 5 * Copyright (c) 2007, 2010, 2012 Freescale Semiconductor, Inc. 6 * Copyright (c) 2009 MontaVista Software, Inc. 7 * 8 * Authors: Xiaobo Xie <X.Xie@freescale.com> 9 * Anton Vorontsov <avorontsov@ru.mvista.com> 10 */ 11 12 #include <linux/err.h> 13 #include <linux/io.h> 14 #include <linux/of.h> 15 #include <linux/of_address.h> 16 #include <linux/delay.h> 17 #include <linux/module.h> 18 #include <linux/sys_soc.h> 19 #include <linux/clk.h> 20 #include <linux/ktime.h> 21 #include <linux/dma-mapping.h> 22 #include <linux/mmc/host.h> 23 #include <linux/mmc/mmc.h> 24 #include "sdhci-pltfm.h" 25 #include "sdhci-esdhc.h" 26 27 #define VENDOR_V_22 0x12 28 #define VENDOR_V_23 0x13 29 30 #define MMC_TIMING_NUM (MMC_TIMING_MMC_HS400 + 1) 31 32 struct esdhc_clk_fixup { 33 const unsigned int sd_dflt_max_clk; 34 const unsigned int max_clk[MMC_TIMING_NUM]; 35 }; 36 37 static const struct esdhc_clk_fixup ls1021a_esdhc_clk = { 38 .sd_dflt_max_clk = 25000000, 39 .max_clk[MMC_TIMING_MMC_HS] = 46500000, 40 .max_clk[MMC_TIMING_SD_HS] = 46500000, 41 }; 42 43 static const struct esdhc_clk_fixup ls1046a_esdhc_clk = { 44 .sd_dflt_max_clk = 25000000, 45 .max_clk[MMC_TIMING_UHS_SDR104] = 167000000, 46 .max_clk[MMC_TIMING_MMC_HS200] = 167000000, 47 }; 48 49 static const struct esdhc_clk_fixup ls1012a_esdhc_clk = { 50 .sd_dflt_max_clk = 25000000, 51 .max_clk[MMC_TIMING_UHS_SDR104] = 125000000, 52 .max_clk[MMC_TIMING_MMC_HS200] = 125000000, 53 }; 54 55 static const struct esdhc_clk_fixup p1010_esdhc_clk = { 56 .sd_dflt_max_clk = 20000000, 57 .max_clk[MMC_TIMING_LEGACY] = 20000000, 58 .max_clk[MMC_TIMING_MMC_HS] = 42000000, 59 .max_clk[MMC_TIMING_SD_HS] = 40000000, 60 }; 61 62 static const struct of_device_id sdhci_esdhc_of_match[] = { 63 { .compatible = "fsl,ls1021a-esdhc", .data = &ls1021a_esdhc_clk}, 64 { .compatible = "fsl,ls1046a-esdhc", .data = &ls1046a_esdhc_clk}, 65 { .compatible = "fsl,ls1012a-esdhc", .data = &ls1012a_esdhc_clk}, 66 { .compatible = "fsl,p1010-esdhc", .data = &p1010_esdhc_clk}, 67 { .compatible = "fsl,mpc8379-esdhc" }, 68 { .compatible = "fsl,mpc8536-esdhc" }, 69 { .compatible = "fsl,esdhc" }, 70 { } 71 }; 72 MODULE_DEVICE_TABLE(of, sdhci_esdhc_of_match); 73 74 struct sdhci_esdhc { 75 u8 vendor_ver; 76 u8 spec_ver; 77 bool quirk_incorrect_hostver; 78 bool quirk_limited_clk_division; 79 bool quirk_unreliable_pulse_detection; 80 bool quirk_fixup_tuning; 81 bool quirk_ignore_data_inhibit; 82 unsigned int peripheral_clock; 83 const struct esdhc_clk_fixup *clk_fixup; 84 u32 div_ratio; 85 }; 86 87 /** 88 * esdhc_read*_fixup - Fixup the value read from incompatible eSDHC register 89 * to make it compatible with SD spec. 90 * 91 * @host: pointer to sdhci_host 92 * @spec_reg: SD spec register address 93 * @value: 32bit eSDHC register value on spec_reg address 94 * 95 * In SD spec, there are 8/16/32/64 bits registers, while all of eSDHC 96 * registers are 32 bits. There are differences in register size, register 97 * address, register function, bit position and function between eSDHC spec 98 * and SD spec. 99 * 100 * Return a fixed up register value 101 */ 102 static u32 esdhc_readl_fixup(struct sdhci_host *host, 103 int spec_reg, u32 value) 104 { 105 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); 106 struct sdhci_esdhc *esdhc = sdhci_pltfm_priv(pltfm_host); 107 u32 ret; 108 109 /* 110 * The bit of ADMA flag in eSDHC is not compatible with standard 111 * SDHC register, so set fake flag SDHCI_CAN_DO_ADMA2 when ADMA is 112 * supported by eSDHC. 113 * And for many FSL eSDHC controller, the reset value of field 114 * SDHCI_CAN_DO_ADMA1 is 1, but some of them can't support ADMA, 115 * only these vendor version is greater than 2.2/0x12 support ADMA. 116 */ 117 if ((spec_reg == SDHCI_CAPABILITIES) && (value & SDHCI_CAN_DO_ADMA1)) { 118 if (esdhc->vendor_ver > VENDOR_V_22) { 119 ret = value | SDHCI_CAN_DO_ADMA2; 120 return ret; 121 } 122 } 123 /* 124 * The DAT[3:0] line signal levels and the CMD line signal level are 125 * not compatible with standard SDHC register. The line signal levels 126 * DAT[7:0] are at bits 31:24 and the command line signal level is at 127 * bit 23. All other bits are the same as in the standard SDHC 128 * register. 129 */ 130 if (spec_reg == SDHCI_PRESENT_STATE) { 131 ret = value & 0x000fffff; 132 ret |= (value >> 4) & SDHCI_DATA_LVL_MASK; 133 ret |= (value << 1) & SDHCI_CMD_LVL; 134 return ret; 135 } 136 137 /* 138 * DTS properties of mmc host are used to enable each speed mode 139 * according to soc and board capability. So clean up 140 * SDR50/SDR104/DDR50 support bits here. 141 */ 142 if (spec_reg == SDHCI_CAPABILITIES_1) { 143 ret = value & ~(SDHCI_SUPPORT_SDR50 | SDHCI_SUPPORT_SDR104 | 144 SDHCI_SUPPORT_DDR50); 145 return ret; 146 } 147 148 /* 149 * Some controllers have unreliable Data Line Active 150 * bit for commands with busy signal. This affects 151 * Command Inhibit (data) bit. Just ignore it since 152 * MMC core driver has already polled card status 153 * with CMD13 after any command with busy siganl. 154 */ 155 if ((spec_reg == SDHCI_PRESENT_STATE) && 156 (esdhc->quirk_ignore_data_inhibit == true)) { 157 ret = value & ~SDHCI_DATA_INHIBIT; 158 return ret; 159 } 160 161 ret = value; 162 return ret; 163 } 164 165 static u16 esdhc_readw_fixup(struct sdhci_host *host, 166 int spec_reg, u32 value) 167 { 168 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); 169 struct sdhci_esdhc *esdhc = sdhci_pltfm_priv(pltfm_host); 170 u16 ret; 171 int shift = (spec_reg & 0x2) * 8; 172 173 if (spec_reg == SDHCI_HOST_VERSION) 174 ret = value & 0xffff; 175 else 176 ret = (value >> shift) & 0xffff; 177 /* Workaround for T4240-R1.0-R2.0 eSDHC which has incorrect 178 * vendor version and spec version information. 179 */ 180 if ((spec_reg == SDHCI_HOST_VERSION) && 181 (esdhc->quirk_incorrect_hostver)) 182 ret = (VENDOR_V_23 << SDHCI_VENDOR_VER_SHIFT) | SDHCI_SPEC_200; 183 return ret; 184 } 185 186 static u8 esdhc_readb_fixup(struct sdhci_host *host, 187 int spec_reg, u32 value) 188 { 189 u8 ret; 190 u8 dma_bits; 191 int shift = (spec_reg & 0x3) * 8; 192 193 ret = (value >> shift) & 0xff; 194 195 /* 196 * "DMA select" locates at offset 0x28 in SD specification, but on 197 * P5020 or P3041, it locates at 0x29. 198 */ 199 if (spec_reg == SDHCI_HOST_CONTROL) { 200 /* DMA select is 22,23 bits in Protocol Control Register */ 201 dma_bits = (value >> 5) & SDHCI_CTRL_DMA_MASK; 202 /* fixup the result */ 203 ret &= ~SDHCI_CTRL_DMA_MASK; 204 ret |= dma_bits; 205 } 206 return ret; 207 } 208 209 /** 210 * esdhc_write*_fixup - Fixup the SD spec register value so that it could be 211 * written into eSDHC register. 212 * 213 * @host: pointer to sdhci_host 214 * @spec_reg: SD spec register address 215 * @value: 8/16/32bit SD spec register value that would be written 216 * @old_value: 32bit eSDHC register value on spec_reg address 217 * 218 * In SD spec, there are 8/16/32/64 bits registers, while all of eSDHC 219 * registers are 32 bits. There are differences in register size, register 220 * address, register function, bit position and function between eSDHC spec 221 * and SD spec. 222 * 223 * Return a fixed up register value 224 */ 225 static u32 esdhc_writel_fixup(struct sdhci_host *host, 226 int spec_reg, u32 value, u32 old_value) 227 { 228 u32 ret; 229 230 /* 231 * Enabling IRQSTATEN[BGESEN] is just to set IRQSTAT[BGE] 232 * when SYSCTL[RSTD] is set for some special operations. 233 * No any impact on other operation. 234 */ 235 if (spec_reg == SDHCI_INT_ENABLE) 236 ret = value | SDHCI_INT_BLK_GAP; 237 else 238 ret = value; 239 240 return ret; 241 } 242 243 static u32 esdhc_writew_fixup(struct sdhci_host *host, 244 int spec_reg, u16 value, u32 old_value) 245 { 246 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); 247 int shift = (spec_reg & 0x2) * 8; 248 u32 ret; 249 250 switch (spec_reg) { 251 case SDHCI_TRANSFER_MODE: 252 /* 253 * Postpone this write, we must do it together with a 254 * command write that is down below. Return old value. 255 */ 256 pltfm_host->xfer_mode_shadow = value; 257 return old_value; 258 case SDHCI_COMMAND: 259 ret = (value << 16) | pltfm_host->xfer_mode_shadow; 260 return ret; 261 } 262 263 ret = old_value & (~(0xffff << shift)); 264 ret |= (value << shift); 265 266 if (spec_reg == SDHCI_BLOCK_SIZE) { 267 /* 268 * Two last DMA bits are reserved, and first one is used for 269 * non-standard blksz of 4096 bytes that we don't support 270 * yet. So clear the DMA boundary bits. 271 */ 272 ret &= (~SDHCI_MAKE_BLKSZ(0x7, 0)); 273 } 274 return ret; 275 } 276 277 static u32 esdhc_writeb_fixup(struct sdhci_host *host, 278 int spec_reg, u8 value, u32 old_value) 279 { 280 u32 ret; 281 u32 dma_bits; 282 u8 tmp; 283 int shift = (spec_reg & 0x3) * 8; 284 285 /* 286 * eSDHC doesn't have a standard power control register, so we do 287 * nothing here to avoid incorrect operation. 288 */ 289 if (spec_reg == SDHCI_POWER_CONTROL) 290 return old_value; 291 /* 292 * "DMA select" location is offset 0x28 in SD specification, but on 293 * P5020 or P3041, it's located at 0x29. 294 */ 295 if (spec_reg == SDHCI_HOST_CONTROL) { 296 /* 297 * If host control register is not standard, exit 298 * this function 299 */ 300 if (host->quirks2 & SDHCI_QUIRK2_BROKEN_HOST_CONTROL) 301 return old_value; 302 303 /* DMA select is 22,23 bits in Protocol Control Register */ 304 dma_bits = (value & SDHCI_CTRL_DMA_MASK) << 5; 305 ret = (old_value & (~(SDHCI_CTRL_DMA_MASK << 5))) | dma_bits; 306 tmp = (value & (~SDHCI_CTRL_DMA_MASK)) | 307 (old_value & SDHCI_CTRL_DMA_MASK); 308 ret = (ret & (~0xff)) | tmp; 309 310 /* Prevent SDHCI core from writing reserved bits (e.g. HISPD) */ 311 ret &= ~ESDHC_HOST_CONTROL_RES; 312 return ret; 313 } 314 315 ret = (old_value & (~(0xff << shift))) | (value << shift); 316 return ret; 317 } 318 319 static u32 esdhc_be_readl(struct sdhci_host *host, int reg) 320 { 321 u32 ret; 322 u32 value; 323 324 if (reg == SDHCI_CAPABILITIES_1) 325 value = ioread32be(host->ioaddr + ESDHC_CAPABILITIES_1); 326 else 327 value = ioread32be(host->ioaddr + reg); 328 329 ret = esdhc_readl_fixup(host, reg, value); 330 331 return ret; 332 } 333 334 static u32 esdhc_le_readl(struct sdhci_host *host, int reg) 335 { 336 u32 ret; 337 u32 value; 338 339 if (reg == SDHCI_CAPABILITIES_1) 340 value = ioread32(host->ioaddr + ESDHC_CAPABILITIES_1); 341 else 342 value = ioread32(host->ioaddr + reg); 343 344 ret = esdhc_readl_fixup(host, reg, value); 345 346 return ret; 347 } 348 349 static u16 esdhc_be_readw(struct sdhci_host *host, int reg) 350 { 351 u16 ret; 352 u32 value; 353 int base = reg & ~0x3; 354 355 value = ioread32be(host->ioaddr + base); 356 ret = esdhc_readw_fixup(host, reg, value); 357 return ret; 358 } 359 360 static u16 esdhc_le_readw(struct sdhci_host *host, int reg) 361 { 362 u16 ret; 363 u32 value; 364 int base = reg & ~0x3; 365 366 value = ioread32(host->ioaddr + base); 367 ret = esdhc_readw_fixup(host, reg, value); 368 return ret; 369 } 370 371 static u8 esdhc_be_readb(struct sdhci_host *host, int reg) 372 { 373 u8 ret; 374 u32 value; 375 int base = reg & ~0x3; 376 377 value = ioread32be(host->ioaddr + base); 378 ret = esdhc_readb_fixup(host, reg, value); 379 return ret; 380 } 381 382 static u8 esdhc_le_readb(struct sdhci_host *host, int reg) 383 { 384 u8 ret; 385 u32 value; 386 int base = reg & ~0x3; 387 388 value = ioread32(host->ioaddr + base); 389 ret = esdhc_readb_fixup(host, reg, value); 390 return ret; 391 } 392 393 static void esdhc_be_writel(struct sdhci_host *host, u32 val, int reg) 394 { 395 u32 value; 396 397 value = esdhc_writel_fixup(host, reg, val, 0); 398 iowrite32be(value, host->ioaddr + reg); 399 } 400 401 static void esdhc_le_writel(struct sdhci_host *host, u32 val, int reg) 402 { 403 u32 value; 404 405 value = esdhc_writel_fixup(host, reg, val, 0); 406 iowrite32(value, host->ioaddr + reg); 407 } 408 409 static void esdhc_be_writew(struct sdhci_host *host, u16 val, int reg) 410 { 411 int base = reg & ~0x3; 412 u32 value; 413 u32 ret; 414 415 value = ioread32be(host->ioaddr + base); 416 ret = esdhc_writew_fixup(host, reg, val, value); 417 if (reg != SDHCI_TRANSFER_MODE) 418 iowrite32be(ret, host->ioaddr + base); 419 } 420 421 static void esdhc_le_writew(struct sdhci_host *host, u16 val, int reg) 422 { 423 int base = reg & ~0x3; 424 u32 value; 425 u32 ret; 426 427 value = ioread32(host->ioaddr + base); 428 ret = esdhc_writew_fixup(host, reg, val, value); 429 if (reg != SDHCI_TRANSFER_MODE) 430 iowrite32(ret, host->ioaddr + base); 431 } 432 433 static void esdhc_be_writeb(struct sdhci_host *host, u8 val, int reg) 434 { 435 int base = reg & ~0x3; 436 u32 value; 437 u32 ret; 438 439 value = ioread32be(host->ioaddr + base); 440 ret = esdhc_writeb_fixup(host, reg, val, value); 441 iowrite32be(ret, host->ioaddr + base); 442 } 443 444 static void esdhc_le_writeb(struct sdhci_host *host, u8 val, int reg) 445 { 446 int base = reg & ~0x3; 447 u32 value; 448 u32 ret; 449 450 value = ioread32(host->ioaddr + base); 451 ret = esdhc_writeb_fixup(host, reg, val, value); 452 iowrite32(ret, host->ioaddr + base); 453 } 454 455 /* 456 * For Abort or Suspend after Stop at Block Gap, ignore the ADMA 457 * error(IRQSTAT[ADMAE]) if both Transfer Complete(IRQSTAT[TC]) 458 * and Block Gap Event(IRQSTAT[BGE]) are also set. 459 * For Continue, apply soft reset for data(SYSCTL[RSTD]); 460 * and re-issue the entire read transaction from beginning. 461 */ 462 static void esdhc_of_adma_workaround(struct sdhci_host *host, u32 intmask) 463 { 464 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); 465 struct sdhci_esdhc *esdhc = sdhci_pltfm_priv(pltfm_host); 466 bool applicable; 467 dma_addr_t dmastart; 468 dma_addr_t dmanow; 469 470 applicable = (intmask & SDHCI_INT_DATA_END) && 471 (intmask & SDHCI_INT_BLK_GAP) && 472 (esdhc->vendor_ver == VENDOR_V_23); 473 if (!applicable) 474 return; 475 476 host->data->error = 0; 477 dmastart = sg_dma_address(host->data->sg); 478 dmanow = dmastart + host->data->bytes_xfered; 479 /* 480 * Force update to the next DMA block boundary. 481 */ 482 dmanow = (dmanow & ~(SDHCI_DEFAULT_BOUNDARY_SIZE - 1)) + 483 SDHCI_DEFAULT_BOUNDARY_SIZE; 484 host->data->bytes_xfered = dmanow - dmastart; 485 sdhci_writel(host, dmanow, SDHCI_DMA_ADDRESS); 486 } 487 488 static int esdhc_of_enable_dma(struct sdhci_host *host) 489 { 490 u32 value; 491 struct device *dev = mmc_dev(host->mmc); 492 493 if (of_device_is_compatible(dev->of_node, "fsl,ls1043a-esdhc") || 494 of_device_is_compatible(dev->of_node, "fsl,ls1046a-esdhc")) 495 dma_set_mask_and_coherent(dev, DMA_BIT_MASK(40)); 496 497 value = sdhci_readl(host, ESDHC_DMA_SYSCTL); 498 value |= ESDHC_DMA_SNOOP; 499 sdhci_writel(host, value, ESDHC_DMA_SYSCTL); 500 return 0; 501 } 502 503 static unsigned int esdhc_of_get_max_clock(struct sdhci_host *host) 504 { 505 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); 506 struct sdhci_esdhc *esdhc = sdhci_pltfm_priv(pltfm_host); 507 508 if (esdhc->peripheral_clock) 509 return esdhc->peripheral_clock; 510 else 511 return pltfm_host->clock; 512 } 513 514 static unsigned int esdhc_of_get_min_clock(struct sdhci_host *host) 515 { 516 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); 517 struct sdhci_esdhc *esdhc = sdhci_pltfm_priv(pltfm_host); 518 unsigned int clock; 519 520 if (esdhc->peripheral_clock) 521 clock = esdhc->peripheral_clock; 522 else 523 clock = pltfm_host->clock; 524 return clock / 256 / 16; 525 } 526 527 static void esdhc_clock_enable(struct sdhci_host *host, bool enable) 528 { 529 u32 val; 530 ktime_t timeout; 531 532 val = sdhci_readl(host, ESDHC_SYSTEM_CONTROL); 533 534 if (enable) 535 val |= ESDHC_CLOCK_SDCLKEN; 536 else 537 val &= ~ESDHC_CLOCK_SDCLKEN; 538 539 sdhci_writel(host, val, ESDHC_SYSTEM_CONTROL); 540 541 /* Wait max 20 ms */ 542 timeout = ktime_add_ms(ktime_get(), 20); 543 val = ESDHC_CLOCK_STABLE; 544 while (1) { 545 bool timedout = ktime_after(ktime_get(), timeout); 546 547 if (sdhci_readl(host, ESDHC_PRSSTAT) & val) 548 break; 549 if (timedout) { 550 pr_err("%s: Internal clock never stabilised.\n", 551 mmc_hostname(host->mmc)); 552 break; 553 } 554 udelay(10); 555 } 556 } 557 558 static void esdhc_of_set_clock(struct sdhci_host *host, unsigned int clock) 559 { 560 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); 561 struct sdhci_esdhc *esdhc = sdhci_pltfm_priv(pltfm_host); 562 int pre_div = 1; 563 int div = 1; 564 int division; 565 ktime_t timeout; 566 long fixup = 0; 567 u32 temp; 568 569 host->mmc->actual_clock = 0; 570 571 if (clock == 0) { 572 esdhc_clock_enable(host, false); 573 return; 574 } 575 576 /* Workaround to start pre_div at 2 for VNN < VENDOR_V_23 */ 577 if (esdhc->vendor_ver < VENDOR_V_23) 578 pre_div = 2; 579 580 if (host->mmc->card && mmc_card_sd(host->mmc->card) && 581 esdhc->clk_fixup && host->mmc->ios.timing == MMC_TIMING_LEGACY) 582 fixup = esdhc->clk_fixup->sd_dflt_max_clk; 583 else if (esdhc->clk_fixup) 584 fixup = esdhc->clk_fixup->max_clk[host->mmc->ios.timing]; 585 586 if (fixup && clock > fixup) 587 clock = fixup; 588 589 temp = sdhci_readl(host, ESDHC_SYSTEM_CONTROL); 590 temp &= ~(ESDHC_CLOCK_SDCLKEN | ESDHC_CLOCK_IPGEN | ESDHC_CLOCK_HCKEN | 591 ESDHC_CLOCK_PEREN | ESDHC_CLOCK_MASK); 592 sdhci_writel(host, temp, ESDHC_SYSTEM_CONTROL); 593 594 while (host->max_clk / pre_div / 16 > clock && pre_div < 256) 595 pre_div *= 2; 596 597 while (host->max_clk / pre_div / div > clock && div < 16) 598 div++; 599 600 if (esdhc->quirk_limited_clk_division && 601 clock == MMC_HS200_MAX_DTR && 602 (host->mmc->ios.timing == MMC_TIMING_MMC_HS400 || 603 host->flags & SDHCI_HS400_TUNING)) { 604 division = pre_div * div; 605 if (division <= 4) { 606 pre_div = 4; 607 div = 1; 608 } else if (division <= 8) { 609 pre_div = 4; 610 div = 2; 611 } else if (division <= 12) { 612 pre_div = 4; 613 div = 3; 614 } else { 615 pr_warn("%s: using unsupported clock division.\n", 616 mmc_hostname(host->mmc)); 617 } 618 } 619 620 dev_dbg(mmc_dev(host->mmc), "desired SD clock: %d, actual: %d\n", 621 clock, host->max_clk / pre_div / div); 622 host->mmc->actual_clock = host->max_clk / pre_div / div; 623 esdhc->div_ratio = pre_div * div; 624 pre_div >>= 1; 625 div--; 626 627 temp = sdhci_readl(host, ESDHC_SYSTEM_CONTROL); 628 temp |= (ESDHC_CLOCK_IPGEN | ESDHC_CLOCK_HCKEN | ESDHC_CLOCK_PEREN 629 | (div << ESDHC_DIVIDER_SHIFT) 630 | (pre_div << ESDHC_PREDIV_SHIFT)); 631 sdhci_writel(host, temp, ESDHC_SYSTEM_CONTROL); 632 633 if (host->mmc->ios.timing == MMC_TIMING_MMC_HS400 && 634 clock == MMC_HS200_MAX_DTR) { 635 temp = sdhci_readl(host, ESDHC_TBCTL); 636 sdhci_writel(host, temp | ESDHC_HS400_MODE, ESDHC_TBCTL); 637 temp = sdhci_readl(host, ESDHC_SDCLKCTL); 638 sdhci_writel(host, temp | ESDHC_CMD_CLK_CTL, ESDHC_SDCLKCTL); 639 esdhc_clock_enable(host, true); 640 641 temp = sdhci_readl(host, ESDHC_DLLCFG0); 642 temp |= ESDHC_DLL_ENABLE; 643 if (host->mmc->actual_clock == MMC_HS200_MAX_DTR) 644 temp |= ESDHC_DLL_FREQ_SEL; 645 sdhci_writel(host, temp, ESDHC_DLLCFG0); 646 temp = sdhci_readl(host, ESDHC_TBCTL); 647 sdhci_writel(host, temp | ESDHC_HS400_WNDW_ADJUST, ESDHC_TBCTL); 648 649 esdhc_clock_enable(host, false); 650 temp = sdhci_readl(host, ESDHC_DMA_SYSCTL); 651 temp |= ESDHC_FLUSH_ASYNC_FIFO; 652 sdhci_writel(host, temp, ESDHC_DMA_SYSCTL); 653 } 654 655 /* Wait max 20 ms */ 656 timeout = ktime_add_ms(ktime_get(), 20); 657 while (1) { 658 bool timedout = ktime_after(ktime_get(), timeout); 659 660 if (sdhci_readl(host, ESDHC_PRSSTAT) & ESDHC_CLOCK_STABLE) 661 break; 662 if (timedout) { 663 pr_err("%s: Internal clock never stabilised.\n", 664 mmc_hostname(host->mmc)); 665 return; 666 } 667 udelay(10); 668 } 669 670 temp = sdhci_readl(host, ESDHC_SYSTEM_CONTROL); 671 temp |= ESDHC_CLOCK_SDCLKEN; 672 sdhci_writel(host, temp, ESDHC_SYSTEM_CONTROL); 673 } 674 675 static void esdhc_pltfm_set_bus_width(struct sdhci_host *host, int width) 676 { 677 u32 ctrl; 678 679 ctrl = sdhci_readl(host, ESDHC_PROCTL); 680 ctrl &= (~ESDHC_CTRL_BUSWIDTH_MASK); 681 switch (width) { 682 case MMC_BUS_WIDTH_8: 683 ctrl |= ESDHC_CTRL_8BITBUS; 684 break; 685 686 case MMC_BUS_WIDTH_4: 687 ctrl |= ESDHC_CTRL_4BITBUS; 688 break; 689 690 default: 691 break; 692 } 693 694 sdhci_writel(host, ctrl, ESDHC_PROCTL); 695 } 696 697 static void esdhc_reset(struct sdhci_host *host, u8 mask) 698 { 699 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); 700 struct sdhci_esdhc *esdhc = sdhci_pltfm_priv(pltfm_host); 701 u32 val; 702 703 sdhci_reset(host, mask); 704 705 sdhci_writel(host, host->ier, SDHCI_INT_ENABLE); 706 sdhci_writel(host, host->ier, SDHCI_SIGNAL_ENABLE); 707 708 if (of_find_compatible_node(NULL, NULL, "fsl,p2020-esdhc")) 709 mdelay(5); 710 711 if (mask & SDHCI_RESET_ALL) { 712 val = sdhci_readl(host, ESDHC_TBCTL); 713 val &= ~ESDHC_TB_EN; 714 sdhci_writel(host, val, ESDHC_TBCTL); 715 716 if (esdhc->quirk_unreliable_pulse_detection) { 717 val = sdhci_readl(host, ESDHC_DLLCFG1); 718 val &= ~ESDHC_DLL_PD_PULSE_STRETCH_SEL; 719 sdhci_writel(host, val, ESDHC_DLLCFG1); 720 } 721 } 722 } 723 724 /* The SCFG, Supplemental Configuration Unit, provides SoC specific 725 * configuration and status registers for the device. There is a 726 * SDHC IO VSEL control register on SCFG for some platforms. It's 727 * used to support SDHC IO voltage switching. 728 */ 729 static const struct of_device_id scfg_device_ids[] = { 730 { .compatible = "fsl,t1040-scfg", }, 731 { .compatible = "fsl,ls1012a-scfg", }, 732 { .compatible = "fsl,ls1046a-scfg", }, 733 {} 734 }; 735 736 /* SDHC IO VSEL control register definition */ 737 #define SCFG_SDHCIOVSELCR 0x408 738 #define SDHCIOVSELCR_TGLEN 0x80000000 739 #define SDHCIOVSELCR_VSELVAL 0x60000000 740 #define SDHCIOVSELCR_SDHC_VS 0x00000001 741 742 static int esdhc_signal_voltage_switch(struct mmc_host *mmc, 743 struct mmc_ios *ios) 744 { 745 struct sdhci_host *host = mmc_priv(mmc); 746 struct device_node *scfg_node; 747 void __iomem *scfg_base = NULL; 748 u32 sdhciovselcr; 749 u32 val; 750 751 /* 752 * Signal Voltage Switching is only applicable for Host Controllers 753 * v3.00 and above. 754 */ 755 if (host->version < SDHCI_SPEC_300) 756 return 0; 757 758 val = sdhci_readl(host, ESDHC_PROCTL); 759 760 switch (ios->signal_voltage) { 761 case MMC_SIGNAL_VOLTAGE_330: 762 val &= ~ESDHC_VOLT_SEL; 763 sdhci_writel(host, val, ESDHC_PROCTL); 764 return 0; 765 case MMC_SIGNAL_VOLTAGE_180: 766 scfg_node = of_find_matching_node(NULL, scfg_device_ids); 767 if (scfg_node) 768 scfg_base = of_iomap(scfg_node, 0); 769 if (scfg_base) { 770 sdhciovselcr = SDHCIOVSELCR_TGLEN | 771 SDHCIOVSELCR_VSELVAL; 772 iowrite32be(sdhciovselcr, 773 scfg_base + SCFG_SDHCIOVSELCR); 774 775 val |= ESDHC_VOLT_SEL; 776 sdhci_writel(host, val, ESDHC_PROCTL); 777 mdelay(5); 778 779 sdhciovselcr = SDHCIOVSELCR_TGLEN | 780 SDHCIOVSELCR_SDHC_VS; 781 iowrite32be(sdhciovselcr, 782 scfg_base + SCFG_SDHCIOVSELCR); 783 iounmap(scfg_base); 784 } else { 785 val |= ESDHC_VOLT_SEL; 786 sdhci_writel(host, val, ESDHC_PROCTL); 787 } 788 return 0; 789 default: 790 return 0; 791 } 792 } 793 794 static struct soc_device_attribute soc_fixup_tuning[] = { 795 { .family = "QorIQ T1040", .revision = "1.0", }, 796 { .family = "QorIQ T2080", .revision = "1.0", }, 797 { .family = "QorIQ T1023", .revision = "1.0", }, 798 { .family = "QorIQ LS1021A", .revision = "1.0", }, 799 { .family = "QorIQ LS1080A", .revision = "1.0", }, 800 { .family = "QorIQ LS2080A", .revision = "1.0", }, 801 { .family = "QorIQ LS1012A", .revision = "1.0", }, 802 { .family = "QorIQ LS1043A", .revision = "1.*", }, 803 { .family = "QorIQ LS1046A", .revision = "1.0", }, 804 { }, 805 }; 806 807 static void esdhc_tuning_block_enable(struct sdhci_host *host, bool enable) 808 { 809 u32 val; 810 811 esdhc_clock_enable(host, false); 812 813 val = sdhci_readl(host, ESDHC_DMA_SYSCTL); 814 val |= ESDHC_FLUSH_ASYNC_FIFO; 815 sdhci_writel(host, val, ESDHC_DMA_SYSCTL); 816 817 val = sdhci_readl(host, ESDHC_TBCTL); 818 if (enable) 819 val |= ESDHC_TB_EN; 820 else 821 val &= ~ESDHC_TB_EN; 822 sdhci_writel(host, val, ESDHC_TBCTL); 823 824 esdhc_clock_enable(host, true); 825 } 826 827 static int esdhc_execute_tuning(struct mmc_host *mmc, u32 opcode) 828 { 829 struct sdhci_host *host = mmc_priv(mmc); 830 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); 831 struct sdhci_esdhc *esdhc = sdhci_pltfm_priv(pltfm_host); 832 bool hs400_tuning; 833 unsigned int clk; 834 u32 val; 835 int ret; 836 837 /* For tuning mode, the sd clock divisor value 838 * must be larger than 3 according to reference manual. 839 */ 840 clk = esdhc->peripheral_clock / 3; 841 if (host->clock > clk) 842 esdhc_of_set_clock(host, clk); 843 844 if (esdhc->quirk_limited_clk_division && 845 host->flags & SDHCI_HS400_TUNING) 846 esdhc_of_set_clock(host, host->clock); 847 848 esdhc_tuning_block_enable(host, true); 849 850 hs400_tuning = host->flags & SDHCI_HS400_TUNING; 851 ret = sdhci_execute_tuning(mmc, opcode); 852 853 if (hs400_tuning) { 854 val = sdhci_readl(host, ESDHC_SDTIMNGCTL); 855 val |= ESDHC_FLW_CTL_BG; 856 sdhci_writel(host, val, ESDHC_SDTIMNGCTL); 857 } 858 859 if (host->tuning_err == -EAGAIN && esdhc->quirk_fixup_tuning) { 860 861 /* program TBPTR[TB_WNDW_END_PTR] = 3*DIV_RATIO and 862 * program TBPTR[TB_WNDW_START_PTR] = 5*DIV_RATIO 863 */ 864 val = sdhci_readl(host, ESDHC_TBPTR); 865 val = (val & ~((0x7f << 8) | 0x7f)) | 866 (3 * esdhc->div_ratio) | ((5 * esdhc->div_ratio) << 8); 867 sdhci_writel(host, val, ESDHC_TBPTR); 868 869 /* program the software tuning mode by setting 870 * TBCTL[TB_MODE]=2'h3 871 */ 872 val = sdhci_readl(host, ESDHC_TBCTL); 873 val |= 0x3; 874 sdhci_writel(host, val, ESDHC_TBCTL); 875 sdhci_execute_tuning(mmc, opcode); 876 } 877 return ret; 878 } 879 880 static void esdhc_set_uhs_signaling(struct sdhci_host *host, 881 unsigned int timing) 882 { 883 if (timing == MMC_TIMING_MMC_HS400) 884 esdhc_tuning_block_enable(host, true); 885 else 886 sdhci_set_uhs_signaling(host, timing); 887 } 888 889 static u32 esdhc_irq(struct sdhci_host *host, u32 intmask) 890 { 891 u32 command; 892 893 if (of_find_compatible_node(NULL, NULL, 894 "fsl,p2020-esdhc")) { 895 command = SDHCI_GET_CMD(sdhci_readw(host, 896 SDHCI_COMMAND)); 897 if (command == MMC_WRITE_MULTIPLE_BLOCK && 898 sdhci_readw(host, SDHCI_BLOCK_COUNT) && 899 intmask & SDHCI_INT_DATA_END) { 900 intmask &= ~SDHCI_INT_DATA_END; 901 sdhci_writel(host, SDHCI_INT_DATA_END, 902 SDHCI_INT_STATUS); 903 } 904 } 905 return intmask; 906 } 907 908 #ifdef CONFIG_PM_SLEEP 909 static u32 esdhc_proctl; 910 static int esdhc_of_suspend(struct device *dev) 911 { 912 struct sdhci_host *host = dev_get_drvdata(dev); 913 914 esdhc_proctl = sdhci_readl(host, SDHCI_HOST_CONTROL); 915 916 if (host->tuning_mode != SDHCI_TUNING_MODE_3) 917 mmc_retune_needed(host->mmc); 918 919 return sdhci_suspend_host(host); 920 } 921 922 static int esdhc_of_resume(struct device *dev) 923 { 924 struct sdhci_host *host = dev_get_drvdata(dev); 925 int ret = sdhci_resume_host(host); 926 927 if (ret == 0) { 928 /* Isn't this already done by sdhci_resume_host() ? --rmk */ 929 esdhc_of_enable_dma(host); 930 sdhci_writel(host, esdhc_proctl, SDHCI_HOST_CONTROL); 931 } 932 return ret; 933 } 934 #endif 935 936 static SIMPLE_DEV_PM_OPS(esdhc_of_dev_pm_ops, 937 esdhc_of_suspend, 938 esdhc_of_resume); 939 940 static const struct sdhci_ops sdhci_esdhc_be_ops = { 941 .read_l = esdhc_be_readl, 942 .read_w = esdhc_be_readw, 943 .read_b = esdhc_be_readb, 944 .write_l = esdhc_be_writel, 945 .write_w = esdhc_be_writew, 946 .write_b = esdhc_be_writeb, 947 .set_clock = esdhc_of_set_clock, 948 .enable_dma = esdhc_of_enable_dma, 949 .get_max_clock = esdhc_of_get_max_clock, 950 .get_min_clock = esdhc_of_get_min_clock, 951 .adma_workaround = esdhc_of_adma_workaround, 952 .set_bus_width = esdhc_pltfm_set_bus_width, 953 .reset = esdhc_reset, 954 .set_uhs_signaling = esdhc_set_uhs_signaling, 955 .irq = esdhc_irq, 956 }; 957 958 static const struct sdhci_ops sdhci_esdhc_le_ops = { 959 .read_l = esdhc_le_readl, 960 .read_w = esdhc_le_readw, 961 .read_b = esdhc_le_readb, 962 .write_l = esdhc_le_writel, 963 .write_w = esdhc_le_writew, 964 .write_b = esdhc_le_writeb, 965 .set_clock = esdhc_of_set_clock, 966 .enable_dma = esdhc_of_enable_dma, 967 .get_max_clock = esdhc_of_get_max_clock, 968 .get_min_clock = esdhc_of_get_min_clock, 969 .adma_workaround = esdhc_of_adma_workaround, 970 .set_bus_width = esdhc_pltfm_set_bus_width, 971 .reset = esdhc_reset, 972 .set_uhs_signaling = esdhc_set_uhs_signaling, 973 .irq = esdhc_irq, 974 }; 975 976 static const struct sdhci_pltfm_data sdhci_esdhc_be_pdata = { 977 .quirks = ESDHC_DEFAULT_QUIRKS | 978 #ifdef CONFIG_PPC 979 SDHCI_QUIRK_BROKEN_CARD_DETECTION | 980 #endif 981 SDHCI_QUIRK_NO_CARD_NO_RESET | 982 SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC, 983 .ops = &sdhci_esdhc_be_ops, 984 }; 985 986 static const struct sdhci_pltfm_data sdhci_esdhc_le_pdata = { 987 .quirks = ESDHC_DEFAULT_QUIRKS | 988 SDHCI_QUIRK_NO_CARD_NO_RESET | 989 SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC, 990 .ops = &sdhci_esdhc_le_ops, 991 }; 992 993 static struct soc_device_attribute soc_incorrect_hostver[] = { 994 { .family = "QorIQ T4240", .revision = "1.0", }, 995 { .family = "QorIQ T4240", .revision = "2.0", }, 996 { }, 997 }; 998 999 static struct soc_device_attribute soc_fixup_sdhc_clkdivs[] = { 1000 { .family = "QorIQ LX2160A", .revision = "1.0", }, 1001 { .family = "QorIQ LX2160A", .revision = "2.0", }, 1002 { .family = "QorIQ LS1028A", .revision = "1.0", }, 1003 { }, 1004 }; 1005 1006 static struct soc_device_attribute soc_unreliable_pulse_detection[] = { 1007 { .family = "QorIQ LX2160A", .revision = "1.0", }, 1008 { }, 1009 }; 1010 1011 static void esdhc_init(struct platform_device *pdev, struct sdhci_host *host) 1012 { 1013 const struct of_device_id *match; 1014 struct sdhci_pltfm_host *pltfm_host; 1015 struct sdhci_esdhc *esdhc; 1016 struct device_node *np; 1017 struct clk *clk; 1018 u32 val; 1019 u16 host_ver; 1020 1021 pltfm_host = sdhci_priv(host); 1022 esdhc = sdhci_pltfm_priv(pltfm_host); 1023 1024 host_ver = sdhci_readw(host, SDHCI_HOST_VERSION); 1025 esdhc->vendor_ver = (host_ver & SDHCI_VENDOR_VER_MASK) >> 1026 SDHCI_VENDOR_VER_SHIFT; 1027 esdhc->spec_ver = host_ver & SDHCI_SPEC_VER_MASK; 1028 if (soc_device_match(soc_incorrect_hostver)) 1029 esdhc->quirk_incorrect_hostver = true; 1030 else 1031 esdhc->quirk_incorrect_hostver = false; 1032 1033 if (soc_device_match(soc_fixup_sdhc_clkdivs)) 1034 esdhc->quirk_limited_clk_division = true; 1035 else 1036 esdhc->quirk_limited_clk_division = false; 1037 1038 if (soc_device_match(soc_unreliable_pulse_detection)) 1039 esdhc->quirk_unreliable_pulse_detection = true; 1040 else 1041 esdhc->quirk_unreliable_pulse_detection = false; 1042 1043 match = of_match_node(sdhci_esdhc_of_match, pdev->dev.of_node); 1044 if (match) 1045 esdhc->clk_fixup = match->data; 1046 np = pdev->dev.of_node; 1047 clk = of_clk_get(np, 0); 1048 if (!IS_ERR(clk)) { 1049 /* 1050 * esdhc->peripheral_clock would be assigned with a value 1051 * which is eSDHC base clock when use periperal clock. 1052 * For some platforms, the clock value got by common clk 1053 * API is peripheral clock while the eSDHC base clock is 1054 * 1/2 peripheral clock. 1055 */ 1056 if (of_device_is_compatible(np, "fsl,ls1046a-esdhc") || 1057 of_device_is_compatible(np, "fsl,ls1028a-esdhc")) 1058 esdhc->peripheral_clock = clk_get_rate(clk) / 2; 1059 else 1060 esdhc->peripheral_clock = clk_get_rate(clk); 1061 1062 clk_put(clk); 1063 } 1064 1065 if (esdhc->peripheral_clock) { 1066 esdhc_clock_enable(host, false); 1067 val = sdhci_readl(host, ESDHC_DMA_SYSCTL); 1068 val |= ESDHC_PERIPHERAL_CLK_SEL; 1069 sdhci_writel(host, val, ESDHC_DMA_SYSCTL); 1070 esdhc_clock_enable(host, true); 1071 } 1072 } 1073 1074 static int esdhc_hs400_prepare_ddr(struct mmc_host *mmc) 1075 { 1076 esdhc_tuning_block_enable(mmc_priv(mmc), false); 1077 return 0; 1078 } 1079 1080 static int sdhci_esdhc_probe(struct platform_device *pdev) 1081 { 1082 struct sdhci_host *host; 1083 struct device_node *np; 1084 struct sdhci_pltfm_host *pltfm_host; 1085 struct sdhci_esdhc *esdhc; 1086 int ret; 1087 1088 np = pdev->dev.of_node; 1089 1090 if (of_property_read_bool(np, "little-endian")) 1091 host = sdhci_pltfm_init(pdev, &sdhci_esdhc_le_pdata, 1092 sizeof(struct sdhci_esdhc)); 1093 else 1094 host = sdhci_pltfm_init(pdev, &sdhci_esdhc_be_pdata, 1095 sizeof(struct sdhci_esdhc)); 1096 1097 if (IS_ERR(host)) 1098 return PTR_ERR(host); 1099 1100 host->mmc_host_ops.start_signal_voltage_switch = 1101 esdhc_signal_voltage_switch; 1102 host->mmc_host_ops.execute_tuning = esdhc_execute_tuning; 1103 host->mmc_host_ops.hs400_prepare_ddr = esdhc_hs400_prepare_ddr; 1104 host->tuning_delay = 1; 1105 1106 esdhc_init(pdev, host); 1107 1108 sdhci_get_of_property(pdev); 1109 1110 pltfm_host = sdhci_priv(host); 1111 esdhc = sdhci_pltfm_priv(pltfm_host); 1112 if (soc_device_match(soc_fixup_tuning)) 1113 esdhc->quirk_fixup_tuning = true; 1114 else 1115 esdhc->quirk_fixup_tuning = false; 1116 1117 if (esdhc->vendor_ver == VENDOR_V_22) 1118 host->quirks2 |= SDHCI_QUIRK2_HOST_NO_CMD23; 1119 1120 if (esdhc->vendor_ver > VENDOR_V_22) 1121 host->quirks &= ~SDHCI_QUIRK_NO_BUSY_IRQ; 1122 1123 if (of_find_compatible_node(NULL, NULL, "fsl,p2020-esdhc")) { 1124 host->quirks2 |= SDHCI_QUIRK_RESET_AFTER_REQUEST; 1125 host->quirks2 |= SDHCI_QUIRK_BROKEN_TIMEOUT_VAL; 1126 } 1127 1128 if (of_device_is_compatible(np, "fsl,p5040-esdhc") || 1129 of_device_is_compatible(np, "fsl,p5020-esdhc") || 1130 of_device_is_compatible(np, "fsl,p4080-esdhc") || 1131 of_device_is_compatible(np, "fsl,p1020-esdhc") || 1132 of_device_is_compatible(np, "fsl,t1040-esdhc")) 1133 host->quirks &= ~SDHCI_QUIRK_BROKEN_CARD_DETECTION; 1134 1135 if (of_device_is_compatible(np, "fsl,ls1021a-esdhc")) 1136 host->quirks |= SDHCI_QUIRK_BROKEN_TIMEOUT_VAL; 1137 1138 esdhc->quirk_ignore_data_inhibit = false; 1139 if (of_device_is_compatible(np, "fsl,p2020-esdhc")) { 1140 /* 1141 * Freescale messed up with P2020 as it has a non-standard 1142 * host control register 1143 */ 1144 host->quirks2 |= SDHCI_QUIRK2_BROKEN_HOST_CONTROL; 1145 esdhc->quirk_ignore_data_inhibit = true; 1146 } 1147 1148 /* call to generic mmc_of_parse to support additional capabilities */ 1149 ret = mmc_of_parse(host->mmc); 1150 if (ret) 1151 goto err; 1152 1153 mmc_of_parse_voltage(np, &host->ocr_mask); 1154 1155 ret = sdhci_add_host(host); 1156 if (ret) 1157 goto err; 1158 1159 return 0; 1160 err: 1161 sdhci_pltfm_free(pdev); 1162 return ret; 1163 } 1164 1165 static struct platform_driver sdhci_esdhc_driver = { 1166 .driver = { 1167 .name = "sdhci-esdhc", 1168 .of_match_table = sdhci_esdhc_of_match, 1169 .pm = &esdhc_of_dev_pm_ops, 1170 }, 1171 .probe = sdhci_esdhc_probe, 1172 .remove = sdhci_pltfm_unregister, 1173 }; 1174 1175 module_platform_driver(sdhci_esdhc_driver); 1176 1177 MODULE_DESCRIPTION("SDHCI OF driver for Freescale MPC eSDHC"); 1178 MODULE_AUTHOR("Xiaobo Xie <X.Xie@freescale.com>, " 1179 "Anton Vorontsov <avorontsov@ru.mvista.com>"); 1180 MODULE_LICENSE("GPL v2"); 1181