* [PATCH V3 1/3] Docs: dt: rockchip: add rockchip, disable-mmu-reset property @ 2017-07-24 2:37 ` Simon Xue 0 siblings, 0 replies; 8+ messages in thread From: Simon Xue @ 2017-07-24 2:37 UTC (permalink / raw) To: Joerg Roedel, Heiko Stuebner Cc: linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, linux-kernel-u79uwXL29TY76Z2rM5mHXA Add rockchip,disable-mmu-reset property to disable some mmu reset operation Signed-off-by: Simon Xue <xxm-TNX95d0MmH7DzftRWevZcw@public.gmane.org> --- changes since V2: use rockchip,disable-mmu-reset instead of rk-iommu,disable-reset-quirk Documentation/devicetree/bindings/iommu/rockchip,iommu.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Documentation/devicetree/bindings/iommu/rockchip,iommu.txt b/Documentation/devicetree/bindings/iommu/rockchip,iommu.txt index 9a55ac3..2098f77 100644 --- a/Documentation/devicetree/bindings/iommu/rockchip,iommu.txt +++ b/Documentation/devicetree/bindings/iommu/rockchip,iommu.txt @@ -15,6 +15,11 @@ Required properties: to associate with its master device. See: Documentation/devicetree/bindings/iommu/iommu.txt +Optional properties: +- rockchip,disable-mmu-reset : Don't use the mmu reset operation. + Some mmu instances may produce unexpected results + when the reset operation is used. + Example: vopl_mmu: iommu@ff940300 { -- 1.9.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH V3 1/3] Docs: dt: rockchip: add rockchip,disable-mmu-reset property @ 2017-07-24 2:37 ` Simon Xue 0 siblings, 0 replies; 8+ messages in thread From: Simon Xue @ 2017-07-24 2:37 UTC (permalink / raw) To: Joerg Roedel, Heiko Stuebner Cc: linux-rockchip, iommu, linux-kernel, Simon Xue Add rockchip,disable-mmu-reset property to disable some mmu reset operation Signed-off-by: Simon Xue <xxm@rock-chips.com> --- changes since V2: use rockchip,disable-mmu-reset instead of rk-iommu,disable-reset-quirk Documentation/devicetree/bindings/iommu/rockchip,iommu.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Documentation/devicetree/bindings/iommu/rockchip,iommu.txt b/Documentation/devicetree/bindings/iommu/rockchip,iommu.txt index 9a55ac3..2098f77 100644 --- a/Documentation/devicetree/bindings/iommu/rockchip,iommu.txt +++ b/Documentation/devicetree/bindings/iommu/rockchip,iommu.txt @@ -15,6 +15,11 @@ Required properties: to associate with its master device. See: Documentation/devicetree/bindings/iommu/iommu.txt +Optional properties: +- rockchip,disable-mmu-reset : Don't use the mmu reset operation. + Some mmu instances may produce unexpected results + when the reset operation is used. + Example: vopl_mmu: iommu@ff940300 { -- 1.9.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
[parent not found: <1500863835-32877-1-git-send-email-xxm-TNX95d0MmH7DzftRWevZcw@public.gmane.org>]
* [PATCH V3 2/3] iommu/rockchip: add multi irqs support 2017-07-24 2:37 ` [PATCH V3 1/3] Docs: dt: rockchip: add rockchip,disable-mmu-reset property Simon Xue @ 2017-07-24 2:37 ` Simon Xue -1 siblings, 0 replies; 8+ messages in thread From: Simon Xue @ 2017-07-24 2:37 UTC (permalink / raw) To: Joerg Roedel, Heiko Stuebner Cc: linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, linux-kernel-u79uwXL29TY76Z2rM5mHXA RK3368 vpu mmu have two irqs, this patch support multi irqs Signed-off-by: Simon Xue <xxm-TNX95d0MmH7DzftRWevZcw@public.gmane.org> --- changes since V2: use platform_irq_count to get irq nums drivers/iommu/rockchip-iommu.c | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/drivers/iommu/rockchip-iommu.c b/drivers/iommu/rockchip-iommu.c index 4ba48a2..e2852b0 100644 --- a/drivers/iommu/rockchip-iommu.c +++ b/drivers/iommu/rockchip-iommu.c @@ -90,7 +90,8 @@ struct rk_iommu { struct device *dev; void __iomem **bases; int num_mmu; - int irq; + int *irq; + int num_irq; struct iommu_device iommu; struct list_head node; /* entry in rk_iommu_domain.iommus */ struct iommu_domain *domain; /* domain to which iommu is attached */ @@ -825,10 +826,12 @@ static int rk_iommu_attach_device(struct iommu_domain *domain, iommu->domain = domain; - ret = devm_request_irq(iommu->dev, iommu->irq, rk_iommu_irq, - IRQF_SHARED, dev_name(dev), iommu); - if (ret) - return ret; + 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, @@ -878,7 +881,8 @@ static void rk_iommu_detach_device(struct iommu_domain *domain, } rk_iommu_disable_stall(iommu); - devm_free_irq(iommu->dev, iommu->irq, iommu); + for (i = 0; i < iommu->num_irq; i++) + devm_free_irq(iommu->dev, iommu->irq[i], iommu); iommu->domain = NULL; @@ -1157,10 +1161,23 @@ static int rk_iommu_probe(struct platform_device *pdev) if (iommu->num_mmu == 0) return PTR_ERR(iommu->bases[0]); - iommu->irq = platform_get_irq(pdev, 0); - if (iommu->irq < 0) { - dev_err(dev, "Failed to get IRQ, %d\n", iommu->irq); + iommu->num_irq = platform_irq_count(pdev); + if (iommu->num_irq < 0) + return iommu->num_irq; + if (iommu->num_irq == 0) return -ENXIO; + + 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 = iommu_device_sysfs_add(&iommu->iommu, dev, NULL, dev_name(dev)); -- 1.9.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH V3 2/3] iommu/rockchip: add multi irqs support @ 2017-07-24 2:37 ` Simon Xue 0 siblings, 0 replies; 8+ messages in thread From: Simon Xue @ 2017-07-24 2:37 UTC (permalink / raw) To: Joerg Roedel, Heiko Stuebner Cc: linux-rockchip, iommu, linux-kernel, Simon Xue RK3368 vpu mmu have two irqs, this patch support multi irqs Signed-off-by: Simon Xue <xxm@rock-chips.com> --- changes since V2: use platform_irq_count to get irq nums drivers/iommu/rockchip-iommu.c | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/drivers/iommu/rockchip-iommu.c b/drivers/iommu/rockchip-iommu.c index 4ba48a2..e2852b0 100644 --- a/drivers/iommu/rockchip-iommu.c +++ b/drivers/iommu/rockchip-iommu.c @@ -90,7 +90,8 @@ struct rk_iommu { struct device *dev; void __iomem **bases; int num_mmu; - int irq; + int *irq; + int num_irq; struct iommu_device iommu; struct list_head node; /* entry in rk_iommu_domain.iommus */ struct iommu_domain *domain; /* domain to which iommu is attached */ @@ -825,10 +826,12 @@ static int rk_iommu_attach_device(struct iommu_domain *domain, iommu->domain = domain; - ret = devm_request_irq(iommu->dev, iommu->irq, rk_iommu_irq, - IRQF_SHARED, dev_name(dev), iommu); - if (ret) - return ret; + 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, @@ -878,7 +881,8 @@ static void rk_iommu_detach_device(struct iommu_domain *domain, } rk_iommu_disable_stall(iommu); - devm_free_irq(iommu->dev, iommu->irq, iommu); + for (i = 0; i < iommu->num_irq; i++) + devm_free_irq(iommu->dev, iommu->irq[i], iommu); iommu->domain = NULL; @@ -1157,10 +1161,23 @@ static int rk_iommu_probe(struct platform_device *pdev) if (iommu->num_mmu == 0) return PTR_ERR(iommu->bases[0]); - iommu->irq = platform_get_irq(pdev, 0); - if (iommu->irq < 0) { - dev_err(dev, "Failed to get IRQ, %d\n", iommu->irq); + iommu->num_irq = platform_irq_count(pdev); + if (iommu->num_irq < 0) + return iommu->num_irq; + if (iommu->num_irq == 0) return -ENXIO; + + 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 = iommu_device_sysfs_add(&iommu->iommu, dev, NULL, dev_name(dev)); -- 1.9.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH V3 3/3] iommu/rockchip: ignore isp mmu reset operation 2017-07-24 2:37 ` [PATCH V3 1/3] Docs: dt: rockchip: add rockchip,disable-mmu-reset property Simon Xue @ 2017-07-24 2:37 ` Simon Xue -1 siblings, 0 replies; 8+ messages in thread From: Simon Xue @ 2017-07-24 2:37 UTC (permalink / raw) To: Joerg Roedel, Heiko Stuebner Cc: linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, linux-kernel-u79uwXL29TY76Z2rM5mHXA ISP mmu can't support reset operation, it won't get the expected result when reset, but rest functions work normally. Add this patch as a WA for this issue. Signed-off-by: Simon Xue <xxm-TNX95d0MmH7DzftRWevZcw@public.gmane.org> --- changes since V2: use rockchip,disable-mmu-reset instead of rk-iommu,disable-reset-quirk drivers/iommu/rockchip-iommu.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/iommu/rockchip-iommu.c b/drivers/iommu/rockchip-iommu.c index e2852b0..78ea341 100644 --- a/drivers/iommu/rockchip-iommu.c +++ b/drivers/iommu/rockchip-iommu.c @@ -92,6 +92,7 @@ struct rk_iommu { 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 */ struct iommu_domain *domain; /* domain to which iommu is attached */ @@ -415,6 +416,9 @@ static int rk_iommu_force_reset(struct rk_iommu *iommu) int ret, i; u32 dte_addr; + if (iommu->reset_disabled) + return 0; + /* * Check if register DTE_ADDR is working by writing DTE_ADDR_DUMMY * and verifying that upper 5 nybbles are read back. @@ -1180,6 +1184,9 @@ static int rk_iommu_probe(struct platform_device *pdev) } } + iommu->reset_disabled = device_property_read_bool(dev, + "rockchip,disable-mmu-reset"); + err = iommu_device_sysfs_add(&iommu->iommu, dev, NULL, dev_name(dev)); if (err) return err; -- 1.9.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH V3 3/3] iommu/rockchip: ignore isp mmu reset operation @ 2017-07-24 2:37 ` Simon Xue 0 siblings, 0 replies; 8+ messages in thread From: Simon Xue @ 2017-07-24 2:37 UTC (permalink / raw) To: Joerg Roedel, Heiko Stuebner Cc: linux-rockchip, iommu, linux-kernel, Simon Xue ISP mmu can't support reset operation, it won't get the expected result when reset, but rest functions work normally. Add this patch as a WA for this issue. Signed-off-by: Simon Xue <xxm@rock-chips.com> --- changes since V2: use rockchip,disable-mmu-reset instead of rk-iommu,disable-reset-quirk drivers/iommu/rockchip-iommu.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/iommu/rockchip-iommu.c b/drivers/iommu/rockchip-iommu.c index e2852b0..78ea341 100644 --- a/drivers/iommu/rockchip-iommu.c +++ b/drivers/iommu/rockchip-iommu.c @@ -92,6 +92,7 @@ struct rk_iommu { 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 */ struct iommu_domain *domain; /* domain to which iommu is attached */ @@ -415,6 +416,9 @@ static int rk_iommu_force_reset(struct rk_iommu *iommu) int ret, i; u32 dte_addr; + if (iommu->reset_disabled) + return 0; + /* * Check if register DTE_ADDR is working by writing DTE_ADDR_DUMMY * and verifying that upper 5 nybbles are read back. @@ -1180,6 +1184,9 @@ static int rk_iommu_probe(struct platform_device *pdev) } } + iommu->reset_disabled = device_property_read_bool(dev, + "rockchip,disable-mmu-reset"); + err = iommu_device_sysfs_add(&iommu->iommu, dev, NULL, dev_name(dev)); if (err) return err; -- 1.9.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH V3 1/3] Docs: dt: rockchip: add rockchip,disable-mmu-reset property 2017-07-24 2:37 ` [PATCH V3 1/3] Docs: dt: rockchip: add rockchip,disable-mmu-reset property Simon Xue @ 2017-07-26 10:58 ` Joerg Roedel -1 siblings, 0 replies; 8+ messages in thread From: Joerg Roedel @ 2017-07-26 10:58 UTC (permalink / raw) To: Simon Xue Cc: linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, Heiko Stuebner, linux-kernel-u79uwXL29TY76Z2rM5mHXA On Mon, Jul 24, 2017 at 10:37:13AM +0800, Simon Xue wrote: > Add rockchip,disable-mmu-reset property to disable some mmu > reset operation > > Signed-off-by: Simon Xue <xxm-TNX95d0MmH7DzftRWevZcw@public.gmane.org> > --- > changes since V2: > use rockchip,disable-mmu-reset instead of rk-iommu,disable-reset-quirk Applied all, thanks. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH V3 1/3] Docs: dt: rockchip: add rockchip,disable-mmu-reset property @ 2017-07-26 10:58 ` Joerg Roedel 0 siblings, 0 replies; 8+ messages in thread From: Joerg Roedel @ 2017-07-26 10:58 UTC (permalink / raw) To: Simon Xue; +Cc: Heiko Stuebner, linux-rockchip, iommu, linux-kernel On Mon, Jul 24, 2017 at 10:37:13AM +0800, Simon Xue wrote: > Add rockchip,disable-mmu-reset property to disable some mmu > reset operation > > Signed-off-by: Simon Xue <xxm@rock-chips.com> > --- > changes since V2: > use rockchip,disable-mmu-reset instead of rk-iommu,disable-reset-quirk Applied all, thanks. ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2017-07-26 10:58 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-07-24 2:37 [PATCH V3 1/3] Docs: dt: rockchip: add rockchip, disable-mmu-reset property Simon Xue
2017-07-24 2:37 ` [PATCH V3 1/3] Docs: dt: rockchip: add rockchip,disable-mmu-reset property Simon Xue
[not found] ` <1500863835-32877-1-git-send-email-xxm-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
2017-07-24 2:37 ` [PATCH V3 2/3] iommu/rockchip: add multi irqs support Simon Xue
2017-07-24 2:37 ` Simon Xue
2017-07-24 2:37 ` [PATCH V3 3/3] iommu/rockchip: ignore isp mmu reset operation Simon Xue
2017-07-24 2:37 ` Simon Xue
2017-07-26 10:58 ` [PATCH V3 1/3] Docs: dt: rockchip: add rockchip,disable-mmu-reset property Joerg Roedel
2017-07-26 10:58 ` Joerg Roedel
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.