• 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 "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