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