• Vladimir Oltean's avatar
    net: enetc: reimplement RFS/RSS memory clearing as PCI quirk · f0168042
    Vladimir Oltean authored
    The workaround implemented in commit 3222b5b6 ("net: enetc:
    initialize RFS/RSS memories for unused ports too") is no longer
    effective after commit 6fffbc7a ("PCI: Honor firmware's device
    disabled status"). Thus, it has introduced a regression and we see AER
    errors being reported again:
    
    $ ip link set sw2p0 up && dhclient -i sw2p0 && ip addr show sw2p0
    fsl_enetc 0000:00:00.2 eno2: configuring for fixed/internal link mode
    fsl_enetc 0000:00:00.2 eno2: Link is Up - 2.5Gbps/Full - flow control rx/tx
    mscc_felix 0000:00:00.5 swp2: configuring for fixed/sgmii link mode
    mscc_felix 0000:00:00.5 swp2: Link is Up - 1Gbps/Full - flow control off
    sja1105 spi2.2 sw2p0: configuring for phy/rgmii-id link mode
    sja1105 spi2.2 sw2p0: Link is Up - 1Gbps/Full - flow control off
    pcieport 0000:00:1f.0: AER: Multiple Corrected error received: 0000:00:00.0
    pcieport 0000:00:1f.0: AER: can't find device of ID0000
    
    Rob's suggestion is to reimplement the enetc driver workaround as a
    PCI fixup, and to modify the PCI core to run the fixups for all PCI
    functions. This change handles the first part.
    
    We refactor the common code in enetc_psi_create() and enetc_psi_destroy(),
    and use the PCI fixup only for those functions for which enetc_pf_probe()
    won't get called. This avoids some work being done twice for the PFs
    which are enabled.
    
    Fixes: 6fffbc7a ("PCI: Honor firmware's device disabled status")
    Link: https://lore.kernel.org/netdev/CAL_JsqLsVYiPLx2kcHkDQ4t=hQVCR7NHziDwi9cCFUFhx48Qow@mail.gmail.com/
    
    Suggested-by: default avatarRob Herring <robh@kernel.org>
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    f0168042
enetc_pf.c 34.9 KB