diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 8 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 6 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 38 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 9 | 
5 files changed, 33 insertions, 30 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c index 1d4aaa9580f4..82efc1e22e61 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c @@ -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.  	 */  	if (adev->asic_type >= CHIP_CARRIZO && -	    adev->asic_type <= CHIP_RAVEN && +	    adev->asic_type < CHIP_RAVEN &&  	    (adev->flags & AMD_IS_APU) &&  	    (bo_flags & AMDGPU_GEM_CREATE_CPU_GTT_USWC) &&  	    amdgpu_bo_support_uswc(bo_flags) && diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c index e1c15721611a..b19157b19fa0 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c @@ -1013,10 +1013,10 @@ static const struct pci_device_id pciidlist[] = {  	{0x1002, 0x731B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI10},  	{0x1002, 0x731F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI10},  	/* Navi14 */ -	{0x1002, 0x7340, 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|AMD_EXP_HW_SUPPORT}, -	{0x1002, 0x7347, 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|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}, +	{0x1002, 0x7347, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI14}, +	{0x1002, 0x734F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI14},  	/* Renoir */  	{0x1002, 0x1636, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RENOIR|AMD_IS_APU|AMD_EXP_HW_SUPPORT}, diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c index a042ef471fbd..a73206784cba 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c @@ -649,15 +649,19 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file  			return -ENOMEM;  		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,  						      info->read_mmr_reg.dword_offset + i,  						      ®s[i])) {  				DRM_DEBUG_KMS("unallowed offset %#x\n",  					      info->read_mmr_reg.dword_offset + i);  				kfree(regs); +				amdgpu_gfx_off_ctrl(adev, true);  				return -EFAULT;  			} +		} +		amdgpu_gfx_off_ctrl(adev, true);  		n = copy_to_user(out, regs, min(size, alloc_size));  		kfree(regs);  		return n ? -EFAULT : 0; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c index 4d71537a960d..a46090071034 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c @@ -950,21 +950,7 @@ static void psp_print_fw_hdr(struct psp_context *psp,  			     struct amdgpu_firmware_info *ucode)  {  	struct amdgpu_device *adev = psp->adev; -	const struct sdma_firmware_header_v1_0 *sdma_hdr = -		(const struct sdma_firmware_header_v1_0 *) -		adev->sdma.instance[ucode->ucode_id - AMDGPU_UCODE_ID_SDMA0].fw->data; -	const struct gfx_firmware_header_v1_0 *ce_hdr = -		(const struct gfx_firmware_header_v1_0 *)adev->gfx.ce_fw->data; -	const struct gfx_firmware_header_v1_0 *pfp_hdr = -		(const struct gfx_firmware_header_v1_0 *)adev->gfx.pfp_fw->data; -	const struct gfx_firmware_header_v1_0 *me_hdr = -		(const struct gfx_firmware_header_v1_0 *)adev->gfx.me_fw->data; -	const struct gfx_firmware_header_v1_0 *mec_hdr = -		(const struct gfx_firmware_header_v1_0 *)adev->gfx.mec_fw->data; -	const struct rlc_firmware_header_v2_0 *rlc_hdr = -		(const struct rlc_firmware_header_v2_0 *)adev->gfx.rlc_fw->data; -	const struct smc_firmware_header_v1_0 *smc_hdr = -		(const struct smc_firmware_header_v1_0 *)adev->pm.fw->data; +	struct common_firmware_header *hdr;  	switch (ucode->ucode_id) {  	case AMDGPU_UCODE_ID_SDMA0: @@ -975,25 +961,33 @@ static void psp_print_fw_hdr(struct psp_context *psp,  	case AMDGPU_UCODE_ID_SDMA5:  	case AMDGPU_UCODE_ID_SDMA6:  	case AMDGPU_UCODE_ID_SDMA7: -		amdgpu_ucode_print_sdma_hdr(&sdma_hdr->header); +		hdr = (struct common_firmware_header *) +			adev->sdma.instance[ucode->ucode_id - AMDGPU_UCODE_ID_SDMA0].fw->data; +		amdgpu_ucode_print_sdma_hdr(hdr);  		break;  	case AMDGPU_UCODE_ID_CP_CE: -		amdgpu_ucode_print_gfx_hdr(&ce_hdr->header); +		hdr = (struct common_firmware_header *)adev->gfx.ce_fw->data; +		amdgpu_ucode_print_gfx_hdr(hdr);  		break;  	case AMDGPU_UCODE_ID_CP_PFP: -		amdgpu_ucode_print_gfx_hdr(&pfp_hdr->header); +		hdr = (struct common_firmware_header *)adev->gfx.pfp_fw->data; +		amdgpu_ucode_print_gfx_hdr(hdr);  		break;  	case AMDGPU_UCODE_ID_CP_ME: -		amdgpu_ucode_print_gfx_hdr(&me_hdr->header); +		hdr = (struct common_firmware_header *)adev->gfx.me_fw->data; +		amdgpu_ucode_print_gfx_hdr(hdr);  		break;  	case AMDGPU_UCODE_ID_CP_MEC1: -		amdgpu_ucode_print_gfx_hdr(&mec_hdr->header); +		hdr = (struct common_firmware_header *)adev->gfx.mec_fw->data; +		amdgpu_ucode_print_gfx_hdr(hdr);  		break;  	case AMDGPU_UCODE_ID_RLC_G: -		amdgpu_ucode_print_rlc_hdr(&rlc_hdr->header); +		hdr = (struct common_firmware_header *)adev->gfx.rlc_fw->data; +		amdgpu_ucode_print_rlc_hdr(hdr);  		break;  	case AMDGPU_UCODE_ID_SMC: -		amdgpu_ucode_print_smc_hdr(&smc_hdr->header); +		hdr = (struct common_firmware_header *)adev->pm.fw->data; +		amdgpu_ucode_print_smc_hdr(hdr);  		break;  	default:  		break; diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c index dfca83a2de47..97cf0b536873 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c @@ -1038,8 +1038,13 @@ static void gfx_v9_0_check_if_need_gfxoff(struct amdgpu_device *adev)  	case CHIP_VEGA20:  		break;  	case CHIP_RAVEN: -		if (!(adev->rev_id >= 0x8 || adev->pdev->device == 0x15d8) -			&&((adev->gfx.rlc_fw_version != 106 && +		/* Disable GFXOFF on original raven.  There are combinations +		 * 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 == 53815) ||  			    (adev->gfx.rlc_feature_version < 1) || | 
