Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c0c4249d authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge branch 'drm-fixes-4.9' of git://people.freedesktop.org/~agd5f/linux into drm-fixes

Regression fixes for PX and a powerplay fix.

* 'drm-fixes-4.9' of git://people.freedesktop.org/~agd5f/linux:
  drm/radeon: fix check for port PM availability
  drm/amdgpu: fix check for port PM availability
  drm/amd/powerplay: initialize the soft_regs offset in struct smu7_hwmgr
parents e5517c2a bcfdd5d5
Loading
Loading
Loading
Loading
+9 −2
Original line number Original line Diff line number Diff line
@@ -485,7 +485,6 @@ static int amdgpu_atpx_power_state(enum vga_switcheroo_client_id id,
 */
 */
static bool amdgpu_atpx_pci_probe_handle(struct pci_dev *pdev)
static bool amdgpu_atpx_pci_probe_handle(struct pci_dev *pdev)
{
{
	struct pci_dev *parent_pdev = pci_upstream_bridge(pdev);
	acpi_handle dhandle, atpx_handle;
	acpi_handle dhandle, atpx_handle;
	acpi_status status;
	acpi_status status;


@@ -500,7 +499,6 @@ static bool amdgpu_atpx_pci_probe_handle(struct pci_dev *pdev)
	}
	}
	amdgpu_atpx_priv.dhandle = dhandle;
	amdgpu_atpx_priv.dhandle = dhandle;
	amdgpu_atpx_priv.atpx.handle = atpx_handle;
	amdgpu_atpx_priv.atpx.handle = atpx_handle;
	amdgpu_atpx_priv.bridge_pm_usable = parent_pdev && parent_pdev->bridge_d3;
	return true;
	return true;
}
}


@@ -562,17 +560,25 @@ static bool amdgpu_atpx_detect(void)
	struct pci_dev *pdev = NULL;
	struct pci_dev *pdev = NULL;
	bool has_atpx = false;
	bool has_atpx = false;
	int vga_count = 0;
	int vga_count = 0;
	bool d3_supported = false;
	struct pci_dev *parent_pdev;


	while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_VGA << 8, pdev)) != NULL) {
	while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_VGA << 8, pdev)) != NULL) {
		vga_count++;
		vga_count++;


		has_atpx |= (amdgpu_atpx_pci_probe_handle(pdev) == true);
		has_atpx |= (amdgpu_atpx_pci_probe_handle(pdev) == true);

		parent_pdev = pci_upstream_bridge(pdev);
		d3_supported |= parent_pdev && parent_pdev->bridge_d3;
	}
	}


	while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_OTHER << 8, pdev)) != NULL) {
	while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_OTHER << 8, pdev)) != NULL) {
		vga_count++;
		vga_count++;


		has_atpx |= (amdgpu_atpx_pci_probe_handle(pdev) == true);
		has_atpx |= (amdgpu_atpx_pci_probe_handle(pdev) == true);

		parent_pdev = pci_upstream_bridge(pdev);
		d3_supported |= parent_pdev && parent_pdev->bridge_d3;
	}
	}


	if (has_atpx && vga_count == 2) {
	if (has_atpx && vga_count == 2) {
@@ -580,6 +586,7 @@ static bool amdgpu_atpx_detect(void)
		printk(KERN_INFO "vga_switcheroo: detected switching method %s handle\n",
		printk(KERN_INFO "vga_switcheroo: detected switching method %s handle\n",
		       acpi_method_name);
		       acpi_method_name);
		amdgpu_atpx_priv.atpx_detected = true;
		amdgpu_atpx_priv.atpx_detected = true;
		amdgpu_atpx_priv.bridge_pm_usable = d3_supported;
		amdgpu_atpx_init();
		amdgpu_atpx_init();
		return true;
		return true;
	}
	}
