habanalabs: save f/w preboot minor version
We need this property for backward compatibility against the f/w. Signed-off-by: Sagiv Ozeri <sozeri@habana.ai> Reviewed-by: Oded Gabbay <ogabbay@kernel.org> Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
This commit is contained in:
parent
d6a66d5960
commit
ea9770e653
@ -41,7 +41,7 @@ static char *extract_fw_ver_from_str(const char *fw_str)
|
|||||||
ver_offset = str - fw_str;
|
ver_offset = str - fw_str;
|
||||||
|
|
||||||
/* Copy until the next whitespace */
|
/* Copy until the next whitespace */
|
||||||
whitespace = strnstr(str, " ", VERSION_MAX_LEN - ver_offset);
|
whitespace = strnstr(str, " ", VERSION_MAX_LEN - ver_offset);
|
||||||
if (!whitespace)
|
if (!whitespace)
|
||||||
goto free_fw_ver;
|
goto free_fw_ver;
|
||||||
|
|
||||||
@ -54,6 +54,43 @@ free_fw_ver:
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int extract_fw_sub_versions(struct hl_device *hdev, char *preboot_ver)
|
||||||
|
{
|
||||||
|
char major[8], minor[8], *first_dot, *second_dot;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
first_dot = strnstr(preboot_ver, ".", 10);
|
||||||
|
if (first_dot) {
|
||||||
|
strscpy(major, preboot_ver, first_dot - preboot_ver + 1);
|
||||||
|
rc = kstrtou32(major, 10, &hdev->fw_major_version);
|
||||||
|
} else {
|
||||||
|
rc = -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rc) {
|
||||||
|
dev_err(hdev->dev, "Error %d parsing preboot major version\n", rc);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* skip the first dot */
|
||||||
|
first_dot++;
|
||||||
|
|
||||||
|
second_dot = strnstr(first_dot, ".", 10);
|
||||||
|
if (second_dot) {
|
||||||
|
strscpy(minor, first_dot, second_dot - first_dot + 1);
|
||||||
|
rc = kstrtou32(minor, 10, &hdev->fw_minor_version);
|
||||||
|
} else {
|
||||||
|
rc = -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rc)
|
||||||
|
dev_err(hdev->dev, "Error %d parsing preboot minor version\n", rc);
|
||||||
|
|
||||||
|
out:
|
||||||
|
kfree(preboot_ver);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
static int hl_request_fw(struct hl_device *hdev,
|
static int hl_request_fw(struct hl_device *hdev,
|
||||||
const struct firmware **firmware_p,
|
const struct firmware **firmware_p,
|
||||||
const char *fw_name)
|
const char *fw_name)
|
||||||
@ -2012,18 +2049,14 @@ static int hl_fw_dynamic_read_device_fw_version(struct hl_device *hdev,
|
|||||||
|
|
||||||
preboot_ver = extract_fw_ver_from_str(prop->preboot_ver);
|
preboot_ver = extract_fw_ver_from_str(prop->preboot_ver);
|
||||||
if (preboot_ver) {
|
if (preboot_ver) {
|
||||||
char major[8];
|
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
dev_info(hdev->dev, "preboot version %s\n", preboot_ver);
|
dev_info(hdev->dev, "preboot version %s\n", preboot_ver);
|
||||||
sprintf(major, "%.2s", preboot_ver);
|
|
||||||
kfree(preboot_ver);
|
|
||||||
|
|
||||||
rc = kstrtou32(major, 10, &hdev->fw_major_version);
|
/* This function takes care of freeing preboot_ver */
|
||||||
if (rc) {
|
rc = extract_fw_sub_versions(hdev, preboot_ver);
|
||||||
dev_err(hdev->dev, "Error %d parsing preboot major version\n", rc);
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -3012,7 +3012,8 @@ struct hl_reset_info {
|
|||||||
* @last_error: holds information about last session in which CS timeout or razwi error occurred.
|
* @last_error: holds information about last session in which CS timeout or razwi error occurred.
|
||||||
* @reset_info: holds current device reset information.
|
* @reset_info: holds current device reset information.
|
||||||
* @stream_master_qid_arr: pointer to array with QIDs of master streams.
|
* @stream_master_qid_arr: pointer to array with QIDs of master streams.
|
||||||
* @fw_major_version: major version of current loaded preboot
|
* @fw_major_version: major version of current loaded preboot.
|
||||||
|
* @fw_minor_version: minor version of current loaded preboot.
|
||||||
* @dram_used_mem: current DRAM memory consumption.
|
* @dram_used_mem: current DRAM memory consumption.
|
||||||
* @memory_scrub_val: the value to which the dram will be scrubbed to using cb scrub_device_dram
|
* @memory_scrub_val: the value to which the dram will be scrubbed to using cb scrub_device_dram
|
||||||
* @timeout_jiffies: device CS timeout value.
|
* @timeout_jiffies: device CS timeout value.
|
||||||
@ -3186,6 +3187,7 @@ struct hl_device {
|
|||||||
|
|
||||||
u32 *stream_master_qid_arr;
|
u32 *stream_master_qid_arr;
|
||||||
u32 fw_major_version;
|
u32 fw_major_version;
|
||||||
|
u32 fw_minor_version;
|
||||||
atomic64_t dram_used_mem;
|
atomic64_t dram_used_mem;
|
||||||
u64 memory_scrub_val;
|
u64 memory_scrub_val;
|
||||||
u64 timeout_jiffies;
|
u64 timeout_jiffies;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user