|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 5/7] xen/arm: SMMU: Keep registering legacy master in SMMU probe
On Fri, 30 Jun 2017, Wei Chen wrote:
> 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.Chen@xxxxxxx>
Acked-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
> ---
> 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@xxxxxxxxxxxxx
> https://lists.xen.org/xen-devel
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |