1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * linux/drivers/mmc/core/host.c 4 * 5 * Copyright (C) 2003 Russell King, All Rights Reserved. 6 * Copyright (C) 2007-2008 Pierre Ossman 7 * Copyright (C) 2010 Linus Walleij 8 * 9 * MMC host class device management 10 */ 11 12 #include <linux/device.h> 13 #include <linux/err.h> 14 #include <linux/idr.h> 15 #include <linux/of.h> 16 #include <linux/of_gpio.h> 17 #include <linux/pagemap.h> 18 #include <linux/export.h> 19 #include <linux/leds.h> 20 #include <linux/slab.h> 21 22 #include <linux/mmc/host.h> 23 #include <linux/mmc/card.h> 24 #include <linux/mmc/slot-gpio.h> 25 26 #include "core.h" 27 #include "host.h" 28 #include "slot-gpio.h" 29 #include "pwrseq.h" 30 #include "sdio_ops.h" 31 32 #define cls_dev_to_mmc_host(d) container_of(d, struct mmc_host, class_dev) 33 34 static DEFINE_IDA(mmc_host_ida); 35 36 static void mmc_host_classdev_release(struct device *dev) 37 { 38 struct mmc_host *host = cls_dev_to_mmc_host(dev); 39 ida_simple_remove(&mmc_host_ida, host->index); 40 kfree(host); 41 } 42 43 static struct class mmc_host_class = { 44 .name = "mmc_host", 45 .dev_release = mmc_host_classdev_release, 46 }; 47 48 int mmc_register_host_class(void) 49 { 50 return class_register(&mmc_host_class); 51 } 52 53 void mmc_unregister_host_class(void) 54 { 55 class_unregister(&mmc_host_class); 56 } 57 58 void mmc_retune_enable(struct mmc_host *host) 59 { 60 host->can_retune = 1; 61 if (host->retune_period) 62 mod_timer(&host->retune_timer, 63 jiffies + host->retune_period * HZ); 64 } 65 66 /* 67 * Pause re-tuning for a small set of operations. The pause begins after the 68 * next command and after first doing re-tuning. 69 */ 70 void mmc_retune_pause(struct mmc_host *host) 71 { 72 if (!host->retune_paused) { 73 host->retune_paused = 1; 74 mmc_retune_needed(host); 75 mmc_retune_hold(host); 76 } 77 } 78 EXPORT_SYMBOL(mmc_retune_pause); 79 80 void mmc_retune_unpause(struct mmc_host *host) 81 { 82 if (host->retune_paused) { 83 host->retune_paused = 0; 84 mmc_retune_release(host); 85 } 86 } 87 EXPORT_SYMBOL(mmc_retune_unpause); 88 89 void mmc_retune_disable(struct mmc_host *host) 90 { 91 mmc_retune_unpause(host); 92 host->can_retune = 0; 93 del_timer_sync(&host->retune_timer); 94 host->retune_now = 0; 95 host->need_retune = 0; 96 } 97 98 void mmc_retune_timer_stop(struct mmc_host *host) 99 { 100 del_timer_sync(&host->retune_timer); 101 } 102 EXPORT_SYMBOL(mmc_retune_timer_stop); 103 104 void mmc_retune_hold(struct mmc_host *host) 105 { 106 if (!host->hold_retune) 107 host->retune_now = 1; 108 host->hold_retune += 1; 109 } 110 111 void mmc_retune_release(struct mmc_host *host) 112 { 113 if (host->hold_retune) 114 host->hold_retune -= 1; 115 else 116 WARN_ON(1); 117 } 118 EXPORT_SYMBOL(mmc_retune_release); 119 120 int mmc_retune(struct mmc_host *host) 121 { 122 bool return_to_hs400 = false; 123 int err; 124 125 if (host->retune_now) 126 host->retune_now = 0; 127 else 128 return 0; 129 130 if (!host->need_retune || host->doing_retune || !host->card) 131 return 0; 132 133 host->need_retune = 0; 134 135 host->doing_retune = 1; 136 137 if (host->ios.timing == MMC_TIMING_MMC_HS400) { 138 err = mmc_hs400_to_hs200(host->card); 139 if (err) 140 goto out; 141 142 return_to_hs400 = true; 143 } 144 145 err = mmc_execute_tuning(host->card); 146 if (err) 147 goto out; 148 149 if (return_to_hs400) 150 err = mmc_hs200_to_hs400(host->card); 151 out: 152 host->doing_retune = 0; 153 154 return err; 155 } 156 157 static void mmc_retune_timer(struct timer_list *t) 158 { 159 struct mmc_host *host = from_timer(host, t, retune_timer); 160 161 mmc_retune_needed(host); 162 } 163 164 /** 165 * mmc_of_parse() - parse host's device-tree node 166 * @host: host whose node should be parsed. 167 * 168 * To keep the rest of the MMC subsystem unaware of whether DT has been 169 * used to to instantiate and configure this host instance or not, we 170 * parse the properties and set respective generic mmc-host flags and 171 * parameters. 172 */ 173 int mmc_of_parse(struct mmc_host *host) 174 { 175 struct device *dev = host->parent; 176 u32 bus_width, drv_type, cd_debounce_delay_ms; 177 int ret; 178 179 if (!dev || !dev_fwnode(dev)) 180 return 0; 181 182 /* "bus-width" is translated to MMC_CAP_*_BIT_DATA flags */ 183 if (device_property_read_u32(dev, "bus-width", &bus_width) < 0) { 184 dev_dbg(host->parent, 185 "\"bus-width\" property is missing, assuming 1 bit.\n"); 186 bus_width = 1; 187 } 188 189 switch (bus_width) { 190 case 8: 191 host->caps |= MMC_CAP_8_BIT_DATA; 192 /* fall through - Hosts capable of 8-bit can also do 4 bits */ 193 case 4: 194 host->caps |= MMC_CAP_4_BIT_DATA; 195 break; 196 case 1: 197 break; 198 default: 199 dev_err(host->parent, 200 "Invalid \"bus-width\" value %u!\n", bus_width); 201 return -EINVAL; 202 } 203 204 /* f_max is obtained from the optional "max-frequency" property */ 205 device_property_read_u32(dev, "max-frequency", &host->f_max); 206 207 /* 208 * Configure CD and WP pins. They are both by default active low to 209 * match the SDHCI spec. If GPIOs are provided for CD and / or WP, the 210 * mmc-gpio helpers are used to attach, configure and use them. If 211 * polarity inversion is specified in DT, one of MMC_CAP2_CD_ACTIVE_HIGH 212 * and MMC_CAP2_RO_ACTIVE_HIGH capability-2 flags is set. If the 213 * "broken-cd" property is provided, the MMC_CAP_NEEDS_POLL capability 214 * is set. If the "non-removable" property is found, the 215 * MMC_CAP_NONREMOVABLE capability is set and no card-detection 216 * configuration is performed. 217 */ 218 219 /* Parse Card Detection */ 220 221 if (device_property_read_bool(dev, "non-removable")) { 222 host->caps |= MMC_CAP_NONREMOVABLE; 223 } else { 224 if (device_property_read_bool(dev, "cd-inverted")) 225 host->caps2 |= MMC_CAP2_CD_ACTIVE_HIGH; 226 227 if (device_property_read_u32(dev, "cd-debounce-delay-ms", 228 &cd_debounce_delay_ms)) 229 cd_debounce_delay_ms = 200; 230 231 if (device_property_read_bool(dev, "broken-cd")) 232 host->caps |= MMC_CAP_NEEDS_POLL; 233 234 ret = mmc_gpiod_request_cd(host, "cd", 0, false, 235 cd_debounce_delay_ms * 1000); 236 if (!ret) 237 dev_info(host->parent, "Got CD GPIO\n"); 238 else if (ret != -ENOENT && ret != -ENOSYS) 239 return ret; 240 } 241 242 /* Parse Write Protection */ 243 244 if (device_property_read_bool(dev, "wp-inverted")) 245 host->caps2 |= MMC_CAP2_RO_ACTIVE_HIGH; 246 247 ret = mmc_gpiod_request_ro(host, "wp", 0, 0); 248 if (!ret) 249 dev_info(host->parent, "Got WP GPIO\n"); 250 else if (ret != -ENOENT && ret != -ENOSYS) 251 return ret; 252 253 if (device_property_read_bool(dev, "disable-wp")) 254 host->caps2 |= MMC_CAP2_NO_WRITE_PROTECT; 255 256 if (device_property_read_bool(dev, "cap-sd-highspeed")) 257 host->caps |= MMC_CAP_SD_HIGHSPEED; 258 if (device_property_read_bool(dev, "cap-mmc-highspeed")) 259 host->caps |= MMC_CAP_MMC_HIGHSPEED; 260 if (device_property_read_bool(dev, "sd-uhs-sdr12")) 261 host->caps |= MMC_CAP_UHS_SDR12; 262 if (device_property_read_bool(dev, "sd-uhs-sdr25")) 263 host->caps |= MMC_CAP_UHS_SDR25; 264 if (device_property_read_bool(dev, "sd-uhs-sdr50")) 265 host->caps |= MMC_CAP_UHS_SDR50; 266 if (device_property_read_bool(dev, "sd-uhs-sdr104")) 267 host->caps |= MMC_CAP_UHS_SDR104; 268 if (device_property_read_bool(dev, "sd-uhs-ddr50")) 269 host->caps |= MMC_CAP_UHS_DDR50; 270 if (device_property_read_bool(dev, "cap-power-off-card")) 271 host->caps |= MMC_CAP_POWER_OFF_CARD; 272 if (device_property_read_bool(dev, "cap-mmc-hw-reset")) 273 host->caps |= MMC_CAP_HW_RESET; 274 if (device_property_read_bool(dev, "cap-sdio-irq")) 275 host->caps |= MMC_CAP_SDIO_IRQ; 276 if (device_property_read_bool(dev, "full-pwr-cycle")) 277 host->caps2 |= MMC_CAP2_FULL_PWR_CYCLE; 278 if (device_property_read_bool(dev, "keep-power-in-suspend")) 279 host->pm_caps |= MMC_PM_KEEP_POWER; 280 if (device_property_read_bool(dev, "wakeup-source") || 281 device_property_read_bool(dev, "enable-sdio-wakeup")) /* legacy */ 282 host->pm_caps |= MMC_PM_WAKE_SDIO_IRQ; 283 if (device_property_read_bool(dev, "mmc-ddr-3_3v")) 284 host->caps |= MMC_CAP_3_3V_DDR; 285 if (device_property_read_bool(dev, "mmc-ddr-1_8v")) 286 host->caps |= MMC_CAP_1_8V_DDR; 287 if (device_property_read_bool(dev, "mmc-ddr-1_2v")) 288 host->caps |= MMC_CAP_1_2V_DDR; 289 if (device_property_read_bool(dev, "mmc-hs200-1_8v")) 290 host->caps2 |= MMC_CAP2_HS200_1_8V_SDR; 291 if (device_property_read_bool(dev, "mmc-hs200-1_2v")) 292 host->caps2 |= MMC_CAP2_HS200_1_2V_SDR; 293 if (device_property_read_bool(dev, "mmc-hs400-1_8v")) 294 host->caps2 |= MMC_CAP2_HS400_1_8V | MMC_CAP2_HS200_1_8V_SDR; 295 if (device_property_read_bool(dev, "mmc-hs400-1_2v")) 296 host->caps2 |= MMC_CAP2_HS400_1_2V | MMC_CAP2_HS200_1_2V_SDR; 297 if (device_property_read_bool(dev, "mmc-hs400-enhanced-strobe")) 298 host->caps2 |= MMC_CAP2_HS400_ES; 299 if (device_property_read_bool(dev, "no-sdio")) 300 host->caps2 |= MMC_CAP2_NO_SDIO; 301 if (device_property_read_bool(dev, "no-sd")) 302 host->caps2 |= MMC_CAP2_NO_SD; 303 if (device_property_read_bool(dev, "no-mmc")) 304 host->caps2 |= MMC_CAP2_NO_MMC; 305 306 /* Must be after "non-removable" check */ 307 if (device_property_read_u32(dev, "fixed-emmc-driver-type", &drv_type) == 0) { 308 if (host->caps & MMC_CAP_NONREMOVABLE) 309 host->fixed_drv_type = drv_type; 310 else 311 dev_err(host->parent, 312 "can't use fixed driver type, media is removable\n"); 313 } 314 315 host->dsr_req = !device_property_read_u32(dev, "dsr", &host->dsr); 316 if (host->dsr_req && (host->dsr & ~0xffff)) { 317 dev_err(host->parent, 318 "device tree specified broken value for DSR: 0x%x, ignoring\n", 319 host->dsr); 320 host->dsr_req = 0; 321 } 322 323 device_property_read_u32(dev, "post-power-on-delay-ms", 324 &host->ios.power_delay_ms); 325 326 return mmc_pwrseq_alloc(host); 327 } 328 329 EXPORT_SYMBOL(mmc_of_parse); 330 331 /** 332 * mmc_of_parse_voltage - return mask of supported voltages 333 * @np: The device node need to be parsed. 334 * @mask: mask of voltages available for MMC/SD/SDIO 335 * 336 * Parse the "voltage-ranges" DT property, returning zero if it is not 337 * found, negative errno if the voltage-range specification is invalid, 338 * or one if the voltage-range is specified and successfully parsed. 339 */ 340 int mmc_of_parse_voltage(struct device_node *np, u32 *mask) 341 { 342 const u32 *voltage_ranges; 343 int num_ranges, i; 344 345 voltage_ranges = of_get_property(np, "voltage-ranges", &num_ranges); 346 if (!voltage_ranges) { 347 pr_debug("%pOF: voltage-ranges unspecified\n", np); 348 return 0; 349 } 350 num_ranges = num_ranges / sizeof(*voltage_ranges) / 2; 351 if (!num_ranges) { 352 pr_err("%pOF: voltage-ranges empty\n", np); 353 return -EINVAL; 354 } 355 356 for (i = 0; i < num_ranges; i++) { 357 const int j = i * 2; 358 u32 ocr_mask; 359 360 ocr_mask = mmc_vddrange_to_ocrmask( 361 be32_to_cpu(voltage_ranges[j]), 362 be32_to_cpu(voltage_ranges[j + 1])); 363 if (!ocr_mask) { 364 pr_err("%pOF: voltage-range #%d is invalid\n", 365 np, i); 366 return -EINVAL; 367 } 368 *mask |= ocr_mask; 369 } 370 371 return 1; 372 } 373 EXPORT_SYMBOL(mmc_of_parse_voltage); 374 375 /** 376 * mmc_alloc_host - initialise the per-host structure. 377 * @extra: sizeof private data structure 378 * @dev: pointer to host device model structure 379 * 380 * Initialise the per-host structure. 381 */ 382 struct mmc_host *mmc_alloc_host(int extra, struct device *dev) 383 { 384 int err; 385 struct mmc_host *host; 386 387 host = kzalloc(sizeof(struct mmc_host) + extra, GFP_KERNEL); 388 if (!host) 389 return NULL; 390 391 /* scanning will be enabled when we're ready */ 392 host->rescan_disable = 1; 393 394 err = ida_simple_get(&mmc_host_ida, 0, 0, GFP_KERNEL); 395 if (err < 0) { 396 kfree(host); 397 return NULL; 398 } 399 400 host->index = err; 401 402 dev_set_name(&host->class_dev, "mmc%d", host->index); 403 404 host->parent = dev; 405 host->class_dev.parent = dev; 406 host->class_dev.class = &mmc_host_class; 407 device_initialize(&host->class_dev); 408 device_enable_async_suspend(&host->class_dev); 409 410 if (mmc_gpio_alloc(host)) { 411 put_device(&host->class_dev); 412 return NULL; 413 } 414 415 spin_lock_init(&host->lock); 416 init_waitqueue_head(&host->wq); 417 INIT_DELAYED_WORK(&host->detect, mmc_rescan); 418 INIT_DELAYED_WORK(&host->sdio_irq_work, sdio_irq_work); 419 timer_setup(&host->retune_timer, mmc_retune_timer, 0); 420 421 /* 422 * By default, hosts do not support SGIO or large requests. 423 * They have to set these according to their abilities. 424 */ 425 host->max_segs = 1; 426 host->max_seg_size = PAGE_SIZE; 427 428 host->max_req_size = PAGE_SIZE; 429 host->max_blk_size = 512; 430 host->max_blk_count = PAGE_SIZE / 512; 431 432 host->fixed_drv_type = -EINVAL; 433 host->ios.power_delay_ms = 10; 434 435 return host; 436 } 437 438 EXPORT_SYMBOL(mmc_alloc_host); 439 440 /** 441 * mmc_add_host - initialise host hardware 442 * @host: mmc host 443 * 444 * Register the host with the driver model. The host must be 445 * prepared to start servicing requests before this function 446 * completes. 447 */ 448 int mmc_add_host(struct mmc_host *host) 449 { 450 int err; 451 452 WARN_ON((host->caps & MMC_CAP_SDIO_IRQ) && 453 !host->ops->enable_sdio_irq); 454 455 err = device_add(&host->class_dev); 456 if (err) 457 return err; 458 459 led_trigger_register_simple(dev_name(&host->class_dev), &host->led); 460 461 #ifdef CONFIG_DEBUG_FS 462 mmc_add_host_debugfs(host); 463 #endif 464 465 mmc_start_host(host); 466 mmc_register_pm_notifier(host); 467 468 return 0; 469 } 470 471 EXPORT_SYMBOL(mmc_add_host); 472 473 /** 474 * mmc_remove_host - remove host hardware 475 * @host: mmc host 476 * 477 * Unregister and remove all cards associated with this host, 478 * and power down the MMC bus. No new requests will be issued 479 * after this function has returned. 480 */ 481 void mmc_remove_host(struct mmc_host *host) 482 { 483 mmc_unregister_pm_notifier(host); 484 mmc_stop_host(host); 485 486 #ifdef CONFIG_DEBUG_FS 487 mmc_remove_host_debugfs(host); 488 #endif 489 490 device_del(&host->class_dev); 491 492 led_trigger_unregister_simple(host->led); 493 } 494 495 EXPORT_SYMBOL(mmc_remove_host); 496 497 /** 498 * mmc_free_host - free the host structure 499 * @host: mmc host 500 * 501 * Free the host once all references to it have been dropped. 502 */ 503 void mmc_free_host(struct mmc_host *host) 504 { 505 mmc_pwrseq_free(host); 506 put_device(&host->class_dev); 507 } 508 509 EXPORT_SYMBOL(mmc_free_host); 510