hwkm_serialize.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  4. */
  5. #ifndef __HWKM_SERIALIZE_H_
  6. #define __HWKM_SERIALIZE_H_
  7. #include <linux/hwkm.h>
  8. /* Command lengths (words) */
  9. #define NIST_KEYGEN_CMD_WORDS 4
  10. #define SYSTEM_KDF_CMD_MIN_WORDS 4
  11. #define SYSTEM_KDF_CMD_MAX_WORDS 29
  12. #define KEYSLOT_CLEAR_CMD_WORDS 2
  13. #define WRAP_EXPORT_CMD_WORDS 5
  14. #define SET_TPKEY_CMD_WORDS 2
  15. #define QFPROM_RDWR_CMD_WORDS 2
  16. /* Response lengths (words) */
  17. #define NIST_KEYGEN_RSP_WORDS 2
  18. #define SYSTEM_KDF_RSP_WORDS 2
  19. #define KEYSLOT_CLEAR_RSP_WORDS 2
  20. #define UNWRAP_IMPORT_RSP_WORDS 2
  21. #define WRAP_EXPORT_RSP_WORDS 19
  22. #define SET_TPKEY_RSP_WORDS 2
  23. #define QFPROM_RDWR_RSP_WORDS 2
  24. /* Field lengths (words) */
  25. #define OPERATION_INFO_WORDS 1
  26. #define KEY_POLICY_WORDS 2
  27. #define BSVE_WORDS 3
  28. #define MAX_SWC_WORDS 16
  29. #define KEY_BLOB_WORDS 17
  30. #if IS_ENABLED(CONFIG_QTI_HW_KEY_MANAGER)
  31. #define UNWRAP_IMPORT_CMD_WORDS 25 /* Command lengths (words) */
  32. #define KEYSLOT_RDWR_CMD_WORDS 20 /* Command lengths (words) */
  33. #define KEYSLOT_RDWR_RSP_WORDS 21 /* Response lengths (words) */
  34. #define RESPONSE_KEY_WORDS 16 /* Field lengths (words) */
  35. #endif
  36. #if IS_ENABLED(CONFIG_QTI_HW_KEY_MANAGER_V1)
  37. #define UNWRAP_IMPORT_CMD_WORDS 19 /* Command lengths (words) */
  38. #define KEYSLOT_RDWR_CMD_WORDS 12 /* Command lengths (words) */
  39. #define KEYSLOT_RDWR_RSP_WORDS 12 /* Response lengths (words) */
  40. #define RESPONSE_KEY_WORDS 8 /* Field lengths (words) */
  41. #endif
  42. /* Field lengths (bytes) */
  43. #define UNWRAP_CMD_LENGTH (UNWRAP_IMPORT_CMD_WORDS * sizeof(uint32_t))
  44. #define UNWRAP_RSP_LENGTH (UNWRAP_IMPORT_RSP_WORDS * sizeof(uint32_t))
  45. #define OPERATION_INFO_LENGTH (OPERATION_INFO_WORDS * sizeof(uint32_t))
  46. #define KEY_POLICY_LENGTH (KEY_POLICY_WORDS * sizeof(uint32_t))
  47. #define MAX_BSVE_LENGTH (BSVE_WORDS * sizeof(uint32_t))
  48. #define MAX_SWC_LENGTH (MAX_SWC_WORDS * sizeof(uint32_t))
  49. #define RESPONSE_KEY_LENGTH (RESPONSE_KEY_WORDS * sizeof(uint32_t))
  50. #define KEY_BLOB_LENGTH (KEY_BLOB_WORDS * sizeof(uint32_t))
  51. /* Command indices */
  52. #define COMMAND_KEY_POLICY_IDX 1
  53. #define COMMAND_KEY_VALUE_IDX 3
  54. #define COMMAND_WRAPPED_KEY_IDX 1
  55. #define COMMAND_KEY_WRAP_BSVE_IDX 1
  56. /* Response indices */
  57. #define RESPONSE_ERR_IDX 1
  58. #define RESPONSE_KEY_POLICY_IDX 2
  59. #define RESPONSE_KEY_VALUE_IDX 4
  60. #define RESPONSE_WRAPPED_KEY_IDX 2
  61. struct hwkm_serialized_policy {
  62. unsigned dbg_qfprom_key_rd_iv_sel:1; // [0]
  63. unsigned reserved0:1; // [1]
  64. unsigned wrap_with_tpkey:1; // [2]
  65. unsigned hw_destination:4; // [3:6]
  66. unsigned reserved1:1; // [7]
  67. unsigned propagate_sec_level_to_child_keys:1; // [8]
  68. unsigned security_level:2; // [9:10]
  69. unsigned swap_export_allowed:1; // [11]
  70. unsigned wrap_export_allowed:1; // [12]
  71. unsigned key_type:3; // [13:15]
  72. unsigned kdf_depth:8; // [16:23]
  73. unsigned decrypt_allowed:1; // [24]
  74. unsigned encrypt_allowed:1; // [25]
  75. unsigned alg_allowed:6; // [26:31]
  76. unsigned key_management_by_tz_secure_allowed:1; // [32]
  77. unsigned key_management_by_nonsecure_allowed:1; // [33]
  78. unsigned key_management_by_modem_allowed:1; // [34]
  79. unsigned key_management_by_spu_allowed:1; // [35]
  80. unsigned reserved2:28; // [36:63]
  81. } __packed;
  82. struct hwkm_kdf_bsve {
  83. unsigned mks:8; // [0:7]
  84. unsigned key_policy_version_en:1; // [8]
  85. unsigned apps_secure_en:1; // [9]
  86. unsigned msa_secure_en:1; // [10]
  87. unsigned lcm_fuse_row_en:1; // [11]
  88. unsigned boot_stage_otp_en:1; // [12]
  89. unsigned swc_en:1; // [13]
  90. u64 fuse_region_sha_digest_en:64; // [14:78]
  91. unsigned child_key_policy_en:1; // [79]
  92. unsigned mks_en:1; // [80]
  93. unsigned reserved:16; // [81:95]
  94. } __packed;
  95. struct hwkm_wrapping_bsve {
  96. unsigned key_policy_version_en:1; // [0]
  97. unsigned apps_secure_en:1; // [1]
  98. unsigned msa_secure_en:1; // [2]
  99. unsigned lcm_fuse_row_en:1; // [3]
  100. unsigned boot_stage_otp_en:1; // [4]
  101. unsigned swc_en:1; // [5]
  102. u64 fuse_region_sha_digest_en:64; // [6:69]
  103. unsigned child_key_policy_en:1; // [70]
  104. unsigned mks_en:1; // [71]
  105. unsigned reserved:24; // [72:95]
  106. } __packed;
  107. struct hwkm_operation_info {
  108. unsigned op:4; // [0-3]
  109. unsigned irq_en:1; // [4]
  110. unsigned slot1_desc:8; // [5,12]
  111. unsigned slot2_desc:8; // [13,20]
  112. unsigned op_flag:1; // [21]
  113. unsigned context_len:5; // [22-26]
  114. unsigned len:5; // [27-31]
  115. } __packed;
  116. #endif /* __HWKM_SERIALIZE_H_ */