All of lore.kernel.org
 help / color / mirror / Atom feed
From: James Kelly <jamespeterkelly@gmail.com>
To: Michal Simek <michal.simek@xilinx.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: driverdev-devel@linuxdriverproject.org
Subject: [PATCH 14/14] staging: clocking-wizard: Add debugfs entries to facilitate testing.
Date: Mon,  7 May 2018 11:20:40 +1000	[thread overview]
Message-ID: <20180507012040.18187-15-jamespeterkelly@gmail.com> (raw)
In-Reply-To: <20180507012040.18187-1-jamespeterkelly@gmail.com>

Adds test_round_rate and test_set_rate entries to debugfs so that the
driver can be tested by a user space test application.

It would appear that patches that allow access to clk_set_rate from user
space are controversial so there is no expectation that this patch can
be merged.

Signed-off-by: James Kelly <jamespeterkelly@gmail.com>
---
 .../clocking-wizard/clk-xlnx-clock-wizard.c        | 53 ++++++++++++++++++++++
 1 file changed, 53 insertions(+)

diff --git a/drivers/staging/clocking-wizard/clk-xlnx-clock-wizard.c b/drivers/staging/clocking-wizard/clk-xlnx-clock-wizard.c
index bb64da849d9b..c37f0e4451b4 100644
--- a/drivers/staging/clocking-wizard/clk-xlnx-clock-wizard.c
+++ b/drivers/staging/clocking-wizard/clk-xlnx-clock-wizard.c
@@ -308,6 +308,12 @@ static const struct reg_field clk_wzrd_clkout_divide[WZRD_MAX_OUTPUTS] = {
 static const struct reg_field clk_wzrd_clkout0_frac = REG_FIELD(0x208, 8, 17);
 static const struct reg_field clk_wzrd_reconfig     = REG_FIELD(0x25C, 0,  1);
 
+#ifdef CONFIG_DEBUG_FS
+struct clk_wzrd_debug {
+	unsigned long round_rate;
+};
+#endif
+
 /**
  * struct clk_wzrd_clk_data - Clocking Wizard component clock provider data
  *
@@ -319,6 +325,7 @@ static const struct reg_field clk_wzrd_reconfig     = REG_FIELD(0x25C, 0,  1);
  * @max_parent:		maximum parent clk rate
  * @int_field:		pointer to regmap field for integer part
  * @frac_field:		pointer to regmap field for fractional part
+ * @debug:		debug information
  *
  * Flags:
  * WZRD_FLAG_MULTIPLY	Clock is a multiplier rather than a divider
@@ -334,6 +341,9 @@ struct clk_wzrd_clk_data {
 	unsigned long			max_parent;
 	struct regmap_field		*int_field;
 	struct regmap_field		*frac_field;
+#ifdef CONFIG_DEBUG_FS
+	struct clk_wzrd_debug		debug;
+#endif
 };
 
 #define to_clk_wzrd_clk_data(_hw) \
@@ -794,6 +804,39 @@ static int clk_wzrd_ratio_show(struct seq_file *s, void *data)
 }
 DEFINE_SHOW_ATTRIBUTE(clk_wzrd_ratio);
 
+static int clk_wzrd_test_get_round_rate(void *data, u64 *val)
+{
+	struct clk_wzrd_clk_data *cwc = data;
+
+	*val = cwc->debug.round_rate;
+	return 0;
+}
+
+static int clk_wzrd_test_set_round_rate(void *data, u64 val)
+{
+	long round_rate;
+	struct clk_wzrd_clk_data *cwc = data;
+
+	round_rate = clk_round_rate(cwc->hw.clk, (unsigned long)val);
+
+	if (round_rate < 0)
+		return round_rate;
+
+	cwc->debug.round_rate = round_rate;
+	return 0;
+}
+DEFINE_DEBUGFS_ATTRIBUTE(fops_test_round_rate, clk_wzrd_test_get_round_rate,
+			 clk_wzrd_test_set_round_rate, "%llu\n");
+
+static int clk_wzrd_test_set_set_rate(void *data, u64 val)
+{
+	struct clk_wzrd_clk_data *cwc = data;
+
+	return clk_set_rate(cwc->hw.clk, (unsigned long)val);
+}
+DEFINE_DEBUGFS_ATTRIBUTE(fops_test_set_rate, NULL,
+			 clk_wzrd_test_set_set_rate, "%llu\n");
+
 static int clk_wzrd_debug_init(struct clk_hw *hw, struct dentry *dentry)
 {
 	struct dentry *d;
@@ -841,6 +884,16 @@ static int clk_wzrd_debug_init(struct clk_hw *hw, struct dentry *dentry)
 	if (IS_ERR(d))
 		return PTR_ERR(d);
 
+	d = debugfs_create_file_unsafe("test_round_rate", 0644, dentry, cwc,
+				       &fops_test_round_rate);
+	if (IS_ERR(d))
+		return PTR_ERR(d);
+
+	d = debugfs_create_file_unsafe("test_set_rate", 0200, dentry, cwc,
+				       &fops_test_set_rate);
+	if (IS_ERR(d))
+		return PTR_ERR(d);
+
 	return 0;
 }
 #endif
-- 
2.15.1 (Apple Git-101)

_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

  parent reply	other threads:[~2018-05-07  1:22 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-07  1:20 [PATCH 00/14] staging: clocking-wizard: Implement many TODOs James Kelly
2018-05-07  1:20 ` [PATCH 01/14] staging: clocking-wizard: Add principles of operation James Kelly
2018-05-11  6:04   ` Michal Simek
2018-05-11  7:31     ` James Kelly
2018-05-11  7:59       ` Michal Simek
2018-05-14 13:36     ` Dan Carpenter
2018-05-07  1:20 ` [PATCH 02/14] staging: clocking-wizard: Reverse order of internal clocks James Kelly
2018-05-07  1:20 ` [PATCH 03/14] staging: clocking-wizard: Split probe function James Kelly
2018-05-14 13:47   ` Dan Carpenter
2018-05-14 14:47     ` Dan Carpenter
2018-05-14 19:30     ` James Kelly
2018-05-15  7:42       ` Dan Carpenter
2018-05-07  1:20 ` [PATCH 04/14] staging: clocking-wizard: Cosmetic cleanups James Kelly
2018-05-07  1:20 ` [PATCH 05/14] staging: clocking-wizard: Implement CCF clock provider James Kelly
2018-05-11  6:06   ` Michal Simek
2018-05-11  7:58     ` James Kelly
2018-05-11  8:05       ` Michal Simek
2018-05-07  1:20 ` [PATCH 06/14] staging: clocking-wizard: Swap CCF clock providers James Kelly
2018-05-11  6:21   ` Michal Simek
2018-05-11  6:24   ` Michal Simek
2018-05-07  1:20 ` [PATCH 07/14] staging: clocking-wizard: Add hardware constaints James Kelly
2018-05-07  1:20 ` [PATCH 08/14] staging: clocking-wizard: Support fractional ratios James Kelly
2018-05-07  5:00   ` kbuild test robot
2018-05-07  1:20 ` [PATCH 09/14] staging: clocking-wizard: Provide more information in debugfs James Kelly
2018-05-11  6:27   ` Michal Simek
2018-05-07  1:20 ` [PATCH 10/14] staging: clocking-wizard: Support clk_round_rate James Kelly
2018-05-11  6:31   ` Michal Simek
2018-05-15  7:52   ` Dan Carpenter
2018-05-15  7:56     ` Greg Kroah-Hartman
2018-05-07  1:20 ` [PATCH 11/14] staging: clocking-wizard: Support clk_set_rate James Kelly
2018-05-11  6:33   ` Michal Simek
2018-05-07  1:20 ` [PATCH 12/14] staging: clocking-wizard: Automatically set internal clock rates James Kelly
2018-05-07  1:20 ` [PATCH 13/14] staging: clocking-wizard: Automatically set input clock rate James Kelly
2018-05-07  1:20 ` James Kelly [this message]
2018-05-14 12:02 ` [PATCH 00/14] staging: clocking-wizard: Implement many TODOs Greg Kroah-Hartman
2018-05-14 19:32   ` James Kelly

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=20180507012040.18187-15-jamespeterkelly@gmail.com \
    --to=jamespeterkelly@gmail.com \
    --cc=driverdev-devel@linuxdriverproject.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=michal.simek@xilinx.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.