예제 #1
0
/*
* 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;
}
예제 #7
0
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;
}
예제 #8
0
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;
}
예제 #10
0
/*****************************************************************************
* 函 数 名     :  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;
}
예제 #11
0
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;
}