diff options
| -rw-r--r-- | drivers/gpu/drm/radeon/dce6_afmt.c | 8 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/evergreen_hdmi.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/ni.c | 20 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/rv770_dpm.c | 6 |
4 files changed, 29 insertions, 9 deletions
diff --git a/drivers/gpu/drm/radeon/dce6_afmt.c b/drivers/gpu/drm/radeon/dce6_afmt.c index de86493cbc44..713a5d359901 100644 --- a/drivers/gpu/drm/radeon/dce6_afmt.c +++ b/drivers/gpu/drm/radeon/dce6_afmt.c | |||
| @@ -174,7 +174,7 @@ void dce6_afmt_write_speaker_allocation(struct drm_encoder *encoder) | |||
| 174 | } | 174 | } |
| 175 | 175 | ||
| 176 | sad_count = drm_edid_to_speaker_allocation(radeon_connector->edid, &sadb); | 176 | sad_count = drm_edid_to_speaker_allocation(radeon_connector->edid, &sadb); |
| 177 | if (sad_count < 0) { | 177 | if (sad_count <= 0) { |
| 178 | DRM_ERROR("Couldn't read Speaker Allocation Data Block: %d\n", sad_count); | 178 | DRM_ERROR("Couldn't read Speaker Allocation Data Block: %d\n", sad_count); |
| 179 | return; | 179 | return; |
| 180 | } | 180 | } |
| @@ -235,7 +235,7 @@ void dce6_afmt_write_sad_regs(struct drm_encoder *encoder) | |||
| 235 | } | 235 | } |
| 236 | 236 | ||
| 237 | sad_count = drm_edid_to_sad(radeon_connector->edid, &sads); | 237 | sad_count = drm_edid_to_sad(radeon_connector->edid, &sads); |
| 238 | if (sad_count < 0) { | 238 | if (sad_count <= 0) { |
| 239 | DRM_ERROR("Couldn't read SADs: %d\n", sad_count); | 239 | DRM_ERROR("Couldn't read SADs: %d\n", sad_count); |
| 240 | return; | 240 | return; |
| 241 | } | 241 | } |
| @@ -308,7 +308,9 @@ int dce6_audio_init(struct radeon_device *rdev) | |||
| 308 | rdev->audio.enabled = true; | 308 | rdev->audio.enabled = true; |
| 309 | 309 | ||
| 310 | if (ASIC_IS_DCE8(rdev)) | 310 | if (ASIC_IS_DCE8(rdev)) |
| 311 | rdev->audio.num_pins = 7; | 311 | rdev->audio.num_pins = 6; |
| 312 | else if (ASIC_IS_DCE61(rdev)) | ||
| 313 | rdev->audio.num_pins = 4; | ||
| 312 | else | 314 | else |
| 313 | rdev->audio.num_pins = 6; | 315 | rdev->audio.num_pins = 6; |
| 314 | 316 | ||
diff --git a/drivers/gpu/drm/radeon/evergreen_hdmi.c b/drivers/gpu/drm/radeon/evergreen_hdmi.c index aa695c4feb3d..0c6d5cef4cf1 100644 --- a/drivers/gpu/drm/radeon/evergreen_hdmi.c +++ b/drivers/gpu/drm/radeon/evergreen_hdmi.c | |||
| @@ -118,7 +118,7 @@ static void dce4_afmt_write_speaker_allocation(struct drm_encoder *encoder) | |||
| 118 | } | 118 | } |
| 119 | 119 | ||
| 120 | sad_count = drm_edid_to_speaker_allocation(radeon_connector->edid, &sadb); | 120 | sad_count = drm_edid_to_speaker_allocation(radeon_connector->edid, &sadb); |
| 121 | if (sad_count < 0) { | 121 | if (sad_count <= 0) { |
| 122 | DRM_ERROR("Couldn't read Speaker Allocation Data Block: %d\n", sad_count); | 122 | DRM_ERROR("Couldn't read Speaker Allocation Data Block: %d\n", sad_count); |
| 123 | return; | 123 | return; |
| 124 | } | 124 | } |
| @@ -173,7 +173,7 @@ static void evergreen_hdmi_write_sad_regs(struct drm_encoder *encoder) | |||
| 173 | } | 173 | } |
| 174 | 174 | ||
| 175 | sad_count = drm_edid_to_sad(radeon_connector->edid, &sads); | 175 | sad_count = drm_edid_to_sad(radeon_connector->edid, &sads); |
| 176 | if (sad_count < 0) { | 176 | if (sad_count <= 0) { |
| 177 | DRM_ERROR("Couldn't read SADs: %d\n", sad_count); | 177 | DRM_ERROR("Couldn't read SADs: %d\n", sad_count); |
| 178 | return; | 178 | return; |
| 179 | } | 179 | } |
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c index 11aab2ab54ce..f59a9e9fccf8 100644 --- a/drivers/gpu/drm/radeon/ni.c +++ b/drivers/gpu/drm/radeon/ni.c | |||
| @@ -895,6 +895,10 @@ static void cayman_gpu_init(struct radeon_device *rdev) | |||
| 895 | (rdev->pdev->device == 0x999C)) { | 895 | (rdev->pdev->device == 0x999C)) { |
| 896 | rdev->config.cayman.max_simds_per_se = 6; | 896 | rdev->config.cayman.max_simds_per_se = 6; |
| 897 | rdev->config.cayman.max_backends_per_se = 2; | 897 | rdev->config.cayman.max_backends_per_se = 2; |
| 898 | rdev->config.cayman.max_hw_contexts = 8; | ||
| 899 | rdev->config.cayman.sx_max_export_size = 256; | ||
| 900 | rdev->config.cayman.sx_max_export_pos_size = 64; | ||
| 901 | rdev->config.cayman.sx_max_export_smx_size = 192; | ||
| 898 | } else if ((rdev->pdev->device == 0x9903) || | 902 | } else if ((rdev->pdev->device == 0x9903) || |
| 899 | (rdev->pdev->device == 0x9904) || | 903 | (rdev->pdev->device == 0x9904) || |
| 900 | (rdev->pdev->device == 0x990A) || | 904 | (rdev->pdev->device == 0x990A) || |
| @@ -905,6 +909,10 @@ static void cayman_gpu_init(struct radeon_device *rdev) | |||
| 905 | (rdev->pdev->device == 0x999D)) { | 909 | (rdev->pdev->device == 0x999D)) { |
| 906 | rdev->config.cayman.max_simds_per_se = 4; | 910 | rdev->config.cayman.max_simds_per_se = 4; |
| 907 | rdev->config.cayman.max_backends_per_se = 2; | 911 | rdev->config.cayman.max_backends_per_se = 2; |
| 912 | rdev->config.cayman.max_hw_contexts = 8; | ||
| 913 | rdev->config.cayman.sx_max_export_size = 256; | ||
| 914 | rdev->config.cayman.sx_max_export_pos_size = 64; | ||
| 915 | rdev->config.cayman.sx_max_export_smx_size = 192; | ||
| 908 | } else if ((rdev->pdev->device == 0x9919) || | 916 | } else if ((rdev->pdev->device == 0x9919) || |
| 909 | (rdev->pdev->device == 0x9990) || | 917 | (rdev->pdev->device == 0x9990) || |
| 910 | (rdev->pdev->device == 0x9991) || | 918 | (rdev->pdev->device == 0x9991) || |
| @@ -915,9 +923,17 @@ static void cayman_gpu_init(struct radeon_device *rdev) | |||
| 915 | (rdev->pdev->device == 0x99A0)) { | 923 | (rdev->pdev->device == 0x99A0)) { |
| 916 | rdev->config.cayman.max_simds_per_se = 3; | 924 | rdev->config.cayman.max_simds_per_se = 3; |
| 917 | rdev->config.cayman.max_backends_per_se = 1; | 925 | rdev->config.cayman.max_backends_per_se = 1; |
| 926 | rdev->config.cayman.max_hw_contexts = 4; | ||
| 927 | rdev->config.cayman.sx_max_export_size = 128; | ||
| 928 | rdev->config.cayman.sx_max_export_pos_size = 32; | ||
| 929 | rdev->config.cayman.sx_max_export_smx_size = 96; | ||
| 918 | } else { | 930 | } else { |
| 919 | rdev->config.cayman.max_simds_per_se = 2; | 931 | rdev->config.cayman.max_simds_per_se = 2; |
| 920 | rdev->config.cayman.max_backends_per_se = 1; | 932 | rdev->config.cayman.max_backends_per_se = 1; |
| 933 | rdev->config.cayman.max_hw_contexts = 4; | ||
| 934 | rdev->config.cayman.sx_max_export_size = 128; | ||
| 935 | rdev->config.cayman.sx_max_export_pos_size = 32; | ||
| 936 | rdev->config.cayman.sx_max_export_smx_size = 96; | ||
| 921 | } | 937 | } |
| 922 | rdev->config.cayman.max_texture_channel_caches = 2; | 938 | rdev->config.cayman.max_texture_channel_caches = 2; |
| 923 | rdev->config.cayman.max_gprs = 256; | 939 | rdev->config.cayman.max_gprs = 256; |
| @@ -925,10 +941,6 @@ static void cayman_gpu_init(struct radeon_device *rdev) | |||
| 925 | rdev->config.cayman.max_gs_threads = 32; | 941 | rdev->config.cayman.max_gs_threads = 32; |
| 926 | rdev->config.cayman.max_stack_entries = 512; | 942 | rdev->config.cayman.max_stack_entries = 512; |
| 927 | rdev->config.cayman.sx_num_of_sets = 8; | 943 | rdev->config.cayman.sx_num_of_sets = 8; |
| 928 | rdev->config.cayman.sx_max_export_size = 256; | ||
| 929 | rdev->config.cayman.sx_max_export_pos_size = 64; | ||
| 930 | rdev->config.cayman.sx_max_export_smx_size = 192; | ||
| 931 | rdev->config.cayman.max_hw_contexts = 8; | ||
| 932 | rdev->config.cayman.sq_num_cf_insts = 2; | 944 | rdev->config.cayman.sq_num_cf_insts = 2; |
| 933 | 945 | ||
| 934 | rdev->config.cayman.sc_prim_fifo_size = 0x40; | 946 | rdev->config.cayman.sc_prim_fifo_size = 0x40; |
diff --git a/drivers/gpu/drm/radeon/rv770_dpm.c b/drivers/gpu/drm/radeon/rv770_dpm.c index 913b025ae9b3..374499db20c7 100644 --- a/drivers/gpu/drm/radeon/rv770_dpm.c +++ b/drivers/gpu/drm/radeon/rv770_dpm.c | |||
| @@ -2328,6 +2328,12 @@ void rv770_get_engine_memory_ss(struct radeon_device *rdev) | |||
| 2328 | pi->mclk_ss = radeon_atombios_get_asic_ss_info(rdev, &ss, | 2328 | pi->mclk_ss = radeon_atombios_get_asic_ss_info(rdev, &ss, |
| 2329 | ASIC_INTERNAL_MEMORY_SS, 0); | 2329 | ASIC_INTERNAL_MEMORY_SS, 0); |
| 2330 | 2330 | ||
| 2331 | /* disable ss, causes hangs on some cayman boards */ | ||
| 2332 | if (rdev->family == CHIP_CAYMAN) { | ||
| 2333 | pi->sclk_ss = false; | ||
| 2334 | pi->mclk_ss = false; | ||
| 2335 | } | ||
| 2336 | |||
| 2331 | if (pi->sclk_ss || pi->mclk_ss) | 2337 | if (pi->sclk_ss || pi->mclk_ss) |
| 2332 | pi->dynamic_ss = true; | 2338 | pi->dynamic_ss = true; |
| 2333 | else | 2339 | else |
