linux/arch/arm
Santosh Shilimkar 137d105d50 ARM: OMAP4: Fix errata i688 with MPU interconnect barriers.
On OMAP4 SOC, intecronnects has many write buffers in the async bridges
and they need to be drained before CPU enters into standby state.

Patch 'OMAP4: PM: Add CPUX OFF mode support' added CPU PM support
but OMAP errata i688 (Async Bridge Corruption) needs to be taken
care to avoid issues like system freeze, CPU deadlocks, random
crashes with register accesses, synchronisation loss on initiators
operating on both interconnect port simultaneously.

As per the errata, if a data is stalled inside asynchronous bridge
because of back pressure, it may be accepted multiple times, creating
pointer misalignment that will corrupt next transfers on that data
path until next reset of the system (No recovery procedure once
the issue is hit, the path remains consistently broken).
Async bridge can be found on path between MPU to EMIF and
MPU to L3 interconnect. This situation can happen only when the
idle is initiated by a Master Request Disconnection (which is
trigged by software when executing WFI on CPU).

The work-around for this errata needs all the initiators
connected through async bridge must ensure that data path
is properly drained before issuing WFI. This condition will be
met if one Strongly ordered access is performed to the
target right before executing the WFI. In MPU case, L3 T2ASYNC
FIFO and DDR T2ASYNC FIFO needs to be drained. IO barrier ensure
that there is no synchronisation loss on initiators operating
on both interconnect port simultaneously.

Thanks to Russell for a tip to conver assembly function to
C fuction there by reducing 40 odd lines of code from the patch.

Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Signed-off-by: Richard Woodruff <r-woodruff2@ti.com>
Acked-by: Jean Pihet <j-pihet@ti.com>
Reviewed-by: Kevin Hilman <khilman@ti.com>
Tested-by: Vishwanath BS <vishwanath.bs@ti.com>
Signed-off-by: Kevin Hilman <khilman@ti.com>
2011-12-08 11:29:01 -08:00
..
boot Merge branch 'fixes' of http://ftp.arm.linux.org.uk/pub/linux/arm/kernel/git-cur/linux-2.6-arm 2011-11-20 14:34:58 -08:00
common Merge branch 'for-rmk' of git://git.kernel.org/pub/scm/linux/kernel/git/will/linux into devel-stable 2011-12-05 23:20:17 +00:00
configs Merge branch 'defconfigs-for-arnd' of git://git.linaro.org/people/triad/linux-stericsson into fixes 2011-11-29 14:50:17 +00:00
include/asm Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
kernel Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
lib ARM: 7171/1: unwind: add unwind directives to bitops assembly macros 2011-11-26 21:58:53 +00:00
mach-at91 ARM: big removal of now unused vmalloc.h files 2011-11-26 19:21:29 -05:00
mach-bcmring Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-clps711x Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-cns3xxx Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-davinci ARM: big removal of now unused vmalloc.h files 2011-11-26 19:21:29 -05:00
mach-dove ARM: big removal of now unused vmalloc.h files 2011-11-26 19:21:29 -05:00
mach-ebsa110 Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-ep93xx Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-exynos Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-footbridge Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-gemini ARM: big removal of now unused vmalloc.h files 2011-11-26 19:21:29 -05:00
mach-h720x ARM: big removal of now unused vmalloc.h files 2011-11-26 19:21:29 -05:00
mach-highbank Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-imx Merge branch 'imx-for-arnd' of git://git.pengutronix.de/git/imx/linux-2.6 into fixes 2011-11-23 20:26:57 +00:00
mach-integrator ARM: big removal of now unused vmalloc.h files 2011-11-26 19:21:29 -05:00
mach-iop13xx ARM: big removal of now unused vmalloc.h files 2011-11-26 19:21:29 -05:00
mach-iop32x Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-iop33x Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-ixp4xx Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-ixp23xx ARM: big removal of now unused vmalloc.h files 2011-11-26 19:21:29 -05:00
mach-ixp2000 Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-kirkwood ARM: big removal of now unused vmalloc.h files 2011-11-26 19:21:29 -05:00
mach-ks8695 Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-l7200/include/mach ARM: add an extra temp register to the low level debugging addruart macro 2011-09-26 10:11:25 -04:00
mach-lpc32xx Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-mmp Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-msm Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-mv78xx0 ARM: big removal of now unused vmalloc.h files 2011-11-26 19:21:29 -05:00
mach-mx5 Merge branch 'cleanups/assorted' into imx-fixes-for-arnd 2011-11-22 11:32:39 +01:00
mach-mxs Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-netx Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-nomadik Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-omap1 Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-omap2 ARM: OMAP4: Fix errata i688 with MPU interconnect barriers. 2011-12-08 11:29:01 -08:00
mach-orion5x ARM: big removal of now unused vmalloc.h files 2011-11-26 19:21:29 -05:00
mach-picoxcell Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-pnx4008 Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-prima2 ARM: big removal of now unused vmalloc.h files 2011-11-26 19:21:29 -05:00
mach-pxa Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-realview Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-rpc Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-s3c64xx Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-s3c2410 Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-s3c2412 Merge branch 'next/cleanup3' of git://git.linaro.org/people/arnd/arm-soc 2011-11-05 18:18:05 -07:00
mach-s3c2416 Merge branch 'next/devel2' of git://git.linaro.org/people/arnd/arm-soc 2011-11-05 18:21:21 -07:00
mach-s3c2440 Merge branch 'next/cleanup3' of git://git.linaro.org/people/arnd/arm-soc 2011-11-05 18:18:05 -07:00
mach-s3c2443 Merge branch 'next/devel2' of git://git.linaro.org/people/arnd/arm-soc 2011-11-05 18:21:21 -07:00
mach-s5p64x0 Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-s5pc100 Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-s5pv210 Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-sa1100 Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-shark Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-shmobile Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-spear3xx Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-spear6xx Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-tcc8k Merge branch 'devel-stable' of http://ftp.arm.linux.org.uk/pub/linux/arm/kernel/git-cur/linux-2.6-arm 2011-10-28 12:02:27 -07:00
mach-tegra Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-u300 Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-ux500 Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-versatile Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-vexpress Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-vt8500 ARM: big removal of now unused vmalloc.h files 2011-11-26 19:21:29 -05:00
mach-w90x900 Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mach-zynq Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
mm Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
nwfpe
oprofile
plat-iop ARM: plat-iop: remove arch specific special handling for ioremap 2011-11-18 13:51:18 -05:00
plat-mxc Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
plat-nomadik Merge branch 'next/timer' of git://git.linaro.org/people/arnd/arm-soc 2011-11-01 20:18:05 -07:00
plat-omap ARM: OMAP4: Fix errata i688 with MPU interconnect barriers. 2011-12-08 11:29:01 -08:00
plat-orion ARM: 7063/1: Orion: gpio: add missing include of linux/types.h 2011-08-24 08:29:20 +01:00
plat-pxa Merge git://git.infradead.org/mtd-2.6 2011-11-07 09:11:16 -08:00
plat-s3c24xx ARM: SAMSUNG: inclusion export.h instead of module.h 2011-11-17 01:14:38 +09:00
plat-s5p Merge branch 'for-rmk' of git://git.kernel.org/pub/scm/linux/kernel/git/will/linux into devel-stable 2011-12-05 23:20:17 +00:00
plat-samsung ARM: SAMSUNG: include linux/types.h at gpio-cfg.h 2011-11-17 01:17:18 +09:00
plat-spear Merge branch 'vmalloc' of git://git.linaro.org/people/nico/linux into devel-stable 2011-12-05 23:27:59 +00:00
plat-tcc ARM: big removal of now unused vmalloc.h files 2011-11-26 19:21:29 -05:00
plat-versatile ARM: versatile: convert logical CPU numbers to physical numbers 2011-10-17 10:01:11 +01:00
tools ARM: Update mach-types to fix mxs build breakage 2011-11-17 07:49:17 +08:00
vfp arm: remove several unnecessary module.h include instances 2011-10-31 19:30:48 -04:00
Kconfig ARM: 7162/1: errata: tidy up Kconfig options for PL310 errata workarounds 2011-11-21 13:12:18 +00:00
Kconfig-nommu
Kconfig.debug Merge branch 'next/soc' of git://git.linaro.org/people/arnd/arm-soc 2011-11-01 21:08:03 -07:00
Makefile ARM: EXYNOS: Add ARCH_EXYNOS and reorganize arch/arm/mach-exynos 2011-11-06 13:54:56 +09:00