aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/lpfc/lpfc_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_init.c')
-rw-r--r--drivers/scsi/lpfc/lpfc_init.c60
1 files changed, 33 insertions, 27 deletions
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index a3c820083c3..b9ff38fa7c2 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -1481,15 +1481,18 @@ lpfc_handle_eratt_s4(struct lpfc_hba *phba)
1481 return; 1481 return;
1482 } 1482 }
1483 if (bf_get(lpfc_sliport_status_rn, &portstat_reg)) { 1483 if (bf_get(lpfc_sliport_status_rn, &portstat_reg)) {
1484 /* 1484 /* need reset: attempt for port recovery */
1485 * TODO: Attempt port recovery via a port reset.
1486 * When fully implemented, the driver should
1487 * attempt to recover the port here and return.
1488 * For now, log an error and take the port offline.
1489 */
1490 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, 1485 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
1491 "2887 Port Error: Attempting " 1486 "2887 Port Error: Attempting "
1492 "Port Recovery\n"); 1487 "Port Recovery\n");
1488 lpfc_offline_prep(phba);
1489 lpfc_offline(phba);
1490 lpfc_sli_brdrestart(phba);
1491 if (lpfc_online(phba) == 0) {
1492 lpfc_unblock_mgmt_io(phba);
1493 return;
1494 }
1495 /* fall through for not able to recover */
1493 } 1496 }
1494 lpfc_sli4_offline_eratt(phba); 1497 lpfc_sli4_offline_eratt(phba);
1495 break; 1498 break;
@@ -1958,7 +1961,7 @@ lpfc_get_hba_model_desc(struct lpfc_hba *phba, uint8_t *mdp, uint8_t *descp)
1958 case PCI_DEVICE_ID_LANCER_FCOE: 1961 case PCI_DEVICE_ID_LANCER_FCOE:
1959 case PCI_DEVICE_ID_LANCER_FCOE_VF: 1962 case PCI_DEVICE_ID_LANCER_FCOE_VF:
1960 oneConnect = 1; 1963 oneConnect = 1;
1961 m = (typeof(m)){"OCe50100", "PCIe", "FCoE"}; 1964 m = (typeof(m)){"OCe15100", "PCIe", "FCoE"};
1962 break; 1965 break;
1963 default: 1966 default:
1964 m = (typeof(m)){"Unknown", "", ""}; 1967 m = (typeof(m)){"Unknown", "", ""};
@@ -3949,7 +3952,7 @@ static int
3949lpfc_enable_pci_dev(struct lpfc_hba *phba) 3952lpfc_enable_pci_dev(struct lpfc_hba *phba)
3950{ 3953{
3951 struct pci_dev *pdev; 3954 struct pci_dev *pdev;
3952 int bars; 3955 int bars = 0;
3953 3956
3954 /* Obtain PCI device reference */ 3957 /* Obtain PCI device reference */
3955 if (!phba->pcidev) 3958 if (!phba->pcidev)
@@ -3978,6 +3981,8 @@ lpfc_enable_pci_dev(struct lpfc_hba *phba)
3978out_disable_device: 3981out_disable_device:
3979 pci_disable_device(pdev); 3982 pci_disable_device(pdev);
3980out_error: 3983out_error:
3984 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
3985 "1401 Failed to enable pci device, bars:x%x\n", bars);
3981 return -ENODEV; 3986 return -ENODEV;
3982} 3987}
3983 3988
@@ -8271,11 +8276,8 @@ lpfc_pci_probe_one_s3(struct pci_dev *pdev, const struct pci_device_id *pid)
8271 8276
8272 /* Perform generic PCI device enabling operation */ 8277 /* Perform generic PCI device enabling operation */
8273 error = lpfc_enable_pci_dev(phba); 8278 error = lpfc_enable_pci_dev(phba);
8274 if (error) { 8279 if (error)
8275 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
8276 "1401 Failed to enable pci device.\n");
8277 goto out_free_phba; 8280 goto out_free_phba;
8278 }
8279 8281
8280 /* Set up SLI API function jump table for PCI-device group-0 HBAs */ 8282 /* Set up SLI API function jump table for PCI-device group-0 HBAs */
8281 error = lpfc_api_table_setup(phba, LPFC_PCI_DEV_LP); 8283 error = lpfc_api_table_setup(phba, LPFC_PCI_DEV_LP);
@@ -8322,6 +8324,9 @@ lpfc_pci_probe_one_s3(struct pci_dev *pdev, const struct pci_device_id *pid)
8322 goto out_free_iocb_list; 8324 goto out_free_iocb_list;
8323 } 8325 }
8324 8326
8327 /* Get the default values for Model Name and Description */
8328 lpfc_get_hba_model_desc(phba, phba->ModelName, phba->ModelDesc);
8329
8325 /* Create SCSI host to the physical port */ 8330 /* Create SCSI host to the physical port */
8326 error = lpfc_create_shost(phba); 8331 error = lpfc_create_shost(phba);
8327 if (error) { 8332 if (error) {
@@ -8885,16 +8890,17 @@ lpfc_write_firmware(struct lpfc_hba *phba, const struct firmware *fw)
8885 uint32_t offset = 0, temp_offset = 0; 8890 uint32_t offset = 0, temp_offset = 0;
8886 8891
8887 INIT_LIST_HEAD(&dma_buffer_list); 8892 INIT_LIST_HEAD(&dma_buffer_list);
8888 if ((image->magic_number != LPFC_GROUP_OJECT_MAGIC_NUM) || 8893 if ((be32_to_cpu(image->magic_number) != LPFC_GROUP_OJECT_MAGIC_NUM) ||
8889 (bf_get(lpfc_grp_hdr_file_type, image) != LPFC_FILE_TYPE_GROUP) || 8894 (bf_get_be32(lpfc_grp_hdr_file_type, image) !=
8890 (bf_get(lpfc_grp_hdr_id, image) != LPFC_FILE_ID_GROUP) || 8895 LPFC_FILE_TYPE_GROUP) ||
8891 (image->size != fw->size)) { 8896 (bf_get_be32(lpfc_grp_hdr_id, image) != LPFC_FILE_ID_GROUP) ||
8897 (be32_to_cpu(image->size) != fw->size)) {
8892 lpfc_printf_log(phba, KERN_ERR, LOG_INIT, 8898 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
8893 "3022 Invalid FW image found. " 8899 "3022 Invalid FW image found. "
8894 "Magic:%d Type:%x ID:%x\n", 8900 "Magic:%x Type:%x ID:%x\n",
8895 image->magic_number, 8901 be32_to_cpu(image->magic_number),
8896 bf_get(lpfc_grp_hdr_file_type, image), 8902 bf_get_be32(lpfc_grp_hdr_file_type, image),
8897 bf_get(lpfc_grp_hdr_id, image)); 8903 bf_get_be32(lpfc_grp_hdr_id, image));
8898 return -EINVAL; 8904 return -EINVAL;
8899 } 8905 }
8900 lpfc_decode_firmware_rev(phba, fwrev, 1); 8906 lpfc_decode_firmware_rev(phba, fwrev, 1);
@@ -8924,11 +8930,11 @@ lpfc_write_firmware(struct lpfc_hba *phba, const struct firmware *fw)
8924 while (offset < fw->size) { 8930 while (offset < fw->size) {
8925 temp_offset = offset; 8931 temp_offset = offset;
8926 list_for_each_entry(dmabuf, &dma_buffer_list, list) { 8932 list_for_each_entry(dmabuf, &dma_buffer_list, list) {
8927 if (offset + SLI4_PAGE_SIZE > fw->size) { 8933 if (temp_offset + SLI4_PAGE_SIZE > fw->size) {
8928 temp_offset += fw->size - offset;
8929 memcpy(dmabuf->virt, 8934 memcpy(dmabuf->virt,
8930 fw->data + temp_offset, 8935 fw->data + temp_offset,
8931 fw->size - offset); 8936 fw->size - temp_offset);
8937 temp_offset = fw->size;
8932 break; 8938 break;
8933 } 8939 }
8934 memcpy(dmabuf->virt, fw->data + temp_offset, 8940 memcpy(dmabuf->virt, fw->data + temp_offset,
@@ -8995,11 +9001,8 @@ lpfc_pci_probe_one_s4(struct pci_dev *pdev, const struct pci_device_id *pid)
8995 9001
8996 /* Perform generic PCI device enabling operation */ 9002 /* Perform generic PCI device enabling operation */
8997 error = lpfc_enable_pci_dev(phba); 9003 error = lpfc_enable_pci_dev(phba);
8998 if (error) { 9004 if (error)
8999 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
9000 "1409 Failed to enable pci device.\n");
9001 goto out_free_phba; 9005 goto out_free_phba;
9002 }
9003 9006
9004 /* Set up SLI API function jump table for PCI-device group-1 HBAs */ 9007 /* Set up SLI API function jump table for PCI-device group-1 HBAs */
9005 error = lpfc_api_table_setup(phba, LPFC_PCI_DEV_OC); 9008 error = lpfc_api_table_setup(phba, LPFC_PCI_DEV_OC);
@@ -9054,6 +9057,9 @@ lpfc_pci_probe_one_s4(struct pci_dev *pdev, const struct pci_device_id *pid)
9054 goto out_free_iocb_list; 9057 goto out_free_iocb_list;
9055 } 9058 }
9056 9059
9060 /* Get the default values for Model Name and Description */
9061 lpfc_get_hba_model_desc(phba, phba->ModelName, phba->ModelDesc);
9062
9057 /* Create SCSI host to the physical port */ 9063 /* Create SCSI host to the physical port */
9058 error = lpfc_create_shost(phba); 9064 error = lpfc_create_shost(phba);
9059 if (error) { 9065 if (error) {