[U-Boot] [PATCH] qemu-arm: Add persistent environment support

Takahiro Akashi
2018-11-27T08:17:12Z

On Tue, Nov 27, 2018 at 01:11:44PM +0530, Sumit Garg wrote:
> Hi Akashi,
>
> On Tue, 27 Nov 2018 at 12:14, AKASHI Takahiro
> <takahiro.akashi@linaro.org> wrote:
> >
> > Sumit,
> >
> > # I have a similar patch in my local branch :)
> >
>
> IIRC, we did sync on this work.
>
> > On Mon, Nov 26, 2018 at 04:50:17PM +0530, Sumit Garg wrote:
> > > Currently on qemu-arm platforms environment is kept in RAM. Instead
> > > use pflash device 1 to provide persistent environment support across
> > > device reset.
> > >
> > > Also (optionally) provide support for persistent environment across
> > > qemu machine OFF/ON using following instructions:
> > >
> > > - Create envstore.img using qemu-img:
> > > qemu-img create -f raw envstore.img 64M
> > > - Add a pflash drive parameter to the command line:
> > > -drive if=pflash,format=raw,index=1,file=envstore.img
> > >
> > > Signed-off-by: Sumit Garg <sumit.garg@linaro.org>
> > > ---
> > > configs/qemu_arm64_defconfig | 7 +++++++
> > > configs/qemu_arm_defconfig | 7 +++++++
> > > doc/README.qemu-arm | 6 ++++++
> > > include/configs/qemu-arm.h | 8 +++++++-
> > > 4 files changed, 27 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/configs/qemu_arm64_defconfig b/configs/qemu_arm64_defconfig
> > > index f4502c9..0f13716 100644
> > > --- a/configs/qemu_arm64_defconfig
> > > +++ b/configs/qemu_arm64_defconfig
> > > @@ -29,3 +29,10 @@ CONFIG_USB=y
> > > CONFIG_DM_USB=y
> > > CONFIG_USB_EHCI_HCD=y
> > > CONFIG_USB_EHCI_PCI=y
> > > +CONFIG_ENV_IS_IN_FLASH=y
> > > +CONFIG_MTD=y
> > > +CONFIG_MTD_NOR_FLASH=y
> > > +CONFIG_FLASH_CFI_DRIVER=y
> >
> > This one and
> >
> > > +CONFIG_CFI_FLASH=y
> >
> > > +CONFIG_SYS_FLASH_USE_BUFFER_WRITE=y
> > > +CONFIG_SYS_FLASH_CFI=y
> >
> > those two are not currently Kconfig parameters.
> > So they should not be put in *_defconfig, but in include/configs/*.
> > Or it would be better to define them as new Kconfigs?
> >
>
> I do see these Kconfigs already defined in drivers/mtd/Kconfig.

OK. I didn't notice that those were added in the last couple of weeks.

> > > diff --git a/configs/qemu_arm_defconfig b/configs/qemu_arm_defconfig
> > > index acebdc5..b75363e 100644
> > > --- a/configs/qemu_arm_defconfig
> > > +++ b/configs/qemu_arm_defconfig
> > > @@ -29,3 +29,10 @@ CONFIG_USB=y
> > > CONFIG_DM_USB=y
> > > CONFIG_USB_EHCI_HCD=y
> > > CONFIG_USB_EHCI_PCI=y
> > > +CONFIG_ENV_IS_IN_FLASH=y
> > > +CONFIG_MTD=y
> > > +CONFIG_MTD_NOR_FLASH=y
> > > +CONFIG_FLASH_CFI_DRIVER=y
> > > +CONFIG_CFI_FLASH=y
> > > +CONFIG_SYS_FLASH_USE_BUFFER_WRITE=y
> > > +CONFIG_SYS_FLASH_CFI=y
> > > diff --git a/doc/README.qemu-arm b/doc/README.qemu-arm
> > > index 2601656..e67bc13 100644
> > > --- a/doc/README.qemu-arm
> > > +++ b/doc/README.qemu-arm
> > > @@ -47,6 +47,12 @@ The minimal QEMU command line to get U-Boot up and running is:
> > > Note that for some odd reason qemu-system-aarch64 needs to be explicitly
> > > told to use a 64-bit CPU or it will boot in 32-bit mode.
> > >
> > > +Additional persistent U-boot environment support can be added as follows:
> > > +- Create envstore.img using qemu-img:
> > > + qemu-img create -f raw envstore.img 64M
> > > +- Add a pflash drive parameter to the command line:
> > > + -drive if=pflash,format=raw,index=1,file=envstore.img
> > > +
> > > Additional peripherals that have been tested to work in both U-Boot and Linux
> > > can be enabled with the following command line parameters:
> > >
> > > diff --git a/include/configs/qemu-arm.h b/include/configs/qemu-arm.h
> > > index fedc466..83a930b 100644
> > > --- a/include/configs/qemu-arm.h
> > > +++ b/include/configs/qemu-arm.h
> > > @@ -21,7 +21,8 @@
> > > #define CONFIG_SYS_HZ 1000
> > >
> > > /* Environment options */
> > > -#define CONFIG_ENV_SIZE SZ_64K
> > > +#define CONFIG_ENV_ADDR 0x4000000
> > > +#define CONFIG_ENV_SIZE SZ_256K
> >
> > # I'm not sure whether those definitions be enforced for all qemu-arm users.

This is one of reasons.

> > Do you have any reason to put env region in the second bank?
>
> Yes I thought it would be better to load "envstore.img" on bank #1
> separately from u-boot.bin (loaded on bank #0) like we do for
> "varstore" while booting UEFI/edk2. This also doesn't change existing
> cmdline to use "-bios" option for u-boot.bin and rather provide an
> optional cmdline argument to load environment.

# I always re-create a rom image from u-boot and variable region
# with a few lines of shell script.

> Also I have updated ENV_SIZE to be SZ_256K due to minimum erase size
> for flash being 256K (sector size).
>
> > If not, I suggest that it be left free for other use.
> >
>
> AFAIK, I haven't seen any other usage for flash. If you are aware of
> any, please do let me know.

Well, I'm thinking of using the second bank for "capsule on disk"
to implement runtime efi variable accesses which I'm now working on
locally.
While it is not limited to a separate bank (nor even a flash), but
we need a file system (as a boot device) somewhere.

Thanks,
-Takahiro Akashi

> Regards,
> Sumit
>
> > Thanks,
> > -Takahiro Akashi
> >
> > > #define BOOT_TARGET_DEVICES(func) \
> > > func(SCSI, scsi, 0) \
> > > @@ -42,4 +43,9 @@
> > >
> > > #define CONFIG_SYS_CBSIZE 512
> > >
> > > +#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_TEXT_BASE
> > > +#define CONFIG_SYS_FLASH_BASE 0x0
> > > +#define CONFIG_SYS_MAX_FLASH_BANKS 2
> > > +#define CONFIG_SYS_MAX_FLASH_SECT 256 /* Sector: 256K, Bank: 64M */
> > > +
> > > #endif /* __CONFIG_H */
> > > --
> > > 2.7.4
> > >