From patchwork Thu Jun 6 17:51:07 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Chan X-Patchwork-Id: 13688851 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-ot1-f41.google.com (mail-ot1-f41.google.com [209.85.210.41]) (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 90D7B1FAA for ; Thu, 6 Jun 2024 17:51:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717696299; cv=none; b=pjEYHLf5u164krNuhfwkQvOVb4X40LnyOdhhylt2B2jgD2aVaTqgokCVzdcvL0D/cqGfjR4bE9nhBjdyggMJW1K0pVahEpxgV7FgqCQ0/H3AOrdHQMnJ7FWmocTc+Q5i1WOBnRmQSJhXzUAkT14YSFtouVsWVO9Brq7DxF74FKA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717696299; c=relaxed/simple; bh=/6XWtAJvxpRAhPtjOC/YlU5wZPql/oGV385pjFQ7J7Q=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=FejxqwEFkktGaXySG/YHN2CfPvcV/wB2P4yAePlHMKp/iprf0MtVGqr1mejiRt9mvNbgbIBvylIDFhadiRHj/UlBJX733uiNX8BZOQ76p//nVl+Ge3sKSNeCHvpETXNDyVf1zPupqjp8CeAxnCbqQvRekj5KlveaTfVourCRbOc= 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=VMAv23Lm; arc=none smtp.client-ip=209.85.210.41 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="VMAv23Lm" Received: by mail-ot1-f41.google.com with SMTP id 46e09a7af769-6f94086e1ccso745082a34.0 for ; Thu, 06 Jun 2024 10:51:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1717696296; x=1718301096; darn=vger.kernel.org; h=mime-version:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=7vNHcogskWfVK3C3BZFdMYSyV9rtHd7dUKRAlnAR6LE=; b=VMAv23LmZkbw0uVYPt4KhTgBRyTd9q0AX2Iq+RAfey+rNVAyvXil6okpWamVh+ObQF Alye+fNK68SLlcBTYwnhXpEoJxX/IrO7Cb+pl8wxE8Q/5UgD8X/djfeYq2TKdEB0bf0G E0PjYL1AJjTLas1lMcKIF4FKi6mqTJ8v4kya8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717696296; x=1718301096; h=mime-version:message-id:date:subject:cc:to:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=7vNHcogskWfVK3C3BZFdMYSyV9rtHd7dUKRAlnAR6LE=; b=Lodz6DpT6CggEbgsIhqN5wntxTz5dmzbLLY+ze3lUgUJri/Rkk/BzxI9FV51LhKd3e y/nmt/DDRudgfdA+BO3g1coTUt/hGc3NY5s4fXGvB3f7Th9VNVkEX3IRBt+20arcOtFQ kiRSfMiQNqNXUNb0VYJrfR4vcfcSwYIOawBr/8/D6BjaxKTwr39BfBbgMN6IHUIbtNWr /GzUrxC3VuCUpW4zMnE9MgJSYmSpM03Kk65ygSRvkIRHdRf6lZ566W3HLE4U2Sl0bFki QmAz92BDwdAoRtC3DKYdvw50vhUCYmdl4MkAzzOn70WdcoPv8hvYEcAO5Iftnxk3yqQ6 whkg== X-Gm-Message-State: AOJu0YxL504jnaTAD0o0fLe8/eTRQ8zE8lmEVCZ58EJ9qMqPk+mLkACN aBFTSwb7V/BeBHc577X4UbeNc8IGbVRxDXyDsuBRfCDZuvE1t87RvnImbvBGyw== X-Google-Smtp-Source: AGHT+IHXXbQqP/wkV3Z9gnTU2N4nO/da6jMJOONWSLdWRKylFmrvL+3BJsiObgnSdMLJysZ9x1leWA== X-Received: by 2002:a05:6870:f10c:b0:24c:b820:6fe3 with SMTP id 586e51a60fabf-254644e8509mr248334fac.22.1717696296260; Thu, 06 Jun 2024 10:51:36 -0700 (PDT) Received: from lvnvda5233.lvn.broadcom.net ([192.19.161.250]) by smtp.gmail.com with ESMTPSA id af79cd13be357-79532811283sm81391585a.11.2024.06.06.10.51.34 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 06 Jun 2024 10:51:35 -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, Somnath Kotur , Pavan Chebbi Subject: [PATCH net] bnxt_en: Cap the size of HWRM_PORT_PHY_QCFG forwarded response Date: Thu, 6 Jun 2024 10:51:07 -0700 Message-ID: <20240606175107.53130-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. Also modify bnxt_hwrm_fwd_resp() to print a warning if the message size exceeds 96 bytes to make this failure more obvious. Bug: DCSG01725771 Change-Id: I4cd5e06a7625f9d06e779e4acd9603d355883e7c 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 --- drivers/net/ethernet/broadcom/bnxt/bnxt.h | 48 +++++++++++++++++++ .../net/ethernet/broadcom/bnxt/bnxt_sriov.c | 9 +++- 2 files changed, 55 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..377e66d5a23e 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,8 @@ 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; + phy_qcfg_resp.option_flags &= + ~PORT_PHY_QCAPS_RESP_FLAGS2_SPEEDS2_SUPPORTED; phy_qcfg_resp.valid = 1; if (vf->flags & BNXT_VF_LINK_UP) {