diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/si.c')
| -rw-r--r-- | drivers/gpu/drm/radeon/si.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c index a36736dab5e0..85e1edfaa3be 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, | |||
| 2811 | } | 2811 | } |
| 2812 | 2812 | ||
| 2813 | static u32 si_get_rb_disabled(struct radeon_device *rdev, | 2813 | static u32 si_get_rb_disabled(struct radeon_device *rdev, |
| 2814 | u32 max_rb_num, u32 se_num, | 2814 | u32 max_rb_num_per_se, |
| 2815 | u32 sh_per_se) | 2815 | u32 sh_per_se) |
| 2816 | { | 2816 | { |
| 2817 | u32 data, mask; | 2817 | u32 data, mask; |
| @@ -2825,14 +2825,14 @@ static u32 si_get_rb_disabled(struct radeon_device *rdev, | |||
| 2825 | 2825 | ||
| 2826 | data >>= BACKEND_DISABLE_SHIFT; | 2826 | data >>= BACKEND_DISABLE_SHIFT; |
| 2827 | 2827 | ||
| 2828 | mask = si_create_bitmask(max_rb_num / se_num / sh_per_se); | 2828 | mask = si_create_bitmask(max_rb_num_per_se / sh_per_se); |
| 2829 | 2829 | ||
| 2830 | return data & mask; | 2830 | return data & mask; |
| 2831 | } | 2831 | } |
| 2832 | 2832 | ||
| 2833 | static void si_setup_rb(struct radeon_device *rdev, | 2833 | static void si_setup_rb(struct radeon_device *rdev, |
| 2834 | u32 se_num, u32 sh_per_se, | 2834 | u32 se_num, u32 sh_per_se, |
| 2835 | u32 max_rb_num) | 2835 | u32 max_rb_num_per_se) |
| 2836 | { | 2836 | { |
| 2837 | int i, j; | 2837 | int i, j; |
| 2838 | u32 data, mask; | 2838 | u32 data, mask; |
| @@ -2842,19 +2842,21 @@ static void si_setup_rb(struct radeon_device *rdev, | |||
| 2842 | for (i = 0; i < se_num; i++) { | 2842 | for (i = 0; i < se_num; i++) { |
| 2843 | for (j = 0; j < sh_per_se; j++) { | 2843 | for (j = 0; j < sh_per_se; j++) { |
| 2844 | si_select_se_sh(rdev, i, j); | 2844 | si_select_se_sh(rdev, i, j); |
| 2845 | data = si_get_rb_disabled(rdev, max_rb_num, se_num, sh_per_se); | 2845 | data = si_get_rb_disabled(rdev, max_rb_num_per_se, sh_per_se); |
| 2846 | disabled_rbs |= data << ((i * sh_per_se + j) * TAHITI_RB_BITMAP_WIDTH_PER_SH); | 2846 | disabled_rbs |= data << ((i * sh_per_se + j) * TAHITI_RB_BITMAP_WIDTH_PER_SH); |
| 2847 | } | 2847 | } |
| 2848 | } | 2848 | } |
| 2849 | si_select_se_sh(rdev, 0xffffffff, 0xffffffff); | 2849 | si_select_se_sh(rdev, 0xffffffff, 0xffffffff); |
| 2850 | 2850 | ||
| 2851 | mask = 1; | 2851 | mask = 1; |
| 2852 | for (i = 0; i < max_rb_num; i++) { | 2852 | for (i = 0; i < max_rb_num_per_se * se_num; i++) { |
| 2853 | if (!(disabled_rbs & mask)) | 2853 | if (!(disabled_rbs & mask)) |
| 2854 | enabled_rbs |= mask; | 2854 | enabled_rbs |= mask; |
| 2855 | mask <<= 1; | 2855 | mask <<= 1; |
| 2856 | } | 2856 | } |
| 2857 | 2857 | ||
| 2858 | rdev->config.si.backend_enable_mask = enabled_rbs; | ||
| 2859 | |||
| 2858 | for (i = 0; i < se_num; i++) { | 2860 | for (i = 0; i < se_num; i++) { |
| 2859 | si_select_se_sh(rdev, i, 0xffffffff); | 2861 | si_select_se_sh(rdev, i, 0xffffffff); |
| 2860 | data = 0; | 2862 | data = 0; |
