aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2016-01-31 05:00:41 -0500
committerAlex Deucher <alexander.deucher@amd.com>2016-02-10 14:17:14 -0500
commit7270f8391df1a0b68fb6bef416dd6d7d0634ed71 (patch)
tree0014d059c85e16393fdd549ff11ffb708cd3f155 /drivers
parentb6ea2f37a222c9d04725188a9751f21ee07eab2e (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.h10
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c8
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c5
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
1253static inline u32 amdgpu_get_ib_value(struct amdgpu_cs_parser *p, uint32_t ib_idx, int idx) 1253static 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
1259static 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}