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 |
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; > }
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 --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; }
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(+)