habanalabs: Add separate poll interval value for protocol
authorfarah kassabri <fkassabri@habana.ai>
Wed, 13 Apr 2022 15:16:34 +0000 (18:16 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 22 May 2022 19:01:19 +0000 (21:01 +0200)
Currently we're using the same poll interval value for both
COMMs protocol(for sending a command and waits for an ACK)
and the device CPU boot phases status waits.
On COMMs protocol this interval should be much lower than the
device CPU boot which may take long time to change status.

Signed-off-by: farah kassabri <fkassabri@habana.ai>
Reviewed-by: Oded Gabbay <ogabbay@kernel.org>
Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/misc/habanalabs/common/firmware_if.c
drivers/misc/habanalabs/common/habanalabs.h
drivers/misc/habanalabs/common/habanalabs_drv.c

index 7d9d585..828a36a 100644 (file)
@@ -1589,7 +1589,7 @@ static int hl_fw_dynamic_wait_for_status(struct hl_device *hdev,
                le32_to_cpu(dyn_regs->cpu_cmd_status_to_host),
                status,
                FIELD_GET(COMMS_STATUS_STATUS_MASK, status) == expected_status,
-               hdev->fw_poll_interval_usec,
+               hdev->fw_comms_poll_interval_usec,
                timeout);
 
        if (rc) {
index a8e6118..19f6af5 100644 (file)
@@ -64,6 +64,7 @@
 #define HL_CPUCP_MON_DUMP_TIMEOUT_USEC 10000000 /* 10s */
 
 #define HL_FW_STATUS_POLL_INTERVAL_USEC                10000 /* 10ms */
+#define HL_FW_COMMS_STATUS_PLDM_POLL_INTERVAL_USEC     1000000 /* 1s */
 
 #define HL_PCI_ELBI_TIMEOUT_MSEC       10 /* 10ms */
 
@@ -2717,6 +2718,9 @@ struct hl_reset_info {
  *                                  session.
  * @open_counter: number of successful device open operations.
  * @fw_poll_interval_usec: FW status poll interval in usec.
+ *                         used for CPU boot status
+ * @fw_comms_poll_interval_usec: FW comms/protocol poll interval in usec.
+ *                                  used for COMMs protocols cmds(COMMS_STS_*)
  * @card_type: Various ASICs have several card types. This indicates the card
  *             type of the current device.
  * @major: habanalabs kernel driver major.
@@ -2847,6 +2851,8 @@ struct hl_device {
        u64                             open_counter;
        u64                             fw_poll_interval_usec;
        ktime_t                         last_successful_open_ktime;
+       u64                             fw_comms_poll_interval_usec;
+
        enum cpucp_card_types           card_type;
        u32                             major;
        u32                             high_pll;
index b85ca1e..57218e0 100644 (file)
@@ -301,6 +301,7 @@ static int fixup_device_params(struct hl_device *hdev)
        hdev->asic_prop.fw_security_enabled = is_asic_secured(hdev->asic_type);
 
        hdev->fw_poll_interval_usec = HL_FW_STATUS_POLL_INTERVAL_USEC;
+       hdev->fw_comms_poll_interval_usec = HL_FW_STATUS_POLL_INTERVAL_USEC;
 
        hdev->stop_on_err = true;
        hdev->reset_info.curr_reset_cause = HL_RESET_CAUSE_UNKNOWN;