linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Viresh Kumar <viresh.kumar@linaro.org>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Viresh Kumar <viresh.kumar@linaro.org>,
	Vincent Guittot <vincent.guittot@linaro.org>,
	Stephen Boyd <sboyd@codeaurora.org>,
	Rajendra Nayak <rnayak@codeaurora.org>,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, robdclark@gmail.com,
	s.hauer@pengutronix.de, l.stach@pengutronix.de,
	shawnguo@kernel.org, fabio.estevam@nxp.com, nm@ti.com,
	xuwei5@hisilicon.com, robh+dt@kernel.org
Subject: [PATCH V4 07/12] boot_constraint: Add debugfs support
Date: Sun, 29 Oct 2017 19:18:55 +0530	[thread overview]
Message-ID: <a796de9a338d7d0876faa3ec99f5cb49315c893c.1509284255.git.viresh.kumar@linaro.org> (raw)
In-Reply-To: <cover.1509284255.git.viresh.kumar@linaro.org>
In-Reply-To: <cover.1509284255.git.viresh.kumar@linaro.org>

This patch adds debugfs support for boot constraints. This is how it
looks for a "vmmc-supply" constraint for the MMC device.

$ ls -R /sys/kernel/debug/boot_constraints/
/sys/kernel/debug/boot_constraints/:
f723d000.dwmmc0

/sys/kernel/debug/boot_constraints/f723d000.dwmmc0:
clk-ciu  pm-domain  supply-vmmc  supply-vmmcaux

/sys/kernel/debug/boot_constraints/f723d000.dwmmc0/clk-ciu:

/sys/kernel/debug/boot_constraints/f723d000.dwmmc0/pm-domain:

/sys/kernel/debug/boot_constraints/f723d000.dwmmc0/supply-vmmc:
u_volt_max  u_volt_min

/sys/kernel/debug/boot_constraints/f723d000.dwmmc0/supply-vmmcaux:
u_volt_max  u_volt_min

Tested-by: Rajendra Nayak <rnayak@codeaurora.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/boot_constraints/clk.c    |  3 ++
 drivers/boot_constraints/core.c   | 60 +++++++++++++++++++++++++++++++++++++++
 drivers/boot_constraints/core.h   |  6 ++++
 drivers/boot_constraints/pm.c     | 11 +++++--
 drivers/boot_constraints/supply.c |  9 ++++++
 5 files changed, 87 insertions(+), 2 deletions(-)

diff --git a/drivers/boot_constraints/clk.c b/drivers/boot_constraints/clk.c
index b5b1d63c3e76..91b7b538ef32 100644
--- a/drivers/boot_constraints/clk.c
+++ b/drivers/boot_constraints/clk.c
@@ -49,6 +49,8 @@ int constraint_clk_add(struct constraint *constraint, void *data)
 	cclk->clk_info.name = kstrdup_const(clk_info->name, GFP_KERNEL);
 	constraint->private = cclk;
 
+	constraint_add_debugfs(constraint, clk_info->name);
+
 	return 0;
 
 put_clk:
