On 3/20/2024 9:24 PM, Alex Deucher wrote: > On Wed, Mar 20, 2024 at 6:17 AM Ma Jun <Jun.Ma2@xxxxxxx> wrote: >> >> Because of the logic error, Arcturus and vega20 currently >> use the AMDGPU_RUNPM_NONE for runtime pm even though they >> support BACO. So, the code is optimized to fix this error. >> >> Signed-off-by: Ma Jun <Jun.Ma2@xxxxxxx> >> --- >> drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 56 ++++++++++++------------- >> 1 file changed, 27 insertions(+), 29 deletions(-) >> >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c >> index 1f92fb1e7421..70cf2d0c7683 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c >> @@ -150,42 +150,40 @@ int amdgpu_driver_load_kms(struct amdgpu_device *adev, unsigned long flags) >> } >> >> adev->pm.rpm_mode = AMDGPU_RUNPM_NONE; >> - if (amdgpu_device_supports_px(dev) && >> - (amdgpu_runtime_pm != 0)) { /* enable PX as runtime mode */ >> - adev->pm.rpm_mode = AMDGPU_RUNPM_PX; >> - dev_info(adev->dev, "Using ATPX for runtime pm\n"); >> - } else if (amdgpu_device_supports_boco(dev) && >> - (amdgpu_runtime_pm != 0)) { /* enable boco as runtime mode */ >> - adev->pm.rpm_mode = AMDGPU_RUNPM_BOCO; >> - dev_info(adev->dev, "Using BOCO for runtime pm\n"); >> - } else if (amdgpu_device_supports_baco(dev) && >> - (amdgpu_runtime_pm != 0)) { >> - switch (adev->asic_type) { >> - case CHIP_VEGA20: >> - case CHIP_ARCTURUS: >> - /* enable BACO as runpm mode if runpm=1 */ >> - if (amdgpu_runtime_pm > 0) >> - adev->pm.rpm_mode = AMDGPU_RUNPM_BACO; >> - break; >> - case CHIP_VEGA10: >> - /* enable BACO as runpm mode if noretry=0 */ >> - if (!adev->gmc.noretry) >> + if (amdgpu_runtime_pm > 0) { >> + adev->pm.rpm_mode = AMDGPU_RUNPM_BACO; >> + dev_info(adev->dev, "Forcing BACO for runtime pm\n"); > > Does this need special handling for BAMACO? Setting > amdgpu_runtime_pm=2 is supposed to set BAMACO and 1 is supposed to > force BACO. > BAMACO currently is detected in pptable_funcs->baco_enter() and baco_exit function. We just need to set BACO flag here. How about adding a new mode AMDGPU_RUNPM_BAMACO, so we only have to check amdgpu_runtime_pm and detect the PM mode in initialization stage and don't need to handle it later. Regards, Ma Jun > Alex > >> + } else if (amdgpu_runtime_pm != 0) { >> + if (amdgpu_device_supports_px(dev)) { /* enable PX as runtime mode */ >> + adev->pm.rpm_mode = AMDGPU_RUNPM_PX; >> + dev_info(adev->dev, "Using ATPX for runtime pm\n"); >> + } else if (amdgpu_device_supports_boco(dev)) { /* enable boco as runtime mode */ >> + adev->pm.rpm_mode = AMDGPU_RUNPM_BOCO; >> + dev_info(adev->dev, "Using BOCO for runtime pm\n"); >> + } else if (amdgpu_device_supports_baco(dev)) { >> + switch (adev->asic_type) { >> + case CHIP_VEGA10: >> + /* enable BACO as runpm mode if noretry=0 */ >> + if (!adev->gmc.noretry) >> + adev->pm.rpm_mode = AMDGPU_RUNPM_BACO; >> + break; >> + default: >> + /* enable BACO as runpm mode on CI+ */ >> adev->pm.rpm_mode = AMDGPU_RUNPM_BACO; >> - break; >> - default: >> - /* enable BACO as runpm mode on CI+ */ >> - adev->pm.rpm_mode = AMDGPU_RUNPM_BACO; >> - break; >> - } >> + break; >> + } >> >> - if (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO) >> - dev_info(adev->dev, "Using BACO for runtime pm\n"); >> + if (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO) >> + dev_info(adev->dev, "Using BACO for runtime pm\n"); >> + } >> } >> >> + if (adev->pm.rpm_mode == AMDGPU_RUNPM_NONE) >> + dev_info(adev->dev, "No PM mode for runtime pm\n"); >> + >> /* Call ACPI methods: require modeset init >> * but failure is not fatal >> */ >> - >> acpi_status = amdgpu_acpi_init(adev); >> if (acpi_status) >> dev_dbg(dev->dev, "Error during ACPI methods call\n"); >> -- >> 2.34.1 >>