Commit 0d90c34c authored by Joe Carnuccio's avatar Joe Carnuccio Committed by Christoph Hellwig
Browse files

qla2xxx: Correct operations for ISP27xx template types 270 and 271.

parent acd3ce88
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@
 * |                              |                    | 0xb13c-0xb140  |
 * |                              |                    | 0xb149		|
 * | MultiQ                       |       0xc00c       |		|
 * | Misc                         |       0xd2ff       | 0xd017-0xd019	|
 * | Misc                         |       0xd300       | 0xd017-0xd019	|
 * |                              |                    | 0xd020		|
 * |                              |                    | 0xd02e-0xd0ff	|
 * |                              |                    | 0xd101-0xd1fe	|
+16 −5
Original line number Diff line number Diff line
@@ -191,6 +191,19 @@ static inline void (*qla27xx_read_vector(uint width))(void *, void *, ulong *)
			   qla27xx_read32;
}

static inline void
qla27xx_read_off(__iomem struct device_reg_24xx *reg,
	uint offset, void *buf, ulong *len)
{
	void *window = (void *)reg + offset;

	if (buf) {
		ql_dbg(ql_dbg_misc, NULL, 0xd300,
		    "%s: @%x\n", __func__, offset);
	}
	qla27xx_read32(window, buf, len);
}

static inline void
qla27xx_read_reg(__iomem struct device_reg_24xx *reg,
	uint offset, void *buf, ulong *len)
@@ -590,7 +603,6 @@ qla27xx_fwdt_entry_t270(struct scsi_qla_host *vha,
	struct qla27xx_fwdt_entry *ent, void *buf, ulong *len)
{
	struct device_reg_24xx __iomem *reg = qla27xx_isp_reg(vha);
	void *window = (void *)reg + 0xc4;
	ulong dwords = ent->t270.count;
	ulong addr = ent->t270.addr;

@@ -599,9 +611,8 @@ qla27xx_fwdt_entry_t270(struct scsi_qla_host *vha,
	qla27xx_write_reg(reg, IOBASE_ADDR, 0x40, buf);
	while (dwords--) {
		qla27xx_write_reg(reg, 0xc0, addr|0x80000000, buf);
		qla27xx_read_reg(reg, 0xc4, buf, len);
		qla27xx_insert32(addr, buf, len);
		qla27xx_read32(window, buf, len);
		qla27xx_read_off(reg, 0xc4, buf, len);
		addr++;
	}

@@ -614,12 +625,12 @@ qla27xx_fwdt_entry_t271(struct scsi_qla_host *vha,
{
	struct device_reg_24xx __iomem *reg = qla27xx_isp_reg(vha);
	ulong addr = ent->t271.addr;
	ulong data = ent->t271.data;

	ql_dbg(ql_dbg_misc, vha, 0xd20f,
	    "%s: wrremreg [%lx]\n", __func__, *len);
	qla27xx_write_reg(reg, IOBASE_ADDR, 0x40, buf);
	qla27xx_read_reg(reg, 0xc4, buf, len);
	qla27xx_insert32(addr, buf, len);
	qla27xx_write_reg(reg, 0xc4, data, buf);
	qla27xx_write_reg(reg, 0xc0, addr, buf);

	return false;