void ipcs_intr_workqueue_process(struct work_struct *work) { static int first = 1; if (first) { first = 0; set_user_nice(current, -16); } if(IpcCPCrashCheck()) { cp_crashed = 1; //patch-s from Broadcom for csp#529767 reason:FALSE file=ripisr_cp.c line=342 code=-1/0xffffffff tastk=RIP_H TS=48744870/FN=4873 //reviewed by yuan /* Dumping Camera registers. MobC00180667 */ { int i = 0; unsigned int camera_addr_base = 0x08440000; // Receiver Status reg set printk("\n Dumping Camera registers\n"); for(i = 0; i < 8; i ++) { printk("Addr: 0x%x Value: 0x%x\n", camera_addr_base, readl(io_p2v(camera_addr_base))); camera_addr_base += 4; } camera_addr_base = 0x08440080; // Debug register set for(i = 0; i < 9; i ++) { printk("Addr: 0x%x Value: 0x%x\n", camera_addr_base, readl(io_p2v(camera_addr_base))); camera_addr_base += 4; } camera_addr_base = 0x08440100; // Channel information set for(i = 0; i < 12; i ++) { printk("Addr: 0x%x Value: 0x%x\n", camera_addr_base, readl(io_p2v(camera_addr_base))); camera_addr_base += 4; } camera_addr_base = 0x08440400; // Ping pong buffer management printk("Addr: 0x%x Value: 0x%x\n", camera_addr_base, readl(io_p2v(camera_addr_base))); } /* End of Camera register dump */ //patch-e from Broadcom for csp#529767 reason:FALSE file=ripisr_cp.c line=342 code=-1/0xffffffff tastk=RIP_H TS=48744870/FN=4873 if( BCMLOG_CPCRASH_MTD == BCMLOG_GetCpCrashDumpDevice() ) { /* we kill AP when CP crashes */ IPC_DEBUG(DBG_INFO, "Crashing AP now...\n\n"); abort(); } else { ProcessCPCrashedDump(work); } IPC_ProcessEvents(); }else { IPC_ProcessEvents(); #ifdef CONFIG_HAS_WAKELOCK wake_unlock(&ipc_wake_lock); #endif // CONFIG_HAS_WAKELOCK } }
void ipcs_intr_tasklet_handler(unsigned long data) { cp_crashed = 0; if (IpcCPCrashCheck()) { cp_crashed = 1; spin_lock_bh(&cp_state_notifier_lock); raw_notifier_call_chain(&cp_state_notifier_list, IPC_CPSTATE_CRASHED, NULL); spin_unlock_bh(&cp_state_notifier_lock); /* schedule the work on the decidated CP crash dump work queue */ queue_work(g_ipc_info.crash_dump_workqueue, &g_ipc_info.cp_crash_dump_wq); IPC_ProcessEvents(); } else { IPC_ProcessEvents(); wake_unlock(&ipc_wake_lock); } }
void ipcs_intr_workqueue_process(struct work_struct *work) { static int first = 1; if (first) { first = 0; set_user_nice(current, -16); } if(IpcCPCrashCheck()) { cp_crashed = 1; if( BCMLOG_CPCRASH_MTD == BCMLOG_GetCpCrashDumpDevice() ) { /* we kill AP when CP crashes */ IPC_DEBUG(DBG_INFO, "Crashing AP now...\n\n"); #if defined(CONFIG_SEC_DEBUG) cp_abort(); #else abort(); #endif } else { schedule_work(&g_ipc_info.cp_crash_dump_wq); } IPC_ProcessEvents(); }else { IPC_ProcessEvents(); #ifdef CONFIG_HAS_WAKELOCK wake_unlock(&ipc_wake_lock); #endif // CONFIG_HAS_WAKELOCK } }