ecc_mult_struct.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. /**
  2. * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #pragma once
  7. #include <stdint.h>
  8. #ifdef __cplusplus
  9. extern "C" {
  10. #endif
  11. /** Group: Memory data */
  12. /** Group: Interrupt registers */
  13. /** Type of int_raw register
  14. * ECC interrupt raw register, valid in level.
  15. */
  16. typedef union {
  17. struct {
  18. /** calc_done_int_raw : RO/WTC/SS; bitpos: [0]; default: 0;
  19. * The raw interrupt status bit for the ecc_calc_done_int interrupt
  20. */
  21. uint32_t calc_done_int_raw:1;
  22. uint32_t reserved_1:31;
  23. };
  24. uint32_t val;
  25. } ecc_mult_int_raw_reg_t;
  26. /** Type of int_st register
  27. * ECC interrupt status register.
  28. */
  29. typedef union {
  30. struct {
  31. /** calc_done_int_st : RO; bitpos: [0]; default: 0;
  32. * The masked interrupt status bit for the ecc_calc_done_int interrupt
  33. */
  34. uint32_t calc_done_int_st:1;
  35. uint32_t reserved_1:31;
  36. };
  37. uint32_t val;
  38. } ecc_mult_int_st_reg_t;
  39. /** Type of int_ena register
  40. * ECC interrupt enable register.
  41. */
  42. typedef union {
  43. struct {
  44. /** calc_done_int_ena : R/W; bitpos: [0]; default: 0;
  45. * The interrupt enable bit for the ecc_calc_done_int interrupt
  46. */
  47. uint32_t calc_done_int_ena:1;
  48. uint32_t reserved_1:31;
  49. };
  50. uint32_t val;
  51. } ecc_mult_int_ena_reg_t;
  52. /** Type of int_clr register
  53. * ECC interrupt clear register.
  54. */
  55. typedef union {
  56. struct {
  57. /** calc_done_int_clr : WT; bitpos: [0]; default: 0;
  58. * Set this bit to clear the ecc_calc_done_int interrupt
  59. */
  60. uint32_t calc_done_int_clr:1;
  61. uint32_t reserved_1:31;
  62. };
  63. uint32_t val;
  64. } ecc_mult_int_clr_reg_t;
  65. /** Group: RX Control and configuration registers */
  66. /** Type of conf register
  67. * ECC configure register
  68. */
  69. typedef union {
  70. struct {
  71. /** start : R/W/SC; bitpos: [0]; default: 0;
  72. * Write 1 to start caculation of ECC Accelerator. This bit will be self-cleared after
  73. * the caculatrion is done.
  74. */
  75. uint32_t start:1;
  76. /** reset : WT; bitpos: [1]; default: 0;
  77. * Write 1 to reset ECC Accelerator.
  78. */
  79. uint32_t reset:1;
  80. /** key_length : R/W; bitpos: [2]; default: 0;
  81. * The key length mode bit of ECC Accelerator. 0: P-192. 1: P-256.
  82. */
  83. uint32_t key_length:1;
  84. /** security_mode : R/W; bitpos: [3]; default: 0;
  85. * Reserved
  86. */
  87. uint32_t security_mode:1;
  88. /** clk_en : R/W; bitpos: [4]; default: 0;
  89. * Write 1 to force on register clock gate.
  90. */
  91. uint32_t clk_en:1;
  92. /** work_mode : R/W; bitpos: [7:5]; default: 0;
  93. * The work mode bits of ECC Accelerator. 0: Point Mult Mode. 1: Division mode. 2:
  94. * Point verification mode. 3: Point Verif+mult mode. 4: Jacobian Point Mult Mode. 5:
  95. * Reserved. 6: Jacobian Point Verification Mode. 7: Point Verif + Jacobian Mult Mode.
  96. */
  97. uint32_t work_mode:3;
  98. /** verification_result : RO/SS; bitpos: [8]; default: 0;
  99. * The verification result bit of ECC Accelerator, only valid when calculation is done.
  100. */
  101. uint32_t verification_result:1;
  102. uint32_t reserved_9:22;
  103. /** mem_clock_gate_force_on : R/W; bitpos: [31]; default: 1;
  104. * ECC memory clock gate force on register
  105. */
  106. uint32_t mem_clock_gate_force_on:1;
  107. };
  108. uint32_t val;
  109. } ecc_mult_conf_reg_t;
  110. /** Group: Version register */
  111. /** Type of date register
  112. * Version control register
  113. */
  114. typedef union {
  115. struct {
  116. /** date : R/W; bitpos: [27:0]; default: 35656256;
  117. * ECC mult version control register
  118. */
  119. uint32_t date:28;
  120. uint32_t reserved_28:4;
  121. };
  122. uint32_t val;
  123. } ecc_mult_date_reg_t;
  124. typedef struct ecc_mult_dev_t {
  125. uint32_t reserved_000[3];
  126. volatile ecc_mult_int_raw_reg_t int_raw;
  127. volatile ecc_mult_int_st_reg_t int_st;
  128. volatile ecc_mult_int_ena_reg_t int_ena;
  129. volatile ecc_mult_int_clr_reg_t int_clr;
  130. volatile ecc_mult_conf_reg_t conf;
  131. uint32_t reserved_020[55];
  132. volatile ecc_mult_date_reg_t date;
  133. volatile uint32_t k[8];
  134. volatile uint32_t px[8];
  135. volatile uint32_t py[8];
  136. } ecc_mult_dev_t;
  137. extern ecc_mult_dev_t ECC;
  138. #ifndef __cplusplus
  139. _Static_assert(sizeof(ecc_mult_dev_t) == 0x160, "Invalid size of ecc_mult_dev_t structure");
  140. #endif
  141. #ifdef __cplusplus
  142. }
  143. #endif