firmware: arm_scmi: Make virtio Version_1 compliance optional
authorCristian Marussi <cristian.marussi@arm.com>
Mon, 15 Nov 2021 10:29:10 +0000 (10:29 +0000)
committerSudeep Holla <sudeep.holla@arm.com>
Wed, 17 Nov 2021 11:24:51 +0000 (11:24 +0000)
Introduce a compilation option to disable strict enforcement of compliance
against VirtIO Version_1 backends, so as to allow to support also Legacy
VirtIO devices implementations.

Link: https://lore.kernel.org/r/20211115102910.7639-1-cristian.marussi@arm.com
Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
drivers/firmware/arm_scmi/Kconfig
drivers/firmware/arm_scmi/virtio.c

index da1daa5..638ecec 100644 (file)
@@ -89,6 +89,21 @@ config ARM_SCMI_TRANSPORT_VIRTIO
          If you want the ARM SCMI PROTOCOL stack to include support for a
          transport based on VirtIO, answer Y.
 
+config ARM_SCMI_TRANSPORT_VIRTIO_VERSION1_COMPLIANCE
+       bool "SCMI VirtIO transport Version 1 compliance"
+       depends on ARM_SCMI_TRANSPORT_VIRTIO
+       default y
+       help
+         This enforces strict compliance with VirtIO Version 1 specification.
+
+         If you want the ARM SCMI VirtIO transport layer to refuse to work
+         with Legacy VirtIO backends and instead support only VirtIO Version 1
+         devices (or above), answer Y.
+
+         If you want instead to support also old Legacy VirtIO backends (like
+         the ones implemented by kvmtool) and let the core Kernel VirtIO layer
+         take care of the needed conversions, say N.
+
 endif #ARM_SCMI_PROTOCOL
 
 config ARM_SCMI_POWER_DOMAIN
index c30f82c..fd0f6f9 100644 (file)
@@ -459,12 +459,13 @@ static void scmi_vio_remove(struct virtio_device *vdev)
 
 static int scmi_vio_validate(struct virtio_device *vdev)
 {
+#ifdef CONFIG_ARM_SCMI_TRANSPORT_VIRTIO_VERSION1_COMPLIANCE
        if (!virtio_has_feature(vdev, VIRTIO_F_VERSION_1)) {
                dev_err(&vdev->dev,
                        "device does not comply with spec version 1.x\n");
                return -EINVAL;
        }
-
+#endif
        return 0;
 }