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 {
111  uint32_t version;
112  hpm_stat_t (*enable)(XPI_Type *base);
113  hpm_stat_t (*disable)(XPI_Type *base);
114  hpm_stat_t (*lock_reg_access)(XPI_Type *base);
115  hpm_stat_t (*configure_region)(XPI_Type *base, const exip_region_context_t *ctx);
116 
117  bool (*remap_config)(XPI_Type *base, uint32_t start, uint32_t len, uint32_t offset);
118  bool (*remap_enabled)(XPI_Type *base);
119  void (*remap_disable)(XPI_Type *base);
120  bool (*exip_region_config)(XPI_Type *base, uint32_t index, exip_region_param_t *param);
121  void (*exip_region_disable)(XPI_Type *base, uint32_t index);
123 
127 typedef struct {
129  uint32_t version;
131  hpm_stat_t (*sdp_ip_init)(void);
133  hpm_stat_t (*sdp_ip_deinit)(void);
135  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);
137  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);
139  hpm_stat_t (*aes_crypt_cbc)(sdp_aes_ctx_t *aes_ctx,
140  sdp_aes_op_t op,
141  uint32_t length,
142  uint8_t iv[16],
143  const uint8_t *input,
144  uint8_t *output);
147  (*aes_crypt_ctr)(sdp_aes_ctx_t *aes_ctx, uint8_t *nonce_ctr, uint8_t *input, uint8_t *output, uint32_t length);
149  hpm_stat_t (*aes_ccm_gen_enc)(sdp_aes_ctx_t *aes_ctx,
150  uint32_t input_len,
151  const uint8_t *nonce,
152  uint32_t nonce_len,
153  const uint8_t *aad,
154  uint32_t aad_len,
155  const uint8_t *input,
156  uint8_t *output,
157  uint8_t *tag,
158  uint32_t tag_len);
160  hpm_stat_t (*aes_ccm_dec_verify)(sdp_aes_ctx_t *aes_ctx,
161  uint32_t input_len,
162  const uint8_t *nonce,
163  uint32_t nonce_len,
164  const uint8_t *aad,
165  uint32_t aad_len,
166  const uint8_t *input,
167  uint8_t *output,
168  const uint8_t *tag,
169  uint32_t tag_len);
171  hpm_stat_t (*memcpy)(sdp_dma_ctx_t *dma_ctx, void *dst, const void *src, uint32_t length);
173  hpm_stat_t (*memset)(sdp_dma_ctx_t *dma_ctx, void *dst, uint8_t pattern, uint32_t length);
175  hpm_stat_t (*hash_init)(sdp_hash_ctx_t *hash_ctx, sdp_hash_alg_t alg);
177  hpm_stat_t (*hash_update)(sdp_hash_ctx_t *hash_ctx, const uint8_t *data, uint32_t length);
179  hpm_stat_t (*hash_finish)(sdp_hash_ctx_t *hash_ctx, uint8_t *digest);
181  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);
183  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);
185  hpm_stat_t (*sm4_crypt_cbc)(sdp_sm4_ctx_t *sm4_ctx,
186  sdp_sm4_op_t op,
187  uint32_t length,
188  uint8_t iv[16],
189  const uint8_t *input,
190  uint8_t *output);
193  (*sm4_crypt_ctr)(sdp_sm4_ctx_t *sm4_ctx, uint8_t *nonce_ctr, uint8_t *input, uint8_t *output, uint32_t length);
195  hpm_stat_t (*sm4_ccm_gen_enc)(sdp_sm4_ctx_t *sm4_ctx,
196  uint32_t input_len,
197  const uint8_t *nonce,
198  uint32_t nonce_len,
199  const uint8_t *aad,
200  uint32_t aad_len,
201  const uint8_t *input,
202  uint8_t *output,
203  uint8_t *tag,
204  uint32_t tag_len);
206  hpm_stat_t (*sm4_ccm_dec_verify)(sdp_sm4_ctx_t *sm4_ctx,
207  uint32_t input_len,
208  const uint8_t *nonce,
209  uint32_t nonce_len,
210  const uint8_t *aad,
211  uint32_t aad_len,
212  const uint8_t *input,
213  uint8_t *output,
214  const uint8_t *tag,
215  uint32_t tag_len);
217 
221 typedef struct {
223  const uint32_t version;
225  const char *copyright;
227  hpm_stat_t (*run_bootloader)(void *arg);
229  const otp_driver_interface_t *otp_driver_if;
231  const xpi_driver_interface_t *xpi_driver_if;
233  const xpi_nor_driver_interface_t *xpi_nor_driver_if;
235  const uint32_t reserved0;
238  const uint32_t reserved1[3];
239  const exip_driver_interface_t *exip_api_if;
240  const uint32_t family_id;
242 
244 #define ROM_API_TABLE_ROOT ((const bootloader_api_table_t *)0x2001FF00U)
245 
246 
247 #ifdef __cplusplus
248 extern "C" {
249 #endif
250 
251 /***********************************************************************************************************************
252  *
253  *
254  * Enter bootloader Wrapper
255  *
256  *
257  **********************************************************************************************************************/
258 
264 static inline hpm_stat_t rom_enter_bootloader(void *ctx)
265 {
266  return ROM_API_TABLE_ROOT->run_bootloader(ctx);
267 }
268 
269 /***********************************************************************************************************************
270  *
271  *
272  * XPI NOR Driver Wrapper
273  *
274  *
275  **********************************************************************************************************************/
276 
284 ATTR_RAMFUNC
286  xpi_nor_config_t *nor_cfg,
287  xpi_nor_config_option_t *cfg_option)
288 {
289  hpm_stat_t status;
290  status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->get_config(base, nor_cfg, cfg_option);
291  fencei();
292  return status;
293 }
294 
301 ATTR_RAMFUNC
302 static inline hpm_stat_t rom_xpi_nor_init(XPI_Type *base, xpi_nor_config_t *nor_config)
303 {
304  hpm_stat_t status;
305  status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->init(base, nor_config);
306  fencei();
307  return status;
308 }
309 
319 ATTR_RAMFUNC
321  xpi_xfer_channel_t channel,
322  const xpi_nor_config_t *nor_config,
323  uint32_t start,
324  uint32_t length)
325 {
326  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase(base, channel, nor_config, start, length);
327  fencei();
328  return status;
329 }
330 
339 ATTR_RAMFUNC
341  xpi_xfer_channel_t channel,
342  const xpi_nor_config_t *nor_config,
343  uint32_t start)
344 {
345  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_sector(base, channel, nor_config, start);
346  fencei();
347  return status;
348 }
349 
358 ATTR_RAMFUNC
360  xpi_xfer_channel_t channel,
361  const xpi_nor_config_t *nor_config,
362  uint32_t start)
363 {
364  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_sector_nonblocking(base, channel, nor_config, start);
365 }
366 
375 ATTR_RAMFUNC
377  xpi_xfer_channel_t channel,
378  const xpi_nor_config_t *nor_config,
379  uint32_t start)
380 {
381  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_block(base, channel, nor_config, start);
382  fencei();
383  return status;
384 }
385 
394 ATTR_RAMFUNC
396  xpi_xfer_channel_t channel,
397  const xpi_nor_config_t *nor_config,
398  uint32_t start)
399 {
400  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_block_nonblocking(base, channel, nor_config, start);
401 }
402 
410 ATTR_RAMFUNC
412  xpi_xfer_channel_t channel,
413  const xpi_nor_config_t *nor_config)
414 {
415  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_chip(base, channel, nor_config);
416  fencei();
417  return status;
418 }
419 
427 ATTR_RAMFUNC
429  xpi_xfer_channel_t channel,
430  const xpi_nor_config_t *nor_config)
431 {
432  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_chip_nonblocking(base, channel, nor_config);
433  fencei();
434  return status;
435 }
436 
447 ATTR_RAMFUNC
449  xpi_xfer_channel_t channel,
450  const xpi_nor_config_t *nor_config,
451  const uint32_t *src,
452  uint32_t dst_addr,
453  uint32_t length)
454 {
455  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->program(base, channel, nor_config, src, dst_addr, length);
456  fencei();
457  return status;
458 }
459 
470 ATTR_RAMFUNC
472  xpi_xfer_channel_t channel,
473  const xpi_nor_config_t *nor_config,
474  const uint32_t *src,
475  uint32_t dst_addr,
476  uint32_t length)
477 {
478  return ROM_API_TABLE_ROOT->xpi_nor_driver_if
479  ->page_program_nonblocking(base, channel, nor_config, src, dst_addr, length);
480 }
481 
493  xpi_xfer_channel_t channel,
494  const xpi_nor_config_t *nor_config,
495  uint32_t *dst,
496  uint32_t start,
497  uint32_t length)
498 {
499  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->read(base, channel, nor_config, dst, start, length);
500 }
501 
509 ATTR_RAMFUNC
511  xpi_nor_config_t *config,
512  xpi_nor_config_option_t *cfg_option)
513 {
514  hpm_stat_t status;
515  status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->auto_config(base, config, cfg_option);
516  fencei();
517  return status;
518 }
519 
529  xpi_nor_config_t *nor_cfg,
530  uint32_t property_id,
531  uint32_t *value)
532 {
533  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->get_property(base, nor_cfg, property_id, value);
534 }
535 
547  xpi_xfer_channel_t channel,
548  const xpi_nor_config_t *nor_config,
549  uint32_t addr,
550  uint16_t *out_status)
551 {
552  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->get_status(base, channel, nor_config, addr, out_status);
553 }
554 
564 ATTR_RAMFUNC
565 static inline bool rom_xpi_nor_remap_config(XPI_Type *base, uint32_t start, uint32_t len, uint32_t offset)
566 {
567  return ROM_API_TABLE_ROOT->exip_api_if->remap_config(base, start, len, offset);
568 }
569 
574 ATTR_RAMFUNC
575 static inline void rom_xpi_nor_remap_disable(XPI_Type *base)
576 {
577  ROM_API_TABLE_ROOT->exip_api_if->remap_disable(base);
578  fencei();
579 }
580 
588 ATTR_RAMFUNC
589 static inline bool rom_xpi_nor_is_remap_enabled(XPI_Type *base)
590 {
591  return ROM_API_TABLE_ROOT->exip_api_if->remap_enabled(base);
592 }
593 
602 ATTR_RAMFUNC
603 static inline bool rom_xpi_nor_exip_region_config(XPI_Type *base, uint32_t index, exip_region_param_t *param)
604 {
605  bool result = ROM_API_TABLE_ROOT->exip_api_if->exip_region_config(base, index, param);
606  ROM_API_TABLE_ROOT->xpi_driver_if->software_reset(base);
607  fencei();
608  return result;
609 }
610 
616 ATTR_RAMFUNC
617 static inline void rom_xpi_nor_exip_region_disable(XPI_Type *base, uint32_t index)
618 {
619  ROM_API_TABLE_ROOT->exip_api_if->exip_region_disable(base, index);
620  fencei();
621 }
622 
627 ATTR_RAMFUNC
628 static inline void rom_xpi_nor_exip_enable(XPI_Type *base)
629 {
630  ROM_API_TABLE_ROOT->exip_api_if->enable(base);
631  fencei();
632 }
633 
638 ATTR_RAMFUNC
639 static inline void rom_xpi_nor_exip_disable(XPI_Type *base)
640 {
641  ROM_API_TABLE_ROOT->exip_api_if->disable(base);
642  fencei();
643 }
644 
645 /***********************************************************************************************************************
646  *
647  *
648  * SDP Driver Wrapper
649  *
650  *
651  **********************************************************************************************************************/
655 static inline void rom_sdp_init(void)
656 {
657  ROM_API_TABLE_ROOT->sdp_driver_if->sdp_ip_init();
658 }
659 
663 static inline void rom_sdp_deinit(void)
664 {
665  ROM_API_TABLE_ROOT->sdp_driver_if->sdp_ip_deinit();
666 }
667 
677  const uint8_t *key,
678  sdp_aes_key_bits_t key_bits,
679  uint32_t key_idx)
680 {
681  return ROM_API_TABLE_ROOT->sdp_driver_if->aes_set_key(aes_ctx, key, key_bits, key_idx);
682 }
683 
694  sdp_aes_op_t op,
695  uint32_t len,
696  const uint8_t *in,
697  uint8_t *out)
698 {
699  return ROM_API_TABLE_ROOT->sdp_driver_if->aes_crypt_ecb(aes_ctx, op, len, in, out);
700 }
701 
713  sdp_aes_op_t op,
714  uint32_t length,
715  uint8_t iv[16],
716  const uint8_t *in,
717  uint8_t *out)
718 {
719  return ROM_API_TABLE_ROOT->sdp_driver_if->aes_crypt_cbc(aes_ctx, op, length, iv, in, out);
720 }
721 
730 static inline hpm_stat_t rom_sdp_sm4_set_key(sdp_sm4_ctx_t *sm4_ctx,
731  const uint8_t *key,
732  sdp_sm4_key_bits_t key_bits,
733  uint32_t key_idx)
734 {
735  return ROM_API_TABLE_ROOT->sdp_driver_if->sm4_set_key(sm4_ctx, key, key_bits, key_idx);
736 }
737 
747 static inline hpm_stat_t rom_sdp_sm4_crypt_ecb(sdp_sm4_ctx_t *sm4_ctx,
748  sdp_sm4_op_t op,
749  uint32_t len,
750  const uint8_t *in,
751  uint8_t *out)
752 {
753  return ROM_API_TABLE_ROOT->sdp_driver_if->sm4_crypt_ecb(sm4_ctx, op, len, in, out);
754 }
755 
766 static inline hpm_stat_t rom_sdp_sm4_crypt_cbc(sdp_sm4_ctx_t *sm4_ctx,
767  sdp_sm4_op_t op,
768  uint32_t length,
769  uint8_t iv[16],
770  const uint8_t *in,
771  uint8_t *out)
772 {
773  return ROM_API_TABLE_ROOT->sdp_driver_if->sm4_crypt_cbc(sm4_ctx, op, length, iv, in, out);
774 }
775 
783 {
784  return ROM_API_TABLE_ROOT->sdp_driver_if->hash_init(hash_ctx, alg);
785 }
786 
794 static inline hpm_stat_t rom_sdp_hash_update(sdp_hash_ctx_t *hash_ctx, const uint8_t *data, uint32_t length)
795 {
796  return ROM_API_TABLE_ROOT->sdp_driver_if->hash_update(hash_ctx, data, length);
797 }
798 
805 static inline hpm_stat_t rom_sdp_hash_finish(sdp_hash_ctx_t *hash_ctx, uint8_t *digest)
806 {
807  return ROM_API_TABLE_ROOT->sdp_driver_if->hash_finish(hash_ctx, digest);
808 }
809 
818 static inline hpm_stat_t rom_sdp_memcpy(sdp_dma_ctx_t *dma_ctx, void *dst, const void *src, uint32_t length)
819 {
820  return ROM_API_TABLE_ROOT->sdp_driver_if->memcpy(dma_ctx, dst, src, length);
821 }
822 
831 static inline hpm_stat_t rom_sdp_memset(sdp_dma_ctx_t *dma_ctx, void *dst, uint8_t pattern, uint32_t length)
832 {
833  return ROM_API_TABLE_ROOT->sdp_driver_if->memset(dma_ctx, dst, pattern, length);
834 }
835 
836 #ifdef __cplusplus
837 }
838 #endif
839 
845 #endif /* HPM_ROMAPI_H */
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:510
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:302
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:492
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:428
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:411
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:376
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:565
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:603
static ATTR_RAMFUNC void rom_xpi_nor_exip_enable(XPI_Type *base)
Enable global EXiP logic.
Definition: hpm_romapi.h:628
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:471
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:617
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:359
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:320
static hpm_stat_t rom_enter_bootloader(void *ctx)
Eneter specified Boot mode.
Definition: hpm_romapi.h:264
static ATTR_RAMFUNC void rom_xpi_nor_remap_disable(XPI_Type *base)
Disable XPI Remapping logic.
Definition: hpm_romapi.h:575
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:546
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:395
static ATTR_RAMFUNC void rom_xpi_nor_exip_disable(XPI_Type *base)
Disable global EXiP logic.
Definition: hpm_romapi.h:639
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:448
static ATTR_RAMFUNC bool rom_xpi_nor_is_remap_enabled(XPI_Type *base)
Check whether XPI Remapping is enabled.
Definition: hpm_romapi.h:589
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:528
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:285
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:340
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
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:831
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:712
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:766
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:818
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:747
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:730
static void rom_sdp_init(void)
Initialize SDP IP.
Definition: hpm_romapi.h:655
#define ROM_API_TABLE_ROOT
Definition: hpm_romapi.h:244
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:676
static void rom_sdp_deinit(void)
De-initialize SDP IP.
Definition: hpm_romapi.h:663
static hpm_stat_t rom_sdp_hash_finish(sdp_hash_ctx_t *hash_ctx, uint8_t *digest)
HASH finialize.
Definition: hpm_romapi.h:805
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:794
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:693
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:782
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
const sdp_driver_interface_t * sdp_driver_if
Definition: hpm_romapi.h:237
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
uint32_t version
Definition: hpm_romapi.h:129
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
Enter Bootloader API argument.
Definition: hpm_romapi.h:41