HPM SDK
HPMicro Software Development Kit
hpm_romapi.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2023-2024 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef HPM_ROMAPI_H
9 #define HPM_ROMAPI_H
10 
17 #include "hpm_common.h"
18 #include "hpm_otp_drv.h"
19 #include "hpm_romapi_xpi_def.h"
20 #include "hpm_romapi_xpi_soc_def.h"
21 #include "hpm_romapi_xpi_nor_def.h"
22 #include "hpm_romapi_xpi_ram_def.h"
23 #include "hpm_sdp_drv.h"
24 
25 /* XPI0 base address */
26 #define HPM_XPI0_BASE (0xF3000000UL)
27 /* XPI0 base pointer */
28 #define HPM_XPI0 ((XPI_Type *) HPM_XPI0_BASE)
31 /***********************************************************************************************************************
32  *
33  *
34  * Definitions
35  *
36  *
37  **********************************************************************************************************************/
41 typedef union {
42  uint32_t U;
43  struct {
44  uint32_t index: 8;
45  uint32_t peripheral: 8;
46  uint32_t src: 8;
47  uint32_t tag: 8;
48  };
50 
51 /*EXiP Region Parameter */
52 typedef struct {
53  uint32_t start;
54  uint32_t len;
55  uint8_t key[16];
56  uint8_t ctr[8];
58 
59 typedef struct {
60  uint32_t region_start;
61  uint32_t region_end;
62  uint8_t aes_key[16];
63  uint8_t nonce[8];
64  uint8_t index;
65  bool enable;
66  bool valid;
67  bool lock;
69 
70 #define API_BOOT_TAG (0xEBU)
71 #define API_BOOT_SRC_OTP (0U)
72 #define API_BOOT_SRC_PRIMARY (1U)
73 #define API_BOOT_SRC_SERIAL_BOOT (2U)
74 #define API_BOOT_SRC_ISP (3U)
75 #define API_BOOT_PERIPH_AUTO (0U)
76 #define API_BOOT_PERIPH_UART (1U)
77 #define API_BOOT_PERIPH_USBHID (2U)
82 typedef struct {
84  uint32_t version;
86  void (*init)(void);
88  void (*deinit)(void);
90  uint32_t (*read_from_shadow)(uint32_t addr);
92  uint32_t (*read_from_ip)(uint32_t addr);
94  hpm_stat_t (*program)(uint32_t addr, const uint32_t *src, uint32_t num_of_words);
96  hpm_stat_t (*reload)(otp_region_t region);
98  hpm_stat_t (*lock)(uint32_t addr, otp_lock_option_t lock_option);
100  hpm_stat_t (*lock_shadow)(uint32_t addr, otp_lock_option_t lock_option);
102  hpm_stat_t (*set_configurable_region)(uint32_t start, uint32_t num_of_words);
104  hpm_stat_t (*write_shadow_register)(uint32_t addr, uint32_t data);
106 
110 typedef struct {
112  uint32_t version;
113 
115  hpm_stat_t (*get_config)(XPI_Type *base, xpi_ram_config_t *ram_cfg, xpi_ram_config_option_t *cfg_option);
116 
118  hpm_stat_t (*init)(XPI_Type *base, xpi_ram_config_t *ram_cfg);
120 
121 
125 typedef struct {
126  uint32_t version;
127  hpm_stat_t (*enable)(XPI_Type *base);
128  hpm_stat_t (*disable)(XPI_Type *base);
129  hpm_stat_t (*lock_reg_access)(XPI_Type *base);
130  hpm_stat_t (*configure_region)(XPI_Type *base, const exip_region_context_t *ctx);
131 
132  bool (*remap_config)(XPI_Type *base, uint32_t start, uint32_t len, uint32_t offset);
133  bool (*remap_enabled)(XPI_Type *base);
134  void (*remap_disable)(XPI_Type *base);
135  bool (*exip_region_config)(XPI_Type *base, uint32_t index, exip_region_param_t *param);
136  void (*exip_region_disable)(XPI_Type *base, uint32_t index);
138 
142 typedef struct {
144  uint32_t version;
146  hpm_stat_t (*sdp_ip_init)(void);
148  hpm_stat_t (*sdp_ip_deinit)(void);
150  hpm_stat_t (*aes_set_key)(sdp_aes_ctx_t *aes_ctx, const uint8_t *key, sdp_aes_key_bits_t keybits, uint32_t key_idx);
152  hpm_stat_t (*aes_crypt_ecb)(sdp_aes_ctx_t *aes_ctx, sdp_aes_op_t op, uint32_t len, const uint8_t *in, uint8_t *out);
154  hpm_stat_t (*aes_crypt_cbc)(sdp_aes_ctx_t *aes_ctx,
155  sdp_aes_op_t op,
156  uint32_t length,
157  uint8_t iv[16],
158  const uint8_t *input,
159  uint8_t *output);
161  hpm_stat_t
162  (*aes_crypt_ctr)(sdp_aes_ctx_t *aes_ctx, uint8_t *nonce_ctr, uint8_t *input, uint8_t *output, uint32_t length);
164  hpm_stat_t (*aes_ccm_gen_enc)(sdp_aes_ctx_t *aes_ctx,
165  uint32_t input_len,
166  const uint8_t *nonce,
167  uint32_t nonce_len,
168  const uint8_t *aad,
169  uint32_t aad_len,
170  const uint8_t *input,
171  uint8_t *output,
172  uint8_t *tag,
173  uint32_t tag_len);
175  hpm_stat_t (*aes_ccm_dec_verify)(sdp_aes_ctx_t *aes_ctx,
176  uint32_t input_len,
177  const uint8_t *nonce,
178  uint32_t nonce_len,
179  const uint8_t *aad,
180  uint32_t aad_len,
181  const uint8_t *input,
182  uint8_t *output,
183  const uint8_t *tag,
184  uint32_t tag_len);
186  hpm_stat_t (*memcpy)(sdp_dma_ctx_t *dma_ctx, void *dst, const void *src, uint32_t length);
188  hpm_stat_t (*memset)(sdp_dma_ctx_t *dma_ctx, void *dst, uint8_t pattern, uint32_t length);
190  hpm_stat_t (*hash_init)(sdp_hash_ctx_t *hash_ctx, sdp_hash_alg_t alg);
192  hpm_stat_t (*hash_update)(sdp_hash_ctx_t *hash_ctx, const uint8_t *data, uint32_t length);
194  hpm_stat_t (*hash_finish)(sdp_hash_ctx_t *hash_ctx, uint8_t *digest);
196  hpm_stat_t (*sm4_set_key)(sdp_sm4_ctx_t *sm4_ctx, const uint8_t *key, sdp_sm4_key_bits_t keybits, uint32_t key_idx);
198  hpm_stat_t (*sm4_crypt_ecb)(sdp_sm4_ctx_t *sm4_ctx, sdp_sm4_op_t op, uint32_t len, const uint8_t *in, uint8_t *out);
200  hpm_stat_t (*sm4_crypt_cbc)(sdp_sm4_ctx_t *sm4_ctx,
201  sdp_sm4_op_t op,
202  uint32_t length,
203  uint8_t iv[16],
204  const uint8_t *input,
205  uint8_t *output);
207  hpm_stat_t
208  (*sm4_crypt_ctr)(sdp_sm4_ctx_t *sm4_ctx, uint8_t *nonce_ctr, uint8_t *input, uint8_t *output, uint32_t length);
210  hpm_stat_t (*sm4_ccm_gen_enc)(sdp_sm4_ctx_t *sm4_ctx,
211  uint32_t input_len,
212  const uint8_t *nonce,
213  uint32_t nonce_len,
214  const uint8_t *aad,
215  uint32_t aad_len,
216  const uint8_t *input,
217  uint8_t *output,
218  uint8_t *tag,
219  uint32_t tag_len);
221  hpm_stat_t (*sm4_ccm_dec_verify)(sdp_sm4_ctx_t *sm4_ctx,
222  uint32_t input_len,
223  const uint8_t *nonce,
224  uint32_t nonce_len,
225  const uint8_t *aad,
226  uint32_t aad_len,
227  const uint8_t *input,
228  uint8_t *output,
229  const uint8_t *tag,
230  uint32_t tag_len);
232 
236 typedef struct {
238  const uint32_t version;
240  const char *copyright;
242  hpm_stat_t (*run_bootloader)(void *arg);
244  const otp_driver_interface_t *otp_driver_if;
246  const xpi_driver_interface_t *xpi_driver_if;
248  const xpi_nor_driver_interface_t *xpi_nor_driver_if;
250  const xpi_ram_driver_interface_t *xpi_ram_driver_if;
252  const sdp_driver_interface_t *sdp_driver_if;
253  const uint32_t reserved1[3];
254  const exip_driver_interface_t *exip_api_if;
255  const uint32_t family_id;
257 
259 #define ROM_API_TABLE_ROOT ((const bootloader_api_table_t *)0x2001FF00U)
260 
261 
262 #ifdef __cplusplus
263 extern "C" {
264 #endif
265 
266 /***********************************************************************************************************************
267  *
268  *
269  * Enter bootloader Wrapper
270  *
271  *
272  **********************************************************************************************************************/
273 
279 static inline hpm_stat_t rom_enter_bootloader(void *ctx)
280 {
281  return ROM_API_TABLE_ROOT->run_bootloader(ctx);
282 }
283 
284 /***********************************************************************************************************************
285  *
286  *
287  * XPI NOR Driver Wrapper
288  *
289  *
290  **********************************************************************************************************************/
291 
299 ATTR_RAMFUNC
301  xpi_nor_config_t *nor_cfg,
302  xpi_nor_config_option_t *cfg_option)
303 {
304  hpm_stat_t status;
305  status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->get_config(base, nor_cfg, cfg_option);
306  fencei();
307  return status;
308 }
309 
316 ATTR_RAMFUNC
317 static inline hpm_stat_t rom_xpi_nor_init(XPI_Type *base, xpi_nor_config_t *nor_config)
318 {
319  hpm_stat_t status;
320  status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->init(base, nor_config);
321  fencei();
322  return status;
323 }
324 
334 ATTR_RAMFUNC
336  xpi_xfer_channel_t channel,
337  const xpi_nor_config_t *nor_config,
338  uint32_t start,
339  uint32_t length)
340 {
341  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase(base, channel, nor_config, start, length);
342  fencei();
343  return status;
344 }
345 
354 ATTR_RAMFUNC
356  xpi_xfer_channel_t channel,
357  const xpi_nor_config_t *nor_config,
358  uint32_t start)
359 {
360  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_sector(base, channel, nor_config, start);
361  fencei();
362  return status;
363 }
364 
373 ATTR_RAMFUNC
375  xpi_xfer_channel_t channel,
376  const xpi_nor_config_t *nor_config,
377  uint32_t start)
378 {
379  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_sector_nonblocking(base, channel, nor_config, start);
380 }
381 
390 ATTR_RAMFUNC
392  xpi_xfer_channel_t channel,
393  const xpi_nor_config_t *nor_config,
394  uint32_t start)
395 {
396  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_block(base, channel, nor_config, start);
397  fencei();
398  return status;
399 }
400 
409 ATTR_RAMFUNC
411  xpi_xfer_channel_t channel,
412  const xpi_nor_config_t *nor_config,
413  uint32_t start)
414 {
415  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_block_nonblocking(base, channel, nor_config, start);
416 }
417 
425 ATTR_RAMFUNC
427  xpi_xfer_channel_t channel,
428  const xpi_nor_config_t *nor_config)
429 {
430  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_chip(base, channel, nor_config);
431  fencei();
432  return status;
433 }
434 
442 ATTR_RAMFUNC
444  xpi_xfer_channel_t channel,
445  const xpi_nor_config_t *nor_config)
446 {
447  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_chip_nonblocking(base, channel, nor_config);
448  fencei();
449  return status;
450 }
451 
462 ATTR_RAMFUNC
464  xpi_xfer_channel_t channel,
465  const xpi_nor_config_t *nor_config,
466  const uint32_t *src,
467  uint32_t dst_addr,
468  uint32_t length)
469 {
470  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->program(base, channel, nor_config, src, dst_addr, length);
471  fencei();
472  return status;
473 }
474 
485 ATTR_RAMFUNC
487  xpi_xfer_channel_t channel,
488  const xpi_nor_config_t *nor_config,
489  const uint32_t *src,
490  uint32_t dst_addr,
491  uint32_t length)
492 {
493  return ROM_API_TABLE_ROOT->xpi_nor_driver_if
494  ->page_program_nonblocking(base, channel, nor_config, src, dst_addr, length);
495 }
496 
508  xpi_xfer_channel_t channel,
509  const xpi_nor_config_t *nor_config,
510  uint32_t *dst,
511  uint32_t start,
512  uint32_t length)
513 {
514  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->read(base, channel, nor_config, dst, start, length);
515 }
516 
524 ATTR_RAMFUNC
526  xpi_nor_config_t *config,
527  xpi_nor_config_option_t *cfg_option)
528 {
529  hpm_stat_t status;
530  status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->auto_config(base, config, cfg_option);
531  fencei();
532  return status;
533 }
534 
544  xpi_nor_config_t *nor_cfg,
545  uint32_t property_id,
546  uint32_t *value)
547 {
548  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->get_property(base, nor_cfg, property_id, value);
549 }
550 
562  xpi_xfer_channel_t channel,
563  const xpi_nor_config_t *nor_config,
564  uint32_t addr,
565  uint16_t *out_status)
566 {
567  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->get_status(base, channel, nor_config, addr, out_status);
568 }
569 
579 ATTR_RAMFUNC
580 static inline bool rom_xpi_nor_remap_config(XPI_Type *base, uint32_t start, uint32_t len, uint32_t offset)
581 {
582  return ROM_API_TABLE_ROOT->exip_api_if->remap_config(base, start, len, offset);
583 }
584 
589 ATTR_RAMFUNC
590 static inline void rom_xpi_nor_remap_disable(XPI_Type *base)
591 {
592  ROM_API_TABLE_ROOT->exip_api_if->remap_disable(base);
593  fencei();
594 }
595 
603 ATTR_RAMFUNC
604 static inline bool rom_xpi_nor_is_remap_enabled(XPI_Type *base)
605 {
606  return ROM_API_TABLE_ROOT->exip_api_if->remap_enabled(base);
607 }
608 
617 ATTR_RAMFUNC
618 static inline bool rom_xpi_nor_exip_region_config(XPI_Type *base, uint32_t index, exip_region_param_t *param)
619 {
620  bool result = ROM_API_TABLE_ROOT->exip_api_if->exip_region_config(base, index, param);
621  ROM_API_TABLE_ROOT->xpi_driver_if->software_reset(base);
622  fencei();
623  return result;
624 }
625 
631 ATTR_RAMFUNC
632 static inline void rom_xpi_nor_exip_region_disable(XPI_Type *base, uint32_t index)
633 {
634  ROM_API_TABLE_ROOT->exip_api_if->exip_region_disable(base, index);
635  fencei();
636 }
637 
642 ATTR_RAMFUNC
643 static inline void rom_xpi_nor_exip_enable(XPI_Type *base)
644 {
645  ROM_API_TABLE_ROOT->exip_api_if->enable(base);
646  fencei();
647 }
648 
653 ATTR_RAMFUNC
654 static inline void rom_xpi_nor_exip_disable(XPI_Type *base)
655 {
656  ROM_API_TABLE_ROOT->exip_api_if->disable(base);
657  fencei();
658 }
659 
660 /***********************************************************************************************************************
661  *
662  *
663  * XPI RAM Driver Wrapper
664  *
665  *
666  **********************************************************************************************************************/
675  xpi_ram_config_t *ram_cfg,
676  xpi_ram_config_option_t *cfg_option)
677 {
678  return ROM_API_TABLE_ROOT->xpi_ram_driver_if->get_config(base, ram_cfg, cfg_option);
679 }
680 
687 static inline hpm_stat_t rom_xpi_ram_init(XPI_Type *base, xpi_ram_config_t *ram_cfg)
688 {
689  return ROM_API_TABLE_ROOT->xpi_ram_driver_if->init(base, ram_cfg);
690 }
691 
692 /***********************************************************************************************************************
693  *
694  *
695  * SDP Driver Wrapper
696  *
697  *
698  **********************************************************************************************************************/
702 static inline void rom_sdp_init(void)
703 {
704  ROM_API_TABLE_ROOT->sdp_driver_if->sdp_ip_init();
705 }
706 
710 static inline void rom_sdp_deinit(void)
711 {
712  ROM_API_TABLE_ROOT->sdp_driver_if->sdp_ip_deinit();
713 }
714 
724  const uint8_t *key,
725  sdp_aes_key_bits_t key_bits,
726  uint32_t key_idx)
727 {
728  return ROM_API_TABLE_ROOT->sdp_driver_if->aes_set_key(aes_ctx, key, key_bits, key_idx);
729 }
730 
741  sdp_aes_op_t op,
742  uint32_t len,
743  const uint8_t *in,
744  uint8_t *out)
745 {
746  return ROM_API_TABLE_ROOT->sdp_driver_if->aes_crypt_ecb(aes_ctx, op, len, in, out);
747 }
748 
760  sdp_aes_op_t op,
761  uint32_t length,
762  uint8_t iv[16],
763  const uint8_t *in,
764  uint8_t *out)
765 {
766  return ROM_API_TABLE_ROOT->sdp_driver_if->aes_crypt_cbc(aes_ctx, op, length, iv, in, out);
767 }
768 
777 static inline hpm_stat_t rom_sdp_sm4_set_key(sdp_sm4_ctx_t *sm4_ctx,
778  const uint8_t *key,
779  sdp_sm4_key_bits_t key_bits,
780  uint32_t key_idx)
781 {
782  return ROM_API_TABLE_ROOT->sdp_driver_if->sm4_set_key(sm4_ctx, key, key_bits, key_idx);
783 }
784 
794 static inline hpm_stat_t rom_sdp_sm4_crypt_ecb(sdp_sm4_ctx_t *sm4_ctx,
795  sdp_sm4_op_t op,
796  uint32_t len,
797  const uint8_t *in,
798  uint8_t *out)
799 {
800  return ROM_API_TABLE_ROOT->sdp_driver_if->sm4_crypt_ecb(sm4_ctx, op, len, in, out);
801 }
802 
813 static inline hpm_stat_t rom_sdp_sm4_crypt_cbc(sdp_sm4_ctx_t *sm4_ctx,
814  sdp_sm4_op_t op,
815  uint32_t length,
816  uint8_t iv[16],
817  const uint8_t *in,
818  uint8_t *out)
819 {
820  return ROM_API_TABLE_ROOT->sdp_driver_if->sm4_crypt_cbc(sm4_ctx, op, length, iv, in, out);
821 }
822 
830 {
831  return ROM_API_TABLE_ROOT->sdp_driver_if->hash_init(hash_ctx, alg);
832 }
833 
841 static inline hpm_stat_t rom_sdp_hash_update(sdp_hash_ctx_t *hash_ctx, const uint8_t *data, uint32_t length)
842 {
843  return ROM_API_TABLE_ROOT->sdp_driver_if->hash_update(hash_ctx, data, length);
844 }
845 
852 static inline hpm_stat_t rom_sdp_hash_finish(sdp_hash_ctx_t *hash_ctx, uint8_t *digest)
853 {
854  return ROM_API_TABLE_ROOT->sdp_driver_if->hash_finish(hash_ctx, digest);
855 }
856 
865 static inline hpm_stat_t rom_sdp_memcpy(sdp_dma_ctx_t *dma_ctx, void *dst, const void *src, uint32_t length)
866 {
867  return ROM_API_TABLE_ROOT->sdp_driver_if->memcpy(dma_ctx, dst, src, length);
868 }
869 
878 static inline hpm_stat_t rom_sdp_memset(sdp_dma_ctx_t *dma_ctx, void *dst, uint8_t pattern, uint32_t length)
879 {
880  return ROM_API_TABLE_ROOT->sdp_driver_if->memset(dma_ctx, dst, pattern, length);
881 }
882 
883 #ifdef __cplusplus
884 }
885 #endif
886 
892 #endif /* HPM_ROMAPI_H */
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:878
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 CBC crypto operation(Encrypt or Decrypt)
Definition: hpm_romapi.h:759
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:525
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:317
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:507
static hpm_stat_t rom_sdp_sm4_crypt_cbc(sdp_sm4_ctx_t *sm4_ctx, sdp_sm4_op_t op, uint32_t length, uint8_t iv[16], const uint8_t *in, uint8_t *out)
SDP SM4 CBC crypto operation(Encrypt or Decrypt)
Definition: hpm_romapi.h:813
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:443
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:426
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:865
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:391
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:580
static hpm_stat_t rom_sdp_sm4_crypt_ecb(sdp_sm4_ctx_t *sm4_ctx, sdp_sm4_op_t op, uint32_t len, const uint8_t *in, uint8_t *out)
SDP SM4 ECB crypto operation(Encrypt or Decrypt)
Definition: hpm_romapi.h:794
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:618
static ATTR_RAMFUNC void rom_xpi_nor_exip_enable(XPI_Type *base)
Enable global EXiP logic.
Definition: hpm_romapi.h:643
static hpm_stat_t rom_sdp_sm4_set_key(sdp_sm4_ctx_t *sm4_ctx, const uint8_t *key, sdp_sm4_key_bits_t key_bits, uint32_t key_idx)
Set SM4 key to SDP.
Definition: hpm_romapi.h:777
static void rom_sdp_init(void)
Initialize SDP IP.
Definition: hpm_romapi.h:702
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:486
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:632
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:374
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:335
static hpm_stat_t rom_enter_bootloader(void *ctx)
Eneter specified Boot mode.
Definition: hpm_romapi.h:279
static ATTR_RAMFUNC void rom_xpi_nor_remap_disable(XPI_Type *base)
Disable XPI Remapping logic.
Definition: hpm_romapi.h:590
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:723
static void rom_sdp_deinit(void)
De-initialize SDP IP.
Definition: hpm_romapi.h:710
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:674
static hpm_stat_t rom_xpi_ram_init(XPI_Type *base, xpi_ram_config_t *ram_cfg)
Initialize XPI RAM.
Definition: hpm_romapi.h:687
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:561
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:410
static ATTR_RAMFUNC void rom_xpi_nor_exip_disable(XPI_Type *base)
Disable global EXiP logic.
Definition: hpm_romapi.h:654
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:463
static ATTR_RAMFUNC bool rom_xpi_nor_is_remap_enabled(XPI_Type *base)
Check whether XPI Remapping is enabled.
Definition: hpm_romapi.h:604
static hpm_stat_t rom_sdp_hash_finish(sdp_hash_ctx_t *hash_ctx, uint8_t *digest)
HASH finialize.
Definition: hpm_romapi.h:852
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:841
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:740
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:543
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:300
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:829
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:355
static void init(hpm_panel_t *panel)
Definition: cc10128007.c:86
uint32_t hpm_stat_t
Definition: hpm_common.h:126
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 ROM_API_TABLE_ROOT
Definition: hpm_romapi.h:259
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
#define fencei()
execute fence.i
Definition: riscv_core.h:88
Bootloader API table.
Definition: hpm_romapi.h:127
EXIP driver interface.
Definition: hpm_romapi.h:110
Definition: hpm_romapi.h:59
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:127
SDP HASH context.
Definition: hpm_sdp_drv.h:186
XPI driver interface.
Definition: hpm_romapi_xpi_def.h:225
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_xpi_nor_def.h:308
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:99
Enter Bootloader API argument.
Definition: hpm_romapi.h:41