Re: [PATCH] drm/amdgpu: Fix the runtime pm mode error

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




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
>>



[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux