diff options
| author | Ma Jun <Jun.Ma2@amd.com> | 2024-01-17 14:35:29 +0800 | 
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2024-01-25 15:41:06 -0500 | 
| commit | ca1ffb174f16b699c536734fc12a4162097c49f4 (patch) | |
| tree | 8266995c5fdfe1938168fdafec29e112cda162af /drivers/gpu/drm/amd/pm/swsmu | |
| parent | a58371d632ebab9ea63f10893a6b6731196b6f8d (diff) | |
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: Ma Jun <Jun.Ma2@amd.com>
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
Diffstat (limited to 'drivers/gpu/drm/amd/pm/swsmu')
| -rw-r--r-- | drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 13 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c | 2 | 
3 files changed, 7 insertions, 10 deletions
| diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c index c16703868e5c..a54663f2e2ab 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c +++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c @@ -24,6 +24,7 @@  #include <linux/firmware.h>  #include <linux/pci.h> +#include <linux/power_supply.h>  #include <linux/reboot.h>  #include "amdgpu.h" @@ -817,16 +818,8 @@ static int smu_late_init(void *handle)  	 * handle the switch automatically. Driver involvement  	 * is unnecessary.  	 */ -	if (!smu->dc_controlled_by_gpio) { -		ret = smu_set_power_source(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; -		} -	} +	adev->pm.ac_power = power_supply_is_system_supplied() > 0; +	smu_set_ac_dc(smu);  	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))) diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c index 5a314d0316c1..c7bfa68bf00f 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c @@ -1442,10 +1442,12 @@ static int smu_v11_0_irq_process(struct amdgpu_device *adev,  			case 0x3:  				dev_dbg(adev->dev, "Switched to AC mode!\n");  				schedule_work(&smu->interrupt_work); +				adev->pm.ac_power = true;  				break;  			case 0x4:  				dev_dbg(adev->dev, "Switched to DC mode!\n");  				schedule_work(&smu->interrupt_work); +				adev->pm.ac_power = false;  				break;  			case 0x7:  				/* diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c index 771a3d457c33..c486182ff275 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c +++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c @@ -1379,10 +1379,12 @@ static int smu_v13_0_irq_process(struct amdgpu_device *adev,  			case 0x3:  				dev_dbg(adev->dev, "Switched to AC mode!\n");  				smu_v13_0_ack_ac_dc_interrupt(smu); +				adev->pm.ac_power = true;  				break;  			case 0x4:  				dev_dbg(adev->dev, "Switched to DC mode!\n");  				smu_v13_0_ack_ac_dc_interrupt(smu); +				adev->pm.ac_power = false;  				break;  			case 0x7:  				/* | 
