mbox series

[00/18] FWU: Migrate FWU metadata to version 2

Message ID 20240122115439.653871-1-sughosh.ganu@linaro.org
Headers show
Series FWU: Migrate FWU metadata to version 2 | expand

Message

Sughosh Ganu Jan. 22, 2024, 11:54 a.m. UTC
The following patches migrate the FWU metadata access code to version
2 of the structure. This is based on the structure definition as
defined in the latest rev of the FWU Multi Bank Update specification
[1].

Since the version 1 of the structure has currently been adopted on a
couple of platforms, it was decided to have a clean migration of the
metadata to version 2 only, instead of supporting both the versions of
the structure. Also, based on consultations with the main author of
the specification, it is expected that any further changes in the
structure would be minor tweaks, and not be significant. Hence a
migration to version 2.

Similar migration is also being done in TF-A, including migrating the
ST platform port to support version 2 of the metadata structure [2].

The patches have been tested on STM32MP1 DK2 board and the Synquacer
board from Socionext. This covers testing both the GPT and the MTD
partitioned storage devices for the metadata access.

[1] - https://developer.arm.com/documentation/den0118/latest/
[2] - https://review.trustedfirmware.org/q/topic:%22topics/fwu_metadata_v2_migration%22

Sughosh Ganu (18):
  configs: fwu: Remove FWU configs for metadata V2 migration
  fwu: metadata: Migrate to version 2 of the structure
  drivers: fwu: Add the size parameter to the metadata access API's
  fwu: Add some API's for metadata version 2 access
  lib: fwu: Make changes to support version 2 of FWU metadata
  drivers: fwu: mtd: Allocate buffer for image info dynamically
  drivers: fwu: Allocate memory for metadata copies
  fwu: Add a function to put a bank in Trial State
  capsule: Accept a bank on a successful update
  fwu: mtd: Modify the DFU API's to align with metadata version 2
  efi_firmware: fwu: Do not read FWU metadata on sandbox
  efi_firmware: fwu: Get the number of FWU banks at runtime
  cmd: fwu: Align the command with metadata version 2
  test: fwu: Align the FWU metadata access test with version 2
  fwu: Remove the config symbols for number of banks and images
  tools: mkfwumdata: Migrate to metadata version 2
  configs: fwu: Re-enable FWU configs
  doc: fwu: Make changes for supporting FWU Metadata version 2

 arch/sandbox/Kconfig                     |   6 -
 board/armltd/corstone1000/corstone1000.c |   2 +-
 cmd/fwu_mdata.c                          |  43 +++-
 configs/synquacer_developerbox_defconfig |   1 -
 doc/board/socionext/developerbox.rst     |   9 +-
 doc/develop/uefi/fwu_updates.rst         |  12 +-
 doc/usage/cmd/fwu_mdata.rst              |  12 +-
 drivers/fwu-mdata/fwu-mdata-uclass.c     |  10 +-
 drivers/fwu-mdata/gpt_blk.c              |  27 +-
 drivers/fwu-mdata/raw_mtd.c              |  85 ++++---
 include/fwu.h                            |  94 ++++++-
 include/fwu_mdata.h                      |  56 +++--
 lib/efi_loader/efi_capsule.c             |  12 +-
 lib/efi_loader/efi_firmware.c            |  20 +-
 lib/fwu_updates/Kconfig                  |  11 -
 lib/fwu_updates/fwu.c                    | 308 ++++++++++++++++++-----
 lib/fwu_updates/fwu_mtd.c                |  76 ++++--
 test/dm/fwu_mdata.c                      |  56 +++--
 test/dm/fwu_mdata_disk_image.h           | 124 ++++-----
 tools/mkfwumdata.c                       |  43 +++-
 20 files changed, 705 insertions(+), 302 deletions(-)

Comments

Ilias Apalodimas Jan. 24, 2024, 10:05 a.m. UTC | #1
Hi Sughosh,

On Mon, Jan 22, 2024 at 05:24:21PM +0530, Sughosh Ganu wrote:
>
> The following patches migrate the FWU metadata access code to version
> 2 of the structure. This is based on the structure definition as
> defined in the latest rev of the FWU Multi Bank Update specification
> [1].
>
> Since the version 1 of the structure has currently been adopted on a
> couple of platforms, it was decided to have a clean migration of the
> metadata to version 2 only, instead of supporting both the versions of
> the structure. Also, based on consultations with the main author of
> the specification, it is expected that any further changes in the
> structure would be minor tweaks, and not be significant. Hence a
> migration to version 2.

