diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/r300.c')
-rw-r--r-- | drivers/gpu/drm/radeon/r300.c | 21 |
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: |