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