[PATCH] socfpga: Find partition with environment via device tree
Sascha Hauer
s.hauer at pengutronix.de
Mon Dec 14 23:11:03 PST 2015
On Mon, Dec 14, 2015 at 07:24:19PM +0000, Trent Piepho wrote:
> On Mon, 2015-12-14 at 11:01 +0100, Sascha Hauer wrote:
> > On Fri, Dec 11, 2015 at 08:05:00PM +0000, Trent Piepho wrote:
> > > On Fri, 2015-12-11 at 10:30 +0100, Sascha Hauer wrote:
> > > > On Fri, Dec 11, 2015 at 02:13:21AM +0000, Trent Piepho wrote:
> > > > The "barebox,environment" compatible describes a binding which takes
> > > > partition described in device-path as a raw file containing a barebox
> > > > envfs.
> > >
> > > Well, I redefined it to have the device-path be the device containing
> > > the environment as raw data or the one containing a filesystem with the
> > > environment as a file if the architecture expects that.
> > >
> > > That doesn't seem like a bad definition.
> >
> > No, indeed not. It's more the implementation I have a problem with. The
> > implementation should be done in the environment driver.
>
> Ok, my second attempt moved it to the barebox env OF driver. This seems
> better as it unifies the boards that have an env on a device and those
> that put it in a file.
>
> > > > What you have here is a partition which contains a FAT which has a
> > > > barebox envfs in a file. I think it's fine to extend the binding (and
> > > > the barebox env driver) to handle that case. What you are doing here is
> > > > to smuggle code behind the driver and bend the environment path to
> > > > somewhere else. That is not ok. I think what we can do is to add some
> > > > file-path property which contains the path and tells the barebox
> > > > environment driver to not use the whole partition but instead to mount
> > > > it and use the file specified in the file-path property.
> > > >
> > > > As an alternative which I might even like better is to extend the
> > > > partition binding to be able to describe a file in a partition, like:
> > >
> > > This won't work. mmc devices, which all boards that use a file for the
> > > env are using, don't have partitions in the device tree, since they are
> > > created dynamically from the partition table. There is nowhere to put
> > > the file node.
> >
> > Just because they are dynamically created from information found on the
> > MMC card doesn't mean we can't describe them in the device tree. We can
> > for example specify "The second partition" or "The partition with UUID
> > xy".
>
> That would be hard to do in practice, as the UUID of a partition is
> normally generated at random when the partition is made. It would be
> hard to keep the UUID in the device table matching the partition table.
> I suppose one could go by partition number or by name too. Which is
> really no different than the partname: syntax but in a different
> location.
Yes, the UUID may be a bad example, replace that with anything else that
is able to identify the partition.
>
> > > It is also problematic for my board. I need to change the env path
> > > based on data in an eeprom that selects which partition to use. Other
> > > boards that have multiple environments select them in a
> > > postcore_initcall using boot strapping pins that aren't part of a
> > > device. I'm using an eeprom so I need to do the selection later in the
> > > init process.
> >
> > Ok, so you couldn't you do the same?
>
> Yes, I made it work with my second attempt. The env driver is a
> late_initcall so I was able to have board code modify the OF tree so
> that it points to the correct partition.
>
> > > Maybe extend load_environment to do the mount? const char
> > > *default_environment_path would have to change to something that could
> > > support the concept of a device + optional filename. This way one could
> > > change the env path upto environment_initcall() time.
> >
> > My original plan was to extend this:
> >
> > device-path = &mmc, "partname:1";
> >
> > with a filename, like this:
> >
> > device-path = &mmc, "partname:1", "/bla/env";
> >
> > I found out that this is not how the device tree should be like. It
> > looks and feels better when the phandle directly points to a node and
> > the node describes a partition (or file in this case).
>
> I thought the env code was intentionally not using phandles so that it
> could be in a different DT than the DT describing the hardware. Thus
> the path instead of a phandle.
Sorry, mixed that up. &mmc is a path, not a phandle.
>
> I didn't want to extend device-path with an optional 3rd string since
> device-path is already IMHO too complex supporting both a path to a
> partition or a path to a device and then a partition description.
I tend to agree. When I created the binding it seemed like a good idea
to be able to chain together strings like describing the device, the
partition and then the filename. The problems I had implementing it
should have shown me that idea wasn't the best.
> So
> one would also want to support device-path = &eeprom, "/bla/env" and now
> you've got to guess if the 2nd string is a file or partition name.
>
> So I've guess we have:
>
> {
> compatible = "barebox,environment";
> device-path = &foo, "partname:bar";
> file-path = "baz";
> }
>
> OR
>
> {
> compatible = "barebox,environment";
> env-path = &environment;
> }
>
> &foo {
> partition at 0 {
> label = "bar";
> environment: file at 0 {
> path = "baz";
> };
> };
> }
>
> So the same information but in a different layout. The latter layout is
> more complex and I'm not sure how the code would properly tell if the
> node path refers to a device or a partition or a file.
Your current "Support env from file in a file-system via device tree"
patch indeed has a straight forward implementation. Maybe we should go
that way. I'll have a closer look at it.
Sascha
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
More information about the barebox
mailing list