|
@@ -847,6 +847,64 @@ static int t3_write_flash(struct adapter *adapter, unsigned int addr,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * t3_check_tpsram_version - read the tp sram version
|
|
|
+ * @adapter: the adapter
|
|
|
+ *
|
|
|
+ * Reads the protocol sram version from serial eeprom.
|
|
|
+ */
|
|
|
+int t3_check_tpsram_version(struct adapter *adapter)
|
|
|
+{
|
|
|
+ int ret;
|
|
|
+ u32 vers;
|
|
|
+ unsigned int major, minor;
|
|
|
+
|
|
|
+ /* Get version loaded in SRAM */
|
|
|
+ t3_write_reg(adapter, A_TP_EMBED_OP_FIELD0, 0);
|
|
|
+ ret = t3_wait_op_done(adapter, A_TP_EMBED_OP_FIELD0,
|
|
|
+ 1, 1, 5, 1);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+ vers = t3_read_reg(adapter, A_TP_EMBED_OP_FIELD1);
|
|
|
+
|
|
|
+ major = G_TP_VERSION_MAJOR(vers);
|
|
|
+ minor = G_TP_VERSION_MINOR(vers);
|
|
|
+
|
|
|
+ if (major == TP_VERSION_MAJOR && minor == TP_VERSION_MINOR)
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ return -EINVAL;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * t3_check_tpsram - check if provided protocol SRAM
|
|
|
+ * is compatible with this driver
|
|
|
+ * @adapter: the adapter
|
|
|
+ * @tp_sram: the firmware image to write
|
|
|
+ * @size: image size
|
|
|
+ *
|
|
|
+ * Checks if an adapter's tp sram is compatible with the driver.
|
|
|
+ * Returns 0 if the versions are compatible, a negative error otherwise.
|
|
|
+ */
|
|
|
+int t3_check_tpsram(struct adapter *adapter, u8 *tp_sram, unsigned int size)
|
|
|
+{
|
|
|
+ u32 csum;
|
|
|
+ unsigned int i;
|
|
|
+ const u32 *p = (const u32 *)tp_sram;
|
|
|
+
|
|
|
+ /* Verify checksum */
|
|
|
+ for (csum = 0, i = 0; i < size / sizeof(csum); i++)
|
|
|
+ csum += ntohl(p[i]);
|
|
|
+ if (csum != 0xffffffff) {
|
|
|
+ CH_ERR(adapter, "corrupted protocol SRAM image, checksum %u\n",
|
|
|
+ csum);
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
enum fw_version_type {
|
|
|
FW_VERSION_N3,
|
|
|
FW_VERSION_T3
|
|
@@ -2686,6 +2744,34 @@ static void ulp_config(struct adapter *adap, const struct tp_params *p)
|
|
|
t3_write_reg(adap, A_ULPRX_TDDP_TAGMASK, 0xffffffff);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * t3_set_proto_sram - set the contents of the protocol sram
|
|
|
+ * @adapter: the adapter
|
|
|
+ * @data: the protocol image
|
|
|
+ *
|
|
|
+ * Write the contents of the protocol SRAM.
|
|
|
+ */
|
|
|
+int t3_set_proto_sram(struct adapter *adap, u8 *data)
|
|
|
+{
|
|
|
+ int i;
|
|
|
+ u32 *buf = (u32 *)data;
|
|
|
+
|
|
|
+ for (i = 0; i < PROTO_SRAM_LINES; i++) {
|
|
|
+ t3_write_reg(adap, A_TP_EMBED_OP_FIELD5, cpu_to_be32(*buf++));
|
|
|
+ t3_write_reg(adap, A_TP_EMBED_OP_FIELD4, cpu_to_be32(*buf++));
|
|
|
+ t3_write_reg(adap, A_TP_EMBED_OP_FIELD3, cpu_to_be32(*buf++));
|
|
|
+ t3_write_reg(adap, A_TP_EMBED_OP_FIELD2, cpu_to_be32(*buf++));
|
|
|
+ t3_write_reg(adap, A_TP_EMBED_OP_FIELD1, cpu_to_be32(*buf++));
|
|
|
+
|
|
|
+ t3_write_reg(adap, A_TP_EMBED_OP_FIELD0, i << 1 | 1 << 31);
|
|
|
+ if (t3_wait_op_done(adap, A_TP_EMBED_OP_FIELD0, 1, 1, 5, 1))
|
|
|
+ return -EIO;
|
|
|
+ }
|
|
|
+ t3_write_reg(adap, A_TP_EMBED_OP_FIELD0, 0);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
void t3_config_trace_filter(struct adapter *adapter,
|
|
|
const struct trace_params *tp, int filter_index,
|
|
|
int invert, int enable)
|