From mboxrd@z Thu Jan 1 00:00:00 1970 From: laurent.pinchart@ideasonboard.com (Laurent Pinchart) Date: Wed, 31 Oct 2018 15:10:00 +0200 Subject: omap4: support for manually updated display In-Reply-To: <20181020003812.GE43338@atomide.com> References: <20180830090456.GA17277@amd> <20181019225827.s76wapp3cxrmp5af@earth.universe> <20181020003812.GE43338@atomide.com> Message-ID: <2348762.PvrRPAx0JW@avalon> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hi Tony, On Saturday, 20 October 2018 03:38:12 EET Tony Lindgren wrote: > * Sebastian Reichel [181019 15:58]: > > I uploaded my current status here. It's not based on the newest > > -next, but contains the interesting patches from Laurent. Also > > the last few patches are not yet cleaned up, sorry for the mess. > > Way to go, thanks :) Here's a quick fix for issues with loading > and unloading modules, seems like this should be fixed somewhere > else though? Thanks for the report, I'll have a look at this. > 8< ----------------------- > Unload of hdmi: > > Unable to handle kernel NULL pointer dereference at virtual address 00000278 > (hdmi_runtime_resume [omapdss]) from [] > (__rpm_callback+0x144/0x1d8) (__rpm_callback) from [] > (rpm_callback+0x20/0x80) > (rpm_callback) from [] (rpm_resume+0x60c/0x828) > (rpm_resume) from [] (__pm_runtime_resume+0x4c/0x64) > (__pm_runtime_resume) from [] > (device_release_driver_internal+0x130/0x234) > (device_release_driver_internal) from [] > (driver_detach+0x38/0x6c) (driver_detach) from [] > (bus_remove_driver+0x4c/0xa4) > (bus_remove_driver) from [] > (platform_unregister_drivers+0x20/0x2c) (platform_unregister_drivers) from > [] (sys_delete_module+0x1c0/0x230) (sys_delete_module) from > [] (ret_fast_syscall+0x0/0x28) > > > Unload of dsi: > > Unable to handle kernel NULL pointer dereference at virtual address 00000278 > (dsi_runtime_resume [omapdss]) from [] > (__rpm_callback+0x144/0x1d8) (__rpm_callback) from [] > (rpm_callback+0x20/0x80) > (rpm_callback) from [] (rpm_resume+0x60c/0x828) > (rpm_resume) from [] (__pm_runtime_resume+0x4c/0x64) > (__pm_runtime_resume) from [] (driver_probe_device+0x38/0x164) > (driver_probe_device) from [] (__driver_attach+0xe4/0xe8) > (__driver_attach) from [] (bus_for_each_dev+0x70/0xb4) > (bus_for_each_dev) from [] (bus_add_driver+0x198/0x1fc) > (bus_add_driver) from [] (driver_register+0x74/0x108) > (driver_register) from [] (do_one_initcall+0x80/0x31c) > (do_one_initcall) from [] (do_init_module+0x5c/0x1f8) > (do_init_module) from [] (load_module+0x1360/0x16c0) > (load_module) from [] (sys_finit_module+0xbc/0xdc) > (sys_finit_module) from [] (ret_fast_syscall+0x0/0x28) > > diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c > b/drivers/gpu/drm/omapdrm/dss/dsi.c --- a/drivers/gpu/drm/omapdrm/dss/dsi.c > +++ b/drivers/gpu/drm/omapdrm/dss/dsi.c > @@ -5484,6 +5484,9 @@ static int dsi_runtime_resume(struct device *dev) > struct dsi_data *dsi = dev_get_drvdata(dev); > int r; > > + if (!dsi || !dsi->dss || !dsi->dss->dispc) > + return -ENODEV; > + > r = dispc_runtime_get(dsi->dss->dispc); > if (r) > return r; > diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c > b/drivers/gpu/drm/omapdrm/dss/hdmi4.c --- > a/drivers/gpu/drm/omapdrm/dss/hdmi4.c > +++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c > @@ -847,6 +847,9 @@ static int hdmi_runtime_resume(struct device *dev) > struct omap_hdmi *hdmi = dev_get_drvdata(dev); > int r; > > + if (!hdmi || !hdmi->dss || !hdmi->dss->dispc) > + return -ENODEV; > + > r = dispc_runtime_get(hdmi->dss->dispc); > if (r < 0) > return r; -- Regards, Laurent Pinchart