Ensure SD card pins receive clock signals by enabling pad clock
generation and overriding automatic clock gating. Required for all SD
operation modes.
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)
--
2.53.0
On 09/03/2026 13:40, Iker Pedrosa wrote: > 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 > > 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) >
El vie, 13 mar 2026 a las 14:04, Adrian Hunter (<adrian.hunter@intel.com>) escribió: > > On 09/03/2026 13:40, Iker Pedrosa wrote: > > 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 > > > > > 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) > > >
On 16/03/2026 11:04, Iker Pedrosa wrote: > El vie, 13 mar 2026 a las 14:04, Adrian Hunter > (<adrian.hunter@intel.com>) escribió: >> >> On 09/03/2026 13:40, Iker Pedrosa wrote: >>> 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 > "I copied it from somewhere else" is not the best explanation, but better than nothing I guess. However I meant add the explanation to the commit message.
© 2016 - 2026 Red Hat, Inc.