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; }
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; }
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; }
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)); } }