Lines Matching refs:p
349 static int r600_cs_track_validate_cb(struct radeon_cs_parser *p, int i) in r600_cs_track_validate_cb() argument
351 struct r600_cs_track *track = p->track; in r600_cs_track_validate_cb()
356 volatile u32 *ib = p->ib.ptr; in r600_cs_track_validate_cb()
365 dev_warn(p->dev, "%s:%d cb invalid format %d for %d (0x%08X)\n", in r600_cs_track_validate_cb()
388 dev_warn(p->dev, "%s invalid tiling %d for %d (0x%08X)\n", __func__, in r600_cs_track_validate_cb()
406 dev_warn(p->dev, "%s invalid tiling %d for %d (0x%08X)\n", __func__, in r600_cs_track_validate_cb()
413 dev_warn(p->dev, "%s:%d cb pitch (%d, 0x%x, %d) invalid\n", in r600_cs_track_validate_cb()
418 dev_warn(p->dev, "%s:%d cb height (%d, 0x%x, %d) invalid\n", in r600_cs_track_validate_cb()
423 dev_warn(p->dev, "%s offset[%d] 0x%llx 0x%llx, %d not aligned\n", __func__, i, in r600_cs_track_validate_cb()
451 dev_warn(p->dev, "%s offset[%d] %d %llu %d %lu too big (%d %d) (%d %d %d)\n", in r600_cs_track_validate_cb()
482 dev_warn(p->dev, "%s FMASK_TILE_MAX too large " in r600_cs_track_validate_cb()
500 dev_warn(p->dev, "%s CMASK_BLOCK_MAX too large " in r600_cs_track_validate_cb()
510 dev_warn(p->dev, "%s invalid tile mode\n", __func__); in r600_cs_track_validate_cb()
516 static int r600_cs_track_validate_db(struct radeon_cs_parser *p) in r600_cs_track_validate_db() argument
518 struct r600_cs_track *track = p->track; in r600_cs_track_validate_db()
526 volatile u32 *ib = p->ib.ptr; in r600_cs_track_validate_db()
530 dev_warn(p->dev, "z/stencil with no depth buffer\n"); in r600_cs_track_validate_db()
548 dev_warn(p->dev, "z/stencil with invalid format %d\n", G_028010_FORMAT(track->db_depth_info)); in r600_cs_track_validate_db()
553 dev_warn(p->dev, "z/stencil buffer size not set\n"); in r600_cs_track_validate_db()
559 dev_warn(p->dev, "z/stencil buffer too small (0x%08X %d %d %ld)\n", in r600_cs_track_validate_db()
584 dev_warn(p->dev, "%s invalid tiling %d (0x%08X)\n", __func__, in r600_cs_track_validate_db()
597 dev_warn(p->dev, "%s invalid tiling %d (0x%08X)\n", __func__, in r600_cs_track_validate_db()
604 dev_warn(p->dev, "%s:%d db pitch (%d, 0x%x, %d) invalid\n", in r600_cs_track_validate_db()
609 dev_warn(p->dev, "%s:%d db height (%d, 0x%x, %d) invalid\n", in r600_cs_track_validate_db()
614 dev_warn(p->dev, "%s offset 0x%llx, 0x%llx, %d not aligned\n", __func__, in r600_cs_track_validate_db()
623 dev_warn(p->dev, "z/stencil buffer (%d) too small (0x%08X %d %d %d -> %u have %lu)\n", in r600_cs_track_validate_db()
637 dev_warn(p->dev, "%s:%d htile enabled without htile surface 0x%08x\n", in r600_cs_track_validate_db()
642 dev_warn(p->dev, "%s:%d htile can't be enabled with bogus db_depth_size 0x%08x\n", in r600_cs_track_validate_db()
681 dev_warn(p->dev, "%s:%d invalid num pipes %d\n", in r600_cs_track_validate_db()
694 dev_warn(p->dev, "%s:%d htile surface too small %ld for %ld (%d %d)\n", in r600_cs_track_validate_db()
705 static int r600_cs_track_check(struct radeon_cs_parser *p) in r600_cs_track_check() argument
707 struct r600_cs_track *track = p->track; in r600_cs_track_check()
712 if (p->rdev == NULL) in r600_cs_track_check()
729 dev_warn(p->dev, "No buffer for streamout %d\n", i); in r600_cs_track_check()
758 dev_warn(p->dev, "%s:%d mask 0x%08X | 0x%08X no cb for %d\n", in r600_cs_track_check()
763 r = r600_cs_track_validate_cb(p, i); in r600_cs_track_check()
776 r = r600_cs_track_validate_db(p); in r600_cs_track_check()
793 static int r600_cs_packet_parse_vline(struct radeon_cs_parser *p) in r600_cs_packet_parse_vline() argument
800 return r600_cs_common_vline_parse(p, vline_start_end, vline_status); in r600_cs_packet_parse_vline()
824 int r600_cs_common_vline_parse(struct radeon_cs_parser *p, in r600_cs_common_vline_parse() argument
836 ib = p->ib.ptr; in r600_cs_common_vline_parse()
839 r = radeon_cs_packet_parse(p, &wait_reg_mem, p->idx); in r600_cs_common_vline_parse()
850 wait_reg_mem_info = radeon_get_ib_value(p, wait_reg_mem.idx + 1); in r600_cs_common_vline_parse()
866 if ((radeon_get_ib_value(p, wait_reg_mem.idx + 2) << 2) != vline_status[0]) { in r600_cs_common_vline_parse()
871 if (radeon_get_ib_value(p, wait_reg_mem.idx + 5) != RADEON_VLINE_STAT) { in r600_cs_common_vline_parse()
877 r = radeon_cs_packet_parse(p, &p3reloc, p->idx + wait_reg_mem.count + 2); in r600_cs_common_vline_parse()
881 h_idx = p->idx - 2; in r600_cs_common_vline_parse()
882 p->idx += wait_reg_mem.count + 2; in r600_cs_common_vline_parse()
883 p->idx += p3reloc.count + 2; in r600_cs_common_vline_parse()
885 header = radeon_get_ib_value(p, h_idx); in r600_cs_common_vline_parse()
886 crtc_id = radeon_get_ib_value(p, h_idx + 2 + 7 + 1); in r600_cs_common_vline_parse()
889 crtc = drm_crtc_find(p->rdev->ddev, crtc_id); in r600_cs_common_vline_parse()
918 static int r600_packet0_check(struct radeon_cs_parser *p, in r600_packet0_check() argument
926 r = r600_cs_packet_parse_vline(p); in r600_packet0_check()
941 static int r600_cs_parse_packet0(struct radeon_cs_parser *p, in r600_cs_parse_packet0() argument
951 r = r600_packet0_check(p, pkt, idx, reg); in r600_cs_parse_packet0()
969 static int r600_cs_check_reg(struct radeon_cs_parser *p, u32 reg, u32 idx) in r600_cs_check_reg() argument
971 struct r600_cs_track *track = (struct r600_cs_track *)p->track; in r600_cs_check_reg()
978 dev_warn(p->dev, "forbidden register 0x%08x at %d\n", reg, idx); in r600_cs_check_reg()
984 ib = p->ib.ptr; in r600_cs_check_reg()
1017 r = radeon_cs_packet_next_reloc(p, &reloc, 0); in r600_cs_check_reg()
1019 dev_warn(p->dev, "bad SET_CONTEXT_REG " in r600_cs_check_reg()
1026 track->sq_config = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1029 track->db_depth_control = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1033 if (!(p->cs_flags & RADEON_CS_KEEP_TILING_FLAGS) && in r600_cs_check_reg()
1034 radeon_cs_packet_next_is_pkt3_nop(p)) { in r600_cs_check_reg()
1035 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_cs_check_reg()
1037 dev_warn(p->dev, "bad SET_CONTEXT_REG " in r600_cs_check_reg()
1041 track->db_depth_info = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1052 track->db_depth_info = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1057 track->db_depth_view = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1061 track->db_depth_size = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1066 track->vgt_strmout_en = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1070 track->vgt_strmout_buffer_en = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1077 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_cs_check_reg()
1079 dev_warn(p->dev, "bad SET_CONTEXT_REG " in r600_cs_check_reg()
1084 track->vgt_strmout_bo_offset[tmp] = radeon_get_ib_value(p, idx) << 8; in r600_cs_check_reg()
1096 track->vgt_strmout_size[tmp] = radeon_get_ib_value(p, idx) * 4; in r600_cs_check_reg()
1100 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_cs_check_reg()
1102 dev_warn(p->dev, "missing reloc for CP_COHER_BASE " in r600_cs_check_reg()
1109 track->cb_target_mask = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1113 track->cb_shader_mask = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1116 tmp = G_028C04_MSAA_NUM_SAMPLES(radeon_get_ib_value(p, idx)); in r600_cs_check_reg()
1122 tmp = G_028808_SPECIAL_OP(radeon_get_ib_value(p, idx)); in r600_cs_check_reg()
1134 if (!(p->cs_flags & RADEON_CS_KEEP_TILING_FLAGS) && in r600_cs_check_reg()
1135 radeon_cs_packet_next_is_pkt3_nop(p)) { in r600_cs_check_reg()
1136 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_cs_check_reg()
1138 dev_err(p->dev, "bad SET_CONTEXT_REG 0x%04X\n", reg); in r600_cs_check_reg()
1142 track->cb_color_info[tmp] = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1152 track->cb_color_info[tmp] = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1165 track->cb_color_view[tmp] = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1177 track->cb_color_size[tmp] = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1199 if (!radeon_cs_packet_next_is_pkt3_nop(p)) { in r600_cs_check_reg()
1201 …dev_err(p->dev, "Broken old userspace ? no cb_color0_base supplied before trying to write 0x%08X\n… in r600_cs_check_reg()
1208 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_cs_check_reg()
1210 dev_err(p->dev, "bad SET_CONTEXT_REG 0x%04X\n", reg); in r600_cs_check_reg()
1230 if (!radeon_cs_packet_next_is_pkt3_nop(p)) { in r600_cs_check_reg()
1232 …dev_err(p->dev, "Broken old userspace ? no cb_color0_base supplied before trying to write 0x%08X\n… in r600_cs_check_reg()
1239 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_cs_check_reg()
1241 dev_err(p->dev, "bad SET_CONTEXT_REG 0x%04X\n", reg); in r600_cs_check_reg()
1261 track->cb_color_mask[tmp] = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1274 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_cs_check_reg()
1276 dev_warn(p->dev, "bad SET_CONTEXT_REG " in r600_cs_check_reg()
1281 track->cb_color_bo_offset[tmp] = radeon_get_ib_value(p, idx) << 8; in r600_cs_check_reg()
1289 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_cs_check_reg()
1291 dev_warn(p->dev, "bad SET_CONTEXT_REG " in r600_cs_check_reg()
1295 track->db_offset = radeon_get_ib_value(p, idx) << 8; in r600_cs_check_reg()
1302 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_cs_check_reg()
1304 dev_warn(p->dev, "bad SET_CONTEXT_REG " in r600_cs_check_reg()
1308 track->htile_offset = radeon_get_ib_value(p, idx) << 8; in r600_cs_check_reg()
1314 track->htile_surface = radeon_get_ib_value(p, idx); in r600_cs_check_reg()
1372 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_cs_check_reg()
1374 dev_warn(p->dev, "bad SET_CONTEXT_REG " in r600_cs_check_reg()
1381 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_cs_check_reg()
1383 dev_warn(p->dev, "bad SET_CONFIG_REG " in r600_cs_check_reg()
1390 track->sx_misc_kill_all_prims = (radeon_get_ib_value(p, idx) & 0x1) != 0; in r600_cs_check_reg()
1393 dev_warn(p->dev, "forbidden register 0x%08x at %d\n", reg, idx); in r600_cs_check_reg()
1469 static int r600_check_texture_resource(struct radeon_cs_parser *p, u32 idx, in r600_check_texture_resource() argument
1476 struct r600_cs_track *track = p->track; in r600_check_texture_resource()
1487 if (p->rdev == NULL) in r600_check_texture_resource()
1494 word0 = radeon_get_ib_value(p, idx + 0); in r600_check_texture_resource()
1495 if (!(p->cs_flags & RADEON_CS_KEEP_TILING_FLAGS)) { in r600_check_texture_resource()
1501 word1 = radeon_get_ib_value(p, idx + 1); in r600_check_texture_resource()
1502 word2 = radeon_get_ib_value(p, idx + 2) << 8; in r600_check_texture_resource()
1503 word3 = radeon_get_ib_value(p, idx + 3) << 8; in r600_check_texture_resource()
1504 word4 = radeon_get_ib_value(p, idx + 4); in r600_check_texture_resource()
1505 word5 = radeon_get_ib_value(p, idx + 5); in r600_check_texture_resource()
1529 if (p->family >= CHIP_RV770) in r600_check_texture_resource()
1546 dev_warn(p->dev, "this kernel doesn't support %d texture dim\n", G_038000_DIM(word0)); in r600_check_texture_resource()
1549 if (!r600_fmt_is_valid_texture(format, p->family)) { in r600_check_texture_resource()
1550 dev_warn(p->dev, "%s:%d texture invalid format %d\n", in r600_check_texture_resource()
1557 dev_warn(p->dev, "%s:%d tex array mode (%d) invalid\n", in r600_check_texture_resource()
1565 dev_warn(p->dev, "%s:%d tex pitch (%d, 0x%x, %d) invalid\n", in r600_check_texture_resource()
1570 dev_warn(p->dev, "%s:%d tex base offset (0x%llx, 0x%llx, %d) invalid\n", in r600_check_texture_resource()
1575 dev_warn(p->dev, "%s:%d tex mip offset (0x%llx, 0x%llx, %d) invalid\n", in r600_check_texture_resource()
1581 dev_warn(p->dev, "texture blevel %d > llevel %d\n", in r600_check_texture_resource()
1595 dev_warn(p->dev, "texture bo too small ((%d %d) (%d %d) %d %d %d -> %d have %ld)\n", in r600_check_texture_resource()
1599 dev_warn(p->dev, "alignments %d %d %d %lld\n", pitch, pitch_align, height_align, base_align); in r600_check_texture_resource()
1610 static bool r600_is_safe_reg(struct radeon_cs_parser *p, u32 reg, u32 idx) in r600_is_safe_reg() argument
1616 dev_warn(p->dev, "forbidden register 0x%08x at %d\n", reg, idx); in r600_is_safe_reg()
1622 dev_warn(p->dev, "forbidden register 0x%08x at %d\n", reg, idx); in r600_is_safe_reg()
1626 static int r600_packet3_check(struct radeon_cs_parser *p, in r600_packet3_check() argument
1638 track = (struct r600_cs_track *)p->track; in r600_packet3_check()
1639 ib = p->ib.ptr; in r600_packet3_check()
1641 idx_value = radeon_get_ib_value(p, idx); in r600_packet3_check()
1655 tmp = radeon_get_ib_value(p, idx + 1); in r600_packet3_check()
1667 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_packet3_check()
1683 if (p->family >= CHIP_RV770 || pkt->count) { in r600_packet3_check()
1708 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_packet3_check()
1716 ((u64)(radeon_get_ib_value(p, idx+1) & 0xff) << 32); in r600_packet3_check()
1721 r = r600_cs_track_check(p); in r600_packet3_check()
1723 dev_warn(p->dev, "%s:%d invalid cmd stream\n", __func__, __LINE__); in r600_packet3_check()
1733 r = r600_cs_track_check(p); in r600_packet3_check()
1735 dev_warn(p->dev, "%s:%d invalid cmd stream %d\n", __func__, __LINE__, idx); in r600_packet3_check()
1745 r = r600_cs_track_check(p); in r600_packet3_check()
1747 dev_warn(p->dev, "%s:%d invalid cmd stream\n", __func__, __LINE__); in r600_packet3_check()
1760 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_packet3_check()
1767 (radeon_get_ib_value(p, idx+1) & 0xfffffff0) + in r600_packet3_check()
1768 ((u64)(radeon_get_ib_value(p, idx+2) & 0xff) << 32); in r600_packet3_check()
1785 command = radeon_get_ib_value(p, idx+4); in r600_packet3_check()
1797 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_packet3_check()
1803 tmp = radeon_get_ib_value(p, idx) + in r600_packet3_check()
1804 ((u64)(radeon_get_ib_value(p, idx+1) & 0xff) << 32); in r600_packet3_check()
1809 dev_warn(p->dev, "CP DMA src buffer too small (%llu %lu)\n", in r600_packet3_check()
1827 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_packet3_check()
1833 tmp = radeon_get_ib_value(p, idx+2) + in r600_packet3_check()
1834 ((u64)(radeon_get_ib_value(p, idx+3) & 0xff) << 32); in r600_packet3_check()
1839 dev_warn(p->dev, "CP DMA dst buffer too small (%llu %lu)\n", in r600_packet3_check()
1855 if (radeon_get_ib_value(p, idx + 1) != 0xffffffff || in r600_packet3_check()
1856 radeon_get_ib_value(p, idx + 2) != 0) { in r600_packet3_check()
1857 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_packet3_check()
1873 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_packet3_check()
1879 (radeon_get_ib_value(p, idx+1) & 0xfffffff8) + in r600_packet3_check()
1880 ((u64)(radeon_get_ib_value(p, idx+2) & 0xff) << 32); in r600_packet3_check()
1894 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_packet3_check()
1901 (radeon_get_ib_value(p, idx+1) & 0xfffffffc) + in r600_packet3_check()
1902 ((u64)(radeon_get_ib_value(p, idx+2) & 0xff) << 32); in r600_packet3_check()
1919 r = r600_cs_check_reg(p, reg, idx+1+i); in r600_packet3_check()
1935 r = r600_cs_check_reg(p, reg, idx+1+i); in r600_packet3_check()
1957 switch (G__SQ_VTX_CONSTANT_TYPE(radeon_get_ib_value(p, idx+(i*7)+6+1))) { in r600_packet3_check()
1960 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_packet3_check()
1966 if (!(p->cs_flags & RADEON_CS_KEEP_TILING_FLAGS)) { in r600_packet3_check()
1974 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_packet3_check()
1981 r = r600_check_texture_resource(p, idx+(i*7)+1, in r600_packet3_check()
1983 base_offset + radeon_get_ib_value(p, idx+1+(i*7)+2), in r600_packet3_check()
1984 mip_offset + radeon_get_ib_value(p, idx+1+(i*7)+3), in r600_packet3_check()
1995 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_packet3_check()
2000 offset = radeon_get_ib_value(p, idx+1+(i*7)+0); in r600_packet3_check()
2001 size = radeon_get_ib_value(p, idx+1+(i*7)+1) + 1; in r600_packet3_check()
2002 if (p->rdev && (size + offset) > radeon_bo_size(reloc->robj)) { in r600_packet3_check()
2004 dev_warn(p->dev, "vbo resource seems too big (%d) for the bo (%ld)\n", in r600_packet3_check()
2081 if (p->family < CHIP_RS780) { in r600_packet3_check()
2096 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_packet3_check()
2107 offset = radeon_get_ib_value(p, idx+1) << 8; in r600_packet3_check()
2123 if (p->family >= CHIP_RV770 || p->family == CHIP_R600) { in r600_packet3_check()
2140 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_packet3_check()
2145 offset = radeon_get_ib_value(p, idx+1); in r600_packet3_check()
2146 offset += ((u64)(radeon_get_ib_value(p, idx+2) & 0xff)) << 32; in r600_packet3_check()
2159 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_packet3_check()
2164 offset = radeon_get_ib_value(p, idx+3); in r600_packet3_check()
2165 offset += ((u64)(radeon_get_ib_value(p, idx+4) & 0xff)) << 32; in r600_packet3_check()
2184 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_packet3_check()
2189 offset = radeon_get_ib_value(p, idx+0); in r600_packet3_check()
2190 offset += ((u64)(radeon_get_ib_value(p, idx+1) & 0xff)) << 32UL; in r600_packet3_check()
2213 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_packet3_check()
2218 offset = radeon_get_ib_value(p, idx+1); in r600_packet3_check()
2219 offset += ((u64)(radeon_get_ib_value(p, idx+2) & 0xff)) << 32; in r600_packet3_check()
2230 reg = radeon_get_ib_value(p, idx+1) << 2; in r600_packet3_check()
2231 if (!r600_is_safe_reg(p, reg, idx+1)) in r600_packet3_check()
2237 r = radeon_cs_packet_next_reloc(p, &reloc, r600_nomm); in r600_packet3_check()
2242 offset = radeon_get_ib_value(p, idx+3); in r600_packet3_check()
2243 offset += ((u64)(radeon_get_ib_value(p, idx+4) & 0xff)) << 32; in r600_packet3_check()
2254 reg = radeon_get_ib_value(p, idx+3) << 2; in r600_packet3_check()
2255 if (!r600_is_safe_reg(p, reg, idx+3)) in r600_packet3_check()
2268 int r600_cs_parse(struct radeon_cs_parser *p) in r600_cs_parse() argument
2274 if (p->track == NULL) { in r600_cs_parse()
2280 if (p->rdev->family < CHIP_RV770) { in r600_cs_parse()
2281 track->npipes = p->rdev->config.r600.tiling_npipes; in r600_cs_parse()
2282 track->nbanks = p->rdev->config.r600.tiling_nbanks; in r600_cs_parse()
2283 track->group_size = p->rdev->config.r600.tiling_group_size; in r600_cs_parse()
2284 } else if (p->rdev->family <= CHIP_RV740) { in r600_cs_parse()
2285 track->npipes = p->rdev->config.rv770.tiling_npipes; in r600_cs_parse()
2286 track->nbanks = p->rdev->config.rv770.tiling_nbanks; in r600_cs_parse()
2287 track->group_size = p->rdev->config.rv770.tiling_group_size; in r600_cs_parse()
2289 p->track = track; in r600_cs_parse()
2292 r = radeon_cs_packet_parse(p, &pkt, p->idx); in r600_cs_parse()
2294 kfree(p->track); in r600_cs_parse()
2295 p->track = NULL; in r600_cs_parse()
2298 p->idx += pkt.count + 2; in r600_cs_parse()
2301 r = r600_cs_parse_packet0(p, &pkt); in r600_cs_parse()
2306 r = r600_packet3_check(p, &pkt); in r600_cs_parse()
2310 kfree(p->track); in r600_cs_parse()
2311 p->track = NULL; in r600_cs_parse()
2315 kfree(p->track); in r600_cs_parse()
2316 p->track = NULL; in r600_cs_parse()
2319 } while (p->idx < p->chunk_ib->length_dw); in r600_cs_parse()
2321 for (r = 0; r < p->ib.length_dw; r++) { in r600_cs_parse()
2322 printk(KERN_INFO "%05d 0x%08X\n", r, p->ib.ptr[r]); in r600_cs_parse()
2326 kfree(p->track); in r600_cs_parse()
2327 p->track = NULL; in r600_cs_parse()
2352 static int r600_cs_parser_relocs_legacy(struct radeon_cs_parser *p) in r600_cs_parser_relocs_legacy() argument
2354 if (p->chunk_relocs == NULL) { in r600_cs_parser_relocs_legacy()
2357 p->relocs = kzalloc(sizeof(struct radeon_bo_list), GFP_KERNEL); in r600_cs_parser_relocs_legacy()
2358 if (p->relocs == NULL) { in r600_cs_parser_relocs_legacy()
2437 int r600_dma_cs_next_reloc(struct radeon_cs_parser *p, in r600_dma_cs_next_reloc() argument
2444 if (p->chunk_relocs == NULL) { in r600_dma_cs_next_reloc()
2448 relocs_chunk = p->chunk_relocs; in r600_dma_cs_next_reloc()
2449 idx = p->dma_reloc_idx; in r600_dma_cs_next_reloc()
2450 if (idx >= p->nrelocs) { in r600_dma_cs_next_reloc()
2452 idx, p->nrelocs); in r600_dma_cs_next_reloc()
2455 *cs_reloc = &p->relocs[idx]; in r600_dma_cs_next_reloc()
2456 p->dma_reloc_idx++; in r600_dma_cs_next_reloc()
2473 int r600_dma_cs_parse(struct radeon_cs_parser *p) in r600_dma_cs_parse() argument
2475 struct radeon_cs_chunk *ib_chunk = p->chunk_ib; in r600_dma_cs_parse()
2478 volatile u32 *ib = p->ib.ptr; in r600_dma_cs_parse()
2484 if (p->idx >= ib_chunk->length_dw) { in r600_dma_cs_parse()
2486 p->idx, ib_chunk->length_dw); in r600_dma_cs_parse()
2489 idx = p->idx; in r600_dma_cs_parse()
2490 header = radeon_get_ib_value(p, idx); in r600_dma_cs_parse()
2497 r = r600_dma_cs_next_reloc(p, &dst_reloc); in r600_dma_cs_parse()
2503 dst_offset = radeon_get_ib_value(p, idx+1); in r600_dma_cs_parse()
2507 p->idx += count + 5; in r600_dma_cs_parse()
2509 dst_offset = radeon_get_ib_value(p, idx+1); in r600_dma_cs_parse()
2510 dst_offset |= ((u64)(radeon_get_ib_value(p, idx+2) & 0xff)) << 32; in r600_dma_cs_parse()
2514 p->idx += count + 3; in r600_dma_cs_parse()
2517 dev_warn(p->dev, "DMA write buffer too small (%llu %lu)\n", in r600_dma_cs_parse()
2523 r = r600_dma_cs_next_reloc(p, &src_reloc); in r600_dma_cs_parse()
2528 r = r600_dma_cs_next_reloc(p, &dst_reloc); in r600_dma_cs_parse()
2534 idx_value = radeon_get_ib_value(p, idx + 2); in r600_dma_cs_parse()
2538 src_offset = radeon_get_ib_value(p, idx+1); in r600_dma_cs_parse()
2542 dst_offset = radeon_get_ib_value(p, idx+5); in r600_dma_cs_parse()
2543 dst_offset |= ((u64)(radeon_get_ib_value(p, idx+6) & 0xff)) << 32; in r600_dma_cs_parse()
2548 src_offset = radeon_get_ib_value(p, idx+5); in r600_dma_cs_parse()
2549 src_offset |= ((u64)(radeon_get_ib_value(p, idx+6) & 0xff)) << 32; in r600_dma_cs_parse()
2553 dst_offset = radeon_get_ib_value(p, idx+1); in r600_dma_cs_parse()
2557 p->idx += 7; in r600_dma_cs_parse()
2559 if (p->family >= CHIP_RV770) { in r600_dma_cs_parse()
2560 src_offset = radeon_get_ib_value(p, idx+2); in r600_dma_cs_parse()
2561 src_offset |= ((u64)(radeon_get_ib_value(p, idx+4) & 0xff)) << 32; in r600_dma_cs_parse()
2562 dst_offset = radeon_get_ib_value(p, idx+1); in r600_dma_cs_parse()
2563 dst_offset |= ((u64)(radeon_get_ib_value(p, idx+3) & 0xff)) << 32; in r600_dma_cs_parse()
2569 p->idx += 5; in r600_dma_cs_parse()
2571 src_offset = radeon_get_ib_value(p, idx+2); in r600_dma_cs_parse()
2572 src_offset |= ((u64)(radeon_get_ib_value(p, idx+3) & 0xff)) << 32; in r600_dma_cs_parse()
2573 dst_offset = radeon_get_ib_value(p, idx+1); in r600_dma_cs_parse()
2574 dst_offset |= ((u64)(radeon_get_ib_value(p, idx+3) & 0xff0000)) << 16; in r600_dma_cs_parse()
2580 p->idx += 4; in r600_dma_cs_parse()
2584 dev_warn(p->dev, "DMA copy src buffer too small (%llu %lu)\n", in r600_dma_cs_parse()
2589 dev_warn(p->dev, "DMA write dst buffer too small (%llu %lu)\n", in r600_dma_cs_parse()
2595 if (p->family < CHIP_RV770) { in r600_dma_cs_parse()
2599 r = r600_dma_cs_next_reloc(p, &dst_reloc); in r600_dma_cs_parse()
2604 dst_offset = radeon_get_ib_value(p, idx+1); in r600_dma_cs_parse()
2605 dst_offset |= ((u64)(radeon_get_ib_value(p, idx+3) & 0x00ff0000)) << 16; in r600_dma_cs_parse()
2607 dev_warn(p->dev, "DMA constant fill buffer too small (%llu %lu)\n", in r600_dma_cs_parse()
2613 p->idx += 4; in r600_dma_cs_parse()
2616 p->idx += 1; in r600_dma_cs_parse()
2622 } while (p->idx < p->chunk_ib->length_dw); in r600_dma_cs_parse()
2624 for (r = 0; r < p->ib->length_dw; r++) { in r600_dma_cs_parse()
2625 printk(KERN_INFO "%05d 0x%08X\n", r, p->ib.ptr[r]); in r600_dma_cs_parse()