aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/r600_cs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/radeon/r600_cs.c')
-rw-r--r--drivers/gpu/drm/radeon/r600_cs.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/gpu/drm/radeon/r600_cs.c b/drivers/gpu/drm/radeon/r600_cs.c
index ac67d6488a95..00e69c585fbf 100644
--- a/drivers/gpu/drm/radeon/r600_cs.c
+++ b/drivers/gpu/drm/radeon/r600_cs.c
@@ -846,9 +846,9 @@ static inline int r600_cs_check_reg(struct radeon_cs_parser *p, u32 reg, u32 idx
846 "0x%04X\n", reg); 846 "0x%04X\n", reg);
847 return -EINVAL; 847 return -EINVAL;
848 } 848 }
849 tmp = (reg - CB_COLOR0_BASE) / 4;
849 track->cb_color_bo_offset[tmp] = radeon_get_ib_value(p, idx); 850 track->cb_color_bo_offset[tmp] = radeon_get_ib_value(p, idx);
850 ib[idx] += (u32)((reloc->lobj.gpu_offset >> 8) & 0xffffffff); 851 ib[idx] += (u32)((reloc->lobj.gpu_offset >> 8) & 0xffffffff);
851 tmp = (reg - CB_COLOR0_BASE) / 4;
852 track->cb_color_base_last[tmp] = ib[idx]; 852 track->cb_color_base_last[tmp] = ib[idx];
853 track->cb_color_bo[tmp] = reloc->robj; 853 track->cb_color_bo[tmp] = reloc->robj;
854 break; 854 break;
@@ -1324,6 +1324,8 @@ int r600_cs_parse(struct radeon_cs_parser *p)
1324 do { 1324 do {
1325 r = r600_cs_packet_parse(p, &pkt, p->idx); 1325 r = r600_cs_packet_parse(p, &pkt, p->idx);
1326 if (r) { 1326 if (r) {
1327 kfree(p->track);
1328 p->track = NULL;
1327 return r; 1329 return r;
1328 } 1330 }
1329 p->idx += pkt.count + 2; 1331 p->idx += pkt.count + 2;
@@ -1339,10 +1341,12 @@ int r600_cs_parse(struct radeon_cs_parser *p)
1339 default: 1341 default:
1340 DRM_ERROR("Unknown packet type %d !\n", pkt.type); 1342 DRM_ERROR("Unknown packet type %d !\n", pkt.type);
1341 kfree(p->track); 1343 kfree(p->track);
1344 p->track = NULL;
1342 return -EINVAL; 1345 return -EINVAL;
1343 } 1346 }
1344 if (r) { 1347 if (r) {
1345 kfree(p->track); 1348 kfree(p->track);
1349 p->track = NULL;
1346 return r; 1350 return r;
1347 } 1351 }
1348 } while (p->idx < p->chunks[p->chunk_ib_idx].length_dw); 1352 } while (p->idx < p->chunks[p->chunk_ib_idx].length_dw);
@@ -1353,6 +1357,7 @@ int r600_cs_parse(struct radeon_cs_parser *p)
1353 } 1357 }
1354#endif 1358#endif
1355 kfree(p->track); 1359 kfree(p->track);
1360 p->track = NULL;
1356 return 0; 1361 return 0;
1357} 1362}
1358 1363