2023-07-05 13:09:57

by 李扬韬

[permalink] [raw]
Subject: [PATCH 1/6] iommu/arm-smmu: do some cleanup

Convert to use devm_platform_ioremap_resource() and fix return value
when platform_get_irq fails.

Signed-off-by: Yangtao Li <[email protected]>
---
drivers/iommu/arm/arm-smmu/qcom_iommu.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/iommu/arm/arm-smmu/qcom_iommu.c b/drivers/iommu/arm/arm-smmu/qcom_iommu.c
index a503ed758ec3..abf798104830 100644
--- a/drivers/iommu/arm/arm-smmu/qcom_iommu.c
+++ b/drivers/iommu/arm/arm-smmu/qcom_iommu.c
@@ -633,7 +633,6 @@ static int qcom_iommu_ctx_probe(struct platform_device *pdev)
struct qcom_iommu_ctx *ctx;
struct device *dev = &pdev->dev;
struct qcom_iommu_dev *qcom_iommu = dev_get_drvdata(dev->parent);
- struct resource *res;
int ret, irq;

ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL);
@@ -643,14 +642,13 @@ static int qcom_iommu_ctx_probe(struct platform_device *pdev)
ctx->dev = dev;
platform_set_drvdata(pdev, ctx);

- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- ctx->base = devm_ioremap_resource(dev, res);
+ ctx->base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(ctx->base))
return PTR_ERR(ctx->base);

irq = platform_get_irq(pdev, 0);
if (irq < 0)
- return -ENODEV;
+ return irq;

/* clear IRQs before registering fault handler, just in case the
* boot-loader left us a surprise:
--
2.39.0



2023-07-05 13:10:25

by 李扬韬

[permalink] [raw]
Subject: [PATCH 2/6] iommu/omap: do some cleanup

Convert to use devm_platform_ioremap_resource() and fix return value
when platform_get_irq fails.

Signed-off-by: Yangtao Li <[email protected]>
---
drivers/iommu/omap-iommu.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/iommu/omap-iommu.c b/drivers/iommu/omap-iommu.c
index 537e402f9bba..ed4a29478473 100644
--- a/drivers/iommu/omap-iommu.c
+++ b/drivers/iommu/omap-iommu.c
@@ -1163,7 +1163,6 @@ static int omap_iommu_probe(struct platform_device *pdev)
int err = -ENODEV;
int irq;
struct omap_iommu *obj;
- struct resource *res;
struct device_node *of = pdev->dev.of_node;

if (!of) {
@@ -1205,8 +1204,7 @@ static int omap_iommu_probe(struct platform_device *pdev)
spin_lock_init(&obj->iommu_lock);
spin_lock_init(&obj->page_table_lock);

- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- obj->regbase = devm_ioremap_resource(obj->dev, res);
+ obj->regbase = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(obj->regbase))
return PTR_ERR(obj->regbase);

@@ -1216,7 +1214,7 @@ static int omap_iommu_probe(struct platform_device *pdev)

irq = platform_get_irq(pdev, 0);
if (irq < 0)
- return -ENODEV;
+ return irq;

err = devm_request_irq(obj->dev, irq, iommu_fault_handler, IRQF_SHARED,
dev_name(obj->dev), obj);
--
2.39.0


2023-07-05 13:16:07

by 李扬韬

[permalink] [raw]
Subject: [PATCH 3/6] iommu/msm: do some cleanup

Convert to devm_platform_get_and_ioremap_resource(), remove redundant msg
and fix return value when platform_get_irq fails.

Signed-off-by: Yangtao Li <[email protected]>
---
drivers/iommu/msm_iommu.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/iommu/msm_iommu.c b/drivers/iommu/msm_iommu.c
index 79d89bad5132..349b46b4b714 100644
--- a/drivers/iommu/msm_iommu.c
+++ b/drivers/iommu/msm_iommu.c
@@ -735,17 +735,16 @@ static int msm_iommu_probe(struct platform_device *pdev)
return dev_err_probe(iommu->dev, ret, "could not prepare iommu_clk\n");
}

- r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- iommu->base = devm_ioremap_resource(iommu->dev, r);
+ iommu->base = devm_platform_get_and_ioremap_resource(pdev, 0, &r);
if (IS_ERR(iommu->base)) {
- ret = dev_err_probe(iommu->dev, PTR_ERR(iommu->base), "could not get iommu base\n");
+ ret = PTR_ERR(iommu->base);
goto fail;
}
ioaddr = r->start;

iommu->irq = platform_get_irq(pdev, 0);
if (iommu->irq < 0) {
- ret = -ENODEV;
+ ret = iommu->irq;
goto fail;
}

--
2.39.0


2023-07-05 13:19:22

by 李扬韬

[permalink] [raw]
Subject: [PATCH 5/6] iommu/ipmmu-vmsa: Convert to devm_platform_ioremap_resource()

Use devm_platform_ioremap_resource() to simplify code.

Signed-off-by: Yangtao Li <[email protected]>
---
drivers/iommu/ipmmu-vmsa.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/iommu/ipmmu-vmsa.c b/drivers/iommu/ipmmu-vmsa.c
index 9f64c5c9f5b9..01cf577e597c 100644
--- a/drivers/iommu/ipmmu-vmsa.c
+++ b/drivers/iommu/ipmmu-vmsa.c
@@ -976,7 +976,6 @@ static const struct of_device_id ipmmu_of_ids[] = {
static int ipmmu_probe(struct platform_device *pdev)
{
struct ipmmu_vmsa_device *mmu;
- struct resource *res;
int irq;
int ret;

@@ -996,8 +995,7 @@ static int ipmmu_probe(struct platform_device *pdev)
return ret;

/* Map I/O memory and request IRQ. */
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- mmu->base = devm_ioremap_resource(&pdev->dev, res);
+ mmu->base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(mmu->base))
return PTR_ERR(mmu->base);

