From patchwork Wed Aug 23 22:05:16 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Madhani, Himanshu" X-Patchwork-Id: 9918577 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 130FE603FA for ; Wed, 23 Aug 2017 22:41:07 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 05777288F8 for ; Wed, 23 Aug 2017 22:41:07 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id EE93B28A99; Wed, 23 Aug 2017 22:41:06 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3FFC828AA0 for ; Wed, 23 Aug 2017 22:41:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751253AbdHWWlF (ORCPT ); Wed, 23 Aug 2017 18:41:05 -0400 Received: from mail-dm3nam03on0070.outbound.protection.outlook.com ([104.47.41.70]:51646 "EHLO NAM03-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751162AbdHWWlE (ORCPT ); Wed, 23 Aug 2017 18:41:04 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=i4U/DTKVfVUEsbBuZyYkrDfvE4Sr6G2UMVqUllO53lA=; b=TEMMRWCSS7sGbSD/N4RIc1uk7Xczun7YFT0+9wIhc87G4LTysuHARs/8s6lnLLw7c96NWTt8XxzA+PvbWLTXha5wOjAwyCVvLFYKqwSgunM9ozsBB1K6atgLvY0jXL7/dTdLXzBfDjilUaDJW6E2fyTV/rVUu3AoMhEGy0Atmak= Received: from CY1PR07CA0002.namprd07.prod.outlook.com (10.166.202.12) by CO2PR07MB2520.namprd07.prod.outlook.com (10.166.201.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.1.1362.18; Wed, 23 Aug 2017 22:41:02 +0000 Received: from BN1BFFO11FD017.protection.gbl (2a01:111:f400:7c10::1:110) by CY1PR07CA0002.outlook.office365.com (2a01:111:e400:c60a::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.1.1385.8 via Frontend Transport; Wed, 23 Aug 2017 22:41:02 +0000 Authentication-Results: spf=none (sender IP is 50.232.66.26) smtp.mailfrom=cavium.com; oracle.com; dkim=none (message not signed) header.d=none; oracle.com; dmarc=none action=none header.from=cavium.com; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by BN1BFFO11FD017.mail.protection.outlook.com (10.58.144.80) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.1341.15 via Frontend Transport; Wed, 23 Aug 2017 22:41:02 +0000 Received: from dut1171.mv.qlogic.com (172.29.51.171) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.347.0; Wed, 23 Aug 2017 15:40:58 -0700 Received: from dut1171.mv.qlogic.com (localhost [127.0.0.1]) by dut1171.mv.qlogic.com (8.14.7/8.14.7) with ESMTP id v7NM5S4G003238; Wed, 23 Aug 2017 15:05:28 -0700 Received: (from root@localhost) by dut1171.mv.qlogic.com (8.14.7/8.14.7/Submit) id v7NM5SX0003237; Wed, 23 Aug 2017 15:05:28 -0700 From: Himanshu Madhani To: , CC: , Subject: [PATCH 22/31] qla2xxx: Add support for minimum link speed Date: Wed, 23 Aug 2017 15:05:16 -0700 Message-ID: <20170823220525.3115-23-himanshu.madhani@cavium.com> X-Mailer: git-send-email 2.12.0 In-Reply-To: <20170823220525.3115-1-himanshu.madhani@cavium.com> References: <20170823220525.3115-1-himanshu.madhani@cavium.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:50.232.66.26; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(2980300002)(428002)(199003)(189002)(305945005)(478600001)(1076002)(87636003)(2906002)(47776003)(626005)(4326008)(189998001)(86362001)(36756003)(81166006)(2950100002)(8936002)(105586002)(5003940100001)(6666003)(50226002)(42186005)(101416001)(76176999)(5660300001)(54906002)(106466001)(356003)(33646002)(72206003)(80596001)(50466002)(8676002)(48376002)(81156014)(50986999)(69596002); DIR:OUT; SFP:1101; SCL:1; SRVR:CO2PR07MB2520; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; PTR:50-232-66-26-static.hfc.comcastbusiness.net; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD017; 1:0C7FjkFuca3ARqkJBNoc10PL9UWEB54X4hFhSXQlB3G6tyiQYBQga0uX28Mi3JGTDXvOqohUO3OH2E6ihN9dcsLSTDE49DIJGNcbjbBzLyE4rXKs8KYF5Vgp09AX5BBT X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 41ba1681-8cfe-4a38-499d-08d4ea780899 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(2017052603190)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:CO2PR07MB2520; X-Microsoft-Exchange-Diagnostics: 1; CO2PR07MB2520; 3:ZGSwQrL+igd1rMvs39JDebg2Gh0q5sr5hZvRoVIQsv6o9+GRfdvL+MX6u26DgM9GXhGVN0zJwsfdKJRubRdIM5D23QIc8dbqVh0I0dDYaqoIYrCSGBz8/DKbwYQl8/1UfqoqEx67S8KNR4hx7AzogvVmRh8RMMc73lwKS7NlDui5l57ewrrUJHOgVPO70j52NpXR4s0+SFZdvj9T3y3NETLRGfNXVeqA15PFJF0tpCn8SjQf6ePjkJBEMEMWcv+WPN/MNO0fh2yoRwhaSuNROq7PXHqipM6027IwzuxrJK9OUc4FHWiAjluEC0bGTiaQYBsTS2BCgVPCzhpXYBi8Og==; 25:Tm4ZKo9B19jp8KjNAb4IzVnjClq2elyaO1r9Kp6yLTnnMrkSe+TrvR8e0ma1IOw6iqjCVKt7A7pzEBXvNklkSHQ9SA7eOTOAKwSqEk921lXnkcYUhtTKWCU86j690HD2m8syh+U8W86AsiGEfK/U/Ww6QzYPA2fa5qXuCimssEoiEwqApRIT8KUKVwZVUeI31tcCmxH08JPk9vBYLZIlEltaig5kaCnbdbyBoR/wUvXi7SPhHxFj8FaF18guMoYDLQRttC7zfce+B9vvK+VXC1kvK7Y3hZ4o9rnPtNm+fjPc6pbF96rxii86WmO9xY5ESEzUOMUDaoihe7ByrHbRig==; 31:iP25CRtxadr4YJYPquCBfLwnq3vecOKpm9vqVu7U4e2sU5gF11x/JQHojqCNgkDhOWnZwF1hnRd5XyQhfr0IhA55HkWB9PSEqxp/QKBrtPv4pUxuRUZ7PvYA8Fdt0OQqcr51tkGdnAgGTEhialbe9PU/2LYxo72AeIWQo86WIDWs/9TQN6upEyDAvr6Xp77kodDKAWXoR83yQHw1ULBBtvKnVi6r2+2CP2Wnl8yqZJY= X-MS-TrafficTypeDiagnostic: CO2PR07MB2520: X-Microsoft-Exchange-Diagnostics: 1; CO2PR07MB2520; 20:gDiJN4DwZx5Z01bB671aPuRtsFmFGYU8tic8/4xswAHrwespFc+/2XlLIo0qkB7XCyTfZZz540NY+BHtm2OaAXhVI8NY3+EINV/kTmcXns79q7zO++/94Df59fO/tbIsKFw/tVT1gbVEr7+Q0E3DH3Bsw0LkXfr34/+J+ZXVEJ/nAiMRMDEWBqvSijM3w7cp1hSiGX7BJyEUoEP5C7FTdAlFqiOB9oAEouih2TdtyA3Bk9Fzq2/Lvg/gsoxtpi4f46PiOghgubIHjxce2Z1ify1UL93d1CS/fRv7jm8eiL4oEQZnOi5R4tGGB2h6G1S31dv611F5wGSlnOzt9n39T14Htdrvuo0eJQ4jWxtrznjnT0/aB/0jLsnDEDuEVmRGn14c4pOsxvi576Ed6tfid1P2jhIlDI1ukBjaV0SaDed7uUDD6uwYNzGIp5/N+r2Tx9BtkX9LgL5wNKSyg3mYbJr6YlMYekCt6U2Q6ZWVCUZO91xJLJZlxOJcqcStDN21; 4:18AZNBEdG8izYUn5wARQ4mH6/Bj6/ffgXshDfBel3M4leY4QToiZazUpCbRGfLUjdX92K2yel+N8SHrL834pnbxTLAjP1DdSVKm1v7TR+H58ul/Mkt41wz0uS5Yl2iNpFmBULC11uI+UfdkzDzyj1+1roUUGmN3oXowIac5iKY12IPLSmyTbfYtv3FQn1vA6/5qTGYPnQORoDdOT78Q8wQ2+/nrGoiOkSYiNzczM8SoBOa/USuB+4CZLTdePpFck X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(13018025)(8121501046)(5005006)(13016025)(10201501046)(93006095)(93001095)(100000703101)(100105400095)(3002001)(6041248)(20161123555025)(20161123558100)(20161123560025)(20161123564025)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:CO2PR07MB2520; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:CO2PR07MB2520; X-Forefront-PRVS: 040866B734 X-Microsoft-Exchange-Diagnostics: 1; CO2PR07MB2520; 23:O9JtAXySIDyJ/ASMUZT+QlYNqut9P2Rm1HywupJDuCenWhw43UwcXtcmKcPXDvgfDtnsMMy8Q/XsWtffO2GNAqLYRkQDKxM9c6NNb2Atz07JgtP01Shs21JjCmNmUQ57T7Eypym1tYybcPX1VTU6j9hW9nn0BHQQxsPm6zaM54lF5g5B9Rr1G6vF/An8FWzvepSSzcbjnznhD0Nkf+CUqmsMtFy7FdFUiem4LLl7TKopA+zt76gkaS64uFimn87w2ACAwTTWx68LvVY6FqIcWP4mEhvnMiDdak8md0h7lG2mgGahzu2ys47HGgv2p835/SdAZ7FYhYNXL2FCKhevQ/kv8/R+Qebx3SJ6mvqUQW479aIyJ8L0xkkR2KaJwKGOKt833ieZX6FvV7Y6yRJOyVvGHVQo8nY1mhZh/c4a0nWplTfOgLbs6YEUkf52hLMswwo8exTj5BwwqXiG6+OG5tNXGNN/Vr6pvs3R91ZXJh3pkIxKdD/EHOIBtDeoExbt6SjvJsbHIl9emamN6w6jnNNn8MhU20rJcOncrhe+QJN5W/DodHDpyp9JvedY0gZsn54Yb0jJQYgsI2q5/ItQr5JlJ02LThiXgYtF+sAJSQ/hcSrScabLcJYzdqT+DzyU2iI6+njWgrs8fZDqObQGQcBHIPP1jotp+7XBGH/L1oyOOkjXgTksM1tOnDJ/8VIICY0xwbK8V8zGa+70Hf70oLKMDV9IovhJY9Nlj9o0NBJRgO5yYzh+6PRZWr+3bcn6zeqzorJy7SN9FK7M3RcRVBRp431elW2sQANph664p2BwWBn4KkIVnjedAhqPK00+7BxpaQ4ihu26Z/PPSDtL4KSCUL+gEc3qVzraYtz5OosZ3HkPntcl0L1ZsmewTE1tAMyg4S+UM+nDr/ymHpDS4nQ/TF816954OMaA5zgmA 4/APOihwiPZRdTLfZ1rpH3W X-Microsoft-Exchange-Diagnostics: 1; CO2PR07MB2520; 6:tOP0DZiCqvPsrZWIdlurygyCBZ4498he6iP8ay4vL01b2ojWxltPRiU+fymLcbjQp5QRvYnrKhNBK63ndBv3uXLZuYsD7cfUz/CyOiyGgp7NPW1ddB5mstBdDmVPcHUb6GPaIflxm+OfiV1h9Upm+8l83GEgSZ/rS3tGsjtuBcZGRWv7wKXY3REcPhLRTFtfRbbc0s+NoEtD0qZeDMwX1zr5hdRUFx4iCrKJ8pwL/nxQBOd/eKZg2HJncPIr/D5V76ZJVnBb3fJEIJZFAQu9SR3UzRfxBgtwPJjYIeqB2Ex0vbfzb0u7HeopQd8ldQ3dt/+SJT012Eqt4l90FMfBOA==; 5:XdQcACpwstvi79bpQd9xfy6zHGfmed0oaUL0xHjZWgcdjYAjpfws0t9YawPoBi1q4BMQbg61b/a+UqcJcXjo8Tfc9oRbmIR6qS80w28lComunJdSZlXtpBShftBG4TRGNs4HdRFs1HoP3iRvrRGehQ==; 24:MqU7F9gyDxi+kauCmNo5mX+PkKSYk0Oq7abrlCtozVVgWDXmtc4UuoSj/16GJZzAztTX0Ths0frnyvGsb4jMUj3B7vZB7U71rU6dAaazmy4=; 7:I2U0DWLzxtFhLeFWDmBj4/OfBYdFCCFBwl9br0iV++cUHmUJGgxgffXKaJzxBMuiq4JAXSU9a50KeR4jdmIoimt4YKtArRQGXUBPSo4wkScDMqu5Jc5mWB7Y5LF9O2Ne314KUOULu9rODshXef0ybzBh6QRioq5rDyT7moY6RK2Sse5YDr6AVgld9cA7IqPqlsHJz+PR9a1A8xZ6k1xASBo+2B/CDxNgexKW1pRRFTg= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Aug 2017 22:41:02.3733 (UTC) X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=711e4ccf-2e9b-4bcf-a551-4094005b6194; Ip=[50.232.66.26]; Helo=[CAEXCH02.caveonetworks.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO2PR07MB2520 Sender: linux-scsi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Sawan Chandak Signed-off-by: Sawan Chandak Signed-off-by: Joe Carnuccio Signed-off-by: Himanshu Madhani --- drivers/scsi/qla2xxx/qla_attr.c | 36 ++++++++++++++++++++++++++++++++ drivers/scsi/qla2xxx/qla_def.h | 4 ++++ drivers/scsi/qla2xxx/qla_fw.h | 4 +++- drivers/scsi/qla2xxx/qla_isr.c | 5 +++++ drivers/scsi/qla2xxx/qla_mbx.c | 46 ++++++++++++++++++++++++++++++++++++++--- 5 files changed, 91 insertions(+), 4 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c index 9d2862233e3c..75c4b312645e 100644 --- a/drivers/scsi/qla2xxx/qla_attr.c +++ b/drivers/scsi/qla2xxx/qla_attr.c @@ -1481,6 +1481,38 @@ qla2x00_pep_version_show(struct device *dev, struct device_attribute *attr, ha->pep_version[0], ha->pep_version[1], ha->pep_version[2]); } +static ssize_t +qla2x00_min_link_speed_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); + struct qla_hw_data *ha = vha->hw; + + if (!IS_QLA27XX(ha)) + return scnprintf(buf, PAGE_SIZE, "\n"); + + return scnprintf(buf, PAGE_SIZE, "%s\n", + ha->min_link_speed == 5 ? "32Gps" : + ha->min_link_speed == 4 ? "16Gps" : + ha->min_link_speed == 3 ? "8Gps" : + ha->min_link_speed == 2 ? "4Gps" : + ha->min_link_speed != 0 ? "unknown" : ""); +} + +static ssize_t +qla2x00_max_speed_sup_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); + struct qla_hw_data *ha = vha->hw; + + if (!IS_QLA27XX(ha)) + return scnprintf(buf, PAGE_SIZE, "\n"); + + return scnprintf(buf, PAGE_SIZE, "%s\n", + ha->max_speed_sup ? "32Gps" : "16Gps"); +} + static DEVICE_ATTR(driver_version, S_IRUGO, qla2x00_drvr_version_show, NULL); static DEVICE_ATTR(fw_version, S_IRUGO, qla2x00_fw_version_show, NULL); static DEVICE_ATTR(serial_num, S_IRUGO, qla2x00_serial_num_show, NULL); @@ -1526,6 +1558,8 @@ static DEVICE_ATTR(allow_cna_fw_dump, S_IRUGO | S_IWUSR, qla2x00_allow_cna_fw_dump_show, qla2x00_allow_cna_fw_dump_store); static DEVICE_ATTR(pep_version, S_IRUGO, qla2x00_pep_version_show, NULL); +static DEVICE_ATTR(min_link_speed, S_IRUGO, qla2x00_min_link_speed_show, NULL); +static DEVICE_ATTR(max_speed_sup, S_IRUGO, qla2x00_max_speed_sup_show, NULL); struct device_attribute *qla2x00_host_attrs[] = { &dev_attr_driver_version, @@ -1560,6 +1594,8 @@ struct device_attribute *qla2x00_host_attrs[] = { &dev_attr_fw_dump_size, &dev_attr_allow_cna_fw_dump, &dev_attr_pep_version, + &dev_attr_min_link_speed, + &dev_attr_max_speed_sup, NULL, }; diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index 609687d04e3c..0f80b812f4a7 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -902,6 +902,7 @@ struct mbx_cmd_32 { #define MBA_SHUTDOWN_REQUESTED 0x8062 /* Shutdown Requested */ #define MBA_TEMPERATURE_ALERT 0x8070 /* Temperature Alert */ #define MBA_DPORT_DIAGNOSTICS 0x8080 /* D-port Diagnostics */ +#define MBA_TRANS_INSERT 0x8130 /* Transceiver Insertion */ #define MBA_FW_INIT_FAILURE 0x8401 /* Firmware initialization failure */ #define MBA_MIRROR_LUN_CHANGE 0x8402 /* Mirror LUN State Change Notification */ @@ -4026,6 +4027,8 @@ struct qla_hw_data { struct qlt_hw_data tgt; int allow_cna_fw_dump; + uint16_t min_link_speed; + uint16_t max_speed_sup; atomic_t nvme_active_aen_cnt; uint16_t nvme_last_rptd_aen; /* Last recorded aen count */ @@ -4212,6 +4215,7 @@ typedef struct scsi_qla_host { int fcport_count; wait_queue_head_t fcport_waitQ; wait_queue_head_t vref_waitq; + uint8_t min_link_speed_feat; } scsi_qla_host_t; struct qla27xx_image_status { diff --git a/drivers/scsi/qla2xxx/qla_fw.h b/drivers/scsi/qla2xxx/qla_fw.h index b9c9886e8b1d..94eb1694fc3e 100644 --- a/drivers/scsi/qla2xxx/qla_fw.h +++ b/drivers/scsi/qla2xxx/qla_fw.h @@ -1745,7 +1745,9 @@ struct nvram_81xx { uint16_t reserved_6_3[14]; /* Offset 192. */ - uint16_t reserved_7[32]; + uint8_t min_link_speed; + uint8_t reserved_7_0; + uint16_t reserved_7[31]; /* * BIT 0 = Enable spinup delay diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index c58fb493dbd9..527c5218e10b 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c @@ -1233,6 +1233,11 @@ qla2x00_async_event(scsi_qla_host_t *vha, struct rsp_que *rsp, uint16_t *mb) schedule_work(&ha->board_disable); break; + case MBA_TRANS_INSERT: + ql_dbg(ql_dbg_async, vha, 0x5091, + "Transceiver Insertion: %04x\n", mb[1]); + break; + default: ql_dbg(ql_dbg_async, vha, 0x5057, "Unknown AEN:%04x %04x %04x %04x\n", diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c index da992b761402..32bbbd50567d 100644 --- a/drivers/scsi/qla2xxx/qla_mbx.c +++ b/drivers/scsi/qla2xxx/qla_mbx.c @@ -628,6 +628,19 @@ qla2x00_execute_fw(scsi_qla_host_t *vha, uint32_t risc_addr) if (ql2xnvmeenable && IS_QLA27XX(ha)) mcp->mb[4] |= NVME_ENABLE_FLAG; + if (IS_QLA83XX(ha) || IS_QLA27XX(ha)) { + struct nvram_81xx *nv = ha->nvram; + /* set minimum speed if specified in nvram */ + if (nv->min_link_speed >= 2 && + nv->min_link_speed <= 5) { + mcp->mb[4] |= BIT_4; + mcp->mb[11] = nv->min_link_speed; + mcp->out_mb |= MBX_11; + mcp->in_mb |= BIT_5; + vha->min_link_speed_feat = nv->min_link_speed; + } + } + if (ha->flags.exlogins_enabled) mcp->mb[4] |= ENABLE_EXTENDED_LOGIN; @@ -654,8 +667,26 @@ qla2x00_execute_fw(scsi_qla_host_t *vha, uint32_t risc_addr) "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]); } else { if (IS_FWI2_CAPABLE(ha)) { + ql_dbg(ql_dbg_mbx, vha, 0x1027, + "exchanges=%x.\n", mcp->mb[1]); + if (IS_QLA27XX(ha)) { + ha->max_speed_sup = mcp->mb[2] & 1; + ql_dbg(ql_dbg_mbx, vha, 0x119b, + "Maximum speed supported=%s.\n", + ha->max_speed_sup ? "32Gps" : "16Gps"); + if (vha->min_link_speed_feat) { + ha->min_link_speed = mcp->mb[5]; + ql_dbg(ql_dbg_mbx, vha, 0x119c, + "Minimum speed set=%s.\n", + mcp->mb[5] == 5 ? "32Gps" : + mcp->mb[5] == 4 ? "16Gps" : + mcp->mb[5] == 3 ? "8Gps" : + mcp->mb[5] == 2 ? "4Gps" : + "unknown"); + } + } ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x1027, - "Done exchanges=%x.\n", mcp->mb[1]); + "Done.\n"); } else { ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x1028, "Done %s.\n", __func__); @@ -1687,7 +1718,11 @@ qla2x00_init_firmware(scsi_qla_host_t *vha, uint16_t size) "Failed=%x mb[0]=%x, mb[1]=%x, mb[2]=%x, mb[3]=%x,.\n", rval, mcp->mb[0], mcp->mb[1], mcp->mb[2], mcp->mb[3]); } else { - /*EMPTY*/ + if (IS_QLA27XX(ha)) { + if (mcp->mb[2] == 6 || mcp->mb[3] == 2) + ql_dbg(ql_dbg_mbx, vha, 0x119d, + "Invalid SFP/Validation Failed\n"); + } ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x104e, "Done %s.\n", __func__); } @@ -1892,6 +1927,7 @@ qla2x00_get_firmware_state(scsi_qla_host_t *vha, uint16_t *states) int rval; mbx_cmd_t mc; mbx_cmd_t *mcp = &mc; + struct qla_hw_data *ha = vha->hw; ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x1054, "Entered %s.\n", __func__); @@ -1920,7 +1956,11 @@ qla2x00_get_firmware_state(scsi_qla_host_t *vha, uint16_t *states) /*EMPTY*/ ql_dbg(ql_dbg_mbx, vha, 0x1055, "Failed=%x.\n", rval); } else { - /*EMPTY*/ + if (IS_QLA27XX(ha)) { + if (mcp->mb[2] == 6 || mcp->mb[3] == 2) + ql_dbg(ql_dbg_mbx, vha, 0x119e, + "Invalid SFP/Validation Failed\n"); + } ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x1056, "Done %s.\n", __func__); }