Message ID | 20200803054355.17356-1-takahiro.akashi@linaro.org |
---|---|
Headers | show |
Series | efi_loader: add capsule update support | expand |
On 03.08.20 07:43, AKASHI Takahiro wrote: > Summary > ======= > 'UpdateCapsule' is one of runtime services defined in UEFI specification > and its aim is to allow a caller (OS) to pass information to the firmware, > i.e. U-Boot. This is mostly used to update firmware binary on devices by > instructions from OS. > > While 'UpdateCapsule' is a runtime services function, it is, at least > initially, supported only before exiting boot services alike other runtime > functions, [Get/]SetVariable. This is because modifying storage which may > be shared with OS must be carefully designed and there is no general > assumption that we can do it. > > Therefore, we practically support only "capsule on disk"; any capsule can > be handed over to UEFI subsystem as a file on a specific file system. > > In this patch series, all the related definitions and structures are given > as UEFI specification describes, and basic framework for capsule support > is provided. Currently supported is > * firmware update (Firmware Management Protocol or simply FMP) > > Most of functionality of firmware update is provided by FMP driver and > it can be, by nature, system/platform-specific. So you can and should > implement your own FMP driver(s) based on your system requirements. > Under the current implementation, we provide two basic but generic > drivers with two formats: > * FIT image format (as used in TFTP update and dfu) > * raw image format > > It's totally up to users which one, or both, should be used on users' > system depending on user requirements. > > Quick usage > =========== > 1. You can create a capsule file with the following host command: > > $ mkeficapsule [--fit <fit image> | --raw <raw image>] <output file> > > 2. Put the file under: > > /EFI/UpdateCapsule of UEFI system partition > > 3. Specify firmware storage to be updated in "dfu_alt_info" variable > (Please follow README.dfu for details.) > > ==> env set dfu_alt_info '...' > > 4. After setting up UEFI's OsIndications variable, reboot U-Boot: > > OsIndications <= EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED > > Patch structure > =============== > Patch#1-#4,#12: preparatory patches > Patch#5-#11,#13: main part of implementation > Patch#14-#15: utilities > Patch#16-#17: pytests > > [1] https://git.linaro.org/people/takahiro.akashi/u-boot.git efi/capsule > > Prerequisite patches > ==================== > dfu change by Heinrich[2] > > [2] https://lists.denx.de/pipermail/u-boot/2020-July/420950.html > > Test > ==== > * passed all the pytests which are included in this patch series > on sandbox build locally. > > Please note that the capsule pytest itself won't be run in the CI > partly because some specific configuration for sandbox build is > required and partly because there is a problem with virt-make-fs. > See test_efi_capsule_firmware.py. > > Issues > ====== > * Timing of executing capsules-on-disk > Currently, processing a capsule is triggered only as part of > UEFI subsystem initialization. This means that, for example, > firmware update, may not take place at system booting time and > will potentially be delayed until a first call of any UEFI functions. > => See patch#5 for my proposal > * A bunch of warnings like > WARNING: Use 'if (IS_ENABLED(CONFIG...))' instead of '#if or #ifdef' > where possible > I don't think that fixing those improves anything. > * Add a document in uefi.rst > > TODO's > ====== > (Won't be addressed in this series.) > * capsule authentication > * capsule dependency (dependency expression instruction set) > * loading drivers in a capsule > * handling RESET flag in a capsule and QeuryCapsuleCaps > * full semantics of ESRT (EFI System Resource Table) > * enabling capsule API at runtime > * json capsule > * recovery from update failure > > Changes > ======= > v5 (August 3, 2020) > * removed superfluous type conversion at dfu_write_from_mem_addr() > (Patch#2) > * introduced a common helper function, efi_create_indexed_name() > (Patch#6,#7,#8) > * use efi_[get|set]_variable_int(), if necessary, with READ_ONLY > (Patch#7,#8) > * return EFI_UNSUPPORTED at Patch#7 > * changed the word, number, to 'index' (Patch#7,#8) > * removed 'ifdef CONFIG_EFI_CAPSULE_ON_DISK' from a header (Patch#8) > * initialize 'CapsuleLast' in efi_init_obj_list() (Patch#7,#8) > * added 'const' qualifier for filename argument at > efi_capsule_[read|delete]_file() (Patch#8) > > > > v4 (July 22, 2020) > * rebased to Heinrich's current efi-2020-10 > * rework dfu-related code to align with Heinrich's change (Patch#1,#3) > * change a type of 'addr' argument from int to 'void *' per Sughosh's > comment (Patch#2-#3,#11-#12) > * rework/simplify pytests (Patch#15-#16) > - utilize virt-make-fs > - drop Test Case 1 (updating U-Boot environment data) > - remove useless definitions (MNT_PNT, EFI_CAPSULE_IMAGE_NAME) > - apply autopep8 > > v3 (July 10, 2020) > * rebased to Heinrich's current efi-2020-10-rc1 > * refactor efi_firmware_[fit|raw]_get_image_info() (patch#11,#13) > > v2 (June 17, 2020) > * rebased to v2020.07-rc4 > * add preparatory patches for dfu (Patch#1-#5, #12) > * rework FIT capsule driver to utilize dfu_alt_info instead of CONFIG_xxx > (patch#11) > * extend get_image_info() to correspond to dfu_alt_info > (patch#11) > * add a 'raw binary' capsule support > (patch#13, #17) > * allow multiple capsule formats (with different GUIDs) to be installed > (patch#11, #13) > * extend mkeficapsule command to accept additional parameters, like > version/index/hardware instance for a capsule header info. > (patch#15) > * mkeficapsule can now also generate raw-binary capsule > (patch#16) > * add function descriptions > * apply autopep8 to pytests and fix more against pylint > > v1 (April 27, 2020) > * rebased to v2020.07-rc > * removed already-merged patches (RFC's #1 to #4) > * dropped 'variable update' capsule support (RFC's patch#10) > * dropped 'variable configuration table' support (RFC's patch#11) > (Those two should be discussed separately.) > * add preparatory patches (patch#1/#2) > * fix several build errors > * rename some Kconfig options to be aligned with UEFI specification's terms > (patch#3,4,6,7) > * enforce UpdateCapsule API to be disabled after ExitBootServices (patch#3) > * use config table, runtime_services_supported, instead of variable (patch#3) > * make EFI_CAPSULE_ON_DISK buildable even if UpdateCapsule API is disabled > (patch4) > * support OsIndications, invoking capsule-on-disk only if the variable > indicates so (patch#4) > * introduced EFI_CAPSULE_ON_DISK_EARLY to invoke capsule-on-disk in U-Boot > initialization (patch#4) > * detect capsule files only if they are on EFI system partition (patch#4) > * use printf, rather than EFI_PRINT, in error cases (patch#4) > * use 'header_size' field to retrieve capsule data, adding sanity checks > against capsule size (patch#6) > * call fmpt driver interfaces with EFI_CALL (patch#6) > * remove 'variable update capsule'-related code form mkeficapsule (patch#9) > * add a test case of OsIndications not being set properly (patch#10) > * adjust test scenario for EFI_CAPSULE_ON_DISK_EARLY (patch#10) > * revise pytest scripts (patch#10) > Hello Lukasz, most of this patch series are DFU changes. Could you, please, give us some feedback. Best regards Heinrich > Initial release as RFC (March 17, 2020) > > AKASHI Takahiro (17): > dfu: rename dfu_tftp_write() to dfu_write_by_name() > dfu: modify an argument type for an address > common: update: add a generic interface for FIT image > dfu: export dfu_list > efi_loader: add option to initialise EFI subsystem early > efi_loader: add efi_create_indexed_name() > efi_loader: define UpdateCapsule api > efi_loader: capsule: add capsule_on_disk support > efi_loader: capsule: add memory range capsule definitions > efi_loader: capsule: support firmware update > efi_loader: add firmware management protocol for FIT image > dfu: add dfu_write_by_alt() > efi_loader: add firmware management protocol for raw image > cmd: add "efidebug capsule" command > tools: add mkeficapsule command for UEFI capsule update > test/py: add a test for uefi firmware update capsule of FIT image > test/py: add a test for uefi firmware update capsule of raw image > > cmd/efidebug.c | 235 +++++ > common/Kconfig | 14 + > common/Makefile | 3 +- > common/board_r.c | 6 + > common/main.c | 4 + > common/update.c | 77 +- > drivers/dfu/Kconfig | 6 + > drivers/dfu/Makefile | 2 +- > drivers/dfu/dfu.c | 2 +- > drivers/dfu/dfu_alt.c | 125 +++ > drivers/dfu/dfu_tftp.c | 65 -- > include/dfu.h | 57 +- > include/efi_api.h | 160 +++ > include/efi_loader.h | 30 + > include/image.h | 12 + > lib/efi_loader/Kconfig | 72 ++ > lib/efi_loader/Makefile | 2 + > lib/efi_loader/efi_capsule.c | 910 ++++++++++++++++++ > lib/efi_loader/efi_firmware.c | 398 ++++++++ > lib/efi_loader/efi_runtime.c | 104 +- > lib/efi_loader/efi_setup.c | 106 +- > test/py/tests/test_efi_capsule/conftest.py | 72 ++ > test/py/tests/test_efi_capsule/defs.py | 12 + > .../test_efi_capsule/test_capsule_firmware.py | 241 +++++ > .../tests/test_efi_capsule/uboot_bin_env.its | 36 + > tools/Makefile | 3 + > tools/mkeficapsule.c | 237 +++++ > 27 files changed, 2851 insertions(+), 140 deletions(-) > create mode 100644 drivers/dfu/dfu_alt.c > delete mode 100644 drivers/dfu/dfu_tftp.c > create mode 100644 lib/efi_loader/efi_capsule.c > create mode 100644 lib/efi_loader/efi_firmware.c > create mode 100644 test/py/tests/test_efi_capsule/conftest.py > create mode 100644 test/py/tests/test_efi_capsule/defs.py > create mode 100644 test/py/tests/test_efi_capsule/test_capsule_firmware.py > create mode 100644 test/py/tests/test_efi_capsule/uboot_bin_env.its > create mode 100644 tools/mkeficapsule.c >
Lukasz, Could you take the time to review my patches, especially patch#1 to #4 and #12, please? They are crucial as UEFI capsule update support relies on new features introduced by them. # I don't think I would re-post this patch series as no changes have been made yet. Thanks, -Takahiro Akashi On Mon, Aug 03, 2020 at 02:43:38PM +0900, AKASHI Takahiro wrote: > Summary > ======= > 'UpdateCapsule' is one of runtime services defined in UEFI specification > and its aim is to allow a caller (OS) to pass information to the firmware, > i.e. U-Boot. This is mostly used to update firmware binary on devices by > instructions from OS. > > While 'UpdateCapsule' is a runtime services function, it is, at least > initially, supported only before exiting boot services alike other runtime > functions, [Get/]SetVariable. This is because modifying storage which may > be shared with OS must be carefully designed and there is no general > assumption that we can do it. > > Therefore, we practically support only "capsule on disk"; any capsule can > be handed over to UEFI subsystem as a file on a specific file system. > > In this patch series, all the related definitions and structures are given > as UEFI specification describes, and basic framework for capsule support > is provided. Currently supported is > * firmware update (Firmware Management Protocol or simply FMP) > > Most of functionality of firmware update is provided by FMP driver and > it can be, by nature, system/platform-specific. So you can and should > implement your own FMP driver(s) based on your system requirements. > Under the current implementation, we provide two basic but generic > drivers with two formats: > * FIT image format (as used in TFTP update and dfu) > * raw image format > > It's totally up to users which one, or both, should be used on users' > system depending on user requirements. > > Quick usage > =========== > 1. You can create a capsule file with the following host command: > > $ mkeficapsule [--fit <fit image> | --raw <raw image>] <output file> > > 2. Put the file under: > > /EFI/UpdateCapsule of UEFI system partition > > 3. Specify firmware storage to be updated in "dfu_alt_info" variable > (Please follow README.dfu for details.) > > ==> env set dfu_alt_info '...' > > 4. After setting up UEFI's OsIndications variable, reboot U-Boot: > > OsIndications <= EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED > > Patch structure > =============== > Patch#1-#4,#12: preparatory patches > Patch#5-#11,#13: main part of implementation > Patch#14-#15: utilities > Patch#16-#17: pytests > > [1] https://git.linaro.org/people/takahiro.akashi/u-boot.git efi/capsule > > Prerequisite patches > ==================== > dfu change by Heinrich[2] > > [2] https://lists.denx.de/pipermail/u-boot/2020-July/420950.html > > Test > ==== > * passed all the pytests which are included in this patch series > on sandbox build locally. > > Please note that the capsule pytest itself won't be run in the CI > partly because some specific configuration for sandbox build is > required and partly because there is a problem with virt-make-fs. > See test_efi_capsule_firmware.py. > > Issues > ====== > * Timing of executing capsules-on-disk > Currently, processing a capsule is triggered only as part of > UEFI subsystem initialization. This means that, for example, > firmware update, may not take place at system booting time and > will potentially be delayed until a first call of any UEFI functions. > => See patch#5 for my proposal > * A bunch of warnings like > WARNING: Use 'if (IS_ENABLED(CONFIG...))' instead of '#if or #ifdef' > where possible > I don't think that fixing those improves anything. > * Add a document in uefi.rst > > TODO's > ====== > (Won't be addressed in this series.) > * capsule authentication > * capsule dependency (dependency expression instruction set) > * loading drivers in a capsule > * handling RESET flag in a capsule and QeuryCapsuleCaps > * full semantics of ESRT (EFI System Resource Table) > * enabling capsule API at runtime > * json capsule > * recovery from update failure > > Changes > ======= > v5 (August 3, 2020) > * removed superfluous type conversion at dfu_write_from_mem_addr() > (Patch#2) > * introduced a common helper function, efi_create_indexed_name() > (Patch#6,#7,#8) > * use efi_[get|set]_variable_int(), if necessary, with READ_ONLY > (Patch#7,#8) > * return EFI_UNSUPPORTED at Patch#7 > * changed the word, number, to 'index' (Patch#7,#8) > * removed 'ifdef CONFIG_EFI_CAPSULE_ON_DISK' from a header (Patch#8) > * initialize 'CapsuleLast' in efi_init_obj_list() (Patch#7,#8) > * added 'const' qualifier for filename argument at > efi_capsule_[read|delete]_file() (Patch#8) > > > > v4 (July 22, 2020) > * rebased to Heinrich's current efi-2020-10 > * rework dfu-related code to align with Heinrich's change (Patch#1,#3) > * change a type of 'addr' argument from int to 'void *' per Sughosh's > comment (Patch#2-#3,#11-#12) > * rework/simplify pytests (Patch#15-#16) > - utilize virt-make-fs > - drop Test Case 1 (updating U-Boot environment data) > - remove useless definitions (MNT_PNT, EFI_CAPSULE_IMAGE_NAME) > - apply autopep8 > > v3 (July 10, 2020) > * rebased to Heinrich's current efi-2020-10-rc1 > * refactor efi_firmware_[fit|raw]_get_image_info() (patch#11,#13) > > v2 (June 17, 2020) > * rebased to v2020.07-rc4 > * add preparatory patches for dfu (Patch#1-#5, #12) > * rework FIT capsule driver to utilize dfu_alt_info instead of CONFIG_xxx > (patch#11) > * extend get_image_info() to correspond to dfu_alt_info > (patch#11) > * add a 'raw binary' capsule support > (patch#13, #17) > * allow multiple capsule formats (with different GUIDs) to be installed > (patch#11, #13) > * extend mkeficapsule command to accept additional parameters, like > version/index/hardware instance for a capsule header info. > (patch#15) > * mkeficapsule can now also generate raw-binary capsule > (patch#16) > * add function descriptions > * apply autopep8 to pytests and fix more against pylint > > v1 (April 27, 2020) > * rebased to v2020.07-rc > * removed already-merged patches (RFC's #1 to #4) > * dropped 'variable update' capsule support (RFC's patch#10) > * dropped 'variable configuration table' support (RFC's patch#11) > (Those two should be discussed separately.) > * add preparatory patches (patch#1/#2) > * fix several build errors > * rename some Kconfig options to be aligned with UEFI specification's terms > (patch#3,4,6,7) > * enforce UpdateCapsule API to be disabled after ExitBootServices (patch#3) > * use config table, runtime_services_supported, instead of variable (patch#3) > * make EFI_CAPSULE_ON_DISK buildable even if UpdateCapsule API is disabled > (patch4) > * support OsIndications, invoking capsule-on-disk only if the variable > indicates so (patch#4) > * introduced EFI_CAPSULE_ON_DISK_EARLY to invoke capsule-on-disk in U-Boot > initialization (patch#4) > * detect capsule files only if they are on EFI system partition (patch#4) > * use printf, rather than EFI_PRINT, in error cases (patch#4) > * use 'header_size' field to retrieve capsule data, adding sanity checks > against capsule size (patch#6) > * call fmpt driver interfaces with EFI_CALL (patch#6) > * remove 'variable update capsule'-related code form mkeficapsule (patch#9) > * add a test case of OsIndications not being set properly (patch#10) > * adjust test scenario for EFI_CAPSULE_ON_DISK_EARLY (patch#10) > * revise pytest scripts (patch#10) > > Initial release as RFC (March 17, 2020) > > AKASHI Takahiro (17): > dfu: rename dfu_tftp_write() to dfu_write_by_name() > dfu: modify an argument type for an address > common: update: add a generic interface for FIT image > dfu: export dfu_list > efi_loader: add option to initialise EFI subsystem early > efi_loader: add efi_create_indexed_name() > efi_loader: define UpdateCapsule api > efi_loader: capsule: add capsule_on_disk support > efi_loader: capsule: add memory range capsule definitions > efi_loader: capsule: support firmware update > efi_loader: add firmware management protocol for FIT image > dfu: add dfu_write_by_alt() > efi_loader: add firmware management protocol for raw image > cmd: add "efidebug capsule" command > tools: add mkeficapsule command for UEFI capsule update > test/py: add a test for uefi firmware update capsule of FIT image > test/py: add a test for uefi firmware update capsule of raw image > > cmd/efidebug.c | 235 +++++ > common/Kconfig | 14 + > common/Makefile | 3 +- > common/board_r.c | 6 + > common/main.c | 4 + > common/update.c | 77 +- > drivers/dfu/Kconfig | 6 + > drivers/dfu/Makefile | 2 +- > drivers/dfu/dfu.c | 2 +- > drivers/dfu/dfu_alt.c | 125 +++ > drivers/dfu/dfu_tftp.c | 65 -- > include/dfu.h | 57 +- > include/efi_api.h | 160 +++ > include/efi_loader.h | 30 + > include/image.h | 12 + > lib/efi_loader/Kconfig | 72 ++ > lib/efi_loader/Makefile | 2 + > lib/efi_loader/efi_capsule.c | 910 ++++++++++++++++++ > lib/efi_loader/efi_firmware.c | 398 ++++++++ > lib/efi_loader/efi_runtime.c | 104 +- > lib/efi_loader/efi_setup.c | 106 +- > test/py/tests/test_efi_capsule/conftest.py | 72 ++ > test/py/tests/test_efi_capsule/defs.py | 12 + > .../test_efi_capsule/test_capsule_firmware.py | 241 +++++ > .../tests/test_efi_capsule/uboot_bin_env.its | 36 + > tools/Makefile | 3 + > tools/mkeficapsule.c | 237 +++++ > 27 files changed, 2851 insertions(+), 140 deletions(-) > create mode 100644 drivers/dfu/dfu_alt.c > delete mode 100644 drivers/dfu/dfu_tftp.c > create mode 100644 lib/efi_loader/efi_capsule.c > create mode 100644 lib/efi_loader/efi_firmware.c > create mode 100644 test/py/tests/test_efi_capsule/conftest.py > create mode 100644 test/py/tests/test_efi_capsule/defs.py > create mode 100644 test/py/tests/test_efi_capsule/test_capsule_firmware.py > create mode 100644 test/py/tests/test_efi_capsule/uboot_bin_env.its > create mode 100644 tools/mkeficapsule.c > > -- > 2.27.0 >
Lukasz, On Tue, Aug 25, 2020 at 02:42:01PM +0900, AKASHI Takahiro wrote: > Lukasz, > > Could you take the time to review my patches, especially > patch#1 to #4 and #12, please? A gentle ping. My patch series are stranded, waiting for your review. The discussion[1] about UPDATE_TFTP has some impact, particularly, on patch#4, my changes on DFU are essentially independent. [1] https://lists.denx.de/pipermail/u-boot/2020-August/424716.html -Takahiro Akashi > They are crucial as UEFI capsule update support relies > on new features introduced by them. > > # I don't think I would re-post this patch series as no changes > have been made yet. > > Thanks, > -Takahiro Akashi > > On Mon, Aug 03, 2020 at 02:43:38PM +0900, AKASHI Takahiro wrote: > > Summary > > ======= > > 'UpdateCapsule' is one of runtime services defined in UEFI specification > > and its aim is to allow a caller (OS) to pass information to the firmware, > > i.e. U-Boot. This is mostly used to update firmware binary on devices by > > instructions from OS. > > > > While 'UpdateCapsule' is a runtime services function, it is, at least > > initially, supported only before exiting boot services alike other runtime > > functions, [Get/]SetVariable. This is because modifying storage which may > > be shared with OS must be carefully designed and there is no general > > assumption that we can do it. > > > > Therefore, we practically support only "capsule on disk"; any capsule can > > be handed over to UEFI subsystem as a file on a specific file system. > > > > In this patch series, all the related definitions and structures are given > > as UEFI specification describes, and basic framework for capsule support > > is provided. Currently supported is > > * firmware update (Firmware Management Protocol or simply FMP) > > > > Most of functionality of firmware update is provided by FMP driver and > > it can be, by nature, system/platform-specific. So you can and should > > implement your own FMP driver(s) based on your system requirements. > > Under the current implementation, we provide two basic but generic > > drivers with two formats: > > * FIT image format (as used in TFTP update and dfu) > > * raw image format > > > > It's totally up to users which one, or both, should be used on users' > > system depending on user requirements. > > > > Quick usage > > =========== > > 1. You can create a capsule file with the following host command: > > > > $ mkeficapsule [--fit <fit image> | --raw <raw image>] <output file> > > > > 2. Put the file under: > > > > /EFI/UpdateCapsule of UEFI system partition > > > > 3. Specify firmware storage to be updated in "dfu_alt_info" variable > > (Please follow README.dfu for details.) > > > > ==> env set dfu_alt_info '...' > > > > 4. After setting up UEFI's OsIndications variable, reboot U-Boot: > > > > OsIndications <= EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED > > > > Patch structure > > =============== > > Patch#1-#4,#12: preparatory patches > > Patch#5-#11,#13: main part of implementation > > Patch#14-#15: utilities > > Patch#16-#17: pytests > > > > [1] https://git.linaro.org/people/takahiro.akashi/u-boot.git efi/capsule > > > > Prerequisite patches > > ==================== > > dfu change by Heinrich[2] > > > > [2] https://lists.denx.de/pipermail/u-boot/2020-July/420950.html > > > > Test > > ==== > > * passed all the pytests which are included in this patch series > > on sandbox build locally. > > > > Please note that the capsule pytest itself won't be run in the CI > > partly because some specific configuration for sandbox build is > > required and partly because there is a problem with virt-make-fs. > > See test_efi_capsule_firmware.py. > > > > Issues > > ====== > > * Timing of executing capsules-on-disk > > Currently, processing a capsule is triggered only as part of > > UEFI subsystem initialization. This means that, for example, > > firmware update, may not take place at system booting time and > > will potentially be delayed until a first call of any UEFI functions. > > => See patch#5 for my proposal > > * A bunch of warnings like > > WARNING: Use 'if (IS_ENABLED(CONFIG...))' instead of '#if or #ifdef' > > where possible > > I don't think that fixing those improves anything. > > * Add a document in uefi.rst > > > > TODO's > > ====== > > (Won't be addressed in this series.) > > * capsule authentication > > * capsule dependency (dependency expression instruction set) > > * loading drivers in a capsule > > * handling RESET flag in a capsule and QeuryCapsuleCaps > > * full semantics of ESRT (EFI System Resource Table) > > * enabling capsule API at runtime > > * json capsule > > * recovery from update failure > > > > Changes > > ======= > > v5 (August 3, 2020) > > * removed superfluous type conversion at dfu_write_from_mem_addr() > > (Patch#2) > > * introduced a common helper function, efi_create_indexed_name() > > (Patch#6,#7,#8) > > * use efi_[get|set]_variable_int(), if necessary, with READ_ONLY > > (Patch#7,#8) > > * return EFI_UNSUPPORTED at Patch#7 > > * changed the word, number, to 'index' (Patch#7,#8) > > * removed 'ifdef CONFIG_EFI_CAPSULE_ON_DISK' from a header (Patch#8) > > * initialize 'CapsuleLast' in efi_init_obj_list() (Patch#7,#8) > > * added 'const' qualifier for filename argument at > > efi_capsule_[read|delete]_file() (Patch#8) > > > > > > > > v4 (July 22, 2020) > > * rebased to Heinrich's current efi-2020-10 > > * rework dfu-related code to align with Heinrich's change (Patch#1,#3) > > * change a type of 'addr' argument from int to 'void *' per Sughosh's > > comment (Patch#2-#3,#11-#12) > > * rework/simplify pytests (Patch#15-#16) > > - utilize virt-make-fs > > - drop Test Case 1 (updating U-Boot environment data) > > - remove useless definitions (MNT_PNT, EFI_CAPSULE_IMAGE_NAME) > > - apply autopep8 > > > > v3 (July 10, 2020) > > * rebased to Heinrich's current efi-2020-10-rc1 > > * refactor efi_firmware_[fit|raw]_get_image_info() (patch#11,#13) > > > > v2 (June 17, 2020) > > * rebased to v2020.07-rc4 > > * add preparatory patches for dfu (Patch#1-#5, #12) > > * rework FIT capsule driver to utilize dfu_alt_info instead of CONFIG_xxx > > (patch#11) > > * extend get_image_info() to correspond to dfu_alt_info > > (patch#11) > > * add a 'raw binary' capsule support > > (patch#13, #17) > > * allow multiple capsule formats (with different GUIDs) to be installed > > (patch#11, #13) > > * extend mkeficapsule command to accept additional parameters, like > > version/index/hardware instance for a capsule header info. > > (patch#15) > > * mkeficapsule can now also generate raw-binary capsule > > (patch#16) > > * add function descriptions > > * apply autopep8 to pytests and fix more against pylint > > > > v1 (April 27, 2020) > > * rebased to v2020.07-rc > > * removed already-merged patches (RFC's #1 to #4) > > * dropped 'variable update' capsule support (RFC's patch#10) > > * dropped 'variable configuration table' support (RFC's patch#11) > > (Those two should be discussed separately.) > > * add preparatory patches (patch#1/#2) > > * fix several build errors > > * rename some Kconfig options to be aligned with UEFI specification's terms > > (patch#3,4,6,7) > > * enforce UpdateCapsule API to be disabled after ExitBootServices (patch#3) > > * use config table, runtime_services_supported, instead of variable (patch#3) > > * make EFI_CAPSULE_ON_DISK buildable even if UpdateCapsule API is disabled > > (patch4) > > * support OsIndications, invoking capsule-on-disk only if the variable > > indicates so (patch#4) > > * introduced EFI_CAPSULE_ON_DISK_EARLY to invoke capsule-on-disk in U-Boot > > initialization (patch#4) > > * detect capsule files only if they are on EFI system partition (patch#4) > > * use printf, rather than EFI_PRINT, in error cases (patch#4) > > * use 'header_size' field to retrieve capsule data, adding sanity checks > > against capsule size (patch#6) > > * call fmpt driver interfaces with EFI_CALL (patch#6) > > * remove 'variable update capsule'-related code form mkeficapsule (patch#9) > > * add a test case of OsIndications not being set properly (patch#10) > > * adjust test scenario for EFI_CAPSULE_ON_DISK_EARLY (patch#10) > > * revise pytest scripts (patch#10) > > > > Initial release as RFC (March 17, 2020) > > > > AKASHI Takahiro (17): > > dfu: rename dfu_tftp_write() to dfu_write_by_name() > > dfu: modify an argument type for an address > > common: update: add a generic interface for FIT image > > dfu: export dfu_list > > efi_loader: add option to initialise EFI subsystem early > > efi_loader: add efi_create_indexed_name() > > efi_loader: define UpdateCapsule api > > efi_loader: capsule: add capsule_on_disk support > > efi_loader: capsule: add memory range capsule definitions > > efi_loader: capsule: support firmware update > > efi_loader: add firmware management protocol for FIT image > > dfu: add dfu_write_by_alt() > > efi_loader: add firmware management protocol for raw image > > cmd: add "efidebug capsule" command > > tools: add mkeficapsule command for UEFI capsule update > > test/py: add a test for uefi firmware update capsule of FIT image > > test/py: add a test for uefi firmware update capsule of raw image > > > > cmd/efidebug.c | 235 +++++ > > common/Kconfig | 14 + > > common/Makefile | 3 +- > > common/board_r.c | 6 + > > common/main.c | 4 + > > common/update.c | 77 +- > > drivers/dfu/Kconfig | 6 + > > drivers/dfu/Makefile | 2 +- > > drivers/dfu/dfu.c | 2 +- > > drivers/dfu/dfu_alt.c | 125 +++ > > drivers/dfu/dfu_tftp.c | 65 -- > > include/dfu.h | 57 +- > > include/efi_api.h | 160 +++ > > include/efi_loader.h | 30 + > > include/image.h | 12 + > > lib/efi_loader/Kconfig | 72 ++ > > lib/efi_loader/Makefile | 2 + > > lib/efi_loader/efi_capsule.c | 910 ++++++++++++++++++ > > lib/efi_loader/efi_firmware.c | 398 ++++++++ > > lib/efi_loader/efi_runtime.c | 104 +- > > lib/efi_loader/efi_setup.c | 106 +- > > test/py/tests/test_efi_capsule/conftest.py | 72 ++ > > test/py/tests/test_efi_capsule/defs.py | 12 + > > .../test_efi_capsule/test_capsule_firmware.py | 241 +++++ > > .../tests/test_efi_capsule/uboot_bin_env.its | 36 + > > tools/Makefile | 3 + > > tools/mkeficapsule.c | 237 +++++ > > 27 files changed, 2851 insertions(+), 140 deletions(-) > > create mode 100644 drivers/dfu/dfu_alt.c > > delete mode 100644 drivers/dfu/dfu_tftp.c > > create mode 100644 lib/efi_loader/efi_capsule.c > > create mode 100644 lib/efi_loader/efi_firmware.c > > create mode 100644 test/py/tests/test_efi_capsule/conftest.py > > create mode 100644 test/py/tests/test_efi_capsule/defs.py > > create mode 100644 test/py/tests/test_efi_capsule/test_capsule_firmware.py > > create mode 100644 test/py/tests/test_efi_capsule/uboot_bin_env.its > > create mode 100644 tools/mkeficapsule.c > > > > -- > > 2.27.0 > >
On Mon, Aug 31, 2020 at 01:32:53PM +0900, AKASHI Takahiro wrote: > Lukasz, > > On Tue, Aug 25, 2020 at 02:42:01PM +0900, AKASHI Takahiro wrote: > > Lukasz, > > > > Could you take the time to review my patches, especially > > patch#1 to #4 and #12, please? > > A gentle ping. > My patch series are stranded, waiting for your review. > > The discussion[1] about UPDATE_TFTP has some impact, particularly, > on patch#4, my changes on DFU are essentially independent. > > [1] https://lists.denx.de/pipermail/u-boot/2020-August/424716.html Do you have time for this review yet Lukasz? While it's too late for this release it would really be good to have this ready to go for when -next opens if possible, or certainly in to -next by the time v2020.10 is released and this can then be merged in. Thanks! -- Tom