From: Felix Kuehling <felix.kuehling-5C7GfCeVMHo@public.gmane.org>
To: Andres Rodriguez
<andresx7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org
Cc: Alexander.Deucher-5C7GfCeVMHo@public.gmane.org,
jay-gJmSnxjMpeIFV7jr3Ov9Ew@public.gmane.org,
John.Bridgman-5C7GfCeVMHo@public.gmane.org
Subject: Re: [PATCH 05/13] drm/amdgpu: unify MQD programming sequence for kfd and amdgpu
Date: Mon, 6 Feb 2017 15:16:09 -0500 [thread overview]
Message-ID: <87993944-5fcf-1684-1003-366b15e735b8@amd.com> (raw)
In-Reply-To: <20170204045142.5596-6-andresx7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
[-- Attachment #1.1: Type: text/plain, Size: 14311 bytes --]
In the current KFD branch, we changed our equivalent of the MQD commit
function to copy most of the MQD registers in a loop and just update a
few registers manually to get the right programming sequence and work
around some HW errata. We were told that this is what the HW scheduler
does as well. You can see this on github:
https://github.com/RadeonOpenCompute/ROCK-Kernel-Driver/blob/roc-1.4.x/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c#L364
Regards,
Felix
On 17-02-03 11:51 PM, Andres Rodriguez wrote:
> Use the same gfx_*_mqd_commit function for kfd and amdgpu codepaths.
>
> This removes the last duplicates of this programming sequence.
>
> Signed-off-by: Andres Rodriguez <andresx7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c | 51 ++---------------------
> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c | 49 ++--------------------
> drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 38 ++++++++++++++++-
> drivers/gpu/drm/amd/amdgpu/gfx_v7_0.h | 5 +++
> drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 44 ++++++++++++++++++-
> drivers/gpu/drm/amd/amdgpu/gfx_v8_0.h | 5 +++
> 6 files changed, 97 insertions(+), 95 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
> index 1a0a5f7..038b7ea 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
> @@ -29,6 +29,7 @@
> #include "cikd.h"
> #include "cik_sdma.h"
> #include "amdgpu_ucode.h"
> +#include "gfx_v7_0.h"
> #include "gca/gfx_7_2_d.h"
> #include "gca/gfx_7_2_enum.h"
> #include "gca/gfx_7_2_sh_mask.h"
> @@ -309,55 +310,11 @@ static int kgd_hqd_load(struct kgd_dev *kgd, void *mqd, uint32_t pipe_id,
> m = get_mqd(mqd);
>
> is_wptr_shadow_valid = !get_user(wptr_shadow, wptr);
> -
> - acquire_queue(kgd, pipe_id, queue_id);
> - WREG32(mmCP_MQD_BASE_ADDR, m->cp_mqd_base_addr_lo);
> - WREG32(mmCP_MQD_BASE_ADDR_HI, m->cp_mqd_base_addr_hi);
> - WREG32(mmCP_MQD_CONTROL, m->cp_mqd_control);
> -
> - WREG32(mmCP_HQD_PQ_BASE, m->cp_hqd_pq_base_lo);
> - WREG32(mmCP_HQD_PQ_BASE_HI, m->cp_hqd_pq_base_hi);
> - WREG32(mmCP_HQD_PQ_CONTROL, m->cp_hqd_pq_control);
> -
> - WREG32(mmCP_HQD_IB_CONTROL, m->cp_hqd_ib_control);
> - WREG32(mmCP_HQD_IB_BASE_ADDR, m->cp_hqd_ib_base_addr_lo);
> - WREG32(mmCP_HQD_IB_BASE_ADDR_HI, m->cp_hqd_ib_base_addr_hi);
> -
> - WREG32(mmCP_HQD_IB_RPTR, m->cp_hqd_ib_rptr);
> -
> - WREG32(mmCP_HQD_PERSISTENT_STATE, m->cp_hqd_persistent_state);
> - WREG32(mmCP_HQD_SEMA_CMD, m->cp_hqd_sema_cmd);
> - WREG32(mmCP_HQD_MSG_TYPE, m->cp_hqd_msg_type);
> -
> - WREG32(mmCP_HQD_ATOMIC0_PREOP_LO, m->cp_hqd_atomic0_preop_lo);
> - WREG32(mmCP_HQD_ATOMIC0_PREOP_HI, m->cp_hqd_atomic0_preop_hi);
> - WREG32(mmCP_HQD_ATOMIC1_PREOP_LO, m->cp_hqd_atomic1_preop_lo);
> - WREG32(mmCP_HQD_ATOMIC1_PREOP_HI, m->cp_hqd_atomic1_preop_hi);
> -
> - WREG32(mmCP_HQD_PQ_RPTR_REPORT_ADDR, m->cp_hqd_pq_rptr_report_addr_lo);
> - WREG32(mmCP_HQD_PQ_RPTR_REPORT_ADDR_HI,
> - m->cp_hqd_pq_rptr_report_addr_hi);
> -
> - WREG32(mmCP_HQD_PQ_RPTR, m->cp_hqd_pq_rptr);
> -
> - WREG32(mmCP_HQD_PQ_WPTR_POLL_ADDR, m->cp_hqd_pq_wptr_poll_addr_lo);
> - WREG32(mmCP_HQD_PQ_WPTR_POLL_ADDR_HI, m->cp_hqd_pq_wptr_poll_addr_hi);
> -
> - WREG32(mmCP_HQD_PQ_DOORBELL_CONTROL, m->cp_hqd_pq_doorbell_control);
> -
> - WREG32(mmCP_HQD_VMID, m->cp_hqd_vmid);
> -
> - WREG32(mmCP_HQD_QUANTUM, m->cp_hqd_quantum);
> -
> - WREG32(mmCP_HQD_PIPE_PRIORITY, m->cp_hqd_pipe_priority);
> - WREG32(mmCP_HQD_QUEUE_PRIORITY, m->cp_hqd_queue_priority);
> -
> - WREG32(mmCP_HQD_IQ_RPTR, m->cp_hqd_iq_rptr);
> -
> if (is_wptr_shadow_valid)
> - WREG32(mmCP_HQD_PQ_WPTR, wptr_shadow);
> + m->cp_hqd_pq_wptr = wptr_shadow;
>
> - WREG32(mmCP_HQD_ACTIVE, m->cp_hqd_active);
> + acquire_queue(kgd, pipe_id, queue_id);
> + gfx_v7_0_mqd_commit(adev, m);
> release_queue(kgd);
>
> return 0;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
> index 6697612..2ecef3d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
> @@ -28,6 +28,7 @@
> #include "amdgpu.h"
> #include "amdgpu_amdkfd.h"
> #include "amdgpu_ucode.h"
> +#include "gfx_v8_0.h"
> #include "gca/gfx_8_0_sh_mask.h"
> #include "gca/gfx_8_0_d.h"
> #include "gca/gfx_8_0_enum.h"
> @@ -251,53 +252,11 @@ static int kgd_hqd_load(struct kgd_dev *kgd, void *mqd, uint32_t pipe_id,
> m = get_mqd(mqd);
>
> valid_wptr = copy_from_user(&shadow_wptr, wptr, sizeof(shadow_wptr));
> - acquire_queue(kgd, pipe_id, queue_id);
> -
> - WREG32(mmCP_MQD_CONTROL, m->cp_mqd_control);
> - WREG32(mmCP_MQD_BASE_ADDR, m->cp_mqd_base_addr_lo);
> - WREG32(mmCP_MQD_BASE_ADDR_HI, m->cp_mqd_base_addr_hi);
> -
> - WREG32(mmCP_HQD_VMID, m->cp_hqd_vmid);
> - WREG32(mmCP_HQD_PERSISTENT_STATE, m->cp_hqd_persistent_state);
> - WREG32(mmCP_HQD_PIPE_PRIORITY, m->cp_hqd_pipe_priority);
> - WREG32(mmCP_HQD_QUEUE_PRIORITY, m->cp_hqd_queue_priority);
> - WREG32(mmCP_HQD_QUANTUM, m->cp_hqd_quantum);
> - WREG32(mmCP_HQD_PQ_BASE, m->cp_hqd_pq_base_lo);
> - WREG32(mmCP_HQD_PQ_BASE_HI, m->cp_hqd_pq_base_hi);
> - WREG32(mmCP_HQD_PQ_RPTR_REPORT_ADDR, m->cp_hqd_pq_rptr_report_addr_lo);
> - WREG32(mmCP_HQD_PQ_RPTR_REPORT_ADDR_HI,
> - m->cp_hqd_pq_rptr_report_addr_hi);
> -
> if (valid_wptr > 0)
> - WREG32(mmCP_HQD_PQ_WPTR, shadow_wptr);
> -
> - WREG32(mmCP_HQD_PQ_CONTROL, m->cp_hqd_pq_control);
> - WREG32(mmCP_HQD_PQ_DOORBELL_CONTROL, m->cp_hqd_pq_doorbell_control);
> -
> - WREG32(mmCP_HQD_EOP_BASE_ADDR, m->cp_hqd_eop_base_addr_lo);
> - WREG32(mmCP_HQD_EOP_BASE_ADDR_HI, m->cp_hqd_eop_base_addr_hi);
> - WREG32(mmCP_HQD_EOP_CONTROL, m->cp_hqd_eop_control);
> - WREG32(mmCP_HQD_EOP_RPTR, m->cp_hqd_eop_rptr);
> - WREG32(mmCP_HQD_EOP_WPTR, m->cp_hqd_eop_wptr);
> - WREG32(mmCP_HQD_EOP_EVENTS, m->cp_hqd_eop_done_events);
> -
> - WREG32(mmCP_HQD_CTX_SAVE_BASE_ADDR_LO, m->cp_hqd_ctx_save_base_addr_lo);
> - WREG32(mmCP_HQD_CTX_SAVE_BASE_ADDR_HI, m->cp_hqd_ctx_save_base_addr_hi);
> - WREG32(mmCP_HQD_CTX_SAVE_CONTROL, m->cp_hqd_ctx_save_control);
> - WREG32(mmCP_HQD_CNTL_STACK_OFFSET, m->cp_hqd_cntl_stack_offset);
> - WREG32(mmCP_HQD_CNTL_STACK_SIZE, m->cp_hqd_cntl_stack_size);
> - WREG32(mmCP_HQD_WG_STATE_OFFSET, m->cp_hqd_wg_state_offset);
> - WREG32(mmCP_HQD_CTX_SAVE_SIZE, m->cp_hqd_ctx_save_size);
> -
> - WREG32(mmCP_HQD_IB_CONTROL, m->cp_hqd_ib_control);
> -
> - WREG32(mmCP_HQD_DEQUEUE_REQUEST, m->cp_hqd_dequeue_request);
> - WREG32(mmCP_HQD_ERROR, m->cp_hqd_error);
> - WREG32(mmCP_HQD_EOP_WPTR_MEM, m->cp_hqd_eop_wptr_mem);
> - WREG32(mmCP_HQD_EOP_DONES, m->cp_hqd_eop_dones);
> -
> - WREG32(mmCP_HQD_ACTIVE, m->cp_hqd_active);
> + m->cp_hqd_pq_wptr = valid_wptr;
>
> + acquire_queue(kgd, pipe_id, queue_id);
> + gfx_v8_0_mqd_commit(adev, mqd);
> release_queue(kgd);
>
> return 0;
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> index 4a279bb..d226804 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
> @@ -3038,12 +3038,29 @@ static void gfx_v7_0_mqd_init(struct amdgpu_device *adev,
> /* set the vmid for the queue */
> mqd->cp_hqd_vmid = 0;
>
> + /* defaults */
> + mqd->cp_hqd_ib_control = RREG32(mmCP_HQD_IB_CONTROL);
> + mqd->cp_hqd_ib_base_addr_lo = RREG32(mmCP_HQD_IB_BASE_ADDR);
> + mqd->cp_hqd_ib_base_addr_hi = RREG32(mmCP_HQD_IB_BASE_ADDR_HI);
> + mqd->cp_hqd_ib_rptr = RREG32(mmCP_HQD_IB_RPTR);
> + mqd->cp_hqd_persistent_state = RREG32(mmCP_HQD_PERSISTENT_STATE);
> + mqd->cp_hqd_sema_cmd = RREG32(mmCP_HQD_SEMA_CMD);
> + mqd->cp_hqd_msg_type = RREG32(mmCP_HQD_MSG_TYPE);
> + mqd->cp_hqd_atomic0_preop_lo = RREG32(mmCP_HQD_ATOMIC0_PREOP_LO);
> + mqd->cp_hqd_atomic0_preop_hi = RREG32(mmCP_HQD_ATOMIC0_PREOP_HI);
> + mqd->cp_hqd_atomic1_preop_lo = RREG32(mmCP_HQD_ATOMIC1_PREOP_LO);
> + mqd->cp_hqd_atomic1_preop_hi = RREG32(mmCP_HQD_ATOMIC1_PREOP_HI);
> + mqd->cp_hqd_pq_rptr = RREG32(mmCP_HQD_PQ_RPTR);
> + mqd->cp_hqd_quantum = RREG32(mmCP_HQD_QUANTUM);
> + mqd->cp_hqd_pipe_priority = RREG32(mmCP_HQD_PIPE_PRIORITY);
> + mqd->cp_hqd_queue_priority = RREG32(mmCP_HQD_QUEUE_PRIORITY);
> + mqd->cp_hqd_iq_rptr = RREG32(mmCP_HQD_IQ_RPTR);
> +
> /* activate the queue */
> mqd->cp_hqd_active = 1;
> }
>
> -static int gfx_v7_0_mqd_commit(struct amdgpu_device *adev,
> - struct cik_mqd *mqd)
> +int gfx_v7_0_mqd_commit(struct amdgpu_device *adev, struct cik_mqd *mqd)
> {
> u32 tmp;
>
> @@ -3067,6 +3084,23 @@ static int gfx_v7_0_mqd_commit(struct amdgpu_device *adev,
> WREG32(mmCP_HQD_PQ_WPTR, mqd->cp_hqd_pq_wptr);
> WREG32(mmCP_HQD_VMID, mqd->cp_hqd_vmid);
>
> + WREG32(mmCP_HQD_IB_CONTROL, mqd->cp_hqd_ib_control);
> + WREG32(mmCP_HQD_IB_BASE_ADDR, mqd->cp_hqd_ib_base_addr_lo);
> + WREG32(mmCP_HQD_IB_BASE_ADDR_HI, mqd->cp_hqd_ib_base_addr_hi);
> + WREG32(mmCP_HQD_IB_RPTR, mqd->cp_hqd_ib_rptr);
> + WREG32(mmCP_HQD_PERSISTENT_STATE, mqd->cp_hqd_persistent_state);
> + WREG32(mmCP_HQD_SEMA_CMD, mqd->cp_hqd_sema_cmd);
> + WREG32(mmCP_HQD_MSG_TYPE, mqd->cp_hqd_msg_type);
> + WREG32(mmCP_HQD_ATOMIC0_PREOP_LO, mqd->cp_hqd_atomic0_preop_lo);
> + WREG32(mmCP_HQD_ATOMIC0_PREOP_HI, mqd->cp_hqd_atomic0_preop_hi);
> + WREG32(mmCP_HQD_ATOMIC1_PREOP_LO, mqd->cp_hqd_atomic1_preop_lo);
> + WREG32(mmCP_HQD_ATOMIC1_PREOP_HI, mqd->cp_hqd_atomic1_preop_hi);
> + WREG32(mmCP_HQD_PQ_RPTR, mqd->cp_hqd_pq_rptr);
> + WREG32(mmCP_HQD_QUANTUM, mqd->cp_hqd_quantum);
> + WREG32(mmCP_HQD_PIPE_PRIORITY, mqd->cp_hqd_pipe_priority);
> + WREG32(mmCP_HQD_QUEUE_PRIORITY, mqd->cp_hqd_queue_priority);
> + WREG32(mmCP_HQD_IQ_RPTR, mqd->cp_hqd_iq_rptr);
> +
> /* activate the HQD */
> WREG32(mmCP_HQD_ACTIVE, mqd->cp_hqd_active);
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.h b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.h
> index 2f5164c..6fb9c15 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.h
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.h
> @@ -29,4 +29,9 @@ extern const struct amdgpu_ip_block_version gfx_v7_1_ip_block;
> extern const struct amdgpu_ip_block_version gfx_v7_2_ip_block;
> extern const struct amdgpu_ip_block_version gfx_v7_3_ip_block;
>
> +struct amdgpu_device;
> +struct cik_mqd;
> +
> +int gfx_v7_0_mqd_commit(struct amdgpu_device *adev, struct cik_mqd *mqd);
> +
> #endif
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> index 442cd66..7755d58 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
> @@ -4762,6 +4762,26 @@ static int gfx_v8_0_mqd_init(struct amdgpu_device *adev,
> tmp = REG_SET_FIELD(tmp, CP_HQD_PERSISTENT_STATE, PRELOAD_SIZE, 0x53);
> mqd->cp_hqd_persistent_state = tmp;
>
> + /* defaults */
> + mqd->cp_hqd_eop_rptr = RREG32(mmCP_HQD_EOP_RPTR);
> + mqd->cp_hqd_eop_wptr = RREG32(mmCP_HQD_EOP_WPTR);
> + mqd->cp_hqd_pipe_priority = RREG32(mmCP_HQD_PIPE_PRIORITY);
> + mqd->cp_hqd_queue_priority = RREG32(mmCP_HQD_QUEUE_PRIORITY);
> + mqd->cp_hqd_quantum = RREG32(mmCP_HQD_QUANTUM);
> + mqd->cp_hqd_ctx_save_base_addr_lo = RREG32(mmCP_HQD_CTX_SAVE_BASE_ADDR_LO);
> + mqd->cp_hqd_ctx_save_base_addr_hi = RREG32(mmCP_HQD_CTX_SAVE_BASE_ADDR_HI);
> + mqd->cp_hqd_ctx_save_control = RREG32(mmCP_HQD_CTX_SAVE_CONTROL);
> + mqd->cp_hqd_cntl_stack_offset = RREG32(mmCP_HQD_CNTL_STACK_OFFSET);
> + mqd->cp_hqd_cntl_stack_size = RREG32(mmCP_HQD_CNTL_STACK_SIZE);
> + mqd->cp_hqd_wg_state_offset = RREG32(mmCP_HQD_WG_STATE_OFFSET);
> + mqd->cp_hqd_ctx_save_size = RREG32(mmCP_HQD_CTX_SAVE_SIZE);
> + mqd->cp_hqd_ib_control = RREG32(mmCP_HQD_IB_CONTROL);
> + mqd->cp_hqd_eop_done_events = RREG32(mmCP_HQD_EOP_EVENTS);
> + mqd->cp_hqd_error = RREG32(mmCP_HQD_ERROR);
> + mqd->cp_hqd_eop_wptr_mem = RREG32(mmCP_HQD_EOP_WPTR_MEM);
> + mqd->cp_hqd_eop_dones = RREG32(mmCP_HQD_EOP_DONES);
> +
> +
> /* activate the queue */
> mqd->cp_hqd_active = 1;
>
> @@ -4815,7 +4835,7 @@ static void gfx_v8_0_enable_doorbell(struct amdgpu_device *adev, bool enable)
> adev->doorbell_enabled = true;
> }
>
> -static int gfx_v8_0_mqd_commit(struct amdgpu_device *adev, struct vi_mqd *mqd)
> +int gfx_v8_0_mqd_commit(struct amdgpu_device *adev, struct vi_mqd *mqd)
> {
> uint32_t tmp;
>
> @@ -4867,6 +4887,28 @@ static int gfx_v8_0_mqd_commit(struct amdgpu_device *adev, struct vi_mqd *mqd)
>
> /* reset read and write pointers, similar to CP_RB0_WPTR/_RPTR */
> WREG32(mmCP_HQD_PQ_WPTR, mqd->cp_hqd_pq_wptr);
> + WREG32(mmCP_HQD_EOP_RPTR, mqd->cp_hqd_eop_rptr);
> + WREG32(mmCP_HQD_EOP_WPTR, mqd->cp_hqd_eop_wptr);
> +
> + /* set the HQD priority */
> + WREG32(mmCP_HQD_PIPE_PRIORITY, mqd->cp_hqd_pipe_priority);
> + WREG32(mmCP_HQD_QUEUE_PRIORITY, mqd->cp_hqd_queue_priority);
> + WREG32(mmCP_HQD_QUANTUM, mqd->cp_hqd_quantum);
> +
> + /* set cwsr save area */
> + WREG32(mmCP_HQD_CTX_SAVE_BASE_ADDR_LO, mqd->cp_hqd_ctx_save_base_addr_lo);
> + WREG32(mmCP_HQD_CTX_SAVE_BASE_ADDR_HI, mqd->cp_hqd_ctx_save_base_addr_hi);
> + WREG32(mmCP_HQD_CTX_SAVE_CONTROL, mqd->cp_hqd_ctx_save_control);
> + WREG32(mmCP_HQD_CNTL_STACK_OFFSET, mqd->cp_hqd_cntl_stack_offset);
> + WREG32(mmCP_HQD_CNTL_STACK_SIZE, mqd->cp_hqd_cntl_stack_size);
> + WREG32(mmCP_HQD_WG_STATE_OFFSET, mqd->cp_hqd_wg_state_offset);
> + WREG32(mmCP_HQD_CTX_SAVE_SIZE, mqd->cp_hqd_ctx_save_size);
> +
> + WREG32(mmCP_HQD_IB_CONTROL, mqd->cp_hqd_ib_control);
> + WREG32(mmCP_HQD_EOP_EVENTS, mqd->cp_hqd_eop_done_events);
> + WREG32(mmCP_HQD_ERROR, mqd->cp_hqd_error);
> + WREG32(mmCP_HQD_EOP_WPTR_MEM, mqd->cp_hqd_eop_wptr_mem);
> + WREG32(mmCP_HQD_EOP_DONES, mqd->cp_hqd_eop_dones);
>
> /* set the vmid for the queue */
> WREG32(mmCP_HQD_VMID, mqd->cp_hqd_vmid);
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.h b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.h
> index 788cc3a..ec3f11f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.h
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.h
> @@ -27,4 +27,9 @@
> extern const struct amdgpu_ip_block_version gfx_v8_0_ip_block;
> extern const struct amdgpu_ip_block_version gfx_v8_1_ip_block;
>
> +struct amdgpu_device;
> +struct vi_mqd;
> +
> +int gfx_v8_0_mqd_commit(struct amdgpu_device *adev, struct vi_mqd *mqd);
> +
> #endif
[-- Attachment #1.2: Type: text/html, Size: 14890 bytes --]
[-- Attachment #2: Type: text/plain, Size: 154 bytes --]
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
next prev parent reply other threads:[~2017-02-06 20:16 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-04 4:51 Change queue/pipe split between amdkfd and amdgpu Andres Rodriguez
[not found] ` <20170204045142.5596-1-andresx7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-02-04 4:51 ` [PATCH 01/13] drm/amdgpu: refactor MQD/HQD initialization Andres Rodriguez
2017-02-04 4:51 ` [PATCH 02/13] drm/amdgpu: doorbell registers need only be set once Andres Rodriguez
[not found] ` <20170204045142.5596-3-andresx7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-02-06 8:31 ` Christian König
[not found] ` <7d85c562-5227-1fef-7b99-1f7543e6e69b-ANTagKRnAhcb1SvskN2V4Q@public.gmane.org>
2017-02-08 16:25 ` Andres Rodriguez
2017-02-04 4:51 ` [PATCH 03/13] drm/amdgpu: detect timeout error when deactivating hqd Andres Rodriguez
2017-02-04 4:51 ` [PATCH 04/13] drm/amdgpu: remove duplicate definition of cik_mqd Andres Rodriguez
2017-02-04 4:51 ` [PATCH 05/13] drm/amdgpu: unify MQD programming sequence for kfd and amdgpu Andres Rodriguez
[not found] ` <20170204045142.5596-6-andresx7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-02-06 20:16 ` Felix Kuehling [this message]
2017-02-04 4:51 ` [PATCH 06/13] drm/amdgpu: rename rdev to adev Andres Rodriguez
2017-02-04 4:51 ` [PATCH 07/13] drm/amdgpu: take ownership of per-pipe configuration Andres Rodriguez
2017-02-04 4:51 ` [PATCH 08/13] drm/radeon: take ownership of pipe initialization Andres Rodriguez
2017-02-04 4:51 ` [PATCH 09/13] drm/amdgpu: allow split of queues with kfd at queue granularity Andres Rodriguez
2017-02-04 4:51 ` [PATCH 10/13] drm/amdkfd: allow split HQD split on per-queue granularity Andres Rodriguez
2017-02-04 4:51 ` [PATCH 11/13] drm/amdgpu: remove duplicate magic constants from amdgpu_amdkfd_gfx*.c Andres Rodriguez
2017-02-04 4:51 ` [PATCH 12/13] drm/amdgpu: allocate queues horizontally across pipes Andres Rodriguez
2017-02-04 4:51 ` [PATCH 13/13] drm/amdgpu: new queue policy, take first 2 queues of each pipe Andres Rodriguez
[not found] ` <20170204045142.5596-14-andresx7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-02-04 12:08 ` Edward O'Callaghan
[not found] ` <86138a88-e90f-3234-7109-67ca0c427071-dczkZgxz+BNUPWh3PAxdjQ@public.gmane.org>
2017-02-06 8:35 ` Christian König
2017-02-06 20:20 ` Change queue/pipe split between amdkfd and amdgpu Felix Kuehling
[not found] ` <206b40fe-b958-8a78-623b-011712dc5ecc-5C7GfCeVMHo@public.gmane.org>
2017-02-08 16:23 ` Andres Rodriguez
[not found] ` <852b8cfe-d886-e78e-de6c-1641b107ed8f-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-02-08 19:32 ` Oded Gabbay
[not found] ` <CAFCwf10BboWSwU9HAMjryuLw2K2ANpjC8hGgGwkJh6z8K3pR4Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-02-08 19:47 ` Andres Rodriguez
[not found] ` <50aecc56-f080-d343-9e49-e3955ba1212e-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-02-09 20:11 ` Oded Gabbay
[not found] ` <CAFCwf10L8=mwxCup6-S5Yirxit8MJEZR=rhLPF3NVnotGCSYiQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-02-09 20:19 ` Andres Rodriguez
2017-02-09 20:38 ` Andres Rodriguez
[not found] ` <8e51b688-d978-d40f-8aa3-ae1090ab6a03-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-02-10 10:35 ` Oded Gabbay
[not found] ` <CAFCwf10agJ+C0X-jvPa5jSJcR--+u3-TC6LuVQwW1+o94uGonA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-02-10 16:33 ` Andres Rodriguez
[not found] ` <37bd1bf7-4db6-6004-f61d-5084efd1ec83-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-02-10 17:56 ` Oded Gabbay
[not found] ` <CAFCwf125SHM52z2UAp_Y0rRQe9UHpeWMDDpBkf1csPJyAgXTeA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-02-16 4:00 ` Bridgman, John
[not found] ` <BN6PR12MB1348C4F31B81516D5EAAFCA3E85A0-/b2+HYfkarQX0pEhCR5T8QdYzm3356FpvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2017-02-16 7:14 ` Edward O'Callaghan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87993944-5fcf-1684-1003-366b15e735b8@amd.com \
--to=felix.kuehling-5c7gfcevmho@public.gmane.org \
--cc=Alexander.Deucher-5C7GfCeVMHo@public.gmane.org \
--cc=John.Bridgman-5C7GfCeVMHo@public.gmane.org \
--cc=amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
--cc=andresx7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=jay-gJmSnxjMpeIFV7jr3Ov9Ew@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox