From: Jonathan Cameron <Jonathan.Cameron@Huawei.com>
To: Dan Williams <dan.j.williams@intel.com>
Cc: <linux-cxl@vger.kernel.org>,
Ben Widawsky <ben.widawsky@intel.com>,
<linux-pci@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<linux-acpi@vger.kernel.org>
Subject: Re: [PATCH v3 0/8] CXL Port Enumeration and Plans for v5.14
Date: Mon, 10 May 2021 18:22:49 +0100 [thread overview]
Message-ID: <20210510182249.0000267f@Huawei.com> (raw)
In-Reply-To: <162042787450.1202325.5718541949681409566.stgit@dwillia2-desk3.amr.corp.intel.com>
On Fri, 7 May 2021 15:51:14 -0700
Dan Williams <dan.j.williams@intel.com> wrote:
> Changes since v2 [1]:
> - Add some rationale for moving definitions out of mem.c into mem.h
> (Jonathan)
>
> - Fixup CXL_DEVICE_REGS kernel doc and declare the fixup for the
> struct cxl_mem kernel-doc in the changelog (Jonathan)
>
> - Fixup cxl_setup_device_regs() kernel-doc (Jonathan)
>
> - Cleanup comment in cxl_root_alloc() (Jonathan)
>
> - [not changed] refactor device creation into alloc_and_add()
> anti-pattern.
>
> - Add kernel doc to cxl_address_space_dev_add() to clarify why @host is
> needed as an arg. (Jonathan)
>
> - Describe what the port devices are representing in "cxl/port:
> Introduce cxl_port objects" (Jonathan)
>
> - Explain the rationale for /sys/bus/cxl (Bjorn)
>
> [1]: http://lore.kernel.org/r/161728744224.2474040.12854720917440712854.stgit@dwillia2-desk3.amr.corp.intel.com
Hi Dan,
What's the base for this series? Given it was nearly ready to go
(as far as I'm concerned anyway), I thought I'd give it a spin but
seems it doesn't have some changes from fixes that have gone upstream.
Thanks,
Jonathan
>
> ---
>
> Plans for v5.14:
>
> This series is a starting point for the persistent memory and dynamic
> HDM decoder manipulation support targeting the v5.14 kernel. Among the
> tasks to complete in that timeframe are:
>
> - Region creation including CXL label support
> - LIBNVDIMM integration for surfacing /dev/pmemX and /dev/daxX.Y devices
> on CXL resources
> - HDM decoder enumeration and programming for setting up PMEM mappings
> alongside any "System RAM" mappings established by platform firmware
> - CDAT-DOE support in support of dynamically created NUMA nodes
> - CXL PMEM Shutdown semantics (global persistence flush coordination)
>
> Contributions to cxl.git targeting the next merge window require a
> non-author Reviewed-by. A patch with a Reviewed-by, no outstanding
> objections, and a 3-5 day quiet period on the list is subject to be
> applied to a non-rebasing cxl.git branch and merged into cxl.git/next.
> Contributions targeting a current -rc (fixes) may go in on an expedited
> schedule with only an Acked-by.
>
> ---
>
> CXL Port Topology:
>
> The enumeration starts with the ACPI0017 driver registering a 'struct
> cxl_root' object to establish the top of a cxl_port topology. It then
> scans the ACPI bus looking for ACPI0016 instances. The cxl_root object
> is a singleton* anchor to hang "address-space" objects and be a parent
> device for the downstream 'struct cxl_port' instances. An address-space
> has a 1:1 relationship with a platform defined memory resource range,
> like _CRS for PCIE Host Bridges. Use module parameters to model a
> root-level HDM decoder that all downstream ports further decode, to be
> replaced with a Code First ECN to do the same.
>
> Each address space is modeled as a sysfs object that also shows up in
> /proc/iomem as "CXL Address Space". That iomem resource is functionally
> equivalent to the root-level 'PCI Bus' resources for PCIE.mmio while
> 'CXL Address Space' indicates space for CXL.mem to be mapped. "System
> RAM" and "Persistent Memory", when mapped by HDM decoders, will appear
> as child CXL.mem resources.
>
> Once a 'struct cxl_root' is established the host bridge is modeled as 1
> upstream 'struct cxl_port' and N downstream 'struct cxl_port' instances
> (one per Root Port), just like a PCIE switch. The host-bridge upstream
> port optionally has the HDM decoder registers from the CHBCR if the
> host-bridge has multiple PCIE/CXL root ports. Single-ported host bridges
> will not have HDM decoders in the CHBCR space (see CHBCR note in
> 8.2.5.12 CXL HDM Decoder Capability Structure), but the 'struct
> cxl_port' object is still needed to represent other CXL capabilities and
> access port-specific component registers outside of HDM decoders.
>
> Each 'struct cxl_port' has a 'target_id' attribute that answers the
> question "what port am I in my upstream port's HDM decoder target
> list?". For the host-bridge struct cxl_port, the first tier of ports
> below cxl_root.port, the id is derived from the ordinal mapping of the
> ACPI0016 id (instance id, _UID, or other handle TBD), for all other
> ports the id is the PCIE Root Port ID from the Link Capabilities
> register [1]. The mapping of ordinal port identifiers relative to their
> parent may change once libcxl and cxl-cli prove out region creation, or
> a better option is found to establish a static device path / persistent
> naming scheme. System software must not assume that 'struct cxl_port'
> device names will be static from one boot to the next.
>
> See patch7 for a tree(1) topology picture of what QEMU is producing
> today with this enabling.
>
> * cxl_root is singleton only by convention. A given cxl_root could
> represent 1 to N address spaces, this patch set chooses to implement 1
> cxl_root for all address spaces.
>
> [1]: CXL 2.0 8.2.5.12.8 CXL HDM Decoder 0 Target List Low Register
> (Offset 24h) ...The Target Port Identifier for a given Downstream Port
> is reported via Port Number field in Link Capabilities Register. (See
> PCI Express Base Specification).
>
> ---
>
> Dan Williams (8):
> cxl/mem: Move some definitions to mem.h
> cxl/mem: Introduce 'struct cxl_regs' for "composable" CXL devices
> cxl/core: Rename bus.c to core.c
> cxl/core: Refactor CXL register lookup for bridge reuse
> cxl/acpi: Introduce ACPI0017 driver and cxl_root
> cxl/Kconfig: Default drivers to CONFIG_CXL_BUS
> cxl/port: Introduce cxl_port objects
> cxl/acpi: Add module parameters to stand in for ACPI tables
>
>
> Documentation/driver-api/cxl/memory-devices.rst | 6
> drivers/cxl/Kconfig | 16 +
> drivers/cxl/Makefile | 6
> drivers/cxl/acpi.c | 215 +++++++++
> drivers/cxl/bus.c | 29 -
> drivers/cxl/core.c | 561 +++++++++++++++++++++++
> drivers/cxl/cxl.h | 148 ++++--
> drivers/cxl/mem.c | 97 +---
> drivers/cxl/mem.h | 82 +++
> 9 files changed, 999 insertions(+), 161 deletions(-)
> create mode 100644 drivers/cxl/acpi.c
> delete mode 100644 drivers/cxl/bus.c
> create mode 100644 drivers/cxl/core.c
> create mode 100644 drivers/cxl/mem.h
>
> base-commit: a38fd8748464831584a19438cbb3082b5a2dab15
next prev parent reply other threads:[~2021-05-10 17:24 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-07 22:51 [PATCH v3 0/8] CXL Port Enumeration and Plans for v5.14 Dan Williams
2021-05-07 22:51 ` [PATCH 1/8] cxl/mem: Move some definitions to mem.h Dan Williams
2021-05-10 15:14 ` Jonathan Cameron
2021-05-12 6:20 ` Dan Williams
2021-05-07 22:51 ` [PATCH 2/8] cxl/mem: Introduce 'struct cxl_regs' for "composable" CXL devices Dan Williams
2021-05-10 15:17 ` Jonathan Cameron
2021-05-12 6:26 ` Dan Williams
2021-05-07 22:51 ` [PATCH 3/8] cxl/core: Rename bus.c to core.c Dan Williams
2021-05-10 15:17 ` Jonathan Cameron
2021-05-07 22:51 ` [PATCH 4/8] cxl/core: Refactor CXL register lookup for bridge reuse Dan Williams
2021-05-07 22:51 ` [PATCH 5/8] cxl/acpi: Introduce ACPI0017 driver and cxl_root Dan Williams
2021-05-10 14:56 ` Jonathan Cameron
2021-05-12 6:29 ` Dan Williams
2021-05-07 22:51 ` [PATCH 6/8] cxl/Kconfig: Default drivers to CONFIG_CXL_BUS Dan Williams
2021-05-10 15:18 ` Jonathan Cameron
2021-05-07 22:51 ` [PATCH 7/8] cxl/port: Introduce cxl_port objects Dan Williams
2021-05-08 2:24 ` kernel test robot
2021-05-08 2:24 ` kernel test robot
2021-05-10 15:21 ` Jonathan Cameron
2021-05-12 6:36 ` Dan Williams
2021-05-07 22:52 ` [PATCH 8/8] cxl/acpi: Add module parameters to stand in for ACPI tables Dan Williams
2021-05-10 17:22 ` Jonathan Cameron [this message]
2021-05-10 17:31 ` [PATCH v3 0/8] CXL Port Enumeration and Plans for v5.14 Dan Williams
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=20210510182249.0000267f@Huawei.com \
--to=jonathan.cameron@huawei.com \
--cc=ben.widawsky@intel.com \
--cc=dan.j.williams@intel.com \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-cxl@vger.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 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.