Rev 3120 | Rev 5271 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3120 | Rev 3764 | ||
---|---|---|---|
Line 616... | Line 616... | ||
616 | case RADEON_CRTC_GUI_TRIG_VLINE: |
616 | case RADEON_CRTC_GUI_TRIG_VLINE: |
617 | r = r100_cs_packet_parse_vline(p); |
617 | r = r100_cs_packet_parse_vline(p); |
618 | if (r) { |
618 | if (r) { |
619 | DRM_ERROR("No reloc for ib[%d]=0x%04X\n", |
619 | DRM_ERROR("No reloc for ib[%d]=0x%04X\n", |
620 | idx, reg); |
620 | idx, reg); |
621 | r100_cs_dump_packet(p, pkt); |
621 | radeon_cs_dump_packet(p, pkt); |
622 | return r; |
622 | return r; |
623 | } |
623 | } |
624 | break; |
624 | break; |
625 | case RADEON_DST_PITCH_OFFSET: |
625 | case RADEON_DST_PITCH_OFFSET: |
626 | case RADEON_SRC_PITCH_OFFSET: |
626 | case RADEON_SRC_PITCH_OFFSET: |
Line 631... | Line 631... | ||
631 | case R300_RB3D_COLOROFFSET0: |
631 | case R300_RB3D_COLOROFFSET0: |
632 | case R300_RB3D_COLOROFFSET1: |
632 | case R300_RB3D_COLOROFFSET1: |
633 | case R300_RB3D_COLOROFFSET2: |
633 | case R300_RB3D_COLOROFFSET2: |
634 | case R300_RB3D_COLOROFFSET3: |
634 | case R300_RB3D_COLOROFFSET3: |
635 | i = (reg - R300_RB3D_COLOROFFSET0) >> 2; |
635 | i = (reg - R300_RB3D_COLOROFFSET0) >> 2; |
636 | r = r100_cs_packet_next_reloc(p, &reloc); |
636 | r = radeon_cs_packet_next_reloc(p, &reloc, 0); |
637 | if (r) { |
637 | if (r) { |
638 | DRM_ERROR("No reloc for ib[%d]=0x%04X\n", |
638 | DRM_ERROR("No reloc for ib[%d]=0x%04X\n", |
639 | idx, reg); |
639 | idx, reg); |
640 | r100_cs_dump_packet(p, pkt); |
640 | radeon_cs_dump_packet(p, pkt); |
641 | return r; |
641 | return r; |
642 | } |
642 | } |
643 | track->cb[i].robj = reloc->robj; |
643 | track->cb[i].robj = reloc->robj; |
644 | track->cb[i].offset = idx_value; |
644 | track->cb[i].offset = idx_value; |
645 | track->cb_dirty = true; |
645 | track->cb_dirty = true; |
646 | ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset); |
646 | ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset); |
647 | break; |
647 | break; |
648 | case R300_ZB_DEPTHOFFSET: |
648 | case R300_ZB_DEPTHOFFSET: |
649 | r = r100_cs_packet_next_reloc(p, &reloc); |
649 | r = radeon_cs_packet_next_reloc(p, &reloc, 0); |
650 | if (r) { |
650 | if (r) { |
651 | DRM_ERROR("No reloc for ib[%d]=0x%04X\n", |
651 | DRM_ERROR("No reloc for ib[%d]=0x%04X\n", |
652 | idx, reg); |
652 | idx, reg); |
653 | r100_cs_dump_packet(p, pkt); |
653 | radeon_cs_dump_packet(p, pkt); |
654 | return r; |
654 | return r; |
655 | } |
655 | } |
656 | track->zb.robj = reloc->robj; |
656 | track->zb.robj = reloc->robj; |
657 | track->zb.offset = idx_value; |
657 | track->zb.offset = idx_value; |
658 | track->zb_dirty = true; |
658 | track->zb_dirty = true; |
Line 673... | Line 673... | ||
673 | case R300_TX_OFFSET_0+48: |
673 | case R300_TX_OFFSET_0+48: |
674 | case R300_TX_OFFSET_0+52: |
674 | case R300_TX_OFFSET_0+52: |
675 | case R300_TX_OFFSET_0+56: |
675 | case R300_TX_OFFSET_0+56: |
676 | case R300_TX_OFFSET_0+60: |
676 | case R300_TX_OFFSET_0+60: |
677 | i = (reg - R300_TX_OFFSET_0) >> 2; |
677 | i = (reg - R300_TX_OFFSET_0) >> 2; |
678 | r = r100_cs_packet_next_reloc(p, &reloc); |
678 | r = radeon_cs_packet_next_reloc(p, &reloc, 0); |
679 | if (r) { |
679 | if (r) { |
680 | DRM_ERROR("No reloc for ib[%d]=0x%04X\n", |
680 | DRM_ERROR("No reloc for ib[%d]=0x%04X\n", |
681 | idx, reg); |
681 | idx, reg); |
682 | r100_cs_dump_packet(p, pkt); |
682 | radeon_cs_dump_packet(p, pkt); |
683 | return r; |
683 | return r; |
684 | } |
684 | } |
Line 685... | Line 685... | ||
685 | 685 | ||
686 | if (p->cs_flags & RADEON_CS_KEEP_TILING_FLAGS) { |
686 | if (p->cs_flags & RADEON_CS_KEEP_TILING_FLAGS) { |
Line 746... | Line 746... | ||
746 | /* RB3D_COLORPITCH0 */ |
746 | /* RB3D_COLORPITCH0 */ |
747 | /* RB3D_COLORPITCH1 */ |
747 | /* RB3D_COLORPITCH1 */ |
748 | /* RB3D_COLORPITCH2 */ |
748 | /* RB3D_COLORPITCH2 */ |
749 | /* RB3D_COLORPITCH3 */ |
749 | /* RB3D_COLORPITCH3 */ |
750 | if (!(p->cs_flags & RADEON_CS_KEEP_TILING_FLAGS)) { |
750 | if (!(p->cs_flags & RADEON_CS_KEEP_TILING_FLAGS)) { |
751 | r = r100_cs_packet_next_reloc(p, &reloc); |
751 | r = radeon_cs_packet_next_reloc(p, &reloc, 0); |
752 | if (r) { |
752 | if (r) { |
753 | DRM_ERROR("No reloc for ib[%d]=0x%04X\n", |
753 | DRM_ERROR("No reloc for ib[%d]=0x%04X\n", |
754 | idx, reg); |
754 | idx, reg); |
755 | r100_cs_dump_packet(p, pkt); |
755 | radeon_cs_dump_packet(p, pkt); |
756 | return r; |
756 | return r; |
757 | } |
757 | } |
Line 758... | Line 758... | ||
758 | 758 | ||
759 | if (reloc->lobj.tiling_flags & RADEON_TILING_MACRO) |
759 | if (reloc->lobj.tiling_flags & RADEON_TILING_MACRO) |
Line 831... | Line 831... | ||
831 | track->zb_dirty = true; |
831 | track->zb_dirty = true; |
832 | break; |
832 | break; |
833 | case 0x4F24: |
833 | case 0x4F24: |
834 | /* ZB_DEPTHPITCH */ |
834 | /* ZB_DEPTHPITCH */ |
835 | if (!(p->cs_flags & RADEON_CS_KEEP_TILING_FLAGS)) { |
835 | if (!(p->cs_flags & RADEON_CS_KEEP_TILING_FLAGS)) { |
836 | r = r100_cs_packet_next_reloc(p, &reloc); |
836 | r = radeon_cs_packet_next_reloc(p, &reloc, 0); |
837 | if (r) { |
837 | if (r) { |
838 | DRM_ERROR("No reloc for ib[%d]=0x%04X\n", |
838 | DRM_ERROR("No reloc for ib[%d]=0x%04X\n", |
839 | idx, reg); |
839 | idx, reg); |
840 | r100_cs_dump_packet(p, pkt); |
840 | radeon_cs_dump_packet(p, pkt); |
841 | return r; |
841 | return r; |
842 | } |
842 | } |
Line 843... | Line 843... | ||
843 | 843 | ||
844 | if (reloc->lobj.tiling_flags & RADEON_TILING_MACRO) |
844 | if (reloc->lobj.tiling_flags & RADEON_TILING_MACRO) |
Line 1046... | Line 1046... | ||
1046 | tmp = (idx_value >> 22) & 0xF; |
1046 | tmp = (idx_value >> 22) & 0xF; |
1047 | track->textures[i].txdepth = tmp; |
1047 | track->textures[i].txdepth = tmp; |
1048 | track->tex_dirty = true; |
1048 | track->tex_dirty = true; |
1049 | break; |
1049 | break; |
1050 | case R300_ZB_ZPASS_ADDR: |
1050 | case R300_ZB_ZPASS_ADDR: |
1051 | r = r100_cs_packet_next_reloc(p, &reloc); |
1051 | r = radeon_cs_packet_next_reloc(p, &reloc, 0); |
1052 | if (r) { |
1052 | if (r) { |
1053 | DRM_ERROR("No reloc for ib[%d]=0x%04X\n", |
1053 | DRM_ERROR("No reloc for ib[%d]=0x%04X\n", |
1054 | idx, reg); |
1054 | idx, reg); |
1055 | r100_cs_dump_packet(p, pkt); |
1055 | radeon_cs_dump_packet(p, pkt); |
1056 | return r; |
1056 | return r; |
1057 | } |
1057 | } |
1058 | ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset); |
1058 | ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset); |
1059 | break; |
1059 | break; |
1060 | case 0x4e0c: |
1060 | case 0x4e0c: |
Line 1088... | Line 1088... | ||
1088 | /* RB3D_BLENDCNTL */ |
1088 | /* RB3D_BLENDCNTL */ |
1089 | track->blend_read_enable = !!(idx_value & (1 << 2)); |
1089 | track->blend_read_enable = !!(idx_value & (1 << 2)); |
1090 | track->cb_dirty = true; |
1090 | track->cb_dirty = true; |
1091 | break; |
1091 | break; |
1092 | case R300_RB3D_AARESOLVE_OFFSET: |
1092 | case R300_RB3D_AARESOLVE_OFFSET: |
1093 | r = r100_cs_packet_next_reloc(p, &reloc); |
1093 | r = radeon_cs_packet_next_reloc(p, &reloc, 0); |
1094 | if (r) { |
1094 | if (r) { |
1095 | DRM_ERROR("No reloc for ib[%d]=0x%04X\n", |
1095 | DRM_ERROR("No reloc for ib[%d]=0x%04X\n", |
1096 | idx, reg); |
1096 | idx, reg); |
1097 | r100_cs_dump_packet(p, pkt); |
1097 | radeon_cs_dump_packet(p, pkt); |
1098 | return r; |
1098 | return r; |
1099 | } |
1099 | } |
1100 | track->aa.robj = reloc->robj; |
1100 | track->aa.robj = reloc->robj; |
1101 | track->aa.offset = idx_value; |
1101 | track->aa.offset = idx_value; |
1102 | track->aa_dirty = true; |
1102 | track->aa_dirty = true; |
Line 1157... | Line 1157... | ||
1157 | r = r100_packet3_load_vbpntr(p, pkt, idx); |
1157 | r = r100_packet3_load_vbpntr(p, pkt, idx); |
1158 | if (r) |
1158 | if (r) |
1159 | return r; |
1159 | return r; |
1160 | break; |
1160 | break; |
1161 | case PACKET3_INDX_BUFFER: |
1161 | case PACKET3_INDX_BUFFER: |
1162 | r = r100_cs_packet_next_reloc(p, &reloc); |
1162 | r = radeon_cs_packet_next_reloc(p, &reloc, 0); |
1163 | if (r) { |
1163 | if (r) { |
1164 | DRM_ERROR("No reloc for packet3 %d\n", pkt->opcode); |
1164 | DRM_ERROR("No reloc for packet3 %d\n", pkt->opcode); |
1165 | r100_cs_dump_packet(p, pkt); |
1165 | radeon_cs_dump_packet(p, pkt); |
1166 | return r; |
1166 | return r; |
1167 | } |
1167 | } |
1168 | ib[idx+1] = radeon_get_ib_value(p, idx + 1) + ((u32)reloc->lobj.gpu_offset); |
1168 | ib[idx+1] = radeon_get_ib_value(p, idx + 1) + ((u32)reloc->lobj.gpu_offset); |
1169 | r = r100_cs_track_check_pkt3_indx_buffer(p, pkt, reloc->robj); |
1169 | r = r100_cs_track_check_pkt3_indx_buffer(p, pkt, reloc->robj); |
1170 | if (r) { |
1170 | if (r) { |
Line 1258... | Line 1258... | ||
1258 | if (track == NULL) |
1258 | if (track == NULL) |
1259 | return -ENOMEM; |
1259 | return -ENOMEM; |
1260 | r100_cs_track_clear(p->rdev, track); |
1260 | r100_cs_track_clear(p->rdev, track); |
1261 | p->track = track; |
1261 | p->track = track; |
1262 | do { |
1262 | do { |
1263 | r = r100_cs_packet_parse(p, &pkt, p->idx); |
1263 | r = radeon_cs_packet_parse(p, &pkt, p->idx); |
1264 | if (r) { |
1264 | if (r) { |
1265 | return r; |
1265 | return r; |
1266 | } |
1266 | } |
1267 | p->idx += pkt.count + 2; |
1267 | p->idx += pkt.count + 2; |
1268 | switch (pkt.type) { |
1268 | switch (pkt.type) { |
1269 | case PACKET_TYPE0: |
1269 | case RADEON_PACKET_TYPE0: |
1270 | r = r100_cs_parse_packet0(p, &pkt, |
1270 | r = r100_cs_parse_packet0(p, &pkt, |
1271 | p->rdev->config.r300.reg_safe_bm, |
1271 | p->rdev->config.r300.reg_safe_bm, |
1272 | p->rdev->config.r300.reg_safe_bm_size, |
1272 | p->rdev->config.r300.reg_safe_bm_size, |
1273 | &r300_packet0_check); |
1273 | &r300_packet0_check); |
1274 | break; |
1274 | break; |
1275 | case PACKET_TYPE2: |
1275 | case RADEON_PACKET_TYPE2: |
1276 | break; |
1276 | break; |
1277 | case PACKET_TYPE3: |
1277 | case RADEON_PACKET_TYPE3: |
1278 | r = r300_packet3_check(p, &pkt); |
1278 | r = r300_packet3_check(p, &pkt); |
1279 | break; |
1279 | break; |
1280 | default: |
1280 | default: |
1281 | DRM_ERROR("Unknown packet type %d !\n", pkt.type); |
1281 | DRM_ERROR("Unknown packet type %d !\n", pkt.type); |
1282 | return -EINVAL; |
1282 | return -EINVAL; |
Line 1385... | Line 1385... | ||
1385 | dev_err(rdev->dev, "failed initializing CP fences (%d).\n", r); |
1385 | dev_err(rdev->dev, "failed initializing CP fences (%d).\n", r); |
1386 | return r; |
1386 | return r; |
1387 | } |
1387 | } |
Line 1388... | Line 1388... | ||
1388 | 1388 | ||
- | 1389 | /* Enable IRQ */ |
|
- | 1390 | if (!rdev->irq.installed) { |
|
- | 1391 | r = radeon_irq_kms_init(rdev); |
|
- | 1392 | if (r) |
|
- | 1393 | return r; |
|
- | 1394 | } |
|
1389 | /* Enable IRQ */ |
1395 | |
1390 | r100_irq_set(rdev); |
1396 | r100_irq_set(rdev); |
1391 | rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL); |
1397 | rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL); |
1392 | /* 1M ring buffer */ |
1398 | /* 1M ring buffer */ |
1393 | r = r100_cp_init(rdev, 1024 * 1024); |
1399 | r = r100_cp_init(rdev, 1024 * 1024); |
Line 1460... | Line 1466... | ||
1460 | r300_mc_init(rdev); |
1466 | r300_mc_init(rdev); |
1461 | /* Fence driver */ |
1467 | /* Fence driver */ |
1462 | r = radeon_fence_driver_init(rdev); |
1468 | r = radeon_fence_driver_init(rdev); |
1463 | if (r) |
1469 | if (r) |
1464 | return r; |
1470 | return r; |
1465 | r = radeon_irq_kms_init(rdev); |
- | |
1466 | if (r) |
- | |
1467 | return r; |
- | |
1468 | /* Memory manager */ |
1471 | /* Memory manager */ |
1469 | r = radeon_bo_init(rdev); |
1472 | r = radeon_bo_init(rdev); |
1470 | if (r) |
1473 | if (r) |
1471 | return r; |
1474 | return r; |
1472 | if (rdev->flags & RADEON_IS_PCIE) { |
1475 | if (rdev->flags & RADEON_IS_PCIE) { |