+4 −1
Original line number Original line Diff line number Diff line
@@ -2214,6 +2214,7 @@ uint32_t polaris10_get_mac_definition(uint32_t value)
int polaris10_process_firmware_header(struct pp_hwmgr *hwmgr)
int polaris10_process_firmware_header(struct pp_hwmgr *hwmgr)
{
{
	struct polaris10_smumgr *smu_data = (struct polaris10_smumgr *)(hwmgr->smumgr->backend);
	struct polaris10_smumgr *smu_data = (struct polaris10_smumgr *)(hwmgr->smumgr->backend);
	struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend);
	uint32_t tmp;
	uint32_t tmp;
	int result;
	int result;
	bool error = false;
	bool error = false;
@@ -2233,8 +2234,10 @@ int polaris10_process_firmware_header(struct pp_hwmgr *hwmgr)
			offsetof(SMU74_Firmware_Header, SoftRegisters),
			offsetof(SMU74_Firmware_Header, SoftRegisters),
			&tmp, SMC_RAM_END);
			&tmp, SMC_RAM_END);


	if (!result)
	if (!result) {
		data->soft_regs_start = tmp;
		smu_data->smu7_data.soft_regs_start = tmp;
		smu_data->smu7_data.soft_regs_start = tmp;
	}


	error |= (0 != result);
	error |= (0 != result);


+9 −2
Original line number Original line Diff line number Diff line
@@ -479,7 +479,6 @@ static int radeon_atpx_power_state(enum vga_switcheroo_client_id id,
 */
 */
static bool radeon_atpx_pci_probe_handle(struct pci_dev *pdev)
static bool radeon_atpx_pci_probe_handle(struct pci_dev *pdev)
{
{
	struct pci_dev *parent_pdev = pci_upstream_bridge(pdev);
	acpi_handle dhandle, atpx_handle;
	acpi_handle dhandle, atpx_handle;
	acpi_status status;
	acpi_status status;


@@ -493,7 +492,6 @@ static bool radeon_atpx_pci_probe_handle(struct pci_dev *pdev)


	radeon_atpx_priv.dhandle = dhandle;
	radeon_atpx_priv.dhandle = dhandle;
	radeon_atpx_priv.atpx.handle = atpx_handle;
	radeon_atpx_priv.atpx.handle = atpx_handle;
	radeon_atpx_priv.bridge_pm_usable = parent_pdev && parent_pdev->bridge_d3;
	return true;
	return true;
}
}


@@ -555,11 +553,16 @@ static bool radeon_atpx_detect(void)
	struct pci_dev *pdev = NULL;
	struct pci_dev *pdev = NULL;
	bool has_atpx = false;
	bool has_atpx = false;
	int vga_count = 0;
	int vga_count = 0;
	bool d3_supported = false;
	struct pci_dev *parent_pdev;


	while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_VGA << 8, pdev)) != NULL) {
	while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_VGA << 8, pdev)) != NULL) {
		vga_count++;
		vga_count++;


		has_atpx |= (radeon_atpx_pci_probe_handle(pdev) == true);
		has_atpx |= (radeon_atpx_pci_probe_handle(pdev) == true);

		parent_pdev = pci_upstream_bridge(pdev);
		d3_supported |= parent_pdev && parent_pdev->bridge_d3;
	}
	}


	/* some newer PX laptops mark the dGPU as a non-VGA display device */
	/* some newer PX laptops mark the dGPU as a non-VGA display device */
@@ -567,6 +570,9 @@ static bool radeon_atpx_detect(void)
		vga_count++;
		vga_count++;


		has_atpx |= (radeon_atpx_pci_probe_handle(pdev) == true);
		has_atpx |= (radeon_atpx_pci_probe_handle(pdev) == true);

		parent_pdev = pci_upstream_bridge(pdev);
		d3_supported |= parent_pdev && parent_pdev->bridge_d3;
	}
	}


	if (has_atpx && vga_count == 2) {
	if (has_atpx && vga_count == 2) {
@@ -574,6 +580,7 @@ static bool radeon_atpx_detect(void)
		printk(KERN_INFO "vga_switcheroo: detected switching method %s handle\n",
		printk(KERN_INFO "vga_switcheroo: detected switching method %s handle\n",
		       acpi_method_name);
		       acpi_method_name);
		radeon_atpx_priv.atpx_detected = true;
		radeon_atpx_priv.atpx_detected = true;
		radeon_atpx_priv.bridge_pm_usable = d3_supported;
		radeon_atpx_init();
		radeon_atpx_init();
		return true;
		return true;
	}
	}