From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B2BD272631 for ; Sun, 25 Jan 2026 13:09:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769346555; cv=none; b=MasVA3RjwT8htG3XKxko22VX9PWWvtpDvnpZ8T9ljlZDV3K0d/SI6geGAosaPNp6MIeB7R29CxaghVm7SuLlbPCs8UqbEWPONeYqVbY5csX6FD+FsLKLZIixkl/kAPc8jzKXbce3+0ZZiAlXe6/03EunlEb3d+DLZSyEH7kZZvA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769346555; c=relaxed/simple; bh=7nXATx+PCT76/VRqq2OWtAnEixbbnAZtaTS7T/bSOPU=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=sARdSi6EzUm6e2kDrwPfCm166o8qtCfXlAOduDSTDrNYcm829cQBimAI1doDSeQF1yyDiJuF5g1t34lCXmPGS3/E0cSEKtU8Tb+RNnyN7p/ta3HzkARi7un7P8KWJwbhs9UsnL6VwgjgPAZ2THiN8qwjaxrjsHUCpq9EI6zeWbk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QMPh9OZX; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="QMPh9OZX" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D92A9C4CEF1; Sun, 25 Jan 2026 13:09:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1769346555; bh=7nXATx+PCT76/VRqq2OWtAnEixbbnAZtaTS7T/bSOPU=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=QMPh9OZXu+QUZmpP8F2NQvALLlhklOBj4uffhqpeCqscnvxjU28hcbh4QYUm0DpF2 y5P1kS/Jda+BsAxHZN/+16gzqluKK66tN5Nl0wWN/i2d5z9XqHJ/xOcGKAS6zCJOGc UfmWxkQ1VV+Zs7WSS1TIwIgdm0mpqIH4AEHc5Uzx88gEPlCZSk9bErxk10Ea8UMM4w TtJLg5Nm3/DjpcjxUIN3iVz9r6dE8UfFnOlWhejETaje+GedFaogdQF6zDOTcPvLpE gpero2WJUmFVP9Bv50TBRCgVHjBML1NYK/TuALikLdqgeAs2AYIPko3jOVVW1bczrb wtfqEpOcJckSQ== Date: Sun, 25 Jan 2026 15:09:10 +0200 From: Leon Romanovsky To: Pavan Chebbi Cc: jgg@ziepe.ca, michael.chan@broadcom.com, linux-kernel@vger.kernel.org, dave.jiang@intel.com, saeedm@nvidia.com, Jonathan.Cameron@huawei.com, gospo@broadcom.com, selvin.xavier@broadcom.com, kalesh-anakkur.purayil@broadcom.com Subject: Re: [PATCH fwctl 2/5] fwctl/bnxt_en: Refactor aux bus functions to be more generic Message-ID: <20260125130910.GB13967@unreal> References: <20260118123401.3188438-1-pavan.chebbi@broadcom.com> <20260118123401.3188438-3-pavan.chebbi@broadcom.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260118123401.3188438-3-pavan.chebbi@broadcom.com> On Sun, Jan 18, 2026 at 04:33:58AM -0800, Pavan Chebbi wrote: > Up until now there was only one auxiliary device that bnxt > created and that was for RoCE driver. bnxt fwctl is also > going to use an aux bus device that bnxt should create. > This requires some nomenclature changes and refactoring of > the existing bnxt aux dev functions. > > Convert 'aux_priv' and 'edev' members of struct bnxt into > arrays where each element contains supported auxbus device's > data. Move struct bnxt_aux_priv from bnxt.h to ulp.h because > that is where it belongs. Make aux bus init/uninit/add/del > functions more generic which will loop through all the aux > device types. Make bnxt_ulp_start/stop functions (the only > other common functions applicable to any aux device) loop > through the aux devices to update their config and states. > > Also, as an improvement in code, bnxt_register_dev() can skip > unnecessary dereferencing of edev from bp, instead use the > edev pointer from the function parameter. > > Future patches will reuse these functions to add an aux bus > device for fwctl. > > Reviewed-by: Andy Gospodarek > Signed-off-by: Pavan Chebbi > --- > drivers/net/ethernet/broadcom/bnxt/bnxt.c | 29 +- > drivers/net/ethernet/broadcom/bnxt/bnxt.h | 17 +- > .../net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 2 +- > drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c | 319 +++++++++++------- > include/linux/bnxt/ulp.h | 23 +- > 5 files changed, 239 insertions(+), 151 deletions(-) <...> > enum board_idx { > BCM57301, > BCM57302, > @@ -2341,8 +2335,8 @@ struct bnxt { > #define BNXT_CHIP_P5_AND_MINUS(bp) \ > (BNXT_CHIP_P3(bp) || BNXT_CHIP_P4(bp) || BNXT_CHIP_P5(bp)) > > - struct bnxt_aux_priv *aux_priv; > - struct bnxt_en_dev *edev; > + struct bnxt_aux_priv *aux_priv[__BNXT_AUXDEV_MAX]; > + struct bnxt_en_dev *edev[__BNXT_AUXDEV_MAX]; > > struct bnxt_napi **bnapi; > > @@ -2751,6 +2745,11 @@ struct bnxt { > struct bnxt_ctx_pg_info *fw_crash_mem; > u32 fw_crash_len; > struct bnxt_bs_trace_info bs_trace[BNXT_TRACE_MAX]; > + int auxdev_id; > + atomic_t auxdev_state[__BNXT_AUXDEV_MAX]; > +#define BNXT_ADEV_STATE_NONE 0 > +#define BNXT_ADEV_STATE_INIT 1 > +#define BNXT_ADEV_STATE_ADD 2 This is indeed an incorrect use of atomic_t. This type only ensures that individual arithmetic operations are performed atomically. It does not eliminate the need for the locks that were removed. > }; > > #define BNXT_NUM_RX_RING_STATS 8 > diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c > index 8cad7b982664..064d7bc4ce8d 100644 > --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c > +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c > @@ -5100,7 +5100,7 @@ static void bnxt_self_test(struct net_device *dev, struct ethtool_test *etest, <...> > > void bnxt_ulp_start(struct bnxt *bp, int err) > { > - struct bnxt_aux_priv *aux_priv = bp->aux_priv; > - struct bnxt_en_dev *edev = bp->edev; > + int i; > > - if (!edev || err) err is no longer used, and keeping it would alter the behavior of bnxt_resume() and related paths. In any case, callers should not invoke bnxt_ulp_start() when an error has already occurred. Thanks > - return; > + for (i = 0; i < __BNXT_AUXDEV_MAX; i++) { > + struct bnxt_aux_priv *aux_priv; > + struct auxiliary_device *adev; > + struct bnxt_en_dev *edev;