[PATCH] arm64: dts: mt7622: fix switch probe on bananapi-r64

Arınç ÜNAL arinc.unal at arinc9.com
Wed Jul 31 00:55:38 PDT 2024


On 31/07/2024 08:29, Krzysztof Kozlowski wrote:
> On 30/07/2024 18:38, Arınç ÜNAL wrote:
>> On 30/07/2024 19:04, Krzysztof Kozlowski wrote:
>>> On 30/07/2024 13:22, arinc.unal at arinc9.com wrote:
>>>>>>>
>>>>>>> Reminder: try to not see a revert as a bad thing. It's just means
>>>>>>> "not
>>>>>>> ready yet, revert and we'll try again later" -- that's actually
>>>>>>> something Linus wrote just a few hours ago:
>>>>>>> https://lore.kernel.org/lkml/CAHk-=wgQMOscLeeA3QXOs97xOz_CTxdqJjpC20tJ-7bUdHWtSA@mail.gmail.com/
>>>>>>
>>>>>> Except it is ready and trying again is my responsibility, which means
>>>>>> unnecessary work for me to do. I've already got a ton of things to do.
>>>>>> Applying the device tree patch resolves this regression; no reverts
>>>>>> needed.
>>>>>> And then there's the patch in the works by Daniel that will address
>>>>>> all the
>>>>>> remaining cases outside of the reported regression.
>>>>>>
>>>>>
>>>>> The commit that fixes your breakage in a way that does *not* please me
>>>>> (because of older devicetrees being still broken with the new driver)
>>>>> was
>>>>> picked and it is in v6.11-rc1.
>>>>>
>>>>> I had to do this because I value the community (in this case, the
>>>>> users) much
>>>>> more than trying to make an arrogant developer to act in a
>>>>> community-friendly
>>>>> manner while leaving things completely broken.
>>>>>
>>>>> That said, remembering that we're humans and, as such, it's normal to
>>>>> get something
>>>>> wrong during the development process, I want to remind you that:
>>>>>
>>>>>    1. A series that creates regressions is *not* good and *not* ready to
>>>>> be
>>>>>       upstreamed; and
>>>>>    2. As a maintainer, you have the responsibility of not breaking the
>>>>> kernel,
>>>>>       not breaking devices and not breaking currently working
>>>>> functionality; and
>>>>>    3. Devicetrees being wrong (but working) since day 0 is not an excuse
>>>>> to break
>>>>>       functionality; and
>>>>>    4. Blaming the one who introduced the devicetree (you're doing that,
>>>>> since you
>>>>>       are blaming the devicetree being wrong) isn't solving anything and
>>>>> will not
>>>>>       magically make your code acceptable or good; and
>>>>>    5. If you push a wrong commit, there's nothing to be ashamed of; and
>>>>>    6. If you make a mistake, you should recognize that and find a way to
>>>>>       make things right, that should be done for the community, not for
>>>>>       yourself; and
>>>>>    7. You shall respect the community: in this case, with your arrogant
>>>>> behavior
>>>>>       you did *not* respect the users.
>>>>>
>>>>> P.S.: The right way of making such change is to:
>>>>>         1. Avoid breaking currently working devices by making sure that
>>>>> their DT
>>>>>            still works with the new driver; and
>>>>>         2. If breakage is unavoidable, make it so one kernel version has
>>>>> a fix that
>>>>>            works with both old and new driver, and the next version
>>>>> introduces the
>>>>>            breakage. N.2 should ideally never happen, anyway.
>>>>>
>>>>> Let's wrap up this matter now - I don't want to spend any more word,
>>>>> nor time,
>>>>> on this, as I really have nothing else to say.
>>>>>
>>>>> Best regards,
>>>>> Angelo
>>>>
>>>> To be clear, I only became aware that my patch was picked by reading
>>>> this
>>>> email. It is clear that we have different views. To that extend, all of
>>>> what you have written above can be answered to by reading what I have
>>>> already written in this thread. Therefore, I don't see any wrongdoing
>>>> from
>>>> my side and invite everyone to fully read this thread to draw their own
>>>> conclusions; something you seem not to have done. And I'm not the one,
>>>> calling people names here. I can only offer my respect for hard working
>>>> people.
>>>>
>>>> In my view, your behaviour of not applying a devicetree patch before a
>>>> Linux driver patch was applied, and then not replying to any arguments
>>>> whatsoever, was keeping the devicetree files hostage until your demands
>>>
>>> Hm, why ever DTS patch should be applied before driver patch is? This
>>> clearly suggests ABI break. You proposed to fix ABI issue by fixing DTS,
>>> which is not the way, because it literally fixes nothing. You got
>>> comments - fix the driver to be backwards compatible.
>>
>> As I argued in this thread, I see no ABI issue here. I proposed to fix
>> broken devicetrees, nothing more. Please read the full thread to understand
>> where I'm coming from.
> 
> I read most of it and it does suggest ABI break. But even if you do not
> focus on that aspect, your suggestion that DTS should be applied before
> driver patch is just wrong. It was never like this and it must not be
> like this.
> 
> Best regards,
> Krzysztof

