Linux CXL
 help / color / mirror / Atom feed
From: Dan Williams <dan.j.williams@intel.com>
To: Jonathan Cameron <Jonathan.Cameron@huawei.com>,
	Dan Williams <dan.j.williams@intel.com>
Cc: <linux-cxl@vger.kernel.org>, <ira.weiny@intel.com>,
	<navneet.singh@intel.com>
Subject: Re: [PATCH 08/19] cxl/port: Enumerate flit mode capability
Date: Tue, 13 Jun 2023 18:06:12 -0700	[thread overview]
Message-ID: <648912849903_2f4fca2945e@dwillia2-xfh.jf.intel.com.notmuch> (raw)
In-Reply-To: <20230606140419.00007a54@Huawei.com>

Jonathan Cameron wrote:
> On Sun, 04 Jun 2023 16:32:21 -0700
> Dan Williams <dan.j.williams@intel.com> wrote:
> 
> > Per CXL 3.0 Section 9.14 Back-Invalidation Configuration, in order to
> > enable an HDM-DB range (CXL.mem region with device initiated
> > back-invalidation support), all ports in the path between the endpoint and
> > the host bridge must be in 256-bit flit-mode.
> > 
> > Even for typical Type-3 class devices it is useful to enumerate link
> > capabilities through the chain for debug purposes.
> > 
> > Signed-off-by: Dan Williams <dan.j.williams@intel.com>
> 
> A few minor comments. In particularly that the field you have in here doesn't
> distinguish between 256 byte flits and otherwise.  That's done with the PCI spec
> field not this one which is about latency optimization.
> 
> > ---
> >  drivers/cxl/core/hdm.c  |    2 +
> >  drivers/cxl/core/pci.c  |   84 +++++++++++++++++++++++++++++++++++++++++++++++
> >  drivers/cxl/core/port.c |    6 +++
> >  drivers/cxl/cxl.h       |    2 +
> >  drivers/cxl/cxlpci.h    |   25 +++++++++++++-
> >  drivers/cxl/port.c      |    5 +++
> >  6 files changed, 122 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/cxl/core/hdm.c b/drivers/cxl/core/hdm.c
> > index ca3b99c6eacf..91ab3033c781 100644
> > --- a/drivers/cxl/core/hdm.c
> > +++ b/drivers/cxl/core/hdm.c
> > @@ -3,8 +3,10 @@
> >  #include <linux/seq_file.h>
> >  #include <linux/device.h>
> >  #include <linux/delay.h>
> > +#include <linux/pci.h>
> >  
> >  #include "cxlmem.h"
> > +#include "cxlpci.h"
> >  #include "core.h"
> I'm not following why link related patch should change includes in hdm relate c file?
> Maybe later once you use it this makes sense?

Definitely. I missed that this straggled in here.

> 
> 
> >  
> >  /**
> > diff --git a/drivers/cxl/core/pci.c b/drivers/cxl/core/pci.c
> > index 67f4ab6daa34..b62ec17ccdde 100644
> > --- a/drivers/cxl/core/pci.c
> > +++ b/drivers/cxl/core/pci.c
> > @@ -519,6 +519,90 @@ int cxl_hdm_decode_init(struct cxl_dev_state *cxlds, struct cxl_hdm *cxlhdm,
> 
> > +
> > +int cxl_probe_link(struct cxl_port *port)
> > +{
> > +	struct pci_dev *pdev = cxl_port_to_pci(port);
> > +	u16 cap, en, parent_features;
> > +	struct cxl_port *parent_port;
> > +	struct device *dev;
> > +	int rc, dvsec;
> > +	u32 hdr;
> > +
> > +	if (!pdev) {
> > +		/*
> > +		 * Assume host bridges support all features, the root
> > +		 * port will dictate the actual enabled set to endpoints.
> > +		 */
> > +		return 0;
> > +	}
> > +
> > +	dev = &pdev->dev;
> > +	dvsec = pci_find_dvsec_capability(pdev, PCI_DVSEC_VENDOR_ID_CXL,
> > +					  CXL_DVSEC_FLEXBUS_PORT);
> > +	if (!dvsec) {
> > +		dev_err(dev, "Failed to enumerate port capabilities\n");
> > +		return -ENXIO;
> > +	}
> > +
> > +	/*
> > +	 * Cache the link features for future determination of HDM-D or
> > +	 * HDM-DB support
> > +	 */
> > +	rc = pci_read_config_dword(pdev, dvsec + PCI_DVSEC_HEADER1, &hdr);
> > +	if (rc)
> > +		return rc;
> > +
> > +	rc = pci_read_config_word(pdev, dvsec + CXL_DVSEC_FLEXBUS_CAP_OFFSET,
> > +				  &cap);
> > +	if (rc)
> > +		return rc;
> > +
> > +	rc = pci_read_config_word(pdev, dvsec + CXL_DVSEC_FLEXBUS_STATUS_OFFSET,
> > +				  &en);
> > +	if (rc)
> > +		return rc;
> > +
> > +	if (PCI_DVSEC_HEADER1_REV(hdr) < 2)
> > +		cap &= ~CXL_DVSEC_FLEXBUS_REV2_MASK;
> > +
> > +	if (PCI_DVSEC_HEADER1_REV(hdr) < 1)
> > +		cap &= ~CXL_DVSEC_FLEXBUS_REV1_MASK;
> 
> I talk about this below, but I'd not normally expect to see this.
> Anyone who used those bits out of usage defined by later specs has buggy 
> hardware and should quirk it rather than having it built in here.

