linux/arch/arm/mach-imx/headsmp.S
<<
>>
Prefs
   1/*
   2 * Copyright 2011 Freescale Semiconductor, Inc.
   3 * Copyright 2011 Linaro Ltd.
   4 *
   5 * The code contained herein is licensed under the GNU General Public
   6 * License. You may obtain a copy of the GNU General Public License
   7 * Version 2 or later at the following locations:
   8 *
   9 * http://www.opensource.org/licenses/gpl-license.html
  10 * http://www.gnu.org/copyleft/gpl.html
  11 */
  12
  13#include <linux/linkage.h>
  14#include <linux/init.h>
  15#include <asm/asm-offsets.h>
  16#include <asm/hardware/cache-l2x0.h>
  17
  18        .section ".text.head", "ax"
  19
  20#ifdef CONFIG_SMP
  21diag_reg_offset:
  22        .word   g_diag_reg - .
  23
  24        .macro  set_diag_reg
  25        adr     r0, diag_reg_offset
  26        ldr     r1, [r0]
  27        add     r1, r1, r0              @ r1 = physical &g_diag_reg
  28        ldr     r0, [r1]
  29        mcr     p15, 0, r0, c15, c0, 1  @ write diagnostic register
  30        .endm
  31
  32ENTRY(v7_secondary_startup)
  33        bl      v7_invalidate_l1
  34        set_diag_reg
  35        b       secondary_startup
  36ENDPROC(v7_secondary_startup)
  37#endif
  38
  39#ifdef CONFIG_ARM_CPU_SUSPEND
  40/*
  41 * The following code must assume it is running from physical address
  42 * where absolute virtual addresses to the data section have to be
  43 * turned into relative ones.
  44 */
  45
  46#ifdef CONFIG_CACHE_L2X0
  47        .macro  pl310_resume
  48        adr     r0, l2x0_saved_regs_offset
  49        ldr     r2, [r0]
  50        add     r2, r2, r0
  51        ldr     r0, [r2, #L2X0_R_PHY_BASE]      @ get physical base of l2x0
  52        ldr     r1, [r2, #L2X0_R_AUX_CTRL]      @ get aux_ctrl value
  53        str     r1, [r0, #L2X0_AUX_CTRL]        @ restore aux_ctrl
  54        mov     r1, #0x1
  55        str     r1, [r0, #L2X0_CTRL]            @ re-enable L2
  56        .endm
  57
  58l2x0_saved_regs_offset:
  59        .word   l2x0_saved_regs - .
  60
  61#else
  62        .macro  pl310_resume
  63        .endm
  64#endif
  65
  66ENTRY(v7_cpu_resume)
  67        bl      v7_invalidate_l1
  68        pl310_resume
  69        b       cpu_resume
  70ENDPROC(v7_cpu_resume)
  71#endif
  72