[PATCH 1/6] drm/amd: Add SDMA functions to kfd-->kgd interface

Oded Gabbay oded.gabbay at amd.com
Sun Dec 14 06:55:07 PST 2014


From: Ben Goz <ben.goz at amd.com>

This patch adds four new functions to the kfd2kgd interface:

1. init_sdma_engines() - Initializes the SDMA engines through GPU registers.

2. hqd_sdma_load() - Loads SDMA mqd to a H/W SDMA hqd slot. Used only in no HWS
                     mode.

3. hqd_sdma_is_occupied() - Checks if an SDMA hqd slot is occupied. Used only
                            in no HWS mode.

4. hqd_sdma_destroy() - Destructs and preempts the SDMA queue assigned to
                        that SDMA hqd slot. Used only in no HWS mode.

These functions are needed to support SDMA queues scheduling.

Signed-off-by: Ben Goz <ben.goz at amd.com>
Reviewed-by: Oded Gabbay <oded.gabbay at amd.com>
---
 drivers/gpu/drm/amd/include/kgd_kfd_interface.h | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
index 47b5519..3da21e7 100644
--- a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
+++ b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
@@ -141,13 +141,23 @@ struct kgd2kfd_calls {
  *
  * @init_pipeline: Initialized the compute pipelines.
  *
+ * @init_sdma_engines: Initialize the sdma engines.
+ *
  * @hqd_load: Loads the mqd structure to a H/W hqd slot. used only for no cp
  * sceduling mode.
  *
+ * @hqd_sdma_load: Loads the SDMA mqd structure to a H/W SDMA hqd slot.
+ * used only for no HWS mode.
+ *
  * @hqd_is_occupies: Checks if a hqd slot is occupied.
  *
  * @hqd_destroy: Destructs and preempts the queue assigned to that hqd slot.
  *
+ * @hqd_sdma_is_occupied: Checks if an SDMA hqd slot is occupied.
+ *
+ * @hqd_sdma_destroy: Destructs and preempts the SDMA queue assigned to that
+ * SDMA hqd slot.
+ *
  * @get_fw_version: Returns FW versions from the header
  *
  * This structure contains function pointers to services that the kgd driver
@@ -179,16 +189,19 @@ struct kfd2kgd_calls {
 	int (*init_memory)(struct kgd_dev *kgd);
 	int (*init_pipeline)(struct kgd_dev *kgd, uint32_t pipe_id,
 				uint32_t hpd_size, uint64_t hpd_gpu_addr);
-
+	int (*init_sdma_engines)(struct kgd_dev *kgd);
 	int (*hqd_load)(struct kgd_dev *kgd, void *mqd, uint32_t pipe_id,
 			uint32_t queue_id, uint32_t __user *wptr);
-
+	int (*hqd_sdma_load)(struct kgd_dev *kgd, void *mqd);
 	bool (*hqd_is_occupies)(struct kgd_dev *kgd, uint64_t queue_address,
 				uint32_t pipe_id, uint32_t queue_id);
 
 	int (*hqd_destroy)(struct kgd_dev *kgd, uint32_t reset_type,
 				unsigned int timeout, uint32_t pipe_id,
 				uint32_t queue_id);
+	bool (*hqd_sdma_is_occupied)(struct kgd_dev *kgd, void *mqd);
+	int (*hqd_sdma_destroy)(struct kgd_dev *kgd, void *mqd,
+				unsigned int timeout);
 	uint16_t (*get_fw_version)(struct kgd_dev *kgd,
 				enum kgd_engine_type type);
 };
-- 
1.9.1



More information about the dri-devel mailing list