diff options
author | James Smart <james.smart@avagotech.com> | 2015-08-31 16:48:17 -0400 |
---|---|---|
committer | James Bottomley <JBottomley@Odin.com> | 2015-10-26 21:17:51 -0400 |
commit | d38dd52c79bc117a2ba7c27949d50721adc9d1d3 (patch) | |
tree | 301ee7a18a10f0ed68d6721e42bcd414b6be0dc4 /drivers | |
parent | 6599eaaa45e0f40ddbbcf164cf3e3524faed9383 (diff) |
lpfc: Add support for Lancer G6 and 32G FC links
Signed-off-by: Dick Kennedy <dick.kennedy@avagotech.com>
Signed-off-by: James Smart <james.smart@avagotech.com>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Signed-off-by: James Bottomley <JBottomley@Odin.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/scsi/lpfc/lpfc.h | 8 | ||||
-rw-r--r-- | drivers/scsi/lpfc/lpfc_attr.c | 17 | ||||
-rw-r--r-- | drivers/scsi/lpfc/lpfc_ct.c | 6 | ||||
-rw-r--r-- | drivers/scsi/lpfc/lpfc_els.c | 2 | ||||
-rw-r--r-- | drivers/scsi/lpfc/lpfc_hbadisc.c | 1 | ||||
-rw-r--r-- | drivers/scsi/lpfc/lpfc_hw.h | 4 | ||||
-rw-r--r-- | drivers/scsi/lpfc/lpfc_init.c | 18 | ||||
-rw-r--r-- | drivers/scsi/lpfc/lpfc_mbox.c | 11 |
8 files changed, 58 insertions, 9 deletions
diff --git a/drivers/scsi/lpfc/lpfc.h b/drivers/scsi/lpfc/lpfc.h index a5a56fa31e70..ceee9a3fd9e5 100644 --- a/drivers/scsi/lpfc/lpfc.h +++ b/drivers/scsi/lpfc/lpfc.h | |||
@@ -495,15 +495,17 @@ struct unsol_rcv_ct_ctx { | |||
495 | #define LPFC_USER_LINK_SPEED_8G 8 /* 8 Gigabaud */ | 495 | #define LPFC_USER_LINK_SPEED_8G 8 /* 8 Gigabaud */ |
496 | #define LPFC_USER_LINK_SPEED_10G 10 /* 10 Gigabaud */ | 496 | #define LPFC_USER_LINK_SPEED_10G 10 /* 10 Gigabaud */ |
497 | #define LPFC_USER_LINK_SPEED_16G 16 /* 16 Gigabaud */ | 497 | #define LPFC_USER_LINK_SPEED_16G 16 /* 16 Gigabaud */ |
498 | #define LPFC_USER_LINK_SPEED_MAX LPFC_USER_LINK_SPEED_16G | 498 | #define LPFC_USER_LINK_SPEED_32G 32 /* 32 Gigabaud */ |
499 | #define LPFC_USER_LINK_SPEED_BITMAP ((1 << LPFC_USER_LINK_SPEED_16G) | \ | 499 | #define LPFC_USER_LINK_SPEED_MAX LPFC_USER_LINK_SPEED_32G |
500 | #define LPFC_USER_LINK_SPEED_BITMAP ((1ULL << LPFC_USER_LINK_SPEED_32G) | \ | ||
501 | (1 << LPFC_USER_LINK_SPEED_16G) | \ | ||
500 | (1 << LPFC_USER_LINK_SPEED_10G) | \ | 502 | (1 << LPFC_USER_LINK_SPEED_10G) | \ |
501 | (1 << LPFC_USER_LINK_SPEED_8G) | \ | 503 | (1 << LPFC_USER_LINK_SPEED_8G) | \ |
502 | (1 << LPFC_USER_LINK_SPEED_4G) | \ | 504 | (1 << LPFC_USER_LINK_SPEED_4G) | \ |
503 | (1 << LPFC_USER_LINK_SPEED_2G) | \ | 505 | (1 << LPFC_USER_LINK_SPEED_2G) | \ |
504 | (1 << LPFC_USER_LINK_SPEED_1G) | \ | 506 | (1 << LPFC_USER_LINK_SPEED_1G) | \ |
505 | (1 << LPFC_USER_LINK_SPEED_AUTO)) | 507 | (1 << LPFC_USER_LINK_SPEED_AUTO)) |
506 | #define LPFC_LINK_SPEED_STRING "0, 1, 2, 4, 8, 10, 16" | 508 | #define LPFC_LINK_SPEED_STRING "0, 1, 2, 4, 8, 10, 16, 32" |
507 | 509 | ||
508 | enum nemb_type { | 510 | enum nemb_type { |
509 | nemb_mse = 1, | 511 | nemb_mse = 1, |
diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c index 3c6cc9d11e83..f6446d759d7f 100644 --- a/drivers/scsi/lpfc/lpfc_attr.c +++ b/drivers/scsi/lpfc/lpfc_attr.c | |||
@@ -3276,15 +3276,20 @@ lpfc_topology_store(struct device *dev, struct device_attribute *attr, | |||
3276 | 3276 | ||
3277 | if (val >= 0 && val <= 6) { | 3277 | if (val >= 0 && val <= 6) { |
3278 | prev_val = phba->cfg_topology; | 3278 | prev_val = phba->cfg_topology; |
3279 | phba->cfg_topology = val; | ||
3280 | if (phba->cfg_link_speed == LPFC_USER_LINK_SPEED_16G && | 3279 | if (phba->cfg_link_speed == LPFC_USER_LINK_SPEED_16G && |
3281 | val == 4) { | 3280 | val == 4) { |
3282 | lpfc_printf_vlog(vport, KERN_ERR, LOG_INIT, | 3281 | lpfc_printf_vlog(vport, KERN_ERR, LOG_INIT, |
3283 | "3113 Loop mode not supported at speed %d\n", | 3282 | "3113 Loop mode not supported at speed %d\n", |
3284 | phba->cfg_link_speed); | 3283 | val); |
3285 | phba->cfg_topology = prev_val; | ||
3286 | return -EINVAL; | 3284 | return -EINVAL; |
3287 | } | 3285 | } |
3286 | if (phba->pcidev->device == PCI_DEVICE_ID_LANCER_G6_FC && | ||
3287 | val == 4) { | ||
3288 | lpfc_printf_vlog(vport, KERN_ERR, LOG_INIT, | ||
3289 | "3114 Loop mode not supported\n"); | ||
3290 | return -EINVAL; | ||
3291 | } | ||
3292 | phba->cfg_topology = val; | ||
3288 | if (nolip) | 3293 | if (nolip) |
3289 | return strlen(buf); | 3294 | return strlen(buf); |
3290 | 3295 | ||
@@ -3725,7 +3730,8 @@ lpfc_link_speed_store(struct device *dev, struct device_attribute *attr, | |||
3725 | ((val == LPFC_USER_LINK_SPEED_4G) && !(phba->lmt & LMT_4Gb)) || | 3730 | ((val == LPFC_USER_LINK_SPEED_4G) && !(phba->lmt & LMT_4Gb)) || |
3726 | ((val == LPFC_USER_LINK_SPEED_8G) && !(phba->lmt & LMT_8Gb)) || | 3731 | ((val == LPFC_USER_LINK_SPEED_8G) && !(phba->lmt & LMT_8Gb)) || |
3727 | ((val == LPFC_USER_LINK_SPEED_10G) && !(phba->lmt & LMT_10Gb)) || | 3732 | ((val == LPFC_USER_LINK_SPEED_10G) && !(phba->lmt & LMT_10Gb)) || |
3728 | ((val == LPFC_USER_LINK_SPEED_16G) && !(phba->lmt & LMT_16Gb))) { | 3733 | ((val == LPFC_USER_LINK_SPEED_16G) && !(phba->lmt & LMT_16Gb)) || |
3734 | ((val == LPFC_USER_LINK_SPEED_32G) && !(phba->lmt & LMT_32Gb))) { | ||
3729 | lpfc_printf_log(phba, KERN_ERR, LOG_INIT, | 3735 | lpfc_printf_log(phba, KERN_ERR, LOG_INIT, |
3730 | "2879 lpfc_link_speed attribute cannot be set " | 3736 | "2879 lpfc_link_speed attribute cannot be set " |
3731 | "to %d. Speed is not supported by this port.\n", | 3737 | "to %d. Speed is not supported by this port.\n", |
@@ -5261,6 +5267,9 @@ lpfc_get_host_speed(struct Scsi_Host *shost) | |||
5261 | case LPFC_LINK_SPEED_16GHZ: | 5267 | case LPFC_LINK_SPEED_16GHZ: |
5262 | fc_host_speed(shost) = FC_PORTSPEED_16GBIT; | 5268 | fc_host_speed(shost) = FC_PORTSPEED_16GBIT; |
5263 | break; | 5269 | break; |
5270 | case LPFC_LINK_SPEED_32GHZ: | ||
5271 | fc_host_speed(shost) = FC_PORTSPEED_32GBIT; | ||
5272 | break; | ||
5264 | default: | 5273 | default: |
5265 | fc_host_speed(shost) = FC_PORTSPEED_UNKNOWN; | 5274 | fc_host_speed(shost) = FC_PORTSPEED_UNKNOWN; |
5266 | break; | 5275 | break; |
diff --git a/drivers/scsi/lpfc/lpfc_ct.c b/drivers/scsi/lpfc/lpfc_ct.c index aaf1cd747c9b..8fded1f7605f 100644 --- a/drivers/scsi/lpfc/lpfc_ct.c +++ b/drivers/scsi/lpfc/lpfc_ct.c | |||
@@ -55,6 +55,7 @@ | |||
55 | #define HBA_PORTSPEED_10GBIT 0x0004 /* 10 GBit/sec */ | 55 | #define HBA_PORTSPEED_10GBIT 0x0004 /* 10 GBit/sec */ |
56 | #define HBA_PORTSPEED_8GBIT 0x0010 /* 8 GBit/sec */ | 56 | #define HBA_PORTSPEED_8GBIT 0x0010 /* 8 GBit/sec */ |
57 | #define HBA_PORTSPEED_16GBIT 0x0020 /* 16 GBit/sec */ | 57 | #define HBA_PORTSPEED_16GBIT 0x0020 /* 16 GBit/sec */ |
58 | #define HBA_PORTSPEED_32GBIT 0x0040 /* 32 GBit/sec */ | ||
58 | #define HBA_PORTSPEED_UNKNOWN 0x0800 /* Unknown */ | 59 | #define HBA_PORTSPEED_UNKNOWN 0x0800 /* Unknown */ |
59 | 60 | ||
60 | #define FOURBYTES 4 | 61 | #define FOURBYTES 4 |
@@ -1773,6 +1774,8 @@ hba_out: | |||
1773 | ad->AttrType = cpu_to_be16(RPRT_SUPPORTED_SPEED); | 1774 | ad->AttrType = cpu_to_be16(RPRT_SUPPORTED_SPEED); |
1774 | ad->AttrLen = cpu_to_be16(FOURBYTES + 4); | 1775 | ad->AttrLen = cpu_to_be16(FOURBYTES + 4); |
1775 | ae->un.SupportSpeed = 0; | 1776 | ae->un.SupportSpeed = 0; |
1777 | if (phba->lmt & LMT_32Gb) | ||
1778 | ae->un.SupportSpeed |= HBA_PORTSPEED_32GBIT; | ||
1776 | if (phba->lmt & LMT_16Gb) | 1779 | if (phba->lmt & LMT_16Gb) |
1777 | ae->un.SupportSpeed |= HBA_PORTSPEED_16GBIT; | 1780 | ae->un.SupportSpeed |= HBA_PORTSPEED_16GBIT; |
1778 | if (phba->lmt & LMT_10Gb) | 1781 | if (phba->lmt & LMT_10Gb) |
@@ -1816,6 +1819,9 @@ hba_out: | |||
1816 | case LPFC_LINK_SPEED_16GHZ: | 1819 | case LPFC_LINK_SPEED_16GHZ: |
1817 | ae->un.PortSpeed = HBA_PORTSPEED_16GBIT; | 1820 | ae->un.PortSpeed = HBA_PORTSPEED_16GBIT; |
1818 | break; | 1821 | break; |
1822 | case LPFC_LINK_SPEED_32GHZ: | ||
1823 | ae->un.PortSpeed = HBA_PORTSPEED_32GBIT; | ||
1824 | break; | ||
1819 | default: | 1825 | default: |
1820 | ae->un.PortSpeed = HBA_PORTSPEED_UNKNOWN; | 1826 | ae->un.PortSpeed = HBA_PORTSPEED_UNKNOWN; |
1821 | break; | 1827 | break; |
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c index f9c957d64c02..598313d484f3 100644 --- a/drivers/scsi/lpfc/lpfc_els.c +++ b/drivers/scsi/lpfc/lpfc_els.c | |||
@@ -4705,6 +4705,8 @@ lpfc_rdp_res_speed(struct fc_rdp_port_speed_desc *desc, struct lpfc_hba *phba) | |||
4705 | 4705 | ||
4706 | desc->info.port_speed.speed = cpu_to_be16(rdp_speed); | 4706 | desc->info.port_speed.speed = cpu_to_be16(rdp_speed); |
4707 | 4707 | ||
4708 | if (phba->lmt & LMT_32Gb) | ||
4709 | rdp_cap |= RDP_PS_32GB; | ||
4708 | if (phba->lmt & LMT_16Gb) | 4710 | if (phba->lmt & LMT_16Gb) |
4709 | rdp_cap |= RDP_PS_16GB; | 4711 | rdp_cap |= RDP_PS_16GB; |
4710 | if (phba->lmt & LMT_10Gb) | 4712 | if (phba->lmt & LMT_10Gb) |
diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c index 71b90447b21c..614d8e90df14 100644 --- a/drivers/scsi/lpfc/lpfc_hbadisc.c +++ b/drivers/scsi/lpfc/lpfc_hbadisc.c | |||
@@ -3029,6 +3029,7 @@ lpfc_mbx_process_link_up(struct lpfc_hba *phba, struct lpfc_mbx_read_top *la) | |||
3029 | case LPFC_LINK_SPEED_8GHZ: | 3029 | case LPFC_LINK_SPEED_8GHZ: |
3030 | case LPFC_LINK_SPEED_10GHZ: | 3030 | case LPFC_LINK_SPEED_10GHZ: |
3031 | case LPFC_LINK_SPEED_16GHZ: | 3031 | case LPFC_LINK_SPEED_16GHZ: |
3032 | case LPFC_LINK_SPEED_32GHZ: | ||
3032 | phba->fc_linkspeed = bf_get(lpfc_mbx_read_top_link_spd, la); | 3033 | phba->fc_linkspeed = bf_get(lpfc_mbx_read_top_link_spd, la); |
3033 | break; | 3034 | break; |
3034 | default: | 3035 | default: |
diff --git a/drivers/scsi/lpfc/lpfc_hw.h b/drivers/scsi/lpfc/lpfc_hw.h index 892c5257d87c..f73b6e1833cc 100644 --- a/drivers/scsi/lpfc/lpfc_hw.h +++ b/drivers/scsi/lpfc/lpfc_hw.h | |||
@@ -1400,6 +1400,7 @@ struct lpfc_fdmi_reg_portattr { | |||
1400 | #define PCI_DEVICE_ID_LANCER_FC_VF 0xe208 | 1400 | #define PCI_DEVICE_ID_LANCER_FC_VF 0xe208 |
1401 | #define PCI_DEVICE_ID_LANCER_FCOE 0xe260 | 1401 | #define PCI_DEVICE_ID_LANCER_FCOE 0xe260 |
1402 | #define PCI_DEVICE_ID_LANCER_FCOE_VF 0xe268 | 1402 | #define PCI_DEVICE_ID_LANCER_FCOE_VF 0xe268 |
1403 | #define PCI_DEVICE_ID_LANCER_G6_FC 0xe300 | ||
1403 | #define PCI_DEVICE_ID_SAT_SMB 0xf011 | 1404 | #define PCI_DEVICE_ID_SAT_SMB 0xf011 |
1404 | #define PCI_DEVICE_ID_SAT_MID 0xf015 | 1405 | #define PCI_DEVICE_ID_SAT_MID 0xf015 |
1405 | #define PCI_DEVICE_ID_RFLY 0xf095 | 1406 | #define PCI_DEVICE_ID_RFLY 0xf095 |
@@ -2075,6 +2076,7 @@ typedef struct { | |||
2075 | #define LINK_SPEED_8G 0x8 /* 8 Gigabaud */ | 2076 | #define LINK_SPEED_8G 0x8 /* 8 Gigabaud */ |
2076 | #define LINK_SPEED_10G 0x10 /* 10 Gigabaud */ | 2077 | #define LINK_SPEED_10G 0x10 /* 10 Gigabaud */ |
2077 | #define LINK_SPEED_16G 0x11 /* 16 Gigabaud */ | 2078 | #define LINK_SPEED_16G 0x11 /* 16 Gigabaud */ |
2079 | #define LINK_SPEED_32G 0x14 /* 32 Gigabaud */ | ||
2078 | 2080 | ||
2079 | } INIT_LINK_VAR; | 2081 | } INIT_LINK_VAR; |
2080 | 2082 | ||
@@ -2246,6 +2248,7 @@ typedef struct { | |||
2246 | #define LMT_8Gb 0x080 | 2248 | #define LMT_8Gb 0x080 |
2247 | #define LMT_10Gb 0x100 | 2249 | #define LMT_10Gb 0x100 |
2248 | #define LMT_16Gb 0x200 | 2250 | #define LMT_16Gb 0x200 |
2251 | #define LMT_32Gb 0x400 | ||
2249 | uint32_t rsvd2; | 2252 | uint32_t rsvd2; |
2250 | uint32_t rsvd3; | 2253 | uint32_t rsvd3; |
2251 | uint32_t max_xri; | 2254 | uint32_t max_xri; |
@@ -2727,6 +2730,7 @@ struct lpfc_mbx_read_top { | |||
2727 | #define LPFC_LINK_SPEED_8GHZ 0x20 | 2730 | #define LPFC_LINK_SPEED_8GHZ 0x20 |
2728 | #define LPFC_LINK_SPEED_10GHZ 0x40 | 2731 | #define LPFC_LINK_SPEED_10GHZ 0x40 |
2729 | #define LPFC_LINK_SPEED_16GHZ 0x80 | 2732 | #define LPFC_LINK_SPEED_16GHZ 0x80 |
2733 | #define LPFC_LINK_SPEED_32GHZ 0x90 | ||
2730 | }; | 2734 | }; |
2731 | 2735 | ||
2732 | /* Structure for MB Command CLEAR_LA (22) */ | 2736 | /* Structure for MB Command CLEAR_LA (22) */ |
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c index 5a9786751837..db9446c612da 100644 --- a/drivers/scsi/lpfc/lpfc_init.c +++ b/drivers/scsi/lpfc/lpfc_init.c | |||
@@ -699,7 +699,9 @@ lpfc_hba_init_link_fc_topology(struct lpfc_hba *phba, uint32_t fc_topology, | |||
699 | ((phba->cfg_link_speed == LPFC_USER_LINK_SPEED_10G) && | 699 | ((phba->cfg_link_speed == LPFC_USER_LINK_SPEED_10G) && |
700 | !(phba->lmt & LMT_10Gb)) || | 700 | !(phba->lmt & LMT_10Gb)) || |
701 | ((phba->cfg_link_speed == LPFC_USER_LINK_SPEED_16G) && | 701 | ((phba->cfg_link_speed == LPFC_USER_LINK_SPEED_16G) && |
702 | !(phba->lmt & LMT_16Gb))) { | 702 | !(phba->lmt & LMT_16Gb)) || |
703 | ((phba->cfg_link_speed == LPFC_USER_LINK_SPEED_32G) && | ||
704 | !(phba->lmt & LMT_32Gb))) { | ||
703 | /* Reset link speed to auto */ | 705 | /* Reset link speed to auto */ |
704 | lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, | 706 | lpfc_printf_log(phba, KERN_ERR, LOG_LINK_EVENT, |
705 | "1302 Invalid speed for this board:%d " | 707 | "1302 Invalid speed for this board:%d " |
@@ -2035,7 +2037,9 @@ lpfc_get_hba_model_desc(struct lpfc_hba *phba, uint8_t *mdp, uint8_t *descp) | |||
2035 | && descp && descp[0] != '\0') | 2037 | && descp && descp[0] != '\0') |
2036 | return; | 2038 | return; |
2037 | 2039 | ||
2038 | if (phba->lmt & LMT_16Gb) | 2040 | if (phba->lmt & LMT_32Gb) |
2041 | max_speed = 32; | ||
2042 | else if (phba->lmt & LMT_16Gb) | ||
2039 | max_speed = 16; | 2043 | max_speed = 16; |
2040 | else if (phba->lmt & LMT_10Gb) | 2044 | else if (phba->lmt & LMT_10Gb) |
2041 | max_speed = 10; | 2045 | max_speed = 10; |
@@ -2229,6 +2233,9 @@ lpfc_get_hba_model_desc(struct lpfc_hba *phba, uint8_t *mdp, uint8_t *descp) | |||
2229 | m = (typeof(m)){"OCe15100", "PCIe", | 2233 | m = (typeof(m)){"OCe15100", "PCIe", |
2230 | "Obsolete, Unsupported FCoE"}; | 2234 | "Obsolete, Unsupported FCoE"}; |
2231 | break; | 2235 | break; |
2236 | case PCI_DEVICE_ID_LANCER_G6_FC: | ||
2237 | m = (typeof(m)){"LPe32000", "PCIe", "Fibre Channel Adapter"}; | ||
2238 | break; | ||
2232 | case PCI_DEVICE_ID_SKYHAWK: | 2239 | case PCI_DEVICE_ID_SKYHAWK: |
2233 | case PCI_DEVICE_ID_SKYHAWK_VF: | 2240 | case PCI_DEVICE_ID_SKYHAWK_VF: |
2234 | oneConnect = 1; | 2241 | oneConnect = 1; |
@@ -3491,6 +3498,8 @@ void lpfc_host_attrib_init(struct Scsi_Host *shost) | |||
3491 | sizeof fc_host_symbolic_name(shost)); | 3498 | sizeof fc_host_symbolic_name(shost)); |
3492 | 3499 | ||
3493 | fc_host_supported_speeds(shost) = 0; | 3500 | fc_host_supported_speeds(shost) = 0; |
3501 | if (phba->lmt & LMT_32Gb) | ||
3502 | fc_host_supported_speeds(shost) |= FC_PORTSPEED_32GBIT; | ||
3494 | if (phba->lmt & LMT_16Gb) | 3503 | if (phba->lmt & LMT_16Gb) |
3495 | fc_host_supported_speeds(shost) |= FC_PORTSPEED_16GBIT; | 3504 | fc_host_supported_speeds(shost) |= FC_PORTSPEED_16GBIT; |
3496 | if (phba->lmt & LMT_10Gb) | 3505 | if (phba->lmt & LMT_10Gb) |
@@ -3854,6 +3863,9 @@ lpfc_sli4_port_speed_parse(struct lpfc_hba *phba, uint32_t evt_code, | |||
3854 | case LPFC_FC_LA_SPEED_16G: | 3863 | case LPFC_FC_LA_SPEED_16G: |
3855 | port_speed = 16000; | 3864 | port_speed = 16000; |
3856 | break; | 3865 | break; |
3866 | case LPFC_FC_LA_SPEED_32G: | ||
3867 | port_speed = 32000; | ||
3868 | break; | ||
3857 | default: | 3869 | default: |
3858 | port_speed = 0; | 3870 | port_speed = 0; |
3859 | } | 3871 | } |
@@ -11349,6 +11361,8 @@ static struct pci_device_id lpfc_id_table[] = { | |||
11349 | PCI_ANY_ID, PCI_ANY_ID, }, | 11361 | PCI_ANY_ID, PCI_ANY_ID, }, |
11350 | {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LANCER_FCOE_VF, | 11362 | {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LANCER_FCOE_VF, |
11351 | PCI_ANY_ID, PCI_ANY_ID, }, | 11363 | PCI_ANY_ID, PCI_ANY_ID, }, |
11364 | {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_LANCER_G6_FC, | ||
11365 | PCI_ANY_ID, PCI_ANY_ID, }, | ||
11352 | {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SKYHAWK, | 11366 | {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SKYHAWK, |
11353 | PCI_ANY_ID, PCI_ANY_ID, }, | 11367 | PCI_ANY_ID, PCI_ANY_ID, }, |
11354 | {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SKYHAWK_VF, | 11368 | {PCI_VENDOR_ID_EMULEX, PCI_DEVICE_ID_SKYHAWK_VF, |
diff --git a/drivers/scsi/lpfc/lpfc_mbox.c b/drivers/scsi/lpfc/lpfc_mbox.c index 18838ea4b6aa..f87f90e9b7df 100644 --- a/drivers/scsi/lpfc/lpfc_mbox.c +++ b/drivers/scsi/lpfc/lpfc_mbox.c | |||
@@ -506,6 +506,13 @@ lpfc_init_link(struct lpfc_hba * phba, | |||
506 | break; | 506 | break; |
507 | } | 507 | } |
508 | 508 | ||
509 | if (phba->pcidev->device == PCI_DEVICE_ID_LANCER_G6_FC && | ||
510 | mb->un.varInitLnk.link_flags & FLAGS_TOPOLOGY_MODE_LOOP) { | ||
511 | /* Failover is not tried for Lancer G6 */ | ||
512 | mb->un.varInitLnk.link_flags = FLAGS_TOPOLOGY_MODE_PT_PT; | ||
513 | phba->cfg_topology = FLAGS_TOPOLOGY_MODE_PT_PT; | ||
514 | } | ||
515 | |||
509 | /* Enable asynchronous ABTS responses from firmware */ | 516 | /* Enable asynchronous ABTS responses from firmware */ |
510 | mb->un.varInitLnk.link_flags |= FLAGS_IMED_ABORT; | 517 | mb->un.varInitLnk.link_flags |= FLAGS_IMED_ABORT; |
511 | 518 | ||
@@ -539,6 +546,10 @@ lpfc_init_link(struct lpfc_hba * phba, | |||
539 | mb->un.varInitLnk.link_flags |= FLAGS_LINK_SPEED; | 546 | mb->un.varInitLnk.link_flags |= FLAGS_LINK_SPEED; |
540 | mb->un.varInitLnk.link_speed = LINK_SPEED_16G; | 547 | mb->un.varInitLnk.link_speed = LINK_SPEED_16G; |
541 | break; | 548 | break; |
549 | case LPFC_USER_LINK_SPEED_32G: | ||
550 | mb->un.varInitLnk.link_flags |= FLAGS_LINK_SPEED; | ||
551 | mb->un.varInitLnk.link_speed = LINK_SPEED_32G; | ||
552 | break; | ||
542 | case LPFC_USER_LINK_SPEED_AUTO: | 553 | case LPFC_USER_LINK_SPEED_AUTO: |
543 | default: | 554 | default: |
544 | mb->un.varInitLnk.link_speed = LINK_SPEED_AUTO; | 555 | mb->un.varInitLnk.link_speed = LINK_SPEED_AUTO; |