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@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





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

Reply via email to