When iommu={disable,off,no,false} is given to Xen command line, the IOMMU
framework won't specify that the device shouldn't be passthrough to DOM0.
Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
return -EBADF;
}
+enum device_type device_get_type(const struct dt_device_node *dev)
+{
+ const struct device_desc *desc;
+
+ ASSERT(dev != NULL);
+
+ for ( desc = _sdevice; desc != _edevice; desc++ )
+ {
+ if ( device_is_compatible(desc, dev) )
+ return desc->type;
+ }
+
+ return DEVICE_UNKNOWN;
+}
+
/*
* Local variables:
* mode: C
#include <xen/device_tree.h>
#include <xen/libfdt/libfdt.h>
#include <xen/guest_access.h>
+#include <asm/device.h>
#include <asm/setup.h>
#include <asm/platform.h>
#include <asm/psci.h>
return 0;
}
+ /* Even if the IOMMU device is not used by Xen, it should not be
+ * passthrough to DOM0
+ */
+ if ( device_get_type(node) == DEVICE_IOMMU )
+ {
+ DPRINT(" IOMMU, skip it\n");
+ return 0;
+ }
+
/*
* Some device doesn't need to be mapped in Xen:
* - Memory: the guest will see a different view of memory. It will
{
DEVICE_SERIAL,
DEVICE_IOMMU,
+ /* Use for error */
+ DEVICE_UNKNOWN,
};
struct device_desc {
int __init device_init(struct dt_device_node *dev, enum device_type type,
const void *data);
+/**
+ * device_get_type - Get the type of the device
+ * @dev: device to match
+ *
+ * Return the device type on success or DEVICE_ANY on failure
+ */
+enum device_type device_get_type(const struct dt_device_node *dev);
+
#define DT_DEVICE_START(_name, _namestr, _type) \
static const struct device_desc __dev_desc_##_name __used \
__attribute__((__section__(".dev.info"))) = { \