I think this makes sense. We've already verified Socionext doesn't mind
dropping v1 support. If some from ST doesn't have objections, only
supporting v2 will simplify the code a lot.

Thanks
/Ilias
>
> Similar migration is also being done in TF-A, including migrating the
> ST platform port to support version 2 of the metadata structure [2].
>
> The patches have been tested on STM32MP1 DK2 board and the Synquacer
> board from Socionext. This covers testing both the GPT and the MTD
> partitioned storage devices for the metadata access.
>
> [1] - https://developer.arm.com/documentation/den0118/latest/
> [2] - https://review.trustedfirmware.org/q/topic:%22topics/fwu_metadata_v2_migration%22
>
> Sughosh Ganu (18):
>   configs: fwu: Remove FWU configs for metadata V2 migration
>   fwu: metadata: Migrate to version 2 of the structure
>   drivers: fwu: Add the size parameter to the metadata access API's
>   fwu: Add some API's for metadata version 2 access
>   lib: fwu: Make changes to support version 2 of FWU metadata
>   drivers: fwu: mtd: Allocate buffer for image info dynamically
>   drivers: fwu: Allocate memory for metadata copies
>   fwu: Add a function to put a bank in Trial State
>   capsule: Accept a bank on a successful update
>   fwu: mtd: Modify the DFU API's to align with metadata version 2
>   efi_firmware: fwu: Do not read FWU metadata on sandbox
>   efi_firmware: fwu: Get the number of FWU banks at runtime
>   cmd: fwu: Align the command with metadata version 2
>   test: fwu: Align the FWU metadata access test with version 2
>   fwu: Remove the config symbols for number of banks and images
>   tools: mkfwumdata: Migrate to metadata version 2
>   configs: fwu: Re-enable FWU configs
>   doc: fwu: Make changes for supporting FWU Metadata version 2
>
>  arch/sandbox/Kconfig                     |   6 -
>  board/armltd/corstone1000/corstone1000.c |   2 +-
>  cmd/fwu_mdata.c                          |  43 +++-
>  configs/synquacer_developerbox_defconfig |   1 -
>  doc/board/socionext/developerbox.rst     |   9 +-
>  doc/develop/uefi/fwu_updates.rst         |  12 +-
>  doc/usage/cmd/fwu_mdata.rst              |  12 +-
>  drivers/fwu-mdata/fwu-mdata-uclass.c     |  10 +-
>  drivers/fwu-mdata/gpt_blk.c              |  27 +-
>  drivers/fwu-mdata/raw_mtd.c              |  85 ++++---
>  include/fwu.h                            |  94 ++++++-
>  include/fwu_mdata.h                      |  56 +++--
>  lib/efi_loader/efi_capsule.c             |  12 +-
>  lib/efi_loader/efi_firmware.c            |  20 +-
>  lib/fwu_updates/Kconfig                  |  11 -
>  lib/fwu_updates/fwu.c                    | 308 ++++++++++++++++++-----
>  lib/fwu_updates/fwu_mtd.c                |  76 ++++--
>  test/dm/fwu_mdata.c                      |  56 +++--
>  test/dm/fwu_mdata_disk_image.h           | 124 ++++-----
>  tools/mkfwumdata.c                       |  43 +++-
>  20 files changed, 705 insertions(+), 302 deletions(-)
>
> --
> 2.34.1
>
>
Michal Simek Jan. 26, 2024, 3:09 p.m. UTC | #2
Hi Sughosh,

