1 /*
2 * Copyright (C) 2015-2021 Alibaba Group Holding Limited
3 */
4
5 #include "aos/kernel.h"
6 #include <k_api.h>
7 #include <stdio.h>
8 #include <stdlib.h>
9
10 #include "aos/init.h"
11 #include "aos/kernel.h"
12 #include "aos/hal/wdg.h"
13 #include "aos/hal/gpio.h"
14 #include "rtl8721d.h"
15 #include "core_armv8mml.h"
16
17 #include "osdep_service.h"
18 //#include "rtl8710b_ota.h"
19
20 #define AOS_START_STACK 2048 /* 8KB */
21
22 ktask_t *g_aos_init;
23
24 extern void board_init(void);
25 extern void sys_jtag_off(void);
26
27 extern uint32_t SystemCoreClock;
28
sys_open_security_boot_log(void)29 void sys_open_security_boot_log(void)
30 {
31 u32 temp;
32
33 temp = HAL_READ32(SYSTEM_CTRL_BASE_LP, REG_SYS_EFUSE_SYSCFG3);
34 if((temp & BIT_SYS_DIS_BOOT_LOG_EN) != 0) {
35 temp &= ~BIT_SYS_DIS_BOOT_LOG_EN;
36 EFUSE_LMAP_WRITE(0xe, 2, ((u8*)&temp) + 2);
37 }
38 }
39
hal_init()40 static void hal_init()
41 {
42 sys_jtag_off();
43 sys_open_security_boot_log();
44 }
45
46 extern void hw_start_hal(void);
47
dump_mem_info()48 void dump_mem_info(){}
49
start_ate(void)50 void start_ate(void)
51 {
52 u32 img2_addr = 0x080D0000;
53 IMAGE_HEADER *img2_hdr = (IMAGE_HEADER *)img2_addr;
54 IMAGE_HEADER *ram_img2_hdr = (IMAGE_HEADER *)(img2_addr + IMAGE_HEADER_LEN + img2_hdr->image_size);
55 u8 *ram_img2_data = (u8*)(ram_img2_hdr + 1);
56 u8 *ram_img2_valid_code = ram_img2_data + 8;
57 if (_strcmp((const char *)ram_img2_valid_code, (const char *)"RTKWin")) {
58 DBG_8195A("IMG_BOOTUSER SIGN Invalid\n");
59 while(1);
60 }
61 /* load ram image2 data into RAM */
62 _memcpy((void *)ram_img2_hdr->image_addr, ram_img2_data, ram_img2_hdr->image_size);
63 PRAM_START_FUNCTION img2_entry_fun = (PRAM_START_FUNCTION)ram_img2_data;
64 img2_entry_fun->RamStartFun();
65 }
66
67 /* For QC test */
board_mode_check(void)68 static void board_mode_check(void)
69 {
70 #define KEY_ELINK 12
71 #define KEY_BOOT 9
72
73 gpio_dev_t gpio_key_boot;
74 gpio_key_boot.port = KEY_BOOT;
75 gpio_key_boot.config = INPUT_PULL_UP;
76 hal_gpio_init(&gpio_key_boot);
77 uint32_t boot;
78 hal_gpio_input_get(&gpio_key_boot, &boot);
79
80 gpio_dev_t gpio_key_elink;
81 gpio_key_elink.port = KEY_ELINK;
82 gpio_key_elink.config = INPUT_PULL_UP;
83 hal_gpio_init(&gpio_key_elink);
84 uint32_t elink;
85
86 hal_gpio_input_get(&gpio_key_elink, &elink);
87 printf("--------------------------------> built at "__DATE__" "__TIME__"\r\n");
88 hal_gpio_input_get(&gpio_key_boot, &boot);
89 printf("--------------------------------> boot %d, elink %d \r\n", boot, elink);
90
91
92
93 if(boot == 0)
94 {
95 if(elink == 0)
96 start_ate();
97 else
98 qc_test(0);
99 }
100 if(elink == 0){
101 if(OTA_INDEX_1 == ota_get_cur_index()) {
102 OTA_Change(OTA_INDEX_2);
103 printf("-----change OTA 2 \r\n");
104 } else {
105 OTA_Change(OTA_INDEX_1);
106 printf("-----change OTA 1 \r\n");
107 }
108 aos_msleep(1000);
109 hal_reboot();
110 }
111
112 board_init();
113 }
114
sys_init_func(void)115 void sys_init_func(void)
116 {
117
118 InterruptRegister(IPC_INTHandler, IPC_IRQ, (u32)IPCM0_DEV, 5);
119 InterruptEn(IPC_IRQ, 5);
120
121 hal_init();
122
123 #ifdef USE_MX1290
124 board_mode_check();
125 #endif
126
127 #ifdef AOS_COMP_CPLUSPLUS
128 cpp_init();
129 #endif
130
131 aos_maintask(NULL);
132
133 krhino_task_dyn_del(NULL);
134 }
135
136 #if (DEBUG_CONFIG_PANIC == 1)
137 typedef void (*HAL_VECTOR_FUN) (void );
138 extern HAL_VECTOR_FUN NewVectorTable[];
139 extern void HardFault_Handler(void);
140 #endif
141
main(void)142 void main(void)
143 {
144 hal_wdg_finalize(0);
145 aos_init();
146 #if (DEBUG_CONFIG_PANIC == 1)
147 /* AliOS-Things taking over the exception */
148 /* replace HardFault Vector */
149 NewVectorTable[3] = HardFault_Handler;
150 /* replace MemManage Vector */
151 NewVectorTable[4] = HardFault_Handler;
152 /* replace BusFault Vector */
153 NewVectorTable[5] = HardFault_Handler;
154 /* replace UsageFault Vector */
155 NewVectorTable[6] = HardFault_Handler;
156 #endif
157 krhino_task_dyn_create(&g_aos_init, "aos-init", 0, AOS_DEFAULT_APP_PRI , 0, AOS_START_STACK, (task_entry_t)sys_init_func, 1);
158
159 SysTick_Config(SystemCoreClock/RHINO_CONFIG_TICKS_PER_SECOND);
160
161 soc_hw_timer_init();
162
163 aos_start();
164
165 return;
166 }
167