From: "Saheed O. Bolarinwa" <refactormyself@gmail.com>
To: helgaas@kernel.org
Cc: "Saheed O. Bolarinwa" <refactormyself@gmail.com>,
linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [RFC PATCH v2 3/3] PCI/ASPM: Remove struct pcie_link_state.clkpm_enabled
Date: Sat, 6 Nov 2021 18:55:46 +0100 [thread overview]
Message-ID: <20211106175546.27785-4-refactormyself@gmail.com> (raw)
In-Reply-To: <20211106175546.27785-1-refactormyself@gmail.com>
The clkpm_enabled member of the struct pcie_link_state stores the
current Clock PM state for the device. However, when the state changes
it is persisted and thus can be retieved directly.
- move calculations into pcie_clkpm_enabled()
- removes clkpm_enabled from the struct pcie_link_state
- removes all instance where clkpm_enable is set
- replaces references to clkpm_enabled with a call to
pcie_get_clkpm_state()
Signed-off-by: Saheed O. Bolarinwa <refactormyself@gmail.com>
---
drivers/pci/pcie/aspm.c | 43 +++++++++++++++++------------------------
1 file changed, 18 insertions(+), 25 deletions(-)
diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
index c1f8f10b7a4c..9425d1e38c51 100644
--- a/drivers/pci/pcie/aspm.c
+++ b/drivers/pci/pcie/aspm.c
@@ -61,7 +61,6 @@ struct pcie_link_state {
u32 aspm_disable:7; /* Disabled ASPM state */
/* Clock PM state */
- u32 clkpm_enabled:1; /* Current Clock PM state */
u32 clkpm_default:1; /* Default Clock PM state by BIOS */
u32 clkpm_disable:1; /* Clock PM disabled */
@@ -104,6 +103,21 @@ static const char *policy_str[] = {
#define LINK_RETRAIN_TIMEOUT HZ
+static int pcie_clkpm_enabled(struct pci_dev *pdev)
+{
+ struct pci_dev *child;
+ struct pci_bus *linkbus = pdev->subordinate;
+ u16 ctl;
+
+ /* CLKREQ_EN is only applicable for Upstream Ports */
+ list_for_each_entry(child, &linkbus->devices, bus_list) {
+ pcie_capability_read_word(child, PCI_EXP_LNKCTL, &ctl);
+ if (!(ctl & PCI_EXP_LNKCTL_CLKREQ_EN))
+ return 0;
+ }
+ return 1;
+}
+
static int pcie_clkpm_capable(struct pci_dev *pdev)
{
u32 cap;
@@ -165,7 +179,7 @@ static void pcie_set_clkpm(struct pcie_link_state *link, int enable)
if (!pcie_clkpm_capable(link->pdev) || link->clkpm_disable)
enable = 0;
/* Need nothing if the specified equals to current state */
- if (link->clkpm_enabled == enable)
+ if (pcie_clkpm_enabled(link->pdev) == enable)
return;
val = enable ? PCI_EXP_LNKCTL_CLKREQ_EN : 0;
@@ -173,31 +187,11 @@ static void pcie_set_clkpm(struct pcie_link_state *link, int enable)
pcie_capability_clear_and_set_word(child, PCI_EXP_LNKCTL,
PCI_EXP_LNKCTL_CLKREQ_EN,
val);
-
- link->clkpm_enabled = !!enable;
}
static void pcie_clkpm_cap_init(struct pcie_link_state *link, int blacklist)
{
- int enabled = 1;
- u32 reg32;
- u16 reg16;
- struct pci_dev *child;
- struct pci_bus *linkbus = link->pdev->subordinate;
-
- /* All functions should have the same cap and state, take the worst */
- list_for_each_entry(child, &linkbus->devices, bus_list) {
- pcie_capability_read_dword(child, PCI_EXP_LNKCAP, ®32);
- if (!(reg32 & PCI_EXP_LNKCAP_CLKPM)) {
- enabled = 0;
- break;
- }
- pcie_capability_read_word(child, PCI_EXP_LNKCTL, ®16);
- if (!(reg16 & PCI_EXP_LNKCTL_CLKREQ_EN))
- enabled = 0;
- }
- link->clkpm_enabled = enabled;
- link->clkpm_default = enabled;
+ link->clkpm_default = pcie_clkpm_enabled(link->pdev);
link->clkpm_disable = blacklist ? 1 : 0;
}
@@ -1272,9 +1266,8 @@ static ssize_t clkpm_show(struct device *dev,
struct device_attribute *attr, char *buf)
{
struct pci_dev *pdev = to_pci_dev(dev);
- struct pcie_link_state *link = pcie_aspm_get_link(pdev);
- return sysfs_emit(buf, "%d\n", link->clkpm_enabled);
+ return sysfs_emit(buf, "%d\n", pcie_clkpm_enabled(pdev));
}
static ssize_t clkpm_store(struct device *dev,
--
2.20.1
prev parent reply other threads:[~2021-11-06 17:55 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-06 17:55 [RFC PATCH v2 0/3] Remove struct pcie_link_state.clkpm_* Saheed O. Bolarinwa
2021-11-06 17:55 ` [RFC PATCH v2 1/3] PCI/ASPM: Merge pcie_set_clkpm_nocheck() into pcie_set_clkpm() Saheed O. Bolarinwa
2021-11-06 17:55 ` [RFC PATCH v2 2/3] PCI/ASPM: Remove struct pcie_link_state.clkpm_capable Saheed O. Bolarinwa
2021-11-06 17:55 ` Saheed O. Bolarinwa [this message]
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=20211106175546.27785-4-refactormyself@gmail.com \
--to=refactormyself@gmail.com \
--cc=helgaas@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.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).