po 22. 1. 2024 v 12:55 odesílatel Sughosh Ganu <sughosh.ganu@linaro.org> napsal:
>
>
> The following patches migrate the FWU metadata access code to version
> 2 of the structure. This is based on the structure definition as
> defined in the latest rev of the FWU Multi Bank Update specification
> [1].
>
> Since the version 1 of the structure has currently been adopted on a
> couple of platforms, it was decided to have a clean migration of the
> metadata to version 2 only, instead of supporting both the versions of
> the structure. Also, based on consultations with the main author of
> the specification, it is expected that any further changes in the
> structure would be minor tweaks, and not be significant. Hence a
> migration to version 2.
>
> Similar migration is also being done in TF-A, including migrating the
> ST platform port to support version 2 of the metadata structure [2].
>
> The patches have been tested on STM32MP1 DK2 board and the Synquacer
> board from Socionext. This covers testing both the GPT and the MTD
> partitioned storage devices for the metadata access.
>
> [1] - https://developer.arm.com/documentation/den0118/latest/
> [2] - https://review.trustedfirmware.org/q/topic:%22topics/fwu_metadata_v2_migration%22
>
> Sughosh Ganu (18):
>   configs: fwu: Remove FWU configs for metadata V2 migration
>   fwu: metadata: Migrate to version 2 of the structure
>   drivers: fwu: Add the size parameter to the metadata access API's
>   fwu: Add some API's for metadata version 2 access
>   lib: fwu: Make changes to support version 2 of FWU metadata
>   drivers: fwu: mtd: Allocate buffer for image info dynamically
>   drivers: fwu: Allocate memory for metadata copies
>   fwu: Add a function to put a bank in Trial State
>   capsule: Accept a bank on a successful update
>   fwu: mtd: Modify the DFU API's to align with metadata version 2
>   efi_firmware: fwu: Do not read FWU metadata on sandbox
>   efi_firmware: fwu: Get the number of FWU banks at runtime
>   cmd: fwu: Align the command with metadata version 2
>   test: fwu: Align the FWU metadata access test with version 2
>   fwu: Remove the config symbols for number of banks and images
>   tools: mkfwumdata: Migrate to metadata version 2
>   configs: fwu: Re-enable FWU configs
>   doc: fwu: Make changes for supporting FWU Metadata version 2
>
>  arch/sandbox/Kconfig                     |   6 -
>  board/armltd/corstone1000/corstone1000.c |   2 +-
>  cmd/fwu_mdata.c                          |  43 +++-
>  configs/synquacer_developerbox_defconfig |   1 -
>  doc/board/socionext/developerbox.rst     |   9 +-
>  doc/develop/uefi/fwu_updates.rst         |  12 +-
>  doc/usage/cmd/fwu_mdata.rst              |  12 +-
>  drivers/fwu-mdata/fwu-mdata-uclass.c     |  10 +-
>  drivers/fwu-mdata/gpt_blk.c              |  27 +-
>  drivers/fwu-mdata/raw_mtd.c              |  85 ++++---
>  include/fwu.h                            |  94 ++++++-
>  include/fwu_mdata.h                      |  56 +++--
>  lib/efi_loader/efi_capsule.c             |  12 +-
>  lib/efi_loader/efi_firmware.c            |  20 +-
>  lib/fwu_updates/Kconfig                  |  11 -
>  lib/fwu_updates/fwu.c                    | 308 ++++++++++++++++++-----
>  lib/fwu_updates/fwu_mtd.c                |  76 ++++--
>  test/dm/fwu_mdata.c                      |  56 +++--
>  test/dm/fwu_mdata_disk_image.h           | 124 ++++-----
>  tools/mkfwumdata.c                       |  43 +++-
>  20 files changed, 705 insertions(+), 302 deletions(-)


Thanks for this work. I have tested it on kv260 and I see an issue
with 2 image per location configuration.
When I build mdata v2 with:
./tools/mkfwumdata -a 0 -i 2 -b 2
588aced7-2cce-ed11-81cd-d324e93ac223,e86660de-5602-ad4f-8238-e406e274c4cf,48054af6-ce2c-11ed-8f66-7bc4531cfe6b,4b819c3e-ce2c-11ed-bec8-23de4c6d2cf2
588aced7-2cce-ed11-81cd-d324e93ac223,d4cf9ecf-8b93-c541-8551-1f883ab7dc18,fb04da52-0e9d-11ee-a57f-637805837c3f,07609246-0e9e-11ee-a23a-a38980b779a1
mdata.bin

fwu command is showing up configuration for the second image

Image Type Guid: DE6066E8-0256-4FAD-8238-E406E274C4CF
Location Guid: D7CE8A58-CE2C-11ED-81CD-D324E93AC223
Image Guid:  F64A0548-2CCE-ED11-8F66-7BC4531CFE6B
Image Acceptance: yes
Image Guid:  3E9C814B-2CCE-ED11-BEC8-23DE4C6D2CF2
Image Acceptance: yes

