drm/amd/amdgpu: Clean up gfx_v8_0_kiq_set_interrupt_state()
authorTom St Denis <tom.stdenis@amd.com>
Tue, 4 Apr 2017 13:14:13 +0000 (09:14 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 6 Apr 2017 17:26:47 +0000 (13:26 -0400)
Use new WREG32_FIELD_OFFSET() to clean up code.

Signed-off-by: Tom St Denis <tom.stdenis@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu.h
drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c

index cd573caa43ecd707bffd6c30c796052bf46680f8..9f244c39b65ae7647ca6a1444b09e9f96c697b6d 100644 (file)
@@ -1701,6 +1701,9 @@ void amdgpu_mm_wdoorbell64(struct amdgpu_device *adev, u32 index, u64 v);
 #define WREG32_FIELD(reg, field, val)  \
        WREG32(mm##reg, (RREG32(mm##reg) & ~REG_FIELD_MASK(reg, field)) | (val) << REG_FIELD_SHIFT(reg, field))
 
+#define WREG32_FIELD_OFFSET(reg, offset, field, val)   \
+       WREG32(mm##reg + offset, (RREG32(mm##reg + offset) & ~REG_FIELD_MASK(reg, field)) | (val) << REG_FIELD_SHIFT(reg, field))
+
 /*
  * BIOS helpers.
  */
index 2e0f5563557936bacb2ac0ea9f1d85bed5d221c8..8f30189e8a2a310b4a2df981781c12314fb88326 100644 (file)
@@ -6987,40 +6987,24 @@ static int gfx_v8_0_kiq_set_interrupt_state(struct amdgpu_device *adev,
                                            unsigned int type,
                                            enum amdgpu_interrupt_state state)
 {
-       uint32_t tmp, target;
        struct amdgpu_ring *ring = &(adev->gfx.kiq.ring);
 
        BUG_ON(ring->funcs->type != AMDGPU_RING_TYPE_KIQ);
 
-       if (ring->me == 1)
-               target = mmCP_ME1_PIPE0_INT_CNTL;
-       else
-               target = mmCP_ME2_PIPE0_INT_CNTL;
-       target += ring->pipe;
-
        switch (type) {
        case AMDGPU_CP_KIQ_IRQ_DRIVER0:
-               if (state == AMDGPU_IRQ_STATE_DISABLE) {
-                       tmp = RREG32(mmCPC_INT_CNTL);
-                       tmp = REG_SET_FIELD(tmp, CPC_INT_CNTL,
-                                                GENERIC2_INT_ENABLE, 0);
-                       WREG32(mmCPC_INT_CNTL, tmp);
-
-                       tmp = RREG32(target);
-                       tmp = REG_SET_FIELD(tmp, CP_ME2_PIPE0_INT_CNTL,
-                                                GENERIC2_INT_ENABLE, 0);
-                       WREG32(target, tmp);
-               } else {
-                       tmp = RREG32(mmCPC_INT_CNTL);
-                       tmp = REG_SET_FIELD(tmp, CPC_INT_CNTL,
-                                                GENERIC2_INT_ENABLE, 1);
-                       WREG32(mmCPC_INT_CNTL, tmp);
-
-                       tmp = RREG32(target);
-                       tmp = REG_SET_FIELD(tmp, CP_ME2_PIPE0_INT_CNTL,
-                                                GENERIC2_INT_ENABLE, 1);
-                       WREG32(target, tmp);
-               }
+               WREG32_FIELD(CPC_INT_CNTL, GENERIC2_INT_ENABLE,
+                            state == AMDGPU_IRQ_STATE_DISABLE ? 0 : 1);
+               if (ring->me == 1)
+                       WREG32_FIELD_OFFSET(CP_ME1_PIPE0_INT_CNTL,
+                                    ring->pipe,
+                                    GENERIC2_INT_ENABLE,
+                                    state == AMDGPU_IRQ_STATE_DISABLE ? 0 : 1);
+               else
+                       WREG32_FIELD_OFFSET(CP_ME2_PIPE0_INT_CNTL,
+                                    ring->pipe,
+                                    GENERIC2_INT_ENABLE,
+                                    state == AMDGPU_IRQ_STATE_DISABLE ? 0 : 1);
                break;
        default:
                BUG(); /* kiq only support GENERIC2_INT now */