mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 12:11:40 +00:00
pds_vdpa: Add new vDPA driver for AMD/Pensando DSC
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@amd.com> Acked-by: Jason Wang <jasowang@redhat.com> Message-Id: <20230519215632.12343-4-shannon.nelson@amd.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
5d7d82d39e
commit
a16291b5bc
@ -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/
|
||||
|
8
drivers/vdpa/pds/Makefile
Normal file
8
drivers/vdpa/pds/Makefile
Normal file
@ -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
|
83
drivers/vdpa/pds/aux_drv.c
Normal file
83
drivers/vdpa/pds/aux_drv.c
Normal file
@ -0,0 +1,83 @@
|
||||
// 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 "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");
|
15
drivers/vdpa/pds/aux_drv.h
Normal file
15
drivers/vdpa/pds/aux_drv.h
Normal file
@ -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 KBUILD_MODNAME
|
||||
|
||||
struct pds_vdpa_aux {
|
||||
struct pds_auxiliary_dev *padev;
|
||||
|
||||
struct dentry *dentry;
|
||||
};
|
||||
#endif /* _AUX_DRV_H_ */
|
25
drivers/vdpa/pds/debugfs.c
Normal file
25
drivers/vdpa/pds/debugfs.c
Normal file
@ -0,0 +1,25 @@
|
||||
// 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"
|
||||
|
||||
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;
|
||||
}
|
12
drivers/vdpa/pds/debugfs.h
Normal file
12
drivers/vdpa/pds/debugfs.h
Normal file
@ -0,0 +1,12 @@
|
||||
/* 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>
|
||||
|
||||
void pds_vdpa_debugfs_create(void);
|
||||
void pds_vdpa_debugfs_destroy(void);
|
||||
|
||||
#endif /* _PDS_VDPA_DEBUGFS_H_ */
|
@ -39,6 +39,8 @@ enum pds_core_vif_types {
|
||||
#define PDS_DEV_TYPE_RDMA_STR "RDMA"
|
||||
#define PDS_DEV_TYPE_LM_STR "LM"
|
||||
|
||||
#define PDS_VDPA_DEV_NAME PDS_CORE_DRV_NAME "." PDS_DEV_TYPE_VDPA_STR
|
||||
|
||||
#define PDS_CORE_IFNAMSIZ 16
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user