Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d0b912bd authored by Jeffy Chen's avatar Jeffy Chen Committed by Joerg Roedel
Browse files

iommu/rockchip: Request irqs in rk_iommu_probe()



Move request_irq to the end of rk_iommu_probe().

Suggested-by: default avatarRobin Murphy <robin.murphy@arm.com>
Signed-off-by: default avatarJeffy Chen <jeffy.chen@rock-chips.com>
Acked-by: default avatarRobin Murphy <robin.murphy@arm.com>
Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
parent 6d9ffaad
Loading
Loading
Loading
Loading
+9 −29
Original line number Diff line number Diff line
@@ -90,8 +90,6 @@ struct rk_iommu {
	struct device *dev;
	void __iomem **bases;
	int num_mmu;
	int *irq;
	int num_irq;
	bool reset_disabled;
	struct iommu_device iommu;
	struct list_head node; /* entry in rk_iommu_domain.iommus */
@@ -830,13 +828,6 @@ static int rk_iommu_attach_device(struct iommu_domain *domain,

	iommu->domain = domain;

	for (i = 0; i < iommu->num_irq; i++) {
		ret = devm_request_irq(iommu->dev, iommu->irq[i], rk_iommu_irq,
				       IRQF_SHARED, dev_name(dev), iommu);
		if (ret)
			return ret;
	}

	for (i = 0; i < iommu->num_mmu; i++) {
		rk_iommu_write(iommu->bases[i], RK_MMU_DTE_ADDR,
			       rk_domain->dt_dma);
@@ -885,9 +876,6 @@ static void rk_iommu_detach_device(struct iommu_domain *domain,
	}
	rk_iommu_disable_stall(iommu);

	for (i = 0; i < iommu->num_irq; i++)
		devm_free_irq(iommu->dev, iommu->irq[i], iommu);

	iommu->domain = NULL;

	dev_dbg(dev, "Detached from iommu domain\n");
@@ -1138,7 +1126,7 @@ static int rk_iommu_probe(struct platform_device *pdev)
	struct rk_iommu *iommu;
	struct resource *res;
	int num_res = pdev->num_resources;
	int err, i;
	int err, i, irq;

	iommu = devm_kzalloc(dev, sizeof(*iommu), GFP_KERNEL);
	if (!iommu)
@@ -1165,23 +1153,15 @@ static int rk_iommu_probe(struct platform_device *pdev)
	if (iommu->num_mmu == 0)
		return PTR_ERR(iommu->bases[0]);

	iommu->num_irq = platform_irq_count(pdev);
	if (iommu->num_irq < 0)
		return iommu->num_irq;
	if (iommu->num_irq == 0)
		return -ENXIO;
	i = 0;
	while ((irq = platform_get_irq(pdev, i++)) != -ENXIO) {
		if (irq < 0)
			return irq;

	iommu->irq = devm_kcalloc(dev, iommu->num_irq, sizeof(*iommu->irq),
				  GFP_KERNEL);
	if (!iommu->irq)
		return -ENOMEM;

	for (i = 0; i < iommu->num_irq; i++) {
		iommu->irq[i] = platform_get_irq(pdev, i);
		if (iommu->irq[i] < 0) {
			dev_err(dev, "Failed to get IRQ, %d\n", iommu->irq[i]);
			return -ENXIO;
		}
		err = devm_request_irq(iommu->dev, irq, rk_iommu_irq,
				       IRQF_SHARED, dev_name(dev), iommu);
		if (err)
			return err;
	}

	iommu->reset_disabled = device_property_read_bool(dev,