[Build Fix]
[processor-sdk/pdk.git] / packages / ti / diag / sdr / test / sdtf-test / src / j721e_evm / r5f / baremetal / sdtf_rat.c
1 /*
2  * SDTF RAT
3  *
4  * Software Diagnostics Reference Test for RAT module
5  *
6  *  Copyright (c) Texas Instruments Incorporated 2019-2020
7  *
8  *  Redistribution and use in source and binary forms, with or without
9  *  modification, are permitted provided that the following conditions
10  *  are met:
11  *
12  *    Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  *
15  *    Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the
18  *    distribution.
19  *
20  *    Neither the name of Texas Instruments Incorporated nor the names of
21  *    its contributors may be used to endorse or promote products derived
22  *    from this software without specific prior written permission.
23  *
24  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
27  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
28  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
30  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31  *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32  *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34  *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35  *
36  */
38 #include <stdint.h>
39 #include <ti/csl/csl_rat.h>
41 #include "sdtf_common.h"
42 #include "sdtf_profile.h"
43 #include "sdtf_test.h"
44 #include "sdtf_rat.h"
46 /* Choosing unused address space */
47 #define SDTF_RAT_SELF_TEST_TRANSLATE_BASE  (0x10000000U)
49 __attribute((section(".sdtf_rat_testsection"))) __attribute__((aligned(32))) uint32_t SDTF_RATTestArray[8];
51 #define SDTF_RAT_REGION_INDEX 0
53 /*********************************************************************
54  *
55  * \brief Test RAT module
56  *
57  *
58  * \return 0 if test pass, -1 in case of failure
59  */
60 int32_t SDTF_runtestRAT(void)
61 {
62     int32_t retValue=0;
63     CSL_RatTranslationCfgInfo translationCfg;
65     SDTF_printf("\n RAT Test: starting");
67     translationCfg.translatedAddress = ((uint64_t)&SDTF_RATTestArray);
68     translationCfg.sizeInBytes = sizeof(SDTF_RATTestArray);
69     translationCfg.baseAddress = (uint32_t)SDTF_RAT_SELF_TEST_TRANSLATE_BASE;
71     SDTF_profileBegin(SDTF_PROFILE_ONESHOT);
72     retValue = SDTF_RATSelfTest(SDTF_RAT_REGION_INDEX, &translationCfg, &SDTF_RATTestArray[0]);
74     SDTF_profileEnd(SDTF_PROFILE_ONESHOT);
75     if (retValue != 0 ) {
76         SDTF_printf("\n RAT Test failed");
77     } else {
78         SDTF_printf("\n RAT Test  complete");
79         SDTF_printf("\n Cycles taken %u", SDTF_profileDelta(SDTF_PROFILE_ONESHOT));
80     }
82     return retValue;
84 }
85 /*********************************************************************
86  *
87  * \brief Self test for RAT module
88  * Note: This function assumes both the mapped and translated addresses are accessible directly
89  * for the self test
90  * Note: The values in the region may be overwritten
91  *
92  * \param regionIndex: RAT region index to be used for the test
93  * \param pTranslateCfg: Pointer to translation configuration for
94  *                       the RAT mapping
95  * \param pTestMemArea: Test memory area for doing the RAT region mapping
96  *
97  * \return 0 if test pass, -1 in case of failure
98  */
99 /* Note this function assumes both the mapped and translated addresses are accessible directly
100  * for the self test
101  * Note: The values in the region may be overwritten
102  */
103 int32_t SDTF_RATSelfTest(uint32_t regionIndex, CSL_RatTranslationCfgInfo *pTranslationCfg,
104                          uint32_t *pTestMemArea)
106     int32_t retValue=0;
107     int32_t cslStatus;
108     bool result;
109     CSL_ratRegs *pRatRegs = (CSL_ratRegs *)CSL_MCU_ARMSS_RAT_CFG_BASE;
110     uint32_t *pMappedBase;
112     /* The assumption is that the tranlated Address is accessible directly as well
113      * for Self test to work.
114      */
115     if ((pTranslationCfg->translatedAddress > (uint64_t)0xffffffffu)
116             && (pTranslationCfg->translatedAddress != (uint64_t)pTestMemArea)){
117         retValue = -1;
118     }
120     if (retValue == 0) {
121         /* Write a value to RAT region */
122         pTestMemArea[0] = 0xbabeface;
124         /* Set up RAT translation */
125         result = CSL_ratConfigRegionTranslation(pRatRegs, regionIndex, pTranslationCfg);
126         if(result == false) {
127             retValue = -1;
128         }
129     }
131     if (retValue == 0) {
132         /* Verify RAT configuration */
133         cslStatus = CSL_ratVerifyConfigRegionTranslation(pRatRegs, regionIndex, pTranslationCfg);
134         if (cslStatus != CSL_PASS) {
135             retValue = -1;
136         }
137     }
139     if (retValue == 0) {
140         /* Now write another value to test area */
141         pTestMemArea[1] = 0xaaaa5555;
143         pMappedBase = ((uint32_t *)(SDTF_RAT_SELF_TEST_TRANSLATE_BASE));
145         /* Check the first written value */
146         if (pMappedBase[0] != pTestMemArea[0]) {
147             retValue = -1;
148         }
149     }
151     if (retValue == 0) {
153         /* Check second value written after RAT configuration */
154         if (pMappedBase[1] != pTestMemArea[1]) {
155             retValue = -1;
156         }
157     }
159     if (retValue == 0) {
161         /* Write a value to mapped region */
162         pMappedBase[2] = 0x5555aaaa;
163         /* Check third write to mapped area */
164         if (pMappedBase[1] != pTestMemArea[1]) {
165             retValue = -1;
166         }
167     }
169     /* Disable RAT region */
170     CSL_ratDisableRegionTranslation(pRatRegs, regionIndex);
172     return retValue;