I am aware of this kernel behaviour, but felt that it does not directly apply 
for
this specific change, as the original DTS (before the deprecation of this 
property)
had defined the minimum frequency for the affected chips as <400000>.

For reference, here’s the DTS change that this is tracking:
-               clock-freq-min-max = <400000 150000000>;
+               max-frequency = <150000000>;

During the init-op, the following code in dw_mmc.c ensures that we are always
enumerating at f_min (which is always 400kHz with this driver):
        /* Enumerate at 400KHz */
        dwmci_setup_bus(host, mmc->cfg->f_min);
So the UBoot MMC-core relies on the drivers to select a single frequency.

In other words: this commit does not change the current state of affairs, as
all affected devices (i.e. those that the rockchip-dw-mmc binds to) already
have the 400kHz f_min set.

If you feel that this it is worthwhile, we can also change mmc/mmc.c to not
just rely on the init-op, but explicitly set the frequency and then iterate over
the 400KHz … 100kHz array.
However, this would then affect all mmc-drivers, so I would rather keep this
as a separate change that allows everyone to test on their boards.

Best regards,
Philipp.


> On 27 Apr 2017, at 06:21, Jaehoon Chung <jh80.ch...@samsung.com> wrote:
> 
> On 04/25/2017 04:52 PM, Philipp Tomsich wrote:
>> The 'clock-freq-min-max' property was deprecated in the upstream
>> (i.e. Linux) DTS bindings in favor of the 'max-frequency' property.
> 
> It's difference wit Linux kernel. "clock-freq-min-max" was deprecated in 
> Linux.
> Linux kernel is supporting to find the best clock value in core.c.
> 
> There are defined the freqs[] = {400000, ...., 100000}
> then it should be looped to find the value from 400K to 100K.
> 
> As i know, u-boot doesn't support this..
> If you set to min value as 400K..doesn't check the other values..
> 
> Best Regards,
> Jaehoon Chung
> 
>> 
>> With the latest RK3399 DTSI does no longer include the deprecated
>> property and the rockchip_dw_mmc driver requiring it to be present,
>> the driver doesn't bind to the node in the RK3399 DTSI any longer
>> (thus breaking access to the SD card on the RK3399-Q7 board).
>> 
>> To fix this, we implement a similar logic as in the Linux driver: if
>> the deprecated property is present, we issue a warning (if DEBUG is
>> enabled); if it is missing, we require 'max-frequency' to be set and
>> use it to create a min/max value-pair.
>> 
>> See 
>> https://github.com/torvalds/linux/commit/b023030f10573de738bbe8df63d43acab64c9f7b
>> for the deprecation/matching change in Linux.
>> 
>> Signed-off-by: Philipp Tomsich <philipp.toms...@theobroma-systems.com>
>> ---
>> 
>> drivers/mmc/rockchip_dw_mmc.c | 20 ++++++++++++++++++--
>> 1 file changed, 18 insertions(+), 2 deletions(-)
>> 
>> diff --git a/drivers/mmc/rockchip_dw_mmc.c b/drivers/mmc/rockchip_dw_mmc.c
>> index c36eda0..432ae20 100644
>> --- a/drivers/mmc/rockchip_dw_mmc.c
>> +++ b/drivers/mmc/rockchip_dw_mmc.c
>> @@ -76,9 +76,25 @@ static int rockchip_dwmmc_ofdata_to_platdata(struct 
>> udevice *dev)
>>              return -EINVAL;
>>      priv->fifo_mode = fdtdec_get_bool(gd->fdt_blob, dev_of_offset(dev),
>>                                        "fifo-mode");
>> +
>> +    /*
>> +     * 'clock-freq-min-max' is deprecated
>> +     * (see 
>> https://github.com/torvalds/linux/commit/b023030f10573de738bbe8df63d43acab64c9f7b)
>> +     */
>>      if (fdtdec_get_int_array(gd->fdt_blob, dev_of_offset(dev),
>> -                             "clock-freq-min-max", priv->minmax, 2))
>> -            return -EINVAL;
>> +                             "clock-freq-min-max", priv->minmax, 2)) {
>> +            int val = fdtdec_get_int(gd->fdt_blob, dev_of_offset(dev),
>> +                                      "max-frequency", -EINVAL);
>> +
>> +            if (val < 0)
>> +                    return val;
>> +
>> +            priv->minmax[0] = 400000;  /* 400 kHz */
>> +            priv->minmax[1] = val;
>> +    } else {
>> +            debug("%s: 'clock-freq-min-max' property was deprecated.\n",
>> +                  __func__);
>> +    }
>> #endif
>>      return 0;
>> }
>> 
> 

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to