From: "Pali Rohár" <pali@kernel.org>
To: "Martin Mares" <mj@ucw.cz>, "Bjorn Helgaas" <helgaas@kernel.org>,
"Krzysztof Wilczyński" <kw@linux.com>,
"Matthew Wilcox" <willy@infradead.org>,
linux-pci@vger.kernel.org
Subject: [PATCH v3 pciutils] lspci: Show Slot Power Limit values above EFh
Date: Sun, 26 Dec 2021 23:41:47 +0100 [thread overview]
Message-ID: <20211226224147.19960-1-pali@kernel.org> (raw)
In-Reply-To: <mj+md-20211226.220617.62062.albireo@ucw.cz>
PCI Express Base Specification rev. 3.0 has the following definition for
the Slot Power Limit Value:
=======================================================================
When the Slot Power Limit Scale field equals 00b (1.0x) and Slot Power
Limit Value exceeds EFh, the following alternative encodings are used:
F0h = 250 W Slot Power Limit
F1h = 275 W Slot Power Limit
F2h = 300 W Slot Power Limit
F3h to FFh = Reserved for Slot Power Limit values above 300 W
=======================================================================
Replace function power_limit() by show_power_limit() which also prints
power limit value. Show reserved value as string ">300W".
---
v3: Use floating point and %g printf format to avoid trailing zeros.
---
ls-caps.c | 29 ++++++++++++++++++++---------
1 file changed, 20 insertions(+), 9 deletions(-)
diff --git a/ls-caps.c b/ls-caps.c
index db56556971cb..6f5613794790 100644
--- a/ls-caps.c
+++ b/ls-caps.c
@@ -656,10 +656,20 @@ static int exp_downstream_port(int type)
type == PCI_EXP_TYPE_PCIE_BRIDGE; /* PCI/PCI-X to PCIe Bridge */
}
-static float power_limit(int value, int scale)
+static void show_power_limit(int value, int scale)
{
static const float scales[4] = { 1.0, 0.1, 0.01, 0.001 };
- return value * scales[scale];
+ static const int scale0_values[3] = { 250, 275, 300 };
+
+ if (scale == 0 && value >= 0xF0) {
+ /* F3h to FFh = Reserved for Slot Power Limit values above 300 W */
+ if (value >= 0xF3) {
+ printf(">300W");
+ return;
+ }
+ value = scale0_values[value - 0xF0];
+ }
+ printf("%gW", value * scales[scale]);
}
static const char *latency_l0s(int value)
@@ -700,10 +710,10 @@ static void cap_express_dev(struct device *d, int where, int type)
printf(" FLReset%c",
FLAG(t, PCI_EXP_DEVCAP_FLRESET));
if ((type == PCI_EXP_TYPE_ENDPOINT) || (type == PCI_EXP_TYPE_UPSTREAM) ||
- (type == PCI_EXP_TYPE_PCI_BRIDGE))
- printf(" SlotPowerLimit %.3fW",
- power_limit((t & PCI_EXP_DEVCAP_PWR_VAL) >> 18,
- (t & PCI_EXP_DEVCAP_PWR_SCL) >> 26));
+ (type == PCI_EXP_TYPE_PCI_BRIDGE)) {
+ printf(" SlotPowerLimit ");
+ show_power_limit((t & PCI_EXP_DEVCAP_PWR_VAL) >> 18, (t & PCI_EXP_DEVCAP_PWR_SCL) >> 26);
+ }
printf("\n");
w = get_conf_word(d, where + PCI_EXP_DEVCTL);
@@ -871,9 +881,10 @@ static void cap_express_slot(struct device *d, int where)
FLAG(t, PCI_EXP_SLTCAP_PWRI),
FLAG(t, PCI_EXP_SLTCAP_HPC),
FLAG(t, PCI_EXP_SLTCAP_HPS));
- printf("\t\t\tSlot #%d, PowerLimit %.3fW; Interlock%c NoCompl%c\n",
- (t & PCI_EXP_SLTCAP_PSN) >> 19,
- power_limit((t & PCI_EXP_SLTCAP_PWR_VAL) >> 7, (t & PCI_EXP_SLTCAP_PWR_SCL) >> 15),
+ printf("\t\t\tSlot #%d, PowerLimit ",
+ (t & PCI_EXP_SLTCAP_PSN) >> 19);
+ show_power_limit((t & PCI_EXP_SLTCAP_PWR_VAL) >> 7, (t & PCI_EXP_SLTCAP_PWR_SCL) >> 15);
+ printf("; Interlock%c NoCompl%c\n",
FLAG(t, PCI_EXP_SLTCAP_INTERLOCK),
FLAG(t, PCI_EXP_SLTCAP_NOCMDCOMP));
--
2.20.1
next prev parent reply other threads:[~2021-12-26 22:42 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-03 11:48 lspci: Slot Power Limit values above EFh Pali Rohár
2021-04-03 15:48 ` Matthew Wilcox
2021-11-01 14:47 ` [PATCH v2] lspci: Show " Pali Rohár
2021-11-01 15:03 ` Matthew Wilcox
2021-11-24 12:46 ` Pali Rohár
2021-12-26 22:07 ` Martin Mareš
2021-12-26 22:41 ` Pali Rohár [this message]
2021-12-26 22:43 ` [PATCH v3 pciutils] " Martin Mareš
2021-12-26 23:34 ` [PATCH v4 " Pali Rohár
2021-12-26 23:55 ` Martin Mareš
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=20211226224147.19960-1-pali@kernel.org \
--to=pali@kernel.org \
--cc=helgaas@kernel.org \
--cc=kw@linux.com \
--cc=linux-pci@vger.kernel.org \
--cc=mj@ucw.cz \
--cc=willy@infradead.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).