Re: [PATCH net-next] net: lan743x: fix SGMII detection on PCI1xxxx B0+ during warm reset
From: Jakub Kicinski
Date: Mon Mar 09 2026 - 21:51:17 EST
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