Skip to content
  • Stefan Roese's avatar
    ppc4xx: Enable hardware-fix for PCI/DMA errata on AMCC 440SP/SPe boards · a27044b1
    Stefan Roese authored
    
    
    This patch enables the hardware-fix for the PCI/DMA errata's 19+22 by
    setting the FIXD bit in the SDR0_MFR register. Here a description of the
    symptoms:
    
    Problem Description
    ------------------------------
    If a DMA is performed between memory and PCI with the DMA 1 Controller
    using prefetch, and as a result uses a special purpose buffer selected by
    the PCIXn Bridge Options 1 Register (PCIXn_BRDGOPT1[RBP7] - bits 31-29),
    the first part of the transfer sequence is performed twice. The
    PPC440SPe PCI Controller requests more data than was needed such that in
    the case of enforce memory protection, a host CPU  exception can occur.
    No data is corrupted, because data transfer is stopped in the PCI
    Controller. Prefetch enable is specified by setting DMA Configuration
    Register (I2O0_DMAx_CFG[DXEPD] - bit 31) to 0.
    
    Behavior that may be observed in a running system
    ---------------------------------------------------------------------------
    
    1. DMA performance is decreased because of the double access on the PCI bus
    interface.
    2. If an illegal access to some address on the PCI bus is detected at the
    system level, a machine check or similar system error may occur.
    
    Workarounds Available
    ----------------------------------
    
    1. Do not program prefetch. Note that a prefetch command cannot be programmed
    without selecting a special purpose buffer.
    2. To avoid crossing a physical boundary of the PCI slave device, add 512
    bytes of address to the PCI address range.
    
    This patch was originally provided by Pravin M. Bathija <pbathija@amcc.com>
    from AMCC and slighly changed.
    
    Signed-off-by: default avatarPravin M. Bathija <pbathija@amcc.com>
    Signed-off-by: default avatarStefan Roese <sr@denx.de>
    a27044b1