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

From: Jakub Kicinski <[email-masked]>
Date: Mon, 9 Mar 2026 18:46:11 -0700

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?

> +	     (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
-- 
pw-bot: cr