On 2024-10-22 15:50, Alex Deucher wrote: > Some devices do not support fullscreen 3D. > > v2: Make the check generic. > > Fixes: 336568de918e ("drm/amdgpu/swsmu: default to fullscreen 3D profile for dGPUs") > Signed-off-by: Alex Deucher <alexander.deucher@xxxxxxx> > Cc: Kenneth Feng <kenneth.feng@xxxxxxx> > Cc: Lijo Lazar <lijo.lazar@xxxxxxx> > --- > drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c > index accc96a03bd9..8d4aee4e2287 100644 > --- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c > +++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c > @@ -1236,6 +1236,14 @@ static void smu_init_xgmi_plpd_mode(struct smu_context *smu) > } > } > > +static bool smu_is_workload_profile_available(struct smu_context *smu, > + u32 profile) > +{ > + if (profile >= PP_SMC_POWER_PROFILE_COUNT) > + return false; > + return smu->workload_map && smu->workload_map[profile].valid_mapping; > +} > + > static int smu_sw_init(struct amdgpu_ip_block *ip_block) > { > struct amdgpu_device *adev = ip_block->adev; > @@ -1267,7 +1275,8 @@ static int smu_sw_init(struct amdgpu_ip_block *ip_block) > smu->workload_prority[PP_SMC_POWER_PROFILE_COMPUTE] = 5; > smu->workload_prority[PP_SMC_POWER_PROFILE_CUSTOM] = 6; > > - if (smu->is_apu) > + if (smu->is_apu || > + !smu_is_workload_profile_available(smu, PP_SMC_POWER_PROFILE_FULLSCREEN3D)) > smu->workload_mask = 1 << smu->workload_prority[PP_SMC_POWER_PROFILE_BOOTUP_DEFAULT]; > else > smu->workload_mask = 1 << smu->workload_prority[PP_SMC_POWER_PROFILE_FULLSCREEN3D]; FWIW, PP_SMC_POWER_PROFILE_BOOTUP_DEFAULT isn't really suitable for compositing with an APU either (certainly not while the machine is connected to AC, though I'm getting good battery life even forcing the compute profile). -- Earthling Michel Dänzer \ GNOME / Xwayland / Mesa developer https://redhat.com \ Libre software enthusiast