[PATCH 10/10] mci: sdhci: rockchip: support HS400 Enhanced Strobe

Ahmad Fatoum a.fatoum at pengutronix.de
Mon May 18 03:10:39 PDT 2026


Hello Sascha,

On 5/11/26 2:08 PM, Sascha Hauer wrote:
> Implement the hs400_enhanced_strobe op so the dwcmshc controller
> samples on the eMMC strobe instead of the source clock when in
> HS400ES. The bit lives at EMMC_CONTROL[8] (DWCMSHC_ENHANCED_STROBE)
> in the same vendor area register that already holds CARD_IS_EMMC.
> 
> Assisted-by: Claude Opus 4.7 <noreply at anthropic.com>
> Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
> ---
>  drivers/mci/rockchip-dwcmshc-sdhci.c | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
> 
> diff --git a/drivers/mci/rockchip-dwcmshc-sdhci.c b/drivers/mci/rockchip-dwcmshc-sdhci.c
> index 3aa3f12930..89bc4781b4 100644
> --- a/drivers/mci/rockchip-dwcmshc-sdhci.c
> +++ b/drivers/mci/rockchip-dwcmshc-sdhci.c
> @@ -19,6 +19,7 @@
>  #define DWCMSHC_HOST_CTRL3		0x508
>  #define DWCMSHC_EMMC_CONTROL		0x52c
>  #define  DWCMSHC_CARD_IS_EMMC		BIT(0)
> +#define  DWCMSHC_ENHANCED_STROBE	BIT(8)
>  #define DWCMSHC_EMMC_ATCTRL		0x540
>  
>  /* Rockchip specific Registers */
> @@ -363,12 +364,24 @@ static int rk_sdhci_execute_tuning(struct mci_host *mci, u32 opcode)
>  	return sdhci_execute_tuning(&host->sdhci, opcode);
>  }
>  
> +static void rk_sdhci_hs400_enhanced_strobe(struct mci_host *mci,
> +					   struct mci_ios *ios)
> +{
> +	struct rk_sdhci_host *host = to_rk_sdhci_host(mci);
> +	u32 val;
> +
> +	val = sdhci_read32(&host->sdhci, DWCMSHC_EMMC_CONTROL);
> +	val |= DWCMSHC_ENHANCED_STROBE;
> +	sdhci_write32(&host->sdhci, DWCMSHC_EMMC_CONTROL, val);

Linux checks ios->enhanced strobe and disables/enables the strobe based
on that. I think that's useful for barebox as well, so the core has a
chance to implement fallback.

Cheers,
Ahmad

> +}
> +
>  static const struct mci_ops rk_sdhci_ops = {
>  	.send_cmd = rk_sdhci_send_cmd,
>  	.set_ios = rk_sdhci_set_ios,
>  	.init = rk_sdhci_init,
>  	.card_present = rk_sdhci_card_present,
>  	.execute_tuning = rk_sdhci_execute_tuning,
> +	.hs400_enhanced_strobe = rk_sdhci_hs400_enhanced_strobe,
>  };
>  
>  static int rk_sdhci_probe(struct device *dev)
> 

-- 
Pengutronix e.K.                  |                             |
Steuerwalder Str. 21              | http://www.pengutronix.de/  |
31137 Hildesheim, Germany         | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686  | Fax:   +49-5121-206917-5555 |




More information about the barebox mailing list