HPM SDK
HPMicro Software Development Kit
hpm_romapi.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 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 
124 typedef struct {
125  uint32_t version;
126  hpm_stat_t (*enable)(XPI_Type *base);
127  hpm_stat_t (*disable)(XPI_Type *base);
128  hpm_stat_t (*lock_reg_access)(XPI_Type *base);
129  hpm_stat_t (*configure_region)(XPI_Type *base, const exip_region_context_t *ctx);
130 
131  bool (*remap_config)(XPI_Type *base, uint32_t start, uint32_t len, uint32_t offset);
132  bool (*remap_enabled)(XPI_Type *base);
133  void (*remap_disable)(XPI_Type *base);
134  bool (*exip_region_config)(XPI_Type *base, uint32_t index, exip_region_param_t *param);
135  void (*exip_region_disable)(XPI_Type *base, uint32_t index);
137 
141 typedef struct {
143  uint32_t version;
145  hpm_stat_t (*sdp_ip_init)(void);
147  hpm_stat_t (*sdp_ip_deinit)(void);
149  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);
151  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);
153  hpm_stat_t (*aes_crypt_cbc)(sdp_aes_ctx_t *aes_ctx,
154  sdp_aes_op_t op,
155  uint32_t length,
156  uint8_t iv[16],
157  const uint8_t *input,
158  uint8_t *output);
160  hpm_stat_t
161  (*aes_crypt_ctr)(sdp_aes_ctx_t *aes_ctx, uint8_t *nonce_ctr, uint8_t *input, uint8_t *output, uint32_t length);
163  hpm_stat_t (*aes_ccm_gen_enc)(sdp_aes_ctx_t *aes_ctx,
164  uint32_t input_len,
165  const uint8_t *nonce,
166  uint32_t nonce_len,
167  const uint8_t *aad,
168  uint32_t aad_len,
169  const uint8_t *input,
170  uint8_t *output,
171  uint8_t *tag,
172  uint32_t tag_len);
174  hpm_stat_t (*aes_ccm_dec_verify)(sdp_aes_ctx_t *aes_ctx,
175  uint32_t input_len,
176  const uint8_t *nonce,
177  uint32_t nonce_len,
178  const uint8_t *aad,
179  uint32_t aad_len,
180  const uint8_t *input,
181  uint8_t *output,
182  const uint8_t *tag,
183  uint32_t tag_len);
185  hpm_stat_t (*memcpy)(sdp_dma_ctx_t *dma_ctx, void *dst, const void *src, uint32_t length);
187  hpm_stat_t (*memset)(sdp_dma_ctx_t *dma_ctx, void *dst, uint8_t pattern, uint32_t length);
189  hpm_stat_t (*hash_init)(sdp_hash_ctx_t *hash_ctx, sdp_hash_alg_t alg);
191  hpm_stat_t (*hash_update)(sdp_hash_ctx_t *hash_ctx, const uint8_t *data, uint32_t length);
193  hpm_stat_t (*hash_finish)(sdp_hash_ctx_t *hash_ctx, uint8_t *digest);
195  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);
197  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);
199  hpm_stat_t (*sm4_crypt_cbc)(sdp_sm4_ctx_t *sm4_ctx,
200  sdp_sm4_op_t op,
201  uint32_t length,
202  uint8_t iv[16],
203  const uint8_t *input,
204  uint8_t *output);
206  hpm_stat_t
207  (*sm4_crypt_ctr)(sdp_sm4_ctx_t *sm4_ctx, uint8_t *nonce_ctr, uint8_t *input, uint8_t *output, uint32_t length);
209  hpm_stat_t (*sm4_ccm_gen_enc)(sdp_sm4_ctx_t *sm4_ctx,
210  uint32_t input_len,
211  const uint8_t *nonce,
212  uint32_t nonce_len,
213  const uint8_t *aad,
214  uint32_t aad_len,
215  const uint8_t *input,
216  uint8_t *output,
217  uint8_t *tag,
218  uint32_t tag_len);
220  hpm_stat_t (*sm4_ccm_dec_verify)(sdp_sm4_ctx_t *sm4_ctx,
221  uint32_t input_len,
222  const uint8_t *nonce,
223  uint32_t nonce_len,
224  const uint8_t *aad,
225  uint32_t aad_len,
226  const uint8_t *input,
227  uint8_t *output,
228  const uint8_t *tag,
229  uint32_t tag_len);
231 
235 typedef struct {
237  const uint32_t version;
239  const char *copyright;
241  hpm_stat_t (*run_bootloader)(void *arg);
243  const otp_driver_interface_t *otp_driver_if;
245  const xpi_driver_interface_t *xpi_driver_if;
247  const xpi_nor_driver_interface_t *xpi_nor_driver_if;
249  const xpi_ram_driver_interface_t *xpi_ram_driver_if;
251  const sdp_driver_interface_t *sdp_driver_if;
252  const uint32_t reserved1[3];
253  const exip_driver_interface_t *exip_api_if;
254  const uint32_t family_id;
256 
258 #define ROM_API_TABLE_ROOT ((const bootloader_api_table_t *)0x2001FF00U)
259 
260 
261 #ifdef __cplusplus
262 extern "C" {
263 #endif
264 
265 /***********************************************************************************************************************
266  *
267  *
268  * Enter bootloader Wrapper
269  *
270  *
271  **********************************************************************************************************************/
272 
278 static inline hpm_stat_t rom_enter_bootloader(void *ctx)
279 {
280  return ROM_API_TABLE_ROOT->run_bootloader(ctx);
281 }
282 
283 /***********************************************************************************************************************
284  *
285  *
286  * XPI NOR Driver Wrapper
287  *
288  *
289  **********************************************************************************************************************/
290 
298 ATTR_RAMFUNC
300  xpi_nor_config_t *nor_cfg,
301  xpi_nor_config_option_t *cfg_option)
302 {
303  hpm_stat_t status;
304  status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->get_config(base, nor_cfg, cfg_option);
305  fencei();
306  return status;
307 }
308 
315 ATTR_RAMFUNC
316 static inline hpm_stat_t rom_xpi_nor_init(XPI_Type *base, xpi_nor_config_t *nor_config)
317 {
318  hpm_stat_t status;
319  status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->init(base, nor_config);
320  fencei();
321  return status;
322 }
323 
333 ATTR_RAMFUNC
335  xpi_xfer_channel_t channel,
336  const xpi_nor_config_t *nor_config,
337  uint32_t start,
338  uint32_t length)
339 {
340  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase(base, channel, nor_config, start, length);
341  fencei();
342  return status;
343 }
344 
353 ATTR_RAMFUNC
355  xpi_xfer_channel_t channel,
356  const xpi_nor_config_t *nor_config,
357  uint32_t start)
358 {
359  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_sector(base, channel, nor_config, start);
360  fencei();
361  return status;
362 }
363 
372 ATTR_RAMFUNC
374  xpi_xfer_channel_t channel,
375  const xpi_nor_config_t *nor_config,
376  uint32_t start)
377 {
378  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_sector_nonblocking(base, channel, nor_config, start);
379 }
380 
389 ATTR_RAMFUNC
391  xpi_xfer_channel_t channel,
392  const xpi_nor_config_t *nor_config,
393  uint32_t start)
394 {
395  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_block(base, channel, nor_config, start);
396  fencei();
397  return status;
398 }
399 
408 ATTR_RAMFUNC
410  xpi_xfer_channel_t channel,
411  const xpi_nor_config_t *nor_config,
412  uint32_t start)
413 {
414  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_block_nonblocking(base, channel, nor_config, start);
415 }
416 
424 ATTR_RAMFUNC
426  xpi_xfer_channel_t channel,
427  const xpi_nor_config_t *nor_config)
428 {
429  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_chip(base, channel, nor_config);
430  fencei();
431  return status;
432 }
433 
441 ATTR_RAMFUNC
443  xpi_xfer_channel_t channel,
444  const xpi_nor_config_t *nor_config)
445 {
446  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_chip_nonblocking(base, channel, nor_config);
447  fencei();
448  return status;
449 }
450 
461 ATTR_RAMFUNC
463  xpi_xfer_channel_t channel,
464  const xpi_nor_config_t *nor_config,
465  const uint32_t *src,
466  uint32_t dst_addr,
467  uint32_t length)
468 {
469  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->program(base, channel, nor_config, src, dst_addr, length);
470  fencei();
471  return status;
472 }
473 
484 ATTR_RAMFUNC
486  xpi_xfer_channel_t channel,
487  const xpi_nor_config_t *nor_config,
488  const uint32_t *src,
489  uint32_t dst_addr,
490  uint32_t length)
491 {
492  return ROM_API_TABLE_ROOT->xpi_nor_driver_if
493  ->page_program_nonblocking(base, channel, nor_config, src, dst_addr, length);
494 }
495 
507  xpi_xfer_channel_t channel,
508  const xpi_nor_config_t *nor_config,
509  uint32_t *dst,
510  uint32_t start,
511  uint32_t length)
512 {
513  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->read(base, channel, nor_config, dst, start, length);
514 }
515 
523 ATTR_RAMFUNC
525  xpi_nor_config_t *config,
526  xpi_nor_config_option_t *cfg_option)
527 {
528  hpm_stat_t status;
529  status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->auto_config(base, config, cfg_option);
530  fencei();
531  return status;
532 }
533 
543  xpi_nor_config_t *nor_cfg,
544  uint32_t property_id,
545  uint32_t *value)
546 {
547  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->get_property(base, nor_cfg, property_id, value);
548 }
549 
561  xpi_xfer_channel_t channel,
562  const xpi_nor_config_t *nor_config,
563  uint32_t addr,
564  uint16_t *out_status)
565 {
566  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->get_status(base, channel, nor_config, addr, out_status);
567 }
568 
578 ATTR_RAMFUNC
579 static inline bool rom_xpi_nor_remap_config(XPI_Type *base, uint32_t start, uint32_t len, uint32_t offset)
580 {
581  return ROM_API_TABLE_ROOT->exip_api_if->remap_config(base, start, len, offset);
582 }
583 
588 ATTR_RAMFUNC
589 static inline void rom_xpi_nor_remap_disable(XPI_Type *base)
590 {
591  ROM_API_TABLE_ROOT->exip_api_if->remap_disable(base);
592  fencei();
593 }
594 
602 ATTR_RAMFUNC
603 static inline bool rom_xpi_nor_is_remap_enabled(XPI_Type *base)
604 {
605  return ROM_API_TABLE_ROOT->exip_api_if->remap_enabled(base);
606 }
607 
616 ATTR_RAMFUNC
617 static inline bool rom_xpi_nor_exip_region_config(XPI_Type *base, uint32_t index, exip_region_param_t *param)
618 {
619  bool result = ROM_API_TABLE_ROOT->exip_api_if->exip_region_config(base, index, param);
620  ROM_API_TABLE_ROOT->xpi_driver_if->software_reset(base);
621  fencei();
622  return result;
623 }
624 
630 ATTR_RAMFUNC
631 static inline void rom_xpi_nor_exip_region_disable(XPI_Type *base, uint32_t index)
632 {
633  ROM_API_TABLE_ROOT->exip_api_if->exip_region_disable(base, index);
634  fencei();
635 }
636 
641 ATTR_RAMFUNC
642 static inline void rom_xpi_nor_exip_enable(XPI_Type *base)
643 {
644  ROM_API_TABLE_ROOT->exip_api_if->enable(base);
645  fencei();
646 }
647 
652 ATTR_RAMFUNC
653 static inline void rom_xpi_nor_exip_disable(XPI_Type *base)
654 {
655  ROM_API_TABLE_ROOT->exip_api_if->disable(base);
656  fencei();
657 }
658 
659 /***********************************************************************************************************************
660  *
661  *
662  * XPI RAM Driver Wrapper
663  *
664  *
665  **********************************************************************************************************************/
674  xpi_ram_config_t *ram_cfg,
675  xpi_ram_config_option_t *cfg_option)
676 {
677  return ROM_API_TABLE_ROOT->xpi_ram_driver_if->get_config(base, ram_cfg, cfg_option);
678 }
679 
686 static inline hpm_stat_t rom_xpi_ram_init(XPI_Type *base, xpi_ram_config_t *ram_cfg)
687 {
688  return ROM_API_TABLE_ROOT->xpi_ram_driver_if->init(base, ram_cfg);
689 }
690 
691 /***********************************************************************************************************************
692  *
693  *
694  * SDP Driver Wrapper
695  *
696  *
697  **********************************************************************************************************************/
701 static inline void rom_sdp_init(void)
702 {
703  ROM_API_TABLE_ROOT->sdp_driver_if->sdp_ip_init();
704 }
705 
709 static inline void rom_sdp_deinit(void)
710 {
711  ROM_API_TABLE_ROOT->sdp_driver_if->sdp_ip_deinit();
712 }
713 
723  const uint8_t *key,
724  sdp_aes_key_bits_t key_bits,
725  uint32_t key_idx)
726 {
727  return ROM_API_TABLE_ROOT->sdp_driver_if->aes_set_key(aes_ctx, key, key_bits, key_idx);
728 }
729 
740  sdp_aes_op_t op,
741  uint32_t len,
742  const uint8_t *in,
743  uint8_t *out)
744 {
745  return ROM_API_TABLE_ROOT->sdp_driver_if->aes_crypt_ecb(aes_ctx, op, len, in, out);
746 }
747 
759  sdp_aes_op_t op,
760  uint32_t length,
761  uint8_t iv[16],
762  const uint8_t *in,
763  uint8_t *out)
764 {
765  return ROM_API_TABLE_ROOT->sdp_driver_if->aes_crypt_cbc(aes_ctx, op, length, iv, in, out);
766 }
767 
776 static inline hpm_stat_t rom_sdp_sm4_set_key(sdp_sm4_ctx_t *sm4_ctx,
777  const uint8_t *key,
778  sdp_sm4_key_bits_t key_bits,
779  uint32_t key_idx)
780 {
781  return ROM_API_TABLE_ROOT->sdp_driver_if->sm4_set_key(sm4_ctx, key, key_bits, key_idx);
782 }
783 
793 static inline hpm_stat_t rom_sdp_sm4_crypt_ecb(sdp_sm4_ctx_t *sm4_ctx,
794  sdp_sm4_op_t op,
795  uint32_t len,
796  const uint8_t *in,
797  uint8_t *out)
798 {
799  return ROM_API_TABLE_ROOT->sdp_driver_if->sm4_crypt_ecb(sm4_ctx, op, len, in, out);
800 }
801 
812 static inline hpm_stat_t rom_sdp_sm4_crypt_cbc(sdp_sm4_ctx_t *sm4_ctx,
813  sdp_sm4_op_t op,
814  uint32_t length,
815  uint8_t iv[16],
816  const uint8_t *in,
817  uint8_t *out)
818 {
819  return ROM_API_TABLE_ROOT->sdp_driver_if->sm4_crypt_cbc(sm4_ctx, op, length, iv, in, out);
820 }
821 
829 {
830  return ROM_API_TABLE_ROOT->sdp_driver_if->hash_init(hash_ctx, alg);
831 }
832 
840 static inline hpm_stat_t rom_sdp_hash_update(sdp_hash_ctx_t *hash_ctx, const uint8_t *data, uint32_t length)
841 {
842  return ROM_API_TABLE_ROOT->sdp_driver_if->hash_update(hash_ctx, data, length);
843 }
844 
851 static inline hpm_stat_t rom_sdp_hash_finish(sdp_hash_ctx_t *hash_ctx, uint8_t *digest)
852 {
853  return ROM_API_TABLE_ROOT->sdp_driver_if->hash_finish(hash_ctx, digest);
854 }
855 
864 static inline hpm_stat_t rom_sdp_memcpy(sdp_dma_ctx_t *dma_ctx, void *dst, const void *src, uint32_t length)
865 {
866  return ROM_API_TABLE_ROOT->sdp_driver_if->memcpy(dma_ctx, dst, src, length);
867 }
868 
877 static inline hpm_stat_t rom_sdp_memset(sdp_dma_ctx_t *dma_ctx, void *dst, uint8_t pattern, uint32_t length)
878 {
879  return ROM_API_TABLE_ROOT->sdp_driver_if->memset(dma_ctx, dst, pattern, length);
880 }
881 
882 #ifdef __cplusplus
883 }
884 #endif
885 
891 #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:877
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:758
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:524
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:316
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:506
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:812
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:442
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:425
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:864
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:390
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:579
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:793
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:617
static ATTR_RAMFUNC void rom_xpi_nor_exip_enable(XPI_Type *base)
Enable global EXiP logic.
Definition: hpm_romapi.h:642
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:776
static void rom_sdp_init(void)
Initialize SDP IP.
Definition: hpm_romapi.h:701
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:485
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:631
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:373
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:334
static hpm_stat_t rom_enter_bootloader(void *ctx)
Eneter specified Boot mode.
Definition: hpm_romapi.h:278
static ATTR_RAMFUNC void rom_xpi_nor_remap_disable(XPI_Type *base)
Disable XPI Remapping logic.
Definition: hpm_romapi.h:589
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:722
static void rom_sdp_deinit(void)
De-initialize SDP IP.
Definition: hpm_romapi.h:709
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:673
static hpm_stat_t rom_xpi_ram_init(XPI_Type *base, xpi_ram_config_t *ram_cfg)
Initialize XPI RAM.
Definition: hpm_romapi.h:686
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:560
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:409
static ATTR_RAMFUNC void rom_xpi_nor_exip_disable(XPI_Type *base)
Disable global EXiP logic.
Definition: hpm_romapi.h:653
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:462
static ATTR_RAMFUNC bool rom_xpi_nor_is_remap_enabled(XPI_Type *base)
Check whether XPI Remapping is enabled.
Definition: hpm_romapi.h:603
static hpm_stat_t rom_sdp_hash_finish(sdp_hash_ctx_t *hash_ctx, uint8_t *digest)
HASH finialize.
Definition: hpm_romapi.h:851
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:840
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:739
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:542
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:299
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:828
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:354
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:258
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