c08e20d246
mach-socfpga is another platform that needs to use v7_invalidate_l1 to bringup additional cores. There was a comment that the ideal place for v7_invalidate_l1 should be in arm/mm/cache-v7.S Signed-off-by: Dinh Nguyen <dinguyen@altera.com> Acked-by: Simon Horman <horms+renesas@verge.net.au> Acked-by: Stephen Warren <swarren@nvidia.com> Reviewed-by: Pavel Machek <pavel@denx.de> Reviewed-by: Santosh Shilimkar <santosh.shilimkar@ti.com> Tested-by: Pavel Machek <pavel@denx.de> Tested-by: Stephen Warren <swarren@nvidia.com> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Russell King <linux@arm.linux.org.uk> Cc: Olof Johansson <olof@lixom.net> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Rob Herring <rob.herring@calxeda.com> Cc: Sascha Hauer <kernel@pengutronix.de> Cc: Magnus Damm <magnus.damm@gmail.com> Signed-off-by: Olof Johansson <olof@lixom.net>
60 lines
1.4 KiB
ArmAsm
60 lines
1.4 KiB
ArmAsm
/*
|
|
* Copyright 2011 Freescale Semiconductor, Inc.
|
|
* Copyright 2011 Linaro Ltd.
|
|
*
|
|
* The code contained herein is licensed under the GNU General Public
|
|
* License. You may obtain a copy of the GNU General Public License
|
|
* Version 2 or later at the following locations:
|
|
*
|
|
* http://www.opensource.org/licenses/gpl-license.html
|
|
* http://www.gnu.org/copyleft/gpl.html
|
|
*/
|
|
|
|
#include <linux/linkage.h>
|
|
#include <linux/init.h>
|
|
#include <asm/asm-offsets.h>
|
|
#include <asm/hardware/cache-l2x0.h>
|
|
|
|
.section ".text.head", "ax"
|
|
|
|
#ifdef CONFIG_SMP
|
|
ENTRY(v7_secondary_startup)
|
|
bl v7_invalidate_l1
|
|
b secondary_startup
|
|
ENDPROC(v7_secondary_startup)
|
|
#endif
|
|
|
|
#ifdef CONFIG_PM
|
|
/*
|
|
* The following code is located into the .data section. This is to
|
|
* allow phys_l2x0_saved_regs to be accessed with a relative load
|
|
* as we are running on physical address here.
|
|
*/
|
|
.data
|
|
.align
|
|
|
|
#ifdef CONFIG_CACHE_L2X0
|
|
.macro pl310_resume
|
|
ldr r2, phys_l2x0_saved_regs
|
|
ldr r0, [r2, #L2X0_R_PHY_BASE] @ get physical base of l2x0
|
|
ldr r1, [r2, #L2X0_R_AUX_CTRL] @ get aux_ctrl value
|
|
str r1, [r0, #L2X0_AUX_CTRL] @ restore aux_ctrl
|
|
mov r1, #0x1
|
|
str r1, [r0, #L2X0_CTRL] @ re-enable L2
|
|
.endm
|
|
|
|
.globl phys_l2x0_saved_regs
|
|
phys_l2x0_saved_regs:
|
|
.long 0
|
|
#else
|
|
.macro pl310_resume
|
|
.endm
|
|
#endif
|
|
|
|
ENTRY(v7_cpu_resume)
|
|
bl v7_invalidate_l1
|
|
pl310_resume
|
|
b cpu_resume
|
|
ENDPROC(v7_cpu_resume)
|
|
#endif
|