True, makes sense.

> 
> > +
> > +	en &= cap;
> > +	parent_port = to_cxl_port(port->dev.parent);
> > +	parent_features = parent_port->features;
> > +
> > +	/* Enforce port features are plumbed through to the host bridge */
> > +	port->features = en & CXL_DVSEC_FLEXBUS_ENABLE_MASK & parent_features;
> > +
> > +	dev_dbg(dev, "features:%s%s%s%s%s%s%s\n",
> > +		en & CXL_DVSEC_FLEXBUS_CACHE_ENABLED ? " cache" : "",
> > +		en & CXL_DVSEC_FLEXBUS_IO_ENABLED ? " io" : "",
> > +		en & CXL_DVSEC_FLEXBUS_MEM_ENABLED ? " mem" : "",
> > +		en & CXL_DVSEC_FLEXBUS_FLIT68_ENABLED ? " flit68" : "",
> > +		en & CXL_DVSEC_FLEXBUS_MLD_ENABLED ? " mld" : "",
> > +		en & CXL_DVSEC_FLEXBUS_FLIT256_ENABLED ? " flit256" : "",
> 
> Definitely want that text to be more explicit about latency optimized

Ok, see below, I think dropping flit size altogether from these names
makes sense.

> 
> > +		en & CXL_DVSEC_FLEXBUS_PBR_ENABLED ? " pbr" : "");
> > +
> > +	return 0;
> > +}
> > +EXPORT_SYMBOL_NS_GPL(cxl_probe_link, CXL);
> > +
> >  #define CXL_DOE_TABLE_ACCESS_REQ_CODE		0x000000ff
> >  #define   CXL_DOE_TABLE_ACCESS_REQ_CODE_READ	0
> >  #define CXL_DOE_TABLE_ACCESS_TABLE_TYPE		0x0000ff00
> 
> 
> > diff --git a/drivers/cxl/cxlpci.h b/drivers/cxl/cxlpci.h
> > index 7c02e55b8042..7f82ffb5b4be 100644
> > --- a/drivers/cxl/cxlpci.h
> > +++ b/drivers/cxl/cxlpci.h
> > @@ -45,8 +45,28 @@
> >  /* CXL 2.0 8.1.7: GPF DVSEC for CXL Device */
> >  #define CXL_DVSEC_DEVICE_GPF					5
> >  
> > -/* CXL 2.0 8.1.8: PCIe DVSEC for Flex Bus Port */
> > -#define CXL_DVSEC_PCIE_FLEXBUS_PORT				7
> > +/* CXL 3.0 8.2.1.3: PCIe DVSEC for Flex Bus Port */
> > +#define CXL_DVSEC_FLEXBUS_PORT					7
> > +#define   CXL_DVSEC_FLEXBUS_CAP_OFFSET		0xA
> > +#define     CXL_DVSEC_FLEXBUS_CACHE_CAPABLE	BIT(0)
> > +#define     CXL_DVSEC_FLEXBUS_IO_CAPABLE	BIT(1)
> > +#define     CXL_DVSEC_FLEXBUS_MEM_CAPABLE	BIT(2)
> > +#define     CXL_DVSEC_FLEXBUS_FLIT68_CAPABLE	BIT(5)
> 
> This one includes the stuff that makes it 2.0 rather than 1.1  Might need a longer
> name to avoid miss use? (I checked the 1.1 spec and reserved so would be 0).

