The legacy IOMMU bindings place the SMMU MasterIDs in the SMMU device tree node. In current code, we register the SMMU masters while probing SMMU. It's better to keep registering legacy masters in the SMMU probing progress. If we move registering legacy SMMU masters to add_device or assign_device, we have to go through all SMMUs to find correct SMMU for master device. It's inefficient and doesn't bring any enhancement.
Similarly, if we want to register generic masters in SMMU probing, we have to go through whole device tree to find master devices for all SMMUs. So we only keep registering legacy master in SMMU probing. Signed-off-by: Wei Chen <wei.c...@arm.com> --- xen/drivers/passthrough/arm/smmu.c | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/xen/drivers/passthrough/arm/smmu.c b/xen/drivers/passthrough/arm/smmu.c index 441c296..895024c 100644 --- a/xen/drivers/passthrough/arm/smmu.c +++ b/xen/drivers/passthrough/arm/smmu.c @@ -2375,21 +2375,28 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev) if (err) return err; - i = 0; smmu->masters = RB_ROOT; - while (!of_parse_phandle_with_args(dev->of_node, "mmu-masters", - "#stream-id-cells", i, - &masterspec)) { - err = register_smmu_master(smmu, dev, &masterspec); - if (err) { - dev_err(dev, "failed to add master %s\n", - masterspec.np->name); - goto out_put_masters; - } + /* + * The SMMU MasterIDs are listed in SMMU device tree node while using + * the legacy IOMMU bindins. So in the SMMU probing progress, we will + * register the SMMU master only for legacy bindings. + */ + if (using_legacy_binding) { + i = 0; + while (!of_parse_phandle_with_args(dev->of_node, "mmu-masters", + "#stream-id-cells", i, + &masterspec)) { + err = register_smmu_master(smmu, dev, &masterspec); + if (err) { + dev_err(dev, "failed to add master %s\n", + masterspec.np->name); + goto out_put_masters; + } - i++; + i++; + } + dev_notice(dev, "registered %d legacy master devices\n", i); } - dev_notice(dev, "registered %d master devices\n", i); parse_driver_options(smmu); -- 2.7.4 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org https://lists.xen.org/xen-devel