freedreno: Replace OUT_RELOCD with permanently flagging shader BOs for it.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4967>
This commit is contained in:
Eric Anholt 2020-05-08 11:24:12 -07:00 committed by Marge Bot
parent 9d8d936dfc
commit 554b959df0
9 changed files with 14 additions and 12 deletions

View file

@ -168,7 +168,7 @@ cs_program_emit(struct fd_ringbuffer *ring, struct kernel *kernel)
CP_LOAD_STATE6_0_STATE_SRC(SS6_INDIRECT) |
CP_LOAD_STATE6_0_STATE_BLOCK(SB6_CS_SHADER) |
CP_LOAD_STATE6_0_NUM_UNIT(v->instrlen));
OUT_RELOCD(ring, v->bo, 0, 0, 0);
OUT_RELOC(ring, v->bo, 0, 0, 0);
}
static void

View file

@ -226,6 +226,12 @@ out_unlock:
return bo;
}
void
fd_bo_mark_for_dump(struct fd_bo *bo)
{
bo->flags |= FD_RELOC_DUMP;
}
uint64_t fd_bo_get_iova(struct fd_bo *bo)
{
return bo->iova;

View file

@ -157,6 +157,7 @@ struct fd_bo *fd_bo_from_handle(struct fd_device *dev,
uint32_t handle, uint32_t size);
struct fd_bo * fd_bo_from_name(struct fd_device *dev, uint32_t name);
struct fd_bo * fd_bo_from_dmabuf(struct fd_device *dev, int fd);
void fd_bo_mark_for_dump(struct fd_bo *bo);
uint64_t fd_bo_get_iova(struct fd_bo *bo);
struct fd_bo * fd_bo_ref(struct fd_bo *bo);
void fd_bo_del(struct fd_bo *bo);

View file

@ -264,13 +264,6 @@ OUT_RELOCW(struct fd_ringbuffer *ring, struct fd_bo *bo,
__out_reloc(ring, bo, offset, or, shift, FD_RELOC_WRITE);
}
static inline void
OUT_RELOCD(struct fd_ringbuffer *ring, struct fd_bo *bo,
uint32_t offset, uint64_t or, int32_t shift)
{
__out_reloc(ring, bo, offset, or, shift, FD_RELOC_DUMP);
}
static inline void
OUT_RB(struct fd_ringbuffer *ring, struct fd_ringbuffer *target)
{

View file

@ -171,6 +171,8 @@ assemble_variant(struct ir3_shader_variant *v)
DRM_FREEDRENO_GEM_CACHE_WCOMBINE |
DRM_FREEDRENO_GEM_TYPE_KMEM,
"%s:%s", ir3_shader_stage(v), info->name);
/* Always include shaders in kernel crash dumps. */
fd_bo_mark_for_dump(v->bo);
memcpy(fd_bo_map(v->bo), bin, sz);

View file

@ -85,7 +85,7 @@ emit_shader(struct fd_ringbuffer *ring, const struct ir3_shader_variant *so)
OUT_RING(ring, CP_LOAD_STATE_1_EXT_SRC_ADDR(0) |
CP_LOAD_STATE_1_STATE_TYPE(ST_SHADER));
} else {
OUT_RELOCD(ring, so->bo, 0,
OUT_RELOC(ring, so->bo, 0,
CP_LOAD_STATE_1_STATE_TYPE(ST_SHADER), 0);
}
for (i = 0; i < sz; i++) {

View file

@ -64,7 +64,7 @@ emit_shader(struct fd_ringbuffer *ring, const struct ir3_shader_variant *so)
OUT_RING(ring, CP_LOAD_STATE4_1_EXT_SRC_ADDR(0) |
CP_LOAD_STATE4_1_STATE_TYPE(ST4_SHADER));
} else {
OUT_RELOCD(ring, so->bo, 0,
OUT_RELOC(ring, so->bo, 0,
CP_LOAD_STATE4_1_STATE_TYPE(ST4_SHADER), 0);
}

View file

@ -68,7 +68,7 @@ fd5_emit_shader(struct fd_ringbuffer *ring, const struct ir3_shader_variant *so)
CP_LOAD_STATE4_1_STATE_TYPE(ST4_SHADER));
OUT_RING(ring, CP_LOAD_STATE4_2_EXT_SRC_ADDR_HI(0));
} else {
OUT_RELOCD(ring, so->bo, 0,
OUT_RELOC(ring, so->bo, 0,
CP_LOAD_STATE4_1_STATE_TYPE(ST4_SHADER), 0);
}

View file

@ -90,7 +90,7 @@ fd6_emit_shader(struct fd_ringbuffer *ring, const struct ir3_shader_variant *so)
CP_LOAD_STATE6_0_STATE_SRC(SS6_INDIRECT) |
CP_LOAD_STATE6_0_STATE_BLOCK(sb) |
CP_LOAD_STATE6_0_NUM_UNIT(so->instrlen));
OUT_RELOCD(ring, so->bo, 0, 0, 0);
OUT_RELOC(ring, so->bo, 0, 0, 0);
}
/* Add any missing varyings needed for stream-out. Otherwise varyings not