Message ID | 20180116132540.18939-6-jeffy.chen@rock-chips.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, Jan 16, 2018 at 10:25 PM, Jeffy Chen <jeffy.chen@rock-chips.com> wrote: > It's hard to undo bus_set_iommu() in the error path, so move it to the > end of rk_iommu_probe(). Does this work fine now? I remember we used to need this called in an early initcall for all the ARM/ARM64 DMA stuff to work. Best regards, Tomasz
On Wed, Jan 17, 2018 at 4:14 PM, JeffyChen <jeffy.chen@rock-chips.com> wrote: > Hi Tomasz, > > On 01/17/2018 01:26 PM, Tomasz Figa wrote: >> >> On Tue, Jan 16, 2018 at 10:25 PM, Jeffy Chen <jeffy.chen@rock-chips.com> >> wrote: >>> >>> It's hard to undo bus_set_iommu() in the error path, so move it to the >>> end of rk_iommu_probe(). >> >> >> Does this work fine now? I remember we used to need this called in an >> early initcall for all the ARM/ARM64 DMA stuff to work. >> > yes, i think it works now, i saw there are some other iommu drivers also do > this(arm-smmu-v3, mtk_iommu) :) Okay, if so: Reviewed-by: Tomasz Figa <tfiga@chromium.org> Best regards, Tomasz P.S. Looks like your email client is set to HTML messages. Your messages might end up dropped from the mailing list.
On 17/01/18 05:26, Tomasz Figa wrote: > On Tue, Jan 16, 2018 at 10:25 PM, Jeffy Chen <jeffy.chen@rock-chips.com> wrote: >> It's hard to undo bus_set_iommu() in the error path, so move it to the >> end of rk_iommu_probe(). > > Does this work fine now? I remember we used to need this called in an > early initcall for all the ARM/ARM64 DMA stuff to work. It will do once we get to patch #11 (where the IOMMU_OF_DECLARE ensures that masters defer until iommu_register() has set ops with a non-NULL .of_xlate callback); in the meantime you might end up depending on DT probe order as to whether the master uses the IOMMU or not. I'd say it's up to you guys whether you consider that a bisection-breaker or not. Robin.
On Wed, Jan 17, 2018 at 4:19 PM, Tomasz Figa <tfiga@chromium.org> wrote: > > P.S. Looks like your email client is set to HTML messages. Your > messages might end up dropped from the mailing list. Never mind. Looks like gmail started displaying quotations in plain text as graphics. Best regards, Tomasz
diff --git a/drivers/iommu/rockchip-iommu.c b/drivers/iommu/rockchip-iommu.c index bd8b32dc0db6..d2a0b0daf40d 100644 --- a/drivers/iommu/rockchip-iommu.c +++ b/drivers/iommu/rockchip-iommu.c @@ -1187,6 +1187,8 @@ static int rk_iommu_probe(struct platform_device *pdev) return err; } + bus_set_iommu(&platform_bus_type, &rk_iommu_ops); + return 0; } @@ -1218,27 +1220,19 @@ static struct platform_driver rk_iommu_driver = { static int __init rk_iommu_init(void) { - struct device_node *np; int ret; - np = of_find_matching_node(NULL, rk_iommu_dt_ids); - if (!np) - return 0; - - of_node_put(np); - - ret = bus_set_iommu(&platform_bus_type, &rk_iommu_ops); - if (ret) - return ret; - ret = platform_driver_register(&rk_iommu_domain_driver); if (ret) return ret; ret = platform_driver_register(&rk_iommu_driver); - if (ret) + if (ret) { platform_driver_unregister(&rk_iommu_domain_driver); - return ret; + return ret; + } + + return 0; } static void __exit rk_iommu_exit(void) {
It's hard to undo bus_set_iommu() in the error path, so move it to the end of rk_iommu_probe(). Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> --- Changes in v2: Move bus_set_iommu() to rk_iommu_probe(). drivers/iommu/rockchip-iommu.c | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-)