コード例 #1
0
static int amutt_backoff(int level)
{
    int ret;
    if (level == 0) 
    {
        // no throttle
        ret = exec_ccci_kern_func_by_md_id(MD_SYS1, ID_THROTTLING_CFG, (char*) &amutt_param[level], 4);
        mtk_cooler_amutt_dprintk_always("[%s] unlimit\n", __func__);
        
    }
    else if (level >= 1 && level <= COOLER_STEPS-1)
    {
        ret = exec_ccci_kern_func_by_md_id(MD_SYS1, ID_THROTTLING_CFG, (char*) &amutt_param[level], 4);
        mtk_cooler_amutt_dprintk_always("[%s] limit %x\n", __func__, amutt_param[level]);
    }
    else
    {
        // error...
        ret = -1;
        mtk_cooler_amutt_dprintk_always("[%s] ouf of range\n", __func__);
    }

    return ret;
        
}
コード例 #2
0
static void mtkts_crystal_notify(int time)
{
	unsigned int retbuf;
	retbuf = time;		 // short duration
	exec_ccci_kern_func_by_md_id(0, ID_SEND_TSX_TEMP, (char *)&retbuf, sizeof(retbuf)); 	
	mtktscpu_dprintk("notify to modem duration =%d ms",time);
}
コード例 #3
0
void md_fast_dormancy(int md_id)
{
	#if defined (FEATURE_MD_FAST_DORMANCY)
	#ifdef CONFIG_MTK_FD_SUPPORT	
	exec_ccci_kern_func_by_md_id(md_id, ID_CCCI_DORMANCY, NULL, 0);
	#endif
	#endif
}
コード例 #4
0
ファイル: mt_spm_dpidle3.c プロジェクト: Klozz/P8000-Kernel
static wake_reason_t spm_output_wake_reason(struct wake_status *wakesta, struct pcm_desc *pcmdesc)
{
    wake_reason_t wr;

    wr = __spm_output_wake_reason(wakesta, pcmdesc, false);

    if (wakesta->r12 & WAKE_SRC_CLDMA_MD)
        exec_ccci_kern_func_by_md_id(0, ID_GET_MD_WAKEUP_SRC, NULL, 0);

    return wr;
}
コード例 #5
0
ファイル: mtk_ts_pa_thput.c プロジェクト: Lesozav25/ZOPO-TSN
static int send_get_md_all_msg(void)
{
	char mode[1];
	if(!(is_meta_mode() | is_advanced_meta_mode())){
	mode[0] = MTK_THERMAL_GET_TX_POWER;
#ifdef  MTK_ENABLE_MD1
	exec_ccci_kern_func_by_md_id(0, ID_GET_TXPOWER, mode, 0);
#endif
#ifdef	MTK_ENABLE_MD2
	exec_ccci_kern_func_by_md_id(1, ID_GET_TXPOWER, mode, 0);
#endif
	}
	mode[0] = MTK_THERMAL_GET_RF_TEMP_2G;
#ifdef	MTK_ENABLE_MD1
	exec_ccci_kern_func_by_md_id(0, ID_GET_TXPOWER, mode, 0);
#endif
#ifdef  MTK_ENABLE_MD2
	exec_ccci_kern_func_by_md_id(1, ID_GET_TXPOWER, mode, 0);
#endif	
	mode[0] = MTK_THERMAL_GET_RF_TEMP_3G;
#ifdef	MTK_ENABLE_MD1
	exec_ccci_kern_func_by_md_id(0, ID_GET_TXPOWER, mode, 0);
#endif
#ifdef	MTK_ENABLE_MD2
	exec_ccci_kern_func_by_md_id(1, ID_GET_TXPOWER, mode, 0);
#endif	
	return 0;
}
コード例 #6
0
static wake_reason_t spm_output_wake_reason(struct wake_status *wakesta, struct pcm_desc *pcmdesc)
{
	wake_reason_t wr;

	wr = __spm_output_wake_reason(wakesta, pcmdesc, true);

#if 1
    memcpy(&suspend_info[log_wakesta_cnt], wakesta, sizeof(struct wake_status));
    suspend_info[log_wakesta_cnt].log_index = log_wakesta_index;

    log_wakesta_cnt++;
    log_wakesta_index++;

    if (10 <= log_wakesta_cnt)
    {
        log_wakesta_cnt = 0;
        spm_snapshot_golden_setting = 0;
    }
#if 0
    else
    {
        if (2 != spm_snapshot_golden_setting)
        {
            if ((0x90100000 == wakesta->event_reg) && (0x140001f == wakesta->debug_flag))
                spm_snapshot_golden_setting = 1;
        }
    }
#endif
    
    
    if (0xFFFFFFF0 <= log_wakesta_index)
        log_wakesta_index = 0;
#endif

    spm_crit2("big core = %d, suspend dormant state = %d, chip = %d\n", SPM_CTRL_BIG_CPU, spm_dormant_sta, mt_get_chip_sw_ver());
    if (0 != spm_ap_mdsrc_req_cnt)
        spm_crit2("warning: spm_ap_mdsrc_req_cnt = %d, r7[ap_mdsrc_req] = 0x%x\n", spm_ap_mdsrc_req_cnt, spm_read(SPM_POWER_ON_VAL1) & (1<<17));

    if (wakesta->r12 & WAKE_SRC_EINT)
        mt_eint_print_status();

    if (wakesta->r12 & WAKE_SRC_CLDMA_MD)
        exec_ccci_kern_func_by_md_id(0, ID_GET_MD_WAKEUP_SRC, NULL, 0);

	return wr;
}
コード例 #7
0
int eemcs_helper_pm_restore_noirq(struct device *device)
{
    pr_debug("calling %s()\n", __func__);
/*Not ready, need to check more details*/
#if 0
    // CCIF AP0
    mt_irq_set_sens(CCIF0_AP_IRQ_ID, MT_LEVEL_SENSITIVE);
    mt_irq_set_polarity(CCIF0_AP_IRQ_ID, MT_POLARITY_LOW);

    // MD1 WDT
    mt_irq_set_sens(MD_WDT_IRQ_ID, MT_EDGE_SENSITIVE);
    mt_irq_set_polarity(MD_WDT_IRQ_ID, MT_POLARITY_LOW);

    // MD1
    exec_ccci_kern_func_by_md_id(0, ID_IPO_H_RESTORE_CB, NULL, 0);
#endif
    return 0;

}
コード例 #8
0
static int send_get_md_all_msg(void)
{

	char mode[1];

	if (!(is_meta_mode() | is_advanced_meta_mode())) {
		mode[0] = MTK_THERMAL_GET_TX_POWER;
/* #ifdef CONFIG_MTK_ENABLE_MD1 */
		if (get_modem_is_enabled(0))
			exec_ccci_kern_func_by_md_id(0, ID_GET_TXPOWER, mode, 0);
/* #endif */
/* #ifdef CONFIG_MTK_ENABLE_MD2 */
		if (get_modem_is_enabled(1))
			exec_ccci_kern_func_by_md_id(1, ID_GET_TXPOWER, mode, 0);
/* #endif */
	}
	mode[0] = MTK_THERMAL_GET_RF_TEMP_2G;
/* #ifdef CONFIG_MTK_ENABLE_MD1 */
	if (get_modem_is_enabled(0))
		exec_ccci_kern_func_by_md_id(0, ID_GET_TXPOWER, mode, 0);
/* #endif */
/* #ifdef CONFIG_MTK_ENABLE_MD2 */
	if (get_modem_is_enabled(1))
		exec_ccci_kern_func_by_md_id(1, ID_GET_TXPOWER, mode, 0);
/* #endif */
	mode[0] = MTK_THERMAL_GET_RF_TEMP_3G;
/* #ifdef CONFIG_MTK_ENABLE_MD1 */
	if (get_modem_is_enabled(0))
		exec_ccci_kern_func_by_md_id(0, ID_GET_TXPOWER, mode, 0);
/* #endif */
/* #ifdef CONFIG_MTK_ENABLE_MD2 */
	if (get_modem_is_enabled(1))
		exec_ccci_kern_func_by_md_id(1, ID_GET_TXPOWER, mode, 0);
/* #endif */

	return 0;
}
コード例 #9
0
void md_fast_dormancy(int md_id)
{
	#ifdef MTK_FD_SUPPORT	
	exec_ccci_kern_func_by_md_id(md_id, ID_CCCI_DORMANCY, NULL, 0);
	#endif
}
コード例 #10
0
ファイル: mt_spm_sleep.c プロジェクト: GZDooM/dexp_es2
static wake_reason_t spm_output_wake_reason(const wake_status_t *wakesta, bool dpidle)
{
    char str[200] = { 0 };
    wake_reason_t wr = WR_NONE;

    if (wakesta->debug_reg != 0) {
        spm_error2("PCM ASSERT AND PC = %u (0x%x)(0x%x)\n",
                   wakesta->debug_reg, wakesta->r13, wakesta->event_reg);
        return WR_PCM_ASSERT;
    }

    if (dpidle) {   /* bypass wakeup event check */
        spm_info("[DP] r12 = 0x%x, r13 = 0x%x, r7 = 0x%x (0x%x)\n",
                 wakesta->r12, wakesta->r13, spm_read(SPM_PCM_REG7_DATA), spm_read(SPM_POWER_ON_VAL1));
        return WR_WAKE_SRC;
    }

    if (wakesta->r12 & (1U << 0)) {
        if (!(wakesta->isr & ISR_TWAM) && !wakesta->cpu_wake) {
            strcat(str, "PCM_TIMER ");
            wr = WR_PCM_TIMER;
        } else {
            if (wakesta->isr & ISR_TWAM) {
                strcat(str, "TWAM ");
                wr = WR_WAKE_SRC;
            }
            if (wakesta->cpu_wake) {
                strcat(str, "CPU ");
                wr = WR_WAKE_SRC;
            }
        }
    }
    if (wakesta->r12 & WAKE_SRC_TS) {
        strcat(str, "TS ");
        wr = WR_WAKE_SRC;
    }
    if (wakesta->r12 & WAKE_SRC_KP) {
        strcat(str, "KP ");
        wr = WR_WAKE_SRC;
    }
    if (wakesta->r12 & WAKE_SRC_WDT) {
        strcat(str, "WDT ");
        wr = WR_WAKE_SRC;
    }
    if (wakesta->r12 & WAKE_SRC_GPT) {
        strcat(str, "GPT ");
        wr = WR_WAKE_SRC;
    }
    if (wakesta->r12 & WAKE_SRC_EINT) {
        strcat(str, "EINT ");
        wr = WR_WAKE_SRC;
    }
    if (wakesta->r12 & WAKE_SRC_CONN_WDT) {
        strcat(str, "CONN_WDT ");
        wr = WR_WAKE_SRC;
    }
    if (wakesta->r12 & WAKE_SRC_CCIF_MD) {
        strcat(str, "CCIF_MD ");
        wr = WR_WAKE_SRC;
    }
    if (wakesta->r12 & WAKE_SRC_LOW_BAT) {
        strcat(str, "LOW_BAT ");
        wr = WR_WAKE_SRC;
    }
    if (wakesta->r12 & WAKE_SRC_CONN) {
        strcat(str, "CONN ");
        wr = WR_WAKE_SRC;
    }
    if (wakesta->r12 & (1U << 13)) {
        strcat(str, "PCM_WDT ");
        wr = WR_PCM_WDT;
    }
    if (wakesta->r12 & WAKE_SRC_USB_CD) {
        strcat(str, "USB_CD ");
        wr = WR_WAKE_SRC;
    }
    if (wakesta->r12 & WAKE_SRC_USB_PDN) {
        strcat(str, "USB_PDN ");
        wr = WR_WAKE_SRC;
    }
    if (wakesta->r12 & WAKE_SRC_DBGSYS) {
        strcat(str, "DBGSYS ");
        wr = WR_WAKE_SRC;
    }
    if (wakesta->r12 & WAKE_SRC_UART0) {
        strcat(str, "UART0 ");
        wr = WR_WAKE_SRC;
    }
    if (wakesta->r12 & WAKE_SRC_AFE) {
        strcat(str, "AFE ");
        wr = WR_WAKE_SRC;
    }
    if (wakesta->r12 & WAKE_SRC_THERM) {
        strcat(str, "THERM ");
        wr = WR_WAKE_SRC;
    }
    if (wakesta->r12 & WAKE_SRC_CIRQ) {
        strcat(str, "CIRQ ");
        wr = WR_WAKE_SRC;
    }
    if (wakesta->r12 & WAKE_SRC_SYSPWREQ) {
        strcat(str, "SYSPWREQ ");
        wr = WR_WAKE_SRC;
    }
    if (wakesta->r12 & WAKE_SRC_MD_WDT) {
        strcat(str, "MD_WDT ");
        wr = WR_WAKE_SRC;
    }
    if (wakesta->r12 & WAKE_SRC_CPU0_IRQ) {
        strcat(str, "CPU0_IRQ ");
        wr = WR_WAKE_SRC;
    }
    if (wakesta->r12 & WAKE_SRC_CPU1_IRQ) {
        strcat(str, "CPU1_IRQ ");
        wr = WR_WAKE_SRC;
    }
    if (wakesta->r12 & WAKE_SRC_CPU2_IRQ) {
        strcat(str, "CPU2_IRQ ");
        wr = WR_WAKE_SRC;
    }
    if (wakesta->r12 & WAKE_SRC_CPU3_IRQ) {
        strcat(str, "CPU3_IRQ ");
        wr = WR_WAKE_SRC;
    }
    if (wr == WR_NONE) {
        strcat(str, "UNKNOWN ");
        wr = WR_UNKNOWN;
    }

    spm_crit2("wake up by %s(0x%x)(0x%x)(%u)\n",
              str, wakesta->r12, wakesta->raw_sta, wakesta->timer_out);
    spm_crit2("event_reg = 0x%x, isr = 0x%x, r13 = 0x%x\n",
              wakesta->event_reg, wakesta->isr, wakesta->r13);

    if (wakesta->r12 & WAKE_SRC_EINT)
        mt_eint_print_status();
    if (wakesta->r12 & WAKE_SRC_CCIF_MD)
        exec_ccci_kern_func_by_md_id(0, ID_GET_MD_WAKEUP_SRC, NULL, 0);

    return wr;
}
コード例 #11
0
ファイル: emd_ctl_chr.c プロジェクト: SelfImp/m75
static long emd_dev_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
    int ret = 0;
    unsigned int sim_mode=0, boot_mode=0;
    int value;
    emd_dev_client_t *client=(emd_dev_client_t *)file->private_data;
    switch (cmd) {
    case CCCI_IOC_GET_MD_STATE:
        EMD_MSG_INF("chr", "Get md state ioctl called by %s\n", current->comm);
        if(arg!=0)
        {
            value = get_curr_emd_state();
            value+='0'; // Make number to charactor
            ret = put_user((unsigned int)value, (unsigned int __user *)arg);
        }else{
            EMD_MSG_INF("chr", "Get md state ioctl: arg is null\n");
        }
        break;
    case CCCI_IOC_DO_START_MD:
        EMD_MSG_INF("chr", "Start md ioctl called by %s\n", current->comm);
        if(copy_from_user(&boot_mode, (void __user *)arg, sizeof(unsigned int))) {
            EMD_MSG_INF("chr", "CCCI_IOC_DO_START_MD: copy_from_user fail!\n");
            ret = -EFAULT;
        } else {
            ret = emd_power_on(boot_mode);
            EMD_MSG_INF("chr", "CCCI_IOC_DO_START_MD,%d\n",boot_mode);
        }
        break;
    case CCCI_IOC_ENTER_MD_DL_MODE:        
        EMD_MSG_INF("chr", "Enter md download md ioctl called by %s\n", current->comm);
        ret = enter_md_download_mode();
        break;
    case CCCI_IOC_MD_RESET:
        EMD_MSG_INF("chr", "Reset on md ioctl called by %s\n", current->comm);
        ret = emd_request_reset();
        break;
    
    case CCCI_IOC_POWER_ON_MD:
        EMD_MSG_INF("chr", "Power on md ioctl called by %s\n", current->comm);
        if(copy_from_user(&boot_mode, (void __user *)arg, sizeof(unsigned int))) {
            EMD_MSG_INF("chr", "CCCI_IOC_POWER_ON_MD: copy_from_user fail!\n");
            ret = -EFAULT;
        } else {
            ret = emd_power_on(boot_mode);
            EMD_MSG_INF("chr", "CCCI_IOC_POWER_ON_MD(%x): %d\n", boot_mode, ret);  
        }
        break;
    case CCCI_IOC_ENTER_DEEP_FLIGHT:
        EMD_MSG_INF("chr", "Enter MD flight mode ioctl called by %s\n", current->comm);
        ret = emd_send_enter_flight_mode();
        break;

    case CCCI_IOC_LEAVE_DEEP_FLIGHT:
        EMD_MSG_INF("chr","Leave MD flight mode ioctl called by %s\n", current->comm);
        ret = emd_send_leave_flight_mode();
        break;
    case CCCI_IOC_GET_MD_ASSERTLOG:
        emd_aseert_log_wait_timeout=0;
        EMD_MSG_INF("chr","CCCI_IOC_GET_MD_ASSERTLOG ioctl called by %s, sub_dev=%d\n", current->comm,client->sub_dev_id);
        if(wait_event_interruptible(emd_aseert_log_wait, emd_aseert_log_wait_timeout) == -ERESTARTSYS)
            ret = -EINTR;
        else {
            EMD_MSG_INF("chr","sub_dev=%d call CCCI_IOC_GET_MD_ASSERTLOG is exit\n", client->sub_dev_id);
            emd_aseert_log_wait_timeout = 0;
        }
        break;
    case CCCI_IOC_GET_MD_ASSERTLOG_STATUS:
        EMD_MSG_INF("chr","CCCI_IOC_GET_MD_ASSERTLOG_STATUS ioctl called by %s, sub_dev=%d\n", current->comm,client->sub_dev_id);
        value = cm_get_assertlog_status();
        if (copy_to_user((int *)arg, &value, sizeof(int)))
        {                 
          return -EACCES;
        }           
        EMD_MSG_INF("chr", "CCCI_IOC_GET_MD_ASSERTLOG_STATUS %d\n", value);
        break;
        
    case CCCI_IOC_SIM_SWITCH:
        if(copy_from_user(&sim_mode, (void __user *)arg, sizeof(unsigned int))) {
            EMD_MSG_INF("chr", "IOC_SIM_SWITCH: copy_from_user fail!\n");
            ret = -EFAULT;
        } else {
            ret = switch_sim_mode(0,(char*)&sim_mode,sizeof(unsigned int));//switch_sim_mode(sim_mode);
            EMD_MSG_INF("chr", "IOC_SIM_SWITCH(%x): %d\n", sim_mode, ret);
        }
        break;        
    case CCCI_IOC_SIM_SWITCH_TYPE:
        value = get_sim_switch_type();
        ret = put_user(value, (unsigned int __user *)arg);
        break;
    case CCCI_IOC_STORE_SIM_MODE:
        EMD_MSG_INF("chr","store sim mode ioctl called by %s!\n",  current->comm);
        if(copy_from_user(&sim_mode, (void __user *)arg, sizeof(unsigned int))) {
            EMD_MSG_INF("chr","store sim mode fail: copy_from_user fail!\n");
            ret = -EFAULT;
        }
        else 
        {
            EMD_MSG_INF("chr","storing sim mode(%d) in kernel space!\n", sim_mode);
            exec_ccci_kern_func_by_md_id(0, ID_STORE_SIM_SWITCH_MODE, (char *)&sim_mode, sizeof(unsigned int));
        }
        break;
    
    case CCCI_IOC_GET_SIM_MODE:
        EMD_MSG_INF("chr", "get sim mode ioctl called by %s\n", current->comm);
        exec_ccci_kern_func_by_md_id(0, ID_GET_SIM_SWITCH_MODE, (char *)&sim_mode, sizeof(unsigned int));
        ret = put_user(sim_mode, (unsigned int __user *)arg);
        break;

	case CCCI_IOC_IGNORE_MD_EXCP:
        EMD_MSG_INF("chr", "ignore md excp ioctl called by %s\n", current->comm);
        cm_disable_ext_md_wdt_irq();
	    cm_disable_ext_md_wakeup_irq();
    	cm_disable_ext_md_exp_irq();
        break;

    default:
        ret = -EMD_ERR_UN_DEF_CMD;
        EMD_MSG_INF("chr","undefined ioctl called by %s\n", current->comm);
        break;
    }

    return ret;
}