diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2014-08-26 13:11:36 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2014-08-27 12:47:58 -0400 |
commit | bdc99722d007ed1db7188b09404bda080d1d737a (patch) | |
tree | 655655f23e10cb25c0b413c6652e145aebbd5844 /drivers | |
parent | 115365e8a33e4ce5e12bee7999568a26b4c33d3f (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.c | 57 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_asic.c | 10 |
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: |