1 /*
2  * Copyright (c) 2020-2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "asm/platform.h"
17 #include "asm/io.h"
18 #include "soc/sys_ctrl.h"
19 #include "los_typedef.h"
20 #include "los_hwi.h"
21 #include "los_task_pri.h"
22 #include "los_spinlock.h"
23 #ifdef LOSCFG_DRIVERS_RANDOM
24 #include "soc/random.h"
25 #endif
26 #include "los_vm_map.h"
27 #include "los_vm_zone.h"
28 #include "los_vm_boot.h"
29 #include "los_mmu_descriptor_v6.h"
30 
OsRandomStackGuardnull31 UINT32 OsRandomStackGuard(VOID)
32 {
33 #ifdef LOSCFG_DRIVERS_RANDOM
34     UINT32 stackGuard = 0;
35 
36     HiRandomHwInit();
37     (VOID)HiRandomHwGetInteger(&stackGuard);
38     HiRandomHwDeinit();
39     return stackGuard;
40 #else
41     return 0;
42 #endif
43 }
44 
OsReboot(void)45 void OsReboot(void)
46 {
47     writel(0xffffffff, (SYS_CTRL_REG_BASE + REG_SC_SYSRES));
48 }
49 
InitRebootHook(void)50 void InitRebootHook(void)
51 {
52     OsSetRebootHook(OsReboot);
53 }
54 
55 #ifdef LOSCFG_KERNEL_MMU
56 LosArchMmuInitMapping g_archMmuInitMapping[] = {
57     {
58         .phys = SYS_MEM_BASE,
59         .virt = KERNEL_VMM_BASE,
60         .size = KERNEL_VMM_SIZE,
61         .flags = MMU_DESCRIPTOR_KERNEL_L1_PTE_FLAGS,
62         .name = "KernelCached",
63     },
64     {
65         .phys = SYS_MEM_BASE,
66         .virt = UNCACHED_VMM_BASE,
67         .size = UNCACHED_VMM_SIZE,
68         .flags = MMU_INITIAL_MAP_NORMAL_NOCACHE,
69         .name = "KernelUncached",
70     },
71     {
72         .phys = PERIPH_PMM_BASE,
73         .virt = PERIPH_DEVICE_BASE,
74         .size = PERIPH_DEVICE_SIZE,
75         .flags = MMU_INITIAL_MAP_DEVICE,
76         .name = "PeriphDevice",
77     },
78     {
79         .phys = PERIPH_PMM_BASE,
80         .virt = PERIPH_CACHED_BASE,
81         .size = PERIPH_CACHED_SIZE,
82         .flags = MMU_DESCRIPTOR_KERNEL_L1_PTE_FLAGS,
83         .name = "PeriphCached",
84     },
85     {
86         .phys = PERIPH_PMM_BASE,
87         .virt = PERIPH_UNCACHED_BASE,
88         .size = PERIPH_UNCACHED_SIZE,
89         .flags = MMU_INITIAL_MAP_STRONGLY_ORDERED,
90         .name = "PeriphStronglyOrdered",
91     },
92     {0}
93 };
94 #endif
95