|
@@ -208,6 +208,15 @@ static void ql_write_common_reg(struct ql3_adapter *qdev,
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+static void ql_write_nvram_reg(struct ql3_adapter *qdev,
|
|
|
+ u32 __iomem *reg, u32 value)
|
|
|
+{
|
|
|
+ writel(value, reg);
|
|
|
+ readl(reg);
|
|
|
+ udelay(1);
|
|
|
+ return;
|
|
|
+}
|
|
|
+
|
|
|
static void ql_write_page0_reg(struct ql3_adapter *qdev,
|
|
|
u32 __iomem *reg, u32 value)
|
|
|
{
|
|
@@ -336,9 +345,9 @@ static void fm93c56a_select(struct ql3_adapter *qdev)
|
|
|
qdev->mem_map_registers;
|
|
|
|
|
|
qdev->eeprom_cmd_data = AUBURN_EEPROM_CS_1;
|
|
|
- ql_write_common_reg(qdev, &port_regs->CommonRegs.serialPortInterfaceReg,
|
|
|
+ ql_write_nvram_reg(qdev, &port_regs->CommonRegs.serialPortInterfaceReg,
|
|
|
ISP_NVRAM_MASK | qdev->eeprom_cmd_data);
|
|
|
- ql_write_common_reg(qdev, &port_regs->CommonRegs.serialPortInterfaceReg,
|
|
|
+ ql_write_nvram_reg(qdev, &port_regs->CommonRegs.serialPortInterfaceReg,
|
|
|
((ISP_NVRAM_MASK << 16) | qdev->eeprom_cmd_data));
|
|
|
}
|
|
|
|
|
@@ -355,14 +364,14 @@ static void fm93c56a_cmd(struct ql3_adapter *qdev, u32 cmd, u32 eepromAddr)
|
|
|
qdev->mem_map_registers;
|
|
|
|
|
|
/* Clock in a zero, then do the start bit */
|
|
|
- ql_write_common_reg(qdev, &port_regs->CommonRegs.serialPortInterfaceReg,
|
|
|
+ ql_write_nvram_reg(qdev, &port_regs->CommonRegs.serialPortInterfaceReg,
|
|
|
ISP_NVRAM_MASK | qdev->eeprom_cmd_data |
|
|
|
AUBURN_EEPROM_DO_1);
|
|
|
- ql_write_common_reg(qdev, &port_regs->CommonRegs.serialPortInterfaceReg,
|
|
|
+ ql_write_nvram_reg(qdev, &port_regs->CommonRegs.serialPortInterfaceReg,
|
|
|
ISP_NVRAM_MASK | qdev->
|
|
|
eeprom_cmd_data | AUBURN_EEPROM_DO_1 |
|
|
|
AUBURN_EEPROM_CLK_RISE);
|
|
|
- ql_write_common_reg(qdev, &port_regs->CommonRegs.serialPortInterfaceReg,
|
|
|
+ ql_write_nvram_reg(qdev, &port_regs->CommonRegs.serialPortInterfaceReg,
|
|
|
ISP_NVRAM_MASK | qdev->
|
|
|
eeprom_cmd_data | AUBURN_EEPROM_DO_1 |
|
|
|
AUBURN_EEPROM_CLK_FALL);
|
|
@@ -378,20 +387,20 @@ static void fm93c56a_cmd(struct ql3_adapter *qdev, u32 cmd, u32 eepromAddr)
|
|
|
* If the bit changed, then change the DO state to
|
|
|
* match
|
|
|
*/
|
|
|
- ql_write_common_reg(qdev,
|
|
|
+ ql_write_nvram_reg(qdev,
|
|
|
&port_regs->CommonRegs.
|
|
|
serialPortInterfaceReg,
|
|
|
ISP_NVRAM_MASK | qdev->
|
|
|
eeprom_cmd_data | dataBit);
|
|
|
previousBit = dataBit;
|
|
|
}
|
|
|
- ql_write_common_reg(qdev,
|
|
|
+ ql_write_nvram_reg(qdev,
|
|
|
&port_regs->CommonRegs.
|
|
|
serialPortInterfaceReg,
|
|
|
ISP_NVRAM_MASK | qdev->
|
|
|
eeprom_cmd_data | dataBit |
|
|
|
AUBURN_EEPROM_CLK_RISE);
|
|
|
- ql_write_common_reg(qdev,
|
|
|
+ ql_write_nvram_reg(qdev,
|
|
|
&port_regs->CommonRegs.
|
|
|
serialPortInterfaceReg,
|
|
|
ISP_NVRAM_MASK | qdev->
|
|
@@ -412,20 +421,20 @@ static void fm93c56a_cmd(struct ql3_adapter *qdev, u32 cmd, u32 eepromAddr)
|
|
|
* If the bit changed, then change the DO state to
|
|
|
* match
|
|
|
*/
|
|
|
- ql_write_common_reg(qdev,
|
|
|
+ ql_write_nvram_reg(qdev,
|
|
|
&port_regs->CommonRegs.
|
|
|
serialPortInterfaceReg,
|
|
|
ISP_NVRAM_MASK | qdev->
|
|
|
eeprom_cmd_data | dataBit);
|
|
|
previousBit = dataBit;
|
|
|
}
|
|
|
- ql_write_common_reg(qdev,
|
|
|
+ ql_write_nvram_reg(qdev,
|
|
|
&port_regs->CommonRegs.
|
|
|
serialPortInterfaceReg,
|
|
|
ISP_NVRAM_MASK | qdev->
|
|
|
eeprom_cmd_data | dataBit |
|
|
|
AUBURN_EEPROM_CLK_RISE);
|
|
|
- ql_write_common_reg(qdev,
|
|
|
+ ql_write_nvram_reg(qdev,
|
|
|
&port_regs->CommonRegs.
|
|
|
serialPortInterfaceReg,
|
|
|
ISP_NVRAM_MASK | qdev->
|
|
@@ -443,7 +452,7 @@ static void fm93c56a_deselect(struct ql3_adapter *qdev)
|
|
|
struct ql3xxx_port_registers __iomem *port_regs =
|
|
|
qdev->mem_map_registers;
|
|
|
qdev->eeprom_cmd_data = AUBURN_EEPROM_CS_0;
|
|
|
- ql_write_common_reg(qdev, &port_regs->CommonRegs.serialPortInterfaceReg,
|
|
|
+ ql_write_nvram_reg(qdev, &port_regs->CommonRegs.serialPortInterfaceReg,
|
|
|
ISP_NVRAM_MASK | qdev->eeprom_cmd_data);
|
|
|
}
|
|
|
|
|
@@ -461,12 +470,12 @@ static void fm93c56a_datain(struct ql3_adapter *qdev, unsigned short *value)
|
|
|
/* Read the data bits */
|
|
|
/* The first bit is a dummy. Clock right over it. */
|
|
|
for (i = 0; i < dataBits; i++) {
|
|
|
- ql_write_common_reg(qdev,
|
|
|
+ ql_write_nvram_reg(qdev,
|
|
|
&port_regs->CommonRegs.
|
|
|
serialPortInterfaceReg,
|
|
|
ISP_NVRAM_MASK | qdev->eeprom_cmd_data |
|
|
|
AUBURN_EEPROM_CLK_RISE);
|
|
|
- ql_write_common_reg(qdev,
|
|
|
+ ql_write_nvram_reg(qdev,
|
|
|
&port_regs->CommonRegs.
|
|
|
serialPortInterfaceReg,
|
|
|
ISP_NVRAM_MASK | qdev->eeprom_cmd_data |
|