From patchwork Sat Jun 8 19:13:35 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Chan X-Patchwork-Id: 13691080 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-qv1-f52.google.com (mail-qv1-f52.google.com [209.85.219.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 306723FEC for ; Sat, 8 Jun 2024 19:14:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717874055; cv=none; b=Id6VwPO9pf02b0SmaGbM1M+/Fnd6cVQnkWvYjTWKrk8wEVl+iZUPOMD1f9ePQEA76nz6CvOC1K3NyK2OGNJK8PV3Z9rPYqaNxYRUvdTbbfZRih2licSvs+366NP7e0OQBeU8tAUXyRlDqt9YpllVTpyK5SxO/PKR30ztfQYKZ5M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717874055; c=relaxed/simple; bh=nuouoVNlSuwdHC0vgoc4gNVJkKd6kYdGqUjG6dThl5c=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=lrBmu4KTrrKw99y6P/h3LjK6A1J8TAOv1KDauYmUjaXhJ9zZOUHzqCuKd1Yd4dvhiXIPFfxzjrKLSxFvae35mxt8Sl+oWPmQrFoLUGsFBuAAi5Ams+wNTpRu0ELJLBr9pBShzYYd1Xfs31n3F6ZCIRp2rcGOfP6+9t82+xfKgFo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=broadcom.com; spf=fail smtp.mailfrom=broadcom.com; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b=FxUBJ99T; arc=none smtp.client-ip=209.85.219.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=broadcom.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b="FxUBJ99T" Received: by mail-qv1-f52.google.com with SMTP id 6a1803df08f44-6b0652ece5dso6407606d6.2 for ; Sat, 08 Jun 2024 12:14:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1717874053; x=1718478853; darn=vger.kernel.org; h=mime-version:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=xDmOsKmLfJVD9lE4QgKgWRD5aB9pgejG1bQPup1aRMk=; b=FxUBJ99TuV34v7lDUmdelK8NVP44WBSUJjIpPj7t1ypv2maqstdVa81KPBxUH2ELxZ Aa95mzUY14vO/Z1zlEmRHjv6eBf4hP3v5IEsH8fxlenjzn1G8BsOVOthWQzYVFW7HO8P s2nU80RruO2KVhja2Q6eZDFbPxShiERjiHPE4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717874053; x=1718478853; h=mime-version:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=xDmOsKmLfJVD9lE4QgKgWRD5aB9pgejG1bQPup1aRMk=; b=F1Y87L2tpoCkUgl4CLAebzhHVzPO8czKRXCCiLxjaSl6LPWFlqwD/PbelgL/gUJ0jo 8QDaLtOu/YsoecyflBKGVHCSvHgkfvLGdbhurl+StvGteymsan/CLaOkaDa6eRqbjFJS wK/28DXrNc0OWx01pJ9J6vriR8BUT49qAoqU+ue5sCvwu0qOWICIZz2yTXigmXwnJhKL NSmTz8qp01EAU6cfjoKm2azFRClnuyYWFSOe/SQfYG6laR76SjLUqp788F+o12ry780I I+7HcurmcPpH4E9kpWrkqUVfEKgKeIHgXHuvOO+/IOUFZpUdnfmM1fgFnp+L9VvrDV7M COIg== X-Gm-Message-State: AOJu0Yz9p8OzriQ+7HUnth33kUNgmtYXU8BjcuaK99Xo8SMFVOPshKNw 6oDwv7uGiGF7QrNcJdXrn6Q6PYD45ETIs+9k1r/tjXIZn9Dy9HiffArJTuasbg== X-Google-Smtp-Source: AGHT+IGNu3POxIv2UO6VV4KEpmaAa9iHw3/CrV9ff8JG2RA95HSwrN2p38BJKj+yh5P+LT3e/sGypw== X-Received: by 2002:a05:6214:4a04:b0:6af:c308:ee45 with SMTP id 6a1803df08f44-6b059b6a787mr64030246d6.6.1717874052849; Sat, 08 Jun 2024 12:14:12 -0700 (PDT) Received: from lvnvda5233.lvn.broadcom.net ([192.19.161.250]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6b076778790sm333766d6.135.2024.06.08.12.14.11 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 08 Jun 2024 12:14:12 -0700 (PDT) From: Michael Chan To: davem@davemloft.net Cc: netdev@vger.kernel.org, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, andrew.gospodarek@broadcom.com, horms@kernel.org, Somnath Kotur , Pavan Chebbi Subject: [PATCH net v2] bnxt_en: Cap the size of HWRM_PORT_PHY_QCFG forwarded response Date: Sat, 8 Jun 2024 12:13:35 -0700 Message-ID: <20240608191335.52174-1-michael.chan@broadcom.com> X-Mailer: git-send-email 2.43.4 Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org Firmware interface 1.10.2.118 has increased the size of HWRM_PORT_PHY_QCFG response beyond the maximum size that can be forwarded. When the VF's link state is not the default auto state, the PF will need to forward the response back to the VF to indicate the forced state. This regression may cause the VF to fail to initialize. Fix it by capping the HWRM_PORT_PHY_QCFG response to the maximum 96 bytes. The SPEEDS2_SUPPORTED flag needs to be cleared because the new speeds2 fields are beyond the legacy structure. Also modify bnxt_hwrm_fwd_resp() to print a warning if the message size exceeds 96 bytes to make this failure more obvious. Fixes: 84a911db8305 ("bnxt_en: Update firmware interface to 1.10.2.118") Reviewed-by: Somnath Kotur Reviewed-by: Pavan Chebbi Signed-off-by: Michael Chan --- v2: Remove Bug and ChangeID from ChangeLog Add comment to explain the clearing of the SPEEDS2_SUPPORTED flag --- drivers/net/ethernet/broadcom/bnxt/bnxt.h | 48 +++++++++++++++++++ .../net/ethernet/broadcom/bnxt/bnxt_sriov.c | 12 ++++- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h index 656ab81c0272..94d242aca8d5 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h @@ -1434,6 +1434,54 @@ struct bnxt_l2_filter { atomic_t refcnt; }; +/* hwrm_port_phy_qcfg_output (size:96 bytes) */ +struct hwrm_port_phy_qcfg_output_compat { + __le16 error_code; + __le16 req_type; + __le16 seq_id; + __le16 resp_len; + u8 link; + u8 active_fec_signal_mode; + __le16 link_speed; + u8 duplex_cfg; + u8 pause; + __le16 support_speeds; + __le16 force_link_speed; + u8 auto_mode; + u8 auto_pause; + __le16 auto_link_speed; + __le16 auto_link_speed_mask; + u8 wirespeed; + u8 lpbk; + u8 force_pause; + u8 module_status; + __le32 preemphasis; + u8 phy_maj; + u8 phy_min; + u8 phy_bld; + u8 phy_type; + u8 media_type; + u8 xcvr_pkg_type; + u8 eee_config_phy_addr; + u8 parallel_detect; + __le16 link_partner_adv_speeds; + u8 link_partner_adv_auto_mode; + u8 link_partner_adv_pause; + __le16 adv_eee_link_speed_mask; + __le16 link_partner_adv_eee_link_speed_mask; + __le32 xcvr_identifier_type_tx_lpi_timer; + __le16 fec_cfg; + u8 duplex_state; + u8 option_flags; + char phy_vendor_name[16]; + char phy_vendor_partnumber[16]; + __le16 support_pam4_speeds; + __le16 force_pam4_link_speed; + __le16 auto_pam4_link_speed_mask; + u8 link_partner_pam4_adv_speeds; + u8 valid; +}; + struct bnxt_link_info { u8 phy_type; u8 media_type; diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c index 175192ebaa77..b28073777ef5 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c @@ -950,8 +950,11 @@ static int bnxt_hwrm_fwd_resp(struct bnxt *bp, struct bnxt_vf_info *vf, struct hwrm_fwd_resp_input *req; int rc; - if (BNXT_FWD_RESP_SIZE_ERR(msg_size)) + if (BNXT_FWD_RESP_SIZE_ERR(msg_size)) { + netdev_warn_once(bp->dev, "HWRM fwd response too big (%d bytes)\n", + msg_size); return -EINVAL; + } rc = hwrm_req_init(bp, req, HWRM_FWD_RESP); if (!rc) { @@ -1085,7 +1088,7 @@ static int bnxt_vf_set_link(struct bnxt *bp, struct bnxt_vf_info *vf) rc = bnxt_hwrm_exec_fwd_resp( bp, vf, sizeof(struct hwrm_port_phy_qcfg_input)); } else { - struct hwrm_port_phy_qcfg_output phy_qcfg_resp = {0}; + struct hwrm_port_phy_qcfg_output_compat phy_qcfg_resp = {0}; struct hwrm_port_phy_qcfg_input *phy_qcfg_req; phy_qcfg_req = @@ -1096,6 +1099,11 @@ static int bnxt_vf_set_link(struct bnxt *bp, struct bnxt_vf_info *vf) mutex_unlock(&bp->link_lock); phy_qcfg_resp.resp_len = cpu_to_le16(sizeof(phy_qcfg_resp)); phy_qcfg_resp.seq_id = phy_qcfg_req->seq_id; + /* New SPEEDS2 fields are beyond the legacy structure, so + * clear the SPEEDS2_SUPPORTED flag. + */ + phy_qcfg_resp.option_flags &= + ~PORT_PHY_QCAPS_RESP_FLAGS2_SPEEDS2_SUPPORTED; phy_qcfg_resp.valid = 1; if (vf->flags & BNXT_VF_LINK_UP) {