Merge tag 'drm-fixes-5.4-2019-10-16' of git://people.freedesktop.org/~agd5f/linux into drm-fixes
drm-fixes-5.4-2019-10-16: amdgpu: - Powerplay fix for SMU7 parts - Bail earlier when cik/si support is not set to 1 - Fix an SDMA issue on navi radeon: - revert a PPC fix which broken x86 Signed-off-by: Dave Airlie <airlied@redhat.com> From: Alex Deucher <alexdeucher@gmail.com> Link: https://patchwork.freedesktop.org/patch/msgid/20191017022443.3853-1-alexander.deucher@amd.com
This commit is contained in:
@ -1048,6 +1048,41 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
|
|||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_DRM_AMDGPU_SI
|
||||||
|
if (!amdgpu_si_support) {
|
||||||
|
switch (flags & AMD_ASIC_MASK) {
|
||||||
|
case CHIP_TAHITI:
|
||||||
|
case CHIP_PITCAIRN:
|
||||||
|
case CHIP_VERDE:
|
||||||
|
case CHIP_OLAND:
|
||||||
|
case CHIP_HAINAN:
|
||||||
|
dev_info(&pdev->dev,
|
||||||
|
"SI support provided by radeon.\n");
|
||||||
|
dev_info(&pdev->dev,
|
||||||
|
"Use radeon.si_support=0 amdgpu.si_support=1 to override.\n"
|
||||||
|
);
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_DRM_AMDGPU_CIK
|
||||||
|
if (!amdgpu_cik_support) {
|
||||||
|
switch (flags & AMD_ASIC_MASK) {
|
||||||
|
case CHIP_KAVERI:
|
||||||
|
case CHIP_BONAIRE:
|
||||||
|
case CHIP_HAWAII:
|
||||||
|
case CHIP_KABINI:
|
||||||
|
case CHIP_MULLINS:
|
||||||
|
dev_info(&pdev->dev,
|
||||||
|
"CIK support provided by radeon.\n");
|
||||||
|
dev_info(&pdev->dev,
|
||||||
|
"Use radeon.cik_support=0 amdgpu.cik_support=1 to override.\n"
|
||||||
|
);
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Get rid of things like offb */
|
/* Get rid of things like offb */
|
||||||
ret = drm_fb_helper_remove_conflicting_pci_framebuffers(pdev, 0, "amdgpudrmfb");
|
ret = drm_fb_helper_remove_conflicting_pci_framebuffers(pdev, 0, "amdgpudrmfb");
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@ -144,41 +144,6 @@ int amdgpu_driver_load_kms(struct drm_device *dev, unsigned long flags)
|
|||||||
struct amdgpu_device *adev;
|
struct amdgpu_device *adev;
|
||||||
int r, acpi_status;
|
int r, acpi_status;
|
||||||
|
|
||||||
#ifdef CONFIG_DRM_AMDGPU_SI
|
|
||||||
if (!amdgpu_si_support) {
|
|
||||||
switch (flags & AMD_ASIC_MASK) {
|
|
||||||
case CHIP_TAHITI:
|
|
||||||
case CHIP_PITCAIRN:
|
|
||||||
case CHIP_VERDE:
|
|
||||||
case CHIP_OLAND:
|
|
||||||
case CHIP_HAINAN:
|
|
||||||
dev_info(dev->dev,
|
|
||||||
"SI support provided by radeon.\n");
|
|
||||||
dev_info(dev->dev,
|
|
||||||
"Use radeon.si_support=0 amdgpu.si_support=1 to override.\n"
|
|
||||||
);
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_DRM_AMDGPU_CIK
|
|
||||||
if (!amdgpu_cik_support) {
|
|
||||||
switch (flags & AMD_ASIC_MASK) {
|
|
||||||
case CHIP_KAVERI:
|
|
||||||
case CHIP_BONAIRE:
|
|
||||||
case CHIP_HAWAII:
|
|
||||||
case CHIP_KABINI:
|
|
||||||
case CHIP_MULLINS:
|
|
||||||
dev_info(dev->dev,
|
|
||||||
"CIK support provided by radeon.\n");
|
|
||||||
dev_info(dev->dev,
|
|
||||||
"Use radeon.cik_support=0 amdgpu.cik_support=1 to override.\n"
|
|
||||||
);
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
adev = kzalloc(sizeof(struct amdgpu_device), GFP_KERNEL);
|
adev = kzalloc(sizeof(struct amdgpu_device), GFP_KERNEL);
|
||||||
if (adev == NULL) {
|
if (adev == NULL) {
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
@ -1129,7 +1129,7 @@ static void sdma_v5_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring)
|
|||||||
amdgpu_ring_write(ring, addr & 0xfffffffc);
|
amdgpu_ring_write(ring, addr & 0xfffffffc);
|
||||||
amdgpu_ring_write(ring, upper_32_bits(addr) & 0xffffffff);
|
amdgpu_ring_write(ring, upper_32_bits(addr) & 0xffffffff);
|
||||||
amdgpu_ring_write(ring, seq); /* reference */
|
amdgpu_ring_write(ring, seq); /* reference */
|
||||||
amdgpu_ring_write(ring, 0xfffffff); /* mask */
|
amdgpu_ring_write(ring, 0xffffffff); /* mask */
|
||||||
amdgpu_ring_write(ring, SDMA_PKT_POLL_REGMEM_DW5_RETRY_COUNT(0xfff) |
|
amdgpu_ring_write(ring, SDMA_PKT_POLL_REGMEM_DW5_RETRY_COUNT(0xfff) |
|
||||||
SDMA_PKT_POLL_REGMEM_DW5_INTERVAL(4)); /* retry count, poll interval */
|
SDMA_PKT_POLL_REGMEM_DW5_INTERVAL(4)); /* retry count, poll interval */
|
||||||
}
|
}
|
||||||
|
@ -655,7 +655,7 @@ static int polaris10_populate_smc_mvdd_table(struct pp_hwmgr *hwmgr,
|
|||||||
count = SMU_MAX_SMIO_LEVELS;
|
count = SMU_MAX_SMIO_LEVELS;
|
||||||
for (level = 0; level < count; level++) {
|
for (level = 0; level < count; level++) {
|
||||||
table->SmioTable2.Pattern[level].Voltage =
|
table->SmioTable2.Pattern[level].Voltage =
|
||||||
PP_HOST_TO_SMC_US(data->mvdd_voltage_table.entries[count].value * VOLTAGE_SCALE);
|
PP_HOST_TO_SMC_US(data->mvdd_voltage_table.entries[level].value * VOLTAGE_SCALE);
|
||||||
/* Index into DpmTable.Smio. Drive bits from Smio entry to get this voltage level.*/
|
/* Index into DpmTable.Smio. Drive bits from Smio entry to get this voltage level.*/
|
||||||
table->SmioTable2.Pattern[level].Smio =
|
table->SmioTable2.Pattern[level].Smio =
|
||||||
(uint8_t) level;
|
(uint8_t) level;
|
||||||
|
@ -456,7 +456,7 @@ static int vegam_populate_smc_mvdd_table(struct pp_hwmgr *hwmgr,
|
|||||||
count = SMU_MAX_SMIO_LEVELS;
|
count = SMU_MAX_SMIO_LEVELS;
|
||||||
for (level = 0; level < count; level++) {
|
for (level = 0; level < count; level++) {
|
||||||
table->SmioTable2.Pattern[level].Voltage = PP_HOST_TO_SMC_US(
|
table->SmioTable2.Pattern[level].Voltage = PP_HOST_TO_SMC_US(
|
||||||
data->mvdd_voltage_table.entries[count].value * VOLTAGE_SCALE);
|
data->mvdd_voltage_table.entries[level].value * VOLTAGE_SCALE);
|
||||||
/* Index into DpmTable.Smio. Drive bits from Smio entry to get this voltage level.*/
|
/* Index into DpmTable.Smio. Drive bits from Smio entry to get this voltage level.*/
|
||||||
table->SmioTable2.Pattern[level].Smio =
|
table->SmioTable2.Pattern[level].Smio =
|
||||||
(uint8_t) level;
|
(uint8_t) level;
|
||||||
|
@ -379,19 +379,11 @@ radeon_pci_remove(struct pci_dev *pdev)
|
|||||||
static void
|
static void
|
||||||
radeon_pci_shutdown(struct pci_dev *pdev)
|
radeon_pci_shutdown(struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
struct drm_device *ddev = pci_get_drvdata(pdev);
|
|
||||||
|
|
||||||
/* if we are running in a VM, make sure the device
|
/* if we are running in a VM, make sure the device
|
||||||
* torn down properly on reboot/shutdown
|
* torn down properly on reboot/shutdown
|
||||||
*/
|
*/
|
||||||
if (radeon_device_is_virtual())
|
if (radeon_device_is_virtual())
|
||||||
radeon_pci_remove(pdev);
|
radeon_pci_remove(pdev);
|
||||||
|
|
||||||
/* Some adapters need to be suspended before a
|
|
||||||
* shutdown occurs in order to prevent an error
|
|
||||||
* during kexec.
|
|
||||||
*/
|
|
||||||
radeon_suspend_kms(ddev, true, true, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int radeon_pmops_suspend(struct device *dev)
|
static int radeon_pmops_suspend(struct device *dev)
|
||||||
|
Reference in New Issue
Block a user