aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/r300.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/radeon/r300.c')
-rw-r--r--drivers/gpu/drm/radeon/r300.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c
index cde1d3480d93..fae5e709f270 100644
--- a/drivers/gpu/drm/radeon/r300.c
+++ b/drivers/gpu/drm/radeon/r300.c
@@ -558,10 +558,7 @@ int rv370_get_pcie_lanes(struct radeon_device *rdev)
558 558
559 /* FIXME wait for idle */ 559 /* FIXME wait for idle */
560 560
561 if (rdev->family < CHIP_R600) 561 link_width_cntl = RREG32_PCIE(RADEON_PCIE_LC_LINK_WIDTH_CNTL);
562 link_width_cntl = RREG32_PCIE(RADEON_PCIE_LC_LINK_WIDTH_CNTL);
563 else
564 link_width_cntl = RREG32_PCIE_P(RADEON_PCIE_LC_LINK_WIDTH_CNTL);
565 562
566 switch ((link_width_cntl & RADEON_PCIE_LC_LINK_WIDTH_RD_MASK) >> RADEON_PCIE_LC_LINK_WIDTH_RD_SHIFT) { 563 switch ((link_width_cntl & RADEON_PCIE_LC_LINK_WIDTH_RD_MASK) >> RADEON_PCIE_LC_LINK_WIDTH_RD_SHIFT) {
567 case RADEON_PCIE_LC_LINK_WIDTH_X0: 564 case RADEON_PCIE_LC_LINK_WIDTH_X0:
@@ -745,6 +742,11 @@ static int r300_packet0_check(struct radeon_cs_parser *p,
745 break; 742 break;
746 case 0x4E00: 743 case 0x4E00:
747 /* RB3D_CCTL */ 744 /* RB3D_CCTL */
745 if ((idx_value & (1 << 10)) && /* CMASK_ENABLE */
746 p->rdev->cmask_filp != p->filp) {
747 DRM_ERROR("Invalid RB3D_CCTL: Cannot enable CMASK.\n");
748 return -EINVAL;
749 }
748 track->num_cb = ((idx_value >> 5) & 0x3) + 1; 750 track->num_cb = ((idx_value >> 5) & 0x3) + 1;
749 break; 751 break;
750 case 0x4E38: 752 case 0x4E38:
@@ -787,6 +789,13 @@ static int r300_packet0_check(struct radeon_cs_parser *p,
787 case 15: 789 case 15:
788 track->cb[i].cpp = 2; 790 track->cb[i].cpp = 2;
789 break; 791 break;
792 case 5:
793 if (p->rdev->family < CHIP_RV515) {
794 DRM_ERROR("Invalid color buffer format (%d)!\n",
795 ((idx_value >> 21) & 0xF));
796 return -EINVAL;
797 }
798 /* Pass through. */
790 case 6: 799 case 6:
791 track->cb[i].cpp = 4; 800 track->cb[i].cpp = 4;
792 break; 801 break;
@@ -1199,6 +1208,10 @@ static int r300_packet3_check(struct radeon_cs_parser *p,
1199 if (p->rdev->hyperz_filp != p->filp) 1208 if (p->rdev->hyperz_filp != p->filp)
1200 return -EINVAL; 1209 return -EINVAL;
1201 break; 1210 break;
1211 case PACKET3_3D_CLEAR_CMASK:
1212 if (p->rdev->cmask_filp != p->filp)
1213 return -EINVAL;
1214 break;
1202 case PACKET3_NOP: 1215 case PACKET3_NOP:
1203 break; 1216 break;
1204 default: 1217 default: