at v5.8 509 lines 13 kB view raw
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 34static DEFINE_IDA(mmc_host_ida); 35 36static 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 43static struct class mmc_host_class = { 44 .name = "mmc_host", 45 .dev_release = mmc_host_classdev_release, 46}; 47 48int mmc_register_host_class(void) 49{ 50 return class_register(&mmc_host_class); 51} 52 53void mmc_unregister_host_class(void) 54{ 55 class_unregister(&mmc_host_class); 56} 57 58void 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 */ 70void 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} 78EXPORT_SYMBOL(mmc_retune_pause); 79 80void 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} 87EXPORT_SYMBOL(mmc_retune_unpause); 88 89void 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 98void mmc_retune_timer_stop(struct mmc_host *host) 99{ 100 del_timer_sync(&host->retune_timer); 101} 102EXPORT_SYMBOL(mmc_retune_timer_stop); 103 104void 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 111void 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} 118EXPORT_SYMBOL(mmc_retune_release); 119 120int 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); 151out: 152 host->doing_retune = 0; 153 154 return err; 155} 156 157static 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 */ 173int 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 329EXPORT_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 */ 340int 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} 373EXPORT_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 */ 382struct 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 438EXPORT_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 */ 448int 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 471EXPORT_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 */ 481void 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 495EXPORT_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 */ 503void mmc_free_host(struct mmc_host *host) 504{ 505 mmc_pwrseq_free(host); 506 put_device(&host->class_dev); 507} 508 509EXPORT_SYMBOL(mmc_free_host);