diff mbox

drm: mxsfb: Kernel panic on 4.10.0-rc5

Message ID fb6eba06-334d-5b2d-9d2b-4f9623987744@denx.de (mailing list archive)
State New, archived
Headers show

Commit Message

Marek Vasut Jan. 27, 2017, 8:40 p.m. UTC
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.

> 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:

Comments

Breno Matheus Lima Jan. 28, 2017, 12:46 p.m. UTC | #1
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
Marek Vasut Jan. 28, 2017, 4:19 p.m. UTC | #2
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 mbox

Patch

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;
 }