devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Simon Glass <sjg@chromium.org>
Cc: "Rob Herring" <robh@kernel.org>,
	devicetree@vger.kernel.org,
	"U-Boot Mailing List" <u-boot@lists.denx.de>,
	linux-mtd@lists.infradead.org, "Tom Rini" <trini@konsulko.com>,
	"Conor Dooley" <conor+dt@kernel.org>,
	"Dhruva Gole" <d-gole@ti.com>,
	"Krzysztof Kozlowski" <krzysztof.kozlowski+dt@linaro.org>,
	"Rafał Miłecki" <rafal@milecki.pl>,
	"Richard Weinberger" <richard@nod.at>,
	"Vignesh Raghavendra" <vigneshr@ti.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] dt-bindings: mtd: Add a schema for binman
Date: Mon, 25 Sep 2023 16:47:36 +0200	[thread overview]
Message-ID: <20230925164736.5efbf4c0@xps-13> (raw)
In-Reply-To: <CAPnjgZ0Z5J_33HuQF-5XgDFmZim0nHHzvZJOOZobWw_cOJd=9g@mail.gmail.com>

Hi Simon,

sjg@chromium.org wrote on Mon, 25 Sep 2023 06:33:14 -0600:

> Hi Miquel,
> 
> On Mon, 25 Sept 2023 at 01:21, Miquel Raynal <miquel.raynal@bootlin.com> wrote:
> >
> > Hi Simon,
> >
> > sjg@chromium.org wrote on Fri, 22 Sep 2023 13:51:14 -0600:
> >  
> > > Hi Rob,
> > >
> > > On Fri, 22 Sept 2023 at 13:43, Rob Herring <robh@kernel.org> wrote:  
> > > >
> > > > On Fri, Sep 22, 2023 at 1:12 PM Simon Glass <sjg@chromium.org> wrote:  
> > > > >
> > > > > Hi Rob,
> > > > >
> > > > > On Fri, 22 Sept 2023 at 11:46, Rob Herring <robh@kernel.org> wrote:  
> > > > > >
> > > > > > On Fri, Sep 22, 2023 at 11:01:18AM -0600, Simon Glass wrote:  
> > > > > > > Hi Rob,
> > > > > > >
> > > > > > > On Fri, 22 Sept 2023 at 10:00, Rob Herring <robh@kernel.org> wrote:  
> > > > > > > >
> > > > > > > > On Thu, Sep 21, 2023 at 1:45 PM Simon Glass <sjg@chromium.org> wrote:  
> > > > > > > > >
> > > > > > > > > Binman[1] is a tool for creating firmware images. It allows you to
> > > > > > > > > combine various binaries and place them in an output file.
> > > > > > > > >
> > > > > > > > > Binman uses a DT schema to describe an image, in enough detail that
> > > > > > > > > it can be automatically built from component parts, disassembled,
> > > > > > > > > replaced, listed, etc.
> > > > > > > > >
> > > > > > > > > Images are typically stored in flash, which is why this binding is
> > > > > > > > > targeted at mtd. Previous discussion is at [2] [3].
> > > > > > > > >
> > > > > > > > > [1] https://u-boot.readthedocs.io/en/stable/develop/package/binman.html
> > > > > > > > > [2] https://lore.kernel.org/u-boot/20230821180220.2724080-3-sjg@chromium.org/
> > > > > > > > > [3] https://www.spinics.net/lists/devicetree/msg626149.html  
> > > > > > > >
> > > > > > > > You missed:
> > > > > > > >
> > > > > > > > https://github.com/devicetree-org/dt-schema/pull/110
> > > > > > > >
> > > > > > > > where I said: We certainly shouldn't duplicate the existing partitions
> > > > > > > > bindings. What's missing from them (I assume we're mostly talking
> > > > > > > > about "fixed-partitions" which has been around forever I think (before
> > > > > > > > me))?
> > > > > > > >
> > > > > > > > To repeat, unless there is some reason binman partitions conflict with
> > > > > > > > fixed-partitions, you need to start there and extend it. From what's
> > > > > > > > posted here, it neither conflicts nor needs extending.  
> > > > > > >
> > > > > > > I think at this point I am just hopelessly confused. Have you taken a
> > > > > > > look at the binman schema? [1]  
> > > > > >
> > > > > > Why do I need to? That's used for some tool and has nothing to do with a
> > > > > > device's DTB. However, I thought somewhere in this discussion you showed
> > > > > > it under a flash device node.  
> > > > >
> > > > > Yes, that is the intent (under a flash node).
> > > > >  
> > > > > > Then I care because then it overlaps with
> > > > > > what we already have for partitions. If I misunderstood that, then just
> > > > > > put your schema with your tool. Only users of the tool should care about
> > > > > > the tool's schema.  
> > > > >
> > > > > OK. I believe that binman will fit into both camps, since its input is
> > > > > not necessarily fully formed. E.g. if you don't specify the offset of
> > > > > an entry, then it will be packed automatically. But the output is
> > > > > fully formed, in that Binman now knows the offset so can write it to
> > > > > the DT.  
> > > >
> > > > I suppose it could take its own format as input and then write out
> > > > something different for the "on the device" format (i.e.
> > > > fixed-partitions). At least for the dynamic offsets, we may need
> > > > something allowed for binman input, but not allowed on device. In
> > > > general, there is support for partitions without addresses/offsets,
> > > > but only for partitions that have some other way to figure that out
> > > > (on disk partition info).
> > > >
> > > > There's also the image filename which doesn't really belong in the on
> > > > device partitions. So maybe the input and output schemas should be
> > > > separate.  
> > >
> > > OK, I'll focus on the output schema for now. I suspect this will be a
> > > grey area though.
> > >
> > > As an example, if you replace a binary in the firmware, Binman can
> > > repack the firmware to make room, respecting the alignment and size
> > > constraints. So these need to be in the output schema somehow.
> > >  
> > > >  
> > > > > > > I saw this file, which seems to extend a partition.
> > > > > > >
> > > > > > > Documentation/devicetree/bindings/mtd/partitions/brcm,bcm4908-partitions.yaml  
> > > > > >
> > > > > > IIRC, that's a different type where partition locations are stored in
> > > > > > the flash, so we don't need location and size in DT.  
> > > > >
> > > > > OK.
> > > > >  
> > > > > >  
> > > > > > >
> > > > > > > I was assuming that I should create a top-level compatible = "binman"
> > > > > > > node, with subnodes like compatible = "binman,bl31-atf", for example.
> > > > > > > I should use the compatible string to indicate the contents, right?  
> > > > > >
> > > > > > Yes for subnodes, and we already have some somewhat standard ones for
> > > > > > "u-boot" and "u-boot-env". Though historically, "label" was used.  
> > > > >
> > > > > Binman has common properties for all entries, including "compress"
> > > > > which sets the compression algorithm.  
> > > >
> > > > I see no issue with adding that. It seems useful and something missing
> > > > in the existing partition schemas.  
> > >
> > > OK I sent a patch with that.
> > >  
> > > >  
> > > > > So perhaps I should start by defining a new binman,bl31-atf which has
> > > > > common properties from an "binman,entry" definition?  
> > > >
> > > > I don't understand the binman prefix. The contents are ATF (or TF-A
> > > > now). Who wrote it to the flash image is not relevant.  
> > >
> > > Are you suggesting just "atf-bl31", or "arm,atf-bl31" ? Or should we
> > > change it to "tfa-bl31"?  
> >
> > I don't really understand the relationship with TF-A here. Can't we
> > just have a kind of fixed-partitions with additional properties like
> > the compression?  
> 
> Binman needs to know what to put in there, which is the purpose of the
> compatible string.

But "what" should be put inside the partition is part of the input
argument, not the output. You said (maybe I got this wrong) that the
schema would apply to the output of binman. If you want to let user
know what's inside, maybe it is worth adding a label, but otherwise I
don't like the idea of a compatible for that, which for me would mean:
"here is how to handle that specific portion of the flash/here is how
the flash is organized".

> > > > We already have some compatibles in use. We should reuse them if
> > > > possible. Not sure about TF-A though.  
> > >
> > > OK.
> > >  
> >
> > Also, I still don't understand the purpose of this schema. So binman
> > generates an image, you want to flash this image and you would like the
> > tool to generate the corresponding (partition) DT snippet automatically.
> > Do I get this right? I don't get why you would need new compatibles for
> > that.  
> 
> It is actually the other way around. The schema tells Binman how to
> build the image (what goes in there and where). Then outputs an
> updated DT which describes where everything ended up, for use by other
> tools, e.g. firmware update. It is a closed loop in that sense. See
> the references for more information.

Maybe I fail to see why you would want these description to be
introduced here, if they are not useful to the OS.

> [1] https://u-boot.readthedocs.io/en/latest/develop/package/index.html
> [2] https://pretalx.com/media/osfc2019/submissions/Y7EN9V/resources/Binman_-_A_data-controlled_firmware_packer_for_U-B_pFU3n2K.pdf
> [3] https://www.youtube.com/watch?v=L84ujgUXBOQ


Thanks,
Miquèl

  reply	other threads:[~2023-09-25 14:47 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-21 18:45 [PATCH] dt-bindings: mtd: Add a schema for binman Simon Glass
2023-09-22  4:21 ` Rob Herring
2023-09-22  7:01 ` Krzysztof Kozlowski
2023-09-22 15:26   ` Simon Glass
2023-09-22 13:56 ` Alper Nebi Yasak
2023-09-22 15:09   ` Simon Glass
2023-09-22 16:00 ` Rob Herring
2023-09-22 17:01   ` Simon Glass
2023-09-22 17:46     ` Rob Herring
2023-09-22 18:12       ` Simon Glass
2023-09-22 19:43         ` Rob Herring
2023-09-22 19:51           ` Simon Glass
2023-09-25  7:21             ` Miquel Raynal
2023-09-25 12:33               ` Simon Glass
2023-09-25 14:47                 ` Miquel Raynal [this message]
2023-09-25 14:53                   ` Simon Glass
2023-09-25 15:24                     ` Miquel Raynal
2023-09-25 16:25                       ` Simon Glass
2023-09-25 18:49                         ` Rob Herring
2023-09-25 22:25                           ` Simon Glass
2023-09-26  7:48                             ` Miquel Raynal
2023-09-26 17:29                               ` Rob Herring
2023-09-27 16:43                                 ` Simon Glass
2023-09-28 15:20                                   ` Simon Glass

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230925164736.5efbf4c0@xps-13 \
    --to=miquel.raynal@bootlin.com \
    --cc=conor+dt@kernel.org \
    --cc=d-gole@ti.com \
    --cc=devicetree@vger.kernel.org \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=rafal@milecki.pl \
    --cc=richard@nod.at \
    --cc=robh@kernel.org \
    --cc=sjg@chromium.org \
    --cc=trini@konsulko.com \
    --cc=u-boot@lists.denx.de \
    --cc=vigneshr@ti.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).