aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Vasquez <andrew.vasquez@qlogic.com>2008-01-17 12:02:10 -0500
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2008-01-23 12:29:31 -0500
commit6f13fd57cd84c06cea6c4b6d61517a4350820a9f (patch)
treec940eff7870732ba7197625203442d7e46407de6
parent3776541d8a46347a4924353a192c6ce4a3d04e2e (diff)
[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>
-rw-r--r--drivers/scsi/qla2xxx/qla_sup.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/scsi/qla2xxx/qla_sup.c b/drivers/scsi/qla2xxx/qla_sup.c
index ad2fa01bd233..af16c55b47a7 100644
--- a/drivers/scsi/qla2xxx/qla_sup.c
+++ b/drivers/scsi/qla2xxx/qla_sup.c
@@ -550,7 +550,7 @@ qla24xx_write_flash_data(scsi_qla_host_t *ha, uint32_t *dwptr, uint32_t faddr,
550 int ret; 550 int ret;
551 uint32_t liter, miter; 551 uint32_t liter, miter;
552 uint32_t sec_mask, rest_addr, conf_addr; 552 uint32_t sec_mask, rest_addr, conf_addr;
553 uint32_t fdata, findex ; 553 uint32_t fdata, findex, cnt;
554 uint8_t man_id, flash_id; 554 uint8_t man_id, flash_id;
555 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; 555 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24;
556 dma_addr_t optrom_dma; 556 dma_addr_t optrom_dma;
@@ -690,8 +690,14 @@ qla24xx_write_flash_data(scsi_qla_host_t *ha, uint32_t *dwptr, uint32_t faddr,
690 0xff0000) | ((fdata >> 16) & 0xff)); 690 0xff0000) | ((fdata >> 16) & 0xff));
691 } 691 }
692 692
693 /* Enable flash write-protection. */ 693 /* Enable flash write-protection and wait for completion. */
694 qla24xx_write_flash_dword(ha, flash_conf_to_access_addr(0x101), 0x9c); 694 qla24xx_write_flash_dword(ha, flash_conf_to_access_addr(0x101), 0x9c);
695 for (cnt = 300; cnt &&
696 qla24xx_read_flash_dword(ha,
697 flash_conf_to_access_addr(0x005)) & BIT_0;
698 cnt--) {
699 udelay(10);
700 }
695 701
696 /* Disable flash write. */ 702 /* Disable flash write. */
697 WRT_REG_DWORD(&reg->ctrl_status, 703 WRT_REG_DWORD(&reg->ctrl_status,