[PATCH] drm/radeon: Disable writeback by default on ppc

Alex Deucher alexdeucher at gmail.com
Mon Jun 17 08:04:26 PDT 2013


On Mon, Jun 17, 2013 at 10:06 AM, Adam Jackson <ajax at redhat.com> wrote:
> At least on an IBM Power 720, this check passes, but several piglit
> tests will reliably trigger GPU resets due to the ring buffer pointers
> not being updated.  There's probably a better way to limit this to just
> affected machines though.

What radeon chips are you seeing this on?  wb is more or less required
on r6xx and newer and I'm not sure those generations will even work
properly without writeback enabled these days.  We force it to always
be enabled on APUs and NI and newer asics.  With KMS, wb encompasses
more than just rptr writeback; it covers pretty much everything
involving the GPU writing any status information to memory.

Alex

>
> Signed-off-by: Adam Jackson <ajax at redhat.com>
> ---
>  drivers/gpu/drm/radeon/r600_cp.c       | 7 +++++++
>  drivers/gpu/drm/radeon/radeon_cp.c     | 7 +++++++
>  drivers/gpu/drm/radeon/radeon_device.c | 4 ++--
>  drivers/gpu/drm/radeon/radeon_drv.c    | 2 +-
>  4 files changed, 17 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/r600_cp.c b/drivers/gpu/drm/radeon/r600_cp.c
> index 1c51c08..ef28532 100644
> --- a/drivers/gpu/drm/radeon/r600_cp.c
> +++ b/drivers/gpu/drm/radeon/r600_cp.c
> @@ -552,6 +552,13 @@ static void r600_test_writeback(drm_radeon_private_t *dev_priv)
>                 dev_priv->writeback_works = 0;
>                 DRM_INFO("writeback test failed\n");
>         }
> +#if defined(__ppc__) || defined(__ppc64__)
> +       /* the test might succeed on ppc, but it's usually not reliable */
> +       if (radeon_no_wb == -1) {
> +               radeon_no_wb = 1;
> +               DRM_INFO("not trusting writeback test due to arch quirk\n");
> +       }
> +#endif
>         if (radeon_no_wb == 1) {
>                 dev_priv->writeback_works = 0;
>                 DRM_INFO("writeback forced off\n");
> diff --git a/drivers/gpu/drm/radeon/radeon_cp.c b/drivers/gpu/drm/radeon/radeon_cp.c
> index efc4f64..a967b33 100644
> --- a/drivers/gpu/drm/radeon/radeon_cp.c
> +++ b/drivers/gpu/drm/radeon/radeon_cp.c
> @@ -892,6 +892,13 @@ static void radeon_test_writeback(drm_radeon_private_t * dev_priv)
>                 dev_priv->writeback_works = 0;
>                 DRM_INFO("writeback test failed\n");
>         }
> +#if defined(__ppc__) || defined(__ppc64__)
> +       /* the test might succeed on ppc, but it's usually not reliable */
> +       if (radeon_no_wb == -1) {
> +               radeon_no_wb = 1;
> +               DRM_INFO("not trusting writeback test due to arch quirk\n");
> +       }
> +#endif
>         if (radeon_no_wb == 1) {
>                 dev_priv->writeback_works = 0;
>                 DRM_INFO("writeback forced off\n");
> diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
> index 1899738..524046e 100644
> --- a/drivers/gpu/drm/radeon/radeon_device.c
> +++ b/drivers/gpu/drm/radeon/radeon_device.c
> @@ -322,8 +322,8 @@ int radeon_wb_init(struct radeon_device *rdev)
>         /* disable event_write fences */
>         rdev->wb.use_event = false;
>         /* disabled via module param */
> -       if (radeon_no_wb == 1) {
> -               rdev->wb.enabled = false;
> +       if (radeon_no_wb != -1) {
> +               rdev->wb.enabled = !!radeon_no_wb;
>         } else {
>                 if (rdev->flags & RADEON_IS_AGP) {
>                         /* often unreliable on AGP */
> diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
> index 094e7e5..04809d4 100644
> --- a/drivers/gpu/drm/radeon/radeon_drv.c
> +++ b/drivers/gpu/drm/radeon/radeon_drv.c
> @@ -146,7 +146,7 @@ static inline void radeon_register_atpx_handler(void) {}
>  static inline void radeon_unregister_atpx_handler(void) {}
>  #endif
>
> -int radeon_no_wb;
> +int radeon_no_wb = -1;
>  int radeon_modeset = -1;
>  int radeon_dynclks = -1;
>  int radeon_r4xx_atom = 0;
> --
> 1.8.2.1
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel


More information about the dri-devel mailing list