123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- /*
- * Copyright (c) 2021 HPMicro
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- */
- #ifndef HPM_OTP_DRV_H
- #define HPM_OTP_DRV_H
- /**
- * @brief OTP APIs
- * @defgroup otp_interface OTP driver APIs
- * @{
- */
- #include "hpm_common.h"
- /***********************************************************************************************************************
- * Definitions
- **********************************************************************************************************************/
- /**
- * @brief OTP region definitions
- */
- typedef enum {
- otp_region0_mask = 1U, /*!< Address range: [0, 7] */
- otp_region1_mask = 2U, /*!< Address range: [8, 15] */
- otp_region2_mask = 4U, /*!< Address range: [16, 127] */
- otp_region3_mask = 8U, /*!< Address range: user defined */
- } otp_region_t;
- /**
- * @brief OTP lock options
- */
- typedef enum {
- otp_no_lock = 0,
- otp_read_only = 1,
- otp_permanent_no_lock = 2,
- otp_disable_access = 3,
- otp_lock_option_max = otp_disable_access,
- } otp_lock_option_t;
- enum {
- otp_write_disallowed = MAKE_STATUS(status_group_otp, 0),
- };
- /***********************************************************************************************************************
- * Prototypes
- **********************************************************************************************************************/
- #ifdef __cpluscplus
- extern "C" {
- #endif
- /**
- * @brief Initialize OTP controller
- */
- void otp_init(void);
- /**
- * @brief De-initialize OTP controller
- */
- void otp_deinit(void);
- /**
- * @brief Read the OTP word from shadow register
- * @param [in] addr OTP word index
- * @retval OTP word value
- */
- uint32_t otp_read_from_shadow(uint32_t addr);
- /**
- * @brief Read the specified OTP word from OTP IP bus
- * @param [in] addr OTP word index
- * @retval OTP word value
- */
- uint32_t otp_read_from_ip(uint32_t addr);
- /**
- * @brief Program a word to specified OTP field
- * @param [in] addr OTP word index
- * @param [in] src Pointer to the data to be programmed
- * @param [in] num_of_words Number of words to be programmed, only 1 is allowed
- * @return API execution status
- */
- hpm_stat_t otp_program(uint32_t addr, const uint32_t *src, uint32_t num_of_words);
- /**
- * @brief Reload a OTP region
- * @param [in] region OTP region option
- * @return API execution status
- */
- hpm_stat_t otp_reload(otp_region_t region);
- /**
- * @brief Change the Software lock permission
- * @param [in] addr OTP word index
- * @param [in] lock_option OTP lcok option
- * @return API execution status
- */
- hpm_stat_t otp_lock_otp(uint32_t addr, otp_lock_option_t lock_option);
- /**
- * @brief OTP lock shadow
- * @param [in] addr OTP word index
- * @param [in] lock_option OTP lock option
- * @return API execution status
- */
- hpm_stat_t otp_lock_shadow(uint32_t addr, otp_lock_option_t lock_option);
- /**
- * @brief Set the configurable region range
- * @param [in] start OTP word start index
- * @param [in] num_of_words Number of words in configuration region
- * @retval status_out_of_range Invalid range
- * @retval status_success Operation is successful
- */
- hpm_stat_t otp_set_configurable_region(uint32_t start, uint32_t num_of_words);
- /**
- * @return Write data to OTP shadow register
- * @param [in] addr OTP word index
- * @param [val] val Data to be written
- * @return API execution status
- */
- hpm_stat_t otp_write_shadow_register(uint32_t addr, uint32_t val);
- #ifdef __cpluscplus
- }
- #endif
- /**
- * @}
- */
- #endif
|