• Vladimir Oltean's avatar
    net: enetc: initialize the RFS and RSS memories · 07bf34a5
    Vladimir Oltean authored
    
    
    Michael tried to enable Advanced Error Reporting through the ENETC's
    Root Complex Event Collector, and the system started spitting out single
    bit correctable ECC errors coming from the ENETC interfaces:
    
    pcieport 0000:00:1f.0: AER: Multiple Corrected error received: 0000:00:00.0
    fsl_enetc 0000:00:00.0: PCIe Bus Error: severity=Corrected, type=Transaction Layer, (Receiver ID)
    fsl_enetc 0000:00:00.0:   device [1957:e100] error status/mask=00004000/00000000
    fsl_enetc 0000:00:00.0:    [14] CorrIntErr
    fsl_enetc 0000:00:00.1: PCIe Bus Error: severity=Corrected, type=Transaction Layer, (Receiver ID)
    fsl_enetc 0000:00:00.1:   device [1957:e100] error status/mask=00004000/00000000
    fsl_enetc 0000:00:00.1:    [14] CorrIntErr
    
    Further investigating the port correctable memory error detect register
    (PCMEDR) shows that these AER errors have an associated SOURCE_ID of 6
    (RFS/RSS):
    
    $ devmem 0x1f8010e10 32
    0xC0000006
    $ devmem 0x1f8050e10 32
    0xC0000006
    
    Discussion with the hardware design engineers reveals that on LS1028A,
    the hardware does not do initialization of that RFS/RSS memory, and that
    software should clear/initialize the entire table before starting to
    operate. That comes as a bit of a surprise, since the driver does not do
    initialization of the RFS memory. Also, the initialization of the
    Receive Side Scaling is done only partially.
    
    Even though the entire ENETC IP has a single shared flow steering
    memory, the flow steering service should returns matches only for TCAM
    entries that are within the range of the Station Interface that is doing
    the search. Therefore, it should be sufficient for a Station Interface
    to initialize all of its own entries in order to avoid any ECC errors,
    and only the Station Interfaces in use should need initialization.
    
    There are Physical Station Interfaces associated with PCIe PFs and
    Virtual Station Interfaces associated with PCIe VFs. We let the PF
    driver initialize the entire port's memory, which includes the RFS
    entries which are going to be used by the VF.
    Reported-by: default avatarMichael Walle <michael@walle.cc>
    Fixes: d4fd0404
    
     ("enetc: Introduce basic PF and VF ENETC ethernet drivers")
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Tested-by: default avatarMichael Walle <michael@walle.cc>
    Reviewed-by: default avatarJesse Brandeburg <jesse.brandeburg@intel.com>
    Link: https://lore.kernel.org/r/20210204134511.2640309-1-vladimir.oltean@nxp.com
    
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    07bf34a5
enetc_hw.h 24.1 KB