• Gustavo A. R. Silva's avatar
    drm/radeon/ni_dpm: Fix booting bug · 5d31950a
    Gustavo A. R. Silva authored
    Create new structure NISLANDS_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
    NISLANDS_SMC_HW_PERFORMANCE_LEVEL, instead.
    
    Currently, the code fails because flexible array _levels_ in
    struct NISLANDS_SMC_SWSTATE doesn't allow for code that access
    the first element of initialState.levels and ACPIState.levels
    arrays:
    
    drivers/gpu/drm/radeon/ni_dpm.c:
    1690         table->initialState.levels[0].mclk.vMPLL_AD_FUNC_CNTL =
    1691                 cpu_to_be32(ni_pi->clock_registers.mpll_ad_func_cntl);
    ...
    1903:   table->ACPIState.levels[0].mclk.vMPLL_AD_FUNC_CNTL = cpu_to_be32(mpll_ad_func_cntl);
    1904:   table->ACPIState.levels[0].mclk.vMPLL_AD_FUNC_CNTL_2 = cpu_to_be32(mpll_ad_func_cntl_2);
    
    because such element cannot exist without previously allocating
    any dynamic memory for it (which never actually happens).
    
    That's why struct NISLANDS_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 434fb1e7 ("drm/radeon/nislands_smc.h: Replace one-element
    array with flexible-array member in struct NISLANDS_SMC_SWSTATE"), the
    size of dpmLevels in struct NISLANDS_SMC_STATETABLE should be fixed to
    be NISLANDS_MAX_SMC_PERFORMANCE_LEVELS_PER_SWSTATE instead of
    NISLANDS_MAX_SMC_PERFORMANCE_LEVELS_PER_SWSTATE - 1.
    
    Bug: https://lore.kernel.org/dri-devel/3eedbe78-1fbd-4763-a7f3-ac5665e76a4a@xenosoft.de/
    Fixes: 434fb1e7 ("drm/radeon/nislands_smc.h: Replace one-element array with flexible-array member in struct NISLANDS_SMC_SWSTATE")
    Cc: stable@vger.kernel.org
    Reported-by: default avatarChristian Zigotzky <chzigotzky@xenosoft.de>
    Tested-by: default avatarChristian Zigotzky <chzigotzky@xenosoft.de>
    Link: https://lore.kernel.org/dri-devel/9bb5fcbd-daf5-1669-b3e7-b8624b3c36f9@xenosoft.de/Signed-off-by: default avatarGustavo A. R. Silva <gustavoars@kernel.org>
    Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
    5d31950a
ni_dpm.c 129 KB