/*
 * Copyright(c) 2016 Intel Corporation. All rights reserved.
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Author: Liam Girdwood <liam.r.girdwood@linux.intel.com>
 */

/*
 * Entry point from ROM - assumes :-
 *
 * 1) C runtime environment is initialized by ROM.
 * 2) Stack is in first HPSRAM bank.
 */

#include <soc/shim.h>
#include <soc/platform.h>
#include <soc/memory.h>
#include <xtensa/corebits.h>
#include <xtensa/config/core-isa.h>

	.type   boot_master_core, @function

	.begin	literal_prefix	.boot_entry
	.section .boot_entry.text, "ax"

	.align	4
	.global	boot_entry

boot_entry:
	entry	a1, 48
	j boot_init

	.align 4
	.literal_position
#if defined(PLATFORM_RESET_MHE_AT_BOOT)
l2_mecs:
	.word SHIM_L2_MECS
#endif

#if defined(PLATFORM_DISABLE_L2CACHE_AT_BOOT)
l2_cache_pref:
	.word SHIM_L2_PREF_CFG
#endif

sof_stack_base:
	.word SOF_STACK_BASE

wnd0_base:
	.word DMWBA(0)

wnd0_size:
	.word DMWLO(0)

wnd0_base_val:
	.word HP_SRAM_WIN0_BASE | DMWBA_READONLY | DMWBA_ENABLE

wnd0_size_val:
	.word HP_SRAM_WIN0_SIZE | 0x7

wnd0_status_address:
	.word HP_SRAM_WIN0_BASE

wnd0_error_address:
	.word HP_SRAM_WIN0_BASE | 0x4

#if defined(PLATFORM_MEM_INIT_AT_BOOT)
shim_ldoctl_address:
	.word SHIM_BASE + SHIM_LDOCTL

ldoctl_hpsram_ldo_on:
	.word SHIM_LDOCTL_HPSRAM_LDO_ON

ldoctl_hpsram_ldo_bypass:
	.word SHIM_LDOCTL_HPSRAM_LDO_BYPASS

hspgctl0_address:
	.word HSPGCTL0

hsrmctl0_address:
	.word HSRMCTL0

hspgctl1_address:
	.word HSPGCTL1

hsrmctl1_address:
	.word HSRMCTL1

hspgists0_address:
	.word HSPGISTS0

hspgists1_address:
	.word HSPGISTS1
#endif

fw_loaded_status_value:
	.word	0x00000005

fw_no_errors_value:
	.word	0x00000000

boot_init:
	.align 4
#if defined(PLATFORM_DISABLE_L2CACHE_AT_BOOT)
	l32r a3, l2_cache_pref
	movi a5, 0
	s32i a5, a3, 0
	memw
#endif

#if defined(PLATFORM_RESET_MHE_AT_BOOT)
	/* reset memory hole */
	l32r a3, l2_mecs
	movi a5, 0
	s32i a5, a3, 0
#endif

#if defined(PLATFORM_MEM_INIT_AT_BOOT)
	/* turn on memory _before_ stack reprogramming */

	l32r	a3, ldoctl_hpsram_ldo_on
	l32r	a5, shim_ldoctl_address
	s32i	a3, a5, 0
	memw

	/* delay for 256 iterations before touching pwr regs */
	movi	a2, 256
1:	addi.n	a2, a2, -1
	bnez	a2, 1b

	movi	a3, 0
	l32r	a5, hspgctl0_address
	s32i	a3, a5, 0
	memw

	l32r	a5, hsrmctl0_address
	s32i	a3, a5, 0
	memw

	l32r	a5, hspgctl1_address
	s32i	a3, a5, 0
	memw

	l32r	a5, hsrmctl1_address
	s32i	a3, a5, 0
	memw

	/* wait for status of first bank group */
	l32r	a5, hspgists0_address
2:
	l32i	a3, a5, 0
	bnez	a3, 2b

	/* wait for status of second bank group */
	l32r	a5, hspgists1_address
3:
	l32i	a3, a5, 0
	bnez	a3, 3b

	/* delay for 256 iterations before touching pwr regs */
	movi	a2, 256
4:	addi.n	a2, a2, -1
	bnez	a2, 4b

	l32r	a3, ldoctl_hpsram_ldo_bypass
	l32r	a5, shim_ldoctl_address
	s32i	a3, a5, 0
	memw
#endif

	/* reprogram stack to the area defined by main FW */
	l32r	a3, sof_stack_base
	mov	sp, a3

	/* set status register to 0x00000005 in wnd0 */
	l32r	a3, fw_loaded_status_value
	l32r	a5, wnd0_status_address
	s32i	a3, a5, 0

	/* set error register to 0x00 in wnd0 */
	l32r	a3, fw_no_errors_value
	l32r	a5, wnd0_error_address
	s32i	a3, a5, 0

	/* realloc memory window0 to
	continue reporting boot progress */
	l32r	a3, wnd0_size
	l32r	a5, wnd0_size_val
	s32i	a5, a3, 0
	memw
	l32r	a3, wnd0_base
	l32r	a5, wnd0_base_val
	s32i	a5, a3, 0
	memw

#if (XCHAL_DCACHE_IS_COHERENT || XCHAL_LOOP_BUFFER_SIZE) && \
	XCHAL_HW_MIN_VERSION >= XTENSA_HWVERSION_RE_2012_0
	/*	Enable zero-overhead loop instr buffer,
		and snoop responses, if configured.  */
	movi	a3, (MEMCTL_SNOOP_EN | MEMCTL_L0IBUF_EN)
	rsr a2, MEMCTL
	or	a2, a2, a3
	wsr a2, MEMCTL
#endif

	/* determine core we are running on */
	rsr.prid	a2
	movi		a3, PLATFORM_PRIMARY_CORE_ID
	beq			a2, a3, 1f

	/* no core should get here */
	j dead

1:
	/* we are primary core so boot it */
	call8 boot_master_core

dead:
	/* should never get here - we are dead */
	j dead

	.size	boot_entry, . - boot_entry

	.end	literal_prefix
