Merge branch 'next'
authorTom Rini <trini@konsulko.com>
Mon, 2 Oct 2023 14:55:44 +0000 (10:55 -0400)
committerTom Rini <trini@konsulko.com>
Mon, 2 Oct 2023 14:55:44 +0000 (10:55 -0400)
Signed-off-by: Tom Rini <trini@konsulko.com>
45 files changed:
1  2 
.azure-pipelines.yml
.gitlab-ci.yml
Kconfig
MAINTAINERS
Makefile
arch/arm/Kconfig
arch/arm/mach-imx/Kconfig
arch/arm/mach-imx/imx8m/soc.c
arch/arm/mach-imx/imx9/soc.c
arch/sandbox/dts/test.dts
board/starfive/visionfive2/starfive_visionfive2.c
boot/expo_build.c
common/dlmalloc.c
common/spl/spl_opensbi.c
configs/imx6q_logic_defconfig
configs/imx8mm_data_modul_edm_sbc_defconfig
configs/imx8mn_beacon_2g_defconfig
configs/imx8mn_beacon_defconfig
configs/imx8mn_beacon_fspi_defconfig
configs/imx8mp_beacon_defconfig
configs/imx8mp_data_modul_edm_sbc_defconfig
configs/imx8mp_dhcom_pdk2_defconfig
configs/imx8mp_dhcom_pdk3_defconfig
configs/sam9x60_curiosity_mmc1_defconfig
configs/sam9x60_curiosity_mmc_defconfig
configs/sam9x60ek_mmc_defconfig
configs/sam9x60ek_nandflash_defconfig
configs/sam9x60ek_qspiflash_defconfig
configs/sandbox64_defconfig
configs/sandbox_defconfig
configs/snow_defconfig
configs/xilinx_versal_mini_defconfig
configs/xilinx_versal_mini_emmc0_defconfig
configs/xilinx_versal_mini_emmc1_defconfig
configs/xilinx_versal_net_virt_defconfig
configs/xilinx_versal_virt_defconfig
doc/board/emulation/qemu-arm.rst
doc/board/starfive/visionfive2.rst
doc/usage/cmd/bootflow.rst
drivers/mtd/nand/raw/atmel/nand-controller.c
drivers/serial/Kconfig
include/env/ti/ti_common.env
include/expo.h
include/spl.h
tools/docker/Dockerfile

diff --combined .azure-pipelines.yml
@@@ -2,7 -2,7 +2,7 @@@ variables
    windows_vm: windows-2019
    ubuntu_vm: ubuntu-22.04
    macos_vm: macOS-12
-   ci_runner_image: trini/u-boot-gitlab-ci-runner:jammy-20230624-20Jul2023
+   ci_runner_image: trini/u-boot-gitlab-ci-runner:jammy-20230804-25Aug2023
    # Add '-u 0' options for Azure pipelines, otherwise we get "permission
    # denied" error when it tries to "useradd -m -u 1001 vsts_azpcontainer",
    # since our $(ci_runner_image) user is not root.
@@@ -67,16 -67,6 +67,6 @@@ stages
                    :^doc/ :^arch/arm/dts/ :^scripts/kconfig/lkc.h
                    :^include/linux/kconfig.h :^tools/ && exit 1 || exit 0
  
-   - job: cppcheck
-     displayName: 'Static code analysis with cppcheck'
-     pool:
-       vmImage: $(ubuntu_vm)
-     container:
-       image: $(ci_runner_image)
-       options: $(container_option)
-     steps:
-       - script: cppcheck -j$(nproc) --force --quiet --inline-suppr .
    - job: docs
      displayName: 'Build documentation'
      pool:
            make htmldocs KDOC_WERROR=1
            make infodocs
  
-   - job: todo
-     displayName: 'Search for TODO within source tree'
-     pool:
-       vmImage: $(ubuntu_vm)
-     container:
-       image: $(ci_runner_image)
-       options: $(container_option)
-     steps:
-       - script: grep -r TODO .
-       - script: grep -r FIXME .
-       - script: grep -r HACK . | grep -v HACKKIT
-   - job: sloccount
-     displayName: 'Some statistics about the code base'
-     pool:
-       vmImage: $(ubuntu_vm)
-     container:
-       image: $(ci_runner_image)
-       options: $(container_option)
-     steps:
-       - script: sloccount .
    - job: maintainers
      displayName: 'Ensure all configs have MAINTAINERS entries'
      pool:
            ./tools/buildman/buildman --maintainer-check || exit 0
  
    - job: tools_only
-     displayName: 'Ensure host tools build'
+     displayName: 'Ensure host tools and env tools build'
      pool:
        vmImage: $(ubuntu_vm)
      container:
      steps:
        - script: |
            make tools-only_config tools-only -j$(nproc)
-   - job: envtools
-     displayName: 'Ensure env tools build'
-     pool:
-       vmImage: $(ubuntu_vm)
-     container:
-       image: $(ci_runner_image)
-       options: $(container_option)
-     steps:
-       - script: |
+           make mrproper
            make tools-only_config envtools -j$(nproc)
  
    - job: utils
            . /tmp/venv/bin/activate
            pip install -r test/py/requirements.txt
            pip install -r tools/buildman/requirements.txt
