Message ID | 20190402113753.10118-1-heiko@sntech.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] drm/rockchip: shutdown drm subsystem on shutdown | expand |
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
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,