From: Dolev Raviv <draviv@codeaurora.org>
To: James.Bottomley@HansenPartnership.com, hch@infradead.org
Cc: linux-scsi@vger.kernel.org, linux-scsi-owner@vger.kernel.org,
linux-arm-msm@vger.kernel.org, santoshsy@gmail.com,
Sahitya Tummala <stummala@codeaurora.org>,
Dolev Raviv <draviv@codeaurora.org>
Subject: [PATCH/RESEND V6 15/18] scsi: ufs: Add freq-table-hz property for UFS device
Date: Thu, 25 Sep 2014 15:32:33 +0300 [thread overview]
Message-ID: <1411648356-3883-16-git-send-email-draviv@codeaurora.org> (raw)
In-Reply-To: <1411648356-3883-1-git-send-email-draviv@codeaurora.org>
From: Sahitya Tummala <stummala@codeaurora.org>
Add freq-table-hz propery for UFS device to keep track of
<min max> frequencies supported by UFS clocks.
Signed-off-by: Sahitya Tummala <stummala@codeaurora.org>
Signed-off-by: Dolev Raviv <draviv@codeaurora.org>
diff --git a/Documentation/devicetree/bindings/ufs/ufshcd-pltfrm.txt b/Documentation/devicetree/bindings/ufs/ufshcd-pltfrm.txt
index fb1234e..5357919 100644
--- a/Documentation/devicetree/bindings/ufs/ufshcd-pltfrm.txt
+++ b/Documentation/devicetree/bindings/ufs/ufshcd-pltfrm.txt
@@ -26,11 +26,11 @@ Optional properties:
- clocks : List of phandle and clock specifier pairs
- clock-names : List of clock input name strings sorted in the same
order as the clocks property.
-- max-clock-frequency-hz : List of maximum operating frequency stored in the same
- order as the clocks property. If this property is not
- defined or a value in the array is "0" then it is assumed
- that the frequency is set by the parent clock or a
- fixed rate clock source.
+- freq-table-hz : Array of <min max> operating frequencies stored in the same
+ order as the clocks property. If this property is not
+ defined or a value in the array is "0" then it is assumed
+ that the frequency is set by the parent clock or a
+ fixed rate clock source.
Note: If above properties are not defined it can be assumed that the supply
regulators or clocks are always on.
@@ -53,5 +53,5 @@ Example:
clocks = <&core 0>, <&ref 0>, <&iface 0>;
clock-names = "core_clk", "ref_clk", "iface_clk";
- max-clock-frequency-hz = <100000000 19200000 0>;
+ freq-table-hz = <100000000 200000000>, <0 0>, <0 0>;
};
diff --git a/drivers/scsi/ufs/ufshcd-pltfrm.c b/drivers/scsi/ufs/ufshcd-pltfrm.c
index 2482bba..8adf067 100644
--- a/drivers/scsi/ufs/ufshcd-pltfrm.c
+++ b/drivers/scsi/ufs/ufshcd-pltfrm.c
@@ -63,6 +63,8 @@ static int ufshcd_parse_clock_info(struct ufs_hba *hba)
char *name;
u32 *clkfreq = NULL;
struct ufs_clk_info *clki;
+ int len = 0;
+ size_t sz = 0;
if (!np)
goto out;
@@ -82,39 +84,59 @@ static int ufshcd_parse_clock_info(struct ufs_hba *hba)
if (cnt <= 0)
goto out;
- clkfreq = kzalloc(cnt * sizeof(*clkfreq), GFP_KERNEL);
+ if (!of_get_property(np, "freq-table-hz", &len)) {
+ dev_info(dev, "freq-table-hz property not specified\n");
+ goto out;
+ }
+
+ if (len <= 0)
+ goto out;
+
+ sz = len / sizeof(*clkfreq);
+ if (sz != 2 * cnt) {
+ dev_err(dev, "%s len mismatch\n", "freq-table-hz");
+ ret = -EINVAL;
+ goto out;
+ }
+
+ clkfreq = devm_kzalloc(dev, sz * sizeof(*clkfreq),
+ GFP_KERNEL);
if (!clkfreq) {
+ dev_err(dev, "%s: no memory\n", "freq-table-hz");
ret = -ENOMEM;
- dev_err(dev, "%s: memory alloc failed\n", __func__);
goto out;
}
- ret = of_property_read_u32_array(np,
- "max-clock-frequency-hz", clkfreq, cnt);
+ ret = of_property_read_u32_array(np, "freq-table-hz",
+ clkfreq, sz);
if (ret && (ret != -EINVAL)) {
- dev_err(dev, "%s: invalid max-clock-frequency-hz property, %d\n",
- __func__, ret);
- goto out;
+ dev_err(dev, "%s: error reading array %d\n",
+ "freq-table-hz", ret);
+ goto free_clkfreq;
}
- for (i = 0; i < cnt; i++) {
+ for (i = 0; i < sz; i += 2) {
ret = of_property_read_string_index(np,
- "clock-names", i, (const char **)&name);
+ "clock-names", i/2, (const char **)&name);
if (ret)
- goto out;
+ goto free_clkfreq;
clki = devm_kzalloc(dev, sizeof(*clki), GFP_KERNEL);
if (!clki) {
ret = -ENOMEM;
- goto out;
+ goto free_clkfreq;
}
- clki->max_freq = clkfreq[i];
+ clki->min_freq = clkfreq[i];
+ clki->max_freq = clkfreq[i+1];
clki->name = kstrdup(name, GFP_KERNEL);
+ dev_dbg(dev, "%s: min %u max %u name %s\n", "freq-table-hz",
+ clki->min_freq, clki->max_freq, clki->name);
list_add_tail(&clki->list, &hba->clk_list_head);
}
-out:
+free_clkfreq:
kfree(clkfreq);
+out:
return ret;
}
diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
index 29d34d3..ac72a6d 100644
--- a/drivers/scsi/ufs/ufshcd.h
+++ b/drivers/scsi/ufs/ufshcd.h
@@ -209,6 +209,7 @@ struct ufs_dev_cmd {
* @clk: clock node
* @name: clock name
* @max_freq: maximum frequency supported by the clock
+ * @min_freq: min frequency that can be used for clock scaling
* @enabled: variable to check against multiple enable/disable
*/
struct ufs_clk_info {
@@ -216,6 +217,7 @@ struct ufs_clk_info {
struct clk *clk;
const char *name;
u32 max_freq;
+ u32 min_freq;
bool enabled;
};
--
1.8.5.2
--
QUALCOMM ISRAEL, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation
next prev parent reply other threads:[~2014-09-25 12:33 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-25 12:32 [PATCH/RESEND V6 00/18] UFS: Power management support Dolev Raviv
2014-09-25 12:32 ` [PATCH V6 01/18] scsi: fixing the "type" for well known LUs Dolev Raviv
2014-09-26 8:13 ` Christoph Hellwig
2014-10-03 18:40 ` Elliott, Robert (Server Storage)
2014-09-25 12:32 ` [PATCH V6 02/18] scsi: sysfs: don't add scsi_device if its already added Dolev Raviv
2014-09-26 8:14 ` Christoph Hellwig
2014-09-26 13:41 ` Hannes Reinecke
2014-09-30 21:54 ` Martin K. Petersen
2014-09-25 12:32 ` [PATCH/RESEND V6 03/18] scsi: ufs: Allow vendor specific initialization Dolev Raviv
2014-09-25 12:32 ` [PATCH/RESEND V6 04/18] scsi: ufs: Add regulator enable support Dolev Raviv
2014-09-25 12:32 ` [PATCH/RESEND V6 05/18] scsi: ufs: Add clock initialization support Dolev Raviv
2014-09-25 12:32 ` [PATCH/RESEND V6 06/18] scsi: ufs: add voting support for host controller power Dolev Raviv
2014-09-25 12:32 ` [PATCH/RESEND V6 07/18] scsi: ufs: refactor query descriptor API support Dolev Raviv
2014-09-25 12:32 ` [PATCH/RESEND V6 08/18] scsi: ufs: improve init sequence Dolev Raviv
2014-09-25 12:32 ` [PATCH/RESEND V6 09/18] scsi: ufs: Active Power Mode - configuring bActiveICCLevel Dolev Raviv
2014-09-25 12:32 ` [PATCH V6 10/18] scsi: ufs: manually add well known logical units Dolev Raviv
2014-10-03 16:16 ` Akinobu Mita
2014-10-03 16:35 ` Subhash Jadavani
2014-10-03 16:35 ` Christoph Hellwig
2014-10-05 7:31 ` Akinobu Mita
2014-09-25 12:32 ` [PATCH V6 11/18] scsi: ufs: introduce well known logical unit in ufs Dolev Raviv
2014-09-25 12:32 ` [PATCH V6 12/18] scsi: ufs: add UFS power management support Dolev Raviv
2014-09-25 12:32 ` [PATCH/RESEND V6 13/18] scsi: ufs: refactor configuring power mode Dolev Raviv
2014-10-03 16:20 ` Akinobu Mita
2014-10-03 16:42 ` Subhash Jadavani
2014-09-25 12:32 ` [PATCH/RESEND V6 14/18] scsi: ufs: Add support for clock gating Dolev Raviv
2014-09-25 12:32 ` Dolev Raviv [this message]
2014-09-25 12:32 ` [PATCH/RESEND V6 16/18] scsi: ufs: Add support for clock scaling using devfreq framework Dolev Raviv
2014-09-25 12:32 ` [PATCH/RESEND V6 17/18] scsi: ufs: tune bkops while power managment events Dolev Raviv
2014-09-25 12:32 ` [PATCH/RESEND V6 18/18] scsi: ufs: definitions for phy interface Dolev Raviv
2014-09-25 15:43 ` [PATCH/RESEND V6 00/18] UFS: Power management support David Miller
2014-09-30 14:26 ` Christoph Hellwig
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=1411648356-3883-16-git-send-email-draviv@codeaurora.org \
--to=draviv@codeaurora.org \
--cc=James.Bottomley@HansenPartnership.com \
--cc=hch@infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-scsi-owner@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=santoshsy@gmail.com \
--cc=stummala@codeaurora.org \
/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).