From: "Sean V Kelley" <sean.v.kelley@linux.intel.com>
To: "Bjorn Helgaas" <helgaas@kernel.org>
Cc: mj@ucw.cz, linux-pci@vger.kernel.org
Subject: Re: [RFC Patch 1/1] lspci: Add basic decode support for Compute eXpress Link
Date: Wed, 08 Apr 2020 14:12:45 -0700 [thread overview]
Message-ID: <1766804A-54D2-4977-975A-9E9F29EFC155@linux.intel.com> (raw)
In-Reply-To: <20200408165623.GA80917@google.com>
Bjorn,
Thanks for taking time to review. My comments below:
On 8 Apr 2020, at 9:56, Bjorn Helgaas wrote:
> On Tue, Apr 07, 2020 at 05:09:59PM -0700, Sean V Kelley wrote:
>> Compute eXpress Link[1] is a new CPU interconnected created with
>> workload accelerators in mind. The interconnect relies on PCIe
>> Electrial
>> and Physical interconnect for communication.
>
> s/interconnected/interconnect/
> s/Electrial/Electrical/
>
>> Moreover, CXL bus hierarchy appear, to the OS, as an ACPI-described
>> PCIe
>> Root Bridge with Integrated Endpoint.
>
> s/Moreover,/The/
> s/appear,/appears/
> s/the OS,/the OS/
>
> Actually, I don't think this paragraph is really relevant. At least
> at the level of lspci, it doesn't matter whether the host bridge is
> described via ACPI, DT, or something else. And I don't think it
> matters whether this is an Integrated Endpoint or otherwise. All
> lspci cares about is that we can read config space for the device.
Will do.
>
>> This patch introduces basic support for lspci decode for DVSEC CXL
>> extended capability.
>>
>> [1] https://www.computeexpresslink.org/
>>
>> Signed-off-by: Sean V Kelley <sean.v.kelley@linux.intel.com>
>> ---
>> lib/header.h | 25 +++++++++++++++++++++++++
>> ls-ecaps.c | 29 ++++++++++++++++++++++++++++-
>> tests/cap-cxl-dvsec | 8 ++++++++
>> 3 files changed, 61 insertions(+), 1 deletion(-)
>> create mode 100644 tests/cap-cxl-dvsec
>>
>> diff --git a/lib/header.h b/lib/header.h
>> index bfdcc80..421612d 100644
>> --- a/lib/header.h
>> +++ b/lib/header.h
>> @@ -1042,6 +1042,27 @@
>> #define PCI_EVNDR_HEADER 4 /* Vendor-Specific Header */
>> #define PCI_EVNDR_REGISTERS 8 /* Vendor-Specific Registers */
>>
>> +/* PCIe CXL Vendor-Specific Capabilities, Control, Status */
>
> s/Vendor-Specific/Designated Vendor-Specific/
>
Will do.
>> +#define PCI_EVNDR_CXL_ID 0
>
> Unused in this patch. Is this the DVSEC Vendor ID as described in
> PCIe r5.0, sec 7.9.6.2? Is 0 really the ID assigned for CXL?
It is as described in the PCIe Spec. The DVSEC ID is set to 0x0 here to
advertise that this is a Flex Bus feature capability structure. It’s
assigned in table 58 “PCI Express DVSEC Register Settings for Flex Bus
Device” of the CXL 1.1 spec.
>
>> +#define PCI_CXL_CAP 0x0a
>> +#define PCI_CXL_CAP_CACHE 0x0001
>> +#define PCI_CXL_CAP_IO 0x0002
>> +#define PCI_CXL_CAP_MEM 0x0004
>> +#define PCI_CXL_CAP_MEM_HWINIT 0x0008
>> +#define PCI_CXL_CAP_HDM_CNT(x) (((x) & (3 << 4)) >> 4)
>> +#define PCI_CXL_CAP_VIRAL 0x4000
>> +#define PCI_CXL_CTRL 0x0c
>> +#define PCI_CXL_CTRL_CACHE 0x0001
>> +#define PCI_CXL_CTRL_IO 0x0002
>> +#define PCI_CXL_CTRL_MEM 0x0004
>> +#define PCI_CXL_CTRL_CACHE_SF_COV(x) (((x) & (0x1f << 3)) >> 3)
>> +#define PCI_CXL_CTRL_CACHE_SF_GRAN(x) (((x) & (0x7 << 8)) >> 8)
>> +#define PCI_CXL_CTRL_CACHE_CLN 0x0800
>> +#define PCI_CXL_CTRL_VIRAL 0x4000
>> +#define PCI_CXL_STATUS 0x0e
>> +#define PCI_CXL_STATUS_VIRAL 0x4000
>> +
>> /* Access Control Services */
>> #define PCI_ACS_CAP 0x04 /* ACS Capability Register */
>> #define PCI_ACS_CAP_VALID 0x0001 /* ACS Source Validation */
>> @@ -1348,6 +1369,10 @@
>> #define PCI_CLASS_SIGNAL_SYNCHRONIZER 0x1110
>> #define PCI_CLASS_SIGNAL_OTHER 0x1180
>>
>> +#define PCI_CLASS_CXL 0x14
>> +#define PCI_CLASS_CXL_RCIEP 0x1400
>> +#define PCI_CLASS_CXL_OTHER 0x1480
>> +
>> #define PCI_CLASS_OTHERS 0xff
>>
>> /* Several ID's we need in the library */
>> diff --git a/ls-ecaps.c b/ls-ecaps.c
>> index 0021734..8c09517 100644
>> --- a/ls-ecaps.c
>> +++ b/ls-ecaps.c
>> @@ -207,6 +207,33 @@ cap_aer(struct device *d, int where, int type)
>> }
>> }
>>
>> +static void
>> +cap_cxl(struct device *d, int where)
>> +{
>> + u16 l;
>> +
>> + printf("PCIe DVSEC for CXL Device\n");
>> + if (verbose < 2)
>> + return;
>> +
>> + if (!config_fetch(d, where + PCI_CXL_CAP, 12))
>> + return;
>> +
>> + l = get_conf_word(d, where + PCI_CXL_CAP);
>> + printf("\t\tCXLCap:\tCache%c IO%c Mem%c Mem HW Init%c HDMCount %d
>> Viral%c\n",
>> + FLAG(l, PCI_CXL_CAP_CACHE), FLAG(l, PCI_CXL_CAP_IO), FLAG(l,
>> PCI_CXL_CAP_MEM),
>> + FLAG(l, PCI_CXL_CAP_MEM_HWINIT), PCI_CXL_CAP_HDM_CNT(l), FLAG(l,
>> PCI_CXL_CAP_VIRAL));
>> +
>> + l = get_conf_word(d, where + PCI_CXL_CTRL);
>> + printf("\t\tCXLCtl:\tCache%c IO%c Mem%c Cache SF Cov %d Cache SF
>> Gran %d Cache Clean%c Viral%c\n",
>> + FLAG(l, PCI_CXL_CTRL_CACHE), FLAG(l, PCI_CXL_CTRL_IO), FLAG(l,
>> PCI_CXL_CTRL_MEM),
>> + PCI_CXL_CTRL_CACHE_SF_COV(l), PCI_CXL_CTRL_CACHE_SF_GRAN(l),
>> FLAG(l, PCI_CXL_CTRL_CACHE_CLN),
>> + FLAG(l, PCI_CXL_CTRL_VIRAL));
>> +
>> + l = get_conf_word(d, where + PCI_CXL_STATUS);
>> + printf("\t\tCXLSta:\tViral%c\n", FLAG(l, PCI_CXL_STATUS_VIRAL));
>> +}
>> +
>> static void cap_dpc(struct device *d, int where)
>> {
>> u16 l;
>> @@ -924,7 +951,7 @@ show_ext_caps(struct device *d, int type)
>> printf("Readiness Time Reporting <?>\n");
>> break;
>> case PCI_EXT_CAP_ID_DVSEC:
>> - printf("Designated Vendor-Specific <?>\n");
>> + cap_cxl(d, where);
>
> This assumes that *every* DVSEC capability is a CXL Designated
> Vendor-Specific capability. I think this needs to check for the
> correct DVSEC Vendor ID and do cap_cxl() if it matches and the
> previous behavior otherwise.
Yes, that’s what I’m looking for on feedback as CXL is one possible
use of DVSEC.
>
> Based on the spec, I would expect to see a check for both the DVSEC
> Vendor ID and the DVSEC ID before decoding the registers.
Right, agreed.
>
> Actually, it would be nice if the generic "I don't know what this is"
> code would at least print the DVSEC Vendor ID and the DVSEC ID.
> Ideally this would be a separate preparatory patch.
Will do.
>
>> break;
>> case PCI_EXT_CAP_ID_VF_REBAR:
>> printf("VF Resizable BAR <?>\n");
>> diff --git a/tests/cap-cxl-dvsec b/tests/cap-cxl-dvsec
>> new file mode 100644
>> index 0000000..14e1022
>> --- /dev/null
>> +++ b/tests/cap-cxl-dvsec
>> @@ -0,0 +1,8 @@
>> +Simple diff of lspci -vvxxxx
>> +
>> +< Capabilities: [e00 v1] Designated Vendor-Specific <?>
>> +---
>> +> Capabilities: [e00 v1] PCIe DVSEC for CXL Device
>> +> CXLCap: Cache+ IO+ Mem+ Mem HW Init+ HDMCount 1
>> Viral-
>> +> CXLCtl: Cache- IO+ Mem- Cache SF Cov 0 Cache SF Gran
>> 0 Cache Clean- Viral-
>> +> CXLSta: Viral-
>
> I think this should be complete "lspci -vvxxxx" or "lspci -xxxx"
> output. If there's secret stuff in there you don't want to expose
> yet, I don't personally object to editing the hexdump to zero it out.
> But the point is that people should be able to run "lspci -F" on this
> file to decode it.
Understood. I’m running this in simulation right now. I will see what
I can do.
Best regards,
Sean
next prev parent reply other threads:[~2020-04-08 21:12 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-08 0:09 [RFC Patch 0/1] pciutils: Add basic decode support for CXL Sean V Kelley
2020-04-08 0:09 ` [RFC Patch 1/1] lspci: Add basic decode support for Compute eXpress Link Sean V Kelley
2020-04-08 16:56 ` Bjorn Helgaas
2020-04-08 21:12 ` Sean V Kelley [this message]
2020-04-08 21:47 ` Bjorn Helgaas
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=1766804A-54D2-4977-975A-9E9F29EFC155@linux.intel.com \
--to=sean.v.kelley@linux.intel.com \
--cc=helgaas@kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=mj@ucw.cz \
/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).