From: Dave Jiang <dave.jiang@intel.com>
To: Robert Richter <rrichter@amd.com>,
Alison Schofield <alison.schofield@intel.com>,
Vishal Verma <vishal.l.verma@intel.com>,
Ira Weiny <ira.weiny@intel.com>,
Dan Williams <dan.j.williams@intel.com>,
Jonathan Cameron <Jonathan.Cameron@huawei.com>,
Davidlohr Bueso <dave@stgolabs.net>
Cc: linux-cxl@vger.kernel.org, linux-kernel@vger.kernel.org,
Gregory Price <gourry@gourry.net>,
"Fabio M. De Francesco" <fabio.m.de.francesco@linux.intel.com>,
Terry Bowman <terry.bowman@amd.com>
Subject: Re: [PATCH v5 03/14] cxl/pci: Add comments to cxl_hdm_decode_init()
Date: Mon, 28 Apr 2025 15:08:05 -0700 [thread overview]
Message-ID: <fe3e2a84-babb-470f-b7ac-03c1fbcdbc29@intel.com> (raw)
In-Reply-To: <20250428214318.1682212-4-rrichter@amd.com>
On 4/28/25 2:43 PM, Robert Richter wrote:
> There are various configuration cases of HDM decoder registers causing
> different code paths. Add comments to cxl_hdm_decode_init() to better
> explain them.
>
> Signed-off-by: Robert Richter <rrichter@amd.com>
> Reviewed-by: Gregory Price <gourry@gourry.net>
> Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> Reviewed-by: Alison Schofield <alison.schofield@intel.com>
> Reviewed-by: Fabio M. De Francesco <fabio.m.de.francesco@linux.intel.com>
> Tested-by: Gregory Price <gourry@gourry.net>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
> ---
> drivers/cxl/core/pci.c | 31 ++++++++++++++++++++++---------
> 1 file changed, 22 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/cxl/core/pci.c b/drivers/cxl/core/pci.c
> index 6386e84e51a4..80bfd8ca4f8d 100644
> --- a/drivers/cxl/core/pci.c
> +++ b/drivers/cxl/core/pci.c
> @@ -416,9 +416,19 @@ int cxl_hdm_decode_init(struct cxl_dev_state *cxlds, struct cxl_hdm *cxlhdm,
> if (global_ctrl & CXL_HDM_DECODER_ENABLE || (!hdm && info->mem_enabled))
> return devm_cxl_enable_mem(&port->dev, cxlds);
>
> + /*
> + * If the HDM Decoder Capability does not exist and DVSEC was
> + * not setup, the DVSEC based emulation cannot be used.
> + */
> if (!hdm)
> return -ENODEV;
>
> + /* The HDM Decoder Capability exists but is globally disabled. */
> +
> + /*
> + * If the DVSEC CXL Range registers are not enabled, just
> + * enable and use the HDM Decoder Capability registers.
> + */
> if (!info->mem_enabled) {
> rc = devm_cxl_enable_hdm(&port->dev, cxlhdm);
> if (rc)
> @@ -427,6 +437,18 @@ int cxl_hdm_decode_init(struct cxl_dev_state *cxlds, struct cxl_hdm *cxlhdm,
> return devm_cxl_enable_mem(&port->dev, cxlds);
> }
>
> + /*
> + * Per CXL 2.0 Section 8.1.3.8.3 and 8.1.3.8.4 DVSEC CXL Range 1 Base
> + * [High,Low] when HDM operation is enabled the range register values
> + * are ignored by the device, but the spec also recommends matching the
> + * DVSEC Range 1,2 to HDM Decoder Range 0,1. So, non-zero info->ranges
> + * are expected even though Linux does not require or maintain that
> + * match. Check if at least one DVSEC range is enabled and allowed by
> + * the platform. That is, the DVSEC range must be covered by a locked
> + * platform window (CFMWS). Fail otherwise as the endpoint's decoders
> + * cannot be used.
> + */
> +
> root = to_cxl_port(port->dev.parent);
> while (!is_cxl_root(root) && is_cxl_port(root->dev.parent))
> root = to_cxl_port(root->dev.parent);
> @@ -454,15 +476,6 @@ int cxl_hdm_decode_init(struct cxl_dev_state *cxlds, struct cxl_hdm *cxlhdm,
> return -ENXIO;
> }
>
> - /*
> - * Per CXL 2.0 Section 8.1.3.8.3 and 8.1.3.8.4 DVSEC CXL Range 1 Base
> - * [High,Low] when HDM operation is enabled the range register values
> - * are ignored by the device, but the spec also recommends matching the
> - * DVSEC Range 1,2 to HDM Decoder Range 0,1. So, non-zero info->ranges
> - * are expected even though Linux does not require or maintain that
> - * match. If at least one DVSEC range is enabled and allowed, skip HDM
> - * Decoder Capability Enable.
> - */
> return 0;
> }
> EXPORT_SYMBOL_NS_GPL(cxl_hdm_decode_init, "CXL");
next prev parent reply other threads:[~2025-04-28 22:08 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-28 21:43 [PATCH v5 00/14] cxl: Address translation support, part 1: Cleanups and refactoring Robert Richter
2025-04-28 21:43 ` [PATCH v5 01/14] cxl: Remove else after return Robert Richter
2025-04-29 1:35 ` Alison Schofield
2025-04-28 21:43 ` [PATCH v5 02/14] cxl/pci: Moving code in cxl_hdm_decode_init() Robert Richter
2025-04-28 22:07 ` Dave Jiang
2025-04-29 15:17 ` Jonathan Cameron
2025-04-28 21:43 ` [PATCH v5 03/14] cxl/pci: Add comments to cxl_hdm_decode_init() Robert Richter
2025-04-28 22:08 ` Dave Jiang [this message]
2025-04-28 21:43 ` [PATCH v5 04/14] cxl: Introduce parent_port_of() helper Robert Richter
2025-04-28 21:43 ` [PATCH v5 05/14] cxl/region: Rename function to cxl_port_pick_region_decoder() Robert Richter
2025-04-28 22:24 ` Dave Jiang
2025-04-29 15:31 ` Jonathan Cameron
2025-05-07 15:15 ` Jonathan Cameron
2025-05-05 17:20 ` Fabio M. De Francesco
2025-04-28 21:43 ` [PATCH v5 06/14] cxl/region: Avoid duplicate call of cxl_port_pick_region_decoder() Robert Richter
2025-04-28 22:28 ` Dave Jiang
2025-04-29 15:34 ` Jonathan Cameron
2025-05-05 17:51 ` Fabio M. De Francesco
2025-04-28 21:43 ` [PATCH v5 07/14] cxl/region: Move find_cxl_root() to cxl_add_to_region() Robert Richter
2025-04-28 21:43 ` [PATCH v5 08/14] cxl/port: Replace put_cxl_root() by a cleanup helper Robert Richter
2025-04-28 22:27 ` Gregory Price
2025-04-28 23:03 ` Dave Jiang
2025-04-29 15:38 ` Jonathan Cameron
2025-04-29 15:38 ` Jonathan Cameron
2025-05-05 17:55 ` Fabio M. De Francesco
2025-04-28 21:43 ` [PATCH v5 09/14] cxl/region: Factor out code to find the root decoder Robert Richter
2025-04-28 21:43 ` [PATCH v5 10/14] cxl/region: Factor out code to find a root decoder's region Robert Richter
2025-04-28 21:43 ` [PATCH v5 11/14] cxl/region: Add function to find a port's switch decoder by range Robert Richter
2025-05-05 18:18 ` Fabio M. De Francesco
2025-04-28 21:43 ` [PATCH v5 12/14] cxl/region: Add a dev_warn() on registration failure Robert Richter
2025-04-28 21:43 ` [PATCH v5 13/14] cxl/region: Add a dev_err() on missing target list entries Robert Richter
2025-04-28 21:43 ` [PATCH v5 14/14] cxl: Add a dev_dbg() when a decoder was added to a port Robert Richter
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=fe3e2a84-babb-470f-b7ac-03c1fbcdbc29@intel.com \
--to=dave.jiang@intel.com \
--cc=Jonathan.Cameron@huawei.com \
--cc=alison.schofield@intel.com \
--cc=dan.j.williams@intel.com \
--cc=dave@stgolabs.net \
--cc=fabio.m.de.francesco@linux.intel.com \
--cc=gourry@gourry.net \
--cc=ira.weiny@intel.com \
--cc=linux-cxl@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rrichter@amd.com \
--cc=terry.bowman@amd.com \
--cc=vishal.l.verma@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.