[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 1/1] vpci: Add resizable bar support
On 2024/12/10 19:30, Roger Pau Monné wrote: > On Mon, Dec 02, 2024 at 02:09:56PM +0800, Jiqian Chen wrote: >> Some devices, like discrete GPU of amd, support resizable bar >> capability, but vpci of Xen doesn't support this feature, so >> they fail to resize bars and then cause probing failure. >> >> According to PCIe spec, each bar that supports resizing has >> two registers, PCI_REBAR_CAP and PCI_REBAR_CTRL. So, add >> handlers for them to support resizing the size of BARs. >> >> Signed-off-by: Jiqian Chen <Jiqian.Chen@xxxxxxx> >> --- >> Hi all, >> >> v2->v1 changes: >> *In rebar_ctrl_write, to check if memory decoding is enabled, and added >> some checks for the type of Bar. >> *Added vpci_hw_write32 to handle PCI_REBAR_CAP's write, since there is >> no write limitation of dom0. >> *And has many other minor modifications as well. >> >> Best regards, >> Jiqian Chen. >> --- >> xen/drivers/vpci/Makefile | 2 +- >> xen/drivers/vpci/rebar.c | 93 ++++++++++++++++++++++++++++++++++++++ >> xen/drivers/vpci/vpci.c | 6 +++ >> xen/include/xen/pci_regs.h | 11 +++++ >> xen/include/xen/vpci.h | 2 + >> 5 files changed, 113 insertions(+), 1 deletion(-) >> create mode 100644 xen/drivers/vpci/rebar.c >> >> diff --git a/xen/drivers/vpci/Makefile b/xen/drivers/vpci/Makefile >> index 1a1413b93e76..a7c8a30a8956 100644 >> --- a/xen/drivers/vpci/Makefile >> +++ b/xen/drivers/vpci/Makefile >> @@ -1,2 +1,2 @@ >> -obj-y += vpci.o header.o >> +obj-y += vpci.o header.o rebar.o >> obj-$(CONFIG_HAS_PCI_MSI) += msi.o msix.o >> diff --git a/xen/drivers/vpci/rebar.c b/xen/drivers/vpci/rebar.c >> new file mode 100644 >> index 000000000000..156e8d337426 >> --- /dev/null >> +++ b/xen/drivers/vpci/rebar.c >> @@ -0,0 +1,93 @@ >> +/* SPDX-License-Identifier: GPL-2.0-or-later */ >> +/* >> + * Copyright (C) 2024 Advanced Micro Devices, Inc. All Rights Reserved. >> + * >> + * Author: Jiqian Chen <Jiqian.Chen@xxxxxxx> >> + */ >> + >> +#include <xen/hypercall.h> >> +#include <xen/vpci.h> >> + >> +static void cf_check rebar_ctrl_write(const struct pci_dev *pdev, >> + unsigned int reg, >> + uint32_t val, >> + void *data) >> +{ >> + uint64_t size; >> + unsigned int index; >> + struct vpci_bar *bars = data; >> + >> + if ( pci_conf_read16(pdev->sbdf, PCI_COMMAND) & PCI_COMMAND_MEMORY ) >> + return; >> + >> + index = pci_conf_read32(pdev->sbdf, reg) & PCI_REBAR_CTRL_BAR_IDX; >> + if ( index >= PCI_HEADER_NORMAL_NR_BARS ) >> + return; >> + >> + if ( bars[index].type != VPCI_BAR_MEM64_LO && >> + bars[index].type != VPCI_BAR_MEM32 ) >> + return; > > For those early returns that don't propagate the write to the > register, we need to log a message to notice the write has been > dropped, otherwise there's no way to identify such cases. Will add some warning logs in next version. > > Thanks, Roger. -- Best regards, Jiqian Chen.
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |