Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ffb67961 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "drivers: soc: llcc_perfmon: Sysfs entry perfmon_scid_status"

parents b3647bcd 79bc18e8
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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";
+1 −0
Original line number Diff line number Diff line
@@ -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
+1 −0
Original line number Diff line number Diff line
@@ -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
+33 −0
Original line number Diff line number Diff line
@@ -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,
@@ -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,
};

+14 −0
Original line number Diff line number Diff line
@@ -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)
@@ -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_ */