lkml.org 
[lkml]   [2021]   [Mar]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.11 614/775] drm/amd/display: Add vupdate_no_lock interrupts for DCN2.1
    Date
    From: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>

    commit 688f97ed3f5e339c0c2c09d9ee7ff23d5807b0a7 upstream.

    When run igt@kms_vrr in a device that uses DCN2.1 architecture, we
    noticed multiple failures. Furthermore, when we tested a VRR demo, we
    noticed a system hang where the mouse pointer still works, but the
    entire system freezes; in this case, we don't see any dmesg warning or
    failure messages kernel. This happens due to a lack of vupdate_no_lock
    interrupt, making the userspace wait eternally to get the event back.
    For fixing this issue, we need to add the vupdate_no_lock interrupt in
    the interrupt list.

    Signed-off-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
    Acked-by: Bindu Ramamurthy <bindu.r@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/gpu/drm/amd/display/dc/irq/dcn21/irq_service_dcn21.c | 22 +++++++++++
    1 file changed, 22 insertions(+)

    --- a/drivers/gpu/drm/amd/display/dc/irq/dcn21/irq_service_dcn21.c
    +++ b/drivers/gpu/drm/amd/display/dc/irq/dcn21/irq_service_dcn21.c
    @@ -168,6 +168,11 @@ static const struct irq_source_info_func
    .ack = NULL
    };

    +static const struct irq_source_info_funcs vupdate_no_lock_irq_info_funcs = {
    + .set = NULL,
    + .ack = NULL
    +};
    +
    #undef BASE_INNER
    #define BASE_INNER(seg) DMU_BASE__INST0_SEG ## seg

    @@ -230,6 +235,17 @@ static const struct irq_source_info_func
    .funcs = &vblank_irq_info_funcs\
    }

    +/* vupdate_no_lock_int_entry maps to DC_IRQ_SOURCE_VUPDATEx, to match semantic
    + * of DCE's DC_IRQ_SOURCE_VUPDATEx.
    + */
    +#define vupdate_no_lock_int_entry(reg_num)\
    + [DC_IRQ_SOURCE_VUPDATE1 + reg_num] = {\
    + IRQ_REG_ENTRY(OTG, reg_num,\
    + OTG_GLOBAL_SYNC_STATUS, VUPDATE_NO_LOCK_INT_EN,\
    + OTG_GLOBAL_SYNC_STATUS, VUPDATE_NO_LOCK_EVENT_CLEAR),\
    + .funcs = &vupdate_no_lock_irq_info_funcs\
    + }
    +
    #define vblank_int_entry(reg_num)\
    [DC_IRQ_SOURCE_VBLANK1 + reg_num] = {\
    IRQ_REG_ENTRY(OTG, reg_num,\
    @@ -338,6 +354,12 @@ irq_source_info_dcn21[DAL_IRQ_SOURCES_NU
    vupdate_int_entry(3),
    vupdate_int_entry(4),
    vupdate_int_entry(5),
    + vupdate_no_lock_int_entry(0),
    + vupdate_no_lock_int_entry(1),
    + vupdate_no_lock_int_entry(2),
    + vupdate_no_lock_int_entry(3),
    + vupdate_no_lock_int_entry(4),
    + vupdate_no_lock_int_entry(5),
    vblank_int_entry(0),
    vblank_int_entry(1),
    vblank_int_entry(2),

    \
     
     \ /
      Last update: 2021-03-02 14:40    [W:4.047 / U:0.240 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site