diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c | 39 | 
1 files changed, 34 insertions, 5 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c index 3993e6134914..1bbd56029a4f 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c @@ -305,8 +305,13 @@ static int amdgpu_discovery_init(struct amdgpu_device *adev)  		goto out;  	} -	if (!amdgpu_discovery_verify_binary_signature(adev->mman.discovery_bin)) { -		dev_warn(adev->dev, "get invalid ip discovery binary signature from vram\n"); +	if (!amdgpu_discovery_verify_binary_signature(adev->mman.discovery_bin) || amdgpu_discovery == 2) { +		/* ignore the discovery binary from vram if discovery=2 in kernel module parameter */ +		if (amdgpu_discovery == 2) +			dev_info(adev->dev,"force read ip discovery binary from file"); +		else +			dev_warn(adev->dev, "get invalid ip discovery binary signature from vram\n"); +  		/* retry read ip discovery binary from file */  		r = amdgpu_discovery_read_binary_from_file(adev, adev->mman.discovery_bin);  		if (r) { @@ -1507,6 +1512,7 @@ static int amdgpu_discovery_set_common_ip_blocks(struct amdgpu_device *adev)  	case IP_VERSION(11, 0, 1):  	case IP_VERSION(11, 0, 2):  	case IP_VERSION(11, 0, 3): +	case IP_VERSION(11, 0, 4):  		amdgpu_device_ip_block_add(adev, &soc21_common_ip_block);  		break;  	default: @@ -1551,6 +1557,7 @@ static int amdgpu_discovery_set_gmc_ip_blocks(struct amdgpu_device *adev)  	case IP_VERSION(11, 0, 1):  	case IP_VERSION(11, 0, 2):  	case IP_VERSION(11, 0, 3): +	case IP_VERSION(11, 0, 4):  		amdgpu_device_ip_block_add(adev, &gmc_v11_0_ip_block);  		break;  	default: @@ -1636,6 +1643,7 @@ static int amdgpu_discovery_set_psp_ip_blocks(struct amdgpu_device *adev)  	case IP_VERSION(13, 0, 7):  	case IP_VERSION(13, 0, 8):  	case IP_VERSION(13, 0, 10): +	case IP_VERSION(13, 0, 11):  		amdgpu_device_ip_block_add(adev, &psp_v13_0_ip_block);  		break;  	case IP_VERSION(13, 0, 4): @@ -1686,6 +1694,7 @@ static int amdgpu_discovery_set_smu_ip_blocks(struct amdgpu_device *adev)  	case IP_VERSION(13, 0, 7):  	case IP_VERSION(13, 0, 8):  	case IP_VERSION(13, 0, 10): +	case IP_VERSION(13, 0, 11):  		amdgpu_device_ip_block_add(adev, &smu_v13_0_ip_block);  		break;  	default: @@ -1697,9 +1706,17 @@ static int amdgpu_discovery_set_smu_ip_blocks(struct amdgpu_device *adev)  	return 0;  } +#if defined(CONFIG_DRM_AMD_DC) +static void amdgpu_discovery_set_sriov_display(struct amdgpu_device *adev) +{ +	amdgpu_device_set_sriov_virtual_display(adev); +	amdgpu_device_ip_block_add(adev, &amdgpu_vkms_ip_block); +} +#endif +  static int amdgpu_discovery_set_display_ip_blocks(struct amdgpu_device *adev)  { -	if (adev->enable_virtual_display || amdgpu_sriov_vf(adev)) { +	if (adev->enable_virtual_display) {  		amdgpu_device_ip_block_add(adev, &amdgpu_vkms_ip_block);  		return 0;  	} @@ -1727,7 +1744,10 @@ static int amdgpu_discovery_set_display_ip_blocks(struct amdgpu_device *adev)  		case IP_VERSION(3, 1, 6):  		case IP_VERSION(3, 2, 0):  		case IP_VERSION(3, 2, 1): -			amdgpu_device_ip_block_add(adev, &dm_ip_block); +			if (amdgpu_sriov_vf(adev)) +				amdgpu_discovery_set_sriov_display(adev); +			else +				amdgpu_device_ip_block_add(adev, &dm_ip_block);  			break;  		default:  			dev_err(adev->dev, @@ -1740,7 +1760,10 @@ static int amdgpu_discovery_set_display_ip_blocks(struct amdgpu_device *adev)  		case IP_VERSION(12, 0, 0):  		case IP_VERSION(12, 0, 1):  		case IP_VERSION(12, 1, 0): -			amdgpu_device_ip_block_add(adev, &dm_ip_block); +			if (amdgpu_sriov_vf(adev)) +				amdgpu_discovery_set_sriov_display(adev); +			else +				amdgpu_device_ip_block_add(adev, &dm_ip_block);  			break;  		default:  			dev_err(adev->dev, @@ -1785,6 +1808,7 @@ static int amdgpu_discovery_set_gc_ip_blocks(struct amdgpu_device *adev)  	case IP_VERSION(11, 0, 1):  	case IP_VERSION(11, 0, 2):  	case IP_VERSION(11, 0, 3): +	case IP_VERSION(11, 0, 4):  		amdgpu_device_ip_block_add(adev, &gfx_v11_0_ip_block);  		break;  	default: @@ -1948,6 +1972,7 @@ static int amdgpu_discovery_set_mes_ip_blocks(struct amdgpu_device *adev)  	case IP_VERSION(11, 0, 1):  	case IP_VERSION(11, 0, 2):  	case IP_VERSION(11, 0, 3): +	case IP_VERSION(11, 0, 4):  		amdgpu_device_ip_block_add(adev, &mes_v11_0_ip_block);  		adev->enable_mes = true;  		adev->enable_mes_kiq = true; @@ -2161,6 +2186,7 @@ int amdgpu_discovery_set_ip_blocks(struct amdgpu_device *adev)  		break;  	case IP_VERSION(10, 3, 1):  		adev->family = AMDGPU_FAMILY_VGH; +		adev->apu_flags |= AMD_APU_IS_VANGOGH;  		break;  	case IP_VERSION(10, 3, 3):  		adev->family = AMDGPU_FAMILY_YC; @@ -2177,6 +2203,7 @@ int amdgpu_discovery_set_ip_blocks(struct amdgpu_device *adev)  		adev->family = AMDGPU_FAMILY_GC_11_0_0;  		break;  	case IP_VERSION(11, 0, 1): +	case IP_VERSION(11, 0, 4):  		adev->family = AMDGPU_FAMILY_GC_11_0_1;  		break;  	default: @@ -2194,6 +2221,7 @@ int amdgpu_discovery_set_ip_blocks(struct amdgpu_device *adev)  	case IP_VERSION(10, 3, 6):  	case IP_VERSION(10, 3, 7):  	case IP_VERSION(11, 0, 1): +	case IP_VERSION(11, 0, 4):  		adev->flags |= AMD_IS_APU;  		break;  	default: @@ -2250,6 +2278,7 @@ int amdgpu_discovery_set_ip_blocks(struct amdgpu_device *adev)  		adev->nbio.hdp_flush_reg = &nbio_v4_3_hdp_flush_reg;  		break;  	case IP_VERSION(7, 7, 0): +	case IP_VERSION(7, 7, 1):  		adev->nbio.funcs = &nbio_v7_7_funcs;  		adev->nbio.hdp_flush_reg = &nbio_v7_7_hdp_flush_reg;  		break; |