diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2013-08-07 20:14:08 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2013-11-08 12:33:42 -0500 |
commit | fc821b70b0e58908e94464d0479c9898dd1074f9 (patch) | |
tree | 32c39010807fdb81206df6d8e96dcc75172d5505 | |
parent | 8efff33742f5e2ed6184c2dacace5a1fe695909c (diff) |
drm/radeon: update rb setup for hawaii
The formula needs to be adjusted since there are 4 RBs
per SH rather than 2 as on previous asics.
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/radeon/cik.c | 11 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/cikd.h | 4 |
2 files changed, 13 insertions, 2 deletions
diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c index 6ca1f87af87a..24d96cbb1f03 100644 --- a/drivers/gpu/drm/radeon/cik.c +++ b/drivers/gpu/drm/radeon/cik.c | |||
@@ -3042,7 +3042,10 @@ static void cik_setup_rb(struct radeon_device *rdev, | |||
3042 | for (j = 0; j < sh_per_se; j++) { | 3042 | for (j = 0; j < sh_per_se; j++) { |
3043 | cik_select_se_sh(rdev, i, j); | 3043 | cik_select_se_sh(rdev, i, j); |
3044 | data = cik_get_rb_disabled(rdev, max_rb_num, se_num, sh_per_se); | 3044 | data = cik_get_rb_disabled(rdev, max_rb_num, se_num, sh_per_se); |
3045 | disabled_rbs |= data << ((i * sh_per_se + j) * CIK_RB_BITMAP_WIDTH_PER_SH); | 3045 | if (rdev->family == CHIP_HAWAII) |
3046 | disabled_rbs |= data << ((i * sh_per_se + j) * HAWAII_RB_BITMAP_WIDTH_PER_SH); | ||
3047 | else | ||
3048 | disabled_rbs |= data << ((i * sh_per_se + j) * CIK_RB_BITMAP_WIDTH_PER_SH); | ||
3046 | } | 3049 | } |
3047 | } | 3050 | } |
3048 | cik_select_se_sh(rdev, 0xffffffff, 0xffffffff); | 3051 | cik_select_se_sh(rdev, 0xffffffff, 0xffffffff); |
@@ -3059,6 +3062,12 @@ static void cik_setup_rb(struct radeon_device *rdev, | |||
3059 | data = 0; | 3062 | data = 0; |
3060 | for (j = 0; j < sh_per_se; j++) { | 3063 | for (j = 0; j < sh_per_se; j++) { |
3061 | switch (enabled_rbs & 3) { | 3064 | switch (enabled_rbs & 3) { |
3065 | case 0: | ||
3066 | if (j == 0) | ||
3067 | data |= PKR_MAP(RASTER_CONFIG_RB_MAP_3); | ||
3068 | else | ||
3069 | data |= PKR_MAP(RASTER_CONFIG_RB_MAP_0); | ||
3070 | break; | ||
3062 | case 1: | 3071 | case 1: |
3063 | data |= (RASTER_CONFIG_RB_MAP_0 << (i * sh_per_se + j) * 2); | 3072 | data |= (RASTER_CONFIG_RB_MAP_0 << (i * sh_per_se + j) * 2); |
3064 | break; | 3073 | break; |
diff --git a/drivers/gpu/drm/radeon/cikd.h b/drivers/gpu/drm/radeon/cikd.h index 8eea4f2cc92c..5964af5e5b2d 100644 --- a/drivers/gpu/drm/radeon/cikd.h +++ b/drivers/gpu/drm/radeon/cikd.h | |||
@@ -27,7 +27,8 @@ | |||
27 | #define BONAIRE_GB_ADDR_CONFIG_GOLDEN 0x12010001 | 27 | #define BONAIRE_GB_ADDR_CONFIG_GOLDEN 0x12010001 |
28 | #define HAWAII_GB_ADDR_CONFIG_GOLDEN 0x12011003 | 28 | #define HAWAII_GB_ADDR_CONFIG_GOLDEN 0x12011003 |
29 | 29 | ||
30 | #define CIK_RB_BITMAP_WIDTH_PER_SH 2 | 30 | #define CIK_RB_BITMAP_WIDTH_PER_SH 2 |
31 | #define HAWAII_RB_BITMAP_WIDTH_PER_SH 4 | ||
31 | 32 | ||
32 | /* DIDT IND registers */ | 33 | /* DIDT IND registers */ |
33 | #define DIDT_SQ_CTRL0 0x0 | 34 | #define DIDT_SQ_CTRL0 0x0 |
@@ -1459,6 +1460,7 @@ | |||
1459 | # define RASTER_CONFIG_RB_MAP_1 1 | 1460 | # define RASTER_CONFIG_RB_MAP_1 1 |
1460 | # define RASTER_CONFIG_RB_MAP_2 2 | 1461 | # define RASTER_CONFIG_RB_MAP_2 2 |
1461 | # define RASTER_CONFIG_RB_MAP_3 3 | 1462 | # define RASTER_CONFIG_RB_MAP_3 3 |
1463 | #define PKR_MAP(x) ((x) << 8) | ||
1462 | 1464 | ||
1463 | #define VGT_EVENT_INITIATOR 0x28a90 | 1465 | #define VGT_EVENT_INITIATOR 0x28a90 |
1464 | # define SAMPLE_STREAMOUTSTATS1 (1 << 0) | 1466 | # define SAMPLE_STREAMOUTSTATS1 (1 << 0) |