Re: [PATCH v10 4/5] iommu/arm-smmu: Add the device_link between masters and smmu

2018-03-16 Thread Tomasz Figa
Hi Vivek,

On Wed, Mar 14, 2018 at 5:14 PM, Vivek Gautam
 wrote:
> From: Sricharan R 
>
> Finally add the device link between the master device and
> smmu, so that the smmu gets runtime enabled/disabled only when the
> master needs it. This is done from add_device callback which gets
> called once when the master is added to the smmu.
>
> Signed-off-by: Sricharan R 
> Signed-off-by: Vivek Gautam 
> Reviewed-by: Tomasz Figa 
> ---
>
> Changes since v9:
>  - Using device_link_del_dev() to delete the device link, instead of
>doing it in two steps - device_link_find() to first find the link, and
>then calling device_link_del().
>
>  drivers/iommu/arm-smmu.c | 24 
>  1 file changed, 24 insertions(+)
>
> diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
> index 56a04ae80bf3..4cf270ffd449 100644
> --- a/drivers/iommu/arm-smmu.c
> +++ b/drivers/iommu/arm-smmu.c
> @@ -1460,10 +1460,31 @@ static int arm_smmu_add_device(struct device *dev)
>
> iommu_device_link(>iommu, dev);
>
> +   if (pm_runtime_enabled(smmu->dev)) {
> +   struct device_link *link;
> +
> +   /*
> +* Establish the link between smmu and master, so that the
> +* smmu gets runtime enabled/disabled as per the master's
> +* needs.
> +*/
> +   link = device_link_add(dev, smmu->dev, DL_FLAG_PM_RUNTIME);
> +   if (!link) {
> +   dev_warn(smmu->dev,
> +"Unable to add link to the consumer %s\n",
> +dev_name(dev));
> +   ret = -ENODEV;
> +   goto out_unlink;
> +   }
> +   }

If it's an error, we should use dev_err(). Also, as per Robin's
comment for v9 could we make it as follows?

if (pm_runtime_enabled(smmu->dev) &&
!device_link_add(dev, smmu->dev, DL_FLAG_PM_RUNTIME)) {
dev_err(smmu->dev,
 "Unable to add link to the consumer %s\n",
dev_name(dev));
ret = -ENODEV;
goto out_unlink;
}

Best regards,
Tomasz
___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu


[PATCH v10 4/5] iommu/arm-smmu: Add the device_link between masters and smmu

2018-03-14 Thread Vivek Gautam
From: Sricharan R 

Finally add the device link between the master device and
smmu, so that the smmu gets runtime enabled/disabled only when the
master needs it. This is done from add_device callback which gets
called once when the master is added to the smmu.

Signed-off-by: Sricharan R 
Signed-off-by: Vivek Gautam 
Reviewed-by: Tomasz Figa 
---

Changes since v9:
 - Using device_link_del_dev() to delete the device link, instead of
   doing it in two steps - device_link_find() to first find the link, and
   then calling device_link_del().

 drivers/iommu/arm-smmu.c | 24 
 1 file changed, 24 insertions(+)

diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
index 56a04ae80bf3..4cf270ffd449 100644
--- a/drivers/iommu/arm-smmu.c
+++ b/drivers/iommu/arm-smmu.c
@@ -1460,10 +1460,31 @@ static int arm_smmu_add_device(struct device *dev)
 
iommu_device_link(>iommu, dev);
 
+   if (pm_runtime_enabled(smmu->dev)) {
+   struct device_link *link;
+
+   /*
+* Establish the link between smmu and master, so that the
+* smmu gets runtime enabled/disabled as per the master's
+* needs.
+*/
+   link = device_link_add(dev, smmu->dev, DL_FLAG_PM_RUNTIME);
+   if (!link) {
+   dev_warn(smmu->dev,
+"Unable to add link to the consumer %s\n",
+dev_name(dev));
+   ret = -ENODEV;
+   goto out_unlink;
+   }
+   }
+
arm_smmu_rpm_put(smmu);
 
return 0;
 
+out_unlink:
+   iommu_device_unlink(>iommu, dev);
+   arm_smmu_master_free_smes(fwspec);
 out_rpm_put:
arm_smmu_rpm_put(smmu);
 out_cfg_free:
@@ -1486,6 +1507,9 @@ static void arm_smmu_remove_device(struct device *dev)
cfg  = fwspec->iommu_priv;
smmu = cfg->smmu;
 
+   if (pm_runtime_enabled(smmu->dev))
+   device_link_del_dev(dev, smmu->dev);
+
ret = arm_smmu_rpm_get(smmu);
if (ret < 0)
return;
-- 
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation

___
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu