1 /*
2 * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
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 #include "sys_config.h"
16 #include "target_config.h"
17 #include "los_typedef.h"
18 #include <unistd.h>
19 #include "stdlib.h"
20 #include "stdio.h"
21 #include "los_process_pri.h"
22 #include "disk.h"
23 #include "sys/mount.h"
24 #include "los_bootargs.h"
25 #include "los_rootfs.h"
26 #ifdef LOSCFG_DRIVERS_VIDEO
27 #include "fb.h"
28 #endif
29 #ifdef LOSCFG_SHELL
30 #include "shell.h"
31 #include "shcmd.h"
32 #endif
33
34 #ifdef LOSCFG_DRIVERS_HDF_PLATFORM_UART
35 #include "console.h"
36 #include "hisoc/uart.h"
37 #endif
38
39 #ifdef LOSCFG_DRIVERS_MEM
40 #include "los_dev_mem.h"
41 #endif
42
43 #ifdef LOSCFG_DRIVERS_RANDOM
44 #include "los_random.h"
45 #include "hisoc/random.h"
46 #endif
47
48 #ifdef LOSCFG_DRIVERS_HDF
49 #include "devmgr_service_start.h"
50 #endif
51
52 #ifdef LOSCFG_DRIVERS_QUICKSTART
53 #include "los_dev_quickstart.h"
54 #endif
55
56 #ifdef LOSCFG_DRIVERS_USB
57 #include "implementation/usb_init.h"
58 #endif
59
60 #ifdef LOSCFG_DRIVERS_MMC
61 #include <asm/io.h>
62 #define PWR_CTRL0_REG 0x12090000
63 #define GPIO_AT_PMC_ENABLE_BIT 0x80
64 #define REG_SLEEP_TIME_MS 0x30
65 #endif
66
67 #ifdef LOSCFG_DRIVERS_NETDEV
68 #include "lwip/tcpip.h"
69 #include "lwip/netif.h"
70 #include "lwip/netifapi.h"
71
72 #define SLEEP_TIME_MS 60
73 #define NETIF_SETUP_OVERTIME 100
74
net_init(void)75 void net_init(void)
76 {
77 extern void tcpip_init(tcpip_init_done_fn initfunc, void *arg);
78 dprintf("\ntcpip_init start\n");
79 tcpip_init(NULL, NULL);
80 dprintf("\ntcpip_init end\n");
81 PRINTK("Ethernet start.");
82 }
83 #endif
84
85 #ifdef LOSCFG_DRIVERS_MMC
SDIO_setup(void)86 void SDIO_setup(void)
87 {
88 /* enable GPIO pin multiplexing in PMC module */
89 unsigned int val;
90
91 val = readl(IO_DEVICE_ADDR(PWR_CTRL0_REG));
92 val = val | GPIO_AT_PMC_ENABLE_BIT;
93 writel(val, IO_DEVICE_ADDR(PWR_CTRL0_REG));
94 LOS_Msleep(REG_SLEEP_TIME_MS);
95 }
96 #endif
97
98 extern void SDK_init(void);
99 extern void CatLogShell(void);
100
SystemInit_ReBootHook(void)101 void SystemInit_ReBootHook(void)
102 {
103 InitRebootHook();
104 }
105
SystemInit_IPCM(void)106 void SystemInit_IPCM(void)
107 {
108 #ifdef LOSCFG_PLATFORM_HISI_AMP
109 extern int _ipcm_vdd_init(void);
110 dprintf("ipcm init ...\n");
111 _ipcm_vdd_init();
112
113 #ifndef LOSCFG_ARCH_CORTEX_M7
114 extern int sharefs_client_init(const char *path);
115 dprintf("sharefs init ...\n");
116 sharefs_client_init("/sharefs");
117 #endif
118
119 extern int virt_tty_dev_init(void);
120 dprintf("virt tty init ...\n");
121 virt_tty_dev_init();
122 #endif
123 }
124
SystemInit_RandomInit(void)125 void SystemInit_RandomInit(void)
126 {
127 #ifdef LOSCFG_DRIVERS_RANDOM
128 dprintf("dev urandom init ...\n");
129 PlatformRandomOperationsInit();
130 DevUrandomRegister();
131 #endif
132 }
133
SystemInit_MMCInit(void)134 void SystemInit_MMCInit(void)
135 {
136 #ifdef LOSCFG_DRIVERS_MMC
137 dprintf("setting SDIO register ...\n");
138 SDIO_setup();
139 #endif
140 }
141
SystemInit_MemDevInit(void)142 void SystemInit_MemDevInit(void)
143 {
144 #ifdef LOSCFG_DRIVERS_MEM
145 dprintf("dev mem init ...\n");
146 DevMemRegister();
147 #endif
148 }
149
SystemInit_GpioDevInit(void)150 void SystemInit_GpioDevInit(void)
151 {
152 #ifndef LOSCFG_DRIVERS_HDF
153 #ifdef LOSCFG_DRIVERS_GPIO
154 dprintf("gpio init ...\n");
155 extern int gpio_dev_init(void);
156 gpio_dev_init();
157 #endif
158 #endif
159 }
160
SystemInit_MacInit(void)161 void SystemInit_MacInit(void)
162 {
163 #ifdef LOSCFG_DRIVERS_HIEDMAC
164 extern int hiedmac_init(void);
165 hiedmac_init();
166 #endif
167 #ifdef LOSCFG_DRIVERS_HIDMAC
168 dprintf("dmac init ...\n");
169 #endif
170 }
171
SystemInit_FlashInit(void)172 void SystemInit_FlashInit(void)
173 {
174 #ifdef LOSCFG_DRIVERS_MTD_NAND
175 dprintf("nand init ...\n");
176 extern int nand_init(void);
177
178 if (!nand_init()) {
179 extern int add_mtd_partition(char *type, UINT32 start_addr, UINT32 length, UINT32 partition_num);
180
181 extern int mount(const char *source, const char* target,
182 const char *filesystemtype, unsigned long mountflags,
183 const void *data);
184 }
185
186 #endif
187
188 #ifdef LOSCFG_DRIVERS_MTD_SPI_NOR
189 dprintf("spi nor flash init ...\n");
190 extern int spinor_init(void);
191
192 if (!spinor_init()) {
193 dprintf("spinor_init ...\n");
194 }
195 #endif
196 }
197
SystemInit_NetInit(void)198 void SystemInit_NetInit(void)
199 {
200 #ifdef LOSCFG_DRIVERS_NETDEV
201 dprintf("net init ...\n");
202 net_init();
203 dprintf("\n************************************************************\n");
204 #endif
205 }
206
SystemInit_SDKInit(void)207 void SystemInit_SDKInit(void)
208 {
209 #ifndef LOSCFG_DRIVERS_HDF_PLATFORM_HISI_SDK
210 dprintf("calling SDK_init form HISI_SDK\n");
211 SDK_init();
212 dprintf("calling SDK_init form HISI_SDK done!\n");
213 #endif
214 }
215
SystemInit_MountRootfs(void)216 void SystemInit_MountRootfs(void)
217 {
218 #ifdef LOSCFG_PLATFORM_ROOTFS
219 LOS_Msleep(450);
220 dprintf("OsMountRootfs start ...\n");
221 if (LOS_GetCmdLine()) {
222 PRINT_ERR("get cmdline error!\n");
223 }
224 if (LOS_ParseBootargs()) {
225 PRINT_ERR("parse bootargs error!\n");
226 }
227 if (OsMountRootfs()) {
228 PRINT_ERR("mount rootfs error!\n");
229 }
230 dprintf("OsMountRootfs end ...\n");
231 #endif
232 }
233
SystemInit_HDFInit(void)234 void SystemInit_HDFInit(void)
235 {
236 #ifdef LOSCFG_DRIVERS_HDF
237 DeviceManagerSetQuickLoad(1);
238 if (DeviceManagerStart()) {
239 PRINT_WARN("No drivers need load by hdf manager!");
240 }
241 #endif
242 }
243
SystemInit_HDFInit2(void)244 void SystemInit_HDFInit2(void)
245 {
246 #ifdef LOSCFG_DRIVERS_HDF
247 if (DeviceManagerStartStep2()) {
248 PRINT_WARN("No drivers need load by hdf manager!");
249 }
250 #endif
251 }
252
SystemInit_UsbInit(void)253 void SystemInit_UsbInit(void)
254 {
255 #ifdef LOSCFG_DRIVERS_USB
256 dprintf("usb init ...\n");
257 usb_init(HOST, 0);
258 #endif
259 }
260
SystemInit_ConsoleInit(void)261 void SystemInit_ConsoleInit(void)
262 {
263 #ifdef LOSCFG_DRIVERS_HDF_PLATFORM_UART
264 if (virtual_serial_init(TTY_DEVICE) != 0) {
265 PRINT_ERR("virtual_serial_init failed");
266 }
267 if (system_console_init(SERIAL) != 0) {
268 PRINT_ERR("system_console_init failed\n");
269 }
270 #endif
271 }
272
SystemInit_CatLogShell(void)273 void SystemInit_CatLogShell(void)
274 {
275 #ifdef LOSCFG_SHELL
276 CatLogShell();
277 #endif
278 }
279
SystemInit_UserInitProcess(void)280 void SystemInit_UserInitProcess(void)
281 {
282 if (OsUserInitProcess()) {
283 PRINT_ERR("Create user init process faialed!\n");
284 return;
285 }
286 return;
287 }
288
SystemInit1(void)289 void SystemInit1(void)
290 {
291 SystemInit_ReBootHook();
292 SystemInit_MacInit();
293 SystemInit_FlashInit();
294 SystemInit_HDFInit2();
295 SystemInit_UsbInit();
296 SystemInit_CatLogShell();
297 }
298
299 /* reserved */
SystemInit2(void)300 void SystemInit2(void)
301 {
302 return;
303 }
304
305 /* reserved */
SystemInit3(void)306 void SystemInit3(void)
307 {
308 return;
309 }
310
SystemInit_QuickstartInit(void)311 void SystemInit_QuickstartInit(void)
312 {
313 #ifdef LOSCFG_DRIVERS_QUICKSTART
314 QuickstartDevRegister();
315 LosSysteminitHook hook;
316 hook.func[0] = SystemInit1;
317 hook.func[1] = SystemInit2;
318 hook.func[2] = SystemInit3;
319 QuickstartHookRegister(hook);
320 PRINTK("quickstart dev init OK!!!\n");
321 #endif
322 }
323
SystemInit(void)324 void SystemInit(void)
325 {
326 SystemInit_QuickstartInit();
327
328 SystemInit_IPCM();
329 SystemInit_RandomInit();
330 SystemInit_MMCInit();
331 SystemInit_MemDevInit();
332 SystemInit_GpioDevInit();
333 SystemInit_SDKInit();
334 SystemInit_HDFInit();
335 SystemInit_NetInit(); /* need to check later */
336 SystemInit_MountRootfs();
337 SystemInit_ConsoleInit();
338 #ifndef LOSCFG_DRIVERS_QUICKSTART
339 SystemInit1();
340 SystemInit2();
341 SystemInit3();
342 #endif
343 SystemInit_UserInitProcess();
344 }
345