socinfo.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2019-2021, The Linux Foundation. All rights reserved.
  4. * Copyright (c) 2022-2024, Qualcomm Innovation Center, Inc. All rights reserved.
  5. */
  6. #ifndef __SOC_QCOM_SOCINFO_H__
  7. #define __SOC_QCOM_SOCINFO_H__
  8. #include <linux/types.h>
  9. enum feature_code {
  10. /* External feature code */
  11. SOCINFO_FC_UNKNOWN = 0x0,
  12. SOCINFO_FC_AA,
  13. SOCINFO_FC_AB,
  14. SOCINFO_FC_AC,
  15. SOCINFO_FC_AD,
  16. SOCINFO_FC_AE,
  17. SOCINFO_FC_AF,
  18. SOCINFO_FC_AG,
  19. SOCINFO_FC_AH,
  20. SOCINFO_FC_EXT_RESERVE,
  21. /* SubPart feature code */
  22. SOCINFO_FC_W0 = 0xd1,
  23. SOCINFO_FC_W1,
  24. SOCINFO_FC_W2,
  25. SOCINFO_FC_W3,
  26. SOCINFO_FC_W4,
  27. SOCINFO_FC_W5,
  28. SOCINFO_FC_W6,
  29. SOCINFO_FC_W7,
  30. SOCINFO_FC_W8,
  31. SOCINFO_FC_W9,
  32. SOCINFO_FC_WA,
  33. SOCINFO_FC_WB,
  34. SOCINFO_FC_WC,
  35. SOCINFO_FC_WD,
  36. SOCINFO_FC_WE,
  37. SOCINFO_FC_WF,
  38. SOCINFO_FC_SUBPART_RESERVE,
  39. /* Internal feature code */
  40. SOCINFO_FC_Y0 = 0xf1,
  41. SOCINFO_FC_Y1,
  42. SOCINFO_FC_Y2,
  43. SOCINFO_FC_Y3,
  44. SOCINFO_FC_Y4,
  45. SOCINFO_FC_Y5,
  46. SOCINFO_FC_Y6,
  47. SOCINFO_FC_Y7,
  48. SOCINFO_FC_Y8,
  49. SOCINFO_FC_Y9,
  50. SOCINFO_FC_YA,
  51. SOCINFO_FC_YB,
  52. SOCINFO_FC_YC,
  53. SOCINFO_FC_YD,
  54. SOCINFO_FC_YE,
  55. SOCINFO_FC_YF,
  56. SOCINFO_FC_INT_RESERVE
  57. };
  58. enum pcode {
  59. SOCINFO_PCODE_UNKNOWN = 0,
  60. SOCINFO_PCODE_0,
  61. SOCINFO_PCODE_1,
  62. SOCINFO_PCODE_2,
  63. SOCINFO_PCODE_3,
  64. SOCINFO_PCODE_4,
  65. SOCINFO_PCODE_5,
  66. SOCINFO_PCODE_6,
  67. SOCINFO_PCODE_7,
  68. SOCINFO_PCODE_8,
  69. SOCINFO_PCODE_RESERVE = 0x7fffffff
  70. };
  71. enum socinfo_parttype {
  72. SOCINFO_PART_GPU = 1,
  73. SOCINFO_PART_VIDEO,
  74. SOCINFO_PART_CAMERA,
  75. SOCINFO_PART_DISPLAY,
  76. SOCINFO_PART_AUDIO,
  77. SOCINFO_PART_MODEM,
  78. SOCINFO_PART_WLAN,
  79. SOCINFO_PART_COMP,
  80. SOCINFO_PART_SENSORS,
  81. SOCINFO_PART_NPU,
  82. SOCINFO_PART_SPSS,
  83. SOCINFO_PART_NAV,
  84. SOCINFO_PART_COMPUTE_1,
  85. SOCINFO_PART_DISPLAY_1,
  86. SOCINFO_PART_NSP,
  87. SOCINFO_PART_EVA,
  88. SOCINFO_PART_MAX_PARTTYPE
  89. };
  90. enum subset_part_type {
  91. PART_UNKNOWN,
  92. PART_GPU,
  93. PART_VIDEO,
  94. PART_CAMERA,
  95. PART_DISPLAY,
  96. PART_AUDIO,
  97. PART_MODEM,
  98. PART_WLAN,
  99. PART_COMP,
  100. PART_SENSORS,
  101. PART_NPU,
  102. PART_SPSS,
  103. PART_NAV,
  104. PART_COMP1,
  105. PART_DISPLAY1,
  106. PART_NSP,
  107. PART_EVA,
  108. NUM_PARTS_MAX,
  109. };
  110. enum subset_cluster_type {
  111. CLUSTER_CPUSS,
  112. NUM_CLUSTERS_MAX,
  113. };
  114. #if IS_ENABLED(CONFIG_QCOM_SOCINFO)
  115. uint32_t socinfo_get_id(void);
  116. uint32_t socinfo_get_serial_number(void);
  117. const char *socinfo_get_id_string(void);
  118. int socinfo_get_feature_code(void);
  119. int socinfo_get_pcode(void);
  120. char *socinfo_get_partinfo_part_name(unsigned int part_id);
  121. uint32_t socinfo_get_partinfo_chip_id(unsigned int part_id);
  122. uint32_t socinfo_get_partinfo_vulkan_id(unsigned int part_id);
  123. uint32_t socinfo_get_cluster_info(enum subset_cluster_type cluster);
  124. bool socinfo_get_part_info(enum subset_part_type part);
  125. int socinfo_get_part_count(enum subset_part_type part);
  126. int socinfo_get_subpart_info(enum subset_part_type part,
  127. u32 *part_info,
  128. u32 num_parts);
  129. #else
  130. static inline uint32_t socinfo_get_id(void)
  131. {
  132. return 0;
  133. }
  134. static inline uint32_t socinfo_get_serial_number(void)
  135. {
  136. return 0;
  137. }
  138. static inline const char *socinfo_get_id_string(void)
  139. {
  140. return "N/A";
  141. }
  142. int socinfo_get_feature_code(void)
  143. {
  144. return -EINVAL;
  145. }
  146. int socinfo_get_pcode(void)
  147. {
  148. return -EINVAL;
  149. }
  150. const char *socinfo_get_partinfo_part_name(unsigned int part_id)
  151. {
  152. return NULL;
  153. }
  154. uint32_t socinfo_get_partinfo_chip_id(unsigned int part_id)
  155. {
  156. return 0;
  157. }
  158. uint32_t socinfo_get_partinfo_vulkan_id(unsigned int part_id)
  159. {
  160. return 0;
  161. }
  162. uint32_t socinfo_get_cluster_info(enum subset_cluster_type cluster)
  163. {
  164. return 0;
  165. }
  166. bool socinfo_get_part_info(enum subset_part_type part)
  167. {
  168. return false;
  169. }
  170. int socinfo_get_part_count(enum subset_part_type part)
  171. {
  172. return -EINVAL;
  173. }
  174. int socinfo_get_subpart_info(enum subset_part_type part,
  175. u32 *part_info,
  176. u32 num_parts)
  177. {
  178. return -EINVAL;
  179. }
  180. #endif /* CONFIG_QCOM_SOCINFO */
  181. #endif /* __SOC_QCOM_SOCINFO_H__ */