Skip to content
  • Marek Vasut's avatar
    ARM: socfpga: Clear PL310 early in SPL · 476abb72
    Marek Vasut authored
    
    
    On SoCFPGA A10 systems, it can rarely happen that a reboot from Linux
    will result in stale data in PL310 L2 cache controller. Even if the L2
    cache controller is disabled via the CTRL register CTRL_EN bit, those
    data can interfere with operation of devices using DMA, like e.g. the
    DWMMC controller. This can in turn cause e.g. SPL to fail reading data
    from SD/MMC.
    
    The obvious solution here would be to fully reset the L2 cache controller
    via the reset manager MPUMODRST L2 bit, however this causes bus hang even
    if executed entirely from L1 I-cache to avoid generating any bus traffic
    through the L2 cache controller.
    
    This patch thus configures and enables the L2 cache controller very early
    in the SPL boot process, clears the L2 cache and disables the L2 cache
    controller again.
    
    The reason for doing it in SPL is because we need to avoid accessing any
    of the potentially stale data in the L2 cache, and we are certain any of
    the stale data will be below the OCRAM address range. To further reduce
    bus traffic during the L2 cache invalidation, we enable L1 I-cache and
    run the invalidation code entirely out of the L1 I-cache.
    
    Signed-off-by: default avatarMarek Vasut <marex@denx.de>
    Cc: Chin Liang See <chin.liang.see@intel.com>
    Cc: Dalon Westergreen <dwesterg@gmail.com>
    Cc: Dinh Nguyen <dinguyen@kernel.org>
    Cc: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
    Cc: Tien Fong Chee <tien.fong.chee@intel.com>
    476abb72