]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - processor-sdk/pdk.git/blob - packages/ti/drv/sciclient/src/sciclient/sciclient_boardcfg.c
Fix for MC flood to work on Port1
[processor-sdk/pdk.git] / packages / ti / drv / sciclient / src / sciclient / sciclient_boardcfg.c
1 /*
2  * Copyright (c) 2018-2020, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * *  Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  *
12  * *  Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * *  Neither the name of Texas Instruments Incorporated nor the names of
17  *    its contributors may be used to endorse or promote products derived
18  *    from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 /**
33  *  \file sciclient_boardcfg.c
34  *
35  *  \brief File containing the APIs to send board configuration
36  *       messages.
37  *
38  */
40 /* ========================================================================== */
41 /*                             Include Files                                  */
42 /* ========================================================================== */
44 #include <ti/drv/sciclient/src/sciclient/sciclient_priv.h>
45 #include <ti/csl/arch/csl_arch.h>
47 /* ========================================================================== */
48 /*                          Function Definitions                              */
49 /* ========================================================================== */
51 #if defined (BUILD_MCU1_0)
52 const uint32_t gSciclient_boardCfgLow[(SCICLIENT_BOARDCFG_SIZE_IN_BYTES+3U)/4U]
53     __attribute__(( aligned(128), section(".boardcfg_data") ))
54     = SCICLIENT_BOARDCFG;
55 const uint32_t gSciclient_boardCfgLow_rm[(SCICLIENT_BOARDCFG_RM_SIZE_IN_BYTES+3U)/4U]
56     __attribute__(( aligned(128), section(".boardcfg_data") ))
57     = SCICLIENT_BOARDCFG_RM;
58 const uint32_t gSciclient_boardCfgLow_sec[(SCICLIENT_BOARDCFG_SECURITY_SIZE_IN_BYTES+3U)/4U]
59     __attribute__(( aligned(128), section(".boardcfg_data") ))
60     = SCICLIENT_BOARDCFG_SECURITY;
61 const uint32_t gSciclient_boardCfgLow_pm[(SCICLIENT_BOARDCFG_PM_SIZE_IN_BYTES+3U)/4U]
62     __attribute__(( aligned(128), section(".boardcfg_data") ))
63     = SCICLIENT_BOARDCFG_PM;
65 int32_t Sciclient_boardCfg(const Sciclient_BoardCfgPrms_t * pInPrms)
66 {
67     int32_t retVal = CSL_PASS;
68     struct tisci_msg_board_config_req request = {
69         .tisci_boardcfgp_low  = (uint32_t) gSciclient_boardCfgLow,
70         .tisci_boardcfgp_high = (uint32_t) 0x0U,
71         .tisci_boardcfg_size  = (uint16_t) SCICLIENT_BOARDCFG_SIZE_IN_BYTES,
72         .tisci_boardcfg_devgrp = (uint8_t) DEVGRP_ALL
73     };
75     /* NULL pInPrms will retain default values */
76     if (pInPrms != NULL)
77     {
78         request.tisci_boardcfgp_low = pInPrms->boardConfigLow;
79         request.tisci_boardcfgp_high = pInPrms->boardConfigHigh;
80         request.tisci_boardcfg_size = pInPrms->boardConfigSize;
81         request.tisci_boardcfg_devgrp = pInPrms->devGrp;
82     }
84     Sciclient_ReqPrm_t reqParam = {
85         .messageType    = (uint16_t) TISCI_MSG_BOARD_CONFIG,
86         .flags          = (uint32_t) TISCI_MSG_FLAG_AOP,
87         .pReqPayload    = (const uint8_t *) &request,
88         .reqPayloadSize = (uint32_t) sizeof (request),
89         .timeout        = (uint32_t) SCICLIENT_SERVICE_WAIT_FOREVER
90     };
91     Sciclient_RespPrm_t respParam = {
92         .flags           = (uint32_t) 0,   /* Populated by the API */
93         .pRespPayload    = (uint8_t *) 0,
94         .respPayloadSize = (uint32_t) 0
95     };
96     CSL_armR5CacheWbInv((const void*) request.tisci_boardcfgp_low,
97                         request.tisci_boardcfg_size);
98     if((CSL_PASS != Sciclient_service(&reqParam, &respParam))
99         || ((respParam.flags & TISCI_MSG_FLAG_ACK) != TISCI_MSG_FLAG_ACK))
100     {
101         retVal = CSL_EFAIL;
102     }
104     return retVal;
107 int32_t Sciclient_boardCfgPm(const Sciclient_BoardCfgPrms_t * pInPrms)
109     int32_t retVal = CSL_PASS;
110     struct tisci_msg_board_config_pm_req request = {
111         .tisci_boardcfg_pmp_low  = (uint32_t) gSciclient_boardCfgLow_pm, /* PM Board Config structure
112                                                  definition removed from TISCI */
113         .tisci_boardcfg_pmp_high = (uint32_t) 0x0U,
114         .tisci_boardcfg_pm_size  = (uint16_t) SCICLIENT_BOARDCFG_PM_SIZE_IN_BYTES,
115         .tisci_boardcfg_pm_devgrp = (uint8_t) DEVGRP_ALL
117     };
119     /* NULL pInPrms will retain default values */
120     if (pInPrms != NULL)
121     {
122         request.tisci_boardcfg_pmp_low = pInPrms->boardConfigLow;
123         request.tisci_boardcfg_pmp_high = pInPrms->boardConfigHigh;
124         request.tisci_boardcfg_pm_size = pInPrms->boardConfigSize;
125         request.tisci_boardcfg_pm_devgrp = pInPrms->devGrp;
126     }
128     Sciclient_ReqPrm_t reqParam = {
129         .messageType    = (uint16_t) TISCI_MSG_BOARD_CONFIG_PM,
130         .flags          = (uint32_t) TISCI_MSG_FLAG_AOP,
131         .pReqPayload    = (const uint8_t *) &request,
132         .reqPayloadSize = (uint32_t) sizeof (request),
133         .timeout        = (uint32_t) SCICLIENT_SERVICE_WAIT_FOREVER
134     };
135     Sciclient_RespPrm_t respParam = {
136         .flags           = (uint32_t) 0,   /* Populated by the API */
137         .pRespPayload    = (uint8_t *) 0,
138         .respPayloadSize = (uint32_t) 0
139     };
140     CSL_armR5CacheWbInv((const void*) request.tisci_boardcfg_pmp_low,
141                             request.tisci_boardcfg_pm_size);
142     if((CSL_PASS != Sciclient_service(&reqParam, &respParam))
143         || ((respParam.flags & TISCI_MSG_FLAG_ACK) != TISCI_MSG_FLAG_ACK))
144     {
145         retVal = CSL_EFAIL;
146     }
147     return retVal;
150 int32_t Sciclient_boardCfgRm(const Sciclient_BoardCfgPrms_t * pInPrms)
152     int32_t retVal = CSL_PASS;
154     struct tisci_msg_board_config_rm_req request = {
155         .tisci_boardcfg_rmp_low  = (uint32_t) gSciclient_boardCfgLow_rm,
156         .tisci_boardcfg_rmp_high = (uint32_t) 0x0U,
157         .tisci_boardcfg_rm_size  = (uint16_t) SCICLIENT_BOARDCFG_RM_SIZE_IN_BYTES,
158         .tisci_boardcfg_rm_devgrp = (uint8_t) DEVGRP_ALL
159     };
161     /* NULL pInPrms will retain default values */
162     if (pInPrms != NULL)
163     {
164         request.tisci_boardcfg_rmp_low = pInPrms->boardConfigLow;
165         request.tisci_boardcfg_rmp_high = pInPrms->boardConfigHigh;
166         request.tisci_boardcfg_rm_size = pInPrms->boardConfigSize;
167         request.tisci_boardcfg_rm_devgrp = pInPrms->devGrp;
168     }
170     Sciclient_ReqPrm_t reqParam = {
171         .messageType    = (uint16_t) TISCI_MSG_BOARD_CONFIG_RM,
172         .flags          = (uint32_t) TISCI_MSG_FLAG_AOP,
173         .pReqPayload    = (const uint8_t *) &request,
174         .reqPayloadSize = (uint32_t) sizeof (request),
175         .timeout        = (uint32_t) SCICLIENT_SERVICE_WAIT_FOREVER
176     };
177     Sciclient_RespPrm_t respParam = {
178         .flags           = (uint32_t) 0,   /* Populated by the API */
179         .pRespPayload    = (uint8_t *) 0,
180         .respPayloadSize = (uint32_t) 0
181     };
182     CSL_armR5CacheWbInv((const void*) request.tisci_boardcfg_rmp_low,
183                             request.tisci_boardcfg_rm_size);
184     if((CSL_PASS != Sciclient_service(&reqParam, &respParam))
185         || ((respParam.flags & TISCI_MSG_FLAG_ACK) != TISCI_MSG_FLAG_ACK))
186     {
187         retVal = CSL_EFAIL;
188     }
189     return retVal;
192 int32_t Sciclient_boardCfgSec(const Sciclient_BoardCfgPrms_t * pInPrms)
194     int32_t retVal = CSL_PASS;
195     struct tisci_msg_board_config_security_req request = {
196         .tisci_boardcfg_securityp_low  = (uint32_t) gSciclient_boardCfgLow_sec,
197         .tisci_boardcfg_securityp_high = (uint32_t) 0x0U,
198         .tisci_boardcfg_security_size  = (uint16_t) SCICLIENT_BOARDCFG_SECURITY_SIZE_IN_BYTES,
199         .tisci_boardcfg_security_devgrp = (uint8_t) DEVGRP_ALL
200     };
202     /* NULL pInPrms will retain default values */
203     if (pInPrms != NULL)
204     {
205         request.tisci_boardcfg_securityp_low = pInPrms->boardConfigLow;
206         request.tisci_boardcfg_securityp_high = pInPrms->boardConfigHigh;
207         request.tisci_boardcfg_security_size = pInPrms->boardConfigSize;
208         request.tisci_boardcfg_security_devgrp = pInPrms->devGrp;
209     }
211     Sciclient_ReqPrm_t reqParam = {
212         .messageType    = (uint16_t) TISCI_MSG_BOARD_CONFIG_SECURITY,
213         .flags          = (uint32_t) TISCI_MSG_FLAG_AOP,
214         .pReqPayload    = (const uint8_t *) &request,
215         .reqPayloadSize = (uint32_t) sizeof (request),
216         .timeout        = (uint32_t) SCICLIENT_SERVICE_WAIT_FOREVER
217     };
218     Sciclient_RespPrm_t respParam = {
219         .flags           = (uint32_t) 0,   /* Populated by the API */
220         .pRespPayload    = (uint8_t *) 0,
221         .respPayloadSize = (uint32_t) 0
222     };
223     CSL_armR5CacheWbInv((const void*) request.tisci_boardcfg_securityp_low,
224                             request.tisci_boardcfg_security_size);
225     if((CSL_PASS != Sciclient_service(&reqParam, &respParam))
226         || ((respParam.flags & TISCI_MSG_FLAG_ACK) != TISCI_MSG_FLAG_ACK))
227     {
228         retVal = CSL_EFAIL;
229     }
230     return retVal;
233 int32_t Sciclient_getDefaultBoardCfgInfo(Sciclient_DefaultBoardCfgInfo_t *pBoardCfgInfo)
235     int32_t retVal = CSL_PASS;
237     if(NULL == pBoardCfgInfo)
238     {
239         retVal = CSL_EFAIL;
240     }
242     if(CSL_PASS == retVal)
243     {
244         pBoardCfgInfo->boardCfgLow          = &gSciclient_boardCfgLow[0U];
245         pBoardCfgInfo->boardCfgLowRm        = &gSciclient_boardCfgLow_rm[0U];
246         pBoardCfgInfo->boardCfgLowSec       = &gSciclient_boardCfgLow_sec[0U];
247         pBoardCfgInfo->boardCfgLowPm        = &gSciclient_boardCfgLow_pm[0U];
248         pBoardCfgInfo->boardCfgLowSize      = SCICLIENT_BOARDCFG_SIZE_IN_BYTES;
249         pBoardCfgInfo->boardCfgLowRmSize    = SCICLIENT_BOARDCFG_RM_SIZE_IN_BYTES;
250         pBoardCfgInfo->boardCfgLowSecSize   = SCICLIENT_BOARDCFG_SECURITY_SIZE_IN_BYTES;
251         pBoardCfgInfo->boardCfgLowPmSize    = SCICLIENT_BOARDCFG_PM_SIZE_IN_BYTES;
252     }
254     return retVal;
256 #endif