1 /*
2  * Copyright (c) 2001-2019, Arm Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #include <string.h>
8 
9 #include "test_proj.h"
10 #include "test_proj_defs.h"
11 
12 #include "dx_reg_base_host.h"
13 
14 #include "test_pal_map_addrs.h"
15 #include "test_pal_log.h"
16 #include "test_pal_mem.h"
17 #include "test_pal_mem_s.h"
18 #include "board_configs.h"
19 
20 
21 struct ProcessMappingArea_t processMap;
22 
Test_ProjMap(void)23 uint32_t Test_ProjMap(void)
24 {
25     uint32_t error = 0;
26 
27     /* Initialize value */
28     memset(&processMap, 0, sizeof(struct ProcessMappingArea_t));
29 
30     /* Init platform specific memories: DMAble & unmanaged */
31     error = Test_HalBoardInit();
32     if (error != 0) {
33         TEST_PRINTF_ERROR("Failed to Test_HalBoardInit 0x%x", error);
34         return error;
35     }
36 #ifdef ARCH_V8M
37     processMap.processTeeUnmanagedBaseAddr = Test_PalGetUnmanagedBaseAddr_s();
38 #else
39     processMap.processTeeUnmanagedBaseAddr = Test_PalGetUnmanagedBaseAddr();
40 #endif
41 
42     /* Set relevant mapping regions for CC312-r1 tests */
43     processMap.processTeeHwRegBaseAddr = (unsigned long)Test_PalIOMap((void *)DX_BASE_CC,
44                                                                         TEST_PROJ_CC_REG_MAP_AREA_LEN);
45     processMap.processTeeHwEnvBaseAddr = (unsigned long)Test_PalIOMap((void *)DX_BASE_ENV_REGS,
46                                                                        TEST_PROJ_CC_REG_MAP_AREA_LEN);
47 
48     /* Verify all Maps succeeded */
49     if ((!VALID_MAPPED_ADDR(processMap.processTeeHwRegBaseAddr)) ||
50         (!VALID_MAPPED_ADDR(processMap.processTeeHwEnvBaseAddr)) ||
51     (!VALID_MAPPED_ADDR(processMap.processTeeUnmanagedBaseAddr))) {
52         TEST_PRINTF_ERROR("Failed to map, processTeeHwRegBaseAddr 0x%lx, processTeeHwEnvBaseAddr 0x%lx, \
53                  processTeeUnmanagedBaseAddr 0x%lx\n",
54                     processMap.processTeeHwRegBaseAddr,
55                     processMap.processTeeHwEnvBaseAddr,
56                      processMap.processTeeUnmanagedBaseAddr);
57         goto end_with_error;
58 
59     }
60     return TEST_OK;
61 
62 end_with_error:
63     Test_ProjUnmap();
64     return TEST_MAPPING_ERR;
65 
66 }
67 
Test_ProjUnmap(void)68 void Test_ProjUnmap(void)
69 {
70     Test_PalUnmapAddr((void *)processMap.processTeeHwRegBaseAddr, TEST_PROJ_CC_REG_MAP_AREA_LEN);
71     Test_PalUnmapAddr((void *)processMap.processTeeHwEnvBaseAddr, TEST_PROJ_CC_REG_MAP_AREA_LEN);
72     Test_HalBoardFree();
73 
74     memset((uint8_t *)&processMap, 0, sizeof(struct ProcessMappingArea_t));
75     return;
76 }
77