1 /* 2 * Copyright (c) 2024, Arm Limited. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 * 6 */ 7 8 #include "mscp_drv.h" 9 10 #include "tfm_hal_device_header.h" 11 12 #include <stdint.h> 13 #include <stddef.h> 14 15 struct _mscp_init_ctrl { 16 __IOM uint32_t mscp_cpu_init_ctrl; /* 0x000 */ 17 const uint32_t reserved0[31]; 18 __IOM uint32_t tcmecc_errstatus; /* 0x080 */ 19 __IOM uint32_t tcmeec_errctrl; /* 0x084 */ 20 __IOM uint32_t tcmeec_errcode; /* 0x088 */ 21 __IM uint32_t tcmeec_erraddr; /* 0x08C */ 22 const uint32_t reserved1[3]; 23 __IM uint32_t mscp_icerr; /* 0x0A0 */ 24 __IM uint32_t mscp_dcerr; /* 0x0A4 */ 25 const uint32_t reserved2[970]; 26 __IM uint32_t pidr4; /* 0xFD0 */ 27 const uint32_t reserved3[3]; 28 __IM uint32_t pidr0; /* 0xFE0 */ 29 __IM uint32_t pidr1; /* 0xFE4 */ 30 __IM uint32_t pidr2; /* 0xFE8 */ 31 __IM uint32_t pidr3; /* 0xFEC */ 32 __IM uint32_t cidr0; /* 0xFF0 */ 33 __IM uint32_t cidr1; /* 0xFF4 */ 34 __IM uint32_t cidr2; /* 0xFF8 */ 35 __IM uint32_t cidr3; /* 0xFFC */ 36 }; 37 38 /* Field definitions for MSCP_CPU_INIT_CTRL */ 39 #define MSCP_INIT_CPUCTRL_CPUWAIT_POS (0) 40 #define MSCP_INIT_CPUCTRL_CPUWAIT_MASK (0x1 << MSCP_INIT_CPUCTRL_CPUWAIT_POS) 41 #define MSCP_INIT_CPUCTRL_CPUWAIT_UNHALT (0x0 << MSCP_INIT_CPUCTRL_CPUWAIT_POS) 42 #define MSCP_INIT_CPUCTRL_CPUWAIT_HALT (0x1 << MSCP_INIT_CPUCTRL_CPUWAIT_POS) 43 mscp_driver_release_cpu(struct mscp_dev_t * dev)44enum mscp_error_t mscp_driver_release_cpu(struct mscp_dev_t *dev) 45 { 46 if (dev == NULL) { 47 return MSCP_ERR_INVALID_PARAM; 48 } 49 50 struct _mscp_init_ctrl *mscp_init_ctrl = 51 (struct _mscp_init_ctrl *) dev->init_ctrl_base; 52 mscp_init_ctrl->mscp_cpu_init_ctrl &= ~MSCP_INIT_CPUCTRL_CPUWAIT_MASK; 53 54 return MSCP_ERR_NONE; 55 } 56