1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * Arasan Secure Digital Host Controller Interface. 4 * Copyright (C) 2011 - 2012 Michal Simek <monstr@monstr.eu> 5 * Copyright (c) 2012 Wind River Systems, Inc. 6 * Copyright (C) 2013 Pengutronix e.K. 7 * Copyright (C) 2013 Xilinx Inc. 8 * 9 * Based on sdhci-of-esdhc.c 10 * 11 * Copyright (c) 2007 Freescale Semiconductor, Inc. 12 * Copyright (c) 2009 MontaVista Software, Inc. 13 * 14 * Authors: Xiaobo Xie <X.Xie@freescale.com> 15 * Anton Vorontsov <avorontsov@ru.mvista.com> 16 */ 17 18 #include <linux/clk-provider.h> 19 #include <linux/mfd/syscon.h> 20 #include <linux/module.h> 21 #include <linux/of_device.h> 22 #include <linux/phy/phy.h> 23 #include <linux/regmap.h> 24 #include <linux/reset.h> 25 #include <linux/of.h> 26 #include <linux/firmware/xlnx-zynqmp.h> 27 28 #include "cqhci.h" 29 #include "sdhci-cqhci.h" 30 #include "sdhci-pltfm.h" 31 32 #define SDHCI_ARASAN_VENDOR_REGISTER 0x78 33 34 #define SDHCI_ARASAN_ITAPDLY_REGISTER 0xF0F8 35 #define SDHCI_ARASAN_ITAPDLY_SEL_MASK 0xFF 36 37 #define SDHCI_ARASAN_OTAPDLY_REGISTER 0xF0FC 38 #define SDHCI_ARASAN_OTAPDLY_SEL_MASK 0x3F 39 40 #define SDHCI_ARASAN_CQE_BASE_ADDR 0x200 41 #define VENDOR_ENHANCED_STROBE BIT(0) 42 43 #define PHY_CLK_TOO_SLOW_HZ 400000 44 #define MIN_PHY_CLK_HZ 50000000 45 46 #define SDHCI_ITAPDLY_CHGWIN 0x200 47 #define SDHCI_ITAPDLY_ENABLE 0x100 48 #define SDHCI_OTAPDLY_ENABLE 0x40 49 50 #define PHY_CTRL_REG1 0x270 51 #define PHY_CTRL_ITAPDLY_ENA_MASK BIT(0) 52 #define PHY_CTRL_ITAPDLY_SEL_MASK GENMASK(5, 1) 53 #define PHY_CTRL_ITAPDLY_SEL_SHIFT 1 54 #define PHY_CTRL_ITAP_CHG_WIN_MASK BIT(6) 55 #define PHY_CTRL_OTAPDLY_ENA_MASK BIT(8) 56 #define PHY_CTRL_OTAPDLY_SEL_MASK GENMASK(15, 12) 57 #define PHY_CTRL_OTAPDLY_SEL_SHIFT 12 58 #define PHY_CTRL_STRB_SEL_MASK GENMASK(23, 16) 59 #define PHY_CTRL_STRB_SEL_SHIFT 16 60 #define PHY_CTRL_TEST_CTRL_MASK GENMASK(31, 24) 61 62 #define PHY_CTRL_REG2 0x274 63 #define PHY_CTRL_EN_DLL_MASK BIT(0) 64 #define PHY_CTRL_DLL_RDY_MASK BIT(1) 65 #define PHY_CTRL_FREQ_SEL_MASK GENMASK(6, 4) 66 #define PHY_CTRL_FREQ_SEL_SHIFT 4 67 #define PHY_CTRL_SEL_DLY_TX_MASK BIT(16) 68 #define PHY_CTRL_SEL_DLY_RX_MASK BIT(17) 69 #define FREQSEL_200M_170M 0x0 70 #define FREQSEL_170M_140M 0x1 71 #define FREQSEL_140M_110M 0x2 72 #define FREQSEL_110M_80M 0x3 73 #define FREQSEL_80M_50M 0x4 74 #define FREQSEL_275M_250M 0x5 75 #define FREQSEL_250M_225M 0x6 76 #define FREQSEL_225M_200M 0x7 77 #define PHY_DLL_TIMEOUT_MS 100 78 79 /* Default settings for ZynqMP Clock Phases */ 80 #define ZYNQMP_ICLK_PHASE {0, 63, 63, 0, 63, 0, 0, 183, 54, 0, 0} 81 #define ZYNQMP_OCLK_PHASE {0, 72, 60, 0, 60, 72, 135, 48, 72, 135, 0} 82 83 #define VERSAL_ICLK_PHASE {0, 132, 132, 0, 132, 0, 0, 162, 90, 0, 0} 84 #define VERSAL_OCLK_PHASE {0, 60, 48, 0, 48, 72, 90, 36, 60, 90, 0} 85 86 #define VERSAL_NET_EMMC_ICLK_PHASE {0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 0} 87 #define VERSAL_NET_EMMC_OCLK_PHASE {0, 113, 0, 0, 0, 0, 0, 0, 113, 79, 45} 88 89 #define VERSAL_NET_PHY_CTRL_STRB90_STRB180_VAL 0X77 90 91 /* 92 * On some SoCs the syscon area has a feature where the upper 16-bits of 93 * each 32-bit register act as a write mask for the lower 16-bits. This allows 94 * atomic updates of the register without locking. This macro is used on SoCs 95 * that have that feature. 96 */ 97 #define HIWORD_UPDATE(val, mask, shift) \ 98 ((val) << (shift) | (mask) << ((shift) + 16)) 99 100 /** 101 * struct sdhci_arasan_soc_ctl_field - Field used in sdhci_arasan_soc_ctl_map 102 * 103 * @reg: Offset within the syscon of the register containing this field 104 * @width: Number of bits for this field 105 * @shift: Bit offset within @reg of this field (or -1 if not avail) 106 */ 107 struct sdhci_arasan_soc_ctl_field { 108 u32 reg; 109 u16 width; 110 s16 shift; 111 }; 112 113 /** 114 * struct sdhci_arasan_soc_ctl_map - Map in syscon to corecfg registers 115 * 116 * @baseclkfreq: Where to find corecfg_baseclkfreq 117 * @clockmultiplier: Where to find corecfg_clockmultiplier 118 * @support64b: Where to find SUPPORT64B bit 119 * @hiword_update: If true, use HIWORD_UPDATE to access the syscon 120 * 121 * It's up to the licensee of the Arsan IP block to make these available 122 * somewhere if needed. Presumably these will be scattered somewhere that's 123 * accessible via the syscon API. 124 */ 125 struct sdhci_arasan_soc_ctl_map { 126 struct sdhci_arasan_soc_ctl_field baseclkfreq; 127 struct sdhci_arasan_soc_ctl_field clockmultiplier; 128 struct sdhci_arasan_soc_ctl_field support64b; 129 bool hiword_update; 130 }; 131 132 /** 133 * struct sdhci_arasan_clk_ops - Clock Operations for Arasan SD controller 134 * 135 * @sdcardclk_ops: The output clock related operations 136 * @sampleclk_ops: The sample clock related operations 137 */ 138 struct sdhci_arasan_clk_ops { 139 const struct clk_ops *sdcardclk_ops; 140 const struct clk_ops *sampleclk_ops; 141 }; 142 143 /** 144 * struct sdhci_arasan_clk_data - Arasan Controller Clock Data. 145 * 146 * @sdcardclk_hw: Struct for the clock we might provide to a PHY. 147 * @sdcardclk: Pointer to normal 'struct clock' for sdcardclk_hw. 148 * @sampleclk_hw: Struct for the clock we might provide to a PHY. 149 * @sampleclk: Pointer to normal 'struct clock' for sampleclk_hw. 150 * @clk_phase_in: Array of Input Clock Phase Delays for all speed modes 151 * @clk_phase_out: Array of Output Clock Phase Delays for all speed modes 152 * @set_clk_delays: Function pointer for setting Clock Delays 153 * @clk_of_data: Platform specific runtime clock data storage pointer 154 */ 155 struct sdhci_arasan_clk_data { 156 struct clk_hw sdcardclk_hw; 157 struct clk *sdcardclk; 158 struct clk_hw sampleclk_hw; 159 struct clk *sampleclk; 160 int clk_phase_in[MMC_TIMING_MMC_HS400 + 1]; 161 int clk_phase_out[MMC_TIMING_MMC_HS400 + 1]; 162 void (*set_clk_delays)(struct sdhci_host *host); 163 void *clk_of_data; 164 }; 165 166 /** 167 * struct sdhci_arasan_data - Arasan Controller Data 168 * 169 * @host: Pointer to the main SDHCI host structure. 170 * @clk_ahb: Pointer to the AHB clock 171 * @phy: Pointer to the generic phy 172 * @is_phy_on: True if the PHY is on; false if not. 173 * @internal_phy_reg: True if the PHY is within the Host controller. 174 * @has_cqe: True if controller has command queuing engine. 175 * @clk_data: Struct for the Arasan Controller Clock Data. 176 * @clk_ops: Struct for the Arasan Controller Clock Operations. 177 * @soc_ctl_base: Pointer to regmap for syscon for soc_ctl registers. 178 * @soc_ctl_map: Map to get offsets into soc_ctl registers. 179 * @quirks: Arasan deviations from spec. 180 */ 181 struct sdhci_arasan_data { 182 struct sdhci_host *host; 183 struct clk *clk_ahb; 184 struct phy *phy; 185 bool is_phy_on; 186 bool internal_phy_reg; 187 188 bool has_cqe; 189 struct sdhci_arasan_clk_data clk_data; 190 const struct sdhci_arasan_clk_ops *clk_ops; 191 192 struct regmap *soc_ctl_base; 193 const struct sdhci_arasan_soc_ctl_map *soc_ctl_map; 194 unsigned int quirks; 195 196 /* Controller does not have CD wired and will not function normally without */ 197 #define SDHCI_ARASAN_QUIRK_FORCE_CDTEST BIT(0) 198 /* Controller immediately reports SDHCI_CLOCK_INT_STABLE after enabling the 199 * internal clock even when the clock isn't stable */ 200 #define SDHCI_ARASAN_QUIRK_CLOCK_UNSTABLE BIT(1) 201 /* 202 * Some of the Arasan variations might not have timing requirements 203 * met at 25MHz for Default Speed mode, those controllers work at 204 * 19MHz instead 205 */ 206 #define SDHCI_ARASAN_QUIRK_CLOCK_25_BROKEN BIT(2) 207 }; 208 209 struct sdhci_arasan_of_data { 210 const struct sdhci_arasan_soc_ctl_map *soc_ctl_map; 211 const struct sdhci_pltfm_data *pdata; 212 const struct sdhci_arasan_clk_ops *clk_ops; 213 }; 214 215 static const struct sdhci_arasan_soc_ctl_map rk3399_soc_ctl_map = { 216 .baseclkfreq = { .reg = 0xf000, .width = 8, .shift = 8 }, 217 .clockmultiplier = { .reg = 0xf02c, .width = 8, .shift = 0}, 218 .hiword_update = true, 219 }; 220 221 static const struct sdhci_arasan_soc_ctl_map intel_lgm_emmc_soc_ctl_map = { 222 .baseclkfreq = { .reg = 0xa0, .width = 8, .shift = 2 }, 223 .clockmultiplier = { .reg = 0, .width = -1, .shift = -1 }, 224 .hiword_update = false, 225 }; 226 227 static const struct sdhci_arasan_soc_ctl_map intel_lgm_sdxc_soc_ctl_map = { 228 .baseclkfreq = { .reg = 0x80, .width = 8, .shift = 2 }, 229 .clockmultiplier = { .reg = 0, .width = -1, .shift = -1 }, 230 .hiword_update = false, 231 }; 232 233 static const struct sdhci_arasan_soc_ctl_map intel_keembay_soc_ctl_map = { 234 .baseclkfreq = { .reg = 0x0, .width = 8, .shift = 14 }, 235 .clockmultiplier = { .reg = 0x4, .width = 8, .shift = 14 }, 236 .support64b = { .reg = 0x4, .width = 1, .shift = 24 }, 237 .hiword_update = false, 238 }; 239 240 static void sdhci_arasan_phy_set_delaychain(struct sdhci_host *host, bool enable) 241 { 242 u32 reg; 243 244 reg = readl(host->ioaddr + PHY_CTRL_REG2); 245 if (enable) 246 reg |= (PHY_CTRL_SEL_DLY_TX_MASK | PHY_CTRL_SEL_DLY_RX_MASK); 247 else 248 reg &= ~(PHY_CTRL_SEL_DLY_TX_MASK | PHY_CTRL_SEL_DLY_RX_MASK); 249 250 writel(reg, host->ioaddr + PHY_CTRL_REG2); 251 } 252 253 static int sdhci_arasan_phy_set_dll(struct sdhci_host *host, bool enable) 254 { 255 u32 reg; 256 257 reg = readl(host->ioaddr + PHY_CTRL_REG2); 258 if (enable) 259 reg |= PHY_CTRL_EN_DLL_MASK; 260 else 261 reg &= ~PHY_CTRL_EN_DLL_MASK; 262 263 writel(reg, host->ioaddr + PHY_CTRL_REG2); 264 265 if (!enable) 266 return 0; 267 268 return readl_relaxed_poll_timeout(host->ioaddr + PHY_CTRL_REG2, reg, 269 (reg & PHY_CTRL_DLL_RDY_MASK), 10, 270 1000 * PHY_DLL_TIMEOUT_MS); 271 } 272 273 static void sdhci_arasan_phy_dll_set_freq(struct sdhci_host *host, int clock) 274 { 275 u32 reg, freq_sel, freq; 276 277 freq = DIV_ROUND_CLOSEST(clock, 1000000); 278 if (freq <= 200 && freq > 170) 279 freq_sel = FREQSEL_200M_170M; 280 else if (freq <= 170 && freq > 140) 281 freq_sel = FREQSEL_170M_140M; 282 else if (freq <= 140 && freq > 110) 283 freq_sel = FREQSEL_140M_110M; 284 else if (freq <= 110 && freq > 80) 285 freq_sel = FREQSEL_110M_80M; 286 else 287 freq_sel = FREQSEL_80M_50M; 288 289 reg = readl(host->ioaddr + PHY_CTRL_REG2); 290 reg &= ~PHY_CTRL_FREQ_SEL_MASK; 291 reg |= (freq_sel << PHY_CTRL_FREQ_SEL_SHIFT); 292 writel(reg, host->ioaddr + PHY_CTRL_REG2); 293 } 294 295 /** 296 * sdhci_arasan_syscon_write - Write to a field in soc_ctl registers 297 * 298 * @host: The sdhci_host 299 * @fld: The field to write to 300 * @val: The value to write 301 * 302 * This function allows writing to fields in sdhci_arasan_soc_ctl_map. 303 * Note that if a field is specified as not available (shift < 0) then 304 * this function will silently return an error code. It will be noisy 305 * and print errors for any other (unexpected) errors. 306 * 307 * Return: 0 on success and error value on error 308 */ 309 static int sdhci_arasan_syscon_write(struct sdhci_host *host, 310 const struct sdhci_arasan_soc_ctl_field *fld, 311 u32 val) 312 { 313 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); 314 struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host); 315 struct regmap *soc_ctl_base = sdhci_arasan->soc_ctl_base; 316 u32 reg = fld->reg; 317 u16 width = fld->width; 318 s16 shift = fld->shift; 319 int ret; 320 321 /* 322 * Silently return errors for shift < 0 so caller doesn't have 323 * to check for fields which are optional. For fields that 324 * are required then caller needs to do something special 325 * anyway. 326 */ 327 if (shift < 0) 328 return -EINVAL; 329 330 if (sdhci_arasan->soc_ctl_map->hiword_update) 331 ret = regmap_write(soc_ctl_base, reg, 332 HIWORD_UPDATE(val, GENMASK(width, 0), 333 shift)); 334 else 335 ret = regmap_update_bits(soc_ctl_base, reg, 336 GENMASK(shift + width, shift), 337 val << shift); 338 339 /* Yell about (unexpected) regmap errors */ 340 if (ret) 341 pr_warn("%s: Regmap write fail: %d\n", 342 mmc_hostname(host->mmc), ret); 343 344 return ret; 345 } 346 347 static void sdhci_arasan_set_clock(struct sdhci_host *host, unsigned int clock) 348 { 349 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); 350 struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host); 351 struct sdhci_arasan_clk_data *clk_data = &sdhci_arasan->clk_data; 352 bool ctrl_phy = false; 353 354 if (!IS_ERR(sdhci_arasan->phy)) { 355 if (!sdhci_arasan->is_phy_on && clock <= PHY_CLK_TOO_SLOW_HZ) { 356 /* 357 * If PHY off, set clock to max speed and power PHY on. 358 * 359 * Although PHY docs apparently suggest power cycling 360 * when changing the clock the PHY doesn't like to be 361 * powered on while at low speeds like those used in ID 362 * mode. Even worse is powering the PHY on while the 363 * clock is off. 364 * 365 * To workaround the PHY limitations, the best we can 366 * do is to power it on at a faster speed and then slam 367 * through low speeds without power cycling. 368 */ 369 sdhci_set_clock(host, host->max_clk); 370 if (phy_power_on(sdhci_arasan->phy)) { 371 pr_err("%s: Cannot power on phy.\n", 372 mmc_hostname(host->mmc)); 373 return; 374 } 375 376 sdhci_arasan->is_phy_on = true; 377 378 /* 379 * We'll now fall through to the below case with 380 * ctrl_phy = false (so we won't turn off/on). The 381 * sdhci_set_clock() will set the real clock. 382 */ 383 } else if (clock > PHY_CLK_TOO_SLOW_HZ) { 384 /* 385 * At higher clock speeds the PHY is fine being power 386 * cycled and docs say you _should_ power cycle when 387 * changing clock speeds. 388 */ 389 ctrl_phy = true; 390 } 391 } 392 393 if (ctrl_phy && sdhci_arasan->is_phy_on) { 394 phy_power_off(sdhci_arasan->phy); 395 sdhci_arasan->is_phy_on = false; 396 } 397 398 if (sdhci_arasan->quirks & SDHCI_ARASAN_QUIRK_CLOCK_25_BROKEN) { 399 /* 400 * Some of the Arasan variations might not have timing 401 * requirements met at 25MHz for Default Speed mode, 402 * those controllers work at 19MHz instead. 403 */ 404 if (clock == DEFAULT_SPEED_MAX_DTR) 405 clock = (DEFAULT_SPEED_MAX_DTR * 19) / 25; 406 } 407 408 /* Set the Input and Output Clock Phase Delays */ 409 if (clk_data->set_clk_delays && clock > PHY_CLK_TOO_SLOW_HZ) 410 clk_data->set_clk_delays(host); 411 412 if (sdhci_arasan->internal_phy_reg && clock >= MIN_PHY_CLK_HZ) { 413 sdhci_writew(host, 0, SDHCI_CLOCK_CONTROL); 414 sdhci_arasan_phy_set_dll(host, 0); 415 sdhci_arasan_phy_set_delaychain(host, 0); 416 sdhci_arasan_phy_dll_set_freq(host, clock); 417 } else if (sdhci_arasan->internal_phy_reg) { 418 sdhci_writew(host, 0, SDHCI_CLOCK_CONTROL); 419 sdhci_arasan_phy_set_delaychain(host, 1); 420 } 421 422 sdhci_set_clock(host, clock); 423 424 if (sdhci_arasan->internal_phy_reg && clock >= MIN_PHY_CLK_HZ) 425 sdhci_arasan_phy_set_dll(host, 1); 426 427 if (sdhci_arasan->quirks & SDHCI_ARASAN_QUIRK_CLOCK_UNSTABLE) 428 /* 429 * Some controllers immediately report SDHCI_CLOCK_INT_STABLE 430 * after enabling the clock even though the clock is not 431 * stable. Trying to use a clock without waiting here results 432 * in EILSEQ while detecting some older/slower cards. The 433 * chosen delay is the maximum delay from sdhci_set_clock. 434 */ 435 msleep(20); 436 437 if (ctrl_phy) { 438 if (phy_power_on(sdhci_arasan->phy)) { 439 pr_err("%s: Cannot power on phy.\n", 440 mmc_hostname(host->mmc)); 441 return; 442 } 443 444 sdhci_arasan->is_phy_on = true; 445 } 446 } 447 448 static void sdhci_arasan_hs400_enhanced_strobe(struct mmc_host *mmc, 449 struct mmc_ios *ios) 450 { 451 u32 vendor; 452 struct sdhci_host *host = mmc_priv(mmc); 453 454 vendor = sdhci_readl(host, SDHCI_ARASAN_VENDOR_REGISTER); 455 if (ios->enhanced_strobe) 456 vendor |= VENDOR_ENHANCED_STROBE; 457 else 458 vendor &= ~VENDOR_ENHANCED_STROBE; 459 460 sdhci_writel(host, vendor, SDHCI_ARASAN_VENDOR_REGISTER); 461 } 462 463 static void sdhci_arasan_reset(struct sdhci_host *host, u8 mask) 464 { 465 u8 ctrl; 466 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); 467 struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host); 468 469 sdhci_and_cqhci_reset(host, mask); 470 471 if (sdhci_arasan->quirks & SDHCI_ARASAN_QUIRK_FORCE_CDTEST) { 472 ctrl = sdhci_readb(host, SDHCI_HOST_CONTROL); 473 ctrl |= SDHCI_CTRL_CDTEST_INS | SDHCI_CTRL_CDTEST_EN; 474 sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL); 475 } 476 } 477 478 static int sdhci_arasan_voltage_switch(struct mmc_host *mmc, 479 struct mmc_ios *ios) 480 { 481 switch (ios->signal_voltage) { 482 case MMC_SIGNAL_VOLTAGE_180: 483 /* 484 * Plese don't switch to 1V8 as arasan,5.1 doesn't 485 * actually refer to this setting to indicate the 486 * signal voltage and the state machine will be broken 487 * actually if we force to enable 1V8. That's something 488 * like broken quirk but we could work around here. 489 */ 490 return 0; 491 case MMC_SIGNAL_VOLTAGE_330: 492 case MMC_SIGNAL_VOLTAGE_120: 493 /* We don't support 3V3 and 1V2 */ 494 break; 495 } 496 497 return -EINVAL; 498 } 499 500 static const struct sdhci_ops sdhci_arasan_ops = { 501 .set_clock = sdhci_arasan_set_clock, 502 .get_max_clock = sdhci_pltfm_clk_get_max_clock, 503 .get_timeout_clock = sdhci_pltfm_clk_get_max_clock, 504 .set_bus_width = sdhci_set_bus_width, 505 .reset = sdhci_arasan_reset, 506 .set_uhs_signaling = sdhci_set_uhs_signaling, 507 .set_power = sdhci_set_power_and_bus_voltage, 508 }; 509 510 static u32 sdhci_arasan_cqhci_irq(struct sdhci_host *host, u32 intmask) 511 { 512 int cmd_error = 0; 513 int data_error = 0; 514 515 if (!sdhci_cqe_irq(host, intmask, &cmd_error, &data_error)) 516 return intmask; 517 518 cqhci_irq(host->mmc, intmask, cmd_error, data_error); 519 520 return 0; 521 } 522 523 static void sdhci_arasan_dumpregs(struct mmc_host *mmc) 524 { 525 sdhci_dumpregs(mmc_priv(mmc)); 526 } 527 528 static void sdhci_arasan_cqe_enable(struct mmc_host *mmc) 529 { 530 struct sdhci_host *host = mmc_priv(mmc); 531 u32 reg; 532 533 reg = sdhci_readl(host, SDHCI_PRESENT_STATE); 534 while (reg & SDHCI_DATA_AVAILABLE) { 535 sdhci_readl(host, SDHCI_BUFFER); 536 reg = sdhci_readl(host, SDHCI_PRESENT_STATE); 537 } 538 539 sdhci_cqe_enable(mmc); 540 } 541 542 static const struct cqhci_host_ops sdhci_arasan_cqhci_ops = { 543 .enable = sdhci_arasan_cqe_enable, 544 .disable = sdhci_cqe_disable, 545 .dumpregs = sdhci_arasan_dumpregs, 546 }; 547 548 static const struct sdhci_ops sdhci_arasan_cqe_ops = { 549 .set_clock = sdhci_arasan_set_clock, 550 .get_max_clock = sdhci_pltfm_clk_get_max_clock, 551 .get_timeout_clock = sdhci_pltfm_clk_get_max_clock, 552 .set_bus_width = sdhci_set_bus_width, 553 .reset = sdhci_arasan_reset, 554 .set_uhs_signaling = sdhci_set_uhs_signaling, 555 .set_power = sdhci_set_power_and_bus_voltage, 556 .irq = sdhci_arasan_cqhci_irq, 557 }; 558 559 static const struct sdhci_pltfm_data sdhci_arasan_cqe_pdata = { 560 .ops = &sdhci_arasan_cqe_ops, 561 .quirks = SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN, 562 .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN | 563 SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN, 564 }; 565 566 #ifdef CONFIG_PM_SLEEP 567 /** 568 * sdhci_arasan_suspend - Suspend method for the driver 569 * @dev: Address of the device structure 570 * 571 * Put the device in a low power state. 572 * 573 * Return: 0 on success and error value on error 574 */ 575 static int sdhci_arasan_suspend(struct device *dev) 576 { 577 struct sdhci_host *host = dev_get_drvdata(dev); 578 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); 579 struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host); 580 int ret; 581 582 if (host->tuning_mode != SDHCI_TUNING_MODE_3) 583 mmc_retune_needed(host->mmc); 584 585 if (sdhci_arasan->has_cqe) { 586 ret = cqhci_suspend(host->mmc); 587 if (ret) 588 return ret; 589 } 590 591 ret = sdhci_suspend_host(host); 592 if (ret) 593 return ret; 594 595 if (!IS_ERR(sdhci_arasan->phy) && sdhci_arasan->is_phy_on) { 596 ret = phy_power_off(sdhci_arasan->phy); 597 if (ret) { 598 dev_err(dev, "Cannot power off phy.\n"); 599 if (sdhci_resume_host(host)) 600 dev_err(dev, "Cannot resume host.\n"); 601 602 return ret; 603 } 604 sdhci_arasan->is_phy_on = false; 605 } 606 607 clk_disable(pltfm_host->clk); 608 clk_disable(sdhci_arasan->clk_ahb); 609 610 return 0; 611 } 612 613 /** 614 * sdhci_arasan_resume - Resume method for the driver 615 * @dev: Address of the device structure 616 * 617 * Resume operation after suspend 618 * 619 * Return: 0 on success and error value on error 620 */ 621 static int sdhci_arasan_resume(struct device *dev) 622 { 623 struct sdhci_host *host = dev_get_drvdata(dev); 624 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); 625 struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host); 626 int ret; 627 628 ret = clk_enable(sdhci_arasan->clk_ahb); 629 if (ret) { 630 dev_err(dev, "Cannot enable AHB clock.\n"); 631 return ret; 632 } 633 634 ret = clk_enable(pltfm_host->clk); 635 if (ret) { 636 dev_err(dev, "Cannot enable SD clock.\n"); 637 return ret; 638 } 639 640 if (!IS_ERR(sdhci_arasan->phy) && host->mmc->actual_clock) { 641 ret = phy_power_on(sdhci_arasan->phy); 642 if (ret) { 643 dev_err(dev, "Cannot power on phy.\n"); 644 return ret; 645 } 646 sdhci_arasan->is_phy_on = true; 647 } 648 649 ret = sdhci_resume_host(host); 650 if (ret) { 651 dev_err(dev, "Cannot resume host.\n"); 652 return ret; 653 } 654 655 if (sdhci_arasan->has_cqe) 656 return cqhci_resume(host->mmc); 657 658 return 0; 659 } 660 #endif /* ! CONFIG_PM_SLEEP */ 661 662 static SIMPLE_DEV_PM_OPS(sdhci_arasan_dev_pm_ops, sdhci_arasan_suspend, 663 sdhci_arasan_resume); 664 665 /** 666 * sdhci_arasan_sdcardclk_recalc_rate - Return the card clock rate 667 * 668 * @hw: Pointer to the hardware clock structure. 669 * @parent_rate: The parent rate (should be rate of clk_xin). 670 * 671 * Return the current actual rate of the SD card clock. This can be used 672 * to communicate with out PHY. 673 * 674 * Return: The card clock rate. 675 */ 676 static unsigned long sdhci_arasan_sdcardclk_recalc_rate(struct clk_hw *hw, 677 unsigned long parent_rate) 678 { 679 struct sdhci_arasan_clk_data *clk_data = 680 container_of(hw, struct sdhci_arasan_clk_data, sdcardclk_hw); 681 struct sdhci_arasan_data *sdhci_arasan = 682 container_of(clk_data, struct sdhci_arasan_data, clk_data); 683 struct sdhci_host *host = sdhci_arasan->host; 684 685 return host->mmc->actual_clock; 686 } 687 688 static const struct clk_ops arasan_sdcardclk_ops = { 689 .recalc_rate = sdhci_arasan_sdcardclk_recalc_rate, 690 }; 691 692 /** 693 * sdhci_arasan_sampleclk_recalc_rate - Return the sampling clock rate 694 * 695 * @hw: Pointer to the hardware clock structure. 696 * @parent_rate: The parent rate (should be rate of clk_xin). 697 * 698 * Return the current actual rate of the sampling clock. This can be used 699 * to communicate with out PHY. 700 * 701 * Return: The sample clock rate. 702 */ 703 static unsigned long sdhci_arasan_sampleclk_recalc_rate(struct clk_hw *hw, 704 unsigned long parent_rate) 705 { 706 struct sdhci_arasan_clk_data *clk_data = 707 container_of(hw, struct sdhci_arasan_clk_data, sampleclk_hw); 708 struct sdhci_arasan_data *sdhci_arasan = 709 container_of(clk_data, struct sdhci_arasan_data, clk_data); 710 struct sdhci_host *host = sdhci_arasan->host; 711 712 return host->mmc->actual_clock; 713 } 714 715 static const struct clk_ops arasan_sampleclk_ops = { 716 .recalc_rate = sdhci_arasan_sampleclk_recalc_rate, 717 }; 718 719 /** 720 * sdhci_zynqmp_sdcardclk_set_phase - Set the SD Output Clock Tap Delays 721 * 722 * @hw: Pointer to the hardware clock structure. 723 * @degrees: The clock phase shift between 0 - 359. 724 * 725 * Set the SD Output Clock Tap Delays for Output path 726 * 727 * Return: 0 on success and error value on error 728 */ 729 static int sdhci_zynqmp_sdcardclk_set_phase(struct clk_hw *hw, int degrees) 730 { 731 struct sdhci_arasan_clk_data *clk_data = 732 container_of(hw, struct sdhci_arasan_clk_data, sdcardclk_hw); 733 struct sdhci_arasan_data *sdhci_arasan = 734 container_of(clk_data, struct sdhci_arasan_data, clk_data); 735 struct sdhci_host *host = sdhci_arasan->host; 736 const char *clk_name = clk_hw_get_name(hw); 737 u32 node_id = !strcmp(clk_name, "clk_out_sd0") ? NODE_SD_0 : NODE_SD_1; 738 u8 tap_delay, tap_max = 0; 739 int ret; 740 741 /* This is applicable for SDHCI_SPEC_300 and above */ 742 if (host->version < SDHCI_SPEC_300) 743 return 0; 744 745 switch (host->timing) { 746 case MMC_TIMING_MMC_HS: 747 case MMC_TIMING_SD_HS: 748 case MMC_TIMING_UHS_SDR25: 749 case MMC_TIMING_UHS_DDR50: 750 case MMC_TIMING_MMC_DDR52: 751 /* For 50MHz clock, 30 Taps are available */ 752 tap_max = 30; 753 break; 754 case MMC_TIMING_UHS_SDR50: 755 /* For 100MHz clock, 15 Taps are available */ 756 tap_max = 15; 757 break; 758 case MMC_TIMING_UHS_SDR104: 759 case MMC_TIMING_MMC_HS200: 760 /* For 200MHz clock, 8 Taps are available */ 761 tap_max = 8; 762 break; 763 default: 764 break; 765 } 766 767 tap_delay = (degrees * tap_max) / 360; 768 769 /* Set the Clock Phase */ 770 ret = zynqmp_pm_set_sd_tapdelay(node_id, PM_TAPDELAY_OUTPUT, tap_delay); 771 if (ret) 772 pr_err("Error setting Output Tap Delay\n"); 773 774 /* Release DLL Reset */ 775 zynqmp_pm_sd_dll_reset(node_id, PM_DLL_RESET_RELEASE); 776 777 return ret; 778 } 779 780 static const struct clk_ops zynqmp_sdcardclk_ops = { 781 .recalc_rate = sdhci_arasan_sdcardclk_recalc_rate, 782 .set_phase = sdhci_zynqmp_sdcardclk_set_phase, 783 }; 784 785 /** 786 * sdhci_zynqmp_sampleclk_set_phase - Set the SD Input Clock Tap Delays 787 * 788 * @hw: Pointer to the hardware clock structure. 789 * @degrees: The clock phase shift between 0 - 359. 790 * 791 * Set the SD Input Clock Tap Delays for Input path 792 * 793 * Return: 0 on success and error value on error 794 */ 795 static int sdhci_zynqmp_sampleclk_set_phase(struct clk_hw *hw, int degrees) 796 { 797 struct sdhci_arasan_clk_data *clk_data = 798 container_of(hw, struct sdhci_arasan_clk_data, sampleclk_hw); 799 struct sdhci_arasan_data *sdhci_arasan = 800 container_of(clk_data, struct sdhci_arasan_data, clk_data); 801 struct sdhci_host *host = sdhci_arasan->host; 802 const char *clk_name = clk_hw_get_name(hw); 803 u32 node_id = !strcmp(clk_name, "clk_in_sd0") ? NODE_SD_0 : NODE_SD_1; 804 u8 tap_delay, tap_max = 0; 805 int ret; 806 807 /* This is applicable for SDHCI_SPEC_300 and above */ 808 if (host->version < SDHCI_SPEC_300) 809 return 0; 810 811 /* Assert DLL Reset */ 812 zynqmp_pm_sd_dll_reset(node_id, PM_DLL_RESET_ASSERT); 813 814 switch (host->timing) { 815 case MMC_TIMING_MMC_HS: 816 case MMC_TIMING_SD_HS: 817 case MMC_TIMING_UHS_SDR25: 818 case MMC_TIMING_UHS_DDR50: 819 case MMC_TIMING_MMC_DDR52: 820 /* For 50MHz clock, 120 Taps are available */ 821 tap_max = 120; 822 break; 823 case MMC_TIMING_UHS_SDR50: 824 /* For 100MHz clock, 60 Taps are available */ 825 tap_max = 60; 826 break; 827 case MMC_TIMING_UHS_SDR104: 828 case MMC_TIMING_MMC_HS200: 829 /* For 200MHz clock, 30 Taps are available */ 830 tap_max = 30; 831 break; 832 default: 833 break; 834 } 835 836 tap_delay = (degrees * tap_max) / 360; 837 838 /* Set the Clock Phase */ 839 ret = zynqmp_pm_set_sd_tapdelay(node_id, PM_TAPDELAY_INPUT, tap_delay); 840 if (ret) 841 pr_err("Error setting Input Tap Delay\n"); 842 843 return ret; 844 } 845 846 static const struct clk_ops zynqmp_sampleclk_ops = { 847 .recalc_rate = sdhci_arasan_sampleclk_recalc_rate, 848 .set_phase = sdhci_zynqmp_sampleclk_set_phase, 849 }; 850 851 /** 852 * sdhci_versal_sdcardclk_set_phase - Set the SD Output Clock Tap Delays 853 * 854 * @hw: Pointer to the hardware clock structure. 855 * @degrees: The clock phase shift between 0 - 359. 856 * 857 * Set the SD Output Clock Tap Delays for Output path 858 * 859 * Return: 0 on success and error value on error 860 */ 861 static int sdhci_versal_sdcardclk_set_phase(struct clk_hw *hw, int degrees) 862 { 863 struct sdhci_arasan_clk_data *clk_data = 864 container_of(hw, struct sdhci_arasan_clk_data, sdcardclk_hw); 865 struct sdhci_arasan_data *sdhci_arasan = 866 container_of(clk_data, struct sdhci_arasan_data, clk_data); 867 struct sdhci_host *host = sdhci_arasan->host; 868 u8 tap_delay, tap_max = 0; 869 870 /* This is applicable for SDHCI_SPEC_300 and above */ 871 if (host->version < SDHCI_SPEC_300) 872 return 0; 873 874 switch (host->timing) { 875 case MMC_TIMING_MMC_HS: 876 case MMC_TIMING_SD_HS: 877 case MMC_TIMING_UHS_SDR25: 878 case MMC_TIMING_UHS_DDR50: 879 case MMC_TIMING_MMC_DDR52: 880 /* For 50MHz clock, 30 Taps are available */ 881 tap_max = 30; 882 break; 883 case MMC_TIMING_UHS_SDR50: 884 /* For 100MHz clock, 15 Taps are available */ 885 tap_max = 15; 886 break; 887 case MMC_TIMING_UHS_SDR104: 888 case MMC_TIMING_MMC_HS200: 889 /* For 200MHz clock, 8 Taps are available */ 890 tap_max = 8; 891 break; 892 default: 893 break; 894 } 895 896 tap_delay = (degrees * tap_max) / 360; 897 898 /* Set the Clock Phase */ 899 if (tap_delay) { 900 u32 regval; 901 902 regval = sdhci_readl(host, SDHCI_ARASAN_OTAPDLY_REGISTER); 903 regval |= SDHCI_OTAPDLY_ENABLE; 904 sdhci_writel(host, regval, SDHCI_ARASAN_OTAPDLY_REGISTER); 905 regval &= ~SDHCI_ARASAN_OTAPDLY_SEL_MASK; 906 regval |= tap_delay; 907 sdhci_writel(host, regval, SDHCI_ARASAN_OTAPDLY_REGISTER); 908 } 909 910 return 0; 911 } 912 913 static const struct clk_ops versal_sdcardclk_ops = { 914 .recalc_rate = sdhci_arasan_sdcardclk_recalc_rate, 915 .set_phase = sdhci_versal_sdcardclk_set_phase, 916 }; 917 918 /** 919 * sdhci_versal_sampleclk_set_phase - Set the SD Input Clock Tap Delays 920 * 921 * @hw: Pointer to the hardware clock structure. 922 * @degrees: The clock phase shift between 0 - 359. 923 * 924 * Set the SD Input Clock Tap Delays for Input path 925 * 926 * Return: 0 on success and error value on error 927 */ 928 static int sdhci_versal_sampleclk_set_phase(struct clk_hw *hw, int degrees) 929 { 930 struct sdhci_arasan_clk_data *clk_data = 931 container_of(hw, struct sdhci_arasan_clk_data, sampleclk_hw); 932 struct sdhci_arasan_data *sdhci_arasan = 933 container_of(clk_data, struct sdhci_arasan_data, clk_data); 934 struct sdhci_host *host = sdhci_arasan->host; 935 u8 tap_delay, tap_max = 0; 936 937 /* This is applicable for SDHCI_SPEC_300 and above */ 938 if (host->version < SDHCI_SPEC_300) 939 return 0; 940 941 switch (host->timing) { 942 case MMC_TIMING_MMC_HS: 943 case MMC_TIMING_SD_HS: 944 case MMC_TIMING_UHS_SDR25: 945 case MMC_TIMING_UHS_DDR50: 946 case MMC_TIMING_MMC_DDR52: 947 /* For 50MHz clock, 120 Taps are available */ 948 tap_max = 120; 949 break; 950 case MMC_TIMING_UHS_SDR50: 951 /* For 100MHz clock, 60 Taps are available */ 952 tap_max = 60; 953 break; 954 case MMC_TIMING_UHS_SDR104: 955 case MMC_TIMING_MMC_HS200: 956 /* For 200MHz clock, 30 Taps are available */ 957 tap_max = 30; 958 break; 959 default: 960 break; 961 } 962 963 tap_delay = (degrees * tap_max) / 360; 964 965 /* Set the Clock Phase */ 966 if (tap_delay) { 967 u32 regval; 968 969 regval = sdhci_readl(host, SDHCI_ARASAN_ITAPDLY_REGISTER); 970 regval |= SDHCI_ITAPDLY_CHGWIN; 971 sdhci_writel(host, regval, SDHCI_ARASAN_ITAPDLY_REGISTER); 972 regval |= SDHCI_ITAPDLY_ENABLE; 973 sdhci_writel(host, regval, SDHCI_ARASAN_ITAPDLY_REGISTER); 974 regval &= ~SDHCI_ARASAN_ITAPDLY_SEL_MASK; 975 regval |= tap_delay; 976 sdhci_writel(host, regval, SDHCI_ARASAN_ITAPDLY_REGISTER); 977 regval &= ~SDHCI_ITAPDLY_CHGWIN; 978 sdhci_writel(host, regval, SDHCI_ARASAN_ITAPDLY_REGISTER); 979 } 980 981 return 0; 982 } 983 984 static const struct clk_ops versal_sampleclk_ops = { 985 .recalc_rate = sdhci_arasan_sampleclk_recalc_rate, 986 .set_phase = sdhci_versal_sampleclk_set_phase, 987 }; 988 989 static int sdhci_versal_net_emmc_sdcardclk_set_phase(struct clk_hw *hw, int degrees) 990 { 991 struct sdhci_arasan_clk_data *clk_data = 992 container_of(hw, struct sdhci_arasan_clk_data, sdcardclk_hw); 993 struct sdhci_arasan_data *sdhci_arasan = 994 container_of(clk_data, struct sdhci_arasan_data, clk_data); 995 struct sdhci_host *host = sdhci_arasan->host; 996 u8 tap_delay, tap_max = 0; 997 998 switch (host->timing) { 999 case MMC_TIMING_MMC_HS: 1000 case MMC_TIMING_MMC_DDR52: 1001 tap_max = 16; 1002 break; 1003 case MMC_TIMING_MMC_HS200: 1004 case MMC_TIMING_MMC_HS400: 1005 /* For 200MHz clock, 32 Taps are available */ 1006 tap_max = 32; 1007 break; 1008 default: 1009 break; 1010 } 1011 1012 tap_delay = (degrees * tap_max) / 360; 1013 1014 /* Set the Clock Phase */ 1015 if (tap_delay) { 1016 u32 regval; 1017 1018 regval = sdhci_readl(host, PHY_CTRL_REG1); 1019 regval |= PHY_CTRL_OTAPDLY_ENA_MASK; 1020 sdhci_writel(host, regval, PHY_CTRL_REG1); 1021 regval &= ~PHY_CTRL_OTAPDLY_SEL_MASK; 1022 regval |= tap_delay << PHY_CTRL_OTAPDLY_SEL_SHIFT; 1023 sdhci_writel(host, regval, PHY_CTRL_REG1); 1024 } 1025 1026 return 0; 1027 } 1028 1029 static const struct clk_ops versal_net_sdcardclk_ops = { 1030 .recalc_rate = sdhci_arasan_sdcardclk_recalc_rate, 1031 .set_phase = sdhci_versal_net_emmc_sdcardclk_set_phase, 1032 }; 1033 1034 static int sdhci_versal_net_emmc_sampleclk_set_phase(struct clk_hw *hw, int degrees) 1035 { 1036 struct sdhci_arasan_clk_data *clk_data = 1037 container_of(hw, struct sdhci_arasan_clk_data, sampleclk_hw); 1038 struct sdhci_arasan_data *sdhci_arasan = 1039 container_of(clk_data, struct sdhci_arasan_data, clk_data); 1040 struct sdhci_host *host = sdhci_arasan->host; 1041 u8 tap_delay, tap_max = 0; 1042 u32 regval; 1043 1044 switch (host->timing) { 1045 case MMC_TIMING_MMC_HS: 1046 case MMC_TIMING_MMC_DDR52: 1047 tap_max = 32; 1048 break; 1049 case MMC_TIMING_MMC_HS400: 1050 /* Strobe select tap point for strb90 and strb180 */ 1051 regval = sdhci_readl(host, PHY_CTRL_REG1); 1052 regval &= ~PHY_CTRL_STRB_SEL_MASK; 1053 regval |= VERSAL_NET_PHY_CTRL_STRB90_STRB180_VAL << PHY_CTRL_STRB_SEL_SHIFT; 1054 sdhci_writel(host, regval, PHY_CTRL_REG1); 1055 break; 1056 default: 1057 break; 1058 } 1059 1060 tap_delay = (degrees * tap_max) / 360; 1061 1062 /* Set the Clock Phase */ 1063 if (tap_delay) { 1064 regval = sdhci_readl(host, PHY_CTRL_REG1); 1065 regval |= PHY_CTRL_ITAP_CHG_WIN_MASK; 1066 sdhci_writel(host, regval, PHY_CTRL_REG1); 1067 regval |= PHY_CTRL_ITAPDLY_ENA_MASK; 1068 sdhci_writel(host, regval, PHY_CTRL_REG1); 1069 regval &= ~PHY_CTRL_ITAPDLY_SEL_MASK; 1070 regval |= tap_delay << PHY_CTRL_ITAPDLY_SEL_SHIFT; 1071 sdhci_writel(host, regval, PHY_CTRL_REG1); 1072 regval &= ~PHY_CTRL_ITAP_CHG_WIN_MASK; 1073 sdhci_writel(host, regval, PHY_CTRL_REG1); 1074 } 1075 1076 return 0; 1077 } 1078 1079 static const struct clk_ops versal_net_sampleclk_ops = { 1080 .recalc_rate = sdhci_arasan_sampleclk_recalc_rate, 1081 .set_phase = sdhci_versal_net_emmc_sampleclk_set_phase, 1082 }; 1083 1084 static void arasan_zynqmp_dll_reset(struct sdhci_host *host, u32 deviceid) 1085 { 1086 u16 clk; 1087 1088 clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL); 1089 clk &= ~(SDHCI_CLOCK_CARD_EN | SDHCI_CLOCK_INT_EN); 1090 sdhci_writew(host, clk, SDHCI_CLOCK_CONTROL); 1091 1092 /* Issue DLL Reset */ 1093 zynqmp_pm_sd_dll_reset(deviceid, PM_DLL_RESET_PULSE); 1094 1095 clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL); 1096 1097 sdhci_enable_clk(host, clk); 1098 } 1099 1100 static int arasan_zynqmp_execute_tuning(struct mmc_host *mmc, u32 opcode) 1101 { 1102 struct sdhci_host *host = mmc_priv(mmc); 1103 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); 1104 struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host); 1105 struct clk_hw *hw = &sdhci_arasan->clk_data.sdcardclk_hw; 1106 const char *clk_name = clk_hw_get_name(hw); 1107 u32 device_id = !strcmp(clk_name, "clk_out_sd0") ? NODE_SD_0 : 1108 NODE_SD_1; 1109 int err; 1110 1111 /* ZynqMP SD controller does not perform auto tuning in DDR50 mode */ 1112 if (mmc->ios.timing == MMC_TIMING_UHS_DDR50) 1113 return 0; 1114 1115 arasan_zynqmp_dll_reset(host, device_id); 1116 1117 err = sdhci_execute_tuning(mmc, opcode); 1118 if (err) 1119 return err; 1120 1121 arasan_zynqmp_dll_reset(host, device_id); 1122 1123 return 0; 1124 } 1125 1126 /** 1127 * sdhci_arasan_update_clockmultiplier - Set corecfg_clockmultiplier 1128 * 1129 * @host: The sdhci_host 1130 * @value: The value to write 1131 * 1132 * The corecfg_clockmultiplier is supposed to contain clock multiplier 1133 * value of programmable clock generator. 1134 * 1135 * NOTES: 1136 * - Many existing devices don't seem to do this and work fine. To keep 1137 * compatibility for old hardware where the device tree doesn't provide a 1138 * register map, this function is a noop if a soc_ctl_map hasn't been provided 1139 * for this platform. 1140 * - The value of corecfg_clockmultiplier should sync with that of corresponding 1141 * value reading from sdhci_capability_register. So this function is called 1142 * once at probe time and never called again. 1143 */ 1144 static void sdhci_arasan_update_clockmultiplier(struct sdhci_host *host, 1145 u32 value) 1146 { 1147 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); 1148 struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host); 1149 const struct sdhci_arasan_soc_ctl_map *soc_ctl_map = 1150 sdhci_arasan->soc_ctl_map; 1151 1152 /* Having a map is optional */ 1153 if (!soc_ctl_map) 1154 return; 1155 1156 /* If we have a map, we expect to have a syscon */ 1157 if (!sdhci_arasan->soc_ctl_base) { 1158 pr_warn("%s: Have regmap, but no soc-ctl-syscon\n", 1159 mmc_hostname(host->mmc)); 1160 return; 1161 } 1162 1163 sdhci_arasan_syscon_write(host, &soc_ctl_map->clockmultiplier, value); 1164 } 1165 1166 /** 1167 * sdhci_arasan_update_baseclkfreq - Set corecfg_baseclkfreq 1168 * 1169 * @host: The sdhci_host 1170 * 1171 * The corecfg_baseclkfreq is supposed to contain the MHz of clk_xin. This 1172 * function can be used to make that happen. 1173 * 1174 * NOTES: 1175 * - Many existing devices don't seem to do this and work fine. To keep 1176 * compatibility for old hardware where the device tree doesn't provide a 1177 * register map, this function is a noop if a soc_ctl_map hasn't been provided 1178 * for this platform. 1179 * - It's assumed that clk_xin is not dynamic and that we use the SDHCI divider 1180 * to achieve lower clock rates. That means that this function is called once 1181 * at probe time and never called again. 1182 */ 1183 static void sdhci_arasan_update_baseclkfreq(struct sdhci_host *host) 1184 { 1185 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); 1186 struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host); 1187 const struct sdhci_arasan_soc_ctl_map *soc_ctl_map = 1188 sdhci_arasan->soc_ctl_map; 1189 u32 mhz = DIV_ROUND_CLOSEST_ULL(clk_get_rate(pltfm_host->clk), 1000000); 1190 1191 /* Having a map is optional */ 1192 if (!soc_ctl_map) 1193 return; 1194 1195 /* If we have a map, we expect to have a syscon */ 1196 if (!sdhci_arasan->soc_ctl_base) { 1197 pr_warn("%s: Have regmap, but no soc-ctl-syscon\n", 1198 mmc_hostname(host->mmc)); 1199 return; 1200 } 1201 1202 sdhci_arasan_syscon_write(host, &soc_ctl_map->baseclkfreq, mhz); 1203 } 1204 1205 static void sdhci_arasan_set_clk_delays(struct sdhci_host *host) 1206 { 1207 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); 1208 struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host); 1209 struct sdhci_arasan_clk_data *clk_data = &sdhci_arasan->clk_data; 1210 1211 clk_set_phase(clk_data->sampleclk, 1212 clk_data->clk_phase_in[host->timing]); 1213 clk_set_phase(clk_data->sdcardclk, 1214 clk_data->clk_phase_out[host->timing]); 1215 } 1216 1217 static void arasan_dt_read_clk_phase(struct device *dev, 1218 struct sdhci_arasan_clk_data *clk_data, 1219 unsigned int timing, const char *prop) 1220 { 1221 struct device_node *np = dev->of_node; 1222 1223 u32 clk_phase[2] = {0}; 1224 int ret; 1225 1226 /* 1227 * Read Tap Delay values from DT, if the DT does not contain the 1228 * Tap Values then use the pre-defined values. 1229 */ 1230 ret = of_property_read_variable_u32_array(np, prop, &clk_phase[0], 1231 2, 0); 1232 if (ret < 0) { 1233 dev_dbg(dev, "Using predefined clock phase for %s = %d %d\n", 1234 prop, clk_data->clk_phase_in[timing], 1235 clk_data->clk_phase_out[timing]); 1236 return; 1237 } 1238 1239 /* The values read are Input and Output Clock Delays in order */ 1240 clk_data->clk_phase_in[timing] = clk_phase[0]; 1241 clk_data->clk_phase_out[timing] = clk_phase[1]; 1242 } 1243 1244 /** 1245 * arasan_dt_parse_clk_phases - Read Clock Delay values from DT 1246 * 1247 * @dev: Pointer to our struct device. 1248 * @clk_data: Pointer to the Clock Data structure 1249 * 1250 * Called at initialization to parse the values of Clock Delays. 1251 */ 1252 static void arasan_dt_parse_clk_phases(struct device *dev, 1253 struct sdhci_arasan_clk_data *clk_data) 1254 { 1255 u32 mio_bank = 0; 1256 int i; 1257 1258 /* 1259 * This has been kept as a pointer and is assigned a function here. 1260 * So that different controller variants can assign their own handling 1261 * function. 1262 */ 1263 clk_data->set_clk_delays = sdhci_arasan_set_clk_delays; 1264 1265 if (of_device_is_compatible(dev->of_node, "xlnx,zynqmp-8.9a")) { 1266 u32 zynqmp_iclk_phase[MMC_TIMING_MMC_HS400 + 1] = 1267 ZYNQMP_ICLK_PHASE; 1268 u32 zynqmp_oclk_phase[MMC_TIMING_MMC_HS400 + 1] = 1269 ZYNQMP_OCLK_PHASE; 1270 1271 of_property_read_u32(dev->of_node, "xlnx,mio-bank", &mio_bank); 1272 if (mio_bank == 2) { 1273 zynqmp_oclk_phase[MMC_TIMING_UHS_SDR104] = 90; 1274 zynqmp_oclk_phase[MMC_TIMING_MMC_HS200] = 90; 1275 } 1276 1277 for (i = 0; i <= MMC_TIMING_MMC_HS400; i++) { 1278 clk_data->clk_phase_in[i] = zynqmp_iclk_phase[i]; 1279 clk_data->clk_phase_out[i] = zynqmp_oclk_phase[i]; 1280 } 1281 } 1282 1283 if (of_device_is_compatible(dev->of_node, "xlnx,versal-8.9a")) { 1284 u32 versal_iclk_phase[MMC_TIMING_MMC_HS400 + 1] = 1285 VERSAL_ICLK_PHASE; 1286 u32 versal_oclk_phase[MMC_TIMING_MMC_HS400 + 1] = 1287 VERSAL_OCLK_PHASE; 1288 1289 for (i = 0; i <= MMC_TIMING_MMC_HS400; i++) { 1290 clk_data->clk_phase_in[i] = versal_iclk_phase[i]; 1291 clk_data->clk_phase_out[i] = versal_oclk_phase[i]; 1292 } 1293 } 1294 if (of_device_is_compatible(dev->of_node, "xlnx,versal-net-emmc")) { 1295 u32 versal_net_iclk_phase[MMC_TIMING_MMC_HS400 + 1] = 1296 VERSAL_NET_EMMC_ICLK_PHASE; 1297 u32 versal_net_oclk_phase[MMC_TIMING_MMC_HS400 + 1] = 1298 VERSAL_NET_EMMC_OCLK_PHASE; 1299 1300 for (i = 0; i <= MMC_TIMING_MMC_HS400; i++) { 1301 clk_data->clk_phase_in[i] = versal_net_iclk_phase[i]; 1302 clk_data->clk_phase_out[i] = versal_net_oclk_phase[i]; 1303 } 1304 } 1305 arasan_dt_read_clk_phase(dev, clk_data, MMC_TIMING_LEGACY, 1306 "clk-phase-legacy"); 1307 arasan_dt_read_clk_phase(dev, clk_data, MMC_TIMING_MMC_HS, 1308 "clk-phase-mmc-hs"); 1309 arasan_dt_read_clk_phase(dev, clk_data, MMC_TIMING_SD_HS, 1310 "clk-phase-sd-hs"); 1311 arasan_dt_read_clk_phase(dev, clk_data, MMC_TIMING_UHS_SDR12, 1312 "clk-phase-uhs-sdr12"); 1313 arasan_dt_read_clk_phase(dev, clk_data, MMC_TIMING_UHS_SDR25, 1314 "clk-phase-uhs-sdr25"); 1315 arasan_dt_read_clk_phase(dev, clk_data, MMC_TIMING_UHS_SDR50, 1316 "clk-phase-uhs-sdr50"); 1317 arasan_dt_read_clk_phase(dev, clk_data, MMC_TIMING_UHS_SDR104, 1318 "clk-phase-uhs-sdr104"); 1319 arasan_dt_read_clk_phase(dev, clk_data, MMC_TIMING_UHS_DDR50, 1320 "clk-phase-uhs-ddr50"); 1321 arasan_dt_read_clk_phase(dev, clk_data, MMC_TIMING_MMC_DDR52, 1322 "clk-phase-mmc-ddr52"); 1323 arasan_dt_read_clk_phase(dev, clk_data, MMC_TIMING_MMC_HS200, 1324 "clk-phase-mmc-hs200"); 1325 arasan_dt_read_clk_phase(dev, clk_data, MMC_TIMING_MMC_HS400, 1326 "clk-phase-mmc-hs400"); 1327 } 1328 1329 static const struct sdhci_pltfm_data sdhci_arasan_pdata = { 1330 .ops = &sdhci_arasan_ops, 1331 .quirks = SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN, 1332 .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN | 1333 SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN | 1334 SDHCI_QUIRK2_STOP_WITH_TC, 1335 }; 1336 1337 static const struct sdhci_arasan_clk_ops arasan_clk_ops = { 1338 .sdcardclk_ops = &arasan_sdcardclk_ops, 1339 .sampleclk_ops = &arasan_sampleclk_ops, 1340 }; 1341 1342 static struct sdhci_arasan_of_data sdhci_arasan_generic_data = { 1343 .pdata = &sdhci_arasan_pdata, 1344 .clk_ops = &arasan_clk_ops, 1345 }; 1346 1347 static const struct sdhci_pltfm_data sdhci_keembay_emmc_pdata = { 1348 .ops = &sdhci_arasan_cqe_ops, 1349 .quirks = SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN | 1350 SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC | 1351 SDHCI_QUIRK_NO_LED | 1352 SDHCI_QUIRK_32BIT_DMA_ADDR | 1353 SDHCI_QUIRK_32BIT_DMA_SIZE | 1354 SDHCI_QUIRK_32BIT_ADMA_SIZE, 1355 .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN | 1356 SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN | 1357 SDHCI_QUIRK2_CAPS_BIT63_FOR_HS400 | 1358 SDHCI_QUIRK2_STOP_WITH_TC | 1359 SDHCI_QUIRK2_BROKEN_64_BIT_DMA, 1360 }; 1361 1362 static const struct sdhci_pltfm_data sdhci_keembay_sd_pdata = { 1363 .ops = &sdhci_arasan_ops, 1364 .quirks = SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN | 1365 SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC | 1366 SDHCI_QUIRK_NO_LED | 1367 SDHCI_QUIRK_32BIT_DMA_ADDR | 1368 SDHCI_QUIRK_32BIT_DMA_SIZE | 1369 SDHCI_QUIRK_32BIT_ADMA_SIZE, 1370 .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN | 1371 SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN | 1372 SDHCI_QUIRK2_CARD_ON_NEEDS_BUS_ON | 1373 SDHCI_QUIRK2_STOP_WITH_TC | 1374 SDHCI_QUIRK2_BROKEN_64_BIT_DMA, 1375 }; 1376 1377 static const struct sdhci_pltfm_data sdhci_keembay_sdio_pdata = { 1378 .ops = &sdhci_arasan_ops, 1379 .quirks = SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN | 1380 SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC | 1381 SDHCI_QUIRK_NO_LED | 1382 SDHCI_QUIRK_32BIT_DMA_ADDR | 1383 SDHCI_QUIRK_32BIT_DMA_SIZE | 1384 SDHCI_QUIRK_32BIT_ADMA_SIZE, 1385 .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN | 1386 SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN | 1387 SDHCI_QUIRK2_HOST_OFF_CARD_ON | 1388 SDHCI_QUIRK2_BROKEN_64_BIT_DMA, 1389 }; 1390 1391 static struct sdhci_arasan_of_data sdhci_arasan_rk3399_data = { 1392 .soc_ctl_map = &rk3399_soc_ctl_map, 1393 .pdata = &sdhci_arasan_cqe_pdata, 1394 .clk_ops = &arasan_clk_ops, 1395 }; 1396 1397 static struct sdhci_arasan_of_data intel_lgm_emmc_data = { 1398 .soc_ctl_map = &intel_lgm_emmc_soc_ctl_map, 1399 .pdata = &sdhci_arasan_cqe_pdata, 1400 .clk_ops = &arasan_clk_ops, 1401 }; 1402 1403 static struct sdhci_arasan_of_data intel_lgm_sdxc_data = { 1404 .soc_ctl_map = &intel_lgm_sdxc_soc_ctl_map, 1405 .pdata = &sdhci_arasan_cqe_pdata, 1406 .clk_ops = &arasan_clk_ops, 1407 }; 1408 1409 static const struct sdhci_pltfm_data sdhci_arasan_zynqmp_pdata = { 1410 .ops = &sdhci_arasan_ops, 1411 .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN | 1412 SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN | 1413 SDHCI_QUIRK2_STOP_WITH_TC, 1414 }; 1415 1416 static const struct sdhci_pltfm_data sdhci_arasan_versal_net_pdata = { 1417 .ops = &sdhci_arasan_ops, 1418 .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN | 1419 SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN | 1420 SDHCI_QUIRK2_STOP_WITH_TC | 1421 SDHCI_QUIRK2_CAPS_BIT63_FOR_HS400, 1422 }; 1423 1424 static const struct sdhci_arasan_clk_ops zynqmp_clk_ops = { 1425 .sdcardclk_ops = &zynqmp_sdcardclk_ops, 1426 .sampleclk_ops = &zynqmp_sampleclk_ops, 1427 }; 1428 1429 static struct sdhci_arasan_of_data sdhci_arasan_zynqmp_data = { 1430 .pdata = &sdhci_arasan_zynqmp_pdata, 1431 .clk_ops = &zynqmp_clk_ops, 1432 }; 1433 1434 static const struct sdhci_arasan_clk_ops versal_clk_ops = { 1435 .sdcardclk_ops = &versal_sdcardclk_ops, 1436 .sampleclk_ops = &versal_sampleclk_ops, 1437 }; 1438 1439 static struct sdhci_arasan_of_data sdhci_arasan_versal_data = { 1440 .pdata = &sdhci_arasan_zynqmp_pdata, 1441 .clk_ops = &versal_clk_ops, 1442 }; 1443 1444 static const struct sdhci_arasan_clk_ops versal_net_clk_ops = { 1445 .sdcardclk_ops = &versal_net_sdcardclk_ops, 1446 .sampleclk_ops = &versal_net_sampleclk_ops, 1447 }; 1448 1449 static struct sdhci_arasan_of_data sdhci_arasan_versal_net_data = { 1450 .pdata = &sdhci_arasan_versal_net_pdata, 1451 .clk_ops = &versal_net_clk_ops, 1452 }; 1453 1454 static struct sdhci_arasan_of_data intel_keembay_emmc_data = { 1455 .soc_ctl_map = &intel_keembay_soc_ctl_map, 1456 .pdata = &sdhci_keembay_emmc_pdata, 1457 .clk_ops = &arasan_clk_ops, 1458 }; 1459 1460 static struct sdhci_arasan_of_data intel_keembay_sd_data = { 1461 .soc_ctl_map = &intel_keembay_soc_ctl_map, 1462 .pdata = &sdhci_keembay_sd_pdata, 1463 .clk_ops = &arasan_clk_ops, 1464 }; 1465 1466 static struct sdhci_arasan_of_data intel_keembay_sdio_data = { 1467 .soc_ctl_map = &intel_keembay_soc_ctl_map, 1468 .pdata = &sdhci_keembay_sdio_pdata, 1469 .clk_ops = &arasan_clk_ops, 1470 }; 1471 1472 static const struct of_device_id sdhci_arasan_of_match[] = { 1473 /* SoC-specific compatible strings w/ soc_ctl_map */ 1474 { 1475 .compatible = "rockchip,rk3399-sdhci-5.1", 1476 .data = &sdhci_arasan_rk3399_data, 1477 }, 1478 { 1479 .compatible = "intel,lgm-sdhci-5.1-emmc", 1480 .data = &intel_lgm_emmc_data, 1481 }, 1482 { 1483 .compatible = "intel,lgm-sdhci-5.1-sdxc", 1484 .data = &intel_lgm_sdxc_data, 1485 }, 1486 { 1487 .compatible = "intel,keembay-sdhci-5.1-emmc", 1488 .data = &intel_keembay_emmc_data, 1489 }, 1490 { 1491 .compatible = "intel,keembay-sdhci-5.1-sd", 1492 .data = &intel_keembay_sd_data, 1493 }, 1494 { 1495 .compatible = "intel,keembay-sdhci-5.1-sdio", 1496 .data = &intel_keembay_sdio_data, 1497 }, 1498 /* Generic compatible below here */ 1499 { 1500 .compatible = "arasan,sdhci-8.9a", 1501 .data = &sdhci_arasan_generic_data, 1502 }, 1503 { 1504 .compatible = "arasan,sdhci-5.1", 1505 .data = &sdhci_arasan_generic_data, 1506 }, 1507 { 1508 .compatible = "arasan,sdhci-4.9a", 1509 .data = &sdhci_arasan_generic_data, 1510 }, 1511 { 1512 .compatible = "xlnx,zynqmp-8.9a", 1513 .data = &sdhci_arasan_zynqmp_data, 1514 }, 1515 { 1516 .compatible = "xlnx,versal-8.9a", 1517 .data = &sdhci_arasan_versal_data, 1518 }, 1519 { 1520 .compatible = "xlnx,versal-net-emmc", 1521 .data = &sdhci_arasan_versal_net_data, 1522 }, 1523 { /* sentinel */ } 1524 }; 1525 MODULE_DEVICE_TABLE(of, sdhci_arasan_of_match); 1526 1527 /** 1528 * sdhci_arasan_register_sdcardclk - Register the sdcardclk for a PHY to use 1529 * 1530 * @sdhci_arasan: Our private data structure. 1531 * @clk_xin: Pointer to the functional clock 1532 * @dev: Pointer to our struct device. 1533 * 1534 * Some PHY devices need to know what the actual card clock is. In order for 1535 * them to find out, we'll provide a clock through the common clock framework 1536 * for them to query. 1537 * 1538 * Return: 0 on success and error value on error 1539 */ 1540 static int 1541 sdhci_arasan_register_sdcardclk(struct sdhci_arasan_data *sdhci_arasan, 1542 struct clk *clk_xin, 1543 struct device *dev) 1544 { 1545 struct sdhci_arasan_clk_data *clk_data = &sdhci_arasan->clk_data; 1546 struct device_node *np = dev->of_node; 1547 struct clk_init_data sdcardclk_init; 1548 const char *parent_clk_name; 1549 int ret; 1550 1551 ret = of_property_read_string_index(np, "clock-output-names", 0, 1552 &sdcardclk_init.name); 1553 if (ret) { 1554 dev_err(dev, "DT has #clock-cells but no clock-output-names\n"); 1555 return ret; 1556 } 1557 1558 parent_clk_name = __clk_get_name(clk_xin); 1559 sdcardclk_init.parent_names = &parent_clk_name; 1560 sdcardclk_init.num_parents = 1; 1561 sdcardclk_init.flags = CLK_GET_RATE_NOCACHE; 1562 sdcardclk_init.ops = sdhci_arasan->clk_ops->sdcardclk_ops; 1563 1564 clk_data->sdcardclk_hw.init = &sdcardclk_init; 1565 clk_data->sdcardclk = 1566 devm_clk_register(dev, &clk_data->sdcardclk_hw); 1567 if (IS_ERR(clk_data->sdcardclk)) 1568 return PTR_ERR(clk_data->sdcardclk); 1569 clk_data->sdcardclk_hw.init = NULL; 1570 1571 ret = of_clk_add_provider(np, of_clk_src_simple_get, 1572 clk_data->sdcardclk); 1573 if (ret) 1574 dev_err(dev, "Failed to add sdcard clock provider\n"); 1575 1576 return ret; 1577 } 1578 1579 /** 1580 * sdhci_arasan_register_sampleclk - Register the sampleclk for a PHY to use 1581 * 1582 * @sdhci_arasan: Our private data structure. 1583 * @clk_xin: Pointer to the functional clock 1584 * @dev: Pointer to our struct device. 1585 * 1586 * Some PHY devices need to know what the actual card clock is. In order for 1587 * them to find out, we'll provide a clock through the common clock framework 1588 * for them to query. 1589 * 1590 * Return: 0 on success and error value on error 1591 */ 1592 static int 1593 sdhci_arasan_register_sampleclk(struct sdhci_arasan_data *sdhci_arasan, 1594 struct clk *clk_xin, 1595 struct device *dev) 1596 { 1597 struct sdhci_arasan_clk_data *clk_data = &sdhci_arasan->clk_data; 1598 struct device_node *np = dev->of_node; 1599 struct clk_init_data sampleclk_init; 1600 const char *parent_clk_name; 1601 int ret; 1602 1603 ret = of_property_read_string_index(np, "clock-output-names", 1, 1604 &sampleclk_init.name); 1605 if (ret) { 1606 dev_err(dev, "DT has #clock-cells but no clock-output-names\n"); 1607 return ret; 1608 } 1609 1610 parent_clk_name = __clk_get_name(clk_xin); 1611 sampleclk_init.parent_names = &parent_clk_name; 1612 sampleclk_init.num_parents = 1; 1613 sampleclk_init.flags = CLK_GET_RATE_NOCACHE; 1614 sampleclk_init.ops = sdhci_arasan->clk_ops->sampleclk_ops; 1615 1616 clk_data->sampleclk_hw.init = &sampleclk_init; 1617 clk_data->sampleclk = 1618 devm_clk_register(dev, &clk_data->sampleclk_hw); 1619 if (IS_ERR(clk_data->sampleclk)) 1620 return PTR_ERR(clk_data->sampleclk); 1621 clk_data->sampleclk_hw.init = NULL; 1622 1623 ret = of_clk_add_provider(np, of_clk_src_simple_get, 1624 clk_data->sampleclk); 1625 if (ret) 1626 dev_err(dev, "Failed to add sample clock provider\n"); 1627 1628 return ret; 1629 } 1630 1631 /** 1632 * sdhci_arasan_unregister_sdclk - Undoes sdhci_arasan_register_sdclk() 1633 * 1634 * @dev: Pointer to our struct device. 1635 * 1636 * Should be called any time we're exiting and sdhci_arasan_register_sdclk() 1637 * returned success. 1638 */ 1639 static void sdhci_arasan_unregister_sdclk(struct device *dev) 1640 { 1641 struct device_node *np = dev->of_node; 1642 1643 if (!of_property_present(np, "#clock-cells")) 1644 return; 1645 1646 of_clk_del_provider(dev->of_node); 1647 } 1648 1649 /** 1650 * sdhci_arasan_update_support64b - Set SUPPORT_64B (64-bit System Bus Support) 1651 * @host: The sdhci_host 1652 * @value: The value to write 1653 * 1654 * This should be set based on the System Address Bus. 1655 * 0: the Core supports only 32-bit System Address Bus. 1656 * 1: the Core supports 64-bit System Address Bus. 1657 * 1658 * NOTE: 1659 * For Keem Bay, it is required to clear this bit. Its default value is 1'b1. 1660 * Keem Bay does not support 64-bit access. 1661 */ 1662 static void sdhci_arasan_update_support64b(struct sdhci_host *host, u32 value) 1663 { 1664 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); 1665 struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host); 1666 const struct sdhci_arasan_soc_ctl_map *soc_ctl_map; 1667 1668 /* Having a map is optional */ 1669 soc_ctl_map = sdhci_arasan->soc_ctl_map; 1670 if (!soc_ctl_map) 1671 return; 1672 1673 /* If we have a map, we expect to have a syscon */ 1674 if (!sdhci_arasan->soc_ctl_base) { 1675 pr_warn("%s: Have regmap, but no soc-ctl-syscon\n", 1676 mmc_hostname(host->mmc)); 1677 return; 1678 } 1679 1680 sdhci_arasan_syscon_write(host, &soc_ctl_map->support64b, value); 1681 } 1682 1683 /** 1684 * sdhci_arasan_register_sdclk - Register the sdcardclk for a PHY to use 1685 * 1686 * @sdhci_arasan: Our private data structure. 1687 * @clk_xin: Pointer to the functional clock 1688 * @dev: Pointer to our struct device. 1689 * 1690 * Some PHY devices need to know what the actual card clock is. In order for 1691 * them to find out, we'll provide a clock through the common clock framework 1692 * for them to query. 1693 * 1694 * Note: without seriously re-architecting SDHCI's clock code and testing on 1695 * all platforms, there's no way to create a totally beautiful clock here 1696 * with all clock ops implemented. Instead, we'll just create a clock that can 1697 * be queried and set the CLK_GET_RATE_NOCACHE attribute to tell common clock 1698 * framework that we're doing things behind its back. This should be sufficient 1699 * to create nice clean device tree bindings and later (if needed) we can try 1700 * re-architecting SDHCI if we see some benefit to it. 1701 * 1702 * Return: 0 on success and error value on error 1703 */ 1704 static int sdhci_arasan_register_sdclk(struct sdhci_arasan_data *sdhci_arasan, 1705 struct clk *clk_xin, 1706 struct device *dev) 1707 { 1708 struct device_node *np = dev->of_node; 1709 u32 num_clks = 0; 1710 int ret; 1711 1712 /* Providing a clock to the PHY is optional; no error if missing */ 1713 if (of_property_read_u32(np, "#clock-cells", &num_clks) < 0) 1714 return 0; 1715 1716 ret = sdhci_arasan_register_sdcardclk(sdhci_arasan, clk_xin, dev); 1717 if (ret) 1718 return ret; 1719 1720 if (num_clks) { 1721 ret = sdhci_arasan_register_sampleclk(sdhci_arasan, clk_xin, 1722 dev); 1723 if (ret) { 1724 sdhci_arasan_unregister_sdclk(dev); 1725 return ret; 1726 } 1727 } 1728 1729 return 0; 1730 } 1731 1732 static int sdhci_zynqmp_set_dynamic_config(struct device *dev, 1733 struct sdhci_arasan_data *sdhci_arasan) 1734 { 1735 struct sdhci_host *host = sdhci_arasan->host; 1736 struct clk_hw *hw = &sdhci_arasan->clk_data.sdcardclk_hw; 1737 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); 1738 const char *clk_name = clk_hw_get_name(hw); 1739 u32 mhz, node_id = !strcmp(clk_name, "clk_out_sd0") ? NODE_SD_0 : NODE_SD_1; 1740 struct reset_control *rstc; 1741 int ret; 1742 1743 /* Obtain SDHC reset control */ 1744 rstc = devm_reset_control_get_optional_exclusive(dev, NULL); 1745 if (IS_ERR(rstc)) { 1746 dev_err(dev, "Cannot get SDHC reset.\n"); 1747 return PTR_ERR(rstc); 1748 } 1749 1750 ret = reset_control_assert(rstc); 1751 if (ret) 1752 return ret; 1753 1754 ret = zynqmp_pm_set_sd_config(node_id, SD_CONFIG_FIXED, 0); 1755 if (ret) 1756 return ret; 1757 1758 ret = zynqmp_pm_set_sd_config(node_id, SD_CONFIG_EMMC_SEL, 1759 !!(host->mmc->caps & MMC_CAP_NONREMOVABLE)); 1760 if (ret) 1761 return ret; 1762 1763 mhz = DIV_ROUND_CLOSEST_ULL(clk_get_rate(pltfm_host->clk), 1000000); 1764 if (mhz > 100 && mhz <= 200) 1765 mhz = 200; 1766 else if (mhz > 50 && mhz <= 100) 1767 mhz = 100; 1768 else if (mhz > 25 && mhz <= 50) 1769 mhz = 50; 1770 else 1771 mhz = 25; 1772 1773 ret = zynqmp_pm_set_sd_config(node_id, SD_CONFIG_BASECLK, mhz); 1774 if (ret) 1775 return ret; 1776 1777 ret = zynqmp_pm_set_sd_config(node_id, SD_CONFIG_8BIT, 1778 !!(host->mmc->caps & MMC_CAP_8_BIT_DATA)); 1779 if (ret) 1780 return ret; 1781 1782 ret = reset_control_deassert(rstc); 1783 if (ret) 1784 return ret; 1785 1786 usleep_range(1000, 1500); 1787 1788 return 0; 1789 } 1790 1791 static int sdhci_arasan_add_host(struct sdhci_arasan_data *sdhci_arasan) 1792 { 1793 struct sdhci_host *host = sdhci_arasan->host; 1794 struct cqhci_host *cq_host; 1795 bool dma64; 1796 int ret; 1797 1798 if (!sdhci_arasan->has_cqe) 1799 return sdhci_add_host(host); 1800 1801 ret = sdhci_setup_host(host); 1802 if (ret) 1803 return ret; 1804 1805 cq_host = devm_kzalloc(host->mmc->parent, 1806 sizeof(*cq_host), GFP_KERNEL); 1807 if (!cq_host) { 1808 ret = -ENOMEM; 1809 goto cleanup; 1810 } 1811 1812 cq_host->mmio = host->ioaddr + SDHCI_ARASAN_CQE_BASE_ADDR; 1813 cq_host->ops = &sdhci_arasan_cqhci_ops; 1814 1815 dma64 = host->flags & SDHCI_USE_64_BIT_DMA; 1816 if (dma64) 1817 cq_host->caps |= CQHCI_TASK_DESC_SZ_128; 1818 1819 ret = cqhci_init(cq_host, host->mmc, dma64); 1820 if (ret) 1821 goto cleanup; 1822 1823 ret = __sdhci_add_host(host); 1824 if (ret) 1825 goto cleanup; 1826 1827 return 0; 1828 1829 cleanup: 1830 sdhci_cleanup_host(host); 1831 return ret; 1832 } 1833 1834 static int sdhci_arasan_probe(struct platform_device *pdev) 1835 { 1836 int ret; 1837 struct device_node *node; 1838 struct clk *clk_xin; 1839 struct clk *clk_dll; 1840 struct sdhci_host *host; 1841 struct sdhci_pltfm_host *pltfm_host; 1842 struct device *dev = &pdev->dev; 1843 struct device_node *np = dev->of_node; 1844 struct sdhci_arasan_data *sdhci_arasan; 1845 const struct sdhci_arasan_of_data *data; 1846 1847 data = of_device_get_match_data(dev); 1848 if (!data) 1849 return -EINVAL; 1850 1851 host = sdhci_pltfm_init(pdev, data->pdata, sizeof(*sdhci_arasan)); 1852 1853 if (IS_ERR(host)) 1854 return PTR_ERR(host); 1855 1856 pltfm_host = sdhci_priv(host); 1857 sdhci_arasan = sdhci_pltfm_priv(pltfm_host); 1858 sdhci_arasan->host = host; 1859 1860 sdhci_arasan->soc_ctl_map = data->soc_ctl_map; 1861 sdhci_arasan->clk_ops = data->clk_ops; 1862 1863 node = of_parse_phandle(np, "arasan,soc-ctl-syscon", 0); 1864 if (node) { 1865 sdhci_arasan->soc_ctl_base = syscon_node_to_regmap(node); 1866 of_node_put(node); 1867 1868 if (IS_ERR(sdhci_arasan->soc_ctl_base)) { 1869 ret = dev_err_probe(dev, 1870 PTR_ERR(sdhci_arasan->soc_ctl_base), 1871 "Can't get syscon\n"); 1872 goto err_pltfm_free; 1873 } 1874 } 1875 1876 sdhci_get_of_property(pdev); 1877 1878 sdhci_arasan->clk_ahb = devm_clk_get(dev, "clk_ahb"); 1879 if (IS_ERR(sdhci_arasan->clk_ahb)) { 1880 ret = dev_err_probe(dev, PTR_ERR(sdhci_arasan->clk_ahb), 1881 "clk_ahb clock not found.\n"); 1882 goto err_pltfm_free; 1883 } 1884 1885 clk_xin = devm_clk_get(dev, "clk_xin"); 1886 if (IS_ERR(clk_xin)) { 1887 ret = dev_err_probe(dev, PTR_ERR(clk_xin), "clk_xin clock not found.\n"); 1888 goto err_pltfm_free; 1889 } 1890 1891 ret = clk_prepare_enable(sdhci_arasan->clk_ahb); 1892 if (ret) { 1893 dev_err(dev, "Unable to enable AHB clock.\n"); 1894 goto err_pltfm_free; 1895 } 1896 1897 /* If clock-frequency property is set, use the provided value */ 1898 if (pltfm_host->clock && 1899 pltfm_host->clock != clk_get_rate(clk_xin)) { 1900 ret = clk_set_rate(clk_xin, pltfm_host->clock); 1901 if (ret) { 1902 dev_err(&pdev->dev, "Failed to set SD clock rate\n"); 1903 goto clk_dis_ahb; 1904 } 1905 } 1906 1907 ret = clk_prepare_enable(clk_xin); 1908 if (ret) { 1909 dev_err(dev, "Unable to enable SD clock.\n"); 1910 goto clk_dis_ahb; 1911 } 1912 1913 clk_dll = devm_clk_get_optional_enabled(dev, "gate"); 1914 if (IS_ERR(clk_dll)) { 1915 ret = dev_err_probe(dev, PTR_ERR(clk_dll), "failed to get dll clk\n"); 1916 goto clk_disable_all; 1917 } 1918 1919 if (of_property_read_bool(np, "xlnx,fails-without-test-cd")) 1920 sdhci_arasan->quirks |= SDHCI_ARASAN_QUIRK_FORCE_CDTEST; 1921 1922 if (of_property_read_bool(np, "xlnx,int-clock-stable-broken")) 1923 sdhci_arasan->quirks |= SDHCI_ARASAN_QUIRK_CLOCK_UNSTABLE; 1924 1925 pltfm_host->clk = clk_xin; 1926 1927 if (of_device_is_compatible(np, "rockchip,rk3399-sdhci-5.1")) 1928 sdhci_arasan_update_clockmultiplier(host, 0x0); 1929 1930 if (of_device_is_compatible(np, "intel,keembay-sdhci-5.1-emmc") || 1931 of_device_is_compatible(np, "intel,keembay-sdhci-5.1-sd") || 1932 of_device_is_compatible(np, "intel,keembay-sdhci-5.1-sdio")) { 1933 sdhci_arasan_update_clockmultiplier(host, 0x0); 1934 sdhci_arasan_update_support64b(host, 0x0); 1935 1936 host->mmc->caps |= MMC_CAP_WAIT_WHILE_BUSY; 1937 } 1938 1939 sdhci_arasan_update_baseclkfreq(host); 1940 1941 ret = sdhci_arasan_register_sdclk(sdhci_arasan, clk_xin, dev); 1942 if (ret) 1943 goto clk_disable_all; 1944 1945 if (of_device_is_compatible(np, "xlnx,zynqmp-8.9a")) { 1946 host->mmc_host_ops.execute_tuning = 1947 arasan_zynqmp_execute_tuning; 1948 1949 sdhci_arasan->quirks |= SDHCI_ARASAN_QUIRK_CLOCK_25_BROKEN; 1950 host->quirks |= SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12; 1951 } 1952 1953 arasan_dt_parse_clk_phases(dev, &sdhci_arasan->clk_data); 1954 1955 ret = mmc_of_parse(host->mmc); 1956 if (ret) { 1957 ret = dev_err_probe(dev, ret, "parsing dt failed.\n"); 1958 goto unreg_clk; 1959 } 1960 1961 if (of_device_is_compatible(np, "xlnx,zynqmp-8.9a")) { 1962 ret = zynqmp_pm_is_function_supported(PM_IOCTL, IOCTL_SET_SD_CONFIG); 1963 if (!ret) { 1964 ret = sdhci_zynqmp_set_dynamic_config(dev, sdhci_arasan); 1965 if (ret) 1966 goto unreg_clk; 1967 } 1968 } 1969 1970 sdhci_arasan->phy = ERR_PTR(-ENODEV); 1971 if (of_device_is_compatible(np, "arasan,sdhci-5.1")) { 1972 sdhci_arasan->phy = devm_phy_get(dev, "phy_arasan"); 1973 if (IS_ERR(sdhci_arasan->phy)) { 1974 ret = dev_err_probe(dev, PTR_ERR(sdhci_arasan->phy), 1975 "No phy for arasan,sdhci-5.1.\n"); 1976 goto unreg_clk; 1977 } 1978 1979 ret = phy_init(sdhci_arasan->phy); 1980 if (ret < 0) { 1981 dev_err(dev, "phy_init err.\n"); 1982 goto unreg_clk; 1983 } 1984 1985 host->mmc_host_ops.hs400_enhanced_strobe = 1986 sdhci_arasan_hs400_enhanced_strobe; 1987 host->mmc_host_ops.start_signal_voltage_switch = 1988 sdhci_arasan_voltage_switch; 1989 sdhci_arasan->has_cqe = true; 1990 host->mmc->caps2 |= MMC_CAP2_CQE; 1991 1992 if (!of_property_read_bool(np, "disable-cqe-dcmd")) 1993 host->mmc->caps2 |= MMC_CAP2_CQE_DCMD; 1994 } 1995 1996 if (of_device_is_compatible(np, "xlnx,versal-net-emmc")) 1997 sdhci_arasan->internal_phy_reg = true; 1998 1999 ret = sdhci_arasan_add_host(sdhci_arasan); 2000 if (ret) 2001 goto err_add_host; 2002 2003 return 0; 2004 2005 err_add_host: 2006 if (!IS_ERR(sdhci_arasan->phy)) 2007 phy_exit(sdhci_arasan->phy); 2008 unreg_clk: 2009 sdhci_arasan_unregister_sdclk(dev); 2010 clk_disable_all: 2011 clk_disable_unprepare(clk_xin); 2012 clk_dis_ahb: 2013 clk_disable_unprepare(sdhci_arasan->clk_ahb); 2014 err_pltfm_free: 2015 sdhci_pltfm_free(pdev); 2016 return ret; 2017 } 2018 2019 static int sdhci_arasan_remove(struct platform_device *pdev) 2020 { 2021 struct sdhci_host *host = platform_get_drvdata(pdev); 2022 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); 2023 struct sdhci_arasan_data *sdhci_arasan = sdhci_pltfm_priv(pltfm_host); 2024 struct clk *clk_ahb = sdhci_arasan->clk_ahb; 2025 2026 if (!IS_ERR(sdhci_arasan->phy)) { 2027 if (sdhci_arasan->is_phy_on) 2028 phy_power_off(sdhci_arasan->phy); 2029 phy_exit(sdhci_arasan->phy); 2030 } 2031 2032 sdhci_arasan_unregister_sdclk(&pdev->dev); 2033 2034 sdhci_pltfm_unregister(pdev); 2035 2036 clk_disable_unprepare(clk_ahb); 2037 2038 return 0; 2039 } 2040 2041 static struct platform_driver sdhci_arasan_driver = { 2042 .driver = { 2043 .name = "sdhci-arasan", 2044 .probe_type = PROBE_PREFER_ASYNCHRONOUS, 2045 .of_match_table = sdhci_arasan_of_match, 2046 .pm = &sdhci_arasan_dev_pm_ops, 2047 }, 2048 .probe = sdhci_arasan_probe, 2049 .remove = sdhci_arasan_remove, 2050 }; 2051 2052 module_platform_driver(sdhci_arasan_driver); 2053 2054 MODULE_DESCRIPTION("Driver for the Arasan SDHCI Controller"); 2055 MODULE_AUTHOR("Soeren Brinkmann <soren.brinkmann@xilinx.com>"); 2056 MODULE_LICENSE("GPL"); 2057