[PATCH 1/2] drm/radeon: fix render backend setup for SI and CIK
Alex Deucher
alexdeucher at gmail.com
Mon Dec 23 07:02:32 PST 2013
On Sat, Dec 21, 2013 at 8:18 PM, Marek Olšák <maraeo at gmail.com> wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> Only the render backends of the first shader engine were enabled. The others
> were erroneously disabled. Enabling the other render backends improves
> performance a lot.
>
> Unigine Sanctuary on Bonaire:
> Before: 15 fps
> After: 90 fps
>
> Judging from the fan noise, the GPU was also underclocked when the other
> render backends were disabled, resulting in horrible performance. The fan is
> a lot noisy under load now.
>
> Signed-off-by: Marek Olšák <marek.olsak at amd.com>
Applied the series to my -fixes tree. Thanks!
Alex
> ---
> drivers/gpu/drm/radeon/cik.c | 10 +++++-----
> drivers/gpu/drm/radeon/si.c | 10 +++++-----
> 2 files changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c
> index b43a3a3..138a776 100644
> --- a/drivers/gpu/drm/radeon/cik.c
> +++ b/drivers/gpu/drm/radeon/cik.c
> @@ -3057,7 +3057,7 @@ static u32 cik_create_bitmask(u32 bit_width)
> * Returns the disabled RB bitmask.
> */
> static u32 cik_get_rb_disabled(struct radeon_device *rdev,
> - u32 max_rb_num, u32 se_num,
> + u32 max_rb_num_per_se,
> u32 sh_per_se)
> {
> u32 data, mask;
> @@ -3071,7 +3071,7 @@ static u32 cik_get_rb_disabled(struct radeon_device *rdev,
>
> data >>= BACKEND_DISABLE_SHIFT;
>
> - mask = cik_create_bitmask(max_rb_num / se_num / sh_per_se);
> + mask = cik_create_bitmask(max_rb_num_per_se / sh_per_se);
>
> return data & mask;
> }
> @@ -3088,7 +3088,7 @@ static u32 cik_get_rb_disabled(struct radeon_device *rdev,
> */
> static void cik_setup_rb(struct radeon_device *rdev,
> u32 se_num, u32 sh_per_se,
> - u32 max_rb_num)
> + u32 max_rb_num_per_se)
> {
> int i, j;
> u32 data, mask;
> @@ -3098,7 +3098,7 @@ static void cik_setup_rb(struct radeon_device *rdev,
> for (i = 0; i < se_num; i++) {
> for (j = 0; j < sh_per_se; j++) {
> cik_select_se_sh(rdev, i, j);
> - data = cik_get_rb_disabled(rdev, max_rb_num, se_num, sh_per_se);
> + data = cik_get_rb_disabled(rdev, max_rb_num_per_se, sh_per_se);
> if (rdev->family == CHIP_HAWAII)
> disabled_rbs |= data << ((i * sh_per_se + j) * HAWAII_RB_BITMAP_WIDTH_PER_SH);
> else
> @@ -3108,7 +3108,7 @@ static void cik_setup_rb(struct radeon_device *rdev,
> cik_select_se_sh(rdev, 0xffffffff, 0xffffffff);
>
> mask = 1;
> - for (i = 0; i < max_rb_num; i++) {
> + for (i = 0; i < max_rb_num_per_se * se_num; i++) {
> if (!(disabled_rbs & mask))
> enabled_rbs |= mask;
> mask <<= 1;
> diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
> index a36736d..3eed9a1 100644
> --- a/drivers/gpu/drm/radeon/si.c
> +++ b/drivers/gpu/drm/radeon/si.c
> @@ -2811,7 +2811,7 @@ static void si_setup_spi(struct radeon_device *rdev,
> }
>
> static u32 si_get_rb_disabled(struct radeon_device *rdev,
> - u32 max_rb_num, u32 se_num,
> + u32 max_rb_num_per_se,
> u32 sh_per_se)
> {
> u32 data, mask;
> @@ -2825,14 +2825,14 @@ static u32 si_get_rb_disabled(struct radeon_device *rdev,
>
> data >>= BACKEND_DISABLE_SHIFT;
>
> - mask = si_create_bitmask(max_rb_num / se_num / sh_per_se);
> + mask = si_create_bitmask(max_rb_num_per_se / sh_per_se);
>
> return data & mask;
> }
>
> static void si_setup_rb(struct radeon_device *rdev,
> u32 se_num, u32 sh_per_se,
> - u32 max_rb_num)
> + u32 max_rb_num_per_se)
> {
> int i, j;
> u32 data, mask;
> @@ -2842,14 +2842,14 @@ static void si_setup_rb(struct radeon_device *rdev,
> for (i = 0; i < se_num; i++) {
> for (j = 0; j < sh_per_se; j++) {
> si_select_se_sh(rdev, i, j);
> - data = si_get_rb_disabled(rdev, max_rb_num, se_num, sh_per_se);
> + data = si_get_rb_disabled(rdev, max_rb_num_per_se, sh_per_se);
> disabled_rbs |= data << ((i * sh_per_se + j) * TAHITI_RB_BITMAP_WIDTH_PER_SH);
> }
> }
> si_select_se_sh(rdev, 0xffffffff, 0xffffffff);
>
> mask = 1;
> - for (i = 0; i < max_rb_num; i++) {
> + for (i = 0; i < max_rb_num_per_se * se_num; i++) {
> if (!(disabled_rbs & mask))
> enabled_rbs |= mask;
> mask <<= 1;
> --
> 1.8.3.2
>
> _______________________________________________
> 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