• Paul Walmsley's avatar
    OMAP3 SRAM: add ARM barriers to omap3_sram_configure_core_dpll · 69d4255b
    Paul Walmsley authored
    Add more barriers in the SRAM CORE DPLL M2 divider change code.
    
    - Add a DSB SY after the function's entry point to flush all cached
      and buffered writes and wait for the interconnect to claim that they
      have completed[1].  The idea here is to force all delayed write
      traffic going to the SDRAM to at least post to the L3 interconnect
      before continuing.  If these writes are allowed to occur after the
      SDRC is idled, the writes will not be acknowledged and the ARM will
      stall.
    
      Note that in this case, it does not matter if the writes actually
      complete to the SDRAM - it is only necessary for the writes to leave
      the ARM itself.  If the writes are posted by the interconnect when
      the SDRC goes into idle, the writes will be delayed until the SDRC
      returns from idle[2].  If the SDRC is in the middle of a write when
      it is requested to enter idle, the SDRC will not acknowledge the
      idle request until the writes complete to the SDRAM.[3]
    
      The old-style DMB in sdram_in_selfrefresh is now superfluous, so,
      remove it.
    
    - Add an ISB before the function's exit point to prevent the ARM from
      speculatively executing into SDRAM before the SDRAM is enabled[4].
    
    ...
    
    1. ARMv7 ARM (DDI 0406A) A3-47, A3-48.
    
    2. Private communication with Richard Woodruff <r-woodruff2@ti.com>.
    
    3. Private communication with Richard Woodruff <r-woodruff2@ti.com>.
    
    4. ARMv7 ARM (DDI 0406A) A3-48.
    Signed-off-by: default avatarPaul Walmsley <paul@pwsan.com>
    Cc: Richard Woodruff <r-woodruff2@ti.com>
    69d4255b
sram34xx.S 4.31 KB