mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
xen/arm, doc: Add a DT property to specify IOMMU for Dom0less domUs
There are some use cases in which the dom0less domUs need to have the XEN_DOMCTL_CDF_iommu set at the domain construction time. For example, the dynamic dtbo feature allows the domain to be assigned a device that is behind the IOMMU at runtime. For these use cases, we need to have a way to specify the domain will need the IOMMU mapping at domain construction time. Introduce a "passthrough" DT property for Dom0less DomUs following the same entry as the xl.cfg. Currently only provide two options, i.e. "enable" and "disable". Set the XEN_DOMCTL_CDF_iommu at domain construction time based on the property. Signed-off-by: Henry Wang <xin.wang2@amd.com> Reviewed-by: Julien Grall <jgrall@amazon.com>
This commit is contained in:
1 parent
c8cbc5eb1c
commit
1d2b4f3049
2 files changed
+25
-2
No files matched your search
@@ -260,6 +260,22 @@ with the following properties:
|
||||
value specified by Xen command line parameter gnttab_max_maptrack_frames
|
||||
(or its default value if unspecified, i.e. 1024) is used.
|
||||
|
||||
- passthrough
|
||||
|
||||
A string property specifying whether IOMMU mappings are enabled for the
|
||||
domain and hence whether it will be enabled for passthrough hardware.
|
||||
Possible property values are:
|
||||
|
||||
- "enabled"
|
||||
IOMMU mappings are enabled for the domain. Note that this option is the
|
||||
default if the user provides the device partial passthrough device tree
|
||||
for the domain.
|
||||
|
||||
- "disabled"
|
||||
IOMMU mappings are disabled for the domain and so hardware may not be
|
||||
passed through. This option is the default if this property is missing
|
||||
and the user does not provide the device partial device tree for the domain.
|
||||
|
||||
Under the "xen,domain" compatible node, one or more sub-nodes are present
|
||||
for the DomU kernel and ramdisk.
|
||||
|
||||
|
||||
@@ -848,6 +848,8 @@ static int __init construct_domU(struct domain *d,
|
||||
void __init create_domUs(void)
|
||||
{
|
||||
struct dt_device_node *node;
|
||||
const char *dom0less_iommu;
|
||||
bool iommu = false;
|
||||
const struct dt_device_node *cpupool_node,
|
||||
*chosen = dt_find_node_by_path("/chosen");
|
||||
|
||||
@@ -895,8 +897,13 @@ void __init create_domUs(void)
|
||||
panic("Missing property 'cpus' for domain %s\n",
|
||||
dt_node_name(node));
|
||||
|
||||
if ( dt_find_compatible_node(node, NULL, "multiboot,device-tree") &&
|
||||
iommu_enabled )
|
||||
if ( !dt_property_read_string(node, "passthrough", &dom0less_iommu) &&
|
||||
!strcmp(dom0less_iommu, "enabled") )
|
||||
iommu = true;
|
||||
|
||||
if ( iommu_enabled &&
|
||||
(iommu || dt_find_compatible_node(node, NULL,
|
||||
"multiboot,device-tree")) )
|
||||
d_cfg.flags |= XEN_DOMCTL_CDF_iommu;
|
||||
|
||||
if ( !dt_property_read_u32(node, "nr_spis", &d_cfg.arch.nr_spis) )
|
||||
|
||||