26 #define HPM_XPI0_BASE (0xF3040000UL)
28 #define HPM_XPI0 ((XPI_Type *) HPM_XPI0_BASE)
30 #define HPM_XPI1_BASE (0xF3044000UL)
32 #define HPM_XPI1 ((XPI_Type *) HPM_XPI1_BASE)
49 uint32_t peripheral: 8;
63 #define API_BOOT_TAG (0xEBU)
64 #define API_BOOT_SRC_OTP (0U)
65 #define API_BOOT_SRC_PRIMARY (1U)
66 #define API_BOOT_SRC_SERIAL_BOOT (2U)
67 #define API_BOOT_SRC_ISP (3U)
68 #define API_BOOT_PERIPH_AUTO (0U)
69 #define API_BOOT_PERIPH_UART (1U)
70 #define API_BOOT_PERIPH_USBHID (2U)
73 uint32_t _internal[138];
82 uint32_t _internal[116];
96 uint32_t (*read_from_shadow)(uint32_t addr);
98 uint32_t (*read_from_ip)(uint32_t addr);
100 hpm_stat_t (*program)(uint32_t addr,
const uint32_t *src, uint32_t num_of_words);
108 hpm_stat_t (*set_configurable_region)(uint32_t start, uint32_t num_of_words);
110 hpm_stat_t (*write_shadow_register)(uint32_t addr, uint32_t data);
130 hpm_stat_t (*update_instr_table)(
XPI_Type *base,
const uint32_t *inst_base, uint32_t seq_idx, uint32_t num);
134 void (*software_reset)(
XPI_Type *base);
138 void (*update_dllcr)(
XPI_Type *base,
139 uint32_t serial_root_clk_freq,
140 uint32_t data_valid_time,
142 uint32_t dly_target);
166 uint16_t *out_status);
219 uint32_t reserved0[3];
262 const uint8_t *input,
266 (*aes_crypt_ctr)(
sdp_aes_ctx_t *aes_ctx, uint8_t *nonce_ctr, uint8_t *input, uint8_t *output, uint32_t length);
270 const uint8_t *nonce,
274 const uint8_t *input,
281 const uint8_t *nonce,
285 const uint8_t *input,
323 const uint8_t *input, uint8_t *output);
326 uint8_t *output, uint32_t length);
329 uint32_t iv_len,
const uint8_t *aad, uint32_t aad_len,
const uint8_t *input,
330 uint8_t *output, uint8_t *tag, uint32_t tag_len);
333 uint32_t iv_len,
const uint8_t *aad, uint32_t aad_len,
const uint8_t *input,
334 uint8_t *output,
const uint8_t *tag, uint32_t tag_len);
343 const uint32_t version;
345 const char *copyright;
358 const uint32_t reserved0;
364 #define ROM_API_TABLE_ROOT ((const bootloader_api_table_t*)0x2001FF00U)
473 return ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_sector_nonblocking(base, channel, nor_config, start);
507 return ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_block_nonblocking(base, channel, nor_config, start);
580 ->page_program_nonblocking(base, channel, nor_config, src, dst_addr, length);
600 return ROM_API_TABLE_ROOT->xpi_nor_driver_if->read(base, channel, nor_config, dst, start, length);
627 uint32_t property_id,
630 return ROM_API_TABLE_ROOT->xpi_nor_driver_if->get_property(base, nor_cfg, property_id, value);
647 uint16_t *out_status)
649 return ROM_API_TABLE_ROOT->xpi_nor_driver_if->get_status(base, channel, nor_config, addr, out_status);
664 if (((base !=
HPM_XPI0) && (base !=
HPM_XPI1)) || ((start & 0xFFF) != 0) || ((len & 0xFFF) != 0)
665 || ((offset & 0xFFF) != 0)) {
668 static const uint8_t k_mc_xpi_remap_config[] = {
669 0x2e, 0x96, 0x23, 0x22, 0xc5, 0x42, 0x23, 0x24,
670 0xd5, 0x42, 0x93, 0xe5, 0x15, 0x00, 0x23, 0x20,
671 0xb5, 0x42, 0x05, 0x45, 0x82, 0x80,
673 typedef bool (*remap_config_cb_t)(
XPI_Type *, uint32_t, uint32_t, uint32_t);
674 remap_config_cb_t cb = (remap_config_cb_t) &k_mc_xpi_remap_config;
675 bool result = cb(base, start, len, offset);
688 static const uint8_t k_mc_xpi_remap_disable[] = {
689 0x83, 0x27, 0x05, 0x42, 0xf9, 0x9b, 0x23, 0x20,
690 0xf5, 0x42, 0x82, 0x80,
692 typedef void (*remap_disable_cb_t)(
XPI_Type *);
693 remap_disable_cb_t cb = (remap_disable_cb_t) &k_mc_xpi_remap_disable;
708 static const uint8_t k_mc_xpi_remap_enabled[] = {
709 0x03, 0x25, 0x05, 0x42, 0x05, 0x89, 0x82, 0x80,
711 typedef bool (*remap_chk_cb_t)(
XPI_Type *);
712 remap_chk_cb_t chk_cb = (remap_chk_cb_t) &k_mc_xpi_remap_enabled;
730 static const uint8_t k_mc_exip_region_config[] = {
731 0x18, 0x4a, 0x9a, 0x05, 0x2e, 0x95, 0x85, 0x67,
732 0xaa, 0x97, 0x23, 0xa4, 0xe7, 0xd0, 0x4c, 0x4a,
733 0x14, 0x42, 0x58, 0x42, 0x23, 0xa6, 0xb7, 0xd0,
734 0x4c, 0x46, 0x36, 0x97, 0x13, 0x77, 0x07, 0xc0,
735 0x23, 0xa2, 0xb7, 0xd0, 0x0c, 0x46, 0x13, 0x67,
736 0x37, 0x00, 0x05, 0x45, 0x23, 0xa0, 0xb7, 0xd0,
737 0x0c, 0x4e, 0x23, 0xaa, 0xb7, 0xd0, 0x50, 0x4e,
738 0x23, 0xa8, 0xc7, 0xd0, 0x23, 0xac, 0xd7, 0xd0,
739 0x23, 0xae, 0xe7, 0xd0, 0x82, 0x80,
742 exip_region_config_cb_t cb = (exip_region_config_cb_t) &k_mc_exip_region_config;
743 cb(base, index, param);
757 static const uint8_t k_mc_exip_region_disable[] = {
758 0x9a, 0x05, 0x2e, 0x95, 0x85, 0x67, 0xaa, 0x97,
759 0x03, 0xa7, 0xc7, 0xd1, 0x75, 0x9b, 0x23, 0xae,
760 0xe7, 0xd0, 0x82, 0x80
762 typedef void (*exip_region_disable_cb_t)(
XPI_Type *, uint32_t);
763 exip_region_disable_cb_t cb = (exip_region_disable_cb_t) &k_mc_exip_region_disable;
776 static const uint8_t k_mc_exip_enable[] = {
777 0x85, 0x67, 0x3e, 0x95, 0x83, 0x27, 0x05, 0xc0,
778 0x37, 0x07, 0x00, 0x80, 0xd9, 0x8f, 0x23, 0x20,
779 0xf5, 0xc0, 0x82, 0x80
781 typedef void (*exip_enable_cb_t)(
XPI_Type *);
782 exip_enable_cb_t cb = (exip_enable_cb_t) &k_mc_exip_enable;
793 static const uint8_t k_mc_exip_disable[] = {
794 0x85, 0x67, 0x3e, 0x95, 0x83, 0x27, 0x05, 0xc0,
795 0x86, 0x07, 0x85, 0x83, 0x23, 0x20, 0xf5, 0xc0,
798 typedef void (*exip_disable_cb_t)(
XPI_Type *);
799 exip_disable_cb_t cb = (exip_disable_cb_t) &k_mc_exip_disable;
873 return ROM_API_TABLE_ROOT->sdp_driver_if->aes_set_key(aes_ctx, key, key_bits, key_idx);
911 return ROM_API_TABLE_ROOT->sdp_driver_if->aes_crypt_cbc(aes_ctx, op, length, iv, in, out);
1075 return ROM_API_TABLE_ROOT->sm4_api_if->crypt_cbc(ctx, mode, length, iv, input, output);
static hpm_stat_t rom_sdp_memset(sdp_dma_ctx_t *dma_ctx, void *dst, uint8_t pattern, uint32_t length)
SDP memset operation.
Definition: hpm_romapi.h:969
static hpm_stat_t rom_sdp_aes_crypt_cbc(sdp_aes_ctx_t *aes_ctx, sdp_aes_op_t op, uint32_t length, uint8_t iv[16], const uint8_t *in, uint8_t *out)
SDP AES ECB crypto operation(Encrypt or Decrypt)
Definition: hpm_romapi.h:904
static hpm_stat_t rom_xpi_nor_auto_config(XPI_Type *base, xpi_nor_config_t *config, xpi_nor_config_option_t *cfg_option)
Automatically configure XPI NOR based on cfg_option.
Definition: hpm_romapi.h:610
static hpm_stat_t rom_xpi_nor_init(XPI_Type *base, xpi_nor_config_t *nor_config)
Initialize XPI NOR based on nor_config.
Definition: hpm_romapi.h:417
static hpm_stat_t rom_xpi_nor_read(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config, uint32_t *dst, uint32_t start, uint32_t length)
Read data from specified FLASH address.
Definition: hpm_romapi.h:593
static hpm_stat_t rom_xpi_nor_erase_chip_nonblocking(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config)
Erase the whole FLASH in non-blocking way.
Definition: hpm_romapi.h:531
static hpm_stat_t rom_xpi_nor_erase_chip(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config)
Erase the whole FLASH in blocking way.
Definition: hpm_romapi.h:517
static hpm_stat_t rom_sdp_memcpy(sdp_dma_ctx_t *dma_ctx, void *dst, const void *src, uint32_t length)
SDP memcpy operation.
Definition: hpm_romapi.h:956
static hpm_stat_t rom_xpi_nor_erase_block(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config, uint32_t start)
Erase specified FLASH blcok in blocking way.
Definition: hpm_romapi.h:484
static ATTR_RAMFUNC bool rom_xpi_nor_remap_config(XPI_Type *base, uint32_t start, uint32_t len, uint32_t offset)
Configure the XPI Address Remapping Logic.
Definition: hpm_romapi.h:662
static ATTR_RAMFUNC bool rom_xpi_nor_exip_region_config(XPI_Type *base, uint32_t index, exip_region_param_t *param)
Configure Specified EXiP Region.
Definition: hpm_romapi.h:725
static ATTR_RAMFUNC void rom_xpi_nor_exip_enable(XPI_Type *base)
Enable global EXiP logic.
Definition: hpm_romapi.h:774
static void rom_sdp_init(void)
Initialize SDP IP.
Definition: hpm_romapi.h:847
static hpm_stat_t rom_xpi_nor_page_program_nonblocking(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config, const uint32_t *src, uint32_t dst_addr, uint32_t length)
Page-Program data to specified FLASH address in non-blocking way.
Definition: hpm_romapi.h:572
static ATTR_RAMFUNC void rom_xpi_nor_exip_region_disable(XPI_Type *base, uint32_t index)
Disable EXiP Feature on specified EXiP Region.
Definition: hpm_romapi.h:755
static hpm_stat_t rom_xpi_nor_erase_sector_nonblocking(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config, uint32_t start)
Erase specified FLASH sector in non-blocking way.
Definition: hpm_romapi.h:468
static hpm_stat_t rom_xpi_nor_erase(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config, uint32_t start, uint32_t length)
Erase specified FLASH region.
Definition: hpm_romapi.h:431
static hpm_stat_t rom_enter_bootloader(void *ctx)
Eneter specified Boot mode.
Definition: hpm_romapi.h:384
static ATTR_RAMFUNC void rom_xpi_nor_remap_disable(XPI_Type *base)
Disable XPI Remapping logic.
Definition: hpm_romapi.h:686
static hpm_stat_t rom_sdp_aes_set_key(sdp_aes_ctx_t *aes_ctx, const uint8_t *key, sdp_aes_key_bits_t key_bits, uint32_t key_idx)
Set AES key to SDP.
Definition: hpm_romapi.h:868
static void rom_sdp_deinit(void)
De-initialize SDP IP.
Definition: hpm_romapi.h:855
static hpm_stat_t rom_xpi_ram_get_config(XPI_Type *base, xpi_ram_config_t *ram_cfg, xpi_ram_config_option_t *cfg_option)
Get XPI RAM configuration based on cfg_option.
Definition: hpm_romapi.h:819
static hpm_stat_t rom_xpi_ram_init(XPI_Type *base, xpi_ram_config_t *ram_cfg)
Initialize XPI RAM.
Definition: hpm_romapi.h:832
static hpm_stat_t rom_xpi_nor_get_status(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config, uint32_t addr, uint16_t *out_status)
Return the status register value on XPI NOR FLASH.
Definition: hpm_romapi.h:643
static hpm_stat_t rom_xpi_nor_erase_block_nonblocking(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config, uint32_t start)
Erase specified FLASH blcok in non-blocking way.
Definition: hpm_romapi.h:502
static ATTR_RAMFUNC void rom_xpi_nor_exip_disable(XPI_Type *base)
Disable global EXiP logic.
Definition: hpm_romapi.h:791
static hpm_stat_t rom_xpi_nor_program(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config, const uint32_t *src, uint32_t dst_addr, uint32_t length)
Program data to specified FLASH address in blocking way.
Definition: hpm_romapi.h:550
static ATTR_RAMFUNC bool rom_xpi_nor_is_remap_enabled(XPI_Type *base)
Check whether XPI Remapping is enabled.
Definition: hpm_romapi.h:706
static hpm_stat_t rom_sdp_hash_finish(sdp_hash_ctx_t *hash_ctx, uint8_t *digest)
HASH finialize.
Definition: hpm_romapi.h:943
static hpm_stat_t rom_sdp_hash_update(sdp_hash_ctx_t *hash_ctx, const uint8_t *data, uint32_t length)
HASH Update.
Definition: hpm_romapi.h:932
static hpm_stat_t rom_sdp_aes_crypt_ecb(sdp_aes_ctx_t *aes_ctx, sdp_aes_op_t op, uint32_t len, const uint8_t *in, uint8_t *out)
SDP AES ECB crypto operation(Encrypt or Decrypt)
Definition: hpm_romapi.h:885
static hpm_stat_t rom_xpi_nor_get_property(XPI_Type *base, xpi_nor_config_t *nor_cfg, uint32_t property_id, uint32_t *value)
Get XPI NOR properties.
Definition: hpm_romapi.h:625
static hpm_stat_t rom_xpi_nor_get_config(XPI_Type *base, xpi_nor_config_t *nor_cfg, xpi_nor_config_option_t *cfg_option)
Get XPI NOR configuration via cfg_option.
Definition: hpm_romapi.h:404
static hpm_stat_t rom_sdp_hash_init(sdp_hash_ctx_t *hash_ctx, sdp_hash_alg_t alg)
HASH initialization.
Definition: hpm_romapi.h:920
static hpm_stat_t rom_xpi_nor_erase_sector(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config, uint32_t start)
Erase specified FLASH sector in blocking way.
Definition: hpm_romapi.h:450
uint32_t hpm_stat_t
Definition: hpm_common.h:119
otp_region_t
OTP region definitions.
Definition: hpm_otp_drv.h:24
otp_lock_option_t
OTP lock options.
Definition: hpm_otp_drv.h:34
static hpm_stat_t rom_sm3_init(sm3_context_t *ctx)
SM4 initialization.
Definition: hpm_romapi.h:989
static void rom_sm4_setkey_enc(sm4_context_t *ctx, const uint8_t key[16])
Set SM4 encryption key.
Definition: hpm_romapi.h:1033
static hpm_stat_t rom_sm3_finalize(sm3_context_t *ctx, uint8_t output[32])
SM3 finalize Return the computing SM3 digest.
Definition: hpm_romapi.h:1015
static hpm_stat_t rom_sm3_update(sm3_context_t *ctx, const void *input, uint32_t len)
SM3 update operation.
Definition: hpm_romapi.h:1002
#define HPM_XPI0
Definition: hpm_romapi.h:28
#define ROM_API_TABLE_ROOT
Definition: hpm_romapi.h:364
static void rom_sm4_setkey_dec(sm4_context_t *ctx, const uint8_t key[16])
Set SM4 decryption key.
Definition: hpm_romapi.h:1044
#define HPM_XPI1
Definition: hpm_romapi.h:32
static hpm_stat_t rom_sm4_crypt_ecb(sm4_context_t *ctx, uint32_t mode, uint32_t length, const uint8_t *input, uint8_t *output)
SM4 ECB crypto operation(Encrypt or Decrypt)
Definition: hpm_romapi.h:1058
static hpm_stat_t rom_sm4_crypt_cbc(sm4_context_t *ctx, uint32_t mode, uint32_t length, const uint8_t iv[16], const uint8_t *input, uint8_t *output)
SM4 CBC crypto operation(Encrypt or Decrypt)
Definition: hpm_romapi.h:1073
sdp_crypto_op_t
Crypto operation option.
Definition: hpm_sdp_drv.h:44
sdp_crypto_key_bits_t
SDP AES key bit options.
Definition: hpm_sdp_drv.h:29
sdp_hash_alg_t
SDP HASH algorithm definitions.
Definition: hpm_sdp_drv.h:75
xpi_xfer_channel_t
XPI Transfer Channel type definitions.
Definition: hpm_romapi_xpi_def.h:53
uint32_t XPI_Type
XPI_Type definitions for.
Definition: hpm_romapi_xpi_def.h:22
xpi_channel_t
XPI Channel defitions.
Definition: hpm_romapi_xpi_def.h:64
#define fencei()
execute fence.i
Definition: riscv_core.h:88
Bootloader API table.
Definition: hpm_romapi.h:243
const sm3_api_interface_t * sm3_api_if
Definition: hpm_romapi.h:359
const sm4_api_interface_t * sm4_api_if
Definition: hpm_romapi.h:360
Definition: hpm_romapi.h:52
OTP driver interface.
Definition: hpm_romapi.h:82
SDP AES context structure.
Definition: hpm_sdp_drv.h:132
SDP DMA context.
Definition: hpm_sdp_drv.h:152
SDP API interface.
Definition: hpm_romapi.h:243
SDP HASH context.
Definition: hpm_sdp_drv.h:159
Definition: hpm_romapi.h:301
uint32_t version
Definition: hpm_romapi.h:303
Definition: hpm_romapi.h:72
Definition: hpm_romapi.h:312
uint32_t version
Definition: hpm_romapi.h:314
Definition: hpm_romapi.h:80
uint32_t mode
Definition: hpm_romapi.h:81
Definition: hpm_romapi_xpi_soc_def.h:28
XPI configuration structure.
Definition: hpm_romapi_xpi_def.h:160
XPI Device Configuration structure.
Definition: hpm_romapi_xpi_def.h:173
XPI driver interface.
Definition: hpm_romapi.h:110
XPI NOR configuration option The ROM SW can detect the FLASH configuration based on the following str...
Definition: hpm_romapi_xpi_nor_def.h:136
XPI NOR configuration structure.
Definition: hpm_romapi_xpi_nor_def.h:261
XPI NOR driver interface.
Definition: hpm_romapi.h:145
XPI RAM configuration option The ROM SW can detect the FLASH configuration based on the following str...
Definition: hpm_romapi_xpi_ram_def.h:39
XPI RAM configuration structure.
Definition: hpm_romapi_xpi_ram_def.h:152
XPI RAM driver interface.
Definition: hpm_romapi.h:215
XPI Xfer context.
Definition: hpm_romapi_xpi_def.h:93
Enter Bootloader API argument.
Definition: hpm_romapi.h:41