mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 04:31:50 +00:00
pds_vdpa: virtio bar setup for vdpa
Prep and use the "modern" virtio bar utilities to get our virtio config space ready. Signed-off-by: Shannon Nelson <shannon.nelson@amd.com> Acked-by: Jason Wang <jasowang@redhat.com> Message-Id: <20230519215632.12343-8-shannon.nelson@amd.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
25d1270b6e
commit
94591894df
@ -4,6 +4,7 @@
|
||||
#include <linux/auxiliary_bus.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/vdpa.h>
|
||||
#include <linux/virtio_pci_modern.h>
|
||||
|
||||
#include <linux/pds/pds_common.h>
|
||||
#include <linux/pds/pds_core_if.h>
|
||||
@ -19,12 +20,22 @@ static const struct auxiliary_device_id pds_vdpa_id_table[] = {
|
||||
{},
|
||||
};
|
||||
|
||||
static int pds_vdpa_device_id_check(struct pci_dev *pdev)
|
||||
{
|
||||
if (pdev->device != PCI_DEVICE_ID_PENSANDO_VDPA_VF ||
|
||||
pdev->vendor != PCI_VENDOR_ID_PENSANDO)
|
||||
return -ENODEV;
|
||||
|
||||
return PCI_DEVICE_ID_PENSANDO_VDPA_VF;
|
||||
}
|
||||
|
||||
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 device *dev = &aux_dev->dev;
|
||||
struct pds_vdpa_aux *vdpa_aux;
|
||||
int err;
|
||||
|
||||
@ -41,8 +52,21 @@ static int pds_vdpa_probe(struct auxiliary_device *aux_dev,
|
||||
if (err)
|
||||
goto err_free_mem;
|
||||
|
||||
/* Find the virtio configuration */
|
||||
vdpa_aux->vd_mdev.pci_dev = padev->vf_pdev;
|
||||
vdpa_aux->vd_mdev.device_id_check = pds_vdpa_device_id_check;
|
||||
vdpa_aux->vd_mdev.dma_mask = DMA_BIT_MASK(PDS_CORE_ADDR_LEN);
|
||||
err = vp_modern_probe(&vdpa_aux->vd_mdev);
|
||||
if (err) {
|
||||
dev_err(dev, "Unable to probe for virtio configuration: %pe\n",
|
||||
ERR_PTR(err));
|
||||
goto err_free_mgmt_info;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err_free_mgmt_info:
|
||||
pci_free_irq_vectors(padev->vf_pdev);
|
||||
err_free_mem:
|
||||
kfree(vdpa_aux);
|
||||
auxiliary_set_drvdata(aux_dev, NULL);
|
||||
@ -55,6 +79,7 @@ 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;
|
||||
|
||||
vp_modern_remove(&vdpa_aux->vd_mdev);
|
||||
pci_free_irq_vectors(vdpa_aux->padev->vf_pdev);
|
||||
|
||||
kfree(vdpa_aux);
|
||||
|
@ -4,6 +4,8 @@
|
||||
#ifndef _AUX_DRV_H_
|
||||
#define _AUX_DRV_H_
|
||||
|
||||
#include <linux/virtio_pci_modern.h>
|
||||
|
||||
#define PDS_VDPA_DRV_DESCRIPTION "AMD/Pensando vDPA VF Device Driver"
|
||||
#define PDS_VDPA_DRV_NAME KBUILD_MODNAME
|
||||
|
||||
@ -16,6 +18,7 @@ struct pds_vdpa_aux {
|
||||
|
||||
int vf_id;
|
||||
struct dentry *dentry;
|
||||
struct virtio_pci_modern_device vd_mdev;
|
||||
|
||||
int nintrs;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user