I will use the ABI, bindings, and dt-bindings terms synonymously here.

Let's discuss the Devicetree Specification Releasev0.4. In 2.1, it is
stated that DTSpec specifies a construct called a devicetree to describe
system hardware. A boot program loads a devicetree into a client program’s
memory and passes a pointer to the devicetree to the client.

A devicetree is a tree data structure with nodes that describe the devices
in a system. Each node has property/value pairs that describe the
characteristics of the device being represented. Each node has exactly one
parent except for the root node, which has no parent. A device in this
context may be an actual hardware device, such as a UART. It may be part of
a hardware device, such as the random-number generator in a TPM. It may
also be a device provided through virtualisation, such as a protocol
providing access to an I2C device attached to a remote CPU. A device may
include functions implemented by firmware running in higher privilege
levels or remote processors. There is no requirement that nodes in a device
tree be a physical hardware device, but generally they have some
correlation to physical hardware devices. Nodes should not be designed for
OS- or project- specific purposes. They should describe something which can
be implemented by any OS or project.

As read here, devicetree design is not to be influenced by any project.
That would mean that bindings and devicetree source files are described
first, then the implementation is made by any OS or project. To be specific
to the case here, it makes no sense to hold a patch that fixes a devicetree
source file until a Linux driver patch is taken in.

I think the dt-bindings and the DT source files being hosted on the Linux
repository greatly contributes to this false impression that Linux drivers
have any influence over the design of bindings or fixing DT source files
that did not comply with the bindings. That is why I'm looking forward to
the efforts to take dt-bindings and DT source files out of the Linux
repository into its own, separate repository. This would be a great step in
addressing all the project-dependent bindings of Linux, U-Boot, OpenWrt,
and all other projects, to have a single, unified repository to describe
all the hardware that exists in the world.

One of the concepts of the devicetree architecture is that a boot program
can describe and communicate system hardware information to a client
program, thus eliminating the need for the client program to have
hard-coded descriptions of system hardware. Not only eliminate the need of
that, but allow hardware with a different value for the description than
what was hard-coded.

A driver change cannot possibly break ABI because it's the implementation
being changed, not the bindings. The implementation change can be so that
it breaks compliance with the bindings. Which is not the case with the
change made in the Linux driver in question. I have eliminated the
hard-coded description from the Linux driver. That did not break compliance
with the bindings. Instead, the implementation change made the driver
compliant with the bindings; specifically, the description where the reg
value represents the PHY address of the switch.

It is important to note that old devicetrees that abided to the bindings
still work after the Linux driver change. This is also, of course, the case
for any DT source files hosted out of the Linux repository.

Therefore, the correct path forward was to correct the DT source files that
include values for descriptions that do not reflect the hardware it
describes. Which is eventually what happened here. To be more specific, we
fixed the incorrect description of the switch's PHY address on the DT
source file as, on the hardware, the switch listens on PHY address 0x1f.

Arınç



More information about the Linux-mediatek mailing list