aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/ipr.c
diff options
context:
space:
mode:
authorWayne Boyer <wayneb@linux.vnet.ibm.com>2011-10-03 23:54:37 -0400
committerJames Bottomley <JBottomley@Parallels.com>2011-10-16 11:56:27 -0400
commit14ed9cc7e7b9a95d56c2bf91cab2f010968d6e73 (patch)
treeae93859a17705bd61876edb12dc65b4c88bd50e7 /drivers/scsi/ipr.c
parent1a34c0640137eed8dabdac3a68a7a84116ac9e0d (diff)
[SCSI] ipr: Add support to flash FPGA and flash back DRAM images
The write buffer command is used to download and burn new IOA FW images. The same interface can now be used to flash FPGA and flash back DRAM images. To download and flash the new images takes more than 15 minutes, so increase the write buffer command timeout to 30 minutes. The FPGA and flash back DRAM images don't have the same card_type as the IOA FW image. So, remove the sanity checking from the driver. The adapter has sanity checking and will only accept a valid image. Signed-off-by: Wayne Boyer <wayneb@linux.vnet.ibm.com> Acked-by: Brian King <brking@linux.vnet.ibm.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi/ipr.c')
-rw-r--r--drivers/scsi/ipr.c10
1 files changed, 2 insertions, 8 deletions
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
index f03963a972f..e16a9cf442c 100644
--- a/drivers/scsi/ipr.c
+++ b/drivers/scsi/ipr.c
@@ -3751,14 +3751,6 @@ static ssize_t ipr_store_update_fw(struct device *dev,
3751 3751
3752 image_hdr = (struct ipr_ucode_image_header *)fw_entry->data; 3752 image_hdr = (struct ipr_ucode_image_header *)fw_entry->data;
3753 3753
3754 if (be32_to_cpu(image_hdr->header_length) > fw_entry->size ||
3755 (ioa_cfg->vpd_cbs->page3_data.card_type &&
3756 ioa_cfg->vpd_cbs->page3_data.card_type != image_hdr->card_type)) {
3757 dev_err(&ioa_cfg->pdev->dev, "Invalid microcode buffer\n");
3758 release_firmware(fw_entry);
3759 return -EINVAL;
3760 }
3761
3762 src = (u8 *)image_hdr + be32_to_cpu(image_hdr->header_length); 3754 src = (u8 *)image_hdr + be32_to_cpu(image_hdr->header_length);
3763 dnld_size = fw_entry->size - be32_to_cpu(image_hdr->header_length); 3755 dnld_size = fw_entry->size - be32_to_cpu(image_hdr->header_length);
3764 sglist = ipr_alloc_ucode_buffer(dnld_size); 3756 sglist = ipr_alloc_ucode_buffer(dnld_size);
@@ -3777,6 +3769,8 @@ static ssize_t ipr_store_update_fw(struct device *dev,
3777 goto out; 3769 goto out;
3778 } 3770 }
3779 3771
3772 ipr_info("Updating microcode, please be patient. This may take up to 30 minutes.\n");
3773
3780 result = ipr_update_ioa_ucode(ioa_cfg, sglist); 3774 result = ipr_update_ioa_ucode(ioa_cfg, sglist);
3781 3775
3782 if (!result) 3776 if (!result)