blob: 1a4c12edaea6360b8be600c367db0192287be325 [file] [log] [blame]
/*
* Copyright (c) 2023, Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/kernel.h>
#include <zephyr/devicetree.h>
#include <zephyr/retention/retention.h>
static const struct device *boot_mode_dev = DEVICE_DT_GET(DT_CHOSEN(zephyr_boot_mode));
int bootmode_check(uint8_t boot_mode)
{
int rc;
rc = retention_is_valid(boot_mode_dev);
if (rc == 1 || rc == -ENOTSUP) {
uint8_t stored_mode;
rc = retention_read(boot_mode_dev, 0, &stored_mode, sizeof(stored_mode));
/* Only check if modes match if there was no error, otherwise return the error */
if (rc == 0) {
if (stored_mode == boot_mode) {
rc = 1;
}
}
}
return rc;
}
int bootmode_set(uint8_t boot_mode)
{
return retention_write(boot_mode_dev, 0, &boot_mode, sizeof(boot_mode));
}
int bootmode_clear(void)
{
return retention_clear(boot_mode_dev);
}