[PATCH v2 06/17] mmc: rockchip_sdhci: Use set_clock and config_dll sdhci_ops

Kever Yang kever.yang at rock-chips.com
Thu Apr 20 12:00:50 CEST 2023


On 2023/4/19 00:46, Jonas Karlman wrote:
> Change to configure clock and DLL in set_clock and config_dll ops
> instead of in the set_ios_post ops.
>
> With this change the output clock is turned off while configuring DLL
> parameters, according to the design recommendations.
>
> Signed-off-by: Jonas Karlman <jonas at kwiboo.se>
Reviewed-by: Kever Yang <kever.yang at rock-chips.com>

Thanks,
- Kever

> ---
> v2:
> - No change
>
>   drivers/mmc/rockchip_sdhci.c | 28 +++++++++++++++-------------
>   1 file changed, 15 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/mmc/rockchip_sdhci.c b/drivers/mmc/rockchip_sdhci.c
> index bc9838ac7c45..fdf48f4066c9 100644
> --- a/drivers/mmc/rockchip_sdhci.c
> +++ b/drivers/mmc/rockchip_sdhci.c
> @@ -291,18 +291,24 @@ static int rk3399_sdhci_set_ios_post(struct sdhci_host *host)
>   	return 0;
>   }
>   
> -static int rk3568_sdhci_emmc_set_clock(struct sdhci_host *host, unsigned int clock)
> +static void rk3568_sdhci_set_clock(struct sdhci_host *host, u32 div)
>   {
>   	struct rockchip_sdhc *priv = container_of(host, struct rockchip_sdhc, host);
> +	struct mmc *mmc = host->mmc;
> +	ulong rate;
> +
> +	rate = clk_set_rate(&priv->emmc_clk, mmc->clock);
> +	if (IS_ERR_VALUE(rate))
> +		printf("%s: Set clock rate failed: %ld\n", __func__, (long)rate);
> +}
> +
> +static int rk3568_sdhci_config_dll(struct sdhci_host *host, u32 clock, bool enable)
> +{
>   	int val, ret;
>   	u32 extra;
>   
> -	if (clock > host->max_clk)
> -		clock = host->max_clk;
> -	if (clock)
> -		clk_set_rate(&priv->emmc_clk, clock);
> -
> -	sdhci_set_clock(host->mmc, clock);
> +	if (!enable)
> +		return 0;
>   
>   	if (clock >= 100 * MHz) {
>   		/* reset DLL */
> @@ -386,14 +392,8 @@ static int rk3568_sdhci_set_enhanced_strobe(struct sdhci_host *host)
>   static int rk3568_sdhci_set_ios_post(struct sdhci_host *host)
>   {
>   	struct mmc *mmc = host->mmc;
> -	uint clock = mmc->tran_speed;
>   	u32 reg, vendor_reg;
>   
> -	if (!clock)
> -		clock = mmc->clock;
> -
> -	rk3568_sdhci_emmc_set_clock(host, clock);
> -
>   	if (mmc->selected_mode == MMC_HS_400 || mmc->selected_mode == MMC_HS_400_ES) {
>   		reg = sdhci_readw(host, SDHCI_HOST_CONTROL2);
>   		reg &= ~SDHCI_CTRL_UHS_MASK;
> @@ -614,6 +614,8 @@ static const struct sdhci_data rk3399_data = {
>   static const struct sdhci_data rk3568_data = {
>   	.get_phy = rk3568_emmc_get_phy,
>   	.set_ios_post = rk3568_sdhci_set_ios_post,
> +	.set_clock = rk3568_sdhci_set_clock,
> +	.config_dll = rk3568_sdhci_config_dll,
>   	.set_enhanced_strobe = rk3568_sdhci_set_enhanced_strobe,
>   };
>   


More information about the U-Boot mailing list