amd-drm-fixes-6.10-2024-06-06:
amdgpu: - Fix shutdown issues on some SMU 13.x platforms - Silence some UBSAN flexible array warnings -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQQgO5Idg2tXNTSZAr293/aFa7yZ2AUCZmIMJQAKCRC93/aFa7yZ 2OU3AQCnUpn+zGRiA8/kkKUzvaFCxrRvdMQ7faxi2b8dvorzqgD7B+8j2gNUBnCX Zv/wskbp8DqP5eEs7xtMQuqWvUijPwA= =3Ncj -----END PGP SIGNATURE----- Merge tag 'amd-drm-fixes-6.10-2024-06-06' of https://gitlab.freedesktop.org/agd5f/linux into drm-fixes amd-drm-fixes-6.10-2024-06-06: amdgpu: - Fix shutdown issues on some SMU 13.x platforms - Silence some UBSAN flexible array warnings Signed-off-by: Dave Airlie <airlied@redhat.com> From: Alex Deucher <alexander.deucher@amd.com> Link: https://patchwork.freedesktop.org/patch/msgid/20240606192348.3620805-1-alexander.deucher@amd.com
This commit is contained in:
commit
2d42183110
@ -477,31 +477,30 @@ typedef struct _ATOM_PPLIB_STATE_V2
|
||||
} ATOM_PPLIB_STATE_V2;
|
||||
|
||||
typedef struct _StateArray{
|
||||
//how many states we have
|
||||
UCHAR ucNumEntries;
|
||||
|
||||
ATOM_PPLIB_STATE_V2 states[1];
|
||||
//how many states we have
|
||||
UCHAR ucNumEntries;
|
||||
|
||||
ATOM_PPLIB_STATE_V2 states[] /* __counted_by(ucNumEntries) */;
|
||||
}StateArray;
|
||||
|
||||
|
||||
typedef struct _ClockInfoArray{
|
||||
//how many clock levels we have
|
||||
UCHAR ucNumEntries;
|
||||
|
||||
//sizeof(ATOM_PPLIB_CLOCK_INFO)
|
||||
UCHAR ucEntrySize;
|
||||
|
||||
UCHAR clockInfo[];
|
||||
//how many clock levels we have
|
||||
UCHAR ucNumEntries;
|
||||
|
||||
//sizeof(ATOM_PPLIB_CLOCK_INFO)
|
||||
UCHAR ucEntrySize;
|
||||
|
||||
UCHAR clockInfo[];
|
||||
}ClockInfoArray;
|
||||
|
||||
typedef struct _NonClockInfoArray{
|
||||
//how many non-clock levels we have. normally should be same as number of states
|
||||
UCHAR ucNumEntries;
|
||||
//sizeof(ATOM_PPLIB_NONCLOCK_INFO)
|
||||
UCHAR ucEntrySize;
|
||||
|
||||
//how many non-clock levels we have. normally should be same as number of states
|
||||
UCHAR ucNumEntries;
|
||||
//sizeof(ATOM_PPLIB_NONCLOCK_INFO)
|
||||
UCHAR ucEntrySize;
|
||||
|
||||
ATOM_PPLIB_NONCLOCK_INFO nonClockInfo[];
|
||||
ATOM_PPLIB_NONCLOCK_INFO nonClockInfo[] __counted_by(ucNumEntries);
|
||||
}NonClockInfoArray;
|
||||
|
||||
typedef struct _ATOM_PPLIB_Clock_Voltage_Dependency_Record
|
||||
@ -513,8 +512,10 @@ typedef struct _ATOM_PPLIB_Clock_Voltage_Dependency_Record
|
||||
|
||||
typedef struct _ATOM_PPLIB_Clock_Voltage_Dependency_Table
|
||||
{
|
||||
UCHAR ucNumEntries; // Number of entries.
|
||||
ATOM_PPLIB_Clock_Voltage_Dependency_Record entries[1]; // Dynamically allocate entries.
|
||||
// Number of entries.
|
||||
UCHAR ucNumEntries;
|
||||
// Dynamically allocate entries.
|
||||
ATOM_PPLIB_Clock_Voltage_Dependency_Record entries[] __counted_by(ucNumEntries);
|
||||
}ATOM_PPLIB_Clock_Voltage_Dependency_Table;
|
||||
|
||||
typedef struct _ATOM_PPLIB_Clock_Voltage_Limit_Record
|
||||
@ -529,8 +530,10 @@ typedef struct _ATOM_PPLIB_Clock_Voltage_Limit_Record
|
||||
|
||||
typedef struct _ATOM_PPLIB_Clock_Voltage_Limit_Table
|
||||
{
|
||||
UCHAR ucNumEntries; // Number of entries.
|
||||
ATOM_PPLIB_Clock_Voltage_Limit_Record entries[1]; // Dynamically allocate entries.
|
||||
// Number of entries.
|
||||
UCHAR ucNumEntries;
|
||||
// Dynamically allocate entries.
|
||||
ATOM_PPLIB_Clock_Voltage_Limit_Record entries[] __counted_by(ucNumEntries);
|
||||
}ATOM_PPLIB_Clock_Voltage_Limit_Table;
|
||||
|
||||
union _ATOM_PPLIB_CAC_Leakage_Record
|
||||
@ -553,8 +556,10 @@ typedef union _ATOM_PPLIB_CAC_Leakage_Record ATOM_PPLIB_CAC_Leakage_Record;
|
||||
|
||||
typedef struct _ATOM_PPLIB_CAC_Leakage_Table
|
||||
{
|
||||
UCHAR ucNumEntries; // Number of entries.
|
||||
ATOM_PPLIB_CAC_Leakage_Record entries[1]; // Dynamically allocate entries.
|
||||
// Number of entries.
|
||||
UCHAR ucNumEntries;
|
||||
// Dynamically allocate entries.
|
||||
ATOM_PPLIB_CAC_Leakage_Record entries[] __counted_by(ucNumEntries);
|
||||
}ATOM_PPLIB_CAC_Leakage_Table;
|
||||
|
||||
typedef struct _ATOM_PPLIB_PhaseSheddingLimits_Record
|
||||
@ -568,8 +573,10 @@ typedef struct _ATOM_PPLIB_PhaseSheddingLimits_Record
|
||||
|
||||
typedef struct _ATOM_PPLIB_PhaseSheddingLimits_Table
|
||||
{
|
||||
UCHAR ucNumEntries; // Number of entries.
|
||||
ATOM_PPLIB_PhaseSheddingLimits_Record entries[1]; // Dynamically allocate entries.
|
||||
// Number of entries.
|
||||
UCHAR ucNumEntries;
|
||||
// Dynamically allocate entries.
|
||||
ATOM_PPLIB_PhaseSheddingLimits_Record entries[] __counted_by(ucNumEntries);
|
||||
}ATOM_PPLIB_PhaseSheddingLimits_Table;
|
||||
|
||||
typedef struct _VCEClockInfo{
|
||||
@ -580,8 +587,8 @@ typedef struct _VCEClockInfo{
|
||||
}VCEClockInfo;
|
||||
|
||||
typedef struct _VCEClockInfoArray{
|
||||
UCHAR ucNumEntries;
|
||||
VCEClockInfo entries[1];
|
||||
UCHAR ucNumEntries;
|
||||
VCEClockInfo entries[] __counted_by(ucNumEntries);
|
||||
}VCEClockInfoArray;
|
||||
|
||||
typedef struct _ATOM_PPLIB_VCE_Clock_Voltage_Limit_Record
|
||||
@ -592,8 +599,8 @@ typedef struct _ATOM_PPLIB_VCE_Clock_Voltage_Limit_Record
|
||||
|
||||
typedef struct _ATOM_PPLIB_VCE_Clock_Voltage_Limit_Table
|
||||
{
|
||||
UCHAR numEntries;
|
||||
ATOM_PPLIB_VCE_Clock_Voltage_Limit_Record entries[1];
|
||||
UCHAR numEntries;
|
||||
ATOM_PPLIB_VCE_Clock_Voltage_Limit_Record entries[] __counted_by(numEntries);
|
||||
}ATOM_PPLIB_VCE_Clock_Voltage_Limit_Table;
|
||||
|
||||
typedef struct _ATOM_PPLIB_VCE_State_Record
|
||||
@ -604,8 +611,8 @@ typedef struct _ATOM_PPLIB_VCE_State_Record
|
||||
|
||||
typedef struct _ATOM_PPLIB_VCE_State_Table
|
||||
{
|
||||
UCHAR numEntries;
|
||||
ATOM_PPLIB_VCE_State_Record entries[1];
|
||||
UCHAR numEntries;
|
||||
ATOM_PPLIB_VCE_State_Record entries[] __counted_by(numEntries);
|
||||
}ATOM_PPLIB_VCE_State_Table;
|
||||
|
||||
|
||||
@ -626,8 +633,8 @@ typedef struct _UVDClockInfo{
|
||||
}UVDClockInfo;
|
||||
|
||||
typedef struct _UVDClockInfoArray{
|
||||
UCHAR ucNumEntries;
|
||||
UVDClockInfo entries[1];
|
||||
UCHAR ucNumEntries;
|
||||
UVDClockInfo entries[] __counted_by(ucNumEntries);
|
||||
}UVDClockInfoArray;
|
||||
|
||||
typedef struct _ATOM_PPLIB_UVD_Clock_Voltage_Limit_Record
|
||||
@ -638,8 +645,8 @@ typedef struct _ATOM_PPLIB_UVD_Clock_Voltage_Limit_Record
|
||||
|
||||
typedef struct _ATOM_PPLIB_UVD_Clock_Voltage_Limit_Table
|
||||
{
|
||||
UCHAR numEntries;
|
||||
ATOM_PPLIB_UVD_Clock_Voltage_Limit_Record entries[1];
|
||||
UCHAR numEntries;
|
||||
ATOM_PPLIB_UVD_Clock_Voltage_Limit_Record entries[] __counted_by(numEntries);
|
||||
}ATOM_PPLIB_UVD_Clock_Voltage_Limit_Table;
|
||||
|
||||
typedef struct _ATOM_PPLIB_UVD_Table
|
||||
@ -657,8 +664,8 @@ typedef struct _ATOM_PPLIB_SAMClk_Voltage_Limit_Record
|
||||
}ATOM_PPLIB_SAMClk_Voltage_Limit_Record;
|
||||
|
||||
typedef struct _ATOM_PPLIB_SAMClk_Voltage_Limit_Table{
|
||||
UCHAR numEntries;
|
||||
ATOM_PPLIB_SAMClk_Voltage_Limit_Record entries[];
|
||||
UCHAR numEntries;
|
||||
ATOM_PPLIB_SAMClk_Voltage_Limit_Record entries[] __counted_by(numEntries);
|
||||
}ATOM_PPLIB_SAMClk_Voltage_Limit_Table;
|
||||
|
||||
typedef struct _ATOM_PPLIB_SAMU_Table
|
||||
@ -675,8 +682,8 @@ typedef struct _ATOM_PPLIB_ACPClk_Voltage_Limit_Record
|
||||
}ATOM_PPLIB_ACPClk_Voltage_Limit_Record;
|
||||
|
||||
typedef struct _ATOM_PPLIB_ACPClk_Voltage_Limit_Table{
|
||||
UCHAR numEntries;
|
||||
ATOM_PPLIB_ACPClk_Voltage_Limit_Record entries[1];
|
||||
UCHAR numEntries;
|
||||
ATOM_PPLIB_ACPClk_Voltage_Limit_Record entries[] __counted_by(numEntries);
|
||||
}ATOM_PPLIB_ACPClk_Voltage_Limit_Table;
|
||||
|
||||
typedef struct _ATOM_PPLIB_ACP_Table
|
||||
@ -743,9 +750,9 @@ typedef struct ATOM_PPLIB_VQ_Budgeting_Record{
|
||||
} ATOM_PPLIB_VQ_Budgeting_Record;
|
||||
|
||||
typedef struct ATOM_PPLIB_VQ_Budgeting_Table {
|
||||
UCHAR revid;
|
||||
UCHAR numEntries;
|
||||
ATOM_PPLIB_VQ_Budgeting_Record entries[1];
|
||||
UCHAR revid;
|
||||
UCHAR numEntries;
|
||||
ATOM_PPLIB_VQ_Budgeting_Record entries[] __counted_by(numEntries);
|
||||
} ATOM_PPLIB_VQ_Budgeting_Table;
|
||||
|
||||
#pragma pack()
|
||||
|
@ -226,15 +226,17 @@ static int smu_v13_0_4_system_features_control(struct smu_context *smu, bool en)
|
||||
struct amdgpu_device *adev = smu->adev;
|
||||
int ret = 0;
|
||||
|
||||
if (!en && adev->in_s4) {
|
||||
/* Adds a GFX reset as workaround just before sending the
|
||||
* MP1_UNLOAD message to prevent GC/RLC/PMFW from entering
|
||||
* an invalid state.
|
||||
*/
|
||||
ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_GfxDeviceDriverReset,
|
||||
SMU_RESET_MODE_2, NULL);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (!en && !adev->in_s0ix) {
|
||||
if (adev->in_s4) {
|
||||
/* Adds a GFX reset as workaround just before sending the
|
||||
* MP1_UNLOAD message to prevent GC/RLC/PMFW from entering
|
||||
* an invalid state.
|
||||
*/
|
||||
ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_GfxDeviceDriverReset,
|
||||
SMU_RESET_MODE_2, NULL);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = smu_cmn_send_smc_msg(smu, SMU_MSG_PrepareMp1ForUnload, NULL);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user