[PATCH] socfpga: Find partition with environment via device tree

Sascha Hauer s.hauer at pengutronix.de
Fri Dec 11 01:30:50 PST 2015


On Fri, Dec 11, 2015 at 02:13:21AM +0000, Trent Piepho wrote:
> socfpga loads the environment from a file named "barebox.env" located
> on the device "/dev/mmc0.1".  Both those names are hard-coded in the
> socfpga code and can't be changed.
> 
> Barebox supports selecting the location of the environment using a
> "barebox,environment" node in device tree's "chosen" node.
> 
> Change socfpga to use this mechanism by looking for barebox.env in the
> device or partition specified in the device tree.
> 
> The filename is still hard-coded.  Someone who wants to change it
> could put that into the device tree too (new file-name property?  3rd
> string in device-path?).
> 
> Remove the stat() call in socfpga_env_init(), as mount() already
> checks if the device exists.  Also remove device_detect_by_name() call
> as the barebox env device code now takes care of that for us.
> 
> Signed-off-by: Trent Piepho <tpiepho at kymetacorp.com>
> ---
> 
> OMAP could do the same thing...
> 
>  arch/arm/dts/socfpga.dtsi       |  7 +++++++
>  arch/arm/mach-socfpga/generic.c | 37 +++++++++++++------------------------
>  2 files changed, 20 insertions(+), 24 deletions(-)
> 
> diff --git a/arch/arm/dts/socfpga.dtsi b/arch/arm/dts/socfpga.dtsi
> index d4d498b..1d0d6ff 100644
> --- a/arch/arm/dts/socfpga.dtsi
> +++ b/arch/arm/dts/socfpga.dtsi
> @@ -1,4 +1,11 @@
>  / {
> +	chosen {
> +                environment at 0 {
> +                        compatible = "barebox,environment";
> +                        device-path = &mmc, "partname:1";
> +                };
> +	};

The "barebox,environment" compatible describes a binding which takes
partition described in device-path as a raw file containing a barebox
envfs.
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:

environment at 0 {
	compatible = "barebox,environment";
	device-path = &env;
};

eeprom at foo {
	partition at 0 {
		reg = <0, 0x8000>;
		label = "foo";
		env: file at 0 {
			path = "barebox.env";
		};
	};
};

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