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: >