[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen staging] xen/arm: boot with device trees with "mmu-masters" and "iommus"



commit cf4af9d6d6c9116578067d94e06ad2872531380a
Author:     Stefano Stabellini <sstabellini@xxxxxxxxxx>
AuthorDate: Mon Sep 30 13:56:18 2019 -0700
Commit:     Stefano Stabellini <sstabellini@xxxxxxxxxx>
CommitDate: Fri Oct 4 10:14:00 2019 -0700

    xen/arm: boot with device trees with "mmu-masters" and "iommus"
    
    Some Device Trees may expose both legacy SMMU and generic IOMMU bindings
    together. However, the SMMU driver in Xen is only supporting the legacy
    SMMU bindings, leading to fatal initialization errors at boot time.
    
    This patch fixes the booting problem by adding a check to
    iommu_add_dt_device: if the Xen driver doesn't support the new generic
    bindings, and the device is behind an IOMMU, do not return error. The
    following iommu_assign_dt_device should succeed.
    
    This check will become superfluous, hence removable, once the Xen SMMU
    driver gets support for the generic IOMMU bindings.
    
    Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxx>
    Reviewed-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx>
    Acked-by: Julien Grall <julien.grall@xxxxxxx>
    Release-acked-by: Juergen Gross <jgross@xxxxxxxx>
---
 xen/drivers/passthrough/device_tree.c | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/xen/drivers/passthrough/device_tree.c 
b/xen/drivers/passthrough/device_tree.c
index cc900bac70..27e265b936 100644
--- a/xen/drivers/passthrough/device_tree.c
+++ b/xen/drivers/passthrough/device_tree.c
@@ -155,7 +155,22 @@ int iommu_add_dt_device(struct dt_device_node *np)
          * these callback implemented.
          */
         if ( !ops->add_device || !ops->dt_xlate )
-            return -EINVAL;
+        {
+            /*
+             * Some Device Trees may expose both legacy SMMU and generic
+             * IOMMU bindings together. However, the SMMU driver is only
+             * supporting the former and will protect them during the
+             * initialization. So we need to skip them and not return
+             * error here.
+             *
+             * XXX: This can be dropped when the SMMU is able to deal
+             * with generic bindings.
+             */
+            if ( dt_device_is_protected(np) )
+                return 0;
+            else
+                return -EINVAL;
+        }
 
         if ( !dt_device_is_available(iommu_spec.np) )
             break;
--
generated by git-patchbot for /home/xen/git/xen.git#staging

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.