RE: [PATCH net-next] net: lan743x: fix SGMII detection on PCI1xxxx B0+ during warm reset

From: Thangaraj.S

Date: Mon Mar 09 2026 - 23:45:26 EST


Hi Jakub,
Thanks for reviewing the patch.

> -----Original Message-----
> From: Jakub Kicinski <kuba@xxxxxxxxxx>
> Sent: Tuesday, March 10, 2026 7:16 AM
> To: Thangaraj Samynathan - I53494 <Thangaraj.S@xxxxxxxxxxxxx>
> Cc: Bryan Whitehead - C21958 <Bryan.Whitehead@xxxxxxxxxxxxx>;
> UNGLinuxDriver <UNGLinuxDriver@xxxxxxxxxxxxx>;
> andrew+netdev@xxxxxxx; davem@xxxxxxxxxxxxx; edumazet@xxxxxxxxxx;
> pabeni@xxxxxxxxxx; netdev@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx
> Subject: Re: [PATCH net-next] net: lan743x: fix SGMII detection on PCI1xxxx
> B0+ during warm reset
>
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the
> content is safe
>
> On Thu, 5 Mar 2026 14:33:55 +0530 Thangaraj Samynathan wrote:
> > --- a/drivers/net/ethernet/microchip/lan743x_main.c
> > +++ b/drivers/net/ethernet/microchip/lan743x_main.c
> > @@ -32,10 +32,12 @@ static void pci11x1x_strap_get_status(struct
> > lan743x_adapter *adapter) {
> > u32 chip_rev;
> > u32 cfg_load;
> > + u32 dev_rev;
> > u32 hw_cfg;
> > u32 strap;
> > int ret;
> >
> > + dev_rev = adapter->csr.id_rev & ID_REV_CHIP_REV_MASK_;
> > /* Timeout = 100 (i.e. 1 sec (10 msce * 100)) */
> > ret = lan743x_hs_syslock_acquire(adapter, 100);
> > if (ret < 0) {
> > @@ -47,10 +49,11 @@ static void pci11x1x_strap_get_status(struct
> lan743x_adapter *adapter)
> > cfg_load = lan743x_csr_read(adapter,
> ETH_SYS_CONFIG_LOAD_STARTED_REG);
> > lan743x_hs_syslock_release(adapter);
> > hw_cfg = lan743x_csr_read(adapter, HW_CFG);
> > -
> > - if (cfg_load & GEN_SYS_LOAD_STARTED_REG_ETH_ ||
> > - hw_cfg & HW_CFG_RST_PROTECT_) {
> > - strap = lan743x_csr_read(adapter, STRAP_READ);
> > + strap = lan743x_csr_read(adapter, STRAP_READ);
> > + if ((dev_rev == ID_REV_CHIP_REV_PCI11X1X_A0_ &&
>
> it may be a good idea to a add a little helper like:
>
> static bool pci11x1x_is_a0(const struct lan743x_adapter *adapter) {
> u32 dev_rev = adapter->csr.id_rev & ID_REV_CHIP_REV_MASK_;
>
> return dev_rev == ID_REV_CHIP_REV_PCI11X1X_A0_; }
>
> and same thing for b0?

Sure, I will add the helper in the next revision of the patch.
>
> > + (cfg_load & GEN_SYS_LOAD_STARTED_REG_ETH_ ||
> > + hw_cfg & HW_CFG_RST_PROTECT_)) ||
> > + (strap & STRAP_READ_USE_SGMII_EN_)) {
>
> I don't think this implements the logic you describe in the commit message?
> You say:
>
> For PCI11x1x B0 and later: Use the newly available
> STRAP_READ_USE_SGMII_EN_
>
> but your condition will also look at the strap & STRAP_READ_USE_SGMII_EN_
> if cfg_load & GEN_SYS_LOAD_STARTED_REG_ETH_ || hw_cfg &
> HW_CFG_RST_PROTECT_ is also on A0

This bit was introduced in B0, but in the earlier version this bit always reads zero and makes no difference.
> --
> pw-bot: cr

Regards,
Thangaraj Samynathan