1*f7e7ea1fSRanjani Vaidyanathan /* 2*f7e7ea1fSRanjani Vaidyanathan * Copyright 2023-2025 NXP 3*f7e7ea1fSRanjani Vaidyanathan * 4*f7e7ea1fSRanjani Vaidyanathan * SPDX-License-Identifier: BSD-3-Clause 5*f7e7ea1fSRanjani Vaidyanathan */ 6*f7e7ea1fSRanjani Vaidyanathan 7*f7e7ea1fSRanjani Vaidyanathan #include <assert.h> 8*f7e7ea1fSRanjani Vaidyanathan #include <stdint.h> 9*f7e7ea1fSRanjani Vaidyanathan 10*f7e7ea1fSRanjani Vaidyanathan #include <platform_def.h> 11*f7e7ea1fSRanjani Vaidyanathan 12*f7e7ea1fSRanjani Vaidyanathan typedef struct { 13*f7e7ea1fSRanjani Vaidyanathan uint8_t flag_sm; 14*f7e7ea1fSRanjani Vaidyanathan uint8_t flag_ap; 15*f7e7ea1fSRanjani Vaidyanathan uint8_t flag_unused1; 16*f7e7ea1fSRanjani Vaidyanathan uint8_t flag_unused2; 17*f7e7ea1fSRanjani Vaidyanathan uint32_t turn; 18*f7e7ea1fSRanjani Vaidyanathan } sm_ap_semaphore_t; 19*f7e7ea1fSRanjani Vaidyanathan 20*f7e7ea1fSRanjani Vaidyanathan /* Used for GIC_WAKER sync between AP and SM. */ request_sm_ap_sema(void)21*f7e7ea1fSRanjani Vaidyanathanvoid request_sm_ap_sema(void) 22*f7e7ea1fSRanjani Vaidyanathan { 23*f7e7ea1fSRanjani Vaidyanathan volatile sm_ap_semaphore_t *sm_ap_sema = (sm_ap_semaphore_t *)SM_AP_SEMA_ADDR; 24*f7e7ea1fSRanjani Vaidyanathan 25*f7e7ea1fSRanjani Vaidyanathan sm_ap_sema->flag_ap = 1U; 26*f7e7ea1fSRanjani Vaidyanathan sm_ap_sema->turn = 0U; 27*f7e7ea1fSRanjani Vaidyanathan 28*f7e7ea1fSRanjani Vaidyanathan while (sm_ap_sema->flag_sm && sm_ap_sema->turn == 0U) { 29*f7e7ea1fSRanjani Vaidyanathan /* Wait for SM to be done in the critical section. */ 30*f7e7ea1fSRanjani Vaidyanathan ; 31*f7e7ea1fSRanjani Vaidyanathan } 32*f7e7ea1fSRanjani Vaidyanathan } 33*f7e7ea1fSRanjani Vaidyanathan 34*f7e7ea1fSRanjani Vaidyanathan /* Used for GIC_WAKER sync between AP and SM. */ release_sm_ap_sema(void)35*f7e7ea1fSRanjani Vaidyanathanvoid release_sm_ap_sema(void) 36*f7e7ea1fSRanjani Vaidyanathan { 37*f7e7ea1fSRanjani Vaidyanathan sm_ap_semaphore_t *sm_ap_sema = (sm_ap_semaphore_t *)SM_AP_SEMA_ADDR; 38*f7e7ea1fSRanjani Vaidyanathan 39*f7e7ea1fSRanjani Vaidyanathan sm_ap_sema->flag_ap = 0U; 40*f7e7ea1fSRanjani Vaidyanathan } 41*f7e7ea1fSRanjani Vaidyanathan 42