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

From: Arınç ÜNAL
Date: Wed Jul 31 2024 - 03:56:14 EST


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@xxxxxxxxxx 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@xxxxxxxxxxxxxx/

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ç