lkml.org 
[lkml]   [2022]   [Aug]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.18 53/93] drm/amd/display: Fix dmub soft hang for PSR 1
    Date
    From: Fangzhi Zuo <Jerry.Zuo@amd.com>

    [ Upstream commit 22676bc500c27d987a0b42cbe162aebf783f1c38 ]

    [Why]
    Unexpected change of aux hw mapping causes dmub soft hang when
    initiate aux transation at wrong aux channel.

    ddc_channel stands for hw dp aux index which is from vbios,
    but link_index is pure software concept for link count depending on which link
    is probed first. They are not interchangeable.

    dmub aux transaction could pass if happens eDP link_index gets
    the same value as vbios ddc_channel, e.g., ddc_channel = 1, link_index = 1
    if they gets different, e.g., ddc_channel = 2, link_index = 0, overwrite
    ddc_channel with link_index will have wrong ddc channel being used for aux
    transaction in dmub PSR, cause aux transaction soft hang.

    [How]
    ddc_channel mapping to each link is determined by vbios and further
    parsed in dc. Such info. should not be touched in any kind, otherwise
    the mapping is screwed up leading to aux transaction timeout.

    Reviewed-by: Aurabindo Jayamohanan Pillai <Aurabindo.Pillai@amd.com>
    Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
    Signed-off-by: Fangzhi Zuo <Jerry.Zuo@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 4 +---
    1 file changed, 1 insertion(+), 3 deletions(-)

    diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
    index a2575195c4e0..1991a8a4826e 100644
    --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
    +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
    @@ -8563,7 +8563,7 @@ static int amdgpu_dm_i2c_xfer(struct i2c_adapter *i2c_adap,

    if (dc_submit_i2c(
    ddc_service->ctx->dc,
    - ddc_service->ddc_pin->hw_info.ddc_channel,
    + ddc_service->link->link_index,
    &cmd))
    result = num;

    @@ -8599,8 +8599,6 @@ create_i2c(struct ddc_service *ddc_service,
    snprintf(i2c->base.name, sizeof(i2c->base.name), "AMDGPU DM i2c hw bus %d", link_index);
    i2c_set_adapdata(&i2c->base, i2c);
    i2c->ddc_service = ddc_service;
    - if (i2c->ddc_service->ddc_pin)
    - i2c->ddc_service->ddc_pin->hw_info.ddc_channel = link_index;

    return i2c;
    }
    --
    2.35.1
    \
     
     \ /
      Last update: 2022-08-11 18:02    [W:4.649 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site