-           export UBOOT_TRAVIS_BUILD_DIR=/tmp/sandbox_spl
+           export UBOOT_TRAVIS_BUILD_DIR=/tmp/tools-only
            export PYTHONPATH=${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc/pylibfdt
            export PATH=${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc:${PATH}
-           ./tools/buildman/buildman -T0 -o ${UBOOT_TRAVIS_BUILD_DIR} -w --board sandbox_spl
+           ./tools/buildman/buildman -T0 -o ${UBOOT_TRAVIS_BUILD_DIR} -w --board tools-only
            set -ex
            ./tools/binman/binman --toolpath ${UBOOT_TRAVIS_BUILD_DIR}/tools test
            ./tools/buildman/buildman -t
            # seems to hang forever with pre-configured "container" environment
            docker run -v $PWD:$(work_dir) $(ci_runner_image) /bin/bash $(work_dir)/build.sh
  
 -  - job: nokia_rx51_test
 -    displayName: 'Run tests for Nokia RX-51 (aka N900)'
 -    pool:
 -      vmImage: $(ubuntu_vm)
 -    container:
 -      image: $(ci_runner_image)
 -      options: $(container_option)
 -    steps:
 -      - script: |
 -          mkdir nokia_rx51_tmp
 -          ln -s /opt/nokia/u-boot-gen-combined nokia_rx51_tmp/
 -          ln -s /opt/nokia/qemu-n900.tar.gz nokia_rx51_tmp/
 -          ln -s /opt/nokia/kernel_2.6.28-20103103+0m5_armel.deb nokia_rx51_tmp/
 -          ln -s /opt/nokia/libc6_2.5.1-1eglibc27+0m5_armel.deb nokia_rx51_tmp/
 -          ln -s /opt/nokia/busybox_1.10.2.legal-1osso30+0m5_armel.deb nokia_rx51_tmp/
 -          ln -s /opt/nokia/qemu-system-arm nokia_rx51_tmp/
 -          export PATH=/opt/gcc-13.2.0-nolibc/arm-linux-gnueabi/bin:$PATH
 -          test/nokia_rx51_test.sh
 -
    - job: pylint
      displayName: Check for any pylint regressions
      pool:
            export PATH=${PATH}:~/.local/bin
            echo "[MASTER]" >> .pylintrc
            echo "load-plugins=pylint.extensions.docparams" >> .pylintrc
-           export UBOOT_TRAVIS_BUILD_DIR=/tmp/sandbox_spl
-           ./tools/buildman/buildman -T0 -o ${UBOOT_TRAVIS_BUILD_DIR} -w --board sandbox_spl
+           export UBOOT_TRAVIS_BUILD_DIR=/tmp/tools-only
+           ./tools/buildman/buildman -T0 -o ${UBOOT_TRAVIS_BUILD_DIR} -w --board tools-only
            set -ex
            pylint --version
            export PYTHONPATH=${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc/pylibfdt
      steps:
        - script: make pip
  
- - stage: test_py
+   - job: create_test_py_wrapper_script
+     displayName: 'Create and stage a wrapper for test.py runs'
+     pool:
+       vmImage: $(ubuntu_vm)
+     steps:
+       - checkout: none
+       - script: |
+           cat << EOF > test.sh
+           #!/bin/bash
+           set -ex
+           # the below corresponds to .gitlab-ci.yml "before_script"
+           cd \${WORK_DIR}
+           git config --global --add safe.directory \${WORK_DIR}
+           git clone --depth=1 https://source.denx.de/u-boot/u-boot-test-hooks /tmp/uboot-test-hooks
+           ln -s travis-ci /tmp/uboot-test-hooks/bin/\`hostname\`
+           ln -s travis-ci /tmp/uboot-test-hooks/py/\`hostname\`
+           grub-mkimage --prefix=\"\" -o ~/grub_x86.efi -O i386-efi normal echo lsefimmap lsefi lsefisystab efinet tftp minicmd
+           grub-mkimage --prefix=\"\" -o ~/grub_x64.efi -O x86_64-efi normal echo lsefimmap lsefi lsefisystab efinet tftp minicmd
+           if [[ "\${TEST_PY_BD}" == "qemu-riscv32_spl" ]]; then
+               wget -O - https://github.com/riscv-software-src/opensbi/releases/download/v1.2/opensbi-1.2-rv-bin.tar.xz | tar -C /tmp -xJ;
+               export OPENSBI=/tmp/opensbi-1.2-rv-bin/share/opensbi/ilp32/generic/firmware/fw_dynamic.bin;
+           fi
+           if [[ "\${TEST_PY_BD}" == "qemu-riscv64_spl" ]] || [[ "\${TEST_PY_BD}" == "sifive_unleashed" ]]; then
+               wget -O - https://github.com/riscv-software-src/opensbi/releases/download/v1.2/opensbi-1.2-rv-bin.tar.xz | tar -C /tmp -xJ;
+               export OPENSBI=/tmp/opensbi-1.2-rv-bin/share/opensbi/lp64/generic/firmware/fw_dynamic.bin;
+           fi
+           # the below corresponds to .gitlab-ci.yml "script"
+           cd \${WORK_DIR}
+           export UBOOT_TRAVIS_BUILD_DIR=/tmp/\${TEST_PY_BD}
+           if [ -n "\${BUILD_ENV}" ]; then
+               export \${BUILD_ENV};
+           fi
+           pip install -r tools/buildman/requirements.txt
+           tools/buildman/buildman -o \${UBOOT_TRAVIS_BUILD_DIR} -w -E -W -e --board \${TEST_PY_BD} \${OVERRIDE}
+           cp ~/grub_x86.efi \${UBOOT_TRAVIS_BUILD_DIR}/
+           cp ~/grub_x64.efi \${UBOOT_TRAVIS_BUILD_DIR}/
+           cp /opt/grub/grubriscv64.efi \${UBOOT_TRAVIS_BUILD_DIR}/grub_riscv64.efi
+           cp /opt/grub/grubaa64.efi \${UBOOT_TRAVIS_BUILD_DIR}/grub_arm64.efi
+           cp /opt/grub/grubarm.efi \${UBOOT_TRAVIS_BUILD_DIR}/grub_arm.efi
+           # create sdcard / spi-nor images for sifive unleashed using genimage
+           if [[ "\${TEST_PY_BD}" == "sifive_unleashed" ]]; then
+               mkdir -p root;
+               cp \${UBOOT_TRAVIS_BUILD_DIR}/spl/u-boot-spl.bin .;
+               cp \${UBOOT_TRAVIS_BUILD_DIR}/u-boot.itb .;
+               rm -rf tmp;
+               genimage --inputpath . --config board/sifive/unleashed/genimage_sdcard.cfg;
+               cp images/sdcard.img \${UBOOT_TRAVIS_BUILD_DIR}/;
+               rm -rf tmp;
+               genimage --inputpath . --config board/sifive/unleashed/genimage_spi-nor.cfg;
+               cp images/spi-nor.img \${UBOOT_TRAVIS_BUILD_DIR}/;
+           fi
+           if [[ "\${TEST_PY_BD}" == "coreboot" ]]; then
+               wget -O - "https://drive.google.com/uc?id=1uJ2VkUQ8czWFZmhJQ90Tp8V_zrJ6BrBH&export=download" |xz -dc >\${UBOOT_TRAVIS_BUILD_DIR}/coreboot.rom;
+               wget -O - "https://drive.google.com/uc?id=149Cz-5SZXHNKpi9xg6R_5XITWohu348y&export=download" >cbfstool;
+               chmod a+x cbfstool;
+               ./cbfstool \${UBOOT_TRAVIS_BUILD_DIR}/coreboot.rom add-flat-binary -f \${UBOOT_TRAVIS_BUILD_DIR}/u-boot.bin -n fallback/payload -c LZMA -l 0x1110000 -e 0x1110000;
+           fi
+           virtualenv -p /usr/bin/python3 /tmp/venv
+           . /tmp/venv/bin/activate
+           pip install -r test/py/requirements.txt
+           pip install pytest-azurepipelines
+           export PATH=/opt/qemu/bin:/tmp/uboot-test-hooks/bin:\${PATH}
+           export PYTHONPATH=/tmp/uboot-test-hooks/py/travis-ci
+           # "\${var:+"-k \$var"}" expands to "" if \$var is empty, "-k \$var" if not
+           ./test/py/test.py -ra -o cache_dir="\$UBOOT_TRAVIS_BUILD_DIR"/.pytest_cache --bd \${TEST_PY_BD} \${TEST_PY_ID} \${TEST_PY_TEST_SPEC:+"-k \${TEST_PY_TEST_SPEC}"} --build-dir "\$UBOOT_TRAVIS_BUILD_DIR" --report-dir "\$UBOOT_TRAVIS_BUILD_DIR"
+           # the below corresponds to .gitlab-ci.yml "after_script"
+           rm -rf /tmp/uboot-test-hooks /tmp/venv
+           EOF
+       - task: CopyFiles@2
+         displayName: 'Copy test.sh for later usage'
+         inputs:
+           contents: 'test.sh'
+           targetFolder: '$(Build.ArtifactStagingDirectory)'
+       - publish: '$(Build.ArtifactStagingDirectory)/test.sh'
+         displayName: 'Publish test.sh'
+         artifact: testsh
+ - stage: test_py_sandbox
    jobs:
-   - job: test_py
-     displayName: 'test.py'
+   - job: test_py_sandbox
+     displayName: 'test.py for sandbox'
      pool:
        vmImage: $(ubuntu_vm)
      strategy:
        matrix:
          sandbox:
            TEST_PY_BD: "sandbox"
+         sandbox_asan:
+           TEST_PY_BD: "sandbox"
+           OVERRIDE: "-a ASAN"
+           TEST_PY_TEST_SPEC: "version"
          sandbox_clang:
            TEST_PY_BD: "sandbox"
            OVERRIDE: "-O clang-16"
+         sandbox_clang_asan:
+           TEST_PY_BD: "sandbox"
+           OVERRIDE: "-O clang-16 -a ASAN"
+           TEST_PY_TEST_SPEC: "version"
+         sandbox64:
+           TEST_PY_BD: "sandbox64"
+         sandbox64_clang:
+           TEST_PY_BD: "sandbox64"
+           OVERRIDE: "-O clang-16"
          sandbox_nolto:
            TEST_PY_BD: "sandbox"
            BUILD_ENV: "NO_LTO=1"
            TEST_PY_BD: "sandbox"
            BUILD_ENV: "FTRACE=1 NO_LTO=1"
            TEST_PY_TEST_SPEC: "trace"
-           OVERRIDE: "-a CONFIG_TRACE=y -a CONFIG_TRACE_EARLY=y -a CONFIG_TRACE_EARLY_SIZE=0x01000000"
+           OVERRIDE: "-a CONFIG_TRACE=y -a CONFIG_TRACE_EARLY=y -a CONFIG_TRACE_EARLY_SIZE=0x01000000 -a CONFIG_TRACE_BUFFER_SIZE=0x02000000"
+     steps:
+       - download: current
+         artifact: testsh
+       - script: |
+           # make current directory writeable to uboot user inside the container
+           # as sandbox testing need create files like spi flash images, etc.
+           # (TODO: clean up this in the future)
+           chmod 777 .
+           chmod 755 $(Pipeline.Workspace)/testsh/test.sh
+           # Filesystem tests need extra docker args to run
+           set --
+           # mount -o loop needs the loop devices
+           if modprobe loop; then
+               for d in $(find /dev -maxdepth 1 -name 'loop*'); do
+                   set -- "$@" --device $d:$d
+               done
+           fi
+           # Needed for mount syscall (for guestmount as well)
+           set -- "$@" --cap-add SYS_ADMIN
+           # Default apparmor profile denies mounts
+           set -- "$@" --security-opt apparmor=unconfined
+           # Some tests using libguestfs-tools need the fuse device to run
+           docker run "$@" --device /dev/fuse:/dev/fuse \
+                          -v $PWD:$(work_dir) \
+                          -v $(Pipeline.Workspace):$(Pipeline.Workspace) \
+                          -e WORK_DIR="${WORK_DIR}" \
+                          -e TEST_PY_BD="${TEST_PY_BD}" \
+                          -e TEST_PY_ID="${TEST_PY_ID}" \
+                          -e TEST_PY_TEST_SPEC="${TEST_PY_TEST_SPEC}" \
+                          -e OVERRIDE="${OVERRIDE}" \
+                          -e BUILD_ENV="${BUILD_ENV}" $(ci_runner_image) \
+                          $(Pipeline.Workspace)/testsh/test.sh
+ - stage: test_py_qemu
+   jobs:
+   - job: test_py_qemu
+     displayName: 'test.py for QEMU platforms'
+     pool:
+       vmImage: $(ubuntu_vm)
+     strategy:
+       matrix:
          coreboot:
            TEST_PY_BD: "coreboot"
            TEST_PY_ID: "--id qemu"
            TEST_PY_ID: "--id qemu"
            TEST_PY_TEST_SPEC: "not sleep"
      steps:
+       - download: current
+         artifact: testsh
        - script: |
-           cat << EOF > test.sh
-           set -ex
-           # make environment variables available as tests are running inside a container
-           export WORK_DIR="${WORK_DIR}"
-           export TEST_PY_BD="${TEST_PY_BD}"
-           export TEST_PY_ID="${TEST_PY_ID}"
-           export TEST_PY_TEST_SPEC="${TEST_PY_TEST_SPEC}"
-           export OVERRIDE="${OVERRIDE}"
-           export BUILD_ENV="${BUILD_ENV}"
-           EOF
-           cat << "EOF" >> test.sh
-           # the below corresponds to .gitlab-ci.yml "before_script"
-           cd ${WORK_DIR}
-           git config --global --add safe.directory ${WORK_DIR}
-           git clone --depth=1 https://source.denx.de/u-boot/u-boot-test-hooks /tmp/uboot-test-hooks
-           ln -s travis-ci /tmp/uboot-test-hooks/bin/`hostname`
-           ln -s travis-ci /tmp/uboot-test-hooks/py/`hostname`
-           grub-mkimage --prefix=\"\" -o ~/grub_x86.efi -O i386-efi normal  echo lsefimmap lsefi lsefisystab efinet tftp minicmd
-           grub-mkimage --prefix=\"\" -o ~/grub_x64.efi -O x86_64-efi normal  echo lsefimmap lsefi lsefisystab efinet tftp minicmd
-           if [[ "${TEST_PY_BD}" == "qemu-riscv32_spl" ]]; then
-               wget -O - https://github.com/riscv-software-src/opensbi/releases/download/v1.2/opensbi-1.2-rv-bin.tar.xz | tar -C /tmp -xJ;
-               export OPENSBI=/tmp/opensbi-1.2-rv-bin/share/opensbi/ilp32/generic/firmware/fw_dynamic.bin;
-           fi
-           if [[ "${TEST_PY_BD}" == "qemu-riscv64_spl" ]] || [[ "${TEST_PY_BD}" == "sifive_unleashed" ]]; then
-               wget -O - https://github.com/riscv-software-src/opensbi/releases/download/v1.2/opensbi-1.2-rv-bin.tar.xz | tar -C /tmp -xJ;
-               export OPENSBI=/tmp/opensbi-1.2-rv-bin/share/opensbi/lp64/generic/firmware/fw_dynamic.bin;
-           fi
-           # the below corresponds to .gitlab-ci.yml "script"
-           cd ${WORK_DIR}
-           export UBOOT_TRAVIS_BUILD_DIR=/tmp/${TEST_PY_BD};
-           if [ -n "${BUILD_ENV}" ]; then
-               export ${BUILD_ENV};
-           fi
-           pip install -r tools/buildman/requirements.txt
-           tools/buildman/buildman -o ${UBOOT_TRAVIS_BUILD_DIR} -w -E -W -e --board ${TEST_PY_BD} ${OVERRIDE}
-           cp ~/grub_x86.efi ${UBOOT_TRAVIS_BUILD_DIR}/
-           cp ~/grub_x64.efi ${UBOOT_TRAVIS_BUILD_DIR}/
-           cp /opt/grub/grubriscv64.efi ${UBOOT_TRAVIS_BUILD_DIR}/grub_riscv64.efi
-           cp /opt/grub/grubaa64.efi ${UBOOT_TRAVIS_BUILD_DIR}/grub_arm64.efi
-           cp /opt/grub/grubarm.efi ${UBOOT_TRAVIS_BUILD_DIR}/grub_arm.efi
-           # create sdcard / spi-nor images for sifive unleashed using genimage
-           if [[ "${TEST_PY_BD}" == "sifive_unleashed" ]]; then
-               mkdir -p root;
-               cp ${UBOOT_TRAVIS_BUILD_DIR}/spl/u-boot-spl.bin .;
-               cp ${UBOOT_TRAVIS_BUILD_DIR}/u-boot.itb .;
-               rm -rf tmp;
-               genimage --inputpath . --config board/sifive/unleashed/genimage_sdcard.cfg;
-               cp images/sdcard.img ${UBOOT_TRAVIS_BUILD_DIR}/;
-               rm -rf tmp;
-               genimage --inputpath . --config board/sifive/unleashed/genimage_spi-nor.cfg;
-               cp images/spi-nor.img ${UBOOT_TRAVIS_BUILD_DIR}/;
-           fi
-           if [[ "${TEST_PY_BD}" == "coreboot" ]]; then
-               wget -O - "https://drive.google.com/uc?id=1uJ2VkUQ8czWFZmhJQ90Tp8V_zrJ6BrBH&export=download" |xz -dc >${UBOOT_TRAVIS_BUILD_DIR}/coreboot.rom;
-               wget -O - "https://drive.google.com/uc?id=149Cz-5SZXHNKpi9xg6R_5XITWohu348y&export=download" >cbfstool;
-               chmod a+x cbfstool;
-               ./cbfstool ${UBOOT_TRAVIS_BUILD_DIR}/coreboot.rom add-flat-binary -f ${UBOOT_TRAVIS_BUILD_DIR}/u-boot.bin -n fallback/payload -c LZMA -l 0x1110000 -e 0x1110000;
-           fi
-           virtualenv -p /usr/bin/python3 /tmp/venv
-           . /tmp/venv/bin/activate
-           pip install -r test/py/requirements.txt
-           pip install pytest-azurepipelines
-           export PATH=/opt/qemu/bin:/tmp/uboot-test-hooks/bin:${PATH};
-           export PYTHONPATH=/tmp/uboot-test-hooks/py/travis-ci;
-           # "${var:+"-k $var"}" expands to "" if $var is empty, "-k $var" if not
-           ./test/py/test.py -ra -o cache_dir="$UBOOT_TRAVIS_BUILD_DIR"/.pytest_cache --bd ${TEST_PY_BD} ${TEST_PY_ID} ${TEST_PY_TEST_SPEC:+"-k ${TEST_PY_TEST_SPEC}"} --build-dir "$UBOOT_TRAVIS_BUILD_DIR" --report-dir "$UBOOT_TRAVIS_BUILD_DIR";
-           # the below corresponds to .gitlab-ci.yml "after_script"
-           rm -rf /tmp/uboot-test-hooks /tmp/venv
-           EOF
-           cat test.sh
            # make current directory writeable to uboot user inside the container
            # as sandbox testing need create files like spi flash images, etc.
            # (TODO: clean up this in the future)
            chmod 777 .
-           # Filesystem tests need extra docker args to run
-           set --
-           if [[ "${TEST_PY_BD}" == "sandbox" ]]; then
-               # mount -o loop needs the loop devices
-               if modprobe loop; then
-                   for d in $(find /dev -maxdepth 1 -name 'loop*'); do
-                       set -- "$@" --device $d:$d
-                   done
-               fi
-               # Needed for mount syscall (for guestmount as well)
-               set -- "$@" --cap-add SYS_ADMIN
-               # Default apparmor profile denies mounts
-               set -- "$@" --security-opt apparmor=unconfined
-           fi
+           chmod 755 $(Pipeline.Workspace)/testsh/test.sh
            # Some tests using libguestfs-tools need the fuse device to run
-           docker run "$@" --device /dev/fuse:/dev/fuse -v $PWD:$(work_dir) $(ci_runner_image) /bin/bash $(work_dir)/test.sh
+           docker run "$@" --device /dev/fuse:/dev/fuse \
+                          -v $PWD:$(work_dir) \
+                          -v $(Pipeline.Workspace):$(Pipeline.Workspace) \
+                          -e WORK_DIR="${WORK_DIR}" \
+                          -e TEST_PY_BD="${TEST_PY_BD}" \
+                          -e TEST_PY_ID="${TEST_PY_ID}" \
+                          -e TEST_PY_TEST_SPEC="${TEST_PY_TEST_SPEC}" \
+                          -e OVERRIDE="${OVERRIDE}" \
+                          -e BUILD_ENV="${BUILD_ENV}" $(ci_runner_image) \
+                          $(Pipeline.Workspace)/testsh/test.sh
          retryCountOnTaskFailure: 2 # QEMU may be too slow, etc.
  
  - stage: world_build
        # Use almost the same target division in .travis.yml, only merged
        # 3 small build jobs (arc/microblaze/xtensa) into one.
        matrix:
-         arc_nios2_m68k_microblaze_xtensa:
-           BUILDMAN: "arc nios2 microblaze m68k xtensa"
-         amlogic:
-           BUILDMAN: "amlogic"
-         arm11_arm7_arm920t_arm946es:
-           BUILDMAN: "arm11 arm7 arm920t arm946es"
-         arm926ejs:
-           BUILDMAN: "arm926ejs -x freescale,siemens,at91,kirkwood,omap"
-         at91_non_armv7:
-           BUILDMAN: "at91 -x armv7"
-         at91_non_arm926ejs:
-           BUILDMAN: "at91 -x arm926ejs"
-         boundary_engicam_toradex:
-           BUILDMAN: "boundary engicam toradex"
-         arm_bcm:
-           BUILDMAN: "bcm -x mips"
-         nxp_arm32:
-           BUILDMAN: "freescale -x powerpc,m68k,aarch64,ls101,ls102,ls104,ls108,ls20,lx216"
-         nxp_ls101x_ls108x:
-           BUILDMAN: "freescale&ls101 freescale&ls108"
-         nxp_ls102x:
-           BUILDMAN: "freescale&ls102 -x keymile"
-         nxp_ls104x:
-           BUILDMAN: "freescale&ls104"
-         nxp_ls20xx_lx216x:
-           BUILDMAN: "freescale&ls20 freescale&lx216"
-         imx6:
-           BUILDMAN: "mx6 -x boundary,engicam,freescale,technexion,toradex"
+         am33xx_at91_kirkwood_mvebu_omap:
+           BUILDMAN: "am33xx at91_kirkwood mvebu omap -x siemens"
+         amlogic_bcm_boundary_engicam_siemens_technexion_oradex:
+           BUILDMAN: "amlogic bcm boundary engicam siemens technexion toradex -x mips"
+         arm_nxp_minus_imx:
+           BUILDMAN: "freescale -x powerpc,m68k,imx,mx"
          imx:
-           BUILDMAN: "mx -x mx6,imx8,freescale,technexion,toradex"
-         imx8_imx9:
-           BUILDMAN: "imx8 imx9 -x engicam,technexion,toradex"
-         keymiles_siemens_technexion:
-           BUILDMAN: "keymile siemens technexion"
-         keystone2_keystone3:
-           BUILDMAN: "k2 k3 -x siemens,toradex"
-         sandbox_asan:
-           BUILDMAN: "sandbox"
-           OVERRIDE: "-a ASAN"
-         sandbox_clang_asan:
-           BUILDMAN: "sandbox"
-           OVERRIDE: "-O clang-16 -a ASAN"
-         samsung_socfpga_renesas:
-           BUILDMAN: "samsung socfpga renesas"
-         sun4i_sun9i:
-           BUILDMAN: "sun4i sun9i"
-         sun5i_sun6i:
-           BUILDMAN: "sun5i sun6i"
-         sun7i:
-           BUILDMAN: "sun7i"
-         sun8i:
-           BUILDMAN: "sun8i"
-         sun50i:
-           BUILDMAN: "sun50i"
-         arm_catch_all:
-           BUILDMAN: "arm -x arm11,arm7,arm9,aarch64,at91,bcm,freescale,kirkwood,mvebu,renesas,siemens,tegra,uniphier,mx,samsung,sunxi,am33xx,omap,toradex,socfpga,k2,k3,zynq"
-         sandbox_x86:
-           BUILDMAN: "sandbox x86"
-         kirkwood_mvebu_uniphier:
-           BUILDMAN: "kirkwood mvebu uniphier"
-         mips:
-           BUILDMAN: "mips"
+           BUILDMAN: "mx imx -x boundary,engicam,technexion,toradex"
+         rk:
+           BUILDMAN: "rk"
+         sunxi:
+           BUILDMAN: "sunxi"
          powerpc:
-           BUILDMAN: "powerpc -x keymile"
-         tegra:
-           BUILDMAN: "tegra -x toradex"
-         am33xx_omap:
-           BUILDMAN: "am33xx omap -x siemens"
+           BUILDMAN: "powerpc"
+         arm_catch_all:
+           BUILDMAN: "arm -x aarch64,am33xx,at91,bcm,ls1,kirkwood,mvebu,omap,rk,siemens,mx,sunxi,technexion,toradex"
          aarch64_catch_all:
-           BUILDMAN: "aarch64 -x amlogic,bcm,imx8,imx9,k3,tegra,ls1,ls2,lx216,mvebu,uniphier,renesas,sunxi,samsung,socfpga,rk,versal,zynq"
-         rk_non_rockchip_64bit:
-           BUILDMAN: "rk&aarch64 -x rockchip"
-         rk_rockchip_64bit:
-           BUILDMAN: "rk&aarch64&rockchip"
-         zynq_zynqmp_versal:
-           BUILDMAN: "zynq&armv7 versal zynqmp&aarch64"
-         riscv:
-           BUILDMAN: "riscv"
+           BUILDMAN: "aarch64 -x amlogic,bcm,engicam,imx,ls1,ls2,lx216,mvebu,rk,siemens,sunxi,toradex"
+         everything_but_arm_and_powerpc:
+           BUILDMAN: "-x arm,powerpc"
      steps:
        - script: |
            cat << EOF > build.sh
diff --combined .gitlab-ci.yml
@@@ -10,7 -10,7 +10,7 @@@ default
  
  # Grab our configured image.  The source for this is found
  # in the u-boot tree at tools/docker/Dockerfile
- image: ${MIRROR_DOCKER}/trini/u-boot-gitlab-ci-runner:jammy-20230624-20Jul2023
+ image: ${MIRROR_DOCKER}/trini/u-boot-gitlab-ci-runner:jammy-20230804-25Aug2023
  
  # We run some tests in different order, to catch some failures quicker.
  stages:
@@@ -21,6 -21,8 +21,8 @@@
  .buildman_and_testpy_template: &buildman_and_testpy_dfn
    stage: test.py
    retry: 2 # QEMU may be too slow, etc.
+   rules:
+     - when: always
    before_script:
      # Clone uboot-test-hooks
      - git config --global --add safe.directory "${CI_PROJECT_DIR}"
        - "*.css"
      expire_in: 1 week
  
build all 32bit ARM platforms:
.world_build:
    stage: world build
+   rules:
+     - when: always
+ build all 32bit ARM platforms:
+   extends: .world_build
    script:
      - ret=0;
        git config --global --add safe.directory "${CI_PROJECT_DIR}";
        fi;
  
  build all 64bit ARM platforms:
-   stage: world build
+   extends: .world_build
    script:
      - virtualenv -p /usr/bin/python3 /tmp/venv
      - . /tmp/venv/bin/activate
        fi;
  
  build all PowerPC platforms:
-   stage: world build
+   extends: .world_build
    script:
      - ret=0;
        git config --global --add safe.directory "${CI_PROJECT_DIR}";
        fi;
  
  build all other platforms:
-   stage: world build
+   extends: .world_build
    script:
      - ret=0;
        git config --global --add safe.directory "${CI_PROJECT_DIR}";
          exit $ret;
        fi;
  
check for new CONFIG symbols outside Kconfig:
.testsuites:
    stage: testsuites
+   rules:
+     - when: always
+ check for new CONFIG symbols outside Kconfig:
+   extends: .testsuites
    script:
      - git config --global --add safe.directory "${CI_PROJECT_DIR}"
      # If grep succeeds and finds a match the test fails as we should
          :^doc/ :^arch/arm/dts/ :^scripts/kconfig/lkc.h
          :^include/linux/kconfig.h :^tools/ && exit 1 || exit 0
  
- # QA jobs for code analytics
- # static code analysis with cppcheck (we can add --enable=all later)
- cppcheck:
-   stage: testsuites
-   script:
-     - cppcheck -j$(nproc) --force --quiet --inline-suppr .
- # search for TODO within source tree
- grep TODO/FIXME/HACK:
-   stage: testsuites
-   script:
-     - grep -r TODO .
-     - grep -r FIXME .
-     # search for HACK within source tree and ignore HACKKIT board
-     - grep -r HACK . | grep -v HACKKIT
  # build documentation
  docs:
-   stage: testsuites
+   extends: .testsuites
    script:
      - virtualenv -p /usr/bin/python3 /tmp/venvhtml
      - . /tmp/venvhtml/bin/activate
      - make htmldocs KDOC_WERROR=1
      - make infodocs
  
- # some statistics about the code base
- sloccount:
-   stage: testsuites
-   script:
-     - sloccount .
  # ensure all configs have MAINTAINERS entries
  Check for configs without MAINTAINERS entry:
-   stage: testsuites
+   extends: .testsuites
    script:
      - ./tools/buildman/buildman --maintainer-check || exit 0
  
  # Ensure host tools build
- Build tools-only:
-   stage: testsuites
+ Build tools-only and envtools:
+   extends: .testsuites
    script:
-     - make tools-only_config tools-only -j$(nproc)
- # Ensure env tools build
- Build envtools:
-   stage: testsuites
-   script:
-     - make tools-only_config envtools -j$(nproc)
+     - make tools-only_config tools-only -j$(nproc);
+       make mrproper;
+       make tools-only_config envtools -j$(nproc)
  
  Run binman, buildman, dtoc, Kconfig and patman testsuites:
-   stage: testsuites
+   extends: .testsuites
    script:
      - git config --global user.name "GitLab CI Runner";
        git config --global user.email trini@konsulko.com;
        . /tmp/venv/bin/activate;
        pip install -r test/py/requirements.txt;
        pip install -r tools/buildman/requirements.txt;
-       export UBOOT_TRAVIS_BUILD_DIR=/tmp/sandbox_spl;
+       export UBOOT_TRAVIS_BUILD_DIR=/tmp/tools-only;
        export PYTHONPATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc/pylibfdt";
        export PATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc:${PATH}";
        set +e;
        ./tools/buildman/buildman -T0 -o ${UBOOT_TRAVIS_BUILD_DIR} -w
-         --board sandbox_spl;
+         --board tools-only;
        set -e;
        ./tools/binman/binman --toolpath ${UBOOT_TRAVIS_BUILD_DIR}/tools test;
        ./tools/buildman/buildman -t;
        ./tools/patman/patman test;
        make testconfig
  
 -Run tests for Nokia RX-51 (aka N900):
 -  extends: .testsuites
 -  script:
 -    - mkdir nokia_rx51_tmp;
 -      ln -s /opt/nokia/u-boot-gen-combined nokia_rx51_tmp/;
 -      ln -s /opt/nokia/qemu-n900.tar.gz nokia_rx51_tmp/;
 -      ln -s /opt/nokia/kernel_2.6.28-20103103+0m5_armel.deb nokia_rx51_tmp/;
 -      ln -s /opt/nokia/libc6_2.5.1-1eglibc27+0m5_armel.deb nokia_rx51_tmp/;
 -      ln -s /opt/nokia/busybox_1.10.2.legal-1osso30+0m5_armel.deb nokia_rx51_tmp/;
 -      ln -s /opt/nokia/qemu-system-arm nokia_rx51_tmp/;
 -      export PATH=/opt/gcc-13.2.0-nolibc/arm-linux-gnueabi/bin:$PATH;
 -      test/nokia_rx51_test.sh
 -
  # Check for any pylint regressions
  Run pylint:
-   stage: testsuites
+   extends: .testsuites
    script:
      - git config --global --add safe.directory "${CI_PROJECT_DIR}"
      - pip install -r test/py/requirements.txt
      - export PATH=${PATH}:~/.local/bin
      - echo "[MASTER]" >> .pylintrc
      - echo "load-plugins=pylint.extensions.docparams" >> .pylintrc
-     - export UBOOT_TRAVIS_BUILD_DIR=/tmp/sandbox_spl
+     - export UBOOT_TRAVIS_BUILD_DIR=/tmp/tools-only
      - set +e
      - ./tools/buildman/buildman -T0 -o ${UBOOT_TRAVIS_BUILD_DIR} -w
-         --board sandbox_spl
+         --board tools-only
      - set -e
      - pylint --version
      - export PYTHONPATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc/pylibfdt"
  
  # Check for pre-schema driver model tags
  Check for pre-schema tags:
-   stage: testsuites
+   extends: .testsuites
    script:
      - git config --global --add safe.directory "${CI_PROJECT_DIR}";
      # If grep succeeds and finds a match the test fails as we should
  
  # Check we can package the Python tools
  Check packing of Python tools:
-   stage: testsuites
+   extends: .testsuites
    script:
      - make pip
  
@@@ -278,6 -277,23 +264,23 @@@ sandbox without LTO test.py
      BUILD_ENV: "NO_LTO=1"
    <<: *buildman_and_testpy_dfn
  
+ sandbox64 test.py:
+   variables:
+     TEST_PY_BD: "sandbox64"
+   <<: *buildman_and_testpy_dfn
+ sandbox64 with clang test.py:
+   variables:
+     TEST_PY_BD: "sandbox64"
+     OVERRIDE: "-O clang-16"
+   <<: *buildman_and_testpy_dfn
+ sandbox64 without LTO test.py:
+   variables:
+     TEST_PY_BD: "sandbox64"
+     BUILD_ENV: "NO_LTO=1"
+   <<: *buildman_and_testpy_dfn
  sandbox_spl test.py:
    variables:
      TEST_PY_BD: "sandbox_spl"
@@@ -302,7 -318,7 +305,7 @@@ sandbox trace_test.py
      TEST_PY_BD: "sandbox"
      BUILD_ENV: "FTRACE=1 NO_LTO=1"
      TEST_PY_TEST_SPEC: "trace"
-     OVERRIDE: "-a CONFIG_TRACE=y -a CONFIG_TRACE_EARLY=y -a CONFIG_TRACE_EARLY_SIZE=0x01000000"
+     OVERRIDE: "-a CONFIG_TRACE=y -a CONFIG_TRACE_EARLY=y -a CONFIG_TRACE_EARLY_SIZE=0x01000000 -a CONFIG_TRACE_BUFFER_SIZE=0x02000000"
    <<: *buildman_and_testpy_dfn
  
  evb-ast2500 test.py:
diff --combined Kconfig
+++ b/Kconfig
@@@ -372,17 -372,6 +372,17 @@@ if EXPER
          When disabling this, please check if malloc calls, maybe
          should be replaced by calloc - if one expects zeroed memory.
  
 +config SPL_SYS_MALLOC_CLEAR_ON_INIT
 +      bool "Init with zeros the memory reserved for malloc (slow) in SPL"
 +      depends on SPL
 +      default SYS_MALLOC_CLEAR_ON_INIT
 +      help
 +        Same as SYS_MALLOC_CLEAR_ON_INIT, but for SPL. It's possible to
 +        Enable it without SYS_MALLOC_CLEAR_ON_INIT. It's useful for boards
 +        that must have particular memory regions zero'ed before first use.
 +        If SYS_SPL_MALLOC_START is configured to be in such region, this
 +        option should be enabled.
 +
  config SYS_MALLOC_DEFAULT_TO_INIT
        bool "Default malloc to init while reserving the memory for it"
        help
@@@ -596,10 -585,95 +596,95 @@@ config M
          This provides an option to bringup different processors
          in multiprocessor cases.
  
- endmenu               # General setup
+ config HAVE_TEXT_BASE
+       bool
+       depends on !NIOS2 && !XTENSA
+       depends on !EFI_APP
+       default y
+ config TEXT_BASE
+       depends on HAVE_TEXT_BASE
+       default 0x0 if POSITION_INDEPENDENT
+       default 0x80800000 if ARCH_OMAP2PLUS || ARCH_K3
+       default 0x81700000 if MACH_SUNIV
+       default 0x2a000000 if MACH_SUN9I
+       default 0x4a000000 if SUNXI_MINIMUM_DRAM_MB >= 256
+       default 0x42e00000 if SUNXI_MINIMUM_DRAM_MB >= 64
+       hex "Text Base"
+       help
+         The address in memory that U-Boot will be copied and executed from
+         initially.
+ config HAVE_SYS_UBOOT_START
+       bool "Use custom U-Boot Start"
+       depends on HAVE_TEXT_BASE
+       help
+         By default, the address in memory that U-Boot will be copied from
+         (TEXT_BASE) and the entry point are the same. Select this to start the
+         execution of U-Boot from a different address.
+         This may be required if a header or vector table needs to be copied
+         but not executed.
+ config SYS_UBOOT_START
+       hex
+       depends on HAVE_TEXT_BASE
+       default TEXT_BASE
+       prompt "U-Boot entry" if HAVE_SYS_UBOOT_START
+       help
+         If TEXT_BASE differs from the start of execution, this sets the
+         address in memory that U-Boot will start execution from initially.
+ config HAVE_SYS_MONITOR_BASE
+       bool
+       depends on ARC || MIPS || M68K || NIOS2 || PPC || XTENSA || X86 \
+               || ENV_IS_IN_FLASH || MTD_NOR_FLASH
+       depends on !EFI_APP
+       default y
+ config SYS_MONITOR_BASE
+       depends on HAVE_SYS_MONITOR_BASE
+       hex "Physical start address of boot monitor code"
+       default TEXT_BASE
+       help
+         The physical start address of boot monitor code (which is the same as
+         CONFIG_TEXT_BASE when linking) and the same as CFG_SYS_FLASH_BASE
+         when booting from flash.
+ config SPL_SYS_MONITOR_BASE
+       depends on MPC85xx && SPL && HAVE_SYS_MONITOR_BASE
+       hex "Physical start address of SPL monitor code"
+       default SPL_TEXT_BASE
+ config TPL_SYS_MONITOR_BASE
+       depends on MPC85xx && TPL && HAVE_SYS_MONITOR_BASE
+       hex "Physical start address of TPL monitor code"
+ config DYNAMIC_SYS_CLK_FREQ
+       bool "Determine CPU clock frequency at run-time"
+       help
+         Implement a get_board_sys_clk function that will determine the CPU
+         clock frequency at run time, rather than define it statically.
+ config SYS_CLK_FREQ
+       depends on !DYNAMIC_SYS_CLK_FREQ
+       int "CPU clock frequency"
+       default 125000000 if ARCH_LS1012A
+       default 100000000 if ARCH_P2020 || ARCH_T1024 || ARCH_T1042 || \
+                            ARCH_LS1021A || FSL_LSCH2 || FSL_LSCH3
+       default 66666666 if ARCH_P1010 || ARCH_P1020 || ARCH_T4240
+       default 66660000 if ARCH_T2080
+       default 33333333 if RCAR_GEN3
+       default 24000000 if ARCH_EXYNOS
+       default 20000000 if RCAR_GEN2
+       default 0
+       help
+         A static value for the CPU frequency.  Note that if not required
+         for a given SoC, this can be left at 0.
  
  source "api/Kconfig"
  
+ endmenu               # General setup
  source "boot/Kconfig"
  
  source "common/Kconfig"
diff --combined MAINTAINERS
@@@ -123,6 -123,7 +123,7 @@@ F: configs/apple_m1_defconfi
  F:    drivers/iommu/apple_dart.c
  F:    drivers/nvme/nvme_apple.c
  F:    drivers/pci/pcie_apple.c
+ F:    drivers/phy/phy-apple-atc.c
  F:    drivers/pinctrl/pinctrl-apple.c
  F:    drivers/watchdog/apple_wdt.c
  F:    include/configs/apple.h
@@@ -365,6 -366,7 +366,6 @@@ F: drivers/watchdog/orion_wdt.
  F:    include/configs/mv-common.h
  
  ARM MARVELL PCIE CONTROLLER DRIVERS
 -M:    Pali Rohár <pali@kernel.org>
  M:    Stefan Roese <sr@denx.de>
  S:    Maintained
  T:    git https://source.denx.de/u-boot/custodians/u-boot-marvell.git
@@@ -723,10 -725,7 +724,10 @@@ F:       drivers/usb/musb-new/ux500.
  F:    drivers/video/mcde_simple.c
  
  ARM UNIPHIER
 -S:    Orphan (Since 2020-09)
 +M:    Kunihiko Hayashi <hayashi.kunihiko@socionext.com>
 +R:    Dai Okamura <okamura.dai@socionext.com>
 +S:    Maintained
 +F:    arch/arm/dts/uniphier-*
  F:    arch/arm/mach-uniphier/
  F:    configs/uniphier_*_defconfig
  N:    uniphier
@@@ -1598,7 -1597,7 +1599,7 @@@ T:      git https://source.denx.de/u-boot/cu
  F:    drivers/mtd/ubi/
  
  UFS
 -M:    Bhupesh Sharma <bhupesh.sharma@linaro.org>
 +M:    Bhupesh Sharma <bhupesh.linux@gmail.com>
  M:    Neha Malcom Francis <n-francis@ti.com>
  S:    Maintained
  F:    drivers/ufs/
diff --combined Makefile
+++ b/Makefile
@@@ -3,7 -3,7 +3,7 @@@
  VERSION = 2023
  PATCHLEVEL = 10
  SUBLEVEL =
 -EXTRAVERSION = -rc4
 +EXTRAVERSION =
  NAME =
  
  # *DOCUMENTATION*
@@@ -485,6 -485,15 +485,15 @@@ export RCS_FIND_IGNORE := \( -name SCC
  export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \
                         --exclude CVS --exclude .pc --exclude .hg --exclude .git
  
+ export PYTHON_ENABLE
+ # This is y if U-Boot should not build any Python tools or libraries. Typically
+ # you would need to set this if those tools/libraries (typically binman and
+ # pylibfdt) cannot be built by your environment and are provided separately.
+ ifeq ($(NO_PYTHON),)
+ PYTHON_ENABLE=y
+ endif
  # ===========================================================================
  # Rules shared between *config targets and build targets
  
@@@ -1358,14 -1367,6 +1367,6 @@@ OBJCOPYFLAGS_u-boot.ldr.srec := -I bina
  u-boot.ldr.hex u-boot.ldr.srec: u-boot.ldr FORCE
        $(call if_changed,objcopy)
  
- #
- # U-Boot entry point, needed for booting of full-blown U-Boot
- # from the SPL U-Boot version.
- #
- ifndef CFG_SYS_UBOOT_START
- CFG_SYS_UBOOT_START := $(CONFIG_TEXT_BASE)
- endif
  # Boards with more complex image requirements can provide an .its source file
  # or a generator script
  # NOTE: Please do not use this. We are migrating away from Makefile rules to use
@@@ -1385,7 -1386,7 +1386,7 @@@ endi
  
  ifdef CONFIG_SPL_LOAD_FIT
  MKIMAGEFLAGS_u-boot.img = -f auto -A $(ARCH) -T firmware -C none -O u-boot \
-       -a $(CONFIG_TEXT_BASE) -e $(CFG_SYS_UBOOT_START) \
+       -a $(CONFIG_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \
        -p $(CONFIG_FIT_EXTERNAL_OFFSET) \
        -n "U-Boot $(UBOOTRELEASE) for $(BOARD) board" -E \
        $(patsubst %,-b arch/$(ARCH)/dts/%.dtb,$(subst ",,$(DEVICE_TREE))) \
        $(patsubst %,-b arch/$(ARCH)/dts/%.dtbo,$(subst ",,$(CONFIG_OF_OVERLAY_LIST)))
  else
  MKIMAGEFLAGS_u-boot.img = -A $(ARCH) -T firmware -C none -O u-boot \
-       -a $(CONFIG_TEXT_BASE) -e $(CFG_SYS_UBOOT_START) \
+       -a $(CONFIG_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \
        -n "U-Boot $(UBOOTRELEASE) for $(BOARD) board"
  MKIMAGEFLAGS_u-boot-ivt.img = -A $(ARCH) -T firmware_ivt -C none -O u-boot \
-       -a $(CONFIG_TEXT_BASE) -e $(CFG_SYS_UBOOT_START) \
+       -a $(CONFIG_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \
        -n "U-Boot $(UBOOTRELEASE) for $(BOARD) board"
  u-boot-ivt.img: MKIMAGEOUTPUT = u-boot-ivt.img.log
  endif
@@@ -1427,7 -1428,7 +1428,7 @@@ MKIMAGEFLAGS_u-boot.pbl = -n $(srctree)
  UBOOT_BIN := u-boot.bin
  
  MKIMAGEFLAGS_u-boot-lzma.img = -A $(ARCH) -T standalone -C lzma -O u-boot \
-       -a $(CONFIG_TEXT_BASE) -e $(CFG_SYS_UBOOT_START) \
+       -a $(CONFIG_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \
        -n "U-Boot $(UBOOTRELEASE) for $(BOARD) board"
  
  u-boot.bin.lzma: u-boot.bin FORCE
diff --combined arch/arm/Kconfig
@@@ -998,6 -998,7 +998,7 @@@ config ARCH_APPL
        select OF_BOARD_SETUP
        select OF_CONTROL
        select PCI
+       select PHY
        select PINCTRL
        select POSITION_INDEPENDENT
        select POWER_DOMAIN
@@@ -1036,6 -1037,16 +1037,16 @@@ config ARCH_QEM
        imply DM_RTC
        imply RTC_PL031
        imply OF_HAS_PRIOR_STAGE
+       imply VIDEO
+       imply VIDEO_BOCHS
+       imply SYS_WHITE_ON_BLACK
+       imply SYS_CONSOLE_IS_IN_ENV
+       imply PRE_CONSOLE_BUFFER
+       imply USB
+       imply USB_XHCI_HCD
+       imply USB_XHCI_PCI
+       imply USB_KEYBOARD
+       imply CMD_USB
  
  config ARCH_RMOBILE
        bool "Renesas ARM SoCs"
@@@ -2101,7 -2112,7 +2112,7 @@@ config SERIAL_TA
  
  config STATIC_MACH_TYPE
        bool "Statically define the Machine ID number"
 -      default y if TARGET_DS109 || TARGET_NOKIA_RX51 || TARGET_DS414 || DEFAULT_DEVICE_TREE = "sun7i-a20-icnova-swac"
 +      default y if TARGET_DS109 || TARGET_DS414 || DEFAULT_DEVICE_TREE = "sun7i-a20-icnova-swac"
        help
          When booting via ATAGs, enable this option if we know the correct
          machine ID number to use at compile time.  Some systems will be
@@@ -2111,6 -2122,7 +2122,6 @@@ config MACH_TYP
        int "Machine ID number"
        depends on STATIC_MACH_TYPE
        default 527 if TARGET_DS109
 -      default 1955 if TARGET_NOKIA_RX51
        default 3036 if TARGET_DS414
        default 4283 if DEFAULT_DEVICE_TREE = "sun7i-a20-icnova-swac"
        help
@@@ -32,7 -32,6 +32,7 @@@ config IMX_RD
  config IMX_BOOTAUX
        bool "Support boot auxiliary core"
        depends on ARCH_MX7 || ARCH_MX6 || ARCH_VF610 || ARCH_IMX8 || ARCH_IMX8M
 +      select LIB_ELF
        help
          bootaux [addr] to boot auxiliary core.
  
@@@ -182,7 -181,7 +182,7 @@@ config IMX8_ROMAP
  config SPL_IMX_ROMAPI_LOADADDR
        hex "Default load address to load image through ROM API"
        depends on IMX8_ROMAPI || SPL_BOOTROM_SUPPORT
-       default 0
+       default 0x0
  
  config IMX_DCD_ADDR
        hex "DCD Blocks location on the image"
@@@ -244,7 -244,7 +244,7 @@@ int dram_init(void
                return ret;
  
        /* rom_pointer[1] contains the size of TEE occupies */
 -      if (!IS_ENABLED(CONFIG_ARMV8_PSCI) && rom_pointer[1])
 +      if (!IS_ENABLED(CONFIG_ARMV8_PSCI) && !IS_ENABLED(CONFIG_SPL_BUILD) && rom_pointer[1])
                gd->ram_size = sdram_size - rom_pointer[1];
        else
                gd->ram_size = sdram_size;
@@@ -273,7 -273,7 +273,7 @@@ int dram_init_banksize(void
        }
  
        gd->bd->bi_dram[bank].start = PHYS_SDRAM;
 -      if (!IS_ENABLED(CONFIG_ARMV8_PSCI) && rom_pointer[1]) {
 +      if (!IS_ENABLED(CONFIG_ARMV8_PSCI) && !IS_ENABLED(CONFIG_SPL_BUILD) && rom_pointer[1]) {
                phys_addr_t optee_start = (phys_addr_t)rom_pointer[0];
                phys_size_t optee_size = (size_t)rom_pointer[1];
  
@@@ -318,8 -318,7 +318,8 @@@ phys_size_t get_effective_memsize(void
                        sdram_b1_size = sdram_size;
                }
  
 -              if (!IS_ENABLED(CONFIG_ARMV8_PSCI) && rom_pointer[1]) {
 +              if (!IS_ENABLED(CONFIG_ARMV8_PSCI) && !IS_ENABLED(CONFIG_SPL_BUILD) &&
 +                  rom_pointer[1]) {
                        /* We will relocate u-boot to Top of dram1. Tee position has two cases:
                         * 1. At the top of dram1,  Then return the size removed optee size.
                         * 2. In the middle of dram1, return the size of dram1.
@@@ -533,7 -532,7 +533,7 @@@ static void imx_set_wdog_powerdown(boo
        writew(enable, &wdog3->wmcr);
  }
  
- static int imx8m_check_clock(void *ctx, struct event *event)
+ static int imx8m_check_clock(void)
  {
        struct udevice *dev;
        int ret;
  
        return 0;
  }
- EVENT_SPY(EVT_DM_POST_INIT_F, imx8m_check_clock);
+ EVENT_SPY_SIMPLE(EVT_DM_POST_INIT_F, imx8m_check_clock);
  
  static void imx8m_setup_snvs(void)
  {
@@@ -361,7 -361,7 +361,7 @@@ int dram_init(void
                return ret;
  
        /* rom_pointer[1] contains the size of TEE occupies */
 -      if (rom_pointer[1])
 +      if (!IS_ENABLED(CONFIG_SPL_BUILD) && rom_pointer[1])
                gd->ram_size = sdram_size - rom_pointer[1];
        else
                gd->ram_size = sdram_size;
@@@ -390,7 -390,7 +390,7 @@@ int dram_init_banksize(void
        }
  
        gd->bd->bi_dram[bank].start = PHYS_SDRAM;
 -      if (rom_pointer[1]) {
 +      if (!IS_ENABLED(CONFIG_SPL_BUILD) && rom_pointer[1]) {
                phys_addr_t optee_start = (phys_addr_t)rom_pointer[0];
                phys_size_t optee_size = (size_t)rom_pointer[1];
  
@@@ -435,7 -435,7 +435,7 @@@ phys_size_t get_effective_memsize(void
                else
                        sdram_b1_size = sdram_size;
  
 -              if (rom_pointer[1]) {
 +              if (!IS_ENABLED(CONFIG_SPL_BUILD) && rom_pointer[1]) {
                        /* We will relocate u-boot to top of dram1. TEE position has two cases:
                         * 1. At the top of dram1,  Then return the size removed optee size.
                         * 2. In the middle of dram1, return the size of dram1.
@@@ -552,7 -552,7 +552,7 @@@ int arch_cpu_init(void
        return 0;
  }
  
- int imx9_probe_mu(void *ctx, struct event *event)
+ int imx9_probe_mu(void)
  {
        struct udevice *devp;
        int node, ret;
  
        return 0;
  }
- EVENT_SPY(EVT_DM_POST_INIT_F, imx9_probe_mu);
+ EVENT_SPY_SIMPLE(EVT_DM_POST_INIT_F, imx9_probe_mu);
  
  int timer_init(void)
  {
@@@ -39,6 -39,8 +39,8 @@@
                mmc1 = "/mmc1";
                mmc2 = "/mmc2";
                mmc3 = "/mmc3";
+               mmc4 = "/mmc4";
+               mmc5 = "/mmc5";
                pci0 = &pci0;
                pci1 = &pci1;
                pci2 = &pci2;
                };
        };
  
+       options {
+               u-boot {
+                       compatible = "u-boot,config";
+                       bootscr-ram-offset = /bits/ 64 <0x12345678>;
+                       bootscr-flash-offset = /bits/ 64 <0>;
+                       bootscr-flash-size = /bits/ 64 <0x2000>;
+               };
+       };
        bootstd {
                bootph-verify;
                compatible = "u-boot,boot-std";
                        menuitem-gap-y = <1>;
                };
  
+               cedit-theme {
+                       font-size = <30>;
+                       menu-inset = <3>;
+                       menuitem-gap-y = <1>;
+               };
                /*
                 * This is used for the VBE OS-request tests. A FAT filesystem
                 * created in a partition with the VBE information appearing
 -               * before the parititon starts
 +               * before the partition starts
                 */
                firmware0 {
                        bootph-verify;
        cedit: cedit {
        };
  
-       cedit-theme {
-               font-size = <30>;
-               menu-inset = <3>;
-               menuitem-gap-y = <1>;
-       };
        fuzzing-engine {
                compatible = "sandbox,fuzzing-engine";
        };
                uint-value = <(-1234)>;
                int64-value = /bits/ 64 <0x1111222233334444>;
                int-array = <5678 9123 4567>;
+               int64-array = /bits/ 64 <0x1111222233334444 0x4444333322221111>;
                str-value = "test string";
                interrupts-extended = <&irq 3 0>;
                acpi,name = "GHIJ";
                #phy-cells = <0>;
        };
  
+       phy_provider3: gen_phy@3 {
+               compatible = "sandbox,phy";
+               #phy-cells = <2>;
+       };
        gen_phy_user: gen_phy_user {
                compatible = "simple-bus";
                phys = <&phy_provider0 0>, <&phy_provider0 1>, <&phy_provider1>;
                phy-names = "phy1", "phy2";
        };
  
+       gen_phy_user2: gen_phy_user2 {
+               compatible = "simple-bus";
+               phys = <&phy_provider3 0 0>;
+               phy-names = "phy1";
+       };
        some-bus {
                #address-cells = <1>;
                #size-cells = <0>;
                clock-names = "fixed", "i2c", "spi", "uart2", "uart1";
        };
  
+       clk-test2 {
+               compatible = "sandbox,clk-test";
+               assigned-clock-rates = <321>;
+       };
+       clk-test3 {
+               compatible = "sandbox,clk-test";
+               assigned-clocks = <&clk_sandbox 1>;
+       };
+       clk-test4 {
+               compatible = "sandbox,clk-test";
+               assigned-clock-rates = <654>, <321>;
+               assigned-clocks = <&clk_sandbox 1>;
+       };
        ccf: clk-ccf {
                compatible = "sandbox,clk-ccf";
        };
                filename = "mmc4.img";
        };
  
+       /* This is used for ChromiumOS tests */
+       mmc5 {
+               status = "disabled";
+               compatible = "sandbox,mmc";
+               filename = "mmc5.img";
+       };
        pch {
                compatible = "sandbox,pch";
        };
@@@ -7,14 -7,12 +7,14 @@@
  #include <common.h>
  #include <cpu_func.h>
  #include <dm.h>
 +#include <fdt_support.h>
  #include <env.h>
  #include <asm/arch/eeprom.h>
  #include <asm/io.h>
  #include <asm/sections.h>
  #include <linux/bitops.h>
  
 +DECLARE_GLOBAL_DATA_PTR;
  #define JH7110_L2_PREFETCHER_BASE_ADDR                0x2030000
  #define JH7110_L2_PREFETCHER_HART_OFFSET      0x2000
  #define FDTFILE_VISIONFIVE2_1_2A \
@@@ -90,10 -88,5 +90,10 @@@ void *board_fdt_blob_setup(int *err
                        return (ulong *)(uintptr_t)gd->arch.firmware_fdt_addr;
        }
  
-       return (ulong *)&_end;
+       return (ulong *)_end;
  }
 +
 +int ft_board_setup(void *blob, struct bd_info *bd)
 +{
 +      return fdt_fixup_memory(blob, 0x40000000, gd->ram_size);
 +}
diff --combined boot/expo_build.c
@@@ -209,27 -209,26 +209,26 @@@ static void list_strings(struct build_i
  /**
   * menu_build() - Build a menu and add it to a scene
   *
 - * See doc/developer/expo.rst for a description of the format
 + * See doc/develop/expo.rst for a description of the format
   *
   * @info: Build information
   * @node: Node containing the menu description
   * @scn: Scene to add the menu to
+  * @id: ID for the menu
+  * @objp: Returns the object pointer
   * Returns: 0 if OK, -ENOMEM if out of memory, -EINVAL if there is a format
   * error, -ENOENT if there is a references to a non-existent string
   */
- static int menu_build(struct build_info *info, ofnode node, struct scene *scn)
+ static int menu_build(struct build_info *info, ofnode node, struct scene *scn,
+                     uint id, struct scene_obj **objp)
  {
        struct scene_obj_menu *menu;
        uint title_id, menu_id;
        const u32 *item_ids;
        int ret, size, i;
        const char *name;
-       u32 id;
  
        name = ofnode_get_name(node);
-       ret = ofnode_read_u32(node, "id", &id);
-       if (ret)
-               return log_msg_ret("id", -EINVAL);
  
        ret = scene_menu(scn, name, id, &menu);
        if (ret < 0)
                if (ret < 0)
                        return log_msg_ret("mi", ret);
        }
+       *objp = &menu->obj;
  
        return 0;
  }
  
  /**
-  * menu_build() - Build an expo object and add it to a scene
+  * obj_build() - Build an expo object and add it to a scene
   *
 - * See doc/developer/expo.rst for a description of the format
 + * See doc/develop/expo.rst for a description of the format
   *
   * @info: Build information
   * @node: Node containing the object description
   */
  static int obj_build(struct build_info *info, ofnode node, struct scene *scn)
  {
+       struct scene_obj *obj;
        const char *type;
-       u32 id;
+       u32 id, val;
        int ret;
  
        log_debug("- object %s\n", ofnode_get_name(node));
                return log_msg_ret("typ", -EINVAL);
  
        if (!strcmp("menu", type))
-               ret = menu_build(info, node, scn);
+               ret = menu_build(info, node, scn, id, &obj);
         else
                ret = -EINVAL;
        if (ret)
                return log_msg_ret("bld", ret);
  
+       if (!ofnode_read_u32(node, "start-bit", &val))
+               obj->start_bit = val;
+       if (!ofnode_read_u32(node, "bit-length", &val))
+               obj->bit_length = val;
        return 0;
  }
  
  /**
   * scene_build() - Build a scene and all its objects
   *
 - * See doc/developer/expo.rst for a description of the format
 + * See doc/develop/expo.rst for a description of the format
   *
   * @info: Build information
   * @node: Node containing the scene description
diff --combined common/dlmalloc.c
@@@ -575,19 -575,6 +575,6 @@@ static mbinptr av_[NAV * 2 + 2] = 
   IAV(120), IAV(121), IAV(122), IAV(123), IAV(124), IAV(125), IAV(126), IAV(127)
  };
  
- #ifdef CONFIG_NEEDS_MANUAL_RELOC
- static void malloc_bin_reloc(void)
- {
-       mbinptr *p = &av_[2];
-       size_t i;
-       for (i = 2; i < ARRAY_SIZE(av_); ++i, ++p)
-               *p = (mbinptr)((ulong)*p + gd->reloc_off);
- }
- #else
- static inline void malloc_bin_reloc(void) {}
- #endif
  #ifdef CONFIG_SYS_MALLOC_DEFAULT_TO_INIT
  static void malloc_init(void);
  #endif
@@@ -631,10 -618,9 +618,9 @@@ void mem_malloc_init(ulong start, ulon
  
        debug("using memory %#lx-%#lx for malloc()\n", mem_malloc_start,
              mem_malloc_end);
 -#ifdef CONFIG_SYS_MALLOC_CLEAR_ON_INIT
 +#if CONFIG_IS_ENABLED(SYS_MALLOC_CLEAR_ON_INIT)
        memset((void *)mem_malloc_start, 0x0, size);
  #endif
-       malloc_bin_reloc();
  }
  
  /* field-extraction macros */
@@@ -2153,7 -2139,7 +2139,7 @@@ Void_t* cALLOc(n, elem_size) size_t n; 
  
  
    /* check if expand_top called, in which case don't need to clear */
 -#ifdef CONFIG_SYS_MALLOC_CLEAR_ON_INIT
 +#if CONFIG_IS_ENABLED(SYS_MALLOC_CLEAR_ON_INIT)
  #if MORECORE_CLEARS
    mchunkptr oldtop = top;
    INTERNAL_SIZE_T oldtopsize = chunksize(top);
  
      csz = chunksize(p);
  
 -#ifdef CONFIG_SYS_MALLOC_CLEAR_ON_INIT
 +#if CONFIG_IS_ENABLED(SYS_MALLOC_CLEAR_ON_INIT)
  #if MORECORE_CLEARS
      if (p == oldtop && csz > oldtopsize)
      {
diff --combined common/spl/spl_opensbi.c
@@@ -15,6 -15,7 +15,7 @@@
  #include <asm/smp.h>
  #include <opensbi.h>
  #include <linux/libfdt.h>
+ #include <linux/printk.h>
  
  DECLARE_GLOBAL_DATA_PTR;
  
@@@ -43,12 -44,11 +44,12 @@@ static int spl_opensbi_find_uboot_node(
        return -ENODEV;
  }
  
 -void spl_invoke_opensbi(struct spl_image_info *spl_image)
 +void __noreturn spl_invoke_opensbi(struct spl_image_info *spl_image)
  {
        int ret, uboot_node;
        ulong uboot_entry;
 -      void (*opensbi_entry)(ulong hartid, ulong dtb, ulong info);
 +      typedef void __noreturn (*opensbi_entry_t)(ulong hartid, ulong dtb, ulong info);
 +      opensbi_entry_t opensbi_entry;
  
        if (!spl_image->fdt_addr) {
                pr_err("No device tree specified in SPL image\n");
@@@ -75,7 -75,7 +76,7 @@@
        opensbi_info.options = CONFIG_SPL_OPENSBI_SCRATCH_OPTIONS;
        opensbi_info.boot_hart = gd->arch.boot_hart;
  
 -      opensbi_entry = (void (*)(ulong, ulong, ulong))spl_image->entry_point;
 +      opensbi_entry = (opensbi_entry_t)spl_image->entry_point;
        invalidate_icache_all();
  
  #ifdef CONFIG_SPL_SMP
@@@ -13,6 -13,7 +13,6 @@@ CONFIG_MX6_OCRAM_256KB=
  CONFIG_TARGET_MX6LOGICPD=y
  CONFIG_DEFAULT_DEVICE_TREE="imx6q-logicpd"
  CONFIG_SPL_TEXT_BASE=0x00908000
 -CONFIG_SYS_PROMPT="i.MX6 Logic # "
  CONFIG_SYS_MONITOR_LEN=409600
  CONFIG_SPL_MMC=y
  CONFIG_SPL_SERIAL=y
@@@ -42,7 -43,6 +42,7 @@@ CONFIG_SYS_MMCSD_RAW_MODE_KERNEL_SECTOR
  CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTOR=0x800
  CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTORS=0x800
  CONFIG_SPL_WATCHDOG=y
 +CONFIG_SYS_PROMPT="i.MX6 Logic # "
  CONFIG_SYS_MAXARGS=32
  CONFIG_SYS_PBSIZE=543
  CONFIG_CMD_SPL=y
@@@ -86,7 -86,6 +86,6 @@@ CONFIG_LED=
  CONFIG_LED_GPIO=y
  CONFIG_MISC=y
  CONFIG_I2C_EEPROM=y
- CONFIG_SYS_I2C_EEPROM_ADDR=0x0
  CONFIG_FSL_USDHC=y
  CONFIG_MTD=y
  CONFIG_DM_MTD=y
@@@ -5,7 -5,7 +5,7 @@@ CONFIG_SYS_MALLOC_LEN=0x100000
  CONFIG_SPL_GPIO=y
  CONFIG_SPL_LIBCOMMON_SUPPORT=y
  CONFIG_SPL_LIBGENERIC_SUPPORT=y
 -CONFIG_NR_DRAM_BANKS=1
 +CONFIG_NR_DRAM_BANKS=2
  CONFIG_SF_DEFAULT_SPEED=50000000
  CONFIG_ENV_SIZE=0x40000
  CONFIG_ENV_OFFSET=0xFFFC0000
@@@ -14,6 -14,7 +14,6 @@@ CONFIG_DM_GPIO=
  CONFIG_DEFAULT_DEVICE_TREE="imx8mm-data-modul-edm-sbc"
  CONFIG_SPL_TEXT_BASE=0x7E1000
  CONFIG_TARGET_IMX8MM_DATA_MODUL_EDM_SBC=y
 -CONFIG_SYS_PROMPT="u-boot=> "
  CONFIG_OF_LIBFDT_OVERLAY=y
  CONFIG_DM_RESET=y
  CONFIG_SYS_MONITOR_LEN=1048576
@@@ -66,7 -67,6 +66,7 @@@ CONFIG_SPL_RAM_DEVICE=
  CONFIG_SPL_WATCHDOG=y
  CONFIG_SPL_YMODEM_SUPPORT=y
  CONFIG_HUSH_PARSER=y
 +CONFIG_SYS_PROMPT="u-boot=> "
  CONFIG_SYS_MAXARGS=64
  CONFIG_SYS_CBSIZE=2048
  CONFIG_SYS_PBSIZE=2074
@@@ -157,6 -157,7 +157,6 @@@ CONFIG_SPL_CLK_COMPOSITE_CCF=
  CONFIG_CLK_COMPOSITE_CCF=y
  CONFIG_SPL_CLK_IMX8MM=y
  CONFIG_CLK_IMX8MM=y
 -CONFIG_SAVED_DRAM_TIMING_BASE=0x40000000
  CONFIG_DFU_TFTP=y
  CONFIG_DFU_TIMEOUT=y
  CONFIG_DFU_MMC=y
@@@ -232,6 -233,5 +232,5 @@@ CONFIG_USB_GADGET_MANUFACTURER="Data Mo
  CONFIG_USB_GADGET_VENDOR_NUM=0x0525
  CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5
  CONFIG_CI_UDC=y
- CONFIG_SDP_LOADADDR=0x0
  CONFIG_USB_FUNCTION_ACM=y
  CONFIG_IMX_WATCHDOG=y
@@@ -15,6 -15,7 +15,6 @@@ CONFIG_DEFAULT_DEVICE_TREE="imx8mn-beac
  CONFIG_SPL_TEXT_BASE=0x912000
  CONFIG_TARGET_IMX8MN_BEACON=y
  CONFIG_IMX8MN_BEACON_2GB_LPDDR=y
 -CONFIG_SYS_PROMPT="u-boot=> "
  CONFIG_OF_LIBFDT_OVERLAY=y
  CONFIG_DM_RESET=y
  CONFIG_SYS_MONITOR_LEN=524288
@@@ -51,7 -52,6 +51,7 @@@ CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR
  CONFIG_SPL_I2C=y
  CONFIG_SPL_POWER=y
  CONFIG_HUSH_PARSER=y
 +CONFIG_SYS_PROMPT="u-boot=> "
  CONFIG_SYS_MAXARGS=64
  CONFIG_SYS_CBSIZE=2048
  CONFIG_SYS_PBSIZE=2074
@@@ -142,4 -142,3 +142,3 @@@ CONFIG_USB_GADGET_MANUFACTURER="FSL
  CONFIG_USB_GADGET_VENDOR_NUM=0x0525
  CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5
  CONFIG_CI_UDC=y
- CONFIG_SDP_LOADADDR=0x0
@@@ -14,6 -14,7 +14,6 @@@ CONFIG_DM_GPIO=
  CONFIG_DEFAULT_DEVICE_TREE="imx8mn-beacon-kit"
  CONFIG_SPL_TEXT_BASE=0x912000
  CONFIG_TARGET_IMX8MN_BEACON=y
 -CONFIG_SYS_PROMPT="u-boot=> "
  CONFIG_OF_LIBFDT_OVERLAY=y
  CONFIG_DM_RESET=y
  CONFIG_SYS_MONITOR_LEN=524288
@@@ -51,7 -52,6 +51,7 @@@ CONFIG_SPL_I2C=
  CONFIG_SPL_POWER=y
  CONFIG_SPL_WATCHDOG=y
  CONFIG_HUSH_PARSER=y
 +CONFIG_SYS_PROMPT="u-boot=> "
  CONFIG_SYS_MAXARGS=64
  CONFIG_SYS_CBSIZE=2048
  CONFIG_SYS_PBSIZE=2074
@@@ -149,5 -149,4 +149,4 @@@ CONFIG_USB_GADGET_MANUFACTURER="FSL
  CONFIG_USB_GADGET_VENDOR_NUM=0x0525
  CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5
  CONFIG_CI_UDC=y
- CONFIG_SDP_LOADADDR=0x0
  CONFIG_IMX_WATCHDOG=y
@@@ -14,6 -14,7 +14,6 @@@ CONFIG_DM_GPIO=
  CONFIG_DEFAULT_DEVICE_TREE="imx8mn-beacon-kit"
  CONFIG_SPL_TEXT_BASE=0x912000
  CONFIG_TARGET_IMX8MN_BEACON=y
 -CONFIG_SYS_PROMPT="u-boot=> "
  CONFIG_OF_LIBFDT_OVERLAY=y
  CONFIG_DM_RESET=y
  CONFIG_SYS_MONITOR_LEN=524288
@@@ -51,7 -52,6 +51,7 @@@ CONFIG_SPL_I2C=
  CONFIG_SPL_POWER=y
  CONFIG_SPL_WATCHDOG=y
  CONFIG_HUSH_PARSER=y
 +CONFIG_SYS_PROMPT="u-boot=> "
  CONFIG_SYS_MAXARGS=64
  CONFIG_SYS_CBSIZE=2048
  CONFIG_SYS_PBSIZE=2074
@@@ -149,7 -149,6 +149,6 @@@ CONFIG_USB_GADGET_MANUFACTURER="FSL
  CONFIG_USB_GADGET_VENDOR_NUM=0x0525
  CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5
  CONFIG_CI_UDC=y
- CONFIG_SDP_LOADADDR=0x0
  CONFIG_IMX_WATCHDOG=y
  CONFIG_FSPI_CONF_HEADER=y
  CONFIG_FSPI_CONF_FILE="fspi_header.bin"
@@@ -16,6 -16,7 +16,6 @@@ CONFIG_DEFAULT_DEVICE_TREE="imx8mp-beac
  CONFIG_SPL_TEXT_BASE=0x920000
  CONFIG_SYS_HAS_ARMV8_SECURE_BASE=y
  CONFIG_TARGET_IMX8MP_BEACON=y
 -CONFIG_SYS_PROMPT="u-boot=> "
  CONFIG_SYS_MONITOR_LEN=524288
  CONFIG_SPL_MMC=y
  CONFIG_SPL_SERIAL=y
@@@ -60,7 -61,6 +60,7 @@@ CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR
  CONFIG_SPL_I2C=y
  CONFIG_SPL_POWER=y
  CONFIG_SPL_WATCHDOG=y
 +CONFIG_SYS_PROMPT="u-boot=> "
  CONFIG_SYS_MAXARGS=64
  CONFIG_SYS_CBSIZE=2048
  CONFIG_SYS_PBSIZE=2074
@@@ -172,7 -172,6 +172,6 @@@ CONFIG_USB_GADGET=
  CONFIG_USB_GADGET_MANUFACTURER="FSL"
  CONFIG_USB_GADGET_VENDOR_NUM=0x1fc9
  CONFIG_USB_GADGET_PRODUCT_NUM=0x0152
- CONFIG_SDP_LOADADDR=0x0
  CONFIG_USB_FUNCTION_ACM=y
  CONFIG_USB_ETHER=y
  CONFIG_USB_ETH_CDC=y
@@@ -15,6 -15,7 +15,6 @@@ CONFIG_SPL_DM_SPI=
  CONFIG_DEFAULT_DEVICE_TREE="imx8mp-data-modul-edm-sbc"
  CONFIG_SPL_TEXT_BASE=0x920000
  CONFIG_TARGET_IMX8MP_DATA_MODUL_EDM_SBC=y
 -CONFIG_SYS_PROMPT="u-boot=> "
  CONFIG_OF_LIBFDT_OVERLAY=y
  CONFIG_DM_RESET=y
  CONFIG_SYS_MONITOR_LEN=1048576
@@@ -72,7 -73,6 +72,7 @@@ CONFIG_SPL_SPI_LOAD=
  CONFIG_SYS_SPI_U_BOOT_OFFS=0x58000
  CONFIG_SPL_WATCHDOG=y
  CONFIG_HUSH_PARSER=y
 +CONFIG_SYS_PROMPT="u-boot=> "
  CONFIG_SYS_MAXARGS=64
  CONFIG_SYS_CBSIZE=2048
  CONFIG_SYS_PBSIZE=2081
@@@ -164,6 -164,7 +164,6 @@@ CONFIG_SPL_CLK_COMPOSITE_CCF=
  CONFIG_CLK_COMPOSITE_CCF=y
  CONFIG_SPL_CLK_IMX8MP=y
  CONFIG_CLK_IMX8MP=y
 -CONFIG_SAVED_DRAM_TIMING_BASE=0x40000000
  CONFIG_DFU_TFTP=y
  CONFIG_DFU_TIMEOUT=y
  CONFIG_DFU_MMC=y
@@@ -256,7 -257,6 +256,6 @@@ CONFIG_USB_GADGET=
  CONFIG_USB_GADGET_MANUFACTURER="Data Modul"
  CONFIG_USB_GADGET_VENDOR_NUM=0x0525
  CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5
- CONFIG_SDP_LOADADDR=0x0
  CONFIG_USB_FUNCTION_ACM=y
  CONFIG_USB_ETHER=y
  CONFIG_USB_ETH_CDC=y
@@@ -15,6 -15,7 +15,6 @@@ CONFIG_DM_GPIO=
  CONFIG_DEFAULT_DEVICE_TREE="imx8mp-dhcom-pdk2"
  CONFIG_SPL_TEXT_BASE=0x920000
  CONFIG_TARGET_IMX8MP_DH_DHCOM_PDK2=y
 -CONFIG_SYS_PROMPT="u-boot=> "
  CONFIG_OF_LIBFDT_OVERLAY=y
  CONFIG_DM_RESET=y
  CONFIG_SYS_MONITOR_LEN=1048576
@@@ -67,7 -68,6 +67,7 @@@ CONFIG_SPL_I2C=
  CONFIG_SPL_POWER=y
  CONFIG_SPL_WATCHDOG=y
  CONFIG_HUSH_PARSER=y
 +CONFIG_SYS_PROMPT="u-boot=> "
  CONFIG_SYS_MAXARGS=64
  CONFIG_SYS_CBSIZE=2048
  CONFIG_SYS_PBSIZE=2081
@@@ -160,6 -160,7 +160,6 @@@ CONFIG_SPL_CLK_COMPOSITE_CCF=
  CONFIG_CLK_COMPOSITE_CCF=y
  CONFIG_SPL_CLK_IMX8MP=y
  CONFIG_CLK_IMX8MP=y
 -CONFIG_SAVED_DRAM_TIMING_BASE=0x40000000
  CONFIG_DFU_TFTP=y
  CONFIG_DFU_TIMEOUT=y
  CONFIG_DFU_MMC=y
@@@ -254,7 -255,6 +254,6 @@@ CONFIG_USB_GADGET=
  CONFIG_USB_GADGET_MANUFACTURER="DH electronics"
  CONFIG_USB_GADGET_VENDOR_NUM=0x0525
  CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5
- CONFIG_SDP_LOADADDR=0x0
  CONFIG_USB_FUNCTION_ACM=y
  CONFIG_USB_ETHER=y
  CONFIG_USB_ETH_CDC=y
@@@ -15,6 -15,7 +15,6 @@@ CONFIG_DM_GPIO=
  CONFIG_DEFAULT_DEVICE_TREE="imx8mp-dhcom-pdk3"
  CONFIG_SPL_TEXT_BASE=0x920000
  CONFIG_TARGET_IMX8MP_DH_DHCOM_PDK2=y
 -CONFIG_SYS_PROMPT="u-boot=> "
  CONFIG_OF_LIBFDT_OVERLAY=y
  CONFIG_DM_RESET=y
  CONFIG_SYS_MONITOR_LEN=1048576
@@@ -68,7 -69,6 +68,7 @@@ CONFIG_SPL_I2C=
  CONFIG_SPL_POWER=y
  CONFIG_SPL_WATCHDOG=y
  CONFIG_HUSH_PARSER=y
 +CONFIG_SYS_PROMPT="u-boot=> "
  CONFIG_SYS_MAXARGS=64
  CONFIG_SYS_CBSIZE=2048
  CONFIG_SYS_PBSIZE=2081
@@@ -161,6 -161,7 +161,6 @@@ CONFIG_SPL_CLK_COMPOSITE_CCF=
  CONFIG_CLK_COMPOSITE_CCF=y
  CONFIG_SPL_CLK_IMX8MP=y
  CONFIG_CLK_IMX8MP=y
 -CONFIG_SAVED_DRAM_TIMING_BASE=0x40000000
  CONFIG_DFU_TFTP=y
  CONFIG_DFU_TIMEOUT=y
  CONFIG_DFU_MMC=y
@@@ -257,7 -258,6 +257,6 @@@ CONFIG_USB_GADGET=
  CONFIG_USB_GADGET_MANUFACTURER="DH electronics"
  CONFIG_USB_GADGET_VENDOR_NUM=0x0525
  CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5
- CONFIG_SDP_LOADADDR=0x0
  CONFIG_USB_FUNCTION_ACM=y
  CONFIG_USB_ETHER=y
  CONFIG_USB_ETH_CDC=y
@@@ -12,7 -12,9 +12,8 @@@ CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x2000bf
  CONFIG_ENV_SIZE=0x4000
  CONFIG_DM_GPIO=y
  CONFIG_DEFAULT_DEVICE_TREE="at91-sam9x60_curiosity"
 -CONFIG_SYS_PROMPT="U-Boot> "
  CONFIG_OF_LIBFDT_OVERLAY=y
+ CONFIG_DM_RESET=y
  CONFIG_DEBUG_UART_BASE=0xfffff200
  CONFIG_DEBUG_UART_CLOCK=200000000
  CONFIG_DEBUG_UART_BOARD_INIT=y
@@@ -29,7 -31,6 +30,7 @@@ CONFIG_SYS_CONSOLE_IS_IN_ENV=
  # CONFIG_DISPLAY_BOARDINFO is not set
  CONFIG_MISC_INIT_R=y
  CONFIG_HUSH_PARSER=y
 +CONFIG_SYS_PROMPT="U-Boot> "
  CONFIG_SYS_CBSIZE=256
  CONFIG_SYS_PBSIZE=281
  CONFIG_CMD_BOOTZ=y
@@@ -79,6 -80,7 +80,7 @@@ CONFIG_PHY_MICREL=
  CONFIG_MACB=y
  CONFIG_PINCTRL=y
  CONFIG_PINCTRL_AT91=y
+ CONFIG_RESET_AT91=y
  CONFIG_DM_SERIAL=y
  CONFIG_DEBUG_UART_ANNOUNCE=y
  CONFIG_ATMEL_USART=y
@@@ -12,7 -12,9 +12,8 @@@ CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x2000bf
  CONFIG_ENV_SIZE=0x4000
  CONFIG_DM_GPIO=y
  CONFIG_DEFAULT_DEVICE_TREE="at91-sam9x60_curiosity"
 -CONFIG_SYS_PROMPT="U-Boot> "
  CONFIG_OF_LIBFDT_OVERLAY=y
+ CONFIG_DM_RESET=y
  CONFIG_DEBUG_UART_BASE=0xfffff200
  CONFIG_DEBUG_UART_CLOCK=200000000
  CONFIG_DEBUG_UART_BOARD_INIT=y
@@@ -22,14 -24,13 +23,14 @@@ CONFIG_FIT=
  CONFIG_SD_BOOT=y
  CONFIG_BOOTDELAY=3
  CONFIG_USE_BOOTARGS=y
- CONFIG_BOOTARGS="mem=128M console=ttyS0,115200 root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait"
+ CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/mmcblk0p2 rw rootwait"
  CONFIG_USE_BOOTCOMMAND=y
  CONFIG_BOOTCOMMAND="fatload mmc 0:1 0x21000000 at91-sam9x60_curiosity.dtb; fatload mmc 0:1 0x22000000 zImage; bootz 0x22000000 - 0x21000000"
  CONFIG_SYS_CONSOLE_IS_IN_ENV=y
  # CONFIG_DISPLAY_BOARDINFO is not set
  CONFIG_MISC_INIT_R=y
  CONFIG_HUSH_PARSER=y
 +CONFIG_SYS_PROMPT="U-Boot> "
  CONFIG_SYS_CBSIZE=256
  CONFIG_SYS_PBSIZE=281
  CONFIG_CMD_BOOTZ=y
@@@ -38,6 -39,8 +39,8 @@@ CONFIG_CMD_DM=
  CONFIG_CMD_GPIO=y
  CONFIG_CMD_I2C=y
  CONFIG_CMD_MMC=y
+ CONFIG_CMD_NAND=y
+ CONFIG_CMD_NAND_TRIMFFS=y
  # CONFIG_CMD_SETEXPR is not set
  CONFIG_CMD_DHCP=y
  CONFIG_BOOTP_BOOTFILESIZE=y
@@@ -50,6 -53,8 +53,8 @@@ CONFIG_OF_CONTROL=
  CONFIG_ENV_IS_IN_FAT=y
  CONFIG_ENV_FAT_DEVICE_AND_PART="0:1"
  CONFIG_SYS_RELOC_GD_ENV_ADDR=y
+ CONFIG_REGMAP=y
+ CONFIG_SYSCON=y
  CONFIG_CLK=y
  CONFIG_CLK_CCF=y
  CONFIG_CLK_AT91=y
@@@ -60,17 -65,27 +65,27 @@@ CONFIG_CPU=
  CONFIG_AT91_GPIO=y
  CONFIG_DM_I2C=y
  CONFIG_SYS_I2C_AT91=y
+ CONFIG_ATMEL_EBI=y
+ CONFIG_MFD_ATMEL_SMC=y
  CONFIG_I2C_EEPROM=y
  CONFIG_MICROCHIP_FLEXCOM=y
  CONFIG_MMC_SDHCI=y
  CONFIG_MMC_SDHCI_ATMEL=y
+ CONFIG_MTD=y
+ CONFIG_DM_MTD=y
+ CONFIG_MTD_RAW_NAND=y
+ CONFIG_DM_NAND_ATMEL=y
+ CONFIG_SYS_NAND_ONFI_DETECTION=y
  CONFIG_PHY_MICREL=y
  CONFIG_MACB=y
  CONFIG_PINCTRL=y
  CONFIG_PINCTRL_AT91=y
+ CONFIG_RESET_AT91=y
  CONFIG_DM_SERIAL=y
  CONFIG_DEBUG_UART_ANNOUNCE=y
  CONFIG_ATMEL_USART=y
+ CONFIG_SYSRESET=y
+ CONFIG_SYSRESET_AT91=y
  CONFIG_TIMER=y
  CONFIG_MCHP_PIT64B_TIMER=y
  CONFIG_W1=y
@@@ -13,7 -13,9 +13,8 @@@ CONFIG_SF_DEFAULT_SPEED=5000000
  CONFIG_ENV_SIZE=0x4000
  CONFIG_DM_GPIO=y
  CONFIG_DEFAULT_DEVICE_TREE="sam9x60ek"
 -CONFIG_SYS_PROMPT="U-Boot> "
  CONFIG_OF_LIBFDT_OVERLAY=y
+ CONFIG_DM_RESET=y
  CONFIG_DEBUG_UART_BASE=0xfffff200
  CONFIG_DEBUG_UART_CLOCK=200000000
  CONFIG_DEBUG_UART_BOARD_INIT=y
@@@ -30,7 -32,6 +31,7 @@@ CONFIG_SYS_CONSOLE_IS_IN_ENV=
  # CONFIG_DISPLAY_BOARDINFO is not set
  CONFIG_MISC_INIT_R=y
  CONFIG_HUSH_PARSER=y
 +CONFIG_SYS_PROMPT="U-Boot> "
  CONFIG_SYS_CBSIZE=256
  CONFIG_SYS_PBSIZE=281
  CONFIG_CMD_BOOTZ=y
@@@ -87,6 -88,7 +88,7 @@@ CONFIG_PHY_MICREL=
  CONFIG_MACB=y
  CONFIG_PINCTRL=y
  CONFIG_PINCTRL_AT91=y
+ CONFIG_RESET_AT91=y
  CONFIG_DM_SERIAL=y
  CONFIG_DEBUG_UART_ANNOUNCE=y
  CONFIG_ATMEL_USART=y
@@@ -12,7 -12,9 +12,8 @@@ CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x2000bf
  CONFIG_SF_DEFAULT_SPEED=50000000
  CONFIG_DM_GPIO=y
  CONFIG_DEFAULT_DEVICE_TREE="sam9x60ek"
 -CONFIG_SYS_PROMPT="U-Boot> "
  CONFIG_OF_LIBFDT_OVERLAY=y
+ CONFIG_DM_RESET=y
  CONFIG_DEBUG_UART_BASE=0xfffff200
  CONFIG_DEBUG_UART_CLOCK=200000000
  CONFIG_DEBUG_UART_BOARD_INIT=y
@@@ -30,7 -32,6 +31,7 @@@ CONFIG_SYS_CONSOLE_IS_IN_ENV=
  # CONFIG_DISPLAY_BOARDINFO is not set
  CONFIG_MISC_INIT_R=y
  CONFIG_HUSH_PARSER=y
 +CONFIG_SYS_PROMPT="U-Boot> "
  CONFIG_SYS_CBSIZE=256
  CONFIG_SYS_PBSIZE=281
  CONFIG_CMD_BOOTZ=y
@@@ -89,6 -90,7 +90,7 @@@ CONFIG_PHY_MICREL=
  CONFIG_MACB=y
  CONFIG_PINCTRL=y
  CONFIG_PINCTRL_AT91=y
+ CONFIG_RESET_AT91=y
  CONFIG_DM_SERIAL=y
  CONFIG_DEBUG_UART_ANNOUNCE=y
  CONFIG_ATMEL_USART=y
@@@ -12,7 -12,9 +12,8 @@@ CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x2000bf
  CONFIG_ENV_SECT_SIZE=0x1000
  CONFIG_DM_GPIO=y
  CONFIG_DEFAULT_DEVICE_TREE="sam9x60ek"
 -CONFIG_SYS_PROMPT="U-Boot> "
  CONFIG_OF_LIBFDT_OVERLAY=y
+ CONFIG_DM_RESET=y
  CONFIG_DEBUG_UART_BASE=0xfffff200
  CONFIG_DEBUG_UART_CLOCK=200000000
  CONFIG_DEBUG_UART_BOARD_INIT=y
@@@ -30,7 -32,6 +31,7 @@@ CONFIG_SYS_CONSOLE_IS_IN_ENV=
  # CONFIG_DISPLAY_BOARDINFO is not set
  CONFIG_MISC_INIT_R=y
  CONFIG_HUSH_PARSER=y
 +CONFIG_SYS_PROMPT="U-Boot> "
  CONFIG_SYS_CBSIZE=256
  CONFIG_SYS_PBSIZE=281
  CONFIG_CMD_BOOTZ=y
@@@ -88,6 -89,7 +89,7 @@@ CONFIG_PHY_MICREL=
  CONFIG_MACB=y
  CONFIG_PINCTRL=y
  CONFIG_PINCTRL_AT91=y
+ CONFIG_RESET_AT91=y
  CONFIG_DM_SERIAL=y
  CONFIG_DEBUG_UART_ANNOUNCE=y
  CONFIG_ATMEL_USART=y
@@@ -4,7 -4,6 +4,6 @@@ CONFIG_ENV_SIZE=0x200
  CONFIG_DEFAULT_DEVICE_TREE="sandbox64"
  CONFIG_DM_RESET=y
  CONFIG_PRE_CON_BUF_ADDR=0x100000
- CONFIG_BOOTSTAGE_STASH_ADDR=0x0
  CONFIG_SYS_LOAD_ADDR=0x0
  CONFIG_PCI=y
  CONFIG_SANDBOX64=y
@@@ -14,6 -13,7 +13,7 @@@ CONFIG_SYS_MEMTEST_END=0x0010100
  CONFIG_FIT=y
  CONFIG_FIT_SIGNATURE=y
  CONFIG_FIT_VERBOSE=y
+ CONFIG_LEGACY_IMAGE_FORMAT=y
  CONFIG_DISTRO_DEFAULTS=y
  CONFIG_BOOTSTAGE=y
  CONFIG_BOOTSTAGE_REPORT=y
@@@ -110,6 -110,7 +110,6 @@@ CONFIG_IPV6=
  CONFIG_DM_DMA=y
  CONFIG_REGMAP=y
  CONFIG_SYSCON=y
 -CONFIG_DEVRES=y
  CONFIG_DEBUG_DEVRES=y
  CONFIG_ADC=y
  CONFIG_ADC_SANDBOX=y
@@@ -137,7 -138,6 +137,7 @@@ CONFIG_DM_DEMO_SHAPE=
  CONFIG_DFU_SF=y
  CONFIG_FASTBOOT_FLASH=y
  CONFIG_FASTBOOT_FLASH_MMC_DEV=0
 +CONFIG_ARM_FFA_TRANSPORT=y
  CONFIG_GPIO_HOG=y
  CONFIG_DM_GPIO_LOOKUP_LABEL=y
  CONFIG_QCOM_PMIC_GPIO=y
@@@ -237,6 -237,7 +237,7 @@@ CONFIG_TIMER=
  CONFIG_TIMER_EARLY=y
  CONFIG_SANDBOX_TIMER=y
  CONFIG_USB=y
+ CONFIG_DM_USB_GADGET=y
  CONFIG_USB_EMUL=y
  CONFIG_USB_KEYBOARD=y
  CONFIG_VIDEO=y
@@@ -270,3 -271,4 +271,3 @@@ CONFIG_FWU_MULTI_BANK_UPDATE=
  CONFIG_UNIT_TEST=y
  CONFIG_UT_TIME=y
  CONFIG_UT_DM=y
 -CONFIG_ARM_FFA_TRANSPORT=y
@@@ -4,7 -4,6 +4,6 @@@ CONFIG_ENV_SIZE=0x200
  CONFIG_DEFAULT_DEVICE_TREE="sandbox"
  CONFIG_DM_RESET=y
  CONFIG_PRE_CON_BUF_ADDR=0xf0000
- CONFIG_BOOTSTAGE_STASH_ADDR=0x0
  CONFIG_SYS_LOAD_ADDR=0x0
  CONFIG_PCI=y
  CONFIG_DEBUG_UART=y
@@@ -145,6 -144,7 +144,6 @@@ CONFIG_IP_DEFRAG=
  CONFIG_BOOTP_SERVERIP=y
  CONFIG_IPV6=y
  CONFIG_DM_DMA=y
 -CONFIG_DEVRES=y
  CONFIG_DEBUG_DEVRES=y
  CONFIG_SIMPLE_PM_BUS=y
  CONFIG_ADC=y
@@@ -183,7 -183,6 +182,7 @@@ CONFIG_DMA_CHANNELS=
  CONFIG_SANDBOX_DMA=y
  CONFIG_FASTBOOT_FLASH=y
  CONFIG_FASTBOOT_FLASH_MMC_DEV=0
 +CONFIG_ARM_FFA_TRANSPORT=y
  CONFIG_GPIO_HOG=y
  CONFIG_DM_GPIO_LOOKUP_LABEL=y
  CONFIG_QCOM_PMIC_GPIO=y
@@@ -227,11 -226,13 +226,13 @@@ CONFIG_SPI_FLASH_SPANSION=
  CONFIG_SPI_FLASH_STMICRO=y
  CONFIG_SPI_FLASH_SST=y
  CONFIG_SPI_FLASH_WINBOND=y
+ CONFIG_NVMXIP_QSPI=y
  CONFIG_MULTIPLEXER=y
  CONFIG_MUX_MMIO=y
  CONFIG_NVME_PCI=y
  CONFIG_PCI_REGION_MULTI_ENTRY=y
  CONFIG_PCI_SANDBOX=y
+ CONFIG_PCI_FTPCI100=y
  CONFIG_PHY=y
  CONFIG_PHY_SANDBOX=y
  CONFIG_PINCTRL=y
@@@ -298,6 -299,7 +299,7 @@@ CONFIG_TIMER=
  CONFIG_TIMER_EARLY=y
  CONFIG_SANDBOX_TIMER=y
  CONFIG_USB=y
+ CONFIG_DM_USB_GADGET=y
  CONFIG_USB_EMUL=y
  CONFIG_USB_KEYBOARD=y
  CONFIG_USB_GADGET=y
@@@ -340,8 -342,10 +342,9 @@@ CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=
  CONFIG_EFI_CAPSULE_ON_DISK=y
  CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y
  CONFIG_EFI_CAPSULE_AUTHENTICATE=y
+ CONFIG_EFI_CAPSULE_ESL_FILE="board/sandbox/capsule_pub_esl_good.esl"
  CONFIG_EFI_SECURE_BOOT=y
  CONFIG_TEST_FDTDEC=y
  CONFIG_UNIT_TEST=y
  CONFIG_UT_TIME=y
  CONFIG_UT_DM=y
 -CONFIG_ARM_FFA_TRANSPORT=y
diff --combined configs/snow_defconfig
@@@ -19,6 -19,7 +19,6 @@@ CONFIG_ENV_OFFSET=0x3FC00
  CONFIG_ENV_SECT_SIZE=0x4000
  CONFIG_DEFAULT_DEVICE_TREE="exynos5250-snow"
  CONFIG_SPL_TEXT_BASE=0x02023400
 -CONFIG_SYS_PROMPT="snow # "
  CONFIG_SPL=y
  CONFIG_DEBUG_UART_BASE=0x12c30000
  CONFIG_DEBUG_UART_CLOCK=100000000
@@@ -28,6 -29,7 +28,7 @@@ CONFIG_DEBUG_UART=
  CONFIG_FIT=y
  CONFIG_FIT_BEST_MATCH=y
  CONFIG_BOOTSTD_FULL=y
+ CONFIG_BOOTMETH_CROS=y
  CONFIG_DISTRO_DEFAULTS=y
  CONFIG_SILENT_CONSOLE=y
  CONFIG_BLOBLIST=y
@@@ -36,7 -38,6 +37,7 @@@ CONFIG_BLOBLIST_ADDR=0x43d0000
  # CONFIG_SPL_FRAMEWORK is not set
  CONFIG_SPL_FOOTPRINT_LIMIT=y
  CONFIG_SPL_MAX_FOOTPRINT=0x3800
 +CONFIG_SYS_PROMPT="snow # "
  CONFIG_SYS_PBSIZE=1024
  CONFIG_CMD_GPIO=y
  CONFIG_CMD_I2C=y
@@@ -11,6 -11,7 +11,6 @@@ CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=
  CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0xfffe0000
  CONFIG_ENV_SIZE=0x80
  CONFIG_DEFAULT_DEVICE_TREE="versal-mini"
 -CONFIG_SYS_PROMPT="Versal> "
  CONFIG_SYS_MEM_RSVD_FOR_MMU=y
  # CONFIG_PSCI_RESET is not set
  CONFIG_SYS_LOAD_ADDR=0x8000000
@@@ -20,8 -21,6 +20,6 @@@ CONFIG_SYS_MEMTEST_END=0x0000100
  CONFIG_REMAKE_ELF=y
  # CONFIG_LEGACY_IMAGE_FORMAT is not set
  # CONFIG_AUTOBOOT is not set
- CONFIG_USE_BOOTCOMMAND=y
- CONFIG_BOOTCOMMAND="run distro_bootcmd"
  CONFIG_SYS_CONSOLE_INFO_QUIET=y
  # CONFIG_DISPLAY_CPUINFO is not set
  CONFIG_BOARD_EARLY_INIT_R=y
@@@ -30,7 -29,6 +28,7 @@@ CONFIG_CLOCKS=
  # CONFIG_CMDLINE_EDITING is not set
  # CONFIG_AUTO_COMPLETE is not set
  # CONFIG_SYS_LONGHELP is not set
 +CONFIG_SYS_PROMPT="Versal> "
  CONFIG_SYS_MAXARGS=64
  CONFIG_SYS_CBSIZE=1024
  CONFIG_SYS_PBSIZE=1049
@@@ -11,13 -11,12 +11,11 @@@ CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=
  CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x10000
  CONFIG_ENV_SIZE=0x80
  CONFIG_DEFAULT_DEVICE_TREE="versal-mini-emmc0"
 -CONFIG_SYS_PROMPT="Versal> "
  # CONFIG_PSCI_RESET is not set
  CONFIG_SYS_LOAD_ADDR=0x8000000
  # CONFIG_EXPERT is not set
  CONFIG_REMAKE_ELF=y
  # CONFIG_AUTOBOOT is not set
- CONFIG_USE_BOOTCOMMAND=y
- CONFIG_BOOTCOMMAND="run distro_bootcmd"
  CONFIG_SYS_CONSOLE_INFO_QUIET=y
  # CONFIG_DISPLAY_CPUINFO is not set
  CONFIG_BOARD_EARLY_INIT_R=y
@@@ -26,7 -25,6 +24,7 @@@ CONFIG_CLOCKS=
  # CONFIG_CMDLINE_EDITING is not set
  # CONFIG_AUTO_COMPLETE is not set
  # CONFIG_SYS_LONGHELP is not set
 +CONFIG_SYS_PROMPT="Versal> "
  CONFIG_SYS_MAXARGS=64
  CONFIG_SYS_CBSIZE=1024
  CONFIG_SYS_PBSIZE=1049
@@@ -11,13 -11,12 +11,11 @@@ CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=
  CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x10000
  CONFIG_ENV_SIZE=0x80
  CONFIG_DEFAULT_DEVICE_TREE="versal-mini-emmc1"
 -CONFIG_SYS_PROMPT="Versal> "
  # CONFIG_PSCI_RESET is not set
  CONFIG_SYS_LOAD_ADDR=0x8000000
  # CONFIG_EXPERT is not set
  CONFIG_REMAKE_ELF=y
  # CONFIG_AUTOBOOT is not set
- CONFIG_USE_BOOTCOMMAND=y
- CONFIG_BOOTCOMMAND="run distro_bootcmd"
  CONFIG_SYS_CONSOLE_INFO_QUIET=y
  # CONFIG_DISPLAY_CPUINFO is not set
  CONFIG_BOARD_EARLY_INIT_R=y
@@@ -26,7 -25,6 +24,7 @@@ CONFIG_CLOCKS=
  # CONFIG_CMDLINE_EDITING is not set
  # CONFIG_AUTO_COMPLETE is not set
  # CONFIG_SYS_LONGHELP is not set
 +CONFIG_SYS_PROMPT="Versal> "
  CONFIG_SYS_MAXARGS=64
  CONFIG_SYS_CBSIZE=1024
  CONFIG_SYS_PBSIZE=1049
@@@ -6,6 -6,7 +6,6 @@@ CONFIG_ARCH_VERSAL_NET=
  CONFIG_TEXT_BASE=0x8000000
  CONFIG_SYS_MALLOC_F_LEN=0x100000
  CONFIG_DEFAULT_DEVICE_TREE="xilinx-versal-net-virt"
 -CONFIG_SYS_PROMPT="Versal NET> "
  CONFIG_OF_LIBFDT_OVERLAY=y
  CONFIG_DM_RESET=y
  CONFIG_CMD_FRU=y
@@@ -23,7 -24,6 +23,7 @@@ CONFIG_USE_PREBOOT=
  CONFIG_BOARD_EARLY_INIT_F=y
  CONFIG_BOARD_EARLY_INIT_R=y
  CONFIG_CLOCKS=y
 +CONFIG_SYS_PROMPT="Versal NET> "
  CONFIG_SYS_MAXARGS=64
  CONFIG_SYS_PBSIZE=2073
  CONFIG_SYS_BOOTM_LEN=0x6400000
@@@ -32,6 -32,7 +32,7 @@@ CONFIG_CMD_GREPENV=
  CONFIG_CMD_NVEDIT_EFI=y
  CONFIG_CMD_MEMTEST=y
  CONFIG_SYS_ALT_MEMTEST=y
+ CONFIG_CMD_SHA1SUM=y
  CONFIG_CMD_CLK=y
  CONFIG_CMD_DFU=y
  CONFIG_CMD_DM=y
@@@ -49,8 -50,10 +50,10 @@@ CONFIG_CMD_CACHE=
  CONFIG_CMD_EFIDEBUG=y
  CONFIG_CMD_TIME=y
  CONFIG_CMD_RNG=y
+ CONFIG_CMD_KASLRSEED=y
  CONFIG_CMD_TIMER=y
  CONFIG_CMD_SMC=y
+ CONFIG_CMD_TPM=y
  CONFIG_CMD_EXT4_WRITE=y
  CONFIG_CMD_SQUASHFS=y
  CONFIG_CMD_MTDPARTS=y
@@@ -77,7 -80,6 +80,6 @@@ CONFIG_DM_MAILBOX=
  CONFIG_ZYNQMP_IPI=y
  CONFIG_MISC=y
  CONFIG_I2C_EEPROM=y
- CONFIG_SYS_I2C_EEPROM_ADDR=0x0
  CONFIG_SUPPORT_EMMC_BOOT=y
  CONFIG_MMC_IO_VOLTAGE=y
  CONFIG_MMC_UHS_SUPPORT=y
@@@ -110,7 -112,6 +112,6 @@@ CONFIG_ZYNQ_GEM=
  CONFIG_POWER_DOMAIN=y
  CONFIG_ZYNQMP_POWER_DOMAIN=y
  CONFIG_RESET_ZYNQMP=y
- CONFIG_DM_RNG=y
  CONFIG_ARM_DCC=y
  CONFIG_PL01X_SERIAL=y
  CONFIG_XILINX_UARTLITE=y
@@@ -122,6 -123,7 +123,7 @@@ CONFIG_CADENCE_QSPI=
  CONFIG_CADENCE_OSPI_VERSAL=y
  CONFIG_ZYNQ_SPI=y
  CONFIG_ZYNQMP_GQSPI=y
+ CONFIG_TPM2_TIS_SPI=y
  CONFIG_USB=y
  CONFIG_DM_USB_GADGET=y
  CONFIG_USB_XHCI_HCD=y
@@@ -139,3 -141,4 +141,4 @@@ CONFIG_USB_FUNCTION_THOR=
  CONFIG_VIRTIO_MMIO=y
  CONFIG_VIRTIO_NET=y
  CONFIG_VIRTIO_BLK=y
+ CONFIG_TPM=y
@@@ -5,7 -5,9 +5,8 @@@ CONFIG_SYS_INIT_SP_BSS_OFFSET=157286
  CONFIG_ARCH_VERSAL=y
  CONFIG_TEXT_BASE=0x8000000
  CONFIG_SYS_MALLOC_F_LEN=0x100000
+ CONFIG_NR_DRAM_BANKS=36
  CONFIG_DEFAULT_DEVICE_TREE="xilinx-versal-virt"
 -CONFIG_SYS_PROMPT="Versal> "
  CONFIG_OF_LIBFDT_OVERLAY=y
  CONFIG_DM_RESET=y
  CONFIG_ENV_OFFSET_REDUND=0x7F00000
@@@ -23,7 -25,6 +24,7 @@@ CONFIG_BOOTDELAY=
  CONFIG_USE_PREBOOT=y
  CONFIG_BOARD_EARLY_INIT_R=y
  CONFIG_CLOCKS=y
 +CONFIG_SYS_PROMPT="Versal> "
  CONFIG_SYS_MAXARGS=64
  CONFIG_SYS_PBSIZE=2073
  CONFIG_SYS_BOOTM_LEN=0x6400000
@@@ -32,6 -33,7 +33,7 @@@ CONFIG_CMD_GREPENV=
  CONFIG_CMD_NVEDIT_EFI=y
  CONFIG_CMD_MEMTEST=y
  CONFIG_SYS_ALT_MEMTEST=y
+ CONFIG_CMD_SHA1SUM=y
  CONFIG_CMD_CLK=y
  CONFIG_CMD_DFU=y
  CONFIG_CMD_DM=y
@@@ -49,8 -51,10 +51,10 @@@ CONFIG_CMD_CACHE=
  CONFIG_CMD_EFIDEBUG=y
  CONFIG_CMD_TIME=y
  CONFIG_CMD_RNG=y
+ CONFIG_CMD_KASLRSEED=y
  CONFIG_CMD_TIMER=y
  CONFIG_CMD_SMC=y
+ CONFIG_CMD_TPM=y
  CONFIG_CMD_EXT4_WRITE=y
  CONFIG_CMD_SQUASHFS=y
  CONFIG_CMD_MTDPARTS=y
@@@ -114,7 -118,6 +118,6 @@@ CONFIG_ZYNQ_GEM=
  CONFIG_POWER_DOMAIN=y
  CONFIG_ZYNQMP_POWER_DOMAIN=y
  CONFIG_RESET_ZYNQMP=y
- CONFIG_DM_RNG=y
  CONFIG_ARM_DCC=y
  CONFIG_PL01X_SERIAL=y
  CONFIG_XILINX_UARTLITE=y
@@@ -127,6 -130,7 +130,7 @@@ CONFIG_CQSPI_REF_CLK=20000000
  CONFIG_CADENCE_OSPI_VERSAL=y
  CONFIG_ZYNQ_SPI=y
  CONFIG_ZYNQMP_GQSPI=y
+ CONFIG_TPM2_TIS_SPI=y
  CONFIG_USB=y
  CONFIG_DM_USB_GADGET=y
  CONFIG_USB_XHCI_HCD=y
@@@ -144,3 -148,4 +148,4 @@@ CONFIG_USB_FUNCTION_THOR=
  CONFIG_VIRTIO_MMIO=y
  CONFIG_VIRTIO_NET=y
  CONFIG_VIRTIO_BLK=y
+ CONFIG_TPM=y
@@@ -67,6 -67,10 +67,10 @@@ Additional persistent U-Boot environmen
  Additional peripherals that have been tested to work in both U-Boot and Linux
  can be enabled with the following command line parameters:
  
+ - To add a video console, remove "-nographic" and add e.g.::
+     -serial stdio -device VGA
  - To add a Serial ATA disk via an Intel ICH9 AHCI controller, pass e.g.::
  
      -drive if=none,file=disk.img,format=raw,id=mydisk \
  
      -device usb-ehci,id=ehci
  
+ - To add a USB keyboard attached to an emulated xHCI controller, pass e.g.::
+     -device qemu-xhci,id=xhci -device usb-kbd,bus=xhci.0
  - To add an NVMe disk, pass e.g.::
  
      -drive if=none,file=disk.img,id=mydisk -device nvme,drive=mydisk,serial=foo
  
  These have been tested in QEMU 2.9.0 but should work in at least 2.5.0 as well.
  
+ Booting distros
+ ---------------
+ It is possible to install and boot a standard Linux distribution using
+ qemu_arm64 by setting up a root disk::
+     qemu-img create root.img 20G
+ then using the installer to install. For example, with Debian 12::
+     qemu-system-aarch64 \
+       -machine virt -cpu cortex-a53 -m 4G -smp 4 \
+       -bios u-boot.bin \
+       -serial stdio -device VGA \
+       -nic user,model=virtio-net-pci \
+       -device virtio-rng-pci \
+       -device qemu-xhci,id=xhci \
+       -device usb-kbd -device usb-tablet \
+       -drive if=virtio,file=debian-12.0.0-arm64-netinst.iso,format=raw,readonly=on,media=cdrom \
+       -drive if=virtio,file=root.img,format=raw,media=disk
+ The output will be something like this::
+     U-Boot 2023.10-rc2-00075-gbe8fbe718e35 (Aug 11 2023 - 08:38:49 +0000)
+     DRAM:  4 GiB
+     Core:  51 devices, 14 uclasses, devicetree: board
+     Flash: 64 MiB
+     Loading Environment from Flash... *** Warning - bad CRC, using default environment
+     In:    serial,usbkbd
+     Out:   serial,vidconsole
+     Err:   serial,vidconsole
+     Bus xhci_pci: Register 8001040 NbrPorts 8
+     Starting the controller
+     USB XHCI 1.00
+     scanning bus xhci_pci for devices... 3 USB Device(s) found
+     Net:   eth0: virtio-net#32
+     Hit any key to stop autoboot:  0
+     Scanning for bootflows in all bootdevs
+     Seq  Method       State   Uclass    Part  Name                      Filename
+     ---  -----------  ------  --------  ----  ------------------------  ----------------
+     Scanning global bootmeth 'efi_mgr':
+     Scanning bootdev 'fw-cfg@9020000.bootdev':
+     fatal: no kernel available
+     scanning bus for devices...
+     Scanning bootdev 'virtio-blk#34.bootdev':
+       0  efi          ready   virtio       2  virtio-blk#34.bootdev.par efi/boot/bootaa64.efi
+     ** Booting bootflow 'virtio-blk#34.bootdev.part_2' with efi
+     Using prior-stage device tree
+     Failed to load EFI variables
+     Error: writing contents
+     ** Unable to write file ubootefi.var **
+     Failed to persist EFI variables
+     Missing TPMv2 device for EFI_TCG_PROTOCOL
+     Booting /efi\boot\bootaa64.efi
+     Error: writing contents
+     ** Unable to write file ubootefi.var **
+     Failed to persist EFI variables
+     Welcome to GRUB!
+ Standard boot looks through various available devices and finds the virtio
+ disks, then boots from the first one. After a second or so the grub menu appears
+ and you can work through the installer flow normally.
+ After the installation, you can boot into the installed system by running QEMU
+ again without the drive argument corresponding to the installer CD image.
  Enabling TPMv2 support
  ----------------------
  
@@@ -113,7 -189,7 +189,7 @@@ In a second console invoke qemu-system-
  
  Enable the TPM on U-Boot's command line with::
  
 -    tpm2 startup TPM2_SU_CLEAR
 +    tpm autostart
  
  Debug UART
  ----------
@@@ -20,8 -20,6 +20,8 @@@ The support for following drivers are a
  3. StarFive JH7110 reset Driver.
  4. Cadence QSPI controller Driver.
  5. MMC SPI Driver for MMC/SD support.
 +6. PLDA PCIE controller driver.
 +7. On-board VL805 PCIE-USB controller driver.
  
  Booting from MMC using U-Boot SPL
  ---------------------------------
@@@ -67,18 -65,8 +67,8 @@@ Now build the U-Boot SPL and U-Boot pro
        make starfive_visionfive2_defconfig
        make OPENSBI=$(opensbi_dir)/opensbi/build/platform/generic/firmware/fw_dynamic.bin
  
- This will generate spl/u-boot-spl.bin and FIT image (u-boot.itb)
- u-boot-spl.bin cannot be used directly on StarFive VisionFive2,we need
- to convert the u-boot-spl.bin to u-boot-spl.bin.normal.out with
- the below command:
-       ./spl_tool -c -f $(Uboot_PATH)/spl/u-boot-spl.bin
- More detailed description of spl_tool,please refer spl_tool documenation.
- (Note: spl_tool git repo is at https://github.com/starfive-tech/Tools/tree/master/spl_tool)
- This will generate u-boot-spl.bin.normal.out file.
+ This will generate the U-Boot SPL image (spl/u-boot-spl.bin.normal.out) as well
+ as the FIT image (u-boot.itb) with OpenSBI and U-Boot.
  
  Flashing
  ~~~~~~~~
@@@ -11,7 -11,8 +11,8 @@@ Synopi
      bootflow scan [-abelGH] [bootdev]
      bootflow list [-e]
      bootflow select [<num|name>]
-     bootflow info [-d]
+     bootflow info [-ds]
+     bootflow read
      bootflow boot
      bootflow cmdline [set|get|clear|delete|auto] <param> [<value>]
  
@@@ -191,11 -192,29 +192,29 @@@ Erro
  
  Use the `-d` flag to dump out the contents of the bootfile file.
  
+ The `-s` flag shows any x86 setup block, instead of the above.
+ bootflow read
+ ~~~~~~~~~~~~~
+ This reads any files related to the bootflow. Some bootflows with large files
+ avoid doing this when the bootflow is scanned, since it uses a lot of memory
+ and takes extra time. The files are then automatically read when `bootflow boot`
+ is used.
+ This command reads these files immediately. Typically this fills in the bootflow
+ `buf` property, which can be used to examine the bootflow.
+ Note that reading the files does not result in any extra parsing, nor loading of
+ images in the files. This is purely used to read in the data ready for
+ booting, or examination.
  
  bootflow boot
  ~~~~~~~~~~~~~
  
- This boots the current bootflow.
+ This boots the current bootflow, reading any required files first.
  
  
  bootflow cmdline
@@@ -495,8 -514,8 +514,8 @@@ the cmdline is word-wrapped here and so
            root_hexdigest=78cc462cd45aecbcd49ca476587b4dee59aa1b00ba5ece58e2c29ec9acd914ab
            salt=8dec4dc80a75dd834a9b3175c674405e15b16a253fdfe05c79394ae5fd76f66a"
          noinitrd vt.global_cursor_default=0
 -        kern_guid=799c935b-ae62-d143-8493-816fa936eef7 add_efi_memmap boot=local
 -        noresume noswap i915.modeset=1 ramoops.ecc=1 tpm_tis.force=0
 +        kern_guid=799c935b-ae62-d143-8493-816fa936eef7 add_efi_memmap
 +        noresume i915.modeset=1 ramoops.ecc=1 tpm_tis.force=0
          intel_pmc_core.warn_on_s0ix_failures=1 i915.enable_guc=3 i915.enable_dc=4
          xdomain=0 swiotlb=65536 intel_iommu=on i915.enable_psr=1
          usb-storage.quirks=13fe:6500:u
      [    0.000000] Command line: loglevel=7 ... usb-storage.quirks=13fe:6500:u earlycon=uart8250,mmio32,0xfe03e000,115200n8
      [    0.000000] x86/split lock detection: warning about user-space split_locks
  
+ This shows looking at x86 setup information::
+     => bootfl sel 0
+     => bootfl i -s
+     Setup located at 77b56010:
+     ACPI RSDP addr      : 0
+     E820: 2 entries
+             Addr        Size  Type
+                0        1000  RAM
+         fffff000        1000  Reserved
+     Setup sectors       : 1e
+     Root flags          : 1
+     Sys size            : 63420
+     RAM size            : 0
+     Video mode          : ffff
+     Root dev            : 0
+     Boot flag           : 0
+     Jump                : 66eb
+     Header              : 53726448
+                           Kernel V2
+     Version             : 20d
+     Real mode switch    : 0
+     Start sys seg       : 1000
+     Kernel version      : 38cc
+        @00003acc:
+     Type of loader      : ff
+                           unknown
+     Load flags          : 1
+                         : loaded-high
+     Setup move size     : 8000
+     Code32 start        : 100000
+     Ramdisk image       : 0
+     Ramdisk size        : 0
+     Bootsect kludge     : 0
+     Heap end ptr        : 5160
+     Ext loader ver      : 0
+     Ext loader type     : 0
+     Command line ptr    : 735000
+     Initrd addr max     : 7fffffff
+     Kernel alignment    : 200000
+     Relocatable kernel  : 1
+     Min alignment       : 15
+                         : 200000
+     Xload flags         : 3
+                         : 64-bit-entry can-load-above-4gb
+     Cmdline size        : 7ff
+     Hardware subarch    : 0
+     HW subarch data     : 0
+     Payload offset      : 26e
+     Payload length      : 612045
+     Setup data          : 0
+     Pref address        : 1000000
+     Init size           : 1383000
+     Handover offset     : 0
+ This shows reading a bootflow to examine the kernel::
+     => bootfl i 0
+     Name:
+     Device:    emmc@1c,0.bootdev
+     Block dev: emmc@1c,0.blk
+     Method:    cros
+     State:     ready
+     Partition: 2
+     Subdir:    (none)
+     Filename:  <NULL>
+     Buffer:    0
+     Size:      63ee00 (6548992 bytes)
+     OS:        ChromeOS
+     Cmdline:   console= loglevel=7 init=/sbin/init cros_secure oops=panic panic=-1 root=PARTUUID=35c775e7-3735-d745-93e5-d9e0238f7ed0/PARTNROFF=1 rootwait rw dm_verity.error_behavior=3 dm_verity.max_bios=-1 dm_verity.dev_wait=0 dm="1 vroot none rw 1,0 3788800 verity payload=ROOT_DEV hashtree=HASH_DEV hashstart=3788800 alg=sha1 root_hexdigest=55052b629d3ac889f25a9583ea12cdcd3ea15ff8 salt=a2d4d9e574069f4fed5e3961b99054b7a4905414b60a25d89974a7334021165c" noinitrd vt.global_cursor_default=0 kern_guid=35c775e7-3735-d745-93e5-d9e0238f7ed0 add_efi_memmap boot=local noresume noswap i915.modeset=1 tpm_tis.force=1 tpm_tis.interrupts=0 nmi_watchdog=panic,lapic disablevmx=off
+     X86 setup: 77b56010
+     Logo:      (none)
+     FDT:       <NULL>
+     Error:     0
+ Note that `Buffer` is 0 so it has not be read yet. Using `bootflow read`::
+     => bootfl read
+     => bootfl info
+     Name:
+     Device:    emmc@1c,0.bootdev
+     Block dev: emmc@1c,0.blk
+     Method:    cros
+     State:     ready
+     Partition: 2
+     Subdir:    (none)
+     Filename:  <NULL>
+     Buffer:    77b7e400
+     Size:      63ee00 (6548992 bytes)
+     OS:        ChromeOS
+     Cmdline:   console= loglevel=7 init=/sbin/init cros_secure oops=panic panic=-1 root=PARTUUID=35c775e7-3735-d745-93e5-d9e0238f7ed0/PARTNROFF=1 rootwait rw dm_verity.error_behavior=3 dm_verity.max_bios=-1 dm_verity.dev_wait=0 dm="1 vroot none rw 1,0 3788800 verity payload=ROOT_DEV hashtree=HASH_DEV hashstart=3788800 alg=sha1 root_hexdigest=55052b629d3ac889f25a9583ea12cdcd3ea15ff8 salt=a2d4d9e574069f4fed5e3961b99054b7a4905414b60a25d89974a7334021165c" noinitrd vt.global_cursor_default=0 kern_guid=35c775e7-3735-d745-93e5-d9e0238f7ed0 add_efi_memmap boot=local noresume noswap i915.modeset=1 tpm_tis.force=1 tpm_tis.interrupts=0 nmi_watchdog=panic,lapic disablevmx=off
+     X86 setup: 781b4400
+     Logo:      (none)
+     FDT:       <NULL>
+     Error:     0
+ Now the buffer can be accessed::
+     => md 77b7e400
+     77b7e400: 1186f6fc 40000002 b8fa0c75 00000018  .......@u.......
+     77b7e410: c08ed88e a68dd08e 000001e8 000000e8  ................
+     77b7e420: ed815d00 00000021 62c280b8 89e80100  .]..!......b....
+     77b7e430: 22f7e8c4 c0850061 22ec850f eb890061  ..."a......"a...
+     77b7e440: 0230868b 01480000 21d0f7c3 00fb81c3  ..0...H....!....
+     77b7e450: 7d010000 0000bb05 c3810100 00d4f000  ...}............
+     77b7e460: 8130858d 85890061 00618132 3095010f  ..0.a...2.a....0
+     77b7e470: 0f006181 c883e020 e0220f20 e000bb8d  .a.. ... .".....
+     77b7e480: c0310062 001800b9 8dabf300 62e000bb  b.1............b
+     77b7e490: 07878d00 89000010 00bb8d07 8d0062f0  .............b..
+     77b7e4a0: 00100787 0004b900 07890000 00100005  ................
+     77b7e4b0: 08c78300 8df37549 630000bb 0183b800  ....Iu.....c....
+     77b7e4c0: 00b90000 89000008 00000507 c7830020  ............ ...
+     77b7e4d0: f3754908 e000838d 220f0062 0080b9d8  .Iu.....b.."....
+     77b7e4e0: 320fc000 08e8ba0f c031300f b8d0000f  ...2.....01.....
+     77b7e4f0: 00000020 6ad8000f 00858d10 50000002   ......j.......P
  
  
  Return value
@@@ -1474,7 -1474,6 +1474,6 @@@ static void atmel_nand_init(struct atme
  
        mtd->dev->parent = nc->dev;
        nand->controller = &nc->base;
-       nand->controller = &nc->base;
  
        chip->cmd_ctrl = atmel_nand_cmd_ctrl;
        chip->read_byte = atmel_nand_read_byte;
@@@ -1601,13 -1600,10 +1600,13 @@@ static struct atmel_nand *atmel_nand_cr
                        nand->cs[i].rb.type = ATMEL_NAND_NATIVE_RB;
                        nand->cs[i].rb.id = val;
                } else {
 -                      gpio_request_by_name_nodev(np, "rb-gpios", 0,
 -                                                 &nand->cs[i].rb.gpio,
 -                                                 GPIOD_IS_IN);
 -                      nand->cs[i].rb.type = ATMEL_NAND_GPIO_RB;
 +                      ret = gpio_request_by_name_nodev(np, "rb-gpios", 0,
 +                                                       &nand->cs[i].rb.gpio,
 +                                                       GPIOD_IS_IN);
 +                      if (ret && ret != -ENOENT)
 +                              dev_err(nc->dev, "Failed to get R/B gpio (err = %d)\n", ret);
 +                      if (!ret)
 +                              nand->cs[i].rb.type = ATMEL_NAND_GPIO_RB;
                }
  
                gpio_request_by_name_nodev(np, "cs-gpios", 0,
diff --combined drivers/serial/Kconfig
@@@ -218,7 -218,6 +218,7 @@@ config DEBUG_UAR
  choice
        prompt "Select which UART will provide the debug UART"
        depends on DEBUG_UART
 +      default DEBUG_SBI_CONSOLE if RISCV_SMODE
        default DEBUG_UART_NS16550
  
  config DEBUG_UART_ALTERA_JTAGUART
@@@ -290,13 -289,11 +290,13 @@@ config DEBUG_EFI_CONSOL
  
  config DEBUG_SBI_CONSOLE
        bool "SBI"
 -      depends on SBI_V01
 +      depends on RISCV_SMODE
        help
          Select this to enable a debug console which calls back to SBI to
          output to the console. This can be useful for early debugging of
          U-Boot when running on top of SBI (Supervisor Binary Interface).
 +        This implementation of the debug UART is not available while in
 +        M-mode (e.g. during SPL).
  
  config DEBUG_UART_S5P
        bool "Samsung S5P"
@@@ -485,8 -482,8 +485,8 @@@ endchoic
  config DEBUG_UART_BASE
        hex "Base address of UART"
        depends on DEBUG_UART
-       default 0 if DEBUG_SBI_CONSOLE
-       default 0 if DEBUG_UART_SANDBOX
+       default 0x0 if DEBUG_SBI_CONSOLE
+       default 0x0 if DEBUG_UART_SANDBOX
        default 0xff000000 if DEBUG_UART_ZYNQ && ARCH_ZYNQMP
        default 0xe0000000 if DEBUG_UART_ZYNQ && ARCH_ZYNQ
        help
@@@ -675,7 -672,7 +675,7 @@@ config COREBOOT_SERIA
  config COREBOOT_SERIAL_FROM_DBG2
        bool "Obtain UART from ACPI tables"
        depends on COREBOOT_SERIAL
-       default y if !SPL
+       default y
        help
          Select this to try to find a DBG2 record in the ACPI tables, in the
          event that coreboot does not provide information about the UART in the
@@@ -1142,6 -1139,6 +1142,6 @@@ config SYS_SDS
  config SYS_SDMR
        hex "SDMR Value"
        depends on MPC8XX_CONS
-       default 0
+       default 0x0
  
  endif
@@@ -15,10 -15,10 +15,10 @@@ boot_fit=
  addr_fit=0x90000000
  name_fit=fitImage
  update_to_fit=setenv loadaddr ${addr_fit}; setenv bootfile ${name_fit}
 -get_overlaystring=
 -      for overlay in $name_overlays;
 -      do;
 -      setenv overlaystring ${overlaystring}'#'${overlay};
 +get_fit_overlaystring=
 +      for overlay in $name_overlays; do;
 +              setexpr name_fit_overlay gsub / _ conf-${overlay};
 +              setenv overlaystring ${overlaystring}'#'${name_fit_overlay};
        done;
  get_fit_config=setexpr name_fit_config gsub / _ conf-${fdtfile}
  run_fit=run get_fit_config; bootm ${addr_fit}#${name_fit_config}${overlaystring}
@@@ -28,7 -28,7 +28,7 @@@ bootcmd_ti_mmc
        run main_cpsw0_qsgmii_phyinit; run boot_rprocs;
  #endif
        if test ${boot_fit} -eq 1;
 -              then run get_fit_${boot}; run get_overlaystring; run run_fit;
 +              then run get_fit_${boot}; run get_fit_overlaystring; run run_fit;
        else;
                run get_kern_${boot}; run get_fdt_${boot}; run get_overlay_${boot}; run run_kern;
        fi;
diff --combined include/expo.h
@@@ -4,14 -4,13 +4,13 @@@
   * Written by Simon Glass <sjg@chromium.org>
   */
  
- #ifndef __SCENE_H
- #define __SCENE_H
+ #ifndef __EXPO_H
+ #define __EXPO_H
  
  #include <dm/ofnode_decl.h>
  #include <linux/list.h>
  
  struct udevice;
- struct video_priv;
  
  /**
   * enum expoact_type - types of actions reported by the expo
@@@ -188,6 -187,8 +187,8 @@@ enum scene_obj_flags_t 
   * @type: Type of this object
   * @dim: Dimensions for this object
   * @flags: Flags for this object
+  * @bit_length: Number of bits used for this object in CMOS RAM
+  * @start_bit: Start bit to use for this object in CMOS RAM
   * @sibling: Node to link this object to its siblings
   */
  struct scene_obj {
        uint id;
        enum scene_obj_t type;
        struct scene_dim dim;
-       int flags;
+       u8 flags;
+       u8 bit_length;
+       u16 start_bit;
        struct list_head sibling;
  };
  
@@@ -667,7 -670,7 +670,7 @@@ int expo_apply_theme(struct expo *exp, 
   *
   * Build a complete expo from a description in the provided devicetree.
   *
 - * See doc/developer/expo.rst for a description of the format
 + * See doc/develop/expo.rst for a description of the format
   *
   * @root: Root node for expo description
   * @expp: Returns the new expo
   */
  int expo_build(ofnode root, struct expo **expp);
  
- /**
-  * cedit_arange() - Arrange objects in a configuration-editor scene
-  *
-  * @exp: Expo to update
-  * @vid_priv: Private info of the video device
-  * @scene_id: scene ID to arrange
-  * Returns: 0 if OK, -ve on error
-  */
- int cedit_arange(struct expo *exp, struct video_priv *vid_priv, uint scene_id);
- /**
-  * cedit_run() - Run a configuration editor
-  *
-  * This accepts input until the user quits with Escape
-  *
-  * @exp: Expo to use
-  * Returns: 0 if OK, -ve on error
-  */
- int cedit_run(struct expo *exp);
- #endif /*__SCENE_H */
+ #endif /*__EXPO_H */
diff --combined include/spl.h
@@@ -484,7 -484,7 +484,7 @@@ unsigned long spl_mmc_get_uboot_raw_sec
   * spl_set_header_raw_uboot() - Set up a standard SPL image structure
   *
   * This sets up the given spl_image which the standard values obtained from
-  * config options: CONFIG_SYS_MONITOR_LEN, CFG_SYS_UBOOT_START,
+  * config options: CONFIG_SYS_MONITOR_LEN, CONFIG_SYS_UBOOT_START,
   * CONFIG_TEXT_BASE.
   *
   * @spl_image: Image description to set up
@@@ -862,7 -862,7 +862,7 @@@ void __noreturn spl_optee_entry(void *a
  /**
   * spl_invoke_opensbi - boot using a RISC-V OpenSBI image
   */
 -void spl_invoke_opensbi(struct spl_image_info *spl_image);
 +void __noreturn spl_invoke_opensbi(struct spl_image_info *spl_image);
  
  /**
   * board_return_to_bootrom - allow for boards to continue with the boot ROM
diff --combined tools/docker/Dockerfile
@@@ -2,7 -2,7 +2,7 @@@
  # This Dockerfile is used to build an image containing basic stuff to be used
  # to build U-Boot and run our test suites.
  
- FROM ubuntu:jammy-20230624
+ FROM ubuntu:jammy-20230804
  MAINTAINER Tom Rini <trini@konsulko.com>
  LABEL Description=" This image is for building U-Boot inside a container"
  
@@@ -14,19 -14,19 +14,19 @@@ RUN apt-get update && apt-get install -
  RUN wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
  RUN echo deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main | tee /etc/apt/sources.list.d/llvm.list
  
- # Manually install the kernel.org "Crosstool" based toolchains for gcc-13.1.0
- RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/13.1.0/x86_64-gcc-13.1.0-nolibc-aarch64-linux.tar.xz | tar -C /opt -xJ
- RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/13.1.0/x86_64-gcc-13.1.0-nolibc-arc-linux.tar.xz | tar -C /opt -xJ
- RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/13.1.0/x86_64-gcc-13.1.0-nolibc-arm-linux-gnueabi.tar.xz | tar -C /opt -xJ
- RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/13.1.0/x86_64-gcc-13.1.0-nolibc-i386-linux.tar.xz | tar -C /opt -xJ
- RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/13.1.0/x86_64-gcc-13.1.0-nolibc-m68k-linux.tar.xz | tar -C /opt -xJ
- RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/13.1.0/x86_64-gcc-13.1.0-nolibc-mips-linux.tar.xz | tar -C /opt -xJ
- RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/13.1.0/x86_64-gcc-13.1.0-nolibc-microblaze-linux.tar.xz | tar -C /opt -xJ
- RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/13.1.0/x86_64-gcc-13.1.0-nolibc-nios2-linux.tar.xz | tar -C /opt -xJ
- RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/13.1.0/x86_64-gcc-13.1.0-nolibc-powerpc-linux.tar.xz | tar -C /opt -xJ
- RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/13.1.0/x86_64-gcc-13.1.0-nolibc-riscv64-linux.tar.xz | tar -C /opt -xJ
- RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/13.1.0/x86_64-gcc-13.1.0-nolibc-riscv32-linux.tar.xz | tar -C /opt -xJ
- RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/13.1.0/x86_64-gcc-13.1.0-nolibc-sh2-linux.tar.xz | tar -C /opt -xJ
+ # Manually install the kernel.org "Crosstool" based toolchains for gcc-13.2.0
+ RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/13.2.0/x86_64-gcc-13.2.0-nolibc-aarch64-linux.tar.xz | tar -C /opt -xJ
+ RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/13.2.0/x86_64-gcc-13.2.0-nolibc-arc-linux.tar.xz | tar -C /opt -xJ
+ RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/13.2.0/x86_64-gcc-13.2.0-nolibc-arm-linux-gnueabi.tar.xz | tar -C /opt -xJ
+ RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/13.2.0/x86_64-gcc-13.2.0-nolibc-i386-linux.tar.xz | tar -C /opt -xJ
+ RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/13.2.0/x86_64-gcc-13.2.0-nolibc-m68k-linux.tar.xz | tar -C /opt -xJ
+ RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/13.2.0/x86_64-gcc-13.2.0-nolibc-mips-linux.tar.xz | tar -C /opt -xJ
+ RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/13.2.0/x86_64-gcc-13.2.0-nolibc-microblaze-linux.tar.xz | tar -C /opt -xJ
+ RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/13.2.0/x86_64-gcc-13.2.0-nolibc-nios2-linux.tar.xz | tar -C /opt -xJ
+ RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/13.2.0/x86_64-gcc-13.2.0-nolibc-powerpc-linux.tar.xz | tar -C /opt -xJ
+ RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/13.2.0/x86_64-gcc-13.2.0-nolibc-riscv64-linux.tar.xz | tar -C /opt -xJ
+ RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/13.2.0/x86_64-gcc-13.2.0-nolibc-riscv32-linux.tar.xz | tar -C /opt -xJ
+ RUN wget -O - https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/13.2.0/x86_64-gcc-13.2.0-nolibc-sh2-linux.tar.xz | tar -C /opt -xJ
  
  # Manually install other toolchains
  RUN wget -O - https://github.com/foss-xtensa/toolchain/releases/download/2020.07/x86_64-2020.07-xtensa-dc233c-elf.tar.gz | tar -C /opt -xz
@@@ -39,10 -39,10 +39,10 @@@ RUN apt-get update && apt-get install -
        binutils-dev \
        bison \
        build-essential \
+       cgpt \
        clang-16 \
        coreutils \
        cpio \
-       cppcheck \
        curl \
        device-tree-compiler \
        dosfstools \
        python3-virtualenv \
        rpm2cpio \
        sbsigntool \
-       sloccount \
        socat \
        softhsm2 \
        sparse \
        util-linux \
        uuid-dev \
        virtualenv \
+       vboot-kernel-utils \
+       vboot-utils \
        xxd \
        zip \
        && rm -rf /var/lib/apt/lists/*
@@@ -134,11 -135,11 +135,11 @@@ RUN git clone git://git.savannah.gnu.or
        mkdir -p /opt/grub && \
        ./configure --target=aarch64 --with-platform=efi \
        CC=gcc \
-       TARGET_CC=/opt/gcc-13.1.0-nolibc/aarch64-linux/bin/aarch64-linux-gcc \
-       TARGET_OBJCOPY=/opt/gcc-13.1.0-nolibc/aarch64-linux/bin/aarch64-linux-objcopy \
-       TARGET_STRIP=/opt/gcc-13.1.0-nolibc/aarch64-linux/bin/aarch64-linux-strip \
-       TARGET_NM=/opt/gcc-13.1.0-nolibc/aarch64-linux/bin/aarch64-linux-nm \
-       TARGET_RANLIB=/opt/gcc-13.1.0-nolibc/aarch64-linux/bin/aarch64-linux-ranlib && \
+       TARGET_CC=/opt/gcc-13.2.0-nolibc/aarch64-linux/bin/aarch64-linux-gcc \
+       TARGET_OBJCOPY=/opt/gcc-13.2.0-nolibc/aarch64-linux/bin/aarch64-linux-objcopy \
+       TARGET_STRIP=/opt/gcc-13.2.0-nolibc/aarch64-linux/bin/aarch64-linux-strip \
+       TARGET_NM=/opt/gcc-13.2.0-nolibc/aarch64-linux/bin/aarch64-linux-nm \
+       TARGET_RANLIB=/opt/gcc-13.2.0-nolibc/aarch64-linux/bin/aarch64-linux-ranlib && \
        make && \
        ./grub-mkimage -O arm64-efi -o /opt/grub/grubaa64.efi --prefix= -d \
        grub-core cat chain configfile echo efinet ext2 fat halt help linux \
        make clean && \
        ./configure --target=arm --with-platform=efi \
        CC=gcc \
-       TARGET_CC=/opt/gcc-13.1.0-nolibc/arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc \
-       TARGET_OBJCOPY=/opt/gcc-13.1.0-nolibc/arm-linux-gnueabi/bin/arm-linux-gnueabi-objcopy \
-       TARGET_STRIP=/opt/gcc-13.1.0-nolibc/arm-linux-gnueabi/bin/arm-linux-gnueabi-strip \
-       TARGET_NM=/opt/gcc-13.1.0-nolibc/arm-linux-gnueabi/bin/arm-linux-gnueabi-nm \
-       TARGET_RANLIB=/opt/gcc-13.1.0-nolibc/arm-linux-gnueabi/bin/arm-linux-gnueabi-ranlib && \
+       TARGET_CC=/opt/gcc-13.2.0-nolibc/arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc \
+       TARGET_OBJCOPY=/opt/gcc-13.2.0-nolibc/arm-linux-gnueabi/bin/arm-linux-gnueabi-objcopy \
+       TARGET_STRIP=/opt/gcc-13.2.0-nolibc/arm-linux-gnueabi/bin/arm-linux-gnueabi-strip \
+       TARGET_NM=/opt/gcc-13.2.0-nolibc/arm-linux-gnueabi/bin/arm-linux-gnueabi-nm \
+       TARGET_RANLIB=/opt/gcc-13.2.0-nolibc/arm-linux-gnueabi/bin/arm-linux-gnueabi-ranlib && \
        make && \
        ./grub-mkimage -O arm-efi -o /opt/grub/grubarm.efi --prefix= -d \
        grub-core cat chain configfile echo efinet ext2 fat halt help linux \
        make clean && \
        ./configure --target=riscv64 --with-platform=efi \
        CC=gcc \
-       TARGET_CC=/opt/gcc-13.1.0-nolibc/riscv64-linux/bin/riscv64-linux-gcc \
-       TARGET_OBJCOPY=/opt/gcc-13.1.0-nolibc/riscv64-linux/bin/riscv64-linux-objcopy \
-       TARGET_STRIP=/opt/gcc-13.1.0-nolibc/riscv64-linux/bin/riscv64-linux-strip \
-       TARGET_NM=/opt/gcc-13.1.0-nolibc/riscv64-linux/bin/riscv64-linux-nm \
-       TARGET_RANLIB=/opt/gcc-13.1.0-nolibc/riscv64-linux/bin/riscv64-linux-ranlib && \
+       TARGET_CC=/opt/gcc-13.2.0-nolibc/riscv64-linux/bin/riscv64-linux-gcc \
+       TARGET_OBJCOPY=/opt/gcc-13.2.0-nolibc/riscv64-linux/bin/riscv64-linux-objcopy \
+       TARGET_STRIP=/opt/gcc-13.2.0-nolibc/riscv64-linux/bin/riscv64-linux-strip \
+       TARGET_NM=/opt/gcc-13.2.0-nolibc/riscv64-linux/bin/riscv64-linux-nm \
+       TARGET_RANLIB=/opt/gcc-13.2.0-nolibc/riscv64-linux/bin/riscv64-linux-ranlib && \
        make && \
        ./grub-mkimage -O riscv64-efi -o /opt/grub/grubriscv64.efi --prefix= -d \
        grub-core cat chain configfile echo efinet ext2 fat halt help linux \
@@@ -185,6 -186,27 +186,6 @@@ RUN git clone https://gitlab.com/qemu-p
        make -j$(nproc) all install && \
        rm -rf /tmp/qemu
  
 -# Build QEMU supporting Nokia n900 emulation
 -RUN mkdir -p /opt/nokia && \
 -      cd /tmp && \
 -      git clone https://git.linaro.org/qemu/qemu-linaro.git && \
 -      cd /tmp/qemu-linaro && \
 -      git checkout 8f8d8e0796efe1a6f34cdd83fb798f3c41217ec1 && \
 -      ./configure --enable-system --target-list=arm-softmmu \
 -      --python=/usr/bin/python2.7 --disable-sdl --disable-gtk \
 -      --disable-curses --audio-drv-list= --audio-card-list= \
 -      --disable-werror --disable-xen --disable-xen-pci-passthrough \
 -      --disable-brlapi --disable-vnc --disable-curl --disable-slirp \
 -      --disable-kvm --disable-user --disable-linux-user --disable-bsd-user \
 -      --disable-guest-base --disable-uuid --disable-vde --disable-linux-aio \
 -      --disable-cap-ng --disable-attr --disable-blobs --disable-docs \
 -      --disable-spice --disable-libiscsi --disable-smartcard-nss \
 -      --disable-usb-redir --disable-guest-agent --disable-seccomp \
 -      --disable-glusterfs --disable-nptl --disable-fdt && \
 -      make -j$(nproc) && \
 -      cp /tmp/qemu-linaro/arm-softmmu/qemu-system-arm /opt/nokia && \
 -      rm -rf /tmp/qemu-linaro
 -
  # Build genimage (required by some targets to generate disk images)
  RUN wget -O - https://github.com/pengutronix/genimage/releases/download/v14/genimage-14.tar.xz | tar -C /tmp -xJ && \
        cd /tmp/genimage-14 && \
@@@ -228,6 -250,16 +229,6 @@@ RUN mkdir /tmp/trace && 
      sudo make install && \
      rm -rf /tmp/trace
  
 -# Files to run Nokia RX-51 (aka N900) tests
 -RUN mkdir -p /opt/nokia && \
 -      cd /opt/nokia && \
 -      wget https://raw.githubusercontent.com/pali/u-boot-maemo/master/debian/u-boot-gen-combined && \
 -      chmod 0755 u-boot-gen-combined && \
 -      wget http://repository.maemo.org/qemu-n900/qemu-n900.tar.gz && \
 -      wget http://repository.maemo.org/pool/maemo5.0/free/k/kernel/kernel_2.6.28-20103103+0m5_armel.deb && \
 -      wget http://repository.maemo.org/pool/maemo5.0/free/g/glibc/libc6_2.5.1-1eglibc27+0m5_armel.deb && \
 -      wget http://repository.maemo.org/pool/maemo5.0/free/b/busybox/busybox_1.10.2.legal-1osso30+0m5_armel.deb
 -
  # Create our user/group
  RUN echo uboot ALL=NOPASSWD: ALL > /etc/sudoers.d/uboot
  RUN useradd -m -U uboot
@@@ -246,7 -278,7 +247,7 @@@ RUN virtualenv -p /usr/bin/python3 /tmp
  
  # Create the buildman config file
  RUN /bin/echo -e "[toolchain]\nroot = /usr" > ~/.buildman
- RUN /bin/echo -e "kernelorg = /opt/gcc-13.1.0-nolibc/*" >> ~/.buildman
+ RUN /bin/echo -e "kernelorg = /opt/gcc-13.2.0-nolibc/*" >> ~/.buildman
  RUN /bin/echo -e "\n[toolchain-prefix]\nxtensa = /opt/2020.07/xtensa-dc233c-elf/bin/xtensa-dc233c-elf-" >> ~/.buildman;
  RUN /bin/echo -e "\n[toolchain-alias]\nsh = sh2" >> ~/.buildman
  RUN /bin/echo -e "\nsandbox = x86_64" >> ~/.buildman