[PATCH] drm/amdgpu: set DRIVER_ATOMIC flag early

Harry Wentland harry.wentland at amd.com
Wed Jan 24 14:53:04 UTC 2018


On 2018-01-23 05:10 PM, Alex Deucher wrote:
> The atomic debugfs stuff gets created in drm_dev_alloc()
> but this gets called before we've enumerated all of our
> IPs, so move the DRIVER_ATOMIC flag setting to fix that.
> 
> Since DRIVER_ATOMIC is a driver flag it's currently global
> to the driver so setting it affects all GPUs driven by the
> driver.  Unfortunately, not all GPUs support atomic.  Warn
> the user if that is the case.
> 
> This is the same as our current behavior, but at least the
> atomic debugfs stuff gets created now.
> 
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c           | 12 ++++++++++++
>  drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c |  2 --
>  2 files changed, 12 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> index d1a695864793..367f331b4a54 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> @@ -578,6 +578,11 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
>  	struct drm_device *dev;
>  	unsigned long flags = ent->driver_data;
>  	int ret, retry = 0;
> +	bool supports_atomic = false;
> +
> +	if (!amdgpu_virtual_display &&
> +	    amdgpu_device_asic_has_dc_support(flags & AMD_ASIC_MASK))
> +		supports_atomic = true;
>  
>  	if ((flags & AMD_EXP_HW_SUPPORT) && !amdgpu_exp_hw_support) {
>  		DRM_INFO("This hardware requires experimental hardware support.\n"
> @@ -598,6 +603,13 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
>  	if (ret)
>  		return ret;
>  
> +	/* warn the user if they mix atomic and non-atomic capable GPUs */
> +	if ((kms_driver.driver_features & DRIVER_ATOMIC) && !supports_atomic)
> +		DRM_ERROR("Mixing atomic and non-atomic capable GPUs!\n");

Would it make sense to make kms_driver non-static to deal with the DRIVER_ATOMIC flag correctly for multi-GPU?

Harry

> +	/* support atomic early so the atomic debugfs stuff gets created */
> +	if (supports_atomic)
> +		kms_driver.driver_features |= DRIVER_ATOMIC;
> +
>  	dev = drm_dev_alloc(&kms_driver, &pdev->dev);
>  	if (IS_ERR(dev))
>  		return PTR_ERR(dev);
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> index 63df977fc426..597302bb5f4d 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -1625,8 +1625,6 @@ static int dm_early_init(void *handle)
>  {
>  	struct amdgpu_device *adev = (struct amdgpu_device *)handle;
>  
> -	adev->ddev->driver->driver_features |= DRIVER_ATOMIC;
> -
>  	switch (adev->asic_type) {
>  	case CHIP_BONAIRE:
>  	case CHIP_HAWAII:
> 


More information about the amd-gfx mailing list