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];
81 uint32_t _internal[116];
95 uint32_t (*read_from_shadow)(uint32_t addr);
97 uint32_t (*read_from_ip)(uint32_t addr);
99 hpm_stat_t (*program)(uint32_t addr,
const uint32_t *src, uint32_t num_of_words);
107 hpm_stat_t (*set_configurable_region)(uint32_t start, uint32_t num_of_words);
109 hpm_stat_t (*write_shadow_register)(uint32_t addr, uint32_t data);
129 hpm_stat_t (*update_instr_table)(
XPI_Type *base,
const uint32_t *inst_base, uint32_t seq_idx, uint32_t num);
133 void (*software_reset)(
XPI_Type *base);
137 void (*update_dllcr)(
XPI_Type *base, uint32_t serial_root_clk_freq, uint32_t data_valid_time,
xpi_channel_t channel,
138 uint32_t dly_target);
160 uint16_t *out_status);
178 uint32_t dst_addr, uint32_t length);
181 uint32_t start, uint32_t length);
185 const uint32_t *src, uint32_t dst_addr, uint32_t length);
198 uint32_t reserved0[3];
238 const uint8_t *input, uint8_t *output);
243 hpm_stat_t (*aes_ccm_gen_enc)(
sdp_aes_ctx_t *aes_ctx, uint32_t input_len,
const uint8_t *nonce, uint32_t nonce_len,
244 const uint8_t *aad, uint32_t aad_len,
const uint8_t *input, uint8_t *output,
245 uint8_t *tag, uint32_t tag_len);
248 uint32_t nonce_len,
const uint8_t *aad, uint32_t aad_len,
const uint8_t *input,
249 uint8_t *output,
const uint8_t *tag, uint32_t tag_len);
277 void (*setkey_enc)(
sm4_context_t *ctx,
const uint8_t key[16]);
279 void (*setkey_dec)(
sm4_context_t *ctx,
const uint8_t key[16]);
281 hpm_stat_t (*crypt_ecb)(
sm4_context_t *ctx, uint32_t mode, uint32_t length,
const uint8_t *input, uint8_t *output);
284 const uint8_t *input, uint8_t *output);
287 uint8_t *output, uint32_t length);
290 uint32_t iv_len,
const uint8_t *aad, uint32_t aad_len,
const uint8_t *input,
291 uint8_t *output, uint8_t *tag, uint32_t tag_len);
294 uint32_t iv_len,
const uint8_t *aad, uint32_t aad_len,
const uint8_t *input,
295 uint8_t *output,
const uint8_t *tag, uint32_t tag_len);
303 const uint32_t version;
305 const char *copyright;
318 const uint32_t reserved0;
324 #define ROM_API_TABLE_ROOT ((const bootloader_api_table_t *)0x2001FF00U)
368 status =
ROM_API_TABLE_ROOT->xpi_nor_driver_if->get_config(base, nor_cfg, cfg_option);
400 uint32_t start, uint32_t length)
438 return ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_sector_nonblocking(base, channel, nor_config, start);
472 return ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_block_nonblocking(base, channel, nor_config, start);
487 status =
ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_chip(base, channel, nor_config);
521 const uint32_t *src, uint32_t dst_addr, uint32_t length)
524 status =
ROM_API_TABLE_ROOT->xpi_nor_driver_if->program(base, channel, nor_config, src, dst_addr, length);
542 uint32_t dst_addr, uint32_t length)
544 return ROM_API_TABLE_ROOT->xpi_nor_driver_if->page_program_nonblocking(base, channel, nor_config, src, dst_addr,
560 uint32_t *dst, uint32_t start, uint32_t length)
562 return ROM_API_TABLE_ROOT->xpi_nor_driver_if->read(base, channel, nor_config, dst, start, length);
577 status =
ROM_API_TABLE_ROOT->xpi_nor_driver_if->auto_config(base, config, cfg_option);
593 return ROM_API_TABLE_ROOT->xpi_nor_driver_if->get_property(base, nor_cfg, property_id, value);
608 uint16_t *out_status)
610 return ROM_API_TABLE_ROOT->xpi_nor_driver_if->get_status(base, channel, nor_config, addr, out_status);
625 if (((base !=
HPM_XPI0) && (base !=
HPM_XPI1)) || ((start & 0xFFF) != 0) || ((len & 0xFFF) != 0)
626 || ((offset & 0xFFF) != 0)) {
629 static const uint8_t k_mc_xpi_remap_config[] = {
630 0x2e, 0x96, 0x23, 0x22, 0xc5, 0x42, 0x23, 0x24,
631 0xd5, 0x42, 0x93, 0xe5, 0x15, 0x00, 0x23, 0x20,
632 0xb5, 0x42, 0x05, 0x45, 0x82, 0x80,
634 typedef bool (*remap_config_cb_t)(
XPI_Type *, uint32_t, uint32_t, uint32_t);
635 remap_config_cb_t cb = (remap_config_cb_t) &k_mc_xpi_remap_config;
636 bool result = cb(base, start, len, offset);
649 static const uint8_t k_mc_xpi_remap_disable[] = {
650 0x83, 0x27, 0x05, 0x42, 0xf9, 0x9b, 0x23, 0x20,
651 0xf5, 0x42, 0x82, 0x80,
653 typedef void (*remap_disable_cb_t)(
XPI_Type *);
654 remap_disable_cb_t cb = (remap_disable_cb_t) &k_mc_xpi_remap_disable;
669 static const uint8_t k_mc_xpi_remap_enabled[] = {
670 0x03, 0x25, 0x05, 0x42, 0x05, 0x89, 0x82, 0x80,
672 typedef bool (*remap_chk_cb_t)(
XPI_Type *);
673 remap_chk_cb_t chk_cb = (remap_chk_cb_t) &k_mc_xpi_remap_enabled;
691 static const uint8_t k_mc_exip_region_config[] = {
692 0x18, 0x4a, 0x9a, 0x05, 0x2e, 0x95, 0x85, 0x67,
693 0xaa, 0x97, 0x23, 0xa4, 0xe7, 0xd0, 0x4c, 0x4a,
694 0x14, 0x42, 0x58, 0x42, 0x23, 0xa6, 0xb7, 0xd0,
695 0x4c, 0x46, 0x36, 0x97, 0x13, 0x77, 0x07, 0xc0,
696 0x23, 0xa2, 0xb7, 0xd0, 0x0c, 0x46, 0x13, 0x67,
697 0x37, 0x00, 0x05, 0x45, 0x23, 0xa0, 0xb7, 0xd0,
698 0x0c, 0x4e, 0x23, 0xaa, 0xb7, 0xd0, 0x50, 0x4e,
699 0x23, 0xa8, 0xc7, 0xd0, 0x23, 0xac, 0xd7, 0xd0,
700 0x23, 0xae, 0xe7, 0xd0, 0x82, 0x80,
703 exip_region_config_cb_t cb = (exip_region_config_cb_t) &k_mc_exip_region_config;
704 cb(base, index, param);
718 static const uint8_t k_mc_exip_region_disable[] = {
719 0x9a, 0x05, 0x2e, 0x95, 0x85, 0x67, 0xaa, 0x97,
720 0x03, 0xa7, 0xc7, 0xd1, 0x75, 0x9b, 0x23, 0xae,
721 0xe7, 0xd0, 0x82, 0x80
723 typedef void (*exip_region_disable_cb_t)(
XPI_Type *, uint32_t);
724 exip_region_disable_cb_t cb = (exip_region_disable_cb_t) &k_mc_exip_region_disable;
737 static const uint8_t k_mc_exip_enable[] = {
738 0x85, 0x67, 0x3e, 0x95, 0x83, 0x27, 0x05, 0xc0,
739 0x37, 0x07, 0x00, 0x80, 0xd9, 0x8f, 0x23, 0x20,
740 0xf5, 0xc0, 0x82, 0x80
742 typedef void (*exip_enable_cb_t)(
XPI_Type *);
743 exip_enable_cb_t cb = (exip_enable_cb_t) &k_mc_exip_enable;
754 static const uint8_t k_mc_exip_disable[] = {
755 0x85, 0x67, 0x3e, 0x95, 0x83, 0x27, 0x05, 0xc0,
756 0x86, 0x07, 0x85, 0x83, 0x23, 0x20, 0xf5, 0xc0,
759 typedef void (*exip_disable_cb_t)(
XPI_Type *);
760 exip_disable_cb_t cb = (exip_disable_cb_t) &k_mc_exip_disable;
831 return ROM_API_TABLE_ROOT->sdp_driver_if->aes_set_key(aes_ctx, key, key_bits, key_idx);
844 uint32_t len,
const uint8_t *in, uint8_t *out)
860 const uint8_t *in, uint8_t *out)
862 return ROM_API_TABLE_ROOT->sdp_driver_if->aes_crypt_cbc(aes_ctx, op, length, iv, in, out);
1026 const uint8_t *input, uint8_t *output)
1028 return ROM_API_TABLE_ROOT->sm4_api_if->crypt_cbc(ctx, mode, length, iv, input, output);
static hpm_stat_t rom_sm3_init(sm3_context_t *ctx)
SM4 initialization.
Definition: hpm_romapi.h:940
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:920
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:859
static ATTR_RAMFUNC 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:573
static ATTR_RAMFUNC 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:380
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:558
static void rom_sm4_setkey_enc(sm4_context_t *ctx, const uint8_t key[16])
Set SM4 encryption key.
Definition: hpm_romapi.h:984
static ATTR_RAMFUNC 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:500
static ATTR_RAMFUNC 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:483
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:966
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:907
static ATTR_RAMFUNC 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:450
static hpm_stat_t rom_sm3_update(sm3_context_t *ctx, const void *input, uint32_t len)
SM3 update operation.
Definition: hpm_romapi.h:953
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:623
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:686
static ATTR_RAMFUNC void rom_xpi_nor_exip_enable(XPI_Type *base)
Enable global EXiP logic.
Definition: hpm_romapi.h:735
static void rom_sdp_init(void)
Initialize SDP IP.
Definition: hpm_romapi.h:807
static ATTR_RAMFUNC 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:540
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:716
static void rom_sm4_setkey_dec(sm4_context_t *ctx, const uint8_t key[16])
Set SM4 decryption key.
Definition: hpm_romapi.h:995
static ATTR_RAMFUNC 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:434
static ATTR_RAMFUNC 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:398
static hpm_stat_t rom_enter_bootloader(void *ctx)
Eneter specified Boot mode.
Definition: hpm_romapi.h:343
static ATTR_RAMFUNC void rom_xpi_nor_remap_disable(XPI_Type *base)
Disable XPI Remapping logic.
Definition: hpm_romapi.h:647
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:828
static void rom_sdp_deinit(void)
De-initialize SDP IP.
Definition: hpm_romapi.h:815
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:780
static hpm_stat_t rom_xpi_ram_init(XPI_Type *base, xpi_ram_config_t *ram_cfg)
Initialize XPI RAM.
Definition: hpm_romapi.h:792
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:606
static ATTR_RAMFUNC 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:468
static ATTR_RAMFUNC void rom_xpi_nor_exip_disable(XPI_Type *base)
Disable global EXiP logic.
Definition: hpm_romapi.h:752
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:1009
static ATTR_RAMFUNC 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:519
static ATTR_RAMFUNC bool rom_xpi_nor_is_remap_enabled(XPI_Type *base)
Check whether XPI Remapping is enabled.
Definition: hpm_romapi.h:667
static hpm_stat_t rom_sdp_hash_finish(sdp_hash_ctx_t *hash_ctx, uint8_t *digest)
HASH finialize.
Definition: hpm_romapi.h:894
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:883
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:843
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:590
static ATTR_RAMFUNC 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:364
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:871
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:1025
static ATTR_RAMFUNC 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:416
static void init(hpm_panel_t *panel)
Definition: cc10128007.c:86
uint32_t hpm_stat_t
Definition: hpm_common.h:123
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
#define HPM_XPI0
Definition: hpm_romapi.h:28
#define ROM_API_TABLE_ROOT
Definition: hpm_romapi.h:324
#define HPM_XPI1
Definition: hpm_romapi.h:32
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:102
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 definitions.
Definition: hpm_romapi_xpi_def.h:64
static hpm_stat_t read(void *ops, hpm_serial_nor_transfer_seq_t *cmd_seq)
Definition: hpm_serial_nor_host_spi.c:309
#define fencei()
execute fence.i
Definition: riscv_core.h:88
Bootloader API table.
Definition: hpm_romapi.h:243
Definition: hpm_romapi.h:52
OTP driver interface.
Definition: hpm_romapi.h:82
SDP AES context structure.
Definition: hpm_sdp_drv.h:159
SDP DMA context.
Definition: hpm_sdp_drv.h:179
SDP API interface.
Definition: hpm_romapi.h:243
SDP HASH context.
Definition: hpm_sdp_drv.h:186
Definition: hpm_romapi.h:301
Definition: hpm_romapi.h:72
Definition: hpm_romapi.h:312
Definition: hpm_romapi.h:80
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