Pull MMC updates from Ulf Hansson: "MMC core: - Add support for host software queue for (e)MMC/SD - Throttle polling rate for CMD6 - Update CMD13 busy condition check for CMD6 commands - Improve busy detect polling for erase/trim/discard/HPI - Fixup support for HW busy detection for HPI commands - Re-work and improve support for eMMC sanitize commands MMC host: - mmci: * Add support for sdmmc variant revision 2.0 - mmci_sdmmc: * Improve support for busyend detection * Fixup support for signal voltage switch * Add support for tuning with delay block - mtk-sd: * Fix another SDIO irq issue - sdhci: * Disable native card detect when GPIO based type exist - sdhci: * Add option to defer request completion - sdhci_am654: * Add support to set a tap value per speed mode - sdhci-esdhc-imx: * Add support for i.MX8MM based variant * Fixup support for standard tuning on i.MX8 usdhc * Optimize for strobe/clock dll settings * Fixup support for system and runtime suspend/resume - sdhci-iproc: * Update regulator/bus-voltage management for bcm2711 - sdhci-msm: * Prevent clock gating with PWRSAVE_DLL on broken variants * Fix management of CQE during SDHCI reset - sdhci-of-arasan: * Add support for auto tuning on ZynqMP based platforms - sdhci-omap: * Add support for system suspend/resume - sdhci-sprd: * Add support for HW busy detection * Enable support host software queue - sdhci-tegra: * Add support for HW busy detection - tmio/renesas_sdhi: * Enforce retune after runtime suspend - renesas_sdhi: * Use manual tap correction for HS400 on some variants * Add support for manual correction of tap values for tunings" * tag 'mmc-v5.7' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc: (86 commits) mmc: cavium-octeon: remove nonsense variable coercion mmc: mediatek: fix SDIO irq issue mmc: mmci_sdmmc: Fix clear busyd0end irq flag dt-bindings: mmc: Fix node name in an example mmc: core: Re-work the code for eMMC sanitize mmc: sdhci: use FIELD_GET for preset value bit masks mmc: sdhci-of-at91: Display clock changes for debug purpose only mmc: sdhci: iproc: Add custom set_power() callback for bcm2711 mmc: sdhci: am654: Use sdhci_set_power_and_voltage() mmc: sdhci: at91: Use sdhci_set_power_and_voltage() mmc: sdhci: milbeaut: Use sdhci_set_power_and_voltage() mmc: sdhci: arasan: Use sdhci_set_power_and_voltage() mmc: sdhci: Introduce sdhci_set_power_and_bus_voltage() mmc: vub300: Use scnprintf() for avoiding potential buffer overflow dt-bindings: mmc: synopsys-dw-mshc: fix clock-freq-min-max in example sdhci: tegra: Enable MMC_CAP_WAIT_WHILE_BUSY host capability sdhci: tegra: Implement Tegra specific set_timeout callback mmc: sdhci-omap: Add Support for Suspend/Resume mmc: renesas_sdhi: simplify execute_tuning mmc: renesas_sdhi: Use BITS_PER_LONG helper ...
Showing the changes to include/linux (6 of 56 files). Show all
Unified · Split
| @@ -100,7 +100,8 @@ enum pm_ret_status { · 99 unmodified lines | |||
| 100 | }; | 100 | }; |
| 101 | 101 | ||
| 102 | enum pm_ioctl_id { | 102 | enum pm_ioctl_id { |
| 103 | IOCTL_SET_SD_TAPDELAY = 7, | 103 | IOCTL_SD_DLL_RESET = 6, |
| 104 | IOCTL_SET_SD_TAPDELAY, | ||
| 104 | IOCTL_SET_PLL_FRAC_MODE, | 105 | IOCTL_SET_PLL_FRAC_MODE, |
| 105 | IOCTL_GET_PLL_FRAC_MODE, | 106 | IOCTL_GET_PLL_FRAC_MODE, |
| 106 | IOCTL_SET_PLL_FRAC_DATA, | 107 | IOCTL_SET_PLL_FRAC_DATA, |
| @@ -271,6 +272,12 @@ enum tap_delay_type { · 164 unmodified lines | |||
| 271 | PM_TAPDELAY_OUTPUT, | 272 | PM_TAPDELAY_OUTPUT, |
| 272 | }; | 273 | }; |
| 273 | 274 | ||
| 275 | enum dll_reset_type { | ||
| 276 | PM_DLL_RESET_ASSERT, | ||
| 277 | PM_DLL_RESET_RELEASE, | ||
| 278 | PM_DLL_RESET_PULSE, | ||
| 279 | }; | ||
| 280 | |||
| 274 | /** | 281 | /** |
| 275 | * struct zynqmp_pm_query_data - PM query data | 282 | * struct zynqmp_pm_query_data - PM query data |
| 276 | * @qid: query ID | 283 | * @qid: query ID |
| @@ -107,9 +107,6 @@ struct mmc_command { · 106 unmodified lines | |||
| 107 | */ | 107 | */ |
| 108 | 108 | ||
| 109 | unsigned int busy_timeout; /* busy detect timeout in ms */ | 109 | unsigned int busy_timeout; /* busy detect timeout in ms */ |
| 110 | /* Set this flag only for blocking sanitize request */ | ||
| 111 | bool sanitize_busy; | ||
| 112 | |||
| 113 | struct mmc_data *data; /* data segment associated with cmd */ | 110 | struct mmc_data *data; /* data segment associated with cmd */ |
| 114 | struct mmc_request *mrq; /* associated request */ | 111 | struct mmc_request *mrq; /* associated request */ |
| 115 | }; | 112 | }; |
| @@ -322,6 +322,8 @@ struct mmc_host { · 321 unmodified lines | |||
| 322 | #define MMC_CAP_3_3V_DDR (1 << 11) /* Host supports eMMC DDR 3.3V */ | 322 | #define MMC_CAP_3_3V_DDR (1 << 11) /* Host supports eMMC DDR 3.3V */ |
| 323 | #define MMC_CAP_1_8V_DDR (1 << 12) /* Host supports eMMC DDR 1.8V */ | 323 | #define MMC_CAP_1_8V_DDR (1 << 12) /* Host supports eMMC DDR 1.8V */ |
| 324 | #define MMC_CAP_1_2V_DDR (1 << 13) /* Host supports eMMC DDR 1.2V */ | 324 | #define MMC_CAP_1_2V_DDR (1 << 13) /* Host supports eMMC DDR 1.2V */ |
| 325 | #define MMC_CAP_DDR (MMC_CAP_3_3V_DDR | MMC_CAP_1_8V_DDR | \ | ||
| 326 | MMC_CAP_1_2V_DDR) | ||
| 325 | #define MMC_CAP_POWER_OFF_CARD (1 << 14) /* Can power off after boot */ | 327 | #define MMC_CAP_POWER_OFF_CARD (1 << 14) /* Can power off after boot */ |
| 326 | #define MMC_CAP_BUS_WIDTH_TEST (1 << 15) /* CMD14/CMD19 bus width ok */ | 328 | #define MMC_CAP_BUS_WIDTH_TEST (1 << 15) /* CMD14/CMD19 bus width ok */ |
| 327 | #define MMC_CAP_UHS_SDR12 (1 << 16) /* Host supports UHS SDR12 mode */ | 329 | #define MMC_CAP_UHS_SDR12 (1 << 16) /* Host supports UHS SDR12 mode */ |
| @@ -463,7 +465,10 @@ struct mmc_host { · 135 unmodified lines | |||
| 463 | bool cqe_enabled; | 465 | bool cqe_enabled; |
| 464 | bool cqe_on; | 466 | bool cqe_on; |
| 465 | 467 | ||
| 466 | unsigned long private[0] ____cacheline_aligned; | 468 | /* Host Software Queue support */ |
| 469 | bool hsq_enabled; | ||
| 470 | |||
| 471 | unsigned long private[] ____cacheline_aligned; | ||
| 467 | }; | 472 | }; |
| 468 | 473 | ||
| 469 | struct device_node; | 474 | struct device_node; |
| @@ -161,6 +161,16 @@ static inline bool mmc_op_multi(u32 opcode) · 160 unmodified lines | |||
| 161 | #define R1_STATE_PRG 7 | 161 | #define R1_STATE_PRG 7 |
| 162 | #define R1_STATE_DIS 8 | 162 | #define R1_STATE_DIS 8 |
| 163 | 163 | ||
| 164 | static inline bool mmc_ready_for_data(u32 status) | ||
| 165 | { | ||
| 166 | /* | ||
| 167 | * Some cards mishandle the status bits, so make sure to check both the | ||
| 168 | * busy indication and the card state. | ||
| 169 | */ | ||
| 170 | return status & R1_READY_FOR_DATA && | ||
| 171 | R1_CURRENT_STATE(status) == R1_STATE_TRAN; | ||
| 172 | } | ||
| 173 | |||
| 164 | /* | 174 | /* |
| 165 | * MMC/SD in SPI mode reports R1 status always, and R2 for SEND_STATUS | 175 | * MMC/SD in SPI mode reports R1 status always, and R2 for SEND_STATUS |
| 166 | * R1 is the low order byte; R2 is the next highest byte, when present. | 176 | * R1 is the low order byte; R2 is the next highest byte, when present. |
| @@ -25,7 +25,7 @@ struct sdio_func_tuple { · 24 unmodified lines | |||
| 25 | struct sdio_func_tuple *next; | 25 | struct sdio_func_tuple *next; |
| 26 | unsigned char code; | 26 | unsigned char code; |
| 27 | unsigned char size; | 27 | unsigned char size; |
| 28 | unsigned char data[0]; | 28 | unsigned char data[]; |
| 29 | }; | 29 | }; |
| 30 | 30 | ||
| 31 | /* | 31 | /* |
| @@ -37,5 +37,6 @@ struct esdhc_platform_data { · 36 unmodified lines | |||
| 37 | unsigned int delay_line; | 37 | unsigned int delay_line; |
| 38 | unsigned int tuning_step; /* The delay cell steps in tuning procedure */ | 38 | unsigned int tuning_step; /* The delay cell steps in tuning procedure */ |
| 39 | unsigned int tuning_start_tap; /* The start delay cell point in tuning procedure */ | 39 | unsigned int tuning_start_tap; /* The start delay cell point in tuning procedure */ |
| 40 | unsigned int strobe_dll_delay_target; /* The delay cell for strobe pad (read clock) */ | ||
| 40 | }; | 41 | }; |
| 41 | #endif /* __ASM_ARCH_IMX_ESDHC_H */ | 42 | #endif /* __ASM_ARCH_IMX_ESDHC_H */ |