• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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