Reads the SFP enable bits from the strap registers to determine if the hardware is configured for SFP usage. - Add STRAP_SFP_USE_EN_ and STRAP_SFP_EN_ definitions to read SFP straps. - Store SFP status in the adapter's is_sfp_support_en flag. - Add a validation check to ensure PCS is enabled when SFP support is requested, as SFP operation requires the PCS interface. - Refactor debug logging to use the str_enable_disable() helper for consistency with modern kernel standards. Signed-off-by: Thangaraj Samynathan --- drivers/net/ethernet/microchip/lan743x_main.c | 16 ++++++++++++++++ drivers/net/ethernet/microchip/lan743x_main.h | 3 +++ 2 files changed, 19 insertions(+) diff --git a/drivers/net/ethernet/microchip/lan743x_main.c b/drivers/net/ethernet/microchip/lan743x_main.c index fad4a246e06e..867310dbe9ba 100644 --- a/drivers/net/ethernet/microchip/lan743x_main.c +++ b/drivers/net/ethernet/microchip/lan743x_main.c @@ -62,6 +62,12 @@ static void pci11x1x_strap_get_status(struct lan743x_adapter *adapter) adapter->is_pcs_en = true; else adapter->is_pcs_en = false; + + if ((strap & STRAP_SFP_USE_EN_) && (strap & STRAP_SFP_EN_)) + adapter->is_sfp_support_en = true; + else + adapter->is_sfp_support_en = false; + } else { fpga_rev = lan743x_csr_read(adapter, FPGA_REV); if (fpga_rev) { @@ -73,8 +79,17 @@ static void pci11x1x_strap_get_status(struct lan743x_adapter *adapter) adapter->is_pcs_en = false; } } + + if (adapter->is_pci11x1x && !adapter->is_pcs_en && + adapter->is_sfp_support_en) { + netif_err(adapter, drv, adapter->netdev, + "Invalid EEPROM configuration: SFP_EN strap specified without SGMII_EN strap\n"); + } + netif_dbg(adapter, drv, adapter->netdev, "PCS I/F %s\n", str_enable_disable(adapter->is_pcs_en)); + netif_dbg(adapter, drv, adapter->netdev, + "SFP support %s\n", str_enable_disable(adapter->is_sfp_support_en)); } static bool is_pci11x1x_chip(struct lan743x_adapter *adapter) @@ -3665,6 +3680,7 @@ static int lan743x_pcidev_probe(struct pci_dev *pdev, NETIF_MSG_LINK | NETIF_MSG_IFUP | NETIF_MSG_IFDOWN | NETIF_MSG_TX_QUEUED; netdev->max_mtu = LAN743X_MAX_FRAME_SIZE; + adapter->is_sfp_support_en = false; of_get_mac_address(pdev->dev.of_node, adapter->mac_address); diff --git a/drivers/net/ethernet/microchip/lan743x_main.h b/drivers/net/ethernet/microchip/lan743x_main.h index f0fa0580b04e..26c30dc2e55c 100644 --- a/drivers/net/ethernet/microchip/lan743x_main.h +++ b/drivers/net/ethernet/microchip/lan743x_main.h @@ -37,6 +37,8 @@ #define STRAP_READ (0x0C) #define STRAP_READ_USE_SGMII_EN_ BIT(22) +#define STRAP_SFP_USE_EN_ BIT(31) +#define STRAP_SFP_EN_ BIT(15) #define STRAP_READ_SGMII_EN_ BIT(6) #define STRAP_READ_SGMII_REFCLK_ BIT(5) #define STRAP_READ_SGMII_2_5G_ BIT(4) @@ -1081,6 +1083,7 @@ struct lan743x_adapter { u8 max_tx_channels; u8 used_tx_channels; u8 max_vector_count; + bool is_sfp_support_en; #define LAN743X_ADAPTER_FLAG_OTP BIT(0) u32 flags; -- 2.34.1