1 /* 2 * Copyright 2019-2024 NXP 3 * All rights reserved. 4 * 5 * SPDX-License-Identifier: BSD-3-Clause 6 */ 7 #ifndef __ELEMU_DRIVER_H__ 8 #define __ELEMU_DRIVER_H__ 9 10 #include "fsl_common.h" 11 #include "fsl_device_registers.h" 12 13 #define MU_MSG_HEADER_SIZE (1U) 14 15 #define MESSAGING_TAG_COMMAND (0x17u) 16 #define MESSAGING_TAG_REPLY (0x0Cu) 17 #define STATIC_CHECK_BITS (0xD7u) 18 19 enum 20 { 21 kStatus_ELEMU_AgumentOutOfRange = 22 MAKE_STATUS(kStatusGroup_ELEMU, 0x1u), /*!< ELEMU status for out of range access. */ 23 kStatus_ELEMU_InvalidArgument = 24 MAKE_STATUS(kStatusGroup_ELEMU, 0x2u), /*!< ELEMU status for invalid argument check. */ 25 kStatus_ELEMU_RequestTimeout = MAKE_STATUS(kStatusGroup_ELEMU, 0x3u), /*!< ELEMU status for timeout. */ 26 kStatus_ELEMU_Busy = MAKE_STATUS(kStatusGroup_ELEMU, 0x4u), /*!< ELEMU status for reservation by other core. */ 27 }; 28 29 typedef enum 30 { 31 kStatus_ELEMU_Unknown = 0x0u, /*!< Unexpected ELEMU ownership. */ 32 kStatus_ELEMU_LockedByMe = 0x1u, /*!< ELEMU reserved for current core. */ 33 kStatus_ELEMU_LockedByOther = 0x2u, /*!< ELEMU reserved for other core. */ 34 kStatus_ELEMU_Free = 0x3u, /*!< ELEMU not reserved. */ 35 } elemu_ownership_status_t; 36 37 typedef struct mu_hdr 38 { 39 uint8_t tag_sts; 40 uint8_t check_bits; 41 uint8_t size; 42 uint8_t command; 43 } mu_hdr_t; 44 45 void ELEMU_mu_hal_send_data(ELEMU_Type *mu, uint8_t regid, uint32_t *data); 46 void ELEMU_mu_hal_receive_data(ELEMU_Type *mu, uint8_t regid, uint32_t *data); 47 status_t ELEMU_mu_hal_receive_data_wait(ELEMU_Type *mu, uint8_t regid, uint32_t *data, uint32_t wait); 48 status_t ELEMU_mu_read_message(ELEMU_Type *mu, uint32_t *buf, uint8_t *size, uint8_t read_header); 49 status_t ELEMU_mu_read_data_wait(ELEMU_Type *mu, uint32_t buf[], uint8_t *size, uint32_t wait); 50 51 status_t ELEMU_mu_send_message(ELEMU_Type *mu, uint32_t buf[], size_t wordCount); 52 status_t ELEMU_mu_get_response(ELEMU_Type *mu, uint32_t *buf, size_t wordCount); 53 status_t ELEMU_mu_wait_for_data(ELEMU_Type *mu, uint32_t *buf, size_t wordCount, uint32_t wait); 54 55 status_t ELEMU_mu_wait_for_ready(ELEMU_Type *mu, uint32_t wait); 56 57 #if (defined(FSL_FEATURE_ELEMU_HAS_SEMA4_STATUS_REGISTER) && FSL_FEATURE_ELEMU_HAS_SEMA4_STATUS_REGISTER) 58 elemu_ownership_status_t ELEMU_mu_get_ownership_status(ELEMU_Type *mu); 59 status_t ELEMU_mu_get_ownership(ELEMU_Type *mu); 60 status_t ELEMU_mu_release_ownership(ELEMU_Type *mu); 61 status_t ELEMU_mu_release_ownership_force(ELEMU_Type *mu); 62 #endif /* FSL_FEATURE_ELEMU_HAS_SEMA4_STATUS_REGISTER */ 63 64 void ELEMU_mu_init(ELEMU_Type *mu); 65 status_t ELEMU_LP_WakeupPathInit(ELEMU_Type *mu); 66 67 #if (defined(ELEMU_HAS_LOADABLE_FW) && ELEMU_HAS_LOADABLE_FW) 68 status_t ELEMU_loadFw(ELEMU_Type *mu, uint32_t image[]); 69 #endif /* ELEMU_HAS_LOADABLE_FW */ 70 71 #endif /* __ELEMU_DRIVER_H__ */ 72