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