Summary ======= These patches[1] support UHS-II and fix GL9755 UHS-II compatibility. About UHS-II, roughly deal with the following three parts: 1) A UHS-II detection and initialization: - Host setup to support UHS-II (Section 3.13.1 Host Controller Setup Sequence [2]). - Detect a UHS-II I/F (Section 3.13.2 Card Interface Detection Sequence[2]). - In step(9) of Section 3.13.2 in [2], UHS-II initialization is include Section 3.13.3 UHS-II Card Initialization and Section 3.13.4 UHS-II Setting Register Setup Sequence. 2) Send Legacy SD command through SD-TRAN - Encapsulated SD packets are defined in SD-TRAN in order to ensure Legacy SD compatibility and preserve Legacy SD infrastructures (Section 7.1.1 Packet Types and Format Overview[3]). - Host issue a UHS-II CCMD packet or a UHS-II DCMD (Section 3.13.5 UHS-II CCMD Packet issuing and Section 3.13.6 UHS-II DCMD Packet issuing[2]). 3) UHS-II Interrupt - Except for UHS-II error interrupts, most interrupts share the original interrupt registers. Patch structure =============== patch#1-#7: for core patch#8-#17: for sdhci patch#18-#21: for GL9755 Tests ===== Ran 'dd' command to evaluate the performance: (SanDisk UHS-II card on GL9755 controller) Read Write UHS-II disabled (UHS-I): 88.3MB/s 60.7MB/s UHS-II enabled : 206MB/s 80MB/s TODO ==== - replace some define with BIT macro Reference ========= [1] https://gitlab.com/ben.chuang/linux-uhs2-gl9755.git [2] SD Host Controller Simplified Specification 4.20 [3] UHS-II Simplified Addendum 1.02 Changes in v3 (Jul. 10, 2020) * rebased to v5.8-rc4 * add copyright notice * reorganize the patch set and split some commits into smaller ones * separate uhs-2 headers from others * correct wrong spellings * fix most of checkpatch warnings/errors * remove all k[cz]alloc() from the code * guard sdhci-uhs2 specific code with 'if (IS_ENABLED(CONFIG_MMC_SDHCI_UHS2))' * make sdhci-uhs2.c as a module * trivial changes, including - rename back sdhci-core.c to sdhci.c - allow vendor code to disable uhs2 if v4_mode == 0 in __sdhci_add_host() - merge uhs2_power_up() into mmc_power_up() - remove flag_uhs2 from mmc_attach_sd() - add function descriptions to EXPORT'ed functions - other minor code optimization Changes in v2 (Jan. 9, 2020) * rebased to v5.5-rc5 AKASHI Takahiro (15): mmc: core: UHS-II support, modify power-up sequence mmc: core: UHS-II support, skip set_chip_select() mmc: core: UHS-II support, skip TMODE setup in some cases mmc: core: UHS-II support, generate UHS-II SD command packet mmc: core: UHS-II support, set APP_CMD bit if necessary mmc: sdhci: add a kernel configuration for enabling UHS-II support mmc: sdhci: add UHS-II related definitions in headers mmc: sdhci: UHS-II support, dump UHS-II registers mmc: sdhci: UHS-II support, export host operations to core mmc: sdhci: UHS-II support, skip signal_voltage_switch() mmc: sdhci: UHS-II support, handle vdd2 in case of power-off mmc: sdhci: UHS-II support, modify set_power() to handle vdd2 mmc: sdhci: UHS-II support, export helper functions to a module mmc: sdhci: UHS-II support, implement operations as a module mmc: core: add post-mmc_attach_sd hook Ben Chuang (6): mmc: add UHS-II related definitions in public headers mmc: core: UHS-II support, try to select UHS-II interface mmc: sdhci: UHS-II support, add hooks for additional operations mmc: sdhci-uhs2: add pre-detect_init hook mmc: sdhci-uhs2: add post-mmc_attach_sd hook mmc: sdhci-pci-gli: enable UHS-II mode for GL9755 drivers/mmc/core/Makefile | 2 +- drivers/mmc/core/block.c | 7 +- drivers/mmc/core/bus.c | 5 +- drivers/mmc/core/core.c | 119 +++- drivers/mmc/core/regulator.c | 14 + drivers/mmc/core/sd.c | 32 ++ drivers/mmc/core/sd_ops.c | 12 + drivers/mmc/core/uhs2.c | 874 ++++++++++++++++++++++++++++++ drivers/mmc/core/uhs2.h | 21 + drivers/mmc/host/Kconfig | 10 + drivers/mmc/host/Makefile | 1 + drivers/mmc/host/sdhci-omap.c | 2 +- drivers/mmc/host/sdhci-pci-core.c | 4 +- drivers/mmc/host/sdhci-pci-gli.c | 361 +++++++++++- drivers/mmc/host/sdhci-pxav3.c | 4 +- drivers/mmc/host/sdhci-uhs2.c | 797 +++++++++++++++++++++++++++ drivers/mmc/host/sdhci-uhs2.h | 215 ++++++++ drivers/mmc/host/sdhci-xenon.c | 4 +- drivers/mmc/host/sdhci.c | 321 +++++++++-- drivers/mmc/host/sdhci.h | 113 +++- include/linux/mmc/card.h | 1 + include/linux/mmc/core.h | 6 + include/linux/mmc/host.h | 31 ++ include/linux/mmc/uhs2.h | 268 +++++++++ 24 files changed, 3151 insertions(+), 73 deletions(-) create mode 100644 drivers/mmc/core/uhs2.c create mode 100644 drivers/mmc/core/uhs2.h create mode 100644 drivers/mmc/host/sdhci-uhs2.c create mode 100644 drivers/mmc/host/sdhci-uhs2.h create mode 100644 include/linux/mmc/uhs2.h -- 2.27.0