--
2.39.0


2023-07-05 13:19:58

by 李扬韬

[permalink] [raw]
Subject: [PATCH 4/6] iommu/exynos: Convert to devm_platform_ioremap_resource()

Use devm_platform_ioremap_resource() to simplify code.

Signed-off-by: Yangtao Li <[email protected]>
---
drivers/iommu/exynos-iommu.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/iommu/exynos-iommu.c b/drivers/iommu/exynos-iommu.c
index c275fe71c4db..ab6208015997 100644
--- a/drivers/iommu/exynos-iommu.c
+++ b/drivers/iommu/exynos-iommu.c
@@ -725,19 +725,17 @@ static int exynos_sysmmu_probe(struct platform_device *pdev)
int irq, ret;
struct device *dev = &pdev->dev;
struct sysmmu_drvdata *data;
- struct resource *res;

data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
if (!data)
return -ENOMEM;

- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- data->sfrbase = devm_ioremap_resource(dev, res);
+ data->sfrbase = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(data->sfrbase))
return PTR_ERR(data->sfrbase);

irq = platform_get_irq(pdev, 0);
- if (irq <= 0)
+ if (irq < 0)
return irq;

ret = devm_request_irq(dev, irq, exynos_sysmmu_irq, 0,
--
2.39.0


2023-07-05 13:31:15

by 李扬韬

[permalink] [raw]
Subject: [PATCH 6/6] iommu/mediatek: Convert to devm_platform_ioremap_resource() and devm_platform_get_and_ioremap_resource()

Use devm_platform_ioremap_resource() and
devm_platform_get_and_ioremap_resource() to simplify code.

Signed-off-by: Yangtao Li <[email protected]>
---
drivers/iommu/mtk_iommu.c | 9 +++------
drivers/iommu/mtk_iommu_v1.c | 4 +---
2 files changed, 4 insertions(+), 9 deletions(-)

diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
index e93906d6e112..6595a25c103d 100644
--- a/drivers/iommu/mtk_iommu.c
+++ b/drivers/iommu/mtk_iommu.c
@@ -1264,16 +1264,13 @@ static int mtk_iommu_probe(struct platform_device *pdev)
}

