/* * Function : bsp_sc_init * Discription: c core nv init,this phase build upon the a core kernel init, * this phase after icc init,this phase ensure to use all nv api normal * start at this phase ,ops global ddr need spinlock * Parameter : none * Output : result * History : */ s32 bsp_sc_init(void) { u32 ret = 0; memset(&g_sc_stat,0,sizeof(sc_status_stru)); /* sem create */ osl_sem_init(0,&g_sc_stat.sc_api_sem); osl_sem_init(0,&g_sc_stat.sc_tsk_sem); /* task create */ #ifdef __OS_VXWORKS__ ret = (u32)osl_task_init("sc_ccore_task",128,4096,(OSL_TASK_FUNC)sc_icc_task,NULL,(void*)&g_sc_stat.sc_taskid); #elif defined(__OS_RTOSCK__) ret = (u32)osl_task_init("sc_ccore_task",57,4096,(OSL_TASK_FUNC)sc_icc_task,NULL,(void*)&g_sc_stat.sc_taskid); #endif if(ret) { sc_error_printf("init task failed!\n"); return BSP_ERR_SC_TASK_INIT_FAIL; } /* register icc event */ if(ICC_OK!=bsp_icc_event_register(SC_ICC_CHAN_ID, sc_icc_msg_proc,NULL,NULL,NULL)) { sc_error_printf("register icc channel failed!\n"); return BSP_ERR_SC_SEM_INIT_FAIL; } sc_printf("[SC]: init success.\n"); return SC_OK; }
void test_for_pmu_task(void) { unsigned int task_id = 0; osl_task_init("pmu_test", 16, 0x1000 ,(void *)test_for_pmuevent, NULL, &task_id); //if (!idle_time) //osl_task_init("pmu_test", 16, 0x1000 ,(void *)test_for_cpufreq_longtime, NULL, &task_id); }
/*核间互斥*/ int hi6451_volt_mutex_cores_test(void) { #ifdef __KERNEL__ int i = 0; u32 pmu_hi6451_test_pri[30] = {10,12,15,17,19,20,25,28,30,32,34,36,40,42,45,48,50,53,55,58,60,65,72,83,85,87,89,92,95,99}; u32 task_id[30] = {0}; u8 name[30][30] = {0}; for(i = 0;i < 30;i++) { sprintf((char*)name[i], "pmu_muticores_test_task%d", i); if(-1 == osl_task_init((char*)name[i], pmu_hi6451_test_pri[i], PMIC_HI6451_TEST_TASK_STACK_SIZE, (void *)hi6451_volt_disable_test, NULL, &task_id[i])) { bsp_trace(BSP_LOG_LEVEL_ERROR, BSP_MODU_PMU,"create test task %d error\n",i); return BSP_PMIC_HI6451_TEST_ERROR; } } #elif defined(__VXWORKS__) int i = 0; u32 pmu_hi6451_test_pri[30] = {10,12,15,17,19,20,25,28,30,32,34,36,40,42,45,48,50,53,55,58,60,65,72,83,85,87,89,92,95,99}; u32 task_id[30] = {0}; u8 name[30][30] = {0}; for(i = 0;i < 30;i++) { sprintf((char*)name[i], "pmu_muticores_test_task%d", i); if(-1 == osl_task_init((char*)name[i], pmu_hi6451_test_pri[i], PMIC_HI6451_TEST_TASK_STACK_SIZE, (void *)hi6451_volt_enable_test, NULL, &task_id[i])) { bsp_trace(BSP_LOG_LEVEL_ERROR, BSP_MODU_PMU,"create test task %d error\n",i); return BSP_PMIC_HI6451_TEST_ERROR; } } #endif pmic_print_info("hi6451_volt_mutex_cores_test ok!!\n",i); return 0; }
s32 bsp_om_server_init(void) { u32 ret = 0, taskid = 0; /* 初始化 BSP OM SOCP 源缓存buf*/ ret = bsp_om_buf_init(); if(BSP_OK != ret) { bsp_om_debug(BSP_LOG_LEVEL_ERROR, "&&&&&&&&bsp_om_buf_init error!!!ret = 0x%x\n",ret); return (s32)ret; } /* 初始化 BSP使用的SOCP源通道*/ ret = bsp_om_socp_chan_init(); if(BSP_OK !=ret ) { bsp_om_debug(BSP_LOG_LEVEL_ERROR, "bsp_om_server_init error!!!ret = 0x%x\n",ret); return (s32)ret; } /*初始化om模块全局信息*/ bsp_om_global_init(); /* 初始化log打印级别为default值*/ bsp_log_level_reset(); bsp_dump_init(); bsp_utrace_init(); #ifdef ENABLE_BUILD_SYSVIEW /* 初始化sysview全局数据*/ ret = sys_view_init(); if(BSP_OK != ret) { bsp_om_debug(BSP_LOG_LEVEL_ERROR, "&&&&&&&&&&&sys_view_init error!!!ret = 0x%x\n",ret); return (s32)ret; } #endif osl_task_init("tCcpuOmTask", 50, 0x2000, bsp_om_send_task, 0, &taskid); /*lint -save -e18*/ printf(" bsp om init ok\n"); /*lint -restore +e18*/ return BSP_OK; }
/*lint -save -e745*/ int socp_debug_init(void) { u32 channel_id = ICC_CHN_ACORE_CCORE_MIN <<16 | IFC_RECV_FUNC_SOCP_DEBUG; osl_sem_init(0, &g_stSocpDebugCtrl.task_sem); #if defined(__KERNEL__) if(NULL == proc_create("socpProc", 0660, NULL, &g_strSocpProc)) { return -1; } #endif (void)osl_task_init("socpProc",30, 1024, (OSL_TASK_FUNC)socp_debug_icc_task,NULL, &g_stSocpDebugCtrl.task_id); (void)bsp_icc_event_register(channel_id, (read_cb_func)socp_debug_icc_msg_callback,NULL,NULL,NULL); return 0; }
/* * Function : bsp_sc_kernel_init * Discription: c core nv init,this phase build upon the a core kernel init, * this phase after icc init,this phase ensure to use all nv api normal * start at this phase ,ops global ddr need spinlock * Parameter : none * Output : result * History : */ s32 bsp_sc_kernel_init(void) { s32 ret = SC_ERROR; osl_sem_init(0,&g_sc_stat.sc_tsk_sem); ret = osl_task_init("sc_acore_task",15,1024,sc_icc_task,NULL,(void*)&g_sc_stat.sc_taskid); if(ret) { sc_error_printf("init task failed!\n"); return BSP_ERR_SC_TASK_INIT_FAIL; } if(ICC_OK != bsp_icc_event_register(SC_ICC_CHAN_ID, sc_icc_msg_proc,NULL,NULL,NULL)) { sc_error_printf("register icc channel failed!\n"); return BSP_ERR_SC_SEM_INIT_FAIL ; } sc_printf("[SC]: init success.\n"); return SC_OK; }
static s32 icc_test_multi_send_wait_ack_init(u32 flag) { icc_print_debug("************entry"); #if defined(__KERNEL__) || defined(__VXWORKS__) osl_sem_init(ICC_SEM_EMPTY, &(g_icc_test.multi_send_confirm_sem)); /*lint !e40 */ if(ICC_ERR == osl_task_init("icc_wait", ICC_TEST_TASK_PRI+1, ICC_TASK_STK_SIZE, (task_entry)icc_test_wait, (void*)(flag), &g_icc_test.task_id)) { icc_print_error("create icc_wait task error\n"); return ICC_ERR; } #elif defined(__CMSIS_RTOS) g_icc_test.multi_send_confirm_sem = osl_sem_init(1, multi_send_confirm_sem); g_icc_test.task_id = osThreadCreate(osThread(icc_test_wait), (void*)flag); if(NULL == g_icc_test.task_id) { icc_print_error("create icc_wait task error\n"); return ICC_ERR; } #endif return ICC_OK; }
static s32 icc_test_multi_send_test_init(u32 sn, u32 channel_id, task_entry entry) { u32 channel_idx = GET_CHN_ID(channel_id); u32 sub_chn_idx = GET_FUNC_ID(channel_id); s32 *task_id = NULL; u8 name[30] = {0}; icc_print_debug("************entry"); g_icc_test.channels[channel_idx].sub_channels[sub_chn_idx].success_cnt = 0; icc_print_debug("i:0x%x, channel_id:0x%x", sn, channel_id); task_id = &(g_icc_test.channels[channel_idx].sub_channels[sub_chn_idx].task_id); sprintf((char*)name, "icc_mul%d", channel_id); #if defined(__KERNEL__) || defined(__VXWORKS__) if(ICC_ERR == osl_task_init((char *)name, ICC_TEST_TASK_PRI, ICC_TASK_STK_SIZE, (task_entry)entry, (void*)(channel_id), (u32 *)task_id)) { icc_print_error("create send test task error\n"); return ICC_ERR; } #elif defined(__CMSIS_RTOS) *task_id = osThreadCreate(osThread(icc_test_multi_send_func), (void*)channel_id); if(NULL == *task_id) { icc_print_error("create icc_wait task error\n"); return ICC_ERR; } #endif icc_print_debug("create send test task successfully\n"); return ICC_OK; }
/***************************************************************************** 函 数 名 : bsp_dual_modem_init 功能描述 : K3 modem uart相关初始化 输入参数 : void 输出参数 : -1:失败,0:成功 返 回 值 : int ****************************************************************************/ int bsp_dual_modem_drv_init(void) { int ret = ERROR; RECV_STR *recvStr = NULL; #ifdef LPM3_VIA_GPIO struct dual_modem_icc_msg_str dm_msg = {0}; #endif recvStr = &g_dual_modem_ctrl.uart_port.circ_buf; if(DUAl_MODEM_ENABLE == g_dual_modem_ctrl.nv_flag && DUAl_MODEM_DISABLE == g_dual_modem_ctrl.init_flag) { wake_lock(&g_dual_modem_ctrl.wakelock); memset_s((void*)&g_dual_modem_ctrl.uart_port.circ_buf, sizeof(g_dual_modem_ctrl.uart_port.circ_buf), 0, sizeof(g_dual_modem_ctrl.uart_port.circ_buf)); osl_sem_init(0, &g_dual_modem_ctrl.wait_reply_mutex); osl_sem_init(0, &g_dual_modem_ctrl.recv_mutex); osl_sem_mcreate(&g_dual_modem_ctrl.uart_port.send_mutex, OSL_SEM_Q_PRIORITY | OSL_SEM_DELETE_SAFE); spin_lock_init(&g_dual_modem_ctrl.lock); g_dual_modem_ctrl.uart_port.ops = &send_ops; if(OK != get_info_from_dts()) { dm_print_err("get dts err %d\n",ret); goto init_fail; } writel(0x8000000 | g_dual_modem_ctrl.ap_uart.bit_shift, g_dual_modem_ctrl.ap_uart.crg_addr + g_dual_modem_ctrl.ap_uart.clk_uarth_clkdiv); writel(g_dual_modem_ctrl.ap_uart.bit_shift, g_dual_modem_ctrl.ap_uart.crg_addr + g_dual_modem_ctrl.ap_uart.clk_uart_peren); dual_modem_uart_channel_init(&g_dual_modem_ctrl.uart_port); #ifdef CONFIG_CCORE_PM if(bsp_device_pm_add(&dual_modem_device)) { dm_print_err("device add err\n"); goto init_fail; } #endif if(OK != osl_task_init("utlrecv", DUAL_MODEM_TASK_PRO, DUAL_MODEM_TASK_STK, (OSL_TASK_FUNC)dual_modem_uart_recv_task, (UART_PORT *)&g_dual_modem_ctrl.uart_port, &recvStr->recv_task_id)) { dm_print_err("utlrecv task err\n"); goto init_fail; } ret = request_irq(g_dual_modem_ctrl.uart_port.irq_num, (irq_handler_t)dual_modem_uart_irq_handler, 0, "dual modem irq", &g_dual_modem_ctrl.uart_port); if(ret){ dm_print_err("request irq err\n"); goto init_fail; } #ifdef LPM3_VIA_GPIO dm_msg.dual_modem_init_flag = UART_INIT_ENABLE; dm_msg.icc_msgs_flag = LPm3_UART5_IQR_DISABLE; /* 通知lpm3 */ bsp_icc_send((u32)ICC_CPU_MCU,(ICC_CHN_MCORE_CCORE << 16)|MCORE_CCORE_FUNC_UART,(u8 *)&dm_msg,sizeof(dm_msg)); #else bsp_gpio_direction_input(g_dual_modem_ctrl.wakeup_gpio); bsp_gpio_irq_unmask(g_dual_modem_ctrl.wakeup_gpio); ret = bsp_gpio_request_irq(g_dual_modem_ctrl.wakeup_gpio, (irq_handler_t)wakeup_gpio_int, IRQ_TYPE_EDGE_FALLING, "cpcp gpio"); if(ret) { dm_print_err("gpio irq request err\n"); goto init_fail; } #endif g_dual_modem_ctrl.init_flag = DUAl_MODEM_ENABLE; wake_unlock(&g_dual_modem_ctrl.wakelock); } return OK; init_fail: bsp_gpio_irq_mask(g_dual_modem_ctrl.wakeup_gpio); wake_unlock(&g_dual_modem_ctrl.wakelock); return ERROR; }
/***************************************************************************** * 函 数 名 : cshell_sio_init * * 功能描述 : cshell tty设备初始化,初始化缓冲区 * * 输入参数 : void * 输出参数 : 无 * * 返 回 值 : 无 * * 修改记录 : *****************************************************************************/ static int cshell_sio_init(SHELL_IO_CHAN *ptr_shell) { if (!ptr_shell) { cshell_print_error("NULL PTR!\n"); return CSHELL_ERROR; } //ptr_shell->cshell_recv_sem = semBCreate(SEM_Q_FIFO, SEM_EMPTY); osl_sem_init(0, &(ptr_shell->cshell_recv_sem)); if(!ptr_shell->cshell_recv_sem) { cshell_print_error("fail to cshell_recv_sem!\n"); goto malloc_send_buf_fail; } /* 申请Shell数据发送缓冲区 */ if (NULL == (ptr_shell->ptr_send_buf = (u8*) cacheDmaMalloc(IO_BUFFER_MAX*2))) { cshell_print_error("send buf malloc fail!\n"); goto malloc_send_buf_fail; } if (NULL == (ptr_shell->ptr_recv_buf = (u8*) cacheDmaMalloc(IO_BUFFER_MAX))) { cshell_print_error("recv buf malloc fail!\n"); goto malloc_recv_buf_fail; } /* 初始化tty设备,挂接回调函数指针 */ if (shell_io_sio_drv_funcs.ioctl == NULL) { shell_io_sio_drv_funcs.ioctl = (int (*)())cshell_io_ioctl; shell_io_sio_drv_funcs.txStartup = (int (*)())cshell_io_startup; shell_io_sio_drv_funcs.callbackInstall = (int (*)())cshell_io_cb_install; shell_io_sio_drv_funcs.pollInput = (int (*)())cshell_io_rx_char; shell_io_sio_drv_funcs.pollOutput = (int (*)(SIO_CHAN *, char))cshell_io_tx_char; } ptr_shell->ptr_drv_funcs = &shell_io_sio_drv_funcs; if(CSHELL_OK != osl_task_init("tCShell", CSHELL_TASK_PRI, CSHELL_TASK_STACK_SIZE, (void *)cshell_io_send, NULL, (u32 *)&ptr_shell->shell_send_tid)) { cshell_print_error("create task fail!\n"); goto create_task_fail; } selWakeupListInit (&ptr_shell->sel_wakeup_list); ttyDevCreate ("/tyCo/3", (SIO_CHAN *)ptr_shell, TTY_BUFFER_MAX, TTY_BUFFER_MAX); /*lint !e740 */ return OK; create_task_fail: cshell_safe_free(ptr_shell->ptr_recv_buf); malloc_recv_buf_fail: cshell_safe_free(ptr_shell->ptr_send_buf); malloc_send_buf_fail: cshell_io_uninit(ptr_shell); return CSHELL_ERROR; }
s32 bsp_icc_test_init(void) { u32 i = 0; s32 ret = ICC_OK; if(ICC_TEST_CASE_INITILIZED == g_icc_test.state) { icc_print_error("icc_test has intilized\n"); return ICC_OK; } memset(&g_icc_test, 0, sizeof(g_icc_test)); /*lint !e665 */ icc_print_debug("icc_test initilizing\n"); for(i = 0; i < ICC_VALIDE_CHN_NUM; i++) { ret = icc_test_channel_reinit(g_icc_init_info[i].real_channel_id, ICC_TEST_CHANNEL_SIZE); if(ICC_OK != ret) { icc_print_error("icc_test_channel_reinit error\n"); return ICC_ERR; } ret = icc_test_sub_chn_init(g_icc_init_info[i].real_channel_id, ICC_TEST_CHANNEL_SIZE/2, ICC_TEST_CHANNEL_START); if(ICC_OK != ret) { icc_print_error("icc_test_sub_chn_init error\n"); return ICC_ERR; } } #ifdef ICC_HAS_DEBUG_FEATURE /* 测试打开打印开关 */ icc_dbg_print_sw(0); #endif ret = icc_test_channel_reinit(ICC_CHN_CSHELL, SUPPORT_ICC_READ_IN_OTHER_TASK); if(ICC_OK != ret) { icc_print_error("cshell_channel_reinit error\n"); return ICC_ERR; } ret = icc_test_sub_chn_init(ICC_CHN_CSHELL, SUPPORT_ICC_READ_IN_OTHER_TASK, 0); if(ICC_OK != ret) { icc_print_error("cshell_test_sub_chn_init error\n"); return ICC_ERR; } bsp_icc_event_unregister(ICC_CHN_CSHELL << 16 | 0); bsp_icc_event_unregister(ICC_CHN_CSHELL << 16 | 1); bsp_icc_event_unregister(ICC_CHN_CSHELL << 16 | 2); bsp_icc_event_register(ICC_CHN_CSHELL << 16 | 0, (read_cb_func)icc_send_test_cb0_new, NULL, NULL, NULL); bsp_icc_event_register(ICC_CHN_CSHELL << 16 | 1, (read_cb_func)icc_send_test_cb1_new, NULL, NULL, NULL); bsp_icc_event_register(ICC_CHN_CSHELL << 16 | 2, (read_cb_func)icc_send_test_cb2_new, NULL, NULL, NULL); osl_sem_init(ICC_SEM_EMPTY, &g_icc_test.recv_task_sem); /*lint !e40 */ g_icc_test.recv_task_flag = 1; if(ICC_ERR == osl_task_init("icc_read_test", ICC_TEST_TASK_PRI+1, ICC_TASK_STK_SIZE, (task_entry)icc_read_task_entry, (void *)(ICC_CHN_CSHELL << 16 | 2), (u32 *)&g_icc_test.recv_task_id)) { icc_print_error("create icc_read_test task error\n"); return ICC_ERR; } icc_debug_init(bsp_icc_channel_size_get()); /* 状态最后更新 */ g_icc_test.state = ICC_TEST_CASE_INITILIZED; return ICC_OK; }