• Ben Hutchings's avatar
    sfc: Always map MCDI shared memory as uncacheable · 747df225
    Ben Hutchings authored
    We enabled write-combining for memory-mapped registers in commit
    65f0b417, but inhibited it for the
    MCDI shared memory where this is not supported.  However,
    write-combining mappings also allow read-reordering, which may also
    be a problem.
    
    I found that when an SFC9000-family controller is connected to an
    Intel 3000 chipset, and write-combining is enabled, the controller
    stops responding to PCIe read requests during driver initialisation
    while the driver is polling for completion of an MCDI command.  This
    results in an NMI and system hang.  Adding read memory barriers
    between all reads to the shared memory area appears to reduce but not
    eliminate the probability of this.
    
    We have not yet established whether this is a bug in our BIU or in the
    PCIe bridge.  For now, work around by mapping the shared memory area
    separately.
    Signed-off-by: default avatarBen Hutchings <bhutchings@solarflare.com>
    747df225
mcdi.c 31.2 KB