@@ -63,6 +65,7 @@ void constraint_clk_remove(struct constraint *constraint)
 {
 	struct constraint_clk *cclk = constraint->private;
 
+	constraint_remove_debugfs(constraint);
 	kfree_const(cclk->clk_info.name);
 	clk_disable_unprepare(cclk->clk);
 	clk_put(cclk->clk);
diff --git a/drivers/boot_constraints/core.c b/drivers/boot_constraints/core.c
index f4d3520ddb04..707ffac690fc 100644
--- a/drivers/boot_constraints/core.c
+++ b/drivers/boot_constraints/core.c
@@ -24,6 +24,64 @@
 static LIST_HEAD(constraint_devices);
 static DEFINE_MUTEX(constraint_devices_mutex);
 
+/* Debugfs */
+
+static struct dentry *rootdir;
+
+static void constraint_device_add_debugfs(struct constraint_dev *cdev)
+{
+	struct device *dev = cdev->dev;
+
+	cdev->dentry = debugfs_create_dir(dev_name(dev), rootdir);
+}
+
+static void constraint_device_remove_debugfs(struct constraint_dev *cdev)
+{
+	debugfs_remove_recursive(cdev->dentry);
+}
+
+void constraint_add_debugfs(struct constraint *constraint, const char *suffix)
+{
+	struct device *dev = constraint->cdev->dev;
+	const char *prefix;
+	char name[NAME_MAX];
+
+	switch (constraint->type) {
+	case DEV_BOOT_CONSTRAINT_CLK:
+		prefix = "clk";
+		break;
+	case DEV_BOOT_CONSTRAINT_PM:
+		prefix = "pm";
+		break;
+	case DEV_BOOT_CONSTRAINT_SUPPLY:
+		prefix = "supply";
+		break;
+	default:
+		dev_err(dev, "%s: Constraint type (%d) not supported\n",
+			__func__, constraint->type);
+		return;
+	}
+
+	snprintf(name, NAME_MAX, "%s-%s", prefix, suffix);
+
+	constraint->dentry = debugfs_create_dir(name, constraint->cdev->dentry);
+}
+
+void constraint_remove_debugfs(struct constraint *constraint)
+{
+	debugfs_remove_recursive(constraint->dentry);
+}
+
+static int __init constraint_debugfs_init(void)
+{
+	/* Create /sys/kernel/debug/opp directory */
+	rootdir = debugfs_create_dir("boot_constraints", NULL);
+
+	return 0;
+}
+core_initcall(constraint_debugfs_init);
+
+
 /* Boot constraints core */
 
 static struct constraint_dev *constraint_device_find(struct device *dev)
@@ -51,12 +109,14 @@ static struct constraint_dev *constraint_device_allocate(struct device *dev)
 	INIT_LIST_HEAD(&cdev->constraints);
 
 	list_add(&cdev->node, &constraint_devices);
+	constraint_device_add_debugfs(cdev);
 
 	return cdev;
 }
 
 static void constraint_device_free(struct constraint_dev *cdev)
 {
+	constraint_device_remove_debugfs(cdev);
 	list_del(&cdev->node);
 	kfree(cdev);
 }
diff --git a/drivers/boot_constraints/core.h b/drivers/boot_constraints/core.h
index a051c3d7c8ab..ee84e237c66a 100644
--- a/drivers/boot_constraints/core.h
+++ b/drivers/boot_constraints/core.h
@@ -8,6 +8,7 @@
 #define _CORE_H
 
 #include <linux/boot_constraint.h>
+#include <linux/debugfs.h>
 #include <linux/device.h>
 #include <linux/list.h>
 
