habanalabs: support fetching first available user CQ
authorOfir Bitton <obitton@habana.ai>
Wed, 27 Jan 2021 14:34:37 +0000 (16:34 +0200)
committerOded Gabbay <ogabbay@kernel.org>
Mon, 8 Feb 2021 16:20:08 +0000 (18:20 +0200)
User must be aware of the available CQs when it needs to use them.

Signed-off-by: Ofir Bitton <obitton@habana.ai>
Reviewed-by: Oded Gabbay <ogabbay@kernel.org>
Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
drivers/misc/habanalabs/common/habanalabs.h
drivers/misc/habanalabs/common/habanalabs_ioctl.c
drivers/misc/habanalabs/gaudi/gaudi.c
drivers/misc/habanalabs/goya/goya.c
include/uapi/misc/habanalabs.h

index 3c54010f7ab9ce9dc5cd1a15a5709a362e4a9307..98163317ec43462af213f2095c31920ae9f6dd38 100644 (file)
@@ -411,6 +411,7 @@ struct hl_mmu_properties {
  * @first_available_user_mon: first monitor available for the user
  * @first_available_user_msix_interrupt: first available msix interrupt
  *                                       reserved for the user
+ * @first_available_cq: first available CQ for the user.
  * @tpc_enabled_mask: which TPCs are enabled.
  * @completion_queues_count: number of completion queues.
  * @fw_security_disabled: true if security measures are disabled in firmware,
@@ -475,6 +476,7 @@ struct asic_fixed_properties {
        u16                             first_available_user_sob[HL_MAX_DCORES];
        u16                             first_available_user_mon[HL_MAX_DCORES];
        u16                             first_available_user_msix_interrupt;
+       u16                             first_available_cq[HL_MAX_DCORES];
        u8                              tpc_enabled_mask;
        u8                              completion_queues_count;
        u8                              fw_security_disabled;
index e86f46d4b61309f158c8637cfa2d04cd877768ba..03af61cecd37bbbcbc48f89d24b6a6419486d7cf 100644 (file)
@@ -397,7 +397,8 @@ static int sync_manager_info(struct hl_fpriv *hpriv, struct hl_info_args *args)
                        prop->first_available_user_sob[args->dcore_id];
        sm_info.first_available_monitor =
                        prop->first_available_user_mon[args->dcore_id];
-
+       sm_info.first_available_cq =
+                       prop->first_available_cq[args->dcore_id];
 
        return copy_to_user(out, &sm_info, min_t(size_t, (size_t) max_size,
                        sizeof(sm_info))) ? -EFAULT : 0;
index 006c34ae35c2c891429c216727c4cd742ecdd5cd..8fc0de3cf3a9e54275b29653b9a42698290dfcab 100644 (file)
@@ -529,6 +529,9 @@ static int gaudi_get_fixed_properties(struct hl_device *hdev)
 
        prop->first_available_user_msix_interrupt = USHRT_MAX;
 
+       for (i = 0 ; i < HL_MAX_DCORES ; i++)
+               prop->first_available_cq[i] = USHRT_MAX;
+
        /* disable fw security for now, set it in a later stage */
        prop->fw_security_disabled = true;
        prop->fw_security_status_valid = false;
index 53db7e96686647ef8e4796c956ea94a9007e8cd7..d26b405f0c17b9483e35a41d2fab8b16627f323d 100644 (file)
@@ -457,6 +457,9 @@ int goya_get_fixed_properties(struct hl_device *hdev)
 
        prop->first_available_user_msix_interrupt = USHRT_MAX;
 
+       for (i = 0 ; i < HL_MAX_DCORES ; i++)
+               prop->first_available_cq[i] = USHRT_MAX;
+
        /* disable fw security for now, set it in a later stage */
        prop->fw_security_disabled = true;
        prop->fw_security_status_valid = false;
index ebde42b37b43ddc92368b6206090d4bb7816269c..64ae83b5f8e5394b94cf08ac045aa697d7d5b7f6 100644 (file)
@@ -414,10 +414,13 @@ struct hl_pll_frequency_info {
  * struct hl_info_sync_manager - sync manager information
  * @first_available_sync_object: first available sob
  * @first_available_monitor: first available monitor
+ * @first_available_cq: first available cq
  */
 struct hl_info_sync_manager {
        __u32 first_available_sync_object;
        __u32 first_available_monitor;
+       __u32 first_available_cq;
+       __u32 reserved;
 };
 
 /**