Re: [linux-sunxi] Re: [PATCH 3/3] arm64: allwinner: dts: a64: add DT for PineTab developer sample

From: Maxime Ripard
Date: Mon Nov 23 2020 - 06:15:36 EST


Hi!

On Fri, Nov 20, 2020 at 08:51:48PM -0600, Samuel Holland wrote:
> On 11/20/20 5:30 PM, Icenowy Zheng wrote:
> >>>>>>> +/ {
> >>>>>>> + model = "PineTab Developer Sample";
> >>>>>>> + compatible = "pine64,pinetab-dev", "allwinner,sun50i-a64";
> >>>>>>> +};
> >>>>>>
> >>>>>> Changing the DT and the compatible half-way through it isn't ok. Please
> >>>>>> add a new DT with the newer revision like we did for the pinephone
> >>>>>
> >>>>> We did this on Pine H64.
> >>>>
> >>>> What are you referring to? I couldn't find a commit where we did what
> >>>> you suggested in that patch to the pine H64.
> >>>
> >>> Oh the situation is complex. On Pine H64, we didn't specify anything at
> >>> start (which is the same here), the DT is originally version-neutral
> >>> but then transitioned to model B, then reverted to model A. Here the DT is always
> >>> for the sample.
> >>>
> >>> However, for Pine H64 there's model A/B names, but for PineTab there's no
> >>> any samples that are sold, thus except who got the samples, all PineTab
> >>> owners simply owns a "PineTab", not a "PineTab xxx version".
> >>
> >> It's fairly simple really, we can't really predict the future, so any DT
> >> submitted is for the current version of whatever board there is. This is
>
> I don't think that was the intention at all. The DT was submitted for a
> future product, whatever that future product ends up being at the time
> of its release. Since there are necessarily no users until the product
> ships, there is no chance of breaking users by modifying the DT.

There was no indication of that in the commit though

> >> what we (somewhat messily) did for the PineH64, for the pinephone, or
> >> really any other board that has several revisions
>
> Surely a non-public prototype doesn't count as a separate revision! This
> sort of policy strongly discourages ever shipping a board with
> out-of-the-box mainline Linux support. Because if there any hardware
> bugs fixed between initial upstreaming and production, the manufacture
> must come up with a new DT name.
>
> This is hostile to the users as well, because the "canonical" DT name no
> longer matches the "canonical" (read: the only one ever available)
> version of the hardware.
>
> Do you want manufacturers to submit their initial board DT as
> "$BOARD-prototype.dts", just in case they have to make a change before
> production? And only after the board is shipped (with out-of-tree
> patches, of course, to use $BOARD.dts, since the shipped board is *not*
> the prototype) submit a "$BOARD.dts" to mainline?
>
> Maxime, can you clarify specifically what the line is where a device
> tree is "locked down" and further changes to the hardware require a new
> name? First sample leaves the factory? $NUMBER units produced? First
> sold to the public for money?

The first board that is shipped to a user. From the wiki, the version
supported here (I guess?) has been shipped to around 100 people, so it
doesn't really qualify for the "non-public prototype". We still have to
support these users, whether we like it or not.

> Without some guidance, or a change in policy, this problem is going to
> keep coming up again and again.

There's a few things that are interleaved here. First, there's two hard
rules: never change the DT name and never change the compatible of a
board.

The former would break any build system, boot script or documentation,
and the latter would break the DT compatibility.

Aside from this, things get a bit blurrier since it's mostly about the
intent. I'm fine with having a DT for a non-public prototype if it's
clear from day one that it is. In this particular case, the DT just
stated that support for the pinetab was added. I guess anyone would make
the assumption without any context that this would be for the (or a)
final design.

Finally, I'd also advise against submitting the parts that are still not
finalized though, because this is also fairly bad for the users. Let's
take the current situation as the example: from what I understand, the
screen changed half-way through the process, and the first one was
upstreamed. This means that any user that would use a kernel with that
bugfix would have the display working, while rolling back to 5.9 would
break the display, even though everyone claimed it was supported
out-of-the-box in mainline. This is a worse situation than not
supporting the display in the first place here.

> You'll note that so far it has mostly affected Pine devices, and I don't
> think that's because they make more board revisions than other
> manufacturers.

Yes definitely. Pine devices may be worse though because of their policy
of making their prototypes public. I guess most of the issues we had
also were due to poor communication: context on what were the Pine
intentions were missing, and thus we couldn't catch things that turned
out to be bad later on during review.

> It's because they're actively involved in getting their
> boards supported upstream. For other manufacturers, it's some user
> sending in a device tree months after the hardware ships to the public
> -- of course the hardware is more stable at that point.

I mean, it's not black and white either. One could very well send the DT
once the final design is done and that would still be upstreamed way
before reaching the first user.

> I think Pine's behavior is something we want to encourage, not
> penalize.

For the DT in particular, yes

> > Okay. But I'm not satisfied with a non-public sample occupies
> > the pinetab name. Is rename it to pinetab-dev and add a
> > pinetab-retail okay?
>
> To me, naming the production version anything but "pinetab" isn't
> satisfying either.

I understand where you're coming from, but the point I was making my
previous mail is precisely that it's not really possible.

You want to name the early adopter version _the_ production version.
Let's assume the hardware changes again between the early adopter and
mass-production version. Which one will be _the_ production version? The
early-adopter or the mass-produced one?

There's really no good answer here, and both would suck in their own
way. The only way to deal with this is to simply avoid defining one
version as the one true board, and just loading the proper DT in u-boot
based on whatever clue we have of the hardware revision.

Maxime

Attachment: signature.asc
Description: PGP signature