[U-Boot] U-Boot of-platdata issue
Kever Yang
kever.yang at rock-chips.com
Tue Apr 25 02:29:38 UTC 2017
Hi Simon,
On 02/17/2017 04:43 AM, Simon Glass wrote:
[...]
>>>>>> 2. multi compatible name
>>>>>> When a dts node have more than one compatible name, which is prefer to
>>>>>> use?
>>>>>> for example, we have two dwmmc compatible name in rk3399, the tool is
>>>>>> using
>>>>>> the first one,
>>>>>> while the source code using the last one.
>>>>>>
>>>>>> "drivers/mmc/rockchip_dw_mmc.c"
>>>>>> 23 struct rockchip_mmc_plat {
>>>>>> 24 #if CONFIG_IS_ENABLED(OF_PLATDATA)
>>>>>> 25 struct dtd_rockchip_rk3288_dw_mshc dtplat;
>>>>>> 26 #endif
>>>>>> 27 struct mmc_config cfg;
>>>>>> 28 struct mmc mmc;
>>>>>> 29 };
>>>>>> ...
>>>>>> dts node
>>>>>> sdmmc: dwmmc at fe320000 {
>>>>>> compatible = "rockchip,rk3399-dw-mshc",
>>>>>> "rockchip,rk3288-dw-mshc";
>>>>> I'm not sure of the best solution here (other than putting more
>>>>> on-chip SRAM in your devices hint hint :-)
>>>>>
>>>>> One option is something like:
>>>>>
>>>>> struct rockchip_mmc_plat {
>>>>> #if CONFIG_IS_ENABLED(OF_PLATDATA)
>>>>> #ifdef CONFIG_ROCKCHIP_RK3288
>>>>> struct dtd_rockchip_rk3288_dw_mshc dtplat;
>>>>> #elif defined(CONFIG_ROCKCHIP_RK399)
>>>>> struct dtd_rockchip_rk399_dw_mshc dtplat;
>>>>> #endif
>>>>> #endif
>>>>>
>>>>> Obviously we don't want that as it is putting SoC-specific stuff in the
>>>>> driver.
>>>>>
>>>>> IMO the compatible strings are being misused a bit. Can there not be a
>>>>> compatible string which is common to all rockchip devices which use
>>>>> this IP? Something like "rockchip,dw-mshc-v1"? Then you can avoid
>>>>> adding a new compatible string every time you use the same IP in a
>>>>> device.
>>>> Agree, but... this is from kernel, we can't control it unless all kernel
>>>> maintainers
>>>> have the same idea.
>>> does it use just "rockchip,dw-mshc"? Maybe this can be common compatible
>>> for rockchip.
>>> If it needs add the other compatible in future, it should be added the
>>> specific compatible at that time.
>>>
>> I don't think we will have a change in dts compatible for U-Boot dts,
>> because we will always using dts
>> file from kernel, so we will use it as is.
>>
>> We can use "rockchip,rk3288-dw-mshc" for rk3288 and rk3399, here is the
>> document.
>> and for dw-mshc:
>> Documentation/devicetree/bindings/mmc/rockchip-dw-mshc.txt
>> * compatible: should be
>> - "rockchip,rk2928-dw-mshc": for Rockchip RK2928 and following,
>> before RK3288
>> - "rockchip,rk3288-dw-mshc": for Rockchip RK3288
>> - "rockchip,rk3399-dw-mshc", "rockchip,rk3288-dw-mshc": for Rockchip
>> RK3399
>>
>> For the compatible name, there had some discuss before, like this patch:
>> https://lists.gt.net/linux/kernel/2372182
>>
>> So for the of-platdata, we can use "rockchip,rk3288-dw-mshc" to generate the
>> structure.
> So in this case, as you saying that you need dtoc to #define the
> structs to be the same? Or can you do this yourself in a header file?
Maybe what I want to say is not clear enough.
Instead of using new compatible for dts match, we should using the very
first
compatible for of-platdata structure.
Like the document mentioned before:
"rockchip,rk3288-dw-mshc" for RK3288,
"rockchip,rk3399-dw-mshc", "rockchip,rk3288-dw-mshc"; for RK3399
"rockchip,rk3328-dw-mshc", "rockchip,rk3288-dw-mshc"; for RK3328
The "rockchip,rk3288-dw-mshc" is always there if we are using the same
controller,
we can use this "rockchip,rk3288-dw-mshc" to generate the of-platdata
structure,
then we can always use "struct dtd_rockchip_rk3288_dw_mshc dtplat;" in
mmc driver.
Could you help to send a patch for this? I'm really not good at python :(
Thanks,
- Kever
>
> [..]
>
> Regards,
> Simon
>
>
>
More information about the U-Boot
mailing list