On 1/2/19 12:37 AM, Lukasz Majewski wrote:
> With the current code, it is not possible to assign different than default
> numbers for mmc controllers.
> 
> Several in-tree boards depend on the pre-dm setup, corresponding to
> following aliases:
> 
> mmc0 = &usdhc2; --> fsl,usdhc-index = <1>
> mmc1 = &usdhc4; --> fsl,usdhc-index = <3>
> 
> Without this patch we are either forced to use default aliasing - like:
> 
> mmc0 = &usdhc1;
> mmc1 = &usdhc2;
> mmc2 = &usdhc3;
> mmc3 = &usdhc4;
> 
> to have the proper clocks setup for the controller. However, such setup
> is not acceptable for some legacy scripts / code.
> 
> With this patch - by introducing 'fsl,usdhc-index' - one can configure
> (get) clock rate corresponding to used controller.
> 
> Moreover, as this code is used in the SPL before relocation (and to save
> space we strip the SPL DTS from clocks and its names) adding separate
> properties seems to be the best approach here. One also avoids adding
> clocks DM code to SPL.
> 
> Signed-off-by: Lukasz Majewski <lu...@denx.de>
> ---
> 
>  drivers/mmc/fsl_esdhc.c | 17 ++++++++++++++++-
>  1 file changed, 16 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c
> index 3cdfa7f5a6..49a6834a98 100644
> --- a/drivers/mmc/fsl_esdhc.c
> +++ b/drivers/mmc/fsl_esdhc.c
> @@ -1401,6 +1401,7 @@ static int fsl_esdhc_probe(struct udevice *dev)
>       fdt_addr_t addr;
>       unsigned int val;
>       struct mmc *mmc;
> +     int usdhc_idx;
>       int ret;
>  
>       addr = dev_read_addr(dev);
> @@ -1513,7 +1514,21 @@ static int fsl_esdhc_probe(struct udevice *dev)
>  
>               priv->sdhc_clk = clk_get_rate(&priv->per_clk);
>       } else {
> -             priv->sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK + dev->seq);
> +             /*
> +              * Check for 'fsl,index' DTS property - as one may want to have
> +              * following mmc setup:

NAK, DT is a hardware description. This is encoding a policy, which
should not be in DT.

This looks like some reimplementation of SEQ_ALIAS stuff.

> +              * mmc0 = &usdhc2; --> fsl,index = <1>
> +              * mmc1 = &usdhc4; --> fsl,index = <3>
> +              *
> +              * So we do have dev->seq = {0, 1}, which in the below code
> +              * doesn't correspond to correct USDHC clocks.
> +              *
> +              * For that reason a new "fsl,index" property has been
> +              * introduced.
> +              */
> +             usdhc_idx = dev_read_u32_default(dev, "fsl,usdhc-index",
> +                                              dev->seq);
> +             priv->sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK + usdhc_idx);
>               if (priv->sdhc_clk <= 0) {
>                       dev_err(dev, "Unable to get clk for %s\n", dev->name);
>                       return -EINVAL;
> 


-- 
Best regards,
Marek Vasut
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to