aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2014-08-26 13:11:36 -0400
committerAlex Deucher <alexander.deucher@amd.com>2014-08-27 12:47:58 -0400
commitbdc99722d007ed1db7188b09404bda080d1d737a (patch)
tree655655f23e10cb25c0b413c6652e145aebbd5844 /drivers
parent115365e8a33e4ce5e12bee7999568a26b4c33d3f (diff)
drm/radeon: 760G/780V/880V don't have UVD
Don't enable UVD on these asics as they don't have UVD hardware. Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/radeon/r600.c57
-rw-r--r--drivers/gpu/drm/radeon/radeon_asic.c10
2 files changed, 42 insertions, 25 deletions
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index 14cb31e25c2f..a95ced569d84 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -3009,15 +3009,16 @@ static int r600_startup(struct radeon_device *rdev)
3009 return r; 3009 return r;
3010 } 3010 }
3011 3011
3012 r = uvd_v1_0_resume(rdev); 3012 if (rdev->has_uvd) {
3013 if (!r) { 3013 r = uvd_v1_0_resume(rdev);
3014 r = radeon_fence_driver_start_ring(rdev, R600_RING_TYPE_UVD_INDEX); 3014 if (!r) {
3015 if (r) { 3015 r = radeon_fence_driver_start_ring(rdev, R600_RING_TYPE_UVD_INDEX);
3016 dev_err(rdev->dev, "failed initializing UVD fences (%d).\n", r); 3016 if (r) {
3017 dev_err(rdev->dev, "failed initializing UVD fences (%d).\n", r);
3018 }
3017 } 3019 }
3018 } 3020 if (r)
3019 if (r) { 3021 rdev->ring[R600_RING_TYPE_UVD_INDEX].ring_size = 0;
3020 rdev->ring[R600_RING_TYPE_UVD_INDEX].ring_size = 0;
3021 } 3022 }
3022 3023
3023 /* Enable IRQ */ 3024 /* Enable IRQ */
@@ -3048,14 +3049,16 @@ static int r600_startup(struct radeon_device *rdev)
3048 if (r) 3049 if (r)
3049 return r; 3050 return r;
3050 3051
3051 ring = &rdev->ring[R600_RING_TYPE_UVD_INDEX]; 3052 if (rdev->has_uvd) {
3052 if (ring->ring_size) { 3053 ring = &rdev->ring[R600_RING_TYPE_UVD_INDEX];
3053 r = radeon_ring_init(rdev, ring, ring->ring_size, 0, 3054 if (ring->ring_size) {
3054 RADEON_CP_PACKET2); 3055 r = radeon_ring_init(rdev, ring, ring->ring_size, 0,
3055 if (!r) 3056 RADEON_CP_PACKET2);
3056 r = uvd_v1_0_init(rdev); 3057 if (!r)
3057 if (r) 3058 r = uvd_v1_0_init(rdev);
3058 DRM_ERROR("radeon: failed initializing UVD (%d).\n", r); 3059 if (r)
3060 DRM_ERROR("radeon: failed initializing UVD (%d).\n", r);
3061 }
3059 } 3062 }
3060 3063
3061 r = radeon_ib_pool_init(rdev); 3064 r = radeon_ib_pool_init(rdev);
@@ -3117,8 +3120,10 @@ int r600_suspend(struct radeon_device *rdev)
3117 radeon_pm_suspend(rdev); 3120 radeon_pm_suspend(rdev);
3118 r600_audio_fini(rdev); 3121 r600_audio_fini(rdev);
3119 r600_cp_stop(rdev); 3122 r600_cp_stop(rdev);
3120 uvd_v1_0_fini(rdev); 3123 if (rdev->has_uvd) {
3121 radeon_uvd_suspend(rdev); 3124 uvd_v1_0_fini(rdev);
3125 radeon_uvd_suspend(rdev);
3126 }
3122 r600_irq_suspend(rdev); 3127 r600_irq_suspend(rdev);
3123 radeon_wb_disable(rdev); 3128 radeon_wb_disable(rdev);
3124 r600_pcie_gart_disable(rdev); 3129 r600_pcie_gart_disable(rdev);
@@ -3198,10 +3203,12 @@ int r600_init(struct radeon_device *rdev)
3198 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL; 3203 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL;
3199 r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024); 3204 r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024);
3200 3205
3201 r = radeon_uvd_init(rdev); 3206 if (rdev->has_uvd) {
3202 if (!r) { 3207 r = radeon_uvd_init(rdev);
3203 rdev->ring[R600_RING_TYPE_UVD_INDEX].ring_obj = NULL; 3208 if (!r) {
3204 r600_ring_init(rdev, &rdev->ring[R600_RING_TYPE_UVD_INDEX], 4096); 3209 rdev->ring[R600_RING_TYPE_UVD_INDEX].ring_obj = NULL;
3210 r600_ring_init(rdev, &rdev->ring[R600_RING_TYPE_UVD_INDEX], 4096);
3211 }
3205 } 3212 }
3206 3213
3207 rdev->ih.ring_obj = NULL; 3214 rdev->ih.ring_obj = NULL;
@@ -3233,8 +3240,10 @@ void r600_fini(struct radeon_device *rdev)
3233 r600_audio_fini(rdev); 3240 r600_audio_fini(rdev);
3234 r600_cp_fini(rdev); 3241 r600_cp_fini(rdev);
3235 r600_irq_fini(rdev); 3242 r600_irq_fini(rdev);
3236 uvd_v1_0_fini(rdev); 3243 if (rdev->has_uvd) {
3237 radeon_uvd_fini(rdev); 3244 uvd_v1_0_fini(rdev);
3245 radeon_uvd_fini(rdev);
3246 }
3238 radeon_wb_fini(rdev); 3247 radeon_wb_fini(rdev);
3239 radeon_ib_pool_fini(rdev); 3248 radeon_ib_pool_fini(rdev);
3240 radeon_irq_kms_fini(rdev); 3249 radeon_irq_kms_fini(rdev);
diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c
index 9e6699a9a0b4..d91f965e8219 100644
--- a/drivers/gpu/drm/radeon/radeon_asic.c
+++ b/drivers/gpu/drm/radeon/radeon_asic.c
@@ -2313,7 +2313,15 @@ int radeon_asic_init(struct radeon_device *rdev)
2313 case CHIP_RS780: 2313 case CHIP_RS780:
2314 case CHIP_RS880: 2314 case CHIP_RS880:
2315 rdev->asic = &rs780_asic; 2315 rdev->asic = &rs780_asic;
2316 rdev->has_uvd = true; 2316 /* 760G/780V/880V don't have UVD */
2317 if ((rdev->pdev->device == 0x9616)||
2318 (rdev->pdev->device == 0x9611)||
2319 (rdev->pdev->device == 0x9613)||
2320 (rdev->pdev->device == 0x9711)||
2321 (rdev->pdev->device == 0x9713))
2322 rdev->has_uvd = false;
2323 else
2324 rdev->has_uvd = true;
2317 break; 2325 break;
2318 case CHIP_RV770: 2326 case CHIP_RV770:
2319 case CHIP_RV730: 2327 case CHIP_RV730: