diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2017-03-23 02:16:07 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-03-29 23:54:13 -0400 |
commit | 345346108bdca312b3458374a7fac833490a1303 (patch) | |
tree | b71ea2e9f0300bfc7a5898e2aee5894505c57ad5 | |
parent | 015c23600a4dc9844c4a6195a343604bcc88ba01 (diff) |
drm/amdgpu/gfx8: store the eop gpu addr in the ring structure
Avoids passing around additional parameters during setup.
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 14 |
2 files changed, 7 insertions, 8 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h index 8103cba00e91..9bc453f1855c 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | |||
@@ -168,6 +168,7 @@ struct amdgpu_ring { | |||
168 | struct amdgpu_bo *mqd_obj; | 168 | struct amdgpu_bo *mqd_obj; |
169 | uint64_t mqd_gpu_addr; | 169 | uint64_t mqd_gpu_addr; |
170 | void *mqd_ptr; | 170 | void *mqd_ptr; |
171 | uint64_t eop_gpu_addr; | ||
171 | u32 doorbell_index; | 172 | u32 doorbell_index; |
172 | bool use_doorbell; | 173 | bool use_doorbell; |
173 | unsigned wptr_offs; | 174 | unsigned wptr_offs; |
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c index d66a061bfbe7..4241e3254d20 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | |||
@@ -1377,6 +1377,7 @@ static int gfx_v8_0_kiq_init_ring(struct amdgpu_device *adev, | |||
1377 | struct amdgpu_ring *ring, | 1377 | struct amdgpu_ring *ring, |
1378 | struct amdgpu_irq_src *irq) | 1378 | struct amdgpu_irq_src *irq) |
1379 | { | 1379 | { |
1380 | struct amdgpu_kiq *kiq = &adev->gfx.kiq; | ||
1380 | int r = 0; | 1381 | int r = 0; |
1381 | 1382 | ||
1382 | r = amdgpu_wb_get(adev, &adev->virt.reg_val_offs); | 1383 | r = amdgpu_wb_get(adev, &adev->virt.reg_val_offs); |
@@ -1396,6 +1397,7 @@ static int gfx_v8_0_kiq_init_ring(struct amdgpu_device *adev, | |||
1396 | } | 1397 | } |
1397 | 1398 | ||
1398 | ring->queue = 0; | 1399 | ring->queue = 0; |
1400 | ring->eop_gpu_addr = kiq->eop_gpu_addr; | ||
1399 | sprintf(ring->name, "kiq %d.%d.%d", ring->me, ring->pipe, ring->queue); | 1401 | sprintf(ring->name, "kiq %d.%d.%d", ring->me, ring->pipe, ring->queue); |
1400 | r = amdgpu_ring_init(adev, ring, 1024, | 1402 | r = amdgpu_ring_init(adev, ring, 1024, |
1401 | irq, AMDGPU_CP_KIQ_IRQ_DRIVER0); | 1403 | irq, AMDGPU_CP_KIQ_IRQ_DRIVER0); |
@@ -2153,6 +2155,7 @@ static int gfx_v8_0_sw_init(void *handle) | |||
2153 | ring->me = 1; /* first MEC */ | 2155 | ring->me = 1; /* first MEC */ |
2154 | ring->pipe = i / 8; | 2156 | ring->pipe = i / 8; |
2155 | ring->queue = i % 8; | 2157 | ring->queue = i % 8; |
2158 | ring->eop_gpu_addr = adev->gfx.mec.hpd_eop_gpu_addr + (i * MEC_HPD_SIZE); | ||
2156 | sprintf(ring->name, "comp_%d.%d.%d", ring->me, ring->pipe, ring->queue); | 2159 | sprintf(ring->name, "comp_%d.%d.%d", ring->me, ring->pipe, ring->queue); |
2157 | irq_type = AMDGPU_CP_IRQ_COMPUTE_MEC1_PIPE0_EOP + ring->pipe; | 2160 | irq_type = AMDGPU_CP_IRQ_COMPUTE_MEC1_PIPE0_EOP + ring->pipe; |
2158 | /* type-2 packets are deprecated on MEC, use type-3 instead */ | 2161 | /* type-2 packets are deprecated on MEC, use type-3 instead */ |
@@ -4692,8 +4695,7 @@ static void gfx_v8_0_map_queue_enable(struct amdgpu_ring *kiq_ring, | |||
4692 | } | 4695 | } |
4693 | 4696 | ||
4694 | static int gfx_v8_0_mqd_init(struct amdgpu_ring *ring, | 4697 | static int gfx_v8_0_mqd_init(struct amdgpu_ring *ring, |
4695 | struct vi_mqd *mqd, | 4698 | struct vi_mqd *mqd) |
4696 | uint64_t eop_gpu_addr) | ||
4697 | { | 4699 | { |
4698 | struct amdgpu_device *adev = ring->adev; | 4700 | struct amdgpu_device *adev = ring->adev; |
4699 | uint64_t hqd_gpu_addr, wb_gpu_addr, eop_base_addr; | 4701 | uint64_t hqd_gpu_addr, wb_gpu_addr, eop_base_addr; |
@@ -4707,7 +4709,7 @@ static int gfx_v8_0_mqd_init(struct amdgpu_ring *ring, | |||
4707 | mqd->compute_static_thread_mgmt_se3 = 0xffffffff; | 4709 | mqd->compute_static_thread_mgmt_se3 = 0xffffffff; |
4708 | mqd->compute_misc_reserved = 0x00000003; | 4710 | mqd->compute_misc_reserved = 0x00000003; |
4709 | 4711 | ||
4710 | eop_base_addr = eop_gpu_addr >> 8; | 4712 | eop_base_addr = ring->eop_gpu_addr >> 8; |
4711 | mqd->cp_hqd_eop_base_addr_lo = eop_base_addr; | 4713 | mqd->cp_hqd_eop_base_addr_lo = eop_base_addr; |
4712 | mqd->cp_hqd_eop_base_addr_hi = upper_32_bits(eop_base_addr); | 4714 | mqd->cp_hqd_eop_base_addr_hi = upper_32_bits(eop_base_addr); |
4713 | 4715 | ||
@@ -4906,16 +4908,12 @@ static int gfx_v8_0_kiq_init_queue(struct amdgpu_ring *ring, | |||
4906 | { | 4908 | { |
4907 | struct amdgpu_device *adev = ring->adev; | 4909 | struct amdgpu_device *adev = ring->adev; |
4908 | struct amdgpu_kiq *kiq = &adev->gfx.kiq; | 4910 | struct amdgpu_kiq *kiq = &adev->gfx.kiq; |
4909 | uint64_t eop_gpu_addr; | ||
4910 | bool is_kiq = (ring->funcs->type == AMDGPU_RING_TYPE_KIQ); | 4911 | bool is_kiq = (ring->funcs->type == AMDGPU_RING_TYPE_KIQ); |
4911 | int mqd_idx = AMDGPU_MAX_COMPUTE_RINGS; | 4912 | int mqd_idx = AMDGPU_MAX_COMPUTE_RINGS; |
4912 | 4913 | ||
4913 | if (is_kiq) { | 4914 | if (is_kiq) { |
4914 | eop_gpu_addr = kiq->eop_gpu_addr; | ||
4915 | gfx_v8_0_kiq_setting(&kiq->ring); | 4915 | gfx_v8_0_kiq_setting(&kiq->ring); |
4916 | } else { | 4916 | } else { |
4917 | eop_gpu_addr = adev->gfx.mec.hpd_eop_gpu_addr + | ||
4918 | ring->queue * MEC_HPD_SIZE; | ||
4919 | mqd_idx = ring - &adev->gfx.compute_ring[0]; | 4917 | mqd_idx = ring - &adev->gfx.compute_ring[0]; |
4920 | } | 4918 | } |
4921 | 4919 | ||
@@ -4923,7 +4921,7 @@ static int gfx_v8_0_kiq_init_queue(struct amdgpu_ring *ring, | |||
4923 | memset((void *)mqd, 0, sizeof(*mqd)); | 4921 | memset((void *)mqd, 0, sizeof(*mqd)); |
4924 | mutex_lock(&adev->srbm_mutex); | 4922 | mutex_lock(&adev->srbm_mutex); |
4925 | vi_srbm_select(adev, ring->me, ring->pipe, ring->queue, 0); | 4923 | vi_srbm_select(adev, ring->me, ring->pipe, ring->queue, 0); |
4926 | gfx_v8_0_mqd_init(ring, mqd, eop_gpu_addr); | 4924 | gfx_v8_0_mqd_init(ring, mqd); |
4927 | if (is_kiq) | 4925 | if (is_kiq) |
4928 | gfx_v8_0_kiq_init_register(ring, mqd); | 4926 | gfx_v8_0_kiq_init_register(ring, mqd); |
4929 | vi_srbm_select(adev, 0, 0, 0, 0); | 4927 | vi_srbm_select(adev, 0, 0, 0, 0); |