| /* SPDX-License-Identifier: GPL-2.0 */ | |
| #ifndef __QCOM_SOCINFO_H__ | |
| #define __QCOM_SOCINFO_H__ | |
| #include <linux/types.h> | |
| /* | |
| * SMEM item id, used to acquire handles to respective | |
| * SMEM region. | |
| */ | |
| #define SMEM_HW_SW_BUILD_ID 137 | |
| #define SMEM_SOCINFO_BUILD_ID_LENGTH 32 | |
| #define SMEM_SOCINFO_CHIP_ID_LENGTH 32 | |
| /* | |
| * SoC version type with major number in the upper 16 bits and minor | |
| * number in the lower 16 bits. | |
| */ | |
| #define SOCINFO_MAJOR(ver) (((ver) >> 16) & 0xffff) | |
| #define SOCINFO_MINOR(ver) ((ver) & 0xffff) | |
| #define SOCINFO_VERSION(maj, min) ((((maj) & 0xffff) << 16)|((min) & 0xffff)) | |
| /* Socinfo SMEM item structure */ | |
| struct socinfo { | |
| __le32 fmt; | |
| __le32 id; | |
| __le32 ver; | |
| char build_id[SMEM_SOCINFO_BUILD_ID_LENGTH]; | |
| /* Version 2 */ | |
| __le32 raw_id; | |
| __le32 raw_ver; | |
| /* Version 3 */ | |
| __le32 hw_plat; | |
| /* Version 4 */ | |
| __le32 plat_ver; | |
| /* Version 5 */ | |
| __le32 accessory_chip; | |
| /* Version 6 */ | |
| __le32 hw_plat_subtype; | |
| /* Version 7 */ | |
| __le32 pmic_model; | |
| __le32 pmic_die_rev; | |
| /* Version 8 */ | |
| __le32 pmic_model_1; | |
| __le32 pmic_die_rev_1; | |
| __le32 pmic_model_2; | |
| __le32 pmic_die_rev_2; | |
| /* Version 9 */ | |
| __le32 foundry_id; | |
| /* Version 10 */ | |
| __le32 serial_num; | |
| /* Version 11 */ | |
| __le32 num_pmics; | |
| __le32 pmic_array_offset; | |
| /* Version 12 */ | |
| __le32 chip_family; | |
| __le32 raw_device_family; | |
| __le32 raw_device_num; | |
| /* Version 13 */ | |
| __le32 nproduct_id; | |
| char chip_id[SMEM_SOCINFO_CHIP_ID_LENGTH]; | |
| /* Version 14 */ | |
| __le32 num_clusters; | |
| __le32 ncluster_array_offset; | |
| __le32 num_subset_parts; | |
| __le32 nsubset_parts_array_offset; | |
| /* Version 15 */ | |
| __le32 nmodem_supported; | |
| /* Version 16 */ | |
| __le32 feature_code; | |
| __le32 pcode; | |
| __le32 npartnamemap_offset; | |
| __le32 nnum_partname_mapping; | |
| /* Version 17 */ | |
| __le32 oem_variant; | |
| /* Version 18 */ | |
| __le32 num_kvps; | |
| __le32 kvps_offset; | |
| /* Version 19 */ | |
| __le32 num_func_clusters; | |
| __le32 boot_cluster; | |
| __le32 boot_core; | |
| }; | |
| /* Internal feature codes */ | |
| enum qcom_socinfo_feature_code { | |
| /* External feature codes */ | |
| SOCINFO_FC_UNKNOWN = 0x0, | |
| SOCINFO_FC_AA, | |
| SOCINFO_FC_AB, | |
| SOCINFO_FC_AC, | |
| SOCINFO_FC_AD, | |
| SOCINFO_FC_AE, | |
| SOCINFO_FC_AF, | |
| SOCINFO_FC_AG, | |
| SOCINFO_FC_AH, | |
| }; | |
| /* Internal feature codes */ | |
| /* Valid values: 0 <= n <= 0xf */ | |
| #define SOCINFO_FC_Yn(n) (0xf1 + (n)) | |
| #define SOCINFO_FC_INT_MAX SOCINFO_FC_Yn(0xf) | |
| /* Product codes */ | |
| #define SOCINFO_PC_UNKNOWN 0 | |
| #define SOCINFO_PCn(n) ((n) + 1) | |
| #define SOCINFO_PC_RESERVE (BIT(31) - 1) | |
| #endif |