[PATCH v2 2/2] mmc: Add quirk to disable PWREN for dw_mmc

Jonas Karlman jonas at kwiboo.se
Mon Jul 10 18:51:47 CEST 2023


Hi David,

On 2023-07-10 15:08, David Hewitt wrote:
> This is required for correct booting of the PINE64 PineTab2. If
> PWREN is pulled high on this device, the SD card cannot be detected.

This quirk is not needed when SPL properly perform pinconfig to let the
fixed regulator control this gpio pin.

Please see my rk3568-2023.07 branch for a working example at
https://github.com/Kwiboo/u-boot-rockchip/commits/rk3568-2023.07

Regards,
Jonas

> 
> This is required in other PINE64 devices (e.g. Quartz64 Model A) too.
> 
> See commit ba33172a36f298641f51a5e6b855c3e89e3f5d3e in
> https://github.com/CounterPillow/u-boot-quartz64
> 
> Signed-off-by: David Hewitt <davidmhewitt at gmail.com>
> Cc: Simon Glass <sjg at chromium.org>
> Cc: Philipp Tomsich <philipp.tomsich at vrull.eu>
> Cc: Kever Yang <kever.yang at rock-chips.com>
> Cc: Peng Fan <peng.fan at nxp.com>
> Cc: Jaehoon Chung <jh80.chung at samsung.com>
> ---
> Changes for v2:
> - Removed an unrelated change
> 
>  drivers/mmc/dw_mmc.c          | 3 ++-
>  drivers/mmc/rockchip_dw_mmc.c | 3 +++
>  include/dwmmc.h               | 1 +
>  3 files changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/mmc/dw_mmc.c b/drivers/mmc/dw_mmc.c
> index 5085a3b491..cb1d99132f 100644
> --- a/drivers/mmc/dw_mmc.c
> +++ b/drivers/mmc/dw_mmc.c
> @@ -530,7 +530,8 @@ static int dwmci_init(struct mmc *mmc)
>  	if (host->board_init)
>  		host->board_init(host);
>  
> -	dwmci_writel(host, DWMCI_PWREN, 1);
> +	if (!(host->quirks & DWMCI_QUIRK_DISABLE_PWREN))
> +		dwmci_writel(host, DWMCI_PWREN, 1);
>  
>  	if (!dwmci_wait_reset(host, DWMCI_RESET_ALL)) {
>  		debug("%s[%d] Fail-reset!!\n", __func__, __LINE__);
> diff --git a/drivers/mmc/rockchip_dw_mmc.c b/drivers/mmc/rockchip_dw_mmc.c
> index 72c820ee63..af6ac59a46 100644
> --- a/drivers/mmc/rockchip_dw_mmc.c
> +++ b/drivers/mmc/rockchip_dw_mmc.c
> @@ -78,6 +78,9 @@ static int rockchip_dwmmc_of_to_plat(struct udevice *dev)
>  	else
>  		host->dev_index = 1;
>  
> +	if (dev_read_bool(dev, "rockchip,disable-pwren-quirk"))
> +		host->quirks |= DWMCI_QUIRK_DISABLE_PWREN;
> +
>  	priv->fifo_depth = dev_read_u32_default(dev, "fifo-depth", 0);
>  
>  	if (priv->fifo_depth < 0)
> diff --git a/include/dwmmc.h b/include/dwmmc.h
> index 136a95b8cd..98aebb46f1 100644
> --- a/include/dwmmc.h
> +++ b/include/dwmmc.h
> @@ -141,6 +141,7 @@
>  
>  /* quirks */
>  #define DWMCI_QUIRK_DISABLE_SMU		(1 << 0)
> +#define DWMCI_QUIRK_DISABLE_PWREN	(1 << 1)
>  
>  /**
>   * struct dwmci_host - Information about a designware MMC host



More information about the U-Boot mailing list