Jason Wang
2023-Mar-23 04:12 UTC
[PATCH v3 virtio 2/8] pds_vdpa: Add new vDPA driver for AMD/Pensando DSC
On Thu, Mar 23, 2023 at 3:11?AM Shannon Nelson <shannon.nelson at amd.com> wrote:> > This is the initial auxiliary driver framework for a new vDPA > device driver, an auxiliary_bus client of the pds_core driver. > The pds_core driver supplies the PCI services for the VF device > and for accessing the adminq in the PF device. > > This patch adds the very basics of registering for the auxiliary > device and setting up debugfs entries. > > Signed-off-by: Shannon Nelson <shannon.nelson at amd.com>Acked-by: Jason Wang <jasowang at redhat.com> Thanks> --- > drivers/vdpa/Makefile | 1 + > drivers/vdpa/pds/Makefile | 8 ++++ > drivers/vdpa/pds/aux_drv.c | 84 ++++++++++++++++++++++++++++++++++++ > drivers/vdpa/pds/aux_drv.h | 15 +++++++ > drivers/vdpa/pds/debugfs.c | 29 +++++++++++++ > drivers/vdpa/pds/debugfs.h | 18 ++++++++ > include/linux/pds/pds_vdpa.h | 10 +++++ > 7 files changed, 165 insertions(+) > create mode 100644 drivers/vdpa/pds/Makefile > create mode 100644 drivers/vdpa/pds/aux_drv.c > create mode 100644 drivers/vdpa/pds/aux_drv.h > create mode 100644 drivers/vdpa/pds/debugfs.c > create mode 100644 drivers/vdpa/pds/debugfs.h > create mode 100644 include/linux/pds/pds_vdpa.h > > diff --git a/drivers/vdpa/Makefile b/drivers/vdpa/Makefile > index 59396ff2a318..8f53c6f3cca7 100644 > --- a/drivers/vdpa/Makefile > +++ b/drivers/vdpa/Makefile > @@ -7,3 +7,4 @@ obj-$(CONFIG_MLX5_VDPA) += mlx5/ > obj-$(CONFIG_VP_VDPA) += virtio_pci/ > obj-$(CONFIG_ALIBABA_ENI_VDPA) += alibaba/ > obj-$(CONFIG_SNET_VDPA) += solidrun/ > +obj-$(CONFIG_PDS_VDPA) += pds/ > diff --git a/drivers/vdpa/pds/Makefile b/drivers/vdpa/pds/Makefile > new file mode 100644 > index 000000000000..a9cd2f450ae1 > --- /dev/null > +++ b/drivers/vdpa/pds/Makefile > @@ -0,0 +1,8 @@ > +# SPDX-License-Identifier: GPL-2.0-only > +# Copyright(c) 2023 Advanced Micro Devices, Inc > + > +obj-$(CONFIG_PDS_VDPA) := pds_vdpa.o > + > +pds_vdpa-y := aux_drv.o > + > +pds_vdpa-$(CONFIG_DEBUG_FS) += debugfs.o > diff --git a/drivers/vdpa/pds/aux_drv.c b/drivers/vdpa/pds/aux_drv.c > new file mode 100644 > index 000000000000..39c03f067b77 > --- /dev/null > +++ b/drivers/vdpa/pds/aux_drv.c > @@ -0,0 +1,84 @@ > +// SPDX-License-Identifier: GPL-2.0-only > +/* Copyright(c) 2023 Advanced Micro Devices, Inc */ > + > +#include <linux/auxiliary_bus.h> > +#include <linux/pci.h> > + > +#include <linux/pds/pds_common.h> > +#include <linux/pds/pds_core_if.h> > +#include <linux/pds/pds_adminq.h> > +#include <linux/pds/pds_auxbus.h> > +#include <linux/pds/pds_vdpa.h> > + > +#include "aux_drv.h" > +#include "debugfs.h" > + > +static const struct auxiliary_device_id pds_vdpa_id_table[] = { > + { .name = PDS_VDPA_DEV_NAME, }, > + {}, > +}; > + > +static int pds_vdpa_probe(struct auxiliary_device *aux_dev, > + const struct auxiliary_device_id *id) > + > +{ > + struct pds_auxiliary_dev *padev > + container_of(aux_dev, struct pds_auxiliary_dev, aux_dev); > + struct pds_vdpa_aux *vdpa_aux; > + > + vdpa_aux = kzalloc(sizeof(*vdpa_aux), GFP_KERNEL); > + if (!vdpa_aux) > + return -ENOMEM; > + > + vdpa_aux->padev = padev; > + auxiliary_set_drvdata(aux_dev, vdpa_aux); > + > + return 0; > +} > + > +static void pds_vdpa_remove(struct auxiliary_device *aux_dev) > +{ > + struct pds_vdpa_aux *vdpa_aux = auxiliary_get_drvdata(aux_dev); > + struct device *dev = &aux_dev->dev; > + > + kfree(vdpa_aux); > + auxiliary_set_drvdata(aux_dev, NULL); > + > + dev_info(dev, "Removed\n"); > +} > + > +static struct auxiliary_driver pds_vdpa_driver = { > + .name = PDS_DEV_TYPE_VDPA_STR, > + .probe = pds_vdpa_probe, > + .remove = pds_vdpa_remove, > + .id_table = pds_vdpa_id_table, > +}; > + > +static void __exit pds_vdpa_cleanup(void) > +{ > + auxiliary_driver_unregister(&pds_vdpa_driver); > + > + pds_vdpa_debugfs_destroy(); > +} > +module_exit(pds_vdpa_cleanup); > + > +static int __init pds_vdpa_init(void) > +{ > + int err; > + > + pds_vdpa_debugfs_create(); > + > + err = auxiliary_driver_register(&pds_vdpa_driver); > + if (err) { > + pr_err("%s: aux driver register failed: %pe\n", > + PDS_VDPA_DRV_NAME, ERR_PTR(err)); > + pds_vdpa_debugfs_destroy(); > + } > + > + return err; > +} > +module_init(pds_vdpa_init); > + > +MODULE_DESCRIPTION(PDS_VDPA_DRV_DESCRIPTION); > +MODULE_AUTHOR("Advanced Micro Devices, Inc"); > +MODULE_LICENSE("GPL"); > diff --git a/drivers/vdpa/pds/aux_drv.h b/drivers/vdpa/pds/aux_drv.h > new file mode 100644 > index 000000000000..14e465944dfd > --- /dev/null > +++ b/drivers/vdpa/pds/aux_drv.h > @@ -0,0 +1,15 @@ > +/* SPDX-License-Identifier: GPL-2.0-only */ > +/* Copyright(c) 2023 Advanced Micro Devices, Inc */ > + > +#ifndef _AUX_DRV_H_ > +#define _AUX_DRV_H_ > + > +#define PDS_VDPA_DRV_DESCRIPTION "AMD/Pensando vDPA VF Device Driver" > +#define PDS_VDPA_DRV_NAME "pds_vdpa" > + > +struct pds_vdpa_aux { > + struct pds_auxiliary_dev *padev; > + > + struct dentry *dentry; > +}; > +#endif /* _AUX_DRV_H_ */ > diff --git a/drivers/vdpa/pds/debugfs.c b/drivers/vdpa/pds/debugfs.c > new file mode 100644 > index 000000000000..12e844f96ccc > --- /dev/null > +++ b/drivers/vdpa/pds/debugfs.c > @@ -0,0 +1,29 @@ > +// SPDX-License-Identifier: GPL-2.0-only > +/* Copyright(c) 2023 Advanced Micro Devices, Inc */ > + > +#include <linux/pci.h> > + > +#include <linux/pds/pds_common.h> > +#include <linux/pds/pds_core_if.h> > +#include <linux/pds/pds_adminq.h> > +#include <linux/pds/pds_auxbus.h> > + > +#include "aux_drv.h" > +#include "debugfs.h" > + > +#ifdef CONFIG_DEBUG_FS > + > +static struct dentry *dbfs_dir; > + > +void pds_vdpa_debugfs_create(void) > +{ > + dbfs_dir = debugfs_create_dir(PDS_VDPA_DRV_NAME, NULL); > +} > + > +void pds_vdpa_debugfs_destroy(void) > +{ > + debugfs_remove_recursive(dbfs_dir); > + dbfs_dir = NULL; > +} > + > +#endif /* CONFIG_DEBUG_FS */ > diff --git a/drivers/vdpa/pds/debugfs.h b/drivers/vdpa/pds/debugfs.h > new file mode 100644 > index 000000000000..fff078a869e5 > --- /dev/null > +++ b/drivers/vdpa/pds/debugfs.h > @@ -0,0 +1,18 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +/* Copyright(c) 2023 Advanced Micro Devices, Inc */ > + > +#ifndef _PDS_VDPA_DEBUGFS_H_ > +#define _PDS_VDPA_DEBUGFS_H_ > + > +#include <linux/debugfs.h> > + > +#ifdef CONFIG_DEBUG_FS > + > +void pds_vdpa_debugfs_create(void); > +void pds_vdpa_debugfs_destroy(void); > +#else > +static inline void pds_vdpa_debugfs_create(void) { } > +static inline void pds_vdpa_debugfs_destroy(void) { } > +#endif > + > +#endif /* _PDS_VDPA_DEBUGFS_H_ */ > diff --git a/include/linux/pds/pds_vdpa.h b/include/linux/pds/pds_vdpa.h > new file mode 100644 > index 000000000000..d3414536985d > --- /dev/null > +++ b/include/linux/pds/pds_vdpa.h > @@ -0,0 +1,10 @@ > +/* SPDX-License-Identifier: GPL-2.0-only */ > +/* Copyright(c) 2023 Advanced Micro Devices, Inc */ > + > +#ifndef _PDS_VDPA_H_ > +#define _PDS_VDPA_H_ > + > +#define PDS_DEV_TYPE_VDPA_STR "vDPA" > +#define PDS_VDPA_DEV_NAME PDS_CORE_DRV_NAME "." PDS_DEV_TYPE_VDPA_STR > + > +#endif /* _PDS_VDPA_H_ */ > -- > 2.17.1 >