#include <linux/slab.h>
 #include <linux/soc/qcom/smem.h>
 
-#define MSM_ID_SMEM    137
-
 #include <dt-bindings/arm/qcom,ids.h>
 
-enum _msm8996_version {
-       MSM8996_V3,
-       MSM8996_SG,
-       NUM_OF_MSM8996_VERSIONS,
-};
-
 struct qcom_cpufreq_drv;
 
 struct qcom_cpufreq_match_data {
        dev_dbg(cpu_dev, "PVS version: %d\n", *pvs_ver);
 }
 
-static enum _msm8996_version qcom_cpufreq_get_msm_id(void)
-{
-       size_t len;
-       u32 *msm_id;
-       enum _msm8996_version version;
-
-       msm_id = qcom_smem_get(QCOM_SMEM_HOST_ANY, MSM_ID_SMEM, &len);
-       if (IS_ERR(msm_id))
-               return NUM_OF_MSM8996_VERSIONS;
-
-       /* The first 4 bytes are format, next to them is the actual msm-id */
-       msm_id++;
-
-       switch ((enum _msm_id)*msm_id) {
-       case QCOM_ID_MSM8996:
-       case QCOM_ID_APQ8096:
-               version = MSM8996_V3;
-               break;
-       case QCOM_ID_MSM8996SG:
-       case QCOM_ID_APQ8096SG:
-               version = MSM8996_SG;
-               break;
-       default:
-               version = NUM_OF_MSM8996_VERSIONS;
-       }
-
-       return version;
-}
-
 static int qcom_cpufreq_kryo_name_version(struct device *cpu_dev,
                                          struct nvmem_cell *speedbin_nvmem,
                                          char **pvs_name,
                                          struct qcom_cpufreq_drv *drv)
 {
        size_t len;
+       u32 msm_id;
        u8 *speedbin;
-       enum _msm8996_version msm8996_version;
+       int ret;
        *pvs_name = NULL;
 
-       msm8996_version = qcom_cpufreq_get_msm_id();
-       if (NUM_OF_MSM8996_VERSIONS == msm8996_version) {
-               dev_err(cpu_dev, "Not Snapdragon 820/821!");
-               return -ENODEV;
-       }
+       ret = qcom_smem_get_soc_id(&msm_id);
+       if (ret)
+               return ret;
 
        speedbin = nvmem_cell_read(speedbin_nvmem, &len);
        if (IS_ERR(speedbin))
                return PTR_ERR(speedbin);
 
-       switch (msm8996_version) {
-       case MSM8996_V3:
+       switch (msm_id) {
+       case QCOM_ID_MSM8996:
+       case QCOM_ID_APQ8096:
                drv->versions = 1 << (unsigned int)(*speedbin);
                break;
-       case MSM8996_SG:
+       case QCOM_ID_MSM8996SG:
+       case QCOM_ID_APQ8096SG:
                drv->versions = 1 << ((unsigned int)(*speedbin) + 4);
                break;
        default: