--- a/sys/dev/drm/radeon/r600_cs.c +++ b/sys/dev/drm/radeon/r600_cs.c @@ -65,14 +65,14 @@ u32 vgt_strmout_buffer_en; struct radeon_bo *vgt_strmout_bo[4]; u64 vgt_strmout_bo_mc[4]; /* unused */ - u32 vgt_strmout_bo_offset[4]; - u32 vgt_strmout_size[4]; + u64 vgt_strmout_bo_offset[4]; + u64 vgt_strmout_size[4]; u32 db_depth_control; u32 db_depth_info; u32 db_depth_size_idx; u32 db_depth_view; u32 db_depth_size; - u32 db_offset; + u64 db_offset; struct radeon_bo *db_bo; u64 db_bo_mc; bool sx_misc_kill_all_prims; @@ -1081,7 +1081,7 @@ return -EINVAL; } tmp = (reg - VGT_STRMOUT_BUFFER_BASE_0) / 16; - track->vgt_strmout_bo_offset[tmp] = radeon_get_ib_value(p, idx) << 8; + track->vgt_strmout_bo_offset[tmp] = (u64)radeon_get_ib_value(p, idx) << 8; ib[idx] += (u32)((reloc->gpu_offset >> 8) & 0xffffffff); track->vgt_strmout_bo[tmp] = reloc->robj; track->vgt_strmout_bo_mc[tmp] = reloc->gpu_offset; @@ -1093,7 +1093,7 @@ case VGT_STRMOUT_BUFFER_SIZE_3: tmp = (reg - VGT_STRMOUT_BUFFER_SIZE_0) / 16; /* size in register is DWs, convert to bytes */ - track->vgt_strmout_size[tmp] = radeon_get_ib_value(p, idx) * 4; + track->vgt_strmout_size[tmp] = (u64)radeon_get_ib_value(p, idx) * 4; track->streamout_dirty = true; break; case CP_COHER_BASE: @@ -1278,7 +1278,7 @@ return -EINVAL; } tmp = (reg - CB_COLOR0_BASE) / 4; - track->cb_color_bo_offset[tmp] = radeon_get_ib_value(p, idx) << 8; + track->cb_color_bo_offset[tmp] = (u64)radeon_get_ib_value(p, idx) << 8; ib[idx] += (u32)((reloc->gpu_offset >> 8) & 0xffffffff); track->cb_color_base_last[tmp] = ib[idx]; track->cb_color_bo[tmp] = reloc->robj; @@ -1292,7 +1292,7 @@ "0x%04X\n", reg); return -EINVAL; } - track->db_offset = radeon_get_ib_value(p, idx) << 8; + track->db_offset = (u64)radeon_get_ib_value(p, idx) << 8; ib[idx] += (u32)((reloc->gpu_offset >> 8) & 0xffffffff); track->db_bo = reloc->robj; track->db_bo_mc = reloc->gpu_offset; @@ -1305,7 +1305,7 @@ "0x%04X\n", reg); return -EINVAL; } - track->htile_offset = radeon_get_ib_value(p, idx) << 8; + track->htile_offset = (u64)radeon_get_ib_value(p, idx) << 8; ib[idx] += (u32)((reloc->gpu_offset >> 8) & 0xffffffff); track->htile_bo = reloc->robj; track->db_dirty = true;