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

Commit 9f5e7029 authored by Quentin Perret's avatar Quentin Perret
Browse files

Revert "FROMLIST: PM / EM: Expose the Energy Model in sysfs"



This reverts commit b8c80a0f. It has not
been accepted upstream and is useful only for debug purpose. An
alternate debugfs interface will be pushed upstream to expose the Energy
Model. Android should use that too. In the meantime, it should be early
enough to remove the sysfs nodes before partners start basing userspace
tools on them.

Bug: 120440300
Change-Id: I8a5f003550df7df9116d4735c8d9ac10ac0aa79c
Signed-off-by: default avatarQuentin Perret <quentin.perret@arm.com>
parent 3ed3d89a
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@ struct em_cap_state {
 * em_perf_domain - Performance domain
 * @table:		List of capacity states, in ascending order
 * @nr_cap_states:	Number of capacity states
 * @kobj:		Kobject used to expose the domain in sysfs
 * @cpus:		Cpumask covering the CPUs of the domain
 *
 * A "performance domain" represents a group of CPUs whose performance is
@@ -38,7 +37,6 @@ struct em_cap_state {
struct em_perf_domain {
	struct em_cap_state *table;
	int nr_cap_states;
	struct kobject kobj;
	unsigned long cpus[0];
};

+0 −90
Original line number Diff line number Diff line
@@ -23,82 +23,6 @@ static DEFINE_PER_CPU(struct em_perf_domain *, em_data);
 */
static DEFINE_MUTEX(em_pd_mutex);

static struct kobject *em_kobject;

/* Getters for the attributes of em_perf_domain objects */
struct em_pd_attr {
	struct attribute attr;
	ssize_t (*show)(struct em_perf_domain *pd, char *buf);
	ssize_t (*store)(struct em_perf_domain *pd, const char *buf, size_t s);
};

#define EM_ATTR_LEN 13
#define show_table_attr(_attr) \
static ssize_t show_##_attr(struct em_perf_domain *pd, char *buf) \
{ \
	ssize_t cnt = 0; \
	int i; \
	for (i = 0; i < pd->nr_cap_states; i++) { \
		if (cnt >= (ssize_t) (PAGE_SIZE / sizeof(char) \
				      - (EM_ATTR_LEN + 2))) \
			goto out; \
		cnt += scnprintf(&buf[cnt], EM_ATTR_LEN + 1, "%lu ", \
				 pd->table[i]._attr); \
	} \
out: \
	cnt += sprintf(&buf[cnt], "\n"); \
	return cnt; \
}

show_table_attr(power);
show_table_attr(frequency);
show_table_attr(cost);

static ssize_t show_cpus(struct em_perf_domain *pd, char *buf)
{
	return sprintf(buf, "%*pbl\n", cpumask_pr_args(to_cpumask(pd->cpus)));
}

#define pd_attr(_name) em_pd_##_name##_attr
#define define_pd_attr(_name) static struct em_pd_attr pd_attr(_name) = \
		__ATTR(_name, 0444, show_##_name, NULL)

define_pd_attr(power);
define_pd_attr(frequency);
define_pd_attr(cost);
define_pd_attr(cpus);

static struct attribute *em_pd_default_attrs[] = {
	&pd_attr(power).attr,
	&pd_attr(frequency).attr,
	&pd_attr(cost).attr,
	&pd_attr(cpus).attr,
	NULL
};

#define to_pd(k) container_of(k, struct em_perf_domain, kobj)
#define to_pd_attr(a) container_of(a, struct em_pd_attr, attr)

static ssize_t show(struct kobject *kobj, struct attribute *attr, char *buf)
{
	struct em_perf_domain *pd = to_pd(kobj);
	struct em_pd_attr *pd_attr = to_pd_attr(attr);
	ssize_t ret;

	ret = pd_attr->show(pd, buf);

	return ret;
}

static const struct sysfs_ops em_pd_sysfs_ops = {
	.show	= show,
};

static struct kobj_type ktype_em_pd = {
	.sysfs_ops	= &em_pd_sysfs_ops,
	.default_attrs	= em_pd_default_attrs,
};

static struct em_perf_domain *em_create_pd(cpumask_t *span, int nr_states,
						struct em_data_callback *cb)
{
@@ -178,11 +102,6 @@ static struct em_perf_domain *em_create_pd(cpumask_t *span, int nr_states,
	pd->nr_cap_states = nr_states;
	cpumask_copy(to_cpumask(pd->cpus), span);

	ret = kobject_init_and_add(&pd->kobj, &ktype_em_pd, em_kobject,
				   "pd%u", cpu);
	if (ret)
		pr_err("pd%d: failed kobject_init_and_add(): %d\n", cpu, ret);

	return pd;

free_cs_table:
@@ -236,15 +155,6 @@ int em_register_perf_domain(cpumask_t *span, unsigned int nr_states,
	 */
	mutex_lock(&em_pd_mutex);

	if (!em_kobject) {
		em_kobject = kobject_create_and_add("energy_model",
						&cpu_subsys.dev_root->kobj);
		if (!em_kobject) {
			ret = -ENODEV;
			goto unlock;
		}
	}

	for_each_cpu(cpu, span) {
		/* Make sure we don't register again an existing domain. */
		if (READ_ONCE(per_cpu(em_data, cpu))) {