nRF9160 - MCUboot fails to swap image when using external SPI NOR flash using SPM

Hello,

I am currently developing an LTE/LwM2M application on a custom board using the nRF9160 and NCS version 2.1.0. The application is almost finished and works great, however the flash is at 97%. So, we decided to implement the secondary mcuboot image on external flash that is already available, the IS25LP256D. In the application code I was already using this flash chip to save other firmware images and data using the partition manager (SPM) with the partitions defined in a pm_static.yml file. Therefore it seemed to be a small step to add the MCUboot secondary image also to external flash in a separate partition. After making the changes, I saw that the flash space was doubled, as expected, and the application booted just fine. So everything seemed to be working. For it to work however, I had to enable "CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK=y" in my main prj.conf since I am not using a QSPI flash chip but a standard SPI NOR flash chip.

When performing a FOTA update from the LwM2M server, I can see that the new firmware image is written to external flash and everything still seems to be working as expected. However, on reboot something goes wrong in the bootloader and we get the following error message when enabling logs:

As can be seen, the flash chip is initialized before the bootloader looks at valid images. I've looked into the error "W: Failed reading sectors; BOOT_MAX_IMG_SECTORS=256 - too small?" but that does not seem to be the problem. After digging some more in the bootloader, I found out that the bootloader gets an error when trying to open the flash area from external flash. As can be seen from the image below, the area itself exist however the device does not (0x0) and it returns -ENODEV. I've tried everything, but I always end up with this error. And the strange thing is that I use the exact same function after booting in the application and then the same "fa_id" does have an "area->fa_dev" pointer associated to it. So, I am a bit lost and wondering if someone could help me out? Am I missing something obvious or is it a bug in MCUBoot?

Below I have added some files from my current setup:

"prj.conf"

#
# Copyright (c) 2020 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
#

CONFIG_LOG=y
CONFIG_LOG_DEFAULT_LEVEL=4
CONFIG_MCUBOOT_UTIL_LOG_LEVEL_DBG=y

# General config
CONFIG_NEWLIB_LIBC=y
CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y
CONFIG_CBPRINTF_FP_SUPPORT=y
CONFIG_ASSERT=y
CONFIG_REBOOT=y

# DEBUGGING
CONFIG_SERIAL=y
CONFIG_UART_CONSOLE=n
CONFIG_RTT_CONSOLE=y
CONFIG_USE_SEGGER_RTT=y

# Logging
CONFIG_LOG=y
CONFIG_ELEO_LOG_LEVEL_DBG=y

# Network
CONFIG_NETWORKING=y
CONFIG_NET_NATIVE=n
CONFIG_NET_IPV6=n
CONFIG_NET_IPV4=y
CONFIG_NET_SOCKETS=y
CONFIG_NET_SOCKETS_OFFLOAD=y

# LwM2M
CONFIG_LWM2M=y
CONFIG_LWM2M_COAP_BLOCK_SIZE=512
CONFIG_LWM2M_COAP_MAX_MSG_SIZE=1024
CONFIG_LWM2M_ENGINE_MAX_OBSERVER=100
CONFIG_LWM2M_ENGINE_MAX_MESSAGES=20
CONFIG_LWM2M_ENGINE_MAX_PENDING=20
CONFIG_LWM2M_ENGINE_MAX_REPLIES=20
CONFIG_LWM2M_ENGINE_VALIDATION_BUFFER_SIZE=128
CONFIG_LWM2M_ENGINE_DEFAULT_LIFETIME=30
CONFIG_LWM2M_DNS_SUPPORT=y
CONFIG_LWM2M_SERVER_DEFAULT_PMIN=0
CONFIG_LWM2M_SERVER_DEFAULT_PMAX=120
CONFIG_LWM2M_CLIENT_UTILS=y
CONFIG_LWM2M_DTLS_SUPPORT=y
CONFIG_LWM2M_SECURITY_KEY_SIZE=33
CONFIG_LWM2M_SHELL=y

# LwM2M 1.1
CONFIG_LWM2M_VERSION_1_1=y
CONFIG_LWM2M_RW_SENML_CBOR_SUPPORT=y
CONFIG_ZCBOR=y
CONFIG_ZCBOR_CANONICAL=y
CONFIG_LWM2M_RW_SENML_CBOR_RECORDS=35
CONFIG_LWM2M_COMPOSITE_PATH_LIST_SIZE=10
CONFIG_LWM2M_RW_OMA_TLV_SUPPORT=y

