linux-stable-rt/arch/arm
Dave Martin ed3768a8d9 ARM: 6516/1: Allow SMP_ON_UP to work with Thumb-2 kernels.
* __fixup_smp_on_up has been modified with support for the
    THUMB2_KERNEL case.  For THUMB2_KERNEL only, fixups are split
    into halfwords in case of misalignment, since we can't rely on
    unaligned accesses working before turning the MMU on.

    No attempt is made to optimise the aligned case, since the
    number of fixups is typically small, and it seems best to keep
    the code as simple as possible.

  * Add a rotate in the fixup_smp code in order to support
    CPU_BIG_ENDIAN, as suggested by Nicolas Pitre.

  * Add an assembly-time sanity-check to ALT_UP() to ensure that
    the content really is the right size (4 bytes).

    (No check is done for ALT_SMP().  Possibly, this could be fixed
    by splitting the two uses ot ALT_SMP() (ALT_SMP...SMP_UP versus
    ALT_SMP...SMP_UP_B) into two macros.  In the first case,
    ALT_SMP needs to expand to >= 4 bytes, not == 4.)

  * smp_mpidr.h (which implements ALT_SMP()/ALT_UP() manually due
    to macro limitations) has not been modified: the affected
    instruction (mov) has no 16-bit encoding, so the correct
    instruction size is satisfied in this case.

  * A "mode" parameter has been added to smp_dmb:

    smp_dmb arm @ assumes 4-byte instructions (for ARM code, e.g. kuser)
    smp_dmb     @ uses W() to ensure 4-byte instructions for ALT_SMP()

    This avoids assembly failures due to use of W() inside smp_dmb,
    when assembling pure-ARM code in the vectors page.

    There might be a better way to achieve this.

  * Kconfig: make SMP_ON_UP depend on
    (!THUMB2_KERNEL || !BIG_ENDIAN) i.e., THUMB2_KERNEL is now
    supported, but only if !BIG_ENDIAN (The fixup code for Thumb-2
    currently assumes little-endian order.)

Tested using a single generic realview kernel on:
	ARM RealView PB-A8 (CONFIG_THUMB2_KERNEL={n,y})
	ARM RealView PBX-A9 (SMP)

Signed-off-by: Dave Martin <dave.martin@linaro.org>
Acked-by: Nicolas Pitre <nicolas.pitre@linaro.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2010-12-20 15:09:12 +00:00
..
boot
common
configs
include/asm ARM: 6516/1: Allow SMP_ON_UP to work with Thumb-2 kernels. 2010-12-20 15:09:12 +00:00
kernel ARM: 6516/1: Allow SMP_ON_UP to work with Thumb-2 kernels. 2010-12-20 15:09:12 +00:00
lib
mach-aaec2000
mach-at91
mach-bcmring
mach-clps711x
mach-cns3xxx
mach-davinci
mach-dove
mach-ebsa110
mach-ep93xx
mach-footbridge
mach-gemini
mach-h720x
mach-imx
mach-integrator
mach-iop13xx
mach-iop32x
mach-iop33x
mach-ixp4xx
mach-ixp23xx
mach-ixp2000
mach-kirkwood
mach-ks8695
mach-l7200/include/mach
mach-lh7a40x
mach-loki
mach-lpc32xx
mach-mmp
mach-msm
mach-mv78xx0
mach-mx3
mach-mx5
mach-mx25
mach-mxc91231
mach-netx
mach-nomadik
mach-ns9xxx
mach-nuc93x
mach-omap1
mach-omap2 ARM: CPU hotplug: remove bug checks in platform_cpu_die() 2010-12-20 15:09:10 +00:00
mach-orion5x
mach-pnx4008
mach-pxa
mach-realview ARM: SMP: remove smp_mpidr.h 2010-12-20 15:09:11 +00:00
mach-rpc
mach-s3c24a0/include/mach
mach-s3c64xx
mach-s3c2400
mach-s3c2410
mach-s3c2412
mach-s3c2416
mach-s3c2440
mach-s3c2443
mach-s5p64x0
mach-s5p6442
mach-s5pc100
mach-s5pv210
mach-s5pv310 ARM: SMP: remove smp_mpidr.h 2010-12-20 15:09:11 +00:00
mach-sa1100
mach-shark
mach-shmobile
mach-spear3xx
mach-spear6xx
mach-stmp37xx
mach-stmp378x
mach-tcc8k
mach-tegra ARM: SMP: remove smp_mpidr.h 2010-12-20 15:09:11 +00:00
mach-u300
mach-ux500 ARM: SMP: remove smp_mpidr.h 2010-12-20 15:09:11 +00:00
mach-versatile
mach-vexpress ARM: SMP: remove smp_mpidr.h 2010-12-20 15:09:11 +00:00
mach-w90x900
mm
nwfpe
oprofile
plat-iop
plat-mxc
plat-nomadik
plat-omap ARM: SMP: remove smp_mpidr.h 2010-12-20 15:09:11 +00:00
plat-orion
plat-pxa
plat-s3c24xx
plat-s5p
plat-samsung
plat-spear
plat-stmp3xxx
plat-tcc
plat-versatile
tools
vfp
Kconfig ARM: 6516/1: Allow SMP_ON_UP to work with Thumb-2 kernels. 2010-12-20 15:09:12 +00:00
Kconfig-nommu
Kconfig.debug
Makefile