Re: [PATCH V7 2/2] soc: qcom: aoss: Add debugfs entry

From: Deepak Kumar Singh
Date: Tue Aug 31 2021 - 10:34:10 EST



On 8/31/2021 4:48 AM, Bjorn Andersson wrote:
On Mon 30 Aug 06:37 CDT 2021, Deepak Kumar Singh wrote:

Some user space clients may require to change power states of various
parts of hardware. Add a debugfs node for qmp so messages can be sent
to aoss from user space.

I think this could be a useful tool while testing and developing client
drivers or perhaps during bringup of new platforms.

But your new commit message doesn't sound right, given that debugfs
isn't mounted in your production builds.

Regards,
Bjorn
Updated commit message in V8.

Signed-off-by: Chris Lew <clew@xxxxxxxxxxxxxx>
Signed-off-by: Deepak Kumar Singh <deesin@xxxxxxxxxxxxxx>
---
drivers/soc/qcom/qcom_aoss.c | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)

diff --git a/drivers/soc/qcom/qcom_aoss.c b/drivers/soc/qcom/qcom_aoss.c
index bf0a6280..4cd8670 100644
--- a/drivers/soc/qcom/qcom_aoss.c
+++ b/drivers/soc/qcom/qcom_aoss.c
@@ -4,6 +4,7 @@
*/
#include <dt-bindings/power/qcom-aoss-qmp.h>
#include <linux/clk-provider.h>
+#include <linux/debugfs.h>
#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/mailbox_client.h>
@@ -86,6 +87,7 @@ struct qmp {
struct clk_hw qdss_clk;
struct genpd_onecell_data pd_data;
struct qmp_cooling_device *cooling_devs;
+ struct dentry *debugfs_file;
};
struct qmp_pd {
@@ -566,6 +568,31 @@ void qmp_put(struct qmp *qmp)
}
EXPORT_SYMBOL(qmp_put);
+static ssize_t aoss_dbg_write(struct file *file, const char __user *userstr,
+ size_t len, loff_t *pos)
+{
+ struct qmp *qmp = file->private_data;
+ char buf[QMP_MSG_LEN] = {};
+ int ret;
+
+ if (!len || len >= QMP_MSG_LEN)
+ return -EINVAL;
+
+ ret = copy_from_user(buf, userstr, len);
+ if (ret) {
+ return -EFAULT;
+ }
+
+ ret = qmp_send(qmp, buf, QMP_MSG_LEN);
+
+ return ret ? ret : len;
+}
+
+static const struct file_operations aoss_dbg_fops = {
+ .open = simple_open,
+ .write = aoss_dbg_write,
+};
+
static int qmp_probe(struct platform_device *pdev)
{
struct resource *res;
@@ -620,6 +647,9 @@ static int qmp_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, qmp);
+ qmp->debugfs_file = debugfs_create_file("aoss_send_message", 0220, NULL,
+ qmp, &aoss_dbg_fops);
+
return 0;
err_remove_qdss_clk:
@@ -636,6 +666,8 @@ static int qmp_remove(struct platform_device *pdev)
{
struct qmp *qmp = platform_get_drvdata(pdev);
+ debugfs_remove(qmp->debugfs_file);
+
qmp_qdss_clk_remove(qmp);
qmp_pd_remove(qmp);
qmp_cooling_devices_remove(qmp);
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project