[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <aXuIzJdZYEGX3XVy@horms.kernel.org>
Date: Thu, 29 Jan 2026 16:20:28 +0000
From: Simon Horman <horms@...nel.org>
To: Vincent Guittot <vincent.guittot@...aro.org>
Cc: vkoul@...nel.org, neil.armstrong@...aro.org, krzk+dt@...nel.org,
conor+dt@...nel.org, ciprianmarian.costea@....nxp.com, s32@....com,
p.zabel@...gutronix.de, linux@...linux.org.uk,
ghennadi.procopciuc@....com, bogdan-gabriel.roman@....com,
Ionut.Vicovan@....com, alexandru-catalin.ionita@....com,
linux-phy@...ts.infradead.org, devicetree@...r.kernel.org,
linux-kernel@...r.kernel.org, linux-arm-kernel@...ts.infradead.org,
netdev@...r.kernel.org, Frank.li@....com
Subject: Re: [PATCH 3/4] phy: s32g: Add serdes xpcs subsystem
On Thu, Jan 29, 2026 at 02:24:15PM +0100, Vincent Guittot wrote:
> On Thu, 29 Jan 2026 at 12:59, Simon Horman <horms@...nel.org> wrote:
> >
> > On Mon, Jan 26, 2026 at 10:21:58AM +0100, Vincent Guittot wrote:
> >
> > ...
> >
> > > diff --git a/drivers/phy/freescale/phy-nxp-s32g-serdes.c b/drivers/phy/freescale/phy-nxp-s32g-serdes.c
> >
> > ...
> >
> > > +static void s32g_serdes_prepare_pma_mode5(struct s32g_serdes *serdes)
> > > +{
> > > + u32 val;
> > > + /* Configure TX_VBOOST_LVL and TX_TERM_CTRL */
> > > + val = readl(serdes->ctrl.ss_base + S32G_PCIE_PHY_EXT_MISC_CTRL_2);
> > > + val &= ~(EXT_TX_VBOOST_LVL_MASK | EXT_TX_TERM_CTRL_MASK);
> > > + val |= FIELD_PREP(EXT_TX_VBOOST_LVL_MASK, 0x3) |
> > > + FIELD_PREP(EXT_TX_TERM_CTRL_MASK, 0x4);
> > > + writel(val, serdes->ctrl.ss_base + S32G_PCIE_PHY_EXT_MISC_CTRL_2);
> >
> > This is part of an AI Generated review.
> > I have looked over it and I think it warrants investigation.
> > For information on how to reproduce locally, as I did, please see [1].
> >
> > The entire s32g_serdes_prepare_pma_mode5() function is ~70 lines of
> > magic numbers with zero explanation. These appear to be
> > hardware-specific PLL/PHY tuning parameters for 2.5G mode.
>
> Unfortunately there is no additional information in the reference
> manual other than
> *step 4:
> - Write 3h to EXT_TX_VBOOST_LVL.
> - Write 4h to EXT_TX_TERM_CTRL
Understood. Sometimes you have the play the hand you're dealt.
>
> >
> > Please consider using #defines, to give values names.
> >
> > ...
> >
> > > +static int s32g_serdes_init_clks(struct s32g_serdes *serdes)
> > > +{
> > > + struct s32g_serdes_ctrl *ctrl = &serdes->ctrl;
> > > + struct s32g_xpcs_ctrl *xpcs = &serdes->xpcs;
> > > + int ret, order[2], xpcs_id;
> > > + size_t i;
> > > +
> > > + switch (ctrl->ss_mode) {
> > > + case 0:
> > > + return 0;
> > > + case 1:
> > > + order[0] = 0;
> > > + order[1] = XPCS_DISABLED;
> > > + break;
> > > + case 2:
> > > + case 5:
> > > + order[0] = 1;
> > > + order[1] = XPCS_DISABLED;
> > > + break;
> > > + case 3:
> > > + order[0] = 1;
> > > + order[1] = 0;
> > > + break;
> > > + case 4:
> > > + order[0] = 0;
> > > + order[1] = 1;
> > > + break;
> > > + default:
> > > + return -EINVAL;
> >
> > AI review also flags that s32g_serdes_get_ctrl_resources() ensures that
> > ss_mode is <= 5. So this check is unnecessary.
>
> okay but providing a default seems a good practice
Yeah, I was of two minds about forwarding on this part of the report.
...
> > AI review also flags that s32g_xpcs_regmap_reg_read and
> > s32g_xpcs_regmap_reg_write do not protect against concurrent access.
>
> but regmap framework should
If it does, then I agree there is no problem here.
Powered by blists - more mailing lists