Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 14 additions & 13 deletions soc/nordic/nrf54h/soc.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,21 @@ LOG_MODULE_REGISTER(soc, CONFIG_SOC_LOG_LEVEL);
#define HSFLL_NODE DT_NODELABEL(cpurad_hsfll)
#endif

#define FIXED_PARTITION_ADDRESS(label) \
(DT_REG_ADDR(DT_NODELABEL(label)) + \
DT_REG_ADDR(COND_CODE_1(DT_FIXED_SUBPARTITION_EXISTS(DT_NODELABEL(label)), \
(DT_GPARENT(DT_PARENT(DT_NODELABEL(label)))), \
(DT_GPARENT(DT_NODELABEL(label))))))

#ifdef CONFIG_USE_DT_CODE_PARTITION
#define FLASH_LOAD_OFFSET DT_REG_ADDR(DT_CHOSEN(zephyr_code_partition))
#elif defined(CONFIG_FLASH_LOAD_OFFSET)
#define FLASH_LOAD_OFFSET CONFIG_FLASH_LOAD_OFFSET
#endif

#define PARTITION_IS_RUNNING_APP_PARTITION(label) \
(DT_REG_ADDR(DT_NODELABEL(label)) == FLASH_LOAD_OFFSET)
(DT_REG_ADDR(DT_NODELABEL(label)) <= FLASH_LOAD_OFFSET && \
DT_REG_ADDR(DT_NODELABEL(label)) + DT_REG_SIZE(DT_NODELABEL(label)) > FLASH_LOAD_OFFSET)

sys_snode_t soc_node;

Expand Down Expand Up @@ -209,22 +216,16 @@ void soc_late_init_hook(void)
void *radiocore_address = NULL;

#if DT_NODE_EXISTS(DT_NODELABEL(cpurad_slot1_partition))
if (PARTITION_IS_RUNNING_APP_PARTITION(slot1_partition)) {
radiocore_address =
(void *)(DT_REG_ADDR(DT_GPARENT(DT_NODELABEL(cpurad_slot1_partition))) +
DT_REG_ADDR(DT_NODELABEL(cpurad_slot1_partition)) +
CONFIG_ROM_START_OFFSET);
if (PARTITION_IS_RUNNING_APP_PARTITION(cpuapp_slot1_partition)) {
radiocore_address = (void *)(FIXED_PARTITION_ADDRESS(cpurad_slot1_partition) +
CONFIG_ROM_START_OFFSET);
} else {
radiocore_address =
(void *)(DT_REG_ADDR(DT_GPARENT(DT_NODELABEL(cpurad_slot0_partition))) +
DT_REG_ADDR(DT_NODELABEL(cpurad_slot0_partition)) +
CONFIG_ROM_START_OFFSET);
radiocore_address = (void *)(FIXED_PARTITION_ADDRESS(cpurad_slot0_partition) +
CONFIG_ROM_START_OFFSET);
}
#else
radiocore_address =
(void *)(DT_REG_ADDR(DT_GPARENT(DT_NODELABEL(cpurad_slot0_partition))) +
DT_REG_ADDR(DT_NODELABEL(cpurad_slot0_partition)) +
CONFIG_ROM_START_OFFSET);
(void *)(FIXED_PARTITION_ADDRESS(cpurad_slot0_partition) + CONFIG_ROM_START_OFFSET);
#endif

if (IS_ENABLED(CONFIG_SOC_NRF54H20_CPURAD_ENABLE_CHECK_VTOR) &&
Expand Down
11 changes: 9 additions & 2 deletions subsys/dfu/img_util/flash_img.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,15 @@ LOG_MODULE_REGISTER(flash_img, CONFIG_IMG_MANAGER_LOG_LEVEL);
#include <bootutil/bootutil_public.h>
#endif

#define FIXED_PARTITION_IS_RUNNING_APP_PARTITION(label) \
(FIXED_PARTITION_OFFSET(label) == CONFIG_FLASH_LOAD_OFFSET)
#ifdef CONFIG_USE_DT_CODE_PARTITION
#define FLASH_LOAD_OFFSET DT_REG_ADDR(DT_CHOSEN(zephyr_code_partition))
#elif defined(CONFIG_FLASH_LOAD_OFFSET)
#define FLASH_LOAD_OFFSET CONFIG_FLASH_LOAD_OFFSET
#endif

#define FIXED_PARTITION_IS_RUNNING_APP_PARTITION(label) \
(FIXED_PARTITION_OFFSET(label) <= FLASH_LOAD_OFFSET && \
FIXED_PARTITION_OFFSET(label) + FIXED_PARTITION_SIZE(label) > FLASH_LOAD_OFFSET)

#include <zephyr/devicetree.h>
#if defined(CONFIG_TRUSTED_EXECUTION_NONSECURE) && (CONFIG_TFM_MCUBOOT_IMAGE_NUMBER == 2)
Expand Down
15 changes: 10 additions & 5 deletions subsys/mgmt/mcumgr/grp/img_mgmt/src/img_mgmt.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,18 @@

#if !defined(CONFIG_MCUBOOT_BOOTLOADER_MODE_RAM_LOAD)

#ifndef CONFIG_FLASH_LOAD_OFFSET
#error MCUmgr requires application to be built with CONFIG_FLASH_LOAD_OFFSET set \
to be able to figure out application running slot.
#ifdef CONFIG_USE_DT_CODE_PARTITION
#define FLASH_LOAD_OFFSET DT_REG_ADDR(DT_CHOSEN(zephyr_code_partition))
#elif defined(CONFIG_FLASH_LOAD_OFFSET)
#define FLASH_LOAD_OFFSET CONFIG_FLASH_LOAD_OFFSET
#else
#error MCUmgr requires application to be built with CONFIG_FLASH_LOAD_OFFSET or \
CONFIG_USE_DT_CODE_PARTITION set to be able to figure out application running slot.
#endif

#define FIXED_PARTITION_IS_RUNNING_APP_PARTITION(label) \
(FIXED_PARTITION_OFFSET(label) == CONFIG_FLASH_LOAD_OFFSET)
#define FIXED_PARTITION_IS_RUNNING_APP_PARTITION(label) \
(FIXED_PARTITION_OFFSET(label) <= FLASH_LOAD_OFFSET && \
FIXED_PARTITION_OFFSET(label) + FIXED_PARTITION_SIZE(label) > FLASH_LOAD_OFFSET)

BUILD_ASSERT(sizeof(struct image_header) == IMAGE_HEADER_SIZE,
"struct image_header not required size");
Expand Down
5 changes: 3 additions & 2 deletions tests/subsys/dfu/img_util/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@
#define SLOT0_PARTITION slot0_partition
#define SLOT1_PARTITION slot1_partition

#define FIXED_PARTITION_IS_RUNNING_APP_PARTITION(label) \
(FIXED_PARTITION_OFFSET(label) == CONFIG_FLASH_LOAD_OFFSET)
#define FIXED_PARTITION_IS_RUNNING_APP_PARTITION(label) \
(FIXED_PARTITION_OFFSET(label) <= CONFIG_FLASH_LOAD_OFFSET && \
FIXED_PARTITION_OFFSET(label) + FIXED_PARTITION_SIZE(label) > CONFIG_FLASH_LOAD_OFFSET)

#if FIXED_PARTITION_IS_RUNNING_APP_PARTITION(slot0_partition)
#define UPLOAD_PARTITION_ID FIXED_PARTITION_ID(SLOT1_PARTITION)
Expand Down