So maybe I will drop the flit size from the name until a conflict
arises. I.e. this bit is relevant for all known flit sizes that support
VH topologies.

> 
> > +#define     CXL_DVSEC_FLEXBUS_MLD_CAPABLE	BIT(6)
> > +#define     CXL_DVSEC_FLEXBUS_REV1_MASK		GENMASK(6, 5)
> 
> Unusual approach.. Shouldn't be needed as those bits were RsvdP so
> no one should have set them and now we are supporting the new bits
> so should be good without masking.

Agree.

> 
> > +#define     CXL_DVSEC_FLEXBUS_FLIT256_CAPABLE	BIT(13)
> 
> Not just flit256, but the latency optimized one (split in two kind of
> with separate CRCs)  So this name needs to be something like
> FLEXBUS_LAT_OPT_FLIT256_CAPABLE

Until a non-flit256 latency optimized mechanism is added the flit size
is redundant in this name.

> 
> 
> > +#define     CXL_DVSEC_FLEXBUS_PBR_CAPABLE	BIT(14)
> > +#define     CXL_DVSEC_FLEXBUS_REV2_MASK		GENMASK(14, 13)
> > +#define   CXL_DVSEC_FLEXBUS_STATUS_OFFSET	0xE
> > +#define     CXL_DVSEC_FLEXBUS_CACHE_ENABLED	BIT(0)
> > +#define     CXL_DVSEC_FLEXBUS_IO_ENABLED	BIT(1)
> > +#define     CXL_DVSEC_FLEXBUS_MEM_ENABLED	BIT(2)
> > +#define     CXL_DVSEC_FLEXBUS_FLIT68_ENABLED	BIT(5)
> 
> Again, not just FLIT68, but the VH stuff from CXL 2.0 as well.
> 
> > +#define     CXL_DVSEC_FLEXBUS_MLD_ENABLED	BIT(6)
> > +#define     CXL_DVSEC_FLEXBUS_FLIT256_ENABLED	BIT(13)
> Also latency optimized is key here, not 256 bit (though you need
> that as well).
> 
> > +#define     CXL_DVSEC_FLEXBUS_PBR_ENABLED	BIT(14)
> > +#define     CXL_DVSEC_FLEXBUS_ENABLE_MASK \
> > +	(GENMASK(2, 0) | GENMASK(6, 5) | GENMASK(14, 13))
> Ok - I guess the resvP requires this dance.
> >  
> 



  reply	other threads:[~2023-06-14  1:06 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-04 23:31 [PATCH 00/19] cxl: Device memory setup Dan Williams
2023-06-04 23:31 ` [PATCH 01/19] cxl/regs: Clarify when a 'struct cxl_register_map' is input vs output Dan Williams
2023-06-05  8:46   ` Jonathan Cameron
2023-06-13 22:03   ` Dave Jiang
2023-06-04 23:31 ` [PATCH 02/19] tools/testing/cxl: Remove unused @cxlds argument Dan Williams
2023-06-06 10:53   ` Jonathan Cameron
2023-06-13 22:08   ` Dave Jiang
2023-06-04 23:31 ` [PATCH 03/19] cxl/mbox: Move mailbox related driver state to its own data structure Dan Williams
2023-06-06 11:10   ` Jonathan Cameron
2023-06-14  0:45     ` Dan Williams
2023-06-13 22:15   ` Dave Jiang
2023-06-04 23:31 ` [PATCH 04/19] cxl/memdev: Make mailbox functionality optional Dan Williams
2023-06-06 11:15   ` Jonathan Cameron
2023-06-13 20:53     ` Dan Williams
2023-06-04 23:32 ` [PATCH 05/19] cxl/port: Rename CXL_DECODER_{EXPANDER, ACCELERATOR} => {HOSTMEM, DEVMEM} Dan Williams
2023-06-06 11:21   ` Jonathan Cameron
2023-06-13 21:03     ` Dan Williams
2023-06-04 23:32 ` [PATCH 06/19] cxl/hdm: Default CXL_DEVTYPE_DEVMEM decoders to CXL_DECODER_DEVMEM Dan Williams
2023-06-06 11:27   ` Jonathan Cameron
2023-06-13 21:23     ` Dan Williams
2023-06-13 22:32     ` Dan Williams
2023-06-14  9:15       ` Jonathan Cameron
2023-06-04 23:32 ` [PATCH 07/19] cxl/region: Manage decoder target_type at decoder-attach time Dan Williams
2023-06-06 12:36   ` Jonathan Cameron
2023-06-13 22:42   ` Dave Jiang
2023-06-04 23:32 ` [PATCH 08/19] cxl/port: Enumerate flit mode capability Dan Williams
2023-06-06 13:04   ` Jonathan Cameron
2023-06-14  1:06     ` Dan Williams [this message]
2023-06-04 23:32 ` [PATCH 09/19] cxl/memdev: Formalize endpoint port linkage Dan Williams
2023-06-06 13:26   ` Jonathan Cameron
2023-06-07 16:47   ` Fan Ni
2023-06-13 22:59   ` Dave Jiang
2023-06-04 23:32 ` [PATCH 10/19] cxl/memdev: Indicate probe deferral Dan Williams
2023-06-06 13:54   ` Jonathan Cameron
2023-06-04 23:32 ` [PATCH 11/19] cxl/region: Factor out construct_region_{begin, end} and drop_region() for reuse Dan Williams
2023-06-06 14:29   ` Jonathan Cameron
2023-06-13 23:29   ` Dave Jiang
2023-06-04 23:32 ` [PATCH 12/19] cxl/region: Factor out interleave ways setup Dan Williams
2023-06-06 14:31   ` Jonathan Cameron
2023-06-13 23:30   ` Dave Jiang
2023-06-04 23:32 ` [PATCH 13/19] cxl/region: Factor out interleave granularity setup Dan Williams
2023-06-06 14:33   ` Jonathan Cameron
2023-06-13 23:42   ` Dave Jiang
2023-06-04 23:32 ` [PATCH 14/19] cxl/region: Clarify locking requirements of cxl_region_attach() Dan Williams
2023-06-06 14:35   ` Jonathan Cameron
2023-06-13 23:45   ` Dave Jiang
2023-06-04 23:33 ` [PATCH 15/19] cxl/region: Specify host-only vs device memory at region creation time Dan Williams
2023-06-06 14:42   ` Jonathan Cameron
2023-06-04 23:33 ` [PATCH 16/19] cxl/hdm: Define a driver interface for DPA allocation Dan Williams
2023-06-06 14:58   ` Jonathan Cameron
2023-06-13 23:53   ` Dave Jiang
2023-06-04 23:33 ` [PATCH 17/19] cxl/region: Define a driver interface for HPA free space enumeration Dan Williams
2023-06-06 15:23   ` Jonathan Cameron
2023-06-14  0:15   ` Dave Jiang
2023-06-04 23:33 ` [PATCH 18/19] cxl/region: Define a driver interface for region creation Dan Williams
2023-06-06 15:31   ` Jonathan Cameron
2023-06-04 23:33 ` [PATCH 19/19] tools/testing/cxl: Emulate a CXL accelerator with local memory Dan Williams
2023-06-06 15:34   ` Jonathan Cameron
2023-06-07 21:09   ` Vikram Sethi
2023-06-08 10:47     ` Jonathan Cameron
2023-06-08 14:34       ` Vikram Sethi
2023-06-08 15:22         ` Jonathan Cameron

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=648912849903_2f4fca2945e@dwillia2-xfh.jf.intel.com.notmuch \
    --to=dan.j.williams@intel.com \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=ira.weiny@intel.com \
    --cc=linux-cxl@vger.kernel.org \
    --cc=navneet.singh@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox