Hi Vandhiadevan,
On 10/6/2026 10:35 AM, Vandhiadevan Karunamoorthy wrote:
Some Qualcomm platforms use a dedicated subsystem to own and manage
SPI-NOR during normal operation. Consequently, the SPI controller and
SPI-NOR nodes are disabled in the application processor device tree.
In Snagboot recovery mode, the application processor requires direct
access to SPI-NOR for provisioning and recovery purposes. Enable the
SPI-NOR node referenced by the "spi0" alias, together with its parent
SPI controller, when CONFIG_QCOM_SNAGBOOT_SPI_NOR_FIXUP is enabled.
This exposes SPI-NOR only during recovery mode and avoids affecting the
normal runtime ownership of the device.
Signed-off-by: Vandhiadevan Karunamoorthy
<[email protected]>
Reviewed-by: Balaji Selvanathan <[email protected]>
---
arch/arm/mach-snapdragon/Kconfig | 10 ++++++++++
arch/arm/mach-snapdragon/board.c | 21 +++++++++++++++++++++
2 files changed, 31 insertions(+)
diff --git a/arch/arm/mach-snapdragon/Kconfig b/arch/arm/mach-snapdragon/Kconfig
index 3cfac19188c..6e318733fe3 100644
--- a/arch/arm/mach-snapdragon/Kconfig
+++ b/arch/arm/mach-snapdragon/Kconfig
@@ -78,4 +78,14 @@ config QCOM_SNAGBOOT_MODE
Build U-Boot to be loaded in Snagboot mode on Qualcomm platforms
for device/factory provisioning using fastboot.
+config QCOM_SNAGBOOT_SPI_NOR_FIXUP
+ bool "Enable spi0-aliased SPI-NOR node for Snagboot mode"
+ depends on QCOM_SNAGBOOT_MODE
+ select OF_BOARD_FIXUP
+ help
+ Enable the SPI-NOR flash node referenced by the "spi0" alias (and
+ its parent bus node) when booting in Snagboot mode. Boards that
+ use a different medium for Snagboot provisioning should leave
+ this disabled.
+
endif
diff --git a/arch/arm/mach-snapdragon/board.c b/arch/arm/mach-snapdragon/board.c
index 6a66f5e3096..8f841888466 100644
--- a/arch/arm/mach-snapdragon/board.c
+++ b/arch/arm/mach-snapdragon/board.c
@@ -760,3 +760,24 @@ void enable_caches(void)
}
dcache_enable();
}
+
+int board_fix_fdt(void *rw_fdt_blob)
+{
+ if (IS_ENABLED(CONFIG_QCOM_SNAGBOOT_SPI_NOR_FIXUP)) {
+ const char *alias;
+ int spi_off, parent_off;
+
+ alias = fdt_get_alias(rw_fdt_blob, "spi0");
+ spi_off = fdt_path_offset(rw_fdt_blob, alias);
+ if (spi_off >= 0) {
+ parent_off = fdt_parent_offset(rw_fdt_blob, spi_off);
+
+ fdt_status_okay(rw_fdt_blob, spi_off);
+
+ if (parent_off >= 0)
+ fdt_status_okay(rw_fdt_blob, parent_off);
+ }
+ }
+
+ return 0;
+}
---
base-commit: 911260be07649563b2f98555f56779a76a99c534
change-id: 20261005-review-lemans-spinor-fix-7c063cbfafb0
Best regards,
--
Vandhiadevan Karunamoorthy <[email protected]>