[PATCH v2 2/2] drm/mgag200: Add an option to disable Write-Combine

Jocelyn Falempe jfalempe at redhat.com
Tue May 21 07:44:14 UTC 2024



On 17/05/2024 17:16, Thomas Zimmermann wrote:
> Hi
> 
> Am 17.05.24 um 17:09 schrieb Jocelyn Falempe:
>> Unfortunately, the G200 ioburst workaround doesn't work on some
>> servers like Dell poweredge XR11, XR5610, or HPE XL260. In this case
>> completely disabling WC is the only option to achieve low-latency.
>> So this adds a new Kconfig option to disable WC mapping of the G200.
>>
>> Signed-off-by: Jocelyn Falempe <jfalempe at redhat.com>
> 
> Reviewed-by: Thomas Zimmermann <tzimmermann at suse.de>
> 
> Thanks a lot for the fix.

Thanks for the review, I just merged it to drm-misc-next.

> 
> Best regards
> Thomas
> 
>> ---
>>   drivers/gpu/drm/mgag200/Kconfig       | 10 ++++++++++
>>   drivers/gpu/drm/mgag200/mgag200_drv.c |  6 ++++++
>>   2 files changed, 16 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/mgag200/Kconfig 
>> b/drivers/gpu/drm/mgag200/Kconfig
>> index b28c5e4828f47..3096944a8f0ab 100644
>> --- a/drivers/gpu/drm/mgag200/Kconfig
>> +++ b/drivers/gpu/drm/mgag200/Kconfig
>> @@ -11,3 +11,13 @@ config DRM_MGAG200
>>        MGA G200 desktop chips and the server variants. It requires 0.3.0
>>        of the modesetting userspace driver, and a version of mga driver
>>        that will fail on KMS enabled devices.
>> +
>> +config DRM_MGAG200_DISABLE_WRITECOMBINE
>> +    bool "Disable Write Combine mapping of VRAM"
>> +    depends on DRM_MGAG200 && PREEMPT_RT
>> +    help
>> +      The VRAM of the G200 is mapped with Write-Combine to improve
>> +      performances. This can interfere with real-time tasks; even if 
>> they
>> +      are running on other CPU cores than the graphics output.
>> +      Enable this option only if you run realtime tasks on a server 
>> with a
>> +      Matrox G200.
>> \ No newline at end of file
>> diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.c 
>> b/drivers/gpu/drm/mgag200/mgag200_drv.c
>> index 3883f25ca4d8b..62080cf0f2da4 100644
>> --- a/drivers/gpu/drm/mgag200/mgag200_drv.c
>> +++ b/drivers/gpu/drm/mgag200/mgag200_drv.c
>> @@ -146,12 +146,18 @@ int mgag200_device_preinit(struct mga_device *mdev)
>>       }
>>       mdev->vram_res = res;
>> +#if defined(CONFIG_DRM_MGAG200_DISABLE_WRITECOMBINE)
>> +    mdev->vram = devm_ioremap(dev->dev, res->start, resource_size(res));
>> +    if (!mdev->vram)
>> +        return -ENOMEM;
>> +#else
>>       mdev->vram = devm_ioremap_wc(dev->dev, res->start, 
>> resource_size(res));
>>       if (!mdev->vram)
>>           return -ENOMEM;
>>       /* Don't fail on errors, but performance might be reduced. */
>>       devm_arch_phys_wc_add(dev->dev, res->start, resource_size(res));
>> +#endif
>>       return 0;
>>   }
> 



More information about the dri-devel mailing list