/*
 * Copyright (c) 2015-2018, Arm Limited and Contributors. All rights reserved.
 * Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#include <arch.h>
#include <asm_macros.S>
#include <cpu_macros.S>

#include <plat_macros.S>
#include <qti_cpu.h>

	.p2align 3

/* -------------------------------------------------
 * The CPU Ops reset function for Kryo-3 Gold
 * -------------------------------------------------
 */
func qti_kryo6_gold_reset_func
#if IMAGE_BL31 && WORKAROUND_CVE_2017_5715
	adr	x0, wa_cve_2017_5715_bpiall_vbar
	msr	vbar_el3, x0
	isb
#endif

	mov	x19, x30

	bl	qtiseclib_kryo6_gold_reset_asm
	mov	x30, x19
	b	cortex_a78_reset_func

endfunc qti_kryo6_gold_reset_func

/* -------------------------------------------------------
 * The CPU Ops cluster power down function for Kryo-3 Gold
 * -------------------------------------------------------
 */
func qti_kryo6_gold_cluster_pwr_dwn
	ret
endfunc qti_kryo6_gold_cluster_pwr_dwn

#if REPORT_ERRATA
/*
 * Errata printing function for Kryo4 Gold. Must follow AAPCS.
 */
func qti_kryo6_gold_errata_report
	/* TODO : Need to add support. Required only for debug bl31 image.*/
	ret
endfunc qti_kryo6_gold_errata_report
#endif

/* ---------------------------------------------
 * This function provides kryo4_gold specific
 * register information for crash reporting.
 * It needs to return with x6 pointing to
 * a list of register names in ASCII and
 * x8 - x15 having values of registers to be
 * reported.
 * ---------------------------------------------
 */
.section .rodata.qti_kryo4_gold_regs, "aS"
qti_kryo6_gold_regs:  /* The ASCII list of register names to be reported */
	.asciz	""

func qti_kryo6_gold_cpu_reg_dump
	adr	x6, qti_kryo6_gold_regs
	ret
endfunc qti_kryo6_gold_cpu_reg_dump

declare_cpu_ops	qti_kryo6_gold, QTI_KRYO6_GOLD_MIDR,	\
		qti_kryo6_gold_reset_func,		\
		cortex_a78_core_pwr_dwn,	\
		qti_kryo6_gold_cluster_pwr_dwn
