diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c index 6cf74f8c9628..3b24e8a5e29b 100644 --- a/drivers/scsi/qla2xxx/qla_attr.c +++ b/drivers/scsi/qla2xxx/qla_attr.c @@ -1835,7 +1835,7 @@ qla2x00_port_speed_store(struct device *dev, struct device_attribute *attr, return rval; speed = type; if (type == 40 || type == 80 || type == 160 || - type == 320) { + type == 320 || type == 640 || type == 1280) { ql_dbg(ql_dbg_user, vha, 0x70d9, "Setting will be affected after a loss of sync\n"); type = type/10; @@ -1860,6 +1860,12 @@ qla2x00_port_speed_store(struct device *dev, struct device_attribute *attr, case 32: ha->set_data_rate = PORT_SPEED_32GB; break; + case 64: + ha->set_data_rate = PORT_SPEED_64GB; + break; + case 128: + ha->set_data_rate = PORT_SPEED_128GB; + break; default: ql_log(ql_log_warn, vha, 0x1199, "Unrecognized speed setting:%lx. Setting Autoneg\n", diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 545066f67e02..5f7bc68aab3c 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -4793,7 +4793,14 @@ qla24xx_config_rings(struct scsi_qla_host *vha) ql_dbg(ql_dbg_init, vha, 0x00fd, "Speed set by user : %s Gbps \n", qla2x00_get_link_speed_str(ha, ha->set_data_rate)); - icb->firmware_options_3 = cpu_to_le32(ha->set_data_rate << 13); + /* + * The ICB data-rate field is 3 bits (bits 13-15); rates above + * 64G do not fit and would overflow into bit 16 (75 ohm + * termination select). Such rates are forced via MBC_DATA_RATE. + */ + if (ha->set_data_rate <= PORT_SPEED_64GB) + icb->firmware_options_3 = + cpu_to_le32(ha->set_data_rate << 13); } /* PCI posting */ diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c index d0894cc90470..ba822c196894 100644 --- a/drivers/scsi/qla2xxx/qla_mbx.c +++ b/drivers/scsi/qla2xxx/qla_mbx.c @@ -5720,6 +5720,8 @@ qla2x00_set_data_rate(scsi_qla_host_t *vha, uint16_t mode) case PORT_SPEED_8GB: case PORT_SPEED_16GB: case PORT_SPEED_32GB: + case PORT_SPEED_64GB: + case PORT_SPEED_128GB: val = ha->set_data_rate; break; default: