[PATCH v3 0/7] riscv: spacemit: enable SD card support with UHS modes for OrangePi RV2
From: Iker Pedrosa
Date: Mon Mar 16 2026 - 10:07:35 EST
This series enables complete SD card support for the Spacemit K1-based
OrangePi RV2 board, including UHS (Ultra High Speed) modes for
high-performance SD card operation.
Background
The Spacemit K1 SoC includes an SDHCI controller capable of supporting
SD cards up to UHS-I speeds (SDR104 at 208MHz). However, mainline
currently lacks basic SD controller configuration, SDHCI driver
enhancements for voltage switching and tuning, and power management
infrastructure.
Implementation
The series enables SD card support through coordinated layers:
- Hardware infrastructure (patches 1-2): Device tree bindings for voltage
switching hardware and essential clock infrastructure.
- SDHCI driver enhancements (patches 3-7): Regulator framework
integration, pinctrl state switching for voltage domains, AIB register
programming, and comprehensive SDR tuning support for reliable UHS
operation.
- SoC and board integration (patches 8-10): Complete K1 SoC controller
definitions, PMIC power infrastructure, and OrangePi RV2 board enablement
with full UHS support.
This transforms the OrangePi RV2 from having no SD card support to full
UHS-I capability, enabling high-performance storage up to 208MHz.
Signed-off-by: Iker Pedrosa <ikerpedrosam@xxxxxxxxx>
---
Changes in v3:
- Rebase on mmc.git/next to resolve conflicts with "mmc: sdhci-of-k1:
add reset support" patch.
- Squash tuning infrastructure and implementation patches (3 and 4)
together to form complete functionality and avoid unused function
warnings.
- Reduce code nesting: implemented an early return sanity check in
spacemit_sdhci_voltage_switch() to reduce indentation and improve
logic flow.
- Refactor pinctrl initialization: moved pinctrl resource acquisition
and state lookup into a dedicated helper function,
spacemit_sdhci_get_pins().
- Use generic regulator node names (buck4, aldo1) instead of
device-specific aliases (sd_vmmc, sd_vqmmc) to better reflect that
these PMIC outputs serve multiple devices.
- Remove dead code handling 3.3V voltage switching from
spacemit_sdhci_voltage_switch().
- Optimize tuning algorithm to use single-pass window detection instead
of storing results in array, reducing memory usage and complexity.
- Remove unnecessary card detect check in execute_tuning() - rely on MMC
core.
- Clarify commit message to mention both SD (UHS-I) and eMMC (HS200)
tuning support.
- Add SD card support for Banana Pi BPI-F3 board with UHS-I capabilities
following the same pattern as OrangePi RV2.
- Link to v2: https://lore.kernel.org/r/20260309-orangepi-sd-card-uhs-v2-0-5bb2b574df5d@xxxxxxxxx
Changes in v2:
- Removed custom AIB voltage switching code per maintainer feedback. The
existing pinctrl driver already handles AIB voltage switching
automatically via power-source property changes during UHS mode
transitions. This eliminates code duplication.
- Squashed regulator and pinctrl commits into single voltage switching
implementation.
- Moved voltage switching callback from dynamic probe assignment to
static sdhci_ops declaration. Removed redundant SDHCI core call since
the framework handles standard voltage switching automatically.
- Made clock override (SDHC_OVRRD_CLK_OEN | SDHC_FORCE_CLK_ON)
conditional for SD/SDIO cards only. This follows vendor driver pattern
of differentiating SD and eMMC card handling.
- Include no-mmc property for SD card.
- Link to v1: https://lore.kernel.org/r/20260302-orangepi-sd-card-uhs-v1-0-89c219973c0c@xxxxxxxxx
---
Iker Pedrosa (7):
mmc: sdhci-of-k1: enable essential clock infrastructure for SD operation
mmc: sdhci-of-k1: add regulator and pinctrl voltage switching support
mmc: sdhci-of-k1: add comprehensive SDR tuning support
riscv: dts: spacemit: k1: add SD card controller and pinctrl support
riscv: dts: spacemit: k1-orangepi-rv2: add PMIC and power infrastructure
riscv: dts: spacemit: k1-orangepi-rv2: add SD card support with UHS modes
riscv: dts: spacemit: k1-bananapi-f3: add SD card support with UHS modes
arch/riscv/boot/dts/spacemit/k1-bananapi-f3.dts | 23 ++-
arch/riscv/boot/dts/spacemit/k1-orangepi-rv2.dts | 67 +++++++
arch/riscv/boot/dts/spacemit/k1-pinctrl.dtsi | 40 ++++
arch/riscv/boot/dts/spacemit/k1.dtsi | 13 ++
drivers/mmc/host/sdhci-of-k1.c | 243 +++++++++++++++++++++++
5 files changed, 384 insertions(+), 2 deletions(-)
---
base-commit: f38f518dda1f1decc7a39556fe3231b0d1b84e1e
change-id: 20260226-orangepi-sd-card-uhs-0ecb05839b0c
Best regards,
--
Iker Pedrosa <ikerpedrosam@xxxxxxxxx>