drm: mxsfb: Kernel panic on 4.10.0-rc5

Marek Vasut marex at denx.de
Sat Jan 28 16:19:32 UTC 2017


On 01/28/2017 01:46 PM, Breno Matheus Lima wrote:
> 2017-01-27 18:43 GMT-02:00 Marek Vasut <marex at 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 at 02200000
>>>> /spba-bus at 02200000/lcdif at 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.

-- 
Best regards,
Marek Vasut


More information about the dri-devel mailing list