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