# Disable unused object supports
CONFIG_LWM2M_PORTFOLIO_OBJ_SUPPORT=n
CONFIG_LWM2M_CLIENT_UTILS_SIGNAL_MEAS_INFO_OBJ_SUPPORT=n

# CoAP
CONFIG_COAP_INIT_ACK_TIMEOUT_MS=4000
CONFIG_COAP_EXTENDED_OPTIONS_LEN=y
CONFIG_COAP_EXTENDED_OPTIONS_LEN_VALUE=40

# LTE link control
CONFIG_LTE_LINK_CONTROL=y
CONFIG_LTE_AUTO_INIT_AND_CONNECT=n
CONFIG_LTE_NETWORK_MODE_LTE_M_NBIOT_GPS=y

# Modem library
CONFIG_NRF_MODEM_LIB=y
CONFIG_NRF_MODEM_LIB_SYS_INIT=n
CONFIG_MODEM_INFO=y
CONFIG_MODEM_INFO_ADD_DATE_TIME=n
CONFIG_MODEM_KEY_MGMT=y

# Enable settings storage
CONFIG_SETTINGS=y
CONFIG_FCB=y
CONFIG_SETTINGS_FCB=y

# DFU Target
CONFIG_DFU_TARGET=y
CONFIG_BOOTLOADER_MCUBOOT=y

# Allow FOTA downloads using download-client
CONFIG_DOWNLOAD_CLIENT=y
CONFIG_DOWNLOAD_CLIENT_STACK_SIZE=4096
CONFIG_DOWNLOAD_CLIENT_HTTP_FRAG_SIZE_1024=y
CONFIG_FOTA_DOWNLOAD=y
CONFIG_LWM2M_FIRMWARE_UPDATE_OBJ_SUPPORT_MULTIPLE=y
CONFIG_LWM2M_FIRMWARE_UPDATE_OBJ_INSTANCE_COUNT=3

# Heap and stacks
CONFIG_HEAP_MEM_POOL_SIZE=20480
CONFIG_MAIN_STACK_SIZE=4096
CONFIG_LWM2M_ENGINE_STACK_SIZE=4096
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048
CONFIG_AT_MONITOR_HEAP_SIZE=1024

## PSM
CONFIG_LTE_PSM_REQ_RPTAU="00000011"
CONFIG_LTE_PSM_REQ_RAT="00100001"

## eDRX
CONFIG_LTE_EDRX_REQ=y
CONFIG_LTE_EDRX_REQ_VALUE_LTE_M="1001"

# GPS
CONFIG_GNSS_PRIORITY_ON_FIRST_FIX=n
CONFIG_GNSS_SEARCH_TIMEOUT=120
CONFIG_GNSS_SEARCH_INTERVAL_TIME=180
CONFIG_SUPL_CLIENT_LIB=y

# Application Event Manager
CONFIG_APP_EVENT_MANAGER=y
CONFIG_APP_EVENT_MANAGER_LOG_EVENT_TYPE=y
CONFIG_APP_EVENT_MANAGER_LOG_LEVEL_INF=y
CONFIG_APP_EVENT_MANAGER_SHOW_EVENTS=y

# Set SPM as default secure firmware
CONFIG_BUILD_WITH_TFM=n
CONFIG_SPM=y

# GPIO
CONFIG_GPIO=y

# SPI
CONFIG_SPI=y
CONFIG_SPI_NRFX=y
CONFIG_SPI_NOR=y
CONFIG_SPI_NOR_SFDP_RUNTIME=y
CONFIG_SPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096
CONFIG_SPI_NRFX_RAM_BUFFER_SIZE=32

# FLASH
CONFIG_FLASH=y
CONFIG_FLASH_PAGE_LAYOUT=y
CONFIG_FLASH_JESD216_API=y
CONFIG_FLASH_MAP=y
CONFIG_NVS=y
CONFIG_MPU_ALLOW_FLASH_WRITE=y

# Image manager
CONFIG_IMG_MANAGER=y
CONFIG_IMG_ERASE_PROGRESSIVELY=y

