• Gustavo A. R. Silva's avatar
    drm/radeon/si_dpm: Fix SMU power state load · cc1a54d8
    Gustavo A. R. Silva authored
    Create new structure SISLANDS_SMC_SWSTATE_SINGLE, as initialState.levels
    and ACPIState.levels are never actually used as flexible arrays. Those
    arrays can be used as simple objects of type
    SISLANDS_SMC_HW_PERFORMANCE_LEVEL, instead.
    
    Currently, the code fails because flexible array _levels_ in
    struct SISLANDS_SMC_SWSTATE doesn't allow for code that access
    the first element of initialState.levels and ACPIState.levels
    arrays:
    
    4353         table->initialState.levels[0].mclk.vDLL_CNTL =
    4354                 cpu_to_be32(si_pi->clock_registers.dll_cntl);
    ...
    4555         table->ACPIState.levels[0].mclk.vDLL_CNTL =
    4556                 cpu_to_be32(dll_cntl);
    
    because such element cannot exist without previously allocating
    any dynamic memory for it (which never actually happens).
    
    That's why struct SISLANDS_SMC_SWSTATE should only be used as type
    for object driverState and new struct SISLANDS_SMC_SWSTATE_SINGLE is
    created as type for objects initialState, ACPIState and ULVState.
    
    Also, with the change from one-element array to flexible-array member
    in commit 96e27e8d ("drm/radeon/si_dpm: Replace one-element array
    with flexible-array in struct SISLANDS_SMC_SWSTATE"), the size of
    dpmLevels in struct SISLANDS_SMC_STATETABLE should be fixed to be
    SISLANDS_MAX_SMC_PERFORMANCE_LEVELS_PER_SWSTATE instead of
    SISLANDS_MAX_SMC_PERFORMANCE_LEVELS_PER_SWSTATE - 1.
    
    Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/1583
    Fixes: 96e27e8d ("drm/radeon/si_dpm: Replace one-element array with flexible-array in struct SISLANDS_SMC_SWSTATE")
    Cc: stable@vger.kernel.org
    Reported-by: default avatarKai-Heng Feng <kai.heng.feng@canonical.com>
    Tested-by: default avatarKai-Heng Feng <kai.heng.feng@canonical.com>
    Signed-off-by: default avatarGustavo A. R. Silva <gustavoars@kernel.org>
    Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
    cc1a54d8
sislands_smc.h 14 KB