habanalabs: update to latest f/w headers
authorOded Gabbay <ogabbay@kernel.org>
Fri, 23 Apr 2021 12:57:39 +0000 (15:57 +0300)
committerOded Gabbay <ogabbay@kernel.org>
Fri, 18 Jun 2021 12:23:39 +0000 (15:23 +0300)
Update the common and GAUDI firmware header files to the latest version.

The latest version use the correct endianness types so this commit also
contains minor changes to the code to use the correct conversions when
reading/writing to the firmware structures.

Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
drivers/misc/habanalabs/common/firmware_if.c
drivers/misc/habanalabs/common/habanalabs.h
drivers/misc/habanalabs/include/common/cpucp_if.h
drivers/misc/habanalabs/include/common/hl_boot_if.h
drivers/misc/habanalabs/include/gaudi/gaudi_fw_if.h

index 374a35e..6ecc591 100644 (file)
@@ -140,7 +140,7 @@ int hl_fw_send_cpu_message(struct hl_device *hdev, u32 hw_queue_id, u32 *msg,
        }
 
        /* set fence to a non valid value */
-       pkt->fence = UINT_MAX;
+       pkt->fence = cpu_to_le32(UINT_MAX);
 
        rc = hl_hw_queue_send_cb_no_cmpl(hdev, hw_queue_id, len, pkt_dma_addr);
        if (rc) {
@@ -524,7 +524,8 @@ static int hl_fw_send_msi_info_msg(struct hl_device *hdev)
 
        pkt->length = cpu_to_le32(CPUCP_NUM_OF_MSI_TYPES);
 
-       hdev->asic_funcs->get_msi_info((u32 *)&pkt->data);
+       memset((void *) &pkt->data, 0xFF, data_size);
+       hdev->asic_funcs->get_msi_info(pkt->data);
 
        pkt->cpucp_pkt.ctl = cpu_to_le32(CPUCP_PACKET_MSI_INFO_SET <<
                                                CPUCP_PKT_CTL_OPCODE_SHIFT);
@@ -1108,7 +1109,7 @@ static int hl_fw_dynamic_wait_for_status(struct hl_device *hdev,
        /* Wait for expected status */
        rc = hl_poll_timeout(
                hdev,
-               fw_loader->cpu_cmd_status_to_host_reg,
+               le32_to_cpu(fw_loader->cpu_cmd_status_to_host_reg),
                status,
                FIELD_GET(COMMS_STATUS_STATUS_MASK, status) == expected_status,
                10000,
index 4dd7108..e57ccfd 100644 (file)
@@ -1138,7 +1138,7 @@ struct hl_asic_funcs {
        int (*hw_block_mmap)(struct hl_device *hdev, struct vm_area_struct *vma,
                        u32 block_id, u32 block_size);
        void (*enable_events_from_fw)(struct hl_device *hdev);
-       void (*get_msi_info)(u32 *table);
+       void (*get_msi_info)(__le32 *table);
        int (*map_pll_idx_to_fw_idx)(u32 pll_idx);
        void (*init_firmware_loader)(struct hl_device *hdev);
 };
index bf10ca8..4f11231 100644 (file)
@@ -631,6 +631,8 @@ struct cpucp_security_info {
  * @card_name: card name that will be displayed in HWMON subsystem on the host
  * @sec_info: security information
  * @pll_map: Bit map of supported PLLs for current ASIC version.
+ * @mme_binning_mask: MME binning mask,
+ *                   (0 = functional, 1 = binned)
  */
 struct cpucp_info {
        struct cpucp_sensor sensors[CPUCP_MAX_SENSORS];
@@ -653,6 +655,7 @@ struct cpucp_info {
        struct cpucp_security_info sec_info;
        __le32 reserved6;
        __u8 pll_map[PLL_MAP_LEN];
+       __le64 mme_binning_mask;
 };
 
 struct cpucp_mac_addr {
index 84c1468..0fd749c 100644 (file)
@@ -99,6 +99,7 @@
 #define CPU_BOOT_ERR0_PLL_FAIL                 (1 << 12)
 #define CPU_BOOT_ERR0_DEVICE_UNUSABLE_FAIL     (1 << 13)
 #define CPU_BOOT_ERR0_ENABLED                  (1 << 31)
+#define CPU_BOOT_ERR1_ENABLED                  (1 << 31)
 
 /*
  * BOOT DEVICE STATUS bits in BOOT_DEVICE_STS registers
 #define CPU_BOOT_DEV_STS0_FW_IATU_CONF_EN              (1 << 17)
 #define CPU_BOOT_DEV_STS0_DYN_PLL_EN                   (1 << 19)
 #define CPU_BOOT_DEV_STS0_ENABLED                      (1 << 31)
+#define CPU_BOOT_DEV_STS1_ENABLED                      (1 << 31)
 
 enum cpu_boot_status {
        CPU_BOOT_STATUS_NA = 0,         /* Default value after reset of chip */
@@ -264,33 +266,33 @@ enum cpu_msg_status {
 
 /* communication registers mapping - consider ABI when changing */
 struct cpu_dyn_regs {
-       uint32_t cpu_pq_base_addr_low;
-       uint32_t cpu_pq_base_addr_high;
-       uint32_t cpu_pq_length;
-       uint32_t cpu_pq_init_status;
-       uint32_t cpu_eq_base_addr_low;
-       uint32_t cpu_eq_base_addr_high;
-       uint32_t cpu_eq_length;
-       uint32_t cpu_eq_ci;
-       uint32_t cpu_cq_base_addr_low;
-       uint32_t cpu_cq_base_addr_high;
-       uint32_t cpu_cq_length;
-       uint32_t cpu_pf_pq_pi;
-       uint32_t cpu_boot_dev_sts0;
-       uint32_t cpu_boot_dev_sts1;
-       uint32_t cpu_boot_err0;
-       uint32_t cpu_boot_err1;
-       uint32_t cpu_boot_status;
-       uint32_t fw_upd_sts;
-       uint32_t fw_upd_cmd;
-       uint32_t fw_upd_pending_sts;
-       uint32_t fuse_ver_offset;
-       uint32_t preboot_ver_offset;
-       uint32_t uboot_ver_offset;
-       uint32_t hw_state;
-       uint32_t kmd_msg_to_cpu;
-       uint32_t cpu_cmd_status_to_host;
-       uint32_t reserved1[32];         /* reserve for future use */
+       __le32 cpu_pq_base_addr_low;
+       __le32 cpu_pq_base_addr_high;
+       __le32 cpu_pq_length;
+       __le32 cpu_pq_init_status;
+       __le32 cpu_eq_base_addr_low;
+       __le32 cpu_eq_base_addr_high;
+       __le32 cpu_eq_length;
+       __le32 cpu_eq_ci;
+       __le32 cpu_cq_base_addr_low;
+       __le32 cpu_cq_base_addr_high;
+       __le32 cpu_cq_length;
+       __le32 cpu_pf_pq_pi;
+       __le32 cpu_boot_dev_sts0;
+       __le32 cpu_boot_dev_sts1;
+       __le32 cpu_boot_err0;
+       __le32 cpu_boot_err1;
+       __le32 cpu_boot_status;
+       __le32 fw_upd_sts;
+       __le32 fw_upd_cmd;
+       __le32 fw_upd_pending_sts;
+       __le32 fuse_ver_offset;
+       __le32 preboot_ver_offset;
+       __le32 uboot_ver_offset;
+       __le32 hw_state;
+       __le32 kmd_msg_to_cpu;
+       __le32 cpu_cmd_status_to_host;
+       __le32 reserved1[32];           /* reserve for future use */
 };
 
 /* HCDM - Habana Communications Descriptor Magic */
@@ -299,11 +301,11 @@ struct cpu_dyn_regs {
 
 /* this is the comms descriptor header - meta data */
 struct comms_desc_header {
-       uint32_t magic;         /* magic for validation */
-       uint32_t crc32;         /* CRC32 of the descriptor w/o header */
-       uint16_t size;          /* size of the descriptor w/o header */
-       uint8_t version;        /* descriptor version */
-       uint8_t reserved[5];    /* pad to 64 bit */
+       __le32 magic;           /* magic for validation */
+       __le32 crc32;           /* CRC32 of the descriptor w/o header */
+       __le16 size;            /* size of the descriptor w/o header */
+       __u8 version;   /* descriptor version */
+       __u8 reserved[5];       /* pad to 64 bit */
 };
 
 /* this is the main FW descriptor - consider ABI when changing */
@@ -314,7 +316,7 @@ struct lkd_fw_comms_desc {
        char cur_fw_ver[VERSION_MAX_LEN];
        /* can be used for 1 more version w/o ABI change */
        char reserved0[VERSION_MAX_LEN];
-       uint64_t img_addr;      /* address for next FW component load */
+       __le64 img_addr;        /* address for next FW component load */
 };
 
 /*
@@ -386,11 +388,11 @@ enum comms_cmd {
 struct comms_command {
        union {         /* bit fields are only for FW use */
                struct {
-                       unsigned int size :25;          /* 32MB max. */
-                       unsigned int reserved :2;
+                       u32 size :25;           /* 32MB max. */
+                       u32 reserved :2;
                        enum comms_cmd cmd :5;          /* 32 commands */
                };
-               unsigned int val;
+               __le32 val;
        };
 };
 
@@ -449,11 +451,11 @@ enum comms_ram_types {
 struct comms_status {
        union {         /* bit fields are only for FW use */
                struct {
-                       unsigned int offset :26;
-                       unsigned int ram_type :2;
+                       u32 offset :26;
+                       enum comms_ram_types ram_type :2;
                        enum comms_sts status :4;       /* 16 statuses */
                };
-               unsigned int val;
+               __le32 val;
        };
 };
 
index a9f51f9..a4afb98 100644 (file)
@@ -27,6 +27,7 @@ enum gaudi_nic_axi_error {
        TXE,
        QPC_RESP,
        NON_AXI_ERR,
+       TMR,
 };
 
 /*
@@ -42,6 +43,44 @@ struct eq_nic_sei_event {
        __u8 pad[6];
 };
 
+/*
+ * struct gaudi_nic_status - describes the status of a NIC port.
+ * @port: NIC port index.
+ * @bad_format_cnt: e.g. CRC.
+ * @responder_out_of_sequence_psn_cnt: e.g NAK.
+ * @high_ber_reinit_cnt: link reinit due to high BER.
+ * @correctable_err_cnt: e.g. bit-flip.
+ * @uncorrectable_err_cnt: e.g. MAC errors.
+ * @retraining_cnt: re-training counter.
+ * @up: is port up.
+ * @pcs_link: has PCS link.
+ * @phy_ready: is PHY ready.
+ * @auto_neg: is Autoneg enabled.
+ */
+struct gaudi_nic_status {
+       __u32 port;
+       __u32 bad_format_cnt;
+       __u32 responder_out_of_sequence_psn_cnt;
+       __u32 high_ber_reinit;
+       __u32 correctable_err_cnt;
+       __u32 uncorrectable_err_cnt;
+       __u32 retraining_cnt;
+       __u8 up;
+       __u8 pcs_link;
+       __u8 phy_ready;
+       __u8 auto_neg;
+};
+
+struct gaudi_flops_2_data {
+       union {
+               struct {
+                       __u32 spsram_init_done : 1;
+                       __u32 reserved : 31;
+               };
+               __u32 data;
+       };
+};
+
 #define GAUDI_PLL_FREQ_LOW             200000000 /* 200 MHz */
 
 #endif /* GAUDI_FW_IF_H */