]> xenbits.xensource.com Git - unikraft/unikraft.git/commitdiff
drivers/virtio/mmio: Make fdt discovery optional
authorMichalis Pappas <michalis@unikraft.io>
Fri, 15 Sep 2023 18:29:45 +0000 (20:29 +0200)
committerRazvan Deaconescu <razvand@unikraft.io>
Fri, 20 Oct 2023 16:35:55 +0000 (19:35 +0300)
Make ftd-based discovery optional, to allow using virtio-mmio
on x86_64.

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Marco Schlumpp <marco@unikraft.io>
Reviewed-by: Rares Miculescu <miculescur@gmail.com>
Approved-by: Razvan Deaconescu <razvand@unikraft.io>
GitHub-Closes: #1116

drivers/virtio/mmio/Config.uk
drivers/virtio/mmio/virtio_mmio.c

index 85e66c7f45ac0144706fb08aa2d4062df61438a3..b893d36d0eaea4ac1659c3cdc42a598cc5f9f6ed 100644 (file)
@@ -3,9 +3,16 @@ config HAVE_MMIO
 
 config LIBVIRTIO_MMIO
        bool "Virtio MMIO transport"
-       depends on ARCH_ARM_64
+       depends on HAVE_MMIO
        depends on VIRTIO_DEVICE
-       select LIBUKOFW
-       select LIBUKINTCTLR_GIC
+       select LIBUKBUS_PLATFORM
        help
                Virtio MMIO transport.
+
+if LIBVIRTIO_MMIO
+
+config LIBVIRTIO_MMIO_FDT
+       bool
+       default y if (LIBFDT && LIBUKOFW)
+
+endif
index d1f99b6754a6c6ad195186118747d582ec681705..43083d91daffef5d3205887b9a1c20f1e908b6fd 100644 (file)
@@ -40,8 +40,6 @@
 #include <uk/intctlr.h>
 #include <uk/bus.h>
 #include <uk/bitops.h>
-#include <uk/ofw/fdt.h>
-#include <libfdt.h>
 #include <uk/plat/common/bootinfo.h>
 
 #include <uk/bus/platform.h>
 #include <virtio/virtio_bus.h>
 #include <virtio/virtqueue.h>
 #include <virtio/virtio_mmio.h>
-#include <uk/intctlr/gic.h>
+
+#if CONFIG_LIBVIRTIO_MMIO_FDT
+#include <uk/ofw/fdt.h>
+#include <libfdt.h>
+#endif /* CONFIG_LIBVIRTIO_MMIO_FDT */
 
 /*
  * The alignment to use between consumer and producer parts of vring.
@@ -417,7 +419,8 @@ static struct virtio_config_ops virtio_mmio_config_ops = {
        .vq_setup       = vm_setup_vq,
 };
 
-static int virtio_mmio_probe(struct pf_device *pfdev)
+#if CONFIG_LIBVIRTIO_MMIO_FDT
+static int virtio_mmio_probe_fdt(struct pf_device *pfdev)
 {
        int rc;
        const fdt32_t *prop;
@@ -452,6 +455,18 @@ static int virtio_mmio_probe(struct pf_device *pfdev)
                                pfdev->base, pfdev->irq);
        return 0;
 }
+#endif /* CONFIG_LIBVIRTIO_MMIO_FDT */
+
+static int virtio_mmio_probe(struct pf_device __maybe_unused *pfdev)
+{
+       int rc = -ENODEV;
+
+#if CONFIG_LIBVIRTIO_MMIO_FDT
+       rc = virtio_mmio_probe_fdt(pfdev);
+#endif /* CONFIG_LIBVIRTIO_MMIO_FDT */
+
+       return rc;
+}
 
 static int virtio_mmio_add_dev(struct pf_device *pfdev)
 {
@@ -565,8 +580,10 @@ static struct pf_driver virtio_mmio_drv = {
 };
 
 static const struct device_match_table virtio_mmio_match_table[] = {
+#if CONFIG_LIBVIRTIO_MMIO_FDT
        { .compatible = "virtio,mmio",
          .id = &virtio_mmio_ids },
+#endif /* CONFIG_LIBVIRTIO_MMIO_FDT */
        {NULL}
 };