linux/arch/arm
Janusz Krzysztofik 96fbd74551 omap: McBSP: Use cache when modifying individual register bits
Change the way McBSP registers are updated: use cached values instead of
relying upon those read back from the device.

With this patch, I have finally managed to get rid of all random
playback/recording hangups on my OMAP1510 based Amstrad Delta hardware. Before
that, values read back from McBSP registers to be used for updating them
happened to be errornous.

From the hardware side, the issue appeared to be caused by a relatively high
power requirements of an external USB adapter connected to the board's printer
dedicated USB port.

I think there is one important point that makes this patch worth of applying,
apart from my hardware quality. With the current code, if it ever happens to
any machine, no matter if OMAP1510 or newer, to read incorrect value from a
McBSP register, this wrong value will get written back without any checking.
That can lead to hardware damage if, for example, an input pin is turned into
output as a result.

Applies on top of patch 3 from this series:
[PATCH v9 3/4] OMAP: McBSP: Introduce caching in register write operations

Tested on OMAP1510 based Amstrad Delta using linux-omap for-next, commit
fb7380d70e (2.6.33-rc3+ dated 2010-01-11).
Compile-tested with omap_3430sdp_defconfig.

Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl>
Acked-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
Acked-by: Jarkko Nikula <jhnikula@gmail.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
2010-02-15 10:03:33 -08:00
..
boot ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
common ARM: 5857/1: ARM: dmabounce: fix build 2009-12-22 15:32:32 +00:00
configs omap2/3/4: Add omap4 into omap3_defconfig 2010-02-15 09:27:25 -08:00
include/asm ARM: 5888/1: arm: Update comments in cacheflush.h and remove unnecessary V6 and V7 comments 2010-01-19 23:11:56 +00:00
kernel ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
lib
mach-aaec2000 ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-at91 ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-bcmring Merge git://git.infradead.org/mtd-2.6 2009-12-16 10:23:43 -08:00
mach-clps711x ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-davinci Merge branch 'debug-ll' into omap-for-linus 2010-02-15 09:26:07 -08:00
mach-dove ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-ebsa110 ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-ep93xx ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-footbridge ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-gemini ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-h720x ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-integrator ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-iop13xx ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-iop32x ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-iop33x ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-ixp4xx ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-ixp23xx ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-ixp2000 ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-kirkwood Merge branch 'debug-ll' into omap-for-linus 2010-02-15 09:26:07 -08:00
mach-ks8695 ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-l7200 ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-lh7a40x ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-loki ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-mmp ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-msm ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-mv78xx0 ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-mx1
mach-mx2 mx27: mxt_td60: Remove not used UART pins 2010-01-04 11:47:43 +01:00
mach-mx3 mx31ads: Provide an IRQ range to the WM835x on the 1133-EV1 module 2010-01-05 17:08:54 +01:00
mach-mx25 mx25: make the FEC AHB clk secondary of the IPG 2010-01-26 18:54:41 +01:00
mach-mxc91231
mach-netx ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-nomadik ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-ns9xxx ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-omap1 omap: McBSP: Introduce caching in register write operations 2010-02-15 10:03:33 -08:00
mach-omap2 omap: McBSP: Introduce caching in register write operations 2010-02-15 10:03:33 -08:00
mach-orion5x Merge branch 'debug-ll' into omap-for-linus 2010-02-15 09:26:07 -08:00
mach-pnx4008 ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-pxa Merge branch 'debug-ll' into omap-for-linus 2010-02-15 09:26:07 -08:00
mach-realview Merge branch 'debug-ll' into omap-for-linus 2010-02-15 09:26:07 -08:00
mach-rpc ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-s3c24a0/include/mach ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-s3c2400 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2009-12-09 19:43:33 -08:00
mach-s3c2410 ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-s3c2412 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2009-12-09 19:43:33 -08:00
mach-s3c2440 ARM: MINI2440: Fixup __initdata usage 2010-01-15 17:04:42 +09:00
mach-s3c2442 Merge git://git.infradead.org/battery-2.6 2009-12-15 08:59:33 -08:00
mach-s3c2443
mach-s3c6400 ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-s3c6410 hmt: adjust for new pwm_backlight->notify prototype 2010-01-22 09:58:17 +09:00
mach-s5pc100 ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-sa1100 ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-shark ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-stmp37xx
mach-stmp378x
mach-u300 ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-ux500 ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-versatile ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
mach-w90x900 ARM: 5864/1: Implement arch_reset() in NUC900 2010-01-05 20:52:45 +00:00
mm ARM: Fix wrong register in proc-arm6_7.S data abort handler 2010-02-03 15:48:03 +00:00
nwfpe ARM: Kill CONFIG_CPU_32 2009-12-18 16:07:53 +00:00
oprofile ARM: 5849/1: ARMv7: fix Oprofile events count 2009-12-22 15:32:31 +00:00
plat-iop
plat-mxc Merge branch 'debug-ll' into omap-for-linus 2010-02-15 09:26:07 -08:00
plat-nomadik ARM: 5833/1: ARM nomadik: enable U8500 for common platform 2009-11-28 10:22:53 +00:00
plat-omap omap: McBSP: Use cache when modifying individual register bits 2010-02-15 10:03:33 -08:00
plat-orion [ARM] Orion: fix PCIe inbound window programming when RAM size is not a power of two 2009-12-28 23:50:49 -05:00
plat-pxa [ARM] pxa: use resource_size() in pwm.c 2009-12-29 14:11:27 +08:00
plat-s3c ARM: S3C: NAND: Check the existence of nr_map before copying 2010-01-14 11:25:44 +09:00
plat-s3c24xx ARM: S3C24XX: touchscreen device definition 2009-12-23 19:28:12 +00:00
plat-s3c64xx ARM: S3C64XX: Fix possible clock look in EPLL and MPLL clock chains 2010-01-07 11:34:51 +09:00
plat-s5pc1xx Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2009-12-09 19:43:33 -08:00
plat-samsung ARM: SAMSUNG: Add plat-samsung as starting point for plat-s3c* moves 2009-12-01 01:28:37 +00:00
plat-stmp3xxx ARM: 5910/1: ARM: Add tmp register for addruart and loadsp 2010-02-12 17:27:52 +00:00
tools [ARM] Update mach-types 2010-01-28 22:17:45 +00:00
vfp ARM: 5909/1: ARM: Correct the FPSCR bits setting when raising exceptions 2010-02-01 20:05:09 +00:00
Kconfig ARCH OMAP : enable ARCH_HAS_HOLES_MEMORYMODEL for OMAP 2010-02-03 08:48:06 -08:00
Kconfig-nommu
Kconfig.debug Merge branch 'devel' of git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6 into devel 2009-12-13 16:35:09 +00:00
Makefile ARM: 5904/1: ARM: Always generate the IT instruction when compiling for Thumb-2 2010-01-30 16:13:23 +00:00