[SCSI] qla2xxx: Wait for FLASH write-protection to complete after a write.
Some flash parts have a slow enable write-protection (WP) operation whereby subsequent FLASH accesses would fail if the WP operation had not completed. Software now polls the SPI's status-register for WP completion. Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
parent
3776541d8a
commit
6f13fd57cd
|
@ -550,7 +550,7 @@ qla24xx_write_flash_data(scsi_qla_host_t *ha, uint32_t *dwptr, uint32_t faddr,
|
||||||
int ret;
|
int ret;
|
||||||
uint32_t liter, miter;
|
uint32_t liter, miter;
|
||||||
uint32_t sec_mask, rest_addr, conf_addr;
|
uint32_t sec_mask, rest_addr, conf_addr;
|
||||||
uint32_t fdata, findex ;
|
uint32_t fdata, findex, cnt;
|
||||||
uint8_t man_id, flash_id;
|
uint8_t man_id, flash_id;
|
||||||
struct device_reg_24xx __iomem *reg = &ha->iobase->isp24;
|
struct device_reg_24xx __iomem *reg = &ha->iobase->isp24;
|
||||||
dma_addr_t optrom_dma;
|
dma_addr_t optrom_dma;
|
||||||
|
@ -690,8 +690,14 @@ qla24xx_write_flash_data(scsi_qla_host_t *ha, uint32_t *dwptr, uint32_t faddr,
|
||||||
0xff0000) | ((fdata >> 16) & 0xff));
|
0xff0000) | ((fdata >> 16) & 0xff));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Enable flash write-protection. */
|
/* Enable flash write-protection and wait for completion. */
|
||||||
qla24xx_write_flash_dword(ha, flash_conf_to_access_addr(0x101), 0x9c);
|
qla24xx_write_flash_dword(ha, flash_conf_to_access_addr(0x101), 0x9c);
|
||||||
|
for (cnt = 300; cnt &&
|
||||||
|
qla24xx_read_flash_dword(ha,
|
||||||
|
flash_conf_to_access_addr(0x005)) & BIT_0;
|
||||||
|
cnt--) {
|
||||||
|
udelay(10);
|
||||||
|
}
|
||||||
|
|
||||||
/* Disable flash write. */
|
/* Disable flash write. */
|
||||||
WRT_REG_DWORD(®->ctrl_status,
|
WRT_REG_DWORD(®->ctrl_status,
|
||||||
|
|
Loading…
Reference in New Issue