Message ID | fb6eba06-334d-5b2d-9d2b-4f9623987744@denx.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
2017-01-27 18:43 GMT-02:00 Marek Vasut <marex@denx.de>: > > On 01/27/2017 09:40 PM, Marek Vasut wrote: > > On 01/27/2017 05:04 PM, Breno Matheus Lima wrote: > >> Hi, > > > > Hi, > > > >> I'm trying to use kernel 4.10.0-rc5 and DRM_MXS driver on a i.MX6SX SabreSD > >> Rev A, but it crashes during the boot, I'm also disabling the FB_MXS driver > >> to avoid any conflict. By using the driver FB_MXS the board boots normally > >> and the display is working as well. > > > > OK > > > >> I would like to know if is possible to use the DRM_MXS driver with the > >> deprecated bindings as according to the documentation located at > >> Documentation/devicetree/bindings/display/mxsfb.txt, or if is just possible > >> to > >> use the DRM driver with the new bindings. > > > > No, the deprecated bindings are deprecated and DO NOT WORK with this > > driver. Use the new of-graph stuff. > > Good to know > >> Please find below the log: > >> > >> [ 1.076530] [drm] Initialized > >> [ 1.086305] etnaviv gpu-subsystem: bound 1800000.gpu (ops gpu_ops) > >> [ 1.092590] etnaviv-gpu 1800000.gpu: model: GC400, revision: 4645 > >> [ 1.098703] etnaviv-gpu 1800000.gpu: Need to move linear window on > >> MC1.0, disabling TS > >> [ 1.154691] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013). > >> [ 1.161425] [drm] No driver support for vblank timestamp query. > >> [ 1.167799] OF: graph: no port node found in /soc/aips-bus@02200000 > >> /spba-bus@02200000/lcdif@02220000 > >> [ 1.177132] Unable to handle kernel NULL pointer dereference at virtual > >> address 00000004 > > > > Try with this patch please: > > > > diff --git a/drivers/gpu/drm/mxsfb/mxsfb_out.c > > b/drivers/gpu/drm/mxsfb/mxsfb_out.c > > index fa8d17399407..b8e81422d4e2 100644 > > --- a/drivers/gpu/drm/mxsfb/mxsfb_out.c > > +++ b/drivers/gpu/drm/mxsfb/mxsfb_out.c > > @@ -112,6 +112,7 @@ static int mxsfb_attach_endpoint(struct drm_device *drm, > > > > int mxsfb_create_output(struct drm_device *drm) > > { > > + struct mxsfb_drm_private *mxsfb = drm->dev_private; > > struct device_node *ep_np = NULL; > > struct of_endpoint ep; > > int ret; > > @@ -127,5 +128,8 @@ int mxsfb_create_output(struct drm_device *drm) > > } > > } > > > > + if (!mxsfb->panel) > > + return -EPROBE_DEFER; > > + > > return 0; > > } > > > Rationale behind the patch: > > IFF you use some odd bindings or your of-graph panel bindings are > missing from the DT , THEN the for_each_endpoint_of_node() body > is never executed, thus mxsfb->panel remains NULL and yet the > function returns 0/success . mxsfb_load() therefore doesn't detect > this failure and calls drm_panel_attach() with mxsfb->panel = NULL, > thus the crash. > Thanks for the explanation, I'm going to try with this patch and figure out how to implement it on imx6sx-sdb.dtsi. > -- > Best regards, > Marek Vasut Best Regards, Breno Matheus Lima
On 01/28/2017 01:46 PM, Breno Matheus Lima wrote: > 2017-01-27 18:43 GMT-02:00 Marek Vasut <marex@denx.de>: >> >> On 01/27/2017 09:40 PM, Marek Vasut wrote: >>> On 01/27/2017 05:04 PM, Breno Matheus Lima wrote: >>>> Hi, >>> >>> Hi, >>> >>>> I'm trying to use kernel 4.10.0-rc5 and DRM_MXS driver on a i.MX6SX > SabreSD >>>> Rev A, but it crashes during the boot, I'm also disabling the FB_MXS > driver >>>> to avoid any conflict. By using the driver FB_MXS the board boots > normally >>>> and the display is working as well. >>> >>> OK >>> >>>> I would like to know if is possible to use the DRM_MXS driver with the >>>> deprecated bindings as according to the documentation located at >>>> Documentation/devicetree/bindings/display/mxsfb.txt, or if is just > possible >>>> to >>>> use the DRM driver with the new bindings. >>> >>> No, the deprecated bindings are deprecated and DO NOT WORK with this >>> driver. Use the new of-graph stuff. >>> > > Good to know > >>>> Please find below the log: >>>> >>>> [ 1.076530] [drm] Initialized >>>> [ 1.086305] etnaviv gpu-subsystem: bound 1800000.gpu (ops gpu_ops) >>>> [ 1.092590] etnaviv-gpu 1800000.gpu: model: GC400, revision: 4645 >>>> [ 1.098703] etnaviv-gpu 1800000.gpu: Need to move linear window on >>>> MC1.0, disabling TS >>>> [ 1.154691] [drm] Supports vblank timestamp caching Rev 2 > (21.10.2013). >>>> [ 1.161425] [drm] No driver support for vblank timestamp query. >>>> [ 1.167799] OF: graph: no port node found in /soc/aips-bus@02200000 >>>> /spba-bus@02200000/lcdif@02220000 >>>> [ 1.177132] Unable to handle kernel NULL pointer dereference at > virtual >>>> address 00000004 >>> >>> Try with this patch please: >>> >>> diff --git a/drivers/gpu/drm/mxsfb/mxsfb_out.c >>> b/drivers/gpu/drm/mxsfb/mxsfb_out.c >>> index fa8d17399407..b8e81422d4e2 100644 >>> --- a/drivers/gpu/drm/mxsfb/mxsfb_out.c >>> +++ b/drivers/gpu/drm/mxsfb/mxsfb_out.c >>> @@ -112,6 +112,7 @@ static int mxsfb_attach_endpoint(struct drm_device > *drm, >>> >>> int mxsfb_create_output(struct drm_device *drm) >>> { >>> + struct mxsfb_drm_private *mxsfb = drm->dev_private; >>> struct device_node *ep_np = NULL; >>> struct of_endpoint ep; >>> int ret; >>> @@ -127,5 +128,8 @@ int mxsfb_create_output(struct drm_device *drm) >>> } >>> } >>> >>> + if (!mxsfb->panel) >>> + return -EPROBE_DEFER; >>> + >>> return 0; >>> } >>> >> Rationale behind the patch: >> >> IFF you use some odd bindings or your of-graph panel bindings are >> missing from the DT , THEN the for_each_endpoint_of_node() body >> is never executed, thus mxsfb->panel remains NULL and yet the >> function returns 0/success . mxsfb_load() therefore doesn't detect >> this failure and calls drm_panel_attach() with mxsfb->panel = NULL, >> thus the crash. >> > > Thanks for the explanation, I'm going to try with this patch and figure out > how to implement it on imx6sx-sdb.dtsi. patch -Np1 -i file.patch Then rebuild the kernel, boot, see if it still crashes.
diff --git a/drivers/gpu/drm/mxsfb/mxsfb_out.c b/drivers/gpu/drm/mxsfb/mxsfb_out.c index fa8d17399407..b8e81422d4e2 100644 --- a/drivers/gpu/drm/mxsfb/mxsfb_out.c +++ b/drivers/gpu/drm/mxsfb/mxsfb_out.c @@ -112,6 +112,7 @@ static int mxsfb_attach_endpoint(struct drm_device *drm, int mxsfb_create_output(struct drm_device *drm) { + struct mxsfb_drm_private *mxsfb = drm->dev_private; struct device_node *ep_np = NULL; struct of_endpoint ep; int ret; @@ -127,5 +128,8 @@ int mxsfb_create_output(struct drm_device *drm) } } + if (!mxsfb->panel) + return -EPROBE_DEFER; + return 0; }