Loading arch/arm64/boot/dts/qcom/sdm845.dtsi +4 −0 Original line number Diff line number Diff line Loading @@ -2281,6 +2281,10 @@ max-slices = <32>; }; qcom,llcc-perfmon { compatible = "qcom,llcc-perfmon"; }; qcom,llcc-erp { compatible = "qcom,llcc-erp"; interrupt-names = "ecc_irq"; Loading arch/arm64/configs/sdm845-perf_defconfig +1 −0 Original line number Diff line number Diff line Loading @@ -489,6 +489,7 @@ CONFIG_IOMMU_TESTS=y CONFIG_QCOM_RUN_QUEUE_STATS=y CONFIG_QCOM_LLCC=y CONFIG_QCOM_SDM845_LLCC=y CONFIG_QCOM_LLCC_PERFMON=m CONFIG_MSM_SERVICE_LOCATOR=y CONFIG_MSM_SERVICE_NOTIFIER=y CONFIG_MSM_BOOT_STATS=y Loading arch/arm64/configs/sdm845_defconfig +1 −0 Original line number Diff line number Diff line Loading @@ -504,6 +504,7 @@ CONFIG_QCOM_CPUSS_DUMP=y CONFIG_QCOM_RUN_QUEUE_STATS=y CONFIG_QCOM_LLCC=y CONFIG_QCOM_SDM845_LLCC=y CONFIG_QCOM_LLCC_PERFMON=m CONFIG_MSM_SERVICE_LOCATOR=y CONFIG_MSM_SERVICE_NOTIFIER=y CONFIG_MSM_BOOT_STATS=y Loading drivers/soc/qcom/llcc_perfmon.c +33 −0 Original line number Diff line number Diff line Loading @@ -470,12 +470,44 @@ static ssize_t perfmon_start_store(struct device *dev, return count; } static ssize_t perfmon_scid_status_show(struct device *dev, struct device_attribute *attr, char *buf) { struct llcc_perfmon_private *llcc_priv = dev_get_drvdata(dev); uint32_t val; unsigned int i, offset; ssize_t cnt = 0, print; for (i = 0; i < SCID_MAX; i++) { offset = TRP_SCID_n_STATUS(i); llcc_bcast_read(llcc_priv, offset, &val); if (val & TRP_SCID_STATUS_ACTIVE_MASK) print = snprintf(buf, MAX_STRING_SIZE, "SCID %02d %10s", i, "ACTIVE"); else print = snprintf(buf, MAX_STRING_SIZE, "SCID %02d %10s", i, "DEACTIVE"); buf += print; cnt += print; val = (val & TRP_SCID_STATUS_CURRENT_CAP_MASK) >> TRP_SCID_STATUS_CURRENT_CAP_SHIFT; print = snprintf(buf, MAX_STRING_SIZE, ",0x%08x\n", val); buf += print; cnt += print; } return cnt; } static DEVICE_ATTR_RO(perfmon_counter_dump); static DEVICE_ATTR_WO(perfmon_configure); static DEVICE_ATTR_WO(perfmon_remove); static DEVICE_ATTR_WO(perfmon_filter_config); static DEVICE_ATTR_WO(perfmon_filter_remove); static DEVICE_ATTR_WO(perfmon_start); static DEVICE_ATTR_RO(perfmon_scid_status); static struct attribute *llcc_perfmon_attrs[] = { &dev_attr_perfmon_counter_dump.attr, Loading @@ -484,6 +516,7 @@ static struct attribute *llcc_perfmon_attrs[] = { &dev_attr_perfmon_filter_config.attr, &dev_attr_perfmon_filter_remove.attr, &dev_attr_perfmon_start.attr, &dev_attr_perfmon_scid_status.attr, NULL, }; Loading drivers/soc/qcom/llcc_perfmon.h +14 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ /* TRP */ #define TRP_PROF_FILTER_0_CFG1 (0x024004) #define TRP_PROF_EVENT_n_CFG(n) (0x024020 + 4 * n) #define TRP_SCID_n_STATUS(n) (0x000004 + 0x1000 * n) /* DRP */ #define DRP_PROF_EVENT_n_CFG(n) (0x044010 + 4 * n) Loading Loading @@ -180,4 +181,17 @@ #define TRP_PROFTAG_MASK_SHIFT (28) #define TRP_PROFTAG_MASK_MASK GENMASK(TRP_PROFTAG_MASK_SHIFT + 1,\ TRP_PROFTAG_MASK_SHIFT) #define TRP_SCID_STATUS_ACTIVE_SHIFT (0) #define TRP_SCID_STATUS_ACTIVE_MASK GENMASK( \ TRP_SCID_STATUS_ACTIVE_SHIFT \ + 0, \ TRP_SCID_STATUS_ACTIVE_SHIFT) #define TRP_SCID_STATUS_DEACTIVE_SHIFT (1) #define TRP_SCID_STATUS_CURRENT_CAP_SHIFT (16) #define TRP_SCID_STATUS_CURRENT_CAP_MASK GENMASK( \ TRP_SCID_STATUS_CURRENT_CAP_SHIFT \ + 13, \ TRP_SCID_STATUS_CURRENT_CAP_SHIFT) #endif /* _SOC_QCOM_LLCC_PERFMON_H_ */ Loading
arch/arm64/boot/dts/qcom/sdm845.dtsi +4 −0 Original line number Diff line number Diff line Loading @@ -2281,6 +2281,10 @@ max-slices = <32>; }; qcom,llcc-perfmon { compatible = "qcom,llcc-perfmon"; }; qcom,llcc-erp { compatible = "qcom,llcc-erp"; interrupt-names = "ecc_irq"; Loading
arch/arm64/configs/sdm845-perf_defconfig +1 −0 Original line number Diff line number Diff line Loading @@ -489,6 +489,7 @@ CONFIG_IOMMU_TESTS=y CONFIG_QCOM_RUN_QUEUE_STATS=y CONFIG_QCOM_LLCC=y CONFIG_QCOM_SDM845_LLCC=y CONFIG_QCOM_LLCC_PERFMON=m CONFIG_MSM_SERVICE_LOCATOR=y CONFIG_MSM_SERVICE_NOTIFIER=y CONFIG_MSM_BOOT_STATS=y Loading
arch/arm64/configs/sdm845_defconfig +1 −0 Original line number Diff line number Diff line Loading @@ -504,6 +504,7 @@ CONFIG_QCOM_CPUSS_DUMP=y CONFIG_QCOM_RUN_QUEUE_STATS=y CONFIG_QCOM_LLCC=y CONFIG_QCOM_SDM845_LLCC=y CONFIG_QCOM_LLCC_PERFMON=m CONFIG_MSM_SERVICE_LOCATOR=y CONFIG_MSM_SERVICE_NOTIFIER=y CONFIG_MSM_BOOT_STATS=y Loading
drivers/soc/qcom/llcc_perfmon.c +33 −0 Original line number Diff line number Diff line Loading @@ -470,12 +470,44 @@ static ssize_t perfmon_start_store(struct device *dev, return count; } static ssize_t perfmon_scid_status_show(struct device *dev, struct device_attribute *attr, char *buf) { struct llcc_perfmon_private *llcc_priv = dev_get_drvdata(dev); uint32_t val; unsigned int i, offset; ssize_t cnt = 0, print; for (i = 0; i < SCID_MAX; i++) { offset = TRP_SCID_n_STATUS(i); llcc_bcast_read(llcc_priv, offset, &val); if (val & TRP_SCID_STATUS_ACTIVE_MASK) print = snprintf(buf, MAX_STRING_SIZE, "SCID %02d %10s", i, "ACTIVE"); else print = snprintf(buf, MAX_STRING_SIZE, "SCID %02d %10s", i, "DEACTIVE"); buf += print; cnt += print; val = (val & TRP_SCID_STATUS_CURRENT_CAP_MASK) >> TRP_SCID_STATUS_CURRENT_CAP_SHIFT; print = snprintf(buf, MAX_STRING_SIZE, ",0x%08x\n", val); buf += print; cnt += print; } return cnt; } static DEVICE_ATTR_RO(perfmon_counter_dump); static DEVICE_ATTR_WO(perfmon_configure); static DEVICE_ATTR_WO(perfmon_remove); static DEVICE_ATTR_WO(perfmon_filter_config); static DEVICE_ATTR_WO(perfmon_filter_remove); static DEVICE_ATTR_WO(perfmon_start); static DEVICE_ATTR_RO(perfmon_scid_status); static struct attribute *llcc_perfmon_attrs[] = { &dev_attr_perfmon_counter_dump.attr, Loading @@ -484,6 +516,7 @@ static struct attribute *llcc_perfmon_attrs[] = { &dev_attr_perfmon_filter_config.attr, &dev_attr_perfmon_filter_remove.attr, &dev_attr_perfmon_start.attr, &dev_attr_perfmon_scid_status.attr, NULL, }; Loading
drivers/soc/qcom/llcc_perfmon.h +14 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ /* TRP */ #define TRP_PROF_FILTER_0_CFG1 (0x024004) #define TRP_PROF_EVENT_n_CFG(n) (0x024020 + 4 * n) #define TRP_SCID_n_STATUS(n) (0x000004 + 0x1000 * n) /* DRP */ #define DRP_PROF_EVENT_n_CFG(n) (0x044010 + 4 * n) Loading Loading @@ -180,4 +181,17 @@ #define TRP_PROFTAG_MASK_SHIFT (28) #define TRP_PROFTAG_MASK_MASK GENMASK(TRP_PROFTAG_MASK_SHIFT + 1,\ TRP_PROFTAG_MASK_SHIFT) #define TRP_SCID_STATUS_ACTIVE_SHIFT (0) #define TRP_SCID_STATUS_ACTIVE_MASK GENMASK( \ TRP_SCID_STATUS_ACTIVE_SHIFT \ + 0, \ TRP_SCID_STATUS_ACTIVE_SHIFT) #define TRP_SCID_STATUS_DEACTIVE_SHIFT (1) #define TRP_SCID_STATUS_CURRENT_CAP_SHIFT (16) #define TRP_SCID_STATUS_CURRENT_CAP_MASK GENMASK( \ TRP_SCID_STATUS_CURRENT_CAP_SHIFT \ + 13, \ TRP_SCID_STATUS_CURRENT_CAP_SHIFT) #endif /* _SOC_QCOM_LLCC_PERFMON_H_ */