[PATCH] drm/amdgpu: set DRIVER_ATOMIC flag early

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Jan 24, 2018 at 9:53 AM, Harry Wentland <harry.wentland at amd.com> wrote:
> 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?

We'd need two driver structs with the only difference being the ATOMIC
bit.  Ideally this flag would be per device rather than per driver.

There are two issues here.

1. We need to set the ATOMIC bit early enough that the atomic debugfs
stuff gets created.  We already set the flag when dc initializes
anyway so there is no change in behavior here other than that the
debugfs stuff gets created.  So it seems like a net benefit to at
least set the flag early if dc is enabled.

2. Change the flag to be per device.  This is a lot more involved
since we need to switch all the drivers.  That part is not too bad
since most are either atomic or not.  Where is gets tricky with amdgpu
(and possibly other drivers) is that we would need to fix up the
ordering of debugfs init and the drm load callbacks in
drm_dev_register() because the debugfs atomic files are added before
the driver load callback is called.  I'm not sure how much other
drivers depend on that current ordering.

Alex


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


[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux