diff options
author | Andres Rodriguez <andresx7@gmail.com> | 2017-02-01 16:37:42 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-05-31 16:48:48 -0400 |
commit | 97bf47b21d593c92d8c89be159afccb5d6562279 (patch) | |
tree | 802b9233c96d9846da5d260d22d8c3ddc0f72a40 /drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | |
parent | 486d807cd9a95ea7ee71b2ddc610a09ecf715fb4 (diff) |
drm/amdgpu: unify MQD programming sequence for kfd and amdgpu v2
Use the same gfx_*_mqd_commit function for kfd and amdgpu codepaths.
This removes the last duplicates of this programming sequence.
v2: fix cp_hqd_pq_wptr value
Reviewed-by: Edward O'Callaghan <funfunctor@folklore1984.net>
Acked-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Andres Rodriguez <andresx7@gmail.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c index fdab3994d447..06d106eab441 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | |||
@@ -3067,12 +3067,29 @@ static void gfx_v7_0_mqd_init(struct amdgpu_device *adev, | |||
3067 | /* set the vmid for the queue */ | 3067 | /* set the vmid for the queue */ |
3068 | mqd->cp_hqd_vmid = 0; | 3068 | mqd->cp_hqd_vmid = 0; |
3069 | 3069 | ||
3070 | /* defaults */ | ||
3071 | mqd->cp_hqd_ib_control = RREG32(mmCP_HQD_IB_CONTROL); | ||
3072 | mqd->cp_hqd_ib_base_addr_lo = RREG32(mmCP_HQD_IB_BASE_ADDR); | ||
3073 | mqd->cp_hqd_ib_base_addr_hi = RREG32(mmCP_HQD_IB_BASE_ADDR_HI); | ||
3074 | mqd->cp_hqd_ib_rptr = RREG32(mmCP_HQD_IB_RPTR); | ||
3075 | mqd->cp_hqd_persistent_state = RREG32(mmCP_HQD_PERSISTENT_STATE); | ||
3076 | mqd->cp_hqd_sema_cmd = RREG32(mmCP_HQD_SEMA_CMD); | ||
3077 | mqd->cp_hqd_msg_type = RREG32(mmCP_HQD_MSG_TYPE); | ||
3078 | mqd->cp_hqd_atomic0_preop_lo = RREG32(mmCP_HQD_ATOMIC0_PREOP_LO); | ||
3079 | mqd->cp_hqd_atomic0_preop_hi = RREG32(mmCP_HQD_ATOMIC0_PREOP_HI); | ||
3080 | mqd->cp_hqd_atomic1_preop_lo = RREG32(mmCP_HQD_ATOMIC1_PREOP_LO); | ||
3081 | mqd->cp_hqd_atomic1_preop_hi = RREG32(mmCP_HQD_ATOMIC1_PREOP_HI); | ||
3082 | mqd->cp_hqd_pq_rptr = RREG32(mmCP_HQD_PQ_RPTR); | ||
3083 | mqd->cp_hqd_quantum = RREG32(mmCP_HQD_QUANTUM); | ||
3084 | mqd->cp_hqd_pipe_priority = RREG32(mmCP_HQD_PIPE_PRIORITY); | ||
3085 | mqd->cp_hqd_queue_priority = RREG32(mmCP_HQD_QUEUE_PRIORITY); | ||
3086 | mqd->cp_hqd_iq_rptr = RREG32(mmCP_HQD_IQ_RPTR); | ||
3087 | |||
3070 | /* activate the queue */ | 3088 | /* activate the queue */ |
3071 | mqd->cp_hqd_active = 1; | 3089 | mqd->cp_hqd_active = 1; |
3072 | } | 3090 | } |
3073 | 3091 | ||
3074 | static int gfx_v7_0_mqd_commit(struct amdgpu_device *adev, | 3092 | int gfx_v7_0_mqd_commit(struct amdgpu_device *adev, struct cik_mqd *mqd) |
3075 | struct cik_mqd *mqd) | ||
3076 | { | 3093 | { |
3077 | u32 tmp; | 3094 | u32 tmp; |
3078 | 3095 | ||
@@ -3096,6 +3113,23 @@ static int gfx_v7_0_mqd_commit(struct amdgpu_device *adev, | |||
3096 | WREG32(mmCP_HQD_PQ_WPTR, mqd->cp_hqd_pq_wptr); | 3113 | WREG32(mmCP_HQD_PQ_WPTR, mqd->cp_hqd_pq_wptr); |
3097 | WREG32(mmCP_HQD_VMID, mqd->cp_hqd_vmid); | 3114 | WREG32(mmCP_HQD_VMID, mqd->cp_hqd_vmid); |
3098 | 3115 | ||
3116 | WREG32(mmCP_HQD_IB_CONTROL, mqd->cp_hqd_ib_control); | ||
3117 | WREG32(mmCP_HQD_IB_BASE_ADDR, mqd->cp_hqd_ib_base_addr_lo); | ||
3118 | WREG32(mmCP_HQD_IB_BASE_ADDR_HI, mqd->cp_hqd_ib_base_addr_hi); | ||
3119 | WREG32(mmCP_HQD_IB_RPTR, mqd->cp_hqd_ib_rptr); | ||
3120 | WREG32(mmCP_HQD_PERSISTENT_STATE, mqd->cp_hqd_persistent_state); | ||
3121 | WREG32(mmCP_HQD_SEMA_CMD, mqd->cp_hqd_sema_cmd); | ||
3122 | WREG32(mmCP_HQD_MSG_TYPE, mqd->cp_hqd_msg_type); | ||
3123 | WREG32(mmCP_HQD_ATOMIC0_PREOP_LO, mqd->cp_hqd_atomic0_preop_lo); | ||
3124 | WREG32(mmCP_HQD_ATOMIC0_PREOP_HI, mqd->cp_hqd_atomic0_preop_hi); | ||
3125 | WREG32(mmCP_HQD_ATOMIC1_PREOP_LO, mqd->cp_hqd_atomic1_preop_lo); | ||
3126 | WREG32(mmCP_HQD_ATOMIC1_PREOP_HI, mqd->cp_hqd_atomic1_preop_hi); | ||
3127 | WREG32(mmCP_HQD_PQ_RPTR, mqd->cp_hqd_pq_rptr); | ||
3128 | WREG32(mmCP_HQD_QUANTUM, mqd->cp_hqd_quantum); | ||
3129 | WREG32(mmCP_HQD_PIPE_PRIORITY, mqd->cp_hqd_pipe_priority); | ||
3130 | WREG32(mmCP_HQD_QUEUE_PRIORITY, mqd->cp_hqd_queue_priority); | ||
3131 | WREG32(mmCP_HQD_IQ_RPTR, mqd->cp_hqd_iq_rptr); | ||
3132 | |||
3099 | /* activate the HQD */ | 3133 | /* activate the HQD */ |
3100 | WREG32(mmCP_HQD_ACTIVE, mqd->cp_hqd_active); | 3134 | WREG32(mmCP_HQD_ACTIVE, mqd->cp_hqd_active); |
3101 | 3135 | ||