Commit ca1ffb17 authored by Ma Jun's avatar Ma Jun Committed by Alex Deucher
Browse files

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>
Cc: stable@vger.kernel.org
parent a58371d6
Loading
Loading
Loading
Loading
+3 −10
Original line number Diff line number Diff line
@@ -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)))
+2 −0
Original line number Diff line number Diff line
@@ -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:
				/*
+2 −0
Original line number Diff line number Diff line
@@ -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:
				/*