Skip to content

Commit 8fd4cb8

Browse files
committed
[nrf noup] bootloader: Add bootloader requests
Add a capability inside the Zephyr bootloader to handle memory-based bootloader requests to: - Boot recovery firmware - Boot firmware loader - Confirm an image - Set the slot preference Ref: NCSDK-34429 Signed-off-by: Tomasz Chyrowicz <[email protected]>
1 parent e5744ef commit 8fd4cb8

File tree

8 files changed

+521
-0
lines changed

8 files changed

+521
-0
lines changed
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
*
4+
* Copyright (c) 2025 Nordic Semiconductor ASA
5+
*/
6+
7+
#ifndef __BOOT_REQUEST_H__
8+
#define __BOOT_REQUEST_H__
9+
10+
#ifdef __cplusplus
11+
extern "C" {
12+
#endif
13+
14+
#include <stdint.h>
15+
#include <stdbool.h>
16+
17+
/** Special value, indicating that there is no preferred slot. */
18+
#define BOOT_REQUEST_NO_PREFERRED_SLOT UINT32_MAX
19+
20+
/**
21+
* @brief Request a bootloader to confirm the specified slot of an image.
22+
*
23+
* @param[in] image Image number.
24+
* @param[in] slot Slot number.
25+
*
26+
* @return 0 if requested, negative error code otherwise.
27+
*/
28+
int boot_request_confirm_slot(uint8_t image, uint32_t slot);
29+
30+
/**
31+
* @brief Request a bootloader to boot the specified slot of an image.
32+
*
33+
* @param[in] image Image number.
34+
* @param[in] slot Slot number.
35+
*
36+
* @return 0 if requested, negative error code otherwise.
37+
*/
38+
int boot_request_set_preferred_slot(uint8_t image, uint32_t slot);
39+
40+
/**
41+
* @brief Request a bootloader to boot recovery image.
42+
*
43+
* @return 0 if requested, negative error code otherwise.
44+
*/
45+
int boot_request_enter_recovery(void);
46+
47+
/**
48+
* @brief Request a bootloader to boot firmware loader image.
49+
*
50+
* @return 0 if requested, negative error code otherwise.
51+
*/
52+
int boot_request_enter_firmware_loader(void);
53+
54+
/**
55+
* @brief Check if there is a request to confirm the specified slot of an image.
56+
*
57+
* @param[in] image Image number.
58+
* @param[in] slot Slot number.
59+
*
60+
* @return true if requested, false otherwise.
61+
*/
62+
bool boot_request_check_confirmed_slot(uint8_t image, uint32_t slot);
63+
64+
/**
65+
* @brief Find if there is a request to boot certain slot of the specified image.
66+
*
67+
* @param[in] image Image number.
68+
*
69+
* @return slot number if requested, BOOT_REQUEST_NO_PREFERRED_SLOT otherwise.
70+
*/
71+
uint32_t boot_request_get_preferred_slot(uint8_t image);
72+
73+
/**
74+
* @brief Check if there is a request to boot recovery image.
75+
*
76+
* @return true if requested, false otherwise.
77+
*/
78+
bool boot_request_detect_recovery(void);
79+
80+
/**
81+
* @brief Check if there is a request to boot firmware loader image.
82+
*
83+
* @return true if requested, false otherwise.
84+
*/
85+
bool boot_request_detect_firmware_loader(void);
86+
87+
/**
88+
* @brief Initialize boot requests module.
89+
*
90+
* @return 0 if successful, negative error code otherwise.
91+
*/
92+
int boot_request_init(void);
93+
94+
/**
95+
* @brief Clear/drop all requests.
96+
*
97+
* @return 0 if successful, negative error code otherwise.
98+
*/
99+
int boot_request_clear(void);
100+
101+
#ifdef __cplusplus
102+
}
103+
#endif
104+
105+
#endif /* __BOOT_REQUEST_H__ */

boot/bootutil/zephyr/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ zephyr_library_named(mcuboot_util)
1616
zephyr_library_sources(
1717
../src/bootutil_public.c
1818
)
19+
if(CONFIG_MCUBOOT_BOOT_REQUEST)
20+
zephyr_library_sources_ifdef(CONFIG_MCUBOOT_BOOT_REQUEST_IMPL_RETENTION
21+
src/boot_request_retention.c
22+
)
23+
endif()
1924

2025
# Sensitivity to the TEST_BOOT_IMAGE_ACCESS_HOOKS define is implemented for
2126
# allowing the test-build with the hooks feature enabled.

0 commit comments

Comments
 (0)