banks_num = data->plat_data->banks_num;
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- if (!res)
- return -EINVAL;
+ base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
+ if (IS_ERR(base))
+ return PTR_ERR(base);
if (resource_size(res) < banks_num * MTK_IOMMU_BANK_SZ) {
dev_err(dev, "banknr %d. res %pR is not enough.\n", banks_num, res);
return -EINVAL;
}
- base = devm_ioremap_resource(dev, res);
- if (IS_ERR(base))
- return PTR_ERR(base);
ioaddr = res->start;

data->bank = devm_kmalloc(dev, banks_num * sizeof(*data->bank), GFP_KERNEL);
diff --git a/drivers/iommu/mtk_iommu_v1.c b/drivers/iommu/mtk_iommu_v1.c
index 8a0a5e5d049f..2e116241f80b 100644
--- a/drivers/iommu/mtk_iommu_v1.c
+++ b/drivers/iommu/mtk_iommu_v1.c
@@ -610,7 +610,6 @@ static int mtk_iommu_v1_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
struct mtk_iommu_v1_data *data;
- struct resource *res;
struct component_match *match = NULL;
void *protect;
int larb_nr, ret, i;
@@ -628,8 +627,7 @@ static int mtk_iommu_v1_probe(struct platform_device *pdev)
return -ENOMEM;
data->protect_base = ALIGN(virt_to_phys(protect), MTK_PROTECT_PA_ALIGN);

- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- data->base = devm_ioremap_resource(dev, res);
+ data->base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(data->base))
return PTR_ERR(data->base);

--
2.39.0


2023-07-10 15:16:51

by Marek Szyprowski

[permalink] [raw]
Subject: Re: [PATCH 4/6] iommu/exynos: Convert to devm_platform_ioremap_resource()

On 05.07.2023 15:04, Yangtao Li wrote:
> Use devm_platform_ioremap_resource() to simplify code.
>
> Signed-off-by: Yangtao Li <[email protected]>

Acked-by: Marek Szyprowski <[email protected]>


> ---
> drivers/iommu/exynos-iommu.c | 6 ++----
> 1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/iommu/exynos-iommu.c b/drivers/iommu/exynos-iommu.c
> index c275fe71c4db..ab6208015997 100644
> --- a/drivers/iommu/exynos-iommu.c
> +++ b/drivers/iommu/exynos-iommu.c
> @@ -725,19 +725,17 @@ static int exynos_sysmmu_probe(struct platform_device *pdev)
> int irq, ret;
> struct device *dev = &pdev->dev;
> struct sysmmu_drvdata *data;
> - struct resource *res;
>
> data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
> if (!data)
> return -ENOMEM;
>
> - res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> - data->sfrbase = devm_ioremap_resource(dev, res);
> + data->sfrbase = devm_platform_ioremap_resource(pdev, 0);
> if (IS_ERR(data->sfrbase))
> return PTR_ERR(data->sfrbase);
>
> irq = platform_get_irq(pdev, 0);
> - if (irq <= 0)
> + if (irq < 0)
> return irq;
>
> ret = devm_request_irq(dev, irq, exynos_sysmmu_irq, 0,

Best regards
--
Marek Szyprowski, PhD
Samsung R&D Institute Poland


2023-08-01 21:24:10

by Will Deacon

[permalink] [raw]
Subject: Re: [PATCH 1/6] iommu/arm-smmu: do some cleanup

On Wed, 5 Jul 2023 21:04:11 +0800, Yangtao Li wrote:
> Convert to use devm_platform_ioremap_resource() and fix return value
> when platform_get_irq fails.
>
>

Applied Arm SMMU patch to will (for-joerg/arm-smmu/updates), thanks!

[1/6] iommu/arm-smmu: Clean up resource handling during Qualcomm context probe
https://git.kernel.org/will/c/0a8c264d51ad

Cheers,
--
Will

https://fixes.arm64.dev
https://next.arm64.dev
https://will.arm64.dev