diff mbox series

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

Message ID 20240517151050.624797-3-jfalempe@redhat.com (mailing list archive)
State New, archived
Headers show
Series drm/mgag200: Add an option to disable Write-Combine | expand

Commit Message

Jocelyn Falempe May 17, 2024, 3:09 p.m. UTC
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@redhat.com>
---
 drivers/gpu/drm/mgag200/Kconfig       | 10 ++++++++++
 drivers/gpu/drm/mgag200/mgag200_drv.c |  6 ++++++
 2 files changed, 16 insertions(+)

Comments

Thomas Zimmermann May 17, 2024, 3:16 p.m. UTC | #1
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@redhat.com>

Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>

Thanks a lot for the fix.

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;
>   }
Jocelyn Falempe May 21, 2024, 7:44 a.m. UTC | #2
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@redhat.com>
> 
> Reviewed-by: Thomas Zimmermann <tzimmermann@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;
>>   }
>
diff mbox series

Patch

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;
 }