Commit e67a6040 authored by Ohad Sharabi's avatar Ohad Sharabi Committed by Oded Gabbay

habanalabs: read f/w's 2-nd sts and err registers

Maintain both STS1 and ERR1 registers used for status communication
with F/W.
Those are not maintained as we currently have less than 31
statuses/error defined and so LKD did not refer to those register.
The reason to read them now is to try to support future f/w versions
with current driver.
Signed-off-by: default avatarOhad Sharabi <osharabi@habana.ai>
Reviewed-by: default avatarOded Gabbay <ogabbay@kernel.org>
Signed-off-by: default avatarOded Gabbay <ogabbay@kernel.org>
parent ea7d5e7b
...@@ -422,15 +422,24 @@ struct hl_mmu_properties { ...@@ -422,15 +422,24 @@ struct hl_mmu_properties {
* @cb_pool_cb_size: size of each CB in the CB pool. * @cb_pool_cb_size: size of each CB in the CB pool.
* @max_pending_cs: maximum of concurrent pending command submissions * @max_pending_cs: maximum of concurrent pending command submissions
* @max_queues: maximum amount of queues in the system * @max_queues: maximum amount of queues in the system
* @fw_preboot_caps_map: bitmap representation of preboot cpu capabilities * @fw_preboot_cpu_boot_dev_sts0: bitmap representation of preboot cpu
* reported by FW, bit description can be found in * capabilities reported by FW, bit description
* CPU_BOOT_DEV_STS* * can be found in CPU_BOOT_DEV_STS0
* @fw_boot_cpu_security_map: bitmap representation of boot cpu security status * @fw_preboot_cpu_boot_dev_sts1: bitmap representation of preboot cpu
* reported by FW, bit description can be found in * capabilities reported by FW, bit description
* CPU_BOOT_DEV_STS* * can be found in CPU_BOOT_DEV_STS1
* @fw_app_security_map: bitmap representation of application security status * @fw_bootfit_cpu_boot_dev_sts0: bitmap representation of boot cpu security
* reported by FW, bit description can be found in * status reported by FW, bit description can be
* CPU_BOOT_DEV_STS* * found in CPU_BOOT_DEV_STS0
* @fw_bootfit_cpu_boot_dev_sts1: bitmap representation of boot cpu security
* status reported by FW, bit description can be
* found in CPU_BOOT_DEV_STS1
* @fw_app_cpu_boot_dev_sts0: bitmap representation of application security
* status reported by FW, bit description can be
* found in CPU_BOOT_DEV_STS0
* @fw_app_cpu_boot_dev_sts1: bitmap representation of application security
* status reported by FW, bit description can be
* found in CPU_BOOT_DEV_STS1
* @collective_first_sob: first sync object available for collective use * @collective_first_sob: first sync object available for collective use
* @collective_first_mon: first monitor available for collective use * @collective_first_mon: first monitor available for collective use
* @sync_stream_first_sob: first sync object available for sync stream use * @sync_stream_first_sob: first sync object available for sync stream use
...@@ -445,8 +454,10 @@ struct hl_mmu_properties { ...@@ -445,8 +454,10 @@ struct hl_mmu_properties {
* @completion_queues_count: number of completion queues. * @completion_queues_count: number of completion queues.
* @fw_security_disabled: true if security measures are disabled in firmware, * @fw_security_disabled: true if security measures are disabled in firmware,
* false otherwise * false otherwise
* @fw_security_status_valid: security status bits are valid and can be fetched * @fw_cpu_boot_dev_sts0_valid: status bits are valid and can be fetched from
* from BOOT_DEV_STS0 * BOOT_DEV_STS0
* @fw_cpu_boot_dev_sts1_valid: status bits are valid and can be fetched from
* BOOT_DEV_STS1
* @dram_supports_virtual_memory: is there an MMU towards the DRAM * @dram_supports_virtual_memory: is there an MMU towards the DRAM
* @hard_reset_done_by_fw: true if firmware is handling hard reset flow * @hard_reset_done_by_fw: true if firmware is handling hard reset flow
* @num_functional_hbms: number of functional HBMs in each DCORE. * @num_functional_hbms: number of functional HBMs in each DCORE.
...@@ -497,9 +508,12 @@ struct asic_fixed_properties { ...@@ -497,9 +508,12 @@ struct asic_fixed_properties {
u32 cb_pool_cb_size; u32 cb_pool_cb_size;
u32 max_pending_cs; u32 max_pending_cs;
u32 max_queues; u32 max_queues;
u32 fw_preboot_caps_map; u32 fw_preboot_cpu_boot_dev_sts0;
u32 fw_boot_cpu_security_map; u32 fw_preboot_cpu_boot_dev_sts1;
u32 fw_app_security_map; u32 fw_bootfit_cpu_boot_dev_sts0;
u32 fw_bootfit_cpu_boot_dev_sts1;
u32 fw_app_cpu_boot_dev_sts0;
u32 fw_app_cpu_boot_dev_sts1;
u16 collective_first_sob; u16 collective_first_sob;
u16 collective_first_mon; u16 collective_first_mon;
u16 sync_stream_first_sob; u16 sync_stream_first_sob;
...@@ -512,7 +526,8 @@ struct asic_fixed_properties { ...@@ -512,7 +526,8 @@ struct asic_fixed_properties {
u8 tpc_enabled_mask; u8 tpc_enabled_mask;
u8 completion_queues_count; u8 completion_queues_count;
u8 fw_security_disabled; u8 fw_security_disabled;
u8 fw_security_status_valid; u8 fw_cpu_boot_dev_sts0_valid;
u8 fw_cpu_boot_dev_sts1_valid;
u8 dram_supports_virtual_memory; u8 dram_supports_virtual_memory;
u8 hard_reset_done_by_fw; u8 hard_reset_done_by_fw;
u8 num_functional_hbms; u8 num_functional_hbms;
...@@ -853,8 +868,10 @@ struct pci_mem_region { ...@@ -853,8 +868,10 @@ struct pci_mem_region {
* @kmd_msg_to_cpu_reg: register address for KDM->CPU messages * @kmd_msg_to_cpu_reg: register address for KDM->CPU messages
* @cpu_cmd_status_to_host_reg: register address for CPU command status response * @cpu_cmd_status_to_host_reg: register address for CPU command status response
* @cpu_boot_status_reg: boot status register * @cpu_boot_status_reg: boot status register
* @cpu_boot_dev_status_reg: boot device status register * @cpu_boot_dev_status0_reg: boot device status register 0
* @boot_err0_reg: boot error register * @cpu_boot_dev_status1_reg: boot device status register 1
* @boot_err0_reg: boot error register 0
* @boot_err1_reg: boot error register 1
* @preboot_version_offset_reg: SRAM offset to preboot version register * @preboot_version_offset_reg: SRAM offset to preboot version register
* @boot_fit_version_offset_reg: SRAM offset to boot fit version register * @boot_fit_version_offset_reg: SRAM offset to boot fit version register
* @sram_offset_mask: mask for getting offset into the SRAM * @sram_offset_mask: mask for getting offset into the SRAM
...@@ -865,8 +882,10 @@ struct static_fw_load_mgr { ...@@ -865,8 +882,10 @@ struct static_fw_load_mgr {
u32 kmd_msg_to_cpu_reg; u32 kmd_msg_to_cpu_reg;
u32 cpu_cmd_status_to_host_reg; u32 cpu_cmd_status_to_host_reg;
u32 cpu_boot_status_reg; u32 cpu_boot_status_reg;
u32 cpu_boot_dev_status_reg; u32 cpu_boot_dev_status0_reg;
u32 cpu_boot_dev_status1_reg;
u32 boot_err0_reg; u32 boot_err0_reg;
u32 boot_err1_reg;
u32 preboot_version_offset_reg; u32 preboot_version_offset_reg;
u32 boot_fit_version_offset_reg; u32 boot_fit_version_offset_reg;
u32 sram_offset_mask; u32 sram_offset_mask;
...@@ -2514,11 +2533,13 @@ void hl_fw_cpu_accessible_dma_pool_free(struct hl_device *hdev, size_t size, ...@@ -2514,11 +2533,13 @@ void hl_fw_cpu_accessible_dma_pool_free(struct hl_device *hdev, size_t size,
void *vaddr); void *vaddr);
int hl_fw_send_heartbeat(struct hl_device *hdev); int hl_fw_send_heartbeat(struct hl_device *hdev);
int hl_fw_cpucp_info_get(struct hl_device *hdev, int hl_fw_cpucp_info_get(struct hl_device *hdev,
u32 cpu_security_boot_status_reg, u32 sts_boot_dev_sts0_reg,
u32 boot_err0_reg); u32 sts_boot_dev_sts1_reg, u32 boot_err0_reg,
u32 boot_err1_reg);
int hl_fw_cpucp_handshake(struct hl_device *hdev, int hl_fw_cpucp_handshake(struct hl_device *hdev,
u32 cpu_security_boot_status_reg, u32 sts_boot_dev_sts0_reg,
u32 boot_err0_reg); u32 sts_boot_dev_sts1_reg, u32 boot_err0_reg,
u32 boot_err1_reg);
int hl_fw_get_eeprom_data(struct hl_device *hdev, void *data, size_t max_size); int hl_fw_get_eeprom_data(struct hl_device *hdev, void *data, size_t max_size);
int hl_fw_cpucp_pci_counters_get(struct hl_device *hdev, int hl_fw_cpucp_pci_counters_get(struct hl_device *hdev,
struct hl_info_pci_counters *counters); struct hl_info_pci_counters *counters);
...@@ -2531,8 +2552,9 @@ int hl_fw_cpucp_pll_info_get(struct hl_device *hdev, u32 pll_index, ...@@ -2531,8 +2552,9 @@ int hl_fw_cpucp_pll_info_get(struct hl_device *hdev, u32 pll_index,
int hl_fw_cpucp_power_get(struct hl_device *hdev, u64 *power); int hl_fw_cpucp_power_get(struct hl_device *hdev, u64 *power);
int hl_fw_init_cpu(struct hl_device *hdev); int hl_fw_init_cpu(struct hl_device *hdev);
int hl_fw_read_preboot_status(struct hl_device *hdev, u32 cpu_boot_status_reg, int hl_fw_read_preboot_status(struct hl_device *hdev, u32 cpu_boot_status_reg,
u32 cpu_boot_caps_reg, u32 boot_err0_reg, u32 sts_boot_dev_sts0_reg,
u32 timeout); u32 sts_boot_dev_sts1_reg, u32 boot_err0_reg,
u32 boot_err1_reg, u32 timeout);
int hl_pci_bars_map(struct hl_device *hdev, const char * const name[3], int hl_pci_bars_map(struct hl_device *hdev, const char * const name[3],
bool is_wc[3]); bool is_wc[3]);
......
...@@ -546,7 +546,8 @@ static int gaudi_get_fixed_properties(struct hl_device *hdev) ...@@ -546,7 +546,8 @@ static int gaudi_get_fixed_properties(struct hl_device *hdev)
for (i = 0 ; i < HL_MAX_DCORES ; i++) for (i = 0 ; i < HL_MAX_DCORES ; i++)
prop->first_available_cq[i] = USHRT_MAX; prop->first_available_cq[i] = USHRT_MAX;
prop->fw_security_status_valid = false; prop->fw_cpu_boot_dev_sts0_valid = false;
prop->fw_cpu_boot_dev_sts1_valid = false;
prop->hard_reset_done_by_fw = false; prop->hard_reset_done_by_fw = false;
return 0; return 0;
...@@ -706,8 +707,10 @@ static int gaudi_early_init(struct hl_device *hdev) ...@@ -706,8 +707,10 @@ static int gaudi_early_init(struct hl_device *hdev)
* version to determine whether we run with a security-enabled firmware * version to determine whether we run with a security-enabled firmware
*/ */
rc = hl_fw_read_preboot_status(hdev, mmPSOC_GLOBAL_CONF_CPU_BOOT_STATUS, rc = hl_fw_read_preboot_status(hdev, mmPSOC_GLOBAL_CONF_CPU_BOOT_STATUS,
mmCPU_BOOT_DEV_STS0, mmCPU_BOOT_ERR0, mmCPU_BOOT_DEV_STS0,
GAUDI_BOOT_FIT_REQ_TIMEOUT_USEC); mmCPU_BOOT_DEV_STS1, mmCPU_BOOT_ERR0,
mmCPU_BOOT_ERR1,
GAUDI_BOOT_FIT_REQ_TIMEOUT_USEC);
if (rc) { if (rc) {
if (hdev->reset_on_preboot_fail) if (hdev->reset_on_preboot_fail)
hdev->asic_funcs->hw_fini(hdev, true); hdev->asic_funcs->hw_fini(hdev, true);
...@@ -1925,8 +1928,8 @@ static void gaudi_init_scrambler_sram(struct hl_device *hdev) ...@@ -1925,8 +1928,8 @@ static void gaudi_init_scrambler_sram(struct hl_device *hdev)
if (!hdev->asic_prop.fw_security_disabled) if (!hdev->asic_prop.fw_security_disabled)
return; return;
if (hdev->asic_prop.fw_security_status_valid && if (hdev->asic_prop.fw_cpu_boot_dev_sts0_valid &&
(hdev->asic_prop.fw_app_security_map & (hdev->asic_prop.fw_app_cpu_boot_dev_sts0 &
CPU_BOOT_DEV_STS0_SRAM_SCR_EN)) CPU_BOOT_DEV_STS0_SRAM_SCR_EN))
return; return;
...@@ -1997,8 +2000,8 @@ static void gaudi_init_scrambler_hbm(struct hl_device *hdev) ...@@ -1997,8 +2000,8 @@ static void gaudi_init_scrambler_hbm(struct hl_device *hdev)
if (!hdev->asic_prop.fw_security_disabled) if (!hdev->asic_prop.fw_security_disabled)
return; return;
if (hdev->asic_prop.fw_security_status_valid && if (hdev->asic_prop.fw_cpu_boot_dev_sts0_valid &&
(hdev->asic_prop.fw_boot_cpu_security_map & (hdev->asic_prop.fw_bootfit_cpu_boot_dev_sts0 &
CPU_BOOT_DEV_STS0_DRAM_SCR_EN)) CPU_BOOT_DEV_STS0_DRAM_SCR_EN))
return; return;
...@@ -2067,8 +2070,8 @@ static void gaudi_init_e2e(struct hl_device *hdev) ...@@ -2067,8 +2070,8 @@ static void gaudi_init_e2e(struct hl_device *hdev)
if (!hdev->asic_prop.fw_security_disabled) if (!hdev->asic_prop.fw_security_disabled)
return; return;
if (hdev->asic_prop.fw_security_status_valid && if (hdev->asic_prop.fw_cpu_boot_dev_sts0_valid &&
(hdev->asic_prop.fw_boot_cpu_security_map & (hdev->asic_prop.fw_bootfit_cpu_boot_dev_sts0 &
CPU_BOOT_DEV_STS0_E2E_CRED_EN)) CPU_BOOT_DEV_STS0_E2E_CRED_EN))
return; return;
...@@ -2442,8 +2445,8 @@ static void gaudi_init_hbm_cred(struct hl_device *hdev) ...@@ -2442,8 +2445,8 @@ static void gaudi_init_hbm_cred(struct hl_device *hdev)
if (!hdev->asic_prop.fw_security_disabled) if (!hdev->asic_prop.fw_security_disabled)
return; return;
if (hdev->asic_prop.fw_security_status_valid && if (hdev->asic_prop.fw_cpu_boot_dev_sts0_valid &&
(hdev->asic_prop.fw_boot_cpu_security_map & (hdev->asic_prop.fw_bootfit_cpu_boot_dev_sts0 &
CPU_BOOT_DEV_STS0_HBM_CRED_EN)) CPU_BOOT_DEV_STS0_HBM_CRED_EN))
return; return;
...@@ -3768,8 +3771,10 @@ static void gaudi_init_static_firmware_loader(struct hl_device *hdev) ...@@ -3768,8 +3771,10 @@ static void gaudi_init_static_firmware_loader(struct hl_device *hdev)
static_loader->kmd_msg_to_cpu_reg = mmPSOC_GLOBAL_CONF_KMD_MSG_TO_CPU; static_loader->kmd_msg_to_cpu_reg = mmPSOC_GLOBAL_CONF_KMD_MSG_TO_CPU;
static_loader->cpu_cmd_status_to_host_reg = mmCPU_CMD_STATUS_TO_HOST; static_loader->cpu_cmd_status_to_host_reg = mmCPU_CMD_STATUS_TO_HOST;
static_loader->cpu_boot_status_reg = mmPSOC_GLOBAL_CONF_CPU_BOOT_STATUS; static_loader->cpu_boot_status_reg = mmPSOC_GLOBAL_CONF_CPU_BOOT_STATUS;
static_loader->cpu_boot_dev_status_reg = mmCPU_BOOT_DEV_STS0; static_loader->cpu_boot_dev_status0_reg = mmCPU_BOOT_DEV_STS0;
static_loader->cpu_boot_dev_status1_reg = mmCPU_BOOT_DEV_STS1;
static_loader->boot_err0_reg = mmCPU_BOOT_ERR0; static_loader->boot_err0_reg = mmCPU_BOOT_ERR0;
static_loader->boot_err1_reg = mmCPU_BOOT_ERR1;
static_loader->preboot_version_offset_reg = mmPREBOOT_VER_OFFSET; static_loader->preboot_version_offset_reg = mmPREBOOT_VER_OFFSET;
static_loader->boot_fit_version_offset_reg = mmUBOOT_VER_OFFSET; static_loader->boot_fit_version_offset_reg = mmUBOOT_VER_OFFSET;
static_loader->sram_offset_mask = ~((u32)SRAM_BASE_ADDR); static_loader->sram_offset_mask = ~((u32)SRAM_BASE_ADDR);
...@@ -3884,8 +3889,10 @@ static int gaudi_init_cpu_queues(struct hl_device *hdev, u32 cpu_timeout) ...@@ -3884,8 +3889,10 @@ static int gaudi_init_cpu_queues(struct hl_device *hdev, u32 cpu_timeout)
} }
/* update FW application security bits */ /* update FW application security bits */
if (prop->fw_security_status_valid) if (prop->fw_cpu_boot_dev_sts0_valid)
prop->fw_app_security_map = RREG32(mmCPU_BOOT_DEV_STS0); prop->fw_app_cpu_boot_dev_sts0 = RREG32(mmCPU_BOOT_DEV_STS0);
if (prop->fw_cpu_boot_dev_sts1_valid)
prop->fw_app_cpu_boot_dev_sts1 = RREG32(mmCPU_BOOT_DEV_STS1);
gaudi->hw_cap_initialized |= HW_CAP_CPU_Q; gaudi->hw_cap_initialized |= HW_CAP_CPU_Q;
return 0; return 0;
...@@ -7409,8 +7416,8 @@ static int gaudi_hbm_read_interrupts(struct hl_device *hdev, int device, ...@@ -7409,8 +7416,8 @@ static int gaudi_hbm_read_interrupts(struct hl_device *hdev, int device,
u32 base, val, val2, wr_par, rd_par, ca_par, derr, serr, type, ch; u32 base, val, val2, wr_par, rd_par, ca_par, derr, serr, type, ch;
int err = 0; int err = 0;
if (hdev->asic_prop.fw_security_status_valid && if (hdev->asic_prop.fw_cpu_boot_dev_sts0_valid &&
(hdev->asic_prop.fw_app_security_map & (hdev->asic_prop.fw_app_cpu_boot_dev_sts0 &
CPU_BOOT_DEV_STS0_HBM_ECC_EN)) { CPU_BOOT_DEV_STS0_HBM_ECC_EN)) {
if (!hbm_ecc_data) { if (!hbm_ecc_data) {
dev_err(hdev->dev, "No FW ECC data"); dev_err(hdev->dev, "No FW ECC data");
...@@ -7975,7 +7982,9 @@ static int gaudi_cpucp_info_get(struct hl_device *hdev) ...@@ -7975,7 +7982,9 @@ static int gaudi_cpucp_info_get(struct hl_device *hdev)
if (!(gaudi->hw_cap_initialized & HW_CAP_CPU_Q)) if (!(gaudi->hw_cap_initialized & HW_CAP_CPU_Q))
return 0; return 0;
rc = hl_fw_cpucp_handshake(hdev, mmCPU_BOOT_DEV_STS0, mmCPU_BOOT_ERR0); rc = hl_fw_cpucp_handshake(hdev, mmCPU_BOOT_DEV_STS0,
mmCPU_BOOT_DEV_STS1, mmCPU_BOOT_ERR0,
mmCPU_BOOT_ERR1);
if (rc) if (rc)
return rc; return rc;
......
...@@ -461,7 +461,8 @@ int goya_get_fixed_properties(struct hl_device *hdev) ...@@ -461,7 +461,8 @@ int goya_get_fixed_properties(struct hl_device *hdev)
for (i = 0 ; i < HL_MAX_DCORES ; i++) for (i = 0 ; i < HL_MAX_DCORES ; i++)
prop->first_available_cq[i] = USHRT_MAX; prop->first_available_cq[i] = USHRT_MAX;
prop->fw_security_status_valid = false; prop->fw_cpu_boot_dev_sts0_valid = false;
prop->fw_cpu_boot_dev_sts1_valid = false;
prop->hard_reset_done_by_fw = false; prop->hard_reset_done_by_fw = false;
return 0; return 0;
...@@ -641,8 +642,10 @@ static int goya_early_init(struct hl_device *hdev) ...@@ -641,8 +642,10 @@ static int goya_early_init(struct hl_device *hdev)
* version to determine whether we run with a security-enabled firmware * version to determine whether we run with a security-enabled firmware
*/ */
rc = hl_fw_read_preboot_status(hdev, mmPSOC_GLOBAL_CONF_CPU_BOOT_STATUS, rc = hl_fw_read_preboot_status(hdev, mmPSOC_GLOBAL_CONF_CPU_BOOT_STATUS,
mmCPU_BOOT_DEV_STS0, mmCPU_BOOT_ERR0, mmCPU_BOOT_DEV_STS0,
GOYA_BOOT_FIT_REQ_TIMEOUT_USEC); mmCPU_BOOT_DEV_STS1, mmCPU_BOOT_ERR0,
mmCPU_BOOT_ERR1,
GOYA_BOOT_FIT_REQ_TIMEOUT_USEC);
if (rc) { if (rc) {
if (hdev->reset_on_preboot_fail) if (hdev->reset_on_preboot_fail)
hdev->asic_funcs->hw_fini(hdev, true); hdev->asic_funcs->hw_fini(hdev, true);
...@@ -1297,8 +1300,11 @@ int goya_init_cpu_queues(struct hl_device *hdev) ...@@ -1297,8 +1300,11 @@ int goya_init_cpu_queues(struct hl_device *hdev)
} }
/* update FW application security bits */ /* update FW application security bits */
if (prop->fw_security_status_valid) if (prop->fw_cpu_boot_dev_sts0_valid)
prop->fw_app_security_map = RREG32(mmCPU_BOOT_DEV_STS0); prop->fw_app_cpu_boot_dev_sts0 = RREG32(mmCPU_BOOT_DEV_STS0);
if (prop->fw_cpu_boot_dev_sts1_valid)
prop->fw_app_cpu_boot_dev_sts1 = RREG32(mmCPU_BOOT_DEV_STS1);
goya->hw_cap_initialized |= HW_CAP_CPU_Q; goya->hw_cap_initialized |= HW_CAP_CPU_Q;
return 0; return 0;
...@@ -2470,8 +2476,10 @@ static void goya_init_static_firmware_loader(struct hl_device *hdev) ...@@ -2470,8 +2476,10 @@ static void goya_init_static_firmware_loader(struct hl_device *hdev)
static_loader->kmd_msg_to_cpu_reg = mmPSOC_GLOBAL_CONF_KMD_MSG_TO_CPU; static_loader->kmd_msg_to_cpu_reg = mmPSOC_GLOBAL_CONF_KMD_MSG_TO_CPU;
static_loader->cpu_cmd_status_to_host_reg = mmCPU_CMD_STATUS_TO_HOST; static_loader->cpu_cmd_status_to_host_reg = mmCPU_CMD_STATUS_TO_HOST;
static_loader->cpu_boot_status_reg = mmPSOC_GLOBAL_CONF_CPU_BOOT_STATUS; static_loader->cpu_boot_status_reg = mmPSOC_GLOBAL_CONF_CPU_BOOT_STATUS;
static_loader->cpu_boot_dev_status_reg = mmCPU_BOOT_DEV_STS0; static_loader->cpu_boot_dev_status0_reg = mmCPU_BOOT_DEV_STS0;
static_loader->cpu_boot_dev_status1_reg = mmCPU_BOOT_DEV_STS1;
static_loader->boot_err0_reg = mmCPU_BOOT_ERR0; static_loader->boot_err0_reg = mmCPU_BOOT_ERR0;
static_loader->boot_err1_reg = mmCPU_BOOT_ERR1;
static_loader->preboot_version_offset_reg = mmPREBOOT_VER_OFFSET; static_loader->preboot_version_offset_reg = mmPREBOOT_VER_OFFSET;
static_loader->boot_fit_version_offset_reg = mmUBOOT_VER_OFFSET; static_loader->boot_fit_version_offset_reg = mmUBOOT_VER_OFFSET;
static_loader->sram_offset_mask = ~((u32)SRAM_BASE_ADDR); static_loader->sram_offset_mask = ~((u32)SRAM_BASE_ADDR);
...@@ -5245,7 +5253,9 @@ int goya_cpucp_info_get(struct hl_device *hdev) ...@@ -5245,7 +5253,9 @@ int goya_cpucp_info_get(struct hl_device *hdev)
if (!(goya->hw_cap_initialized & HW_CAP_CPU_Q)) if (!(goya->hw_cap_initialized & HW_CAP_CPU_Q))
return 0; return 0;
rc = hl_fw_cpucp_handshake(hdev, mmCPU_BOOT_DEV_STS0, mmCPU_BOOT_ERR0); rc = hl_fw_cpucp_handshake(hdev, mmCPU_BOOT_DEV_STS0,
mmCPU_BOOT_DEV_STS1, mmCPU_BOOT_ERR0,
mmCPU_BOOT_ERR1);
if (rc) if (rc)
return rc; return rc;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment