[PATCH] drm/amdgpu: Fix the runtime pm mode error
Ma, Jun
majun at amd.com
Thu Mar 21 06:51:58 UTC 2024
On 3/20/2024 9:24 PM, Alex Deucher wrote:
> On Wed, Mar 20, 2024 at 6:17 AM Ma Jun <Jun.Ma2 at amd.com> 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 at amd.com>
>> ---
>> 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
>>
More information about the amd-gfx
mailing list