void ccci_lb_it_buff_rx_lb(CCCI_BUFF_T *bufp)
{  

#ifdef __CCCI_DUSER_UL_PERF__
    ul_prof_id++;
    if(ul_prof_id >= CCCI_PERF_REC_CNT_1) ul_prof_id = 0;
#endif

    bufp->channel = bufp->channel-1;

#ifdef __CCCI_DUSER_DL_PERF__
    CCCI_PERF_GET_CYCLE(dl_prof[dl_prof_id].duser_ccci_write_s);
    ccci_write(bufp->channel, bufp);
    CCCI_PERF_GET_CYCLE(dl_prof[dl_prof_id].duser_ccci_write_e);

    dl_prof[dl_prof_id].duser_ccci_write_t = CCCI_PERF_GET_DURATION(dl_prof[dl_prof_id].duser_ccci_write_s,dl_prof[dl_prof_id].duser_ccci_write_e);
    dl_prof[dl_prof_id].duser_sdioc_submit_ior_t = CCCI_PERF_GET_DURATION(dl_prof[dl_prof_id].sdioc_submit_ior_s,dl_prof[dl_prof_id].sdioc_submit_ior_e);

    dl_prof_id++;
    if(dl_prof_id >= CCCI_PERF_REC_CNT_1) dl_prof_id = 0;
#else
    ccci_write(bufp->channel, bufp);
#endif

    return;
}
Пример #2
0
int ccci_send_run_time_data(void)
{
	int ret=0;
	CCCI_BUFF_T buff;

	/* Set runtime data and echo start-boot command */
	CCCI_MSG_INF("ctl", "set modem runtime\n");
	ret = set_md_runtime();
	if (ret != 0) {
		CCCI_MSG_INF("ctl", "fail to set MODEM runtime data\n");
		return ret;
	}

	//printk("echo MD_INIT_START_BOOT\n");
	CCCI_INIT_MAILBOX(&buff, MD_INIT_START_BOOT);
	buff.reserved = MD_INIT_CHK_ID;
	ccci_before_modem_start_boot();
	ret = ccci_write(CCCI_CONTROL_TX, &buff);
	if (ret != 0) {
		CCCI_MSG_INF("ctl", "fail to write CCCI_CONTROL_TX\n");
		return ret;
	}
	CCCI_MSG_INF("ctl", "wait for NORMAL_BOOT_ID\n");
	//if (end)   end();
	//Notes:after load dsp_rom, dsp will write data back to dsp region, so set protect region at last
	//start_emi_mpu_protect();
	enable_emi_mpu_protection(ccci_smem_phy, ccci_smem_size);
	//mod_timer(&md_boot_up_check_timer, jiffies+5*HZ);
	mod_timer(&md_boot_up_check_timer, jiffies+10*HZ);
	return ret;
}
Пример #3
0
static int boot_md(void)
{
    int ret=0;
    //struct image_info *pImg_info=NULL;
	
    if (md_boot_stage != MD_BOOT_STAGE_0)
    {
	CCCI_MSG_INF("ctl", "MD has boot up!\n");
	return 0;
    }
   
    CCCI_MSG("booting up MODEM: start to load firmware...\n");

    if(is_first_boot) {
        //if((ret = ccci_load_firmware(pImg_info)) <0) {
        if((ret = ccci_load_firmware(LOAD_MD_DSP)) <0) {
	    CCCI_MSG_INF("ctl", "load firmware fail, so modem boot fail!\n");
	    return ret;
        }
        else {
	    //when load firmware successfully, no need to load it again when reset modem
	    is_first_boot = 0;
	    CCCI_MSG_INF("ctl", "load firmware successful!\n");
        }
    }
    else {
	CCCI_MSG_INF("ctl", "modem&dsp firmware already exist, not load again!\n");
    }

    ret = ccci_register(CCCI_CONTROL_TX, NULL, NULL);
    if (ret != 0 && ret != CCCI_IN_USE) {
        CCCI_MSG_INF("ctl", "fail to register CCCI_CONTROL_TX\n");
        return ret;
    }
	
    ret = ccci_register(CCCI_CONTROL_RX, ccci_md_ctrl_cb, NULL);
    if (ret != 0 && ret != CCCI_IN_USE) {
        CCCI_MSG_INF("ctl", "fail to register CCCI_CONTROL_RX\n");
        ccci_unregister(CCCI_CONTROL_TX);
        return ret;
    }

    ret = ccci_register(CCCI_SYSTEM_TX, NULL, NULL);
    if (ret != 0 && ret != CCCI_IN_USE) {
        CCCI_MSG_INF("ctl", "fail to register CCCI_SYSTEM_TX\n");
    }

    /* step 1: ungate modem */
    ungate_md();

    /* step 2: get start-boot command from control channel */
    CCCI_MSG_INF("ctl", "wait MD_INIT_START_BOOT\n");

    #if 0
    time_out = jiffies + 6*HZ;
    do {
        if (md_boot_stage == MD_BOOT_STAGE_1) {
            CCCI_MSG_INF("ctl", "received MD_INIT_START_BOOT\n");
            break;
        }
	yield();
	if(time_after(jiffies, time_out)){
            CCCI_MSG_INF("ctl", "wait MD_INIT_START_BOOT time out, try to reboot MD again\n");
            CCCI_INIT_MAILBOX(&sys_msg, CCCI_MD_MSG_RESET_RETRY);
            ccci_system_message(&sys_msg);
            return ret;
        }
    } while (1);

    /* step 3: set runtime data and echo start-boot command */
    CCCI_MSG_INF("ctl", "set modem runtime\n");
    ret = set_md_runtime();
    if (ret != 0) {
        CCCI_MSG("fail to set MODEM runtime data\n");
        return ret;
    }
	
    //printk("echo MD_INIT_START_BOOT\n");
    CCCI_BUFF_T buff;
    CCCI_INIT_MAILBOX(&buff, MD_INIT_START_BOOT);
    buff.reserved = MD_INIT_CHK_ID;
    ccci_before_modem_start_boot();
    ret = ccci_write(CCCI_CONTROL_TX, &buff);
    if (ret != 0) {
        CCCI_MSG("fail to write CCCI_CONTROL_TX\n");
        return ret;
    }
    CCCI_MSG_INF("ctl", "wait for NORMAL_BOOT_ID\n");
    //if (end)   end();
    //Notes:after load dsp_rom, dsp will write data back to dsp region, so set protect region at last
    start_emi_mpu_protect();
    #endif

    return ret;
}
Пример #4
0
void ccci_md_ctrl_cb(CCCI_BUFF_T *buff, void *private_data)
{
	int ret;
	CCCI_BUFF_T sys_msg;

	if (CCCI_MAILBOX_ID(buff) == MD_INIT_START_BOOT &&
		buff->reserved == MD_INIT_CHK_ID && md_boot_stage == MD_BOOT_STAGE_0) 
	{
		del_timer(&md_boot_up_check_timer);
		CCCI_MSG_INF("ctl", "receive MD_INIT_START_BOOT\n");
		md_boot_stage = MD_BOOT_STAGE_1;

		//power on Audsys for DSP boot up
		AudSys_Power_On(TRUE);
		
		CCCI_INIT_MAILBOX(&sys_msg, CCCI_MD_MSG_BOOT_UP);
		ccci_system_message(&sys_msg);
	}
	else if (CCCI_MAILBOX_ID(buff) == NORMAL_BOOT_ID &&
	               md_boot_stage == MD_BOOT_STAGE_1) 
	{
		del_timer(&md_boot_up_check_timer);
		CCCI_MSG_INF("ctl", "receive NORMAL_BOOT_ID\n");
		ccci_after_modem_finish_boot();
		md_boot_stage = MD_BOOT_STAGE_2;
		//if (is_first_boot) 
		//	is_first_boot = 0;
		wakeup_md_is_safe = 1;
		md_call_chain(&md_notifier,CCCI_MD_BOOTUP);
		CCCI_INIT_MAILBOX(&sys_msg, CCCI_MD_MSG_BOOT_READY);
		ccci_system_message(&sys_msg);
		
		//power off Audsys after DSP boot up ready
		AudSys_Power_On(FALSE);

	}
	else if (CCCI_MAILBOX_ID(buff) == MD_EX) 
	{
		del_timer(&md_boot_up_check_timer);
		if (unlikely(buff->reserved != MD_EX_CHK_ID)) 
			CCCI_MSG_INF("ctl", "receive invalid MD_EX\n");
		else 
		{
			md_boot_stage = MD_BOOT_STAGE_EXCEPTION;
			md_ex_flag = 1;
			
			atomic_set(&md_ex, 1);
			mod_timer(&md_ex_monitor,jiffies+5*HZ);
		   	CCCI_MSG_INF("ctl", "receive MD_EX\n");
			ret = ccci_write(CCCI_CONTROL_TX, buff);
			if (ret != 0)
			{ 
				CCCI_MSG_INF("ctl", "fail to write CCCI_CONTROL_TX\n");
			}
			md_call_chain(&md_notifier,CCCI_MD_EXCEPTION);
			CCCI_INIT_MAILBOX(&sys_msg, CCCI_MD_MSG_EXCEPTION);
			ccci_system_message(&sys_msg);
		}
	}
	else if (CCCI_MAILBOX_ID(buff) == MD_EX_REC_OK) 
	{
		if (unlikely(buff->reserved != MD_EX_REC_OK_CHK_ID)) 
			CCCI_MSG_INF("ctl", "receive invalid MD_EX_REC_OK\n");
		else 
		{
			atomic_set(&md_ex_ok, 1);
			mod_timer(&md_ex_monitor,jiffies);		
		}
	} 
	else if (CCCI_MAILBOX_ID(buff) == MD_INIT_START_BOOT &&
		buff->reserved == MD_INIT_CHK_ID && !is_first_boot) 
	{
		/* reset state and notify the user process md_init */
		md_boot_stage = MD_BOOT_STAGE_0;
		CCCI_MSG_INF("ctl", "MD second bootup detected!\n");
		CCCI_INIT_MAILBOX(&sys_msg, CCCI_MD_MSG_RESET);
		ccci_system_message(&sys_msg);
	}
	else if (CCCI_MAILBOX_ID(buff) == MD_EX_RESUME_CHK_ID) 
	{
		md_emi_check(buff);
	}
	else if (CCCI_MAILBOX_ID(buff) == CCCI_DRV_VER_ERROR)
	{
		CCCI_MSG_INF("ctl", "AP CCCI driver version mis-match to MD!!\n");
	}
	else 
	{
		CCCI_MSG_INF("ctl", "receive unknow data from CCCI_CONTROL_RX = %d\n", CCCI_MAILBOX_ID(buff));
	}
}