habanalabs: set max power on device init per ASIC
authorTomer Tayar <ttayar@habana.ai>
Tue, 18 Jan 2022 17:27:14 +0000 (19:27 +0200)
committerOded Gabbay <ogabbay@kernel.org>
Mon, 28 Feb 2022 12:22:05 +0000 (14:22 +0200)
For current devices there is a need to send the max power value to F/W
during device init, for example because there might be several card
types.
In future devices, this info will be programmed in the device's EEPROM
and will be read by F/W, and hence the driver should not send it.

Modify the sending of the relevant message to be done only for ASIC
types that need it.

Signed-off-by: Tomer Tayar <ttayar@habana.ai>
Reviewed-by: Oded Gabbay <ogabbay@kernel.org>
Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
drivers/misc/habanalabs/common/device.c
drivers/misc/habanalabs/common/habanalabs.h
drivers/misc/habanalabs/gaudi/gaudi.c
drivers/misc/habanalabs/goya/goya.c

index 63e2449..8ea9dfe 100644 (file)
@@ -1541,7 +1541,8 @@ int hl_device_init(struct hl_device *hdev, struct class *hclass)
        /* Need to call this again because the max power might change,
         * depending on card type for certain ASICs
         */
-       hl_fw_set_max_power(hdev);
+       if (hdev->asic_prop.set_max_power_on_device_init)
+               hl_fw_set_max_power(hdev);
 
        /*
         * hl_hwmon_init() must be called after device_late_init(), because only
index 93116fe..b5055ab 100644 (file)
@@ -562,6 +562,7 @@ struct hl_hints_range {
  *                              to the fact that training runs on multiple
  *                              devices)
  * @configurable_stop_on_err: is stop-on-error option configurable via debugfs.
+ * @set_max_power_on_device_init: true if need to set max power in F/W on device init.
  */
 struct asic_fixed_properties {
        struct hw_queue_properties      *hw_queues_props;
@@ -646,6 +647,7 @@ struct asic_fixed_properties {
        u8                              supports_soft_reset;
        u8                              allow_inference_soft_reset;
        u8                              configurable_stop_on_err;
+       u8                              set_max_power_on_device_init;
 };
 
 /**
index 61aa6dc..ad640a2 100644 (file)
@@ -671,6 +671,8 @@ static int gaudi_set_fixed_properties(struct hl_device *hdev)
 
        prop->configurable_stop_on_err = true;
 
+       prop->set_max_power_on_device_init = true;
+
        return 0;
 }
 
index c8143b6..c08d96e 100644 (file)
@@ -485,6 +485,8 @@ int goya_set_fixed_properties(struct hl_device *hdev)
 
        prop->configurable_stop_on_err = true;
 
+       prop->set_max_power_on_device_init = true;
+
        return 0;
 }