• Stephen Boyd's avatar
    drm/msm/disp/dpu: Use proper define for drm_encoder_init() 'encoder_type' · 2c043eef
    Stephen Boyd authored
    We got a bug report that this function oopses when trying to do a kasprintf().
    
    PC is at string+0x2c/0x60
    LR is at vsnprintf+0x28c/0x4ec
    pc : [<ffffff80088d35d8>] lr : [<ffffff80088d5fc4>] pstate: a0c00049
    sp : ffffff80095fb540
    x29: ffffff80095fb540 x28: ffffff8008ad42bc
    x27: 00000000ffffffd8 x26: 0000000000000000
    x25: ffffff8008c216c8 x24: 0000000000000000
    x23: 0000000000000000 x22: ffffff80095fb720
    x21: 0000000000000000 x20: ffffff80095fb720
    x19: ffffff80095fb6f0 x18: 000000000000000a
    x17: 00000000b42ba473 x16: ffffff800805bbe8
    x15: 00000000000a157d x14: 000000000000000c
    x13: 0000000000000000 x12: 0000ffff0000000f
    x11: 0000000000000003 x10: 0000000000000001
    x9 : 0000000000000040 x8 : 000000000000001c
    x7 : ffffffffffffffff x6 : 0000000000000000
    x5 : 0000000000000228 x4 : 0000000000000000
    x3 : ffff0a00ffffff04 x2 : 0000000000007961
    x1 : 0000000000000000 x0 : 0000000000000000
    Process kworker/3:1 (pid: 61, stack limit = 0xffffff80095f8000)
    Call trace:
    Exception stack(0xffffff80095fb400 to 0xffffff80095fb540)
    b400: 0000000000000000 0000000000000000 0000000000007961 ffff0a00ffffff04
    b420: 0000000000000000 0000000000000228 0000000000000000 ffffffffffffffff
    b440: 000000000000001c 0000000000000040 0000000000000001 0000000000000003
    b460: 0000ffff0000000f 0000000000000000 000000000000000c 00000000000a157d
    b480: ffffff800805bbe8 00000000b42ba473 000000000000000a ffffff80095fb6f0
    b4a0: ffffff80095fb720 0000000000000000 ffffff80095fb720 0000000000000000
    b4c0: 0000000000000000 ffffff8008c216c8 0000000000000000 00000000ffffffd8
    b4e0: ffffff8008ad42bc ffffff80095fb540 ffffff80088d5fc4 ffffff80095fb540
    b500: ffffff80088d35d8 00000000a0c00049 ffffff80095fb550 ffffff80080d06a4
    b520: ffffffffffffffff ffffff80088d5e0c ffffff80095fb540 ffffff80088d35d8
    [<ffffff80088d35d8>] string+0x2c/0x60
    [<ffffff80088d5fc4>] vsnprintf+0x28c/0x4ec
    [<ffffff80083973b8>] kvasprintf+0x68/0x100
    [<ffffff800839755c>] kasprintf+0x60/0x80
    [<ffffff800849cc24>] drm_encoder_init+0x134/0x164
    [<ffffff80084d9a7c>] dpu_encoder_init+0x60/0x94
    [<ffffff80084eced0>] _dpu_kms_drm_obj_init+0xa0/0x424
    [<ffffff80084ed870>] dpu_kms_hw_init+0x61c/0x6bc
    [<ffffff80084f7614>] msm_drm_bind+0x380/0x67c
    [<ffffff80085114e4>] try_to_bring_up_master+0x228/0x264
    [<ffffff80085116e8>] component_master_add_with_match+0x90/0xc0
    [<ffffff80084f722c>] msm_pdev_probe+0x260/0x2c8
    [<ffffff800851a910>] platform_drv_probe+0x58/0xa8
    [<ffffff80085185c8>] driver_probe_device+0x2d8/0x40c
    [<ffffff8008518928>] __device_attach_driver+0xd4/0x10c
    [<ffffff800851644c>] bus_for_each_drv+0xb4/0xd0
    [<ffffff8008518230>] __device_attach+0xd0/0x160
    [<ffffff8008518984>] device_initial_probe+0x24/0x30
    [<ffffff800851744c>] bus_probe_device+0x38/0x98
    [<ffffff8008517aac>] deferred_probe_work_func+0x144/0x148
    [<ffffff80080c8654>] process_one_work+0x218/0x3bc
    [<ffffff80080c883c>] process_scheduled_works+0x44/0x48
    [<ffffff80080c95bc>] worker_thread+0x288/0x32c
    [<ffffff80080cea30>] kthread+0x134/0x13c
    [<ffffff8008084750>] ret_from_fork+0x10/0x18
    Code: 910003fd 2a0403e6 eb0400ff 54000060 (38646845)
    
    Looking at the code I see that drm_encoder_init() is called from the DPU
    code with 'DRM_MODE_CONNECTOR_DSI' passed in as the 'encoder_type'
    argument (follow from _dpu_kms_initialize_dsi()). That corresponds to
    the integer 16. That is then indexed into drm_encoder_enum_list in
    drm_encoder_init() to look up the name of the encoder. If you're still
    following along, that's an encoder not a connector! We really want to
    use DRM_MODE_ENCODER_DSI (integer 6) instead of DRM_MODE_CONNECTOR_DSI
    here, or we'll go out of bounds of the encoder array. Pass the right
    thing and everything is fine.
    
    Cc: Jeykumar Sankaran <jsanka@codeaurora.org>
    Cc: Jordan Crouse <jcrouse@codeaurora.org>
    Cc: Sean Paul <seanpaul@chromium.org>
    Fixes: 25fdd593 (drm/msm: Add SDM845 DPU support)
    Tested-by: default avatarSai Prakash Ranjan <saiprakash.ranjan@codeaurora.org>
    Reviewed-by: default avatarJeykumar Sankaran <jsanka@codeaurora.org>
    Signed-off-by: default avatarStephen Boyd <swboyd@chromium.org>
    Signed-off-by: default avatarSean Paul <seanpaul@chromium.org>
    Signed-off-by: default avatarRob Clark <robdclark@gmail.com>
    2c043eef
dpu_kms.c 32 KB