Image Type Guid: F64A0548-2CCE-ED11-8F66-7BC4531CFE6B
Location Guid: 00000001-0000-0000-4B81-9C3ECE2C11ED
Image Guid:  DE23C8BE-6D4C-F22C-0100-000000000000
Image Acceptance: no
Image Guid:  881F5185-B73A-18DC-588A-CED72CCEED11
Image Acceptance: no

but it should be (from mdata v1)
Image Type Guid: DE6066E8-0256-4FAD-8238-E406E274C4CF
Location Guid: D7CE8A58-CE2C-11ED-81CD-D324E93AC223
Image Guid:  F64A0548-2CCE-ED11-8F66-7BC4531CFE6B
Image Acceptance: yes
Image Guid:  3E9C814B-2CCE-ED11-BEC8-23DE4C6D2CF2
Image Acceptance: yes

Image Type Guid: CF9ECFD4-938B-41C5-8551-1F883AB7DC18
Location Guid: D7CE8A58-CE2C-11ED-81CD-D324E93AC223
Image Guid:  52DA04FB-9D0E-EE11-A57F-637805837C3F
Image Acceptance: yes
Image Guid:  46926007-9E0E-EE11-A23A-A38980B779A1
Image Acceptance: yes

And I think the issue is not with mdata v2 generation but it is with
decoding inside u-boot.
Which ends up in a situation that dfu_alt_info for 2 images is not
generated properly.

Thanks,
Michal
Sughosh Ganu Jan. 29, 2024, 6:34 a.m. UTC | #3
hi Michal,

