mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-28 14:44:10 +08:00
Merge tag 'drm-fixes-5.4-2019-11-20' of git://people.freedesktop.org/~agd5f/linux into drm-fixes
drm-fixes-5.4-2019-11-20: amdgpu: - Remove experimental flag for navi14 - Fix confusing power message failures on older VI parts - Hang fix for gfxoff when using the read register interface - Two stability regression fixes for Raven Signed-off-by: Dave Airlie <airlied@redhat.com> From: Alex Deucher <alexdeucher@gmail.com> Link: https://patchwork.freedesktop.org/patch/msgid/20191120235130.23755-1-alexander.deucher@amd.com
This commit is contained in:
commit
f824c1b35a
@ -511,7 +511,7 @@ uint32_t amdgpu_display_supported_domains(struct amdgpu_device *adev,
|
|||||||
* Also, don't allow GTT domain if the BO doens't have USWC falg set.
|
* Also, don't allow GTT domain if the BO doens't have USWC falg set.
|
||||||
*/
|
*/
|
||||||
if (adev->asic_type >= CHIP_CARRIZO &&
|
if (adev->asic_type >= CHIP_CARRIZO &&
|
||||||
adev->asic_type <= CHIP_RAVEN &&
|
adev->asic_type < CHIP_RAVEN &&
|
||||||
(adev->flags & AMD_IS_APU) &&
|
(adev->flags & AMD_IS_APU) &&
|
||||||
(bo_flags & AMDGPU_GEM_CREATE_CPU_GTT_USWC) &&
|
(bo_flags & AMDGPU_GEM_CREATE_CPU_GTT_USWC) &&
|
||||||
amdgpu_bo_support_uswc(bo_flags) &&
|
amdgpu_bo_support_uswc(bo_flags) &&
|
||||||
|
@ -1013,10 +1013,10 @@ static const struct pci_device_id pciidlist[] = {
|
|||||||
{0x1002, 0x731B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI10},
|
{0x1002, 0x731B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI10},
|
||||||
{0x1002, 0x731F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI10},
|
{0x1002, 0x731F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI10},
|
||||||
/* Navi14 */
|
/* Navi14 */
|
||||||
{0x1002, 0x7340, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI14|AMD_EXP_HW_SUPPORT},
|
{0x1002, 0x7340, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI14},
|
||||||
{0x1002, 0x7341, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI14|AMD_EXP_HW_SUPPORT},
|
{0x1002, 0x7341, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI14},
|
||||||
{0x1002, 0x7347, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI14|AMD_EXP_HW_SUPPORT},
|
{0x1002, 0x7347, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI14},
|
||||||
{0x1002, 0x734F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI14|AMD_EXP_HW_SUPPORT},
|
{0x1002, 0x734F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI14},
|
||||||
|
|
||||||
/* Renoir */
|
/* Renoir */
|
||||||
{0x1002, 0x1636, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RENOIR|AMD_IS_APU|AMD_EXP_HW_SUPPORT},
|
{0x1002, 0x1636, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RENOIR|AMD_IS_APU|AMD_EXP_HW_SUPPORT},
|
||||||
|
@ -649,15 +649,19 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
alloc_size = info->read_mmr_reg.count * sizeof(*regs);
|
alloc_size = info->read_mmr_reg.count * sizeof(*regs);
|
||||||
|
|
||||||
for (i = 0; i < info->read_mmr_reg.count; i++)
|
amdgpu_gfx_off_ctrl(adev, false);
|
||||||
|
for (i = 0; i < info->read_mmr_reg.count; i++) {
|
||||||
if (amdgpu_asic_read_register(adev, se_num, sh_num,
|
if (amdgpu_asic_read_register(adev, se_num, sh_num,
|
||||||
info->read_mmr_reg.dword_offset + i,
|
info->read_mmr_reg.dword_offset + i,
|
||||||
®s[i])) {
|
®s[i])) {
|
||||||
DRM_DEBUG_KMS("unallowed offset %#x\n",
|
DRM_DEBUG_KMS("unallowed offset %#x\n",
|
||||||
info->read_mmr_reg.dword_offset + i);
|
info->read_mmr_reg.dword_offset + i);
|
||||||
kfree(regs);
|
kfree(regs);
|
||||||
|
amdgpu_gfx_off_ctrl(adev, true);
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
amdgpu_gfx_off_ctrl(adev, true);
|
||||||
n = copy_to_user(out, regs, min(size, alloc_size));
|
n = copy_to_user(out, regs, min(size, alloc_size));
|
||||||
kfree(regs);
|
kfree(regs);
|
||||||
return n ? -EFAULT : 0;
|
return n ? -EFAULT : 0;
|
||||||
|
@ -1038,8 +1038,13 @@ static void gfx_v9_0_check_if_need_gfxoff(struct amdgpu_device *adev)
|
|||||||
case CHIP_VEGA20:
|
case CHIP_VEGA20:
|
||||||
break;
|
break;
|
||||||
case CHIP_RAVEN:
|
case CHIP_RAVEN:
|
||||||
if (!(adev->rev_id >= 0x8 || adev->pdev->device == 0x15d8)
|
/* Disable GFXOFF on original raven. There are combinations
|
||||||
&&((adev->gfx.rlc_fw_version != 106 &&
|
* of sbios and platforms that are not stable.
|
||||||
|
*/
|
||||||
|
if (!(adev->rev_id >= 0x8 || adev->pdev->device == 0x15d8))
|
||||||
|
adev->pm.pp_feature &= ~PP_GFXOFF_MASK;
|
||||||
|
else if (!(adev->rev_id >= 0x8 || adev->pdev->device == 0x15d8)
|
||||||
|
&&((adev->gfx.rlc_fw_version != 106 &&
|
||||||
adev->gfx.rlc_fw_version < 531) ||
|
adev->gfx.rlc_fw_version < 531) ||
|
||||||
(adev->gfx.rlc_fw_version == 53815) ||
|
(adev->gfx.rlc_fw_version == 53815) ||
|
||||||
(adev->gfx.rlc_feature_version < 1) ||
|
(adev->gfx.rlc_feature_version < 1) ||
|
||||||
|
@ -688,7 +688,7 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)
|
|||||||
*/
|
*/
|
||||||
if (adev->flags & AMD_IS_APU &&
|
if (adev->flags & AMD_IS_APU &&
|
||||||
adev->asic_type >= CHIP_CARRIZO &&
|
adev->asic_type >= CHIP_CARRIZO &&
|
||||||
adev->asic_type <= CHIP_RAVEN)
|
adev->asic_type < CHIP_RAVEN)
|
||||||
init_data.flags.gpu_vm_support = true;
|
init_data.flags.gpu_vm_support = true;
|
||||||
|
|
||||||
if (amdgpu_dc_feature_mask & DC_FBC_MASK)
|
if (amdgpu_dc_feature_mask & DC_FBC_MASK)
|
||||||
|
@ -3478,18 +3478,31 @@ static int smu7_get_pp_table_entry(struct pp_hwmgr *hwmgr,
|
|||||||
|
|
||||||
static int smu7_get_gpu_power(struct pp_hwmgr *hwmgr, u32 *query)
|
static int smu7_get_gpu_power(struct pp_hwmgr *hwmgr, u32 *query)
|
||||||
{
|
{
|
||||||
|
struct amdgpu_device *adev = hwmgr->adev;
|
||||||
int i;
|
int i;
|
||||||
u32 tmp = 0;
|
u32 tmp = 0;
|
||||||
|
|
||||||
if (!query)
|
if (!query)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
smum_send_msg_to_smc_with_parameter(hwmgr, PPSMC_MSG_GetCurrPkgPwr, 0);
|
/*
|
||||||
tmp = cgs_read_register(hwmgr->device, mmSMC_MSG_ARG_0);
|
* PPSMC_MSG_GetCurrPkgPwr is not supported on:
|
||||||
*query = tmp;
|
* - Hawaii
|
||||||
|
* - Bonaire
|
||||||
|
* - Fiji
|
||||||
|
* - Tonga
|
||||||
|
*/
|
||||||
|
if ((adev->asic_type != CHIP_HAWAII) &&
|
||||||
|
(adev->asic_type != CHIP_BONAIRE) &&
|
||||||
|
(adev->asic_type != CHIP_FIJI) &&
|
||||||
|
(adev->asic_type != CHIP_TONGA)) {
|
||||||
|
smum_send_msg_to_smc_with_parameter(hwmgr, PPSMC_MSG_GetCurrPkgPwr, 0);
|
||||||
|
tmp = cgs_read_register(hwmgr->device, mmSMC_MSG_ARG_0);
|
||||||
|
*query = tmp;
|
||||||
|
|
||||||
if (tmp != 0)
|
if (tmp != 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
smum_send_msg_to_smc(hwmgr, PPSMC_MSG_PmStatusLogStart);
|
smum_send_msg_to_smc(hwmgr, PPSMC_MSG_PmStatusLogStart);
|
||||||
cgs_write_ind_register(hwmgr->device, CGS_IND_REG__SMC,
|
cgs_write_ind_register(hwmgr->device, CGS_IND_REG__SMC,
|
||||||
|
@ -759,6 +759,12 @@ static int navi10_force_clk_levels(struct smu_context *smu,
|
|||||||
case SMU_UCLK:
|
case SMU_UCLK:
|
||||||
case SMU_DCEFCLK:
|
case SMU_DCEFCLK:
|
||||||
case SMU_FCLK:
|
case SMU_FCLK:
|
||||||
|
/* There is only 2 levels for fine grained DPM */
|
||||||
|
if (navi10_is_support_fine_grained_dpm(smu, clk_type)) {
|
||||||
|
soft_max_level = (soft_max_level >= 1 ? 1 : 0);
|
||||||
|
soft_min_level = (soft_min_level >= 1 ? 1 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
ret = smu_get_dpm_freq_by_index(smu, clk_type, soft_min_level, &min_freq);
|
ret = smu_get_dpm_freq_by_index(smu, clk_type, soft_min_level, &min_freq);
|
||||||
if (ret)
|
if (ret)
|
||||||
return size;
|
return size;
|
||||||
|
Loading…
Reference in New Issue
Block a user