soc: qcom: llcc-qcom: Extract major hardware version
[linux-2.6-microblaze.git] / drivers / soc / qcom / llcc-qcom.c
index 16b4216..a559617 100644 (file)
@@ -4,6 +4,7 @@
  *
  */
 
+#include <linux/bitfield.h>
 #include <linux/bitmap.h>
 #include <linux/bitops.h>
 #include <linux/device.h>
@@ -35,6 +36,9 @@
 
 #define CACHE_LINE_SIZE_SHIFT         6
 
+#define LLCC_COMMON_HW_INFO           0x00030000
+#define LLCC_MAJOR_VERSION_MASK       GENMASK(31, 24)
+
 #define LLCC_COMMON_STATUS0           0x0003000c
 #define LLCC_LB_CNT_MASK              GENMASK(31, 28)
 #define LLCC_LB_CNT_SHIFT             28
@@ -476,6 +480,7 @@ static int qcom_llcc_probe(struct platform_device *pdev)
        const struct qcom_llcc_config *cfg;
        const struct llcc_slice_config *llcc_cfg;
        u32 sz;
+       u32 version;
 
        drv_data = devm_kzalloc(dev, sizeof(*drv_data), GFP_KERNEL);
        if (!drv_data) {
@@ -496,6 +501,13 @@ static int qcom_llcc_probe(struct platform_device *pdev)
                goto err;
        }
 
+       /* Extract major version of the IP */
+       ret = regmap_read(drv_data->bcast_regmap, LLCC_COMMON_HW_INFO, &version);
+       if (ret)
+               goto err;
+
+       drv_data->major_version = FIELD_GET(LLCC_MAJOR_VERSION_MASK, version);
+
        ret = regmap_read(drv_data->regmap, LLCC_COMMON_STATUS0,
                                                &num_banks);
        if (ret)