diff options
author | Christian König <christian.koenig@amd.com> | 2016-01-31 05:00:41 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-02-10 14:17:14 -0500 |
commit | 7270f8391df1a0b68fb6bef416dd6d7d0634ed71 (patch) | |
tree | 0014d059c85e16393fdd549ff11ffb708cd3f155 /drivers | |
parent | b6ea2f37a222c9d04725188a9751f21ee07eab2e (diff) |
drm/amdgpu: add amdgpu_set_ib_value helper (v2)
And use it in UVD/VCE command patching.
v2: squash in Christian's fix
Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu.h | 10 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 5 |
3 files changed, 15 insertions, 8 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index f2f9b64d0141..4a6e87857875 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h | |||
@@ -1250,11 +1250,19 @@ struct amdgpu_job { | |||
1250 | #define to_amdgpu_job(sched_job) \ | 1250 | #define to_amdgpu_job(sched_job) \ |
1251 | container_of((sched_job), struct amdgpu_job, base) | 1251 | container_of((sched_job), struct amdgpu_job, base) |
1252 | 1252 | ||
1253 | static inline u32 amdgpu_get_ib_value(struct amdgpu_cs_parser *p, uint32_t ib_idx, int idx) | 1253 | static inline u32 amdgpu_get_ib_value(struct amdgpu_cs_parser *p, |
1254 | uint32_t ib_idx, int idx) | ||
1254 | { | 1255 | { |
1255 | return p->ibs[ib_idx].ptr[idx]; | 1256 | return p->ibs[ib_idx].ptr[idx]; |
1256 | } | 1257 | } |
1257 | 1258 | ||
1259 | static inline void amdgpu_set_ib_value(struct amdgpu_cs_parser *p, | ||
1260 | uint32_t ib_idx, int idx, | ||
1261 | uint32_t value) | ||
1262 | { | ||
1263 | p->ibs[ib_idx].ptr[idx] = value; | ||
1264 | } | ||
1265 | |||
1258 | /* | 1266 | /* |
1259 | * Writeback | 1267 | * Writeback |
1260 | */ | 1268 | */ |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c index 72193f1c8e99..676ef699b6ad 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | |||
@@ -616,7 +616,6 @@ static int amdgpu_uvd_cs_pass2(struct amdgpu_uvd_cs_ctx *ctx) | |||
616 | { | 616 | { |
617 | struct amdgpu_bo_va_mapping *mapping; | 617 | struct amdgpu_bo_va_mapping *mapping; |
618 | struct amdgpu_bo *bo; | 618 | struct amdgpu_bo *bo; |
619 | struct amdgpu_ib *ib; | ||
620 | uint32_t cmd, lo, hi; | 619 | uint32_t cmd, lo, hi; |
621 | uint64_t start, end; | 620 | uint64_t start, end; |
622 | uint64_t addr; | 621 | uint64_t addr; |
@@ -638,9 +637,10 @@ static int amdgpu_uvd_cs_pass2(struct amdgpu_uvd_cs_ctx *ctx) | |||
638 | addr -= ((uint64_t)mapping->it.start) * AMDGPU_GPU_PAGE_SIZE; | 637 | addr -= ((uint64_t)mapping->it.start) * AMDGPU_GPU_PAGE_SIZE; |
639 | start += addr; | 638 | start += addr; |
640 | 639 | ||
641 | ib = &ctx->parser->ibs[ctx->ib_idx]; | 640 | amdgpu_set_ib_value(ctx->parser, ctx->ib_idx, ctx->data0, |
642 | ib->ptr[ctx->data0] = start & 0xFFFFFFFF; | 641 | lower_32_bits(start)); |
643 | ib->ptr[ctx->data1] = start >> 32; | 642 | amdgpu_set_ib_value(ctx->parser, ctx->ib_idx, ctx->data1, |
643 | upper_32_bits(start)); | ||
644 | 644 | ||
645 | cmd = amdgpu_get_ib_value(ctx->parser, ctx->ib_idx, ctx->idx) >> 1; | 645 | cmd = amdgpu_get_ib_value(ctx->parser, ctx->ib_idx, ctx->idx) >> 1; |
646 | if (cmd < 0x4) { | 646 | if (cmd < 0x4) { |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c index c90517f61210..43aad45969a7 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | |||
@@ -519,7 +519,6 @@ static int amdgpu_vce_cs_reloc(struct amdgpu_cs_parser *p, uint32_t ib_idx, | |||
519 | int lo, int hi, unsigned size, uint32_t index) | 519 | int lo, int hi, unsigned size, uint32_t index) |
520 | { | 520 | { |
521 | struct amdgpu_bo_va_mapping *mapping; | 521 | struct amdgpu_bo_va_mapping *mapping; |
522 | struct amdgpu_ib *ib = &p->ibs[ib_idx]; | ||
523 | struct amdgpu_bo *bo; | 522 | struct amdgpu_bo *bo; |
524 | uint64_t addr; | 523 | uint64_t addr; |
525 | 524 | ||
@@ -548,8 +547,8 @@ static int amdgpu_vce_cs_reloc(struct amdgpu_cs_parser *p, uint32_t ib_idx, | |||
548 | addr += amdgpu_bo_gpu_offset(bo); | 547 | addr += amdgpu_bo_gpu_offset(bo); |
549 | addr -= ((uint64_t)size) * ((uint64_t)index); | 548 | addr -= ((uint64_t)size) * ((uint64_t)index); |
550 | 549 | ||
551 | ib->ptr[lo] = addr & 0xFFFFFFFF; | 550 | amdgpu_set_ib_value(p, ib_idx, lo, lower_32_bits(addr)); |
552 | ib->ptr[hi] = addr >> 32; | 551 | amdgpu_set_ib_value(p, ib_idx, hi, upper_32_bits(addr)); |
553 | 552 | ||
554 | return 0; | 553 | return 0; |
555 | } | 554 | } |