瀏覽代碼

drm/radeon/kms/blit: workaround some hw issues on evergreen+

Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Alex Deucher 14 年之前
父節點
當前提交
ac10f81d94
共有 1 個文件被更改,包括 10 次插入0 次删除
  1. 10 0
      drivers/gpu/drm/radeon/evergreen_blit_kms.c

+ 10 - 0
drivers/gpu/drm/radeon/evergreen_blit_kms.c

@@ -199,6 +199,16 @@ static void
 set_scissors(struct radeon_device *rdev, int x1, int y1,
 set_scissors(struct radeon_device *rdev, int x1, int y1,
 	     int x2, int y2)
 	     int x2, int y2)
 {
 {
+	/* workaround some hw bugs */
+	if (x2 == 0)
+		x1 = 1;
+	if (y2 == 0)
+		y1 = 1;
+	if (rdev->family == CHIP_CAYMAN) {
+		if ((x2 == 1) && (y2 == 1))
+			x2 = 2;
+	}
+
 	radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONTEXT_REG, 2));
 	radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONTEXT_REG, 2));
 	radeon_ring_write(rdev, (PA_SC_SCREEN_SCISSOR_TL - PACKET3_SET_CONTEXT_REG_START) >> 2);
 	radeon_ring_write(rdev, (PA_SC_SCREEN_SCISSOR_TL - PACKET3_SET_CONTEXT_REG_START) >> 2);
 	radeon_ring_write(rdev, (x1 << 0) | (y1 << 16));
 	radeon_ring_write(rdev, (x1 << 0) | (y1 << 16));