From patchwork Tue Nov 14 16:07:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Williams X-Patchwork-Id: 165010 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:6358:a59:b0:164:83eb:24d7 with SMTP id 25csp2029011rwb; Tue, 14 Nov 2023 08:08:54 -0800 (PST) X-Google-Smtp-Source: AGHT+IGuSG4QgwhR8hDIJQauLzLy+zdUdhvwLl94wE6H175pZwdF6rmYra3Tz8Q9vCKLjS3LaZiO X-Received: by 2002:a17:90b:4f84:b0:27d:661f:59ac with SMTP id qe4-20020a17090b4f8400b0027d661f59acmr7952523pjb.38.1699978134009; Tue, 14 Nov 2023 08:08:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1699978133; cv=none; d=google.com; s=arc-20160816; b=0tNl0JtVV0+aiMAv6UFGRTfokxUDZHeLUB3f2oy/KIRStX87NvkqOlr0wH+TBb2FKf KqFUMluFUoaRd3YTEDEgQULpFKHR6ckjrhZSuN2JrY5kCYR019laMtooWsSMnZJnOB+m Yhom+kXQLW3IWVKB5wMdjisk5GQpF6YK5tx6vFHeWGSIOuxkaOYbYbkHNDzIRh4ZSKdQ KQIGk6JLbkssINh7gQq+l7kBFVOhuaqBqtQEWaEYxp60DLMHp74h4AMkcxQhtqu3YA6m tudG+dcHcFcsmFMWtVLgxi38wfOKsZZ3Oi15ljwnByiagS7a32LZEhhuL3xjx/LK/QRp Ydzw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :feedback-id:dkim-signature:dkim-signature; bh=Ommov9xLRmN5YyPFiK9sbrKSCV5Vks42OsIemChD7aM=; fh=aTLkBH5CsZSc2GrYc1PVZLAwTGPXWlHJGoDjf+30ZP8=; b=T6hDFJ1xuYNl44YRZkNbmcevhJ4AJmfF+ZxQ4i9hJvFdKxj5vdrxkrHBR4LpN8NKrz yk8g/xZF2+4lMaWzL4lIo+Y+9mMffuP7n8a2V16deEKlpngcq0bKB6hkde5iPmuBkTeE ALD6kqpCZqbcIwtURNbikIFxt9D0Kaj5SuXVnOKLqdyi7hVRCBM/zQxB8DtGs0N/nD0e GD/7iJzw4JN5M78QRx9se6/3KQlATOH/5ltSPyNJFSyFR5HVuKmDmvGswiW4henVX4SZ WeHCm2PNjzscgpZY29Mtzs9gsgsUCiua3l1tFopoiWzF/LWG3i8ZaVA9whCMDnOR8wjN xNEA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@stwcx.xyz header.s=fm3 header.b=W9NMfeOQ; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=MWUqb6uI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from fry.vger.email (fry.vger.email. [2620:137:e000::3:8]) by mx.google.com with ESMTPS id ob18-20020a17090b391200b0027916d248bbsi8600079pjb.162.2023.11.14.08.08.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Nov 2023 08:08:53 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) client-ip=2620:137:e000::3:8; Authentication-Results: mx.google.com; dkim=pass header.i=@stwcx.xyz header.s=fm3 header.b=W9NMfeOQ; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=MWUqb6uI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id 6A5E780BE616; Tue, 14 Nov 2023 08:08:33 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233795AbjKNQH7 (ORCPT + 29 others); Tue, 14 Nov 2023 11:07:59 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58554 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233773AbjKNQH5 (ORCPT ); Tue, 14 Nov 2023 11:07:57 -0500 Received: from out1-smtp.messagingengine.com (out1-smtp.messagingengine.com [66.111.4.25]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DE320130; Tue, 14 Nov 2023 08:07:52 -0800 (PST) Received: from compute2.internal (compute2.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id EB2075C0120; Tue, 14 Nov 2023 11:07:49 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute2.internal (MEProxy); Tue, 14 Nov 2023 11:07:49 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stwcx.xyz; h=cc :cc:content-transfer-encoding:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:sender:subject:subject:to:to; s=fm3; t=1699978069; x= 1700064469; bh=Ommov9xLRmN5YyPFiK9sbrKSCV5Vks42OsIemChD7aM=; b=W 9NMfeOQA5KSgcRScEqSLBjslRpw7CRpCRujgJsmZ81k46KPpWhBbNbVuk1TXxC+V 6So7WbZiBXAp1+jfF8gQnaUB4tWdoiQ6nE9hrl/HSU5hN1gIzAp2n5wgEjexfaOJ CgiJeTg3j8EKUL1zEqPfQSX2W1fr5K01/jD+lgPiJVythcHbavOMsvMCxG/ym8p6 xFyuOuUaxXTzyi1vucupm27D1yjRp9NjCtM1Pf8GlRVoWEuNM2dFp8VMe5+N68g7 vf1cbohbHnpuK7s8QMgfpBARrg3dXVjd/mtLZjBuqbCzEdqnfFuReCnb2C3H8MeM kV/cxnBId3A2lr/nINVNg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:sender:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t=1699978069; x= 1700064469; bh=Ommov9xLRmN5YyPFiK9sbrKSCV5Vks42OsIemChD7aM=; b=M WUqb6uIpvZL0zTVDt1cBLETG+g+hUbuUigEdLqh/kLVmFs4kCwtGtfLkblERbWf2 IHOv+X7GC1AhyW7/meDlcRAWlzXVal7tbJDnH32vnwekl7PAyeo45IrtRO+AwuiH sqoQwGTHeh+yGBcNWJsOM8jatvWxLJCnsivJcoJolAOXkAJzt+lADadffjlTlK9t ZqTQKEuiJT8nGDcJixbJp8CsSiF1oKuFgMjllqeUsldd+Rr3XA3nocg3UqLxTr5D RlLds2rpS0/oARUH/+9zoiG9WyqWCwkXU4AGf/e/lifADI128pywE0ovqbxX/w0b vymZmU4YnbXlFcEavBTgA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedrudefvddgkeefucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne gfrhhlucfvnfffucdludejmdenucfjughrpefhvfevufffkffojghfggfgsedtkeertder tddtnecuhfhrohhmpefrrghtrhhitghkucghihhllhhirghmshcuoehprghtrhhitghkse hsthiftgigrdighiiiqeenucggtffrrghtthgvrhhnpeffuddukeehveeiiefhhfdvgffg udfffffhteeileetteevtdejgfeiledtveevgfenucffohhmrghinhepkhgvrhhnvghlrd horhhgpdhgihhthhhusgdrtghomhenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgr mhepmhgrihhlfhhrohhmpehprghtrhhitghksehsthiftgigrdighiii X-ME-Proxy: Feedback-ID: i68a1478a:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 14 Nov 2023 11:07:49 -0500 (EST) From: Patrick Williams To: Samuel Mendoza-Jonas , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Peter Delevoryas , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v2 1/3] net/ncsi: Simplify Kconfig/dts control flow Date: Tue, 14 Nov 2023 10:07:33 -0600 Message-ID: <20231114160737.3209218-2-patrick@stwcx.xyz> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231114160737.3209218-1-patrick@stwcx.xyz> References: <20231114160737.3209218-1-patrick@stwcx.xyz> MIME-Version: 1.0 X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (fry.vger.email [0.0.0.0]); Tue, 14 Nov 2023 08:08:33 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1782556271528341156 X-GMAIL-MSGID: 1782556271528341156 From: Peter Delevoryas Background: 1. CONFIG_NCSI_OEM_CMD_KEEP_PHY If this is enabled, we send an extra OEM Intel command in the probe sequence immediately after discovering a channel (e.g. after "Clear Initial State"). 2. CONFIG_NCSI_OEM_CMD_GET_MAC If this is enabled, we send one of 3 OEM "Get MAC Address" commands from Broadcom, Mellanox (Nvidida), and Intel in the *configuration* sequence for a channel. 3. mellanox,multi-host (or mlx,multi-host) Introduced by this patch: https://lore.kernel.org/all/20200108234341.2590674-1-vijaykhemka@fb.com/ Which was actually originally from cosmo.chou@quantatw.com: https://github.com/facebook/openbmc-linux/commit/9f132a10ec48db84613519258cd8a317fb9c8f1b Cosmo claimed that the Nvidia ConnectX-4 and ConnectX-6 NIC's don't respond to Get Version ID, et. al in the probe sequence unless you send the Set MC Affinity command first. Problem Statement: We've been using a combination of #ifdef code blocks and IS_ENABLED() conditions to conditionally send these OEM commands. It makes adding any new code around these commands hard to understand. Solution: In this patch, I just want to remove the conditionally compiled blocks of code, and always use IS_ENABLED(...) to do dynamic control flow. I don't think the small amount of code this adds to non-users of the OEM Kconfigs is a big deal. Signed-off-by: Peter Delevoryas --- net/ncsi/ncsi-manage.c | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/net/ncsi/ncsi-manage.c b/net/ncsi/ncsi-manage.c index d9da942ad53d..f3d7fe86fea1 100644 --- a/net/ncsi/ncsi-manage.c +++ b/net/ncsi/ncsi-manage.c @@ -689,8 +689,6 @@ static int set_one_vid(struct ncsi_dev_priv *ndp, struct ncsi_channel *nc, return 0; } -#if IS_ENABLED(CONFIG_NCSI_OEM_CMD_KEEP_PHY) - static int ncsi_oem_keep_phy_intel(struct ncsi_cmd_arg *nca) { unsigned char data[NCSI_OEM_INTEL_CMD_KEEP_PHY_LEN]; @@ -716,10 +714,6 @@ static int ncsi_oem_keep_phy_intel(struct ncsi_cmd_arg *nca) return ret; } -#endif - -#if IS_ENABLED(CONFIG_NCSI_OEM_CMD_GET_MAC) - /* NCSI OEM Command APIs */ static int ncsi_oem_gma_handler_bcm(struct ncsi_cmd_arg *nca) { @@ -856,8 +850,6 @@ static int ncsi_gma_handler(struct ncsi_cmd_arg *nca, unsigned int mf_id) return nch->handler(nca); } -#endif /* CONFIG_NCSI_OEM_CMD_GET_MAC */ - /* Determine if a given channel from the channel_queue should be used for Tx */ static bool ncsi_channel_is_tx(struct ncsi_dev_priv *ndp, struct ncsi_channel *nc) @@ -1039,20 +1031,18 @@ static void ncsi_configure_channel(struct ncsi_dev_priv *ndp) goto error; } - nd->state = ncsi_dev_state_config_oem_gma; + nd->state = IS_ENABLED(CONFIG_NCSI_OEM_CMD_GET_MAC) + ? ncsi_dev_state_config_oem_gma + : ncsi_dev_state_config_clear_vids; break; case ncsi_dev_state_config_oem_gma: nd->state = ncsi_dev_state_config_clear_vids; - ret = -1; -#if IS_ENABLED(CONFIG_NCSI_OEM_CMD_GET_MAC) nca.type = NCSI_PKT_CMD_OEM; nca.package = np->id; nca.channel = nc->id; ndp->pending_req_num = 1; ret = ncsi_gma_handler(&nca, nc->version.mf_id); -#endif /* CONFIG_NCSI_OEM_CMD_GET_MAC */ - if (ret < 0) schedule_work(&ndp->work); @@ -1404,7 +1394,6 @@ static void ncsi_probe_channel(struct ncsi_dev_priv *ndp) schedule_work(&ndp->work); break; -#if IS_ENABLED(CONFIG_NCSI_OEM_CMD_GET_MAC) case ncsi_dev_state_probe_mlx_gma: ndp->pending_req_num = 1; @@ -1429,7 +1418,6 @@ static void ncsi_probe_channel(struct ncsi_dev_priv *ndp) nd->state = ncsi_dev_state_probe_cis; break; -#endif /* CONFIG_NCSI_OEM_CMD_GET_MAC */ case ncsi_dev_state_probe_cis: ndp->pending_req_num = NCSI_RESERVED_CHANNEL; @@ -1447,7 +1435,6 @@ static void ncsi_probe_channel(struct ncsi_dev_priv *ndp) if (IS_ENABLED(CONFIG_NCSI_OEM_CMD_KEEP_PHY)) nd->state = ncsi_dev_state_probe_keep_phy; break; -#if IS_ENABLED(CONFIG_NCSI_OEM_CMD_KEEP_PHY) case ncsi_dev_state_probe_keep_phy: ndp->pending_req_num = 1; @@ -1460,7 +1447,6 @@ static void ncsi_probe_channel(struct ncsi_dev_priv *ndp) nd->state = ncsi_dev_state_probe_gvi; break; -#endif /* CONFIG_NCSI_OEM_CMD_KEEP_PHY */ case ncsi_dev_state_probe_gvi: case ncsi_dev_state_probe_gc: case ncsi_dev_state_probe_gls: From patchwork Tue Nov 14 16:07:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Williams X-Patchwork-Id: 165008 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:6358:a59:b0:164:83eb:24d7 with SMTP id 25csp2028535rwb; Tue, 14 Nov 2023 08:08:18 -0800 (PST) X-Google-Smtp-Source: AGHT+IEb//q51I1H60/RP7Xs9aP4maDMchp/8xlK+4ac8Eoh1CfQG+lLHVu2bB4aBgATEROB2Ync X-Received: by 2002:a05:6a00:2d8b:b0:6c3:464d:c173 with SMTP id fb11-20020a056a002d8b00b006c3464dc173mr9450238pfb.13.1699978098246; Tue, 14 Nov 2023 08:08:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1699978098; cv=none; d=google.com; s=arc-20160816; b=h4CDXhZjuZAZ+uKzWvedUV8C1vI4VUhrRZKe8U5ksxzIR0STStUsd0NhADmAqAjWqH vd4OHRDbOgjmB9eHm3Z/Ua2YLFv2m3l7lmGTKhfqHWCfV+wuZ5QSx/g76ajTYLdaAWhI UVU8bp5Kn7sT8Px9DRKvi8dVmpNbE9TNcq9UqNnKmXMDOJhPyL47jPjDz96GEEFkakVE myjeknBPzOfmD+MPBRuR/O7XJaPjOxO/uSfErvpRDpevP7GLTM8B7ncrtxJ7E2n0sy9R 5sLE199G4PZn+kNP3PgY5Zj4ccVjph9cHOxXzmhAFrRl5ON15FCSdC++CVt5sOK7eq9d /dgg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :feedback-id:dkim-signature:dkim-signature; bh=kIut46fx2IEds+GnftD+Puxb3jCN/JHSvCNajszxUrc=; fh=zUqpPpjkwukG7wG5NjvxcBBurci+XABRdPgnaAN5oJM=; b=LKWwYdf5fa0wko+0nkZDj+Nb5K3tf6XcQt0QPZc+8NmG2HxvVU0lejL7gujwS+iFT+ QYRAt9eHIKyYjdsKW8NAZHU4RsiR3XFvTAQevAypAh4sS61zTs4ZGlkTtEJju8Ki2+1I saSF59OfJtHN27tL2nK0eKO2s6M9IxTy0BiNhHpgq4IFYmmYNwddbk/ge4XcicENeZOt hrZUqO269hKfBvg4PPuBZwYMwHAFUQWwejAmswisRuoM1vtgRqkA4hKPBNtT0fPIo5D+ NsFUgYsqzdM2Xo31MJ/jCrpEykoTT+VfuLvaxh322vIb+8ajEfxpqttf2TpEqZgnXQKU Xstg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@stwcx.xyz header.s=fm3 header.b=Fd43aS4f; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b="C/4D1mzy"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id bd33-20020a056a0027a100b006a77343b0d1si8123509pfb.272.2023.11.14.08.08.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Nov 2023 08:08:18 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@stwcx.xyz header.s=fm3 header.b=Fd43aS4f; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b="C/4D1mzy"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 7AAE080ECF2F; Tue, 14 Nov 2023 08:08:09 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233773AbjKNQIB (ORCPT + 29 others); Tue, 14 Nov 2023 11:08:01 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58560 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233786AbjKNQH5 (ORCPT ); Tue, 14 Nov 2023 11:07:57 -0500 Received: from out1-smtp.messagingengine.com (out1-smtp.messagingengine.com [66.111.4.25]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5BD5F132; Tue, 14 Nov 2023 08:07:53 -0800 (PST) Received: from compute7.internal (compute7.nyi.internal [10.202.2.48]) by mailout.nyi.internal (Postfix) with ESMTP id C92595C02AC; Tue, 14 Nov 2023 11:07:52 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute7.internal (MEProxy); Tue, 14 Nov 2023 11:07:52 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stwcx.xyz; h=cc :cc:content-transfer-encoding:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:sender:subject:subject:to:to; s=fm3; t=1699978072; x= 1700064472; bh=kIut46fx2IEds+GnftD+Puxb3jCN/JHSvCNajszxUrc=; b=F d43aS4fP5efyh6m/Qrc09jOR9M3wJUOTP7+Tld62RdpM29wLjQYMmITHC+BvrHU8 dXMDVOxWnFsDkvJ/ocUq5SLoQHmUNrIlKx2TqkPsMclS1Ddcd2IAgFLEEm3DHgH9 rAdE5sakxcHSuCCr1SaDnXLqXRik6md8khuu1rTEdmUNIzy+rp6gQfCjlLtMViRT DEH8iyCeeE8Ogx4F1tnyYCMaV2fidb+LmzGEZtgtEAOyg4gno8kqQ7m/kH84RTWu Y6R2Z3gf3SaBX054m7ri5Ptn18J7F10h+ngVRA9suDWZFZWSGJo2SVcP6W45RxXN WlQYmcaRL/YFUk4WX8KPw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:sender:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t=1699978072; x= 1700064472; bh=kIut46fx2IEds+GnftD+Puxb3jCN/JHSvCNajszxUrc=; b=C /4D1mzyEwHG3nSz92fZDDpb2nFEIVZVpT+bjVOBjYD5MA50zM37LQRS3n/9vvXfq JI9DoNe424qCYQ1OF4SZx+XXATHqwEAbj8tMU7xR6TYuOggZ1IPvVoDBfp6PGtl/ rMewhBt/vo86hNUF1P9c2kcGEhSN7e9uRKKNB5fpnFEJNEamyjFIJaRkj2+scShl 2uE3Ka7uF43WP69VUjKnlLDvB0sdT1CRo0LJB1UOEnafLOtFa0iWz8z0ehdsgehL MkDurzYK+kMxeTmKXOCE0fwsfLNFCoxotYk07UfnfdobcQk1Zjnbs6C7jrYLkHkH YIAs6Zh7wozwcI5NGZSFA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedrudefvddgkeefucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne gfrhhlucfvnfffucdlvdefmdenucfjughrpefhvfevufffkffojghfggfgsedtkeertder tddtnecuhfhrohhmpefrrghtrhhitghkucghihhllhhirghmshcuoehprghtrhhitghkse hsthiftgigrdighiiiqeenucggtffrrghtthgvrhhnpeejtddvjeetffekleekfeeljeet jeelgeefjeejjefhfeetfedvtdejfeehffekveenucffohhmrghinhepughmthhfrdhorh hgpdifihhkihhpvgguihgrrdhorhhgnecuvehluhhsthgvrhfuihiivgeptdenucfrrghr rghmpehmrghilhhfrhhomhepphgrthhrihgtkhesshhtfigtgidrgiihii X-ME-Proxy: Feedback-ID: i68a1478a:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 14 Nov 2023 11:07:51 -0500 (EST) From: Patrick Williams To: Samuel Mendoza-Jonas , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Gavin Shan , Joel Stanley Cc: Peter Delevoryas , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v2 2/3] net/ncsi: Fix netlink major/minor version numbers Date: Tue, 14 Nov 2023 10:07:34 -0600 Message-ID: <20231114160737.3209218-3-patrick@stwcx.xyz> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231114160737.3209218-1-patrick@stwcx.xyz> References: <20231114160737.3209218-1-patrick@stwcx.xyz> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Tue, 14 Nov 2023 08:08:09 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1782556234374566184 X-GMAIL-MSGID: 1782556234374566184 From: Peter Delevoryas The netlink interface for major and minor version numbers doesn't actually return the major and minor version numbers. It reports a u32 that contains the (major, minor, update, alpha1) components as the major version number, and then alpha2 as the minor version number. For whatever reason, the u32 byte order was reversed (ntohl): maybe it was assumed that the encoded value was a single big-endian u32, and alpha2 was the minor version. The correct way to get the supported NC-SI version from the network controller is to parse the Get Version ID response as described in 8.4.44 of the NC-SI spec[1]. Get Version ID Response Packet Format Bits +--------+--------+--------+--------+ Bytes | 31..24 | 23..16 | 15..8 | 7..0 | +-------+--------+--------+--------+--------+ | 0..15 | NC-SI Header | +-------+--------+--------+--------+--------+ | 16..19| Response code | Reason code | +-------+--------+--------+--------+--------+ |20..23 | Major | Minor | Update | Alpha1 | +-------+--------+--------+--------+--------+ |24..27 | reserved | Alpha2 | +-------+--------+--------+--------+--------+ | .... other stuff .... | The major, minor, and update fields are all binary-coded decimal (BCD) encoded [2]. The spec provides examples below the Get Version ID response format in section 8.4.44.1, but for practical purposes, this is an example from a live network card: root@bmc:~# ncsi-util 0x15 NC-SI Command Response: cmd: GET_VERSION_ID(0x15) Response: COMMAND_COMPLETED(0x0000) Reason: NO_ERROR(0x0000) Payload length = 40 20: 0xf1 0xf1 0xf0 0x00 <<<<<<<<< (major, minor, update, alpha1) 24: 0x00 0x00 0x00 0x00 <<<<<<<<< (_, _, _, alpha2) 28: 0x6d 0x6c 0x78 0x30 32: 0x2e 0x31 0x00 0x00 36: 0x00 0x00 0x00 0x00 40: 0x16 0x1d 0x07 0xd2 44: 0x10 0x1d 0x15 0xb3 48: 0x00 0x17 0x15 0xb3 52: 0x00 0x00 0x81 0x19 This should be parsed as "1.1.0". "f" in the upper-nibble means to ignore it, contributing zero. If both nibbles are "f", I think the whole field is supposed to be ignored. Major and minor are "required", meaning they're not supposed to be "ff", but the update field is "optional" so I think it can be ff. I think the simplest thing to do is just set the major and minor to zero instead of juggling some conditional logic or something. bcd2bin() from "include/linux/bcd.h" seems to assume both nibbles are 0-9, so I've provided a custom BCD decoding function. Alpha1 and alpha2 are ISO/IEC 8859-1 encoded, which just means ASCII characters as far as I can tell, although the full encoding table for non-alphabetic characters is slightly different (I think). I imagine the alpha fields are just supposed to be alphabetic characters, but I haven't seen any network cards actually report a non-zero value for either. If people wrote software against this netlink behavior, and were parsing the major and minor versions themselves from the u32, then this would definitely break their code. [1] https://www.dmtf.org/sites/default/files/standards/documents/DSP0222_1.0.0.pdf [2] https://en.wikipedia.org/wiki/Binary-coded_decimal [2] https://en.wikipedia.org/wiki/ISO/IEC_8859-1 Signed-off-by: Peter Delevoryas Fixes: 138635cc27c9 ("net/ncsi: NCSI response packet handler") --- net/ncsi/internal.h | 7 +++++-- net/ncsi/ncsi-netlink.c | 4 ++-- net/ncsi/ncsi-pkt.h | 7 +++++-- net/ncsi/ncsi-rsp.c | 26 ++++++++++++++++++++++++-- 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/net/ncsi/internal.h b/net/ncsi/internal.h index 03757e76bb6b..374412ed780b 100644 --- a/net/ncsi/internal.h +++ b/net/ncsi/internal.h @@ -105,8 +105,11 @@ enum { struct ncsi_channel_version { - u32 version; /* Supported BCD encoded NCSI version */ - u32 alpha2; /* Supported BCD encoded NCSI version */ + u8 major; /* NCSI version major */ + u8 minor; /* NCSI version minor */ + u8 update; /* NCSI version update */ + char alpha1; /* NCSI version alpha1 */ + char alpha2; /* NCSI version alpha2 */ u8 fw_name[12]; /* Firmware name string */ u32 fw_version; /* Firmware version */ u16 pci_ids[4]; /* PCI identification */ diff --git a/net/ncsi/ncsi-netlink.c b/net/ncsi/ncsi-netlink.c index a3a6753a1db7..2f872d064396 100644 --- a/net/ncsi/ncsi-netlink.c +++ b/net/ncsi/ncsi-netlink.c @@ -71,8 +71,8 @@ static int ncsi_write_channel_info(struct sk_buff *skb, if (nc == nc->package->preferred_channel) nla_put_flag(skb, NCSI_CHANNEL_ATTR_FORCED); - nla_put_u32(skb, NCSI_CHANNEL_ATTR_VERSION_MAJOR, nc->version.version); - nla_put_u32(skb, NCSI_CHANNEL_ATTR_VERSION_MINOR, nc->version.alpha2); + nla_put_u32(skb, NCSI_CHANNEL_ATTR_VERSION_MAJOR, nc->version.major); + nla_put_u32(skb, NCSI_CHANNEL_ATTR_VERSION_MINOR, nc->version.minor); nla_put_string(skb, NCSI_CHANNEL_ATTR_VERSION_STR, nc->version.fw_name); vid_nest = nla_nest_start_noflag(skb, NCSI_CHANNEL_ATTR_VLAN_LIST); diff --git a/net/ncsi/ncsi-pkt.h b/net/ncsi/ncsi-pkt.h index ba66c7dc3a21..c9d1da34dc4d 100644 --- a/net/ncsi/ncsi-pkt.h +++ b/net/ncsi/ncsi-pkt.h @@ -197,9 +197,12 @@ struct ncsi_rsp_gls_pkt { /* Get Version ID */ struct ncsi_rsp_gvi_pkt { struct ncsi_rsp_pkt_hdr rsp; /* Response header */ - __be32 ncsi_version; /* NCSI version */ + unsigned char major; /* NCSI version major */ + unsigned char minor; /* NCSI version minor */ + unsigned char update; /* NCSI version update */ + unsigned char alpha1; /* NCSI version alpha1 */ unsigned char reserved[3]; /* Reserved */ - unsigned char alpha2; /* NCSI version */ + unsigned char alpha2; /* NCSI version alpha2 */ unsigned char fw_name[12]; /* f/w name string */ __be32 fw_version; /* f/w version */ __be16 pci_ids[4]; /* PCI IDs */ diff --git a/net/ncsi/ncsi-rsp.c b/net/ncsi/ncsi-rsp.c index 069c2659074b..480e80e3c283 100644 --- a/net/ncsi/ncsi-rsp.c +++ b/net/ncsi/ncsi-rsp.c @@ -19,6 +19,19 @@ #include "ncsi-pkt.h" #include "ncsi-netlink.h" +/* Nibbles within [0xA, 0xF] add zero "0" to the returned value. + * Optional fields (encoded as 0xFF) will default to zero. + */ +static u8 decode_bcd_u8(u8 x) +{ + int lo = x & 0xF; + int hi = x >> 4; + + lo = lo < 0xA ? lo : 0; + hi = hi < 0xA ? hi : 0; + return lo + hi * 10; +} + static int ncsi_validate_rsp_pkt(struct ncsi_request *nr, unsigned short payload) { @@ -755,9 +768,18 @@ static int ncsi_rsp_handler_gvi(struct ncsi_request *nr) if (!nc) return -ENODEV; - /* Update to channel's version info */ + /* Update channel's version info + * + * Major, minor, and update fields are supposed to be + * unsigned integers encoded as packed BCD. + * + * Alpha1 and alpha2 are ISO/IEC 8859-1 characters. + */ ncv = &nc->version; - ncv->version = ntohl(rsp->ncsi_version); + ncv->major = decode_bcd_u8(rsp->major); + ncv->minor = decode_bcd_u8(rsp->minor); + ncv->update = decode_bcd_u8(rsp->update); + ncv->alpha1 = rsp->alpha1; ncv->alpha2 = rsp->alpha2; memcpy(ncv->fw_name, rsp->fw_name, 12); ncv->fw_version = ntohl(rsp->fw_version); From patchwork Tue Nov 14 16:07:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Williams X-Patchwork-Id: 165009 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:6358:a59:b0:164:83eb:24d7 with SMTP id 25csp2028591rwb; Tue, 14 Nov 2023 08:08:22 -0800 (PST) X-Google-Smtp-Source: AGHT+IG20dpx+6RCR3gh0jEt90bdZ4VVDMYZAVnXHxhlQUsGPiTB1WlwbmRsyEahr2fgc8ml8LMQ X-Received: by 2002:a17:902:eccb:b0:1cc:3c2f:9c41 with SMTP id a11-20020a170902eccb00b001cc3c2f9c41mr3081911plh.23.1699978102416; Tue, 14 Nov 2023 08:08:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1699978102; cv=none; d=google.com; s=arc-20160816; b=dIA561N58aEGQhdilyPsXdqFTUTydwJaoqS8jeRES0phebZ8h1JvqcmVUwX+R9Q11X STD+Gnmhyla1ZZaw9wVNilRGKxZrmnpfG15Un3pW0csdIJHi8tSsWkIUuoHfbybDyIoO p5ZLXHQsrjKAGhxTz/cYx4eiusrB+3Kh0TRPj6SEepFbPUVrp38c2d+03t2VeDUcTxmV cEY0TMZJr/i4cJiWmbuoZ/sxv5wCH3V8CvoM+1mM3t8lukTzH/1cxO5cyG1aJcUz7BhC 4Xgz/CoXeirMbyjT7EVOki0BVzaYHCjitL247vMM/PeofMdvSBs2O5ni9i3Zjkr13qOF dv1Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :feedback-id:dkim-signature:dkim-signature; bh=20tfSKNtHL+rKOlEuM96Y15IraCN16Lw4pR+Bb7sBnM=; fh=HFksX5hi/0YH7FXUY3bG0L7V6e9d2NHLnVRldTHI//Y=; b=lIaCsjlPJH60g8a/dg49EUW3YXhWr3AjDO4eodHFmuO8gp1PKMwT33qH6gxBhy5rZi bcWAkJ5Q7hJVKKrhetL9ahzNpzAf45o6rBTNAenwndm/7JdpVv8jBd9AtgN+gRZQAW5t yW3j8ogiIzmvzNvsycMF1MkY1fOFglESEVwccVeOEOiqwcE0NpjLyiLnAjk1MVXxNOtU m8m4VuyRJ/KqQqIIm29AnK/SBktWzgOusGub+vZYghHYu0lk4l2ckTdAm89jQF0DXF8n Ue6japd8egfXtYIcfPDbyVYHMOrDmsMybbZobX9h8Nvnnh9f6ZDnwNJ24R2JAZ/97JSW YLuA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@stwcx.xyz header.s=fm3 header.b=nuz9FySi; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=tuRA20ZQ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id h14-20020a170902680e00b001c752577582si7817198plk.359.2023.11.14.08.08.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Nov 2023 08:08:22 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@stwcx.xyz header.s=fm3 header.b=nuz9FySi; dkim=pass header.i=@messagingengine.com header.s=fm1 header.b=tuRA20ZQ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id D91C880FC705; Tue, 14 Nov 2023 08:08:14 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233835AbjKNQID (ORCPT + 29 others); Tue, 14 Nov 2023 11:08:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58566 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233794AbjKNQH7 (ORCPT ); Tue, 14 Nov 2023 11:07:59 -0500 Received: from out1-smtp.messagingengine.com (out1-smtp.messagingengine.com [66.111.4.25]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1BFFF13D; Tue, 14 Nov 2023 08:07:56 -0800 (PST) Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id 8D0805C02A6; Tue, 14 Nov 2023 11:07:55 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute6.internal (MEProxy); Tue, 14 Nov 2023 11:07:55 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stwcx.xyz; h=cc :cc:content-transfer-encoding:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:sender:subject:subject:to:to; s=fm3; t=1699978075; x= 1700064475; bh=20tfSKNtHL+rKOlEuM96Y15IraCN16Lw4pR+Bb7sBnM=; b=n uz9FySiZwgmabLbS+33isxpTquEj7qDTwpswH6tug+s/deFbwh465LwmfjzhGa0a b9k/HD8UWNSJFAQmIeYQ5AmBwv0GI4c0368yaMQoxCHRdUioHJw+MXRkZd1D40ir x2jCjPtzJgeMTOqpIDMrSMsBh+EULWRIPHgET6ucSvRjhRkT/IXrxB6Xj5tpWTnV PjLNBB+Gk30kTiaQIKOJJAx+xjRmw2xrO8Iw6hlONMnOUPPewF3rsgm8CriAlC/n zfWFt9vjod1peaTI3TGKt549NmoG1ZE8PGlUTYisqcFcDdF9zsl65Vh0hf3ld8ly 3WT9ZemJNd2R59VE20l5A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:sender:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t=1699978075; x= 1700064475; bh=20tfSKNtHL+rKOlEuM96Y15IraCN16Lw4pR+Bb7sBnM=; b=t uRA20ZQNoGPMXxR8yH1MzaBsgatm/pc2QgyCUE3NS69RLfS61OZark6Gxxcna7Hm WLm6UjJYqLkMMyew0cDA0svi9bDPunWBb+hpZLYQEvk+EVvpY644neuCM1tqFVD0 +hAJEailPRdIMNKfzbOx/LDNYM+I35IP7Pz0UZcAqKDHigKtHPFhY5bmHSeo/8Cz 5KjR/ULCmFdhpaL0gHWR6BNhE5IbKY8v3jeDTolwnClW+pCF+Xv2bDMijDnPvude skg2sfLybP0m+MxEPUywuA946/wvCjKaSLurZrm47IcwQicH668FFv3PNsPOpgzs jJHnUkx8UeF9YQb4H5r6g== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedrudefvddgkeefucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne gfrhhlucfvnfffucdlvdefmdenucfjughrpefhvfevufffkffojghfggfgsedtkeertder tddtnecuhfhrohhmpefrrghtrhhitghkucghihhllhhirghmshcuoehprghtrhhitghkse hsthiftgigrdighiiiqeenucggtffrrghtthgvrhhnpeejffekudffkeefiedtjeelgeej hfffgeffgedvgfffleevgfekkeetffdtheefhfenucffohhmrghinhepughmthhfrdhorh hgnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepphgr thhrihgtkhesshhtfigtgidrgiihii X-ME-Proxy: Feedback-ID: i68a1478a:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 14 Nov 2023 11:07:54 -0500 (EST) From: Patrick Williams To: Samuel Mendoza-Jonas , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Peter Delevoryas , Patrick Williams , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v2 3/3] net/ncsi: Add NC-SI 1.2 Get MC MAC Address command Date: Tue, 14 Nov 2023 10:07:35 -0600 Message-ID: <20231114160737.3209218-4-patrick@stwcx.xyz> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231114160737.3209218-1-patrick@stwcx.xyz> References: <20231114160737.3209218-1-patrick@stwcx.xyz> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Tue, 14 Nov 2023 08:08:14 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1782556238835989358 X-GMAIL-MSGID: 1782556238835989358 From: Peter Delevoryas This change adds support for the NC-SI 1.2 Get MC MAC Address command, specified here: https://www.dmtf.org/sites/default/files/standards/documents/DSP0222_1.2.0.pdf It serves the exact same function as the existing OEM Get MAC Address commands, so if a channel reports that it supports NC-SI 1.2, we prefer to use the standard command rather than the OEM command. Verified with an invalid MAC address and 2 valid ones: [ 55.137072] ftgmac100 1e690000.ftgmac eth0: NCSI: Received 3 provisioned MAC addresses [ 55.137614] ftgmac100 1e690000.ftgmac eth0: NCSI: MAC address 0: 00:00:00:00:00:00 [ 55.138026] ftgmac100 1e690000.ftgmac eth0: NCSI: MAC address 1: fa:ce:b0:0c:20:22 [ 55.138528] ftgmac100 1e690000.ftgmac eth0: NCSI: MAC address 2: fa:ce:b0:0c:20:23 [ 55.139241] ftgmac100 1e690000.ftgmac eth0: NCSI: Unable to assign 00:00:00:00:00:00 to device [ 55.140098] ftgmac100 1e690000.ftgmac eth0: NCSI: Set MAC address to fa:ce:b0:0c:20:22 Signed-off-by: Peter Delevoryas Signed-off-by: Patrick Williams --- net/ncsi/ncsi-cmd.c | 3 ++- net/ncsi/ncsi-manage.c | 9 +++++++-- net/ncsi/ncsi-pkt.h | 10 ++++++++++ net/ncsi/ncsi-rsp.c | 41 ++++++++++++++++++++++++++++++++++++++++- 4 files changed, 59 insertions(+), 4 deletions(-) diff --git a/net/ncsi/ncsi-cmd.c b/net/ncsi/ncsi-cmd.c index fd2236ee9a79..b3ff37a181d7 100644 --- a/net/ncsi/ncsi-cmd.c +++ b/net/ncsi/ncsi-cmd.c @@ -270,7 +270,8 @@ static struct ncsi_cmd_handler { { NCSI_PKT_CMD_GPS, 0, ncsi_cmd_handler_default }, { NCSI_PKT_CMD_OEM, -1, ncsi_cmd_handler_oem }, { NCSI_PKT_CMD_PLDM, 0, NULL }, - { NCSI_PKT_CMD_GPUUID, 0, ncsi_cmd_handler_default } + { NCSI_PKT_CMD_GPUUID, 0, ncsi_cmd_handler_default }, + { NCSI_PKT_CMD_GMCMA, 0, ncsi_cmd_handler_default } }; static struct ncsi_request *ncsi_alloc_command(struct ncsi_cmd_arg *nca) diff --git a/net/ncsi/ncsi-manage.c b/net/ncsi/ncsi-manage.c index f3d7fe86fea1..745c788f1d1d 100644 --- a/net/ncsi/ncsi-manage.c +++ b/net/ncsi/ncsi-manage.c @@ -1038,11 +1038,16 @@ static void ncsi_configure_channel(struct ncsi_dev_priv *ndp) case ncsi_dev_state_config_oem_gma: nd->state = ncsi_dev_state_config_clear_vids; - nca.type = NCSI_PKT_CMD_OEM; nca.package = np->id; nca.channel = nc->id; ndp->pending_req_num = 1; - ret = ncsi_gma_handler(&nca, nc->version.mf_id); + if (nc->version.major >= 1 && nc->version.minor >= 2) { + nca.type = NCSI_PKT_CMD_GMCMA; + ret = ncsi_xmit_cmd(&nca); + } else { + nca.type = NCSI_PKT_CMD_OEM; + ret = ncsi_gma_handler(&nca, nc->version.mf_id); + } if (ret < 0) schedule_work(&ndp->work); diff --git a/net/ncsi/ncsi-pkt.h b/net/ncsi/ncsi-pkt.h index c9d1da34dc4d..f2f3b5c1b941 100644 --- a/net/ncsi/ncsi-pkt.h +++ b/net/ncsi/ncsi-pkt.h @@ -338,6 +338,14 @@ struct ncsi_rsp_gpuuid_pkt { __be32 checksum; }; +/* Get MC MAC Address */ +struct ncsi_rsp_gmcma_pkt { + struct ncsi_rsp_pkt_hdr rsp; + unsigned char address_count; + unsigned char reserved[3]; + unsigned char addresses[][ETH_ALEN]; +}; + /* AEN: Link State Change */ struct ncsi_aen_lsc_pkt { struct ncsi_aen_pkt_hdr aen; /* AEN header */ @@ -398,6 +406,7 @@ struct ncsi_aen_hncdsc_pkt { #define NCSI_PKT_CMD_GPUUID 0x52 /* Get package UUID */ #define NCSI_PKT_CMD_QPNPR 0x56 /* Query Pending NC PLDM request */ #define NCSI_PKT_CMD_SNPR 0x57 /* Send NC PLDM Reply */ +#define NCSI_PKT_CMD_GMCMA 0x58 /* Get MC MAC Address */ /* NCSI packet responses */ @@ -433,6 +442,7 @@ struct ncsi_aen_hncdsc_pkt { #define NCSI_PKT_RSP_GPUUID (NCSI_PKT_CMD_GPUUID + 0x80) #define NCSI_PKT_RSP_QPNPR (NCSI_PKT_CMD_QPNPR + 0x80) #define NCSI_PKT_RSP_SNPR (NCSI_PKT_CMD_SNPR + 0x80) +#define NCSI_PKT_RSP_GMCMA (NCSI_PKT_CMD_GMCMA + 0x80) /* NCSI response code/reason */ #define NCSI_PKT_RSP_C_COMPLETED 0x0000 /* Command Completed */ diff --git a/net/ncsi/ncsi-rsp.c b/net/ncsi/ncsi-rsp.c index 480e80e3c283..bee290d0f48b 100644 --- a/net/ncsi/ncsi-rsp.c +++ b/net/ncsi/ncsi-rsp.c @@ -1091,6 +1091,44 @@ static int ncsi_rsp_handler_netlink(struct ncsi_request *nr) return ret; } +static int ncsi_rsp_handler_gmcma(struct ncsi_request *nr) +{ + struct ncsi_dev_priv *ndp = nr->ndp; + struct net_device *ndev = ndp->ndev.dev; + struct ncsi_rsp_gmcma_pkt *rsp; + struct sockaddr saddr; + int ret = -1; + int i; + + rsp = (struct ncsi_rsp_gmcma_pkt *)skb_network_header(nr->rsp); + saddr.sa_family = ndev->type; + ndev->priv_flags |= IFF_LIVE_ADDR_CHANGE; + + netdev_info(ndev, "NCSI: Received %d provisioned MAC addresses\n", + rsp->address_count); + for (i = 0; i < rsp->address_count; i++) { + netdev_info(ndev, "NCSI: MAC address %d: %02x:%02x:%02x:%02x:%02x:%02x\n", + i, rsp->addresses[i][0], rsp->addresses[i][1], + rsp->addresses[i][2], rsp->addresses[i][3], + rsp->addresses[i][4], rsp->addresses[i][5]); + } + + for (i = 0; i < rsp->address_count; i++) { + memcpy(saddr.sa_data, &rsp->addresses[i], ETH_ALEN); + ret = ndev->netdev_ops->ndo_set_mac_address(ndev, &saddr); + if (ret < 0) { + netdev_warn(ndev, "NCSI: Unable to assign %pM to device\n", + saddr.sa_data); + continue; + } + netdev_warn(ndev, "NCSI: Set MAC address to %pM\n", saddr.sa_data); + break; + } + + ndp->gma_flag = ret == 0; + return ret; +} + static struct ncsi_rsp_handler { unsigned char type; int payload; @@ -1127,7 +1165,8 @@ static struct ncsi_rsp_handler { { NCSI_PKT_RSP_PLDM, -1, ncsi_rsp_handler_pldm }, { NCSI_PKT_RSP_GPUUID, 20, ncsi_rsp_handler_gpuuid }, { NCSI_PKT_RSP_QPNPR, -1, ncsi_rsp_handler_pldm }, - { NCSI_PKT_RSP_SNPR, -1, ncsi_rsp_handler_pldm } + { NCSI_PKT_RSP_SNPR, -1, ncsi_rsp_handler_pldm }, + { NCSI_PKT_RSP_GMCMA, -1, ncsi_rsp_handler_gmcma }, }; int ncsi_rcv_rsp(struct sk_buff *skb, struct net_device *dev,