[PATCH] drm/amdgpu: set DRIVER_ATOMIC flag early
Michel Dänzer
michel at daenzer.net
Wed Jan 24 08:33:04 UTC 2018
On 2018-01-23 11: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 &&
Virtual display can be enabled only for specific GPUs, so this could
result in supports_atomic == false when it should be true.
> + 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");
This won't catch cases where the first GPU probed has supports_atomic ==
false, then a later one has supports_atomic == true.
All in all this seems a bit messy, it might be worth looking into
converting DRIVER_ATOMIC to a per-device flag instead.
--
Earthling Michel Dänzer | http://www.amd.com
Libre software enthusiast | Mesa and X developer
More information about the amd-gfx
mailing list