void mdss_dsi_error(struct mdss_dsi_ctrl_pdata *ctrl) { /* disable dsi error interrupt */ mdss_dsi_err_intr_ctrl(ctrl, DSI_INTR_ERROR_MASK, 0); /* DSI_ERR_INT_MASK0 */ mdss_dsi_clk_status(ctrl); /* Mask0, 0x10000000 */ mdss_dsi_fifo_status(ctrl); /* mask0, 0x133d00 */ mdss_dsi_ack_err_status(ctrl); /* mask0, 0x01f */ mdss_dsi_timeout_status(ctrl); /* mask0, 0x0e0 */ mdss_dsi_status(ctrl); /* mask0, 0xc0100 */ mdss_dsi_dln0_phy_err(ctrl); /* mask0, 0x3e00000 */ dsi_send_events(ctrl, DSI_EV_MDP_BUSY_RELEASE); #if defined(CONFIG_F_SKYDISP_EF63_SS) //ejkim77_debug dump #ifdef F_WA_WATCHDOG_DURING_BOOTUP if(ctrl->octa_blck_set && !ctrl->manufacture_id) #endif { dumpreg(); BUG_ON(1); } #endif }
static int dsi_event_thread(void *data) { struct mdss_dsi_event *ev; struct dsi_event_q *evq; struct mdss_dsi_ctrl_pdata *ctrl; unsigned long flag; struct sched_param param; u32 todo = 0; int ret; param.sched_priority = 16; ret = sched_setscheduler_nocheck(current, SCHED_FIFO, ¶m); if (ret) pr_err("%s: set priority failed\n", __func__); ev = (struct mdss_dsi_event *)data; /* event */ init_waitqueue_head(&ev->event_q); spin_lock_init(&ev->event_lock); while (1) { wait_event(ev->event_q, (ev->event_pndx != ev->event_gndx)); spin_lock_irqsave(&ev->event_lock, flag); evq = &ev->todo_list[ev->event_gndx++]; todo = evq->todo; ctrl = evq->ctrl; evq->todo = 0; ev->event_gndx %= DSI_EVENT_Q_MAX; spin_unlock_irqrestore(&ev->event_lock, flag); pr_debug("%s: ev=%x\n", __func__, todo); #if defined (CONFIG_FB_MSM_MDSS_DSI_DBG) xlog(__func__, todo, 0, 0, 0, 0, 0); #endif if (todo & DSI_EV_PLL_UNLOCKED) mdss_dsi_pll_relock(ctrl); if (todo & DSI_EV_MDP_FIFO_UNDERFLOW) { if (ctrl->recovery) { mdss_dsi_sw_reset_restore(ctrl); ctrl->recovery->fxn(ctrl->recovery->data); } } if (todo & DSI_EV_MDP_BUSY_RELEASE) { spin_lock(&ctrl->mdp_lock); ctrl->mdp_busy = false; mdss_dsi_disable_irq_nosync(ctrl, DSI_MDP_TERM); complete(&ctrl->mdp_comp); spin_unlock(&ctrl->mdp_lock); /* enable dsi error interrupt */ mdss_dsi_err_intr_ctrl(ctrl, DSI_INTR_ERROR_MASK, 1); } } return 0; }
void mdss_dsi_error(struct mdss_dsi_ctrl_pdata *ctrl) { /* disable dsi error interrupt */ mdss_dsi_err_intr_ctrl(ctrl, DSI_INTR_ERROR_MASK, 0); /* DSI_ERR_INT_MASK0 */ mdss_dsi_clk_status(ctrl); /* Mask0, 0x10000000 */ mdss_dsi_fifo_status(ctrl); /* mask0, 0x133d00 */ mdss_dsi_ack_err_status(ctrl); /* mask0, 0x01f */ mdss_dsi_timeout_status(ctrl); /* mask0, 0x0e0 */ mdss_dsi_status(ctrl); /* mask0, 0xc0100 */ mdss_dsi_dln0_phy_err(ctrl); /* mask0, 0x3e00000 */ dsi_send_events(ctrl, DSI_EV_MDP_BUSY_RELEASE); }
void mdss_dsi_error(struct mdss_dsi_ctrl_pdata *ctrl) { mdss_dsi_err_intr_ctrl(ctrl, DSI_INTR_ERROR_MASK, 0); mdss_dsi_clk_status(ctrl); mdss_dsi_fifo_status(ctrl); mdss_dsi_ack_err_status(ctrl); mdss_dsi_timeout_status(ctrl); mdss_dsi_status(ctrl); mdss_dsi_dln0_phy_err(ctrl); dsi_send_events(ctrl, DSI_EV_MDP_BUSY_RELEASE); }