habanalabs: use a single FW loading bringup flag
authorOfir Bitton <obitton@habana.ai>
Mon, 15 Feb 2021 11:23:04 +0000 (13:23 +0200)
committerOded Gabbay <ogabbay@kernel.org>
Fri, 9 Apr 2021 11:09:23 +0000 (14:09 +0300)
For simplicity, use a single bringup flag indicating which FW
binaries should loaded to device.

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/firmware_if.c
drivers/misc/habanalabs/common/habanalabs.h
drivers/misc/habanalabs/common/habanalabs_drv.c
drivers/misc/habanalabs/gaudi/gaudi.c
drivers/misc/habanalabs/goya/goya.c

index 09706c5..6f3692b 100644 (file)
@@ -623,7 +623,11 @@ int hl_fw_read_preboot_status(struct hl_device *hdev, u32 cpu_boot_status_reg,
        u32 status, security_status;
        int rc;
 
-       if (!hdev->cpu_enable)
+       /* pldm was added for cases in which we use preboot on pldm and want
+        * to load boot fit, but we can't wait for preboot because it runs
+        * very slowly
+        */
+       if (!(hdev->fw_components & FW_TYPE_PREBOOT_CPU) || hdev->pldm)
                return 0;
 
        /* Need to check two possible scenarios:
@@ -710,7 +714,7 @@ int hl_fw_init_cpu(struct hl_device *hdev, u32 cpu_boot_status_reg,
        u32 status;
        int rc;
 
-       if (!(hdev->fw_loading & FW_TYPE_BOOT_CPU))
+       if (!(hdev->fw_components & FW_TYPE_BOOT_CPU))
                return 0;
 
        dev_info(hdev->dev, "Going to wait for device boot (up to %lds)\n",
@@ -801,7 +805,7 @@ int hl_fw_init_cpu(struct hl_device *hdev, u32 cpu_boot_status_reg,
                goto out;
        }
 
-       if (!(hdev->fw_loading & FW_TYPE_LINUX)) {
+       if (!(hdev->fw_components & FW_TYPE_LINUX)) {
                dev_info(hdev->dev, "Skip loading Linux F/W\n");
                goto out;
        }
index b8ab346..66e5150 100644 (file)
@@ -171,15 +171,19 @@ enum hl_fw_component {
 };
 
 /**
- * enum hl_fw_types - F/W types to load
+ * enum hl_fw_types - F/W types present in the system
  * @FW_TYPE_LINUX: Linux image for device CPU
  * @FW_TYPE_BOOT_CPU: Boot image for device CPU
+ * @FW_TYPE_PREBOOT_CPU: Indicates pre-loaded CPUs are present in the system
+ *                       (preboot, ppboot etc...)
  * @FW_TYPE_ALL_TYPES: Mask for all types
  */
 enum hl_fw_types {
        FW_TYPE_LINUX = 0x1,
        FW_TYPE_BOOT_CPU = 0x2,
-       FW_TYPE_ALL_TYPES = (FW_TYPE_LINUX | FW_TYPE_BOOT_CPU)
+       FW_TYPE_PREBOOT_CPU = 0x4,
+       FW_TYPE_ALL_TYPES =
+               (FW_TYPE_LINUX | FW_TYPE_BOOT_CPU | FW_TYPE_PREBOOT_CPU)
 };
 
 /**
@@ -2066,10 +2070,9 @@ struct hl_device {
 
        /* Parameters for bring-up */
        u64                             nic_ports_mask;
-       u64                             fw_loading;
+       u64                             fw_components;
        u8                              mmu_enable;
        u8                              mmu_huge_page_opt;
-       u8                              cpu_enable;
        u8                              reset_pcilink;
        u8                              cpu_queues_enable;
        u8                              pldm;
index f695ea6..5989656 100644 (file)
@@ -234,8 +234,7 @@ out_err:
 
 static void set_driver_behavior_per_device(struct hl_device *hdev)
 {
-       hdev->cpu_enable = 1;
-       hdev->fw_loading = FW_TYPE_ALL_TYPES;
+       hdev->fw_components = FW_TYPE_ALL_TYPES;
        hdev->cpu_queues_enable = 1;
        hdev->heartbeat = 1;
        hdev->mmu_enable = 1;
index c1f0023..4f39737 100644 (file)
@@ -3701,7 +3701,7 @@ static int gaudi_init_cpu(struct hl_device *hdev)
        struct gaudi_device *gaudi = hdev->asic_specific;
        int rc;
 
-       if (!hdev->cpu_enable)
+       if (!(hdev->fw_components & FW_TYPE_PREBOOT_CPU))
                return 0;
 
        if (gaudi->hw_cap_initialized & HW_CAP_CPU)
index a40c428..20abed6 100644 (file)
@@ -2429,7 +2429,7 @@ static int goya_init_cpu(struct hl_device *hdev)
        struct goya_device *goya = hdev->asic_specific;
        int rc;
 
-       if (!hdev->cpu_enable)
+       if (!(hdev->fw_components & FW_TYPE_PREBOOT_CPU))
                return 0;
 
        if (goya->hw_cap_initialized & HW_CAP_CPU)