blob: 79042115b39622f5be859364a1e819b69b1004ff [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
#ifndef OPENTITAN_SW_DEVICE_SILICON_CREATOR_MASK_ROM_BOOTSTRAP_H_
#define OPENTITAN_SW_DEVICE_SILICON_CREATOR_MASK_ROM_BOOTSTRAP_H_
#include "sw/device/lib/base/hardened.h"
#include "sw/device/silicon_creator/lib/error.h"
#ifdef __cplusplus
extern "C" {
#endif
enum {
/**
* Mask for the bootstrap pins.
*
* We expect strong pull-ups on GPIO pins 22, 23, and 24.
*/
kBootstrapPinMask = (1 << 22) | (1 << 23) | (1 << 24),
};
/**
* Checks whether bootstrap is requested.
*
* The return value of this function also depends on the `ROM_BOOTSTRAP_EN` OTP
* item.
*
* @return Whether bootstrap is requested.
*/
hardened_bool_t bootstrap_requested(void);
/**
* Bootstraps the data partition of the embedded flash with data received by the
* spi_device.
*
* OpenTitan bootstrap uses the typical SPI flash EEPROM commands. A typical
* bootstrap session involves:
* - Asserting bootstrap pins to enter bootstrap mode,
* - Erasing the chip (WREN, CHIP_ERASE, busy loop ...),
* - Programming the chip (WREN, PAGE_PROGRAM, busy loop ...), and
* - Resetting the chip (RESET).
*
* This function only returns on error since a successful bootstrap ends with a
* chip reset.
*
* @return Result of the operation.
*/
rom_error_t bootstrap(void);
#ifdef __cplusplus
}
#endif
#endif // OPENTITAN_SW_DEVICE_SILICON_CREATOR_MASK_ROM_BOOTSTRAP_H_