lkml.org 
[lkml]   [2020]   [Jan]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 004/191] drm/amdgpu: add check before enabling/disabling broadcast mode
    Date
    From: Guchun Chen <guchun.chen@amd.com>

    [ Upstream commit 6e807535dae5dbbd53bcc5e81047a20bf5eb08ea ]

    When security violation from new vbios happens, data fabric is
    risky to stop working. So prevent the direct access to DF
    mmFabricConfigAccessControl from the new vbios and onwards.

    Signed-off-by: Guchun Chen <guchun.chen@amd.com>
    Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/gpu/drm/amd/amdgpu/df_v3_6.c | 38 ++++++++++++++++------------
    1 file changed, 22 insertions(+), 16 deletions(-)

    diff --git a/drivers/gpu/drm/amd/amdgpu/df_v3_6.c b/drivers/gpu/drm/amd/amdgpu/df_v3_6.c
    index 5850c8e34caa..97d11d792351 100644
    --- a/drivers/gpu/drm/amd/amdgpu/df_v3_6.c
    +++ b/drivers/gpu/drm/amd/amdgpu/df_v3_6.c
    @@ -261,23 +261,29 @@ static void df_v3_6_update_medium_grain_clock_gating(struct amdgpu_device *adev,
    {
    u32 tmp;

    - /* Put DF on broadcast mode */
    - adev->df_funcs->enable_broadcast_mode(adev, true);
    -
    - if (enable && (adev->cg_flags & AMD_CG_SUPPORT_DF_MGCG)) {
    - tmp = RREG32_SOC15(DF, 0, mmDF_PIE_AON0_DfGlobalClkGater);
    - tmp &= ~DF_PIE_AON0_DfGlobalClkGater__MGCGMode_MASK;
    - tmp |= DF_V3_6_MGCG_ENABLE_15_CYCLE_DELAY;
    - WREG32_SOC15(DF, 0, mmDF_PIE_AON0_DfGlobalClkGater, tmp);
    - } else {
    - tmp = RREG32_SOC15(DF, 0, mmDF_PIE_AON0_DfGlobalClkGater);
    - tmp &= ~DF_PIE_AON0_DfGlobalClkGater__MGCGMode_MASK;
    - tmp |= DF_V3_6_MGCG_DISABLE;
    - WREG32_SOC15(DF, 0, mmDF_PIE_AON0_DfGlobalClkGater, tmp);
    - }
    + if (adev->cg_flags & AMD_CG_SUPPORT_DF_MGCG) {
    + /* Put DF on broadcast mode */
    + adev->df_funcs->enable_broadcast_mode(adev, true);
    +
    + if (enable) {
    + tmp = RREG32_SOC15(DF, 0,
    + mmDF_PIE_AON0_DfGlobalClkGater);
    + tmp &= ~DF_PIE_AON0_DfGlobalClkGater__MGCGMode_MASK;
    + tmp |= DF_V3_6_MGCG_ENABLE_15_CYCLE_DELAY;
    + WREG32_SOC15(DF, 0,
    + mmDF_PIE_AON0_DfGlobalClkGater, tmp);
    + } else {
    + tmp = RREG32_SOC15(DF, 0,
    + mmDF_PIE_AON0_DfGlobalClkGater);
    + tmp &= ~DF_PIE_AON0_DfGlobalClkGater__MGCGMode_MASK;
    + tmp |= DF_V3_6_MGCG_DISABLE;
    + WREG32_SOC15(DF, 0,
    + mmDF_PIE_AON0_DfGlobalClkGater, tmp);
    + }

    - /* Exit broadcast mode */
    - adev->df_funcs->enable_broadcast_mode(adev, false);
    + /* Exit broadcast mode */
    + adev->df_funcs->enable_broadcast_mode(adev, false);
    + }
    }

    static void df_v3_6_get_clockgating_state(struct amdgpu_device *adev,
    --
    2.20.1


    \
     
     \ /
      Last update: 2020-01-07 21:57    [W:3.115 / U:1.200 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site