提交 d2b2c084 编写于 作者: D Dave Airlie

Merge branch 'drm-fixes-3.11' of git://people.freedesktop.org/~agd5f/linux

Just two small fixes for radeon.  One fixes an array overrun
that can cause garbage to get written to registers on some r7xx boards,
the other is a small UVD fix.
Also one audio regresion

* 'drm-fixes-3.11' of git://people.freedesktop.org/~agd5f/linux:
  drm/radeon: fix WREG32_OR macro setting bits in a register
  drm/radeon/r7xx: fix copy paste typo in golden register setup
  drm/radeon: fix UVD message buffer validation
...@@ -2163,7 +2163,7 @@ void cik_mm_wdoorbell(struct radeon_device *rdev, u32 offset, u32 v); ...@@ -2163,7 +2163,7 @@ void cik_mm_wdoorbell(struct radeon_device *rdev, u32 offset, u32 v);
WREG32(reg, tmp_); \ WREG32(reg, tmp_); \
} while (0) } while (0)
#define WREG32_AND(reg, and) WREG32_P(reg, 0, and) #define WREG32_AND(reg, and) WREG32_P(reg, 0, and)
#define WREG32_OR(reg, or) WREG32_P(reg, or, ~or) #define WREG32_OR(reg, or) WREG32_P(reg, or, ~(or))
#define WREG32_PLL_P(reg, val, mask) \ #define WREG32_PLL_P(reg, val, mask) \
do { \ do { \
uint32_t tmp_ = RREG32_PLL(reg); \ uint32_t tmp_ = RREG32_PLL(reg); \
......
...@@ -356,6 +356,14 @@ static int radeon_uvd_cs_msg(struct radeon_cs_parser *p, struct radeon_bo *bo, ...@@ -356,6 +356,14 @@ static int radeon_uvd_cs_msg(struct radeon_cs_parser *p, struct radeon_bo *bo,
return -EINVAL; return -EINVAL;
} }
if (bo->tbo.sync_obj) {
r = radeon_fence_wait(bo->tbo.sync_obj, false);
if (r) {
DRM_ERROR("Failed waiting for UVD message (%d)!\n", r);
return r;
}
}
r = radeon_bo_kmap(bo, &ptr); r = radeon_bo_kmap(bo, &ptr);
if (r) { if (r) {
DRM_ERROR("Failed mapping the UVD message (%d)!\n", r); DRM_ERROR("Failed mapping the UVD message (%d)!\n", r);
......
...@@ -744,10 +744,10 @@ static void rv770_init_golden_registers(struct radeon_device *rdev) ...@@ -744,10 +744,10 @@ static void rv770_init_golden_registers(struct radeon_device *rdev)
(const u32)ARRAY_SIZE(r7xx_golden_dyn_gpr_registers)); (const u32)ARRAY_SIZE(r7xx_golden_dyn_gpr_registers));
radeon_program_register_sequence(rdev, radeon_program_register_sequence(rdev,
rv730_golden_registers, rv730_golden_registers,
(const u32)ARRAY_SIZE(rv770_golden_registers)); (const u32)ARRAY_SIZE(rv730_golden_registers));
radeon_program_register_sequence(rdev, radeon_program_register_sequence(rdev,
rv730_mgcg_init, rv730_mgcg_init,
(const u32)ARRAY_SIZE(rv770_mgcg_init)); (const u32)ARRAY_SIZE(rv730_mgcg_init));
break; break;
case CHIP_RV710: case CHIP_RV710:
radeon_program_register_sequence(rdev, radeon_program_register_sequence(rdev,
...@@ -758,18 +758,18 @@ static void rv770_init_golden_registers(struct radeon_device *rdev) ...@@ -758,18 +758,18 @@ static void rv770_init_golden_registers(struct radeon_device *rdev)
(const u32)ARRAY_SIZE(r7xx_golden_dyn_gpr_registers)); (const u32)ARRAY_SIZE(r7xx_golden_dyn_gpr_registers));
radeon_program_register_sequence(rdev, radeon_program_register_sequence(rdev,
rv710_golden_registers, rv710_golden_registers,
(const u32)ARRAY_SIZE(rv770_golden_registers)); (const u32)ARRAY_SIZE(rv710_golden_registers));
radeon_program_register_sequence(rdev, radeon_program_register_sequence(rdev,
rv710_mgcg_init, rv710_mgcg_init,
(const u32)ARRAY_SIZE(rv770_mgcg_init)); (const u32)ARRAY_SIZE(rv710_mgcg_init));
break; break;
case CHIP_RV740: case CHIP_RV740:
radeon_program_register_sequence(rdev, radeon_program_register_sequence(rdev,
rv740_golden_registers, rv740_golden_registers,
(const u32)ARRAY_SIZE(rv770_golden_registers)); (const u32)ARRAY_SIZE(rv740_golden_registers));
radeon_program_register_sequence(rdev, radeon_program_register_sequence(rdev,
rv740_mgcg_init, rv740_mgcg_init,
(const u32)ARRAY_SIZE(rv770_mgcg_init)); (const u32)ARRAY_SIZE(rv740_mgcg_init));
break; break;
default: default:
break; break;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册