diff mbox series

[v5,5/8] test: capsule: Modify the capsule tests to use GUID values for sandbox

Message ID 20220401191759.1670812-6-sughosh.ganu@linaro.org
State Superseded
Headers show
Series efi: capsule: Capsule Update fixes and enhancements | expand

Commit Message

Sughosh Ganu April 1, 2022, 7:17 p.m. UTC
The current UEFI capsule updation code uses two GUID values, one for
FIT images, and one for raw images across platforms. This logic is
being changed to have GUID values per image, per platform. Change the
tests for the capsule update code to reflect this change. The GUID
values now used are the ones specific to the sandbox platform -- one
for the u-boot image, and another for the u-boot environment image.

The UEFI specification does not allow installation of multiple
Firmware Management Protocols(FMP) at the same time. Install the
FMP instance for raw images on the sandbox variant for testing the
capsule update code. Install the FMP instance for the FIT images on
the sandbox64 and sandbox_flattree variant for testing capsule update
for FIT images. This is being done by splitting the capsule update
script for FIT and raw images.

Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
---

Changes since V4: None

 configs/sandbox64_defconfig                   |   1 -
 configs/sandbox_defconfig                     |   1 -
 configs/sandbox_flattree_defconfig            |   5 +
 test/py/tests/test_efi_capsule/conftest.py    |  21 +-
 .../test_capsule_firmware_fit.py              | 186 ++++++++++++++++++
 ...rmware.py => test_capsule_firmware_raw.py} | 159 +++++----------
 6 files changed, 258 insertions(+), 115 deletions(-)
 create mode 100644 test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py
 rename test/py/tests/test_efi_capsule/{test_capsule_firmware.py => test_capsule_firmware_raw.py} (75%)

Comments

Heinrich Schuchardt April 2, 2022, 9:41 a.m. UTC | #1
On 4/1/22 21:17, Sughosh Ganu wrote:
> The current UEFI capsule updation code uses two GUID values, one for
> FIT images, and one for raw images across platforms. This logic is
> being changed to have GUID values per image, per platform. Change the
> tests for the capsule update code to reflect this change. The GUID
> values now used are the ones specific to the sandbox platform -- one
> for the u-boot image, and another for the u-boot environment image.
>
> The UEFI specification does not allow installation of multiple
> Firmware Management Protocols(FMP) at the same time. Install the

This is not what the specification says. The specification has:

"In all cases a specific updatable hardware firmware store must be
represented by exactly one FMP instance."

So you can have one FMP instance for updating U-Boot, another one for
OP-TEE, and a third for TF-A if all three use disjunct firmware stores,
e.g. separate partitions on the SD card.

Best regards

Heinrich

> FMP instance for raw images on the sandbox variant for testing the
> capsule update code. Install the FMP instance for the FIT images on
> the sandbox64 and sandbox_flattree variant for testing capsule update
> for FIT images. This is being done by splitting the capsule update
> script for FIT and raw images.
>
> Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
> ---
>
> Changes since V4: None
>
>   configs/sandbox64_defconfig                   |   1 -
>   configs/sandbox_defconfig                     |   1 -
>   configs/sandbox_flattree_defconfig            |   5 +
>   test/py/tests/test_efi_capsule/conftest.py    |  21 +-
>   .../test_capsule_firmware_fit.py              | 186 ++++++++++++++++++
>   ...rmware.py => test_capsule_firmware_raw.py} | 159 +++++----------
>   6 files changed, 258 insertions(+), 115 deletions(-)
>   create mode 100644 test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py
>   rename test/py/tests/test_efi_capsule/{test_capsule_firmware.py => test_capsule_firmware_raw.py} (75%)
>
> diff --git a/configs/sandbox64_defconfig b/configs/sandbox64_defconfig
> index 7c157a23d0..1a0142795a 100644
> --- a/configs/sandbox64_defconfig
> +++ b/configs/sandbox64_defconfig
> @@ -247,7 +247,6 @@ CONFIG_ERRNO_STR=y
>   CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y
>   CONFIG_EFI_CAPSULE_ON_DISK=y
>   CONFIG_EFI_CAPSULE_FIRMWARE_FIT=y
> -CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y
>   CONFIG_EFI_SECURE_BOOT=y
>   CONFIG_TEST_FDTDEC=y
>   CONFIG_UNIT_TEST=y
> diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
> index ab0e2defee..de2526df09 100644
> --- a/configs/sandbox_defconfig
> +++ b/configs/sandbox_defconfig
> @@ -318,7 +318,6 @@ CONFIG_LZ4=y
>   CONFIG_ERRNO_STR=y
>   CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y
>   CONFIG_EFI_CAPSULE_ON_DISK=y
> -CONFIG_EFI_CAPSULE_FIRMWARE_FIT=y
>   CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y
>   CONFIG_EFI_SECURE_BOOT=y
>   CONFIG_TEST_FDTDEC=y
> diff --git a/configs/sandbox_flattree_defconfig b/configs/sandbox_flattree_defconfig
> index 217b0647bb..bbcf435ac6 100644
> --- a/configs/sandbox_flattree_defconfig
> +++ b/configs/sandbox_flattree_defconfig
> @@ -29,6 +29,7 @@ CONFIG_CMD_BOOTEFI_HELLO=y
>   CONFIG_CMD_ASKENV=y
>   CONFIG_CMD_GREPENV=y
>   CONFIG_CMD_ERASEENV=y
> +CONFIG_CMD_NVEDIT_EFI=y
>   CONFIG_CMD_NVEDIT_INFO=y
>   CONFIG_CMD_NVEDIT_LOAD=y
>   CONFIG_CMD_NVEDIT_SELECT=y
> @@ -210,3 +211,7 @@ CONFIG_HEXDUMP=y
>   CONFIG_UNIT_TEST=y
>   CONFIG_UT_TIME=y
>   CONFIG_UT_DM=y
> +CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y
> +CONFIG_EFI_CAPSULE_ON_DISK=y
> +CONFIG_EFI_CAPSULE_FIRMWARE_FIT=y
> +CONFIG_DFU_SF=y
> diff --git a/test/py/tests/test_efi_capsule/conftest.py b/test/py/tests/test_efi_capsule/conftest.py
> index 9076087a12..d757415c88 100644
> --- a/test/py/tests/test_efi_capsule/conftest.py
> +++ b/test/py/tests/test_efi_capsule/conftest.py
> @@ -72,7 +72,7 @@ def efi_capsule_data(request, u_boot_config):
>
>           # Create capsule files
>           # two regions: one for u-boot.bin and the other for u-boot.env
> -        check_call('cd %s; echo -n u-boot:Old > u-boot.bin.old; echo -n u-boot:New > u-boot.bin.new; echo -n u-boot-env:Old -> u-boot.env.old; echo -n u-boot-env:New > u-boot.env.new' % data_dir,
> +        check_call('cd %s; echo -n u-boot:Old > u-boot.bin.old; echo -n u-boot:New > u-boot.bin.new; echo -n u-boot-env:Old > u-boot.env.old; echo -n u-boot-env:New > u-boot.env.new' % data_dir,
>                      shell=True)
>           check_call('sed -e \"s?BINFILE1?u-boot.bin.new?\" -e \"s?BINFILE2?u-boot.env.new?\" %s/test/py/tests/test_efi_capsule/uboot_bin_env.its > %s/uboot_bin_env.its' %
>                      (u_boot_config.source_dir, data_dir),
> @@ -80,21 +80,29 @@ def efi_capsule_data(request, u_boot_config):
>           check_call('cd %s; %s/tools/mkimage -f uboot_bin_env.its uboot_bin_env.itb' %
>                      (data_dir, u_boot_config.build_dir),
>                      shell=True)
> -        check_call('cd %s; %s/tools/mkeficapsule --index 1 --fit uboot_bin_env.itb Test01' %
> +        check_call('cd %s; %s/tools/mkeficapsule --index 1 --guid 09D7CF52-0720-4710-91D1-08469B7FE9C8 u-boot.bin.new Test01' %
>                      (data_dir, u_boot_config.build_dir),
>                      shell=True)
> -        check_call('cd %s; %s/tools/mkeficapsule --index 1 --raw u-boot.bin.new Test02' %
> +        check_call('cd %s; %s/tools/mkeficapsule --index 2 --guid 5A7021F5-FEF2-48B4-AABA-832E777418C0 u-boot.env.new Test02' %
>                      (data_dir, u_boot_config.build_dir),
>                      shell=True)
> -        check_call('cd %s; %s/tools/mkeficapsule --index 1 --guid E2BB9C06-70E9-4B14-97A3-5A7913176E3F u-boot.bin.new Test03' %
> +        check_call('cd %s; %s/tools/mkeficapsule --index 1 --guid 058B7D83-50D5-4C47-A195-60D86AD341C4 u-boot.bin.new Test03' %
>                      (data_dir, u_boot_config.build_dir),
>                      shell=True)
> +        check_call('cd %s; %s/tools/mkeficapsule --index 1 --guid 3673B45D-6A7C-46F3-9E60-ADABB03F7937 uboot_bin_env.itb Test04' %
> +                   (data_dir, u_boot_config.build_dir),
> +                   shell=True)
> +        check_call('cd %s; %s/tools/mkeficapsule --index 1 --guid  058B7D83-50D5-4C47-A195-60D86AD341C4 uboot_bin_env.itb Test05' %
> +                   (data_dir, u_boot_config.build_dir),
> +                   shell=True)
> +
>           if capsule_auth_enabled:
>               # firmware signed with proper key
>               check_call('cd %s; '
>                          '%s/tools/mkeficapsule --index 1 --monotonic-count 1 '
>                               '--private-key SIGNER.key --certificate SIGNER.crt '
> -                            '--raw u-boot.bin.new Test11'
> +                            '--guid 09D7DF52-0720-4710-91D1-08469B7FE9C8 '
> +                            'u-boot.bin.new Test11'
>                          % (data_dir, u_boot_config.build_dir),
>                          shell=True)
>               # firmware signed with *mal* key
> @@ -102,7 +110,8 @@ def efi_capsule_data(request, u_boot_config):
>                          '%s/tools/mkeficapsule --index 1 --monotonic-count 1 '
>                               '--private-key SIGNER2.key '
>                               '--certificate SIGNER2.crt '
> -                            '--raw u-boot.bin.new Test12'
> +                            '--guid 09D7DF52-0720-4710-91D1-08469B7FE9C8 '
> +                            'u-boot.bin.new Test12'
>                          % (data_dir, u_boot_config.build_dir),
>                          shell=True)
>
> diff --git a/test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py b/test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py
> new file mode 100644
> index 0000000000..2c94df6c5c
> --- /dev/null
> +++ b/test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py
> @@ -0,0 +1,186 @@
> +# SPDX-License-Identifier:      GPL-2.0+
> +# Copyright (c) 2020, Linaro Limited
> +# Author: AKASHI Takahiro <takahiro.akashi@linaro.org>
> +#
> +# U-Boot UEFI: Firmware Update Test
> +
> +"""
> +This test verifies capsule-on-disk firmware update for FIT images
> +"""
> +
> +from subprocess import check_call, check_output, CalledProcessError
> +import pytest
> +from capsule_defs import *
> +
> +
> +@pytest.mark.boardspec('sandbox64')
> +@pytest.mark.boardspec('sandbox_flattree')
> +@pytest.mark.buildconfigspec('efi_capsule_firmware_fit')
> +@pytest.mark.buildconfigspec('efi_capsule_on_disk')
> +@pytest.mark.buildconfigspec('dfu')
> +@pytest.mark.buildconfigspec('dfu_sf')
> +@pytest.mark.buildconfigspec('cmd_efidebug')
> +@pytest.mark.buildconfigspec('cmd_fat')
> +@pytest.mark.buildconfigspec('cmd_memory')
> +@pytest.mark.buildconfigspec('cmd_nvedit_efi')
> +@pytest.mark.buildconfigspec('cmd_sf')
> +@pytest.mark.slow
> +class TestEfiCapsuleFirmwareFit(object):
> +    def test_efi_capsule_fw1(
> +            self, u_boot_config, u_boot_console, efi_capsule_data):
> +        """
> +        Test Case 1 - Update U-Boot and U-Boot environment on SPI Flash
> +                      but with an incorrect GUID value in the capsule
> +                      No update should happen
> +                      0x100000-0x150000: U-Boot binary (but dummy)
> +                      0x150000-0x200000: U-Boot environment (but dummy)
> +        """
> +        disk_img = efi_capsule_data
> +        with u_boot_console.log.section('Test Case 1-a, before reboot'):
> +            output = u_boot_console.run_command_list([
> +                'host bind 0 %s' % disk_img,
> +                'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
> +                'efidebug boot order 1',
> +                'env set -e -nv -bs -rt OsIndications =0x0000000000000004',
> +                'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
> +                'env save'])
> +
> +            # initialize contents
> +            output = u_boot_console.run_command_list([
> +                'sf probe 0:0',
> +                'fatload host 0:1 4000000 %s/u-boot.bin.old' % CAPSULE_DATA_DIR,
> +                'sf write 4000000 100000 10',
> +                'sf read 5000000 100000 10',
> +                'md.b 5000000 10'])
> +            assert 'Old' in ''.join(output)
> +            output = u_boot_console.run_command_list([
> +                'sf probe 0:0',
> +                'fatload host 0:1 4000000 %s/u-boot.env.old' % CAPSULE_DATA_DIR,
> +                'sf write 4000000 150000 10',
> +                'sf read 5000000 150000 10',
> +                'md.b 5000000 10'])
> +            assert 'Old' in ''.join(output)
> +
> +            # place a capsule file
> +            output = u_boot_console.run_command_list([
> +                'fatload host 0:1 4000000 %s/Test05' % CAPSULE_DATA_DIR,
> +                'fatwrite host 0:1 4000000 %s/Test05 $filesize' % CAPSULE_INSTALL_DIR,
> +                'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> +            assert 'Test05' in ''.join(output)
> +
> +        capsule_early = u_boot_config.buildconfig.get(
> +            'config_efi_capsule_on_disk_early')
> +        capsule_auth = u_boot_config.buildconfig.get(
> +            'config_efi_capsule_authenticate')
> +
> +        # reboot
> +        u_boot_console.restart_uboot(expect_reset = capsule_early)
> +
> +        with u_boot_console.log.section('Test Case 1-b, after reboot'):
> +            if not capsule_early:
> +                # make sure that dfu_alt_info exists even persistent variables
> +                # are not available.
> +                output = u_boot_console.run_command_list([
> +                    'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
> +                    'host bind 0 %s' % disk_img,
> +                    'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> +                assert 'Test05' in ''.join(output)
> +
> +                # need to run uefi command to initiate capsule handling
> +                output = u_boot_console.run_command(
> +                    'env print -e Capsule0000', wait_for_reboot = True)
> +
> +            output = u_boot_console.run_command_list([
> +                'sf probe 0:0',
> +                'sf read 4000000 100000 10',
> +                'md.b 4000000 10'])
> +            assert 'u-boot:Old' in ''.join(output)
> +
> +            output = u_boot_console.run_command_list([
> +                'sf read 4000000 150000 10',
> +                'md.b 4000000 10'])
> +            assert 'u-boot-env:Old' in ''.join(output)
> +
> +    def test_efi_capsule_fw2(
> +            self, u_boot_config, u_boot_console, efi_capsule_data):
> +        """
> +        Test Case 2 - Update U-Boot and U-Boot environment on SPI Flash
> +                      0x100000-0x150000: U-Boot binary (but dummy)
> +                      0x150000-0x200000: U-Boot environment (but dummy)
> +        """
> +        disk_img = efi_capsule_data
> +        with u_boot_console.log.section('Test Case 2-a, before reboot'):
> +            output = u_boot_console.run_command_list([
> +                'host bind 0 %s' % disk_img,
> +                'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
> +                'efidebug boot order 1',
> +                'env set -e -nv -bs -rt OsIndications =0x0000000000000004',
> +                'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
> +                'env save'])
> +
> +            # initialize contents
> +            output = u_boot_console.run_command_list([
> +                'sf probe 0:0',
> +                'fatload host 0:1 4000000 %s/u-boot.bin.old' % CAPSULE_DATA_DIR,
> +                'sf write 4000000 100000 10',
> +                'sf read 5000000 100000 10',
> +                'md.b 5000000 10'])
> +            assert 'Old' in ''.join(output)
> +            output = u_boot_console.run_command_list([
> +                'sf probe 0:0',
> +                'fatload host 0:1 4000000 %s/u-boot.env.old' % CAPSULE_DATA_DIR,
> +                'sf write 4000000 150000 10',
> +                'sf read 5000000 150000 10',
> +                'md.b 5000000 10'])
> +            assert 'Old' in ''.join(output)
> +
> +            # place a capsule file
> +            output = u_boot_console.run_command_list([
> +                'fatload host 0:1 4000000 %s/Test04' % CAPSULE_DATA_DIR,
> +                'fatwrite host 0:1 4000000 %s/Test04 $filesize' % CAPSULE_INSTALL_DIR,
> +                'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> +            assert 'Test04' in ''.join(output)
> +
> +        capsule_early = u_boot_config.buildconfig.get(
> +            'config_efi_capsule_on_disk_early')
> +        capsule_auth = u_boot_config.buildconfig.get(
> +            'config_efi_capsule_authenticate')
> +
> +        # reboot
> +        u_boot_console.restart_uboot(expect_reset = capsule_early)
> +
> +        with u_boot_console.log.section('Test Case 2-b, after reboot'):
> +            if not capsule_early:
> +                # make sure that dfu_alt_info exists even persistent variables
> +                # are not available.
> +                output = u_boot_console.run_command_list([
> +                    'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
> +                    'host bind 0 %s' % disk_img,
> +                    'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> +                assert 'Test04' in ''.join(output)
> +
> +                # need to run uefi command to initiate capsule handling
> +                output = u_boot_console.run_command(
> +                    'env print -e Capsule0000', wait_for_reboot = True)
> +
> +            output = u_boot_console.run_command_list([
> +                'host bind 0 %s' % disk_img,
> +                'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> +            assert 'Test04' not in ''.join(output)
> +
> +            output = u_boot_console.run_command_list([
> +                'sf probe 0:0',
> +                'sf read 4000000 100000 10',
> +                'md.b 4000000 10'])
> +            if capsule_auth:
> +                assert 'u-boot:Old' in ''.join(output)
> +            else:
> +                assert 'u-boot:New' in ''.join(output)
> +
> +            output = u_boot_console.run_command_list([
> +                'sf read 4000000 150000 10',
> +                'md.b 4000000 10'])
> +            if capsule_auth:
> +                assert 'u-boot-env:Old' in ''.join(output)
> +            else:
> +                assert 'u-boot-env:New' in ''.join(output)
> diff --git a/test/py/tests/test_efi_capsule/test_capsule_firmware.py b/test/py/tests/test_efi_capsule/test_capsule_firmware_raw.py
> similarity index 75%
> rename from test/py/tests/test_efi_capsule/test_capsule_firmware.py
> rename to test/py/tests/test_efi_capsule/test_capsule_firmware_raw.py
> index 1dcf1c70f4..c9eaf5e6d8 100644
> --- a/test/py/tests/test_efi_capsule/test_capsule_firmware.py
> +++ b/test/py/tests/test_efi_capsule/test_capsule_firmware_raw.py
> @@ -5,7 +5,7 @@
>   # U-Boot UEFI: Firmware Update Test
>
>   """
> -This test verifies capsule-on-disk firmware update
> +This test verifies capsule-on-disk firmware update for raw images
>   """
>
>   from subprocess import check_call, check_output, CalledProcessError
> @@ -14,7 +14,6 @@ from capsule_defs import *
>
>
>   @pytest.mark.boardspec('sandbox')
> -@pytest.mark.buildconfigspec('efi_capsule_firmware_fit')
>   @pytest.mark.buildconfigspec('efi_capsule_firmware_raw')
>   @pytest.mark.buildconfigspec('efi_capsule_on_disk')
>   @pytest.mark.buildconfigspec('dfu')
> @@ -25,12 +24,12 @@ from capsule_defs import *
>   @pytest.mark.buildconfigspec('cmd_nvedit_efi')
>   @pytest.mark.buildconfigspec('cmd_sf')
>   @pytest.mark.slow
> -class TestEfiCapsuleFirmwareFit(object):
> +class TestEfiCapsuleFirmwareRaw(object):
>       def test_efi_capsule_fw1(
>               self, u_boot_config, u_boot_console, efi_capsule_data):
>           """
>           Test Case 1 - Update U-Boot and U-Boot environment on SPI Flash
> -                      but with OsIndications unset
> +                      but with an incorrect GUID value in the capsule
>                         No update should happen
>                         0x100000-0x150000: U-Boot binary (but dummy)
>                         0x150000-0x200000: U-Boot environment (but dummy)
> @@ -41,7 +40,7 @@ class TestEfiCapsuleFirmwareFit(object):
>                   'host bind 0 %s' % disk_img,
>                   'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
>                   'efidebug boot order 1',
> -                'env set -e OsIndications',
> +                'env set -e -nv -bs -rt OsIndications =0x0000000000000004',
>                   'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
>                   'env save'])
>
> @@ -63,16 +62,17 @@ class TestEfiCapsuleFirmwareFit(object):
>
>               # place a capsule file
>               output = u_boot_console.run_command_list([
> -                'fatload host 0:1 4000000 %s/Test01' % CAPSULE_DATA_DIR,
> -                'fatwrite host 0:1 4000000 %s/Test01 $filesize' % CAPSULE_INSTALL_DIR,
> +                'fatload host 0:1 4000000 %s/Test03' % CAPSULE_DATA_DIR,
> +                'fatwrite host 0:1 4000000 %s/Test03 $filesize' % CAPSULE_INSTALL_DIR,
>                   'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> -            assert 'Test01' in ''.join(output)
> +            assert 'Test03' in ''.join(output)
>
>           # reboot
>           u_boot_console.restart_uboot()
>
>           capsule_early = u_boot_config.buildconfig.get(
>               'config_efi_capsule_on_disk_early')
> +
>           with u_boot_console.log.section('Test Case 1-b, after reboot'):
>               if not capsule_early:
>                   # make sure that dfu_alt_info exists even persistent variables
> @@ -81,17 +81,12 @@ class TestEfiCapsuleFirmwareFit(object):
>                       'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
>                       'host bind 0 %s' % disk_img,
>                       'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> -                assert 'Test01' in ''.join(output)
> +                assert 'Test03' in ''.join(output)
>
>                   # need to run uefi command to initiate capsule handling
>                   output = u_boot_console.run_command(
>                       'env print -e Capsule0000')
>
> -            output = u_boot_console.run_command_list([
> -                'host bind 0 %s' % disk_img,
> -                'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> -            assert 'Test01' in ''.join(output)
> -
>               output = u_boot_console.run_command_list([
>                   'sf probe 0:0',
>                   'sf read 4000000 100000 10',
> @@ -107,6 +102,8 @@ class TestEfiCapsuleFirmwareFit(object):
>               self, u_boot_config, u_boot_console, efi_capsule_data):
>           """
>           Test Case 2 - Update U-Boot and U-Boot environment on SPI Flash
> +                      but with OsIndications unset
> +                      No update should happen
>                         0x100000-0x150000: U-Boot binary (but dummy)
>                         0x150000-0x200000: U-Boot environment (but dummy)
>           """
> @@ -116,7 +113,7 @@ class TestEfiCapsuleFirmwareFit(object):
>                   'host bind 0 %s' % disk_img,
>                   'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
>                   'efidebug boot order 1',
> -                'env set -e -nv -bs -rt OsIndications =0x0000000000000004',
> +                'env set -e OsIndications',
>                   'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
>                   'env save'])
>
> @@ -136,21 +133,24 @@ class TestEfiCapsuleFirmwareFit(object):
>                   'md.b 5000000 10'])
>               assert 'Old' in ''.join(output)
>
> -            # place a capsule file
> +            # place the capsule files
>               output = u_boot_console.run_command_list([
>                   'fatload host 0:1 4000000 %s/Test01' % CAPSULE_DATA_DIR,
>                   'fatwrite host 0:1 4000000 %s/Test01 $filesize' % CAPSULE_INSTALL_DIR,
>                   'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
>               assert 'Test01' in ''.join(output)
>
> -        capsule_early = u_boot_config.buildconfig.get(
> -            'config_efi_capsule_on_disk_early')
> -        capsule_auth = u_boot_config.buildconfig.get(
> -            'config_efi_capsule_authenticate')
> +            output = u_boot_console.run_command_list([
> +                'fatload host 0:1 4000000 %s/Test02' % CAPSULE_DATA_DIR,
> +                'fatwrite host 0:1 4000000 %s/Test02 $filesize' % CAPSULE_INSTALL_DIR,
> +                'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> +            assert 'Test02' in ''.join(output)
>
>           # reboot
> -        u_boot_console.restart_uboot(expect_reset = capsule_early)
> +        u_boot_console.restart_uboot()
>
> +        capsule_early = u_boot_config.buildconfig.get(
> +            'config_efi_capsule_on_disk_early')
>           with u_boot_console.log.section('Test Case 2-b, after reboot'):
>               if not capsule_early:
>                   # make sure that dfu_alt_info exists even persistent variables
> @@ -160,32 +160,28 @@ class TestEfiCapsuleFirmwareFit(object):
>                       'host bind 0 %s' % disk_img,
>                       'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
>                   assert 'Test01' in ''.join(output)
> +                assert 'Test02' in ''.join(output)
>
>                   # need to run uefi command to initiate capsule handling
>                   output = u_boot_console.run_command(
> -                    'env print -e Capsule0000', wait_for_reboot = True)
> +                    'env print -e Capsule0000')
>
>               output = u_boot_console.run_command_list([
>                   'host bind 0 %s' % disk_img,
>                   'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> -            assert 'Test01' not in ''.join(output)
> +            assert 'Test01' in ''.join(output)
> +            assert 'Test02' in ''.join(output)
>
>               output = u_boot_console.run_command_list([
>                   'sf probe 0:0',
>                   'sf read 4000000 100000 10',
>                   'md.b 4000000 10'])
> -            if capsule_auth:
> -                assert 'u-boot:Old' in ''.join(output)
> -            else:
> -                assert 'u-boot:New' in ''.join(output)
> +            assert 'u-boot:Old' in ''.join(output)
>
>               output = u_boot_console.run_command_list([
>                   'sf read 4000000 150000 10',
>                   'md.b 4000000 10'])
> -            if capsule_auth:
> -                assert 'u-boot-env:Old' in ''.join(output)
> -            else:
> -                assert 'u-boot-env:New' in ''.join(output)
> +            assert 'u-boot-env:Old' in ''.join(output)
>
>       def test_efi_capsule_fw3(
>               self, u_boot_config, u_boot_console, efi_capsule_data):
> @@ -203,7 +199,7 @@ class TestEfiCapsuleFirmwareFit(object):
>                   'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
>                   'env save'])
>
> -            # initialize content
> +            # initialize contents
>               output = u_boot_console.run_command_list([
>                   'sf probe 0:0',
>                   'fatload host 0:1 4000000 %s/u-boot.bin.old' % CAPSULE_DATA_DIR,
> @@ -212,7 +208,21 @@ class TestEfiCapsuleFirmwareFit(object):
>                   'md.b 5000000 10'])
>               assert 'Old' in ''.join(output)
>
> -            # place a capsule file
> +            output = u_boot_console.run_command_list([
> +                'sf probe 0:0',
> +                'fatload host 0:1 4000000 %s/u-boot.env.old' % CAPSULE_DATA_DIR,
> +                'sf write 4000000 150000 10',
> +                'sf read 5000000 100000 10',
> +                'md.b 5000000 10'])
> +            assert 'Old' in ''.join(output)
> +
> +            # place the capsule files
> +            output = u_boot_console.run_command_list([
> +                'fatload host 0:1 4000000 %s/Test01' % CAPSULE_DATA_DIR,
> +                'fatwrite host 0:1 4000000 %s/Test01 $filesize' % CAPSULE_INSTALL_DIR,
> +                'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> +            assert 'Test01' in ''.join(output)
> +
>               output = u_boot_console.run_command_list([
>                   'fatload host 0:1 4000000 %s/Test02' % CAPSULE_DATA_DIR,
>                   'fatwrite host 0:1 4000000 %s/Test02 $filesize' % CAPSULE_INSTALL_DIR,
> @@ -235,6 +245,7 @@ class TestEfiCapsuleFirmwareFit(object):
>                       'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
>                       'host bind 0 %s' % disk_img,
>                       'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> +                assert 'Test01' in ''.join(output)
>                   assert 'Test02' in ''.join(output)
>
>                   # need to run uefi command to initiate capsule handling
> @@ -246,15 +257,16 @@ class TestEfiCapsuleFirmwareFit(object):
>                   'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
>                   'efidebug capsule esrt'])
>
> -            # ensure that EFI_FIRMWARE_IMAGE_TYPE_UBOOT_FIT_GUID is in the ESRT.
> -            assert 'AE13FF2D-9AD4-4E25-9AC8-6D80B3B22147' in ''.join(output)
> +            # ensure that SANDBOX_UBOOT_ENV_IMAGE_GUID is in the ESRT.
> +            assert '5A7021F5-FEF2-48B4-AABA-832E777418C0' in ''.join(output)
>
> -            # ensure that  EFI_FIRMWARE_IMAGE_TYPE_UBOOT_RAW_GUID is in the ESRT.
> -            assert 'E2BB9C06-70E9-4B14-97A3-5A7913176E3F' in ''.join(output)
> +            # ensure that SANDBOX_UBOOT_IMAGE_GUID is in the ESRT.
> +            assert '09D7CF52-0720-4710-91D1-08469B7FE9C8' in ''.join(output)
>
>               output = u_boot_console.run_command_list([
>                   'host bind 0 %s' % disk_img,
>                   'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> +            assert 'Test01' not in ''.join(output)
>               assert 'Test02' not in ''.join(output)
>
>               output = u_boot_console.run_command_list([
> @@ -266,78 +278,11 @@ class TestEfiCapsuleFirmwareFit(object):
>               else:
>                   assert 'u-boot:New' in ''.join(output)
>
> -    def test_efi_capsule_fw4(
> -            self, u_boot_config, u_boot_console, efi_capsule_data):
> -        """
> -        Test Case 4 - Test "--guid" option of mkeficapsule
> -                      The test scenario is the same as Case 3.
> -        """
> -        disk_img = efi_capsule_data
> -        with u_boot_console.log.section('Test Case 4-a, before reboot'):
> -            output = u_boot_console.run_command_list([
> -                'host bind 0 %s' % disk_img,
> -                'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
> -                'efidebug boot order 1',
> -                'env set -e -nv -bs -rt OsIndications =0x0000000000000004',
> -                'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
> -                'env save'])
> -
> -            # initialize content
> -            output = u_boot_console.run_command_list([
> -                'sf probe 0:0',
> -                'fatload host 0:1 4000000 %s/u-boot.bin.old' % CAPSULE_DATA_DIR,
> -                'sf write 4000000 100000 10',
> -                'sf read 5000000 100000 10',
> -                'md.b 5000000 10'])
> -            assert 'Old' in ''.join(output)
> -
> -            # place a capsule file
> -            output = u_boot_console.run_command_list([
> -                'fatload host 0:1 4000000 %s/Test03' % CAPSULE_DATA_DIR,
> -                'fatwrite host 0:1 4000000 %s/Test03 $filesize' % CAPSULE_INSTALL_DIR,
> -                'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> -            assert 'Test03' in ''.join(output)
> -
> -        capsule_early = u_boot_config.buildconfig.get(
> -            'config_efi_capsule_on_disk_early')
> -        capsule_auth = u_boot_config.buildconfig.get(
> -            'config_efi_capsule_authenticate')
> -
> -        # reboot
> -        u_boot_console.restart_uboot(expect_reset = capsule_early)
> -
> -        with u_boot_console.log.section('Test Case 4-b, after reboot'):
> -            if not capsule_early:
> -                # make sure that dfu_alt_info exists even persistent variables
> -                # are not available.
> -                output = u_boot_console.run_command_list([
> -                    'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
> -                    'host bind 0 %s' % disk_img,
> -                    'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> -                assert 'Test03' in ''.join(output)
> -
> -                # need to run uefi command to initiate capsule handling
> -                output = u_boot_console.run_command(
> -                    'env print -e Capsule0000', wait_for_reboot = True)
> -
> -            # make sure the dfu_alt_info exists because it is required for making ESRT.
> -            output = u_boot_console.run_command_list([
> -                'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
> -                'efidebug capsule esrt'])
> -
> -            # ensure that  EFI_FIRMWARE_IMAGE_TYPE_UBOOT_RAW_GUID is in the ESRT.
> -            assert 'E2BB9C06-70E9-4B14-97A3-5A7913176E3F' in ''.join(output)
> -
> -            output = u_boot_console.run_command_list([
> -                'host bind 0 %s' % disk_img,
> -                'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> -            assert 'Test03' not in ''.join(output)
> -
>               output = u_boot_console.run_command_list([
>                   'sf probe 0:0',
> -                'sf read 4000000 100000 10',
> +                'sf read 4000000 150000 10',
>                   'md.b 4000000 10'])
>               if capsule_auth:
> -                assert 'u-boot:Old' in ''.join(output)
> +                assert 'u-boot-env:Old' in ''.join(output)
>               else:
> -                assert 'u-boot:New' in ''.join(output)
> +                assert 'u-boot-env:New' in ''.join(output)
diff mbox series

Patch

diff --git a/configs/sandbox64_defconfig b/configs/sandbox64_defconfig
index 7c157a23d0..1a0142795a 100644
--- a/configs/sandbox64_defconfig
+++ b/configs/sandbox64_defconfig
@@ -247,7 +247,6 @@  CONFIG_ERRNO_STR=y
 CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y
 CONFIG_EFI_CAPSULE_ON_DISK=y
 CONFIG_EFI_CAPSULE_FIRMWARE_FIT=y
-CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y
 CONFIG_EFI_SECURE_BOOT=y
 CONFIG_TEST_FDTDEC=y
 CONFIG_UNIT_TEST=y
diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
index ab0e2defee..de2526df09 100644
--- a/configs/sandbox_defconfig
+++ b/configs/sandbox_defconfig
@@ -318,7 +318,6 @@  CONFIG_LZ4=y
 CONFIG_ERRNO_STR=y
 CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y
 CONFIG_EFI_CAPSULE_ON_DISK=y
-CONFIG_EFI_CAPSULE_FIRMWARE_FIT=y
 CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y
 CONFIG_EFI_SECURE_BOOT=y
 CONFIG_TEST_FDTDEC=y
diff --git a/configs/sandbox_flattree_defconfig b/configs/sandbox_flattree_defconfig
index 217b0647bb..bbcf435ac6 100644
--- a/configs/sandbox_flattree_defconfig
+++ b/configs/sandbox_flattree_defconfig
@@ -29,6 +29,7 @@  CONFIG_CMD_BOOTEFI_HELLO=y
 CONFIG_CMD_ASKENV=y
 CONFIG_CMD_GREPENV=y
 CONFIG_CMD_ERASEENV=y
+CONFIG_CMD_NVEDIT_EFI=y
 CONFIG_CMD_NVEDIT_INFO=y
 CONFIG_CMD_NVEDIT_LOAD=y
 CONFIG_CMD_NVEDIT_SELECT=y
@@ -210,3 +211,7 @@  CONFIG_HEXDUMP=y
 CONFIG_UNIT_TEST=y
 CONFIG_UT_TIME=y
 CONFIG_UT_DM=y
+CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y
+CONFIG_EFI_CAPSULE_ON_DISK=y
+CONFIG_EFI_CAPSULE_FIRMWARE_FIT=y
+CONFIG_DFU_SF=y
diff --git a/test/py/tests/test_efi_capsule/conftest.py b/test/py/tests/test_efi_capsule/conftest.py
index 9076087a12..d757415c88 100644
--- a/test/py/tests/test_efi_capsule/conftest.py
+++ b/test/py/tests/test_efi_capsule/conftest.py
@@ -72,7 +72,7 @@  def efi_capsule_data(request, u_boot_config):
 
         # Create capsule files
         # two regions: one for u-boot.bin and the other for u-boot.env
-        check_call('cd %s; echo -n u-boot:Old > u-boot.bin.old; echo -n u-boot:New > u-boot.bin.new; echo -n u-boot-env:Old -> u-boot.env.old; echo -n u-boot-env:New > u-boot.env.new' % data_dir,
+        check_call('cd %s; echo -n u-boot:Old > u-boot.bin.old; echo -n u-boot:New > u-boot.bin.new; echo -n u-boot-env:Old > u-boot.env.old; echo -n u-boot-env:New > u-boot.env.new' % data_dir,
                    shell=True)
         check_call('sed -e \"s?BINFILE1?u-boot.bin.new?\" -e \"s?BINFILE2?u-boot.env.new?\" %s/test/py/tests/test_efi_capsule/uboot_bin_env.its > %s/uboot_bin_env.its' %
                    (u_boot_config.source_dir, data_dir),
@@ -80,21 +80,29 @@  def efi_capsule_data(request, u_boot_config):
         check_call('cd %s; %s/tools/mkimage -f uboot_bin_env.its uboot_bin_env.itb' %
                    (data_dir, u_boot_config.build_dir),
                    shell=True)
-        check_call('cd %s; %s/tools/mkeficapsule --index 1 --fit uboot_bin_env.itb Test01' %
+        check_call('cd %s; %s/tools/mkeficapsule --index 1 --guid 09D7CF52-0720-4710-91D1-08469B7FE9C8 u-boot.bin.new Test01' %
                    (data_dir, u_boot_config.build_dir),
                    shell=True)
-        check_call('cd %s; %s/tools/mkeficapsule --index 1 --raw u-boot.bin.new Test02' %
+        check_call('cd %s; %s/tools/mkeficapsule --index 2 --guid 5A7021F5-FEF2-48B4-AABA-832E777418C0 u-boot.env.new Test02' %
                    (data_dir, u_boot_config.build_dir),
                    shell=True)
-        check_call('cd %s; %s/tools/mkeficapsule --index 1 --guid E2BB9C06-70E9-4B14-97A3-5A7913176E3F u-boot.bin.new Test03' %
+        check_call('cd %s; %s/tools/mkeficapsule --index 1 --guid 058B7D83-50D5-4C47-A195-60D86AD341C4 u-boot.bin.new Test03' %
                    (data_dir, u_boot_config.build_dir),
                    shell=True)
+        check_call('cd %s; %s/tools/mkeficapsule --index 1 --guid 3673B45D-6A7C-46F3-9E60-ADABB03F7937 uboot_bin_env.itb Test04' %
+                   (data_dir, u_boot_config.build_dir),
+                   shell=True)
+        check_call('cd %s; %s/tools/mkeficapsule --index 1 --guid  058B7D83-50D5-4C47-A195-60D86AD341C4 uboot_bin_env.itb Test05' %
+                   (data_dir, u_boot_config.build_dir),
+                   shell=True)
+
         if capsule_auth_enabled:
             # firmware signed with proper key
             check_call('cd %s; '
                        '%s/tools/mkeficapsule --index 1 --monotonic-count 1 '
                             '--private-key SIGNER.key --certificate SIGNER.crt '
-                            '--raw u-boot.bin.new Test11'
+                            '--guid 09D7DF52-0720-4710-91D1-08469B7FE9C8 '
+                            'u-boot.bin.new Test11'
                        % (data_dir, u_boot_config.build_dir),
                        shell=True)
             # firmware signed with *mal* key
@@ -102,7 +110,8 @@  def efi_capsule_data(request, u_boot_config):
                        '%s/tools/mkeficapsule --index 1 --monotonic-count 1 '
                             '--private-key SIGNER2.key '
                             '--certificate SIGNER2.crt '
-                            '--raw u-boot.bin.new Test12'
+                            '--guid 09D7DF52-0720-4710-91D1-08469B7FE9C8 '
+                            'u-boot.bin.new Test12'
                        % (data_dir, u_boot_config.build_dir),
                        shell=True)
 
diff --git a/test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py b/test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py
new file mode 100644
index 0000000000..2c94df6c5c
--- /dev/null
+++ b/test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py
@@ -0,0 +1,186 @@ 
+# SPDX-License-Identifier:      GPL-2.0+
+# Copyright (c) 2020, Linaro Limited
+# Author: AKASHI Takahiro <takahiro.akashi@linaro.org>
+#
+# U-Boot UEFI: Firmware Update Test
+
+"""
+This test verifies capsule-on-disk firmware update for FIT images
+"""
+
+from subprocess import check_call, check_output, CalledProcessError
+import pytest
+from capsule_defs import *
+
+
+@pytest.mark.boardspec('sandbox64')
+@pytest.mark.boardspec('sandbox_flattree')
+@pytest.mark.buildconfigspec('efi_capsule_firmware_fit')
+@pytest.mark.buildconfigspec('efi_capsule_on_disk')
+@pytest.mark.buildconfigspec('dfu')
+@pytest.mark.buildconfigspec('dfu_sf')
+@pytest.mark.buildconfigspec('cmd_efidebug')
+@pytest.mark.buildconfigspec('cmd_fat')
+@pytest.mark.buildconfigspec('cmd_memory')
+@pytest.mark.buildconfigspec('cmd_nvedit_efi')
+@pytest.mark.buildconfigspec('cmd_sf')
+@pytest.mark.slow
+class TestEfiCapsuleFirmwareFit(object):
+    def test_efi_capsule_fw1(
+            self, u_boot_config, u_boot_console, efi_capsule_data):
+        """
+        Test Case 1 - Update U-Boot and U-Boot environment on SPI Flash
+                      but with an incorrect GUID value in the capsule
+                      No update should happen
+                      0x100000-0x150000: U-Boot binary (but dummy)
+                      0x150000-0x200000: U-Boot environment (but dummy)
+        """
+        disk_img = efi_capsule_data
+        with u_boot_console.log.section('Test Case 1-a, before reboot'):
+            output = u_boot_console.run_command_list([
+                'host bind 0 %s' % disk_img,
+                'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
+                'efidebug boot order 1',
+                'env set -e -nv -bs -rt OsIndications =0x0000000000000004',
+                'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
+                'env save'])
+
+            # initialize contents
+            output = u_boot_console.run_command_list([
+                'sf probe 0:0',
+                'fatload host 0:1 4000000 %s/u-boot.bin.old' % CAPSULE_DATA_DIR,
+                'sf write 4000000 100000 10',
+                'sf read 5000000 100000 10',
+                'md.b 5000000 10'])
+            assert 'Old' in ''.join(output)
+            output = u_boot_console.run_command_list([
+                'sf probe 0:0',
+                'fatload host 0:1 4000000 %s/u-boot.env.old' % CAPSULE_DATA_DIR,
+                'sf write 4000000 150000 10',
+                'sf read 5000000 150000 10',
+                'md.b 5000000 10'])
+            assert 'Old' in ''.join(output)
+
+            # place a capsule file
+            output = u_boot_console.run_command_list([
+                'fatload host 0:1 4000000 %s/Test05' % CAPSULE_DATA_DIR,
+                'fatwrite host 0:1 4000000 %s/Test05 $filesize' % CAPSULE_INSTALL_DIR,
+                'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
+            assert 'Test05' in ''.join(output)
+
+        capsule_early = u_boot_config.buildconfig.get(
+            'config_efi_capsule_on_disk_early')
+        capsule_auth = u_boot_config.buildconfig.get(
+            'config_efi_capsule_authenticate')
+
+        # reboot
+        u_boot_console.restart_uboot(expect_reset = capsule_early)
+
+        with u_boot_console.log.section('Test Case 1-b, after reboot'):
+            if not capsule_early:
+                # make sure that dfu_alt_info exists even persistent variables
+                # are not available.
+                output = u_boot_console.run_command_list([
+                    'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
+                    'host bind 0 %s' % disk_img,
+                    'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
+                assert 'Test05' in ''.join(output)
+
+                # need to run uefi command to initiate capsule handling
+                output = u_boot_console.run_command(
+                    'env print -e Capsule0000', wait_for_reboot = True)
+
+            output = u_boot_console.run_command_list([
+                'sf probe 0:0',
+                'sf read 4000000 100000 10',
+                'md.b 4000000 10'])
+            assert 'u-boot:Old' in ''.join(output)
+
+            output = u_boot_console.run_command_list([
+                'sf read 4000000 150000 10',
+                'md.b 4000000 10'])
+            assert 'u-boot-env:Old' in ''.join(output)
+
+    def test_efi_capsule_fw2(
+            self, u_boot_config, u_boot_console, efi_capsule_data):
+        """
+        Test Case 2 - Update U-Boot and U-Boot environment on SPI Flash
+                      0x100000-0x150000: U-Boot binary (but dummy)
+                      0x150000-0x200000: U-Boot environment (but dummy)
+        """
+        disk_img = efi_capsule_data
+        with u_boot_console.log.section('Test Case 2-a, before reboot'):
+            output = u_boot_console.run_command_list([
+                'host bind 0 %s' % disk_img,
+                'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
+                'efidebug boot order 1',
+                'env set -e -nv -bs -rt OsIndications =0x0000000000000004',
+                'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
+                'env save'])
+
+            # initialize contents
+            output = u_boot_console.run_command_list([
+                'sf probe 0:0',
+                'fatload host 0:1 4000000 %s/u-boot.bin.old' % CAPSULE_DATA_DIR,
+                'sf write 4000000 100000 10',
+                'sf read 5000000 100000 10',
+                'md.b 5000000 10'])
+            assert 'Old' in ''.join(output)
+            output = u_boot_console.run_command_list([
+                'sf probe 0:0',
+                'fatload host 0:1 4000000 %s/u-boot.env.old' % CAPSULE_DATA_DIR,
+                'sf write 4000000 150000 10',
+                'sf read 5000000 150000 10',
+                'md.b 5000000 10'])
+            assert 'Old' in ''.join(output)
+
+            # place a capsule file
+            output = u_boot_console.run_command_list([
+                'fatload host 0:1 4000000 %s/Test04' % CAPSULE_DATA_DIR,
+                'fatwrite host 0:1 4000000 %s/Test04 $filesize' % CAPSULE_INSTALL_DIR,
+                'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
+            assert 'Test04' in ''.join(output)
+
+        capsule_early = u_boot_config.buildconfig.get(
+            'config_efi_capsule_on_disk_early')
+        capsule_auth = u_boot_config.buildconfig.get(
+            'config_efi_capsule_authenticate')
+
+        # reboot
+        u_boot_console.restart_uboot(expect_reset = capsule_early)
+
+        with u_boot_console.log.section('Test Case 2-b, after reboot'):
+            if not capsule_early:
+                # make sure that dfu_alt_info exists even persistent variables
+                # are not available.
+                output = u_boot_console.run_command_list([
+                    'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
+                    'host bind 0 %s' % disk_img,
+                    'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
+                assert 'Test04' in ''.join(output)
+
+                # need to run uefi command to initiate capsule handling
+                output = u_boot_console.run_command(
+                    'env print -e Capsule0000', wait_for_reboot = True)
+
+            output = u_boot_console.run_command_list([
+                'host bind 0 %s' % disk_img,
+                'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
+            assert 'Test04' not in ''.join(output)
+
+            output = u_boot_console.run_command_list([
+                'sf probe 0:0',
+                'sf read 4000000 100000 10',
+                'md.b 4000000 10'])
+            if capsule_auth:
+                assert 'u-boot:Old' in ''.join(output)
+            else:
+                assert 'u-boot:New' in ''.join(output)
+
+            output = u_boot_console.run_command_list([
+                'sf read 4000000 150000 10',
+                'md.b 4000000 10'])
+            if capsule_auth:
+                assert 'u-boot-env:Old' in ''.join(output)
+            else:
+                assert 'u-boot-env:New' in ''.join(output)
diff --git a/test/py/tests/test_efi_capsule/test_capsule_firmware.py b/test/py/tests/test_efi_capsule/test_capsule_firmware_raw.py
similarity index 75%
rename from test/py/tests/test_efi_capsule/test_capsule_firmware.py
rename to test/py/tests/test_efi_capsule/test_capsule_firmware_raw.py
index 1dcf1c70f4..c9eaf5e6d8 100644
--- a/test/py/tests/test_efi_capsule/test_capsule_firmware.py
+++ b/test/py/tests/test_efi_capsule/test_capsule_firmware_raw.py
@@ -5,7 +5,7 @@ 
 # U-Boot UEFI: Firmware Update Test
 
 """
-This test verifies capsule-on-disk firmware update
+This test verifies capsule-on-disk firmware update for raw images
 """
 
 from subprocess import check_call, check_output, CalledProcessError
@@ -14,7 +14,6 @@  from capsule_defs import *
 
 
 @pytest.mark.boardspec('sandbox')
-@pytest.mark.buildconfigspec('efi_capsule_firmware_fit')
 @pytest.mark.buildconfigspec('efi_capsule_firmware_raw')
 @pytest.mark.buildconfigspec('efi_capsule_on_disk')
 @pytest.mark.buildconfigspec('dfu')
@@ -25,12 +24,12 @@  from capsule_defs import *
 @pytest.mark.buildconfigspec('cmd_nvedit_efi')
 @pytest.mark.buildconfigspec('cmd_sf')
 @pytest.mark.slow
-class TestEfiCapsuleFirmwareFit(object):
+class TestEfiCapsuleFirmwareRaw(object):
     def test_efi_capsule_fw1(
             self, u_boot_config, u_boot_console, efi_capsule_data):
         """
         Test Case 1 - Update U-Boot and U-Boot environment on SPI Flash
-                      but with OsIndications unset
+                      but with an incorrect GUID value in the capsule
                       No update should happen
                       0x100000-0x150000: U-Boot binary (but dummy)
                       0x150000-0x200000: U-Boot environment (but dummy)
@@ -41,7 +40,7 @@  class TestEfiCapsuleFirmwareFit(object):
                 'host bind 0 %s' % disk_img,
                 'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
                 'efidebug boot order 1',
-                'env set -e OsIndications',
+                'env set -e -nv -bs -rt OsIndications =0x0000000000000004',
                 'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
                 'env save'])
 
@@ -63,16 +62,17 @@  class TestEfiCapsuleFirmwareFit(object):
 
             # place a capsule file
             output = u_boot_console.run_command_list([
-                'fatload host 0:1 4000000 %s/Test01' % CAPSULE_DATA_DIR,
-                'fatwrite host 0:1 4000000 %s/Test01 $filesize' % CAPSULE_INSTALL_DIR,
+                'fatload host 0:1 4000000 %s/Test03' % CAPSULE_DATA_DIR,
+                'fatwrite host 0:1 4000000 %s/Test03 $filesize' % CAPSULE_INSTALL_DIR,
                 'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
-            assert 'Test01' in ''.join(output)
+            assert 'Test03' in ''.join(output)
 
         # reboot
         u_boot_console.restart_uboot()
 
         capsule_early = u_boot_config.buildconfig.get(
             'config_efi_capsule_on_disk_early')
+
         with u_boot_console.log.section('Test Case 1-b, after reboot'):
             if not capsule_early:
                 # make sure that dfu_alt_info exists even persistent variables
@@ -81,17 +81,12 @@  class TestEfiCapsuleFirmwareFit(object):
                     'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
                     'host bind 0 %s' % disk_img,
                     'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
-                assert 'Test01' in ''.join(output)
+                assert 'Test03' in ''.join(output)
 
                 # need to run uefi command to initiate capsule handling
                 output = u_boot_console.run_command(
                     'env print -e Capsule0000')
 
-            output = u_boot_console.run_command_list([
-                'host bind 0 %s' % disk_img,
-                'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
-            assert 'Test01' in ''.join(output)
-
             output = u_boot_console.run_command_list([
                 'sf probe 0:0',
                 'sf read 4000000 100000 10',
@@ -107,6 +102,8 @@  class TestEfiCapsuleFirmwareFit(object):
             self, u_boot_config, u_boot_console, efi_capsule_data):
         """
         Test Case 2 - Update U-Boot and U-Boot environment on SPI Flash
+                      but with OsIndications unset
+                      No update should happen
                       0x100000-0x150000: U-Boot binary (but dummy)
                       0x150000-0x200000: U-Boot environment (but dummy)
         """
@@ -116,7 +113,7 @@  class TestEfiCapsuleFirmwareFit(object):
                 'host bind 0 %s' % disk_img,
                 'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
                 'efidebug boot order 1',
-                'env set -e -nv -bs -rt OsIndications =0x0000000000000004',
+                'env set -e OsIndications',
                 'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
                 'env save'])
 
@@ -136,21 +133,24 @@  class TestEfiCapsuleFirmwareFit(object):
                 'md.b 5000000 10'])
             assert 'Old' in ''.join(output)
 
-            # place a capsule file
+            # place the capsule files
             output = u_boot_console.run_command_list([
                 'fatload host 0:1 4000000 %s/Test01' % CAPSULE_DATA_DIR,
                 'fatwrite host 0:1 4000000 %s/Test01 $filesize' % CAPSULE_INSTALL_DIR,
                 'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
             assert 'Test01' in ''.join(output)
 
-        capsule_early = u_boot_config.buildconfig.get(
-            'config_efi_capsule_on_disk_early')
-        capsule_auth = u_boot_config.buildconfig.get(
-            'config_efi_capsule_authenticate')
+            output = u_boot_console.run_command_list([
+                'fatload host 0:1 4000000 %s/Test02' % CAPSULE_DATA_DIR,
+                'fatwrite host 0:1 4000000 %s/Test02 $filesize' % CAPSULE_INSTALL_DIR,
+                'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
+            assert 'Test02' in ''.join(output)
 
         # reboot
-        u_boot_console.restart_uboot(expect_reset = capsule_early)
+        u_boot_console.restart_uboot()
 
+        capsule_early = u_boot_config.buildconfig.get(
+            'config_efi_capsule_on_disk_early')
         with u_boot_console.log.section('Test Case 2-b, after reboot'):
             if not capsule_early:
                 # make sure that dfu_alt_info exists even persistent variables
@@ -160,32 +160,28 @@  class TestEfiCapsuleFirmwareFit(object):
                     'host bind 0 %s' % disk_img,
                     'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
                 assert 'Test01' in ''.join(output)
+                assert 'Test02' in ''.join(output)
 
                 # need to run uefi command to initiate capsule handling
                 output = u_boot_console.run_command(
-                    'env print -e Capsule0000', wait_for_reboot = True)
+                    'env print -e Capsule0000')
 
             output = u_boot_console.run_command_list([
                 'host bind 0 %s' % disk_img,
                 'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
-            assert 'Test01' not in ''.join(output)
+            assert 'Test01' in ''.join(output)
+            assert 'Test02' in ''.join(output)
 
             output = u_boot_console.run_command_list([
                 'sf probe 0:0',
                 'sf read 4000000 100000 10',
                 'md.b 4000000 10'])
-            if capsule_auth:
-                assert 'u-boot:Old' in ''.join(output)
-            else:
-                assert 'u-boot:New' in ''.join(output)
+            assert 'u-boot:Old' in ''.join(output)
 
             output = u_boot_console.run_command_list([
                 'sf read 4000000 150000 10',
                 'md.b 4000000 10'])
-            if capsule_auth:
-                assert 'u-boot-env:Old' in ''.join(output)
-            else:
-                assert 'u-boot-env:New' in ''.join(output)
+            assert 'u-boot-env:Old' in ''.join(output)
 
     def test_efi_capsule_fw3(
             self, u_boot_config, u_boot_console, efi_capsule_data):
@@ -203,7 +199,7 @@  class TestEfiCapsuleFirmwareFit(object):
                 'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
                 'env save'])
 
-            # initialize content
+            # initialize contents
             output = u_boot_console.run_command_list([
                 'sf probe 0:0',
                 'fatload host 0:1 4000000 %s/u-boot.bin.old' % CAPSULE_DATA_DIR,
@@ -212,7 +208,21 @@  class TestEfiCapsuleFirmwareFit(object):
                 'md.b 5000000 10'])
             assert 'Old' in ''.join(output)
 
-            # place a capsule file
+            output = u_boot_console.run_command_list([
+                'sf probe 0:0',
+                'fatload host 0:1 4000000 %s/u-boot.env.old' % CAPSULE_DATA_DIR,
+                'sf write 4000000 150000 10',
+                'sf read 5000000 100000 10',
+                'md.b 5000000 10'])
+            assert 'Old' in ''.join(output)
+
+            # place the capsule files
+            output = u_boot_console.run_command_list([
+                'fatload host 0:1 4000000 %s/Test01' % CAPSULE_DATA_DIR,
+                'fatwrite host 0:1 4000000 %s/Test01 $filesize' % CAPSULE_INSTALL_DIR,
+                'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
+            assert 'Test01' in ''.join(output)
+
             output = u_boot_console.run_command_list([
                 'fatload host 0:1 4000000 %s/Test02' % CAPSULE_DATA_DIR,
                 'fatwrite host 0:1 4000000 %s/Test02 $filesize' % CAPSULE_INSTALL_DIR,
@@ -235,6 +245,7 @@  class TestEfiCapsuleFirmwareFit(object):
                     'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
                     'host bind 0 %s' % disk_img,
                     'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
+                assert 'Test01' in ''.join(output)
                 assert 'Test02' in ''.join(output)
 
                 # need to run uefi command to initiate capsule handling
@@ -246,15 +257,16 @@  class TestEfiCapsuleFirmwareFit(object):
                 'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
                 'efidebug capsule esrt'])
 
-            # ensure that EFI_FIRMWARE_IMAGE_TYPE_UBOOT_FIT_GUID is in the ESRT.
-            assert 'AE13FF2D-9AD4-4E25-9AC8-6D80B3B22147' in ''.join(output)
+            # ensure that SANDBOX_UBOOT_ENV_IMAGE_GUID is in the ESRT.
+            assert '5A7021F5-FEF2-48B4-AABA-832E777418C0' in ''.join(output)
 
-            # ensure that  EFI_FIRMWARE_IMAGE_TYPE_UBOOT_RAW_GUID is in the ESRT.
-            assert 'E2BB9C06-70E9-4B14-97A3-5A7913176E3F' in ''.join(output)
+            # ensure that SANDBOX_UBOOT_IMAGE_GUID is in the ESRT.
+            assert '09D7CF52-0720-4710-91D1-08469B7FE9C8' in ''.join(output)
 
             output = u_boot_console.run_command_list([
                 'host bind 0 %s' % disk_img,
                 'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
+            assert 'Test01' not in ''.join(output)
             assert 'Test02' not in ''.join(output)
 
             output = u_boot_console.run_command_list([
@@ -266,78 +278,11 @@  class TestEfiCapsuleFirmwareFit(object):
             else:
                 assert 'u-boot:New' in ''.join(output)
 
-    def test_efi_capsule_fw4(
-            self, u_boot_config, u_boot_console, efi_capsule_data):
-        """
-        Test Case 4 - Test "--guid" option of mkeficapsule
-                      The test scenario is the same as Case 3.
-        """
-        disk_img = efi_capsule_data
-        with u_boot_console.log.section('Test Case 4-a, before reboot'):
-            output = u_boot_console.run_command_list([
-                'host bind 0 %s' % disk_img,
-                'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
-                'efidebug boot order 1',
-                'env set -e -nv -bs -rt OsIndications =0x0000000000000004',
-                'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
-                'env save'])
-
-            # initialize content
-            output = u_boot_console.run_command_list([
-                'sf probe 0:0',
-                'fatload host 0:1 4000000 %s/u-boot.bin.old' % CAPSULE_DATA_DIR,
-                'sf write 4000000 100000 10',
-                'sf read 5000000 100000 10',
-                'md.b 5000000 10'])
-            assert 'Old' in ''.join(output)
-
-            # place a capsule file
-            output = u_boot_console.run_command_list([
-                'fatload host 0:1 4000000 %s/Test03' % CAPSULE_DATA_DIR,
-                'fatwrite host 0:1 4000000 %s/Test03 $filesize' % CAPSULE_INSTALL_DIR,
-                'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
-            assert 'Test03' in ''.join(output)
-
-        capsule_early = u_boot_config.buildconfig.get(
-            'config_efi_capsule_on_disk_early')
-        capsule_auth = u_boot_config.buildconfig.get(
-            'config_efi_capsule_authenticate')
-
-        # reboot
-        u_boot_console.restart_uboot(expect_reset = capsule_early)
-
-        with u_boot_console.log.section('Test Case 4-b, after reboot'):
-            if not capsule_early:
-                # make sure that dfu_alt_info exists even persistent variables
-                # are not available.
-                output = u_boot_console.run_command_list([
-                    'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
-                    'host bind 0 %s' % disk_img,
-                    'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
-                assert 'Test03' in ''.join(output)
-
-                # need to run uefi command to initiate capsule handling
-                output = u_boot_console.run_command(
-                    'env print -e Capsule0000', wait_for_reboot = True)
-
-            # make sure the dfu_alt_info exists because it is required for making ESRT.
-            output = u_boot_console.run_command_list([
-                'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
-                'efidebug capsule esrt'])
-
-            # ensure that  EFI_FIRMWARE_IMAGE_TYPE_UBOOT_RAW_GUID is in the ESRT.
-            assert 'E2BB9C06-70E9-4B14-97A3-5A7913176E3F' in ''.join(output)
-
-            output = u_boot_console.run_command_list([
-                'host bind 0 %s' % disk_img,
-                'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
-            assert 'Test03' not in ''.join(output)
-
             output = u_boot_console.run_command_list([
                 'sf probe 0:0',
-                'sf read 4000000 100000 10',
+                'sf read 4000000 150000 10',
                 'md.b 4000000 10'])
             if capsule_auth:
-                assert 'u-boot:Old' in ''.join(output)
+                assert 'u-boot-env:Old' in ''.join(output)
             else:
-                assert 'u-boot:New' in ''.join(output)
+                assert 'u-boot-env:New' in ''.join(output)