drm/amdgpu: add amdgpu_set_ib_value helper (v2)
authorChristian König <christian.koenig@amd.com>
Sun, 31 Jan 2016 10:00:41 +0000 (11:00 +0100)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 10 Feb 2016 19:17:14 +0000 (14:17 -0500)
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>
drivers/gpu/drm/amd/amdgpu/amdgpu.h
drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c

index f2f9b64d014160eddb2dc40c22470d405fb69c22..4a6e87857875b414b16dd6dc1179ddc647c19e8e 100644 (file)
@@ -1250,11 +1250,19 @@ struct amdgpu_job {
 #define to_amdgpu_job(sched_job)               \
                container_of((sched_job), struct amdgpu_job, base)
 
-static inline u32 amdgpu_get_ib_value(struct amdgpu_cs_parser *p, uint32_t ib_idx, int idx)
+static inline u32 amdgpu_get_ib_value(struct amdgpu_cs_parser *p,
+                                     uint32_t ib_idx, int idx)
 {
        return p->ibs[ib_idx].ptr[idx];
 }
 
+static inline void amdgpu_set_ib_value(struct amdgpu_cs_parser *p,
+                                      uint32_t ib_idx, int idx,
+                                      uint32_t value)
+{
+       p->ibs[ib_idx].ptr[idx] = value;
+}
+
 /*
  * Writeback
  */
index 72193f1c8e99a40a21e9e7ad1ce12f646a9f49a1..676ef699b6adfe78acf9dbea1fb9f077315fac57 100644 (file)
@@ -616,7 +616,6 @@ static int amdgpu_uvd_cs_pass2(struct amdgpu_uvd_cs_ctx *ctx)
 {
        struct amdgpu_bo_va_mapping *mapping;
        struct amdgpu_bo *bo;
-       struct amdgpu_ib *ib;
        uint32_t cmd, lo, hi;
        uint64_t start, end;
        uint64_t addr;
@@ -638,9 +637,10 @@ static int amdgpu_uvd_cs_pass2(struct amdgpu_uvd_cs_ctx *ctx)
        addr -= ((uint64_t)mapping->it.start) * AMDGPU_GPU_PAGE_SIZE;
        start += addr;
 
-       ib = &ctx->parser->ibs[ctx->ib_idx];
-       ib->ptr[ctx->data0] = start & 0xFFFFFFFF;
-       ib->ptr[ctx->data1] = start >> 32;
+       amdgpu_set_ib_value(ctx->parser, ctx->ib_idx, ctx->data0,
+                           lower_32_bits(start));
+       amdgpu_set_ib_value(ctx->parser, ctx->ib_idx, ctx->data1,
+                           upper_32_bits(start));
 
        cmd = amdgpu_get_ib_value(ctx->parser, ctx->ib_idx, ctx->idx) >> 1;
        if (cmd < 0x4) {
index c90517f61210827492d4ed48eb87680620a659a1..43aad45969a7201506e5215bb4ba2576ef4edcfe 100644 (file)
@@ -519,7 +519,6 @@ static int amdgpu_vce_cs_reloc(struct amdgpu_cs_parser *p, uint32_t ib_idx,
                               int lo, int hi, unsigned size, uint32_t index)
 {
        struct amdgpu_bo_va_mapping *mapping;
-       struct amdgpu_ib *ib = &p->ibs[ib_idx];
        struct amdgpu_bo *bo;
        uint64_t addr;
 
@@ -548,8 +547,8 @@ static int amdgpu_vce_cs_reloc(struct amdgpu_cs_parser *p, uint32_t ib_idx,
        addr += amdgpu_bo_gpu_offset(bo);
        addr -= ((uint64_t)size) * ((uint64_t)index);
 
-       ib->ptr[lo] = addr & 0xFFFFFFFF;
-       ib->ptr[hi] = addr >> 32;
+       amdgpu_set_ib_value(p, ib_idx, lo, lower_32_bits(addr));
+       amdgpu_set_ib_value(p, ib_idx, hi, upper_32_bits(addr));
 
        return 0;
 }