diff mbox

drm/radeon: fix display tiling setup on SI

Message ID 1392664905-1914-1-git-send-email-alexander.deucher@amd.com (mailing list archive)
State New, archived
Headers show

Commit Message

Alex Deucher Feb. 17, 2014, 7:21 p.m. UTC
Apply the same logic as CI to SI for setting up the
display tiling parameters.  The num banks may vary
per tiling index just like CI.

Bugs:
https://bugs.freedesktop.org/show_bug.cgi?id=71488
https://bugs.freedesktop.org/show_bug.cgi?id=73946
https://bugs.freedesktop.org/show_bug.cgi?id=74927

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
---
 drivers/gpu/drm/radeon/atombios_crtc.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

Comments

Marek Olšák Feb. 18, 2014, 10:04 a.m. UTC | #1
Are you sure the index to si.tile_mode_array is correct? I wrote it
for CI and I'm not sure if the index can be used for SI in this way too.

Marek

On Mon, Feb 17, 2014 at 8:21 PM, Alex Deucher <alexdeucher@gmail.com> wrote:
> Apply the same logic as CI to SI for setting up the
> display tiling parameters.  The num banks may vary
> per tiling index just like CI.
>
> Bugs:
> https://bugs.freedesktop.org/show_bug.cgi?id=71488
> https://bugs.freedesktop.org/show_bug.cgi?id=73946
> https://bugs.freedesktop.org/show_bug.cgi?id=74927
>
> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
> Cc: stable@vger.kernel.org
> ---
>  drivers/gpu/drm/radeon/atombios_crtc.c | 13 +++++++------
>  1 file changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
> index f0d409d..0d19f4f9 100644
> --- a/drivers/gpu/drm/radeon/atombios_crtc.c
> +++ b/drivers/gpu/drm/radeon/atombios_crtc.c
> @@ -1176,7 +1176,7 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
>                 evergreen_tiling_fields(tiling_flags, &bankw, &bankh, &mtaspect, &tile_split);
>
>                 /* Set NUM_BANKS. */
> -               if (rdev->family >= CHIP_BONAIRE) {
> +               if (rdev->family >= CHIP_TAHITI) {
>                         unsigned tileb, index, num_banks, tile_split_bytes;
>
>                         /* Calculate the macrotile mode index. */
> @@ -1194,13 +1194,14 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
>                                 return -EINVAL;
>                         }
>
> -                       num_banks = (rdev->config.cik.macrotile_mode_array[index] >> 6) & 0x3;
> +                       if (rdev->family >= CHIP_BONAIRE)
> +                               num_banks = (rdev->config.cik.macrotile_mode_array[index] >> 6) & 0x3;
> +                       else
> +                               num_banks = (rdev->config.si.tile_mode_array[index] >> 20) & 0x3;
>                         fb_format |= EVERGREEN_GRPH_NUM_BANKS(num_banks);
>                 } else {
> -                       /* SI and older. */
> -                       if (rdev->family >= CHIP_TAHITI)
> -                               tmp = rdev->config.si.tile_config;
> -                       else if (rdev->family >= CHIP_CAYMAN)
> +                       /* NI and older. */
> +                       if (rdev->family >= CHIP_CAYMAN)
>                                 tmp = rdev->config.cayman.tile_config;
>                         else
>                                 tmp = rdev->config.evergreen.tile_config;
> --
> 1.8.3.1
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
Alex Deucher Feb. 18, 2014, 2:12 p.m. UTC | #2
> -----Original Message-----

> From: Marek Olšák [mailto:maraeo@gmail.com]

> Sent: Tuesday, February 18, 2014 5:04 AM

> To: Alex Deucher

> Cc: dri-devel; Deucher, Alexander; stable@vger.kernel.org

> Subject: Re: [PATCH] drm/radeon: fix display tiling setup on SI

> 

> Are you sure the index to si.tile_mode_array is correct? I wrote it

> for CI and I'm not sure if the index can be used for SI in this way too.

> 


I'll double check.  I think some of the indices may be different on SI, but I don't think the display ones are.  The patch fixes tiling on the oland card I just got.

Alex

> Marek

> 

> On Mon, Feb 17, 2014 at 8:21 PM, Alex Deucher <alexdeucher@gmail.com>

> wrote:

> > Apply the same logic as CI to SI for setting up the

> > display tiling parameters.  The num banks may vary

> > per tiling index just like CI.

> >

> > Bugs:

> > https://bugs.freedesktop.org/show_bug.cgi?id=71488

> > https://bugs.freedesktop.org/show_bug.cgi?id=73946

> > https://bugs.freedesktop.org/show_bug.cgi?id=74927

> >

> > Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

> > Cc: stable@vger.kernel.org

> > ---

> >  drivers/gpu/drm/radeon/atombios_crtc.c | 13 +++++++------

> >  1 file changed, 7 insertions(+), 6 deletions(-)

> >

> > diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c

> b/drivers/gpu/drm/radeon/atombios_crtc.c

> > index f0d409d..0d19f4f9 100644

> > --- a/drivers/gpu/drm/radeon/atombios_crtc.c

> > +++ b/drivers/gpu/drm/radeon/atombios_crtc.c

> > @@ -1176,7 +1176,7 @@ static int dce4_crtc_do_set_base(struct drm_crtc

> *crtc,

> >                 evergreen_tiling_fields(tiling_flags, &bankw, &bankh, &mtaspect,

> &tile_split);

> >

> >                 /* Set NUM_BANKS. */

> > -               if (rdev->family >= CHIP_BONAIRE) {

> > +               if (rdev->family >= CHIP_TAHITI) {

> >                         unsigned tileb, index, num_banks, tile_split_bytes;

> >

> >                         /* Calculate the macrotile mode index. */

> > @@ -1194,13 +1194,14 @@ static int dce4_crtc_do_set_base(struct

> drm_crtc *crtc,

> >                                 return -EINVAL;

> >                         }

> >

> > -                       num_banks = (rdev->config.cik.macrotile_mode_array[index]

> >> 6) & 0x3;

> > +                       if (rdev->family >= CHIP_BONAIRE)

> > +                               num_banks = (rdev-

> >config.cik.macrotile_mode_array[index] >> 6) & 0x3;

> > +                       else

> > +                               num_banks = (rdev->config.si.tile_mode_array[index] >>

> 20) & 0x3;

> >                         fb_format |= EVERGREEN_GRPH_NUM_BANKS(num_banks);

> >                 } else {

> > -                       /* SI and older. */

> > -                       if (rdev->family >= CHIP_TAHITI)

> > -                               tmp = rdev->config.si.tile_config;

> > -                       else if (rdev->family >= CHIP_CAYMAN)

> > +                       /* NI and older. */

> > +                       if (rdev->family >= CHIP_CAYMAN)

> >                                 tmp = rdev->config.cayman.tile_config;

> >                         else

> >                                 tmp = rdev->config.evergreen.tile_config;

> > --

> > 1.8.3.1

> >

> > _______________________________________________

> > dri-devel mailing list

> > dri-devel@lists.freedesktop.org

> > http://lists.freedesktop.org/mailman/listinfo/dri-devel
diff mbox

Patch

diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
index f0d409d..0d19f4f9 100644
--- a/drivers/gpu/drm/radeon/atombios_crtc.c
+++ b/drivers/gpu/drm/radeon/atombios_crtc.c
@@ -1176,7 +1176,7 @@  static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
 		evergreen_tiling_fields(tiling_flags, &bankw, &bankh, &mtaspect, &tile_split);
 
 		/* Set NUM_BANKS. */
-		if (rdev->family >= CHIP_BONAIRE) {
+		if (rdev->family >= CHIP_TAHITI) {
 			unsigned tileb, index, num_banks, tile_split_bytes;
 
 			/* Calculate the macrotile mode index. */
@@ -1194,13 +1194,14 @@  static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
 				return -EINVAL;
 			}
 
-			num_banks = (rdev->config.cik.macrotile_mode_array[index] >> 6) & 0x3;
+			if (rdev->family >= CHIP_BONAIRE)
+				num_banks = (rdev->config.cik.macrotile_mode_array[index] >> 6) & 0x3;
+			else
+				num_banks = (rdev->config.si.tile_mode_array[index] >> 20) & 0x3;
 			fb_format |= EVERGREEN_GRPH_NUM_BANKS(num_banks);
 		} else {
-			/* SI and older. */
-			if (rdev->family >= CHIP_TAHITI)
-				tmp = rdev->config.si.tile_config;
-			else if (rdev->family >= CHIP_CAYMAN)
+			/* NI and older. */
+			if (rdev->family >= CHIP_CAYMAN)
 				tmp = rdev->config.cayman.tile_config;
 			else
 				tmp = rdev->config.evergreen.tile_config;