summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrii Pauk <Andrii.Pauk@opensynergy.com>2022-01-12 18:22:51 +0200
committerMarge Bot <emma+marge@anholt.net>2022-02-08 17:53:21 +0000
commitcf4de7d8ffaef30521a98a07ec5a02716ac2b243 (patch)
treecf952ae93b78ee69c7e2569ed3b2b6073d0c6c02
parent5e9df85b1a4504c5b4162e77e139056dc80accc6 (diff)
venus: Allow usage of virtio-mmio based device
Libdrm reports bustype as DRM_BUS_PLATFORM for virtio-mmio based device. DRM_BUS_PCI is reported only for virtio-pci based devices. Add possibility to use devices with DRM_BUS_PLATFORM. Signed-off-by: Andrii Pauk <Andrii.Pauk@opensynergy.com> Reviewed-by: Chia-I Wu <olvaffe@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14531>
-rw-r--r--src/virtio/vulkan/vn_renderer_virtgpu.c43
1 files changed, 31 insertions, 12 deletions
diff --git a/src/virtio/vulkan/vn_renderer_virtgpu.c b/src/virtio/vulkan/vn_renderer_virtgpu.c
index f8ea95b0f3b..627a09b62ef 100644
--- a/src/virtio/vulkan/vn_renderer_virtgpu.c
+++ b/src/virtio/vulkan/vn_renderer_virtgpu.c
@@ -91,7 +91,9 @@ struct virtgpu {
int fd;
int version_minor;
- drmPciBusInfo bus_info;
+
+ int bustype;
+ drmPciBusInfo pci_bus_info;
uint32_t max_sync_queue_count;
@@ -1368,11 +1370,15 @@ virtgpu_get_info(struct vn_renderer *renderer, struct vn_renderer_info *info)
info->pci.vendor_id = VIRTGPU_PCI_VENDOR_ID;
info->pci.device_id = VIRTGPU_PCI_DEVICE_ID;
- info->pci.has_bus_info = true;
- info->pci.domain = gpu->bus_info.domain;
- info->pci.bus = gpu->bus_info.bus;
- info->pci.device = gpu->bus_info.dev;
- info->pci.function = gpu->bus_info.func;
+ if (gpu->bustype == DRM_BUS_PCI) {
+ info->pci.has_bus_info = true;
+ info->pci.domain = gpu->pci_bus_info.domain;
+ info->pci.bus = gpu->pci_bus_info.bus;
+ info->pci.device = gpu->pci_bus_info.dev;
+ info->pci.function = gpu->pci_bus_info.func;
+ } else {
+ info->pci.has_bus_info = false;
+ }
info->has_dma_buf_import = true;
/* Kernel makes every mapping coherent. We are better off filtering
@@ -1512,11 +1518,22 @@ virtgpu_init_params(struct virtgpu *gpu)
static VkResult
virtgpu_open_device(struct virtgpu *gpu, const drmDevicePtr dev)
{
- /* skip unless the device has our PCI vendor/device id and a render node */
- if (!(dev->available_nodes & (1 << DRM_NODE_RENDER)) ||
- dev->bustype != DRM_BUS_PCI ||
- dev->deviceinfo.pci->vendor_id != VIRTGPU_PCI_VENDOR_ID ||
- dev->deviceinfo.pci->device_id != VIRTGPU_PCI_DEVICE_ID) {
+ bool supported_bus = false;
+
+ switch (dev->bustype) {
+ case DRM_BUS_PCI:
+ if (dev->deviceinfo.pci->vendor_id == VIRTGPU_PCI_VENDOR_ID &&
+ dev->deviceinfo.pci->device_id == VIRTGPU_PCI_DEVICE_ID)
+ supported_bus = true;
+ break;
+ case DRM_BUS_PLATFORM:
+ supported_bus = true;
+ break;
+ default:
+ break;
+ }
+
+ if (!supported_bus || !(dev->available_nodes & (1 << DRM_NODE_RENDER))) {
if (VN_DEBUG(INIT)) {
const char *name = "unknown";
for (uint32_t i = 0; i < DRM_NODE_MAX; i++) {
@@ -1558,7 +1575,9 @@ virtgpu_open_device(struct virtgpu *gpu, const drmDevicePtr dev)
gpu->fd = fd;
gpu->version_minor = version->version_minor;
- gpu->bus_info = *dev->businfo.pci;
+ gpu->bustype = dev->bustype;
+ if (dev->bustype == DRM_BUS_PCI)
+ gpu->pci_bus_info = *dev->businfo.pci;
drmFreeVersion(version);