drm: mxsfb: Kernel panic on 4.10.0-rc5

Marek Vasut marex at denx.de
Fri Jan 27 20:43:46 UTC 2017


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

-- 
Best regards,
Marek Vasut


More information about the dri-devel mailing list