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/auxiliary_bus.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/vdpa.h>
|
#include <linux/vdpa.h>
|
||||||
|
#include <linux/virtio_pci_modern.h>
|
||||||
|
|
||||||
#include <linux/pds/pds_common.h>
|
#include <linux/pds/pds_common.h>
|
||||||
#include <linux/pds/pds_core_if.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,
|
static int pds_vdpa_probe(struct auxiliary_device *aux_dev,
|
||||||
const struct auxiliary_device_id *id)
|
const struct auxiliary_device_id *id)
|
||||||
|
|
||||||
{
|
{
|
||||||
struct pds_auxiliary_dev *padev =
|
struct pds_auxiliary_dev *padev =
|
||||||
container_of(aux_dev, struct pds_auxiliary_dev, aux_dev);
|
container_of(aux_dev, struct pds_auxiliary_dev, aux_dev);
|
||||||
|
struct device *dev = &aux_dev->dev;
|
||||||
struct pds_vdpa_aux *vdpa_aux;
|
struct pds_vdpa_aux *vdpa_aux;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
@ -41,8 +52,21 @@ static int pds_vdpa_probe(struct auxiliary_device *aux_dev,
|
||||||
if (err)
|
if (err)
|
||||||
goto err_free_mem;
|
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;
|
return 0;
|
||||||
|
|
||||||
|
err_free_mgmt_info:
|
||||||
|
pci_free_irq_vectors(padev->vf_pdev);
|
||||||
err_free_mem:
|
err_free_mem:
|
||||||
kfree(vdpa_aux);
|
kfree(vdpa_aux);
|
||||||
auxiliary_set_drvdata(aux_dev, NULL);
|
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 pds_vdpa_aux *vdpa_aux = auxiliary_get_drvdata(aux_dev);
|
||||||
struct device *dev = &aux_dev->dev;
|
struct device *dev = &aux_dev->dev;
|
||||||
|
|
||||||
|
vp_modern_remove(&vdpa_aux->vd_mdev);
|
||||||
pci_free_irq_vectors(vdpa_aux->padev->vf_pdev);
|
pci_free_irq_vectors(vdpa_aux->padev->vf_pdev);
|
||||||
|
|
||||||
kfree(vdpa_aux);
|
kfree(vdpa_aux);
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
#ifndef _AUX_DRV_H_
|
#ifndef _AUX_DRV_H_
|
||||||
#define _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_DESCRIPTION "AMD/Pensando vDPA VF Device Driver"
|
||||||
#define PDS_VDPA_DRV_NAME KBUILD_MODNAME
|
#define PDS_VDPA_DRV_NAME KBUILD_MODNAME
|
||||||
|
|
||||||
|
@ -16,6 +18,7 @@ struct pds_vdpa_aux {
|
||||||
|
|
||||||
int vf_id;
|
int vf_id;
|
||||||
struct dentry *dentry;
|
struct dentry *dentry;
|
||||||
|
struct virtio_pci_modern_device vd_mdev;
|
||||||
|
|
||||||
int nintrs;
|
int nintrs;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue