HPM SDK
HPMicro Software Development Kit
hpm_romapi.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021-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 (0xF3040000UL)
27 /* XPI0 base pointer */
28 #define HPM_XPI0 ((XPI_Type *) HPM_XPI0_BASE)
29 /* XPI1 base address */
30 #define HPM_XPI1_BASE (0xF3044000UL)
31 /* XPI1 base pointer */
32 #define HPM_XPI1 ((XPI_Type *) HPM_XPI1_BASE)
35 /***********************************************************************************************************************
36  *
37  *
38  * Definitions
39  *
40  *
41  **********************************************************************************************************************/
45 typedef union {
46  uint32_t U;
47  struct {
48  uint32_t index: 8;
49  uint32_t peripheral: 8;
50  uint32_t src: 8;
51  uint32_t tag: 8;
52  };
54 
55 /*EXiP Region Parameter */
56 typedef struct {
57  uint32_t start;
58  uint32_t len;
59  uint8_t key[16];
60  uint8_t ctr[8];
62 
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)
72 typedef struct {
73  uint32_t _internal[138];
75 
76 #define SM4_ENCRYPT 1
77 #define SM4_DECRYPT 0
78 
79 typedef struct {
80  uint32_t mode;
81  uint32_t _internal[116];
83 
87 typedef struct {
89  uint32_t version;
91  void (*init)(void);
93  void (*deinit)(void);
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);
101  hpm_stat_t (*reload)(otp_region_t region);
103  hpm_stat_t (*lock)(uint32_t addr, otp_lock_option_t lock_option);
105  hpm_stat_t (*lock_shadow)(uint32_t addr, otp_lock_option_t lock_option);
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);
111 
115 typedef struct {
117  uint32_t version;
118 
120  hpm_stat_t (*get_config)(XPI_Type *base, xpi_ram_config_t *ram_cfg, xpi_ram_config_option_t *cfg_option);
121 
123  hpm_stat_t (*init)(XPI_Type *base, xpi_ram_config_t *ram_cfg);
125 
129 typedef struct {
131  uint32_t version;
133  hpm_stat_t (*sdp_ip_init)(void);
135  hpm_stat_t (*sdp_ip_deinit)(void);
137  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);
139  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);
141  hpm_stat_t (*aes_crypt_cbc)(sdp_aes_ctx_t *aes_ctx, sdp_aes_op_t op, uint32_t length, uint8_t iv[16],
142  const uint8_t *input, uint8_t *output);
144  hpm_stat_t (*aes_crypt_ctr)(sdp_aes_ctx_t *aes_ctx, uint8_t *nonce_ctr, uint8_t *input, uint8_t *output,
145  uint32_t length);
147  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,
148  const uint8_t *aad, uint32_t aad_len, const uint8_t *input, uint8_t *output,
149  uint8_t *tag, uint32_t tag_len);
151  hpm_stat_t (*aes_ccm_dec_verify)(sdp_aes_ctx_t *aes_ctx, uint32_t input_len, const uint8_t *nonce,
152  uint32_t nonce_len, const uint8_t *aad, uint32_t aad_len, const uint8_t *input,
153  uint8_t *output, const uint8_t *tag, uint32_t tag_len);
155  hpm_stat_t (*memcpy)(sdp_dma_ctx_t *dma_ctx, void *dst, const void *src, uint32_t length);
157  hpm_stat_t (*memset)(sdp_dma_ctx_t *dma_ctx, void *dst, uint8_t pattern, uint32_t length);
159  hpm_stat_t (*hash_init)(sdp_hash_ctx_t *hash_ctx, sdp_hash_alg_t alg);
161  hpm_stat_t (*hash_update)(sdp_hash_ctx_t *hash_ctx, const uint8_t *data, uint32_t length);
163  hpm_stat_t (*hash_finish)(sdp_hash_ctx_t *hash_ctx, uint8_t *digest);
165 
166 typedef struct {
168  uint32_t version;
170  hpm_stat_t (*init)(sm3_context_t *ctx);
172  hpm_stat_t (*update)(sm3_context_t *ctx, const void *input, uint32_t len);
174  hpm_stat_t (*finalize)(sm3_context_t *ctx, uint8_t output[32]);
176 
177 typedef struct {
179  uint32_t version;
181  void (*setkey_enc)(sm4_context_t *ctx, const uint8_t key[16]);
183  void (*setkey_dec)(sm4_context_t *ctx, const uint8_t key[16]);
185  hpm_stat_t (*crypt_ecb)(sm4_context_t *ctx, uint32_t mode, uint32_t length, const uint8_t *input, uint8_t *output);
187  hpm_stat_t (*crypt_cbc)(sm4_context_t *ctx, uint32_t mode, uint32_t length, const uint8_t iv[16],
188  const uint8_t *input, uint8_t *output);
190  hpm_stat_t (*crypt_ctr)(sm4_context_t *ctx, uint8_t *nonce_counter, const uint8_t *input,
191  uint8_t *output, uint32_t length);
193  hpm_stat_t (*ccm_gen_enc)(sm4_context_t *ctx, uint32_t input_len, const uint8_t *iv,
194  uint32_t iv_len, const uint8_t *aad, uint32_t aad_len, const uint8_t *input,
195  uint8_t *output, uint8_t *tag, uint32_t tag_len);
197  hpm_stat_t (*ccm_dec_verify)(sm4_context_t *ctx, uint32_t input_len, const uint8_t *iv,
198  uint32_t iv_len, const uint8_t *aad, uint32_t aad_len, const uint8_t *input,
199  uint8_t *output, const uint8_t *tag, uint32_t tag_len);
201 
205 typedef struct {
207  const uint32_t version;
209  const char *copyright;
211  hpm_stat_t (*run_bootloader)(void *arg);
213  const otp_driver_interface_t *otp_driver_if;
215  const xpi_driver_interface_t *xpi_driver_if;
217  const xpi_nor_driver_interface_t *xpi_nor_driver_if;
219  const xpi_ram_driver_interface_t *xpi_ram_driver_if;
221  const sdp_driver_interface_t *sdp_driver_if;
222  const uint32_t reserved0;
223  const sm3_api_interface_t *sm3_api_if; /* SM3 driver interface address */
224  const sm4_api_interface_t *sm4_api_if; /* SM4 driver itnerface address */
226 
228 #define ROM_API_TABLE_ROOT ((const bootloader_api_table_t *)0x2001FF00U)
229 
230 #ifdef __cplusplus
231 extern "C" {
232 #endif
233 
234 /***********************************************************************************************************************
235  *
236  *
237  * Enter bootloader Wrapper
238  *
239  *
240  **********************************************************************************************************************/
241 
247 static inline hpm_stat_t rom_enter_bootloader(void *ctx)
248 {
249  return ROM_API_TABLE_ROOT->run_bootloader(ctx);
250 }
251 
252 /***********************************************************************************************************************
253  *
254  *
255  * XPI NOR Driver Wrapper
256  *
257  *
258  **********************************************************************************************************************/
259 
267 ATTR_RAMFUNC
269  xpi_nor_config_option_t *cfg_option)
270 {
271  hpm_stat_t status;
272  status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->get_config(base, nor_cfg, cfg_option);
273  fencei();
274  return status;
275 }
276 
283 ATTR_RAMFUNC
284 static inline hpm_stat_t rom_xpi_nor_init(XPI_Type *base, xpi_nor_config_t *nor_config)
285 {
286  hpm_stat_t status;
287  status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->init(base, nor_config);
288  fencei();
289  return status;
290 }
291 
301 ATTR_RAMFUNC
303  const xpi_nor_config_t *nor_config,
304  uint32_t start, uint32_t length)
305 {
306  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase(base, channel, nor_config, start, length);
307  fencei();
308  return status;
309 }
310 
319 ATTR_RAMFUNC
321  const xpi_nor_config_t *nor_config,
322  uint32_t start)
323 {
324  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_sector(base, channel, nor_config, start);
325  fencei();
326  return status;
327 }
328 
337 ATTR_RAMFUNC
339  const xpi_nor_config_t *nor_config,
340  uint32_t start)
341 {
342  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_sector_nonblocking(base, channel, nor_config, start);
343 }
344 
353 ATTR_RAMFUNC
355  const xpi_nor_config_t *nor_config,
356  uint32_t start)
357 {
358  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_block(base, channel, nor_config, start);
359  fencei();
360  return status;
361 }
362 
371 ATTR_RAMFUNC
373  const xpi_nor_config_t *nor_config,
374  uint32_t start)
375 {
376  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_block_nonblocking(base, channel, nor_config, start);
377 }
378 
386 ATTR_RAMFUNC
388  const xpi_nor_config_t *nor_config)
389 {
390  hpm_stat_t status;
391  status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_chip(base, channel, nor_config);
392  fencei();
393  return status;
394 }
395 
403 ATTR_RAMFUNC
405  const xpi_nor_config_t *nor_config)
406 {
407  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_chip_nonblocking(base, channel, nor_config);
408  fencei();
409  return status;
410 }
411 
422 ATTR_RAMFUNC
424  const xpi_nor_config_t *nor_config,
425  const uint32_t *src, uint32_t dst_addr, uint32_t length)
426 {
427  hpm_stat_t status;
428  status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->program(base, channel, nor_config, src, dst_addr, length);
429  fencei();
430  return status;
431 }
432 
443 ATTR_RAMFUNC
445  const xpi_nor_config_t *nor_config, const uint32_t *src,
446  uint32_t dst_addr, uint32_t length)
447 {
448  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->page_program_nonblocking(base, channel, nor_config, src, dst_addr,
449  length);
450 }
451 
463  const xpi_nor_config_t *nor_config,
464  uint32_t *dst, uint32_t start, uint32_t length)
465 {
466  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->read(base, channel, nor_config, dst, start, length);
467 }
468 
476 ATTR_RAMFUNC
478  xpi_nor_config_option_t *cfg_option)
479 {
480  hpm_stat_t status;
481  status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->auto_config(base, config, cfg_option);
482  fencei();
483  return status;
484 }
485 
494 static inline hpm_stat_t rom_xpi_nor_get_property(XPI_Type *base, xpi_nor_config_t *nor_cfg, uint32_t property_id,
495  uint32_t *value)
496 {
497  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->get_property(base, nor_cfg, property_id, value);
498 }
499 
511  const xpi_nor_config_t *nor_config, uint32_t addr,
512  uint16_t *out_status)
513 {
514  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->get_status(base, channel, nor_config, addr, out_status);
515 }
516 
526 ATTR_RAMFUNC
527 static inline bool rom_xpi_nor_remap_config(XPI_Type *base, uint32_t start, uint32_t len, uint32_t offset)
528 {
529  if (((base != HPM_XPI0) && (base != HPM_XPI1)) || ((start & 0xFFF) != 0) || ((len & 0xFFF) != 0)
530  || ((offset & 0xFFF) != 0)) {
531  return false;
532  }
533  static const uint8_t k_mc_xpi_remap_config[] = {
534  0x2e, 0x96, 0x23, 0x22, 0xc5, 0x42, 0x23, 0x24,
535  0xd5, 0x42, 0x93, 0xe5, 0x15, 0x00, 0x23, 0x20,
536  0xb5, 0x42, 0x05, 0x45, 0x82, 0x80,
537  };
538  typedef bool (*remap_config_cb_t)(XPI_Type *, uint32_t, uint32_t, uint32_t);
539  remap_config_cb_t cb = (remap_config_cb_t) &k_mc_xpi_remap_config;
540  bool result = cb(base, start, len, offset);
541  ROM_API_TABLE_ROOT->xpi_driver_if->software_reset(base);
542  fencei();
543  return result;
544 }
545 
550 ATTR_RAMFUNC
551 static inline void rom_xpi_nor_remap_disable(XPI_Type *base)
552 {
553  static const uint8_t k_mc_xpi_remap_disable[] = {
554  0x83, 0x27, 0x05, 0x42, 0xf9, 0x9b, 0x23, 0x20,
555  0xf5, 0x42, 0x82, 0x80,
556  };
557  typedef void (*remap_disable_cb_t)(XPI_Type *);
558  remap_disable_cb_t cb = (remap_disable_cb_t) &k_mc_xpi_remap_disable;
559  cb(base);
560  fencei();
561 }
562 
570 ATTR_RAMFUNC
571 static inline bool rom_xpi_nor_is_remap_enabled(XPI_Type *base)
572 {
573  static const uint8_t k_mc_xpi_remap_enabled[] = {
574  0x03, 0x25, 0x05, 0x42, 0x05, 0x89, 0x82, 0x80,
575  };
576  typedef bool (*remap_chk_cb_t)(XPI_Type *);
577  remap_chk_cb_t chk_cb = (remap_chk_cb_t) &k_mc_xpi_remap_enabled;
578  return chk_cb(base);
579 }
580 
589 ATTR_RAMFUNC
590 static inline bool rom_xpi_nor_exip_region_config(XPI_Type *base, uint32_t index, exip_region_param_t *param)
591 {
592  if ((base != HPM_XPI0) && (base != HPM_XPI1)) {
593  return false;
594  }
595  static const uint8_t k_mc_exip_region_config[] = {
596  0x18, 0x4a, 0x9a, 0x05, 0x2e, 0x95, 0x85, 0x67,
597  0xaa, 0x97, 0x23, 0xa4, 0xe7, 0xd0, 0x4c, 0x4a,
598  0x14, 0x42, 0x58, 0x42, 0x23, 0xa6, 0xb7, 0xd0,
599  0x4c, 0x46, 0x36, 0x97, 0x13, 0x77, 0x07, 0xc0,
600  0x23, 0xa2, 0xb7, 0xd0, 0x0c, 0x46, 0x13, 0x67,
601  0x37, 0x00, 0x05, 0x45, 0x23, 0xa0, 0xb7, 0xd0,
602  0x0c, 0x4e, 0x23, 0xaa, 0xb7, 0xd0, 0x50, 0x4e,
603  0x23, 0xa8, 0xc7, 0xd0, 0x23, 0xac, 0xd7, 0xd0,
604  0x23, 0xae, 0xe7, 0xd0, 0x82, 0x80,
605  };
606  typedef void (*exip_region_config_cb_t)(XPI_Type *, uint32_t, exip_region_param_t *);
607  exip_region_config_cb_t cb = (exip_region_config_cb_t) &k_mc_exip_region_config;
608  cb(base, index, param);
609  ROM_API_TABLE_ROOT->xpi_driver_if->software_reset(base);
610  fencei();
611  return true;
612 }
613 
619 ATTR_RAMFUNC
620 static inline void rom_xpi_nor_exip_region_disable(XPI_Type *base, uint32_t index)
621 {
622  static const uint8_t k_mc_exip_region_disable[] = {
623  0x9a, 0x05, 0x2e, 0x95, 0x85, 0x67, 0xaa, 0x97,
624  0x03, 0xa7, 0xc7, 0xd1, 0x75, 0x9b, 0x23, 0xae,
625  0xe7, 0xd0, 0x82, 0x80
626  };
627  typedef void (*exip_region_disable_cb_t)(XPI_Type *, uint32_t);
628  exip_region_disable_cb_t cb = (exip_region_disable_cb_t) &k_mc_exip_region_disable;
629  cb(base, index);
630  ROM_API_TABLE_ROOT->xpi_driver_if->software_reset(base);
631  fencei();
632 }
633 
638 ATTR_RAMFUNC
639 static inline void rom_xpi_nor_exip_enable(XPI_Type *base)
640 {
641  static const uint8_t k_mc_exip_enable[] = {
642  0x85, 0x67, 0x3e, 0x95, 0x83, 0x27, 0x05, 0xc0,
643  0x37, 0x07, 0x00, 0x80, 0xd9, 0x8f, 0x23, 0x20,
644  0xf5, 0xc0, 0x82, 0x80
645  };
646  typedef void (*exip_enable_cb_t)(XPI_Type *);
647  exip_enable_cb_t cb = (exip_enable_cb_t) &k_mc_exip_enable;
648  cb(base);
649 }
650 
655 ATTR_RAMFUNC
656 static inline void rom_xpi_nor_exip_disable(XPI_Type *base)
657 {
658  static const uint8_t k_mc_exip_disable[] = {
659  0x85, 0x67, 0x3e, 0x95, 0x83, 0x27, 0x05, 0xc0,
660  0x86, 0x07, 0x85, 0x83, 0x23, 0x20, 0xf5, 0xc0,
661  0x82, 0x80
662  };
663  typedef void (*exip_disable_cb_t)(XPI_Type *);
664  exip_disable_cb_t cb = (exip_disable_cb_t) &k_mc_exip_disable;
665  cb(base);
666  ROM_API_TABLE_ROOT->xpi_driver_if->software_reset(base);
667  fencei();
668 }
669 
670 /***********************************************************************************************************************
671  *
672  *
673  * XPI RAM Driver Wrapper
674  *
675  *
676  **********************************************************************************************************************/
685  xpi_ram_config_option_t *cfg_option)
686 {
687  return ROM_API_TABLE_ROOT->xpi_ram_driver_if->get_config(base, ram_cfg, cfg_option);
688 }
689 
696 static inline hpm_stat_t rom_xpi_ram_init(XPI_Type *base, xpi_ram_config_t *ram_cfg)
697 {
698  return ROM_API_TABLE_ROOT->xpi_ram_driver_if->init(base, ram_cfg);
699 }
700 
701 /***********************************************************************************************************************
702  *
703  *
704  * SDP Driver Wrapper
705  *
706  *
707  **********************************************************************************************************************/
711 static inline void rom_sdp_init(void)
712 {
713  ROM_API_TABLE_ROOT->sdp_driver_if->sdp_ip_init();
714 }
715 
719 static inline void rom_sdp_deinit(void)
720 {
721  ROM_API_TABLE_ROOT->sdp_driver_if->sdp_ip_deinit();
722 }
723 
732 static inline hpm_stat_t rom_sdp_aes_set_key(sdp_aes_ctx_t *aes_ctx, const uint8_t *key,
733  sdp_aes_key_bits_t key_bits, uint32_t key_idx)
734 {
735  return ROM_API_TABLE_ROOT->sdp_driver_if->aes_set_key(aes_ctx, key, key_bits, key_idx);
736 }
737 
748  uint32_t len, const uint8_t *in, uint8_t *out)
749 {
750  return ROM_API_TABLE_ROOT->sdp_driver_if->aes_crypt_ecb(aes_ctx, op, len, in, out);
751 }
752 
763 static inline 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],
764  const uint8_t *in, 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 
776 {
777  return ROM_API_TABLE_ROOT->sdp_driver_if->hash_init(hash_ctx, alg);
778 }
779 
787 static inline hpm_stat_t rom_sdp_hash_update(sdp_hash_ctx_t *hash_ctx, const uint8_t *data, uint32_t length)
788 {
789  return ROM_API_TABLE_ROOT->sdp_driver_if->hash_update(hash_ctx, data, length);
790 }
791 
798 static inline hpm_stat_t rom_sdp_hash_finish(sdp_hash_ctx_t *hash_ctx, uint8_t *digest)
799 {
800  return ROM_API_TABLE_ROOT->sdp_driver_if->hash_finish(hash_ctx, digest);
801 }
802 
811 static inline hpm_stat_t rom_sdp_memcpy(sdp_dma_ctx_t *dma_ctx, void *dst, const void *src, uint32_t length)
812 {
813  return ROM_API_TABLE_ROOT->sdp_driver_if->memcpy(dma_ctx, dst, src, length);
814 }
815 
824 static inline hpm_stat_t rom_sdp_memset(sdp_dma_ctx_t *dma_ctx, void *dst, uint8_t pattern, uint32_t length)
825 {
826  return ROM_API_TABLE_ROOT->sdp_driver_if->memset(dma_ctx, dst, pattern, length);
827 }
828 
829 
830 /***********************************************************************************************************************
831  *
832  *
833  * SM3 Driver Wrapper
834  *
835  *
836  **********************************************************************************************************************/
837 
845 {
846  return ROM_API_TABLE_ROOT->sm3_api_if->init(ctx);
847 }
848 
857 static inline hpm_stat_t rom_sm3_update(sm3_context_t *ctx, const void *input, uint32_t len)
858 {
859  return ROM_API_TABLE_ROOT->sm3_api_if->update(ctx, input, len);
860 }
861 
870 static inline hpm_stat_t rom_sm3_finalize(sm3_context_t *ctx, uint8_t output[32])
871 {
872  return ROM_API_TABLE_ROOT->sm3_api_if->finalize(ctx, output);
873 }
874 
875 /***********************************************************************************************************************
876  *
877  *
878  * SM4 Driver Wrapper
879  *
880  *
881  **********************************************************************************************************************/
888 static inline void rom_sm4_setkey_enc(sm4_context_t *ctx, const uint8_t key[16])
889 {
890  ROM_API_TABLE_ROOT->sm4_api_if->setkey_enc(ctx, key);
891 }
892 
899 static inline void rom_sm4_setkey_dec(sm4_context_t *ctx, const uint8_t key[16])
900 {
901  ROM_API_TABLE_ROOT->sm4_api_if->setkey_dec(ctx, key);
902 }
903 
913 static inline hpm_stat_t rom_sm4_crypt_ecb(sm4_context_t *ctx, uint32_t mode, uint32_t length, const uint8_t *input,
914  uint8_t *output)
915 {
916  return ROM_API_TABLE_ROOT->sm4_api_if->crypt_ecb(ctx, mode, length, input, output);
917 }
918 
929 static inline hpm_stat_t rom_sm4_crypt_cbc(sm4_context_t *ctx, uint32_t mode, uint32_t length, const uint8_t iv[16],
930  const uint8_t *input, uint8_t *output)
931 {
932  return ROM_API_TABLE_ROOT->sm4_api_if->crypt_cbc(ctx, mode, length, iv, input, output);
933 }
934 
935 #ifdef __cplusplus
936 }
937 #endif
938 
944 #endif /* HPM_ROMAPI_H */
static hpm_stat_t rom_sm3_init(sm3_context_t *ctx)
SM4 initialization.
Definition: hpm_romapi.h:844
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:824
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:763
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:477
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:284
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:462
static void rom_sm4_setkey_enc(sm4_context_t *ctx, const uint8_t key[16])
Set SM4 encryption key.
Definition: hpm_romapi.h:888
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:404
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:387
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:870
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:811
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:354
static hpm_stat_t rom_sm3_update(sm3_context_t *ctx, const void *input, uint32_t len)
SM3 update operation.
Definition: hpm_romapi.h:857
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:527
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:590
static ATTR_RAMFUNC void rom_xpi_nor_exip_enable(XPI_Type *base)
Enable global EXiP logic.
Definition: hpm_romapi.h:639
static void rom_sdp_init(void)
Initialize SDP IP.
Definition: hpm_romapi.h:711
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:444
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:620
static void rom_sm4_setkey_dec(sm4_context_t *ctx, const uint8_t key[16])
Set SM4 decryption key.
Definition: hpm_romapi.h:899
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:338
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:302
static hpm_stat_t rom_enter_bootloader(void *ctx)
Eneter specified Boot mode.
Definition: hpm_romapi.h:247
static ATTR_RAMFUNC void rom_xpi_nor_remap_disable(XPI_Type *base)
Disable XPI Remapping logic.
Definition: hpm_romapi.h:551
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:732
static void rom_sdp_deinit(void)
De-initialize SDP IP.
Definition: hpm_romapi.h:719
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:684
static hpm_stat_t rom_xpi_ram_init(XPI_Type *base, xpi_ram_config_t *ram_cfg)
Initialize XPI RAM.
Definition: hpm_romapi.h:696
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:510
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:372
static ATTR_RAMFUNC void rom_xpi_nor_exip_disable(XPI_Type *base)
Disable global EXiP logic.
Definition: hpm_romapi.h:656
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:913
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:423
static ATTR_RAMFUNC bool rom_xpi_nor_is_remap_enabled(XPI_Type *base)
Check whether XPI Remapping is enabled.
Definition: hpm_romapi.h:571
static hpm_stat_t rom_sdp_hash_finish(sdp_hash_ctx_t *hash_ctx, uint8_t *digest)
HASH finialize.
Definition: hpm_romapi.h:798
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:787
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:747
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:494
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:268
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:775
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:929
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:320
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 HPM_XPI0
Definition: hpm_romapi.h:28
#define ROM_API_TABLE_ROOT
Definition: hpm_romapi.h:228
#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
#define fencei()
execute fence.i
Definition: riscv_core.h:88
Bootloader API table.
Definition: hpm_romapi.h:127
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
Definition: hpm_romapi.h:185
Definition: hpm_romapi.h:72
Definition: hpm_romapi.h:196
Definition: hpm_romapi.h:80
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