From: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
Add support for Xilinx ZynqMP PCI host controller to map the PCI config
space to the XEN memory.
Patch helps to understand how the generic infrastructure for PCI
host-bridge discovery will be used for future references.
Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
---
Change in v3:
- nwl_cfg_reg_index(..) as static function
- Add support for pci_host_generic_probe()
Change in v2:
- Add more info in commit msg
---
xen/arch/arm/pci/Makefile | 1 +
xen/arch/arm/pci/pci-host-zynqmp.c | 63 ++++++++++++++++++++++++++++++
2 files changed, 64 insertions(+)
create mode 100644 xen/arch/arm/pci/pci-host-zynqmp.c
diff --git a/xen/arch/arm/pci/Makefile b/xen/arch/arm/pci/Makefile
index 6f32fbbe67..1d045ade01 100644
--- a/xen/arch/arm/pci/Makefile
+++ b/xen/arch/arm/pci/Makefile
@@ -3,3 +3,4 @@ obj-y += pci-access.o
obj-y += pci-host-generic.o
obj-y += pci-host-common.o
obj-y += ecam.o
+obj-y += pci-host-zynqmp.o
diff --git a/xen/arch/arm/pci/pci-host-zynqmp.c b/xen/arch/arm/pci/pci-host-zynqmp.c
new file mode 100644
index 0000000000..6ccbfd15c9
--- /dev/null
+++ b/xen/arch/arm/pci/pci-host-zynqmp.c
@@ -0,0 +1,63 @@
+/*
+ * Based on Linux drivers/pci/controller/pci-host-common.c
+ * Based on Linux drivers/pci/controller/pci-host-generic.c
+ * Based on xen/arch/arm/pci/pci-host-generic.c
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <asm/device.h>
+#include <xen/pci.h>
+#include <asm/pci.h>
+
+static int nwl_cfg_reg_index(struct dt_device_node *np)
+{
+ return dt_property_match_string(np, "reg-names", "cfg");
+}
+
+/* ECAM ops */
+const struct pci_ecam_ops nwl_pcie_ops = {
+ .bus_shift = 20,
+ .cfg_reg_index = nwl_cfg_reg_index,
+ .pci_ops = {
+ .map_bus = pci_ecam_map_bus,
+ .read = pci_generic_config_read,
+ .write = pci_generic_config_write,
+ }
+};
+
+static const struct dt_device_match nwl_pcie_dt_match[] = {
+ { .compatible = "xlnx,nwl-pcie-2.11" },
+ { },
+};
+
+static int pci_host_generic_probe(struct dt_device_node *dev,
+ const void *data)
+{
+ return pci_host_common_probe(dev, &nwl_pcie_ops);
+}
+
+DT_DEVICE_START(pci_gen, "PCI HOST ZYNQMP", DEVICE_PCI)
+.dt_match = nwl_pcie_dt_match,
+.init = pci_host_generic_probe,
+DT_DEVICE_END
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * tab-width: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
--
2.17.1
Hi Rahul, > On 28 Sep 2021, at 19:18, Rahul Singh <rahul.singh@arm.com> wrote: > > From: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com> > > Add support for Xilinx ZynqMP PCI host controller to map the PCI config > space to the XEN memory. > > Patch helps to understand how the generic infrastructure for PCI > host-bridge discovery will be used for future references. > > Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com> As you are submitting this patch from Oleksandr: - if you modified it you should add your signed-off - if not you might as well add your reviewed-by Anyway: Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com> Cheers Bertrand > --- > Change in v3: > - nwl_cfg_reg_index(..) as static function > - Add support for pci_host_generic_probe() > Change in v2: > - Add more info in commit msg > --- > xen/arch/arm/pci/Makefile | 1 + > xen/arch/arm/pci/pci-host-zynqmp.c | 63 ++++++++++++++++++++++++++++++ > 2 files changed, 64 insertions(+) > create mode 100644 xen/arch/arm/pci/pci-host-zynqmp.c > > diff --git a/xen/arch/arm/pci/Makefile b/xen/arch/arm/pci/Makefile > index 6f32fbbe67..1d045ade01 100644 > --- a/xen/arch/arm/pci/Makefile > +++ b/xen/arch/arm/pci/Makefile > @@ -3,3 +3,4 @@ obj-y += pci-access.o > obj-y += pci-host-generic.o > obj-y += pci-host-common.o > obj-y += ecam.o > +obj-y += pci-host-zynqmp.o > diff --git a/xen/arch/arm/pci/pci-host-zynqmp.c b/xen/arch/arm/pci/pci-host-zynqmp.c > new file mode 100644 > index 0000000000..6ccbfd15c9 > --- /dev/null > +++ b/xen/arch/arm/pci/pci-host-zynqmp.c > @@ -0,0 +1,63 @@ > +/* > + * Based on Linux drivers/pci/controller/pci-host-common.c > + * Based on Linux drivers/pci/controller/pci-host-generic.c > + * Based on xen/arch/arm/pci/pci-host-generic.c > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * published by the Free Software Foundation. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program. If not, see <http://www.gnu.org/licenses/>. > + */ > + > +#include <asm/device.h> > +#include <xen/pci.h> > +#include <asm/pci.h> > + > +static int nwl_cfg_reg_index(struct dt_device_node *np) > +{ > + return dt_property_match_string(np, "reg-names", "cfg"); > +} > + > +/* ECAM ops */ > +const struct pci_ecam_ops nwl_pcie_ops = { > + .bus_shift = 20, > + .cfg_reg_index = nwl_cfg_reg_index, > + .pci_ops = { > + .map_bus = pci_ecam_map_bus, > + .read = pci_generic_config_read, > + .write = pci_generic_config_write, > + } > +}; > + > +static const struct dt_device_match nwl_pcie_dt_match[] = { > + { .compatible = "xlnx,nwl-pcie-2.11" }, > + { }, > +}; > + > +static int pci_host_generic_probe(struct dt_device_node *dev, > + const void *data) > +{ > + return pci_host_common_probe(dev, &nwl_pcie_ops); > +} > + > +DT_DEVICE_START(pci_gen, "PCI HOST ZYNQMP", DEVICE_PCI) > +.dt_match = nwl_pcie_dt_match, > +.init = pci_host_generic_probe, > +DT_DEVICE_END > + > +/* > + * Local variables: > + * mode: C > + * c-file-style: "BSD" > + * c-basic-offset: 4 > + * tab-width: 4 > + * indent-tabs-mode: nil > + * End: > + */ > -- > 2.17.1 > >
On 29.09.21 16:38, Bertrand Marquis wrote: > Hi Rahul, > >> On 28 Sep 2021, at 19:18, Rahul Singh <rahul.singh@arm.com> wrote: >> >> From: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com> >> >> Add support for Xilinx ZynqMP PCI host controller to map the PCI config >> space to the XEN memory. >> >> Patch helps to understand how the generic infrastructure for PCI >> host-bridge discovery will be used for future references. >> >> Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com> > As you are submitting this patch from Oleksandr: > - if you modified it you should add your signed-off Yes, I think that Rahul's S-o-b is required here Thank you, Oleksandr
On Tue, 28 Sep 2021, Rahul Singh wrote: > From: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com> > > Add support for Xilinx ZynqMP PCI host controller to map the PCI config > space to the XEN memory. > > Patch helps to understand how the generic infrastructure for PCI > host-bridge discovery will be used for future references. > > Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com> > --- > Change in v3: > - nwl_cfg_reg_index(..) as static function > - Add support for pci_host_generic_probe() > Change in v2: > - Add more info in commit msg > --- > xen/arch/arm/pci/Makefile | 1 + > xen/arch/arm/pci/pci-host-zynqmp.c | 63 ++++++++++++++++++++++++++++++ > 2 files changed, 64 insertions(+) > create mode 100644 xen/arch/arm/pci/pci-host-zynqmp.c > > diff --git a/xen/arch/arm/pci/Makefile b/xen/arch/arm/pci/Makefile > index 6f32fbbe67..1d045ade01 100644 > --- a/xen/arch/arm/pci/Makefile > +++ b/xen/arch/arm/pci/Makefile > @@ -3,3 +3,4 @@ obj-y += pci-access.o > obj-y += pci-host-generic.o > obj-y += pci-host-common.o > obj-y += ecam.o > +obj-y += pci-host-zynqmp.o > diff --git a/xen/arch/arm/pci/pci-host-zynqmp.c b/xen/arch/arm/pci/pci-host-zynqmp.c > new file mode 100644 > index 0000000000..6ccbfd15c9 > --- /dev/null > +++ b/xen/arch/arm/pci/pci-host-zynqmp.c > @@ -0,0 +1,63 @@ > +/* > + * Based on Linux drivers/pci/controller/pci-host-common.c > + * Based on Linux drivers/pci/controller/pci-host-generic.c > + * Based on xen/arch/arm/pci/pci-host-generic.c > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * published by the Free Software Foundation. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program. If not, see <http://www.gnu.org/licenses/>. > + */ > + > +#include <asm/device.h> > +#include <xen/pci.h> > +#include <asm/pci.h> > + > +static int nwl_cfg_reg_index(struct dt_device_node *np) > +{ > + return dt_property_match_string(np, "reg-names", "cfg"); > +} Can this be __init? > +/* ECAM ops */ > +const struct pci_ecam_ops nwl_pcie_ops = { > + .bus_shift = 20, > + .cfg_reg_index = nwl_cfg_reg_index, > + .pci_ops = { > + .map_bus = pci_ecam_map_bus, > + .read = pci_generic_config_read, > + .write = pci_generic_config_write, > + } > +}; > + > +static const struct dt_device_match nwl_pcie_dt_match[] = { This should probably be __initconst > + { .compatible = "xlnx,nwl-pcie-2.11" }, > + { }, > +}; > + > +static int pci_host_generic_probe(struct dt_device_node *dev, > + const void *data) and this could be __init > +{ > + return pci_host_common_probe(dev, &nwl_pcie_ops); > +} > + > +DT_DEVICE_START(pci_gen, "PCI HOST ZYNQMP", DEVICE_PCI) > +.dt_match = nwl_pcie_dt_match, > +.init = pci_host_generic_probe, > +DT_DEVICE_END > + > +/* > + * Local variables: > + * mode: C > + * c-file-style: "BSD" > + * c-basic-offset: 4 > + * tab-width: 4 > + * indent-tabs-mode: nil > + * End: > + */ > -- > 2.17.1 >
On 29.09.2021 18:41, Stefano Stabellini wrote: > On Tue, 28 Sep 2021, Rahul Singh wrote: >> --- /dev/null >> +++ b/xen/arch/arm/pci/pci-host-zynqmp.c >> @@ -0,0 +1,63 @@ >> +/* >> + * Based on Linux drivers/pci/controller/pci-host-common.c >> + * Based on Linux drivers/pci/controller/pci-host-generic.c >> + * Based on xen/arch/arm/pci/pci-host-generic.c >> + * >> + * This program is free software; you can redistribute it and/or modify >> + * it under the terms of the GNU General Public License version 2 as >> + * published by the Free Software Foundation. >> + * >> + * This program is distributed in the hope that it will be useful, >> + * but WITHOUT ANY WARRANTY; without even the implied warranty of >> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> + * GNU General Public License for more details. >> + * >> + * You should have received a copy of the GNU General Public License >> + * along with this program. If not, see <http://www.gnu.org/licenses/>. >> + */ >> + >> +#include <asm/device.h> >> +#include <xen/pci.h> >> +#include <asm/pci.h> >> + >> +static int nwl_cfg_reg_index(struct dt_device_node *np) >> +{ >> + return dt_property_match_string(np, "reg-names", "cfg"); >> +} > > Can this be __init? > > >> +/* ECAM ops */ >> +const struct pci_ecam_ops nwl_pcie_ops = { >> + .bus_shift = 20, >> + .cfg_reg_index = nwl_cfg_reg_index, >> + .pci_ops = { >> + .map_bus = pci_ecam_map_bus, >> + .read = pci_generic_config_read, >> + .write = pci_generic_config_write, >> + } >> +}; >> + >> +static const struct dt_device_match nwl_pcie_dt_match[] = { > > This should probably be __initconst __initconstrel again as it seems. Jan
Hi Jan > On 30 Sep 2021, at 8:48 am, Jan Beulich <jbeulich@suse.com> wrote: > > On 29.09.2021 18:41, Stefano Stabellini wrote: >> On Tue, 28 Sep 2021, Rahul Singh wrote: >>> --- /dev/null >>> +++ b/xen/arch/arm/pci/pci-host-zynqmp.c >>> @@ -0,0 +1,63 @@ >>> +/* >>> + * Based on Linux drivers/pci/controller/pci-host-common.c >>> + * Based on Linux drivers/pci/controller/pci-host-generic.c >>> + * Based on xen/arch/arm/pci/pci-host-generic.c >>> + * >>> + * This program is free software; you can redistribute it and/or modify >>> + * it under the terms of the GNU General Public License version 2 as >>> + * published by the Free Software Foundation. >>> + * >>> + * This program is distributed in the hope that it will be useful, >>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of >>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >>> + * GNU General Public License for more details. >>> + * >>> + * You should have received a copy of the GNU General Public License >>> + * along with this program. If not, see <http://www.gnu.org/licenses/>. >>> + */ >>> + >>> +#include <asm/device.h> >>> +#include <xen/pci.h> >>> +#include <asm/pci.h> >>> + >>> +static int nwl_cfg_reg_index(struct dt_device_node *np) >>> +{ >>> + return dt_property_match_string(np, "reg-names", "cfg"); >>> +} >> >> Can this be __init? >> >> >>> +/* ECAM ops */ >>> +const struct pci_ecam_ops nwl_pcie_ops = { >>> + .bus_shift = 20, >>> + .cfg_reg_index = nwl_cfg_reg_index, >>> + .pci_ops = { >>> + .map_bus = pci_ecam_map_bus, >>> + .read = pci_generic_config_read, >>> + .write = pci_generic_config_write, >>> + } >>> +}; >>> + >>> +static const struct dt_device_match nwl_pcie_dt_match[] = { >> >> This should probably be __initconst > > __initconstrel again as it seems. Ack. I will use __initconstrel in next version. Regards, Rahul > > Jan >
© 2016 - 2024 Red Hat, Inc.