From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
To: <mst@redhat.com>, Markus Armbruster <armbru@redhat.com>,
<qemu-devel@nongnu.org>
Cc: <linuxarm@huawei.com>, <linux-cxl@vger.kernel.org>,
<marcel.apfelbaum@gmail.com>, Dave Jiang <dave.jiang@intel.com>,
Huang Ying <ying.huang@intel.com>,
Michael Roth <michael.roth@amd.com>, <fan.ni@samsung.com>
Subject: [RFC qemu 4/6] hw/pcie: Provide a utility function for control of EP / SW USP link
Date: Fri, 12 Jul 2024 13:24:12 +0100 [thread overview]
Message-ID: <20240712122414.1448284-5-Jonathan.Cameron@huawei.com> (raw)
In-Reply-To: <20240712122414.1448284-1-Jonathan.Cameron@huawei.com>
Whilst similar to existing PCIESlot link configuration a few registers
need to be set differently so that the downstream device presents
a 'configured' state that is then used to 'train' the upstream port
on the link. Basically that means setting the status register to
reflect it succeeding in training up to target settings.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
include/hw/pci/pcie.h | 2 ++
hw/pci/pcie.c | 18 ++++++++++++++++++
2 files changed, 20 insertions(+)
diff --git a/include/hw/pci/pcie.h b/include/hw/pci/pcie.h
index 5eddb90976..b8d59732bc 100644
--- a/include/hw/pci/pcie.h
+++ b/include/hw/pci/pcie.h
@@ -141,6 +141,8 @@ void pcie_acs_reset(PCIDevice *dev);
void pcie_ari_init(PCIDevice *dev, uint16_t offset);
void pcie_dev_ser_num_init(PCIDevice *dev, uint16_t offset, uint64_t ser_num);
void pcie_ats_init(PCIDevice *dev, uint16_t offset, bool aligned);
+void pcie_cap_fill_link_ep_usp(PCIDevice *dev, PCIExpLinkWidth width,
+ PCIExpLinkSpeed speed);
void pcie_cap_slot_pre_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev,
Error **errp);
diff --git a/hw/pci/pcie.c b/hw/pci/pcie.c
index b14d59573e..89734b50a2 100644
--- a/hw/pci/pcie.c
+++ b/hw/pci/pcie.c
@@ -154,6 +154,24 @@ static void pcie_cap_fill_lnk(uint8_t *exp_cap, PCIExpLinkWidth width,
}
}
+void pcie_cap_fill_link_ep_usp(PCIDevice *dev, PCIExpLinkWidth width,
+ PCIExpLinkSpeed speed)
+{
+ uint8_t *exp_cap = dev->config + dev->exp.exp_cap;
+
+ /*
+ * For an end point or USP need to set the current status as well
+ * as the capabilities.
+ */
+ pci_long_test_and_clear_mask(exp_cap + PCI_EXP_LNKSTA,
+ PCI_EXP_LNKSTA_CLS | PCI_EXP_LNKSTA_NLW);
+ pci_long_test_and_set_mask(exp_cap + PCI_EXP_LNKSTA,
+ QEMU_PCI_EXP_LNKSTA_NLW(width) |
+ QEMU_PCI_EXP_LNKSTA_CLS(speed));
+
+ pcie_cap_fill_lnk(exp_cap, width, speed);
+}
+
static void pcie_cap_fill_slot_lnk(PCIDevice *dev)
{
PCIESlot *s = (PCIESlot *)object_dynamic_cast(OBJECT(dev), TYPE_PCIE_SLOT);
--
2.43.0
next prev parent reply other threads:[~2024-07-12 12:26 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-12 12:24 [RFC qemu 0/6] hw/cxl: Link speed and width control Jonathan Cameron
2024-07-12 12:24 ` [RFC qemu 1/6] hw/pci-bridge/cxl_root_port: Provide x-speed and x-width properties Jonathan Cameron
2025-05-01 21:49 ` Philippe Mathieu-Daudé
2024-07-12 12:24 ` [RFC qemu 2/6] hw/pci-bridge/cxl_upstream: " Jonathan Cameron
2024-07-12 12:24 ` [RFC qemu 3/6] hw/pcie: Factor out PCI Express link register filing common to EP Jonathan Cameron
2024-07-12 12:24 ` Jonathan Cameron [this message]
2024-07-12 12:24 ` [RFC qemu 5/6] hw/mem/cxl-type3: Add properties to control link speed and width Jonathan Cameron
2024-07-12 12:24 ` [RFC qemu 6/6] hw/pci-bridge/cxl-upstream: " Jonathan Cameron
2024-08-28 17:00 ` [RFC qemu 0/6] hw/cxl: Link speed and width control 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=20240712122414.1448284-5-Jonathan.Cameron@huawei.com \
--to=jonathan.cameron@huawei.com \
--cc=armbru@redhat.com \
--cc=dave.jiang@intel.com \
--cc=fan.ni@samsung.com \
--cc=linux-cxl@vger.kernel.org \
--cc=linuxarm@huawei.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=michael.roth@amd.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=ying.huang@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