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