lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <20230531015711-mutt-send-email-mst@kernel.org> Date: Wed, 31 May 2023 02:05:42 -0400 From: "Michael S. Tsirkin" <mst@...hat.com> To: Tony Nguyen <anthony.l.nguyen@...el.com> Cc: davem@...emloft.net, kuba@...nel.org, pabeni@...hat.com, edumazet@...gle.com, netdev@...r.kernel.org, Phani Burra <phani.r.burra@...el.com>, pavan.kumar.linga@...el.com, emil.s.tantilov@...el.com, jesse.brandeburg@...el.com, sridhar.samudrala@...el.com, shiraz.saleem@...el.com, sindhu.devale@...el.com, willemb@...gle.com, decot@...gle.com, andrew@...n.ch, leon@...nel.org, simon.horman@...igine.com, shannon.nelson@....com, stephen@...workplumber.org, Alan Brady <alan.brady@...el.com>, Madhu Chittim <madhu.chittim@...el.com>, Shailendra Bhatnagar <shailendra.bhatnagar@...el.com>, Krishneil Singh <krishneil.k.singh@...el.com> Subject: Re: [PATCH net-next 02/15] idpf: add module register and probe functionality On Tue, May 30, 2023 at 04:44:48PM -0700, Tony Nguyen wrote: > From: Phani Burra <phani.r.burra@...el.com> > > Add the required support to register IDPF PCI driver, as well as > probe and remove call backs. Enable the PCI device and request > the kernel to reserve the memory resources that will be used by the > driver. Finally map the BAR0 address space. > > Signed-off-by: Phani Burra <phani.r.burra@...el.com> > Co-developed-by: Alan Brady <alan.brady@...el.com> > Signed-off-by: Alan Brady <alan.brady@...el.com> > Co-developed-by: Madhu Chittim <madhu.chittim@...el.com> > Signed-off-by: Madhu Chittim <madhu.chittim@...el.com> > Co-developed-by: Shailendra Bhatnagar <shailendra.bhatnagar@...el.com> > Signed-off-by: Shailendra Bhatnagar <shailendra.bhatnagar@...el.com> > Co-developed-by: Pavan Kumar Linga <pavan.kumar.linga@...el.com> > Signed-off-by: Pavan Kumar Linga <pavan.kumar.linga@...el.com> > Reviewed-by: Sridhar Samudrala <sridhar.samudrala@...el.com> > Reviewed-by: Willem de Bruijn <willemb@...gle.com> > Tested-by: Krishneil Singh <krishneil.k.singh@...el.com> > Signed-off-by: Tony Nguyen <anthony.l.nguyen@...el.com> > --- > drivers/net/ethernet/intel/idpf/Makefile | 9 ++ > drivers/net/ethernet/intel/idpf/idpf.h | 22 +++ > .../net/ethernet/intel/idpf/idpf_controlq.h | 14 ++ > drivers/net/ethernet/intel/idpf/idpf_devids.h | 10 ++ > drivers/net/ethernet/intel/idpf/idpf_main.c | 136 ++++++++++++++++++ > 5 files changed, 191 insertions(+) > create mode 100644 drivers/net/ethernet/intel/idpf/Makefile > create mode 100644 drivers/net/ethernet/intel/idpf/idpf.h > create mode 100644 drivers/net/ethernet/intel/idpf/idpf_controlq.h > create mode 100644 drivers/net/ethernet/intel/idpf/idpf_devids.h > create mode 100644 drivers/net/ethernet/intel/idpf/idpf_main.c > > diff --git a/drivers/net/ethernet/intel/idpf/Makefile b/drivers/net/ethernet/intel/idpf/Makefile > new file mode 100644 > index 000000000000..77f5500d7707 > --- /dev/null > +++ b/drivers/net/ethernet/intel/idpf/Makefile > @@ -0,0 +1,9 @@ > +# SPDX-License-Identifier: GPL-2.0-only > +# Copyright (C) 2023 Intel Corporation > + > +# Makefile for Infrastructure Data Path Function Linux Driver > + > +obj-$(CONFIG_IDPF) += idpf.o > + > +idpf-y := \ > + idpf_main.o > diff --git a/drivers/net/ethernet/intel/idpf/idpf.h b/drivers/net/ethernet/intel/idpf/idpf.h > new file mode 100644 > index 000000000000..08be5621140f > --- /dev/null > +++ b/drivers/net/ethernet/intel/idpf/idpf.h > @@ -0,0 +1,22 @@ > +/* SPDX-License-Identifier: GPL-2.0-only */ > +/* Copyright (C) 2023 Intel Corporation */ > + > +#ifndef _IDPF_H_ > +#define _IDPF_H_ > + > +#include <linux/aer.h> > +#include <linux/etherdevice.h> > +#include <linux/pci.h> > + > +#include "idpf_controlq.h" > + > +/* available message levels */ > +#define IDPF_AVAIL_NETIF_M (NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_LINK) > + > +struct idpf_adapter { > + struct pci_dev *pdev; > + u32 msg_enable; > + struct idpf_hw hw; > +}; > + > +#endif /* !_IDPF_H_ */ > diff --git a/drivers/net/ethernet/intel/idpf/idpf_controlq.h b/drivers/net/ethernet/intel/idpf/idpf_controlq.h > new file mode 100644 > index 000000000000..11388834cf64 > --- /dev/null > +++ b/drivers/net/ethernet/intel/idpf/idpf_controlq.h > @@ -0,0 +1,14 @@ > +/* SPDX-License-Identifier: GPL-2.0-only */ > +/* Copyright (C) 2023 Intel Corporation */ > + > +#ifndef _IDPF_CONTROLQ_H_ > +#define _IDPF_CONTROLQ_H_ > + > +struct idpf_hw { > + void __iomem *hw_addr; > + resource_size_t hw_addr_len; > + > + struct idpf_adapter *back; > +}; > + > +#endif /* _IDPF_CONTROLQ_H_ */ > diff --git a/drivers/net/ethernet/intel/idpf/idpf_devids.h b/drivers/net/ethernet/intel/idpf/idpf_devids.h > new file mode 100644 > index 000000000000..5154a52ae61c > --- /dev/null > +++ b/drivers/net/ethernet/intel/idpf/idpf_devids.h > @@ -0,0 +1,10 @@ > +/* SPDX-License-Identifier: GPL-2.0-only */ > +/* Copyright (C) 2023 Intel Corporation */ > + > +#ifndef _IDPF_DEVIDS_H_ > +#define _IDPF_DEVIDS_H_ > + > +#define IDPF_DEV_ID_PF 0x1452 > +#define IDPF_DEV_ID_VF 0x145C > + > +#endif /* _IDPF_DEVIDS_H_ */ > diff --git a/drivers/net/ethernet/intel/idpf/idpf_main.c b/drivers/net/ethernet/intel/idpf/idpf_main.c > new file mode 100644 > index 000000000000..e290f560ce14 > --- /dev/null > +++ b/drivers/net/ethernet/intel/idpf/idpf_main.c > @@ -0,0 +1,136 @@ > +// SPDX-License-Identifier: GPL-2.0-only > +/* Copyright (C) 2023 Intel Corporation */ > + > +#include "idpf.h" > +#include "idpf_devids.h" > + > +#define DRV_SUMMARY "Infrastructure Data Path Function Linux Driver" Do you want to stick Intel(R) here as well? And did you say you wanted to add a version? The point being making it possible to distinguish between this one and the one we'll hopefully have down the road binding to the IDPF class/prog ifc. > + > +MODULE_DESCRIPTION(DRV_SUMMARY); > +MODULE_LICENSE("GPL"); > + > +/** > + * idpf_remove - Device removal routine > + * @pdev: PCI device information struct > + */ > +static void idpf_remove(struct pci_dev *pdev) > +{ > + struct idpf_adapter *adapter = pci_get_drvdata(pdev); > + > + pci_disable_pcie_error_reporting(pdev); > + pci_set_drvdata(pdev, NULL); > + kfree(adapter); > +} > + > +/** > + * idpf_shutdown - PCI callback for shutting down device > + * @pdev: PCI device information struct > + */ > +static void idpf_shutdown(struct pci_dev *pdev) > +{ > + idpf_remove(pdev); > + > + if (system_state == SYSTEM_POWER_OFF) > + pci_set_power_state(pdev, PCI_D3hot); > +} > + > +/** > + * idpf_cfg_hw - Initialize HW struct > + * @adapter: adapter to setup hw struct for > + * > + * Returns 0 on success, negative on failure > + */ > +static int idpf_cfg_hw(struct idpf_adapter *adapter) > +{ > + struct pci_dev *pdev = adapter->pdev; > + struct idpf_hw *hw = &adapter->hw; > + > + hw->hw_addr = pcim_iomap_table(pdev)[0]; > + if (!hw->hw_addr) { > + pci_err(pdev, "failed to allocate PCI iomap table\n"); > + > + return -ENOMEM; > + } > + > + hw->back = adapter; > + > + return 0; > +} > + > +/** > + * idpf_probe - Device initialization routine > + * @pdev: PCI device information struct > + * @ent: entry in idpf_pci_tbl > + * > + * Returns 0 on success, negative on failure > + */ > +static int idpf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) > +{ > + struct device *dev = &pdev->dev; > + struct idpf_adapter *adapter; > + int err; > + > + adapter = kzalloc(sizeof(*adapter), GFP_KERNEL); > + if (!adapter) > + return -ENOMEM; > + adapter->pdev = pdev; > + > + err = pcim_enable_device(pdev); > + if (err) > + goto err_free; > + > + err = pcim_iomap_regions(pdev, BIT(0), pci_name(pdev)); > + if (err) { > + pci_err(pdev, "pcim_iomap_regions failed %pe\n", ERR_PTR(err)); > + > + goto err_free; > + } > + > + /* set up for high or low dma */ > + err = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(64)); > + if (err) { > + pci_err(pdev, "DMA configuration failed: %pe\n", ERR_PTR(err)); > + > + goto err_free; > + } > + > + pci_enable_pcie_error_reporting(pdev); > + pci_set_master(pdev); > + pci_set_drvdata(pdev, adapter); > + > + /* setup msglvl */ > + adapter->msg_enable = netif_msg_init(-1, IDPF_AVAIL_NETIF_M); > + > + err = idpf_cfg_hw(adapter); > + if (err) { > + dev_err(dev, "Failed to configure HW structure for adapter: %d\n", > + err); > + goto err_cfg_hw; > + } > + > + return 0; > + > +err_cfg_hw: > + pci_disable_pcie_error_reporting(pdev); > +err_free: > + kfree(adapter); > + return err; > +} > + > +/* idpf_pci_tbl - PCI Dev idpf ID Table > + */ > +static const struct pci_device_id idpf_pci_tbl[] = { > + { PCI_VDEVICE(INTEL, IDPF_DEV_ID_PF)}, > + { PCI_VDEVICE(INTEL, IDPF_DEV_ID_VF)}, > + { /* Sentinel */ } > +}; > +MODULE_DEVICE_TABLE(pci, idpf_pci_tbl); > + > +static struct pci_driver idpf_driver = { > + .name = KBUILD_MODNAME, > + .id_table = idpf_pci_tbl, > + .probe = idpf_probe, > + .remove = idpf_remove, > + .shutdown = idpf_shutdown, > +}; > +module_pci_driver(idpf_driver); > -- > 2.38.1
Powered by blists - more mailing lists