diff options
Diffstat (limited to 'chip/stm32/dfu_bootmanager_shared.h')
-rw-r--r-- | chip/stm32/dfu_bootmanager_shared.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/chip/stm32/dfu_bootmanager_shared.h b/chip/stm32/dfu_bootmanager_shared.h new file mode 100644 index 0000000000..4003583ee2 --- /dev/null +++ b/chip/stm32/dfu_bootmanager_shared.h @@ -0,0 +1,62 @@ +/* Copyright 2022 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * DFU Boot Manager shared utilities for STM32 + * + * These of utilities required by the Boot Manager Main and RW Application. + * These allow the systems to start the sequence to enter DFU, clear the + * state, and access the backup registers. + */ + +#ifndef __DFU_BOOTMANAGER_SHARED_H +#define __DFU_BOOTMANAGER_SHARED_H + +#include "common.h" + +/* Registers to validate the backup memory region. */ +#define DFU_BOOTMANAGER_VALUE_MASK 0x00FF +#define DFU_BOOTMANAGER_VALID_MASK 0xFF00 +#define DFU_BOOTMANAGER_VALID_CHECK 0xAA00 + +#define DFU_BOOTMANAGER_VALUE_CLEAR 0 +#define DFU_BOOTMANAGER_VALUE_DFU UINT8_MAX + +/* + * Reset and enter the DFU mode. + * + * The system will set flags to the backup memory to enter DFU and issue + * a reset. The Boot Manager will send the system to DFU mode. + * + * @return EC_SUCCESS, or non-zero if error. + */ +int dfu_bootmanager_enter_dfu(void); + +/* + * Clear the DFU Boot Manager backup memory state. + * + * If the CONFIG_DFU_BOOTMANAGER_MAX_REBOOT_COUNT setting is enabled, this + * allows the RW application to clear the counter to indicate the application + * is working as expected. + */ +void dfu_bootmanager_clear(void); + +/* + * Write the value to the backup registers and sets the bitmasks + * indicating the field is valid. + * + * @param value New value to store. + */ +void dfu_bootmanager_backup_write(uint8_t value); + +/* + * Reads the backup registers and performs validation. The value stored + * within the VALUE_MASK is returned and the status code indicates + * if the valid check passed. + * + * @param value[out] Value stored within the DFU_BOOTMANAGER_VALUE_MASK + * @return EC_SUCCESS, or non-zero if validation failed. + */ +int dfu_bootmanager_backup_read(uint8_t *value); + +#endif /* __DFU_BOOTMANAGER_SHARED_H */ |