Merge "fix(intel): update Agilex5 warm reset subroutines" into integration

This commit is contained in:
Mark Dykes 2024-10-25 16:33:33 +02:00 committed by TrustedFirmware Code Review
commit 94188b590f
4 changed files with 36 additions and 19 deletions

View file

@ -234,6 +234,9 @@ void bl31_plat_set_secondary_cpu_entrypoint(unsigned int cpu_id)
unsigned int pchctlr_new = 0x00;
uint32_t boot_core = 0x00;
/* Store magic number for SMP secondary cores boot */
mmio_write_32(L2_RESET_DONE_REG, SMP_SEC_CORE_BOOT_REQ);
boot_core = (mmio_read_32(AGX5_PWRMGR(MPU_BOOTCONFIG)) & 0xC00);
/* Update the p-channel based on cpu id */
pch_cpu = 1 << cpu_id;

View file

@ -98,18 +98,6 @@ func plat_my_core_pos
endfunc plat_my_core_pos
func warm_reset_req
#if PLATFORM_MODEL == PLAT_SOCFPGA_AGILEX5
bl plat_is_my_cpu_primary
cbnz x0, warm_reset
warm_reset:
mov_imm x1, PLAT_SEC_ENTRY
str xzr, [x1]
mrs x1, rmr_el3
orr x1, x1, #0x02
msr rmr_el3, x1
isb
dsb sy
#else
str xzr, [x4]
bl plat_is_my_cpu_primary
cbz x0, cpu_in_wfi
@ -123,22 +111,35 @@ warm_reset:
cpu_in_wfi:
wfi
b cpu_in_wfi
#endif
endfunc warm_reset_req
/* TODO: Zephyr warm reset test */
#if PLATFORM_MODEL == PLAT_SOCFPGA_AGILEX5
func plat_get_my_entrypoint
ldr x4, =L2_RESET_DONE_REG
ldr x5, [x4]
ldr x1, =PLAT_L2_RESET_REQ
/* Check for warm reset request */
ldr x1, =L2_RESET_DONE_STATUS
cmp x1, x5
b.eq zephyr_reset_req
b.eq warm_reset_req
/* Check for SMP secondary cores boot request */
ldr x1, =SMP_SEC_CORE_BOOT_REQ
cmp x1, x5
b.eq smp_request
/* Otherwise it is cold reset */
mov x0, #0
ret
smp_request:
/*
* Return the address 'bl31_warm_entrypoint', which is passed to
* 'psci_setup' routine as part of BL31 initialization.
*/
mov_imm x1, PLAT_SEC_ENTRY
ldr x0, [x1]
ret
zephyr_reset_req:
ldr x0, =0x00
/* Clear the mark up before return */
str xzr, [x4]
ret
endfunc plat_get_my_entrypoint
#else

View file

@ -29,6 +29,9 @@
/* Magic word to indicate L2 reset is completed */
#define L2_RESET_DONE_STATUS 0x1228E5E7
/* Magic word to differentiate for SMP secondary core boot request */
#define SMP_SEC_CORE_BOOT_REQ 0x1228E5E8
/* Define next boot image name and offset */
/* Get non-secure image entrypoint for BL33. Zephyr and Linux */
#ifdef PRELOADED_BL33_BASE

View file

@ -213,6 +213,16 @@ static void __dead2 socfpga_system_reset(void)
static int socfpga_system_reset2(int is_vendor, int reset_type,
u_register_t cookie)
{
#if CACHE_FLUSH
/*
* ATF Flush and Invalidate Cache due to hardware limitation
* of auto Flush and Invalidate Cache.
*/
dcsw_op_all(DCCISW);
invalidate_cache_low_el();
#endif
#if PLATFORM_MODEL == PLAT_SOCFPGA_AGILEX5
mailbox_reset_warm(reset_type);
#else