diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-07-02 12:41:28 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-07-02 12:41:28 -0400 |
commit | 99b0f54e6a3a4012aacfaada5644a8e520447d80 (patch) | |
tree | cf3350b11d6c6c9a0443ca0ad2bfc6186af4d5c6 | |
parent | 467ce7693f5111c11daeb75e02eba2ab9ee6f334 (diff) | |
parent | 88c087109b5fedaf9b61839d08543fdaf9d5ec39 (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.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_hwmgr.c | 179 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_hwmgr.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/inc/hwmgr.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/inc/polaris10_ppsmc.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/inc/smu74_discrete.h | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_debugfs.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 16 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 10 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_dpll_mgr.c | 4 | ||||
-rw-r--r-- | include/drm/i915_pciids.h | 10 |
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 | ||
102 | static const uint16_t polaris10_clock_stretcher_lookup_table[2][4] = | 103 | static 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 | ||
2946 | int 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 | |||
2916 | int polaris10_hwmgr_backend_init(struct pp_hwmgr *hwmgr) | 2971 | int 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 | ||
4418 | static 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 | |||
4362 | static int polaris10_set_power_state_tasks(struct pp_hwmgr *hwmgr, const void *input) | 4427 | static 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 | |||
4444 | int polaris10_notify_smc_display_change(struct pp_hwmgr *hwmgr, bool has_display) | 4515 | int 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 | ||
416 | struct phm_ppm_table { | 418 | struct 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 | } |
2375 | out_unlock: | ||
2375 | mutex_unlock(&dev->filelist_mutex); | 2376 | mutex_unlock(&dev->filelist_mutex); |
2376 | 2377 | ||
2377 | out_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 | ||
4900 | void intel_dp_encoder_reset(struct drm_encoder *encoder) | 4900 | void 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), \ |