From: Vicente Bergas vicencb@gmail.com
As explained by Robin Murphy:
the IOMMU shutdown disables paging, so if the VOP is still scanning out then that will result in whatever IOVAs it was using now going straight out onto the bus as physical addresses.
We had a more radical approach before in commit 7f3ef5dedb14 ("drm/rockchip: Allow driver to be shutdown on reboot/kexec") but that resulted in new warnings and oopses on shutdown on rk3399 chromeos devices.
So second try is resurrecting Vicentes shutdown change which should achieve the same result but in a less drastic way.
Fixes: 63238173b2fa ("Revert drm/rockchip: Allow driver to be shutdown on reboot/kexec") Cc: Jeffy Chen jeffy.chen@rock-chips.com Cc: Robin Murphy robin.murphy@arm.com Cc: Marc Zyngier marc.zyngier@arm.com Cc: Brian Norris briannorris@chromium.org Cc: Doug Anderson dianders@chromium.org Cc: stable@vger.kernel.org Suggested-by: JeffyChen jeffy.chen@rock-chips.com Suggested-by: Robin Murphy robin.murphy@arm.com Signed-off-by: Vicente Bergas vicencb@gmail.com [adapted commit message to explain the history] Signed-off-by: Heiko Stuebner heiko@sntech.de --- drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 9 +++++++++ 1 file changed, 9 insertions(+)
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c index 8d7a634c12c2..cb938d3cd3c2 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c @@ -448,6 +448,14 @@ static int rockchip_drm_platform_remove(struct platform_device *pdev) return 0; }
+static void rockchip_drm_platform_shutdown(struct platform_device *pdev) +{ + struct drm_device *drm = platform_get_drvdata(pdev); + + if (drm) + drm_atomic_helper_shutdown(drm); +} + static const struct of_device_id rockchip_drm_dt_ids[] = { { .compatible = "rockchip,display-subsystem", }, { /* sentinel */ }, @@ -457,6 +465,7 @@ MODULE_DEVICE_TABLE(of, rockchip_drm_dt_ids); static struct platform_driver rockchip_drm_platform_driver = { .probe = rockchip_drm_platform_probe, .remove = rockchip_drm_platform_remove, + .shutdown = rockchip_drm_platform_shutdown, .driver = { .name = "rockchip-drm", .of_match_table = rockchip_drm_dt_ids,
On Tue, Apr 2, 2019 at 4:38 AM Heiko Stuebner heiko@sntech.de wrote:
From: Vicente Bergas vicencb@gmail.com
As explained by Robin Murphy:
the IOMMU shutdown disables paging, so if the VOP is still scanning out then that will result in whatever IOVAs it was using now going straight out onto the bus as physical addresses.
We had a more radical approach before in commit 7f3ef5dedb14 ("drm/rockchip: Allow driver to be shutdown on reboot/kexec") but that resulted in new warnings and oopses on shutdown on rk3399 chromeos devices.
So second try is resurrecting Vicentes shutdown change which should achieve the same result but in a less drastic way.
Works without complaints on RK3399 Scarlet devices:
Tested-by: Brian Norris briannorris@chromium.org
Can't vouch for kexec.
Hi,
On Tue, Apr 2, 2019 at 4:38 AM Heiko Stuebner heiko@sntech.de wrote:
From: Vicente Bergas vicencb@gmail.com
As explained by Robin Murphy:
the IOMMU shutdown disables paging, so if the VOP is still scanning out then that will result in whatever IOVAs it was using now going straight out onto the bus as physical addresses.
We had a more radical approach before in commit 7f3ef5dedb14 ("drm/rockchip: Allow driver to be shutdown on reboot/kexec") but that resulted in new warnings and oopses on shutdown on rk3399 chromeos devices.
So second try is resurrecting Vicentes shutdown change which should achieve the same result but in a less drastic way.
Fixes: 63238173b2fa ("Revert drm/rockchip: Allow driver to be shutdown on reboot/kexec") Cc: Jeffy Chen jeffy.chen@rock-chips.com Cc: Robin Murphy robin.murphy@arm.com Cc: Marc Zyngier marc.zyngier@arm.com Cc: Brian Norris briannorris@chromium.org Cc: Doug Anderson dianders@chromium.org Cc: stable@vger.kernel.org Suggested-by: JeffyChen jeffy.chen@rock-chips.com Suggested-by: Robin Murphy robin.murphy@arm.com Signed-off-by: Vicente Bergas vicencb@gmail.com [adapted commit message to explain the history] Signed-off-by: Heiko Stuebner heiko@sntech.de
drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 9 +++++++++ 1 file changed, 9 insertions(+)
I picked this back to the Chrome OS 4.19 kernel and tried it on rk3288-veyron-jerry. Rebooting caused no complaints (I confirmed this code was running by adding a printk).
I plugged in to an HDMI monitor. Rebooting caused no complaints.
I then let the display idle off (just in case that mattered). Again no complaints.
Thus, in case it's helpful:
Tested-by: Douglas Anderson dianders@chromium.org
Hi Heiko,
On 02/04/2019 12:37, Heiko Stuebner wrote:
From: Vicente Bergas vicencb@gmail.com
As explained by Robin Murphy:
the IOMMU shutdown disables paging, so if the VOP is still scanning out then that will result in whatever IOVAs it was using now going straight out onto the bus as physical addresses.
We had a more radical approach before in commit 7f3ef5dedb14 ("drm/rockchip: Allow driver to be shutdown on reboot/kexec") but that resulted in new warnings and oopses on shutdown on rk3399 chromeos devices.
So second try is resurrecting Vicentes shutdown change which should achieve the same result but in a less drastic way.
Fixes: 63238173b2fa ("Revert drm/rockchip: Allow driver to be shutdown on reboot/kexec") Cc: Jeffy Chen jeffy.chen@rock-chips.com Cc: Robin Murphy robin.murphy@arm.com Cc: Marc Zyngier marc.zyngier@arm.com Cc: Brian Norris briannorris@chromium.org Cc: Doug Anderson dianders@chromium.org Cc: stable@vger.kernel.org Suggested-by: JeffyChen jeffy.chen@rock-chips.com Suggested-by: Robin Murphy robin.murphy@arm.com Signed-off-by: Vicente Bergas vicencb@gmail.com [adapted commit message to explain the history] Signed-off-by: Heiko Stuebner heiko@sntech.de
Sorry it took so long to test this. I've just given it a go on kevin, and managed to kexec into a secondary kernel. So FWIW:
Acked-by: Marc Zyngier marc.zyngier@arm.com
M.
Am Dienstag, 2. April 2019, 13:37:53 CEST schrieb Heiko Stuebner:
From: Vicente Bergas vicencb@gmail.com
As explained by Robin Murphy:
the IOMMU shutdown disables paging, so if the VOP is still scanning out then that will result in whatever IOVAs it was using now going straight out onto the bus as physical addresses.
We had a more radical approach before in commit 7f3ef5dedb14 ("drm/rockchip: Allow driver to be shutdown on reboot/kexec") but that resulted in new warnings and oopses on shutdown on rk3399 chromeos devices.
So second try is resurrecting Vicentes shutdown change which should achieve the same result but in a less drastic way.
Fixes: 63238173b2fa ("Revert drm/rockchip: Allow driver to be shutdown on reboot/kexec") Cc: Jeffy Chen jeffy.chen@rock-chips.com Cc: Robin Murphy robin.murphy@arm.com Cc: Marc Zyngier marc.zyngier@arm.com Cc: Brian Norris briannorris@chromium.org Cc: Doug Anderson dianders@chromium.org Cc: stable@vger.kernel.org Suggested-by: JeffyChen jeffy.chen@rock-chips.com Suggested-by: Robin Murphy robin.murphy@arm.com Signed-off-by: Vicente Bergas vicencb@gmail.com [adapted commit message to explain the history] Signed-off-by: Heiko Stuebner heiko@sntech.de
applied to drm-misc-next
Not fixes, to give it more exposure this time. It still has a stable tag so should nevertheless trickle down to stable in time as well.
Thanks for all the testing Heiko
linux-stable-mirror@lists.linaro.org