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