162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright 2011 Freescale Semiconductor, Inc. 462306a36Sopenharmony_ci * Copyright 2011 Linaro Ltd. 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#include <linux/linkage.h> 862306a36Sopenharmony_ci#include <linux/init.h> 962306a36Sopenharmony_ci#include <asm/assembler.h> 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci.arch armv7-a 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_cidiag_reg_offset: 1462306a36Sopenharmony_ci .word g_diag_reg - . 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci .macro set_diag_reg 1762306a36Sopenharmony_ci adr r0, diag_reg_offset 1862306a36Sopenharmony_ci ldr r1, [r0] 1962306a36Sopenharmony_ci add r1, r1, r0 @ r1 = physical &g_diag_reg 2062306a36Sopenharmony_ci ldr r0, [r1] 2162306a36Sopenharmony_ci mcr p15, 0, r0, c15, c0, 1 @ write diagnostic register 2262306a36Sopenharmony_ci .endm 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ciENTRY(v7_secondary_startup) 2562306a36Sopenharmony_ciARM_BE8(setend be) @ go BE8 if entered LE 2662306a36Sopenharmony_ci mrc p15, 0, r0, c0, c0, 0 2762306a36Sopenharmony_ci lsl r0, r0, #16 2862306a36Sopenharmony_ci lsr r0, r0, #20 2962306a36Sopenharmony_ci /* 0xc07 is cortex A7's ID */ 3062306a36Sopenharmony_ci mov r1, #0xc00 3162306a36Sopenharmony_ci orr r1, #0x7 3262306a36Sopenharmony_ci cmp r0, r1 3362306a36Sopenharmony_ci beq secondary_startup 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci set_diag_reg 3662306a36Sopenharmony_ci b secondary_startup 3762306a36Sopenharmony_ciENDPROC(v7_secondary_startup) 38