On 06/05/2022 23:33, Doug Anderson wrote: > Hi, > > On Wed, May 4, 2022 at 12:04 AM Krzysztof Kozlowski > <krzysztof.kozlowski@xxxxxxxxxx> wrote: >> >>>>>> The most specific compatible identifies or, like recently Rob confirmed >>>>>> in case of Renesas, the list of compatibles: >>>>>> https://lore.kernel.org/linux-devicetree/Yk2%2F0Jf151gLuCGz@xxxxxxxxxxxxxxxxxx/ >>>>> >>>>> I'm confused. If the device tree contains the compatibles: >>>>> >>>>> "google,lazor-rev4", "google,lazor-rev3", "google,lazor", "qualcomm,sc7180" >>>>> >>>>> You want to know what board you're on and you look at the compatible, >>>>> right? You'll decide that you're on a "google,lazor-rev4" which is the >>>>> most specific compatible. ...but you could have booted a >>>>> "google,lazor-rev3". How do you know? >>>> >>>> Applying the wrong DTB on the wrong device will always give you the >>>> wrong answer. You can try too boot google,lazor-rev3 on x86 PC and it >>>> does not make it a google,lazor-rev3... >>> >>> I don't understand what you're saying here. If a device tree has the compatible: >>> >>> "google,lazor-rev4", "google,lazor-rev3", "google,lazor", "qualcomm,sc7180" >>> >>> You wouldn't expect to boot it on an x86 PC, but you would expect to >>> boot it on either a "google,lazor-rev4" _or_ a "google,lazor-rev3". >> >> Yes, but booting it does not mean that the hardware is rev3 or rev4. >> Booting it means only that we are running DTB on a compatible hardware. >> The DTB determines what is accessible to user-space, not what *really* >> the hardware is. The user-space (since we are going now to original >> question) reads it and can understand that it is running on hardware >> compatible with rev3 - either rev3 or rev4 - and act accordingly. >> >>> Correct? Now, after we've booted software wants to look at the >>> compatible of the device tree that was booted. The most specific entry >>> in that device tree is "google,lazor-rev4". ...but we could have >>> booted it on a "google,lazor-rev3". How can you know? >> >> No, providing and loading a rev4 DTB on a rev3 board is not correct and >> does not make any sense. rev3 boards are not compatible with rev4, it's >> the other way. Not every fruit is an apple, but every apple is a fruit. >> This is why I used that example - if you load rev4 DTB on rev3 hardware >> then you have totally wrong booting process. > > I think this is the crux of the difference in opinion and there's no > reasonable way I'm aware of to do what you're asking. If -rev3 and > -rev4 are identical from a software point of view it would be silly > not to share a device tree for the two of them. The number of device > trees we'd have to land in the kernel tree would be multiplied by > several times and we'd have many that are identical except for this > compatible string. I see no benefit here and lots of downside. Wait, we agreed that you don't consider them identical, didn't we? If they are identical, you do not need rev4 at all. So they are not identical... If they are identical, just use rev3 and problem is gone. If they are not identical or you need to assume there will be difference (for future), then just go with rev3 without fallback to rev3 and also problem is gone. Right now it's not possible to validate QCOM DTSes against DT bindings because they throw big fat warnings about undocumented top compatibles. This is a downside for us. Remember, you do not have to use Devicetree or Linux at all if it causes you some downsides... No one is forced. :) If you choose to use it, sorry, it comes with some requirements like being following Devicetree specification or the binding guidelines. Best regards, Krzysztof