This series adds support for running U-Boot in snagboot mode on Qualcomm Snapdragon platforms, targeting the Lemans-EVK board.
Snagboot (https://github.com/bootlin/snagboot) is a recovery and reflashing tool that works through the SoC boot ROM. On Qualcomm SoCs, snagrecover loads XBL over Sahara in EDL mode to initialise DDR and then loads U-Boot into DDR, where it enters fastboot so that snagflash can write the images. Support for the Lemans-EVK (IQ9075) is in the snagboot tree, see the Qualcomm IQ9075 sections of https://github.com/bootlin/snagboot/blob/main/docs/snagrecover.md See also the doc/board/qualcomm/snagboot.rst added in patch 7 for usage and build steps. XBL leaves the MMU enabled and does not set up PSCI firmware or Command DB in this flow, so the series adds a QCOM_SNAGBOOT_MODE option, an early MMU disable, and a defconfig and config fragment for Lemans-EVK. Tested on Lemans-EVK board. Signed-off-by: Balaji Selvanathan <[email protected]> --- Changes in v10: - Drop the CONFIG_ARM_SMCCC guards patch, SYSRESET_PSCI is already off in snagboot mode so the PSCI functions are not built - Depend on ENV_IS_DEFAULT instead of selecting ENV_IS_NOWHERE - Drop depends on !ENV_IS_IN_SCSI, !PSCI_RESET, !SAVE_PREV_BL_INITRAMFS_START_ADDR, COUNTER_FREQUENCY != 0 and TEXT_BASE != 0 - Replace the cmd-db.c change with a patch that lets QCOM_RPMH build without QCOM_COMMAND_DB, and disable QCOM_COMMAND_DB in the snagboot config fragment - Fix the title underline in the snagboot doc - Shorten the cover letter and link to the snagrecover IQ9075 docs - Link to v9: https://lore.kernel.org/r/[email protected] Changes in v9: - Drop the assumption that snagboot mode needs IOMMU disabled: QCOM_SNAGBOOT_MODE no longer depends on !IOMMU and qcom-snagboot.config no longer sets CONFIG_IOMMU=n - Link to v8: https://lore.kernel.org/r/[email protected] Changes in v8: - Make changes in documentation - Link to v7: https://lore.kernel.org/r/[email protected] Changes in v7: - Rebased on top of latest main branch - Link to v6: https://lore.kernel.org/r/[email protected] Changes in v6: - Forget to send summary in v5 cover letter, no other changes in v6 - Link to v5: https://marc.info/?l=u-boot&m=178577208345353&w=2 Changes in v5: - Make QCOM_BOOT0_SNAGBOOT_MODE as hidden config dependent on QCOM_SNAGBOOT_MODE - Disable C (Dcache) bit of SCTLR_EL3 register during MMU disable - Remove now unused QCOM_COMMAND_DB_OPTIONAL Kconfig definition - Disable unnecessar I2C configs (for Snagboot) in Qcom Snagboot config fragment - Add build steps for compiling U-Boot for Snagboot mode in Qcom Snagboot doc - Link to v4: https://lore.kernel.org/u-boot/[email protected]/ Changes in v4: - Renamed QCOM_SNAGBOOT_SUPPORT to QCOM_SNAGBOOT_MODE - Make SYSRESET_PSCI dependent on QCOM_SNAGBOOT_MODE - Place Snagboot related configs in seperate config fragment called configs/qcom-snagboot.config - Include above config fragment in configs/qcom_lemans_snagboot_defconfig - Removed Lemans EVK override dtsi: arch/arm/dts/lemans-evk-u-boot.dtsi - Removed QCOM_COMMAND_DB_OPTIONAL as now we use CONFIG_QCOM_SNAGBOOT_MODE - Added documentation on U-Boot for Snagboot - Link to v3: https://lore.kernel.org/u-boot/[email protected]/ Changes in v3: - Brought the MMU disable logic under CONFIG_QCOM_SNAGBOOT_SUPPORT ifdef condition - Moved the MMU disable codes to a new seperate file - Used "if (IS_ENABLED(CONFIG_QCOM_COMMAND_DB_OPTIONAL))" instead of #ifdef - Removed enabling QCOM_COMMAND_DB_OPTIONAL, ENABLE_ARM_SOC_BOOT0_HOOK and SKIP_RELOCATE as they are now automatically enabled by QCOM_SNAGBOOT_SUPPORT selection - Removed updating MAINTAINERS as the defconfig file is picked up by the "N: qcom" line - Link to v2: https://lore.kernel.org/u-boot/[email protected]/ Changes in v2: - Changed SYSRESET_PSCI from 'select' to 'imply' - Guard show_psci_version() and qcom_psci_fixup() with CONFIG_ARM_SMCCC - Disables the MMU and invalidates TLBs at the earliest entry point - Add qcom_lemans_snagboot_defconfig for Lemans-EVK - Link to v1: https://lore.kernel.org/u-boot/[email protected]/ --- Balaji Selvanathan (7): arm: snapdragon: Make SYSRESET_PSCI optional arm: snapdragon: Disable MMU early before U-Boot reset vector arm: snapdragon: Add CONFIG_QCOM_SNAGBOOT_MODE option soc: qcom: Allow RPMh to be built without Command DB arch: arm: dts: remove Lemans EVK override DTS configs: add qcom_lemans_snagboot_defconfig for Lemans-EVK doc: qualcomm: Add snagboot mode documentation arch/arm/Kconfig | 2 +- arch/arm/dts/lemans-evk-u-boot.dtsi | 19 ----- arch/arm/mach-snapdragon/Kconfig | 14 ++++ arch/arm/mach-snapdragon/include/mach/boot0.h | 2 + .../mach-snapdragon/include/mach/snagboot_boot0.h | 27 +++++++ configs/qcom-snagboot.config | 25 +++++++ configs/qcom_lemans_snagboot_defconfig | 8 +++ doc/board/qualcomm/index.rst | 1 + doc/board/qualcomm/snagboot.rst | 84 ++++++++++++++++++++++ drivers/soc/qcom/Kconfig | 1 - include/soc/qcom/cmd-db.h | 7 ++ 11 files changed, 169 insertions(+), 21 deletions(-) --- base-commit: 3401e006432abcbf7d73d7210f10df157f990ed3 change-id: 20260731-snagboot-4e9f66f0252d Best regards, -- Balaji Selvanathan <[email protected]>
