[PATCH] drm/amd: Fail initialization earlier when DC is disabled

Mario Limonciello mario.limonciello at amd.com
Wed Mar 5 21:44:49 UTC 2025


On 3/5/2025 15:37, Mario Limonciello wrote:
> Modern APU and dGPU require DC support to be able to light up the
> display.  If DC support has been disabled either by kernel config
> or by kernel command line fail init early so that the system won't
> freeze with a lack of display.
> 
> Signed-off-by: Mario Limonciello <mario.limonciello at amd.com>
> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c | 24 +++++++++++++++----
>   1 file changed, 19 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
> index a4258127083d..c4e1505dcaac 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
> @@ -2139,10 +2139,6 @@ static int amdgpu_discovery_set_display_ip_blocks(struct amdgpu_device *adev)
>   		return 0;
>   	}
>   
> -	if (!amdgpu_device_has_dc_support(adev))
> -		return 0;
> -
> -#if defined(CONFIG_DRM_AMD_DC)
>   	if (amdgpu_ip_version(adev, DCE_HWIP, 0)) {
>   		switch (amdgpu_ip_version(adev, DCE_HWIP, 0)) {
>   		case IP_VERSION(1, 0, 0):
> @@ -2166,15 +2162,24 @@ static int amdgpu_discovery_set_display_ip_blocks(struct amdgpu_device *adev)
>   		case IP_VERSION(3, 5, 1):
>   		case IP_VERSION(3, 6, 0):
>   		case IP_VERSION(4, 1, 0):
> +			if (!amdgpu_device_has_dc_support(adev)) {
> +				dev_err(adev->dev,
> +					"DC support is required for dm ip block(DCE_HWIP:0x%x)\n",
> +					amdgpu_ip_version(adev, DCE_HWIP, 0));
> +				return -EINVAL;
> +			}
> +
>   			/* TODO: Fix IP version. DC code expects version 4.0.1 */
>   			if (adev->ip_versions[DCE_HWIP][0] == IP_VERSION(4, 1, 0))
>   				adev->ip_versions[DCE_HWIP][0] = IP_VERSION(4, 0, 1);
>   
> +#if defined(CONFIG_DRM_AMD_DC)
>   			if (amdgpu_sriov_vf(adev))
>   				amdgpu_discovery_set_sriov_display(adev);
>   			else
>   				amdgpu_device_ip_block_add(adev, &dm_ip_block);
>   			break;
> +#endif
>   		default:

Looking closer at this failure path I *think* this patch will cause 
issues on GPU without DC support.

In the 'default' case now I think it should do something like this:

if (amdgpu_device_has_dc_support(adev))
	//existing error flow
else
	return 0;

Agree?

>   			dev_err(adev->dev,
>   				"Failed to add dm ip block(DCE_HWIP:0x%x)\n",
> @@ -2186,11 +2191,21 @@ 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):
> +
> +		if (!amdgpu_device_has_dc_support(adev)) {
> +			dev_err(adev->dev,
> +				"DC support is required for dm ip block(DCI_HWIP:0x%x)\n",
> +				amdgpu_ip_version(adev, DCI_HWIP, 0));
> +			return -EINVAL;
> +		}
> +
> +#if defined(CONFIG_DRM_AMD_DC)
>   			if (amdgpu_sriov_vf(adev))
>   				amdgpu_discovery_set_sriov_display(adev);
>   			else
>   				amdgpu_device_ip_block_add(adev, &dm_ip_block);
>   			break;
> +#endif
>   		default:
>   			dev_err(adev->dev,
>   				"Failed to add dm ip block(DCI_HWIP:0x%x)\n",
> @@ -2198,7 +2213,6 @@ static int amdgpu_discovery_set_display_ip_blocks(struct amdgpu_device *adev)
>   			return -EINVAL;
>   		}
>   	}
> -#endif
>   	return 0;
>   }
>   



More information about the amd-gfx mailing list