struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj,
            struct device, kobj)));
        struct qla_hw_data *ha = vha->hw;
+       uint8_t *tmp_data;
 
        if (!capable(CAP_SYS_ADMIN) || off != 0 || count != ha->vpd_size)
                return 0;
        ha->isp_ops->write_nvram(vha, (uint8_t *)buf, ha->vpd_base, count);
        ha->isp_ops->read_nvram(vha, (uint8_t *)ha->vpd, ha->vpd_base, count);
 
+       /* Update flash version information for 4Gb & above. */
+       if (!IS_FWI2_CAPABLE(ha))
+               goto done;
+
+       tmp_data = vmalloc(256);
+       if (!tmp_data) {
+               qla_printk(KERN_WARNING, ha,
+                   "Unable to allocate memory for VPD information update.\n");
+               goto done;
+       }
+       ha->isp_ops->get_flash_version(vha, tmp_data);
+       vfree(tmp_data);
+done:
        return count;
 }
 
 
        rval = qla24xx_write_flash_data(vha, (uint32_t *)buf, offset >> 2,
            length >> 2);
 
-       /* Resume HBA -- RISC reset needed. */
        clear_bit(MBX_UPDATE_FLASH_ACTIVE, &ha->mbx_cmd_flags);
-       set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags);
-       qla2xxx_wake_dpc(vha);
-       qla2x00_wait_for_hba_online(vha);
        scsi_unblock_requests(vha->host);
 
        return rval;