Skip to content

Commit e4a5898

Browse files
Raju LakkarajuPaolo Abeni
authored andcommitted
net: lan743x: Add set RFE read fifo threshold for PCI1x1x chips
PCI11x1x Rev B0 devices might drop packets when receiving back to back frames at 2.5G link speed. Change the B0 Rev device's Receive filtering Engine FIFO threshold parameter from its hardware default of 4 to 3 dwords to prevent the problem. Rev C0 and later hardware already defaults to 3 dwords. Fixes: bb4f6bf ("net: lan743x: Add PCI11010 / PCI11414 device IDs") Signed-off-by: Raju Lakkaraju <[email protected]> Reviewed-by: Simon Horman <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Paolo Abeni <[email protected]>
1 parent eb67cdb commit e4a5898

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

drivers/net/ethernet/microchip/lan743x_main.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
#define PCS_POWER_STATE_DOWN 0x6
2626
#define PCS_POWER_STATE_UP 0x4
2727

28+
#define RFE_RD_FIFO_TH_3_DWORDS 0x3
29+
2830
static void pci11x1x_strap_get_status(struct lan743x_adapter *adapter)
2931
{
3032
u32 chip_rev;
@@ -3272,6 +3274,21 @@ static void lan743x_full_cleanup(struct lan743x_adapter *adapter)
32723274
lan743x_pci_cleanup(adapter);
32733275
}
32743276

3277+
static void pci11x1x_set_rfe_rd_fifo_threshold(struct lan743x_adapter *adapter)
3278+
{
3279+
u16 rev = adapter->csr.id_rev & ID_REV_CHIP_REV_MASK_;
3280+
3281+
if (rev == ID_REV_CHIP_REV_PCI11X1X_B0_) {
3282+
u32 misc_ctl;
3283+
3284+
misc_ctl = lan743x_csr_read(adapter, MISC_CTL_0);
3285+
misc_ctl &= ~MISC_CTL_0_RFE_READ_FIFO_MASK_;
3286+
misc_ctl |= FIELD_PREP(MISC_CTL_0_RFE_READ_FIFO_MASK_,
3287+
RFE_RD_FIFO_TH_3_DWORDS);
3288+
lan743x_csr_write(adapter, MISC_CTL_0, misc_ctl);
3289+
}
3290+
}
3291+
32753292
static int lan743x_hardware_init(struct lan743x_adapter *adapter,
32763293
struct pci_dev *pdev)
32773294
{
@@ -3287,6 +3304,7 @@ static int lan743x_hardware_init(struct lan743x_adapter *adapter,
32873304
pci11x1x_strap_get_status(adapter);
32883305
spin_lock_init(&adapter->eth_syslock_spinlock);
32893306
mutex_init(&adapter->sgmii_rw_lock);
3307+
pci11x1x_set_rfe_rd_fifo_threshold(adapter);
32903308
} else {
32913309
adapter->max_tx_channels = LAN743X_MAX_TX_CHANNELS;
32923310
adapter->used_tx_channels = LAN743X_USED_TX_CHANNELS;

drivers/net/ethernet/microchip/lan743x_main.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#define ID_REV_CHIP_REV_MASK_ (0x0000FFFF)
2727
#define ID_REV_CHIP_REV_A0_ (0x00000000)
2828
#define ID_REV_CHIP_REV_B0_ (0x00000010)
29+
#define ID_REV_CHIP_REV_PCI11X1X_B0_ (0x000000B0)
2930

3031
#define FPGA_REV (0x04)
3132
#define FPGA_REV_GET_MINOR_(fpga_rev) (((fpga_rev) >> 8) & 0x000000FF)
@@ -311,6 +312,9 @@
311312
#define SGMII_CTL_LINK_STATUS_SOURCE_ BIT(8)
312313
#define SGMII_CTL_SGMII_POWER_DN_ BIT(1)
313314

315+
#define MISC_CTL_0 (0x920)
316+
#define MISC_CTL_0_RFE_READ_FIFO_MASK_ GENMASK(6, 4)
317+
314318
/* Vendor Specific SGMII MMD details */
315319
#define SR_VSMMD_PCS_ID1 0x0004
316320
#define SR_VSMMD_PCS_ID2 0x0005

0 commit comments

Comments
 (0)