@@ -15,6 +16,7 @@ struct constraint_dev {
 	struct device *dev;
 	struct list_head node;
 	struct list_head constraints;
+	struct dentry *dentry;
 };
 
 struct constraint {
@@ -23,12 +25,16 @@ struct constraint {
 	enum dev_boot_constraint_type type;
 	void (*free_resources)(void *data);
 	void *free_resources_data;
+	struct dentry *dentry;
 
 	int (*add)(struct constraint *constraint, void *data);
 	void (*remove)(struct constraint *constraint);
 	void *private;
 };
 
+void constraint_add_debugfs(struct constraint *constraint, const char *suffix);
+void constraint_remove_debugfs(struct constraint *constraint);
+
 /* Forward declarations of constraint specific callbacks */
 int constraint_clk_add(struct constraint *constraint, void *data);
 void constraint_clk_remove(struct constraint *constraint);
diff --git a/drivers/boot_constraints/pm.c b/drivers/boot_constraints/pm.c
index edba5eca5093..d74b776cdced 100644
--- a/drivers/boot_constraints/pm.c
+++ b/drivers/boot_constraints/pm.c
@@ -14,11 +14,18 @@
 int constraint_pm_add(struct constraint *constraint, void *data)
 {
 	struct device *dev = constraint->cdev->dev;
+	int ret;
 
-	return dev_pm_domain_attach(dev, true);
+	ret = dev_pm_domain_attach(dev, true);
+	if (ret)
+		return ret;
+
+	constraint_add_debugfs(constraint, "domain");
+
+	return 0;
 }
 
 void constraint_pm_remove(struct constraint *constraint)
 {
-	/* Nothing to do for now */
+	constraint_remove_debugfs(constraint);
 }
diff --git a/drivers/boot_constraints/supply.c b/drivers/boot_constraints/supply.c
index 30f816dbf12c..3d658410a082 100644
--- a/drivers/boot_constraints/supply.c
+++ b/drivers/boot_constraints/supply.c
@@ -60,6 +60,14 @@ int constraint_supply_add(struct constraint *constraint, void *data)
 	csupply->supply.name = kstrdup_const(supply->name, GFP_KERNEL);
 	constraint->private = csupply;
 
+	constraint_add_debugfs(constraint, supply->name);
+
+	debugfs_create_u32("u_volt_min", 0444, constraint->dentry,
+			   &csupply->supply.u_volt_min);
+
+	debugfs_create_u32("u_volt_max", 0444, constraint->dentry,
+			   &csupply->supply.u_volt_max);
+
 	return 0;
 
 remove_voltage:
@@ -80,6 +88,7 @@ void constraint_supply_remove(struct constraint *constraint)
 	struct device *dev = constraint->cdev->dev;
 	int ret;
 
+	constraint_remove_debugfs(constraint);
 	kfree_const(supply->name);
 
 	ret = regulator_disable(csupply->reg);
-- 
2.15.0.rc1.236.g92ea95045093

  parent reply	other threads:[~2017-10-29 13:50 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-29 13:48 [PATCH V4 00/12] drivers: Boot Constraints core Viresh Kumar
2017-10-29 13:48 ` [PATCH V4 01/12] of: platform: Add of_find_amba_device_by_node() Viresh Kumar
2017-10-29 13:48 ` [PATCH V4 02/12] of: platform: Make of_platform_bus_create() global Viresh Kumar
2017-10-29 13:48 ` [PATCH V4 03/12] drivers: Add boot constraints core Viresh Kumar
2017-12-13  9:42   ` Greg Kroah-Hartman
2017-12-13  9:59     ` Viresh Kumar
2017-12-13  9:42   ` Greg Kroah-Hartman
2017-12-13 10:00     ` Viresh Kumar
2017-10-29 13:48 ` [PATCH V4 04/12] boot_constraint: Add support for supply constraints Viresh Kumar
2017-12-13  9:48   ` Greg Kroah-Hartman
2017-10-29 13:48 ` [PATCH V4 05/12] boot_constraint: Add support for clk constraints Viresh Kumar
2017-12-13  9:48   ` Greg Kroah-Hartman
2017-10-29 13:48 ` [PATCH V4 06/12] boot_constraint: Add support for PM constraints Viresh Kumar
2017-12-13  9:48   ` Greg Kroah-Hartman
2017-10-29 13:48 ` Viresh Kumar [this message]
2017-10-29 15:09   ` [PATCH V4 07/12] boot_constraint: Add debugfs support Randy Dunlap
2017-10-30  3:37     ` Viresh Kumar
2017-10-30  3:43       ` Randy Dunlap
2017-12-13  9:50   ` Greg Kroah-Hartman
2017-10-29 13:48 ` [PATCH V4 08/12] boot_constraint: Manage deferrable constraints Viresh Kumar
2017-10-31 16:20   ` Rob Herring
2017-11-01  2:29     ` Viresh Kumar
2017-12-13  9:53   ` Greg Kroah-Hartman
2017-12-13 10:27     ` Viresh Kumar
2017-12-13 10:33       ` Russell King - ARM Linux
2017-12-13 14:39         ` Viresh Kumar
2017-10-29 13:48 ` [PATCH V4 09/12] boot_constraint: Add earlycon helper Viresh Kumar
2017-12-13  9:44   ` Greg Kroah-Hartman
2017-12-14  5:22     ` Viresh Kumar
2017-10-29 13:48 ` [PATCH V4 10/12] boot_constraint: Add support for Hisilicon platforms Viresh Kumar
2017-12-13  9:47   ` Greg Kroah-Hartman
2017-12-13 10:13     ` Viresh Kumar
2017-10-29 13:48 ` [PATCH V4 11/12] boot_constraint: Add support for IMX platform Viresh Kumar
2017-11-03  8:58   ` Sascha Hauer
2017-10-29 13:49 ` [PATCH V4 12/12] boot_constraint: Add Qualcomm display controller constraints Viresh Kumar
2017-10-30 22:07 ` [PATCH V4 00/12] drivers: Boot Constraints core Rob Herring
2017-10-31 10:01   ` Viresh Kumar
2017-11-28  4:18 ` Viresh Kumar
2017-12-13  9:55   ` Greg Kroah-Hartman
2017-12-13 10:27     ` Viresh Kumar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=a796de9a338d7d0876faa3ec99f5cb49315c893c.1509284255.git.viresh.kumar@linaro.org \
    --to=viresh.kumar@linaro.org \
    --cc=fabio.estevam@nxp.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=l.stach@pengutronix.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nm@ti.com \
    --cc=rnayak@codeaurora.org \
    --cc=robdclark@gmail.com \
    --cc=robh+dt@kernel.org \
    --cc=s.hauer@pengutronix.de \
    --cc=sboyd@codeaurora.org \
    --cc=shawnguo@kernel.org \
    --cc=vincent.guittot@linaro.org \
    --cc=xuwei5@hisilicon.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).