[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