# WDT
CONFIG_WATCHDOG=y
CONFIG_WATCHDOG_WINDOWN_MIN=0
CONFIG_WATCHDOG_WINDOWN_MAX=90000

# Partition Manager
CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY=y
CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK=y

# Date-Time library
CONFIG_DATE_TIME=y
CONFIG_DATE_TIME_UPDATE_INTERVAL_SECONDS=86400

"pm_static.yml"

modem_reserved:
  address: 0x0
  device: IS25LP256D
  region: external_flash
  size: 0x400000
mcuboot_secondary:
  address: 0x400000
  device: IS25LP256D
  region: external_flash
  size: 0xF0000
pmu_partition:
  address: 0x4F0000
  device: IS25LP256D
  region: external_flash
  size: 0x100000
mmu_partition:
  address: 0x5F0000
  device: IS25LP256D
  region: external_flash
  size: 0x100000
data_partition:
  address: 0x6F0000
  device: IS25LP256D
  region: external_flash
  size: 0x1900000
settings_partition:
  address: 0x1FF0000
  device: IS25LP256D
  region: external_flash
  size: 0x10000

"child_image/mcuboot/boards/<board>.overlay" (duplicated for "child_image/mcuboot/boards/<board_ns>.overlay")

/ {
	chosen {
		nordic,pm-ext-flash = &is25lp256d;
	};
};

&spi2 {
	compatible = "nordic,nrf-spim";
	status = "okay";
	pinctrl-0 = <&spi2_default>;
	pinctrl-1 = <&spi2_sleep>;
	pinctrl-names = "default", "sleep";
	cs-gpios = <&gpio0 17 GPIO_ACTIVE_LOW>;

	is25lp256d: is25lp256d@0 {
		compatible = "jedec,spi-nor";
		status = "okay";
		label = "IS25LP256D";
		reg = <0>;
		spi-max-frequency = <8000000>;
		size = <0x10000000>; // 256Mbit
		has-dpd;
		t-enter-dpd = <30000>;
		t-exit-dpd = <30000>;
		jedec-id = [ 9D 60 19  ];
	};
};

child_image/mcuboot.conf

CONFIG_MULTITHREADING=y
CONFIG_MAIN_STACK_SIZE=10240
CONFIG_BOOT_MAX_IMG_SECTORS=256

CONFIG_LOG=y
CONFIG_LOG_DEFAULT_LEVEL=4
CONFIG_MCUBOOT_UTIL_LOG_LEVEL_DBG=y
CONFIG_SERIAL=y
CONFIG_UART_CONSOLE=n
CONFIG_RTT_CONSOLE=y
CONFIG_USE_SEGGER_RTT=y

# SPI
CONFIG_SPI=y
CONFIG_SPI_NRFX=y
CONFIG_SPI_NOR=y
CONFIG_SPI_NOR_SFDP_RUNTIME=y
CONFIG_SPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096
CONFIG_SPI_NRFX_RAM_BUFFER_SIZE=32
CONFIG_NORDIC_QSPI_NOR=n

# FLASH
CONFIG_FLASH=y
CONFIG_FLASH_PAGE_LAYOUT=y
CONFIG_FLASH_JESD216_API=y
CONFIG_FLASH_MAP=y
CONFIG_NVS=y
CONFIG_MPU_ALLOW_FLASH_WRITE=y

CONFIG_FLASH_LOG_LEVEL_DBG=y

child_image/spm/spm.conf

# Configuration copied from the nRF Secure Partition Manager (SPM) sample:
CONFIG_IS_SPM=y
CONFIG_FW_INFO=y
CONFIG_GPIO=y
CONFIG_SERIAL=n
CONFIG_CORTEX_M_SYSTICK=n

After building the partition.yml looks as follow:

EMPTY_0:
  address: 0xc000
  end_address: 0x10000
  placement:
    before:
    - mcuboot_pad
  region: flash_primary
  size: 0x4000
app:
  address: 0x20200
  end_address: 0xf8000
  region: flash_primary
  size: 0xd7e00
data_partition:
  address: 0x6f0000
  device: IS25LP256D
  end_address: 0x1ff0000
  region: external_flash
  size: 0x1900000
external_flash:
  address: 0x2000000
  end_address: 0x2000000
  region: external_flash
  size: 0x0
mcuboot:
  address: 0x0
  end_address: 0xc000
  placement:
    before:
    - mcuboot_primary
  region: flash_primary
  size: 0xc000
mcuboot_pad:
  address: 0x10000
  end_address: 0x10200
  placement:
    align:
      start: 0x8000
    before:
    - mcuboot_primary_app
  region: flash_primary
  size: 0x200
mcuboot_primary:
  address: 0x10000
  end_address: 0xf8000
  orig_span: &id001
  - spm
  - mcuboot_pad
  - app
  region: flash_primary
  size: 0xe8000
  span: *id001
mcuboot_primary_app:
  address: 0x10200
  end_address: 0xf8000
  orig_span: &id002
  - app
  - spm
  region: flash_primary
  size: 0xe7e00
  span: *id002
mcuboot_secondary:
  address: 0x400000
  device: IS25LP256D
  end_address: 0x4f0000
  region: external_flash
  size: 0xf0000
mmu_partition:
  address: 0x5f0000
  device: IS25LP256D
  end_address: 0x6f0000
  region: external_flash
  size: 0x100000
modem_reserved:
  address: 0x0
  device: IS25LP256D
  end_address: 0x400000
  region: external_flash
  size: 0x400000
nrf_modem_lib_ctrl:
  address: 0x20008000
  end_address: 0x200084e8
  inside:
  - sram_nonsecure
  placement:
    after:
    - spm_sram
    - start
  region: sram_primary
  size: 0x4e8
nrf_modem_lib_rx:
  address: 0x2000a4e8
  end_address: 0x2000c4e8
  inside:
  - sram_nonsecure
  placement:
    after:
    - nrf_modem_lib_tx
  region: sram_primary
  size: 0x2000
nrf_modem_lib_sram:
  address: 0x20008000
  end_address: 0x2000c4e8
  orig_span: &id003
  - nrf_modem_lib_ctrl
  - nrf_modem_lib_tx
  - nrf_modem_lib_rx
  region: sram_primary
  size: 0x44e8
  span: *id003
nrf_modem_lib_tx:
  address: 0x200084e8
  end_address: 0x2000a4e8
  inside:
  - sram_nonsecure
  placement:
    after:
    - nrf_modem_lib_ctrl
  region: sram_primary
  size: 0x2000
nvs_storage:
  address: 0xf8000
  end_address: 0xfe000
  placement:
    before:
    - settings_storage
  region: flash_primary
  size: 0x6000
otp:
  address: 0xff8108
  end_address: 0xff83fc
  region: otp
  size: 0x2f4
pmu_partition:
  address: 0x4f0000
  device: IS25LP256D
  end_address: 0x5f0000
  region: external_flash
  size: 0x100000
settings_partition:
  address: 0x1ff0000
  device: IS25LP256D
  end_address: 0x2000000
  region: external_flash
  size: 0x10000
settings_storage:
  address: 0xfe000
  end_address: 0x100000
  placement:
    before:
    - end
  region: flash_primary
  size: 0x2000
spm:
  address: 0x10200
  end_address: 0x20200
  inside:
  - mcuboot_primary_app
  placement:
    before:
    - app
  region: flash_primary
  size: 0x10000
spm_sram:
  address: 0x20000000
  end_address: 0x20008000
  inside:
  - sram_secure
  placement:
    after:
    - start
  region: sram_primary
  size: 0x8000
sram_nonsecure:
  address: 0x20008000
  end_address: 0x20040000
  orig_span: &id004
  - sram_primary
  - nrf_modem_lib_ctrl
  - nrf_modem_lib_tx
  - nrf_modem_lib_rx
  region: sram_primary
  size: 0x38000
  span: *id004
sram_primary:
  address: 0x2000c4e8
  end_address: 0x20040000
  region: sram_primary
  size: 0x33b18
sram_secure:
  address: 0x20000000
  end_address: 0x20008000
  orig_span: &id005
  - spm_sram
  region: sram_primary
  size: 0x8000
  span: *id005

I also checked the generated pm_config.h from mcuboot and that also looks fine: build/mcuboot/zephyr/include/generated/pm_config

