Thread (27 messages) 27 messages, 6 authors, 2026-03-16

Re: [PATCH v2 1/7] mmc: sdhci-of-k1: enable essential clock infrastructure for SD operation

From: Iker Pedrosa <ikerpedrosam@gmail.com>
Date: 2026-03-16 09:04:49
Also in: linux-mmc, linux-riscv, lkml, spacemit

El vie, 13 mar 2026 a las 14:04, Adrian Hunter
([off-list ref]) escribió:
On 09/03/2026 13:40, Iker Pedrosa wrote:
quoted
Ensure SD card pins receive clock signals by enabling pad clock
generation and overriding automatic clock gating. Required for all SD
operation modes.
Need to say why update to "SPACEMIT_SDHC_LEGACY_CTRL_REG" is Ok for
non-SD
After analyzing the reference driver implementation[1], the
SDHC_LEGACY_CTRL_REG setting is applied to both eMMC and SD
controllers.

The reference driver sets GEN_PAD_CLK_ON for any controller with
MMC_CAP2_NO_SDIO set (SDIO disabled). Since both our eMMC and SD
controllers have no-sdio; in their device tree configurations, both
should receive this setting.

[1] https://github.com/orangepi-xunlong/linux-orangepi/blob/orange-pi-6.6-ky/drivers/mmc/host/sdhci-of-x1.c#L482
quoted
Signed-off-by: Iker Pedrosa <ikerpedrosam@gmail.com>
---
 drivers/mmc/host/sdhci-of-k1.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)
diff --git a/drivers/mmc/host/sdhci-of-k1.c b/drivers/mmc/host/sdhci-of-k1.c
index 0cc97e23a2f9c7b2f9376318a8a7ebb860571504..585c7eca6ebf253aac466dd37cef029deb63f692 100644
--- a/drivers/mmc/host/sdhci-of-k1.c
+++ b/drivers/mmc/host/sdhci-of-k1.c
@@ -20,6 +20,13 @@
 #include "sdhci.h"
 #include "sdhci-pltfm.h"

+#define SPACEMIT_SDHC_OP_EXT_REG     0x108
+#define  SDHC_OVRRD_CLK_OEN          BIT(11)
+#define  SDHC_FORCE_CLK_ON           BIT(12)
+
+#define SPACEMIT_SDHC_LEGACY_CTRL_REG        0x10C
+#define  SDHC_GEN_PAD_CLK_ON         BIT(6)
+
 #define SPACEMIT_SDHC_MMC_CTRL_REG   0x114
 #define  SDHC_MISC_INT_EN            BIT(1)
 #define  SDHC_MISC_INT                       BIT(2)
@@ -100,6 +107,12 @@ static void spacemit_sdhci_reset(struct sdhci_host *host, u8 mask)

      if (!(host->mmc->caps2 & MMC_CAP2_NO_MMC))
              spacemit_sdhci_setbits(host, SDHC_MMC_CARD_MODE, SPACEMIT_SDHC_MMC_CTRL_REG);
+
+     spacemit_sdhci_setbits(host, SDHC_GEN_PAD_CLK_ON, SPACEMIT_SDHC_LEGACY_CTRL_REG);
+
+     if (host->mmc->caps2 & MMC_CAP2_NO_MMC)
+             spacemit_sdhci_setbits(host, SDHC_OVRRD_CLK_OEN | SDHC_FORCE_CLK_ON,
+                                    SPACEMIT_SDHC_OP_EXT_REG);
 }

 static void spacemit_sdhci_set_uhs_signaling(struct sdhci_host *host, unsigned int timing)
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help