• Olof Johansson's avatar
    ARM: tegra: use APB DMA for accessing APB devices · e2f91578
    Olof Johansson authored
    Tegra2 hangs if APB registers are accessed from the cpu during an
    apb dma operation. The workaround is to use apb dma to read/write the
    registers instead.
    
    There is a dependency loop between fuses, clocks, and APBDMA.  If dma
    is enabled, fuse reads must go through APBDMA to avoid corruption due
    to a hw bug.  APBDMA requires a clock to be enabled.  Clocks must read
    a fuse to determine allowable cpu frequencies.
    
    Separate out the fuse DMA initialization, and allow the fuse read
    and write functions to be called without using DMA before the DMA
    initialization has been completed.  Access to the fuses before APBDMA
    is initialized won't hit the hardware bug because nothing else can be
    using DMA.
    
    Original fuse registar access code from Varun Wadekar
    <vwadekar@nvidia.com>, improved by Colin Cross <ccross@android.com>
    and later moved to separate driver by Jon Mayo <jmayo@nvidia.com>.
    
    Major refactoring/cleanup by Olof Johansson <olof@lixom.net>.
    
    Changes since v1:
    
    * fix 'return false' on error condition
    * dequeue dma ops in case of timeout
    
    From: Jon Mayo <jmayo@nvidia.com>.
    Signed-off-by: Jon Mayo <jmayo@nvidia.com>.
    Signed-off-by: default avatarOlof Johansson <olof@lixom.net>
    Acked-by: default avatarStephen Warren <swarren@nvidia.com>
    e2f91578
apbio.c 3.29 KB