/* File generated by /home/henrico/ncs/v2.1.0-eleo/nrf/scripts/partition_manager_output.py, do not modify */
#ifndef PM_CONFIG_H__
#define PM_CONFIG_H__
#define PM_MCUBOOT_OFFSET 0x0
#define PM_MCUBOOT_ADDRESS 0x0
#define PM_MCUBOOT_END_ADDRESS 0xc000
#define PM_MCUBOOT_SIZE 0xc000
#define PM_MCUBOOT_NAME mcuboot
#define PM_MCUBOOT_ID 0
#define PM_mcuboot_ID PM_MCUBOOT_ID
#define PM_mcuboot_IS_ENABLED 1
#define PM_0_LABEL MCUBOOT
#define PM_MCUBOOT_DEV flash_controller
#define PM_MCUBOOT_DEFAULT_DRIVER_KCONFIG CONFIG_SOC_FLASH_NRF
#define PM_MODEM_RESERVED_OFFSET 0x0
#define PM_MODEM_RESERVED_ADDRESS 0x0
#define PM_MODEM_RESERVED_END_ADDRESS 0x400000
#define PM_MODEM_RESERVED_SIZE 0x400000
#define PM_MODEM_RESERVED_NAME modem_reserved
#define PM_MODEM_RESERVED_ID 1
#define PM_modem_reserved_ID PM_MODEM_RESERVED_ID
#define PM_modem_reserved_IS_ENABLED 1
#define PM_1_LABEL MODEM_RESERVED
#define PM_MODEM_RESERVED_DEV DT_N_S_soc_S_peripheral_40000000_S_spi_a000_S_is25lp256d_0
#define PM_MODEM_RESERVED_DEFAULT_DRIVER_KCONFIG CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK
#define PM_EMPTY_0_OFFSET 0xc000
#define PM_EMPTY_0_ADDRESS 0xc000
#define PM_EMPTY_0_END_ADDRESS 0x10000
#define PM_EMPTY_0_SIZE 0x4000
#define PM_EMPTY_0_NAME EMPTY_0
#define PM_EMPTY_0_ID 2
#define PM_empty_0_ID PM_EMPTY_0_ID
#define PM_empty_0_IS_ENABLED 1
#define PM_2_LABEL EMPTY_0
#define PM_EMPTY_0_DEV flash_controller
#define PM_EMPTY_0_DEFAULT_DRIVER_KCONFIG CONFIG_SOC_FLASH_NRF
#define PM_MCUBOOT_PAD_OFFSET 0x10000
#define PM_MCUBOOT_PAD_ADDRESS 0x10000
#define PM_MCUBOOT_PAD_END_ADDRESS 0x10200
#define PM_MCUBOOT_PAD_SIZE 0x200
#define PM_MCUBOOT_PAD_NAME mcuboot_pad
#define PM_MCUBOOT_PAD_ID 3
#define PM_mcuboot_pad_ID PM_MCUBOOT_PAD_ID
#define PM_mcuboot_pad_IS_ENABLED 1
#define PM_3_LABEL MCUBOOT_PAD
#define PM_MCUBOOT_PAD_DEV flash_controller
#define PM_MCUBOOT_PAD_DEFAULT_DRIVER_KCONFIG CONFIG_SOC_FLASH_NRF
#define PM_MCUBOOT_PRIMARY_OFFSET 0x10000
#define PM_MCUBOOT_PRIMARY_ADDRESS 0x10000
#define PM_MCUBOOT_PRIMARY_END_ADDRESS 0xf8000
#define PM_MCUBOOT_PRIMARY_SIZE 0xe8000
#define PM_MCUBOOT_PRIMARY_NAME mcuboot_primary
#define PM_MCUBOOT_PRIMARY_ID 4
#define PM_mcuboot_primary_ID PM_MCUBOOT_PRIMARY_ID
#define PM_mcuboot_primary_IS_ENABLED 1
#define PM_4_LABEL MCUBOOT_PRIMARY
#define PM_MCUBOOT_PRIMARY_DEV flash_controller
#define PM_MCUBOOT_PRIMARY_DEFAULT_DRIVER_KCONFIG CONFIG_SOC_FLASH_NRF
#define PM_MCUBOOT_PRIMARY_APP_OFFSET 0x10200
#define PM_MCUBOOT_PRIMARY_APP_ADDRESS 0x10200
#define PM_MCUBOOT_PRIMARY_APP_END_ADDRESS 0xf8000
#define PM_MCUBOOT_PRIMARY_APP_SIZE 0xe7e00
#define PM_MCUBOOT_PRIMARY_APP_NAME mcuboot_primary_app
#define PM_MCUBOOT_PRIMARY_APP_ID 5
#define PM_mcuboot_primary_app_ID PM_MCUBOOT_PRIMARY_APP_ID
#define PM_mcuboot_primary_app_IS_ENABLED 1
#define PM_5_LABEL MCUBOOT_PRIMARY_APP
#define PM_MCUBOOT_PRIMARY_APP_DEV flash_controller
#define PM_MCUBOOT_PRIMARY_APP_DEFAULT_DRIVER_KCONFIG CONFIG_SOC_FLASH_NRF
#define PM_SPM_OFFSET 0x10200
#define PM_SPM_ADDRESS 0x10200
#define PM_SPM_END_ADDRESS 0x20200
#define PM_SPM_SIZE 0x10000
#define PM_SPM_NAME spm
#define PM_SPM_ID 6
#define PM_spm_ID PM_SPM_ID
#define PM_spm_IS_ENABLED 1
#define PM_6_LABEL SPM
#define PM_SPM_DEV flash_controller
#define PM_SPM_DEFAULT_DRIVER_KCONFIG CONFIG_SOC_FLASH_NRF
#define PM_APP_OFFSET 0x20200
#define PM_APP_ADDRESS 0x20200
#define PM_APP_END_ADDRESS 0xf8000
#define PM_APP_SIZE 0xd7e00
#define PM_APP_NAME app
#define PM_APP_ID 7
#define PM_app_ID PM_APP_ID
#define PM_app_IS_ENABLED 1
#define PM_7_LABEL APP
#define PM_APP_DEV flash_controller
#define PM_APP_DEFAULT_DRIVER_KCONFIG CONFIG_SOC_FLASH_NRF
#define PM_NVS_STORAGE_OFFSET 0xf8000
#define PM_NVS_STORAGE_ADDRESS 0xf8000
#define PM_NVS_STORAGE_END_ADDRESS 0xfe000
#define PM_NVS_STORAGE_SIZE 0x6000
#define PM_NVS_STORAGE_NAME nvs_storage
#define PM_NVS_STORAGE_ID 8
#define PM_nvs_storage_ID PM_NVS_STORAGE_ID
#define PM_nvs_storage_IS_ENABLED 1
#define PM_8_LABEL NVS_STORAGE
#define PM_NVS_STORAGE_DEV flash_controller
#define PM_NVS_STORAGE_DEFAULT_DRIVER_KCONFIG CONFIG_SOC_FLASH_NRF
#define PM_SETTINGS_STORAGE_OFFSET 0xfe000
#define PM_SETTINGS_STORAGE_ADDRESS 0xfe000
#define PM_SETTINGS_STORAGE_END_ADDRESS 0x100000
#define PM_SETTINGS_STORAGE_SIZE 0x2000
#define PM_SETTINGS_STORAGE_NAME settings_storage
#define PM_SETTINGS_STORAGE_ID 9
#define PM_settings_storage_ID PM_SETTINGS_STORAGE_ID
#define PM_settings_storage_IS_ENABLED 1
#define PM_9_LABEL SETTINGS_STORAGE
#define PM_SETTINGS_STORAGE_DEV flash_controller
#define PM_SETTINGS_STORAGE_DEFAULT_DRIVER_KCONFIG CONFIG_SOC_FLASH_NRF
#define PM_MCUBOOT_SECONDARY_OFFSET 0x400000
#define PM_MCUBOOT_SECONDARY_ADDRESS 0x400000
#define PM_MCUBOOT_SECONDARY_END_ADDRESS 0x4f0000
#define PM_MCUBOOT_SECONDARY_SIZE 0xf0000
#define PM_MCUBOOT_SECONDARY_NAME mcuboot_secondary
#define PM_MCUBOOT_SECONDARY_ID 10
#define PM_mcuboot_secondary_ID PM_MCUBOOT_SECONDARY_ID
#define PM_mcuboot_secondary_IS_ENABLED 1
#define PM_10_LABEL MCUBOOT_SECONDARY
#define PM_MCUBOOT_SECONDARY_DEV DT_N_S_soc_S_peripheral_40000000_S_spi_a000_S_is25lp256d_0
#define PM_MCUBOOT_SECONDARY_DEFAULT_DRIVER_KCONFIG CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK
#define PM_PMU_PARTITION_OFFSET 0x4f0000
#define PM_PMU_PARTITION_ADDRESS 0x4f0000
#define PM_PMU_PARTITION_END_ADDRESS 0x5f0000
#define PM_PMU_PARTITION_SIZE 0x100000
#define PM_PMU_PARTITION_NAME pmu_partition
#define PM_PMU_PARTITION_ID 11
#define PM_pmu_partition_ID PM_PMU_PARTITION_ID
#define PM_pmu_partition_IS_ENABLED 1
#define PM_11_LABEL PMU_PARTITION
#define PM_PMU_PARTITION_DEV DT_N_S_soc_S_peripheral_40000000_S_spi_a000_S_is25lp256d_0
#define PM_PMU_PARTITION_DEFAULT_DRIVER_KCONFIG CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK
#define PM_MMU_PARTITION_OFFSET 0x5f0000
#define PM_MMU_PARTITION_ADDRESS 0x5f0000
#define PM_MMU_PARTITION_END_ADDRESS 0x6f0000
#define PM_MMU_PARTITION_SIZE 0x100000
#define PM_MMU_PARTITION_NAME mmu_partition
#define PM_MMU_PARTITION_ID 12
#define PM_mmu_partition_ID PM_MMU_PARTITION_ID
#define PM_mmu_partition_IS_ENABLED 1
#define PM_12_LABEL MMU_PARTITION
#define PM_MMU_PARTITION_DEV DT_N_S_soc_S_peripheral_40000000_S_spi_a000_S_is25lp256d_0
#define PM_MMU_PARTITION_DEFAULT_DRIVER_KCONFIG CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK
#define PM_DATA_PARTITION_OFFSET 0x6f0000
#define PM_DATA_PARTITION_ADDRESS 0x6f0000
#define PM_DATA_PARTITION_END_ADDRESS 0x1ff0000
#define PM_DATA_PARTITION_SIZE 0x1900000
#define PM_DATA_PARTITION_NAME data_partition
#define PM_DATA_PARTITION_ID 13
#define PM_data_partition_ID PM_DATA_PARTITION_ID
#define PM_data_partition_IS_ENABLED 1
#define PM_13_LABEL DATA_PARTITION
#define PM_DATA_PARTITION_DEV DT_N_S_soc_S_peripheral_40000000_S_spi_a000_S_is25lp256d_0
#define PM_DATA_PARTITION_DEFAULT_DRIVER_KCONFIG CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK
#define PM_OTP_OFFSET 0x0
#define PM_OTP_ADDRESS 0xff8108
#define PM_OTP_END_ADDRESS 0xff83fc
#define PM_OTP_SIZE 0x2f4
#define PM_OTP_NAME otp
#define PM_SETTINGS_PARTITION_OFFSET 0x1ff0000
#define PM_SETTINGS_PARTITION_ADDRESS 0x1ff0000
#define PM_SETTINGS_PARTITION_END_ADDRESS 0x2000000
#define PM_SETTINGS_PARTITION_SIZE 0x10000
#define PM_SETTINGS_PARTITION_NAME settings_partition
#define PM_SETTINGS_PARTITION_ID 14
#define PM_settings_partition_ID PM_SETTINGS_PARTITION_ID
#define PM_settings_partition_IS_ENABLED 1
#define PM_14_LABEL SETTINGS_PARTITION
#define PM_SETTINGS_PARTITION_DEV DT_N_S_soc_S_peripheral_40000000_S_spi_a000_S_is25lp256d_0
#define PM_SETTINGS_PARTITION_DEFAULT_DRIVER_KCONFIG CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK
#define PM_EXTERNAL_FLASH_OFFSET 0x2000000
#define PM_EXTERNAL_FLASH_ADDRESS 0x2000000
#define PM_EXTERNAL_FLASH_END_ADDRESS 0x2000000
#define PM_EXTERNAL_FLASH_SIZE 0x0
#define PM_EXTERNAL_FLASH_NAME external_flash
#define PM_EXTERNAL_FLASH_ID 15
#define PM_external_flash_ID PM_EXTERNAL_FLASH_ID
#define PM_external_flash_IS_ENABLED 1
#define PM_15_LABEL EXTERNAL_FLASH
#define PM_EXTERNAL_FLASH_DEV DT_N_S_soc_S_peripheral_40000000_S_spi_a000_S_is25lp256d_0
#define PM_EXTERNAL_FLASH_DEFAULT_DRIVER_KCONFIG CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK
#define PM_SPM_SRAM_OFFSET 0x0
#define PM_SPM_SRAM_ADDRESS 0x20000000
#define PM_SPM_SRAM_END_ADDRESS 0x20008000
#define PM_SPM_SRAM_SIZE 0x8000
#define PM_SPM_SRAM_NAME spm_sram
#define PM_SRAM_SECURE_OFFSET 0x0
#define PM_SRAM_SECURE_ADDRESS 0x20000000
#define PM_SRAM_SECURE_END_ADDRESS 0x20008000
#define PM_SRAM_SECURE_SIZE 0x8000
#define PM_SRAM_SECURE_NAME sram_secure
#define PM_NRF_MODEM_LIB_CTRL_OFFSET 0x8000
#define PM_NRF_MODEM_LIB_CTRL_ADDRESS 0x20008000
#define PM_NRF_MODEM_LIB_CTRL_END_ADDRESS 0x200084e8
#define PM_NRF_MODEM_LIB_CTRL_SIZE 0x4e8
#define PM_NRF_MODEM_LIB_CTRL_NAME nrf_modem_lib_ctrl
#define PM_NRF_MODEM_LIB_SRAM_OFFSET 0x8000
#define PM_NRF_MODEM_LIB_SRAM_ADDRESS 0x20008000
#define PM_NRF_MODEM_LIB_SRAM_END_ADDRESS 0x2000c4e8
#define PM_NRF_MODEM_LIB_SRAM_SIZE 0x44e8
#define PM_NRF_MODEM_LIB_SRAM_NAME nrf_modem_lib_sram
#define PM_SRAM_NONSECURE_OFFSET 0x8000
#define PM_SRAM_NONSECURE_ADDRESS 0x20008000
#define PM_SRAM_NONSECURE_END_ADDRESS 0x20040000
#define PM_SRAM_NONSECURE_SIZE 0x38000
#define PM_SRAM_NONSECURE_NAME sram_nonsecure
#define PM_NRF_MODEM_LIB_TX_OFFSET 0x84e8
#define PM_NRF_MODEM_LIB_TX_ADDRESS 0x200084e8
#define PM_NRF_MODEM_LIB_TX_END_ADDRESS 0x2000a4e8
#define PM_NRF_MODEM_LIB_TX_SIZE 0x2000
#define PM_NRF_MODEM_LIB_TX_NAME nrf_modem_lib_tx
#define PM_NRF_MODEM_LIB_RX_OFFSET 0xa4e8
#define PM_NRF_MODEM_LIB_RX_ADDRESS 0x2000a4e8
#define PM_NRF_MODEM_LIB_RX_END_ADDRESS 0x2000c4e8
#define PM_NRF_MODEM_LIB_RX_SIZE 0x2000
#define PM_NRF_MODEM_LIB_RX_NAME nrf_modem_lib_rx
#define PM_SRAM_PRIMARY_OFFSET 0xc4e8
#define PM_SRAM_PRIMARY_ADDRESS 0x2000c4e8
#define PM_SRAM_PRIMARY_END_ADDRESS 0x20040000
#define PM_SRAM_PRIMARY_SIZE 0x33b18
#define PM_SRAM_PRIMARY_NAME sram_primary
#define PM_NUM 16
#define PM_ALL_BY_SIZE "external_flash mcuboot_pad otp nrf_modem_lib_ctrl nrf_modem_lib_rx nrf_modem_lib_tx settings_storage EMPTY_0 nrf_modem_lib_sram nvs_storage spm_sram sram_secure mcuboot settings_partition spm sram_primary sram_nonsecure app mcuboot_primary_app mcuboot_primary mcuboot_secondary mmu_partition pmu_partition modem_reserved data_partition"
#define PM_ADDRESS 0x0
#define PM_SIZE 0xc000
#define PM_SRAM_ADDRESS 0x2000c4e8
#define PM_SRAM_SIZE 0x33b18
#endif /* PM_CONFIG_H__ */

Thank you.

Related