On Fri, 26 Jan 2024 at 20:40, Michal Simek <monstr@monstr.eu> wrote:
>
> Hi Sughosh,
>
> po 22. 1. 2024 v 12:55 odesílatel Sughosh Ganu <sughosh.ganu@linaro.org> napsal:
> >
> >
> > The following patches migrate the FWU metadata access code to version
> > 2 of the structure. This is based on the structure definition as
> > defined in the latest rev of the FWU Multi Bank Update specification
> > [1].
> >
> > Since the version 1 of the structure has currently been adopted on a
> > couple of platforms, it was decided to have a clean migration of the
> > metadata to version 2 only, instead of supporting both the versions of
> > the structure. Also, based on consultations with the main author of
> > the specification, it is expected that any further changes in the
> > structure would be minor tweaks, and not be significant. Hence a
> > migration to version 2.
> >
> > Similar migration is also being done in TF-A, including migrating the
> > ST platform port to support version 2 of the metadata structure [2].
> >
> > The patches have been tested on STM32MP1 DK2 board and the Synquacer
> > board from Socionext. This covers testing both the GPT and the MTD
> > partitioned storage devices for the metadata access.
> >
> > [1] - https://developer.arm.com/documentation/den0118/latest/
> > [2] - https://review.trustedfirmware.org/q/topic:%22topics/fwu_metadata_v2_migration%22
> >
> > Sughosh Ganu (18):
> >   configs: fwu: Remove FWU configs for metadata V2 migration
> >   fwu: metadata: Migrate to version 2 of the structure
> >   drivers: fwu: Add the size parameter to the metadata access API's
> >   fwu: Add some API's for metadata version 2 access
> >   lib: fwu: Make changes to support version 2 of FWU metadata
> >   drivers: fwu: mtd: Allocate buffer for image info dynamically
> >   drivers: fwu: Allocate memory for metadata copies
> >   fwu: Add a function to put a bank in Trial State
> >   capsule: Accept a bank on a successful update
> >   fwu: mtd: Modify the DFU API's to align with metadata version 2
> >   efi_firmware: fwu: Do not read FWU metadata on sandbox
> >   efi_firmware: fwu: Get the number of FWU banks at runtime
> >   cmd: fwu: Align the command with metadata version 2
> >   test: fwu: Align the FWU metadata access test with version 2
> >   fwu: Remove the config symbols for number of banks and images
> >   tools: mkfwumdata: Migrate to metadata version 2
> >   configs: fwu: Re-enable FWU configs
> >   doc: fwu: Make changes for supporting FWU Metadata version 2
> >
> >  arch/sandbox/Kconfig                     |   6 -
> >  board/armltd/corstone1000/corstone1000.c |   2 +-
> >  cmd/fwu_mdata.c                          |  43 +++-
> >  configs/synquacer_developerbox_defconfig |   1 -
> >  doc/board/socionext/developerbox.rst     |   9 +-
> >  doc/develop/uefi/fwu_updates.rst         |  12 +-
> >  doc/usage/cmd/fwu_mdata.rst              |  12 +-
> >  drivers/fwu-mdata/fwu-mdata-uclass.c     |  10 +-
> >  drivers/fwu-mdata/gpt_blk.c              |  27 +-
> >  drivers/fwu-mdata/raw_mtd.c              |  85 ++++---
> >  include/fwu.h                            |  94 ++++++-
> >  include/fwu_mdata.h                      |  56 +++--
> >  lib/efi_loader/efi_capsule.c             |  12 +-
> >  lib/efi_loader/efi_firmware.c            |  20 +-
> >  lib/fwu_updates/Kconfig                  |  11 -
> >  lib/fwu_updates/fwu.c                    | 308 ++++++++++++++++++-----
> >  lib/fwu_updates/fwu_mtd.c                |  76 ++++--
> >  test/dm/fwu_mdata.c                      |  56 +++--
> >  test/dm/fwu_mdata_disk_image.h           | 124 ++++-----
> >  tools/mkfwumdata.c                       |  43 +++-
> >  20 files changed, 705 insertions(+), 302 deletions(-)
>
>
> Thanks for this work. I have tested it on kv260 and I see an issue
> with 2 image per location configuration.
> When I build mdata v2 with:
> ./tools/mkfwumdata -a 0 -i 2 -b 2
> 588aced7-2cce-ed11-81cd-d324e93ac223,e86660de-5602-ad4f-8238-e406e274c4cf,48054af6-ce2c-11ed-8f66-7bc4531cfe6b,4b819c3e-ce2c-11ed-bec8-23de4c6d2cf2
> 588aced7-2cce-ed11-81cd-d324e93ac223,d4cf9ecf-8b93-c541-8551-1f883ab7dc18,fb04da52-0e9d-11ee-a57f-637805837c3f,07609246-0e9e-11ee-a23a-a38980b779a1
> mdata.bin
>
> fwu command is showing up configuration for the second image
>
> Image Type Guid: DE6066E8-0256-4FAD-8238-E406E274C4CF
> Location Guid: D7CE8A58-CE2C-11ED-81CD-D324E93AC223
> Image Guid:  F64A0548-2CCE-ED11-8F66-7BC4531CFE6B
> Image Acceptance: yes
> Image Guid:  3E9C814B-2CCE-ED11-BEC8-23DE4C6D2CF2
> Image Acceptance: yes
>
> Image Type Guid: F64A0548-2CCE-ED11-8F66-7BC4531CFE6B
> Location Guid: 00000001-0000-0000-4B81-9C3ECE2C11ED
> Image Guid:  DE23C8BE-6D4C-F22C-0100-000000000000
> Image Acceptance: no
> Image Guid:  881F5185-B73A-18DC-588A-CED72CCEED11
> Image Acceptance: no
>
> but it should be (from mdata v1)
> Image Type Guid: DE6066E8-0256-4FAD-8238-E406E274C4CF
> Location Guid: D7CE8A58-CE2C-11ED-81CD-D324E93AC223
> Image Guid:  F64A0548-2CCE-ED11-8F66-7BC4531CFE6B
> Image Acceptance: yes
> Image Guid:  3E9C814B-2CCE-ED11-BEC8-23DE4C6D2CF2
> Image Acceptance: yes
>
> Image Type Guid: CF9ECFD4-938B-41C5-8551-1F883AB7DC18
> Location Guid: D7CE8A58-CE2C-11ED-81CD-D324E93AC223
> Image Guid:  52DA04FB-9D0E-EE11-A57F-637805837C3F
> Image Acceptance: yes
> Image Guid:  46926007-9E0E-EE11-A23A-A38980B779A1
> Image Acceptance: yes
>
> And I think the issue is not with mdata v2 generation but it is with
> decoding inside u-boot.
> Which ends up in a situation that dfu_alt_info for 2 images is not
> generated properly.

Thanks for trying this out. I will try to replicate the same setup on
my end and triage this.

-sughosh