mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
xen/arm: domain_build: Don't expose IOMMU specific properties to hwdom
We always skip the IOMMU device when creating DT for hwdom if there is an appropriate driver for it in Xen (device_get_class(iommu_node) returns DEVICE_IOMMU). So, even if it is not used by Xen it will be skipped. We should also skip the IOMMU specific properties of the master device behind that IOMMU in order to avoid exposing an half complete IOMMU bindings to hwdom. According to the Linux's docs: 1. Documentation/devicetree/bindings/iommu/iommu.txt 2. Documentation/devicetree/bindings/pci/pci-iommu.txt Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com> Acked-by: Julien Grall <julien.grall@arm.com> Release-acked-by: Juergen Gross <jgross@suse.com>
This commit is contained in:
1 parent
3f82eb9740
commit
818927ecfb
1 file changed
+28
@@ -480,10 +480,25 @@ static int __init write_properties(struct domain *d, struct kernel_info *kinfo,
|
||||
const struct dt_property *prop, *status = NULL;
|
||||
int res = 0;
|
||||
int had_dom0_bootargs = 0;
|
||||
struct dt_device_node *iommu_node;
|
||||
|
||||
if ( kinfo->cmdline && kinfo->cmdline[0] )
|
||||
bootargs = &kinfo->cmdline[0];
|
||||
|
||||
/*
|
||||
* We always skip the IOMMU device when creating DT for hwdom if there is
|
||||
* an appropriate driver for it in Xen (device_get_class(iommu_node)
|
||||
* returns DEVICE_IOMMU).
|
||||
* We should also skip the IOMMU specific properties of the master device
|
||||
* behind that IOMMU in order to avoid exposing an half complete IOMMU
|
||||
* bindings to hwdom.
|
||||
* Use "iommu_node" as an indicator of the master device which properties
|
||||
* should be skipped.
|
||||
*/
|
||||
iommu_node = dt_parse_phandle(node, "iommus", 0);
|
||||
if ( iommu_node && device_get_class(iommu_node) != DEVICE_IOMMU )
|
||||
iommu_node = NULL;
|
||||
|
||||
dt_for_each_property_node (node, prop)
|
||||
{
|
||||
const void *prop_data = prop->value;
|
||||
@@ -540,6 +555,19 @@ static int __init write_properties(struct domain *d, struct kernel_info *kinfo,
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( iommu_node )
|
||||
{
|
||||
/* Don't expose IOMMU specific properties to hwdom */
|
||||
if ( dt_property_name_is_equal(prop, "iommus") )
|
||||
continue;
|
||||
|
||||
if ( dt_property_name_is_equal(prop, "iommu-map") )
|
||||
continue;
|
||||
|
||||
if ( dt_property_name_is_equal(prop, "iommu-map-mask") )
|
||||
continue;
|
||||
}
|
||||
|
||||
res = fdt_property(kinfo->fdt, prop->name, prop_data, prop_len);
|
||||
|
||||
if ( res )
|
||||
|
||||