hpm_bkey_regs.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /*
  2. * Copyright (c) 2021-2023 HPMicro
  3. *
  4. * SPDX-License-Identifier: BSD-3-Clause
  5. *
  6. */
  7. #ifndef HPM_BKEY_H
  8. #define HPM_BKEY_H
  9. typedef struct {
  10. struct {
  11. __RW uint32_t DATA[8]; /* 0x0 - 0x1C: Key data */
  12. } KEY[2];
  13. __RW uint32_t ECC[2]; /* 0x40 - 0x44: Key ECC and access control */
  14. __RW uint32_t SELECT; /* 0x48: Key selection */
  15. } BKEY_Type;
  16. /* Bitfield definition for register of struct array KEY: 0 */
  17. /*
  18. * DATA (RW)
  19. *
  20. * security key data
  21. */
  22. #define BKEY_KEY_DATA_DATA_MASK (0xFFFFFFFFUL)
  23. #define BKEY_KEY_DATA_DATA_SHIFT (0U)
  24. #define BKEY_KEY_DATA_DATA_SET(x) (((uint32_t)(x) << BKEY_KEY_DATA_DATA_SHIFT) & BKEY_KEY_DATA_DATA_MASK)
  25. #define BKEY_KEY_DATA_DATA_GET(x) (((uint32_t)(x) & BKEY_KEY_DATA_DATA_MASK) >> BKEY_KEY_DATA_DATA_SHIFT)
  26. /* Bitfield definition for register array: ECC */
  27. /*
  28. * WLOCK (RW)
  29. *
  30. * write lock to key0
  31. * 0: write enable
  32. * 1: write ignored
  33. */
  34. #define BKEY_ECC_WLOCK_MASK (0x80000000UL)
  35. #define BKEY_ECC_WLOCK_SHIFT (31U)
  36. #define BKEY_ECC_WLOCK_SET(x) (((uint32_t)(x) << BKEY_ECC_WLOCK_SHIFT) & BKEY_ECC_WLOCK_MASK)
  37. #define BKEY_ECC_WLOCK_GET(x) (((uint32_t)(x) & BKEY_ECC_WLOCK_MASK) >> BKEY_ECC_WLOCK_SHIFT)
  38. /*
  39. * RLOCK (RW)
  40. *
  41. * read lock to key0
  42. * 0: key read enable
  43. * 1: key always read as 0
  44. */
  45. #define BKEY_ECC_RLOCK_MASK (0x40000000UL)
  46. #define BKEY_ECC_RLOCK_SHIFT (30U)
  47. #define BKEY_ECC_RLOCK_SET(x) (((uint32_t)(x) << BKEY_ECC_RLOCK_SHIFT) & BKEY_ECC_RLOCK_MASK)
  48. #define BKEY_ECC_RLOCK_GET(x) (((uint32_t)(x) & BKEY_ECC_RLOCK_MASK) >> BKEY_ECC_RLOCK_SHIFT)
  49. /*
  50. * ECC (RW)
  51. *
  52. * Parity check bits for key0
  53. */
  54. #define BKEY_ECC_ECC_MASK (0xFFFFU)
  55. #define BKEY_ECC_ECC_SHIFT (0U)
  56. #define BKEY_ECC_ECC_SET(x) (((uint32_t)(x) << BKEY_ECC_ECC_SHIFT) & BKEY_ECC_ECC_MASK)
  57. #define BKEY_ECC_ECC_GET(x) (((uint32_t)(x) & BKEY_ECC_ECC_MASK) >> BKEY_ECC_ECC_SHIFT)
  58. /* Bitfield definition for register: SELECT */
  59. /*
  60. * SELECT (RW)
  61. *
  62. * select key, key0 treated as secure key, in non-scure mode, only key1 can be selected
  63. * 0: select key0 in secure mode, key1 in non-secure mode
  64. * 1: select key1 in secure or nonsecure mode
  65. */
  66. #define BKEY_SELECT_SELECT_MASK (0x1U)
  67. #define BKEY_SELECT_SELECT_SHIFT (0U)
  68. #define BKEY_SELECT_SELECT_SET(x) (((uint32_t)(x) << BKEY_SELECT_SELECT_SHIFT) & BKEY_SELECT_SELECT_MASK)
  69. #define BKEY_SELECT_SELECT_GET(x) (((uint32_t)(x) & BKEY_SELECT_SELECT_MASK) >> BKEY_SELECT_SELECT_SHIFT)
  70. /* DATA register group index macro definition */
  71. #define BKEY_KEY_DATA_0 (0UL)
  72. #define BKEY_KEY_DATA_1 (1UL)
  73. #define BKEY_KEY_DATA_2 (2UL)
  74. #define BKEY_KEY_DATA_3 (3UL)
  75. #define BKEY_KEY_DATA_4 (4UL)
  76. #define BKEY_KEY_DATA_5 (5UL)
  77. #define BKEY_KEY_DATA_6 (6UL)
  78. #define BKEY_KEY_DATA_7 (7UL)
  79. /* KEY register group index macro definition */
  80. #define BKEY_KEY_0 (0UL)
  81. #define BKEY_KEY_1 (1UL)
  82. /* ECC register group index macro definition */
  83. #define BKEY_ECC_KEY0 (0UL)
  84. #define BKEY_ECC_KEY1 (1UL)
  85. #endif /* HPM_BKEY_H */