Commit 42ffb3c3 authored by Ma Jun's avatar Ma Jun Committed by Alex Deucher

drm/amdgpu/pm: Fix the power source flag error

The power source flag should be updated when
[1] System receives an interrupt indicating that the power source
has changed.
[2] System resumes from suspend or runtime suspend
Signed-off-by: default avatarMa Jun <Jun.Ma2@amd.com>
Reviewed-by: default avatarLijo Lazar <lijo.lazar@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent a499b68c
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <linux/firmware.h> #include <linux/firmware.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/power_supply.h>
#include <linux/reboot.h> #include <linux/reboot.h>
#include "amdgpu.h" #include "amdgpu.h"
...@@ -817,16 +818,8 @@ static int smu_late_init(void *handle) ...@@ -817,16 +818,8 @@ static int smu_late_init(void *handle)
* handle the switch automatically. Driver involvement * handle the switch automatically. Driver involvement
* is unnecessary. * is unnecessary.
*/ */
if (!smu->dc_controlled_by_gpio) { adev->pm.ac_power = power_supply_is_system_supplied() > 0;
ret = smu_set_power_source(smu, smu_set_ac_dc(smu);
adev->pm.ac_power ? SMU_POWER_SOURCE_AC :
SMU_POWER_SOURCE_DC);
if (ret) {
dev_err(adev->dev, "Failed to switch to %s mode!\n",
adev->pm.ac_power ? "AC" : "DC");
return ret;
}
}
if ((amdgpu_ip_version(adev, MP1_HWIP, 0) == IP_VERSION(13, 0, 1)) || if ((amdgpu_ip_version(adev, MP1_HWIP, 0) == IP_VERSION(13, 0, 1)) ||
(amdgpu_ip_version(adev, MP1_HWIP, 0) == IP_VERSION(13, 0, 3))) (amdgpu_ip_version(adev, MP1_HWIP, 0) == IP_VERSION(13, 0, 3)))
......
...@@ -1442,10 +1442,12 @@ static int smu_v11_0_irq_process(struct amdgpu_device *adev, ...@@ -1442,10 +1442,12 @@ static int smu_v11_0_irq_process(struct amdgpu_device *adev,
case 0x3: case 0x3:
dev_dbg(adev->dev, "Switched to AC mode!\n"); dev_dbg(adev->dev, "Switched to AC mode!\n");
schedule_work(&smu->interrupt_work); schedule_work(&smu->interrupt_work);
adev->pm.ac_power = true;
break; break;
case 0x4: case 0x4:
dev_dbg(adev->dev, "Switched to DC mode!\n"); dev_dbg(adev->dev, "Switched to DC mode!\n");
schedule_work(&smu->interrupt_work); schedule_work(&smu->interrupt_work);
adev->pm.ac_power = false;
break; break;
case 0x7: case 0x7:
/* /*
......
...@@ -1379,10 +1379,12 @@ static int smu_v13_0_irq_process(struct amdgpu_device *adev, ...@@ -1379,10 +1379,12 @@ static int smu_v13_0_irq_process(struct amdgpu_device *adev,
case 0x3: case 0x3:
dev_dbg(adev->dev, "Switched to AC mode!\n"); dev_dbg(adev->dev, "Switched to AC mode!\n");
smu_v13_0_ack_ac_dc_interrupt(smu); smu_v13_0_ack_ac_dc_interrupt(smu);
adev->pm.ac_power = true;
break; break;
case 0x4: case 0x4:
dev_dbg(adev->dev, "Switched to DC mode!\n"); dev_dbg(adev->dev, "Switched to DC mode!\n");
smu_v13_0_ack_ac_dc_interrupt(smu); smu_v13_0_ack_ac_dc_interrupt(smu);
adev->pm.ac_power = false;
break; break;
case 0x7: case 0x7:
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment