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;
119  hpm_stat_t (*get_default_config)(xpi_config_t *xpi_config);
121  hpm_stat_t (*get_default_device_config)(xpi_device_config_t *dev_config);
123  hpm_stat_t (*init)(XPI_Type *base, xpi_config_t *xpi_config);
125  hpm_stat_t (*config_ahb_buffer)(XPI_Type *base, xpi_ahb_buffer_cfg_t *ahb_buf_cfg);
127  hpm_stat_t (*config_device)(XPI_Type *base, xpi_device_config_t *dev_cfg, xpi_channel_t channel);
129  hpm_stat_t (*update_instr_table)(XPI_Type *base, const uint32_t *inst_base, uint32_t seq_idx, uint32_t num);
131  hpm_stat_t (*transfer_blocking)(XPI_Type *base, xpi_xfer_ctx_t *xfer);
133  void (*software_reset)(XPI_Type *base);
135  bool (*is_idle)(XPI_Type *base);
137  void (*update_dllcr)(XPI_Type *base, uint32_t serial_root_clk_freq, uint32_t data_valid_time, xpi_channel_t channel,
138  uint32_t dly_target);
140  hpm_stat_t (*get_abs_apb_xfer_addr)(XPI_Type *base, xpi_xfer_channel_t channel, uint32_t in_addr,
141  uint32_t *out_addr);
143 
147 typedef struct {
149  uint32_t version;
151  hpm_stat_t (*get_config)(XPI_Type *base, xpi_nor_config_t *nor_cfg, xpi_nor_config_option_t *cfg_option);
153  hpm_stat_t (*init)(XPI_Type *base, xpi_nor_config_t *nor_config);
155  hpm_stat_t (*enable_write)(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config,
156  uint32_t addr);
158  hpm_stat_t (*get_status)(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config,
159  uint32_t addr,
160  uint16_t *out_status);
162  hpm_stat_t (*wait_busy)(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config,
163  uint32_t addr);
165  hpm_stat_t (*erase)(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config, uint32_t start,
166  uint32_t length);
168  hpm_stat_t (*erase_chip)(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config);
170  hpm_stat_t (*erase_sector)(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config,
171  uint32_t addr);
173  hpm_stat_t (*erase_block)(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config,
174  uint32_t addr);
176  hpm_stat_t (*program)(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config,
177  const uint32_t *src,
178  uint32_t dst_addr, uint32_t length);
180  hpm_stat_t (*read)(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config, uint32_t *dst,
181  uint32_t start, uint32_t length);
183  hpm_stat_t (*page_program_nonblocking)(XPI_Type *base, xpi_xfer_channel_t channel,
184  const xpi_nor_config_t *nor_config,
185  const uint32_t *src, uint32_t dst_addr, uint32_t length);
187  hpm_stat_t (*erase_sector_nonblocking)(XPI_Type *base, xpi_xfer_channel_t channel,
188  const xpi_nor_config_t *nor_config,
189  uint32_t addr);
191  hpm_stat_t (*erase_block_nonblocking)(XPI_Type *base, xpi_xfer_channel_t channel,
192  const xpi_nor_config_t *nor_config,
193  uint32_t addr);
195  hpm_stat_t (*erase_chip_nonblocking)(XPI_Type *base, xpi_xfer_channel_t channel,
196  const xpi_nor_config_t *nor_config);
197 
198  uint32_t reserved0[3];
199 
201  hpm_stat_t (*auto_config)(XPI_Type *base, xpi_nor_config_t *nor_cfg, xpi_nor_config_option_t *cfg_option);
202 
204  hpm_stat_t (*get_property)(XPI_Type *base, xpi_nor_config_t *nor_cfg, uint32_t property_id, uint32_t *value);
205 
207 
211 typedef struct {
213  uint32_t version;
214 
216  hpm_stat_t (*get_config)(XPI_Type *base, xpi_ram_config_t *ram_cfg, xpi_ram_config_option_t *cfg_option);
217 
219  hpm_stat_t (*init)(XPI_Type *base, xpi_ram_config_t *ram_cfg);
221 
225 typedef struct {
227  uint32_t version;
229  hpm_stat_t (*sdp_ip_init)(void);
231  hpm_stat_t (*sdp_ip_deinit)(void);
233  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);
235  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);
237  hpm_stat_t (*aes_crypt_cbc)(sdp_aes_ctx_t *aes_ctx, sdp_aes_op_t op, uint32_t length, uint8_t iv[16],
238  const uint8_t *input, uint8_t *output);
240  hpm_stat_t (*aes_crypt_ctr)(sdp_aes_ctx_t *aes_ctx, uint8_t *nonce_ctr, uint8_t *input, uint8_t *output,
241  uint32_t length);
243  hpm_stat_t (*aes_ccm_gen_enc)(sdp_aes_ctx_t *aes_ctx, uint32_t input_len, const uint8_t *nonce, uint32_t nonce_len,
244  const uint8_t *aad, uint32_t aad_len, const uint8_t *input, uint8_t *output,
245  uint8_t *tag, uint32_t tag_len);
247  hpm_stat_t (*aes_ccm_dec_verify)(sdp_aes_ctx_t *aes_ctx, uint32_t input_len, const uint8_t *nonce,
248  uint32_t nonce_len, const uint8_t *aad, uint32_t aad_len, const uint8_t *input,
249  uint8_t *output, const uint8_t *tag, uint32_t tag_len);
251  hpm_stat_t (*memcpy)(sdp_dma_ctx_t *dma_ctx, void *dst, const void *src, uint32_t length);
253  hpm_stat_t (*memset)(sdp_dma_ctx_t *dma_ctx, void *dst, uint8_t pattern, uint32_t length);
255  hpm_stat_t (*hash_init)(sdp_hash_ctx_t *hash_ctx, sdp_hash_alg_t alg);
257  hpm_stat_t (*hash_update)(sdp_hash_ctx_t *hash_ctx, const uint8_t *data, uint32_t length);
259  hpm_stat_t (*hash_finish)(sdp_hash_ctx_t *hash_ctx, uint8_t *digest);
261 
262 typedef struct {
264  uint32_t version;
266  hpm_stat_t (*init)(sm3_context_t *ctx);
268  hpm_stat_t (*update)(sm3_context_t *ctx, const void *input, uint32_t len);
270  hpm_stat_t (*finalize)(sm3_context_t *ctx, uint8_t output[32]);
272 
273 typedef struct {
275  uint32_t version;
277  void (*setkey_enc)(sm4_context_t *ctx, const uint8_t key[16]);
279  void (*setkey_dec)(sm4_context_t *ctx, const uint8_t key[16]);
281  hpm_stat_t (*crypt_ecb)(sm4_context_t *ctx, uint32_t mode, uint32_t length, const uint8_t *input, uint8_t *output);
283  hpm_stat_t (*crypt_cbc)(sm4_context_t *ctx, uint32_t mode, uint32_t length, const uint8_t iv[16],
284  const uint8_t *input, uint8_t *output);
286  hpm_stat_t (*crypt_ctr)(sm4_context_t *ctx, uint8_t *nonce_counter, const uint8_t *input,
287  uint8_t *output, uint32_t length);
289  hpm_stat_t (*ccm_gen_enc)(sm4_context_t *ctx, uint32_t input_len, const uint8_t *iv,
290  uint32_t iv_len, const uint8_t *aad, uint32_t aad_len, const uint8_t *input,
291  uint8_t *output, uint8_t *tag, uint32_t tag_len);
293  hpm_stat_t (*ccm_dec_verify)(sm4_context_t *ctx, uint32_t input_len, const uint8_t *iv,
294  uint32_t iv_len, const uint8_t *aad, uint32_t aad_len, const uint8_t *input,
295  uint8_t *output, const uint8_t *tag, uint32_t tag_len);
297 
301 typedef struct {
303  const uint32_t version;
305  const char *copyright;
307  hpm_stat_t (*run_bootloader)(void *arg);
309  const otp_driver_interface_t *otp_driver_if;
311  const xpi_driver_interface_t *xpi_driver_if;
313  const xpi_nor_driver_interface_t *xpi_nor_driver_if;
315  const xpi_ram_driver_interface_t *xpi_ram_driver_if;
317  const sdp_driver_interface_t *sdp_driver_if;
318  const uint32_t reserved0;
319  const sm3_api_interface_t *sm3_api_if; /* SM3 driver interface address */
320  const sm4_api_interface_t *sm4_api_if; /* SM4 driver itnerface address */
322 
324 #define ROM_API_TABLE_ROOT ((const bootloader_api_table_t *)0x2001FF00U)
325 
326 #ifdef __cplusplus
327 extern "C" {
328 #endif
329 
330 /***********************************************************************************************************************
331  *
332  *
333  * Enter bootloader Wrapper
334  *
335  *
336  **********************************************************************************************************************/
337 
343 static inline hpm_stat_t rom_enter_bootloader(void *ctx)
344 {
345  return ROM_API_TABLE_ROOT->run_bootloader(ctx);
346 }
347 
348 /***********************************************************************************************************************
349  *
350  *
351  * XPI NOR Driver Wrapper
352  *
353  *
354  **********************************************************************************************************************/
355 
363 ATTR_RAMFUNC
365  xpi_nor_config_option_t *cfg_option)
366 {
367  hpm_stat_t status;
368  status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->get_config(base, nor_cfg, cfg_option);
369  fencei();
370  return status;
371 }
372 
379 ATTR_RAMFUNC
380 static inline hpm_stat_t rom_xpi_nor_init(XPI_Type *base, xpi_nor_config_t *nor_config)
381 {
382  hpm_stat_t status;
383  status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->init(base, nor_config);
384  fencei();
385  return status;
386 }
387 
397 ATTR_RAMFUNC
399  const xpi_nor_config_t *nor_config,
400  uint32_t start, uint32_t length)
401 {
402  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase(base, channel, nor_config, start, length);
403  fencei();
404  return status;
405 }
406 
415 ATTR_RAMFUNC
417  const xpi_nor_config_t *nor_config,
418  uint32_t start)
419 {
420  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_sector(base, channel, nor_config, start);
421  fencei();
422  return status;
423 }
424 
433 ATTR_RAMFUNC
435  const xpi_nor_config_t *nor_config,
436  uint32_t start)
437 {
438  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_sector_nonblocking(base, channel, nor_config, start);
439 }
440 
449 ATTR_RAMFUNC
451  const xpi_nor_config_t *nor_config,
452  uint32_t start)
453 {
454  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_block(base, channel, nor_config, start);
455  fencei();
456  return status;
457 }
458 
467 ATTR_RAMFUNC
469  const xpi_nor_config_t *nor_config,
470  uint32_t start)
471 {
472  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_block_nonblocking(base, channel, nor_config, start);
473 }
474 
482 ATTR_RAMFUNC
484  const xpi_nor_config_t *nor_config)
485 {
486  hpm_stat_t status;
487  status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_chip(base, channel, nor_config);
488  fencei();
489  return status;
490 }
491 
499 ATTR_RAMFUNC
501  const xpi_nor_config_t *nor_config)
502 {
503  hpm_stat_t status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->erase_chip_nonblocking(base, channel, nor_config);
504  fencei();
505  return status;
506 }
507 
518 ATTR_RAMFUNC
520  const xpi_nor_config_t *nor_config,
521  const uint32_t *src, uint32_t dst_addr, uint32_t length)
522 {
523  hpm_stat_t status;
524  status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->program(base, channel, nor_config, src, dst_addr, length);
525  fencei();
526  return status;
527 }
528 
539 ATTR_RAMFUNC
541  const xpi_nor_config_t *nor_config, const uint32_t *src,
542  uint32_t dst_addr, uint32_t length)
543 {
544  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->page_program_nonblocking(base, channel, nor_config, src, dst_addr,
545  length);
546 }
547 
559  const xpi_nor_config_t *nor_config,
560  uint32_t *dst, uint32_t start, uint32_t length)
561 {
562  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->read(base, channel, nor_config, dst, start, length);
563 }
564 
572 ATTR_RAMFUNC
574  xpi_nor_config_option_t *cfg_option)
575 {
576  hpm_stat_t status;
577  status = ROM_API_TABLE_ROOT->xpi_nor_driver_if->auto_config(base, config, cfg_option);
578  fencei();
579  return status;
580 }
581 
590 static inline hpm_stat_t rom_xpi_nor_get_property(XPI_Type *base, xpi_nor_config_t *nor_cfg, uint32_t property_id,
591  uint32_t *value)
592 {
593  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->get_property(base, nor_cfg, property_id, value);
594 }
595 
607  const xpi_nor_config_t *nor_config, uint32_t addr,
608  uint16_t *out_status)
609 {
610  return ROM_API_TABLE_ROOT->xpi_nor_driver_if->get_status(base, channel, nor_config, addr, out_status);
611 }
612 
622 ATTR_RAMFUNC
623 static inline bool rom_xpi_nor_remap_config(XPI_Type *base, uint32_t start, uint32_t len, uint32_t offset)
624 {
625  if (((base != HPM_XPI0) && (base != HPM_XPI1)) || ((start & 0xFFF) != 0) || ((len & 0xFFF) != 0)
626  || ((offset & 0xFFF) != 0)) {
627  return false;
628  }
629  static const uint8_t k_mc_xpi_remap_config[] = {
630  0x2e, 0x96, 0x23, 0x22, 0xc5, 0x42, 0x23, 0x24,
631  0xd5, 0x42, 0x93, 0xe5, 0x15, 0x00, 0x23, 0x20,
632  0xb5, 0x42, 0x05, 0x45, 0x82, 0x80,
633  };
634  typedef bool (*remap_config_cb_t)(XPI_Type *, uint32_t, uint32_t, uint32_t);
635  remap_config_cb_t cb = (remap_config_cb_t) &k_mc_xpi_remap_config;
636  bool result = cb(base, start, len, offset);
637  ROM_API_TABLE_ROOT->xpi_driver_if->software_reset(base);
638  fencei();
639  return result;
640 }
641 
646 ATTR_RAMFUNC
647 static inline void rom_xpi_nor_remap_disable(XPI_Type *base)
648 {
649  static const uint8_t k_mc_xpi_remap_disable[] = {
650  0x83, 0x27, 0x05, 0x42, 0xf9, 0x9b, 0x23, 0x20,
651  0xf5, 0x42, 0x82, 0x80,
652  };
653  typedef void (*remap_disable_cb_t)(XPI_Type *);
654  remap_disable_cb_t cb = (remap_disable_cb_t) &k_mc_xpi_remap_disable;
655  cb(base);
656  fencei();
657 }
658 
666 ATTR_RAMFUNC
667 static inline bool rom_xpi_nor_is_remap_enabled(XPI_Type *base)
668 {
669  static const uint8_t k_mc_xpi_remap_enabled[] = {
670  0x03, 0x25, 0x05, 0x42, 0x05, 0x89, 0x82, 0x80,
671  };
672  typedef bool (*remap_chk_cb_t)(XPI_Type *);
673  remap_chk_cb_t chk_cb = (remap_chk_cb_t) &k_mc_xpi_remap_enabled;
674  return chk_cb(base);
675 }
676 
685 ATTR_RAMFUNC
686 static inline bool rom_xpi_nor_exip_region_config(XPI_Type *base, uint32_t index, exip_region_param_t *param)
687 {
688  if ((base != HPM_XPI0) && (base != HPM_XPI1)) {
689  return false;
690  }
691  static const uint8_t k_mc_exip_region_config[] = {
692  0x18, 0x4a, 0x9a, 0x05, 0x2e, 0x95, 0x85, 0x67,
693  0xaa, 0x97, 0x23, 0xa4, 0xe7, 0xd0, 0x4c, 0x4a,
694  0x14, 0x42, 0x58, 0x42, 0x23, 0xa6, 0xb7, 0xd0,
695  0x4c, 0x46, 0x36, 0x97, 0x13, 0x77, 0x07, 0xc0,
696  0x23, 0xa2, 0xb7, 0xd0, 0x0c, 0x46, 0x13, 0x67,
697  0x37, 0x00, 0x05, 0x45, 0x23, 0xa0, 0xb7, 0xd0,
698  0x0c, 0x4e, 0x23, 0xaa, 0xb7, 0xd0, 0x50, 0x4e,
699  0x23, 0xa8, 0xc7, 0xd0, 0x23, 0xac, 0xd7, 0xd0,
700  0x23, 0xae, 0xe7, 0xd0, 0x82, 0x80,
701  };
702  typedef void (*exip_region_config_cb_t)(XPI_Type *, uint32_t, exip_region_param_t *);
703  exip_region_config_cb_t cb = (exip_region_config_cb_t) &k_mc_exip_region_config;
704  cb(base, index, param);
705  ROM_API_TABLE_ROOT->xpi_driver_if->software_reset(base);
706  fencei();
707  return true;
708 }
709 
715 ATTR_RAMFUNC
716 static inline void rom_xpi_nor_exip_region_disable(XPI_Type *base, uint32_t index)
717 {
718  static const uint8_t k_mc_exip_region_disable[] = {
719  0x9a, 0x05, 0x2e, 0x95, 0x85, 0x67, 0xaa, 0x97,
720  0x03, 0xa7, 0xc7, 0xd1, 0x75, 0x9b, 0x23, 0xae,
721  0xe7, 0xd0, 0x82, 0x80
722  };
723  typedef void (*exip_region_disable_cb_t)(XPI_Type *, uint32_t);
724  exip_region_disable_cb_t cb = (exip_region_disable_cb_t) &k_mc_exip_region_disable;
725  cb(base, index);
726  ROM_API_TABLE_ROOT->xpi_driver_if->software_reset(base);
727  fencei();
728 }
729 
734 ATTR_RAMFUNC
735 static inline void rom_xpi_nor_exip_enable(XPI_Type *base)
736 {
737  static const uint8_t k_mc_exip_enable[] = {
738  0x85, 0x67, 0x3e, 0x95, 0x83, 0x27, 0x05, 0xc0,
739  0x37, 0x07, 0x00, 0x80, 0xd9, 0x8f, 0x23, 0x20,
740  0xf5, 0xc0, 0x82, 0x80
741  };
742  typedef void (*exip_enable_cb_t)(XPI_Type *);
743  exip_enable_cb_t cb = (exip_enable_cb_t) &k_mc_exip_enable;
744  cb(base);
745 }
746 
751 ATTR_RAMFUNC
752 static inline void rom_xpi_nor_exip_disable(XPI_Type *base)
753 {
754  static const uint8_t k_mc_exip_disable[] = {
755  0x85, 0x67, 0x3e, 0x95, 0x83, 0x27, 0x05, 0xc0,
756  0x86, 0x07, 0x85, 0x83, 0x23, 0x20, 0xf5, 0xc0,
757  0x82, 0x80
758  };
759  typedef void (*exip_disable_cb_t)(XPI_Type *);
760  exip_disable_cb_t cb = (exip_disable_cb_t) &k_mc_exip_disable;
761  cb(base);
762  ROM_API_TABLE_ROOT->xpi_driver_if->software_reset(base);
763  fencei();
764 }
765 
766 /***********************************************************************************************************************
767  *
768  *
769  * XPI RAM Driver Wrapper
770  *
771  *
772  **********************************************************************************************************************/
781  xpi_ram_config_option_t *cfg_option)
782 {
783  return ROM_API_TABLE_ROOT->xpi_ram_driver_if->get_config(base, ram_cfg, cfg_option);
784 }
785 
792 static inline hpm_stat_t rom_xpi_ram_init(XPI_Type *base, xpi_ram_config_t *ram_cfg)
793 {
794  return ROM_API_TABLE_ROOT->xpi_ram_driver_if->init(base, ram_cfg);
795 }
796 
797 /***********************************************************************************************************************
798  *
799  *
800  * SDP Driver Wrapper
801  *
802  *
803  **********************************************************************************************************************/
807 static inline void rom_sdp_init(void)
808 {
809  ROM_API_TABLE_ROOT->sdp_driver_if->sdp_ip_init();
810 }
811 
815 static inline void rom_sdp_deinit(void)
816 {
817  ROM_API_TABLE_ROOT->sdp_driver_if->sdp_ip_deinit();
818 }
819 
828 static inline hpm_stat_t rom_sdp_aes_set_key(sdp_aes_ctx_t *aes_ctx, const uint8_t *key,
829  sdp_aes_key_bits_t key_bits, uint32_t key_idx)
830 {
831  return ROM_API_TABLE_ROOT->sdp_driver_if->aes_set_key(aes_ctx, key, key_bits, key_idx);
832 }
833 
844  uint32_t len, const uint8_t *in, uint8_t *out)
845 {
846  return ROM_API_TABLE_ROOT->sdp_driver_if->aes_crypt_ecb(aes_ctx, op, len, in, out);
847 }
848 
859 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],
860  const uint8_t *in, uint8_t *out)
861 {
862  return ROM_API_TABLE_ROOT->sdp_driver_if->aes_crypt_cbc(aes_ctx, op, length, iv, in, out);
863 }
864 
872 {
873  return ROM_API_TABLE_ROOT->sdp_driver_if->hash_init(hash_ctx, alg);
874 }
875 
883 static inline hpm_stat_t rom_sdp_hash_update(sdp_hash_ctx_t *hash_ctx, const uint8_t *data, uint32_t length)
884 {
885  return ROM_API_TABLE_ROOT->sdp_driver_if->hash_update(hash_ctx, data, length);
886 }
887 
894 static inline hpm_stat_t rom_sdp_hash_finish(sdp_hash_ctx_t *hash_ctx, uint8_t *digest)
895 {
896  return ROM_API_TABLE_ROOT->sdp_driver_if->hash_finish(hash_ctx, digest);
897 }
898 
907 static inline hpm_stat_t rom_sdp_memcpy(sdp_dma_ctx_t *dma_ctx, void *dst, const void *src, uint32_t length)
908 {
909  return ROM_API_TABLE_ROOT->sdp_driver_if->memcpy(dma_ctx, dst, src, length);
910 }
911 
920 static inline hpm_stat_t rom_sdp_memset(sdp_dma_ctx_t *dma_ctx, void *dst, uint8_t pattern, uint32_t length)
921 {
922  return ROM_API_TABLE_ROOT->sdp_driver_if->memset(dma_ctx, dst, pattern, length);
923 }
924 
925 
926 /***********************************************************************************************************************
927  *
928  *
929  * SM3 Driver Wrapper
930  *
931  *
932  **********************************************************************************************************************/
933 
941 {
942  return ROM_API_TABLE_ROOT->sm3_api_if->init(ctx);
943 }
944 
953 static inline hpm_stat_t rom_sm3_update(sm3_context_t *ctx, const void *input, uint32_t len)
954 {
955  return ROM_API_TABLE_ROOT->sm3_api_if->update(ctx, input, len);
956 }
957 
966 static inline hpm_stat_t rom_sm3_finalize(sm3_context_t *ctx, uint8_t output[32])
967 {
968  return ROM_API_TABLE_ROOT->sm3_api_if->finalize(ctx, output);
969 }
970 
971 /***********************************************************************************************************************
972  *
973  *
974  * SM4 Driver Wrapper
975  *
976  *
977  **********************************************************************************************************************/
984 static inline void rom_sm4_setkey_enc(sm4_context_t *ctx, const uint8_t key[16])
985 {
986  ROM_API_TABLE_ROOT->sm4_api_if->setkey_enc(ctx, key);
987 }
988 
995 static inline void rom_sm4_setkey_dec(sm4_context_t *ctx, const uint8_t key[16])
996 {
997  ROM_API_TABLE_ROOT->sm4_api_if->setkey_dec(ctx, key);
998 }
999 
1009 static inline hpm_stat_t rom_sm4_crypt_ecb(sm4_context_t *ctx, uint32_t mode, uint32_t length, const uint8_t *input,
1010  uint8_t *output)
1011 {
1012  return ROM_API_TABLE_ROOT->sm4_api_if->crypt_ecb(ctx, mode, length, input, output);
1013 }
1014 
1025 static inline hpm_stat_t rom_sm4_crypt_cbc(sm4_context_t *ctx, uint32_t mode, uint32_t length, const uint8_t iv[16],
1026  const uint8_t *input, uint8_t *output)
1027 {
1028  return ROM_API_TABLE_ROOT->sm4_api_if->crypt_cbc(ctx, mode, length, iv, input, output);
1029 }
1030 
1031 #ifdef __cplusplus
1032 }
1033 #endif
1034 
1040 #endif /* HPM_ROMAPI_H */
static hpm_stat_t rom_sm3_init(sm3_context_t *ctx)
SM4 initialization.
Definition: hpm_romapi.h:940
static hpm_stat_t rom_sdp_memset(sdp_dma_ctx_t *dma_ctx, void *dst, uint8_t pattern, uint32_t length)
SDP memset operation.
Definition: hpm_romapi.h:920
static hpm_stat_t rom_sdp_aes_crypt_cbc(sdp_aes_ctx_t *aes_ctx, sdp_aes_op_t op, uint32_t length, uint8_t iv[16], const uint8_t *in, uint8_t *out)
SDP AES ECB crypto operation(Encrypt or Decrypt)
Definition: hpm_romapi.h:859
static ATTR_RAMFUNC hpm_stat_t rom_xpi_nor_auto_config(XPI_Type *base, xpi_nor_config_t *config, xpi_nor_config_option_t *cfg_option)
Automatically configure XPI NOR based on cfg_option.
Definition: hpm_romapi.h:573
static ATTR_RAMFUNC hpm_stat_t rom_xpi_nor_init(XPI_Type *base, xpi_nor_config_t *nor_config)
Initialize XPI NOR based on nor_config.
Definition: hpm_romapi.h:380
static hpm_stat_t rom_xpi_nor_read(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config, uint32_t *dst, uint32_t start, uint32_t length)
Read data from specified FLASH address.
Definition: hpm_romapi.h:558
static void rom_sm4_setkey_enc(sm4_context_t *ctx, const uint8_t key[16])
Set SM4 encryption key.
Definition: hpm_romapi.h:984
static ATTR_RAMFUNC hpm_stat_t rom_xpi_nor_erase_chip_nonblocking(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config)
Erase the whole FLASH in non-blocking way.
Definition: hpm_romapi.h:500
static ATTR_RAMFUNC hpm_stat_t rom_xpi_nor_erase_chip(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config)
Erase the whole FLASH in blocking way.
Definition: hpm_romapi.h:483
static hpm_stat_t rom_sm3_finalize(sm3_context_t *ctx, uint8_t output[32])
SM3 finalize Return the computing SM3 digest.
Definition: hpm_romapi.h:966
static hpm_stat_t rom_sdp_memcpy(sdp_dma_ctx_t *dma_ctx, void *dst, const void *src, uint32_t length)
SDP memcpy operation.
Definition: hpm_romapi.h:907
static ATTR_RAMFUNC hpm_stat_t rom_xpi_nor_erase_block(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config, uint32_t start)
Erase specified FLASH blcok in blocking way.
Definition: hpm_romapi.h:450
static hpm_stat_t rom_sm3_update(sm3_context_t *ctx, const void *input, uint32_t len)
SM3 update operation.
Definition: hpm_romapi.h:953
static ATTR_RAMFUNC bool rom_xpi_nor_remap_config(XPI_Type *base, uint32_t start, uint32_t len, uint32_t offset)
Configure the XPI Address Remapping Logic.
Definition: hpm_romapi.h:623
static ATTR_RAMFUNC bool rom_xpi_nor_exip_region_config(XPI_Type *base, uint32_t index, exip_region_param_t *param)
Configure Specified EXiP Region.
Definition: hpm_romapi.h:686
static ATTR_RAMFUNC void rom_xpi_nor_exip_enable(XPI_Type *base)
Enable global EXiP logic.
Definition: hpm_romapi.h:735
static void rom_sdp_init(void)
Initialize SDP IP.
Definition: hpm_romapi.h:807
static ATTR_RAMFUNC hpm_stat_t rom_xpi_nor_page_program_nonblocking(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config, const uint32_t *src, uint32_t dst_addr, uint32_t length)
Page-Program data to specified FLASH address in non-blocking way.
Definition: hpm_romapi.h:540
static ATTR_RAMFUNC void rom_xpi_nor_exip_region_disable(XPI_Type *base, uint32_t index)
Disable EXiP Feature on specified EXiP Region.
Definition: hpm_romapi.h:716
static void rom_sm4_setkey_dec(sm4_context_t *ctx, const uint8_t key[16])
Set SM4 decryption key.
Definition: hpm_romapi.h:995
static ATTR_RAMFUNC hpm_stat_t rom_xpi_nor_erase_sector_nonblocking(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config, uint32_t start)
Erase specified FLASH sector in non-blocking way.
Definition: hpm_romapi.h:434
static ATTR_RAMFUNC hpm_stat_t rom_xpi_nor_erase(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config, uint32_t start, uint32_t length)
Erase specified FLASH region.
Definition: hpm_romapi.h:398
static hpm_stat_t rom_enter_bootloader(void *ctx)
Eneter specified Boot mode.
Definition: hpm_romapi.h:343
static ATTR_RAMFUNC void rom_xpi_nor_remap_disable(XPI_Type *base)
Disable XPI Remapping logic.
Definition: hpm_romapi.h:647
static hpm_stat_t rom_sdp_aes_set_key(sdp_aes_ctx_t *aes_ctx, const uint8_t *key, sdp_aes_key_bits_t key_bits, uint32_t key_idx)
Set AES key to SDP.
Definition: hpm_romapi.h:828
static void rom_sdp_deinit(void)
De-initialize SDP IP.
Definition: hpm_romapi.h:815
static hpm_stat_t rom_xpi_ram_get_config(XPI_Type *base, xpi_ram_config_t *ram_cfg, xpi_ram_config_option_t *cfg_option)
Get XPI RAM configuration based on cfg_option.
Definition: hpm_romapi.h:780
static hpm_stat_t rom_xpi_ram_init(XPI_Type *base, xpi_ram_config_t *ram_cfg)
Initialize XPI RAM.
Definition: hpm_romapi.h:792
static hpm_stat_t rom_xpi_nor_get_status(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config, uint32_t addr, uint16_t *out_status)
Return the status register value on XPI NOR FLASH.
Definition: hpm_romapi.h:606
static ATTR_RAMFUNC hpm_stat_t rom_xpi_nor_erase_block_nonblocking(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config, uint32_t start)
Erase specified FLASH blcok in non-blocking way.
Definition: hpm_romapi.h:468
static ATTR_RAMFUNC void rom_xpi_nor_exip_disable(XPI_Type *base)
Disable global EXiP logic.
Definition: hpm_romapi.h:752
static hpm_stat_t rom_sm4_crypt_ecb(sm4_context_t *ctx, uint32_t mode, uint32_t length, const uint8_t *input, uint8_t *output)
SM4 ECB crypto operation(Encrypt or Decrypt)
Definition: hpm_romapi.h:1009
static ATTR_RAMFUNC hpm_stat_t rom_xpi_nor_program(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config, const uint32_t *src, uint32_t dst_addr, uint32_t length)
Program data to specified FLASH address in blocking way.
Definition: hpm_romapi.h:519
static ATTR_RAMFUNC bool rom_xpi_nor_is_remap_enabled(XPI_Type *base)
Check whether XPI Remapping is enabled.
Definition: hpm_romapi.h:667
static hpm_stat_t rom_sdp_hash_finish(sdp_hash_ctx_t *hash_ctx, uint8_t *digest)
HASH finialize.
Definition: hpm_romapi.h:894
static hpm_stat_t rom_sdp_hash_update(sdp_hash_ctx_t *hash_ctx, const uint8_t *data, uint32_t length)
HASH Update.
Definition: hpm_romapi.h:883
static hpm_stat_t rom_sdp_aes_crypt_ecb(sdp_aes_ctx_t *aes_ctx, sdp_aes_op_t op, uint32_t len, const uint8_t *in, uint8_t *out)
SDP AES ECB crypto operation(Encrypt or Decrypt)
Definition: hpm_romapi.h:843
static hpm_stat_t rom_xpi_nor_get_property(XPI_Type *base, xpi_nor_config_t *nor_cfg, uint32_t property_id, uint32_t *value)
Get XPI NOR properties.
Definition: hpm_romapi.h:590
static ATTR_RAMFUNC hpm_stat_t rom_xpi_nor_get_config(XPI_Type *base, xpi_nor_config_t *nor_cfg, xpi_nor_config_option_t *cfg_option)
Get XPI NOR configuration via cfg_option.
Definition: hpm_romapi.h:364
static hpm_stat_t rom_sdp_hash_init(sdp_hash_ctx_t *hash_ctx, sdp_hash_alg_t alg)
HASH initialization.
Definition: hpm_romapi.h:871
static hpm_stat_t rom_sm4_crypt_cbc(sm4_context_t *ctx, uint32_t mode, uint32_t length, const uint8_t iv[16], const uint8_t *input, uint8_t *output)
SM4 CBC crypto operation(Encrypt or Decrypt)
Definition: hpm_romapi.h:1025
static ATTR_RAMFUNC hpm_stat_t rom_xpi_nor_erase_sector(XPI_Type *base, xpi_xfer_channel_t channel, const xpi_nor_config_t *nor_config, uint32_t start)
Erase specified FLASH sector in blocking way.
Definition: hpm_romapi.h:416
static void init(hpm_panel_t *panel)
Definition: cc10128007.c:86
uint32_t hpm_stat_t
Definition: hpm_common.h:123
otp_region_t
OTP region definitions.
Definition: hpm_otp_drv.h:24
otp_lock_option_t
OTP lock options.
Definition: hpm_otp_drv.h:34
#define HPM_XPI0
Definition: hpm_romapi.h:28
#define ROM_API_TABLE_ROOT
Definition: hpm_romapi.h:324
#define HPM_XPI1
Definition: hpm_romapi.h:32
sdp_crypto_op_t
Crypto operation option.
Definition: hpm_sdp_drv.h:44
sdp_crypto_key_bits_t
SDP AES key bit options.
Definition: hpm_sdp_drv.h:29
sdp_hash_alg_t
SDP HASH algorithm definitions.
Definition: hpm_sdp_drv.h:102
xpi_xfer_channel_t
XPI Transfer Channel type definitions.
Definition: hpm_romapi_xpi_def.h:53
uint32_t XPI_Type
XPI_Type definitions for.
Definition: hpm_romapi_xpi_def.h:22
xpi_channel_t
XPI Channel definitions.
Definition: hpm_romapi_xpi_def.h:64
static hpm_stat_t read(void *ops, hpm_serial_nor_transfer_seq_t *cmd_seq)
Definition: hpm_serial_nor_host_spi.c:309
#define fencei()
execute fence.i
Definition: riscv_core.h:88
Bootloader API table.
Definition: hpm_romapi.h:243
Definition: hpm_romapi.h:52
OTP driver interface.
Definition: hpm_romapi.h:82
SDP AES context structure.
Definition: hpm_sdp_drv.h:159
SDP DMA context.
Definition: hpm_sdp_drv.h:179
SDP API interface.
Definition: hpm_romapi.h:243
SDP HASH context.
Definition: hpm_sdp_drv.h:186
Definition: hpm_romapi.h:301
Definition: hpm_romapi.h:72
Definition: hpm_romapi.h:312
Definition: hpm_romapi.h:80
Definition: hpm_romapi_xpi_soc_def.h:28
XPI configuration structure.
Definition: hpm_romapi_xpi_def.h:160
XPI Device Configuration structure.
Definition: hpm_romapi_xpi_def.h:173
XPI driver interface.
Definition: hpm_romapi.h:110
XPI NOR configuration option The ROM SW can detect the FLASH configuration based on the following str...
Definition: hpm_romapi_xpi_nor_def.h:136
XPI NOR configuration structure.
Definition: hpm_romapi_xpi_nor_def.h:261
XPI NOR driver interface.
Definition: hpm_romapi.h:145
XPI RAM configuration option The ROM SW can detect the FLASH configuration based on the following str...
Definition: hpm_romapi_xpi_ram_def.h:39
XPI RAM configuration structure.
Definition: hpm_romapi_xpi_ram_def.h:152
XPI RAM driver interface.
Definition: hpm_romapi.h:215
XPI Xfer context.
Definition: hpm_romapi_xpi_def.h:93
Enter Bootloader API argument.
Definition: hpm_romapi.h:41