aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2016-07-02 12:41:28 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2016-07-02 12:41:28 -0400
commit99b0f54e6a3a4012aacfaada5644a8e520447d80 (patch)
treecf3350b11d6c6c9a0443ca0ad2bfc6186af4d5c6
parent467ce7693f5111c11daeb75e02eba2ab9ee6f334 (diff)
parent88c087109b5fedaf9b61839d08543fdaf9d5ec39 (diff)
Merge tag 'drm-fixes-for-v4.7-rc6' of git://people.freedesktop.org/~airlied/linux
Pull drm fixes frlm Dave Airlie: "Just some AMD and Intel fixes, the AMD ones are further production Polaris fixes, and the Intel ones fix some early timeouts, some PCI ID changes and a couple of other fixes. Still a bit Internet challenged here, hopefully end of next week will solve it" * tag 'drm-fixes-for-v4.7-rc6' of git://people.freedesktop.org/~airlied/linux: drm/i915: Fix missing unlock on error in i915_ppgtt_info() drm/amd/powerplay: workaround for UVD clock issue drm/amdgpu: add ACLK_CNTL setting for polaris10 drm/amd/powerplay: fix issue uvd dpm can't enabled on Polaris11. drm/amd/powerplay: Workaround for Memory EDC Error on Polaris10. drm/i915: Removing PCI IDs that are no longer listed as Kabylake. drm/i915: Add more Kabylake PCI IDs. drm/i915: Avoid early timeout during AUX transfers drm/i915/hsw: Avoid early timeout during LCPLL disable/restore drm/i915/lpt: Avoid early timeout during FDI PHY reset drm/i915/bxt: Avoid early timeout during PLL enable drm/i915: Refresh cached DP port register value on resume drm/amd/powerplay: Update CKS on/ CKS off voltage offset calculation drm/amd/powerplay: disable FFC. drm/amd/powerplay: add some definition for FFC feature on polaris.
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c3
-rw-r--r--drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_hwmgr.c179
-rw-r--r--drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_hwmgr.h1
-rw-r--r--drivers/gpu/drm/amd/powerplay/inc/hwmgr.h2
-rw-r--r--drivers/gpu/drm/amd/powerplay/inc/polaris10_ppsmc.h2
-rw-r--r--drivers/gpu/drm/amd/powerplay/inc/smu74_discrete.h3
-rw-r--r--drivers/gpu/drm/i915/i915_debugfs.c4
-rw-r--r--drivers/gpu/drm/i915/intel_display.c16
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c10
-rw-r--r--drivers/gpu/drm/i915/intel_dpll_mgr.c4
-rw-r--r--include/drm/i915_pciids.h10
12 files changed, 160 insertions, 78 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
index e19520c4b4b6..d9c88d13f8db 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
@@ -1106,6 +1106,10 @@ static void amdgpu_uvd_idle_work_handler(struct work_struct *work)
1106 if (fences == 0 && handles == 0) { 1106 if (fences == 0 && handles == 0) {
1107 if (adev->pm.dpm_enabled) { 1107 if (adev->pm.dpm_enabled) {
1108 amdgpu_dpm_enable_uvd(adev, false); 1108 amdgpu_dpm_enable_uvd(adev, false);
1109 /* just work around for uvd clock remain high even
1110 * when uvd dpm disabled on Polaris10 */
1111 if (adev->asic_type == CHIP_POLARIS10)
1112 amdgpu_asic_set_uvd_clocks(adev, 0, 0);
1109 } else { 1113 } else {
1110 amdgpu_asic_set_uvd_clocks(adev, 0, 0); 1114 amdgpu_asic_set_uvd_clocks(adev, 0, 0);
1111 } 1115 }
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
index 1a5cbaff1e34..b2ebd4fef6cf 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
@@ -47,6 +47,8 @@
47#include "dce/dce_10_0_d.h" 47#include "dce/dce_10_0_d.h"
48#include "dce/dce_10_0_sh_mask.h" 48#include "dce/dce_10_0_sh_mask.h"
49 49
50#include "smu/smu_7_1_3_d.h"
51
50#define GFX8_NUM_GFX_RINGS 1 52#define GFX8_NUM_GFX_RINGS 1
51#define GFX8_NUM_COMPUTE_RINGS 8 53#define GFX8_NUM_COMPUTE_RINGS 8
52 54
@@ -693,6 +695,7 @@ static void gfx_v8_0_init_golden_registers(struct amdgpu_device *adev)
693 amdgpu_program_register_sequence(adev, 695 amdgpu_program_register_sequence(adev,
694 polaris10_golden_common_all, 696 polaris10_golden_common_all,
695 (const u32)ARRAY_SIZE(polaris10_golden_common_all)); 697 (const u32)ARRAY_SIZE(polaris10_golden_common_all));
698 WREG32_SMC(ixCG_ACLK_CNTL, 0x0000001C);
696 break; 699 break;
697 case CHIP_CARRIZO: 700 case CHIP_CARRIZO:
698 amdgpu_program_register_sequence(adev, 701 amdgpu_program_register_sequence(adev,
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_hwmgr.c
index 64ee78f7d41e..ec2a7ada346a 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_hwmgr.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_hwmgr.c
@@ -98,6 +98,7 @@
98#define PCIE_BUS_CLK 10000 98#define PCIE_BUS_CLK 10000
99#define TCLK (PCIE_BUS_CLK / 10) 99#define TCLK (PCIE_BUS_CLK / 10)
100 100
101#define CEILING_UCHAR(double) ((double-(uint8_t)(double)) > 0 ? (uint8_t)(double+1) : (uint8_t)(double))
101 102
102static const uint16_t polaris10_clock_stretcher_lookup_table[2][4] = 103static const uint16_t polaris10_clock_stretcher_lookup_table[2][4] =
103{ {600, 1050, 3, 0}, {600, 1050, 6, 1} }; 104{ {600, 1050, 3, 0}, {600, 1050, 6, 1} };
@@ -1422,22 +1423,19 @@ static int polaris10_populate_smc_acpi_level(struct pp_hwmgr *hwmgr,
1422 1423
1423 table->ACPILevel.Flags &= ~PPSMC_SWSTATE_FLAG_DC; 1424 table->ACPILevel.Flags &= ~PPSMC_SWSTATE_FLAG_DC;
1424 1425
1425 if (!data->sclk_dpm_key_disabled) { 1426
1426 /* Get MinVoltage and Frequency from DPM0, 1427 /* Get MinVoltage and Frequency from DPM0,
1427 * already converted to SMC_UL */ 1428 * already converted to SMC_UL */
1428 sclk_frequency = data->dpm_table.sclk_table.dpm_levels[0].value; 1429 sclk_frequency = data->dpm_table.sclk_table.dpm_levels[0].value;
1429 result = polaris10_get_dependency_volt_by_clk(hwmgr, 1430 result = polaris10_get_dependency_volt_by_clk(hwmgr,
1430 table_info->vdd_dep_on_sclk, 1431 table_info->vdd_dep_on_sclk,
1431 table->ACPILevel.SclkFrequency, 1432 sclk_frequency,
1432 &table->ACPILevel.MinVoltage, &mvdd); 1433 &table->ACPILevel.MinVoltage, &mvdd);
1433 PP_ASSERT_WITH_CODE((0 == result), 1434 PP_ASSERT_WITH_CODE((0 == result),
1434 "Cannot find ACPI VDDC voltage value " 1435 "Cannot find ACPI VDDC voltage value "
1435 "in Clock Dependency Table", ); 1436 "in Clock Dependency Table",
1436 } else { 1437 );
1437 sclk_frequency = data->vbios_boot_state.sclk_bootup_value; 1438
1438 table->ACPILevel.MinVoltage =
1439 data->vbios_boot_state.vddc_bootup_value * VOLTAGE_SCALE;
1440 }
1441 1439
1442 result = polaris10_calculate_sclk_params(hwmgr, sclk_frequency, &(table->ACPILevel.SclkSetting)); 1440 result = polaris10_calculate_sclk_params(hwmgr, sclk_frequency, &(table->ACPILevel.SclkSetting));
1443 PP_ASSERT_WITH_CODE(result == 0, "Error retrieving Engine Clock dividers from VBIOS.", return result); 1441 PP_ASSERT_WITH_CODE(result == 0, "Error retrieving Engine Clock dividers from VBIOS.", return result);
@@ -1462,24 +1460,18 @@ static int polaris10_populate_smc_acpi_level(struct pp_hwmgr *hwmgr,
1462 CONVERT_FROM_HOST_TO_SMC_US(table->ACPILevel.SclkSetting.Fcw1_frac); 1460 CONVERT_FROM_HOST_TO_SMC_US(table->ACPILevel.SclkSetting.Fcw1_frac);
1463 CONVERT_FROM_HOST_TO_SMC_US(table->ACPILevel.SclkSetting.Sclk_ss_slew_rate); 1461 CONVERT_FROM_HOST_TO_SMC_US(table->ACPILevel.SclkSetting.Sclk_ss_slew_rate);
1464 1462
1465 if (!data->mclk_dpm_key_disabled) { 1463
1466 /* Get MinVoltage and Frequency from DPM0, already converted to SMC_UL */ 1464 /* Get MinVoltage and Frequency from DPM0, already converted to SMC_UL */
1467 table->MemoryACPILevel.MclkFrequency = 1465 table->MemoryACPILevel.MclkFrequency =
1468 data->dpm_table.mclk_table.dpm_levels[0].value; 1466 data->dpm_table.mclk_table.dpm_levels[0].value;
1469 result = polaris10_get_dependency_volt_by_clk(hwmgr, 1467 result = polaris10_get_dependency_volt_by_clk(hwmgr,
1470 table_info->vdd_dep_on_mclk, 1468 table_info->vdd_dep_on_mclk,
1471 table->MemoryACPILevel.MclkFrequency, 1469 table->MemoryACPILevel.MclkFrequency,
1472 &table->MemoryACPILevel.MinVoltage, &mvdd); 1470 &table->MemoryACPILevel.MinVoltage, &mvdd);
1473 PP_ASSERT_WITH_CODE((0 == result), 1471 PP_ASSERT_WITH_CODE((0 == result),
1474 "Cannot find ACPI VDDCI voltage value " 1472 "Cannot find ACPI VDDCI voltage value "
1475 "in Clock Dependency Table", 1473 "in Clock Dependency Table",
1476 ); 1474 );
1477 } else {
1478 table->MemoryACPILevel.MclkFrequency =
1479 data->vbios_boot_state.mclk_bootup_value;
1480 table->MemoryACPILevel.MinVoltage =
1481 data->vbios_boot_state.vddci_bootup_value * VOLTAGE_SCALE;
1482 }
1483 1475
1484 us_mvdd = 0; 1476 us_mvdd = 0;
1485 if ((POLARIS10_VOLTAGE_CONTROL_NONE == data->mvdd_control) || 1477 if ((POLARIS10_VOLTAGE_CONTROL_NONE == data->mvdd_control) ||
@@ -1524,6 +1516,7 @@ static int polaris10_populate_smc_vce_level(struct pp_hwmgr *hwmgr,
1524 struct phm_ppt_v1_mm_clock_voltage_dependency_table *mm_table = 1516 struct phm_ppt_v1_mm_clock_voltage_dependency_table *mm_table =
1525 table_info->mm_dep_table; 1517 table_info->mm_dep_table;
1526 struct polaris10_hwmgr *data = (struct polaris10_hwmgr *)(hwmgr->backend); 1518 struct polaris10_hwmgr *data = (struct polaris10_hwmgr *)(hwmgr->backend);
1519 uint32_t vddci;
1527 1520
1528 table->VceLevelCount = (uint8_t)(mm_table->count); 1521 table->VceLevelCount = (uint8_t)(mm_table->count);
1529 table->VceBootLevel = 0; 1522 table->VceBootLevel = 0;
@@ -1533,9 +1526,18 @@ static int polaris10_populate_smc_vce_level(struct pp_hwmgr *hwmgr,
1533 table->VceLevel[count].MinVoltage = 0; 1526 table->VceLevel[count].MinVoltage = 0;
1534 table->VceLevel[count].MinVoltage |= 1527 table->VceLevel[count].MinVoltage |=
1535 (mm_table->entries[count].vddc * VOLTAGE_SCALE) << VDDC_SHIFT; 1528 (mm_table->entries[count].vddc * VOLTAGE_SCALE) << VDDC_SHIFT;
1529
1530 if (POLARIS10_VOLTAGE_CONTROL_BY_GPIO == data->vddci_control)
1531 vddci = (uint32_t)phm_find_closest_vddci(&(data->vddci_voltage_table),
1532 mm_table->entries[count].vddc - VDDC_VDDCI_DELTA);
1533 else if (POLARIS10_VOLTAGE_CONTROL_BY_SVID2 == data->vddci_control)
1534 vddci = mm_table->entries[count].vddc - VDDC_VDDCI_DELTA;
1535 else
1536 vddci = (data->vbios_boot_state.vddci_bootup_value * VOLTAGE_SCALE) << VDDCI_SHIFT;
1537
1538
1536 table->VceLevel[count].MinVoltage |= 1539 table->VceLevel[count].MinVoltage |=
1537 ((mm_table->entries[count].vddc - data->vddc_vddci_delta) * 1540 (vddci * VOLTAGE_SCALE) << VDDCI_SHIFT;
1538 VOLTAGE_SCALE) << VDDCI_SHIFT;
1539 table->VceLevel[count].MinVoltage |= 1 << PHASES_SHIFT; 1541 table->VceLevel[count].MinVoltage |= 1 << PHASES_SHIFT;
1540 1542
1541 /*retrieve divider value for VBIOS */ 1543 /*retrieve divider value for VBIOS */
@@ -1564,6 +1566,7 @@ static int polaris10_populate_smc_samu_level(struct pp_hwmgr *hwmgr,
1564 struct phm_ppt_v1_mm_clock_voltage_dependency_table *mm_table = 1566 struct phm_ppt_v1_mm_clock_voltage_dependency_table *mm_table =
1565 table_info->mm_dep_table; 1567 table_info->mm_dep_table;
1566 struct polaris10_hwmgr *data = (struct polaris10_hwmgr *)(hwmgr->backend); 1568 struct polaris10_hwmgr *data = (struct polaris10_hwmgr *)(hwmgr->backend);
1569 uint32_t vddci;
1567 1570
1568 table->SamuBootLevel = 0; 1571 table->SamuBootLevel = 0;
1569 table->SamuLevelCount = (uint8_t)(mm_table->count); 1572 table->SamuLevelCount = (uint8_t)(mm_table->count);
@@ -1574,8 +1577,16 @@ static int polaris10_populate_smc_samu_level(struct pp_hwmgr *hwmgr,
1574 table->SamuLevel[count].Frequency = mm_table->entries[count].samclock; 1577 table->SamuLevel[count].Frequency = mm_table->entries[count].samclock;
1575 table->SamuLevel[count].MinVoltage |= (mm_table->entries[count].vddc * 1578 table->SamuLevel[count].MinVoltage |= (mm_table->entries[count].vddc *
1576 VOLTAGE_SCALE) << VDDC_SHIFT; 1579 VOLTAGE_SCALE) << VDDC_SHIFT;
1577 table->SamuLevel[count].MinVoltage |= ((mm_table->entries[count].vddc - 1580
1578 data->vddc_vddci_delta) * VOLTAGE_SCALE) << VDDCI_SHIFT; 1581 if (POLARIS10_VOLTAGE_CONTROL_BY_GPIO == data->vddci_control)
1582 vddci = (uint32_t)phm_find_closest_vddci(&(data->vddci_voltage_table),
1583 mm_table->entries[count].vddc - VDDC_VDDCI_DELTA);
1584 else if (POLARIS10_VOLTAGE_CONTROL_BY_SVID2 == data->vddci_control)
1585 vddci = mm_table->entries[count].vddc - VDDC_VDDCI_DELTA;
1586 else
1587 vddci = (data->vbios_boot_state.vddci_bootup_value * VOLTAGE_SCALE) << VDDCI_SHIFT;
1588
1589 table->SamuLevel[count].MinVoltage |= (vddci * VOLTAGE_SCALE) << VDDCI_SHIFT;
1579 table->SamuLevel[count].MinVoltage |= 1 << PHASES_SHIFT; 1590 table->SamuLevel[count].MinVoltage |= 1 << PHASES_SHIFT;
1580 1591
1581 /* retrieve divider value for VBIOS */ 1592 /* retrieve divider value for VBIOS */
@@ -1658,6 +1669,7 @@ static int polaris10_populate_smc_uvd_level(struct pp_hwmgr *hwmgr,
1658 struct phm_ppt_v1_mm_clock_voltage_dependency_table *mm_table = 1669 struct phm_ppt_v1_mm_clock_voltage_dependency_table *mm_table =
1659 table_info->mm_dep_table; 1670 table_info->mm_dep_table;
1660 struct polaris10_hwmgr *data = (struct polaris10_hwmgr *)(hwmgr->backend); 1671 struct polaris10_hwmgr *data = (struct polaris10_hwmgr *)(hwmgr->backend);
1672 uint32_t vddci;
1661 1673
1662 table->UvdLevelCount = (uint8_t)(mm_table->count); 1674 table->UvdLevelCount = (uint8_t)(mm_table->count);
1663 table->UvdBootLevel = 0; 1675 table->UvdBootLevel = 0;
@@ -1668,8 +1680,16 @@ static int polaris10_populate_smc_uvd_level(struct pp_hwmgr *hwmgr,
1668 table->UvdLevel[count].DclkFrequency = mm_table->entries[count].dclk; 1680 table->UvdLevel[count].DclkFrequency = mm_table->entries[count].dclk;
1669 table->UvdLevel[count].MinVoltage |= (mm_table->entries[count].vddc * 1681 table->UvdLevel[count].MinVoltage |= (mm_table->entries[count].vddc *
1670 VOLTAGE_SCALE) << VDDC_SHIFT; 1682 VOLTAGE_SCALE) << VDDC_SHIFT;
1671 table->UvdLevel[count].MinVoltage |= ((mm_table->entries[count].vddc - 1683
1672 data->vddc_vddci_delta) * VOLTAGE_SCALE) << VDDCI_SHIFT; 1684 if (POLARIS10_VOLTAGE_CONTROL_BY_GPIO == data->vddci_control)
1685 vddci = (uint32_t)phm_find_closest_vddci(&(data->vddci_voltage_table),
1686 mm_table->entries[count].vddc - VDDC_VDDCI_DELTA);
1687 else if (POLARIS10_VOLTAGE_CONTROL_BY_SVID2 == data->vddci_control)
1688 vddci = mm_table->entries[count].vddc - VDDC_VDDCI_DELTA;
1689 else
1690 vddci = (data->vbios_boot_state.vddci_bootup_value * VOLTAGE_SCALE) << VDDCI_SHIFT;
1691
1692 table->UvdLevel[count].MinVoltage |= (vddci * VOLTAGE_SCALE) << VDDCI_SHIFT;
1673 table->UvdLevel[count].MinVoltage |= 1 << PHASES_SHIFT; 1693 table->UvdLevel[count].MinVoltage |= 1 << PHASES_SHIFT;
1674 1694
1675 /* retrieve divider value for VBIOS */ 1695 /* retrieve divider value for VBIOS */
@@ -1690,8 +1710,8 @@ static int polaris10_populate_smc_uvd_level(struct pp_hwmgr *hwmgr,
1690 CONVERT_FROM_HOST_TO_SMC_UL(table->UvdLevel[count].VclkFrequency); 1710 CONVERT_FROM_HOST_TO_SMC_UL(table->UvdLevel[count].VclkFrequency);
1691 CONVERT_FROM_HOST_TO_SMC_UL(table->UvdLevel[count].DclkFrequency); 1711 CONVERT_FROM_HOST_TO_SMC_UL(table->UvdLevel[count].DclkFrequency);
1692 CONVERT_FROM_HOST_TO_SMC_UL(table->UvdLevel[count].MinVoltage); 1712 CONVERT_FROM_HOST_TO_SMC_UL(table->UvdLevel[count].MinVoltage);
1693
1694 } 1713 }
1714
1695 return result; 1715 return result;
1696} 1716}
1697 1717
@@ -1787,24 +1807,32 @@ static int polaris10_populate_clock_stretcher_data_table(struct pp_hwmgr *hwmgr)
1787 1807
1788 ro = efuse * (max -min)/255 + min; 1808 ro = efuse * (max -min)/255 + min;
1789 1809
1790 /* Populate Sclk_CKS_masterEn0_7 and Sclk_voltageOffset */ 1810 /* Populate Sclk_CKS_masterEn0_7 and Sclk_voltageOffset
1811 * there is a little difference in calculating
1812 * volt_with_cks with windows */
1791 for (i = 0; i < sclk_table->count; i++) { 1813 for (i = 0; i < sclk_table->count; i++) {
1792 data->smc_state_table.Sclk_CKS_masterEn0_7 |= 1814 data->smc_state_table.Sclk_CKS_masterEn0_7 |=
1793 sclk_table->entries[i].cks_enable << i; 1815 sclk_table->entries[i].cks_enable << i;
1794 1816 if (hwmgr->chip_id == CHIP_POLARIS10) {
1795 volt_without_cks = (uint32_t)(((ro - 40) * 1000 - 2753594 - sclk_table->entries[i].clk/100 * 136418 /1000) / \ 1817 volt_without_cks = (uint32_t)((2753594000 + (sclk_table->entries[i].clk/100) * 136418 -(ro - 70) * 1000000) / \
1796 (sclk_table->entries[i].clk/100 * 1132925 /10000 - 242418)/100); 1818 (2424180 - (sclk_table->entries[i].clk/100) * 1132925/1000));
1797 1819 volt_with_cks = (uint32_t)((279720200 + sclk_table->entries[i].clk * 3232 - (ro - 65) * 100000000) / \
1798 volt_with_cks = (uint32_t)((ro * 1000 -2396351 - sclk_table->entries[i].clk/100 * 329021/1000) / \ 1820 (252248000 - sclk_table->entries[i].clk/100 * 115764));
1799 (sclk_table->entries[i].clk/10000 * 649434 /1000 - 18005)/10); 1821 } else {
1822 volt_without_cks = (uint32_t)((2416794800 + (sclk_table->entries[i].clk/100) * 1476925/10 -(ro - 50) * 1000000) / \
1823 (2625416 - (sclk_table->entries[i].clk/100) * 12586807/10000));
1824 volt_with_cks = (uint32_t)((2999656000 + sclk_table->entries[i].clk * 392803/100 - (ro - 44) * 1000000) / \
1825 (3422454 - sclk_table->entries[i].clk/100 * 18886376/10000));
1826 }
1800 1827
1801 if (volt_without_cks >= volt_with_cks) 1828 if (volt_without_cks >= volt_with_cks)
1802 volt_offset = (uint8_t)(((volt_without_cks - volt_with_cks + 1829 volt_offset = (uint8_t)CEILING_UCHAR((volt_without_cks - volt_with_cks +
1803 sclk_table->entries[i].cks_voffset) * 100 / 625) + 1); 1830 sclk_table->entries[i].cks_voffset) * 100 / 625);
1804 1831
1805 data->smc_state_table.Sclk_voltageOffset[i] = volt_offset; 1832 data->smc_state_table.Sclk_voltageOffset[i] = volt_offset;
1806 } 1833 }
1807 1834
1835 data->smc_state_table.LdoRefSel = (table_info->cac_dtp_table->ucCKS_LDO_REFSEL != 0) ? table_info->cac_dtp_table->ucCKS_LDO_REFSEL : 6;
1808 /* Populate CKS Lookup Table */ 1836 /* Populate CKS Lookup Table */
1809 if (stretch_amount == 1 || stretch_amount == 2 || stretch_amount == 5) 1837 if (stretch_amount == 1 || stretch_amount == 2 || stretch_amount == 5)
1810 stretch_amount2 = 0; 1838 stretch_amount2 = 0;
@@ -2487,6 +2515,8 @@ int polaris10_enable_dpm_tasks(struct pp_hwmgr *hwmgr)
2487 PP_ASSERT_WITH_CODE((0 == tmp_result), 2515 PP_ASSERT_WITH_CODE((0 == tmp_result),
2488 "Failed to enable VR hot GPIO interrupt!", result = tmp_result); 2516 "Failed to enable VR hot GPIO interrupt!", result = tmp_result);
2489 2517
2518 smum_send_msg_to_smc(hwmgr->smumgr, (PPSMC_Msg)PPSMC_HasDisplay);
2519
2490 tmp_result = polaris10_enable_sclk_control(hwmgr); 2520 tmp_result = polaris10_enable_sclk_control(hwmgr);
2491 PP_ASSERT_WITH_CODE((0 == tmp_result), 2521 PP_ASSERT_WITH_CODE((0 == tmp_result),
2492 "Failed to enable SCLK control!", result = tmp_result); 2522 "Failed to enable SCLK control!", result = tmp_result);
@@ -2913,6 +2943,31 @@ static int polaris10_set_private_data_based_on_pptable(struct pp_hwmgr *hwmgr)
2913 return 0; 2943 return 0;
2914} 2944}
2915 2945
2946int polaris10_patch_voltage_workaround(struct pp_hwmgr *hwmgr)
2947{
2948 struct phm_ppt_v1_information *table_info =
2949 (struct phm_ppt_v1_information *)(hwmgr->pptable);
2950 struct phm_ppt_v1_clock_voltage_dependency_table *dep_mclk_table =
2951 table_info->vdd_dep_on_mclk;
2952 struct phm_ppt_v1_voltage_lookup_table *lookup_table =
2953 table_info->vddc_lookup_table;
2954 uint32_t i;
2955
2956 if (hwmgr->chip_id == CHIP_POLARIS10 && hwmgr->hw_revision == 0xC7) {
2957 if (lookup_table->entries[dep_mclk_table->entries[dep_mclk_table->count-1].vddInd].us_vdd >= 1000)
2958 return 0;
2959
2960 for (i = 0; i < lookup_table->count; i++) {
2961 if (lookup_table->entries[i].us_vdd < 0xff01 && lookup_table->entries[i].us_vdd >= 1000) {
2962 dep_mclk_table->entries[dep_mclk_table->count-1].vddInd = (uint8_t) i;
2963 return 0;
2964 }
2965 }
2966 }
2967 return 0;
2968}
2969
2970
2916int polaris10_hwmgr_backend_init(struct pp_hwmgr *hwmgr) 2971int polaris10_hwmgr_backend_init(struct pp_hwmgr *hwmgr)
2917{ 2972{
2918 struct polaris10_hwmgr *data = (struct polaris10_hwmgr *)(hwmgr->backend); 2973 struct polaris10_hwmgr *data = (struct polaris10_hwmgr *)(hwmgr->backend);
@@ -2990,6 +3045,7 @@ int polaris10_hwmgr_backend_init(struct pp_hwmgr *hwmgr)
2990 3045
2991 polaris10_set_features_platform_caps(hwmgr); 3046 polaris10_set_features_platform_caps(hwmgr);
2992 3047
3048 polaris10_patch_voltage_workaround(hwmgr);
2993 polaris10_init_dpm_defaults(hwmgr); 3049 polaris10_init_dpm_defaults(hwmgr);
2994 3050
2995 /* Get leakage voltage based on leakage ID. */ 3051 /* Get leakage voltage based on leakage ID. */
@@ -4359,6 +4415,15 @@ static int polaris10_notify_link_speed_change_after_state_change(
4359 return 0; 4415 return 0;
4360} 4416}
4361 4417
4418static int polaris10_notify_smc_display(struct pp_hwmgr *hwmgr)
4419{
4420 struct polaris10_hwmgr *data = (struct polaris10_hwmgr *)(hwmgr->backend);
4421
4422 smum_send_msg_to_smc_with_parameter(hwmgr->smumgr,
4423 (PPSMC_Msg)PPSMC_MSG_SetVBITimeout, data->frame_time_x2);
4424 return (smum_send_msg_to_smc(hwmgr->smumgr, (PPSMC_Msg)PPSMC_HasDisplay) == 0) ? 0 : -EINVAL;
4425}
4426
4362static int polaris10_set_power_state_tasks(struct pp_hwmgr *hwmgr, const void *input) 4427static int polaris10_set_power_state_tasks(struct pp_hwmgr *hwmgr, const void *input)
4363{ 4428{
4364 int tmp_result, result = 0; 4429 int tmp_result, result = 0;
@@ -4407,6 +4472,11 @@ static int polaris10_set_power_state_tasks(struct pp_hwmgr *hwmgr, const void *i
4407 "Failed to program memory timing parameters!", 4472 "Failed to program memory timing parameters!",
4408 result = tmp_result); 4473 result = tmp_result);
4409 4474
4475 tmp_result = polaris10_notify_smc_display(hwmgr);
4476 PP_ASSERT_WITH_CODE((0 == tmp_result),
4477 "Failed to notify smc display settings!",
4478 result = tmp_result);
4479
4410 tmp_result = polaris10_unfreeze_sclk_mclk_dpm(hwmgr); 4480 tmp_result = polaris10_unfreeze_sclk_mclk_dpm(hwmgr);
4411 PP_ASSERT_WITH_CODE((0 == tmp_result), 4481 PP_ASSERT_WITH_CODE((0 == tmp_result),
4412 "Failed to unfreeze SCLK MCLK DPM!", 4482 "Failed to unfreeze SCLK MCLK DPM!",
@@ -4441,6 +4511,7 @@ static int polaris10_set_max_fan_pwm_output(struct pp_hwmgr *hwmgr, uint16_t us_
4441 PPSMC_MSG_SetFanPwmMax, us_max_fan_pwm); 4511 PPSMC_MSG_SetFanPwmMax, us_max_fan_pwm);
4442} 4512}
4443 4513
4514
4444int polaris10_notify_smc_display_change(struct pp_hwmgr *hwmgr, bool has_display) 4515int polaris10_notify_smc_display_change(struct pp_hwmgr *hwmgr, bool has_display)
4445{ 4516{
4446 PPSMC_Msg msg = has_display ? (PPSMC_Msg)PPSMC_HasDisplay : (PPSMC_Msg)PPSMC_NoDisplay; 4517 PPSMC_Msg msg = has_display ? (PPSMC_Msg)PPSMC_HasDisplay : (PPSMC_Msg)PPSMC_NoDisplay;
@@ -4460,8 +4531,6 @@ int polaris10_notify_smc_display_config_after_ps_adjustment(struct pp_hwmgr *hwm
4460 4531
4461 if (num_active_displays > 1) /* to do && (pHwMgr->pPECI->displayConfiguration.bMultiMonitorInSync != TRUE)) */ 4532 if (num_active_displays > 1) /* to do && (pHwMgr->pPECI->displayConfiguration.bMultiMonitorInSync != TRUE)) */
4462 polaris10_notify_smc_display_change(hwmgr, false); 4533 polaris10_notify_smc_display_change(hwmgr, false);
4463 else
4464 polaris10_notify_smc_display_change(hwmgr, true);
4465 4534
4466 return 0; 4535 return 0;
4467} 4536}
@@ -4502,6 +4571,8 @@ int polaris10_program_display_gap(struct pp_hwmgr *hwmgr)
4502 frame_time_in_us = 1000000 / refresh_rate; 4571 frame_time_in_us = 1000000 / refresh_rate;
4503 4572
4504 pre_vbi_time_in_us = frame_time_in_us - 200 - mode_info.vblank_time_us; 4573 pre_vbi_time_in_us = frame_time_in_us - 200 - mode_info.vblank_time_us;
4574 data->frame_time_x2 = frame_time_in_us * 2 / 100;
4575
4505 display_gap2 = pre_vbi_time_in_us * (ref_clock / 100); 4576 display_gap2 = pre_vbi_time_in_us * (ref_clock / 100);
4506 4577
4507 cgs_write_ind_register(hwmgr->device, CGS_IND_REG__SMC, ixCG_DISPLAY_GAP_CNTL2, display_gap2); 4578 cgs_write_ind_register(hwmgr->device, CGS_IND_REG__SMC, ixCG_DISPLAY_GAP_CNTL2, display_gap2);
@@ -4510,8 +4581,6 @@ int polaris10_program_display_gap(struct pp_hwmgr *hwmgr)
4510 4581
4511 cgs_write_ind_register(hwmgr->device, CGS_IND_REG__SMC, data->soft_regs_start + offsetof(SMU74_SoftRegisters, VBlankTimeout), (frame_time_in_us - pre_vbi_time_in_us)); 4582 cgs_write_ind_register(hwmgr->device, CGS_IND_REG__SMC, data->soft_regs_start + offsetof(SMU74_SoftRegisters, VBlankTimeout), (frame_time_in_us - pre_vbi_time_in_us));
4512 4583
4513 polaris10_notify_smc_display_change(hwmgr, num_active_displays != 0);
4514
4515 return 0; 4584 return 0;
4516} 4585}
4517 4586
@@ -4623,7 +4692,7 @@ int polaris10_upload_mc_firmware(struct pp_hwmgr *hwmgr)
4623 return 0; 4692 return 0;
4624 } 4693 }
4625 4694
4626 data->need_long_memory_training = true; 4695 data->need_long_memory_training = false;
4627 4696
4628/* 4697/*
4629 * PPMCME_FirmwareDescriptorEntry *pfd = NULL; 4698 * PPMCME_FirmwareDescriptorEntry *pfd = NULL;
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_hwmgr.h b/drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_hwmgr.h
index d717789441f5..afc3434822d1 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_hwmgr.h
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_hwmgr.h
@@ -315,6 +315,7 @@ struct polaris10_hwmgr {
315 315
316 uint32_t avfs_vdroop_override_setting; 316 uint32_t avfs_vdroop_override_setting;
317 bool apply_avfs_cks_off_voltage; 317 bool apply_avfs_cks_off_voltage;
318 uint32_t frame_time_x2;
318}; 319};
319 320
320/* To convert to Q8.8 format for firmware */ 321/* To convert to Q8.8 format for firmware */
diff --git a/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h b/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h
index 28f571449495..77e8e33d5870 100644
--- a/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h
+++ b/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h
@@ -411,6 +411,8 @@ struct phm_cac_tdp_table {
411 uint8_t ucVr_I2C_Line; 411 uint8_t ucVr_I2C_Line;
412 uint8_t ucPlx_I2C_address; 412 uint8_t ucPlx_I2C_address;
413 uint8_t ucPlx_I2C_Line; 413 uint8_t ucPlx_I2C_Line;
414 uint32_t usBoostPowerLimit;
415 uint8_t ucCKS_LDO_REFSEL;
414}; 416};
415 417
416struct phm_ppm_table { 418struct phm_ppm_table {
diff --git a/drivers/gpu/drm/amd/powerplay/inc/polaris10_ppsmc.h b/drivers/gpu/drm/amd/powerplay/inc/polaris10_ppsmc.h
index d41d37ab5b7c..b8f4b73c322e 100644
--- a/drivers/gpu/drm/amd/powerplay/inc/polaris10_ppsmc.h
+++ b/drivers/gpu/drm/amd/powerplay/inc/polaris10_ppsmc.h
@@ -392,6 +392,8 @@ typedef uint16_t PPSMC_Result;
392#define PPSMC_MSG_SetGpuPllDfsForSclk ((uint16_t) 0x300) 392#define PPSMC_MSG_SetGpuPllDfsForSclk ((uint16_t) 0x300)
393#define PPSMC_MSG_Didt_Block_Function ((uint16_t) 0x301) 393#define PPSMC_MSG_Didt_Block_Function ((uint16_t) 0x301)
394 394
395#define PPSMC_MSG_SetVBITimeout ((uint16_t) 0x306)
396
395#define PPSMC_MSG_SecureSRBMWrite ((uint16_t) 0x600) 397#define PPSMC_MSG_SecureSRBMWrite ((uint16_t) 0x600)
396#define PPSMC_MSG_SecureSRBMRead ((uint16_t) 0x601) 398#define PPSMC_MSG_SecureSRBMRead ((uint16_t) 0x601)
397#define PPSMC_MSG_SetAddress ((uint16_t) 0x800) 399#define PPSMC_MSG_SetAddress ((uint16_t) 0x800)
diff --git a/drivers/gpu/drm/amd/powerplay/inc/smu74_discrete.h b/drivers/gpu/drm/amd/powerplay/inc/smu74_discrete.h
index b85ff5400e57..899d6d8108c2 100644
--- a/drivers/gpu/drm/amd/powerplay/inc/smu74_discrete.h
+++ b/drivers/gpu/drm/amd/powerplay/inc/smu74_discrete.h
@@ -270,7 +270,8 @@ struct SMU74_Discrete_DpmTable {
270 uint8_t BootPhases; 270 uint8_t BootPhases;
271 271
272 uint8_t VRHotLevel; 272 uint8_t VRHotLevel;
273 uint8_t Reserved1[3]; 273 uint8_t LdoRefSel;
274 uint8_t Reserved1[2];
274 uint16_t FanStartTemperature; 275 uint16_t FanStartTemperature;
275 uint16_t FanStopTemperature; 276 uint16_t FanStopTemperature;
276 uint16_t MaxVoltage; 277 uint16_t MaxVoltage;
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 32690332d441..103546834b60 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -2365,16 +2365,16 @@ static int i915_ppgtt_info(struct seq_file *m, void *data)
2365 task = get_pid_task(file->pid, PIDTYPE_PID); 2365 task = get_pid_task(file->pid, PIDTYPE_PID);
2366 if (!task) { 2366 if (!task) {
2367 ret = -ESRCH; 2367 ret = -ESRCH;
2368 goto out_put; 2368 goto out_unlock;
2369 } 2369 }
2370 seq_printf(m, "\nproc: %s\n", task->comm); 2370 seq_printf(m, "\nproc: %s\n", task->comm);
2371 put_task_struct(task); 2371 put_task_struct(task);
2372 idr_for_each(&file_priv->context_idr, per_file_ctx, 2372 idr_for_each(&file_priv->context_idr, per_file_ctx,
2373 (void *)(unsigned long)m); 2373 (void *)(unsigned long)m);
2374 } 2374 }
2375out_unlock:
2375 mutex_unlock(&dev->filelist_mutex); 2376 mutex_unlock(&dev->filelist_mutex);
2376 2377
2377out_put:
2378 intel_runtime_pm_put(dev_priv); 2378 intel_runtime_pm_put(dev_priv);
2379 mutex_unlock(&dev->struct_mutex); 2379 mutex_unlock(&dev->struct_mutex);
2380 2380
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 56a1637c864f..04452cf3eae8 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -8447,16 +8447,16 @@ static void lpt_reset_fdi_mphy(struct drm_i915_private *dev_priv)
8447 tmp |= FDI_MPHY_IOSFSB_RESET_CTL; 8447 tmp |= FDI_MPHY_IOSFSB_RESET_CTL;
8448 I915_WRITE(SOUTH_CHICKEN2, tmp); 8448 I915_WRITE(SOUTH_CHICKEN2, tmp);
8449 8449
8450 if (wait_for_atomic_us(I915_READ(SOUTH_CHICKEN2) & 8450 if (wait_for_us(I915_READ(SOUTH_CHICKEN2) &
8451 FDI_MPHY_IOSFSB_RESET_STATUS, 100)) 8451 FDI_MPHY_IOSFSB_RESET_STATUS, 100))
8452 DRM_ERROR("FDI mPHY reset assert timeout\n"); 8452 DRM_ERROR("FDI mPHY reset assert timeout\n");
8453 8453
8454 tmp = I915_READ(SOUTH_CHICKEN2); 8454 tmp = I915_READ(SOUTH_CHICKEN2);
8455 tmp &= ~FDI_MPHY_IOSFSB_RESET_CTL; 8455 tmp &= ~FDI_MPHY_IOSFSB_RESET_CTL;
8456 I915_WRITE(SOUTH_CHICKEN2, tmp); 8456 I915_WRITE(SOUTH_CHICKEN2, tmp);
8457 8457
8458 if (wait_for_atomic_us((I915_READ(SOUTH_CHICKEN2) & 8458 if (wait_for_us((I915_READ(SOUTH_CHICKEN2) &
8459 FDI_MPHY_IOSFSB_RESET_STATUS) == 0, 100)) 8459 FDI_MPHY_IOSFSB_RESET_STATUS) == 0, 100))
8460 DRM_ERROR("FDI mPHY reset de-assert timeout\n"); 8460 DRM_ERROR("FDI mPHY reset de-assert timeout\n");
8461} 8461}
8462 8462
@@ -9440,8 +9440,8 @@ static void hsw_disable_lcpll(struct drm_i915_private *dev_priv,
9440 val |= LCPLL_CD_SOURCE_FCLK; 9440 val |= LCPLL_CD_SOURCE_FCLK;
9441 I915_WRITE(LCPLL_CTL, val); 9441 I915_WRITE(LCPLL_CTL, val);
9442 9442
9443 if (wait_for_atomic_us(I915_READ(LCPLL_CTL) & 9443 if (wait_for_us(I915_READ(LCPLL_CTL) &
9444 LCPLL_CD_SOURCE_FCLK_DONE, 1)) 9444 LCPLL_CD_SOURCE_FCLK_DONE, 1))
9445 DRM_ERROR("Switching to FCLK failed\n"); 9445 DRM_ERROR("Switching to FCLK failed\n");
9446 9446
9447 val = I915_READ(LCPLL_CTL); 9447 val = I915_READ(LCPLL_CTL);
@@ -9514,8 +9514,8 @@ static void hsw_restore_lcpll(struct drm_i915_private *dev_priv)
9514 val &= ~LCPLL_CD_SOURCE_FCLK; 9514 val &= ~LCPLL_CD_SOURCE_FCLK;
9515 I915_WRITE(LCPLL_CTL, val); 9515 I915_WRITE(LCPLL_CTL, val);
9516 9516
9517 if (wait_for_atomic_us((I915_READ(LCPLL_CTL) & 9517 if (wait_for_us((I915_READ(LCPLL_CTL) &
9518 LCPLL_CD_SOURCE_FCLK_DONE) == 0, 1)) 9518 LCPLL_CD_SOURCE_FCLK_DONE) == 0, 1))
9519 DRM_ERROR("Switching back to LCPLL failed\n"); 9519 DRM_ERROR("Switching back to LCPLL failed\n");
9520 } 9520 }
9521 9521
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 79cf2d5f5a20..40745e38d438 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -663,7 +663,7 @@ intel_dp_aux_wait_done(struct intel_dp *intel_dp, bool has_aux_irq)
663 done = wait_event_timeout(dev_priv->gmbus_wait_queue, C, 663 done = wait_event_timeout(dev_priv->gmbus_wait_queue, C,
664 msecs_to_jiffies_timeout(10)); 664 msecs_to_jiffies_timeout(10));
665 else 665 else
666 done = wait_for_atomic(C, 10) == 0; 666 done = wait_for(C, 10) == 0;
667 if (!done) 667 if (!done)
668 DRM_ERROR("dp aux hw did not signal timeout (has irq: %i)!\n", 668 DRM_ERROR("dp aux hw did not signal timeout (has irq: %i)!\n",
669 has_aux_irq); 669 has_aux_irq);
@@ -4899,13 +4899,15 @@ static void intel_edp_panel_vdd_sanitize(struct intel_dp *intel_dp)
4899 4899
4900void intel_dp_encoder_reset(struct drm_encoder *encoder) 4900void intel_dp_encoder_reset(struct drm_encoder *encoder)
4901{ 4901{
4902 struct intel_dp *intel_dp; 4902 struct drm_i915_private *dev_priv = to_i915(encoder->dev);
4903 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
4904
4905 if (!HAS_DDI(dev_priv))
4906 intel_dp->DP = I915_READ(intel_dp->output_reg);
4903 4907
4904 if (to_intel_encoder(encoder)->type != INTEL_OUTPUT_EDP) 4908 if (to_intel_encoder(encoder)->type != INTEL_OUTPUT_EDP)
4905 return; 4909 return;
4906 4910
4907 intel_dp = enc_to_intel_dp(encoder);
4908
4909 pps_lock(intel_dp); 4911 pps_lock(intel_dp);
4910 4912
4911 /* 4913 /*
diff --git a/drivers/gpu/drm/i915/intel_dpll_mgr.c b/drivers/gpu/drm/i915/intel_dpll_mgr.c
index baf6f5584cbd..58f60b27837e 100644
--- a/drivers/gpu/drm/i915/intel_dpll_mgr.c
+++ b/drivers/gpu/drm/i915/intel_dpll_mgr.c
@@ -1377,8 +1377,8 @@ static void bxt_ddi_pll_enable(struct drm_i915_private *dev_priv,
1377 I915_WRITE(BXT_PORT_PLL_ENABLE(port), temp); 1377 I915_WRITE(BXT_PORT_PLL_ENABLE(port), temp);
1378 POSTING_READ(BXT_PORT_PLL_ENABLE(port)); 1378 POSTING_READ(BXT_PORT_PLL_ENABLE(port));
1379 1379
1380 if (wait_for_atomic_us((I915_READ(BXT_PORT_PLL_ENABLE(port)) & 1380 if (wait_for_us((I915_READ(BXT_PORT_PLL_ENABLE(port)) & PORT_PLL_LOCK),
1381 PORT_PLL_LOCK), 200)) 1381 200))
1382 DRM_ERROR("PLL %d not locked\n", port); 1382 DRM_ERROR("PLL %d not locked\n", port);
1383 1383
1384 /* 1384 /*
diff --git a/include/drm/i915_pciids.h b/include/drm/i915_pciids.h
index 9094599a1150..33466bfc6440 100644
--- a/include/drm/i915_pciids.h
+++ b/include/drm/i915_pciids.h
@@ -309,6 +309,7 @@
309 INTEL_VGA_DEVICE(0x5906, info), /* ULT GT1 */ \ 309 INTEL_VGA_DEVICE(0x5906, info), /* ULT GT1 */ \
310 INTEL_VGA_DEVICE(0x590E, info), /* ULX GT1 */ \ 310 INTEL_VGA_DEVICE(0x590E, info), /* ULX GT1 */ \
311 INTEL_VGA_DEVICE(0x5902, info), /* DT GT1 */ \ 311 INTEL_VGA_DEVICE(0x5902, info), /* DT GT1 */ \
312 INTEL_VGA_DEVICE(0x5908, info), /* Halo GT1 */ \
312 INTEL_VGA_DEVICE(0x590B, info), /* Halo GT1 */ \ 313 INTEL_VGA_DEVICE(0x590B, info), /* Halo GT1 */ \
313 INTEL_VGA_DEVICE(0x590A, info) /* SRV GT1 */ 314 INTEL_VGA_DEVICE(0x590A, info) /* SRV GT1 */
314 315
@@ -322,15 +323,12 @@
322 INTEL_VGA_DEVICE(0x591D, info) /* WKS GT2 */ 323 INTEL_VGA_DEVICE(0x591D, info) /* WKS GT2 */
323 324
324#define INTEL_KBL_GT3_IDS(info) \ 325#define INTEL_KBL_GT3_IDS(info) \
326 INTEL_VGA_DEVICE(0x5923, info), /* ULT GT3 */ \
325 INTEL_VGA_DEVICE(0x5926, info), /* ULT GT3 */ \ 327 INTEL_VGA_DEVICE(0x5926, info), /* ULT GT3 */ \
326 INTEL_VGA_DEVICE(0x592B, info), /* Halo GT3 */ \ 328 INTEL_VGA_DEVICE(0x5927, info) /* ULT GT3 */
327 INTEL_VGA_DEVICE(0x592A, info) /* SRV GT3 */
328 329
329#define INTEL_KBL_GT4_IDS(info) \ 330#define INTEL_KBL_GT4_IDS(info) \
330 INTEL_VGA_DEVICE(0x5932, info), /* DT GT4 */ \ 331 INTEL_VGA_DEVICE(0x593B, info) /* Halo GT4 */
331 INTEL_VGA_DEVICE(0x593B, info), /* Halo GT4 */ \
332 INTEL_VGA_DEVICE(0x593A, info), /* SRV GT4 */ \
333 INTEL_VGA_DEVICE(0x593D, info) /* WKS GT4 */
334 332
335#define INTEL_KBL_IDS(info) \ 333#define INTEL_KBL_IDS(info) \
336 INTEL_KBL_GT1_IDS(info), \ 334 INTEL_KBL_GT1_IDS(info), \