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 }
void mdss_dsi_fifo_status(struct mdss_dsi_ctrl_pdata *ctrl) { u32 status; unsigned char *base; base = ctrl->ctrl_base; status = MIPI_INP(base + 0x000c);/* DSI_FIFO_STATUS */ /* fifo underflow, overflow */ if (status & 0xcccc4489) { MIPI_OUTP(base + 0x000c, status); pr_err("%s: status=%x\n", __func__, status); if (status & 0x0080) /* CMD_DMA_FIFO_UNDERFLOW */ dsi_send_events(ctrl, DSI_EV_MDP_FIFO_UNDERFLOW); #if defined (CONFIG_FB_MSM_MIPI_SAMSUNG_OCTA_CMD_WQHD_PT_PANEL) if (status == 0x99991080) { dumpreg(); mdp5_dump_regs(); mdss_dsi_dump_power_clk(&ctrl->panel_data, 0); mdss_mdp_dump_power_clk(); mdss_mdp_debug_bus(); xlog_dump(); panic("mdss_dsi_fifo err"); } #endif } }
void mdss_dsi_fifo_status(struct mdss_dsi_ctrl_pdata *ctrl) { u32 status; unsigned char *base; base = ctrl->ctrl_base; status = MIPI_INP(base + 0x000c); if (status & 0xcccc4489) { MIPI_OUTP(base + 0x000c, status); pr_err("%s: status=%x\n", __func__, status); if (status & 0x0080) dsi_send_events(ctrl, DSI_EV_MDP_FIFO_UNDERFLOW); if (status & 0x11110000) dsi_send_events(ctrl, DSI_EV_DSI_FIFO_EMPTY); } }
void mdss_dsi_fifo_status(struct mdss_dsi_ctrl_pdata *ctrl) { u32 status; unsigned char *base; base = ctrl->ctrl_base; status = MIPI_INP(base + 0x000c);/* DSI_FIFO_STATUS */ /* fifo underflow, overflow and empty*/ if (status & 0xcccc4489) { MIPI_OUTP(base + 0x000c, status); pr_err("%s: status=%x\n", __func__, status); if (status & 0x0080) /* CMD_DMA_FIFO_UNDERFLOW */ dsi_send_events(ctrl, DSI_EV_MDP_FIFO_UNDERFLOW); if (status & 0x11110000) /* DLN_FIFO_EMPTY */ dsi_send_events(ctrl, DSI_EV_DSI_FIFO_EMPTY); } }
void mdss_dsi_clk_status(struct mdss_dsi_ctrl_pdata *ctrl) { u32 status; unsigned char *base; base = ctrl->ctrl_base; status = MIPI_INP(base + 0x0120); if (status & 0x10000) { MIPI_OUTP(base + 0x0120, status); dsi_send_events(ctrl, DSI_EV_PLL_UNLOCKED); pr_err("%s: status=%x\n", __func__, status); } }
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_cmd_mdp_busy(struct mdss_dsi_ctrl_pdata *ctrl) { unsigned long flags; int need_wait = 0; static int busy_timeout_cnt; pr_debug("%s: start pid=%d\n", __func__, current->pid); spin_lock_irqsave(&ctrl->mdp_lock, flags); if (ctrl->mdp_busy == true) need_wait++; #if defined (CONFIG_FB_MSM_MDSS_DSI_DBG) xlog(__func__,ctrl->ndx, ctrl->mdp_busy, 0, 0, 0, 0); #endif spin_unlock_irqrestore(&ctrl->mdp_lock, flags); if (need_wait) { /* wait until DMA finishes the current job */ pr_debug("%s: pending pid=%d\n", __func__, current->pid); if (!wait_for_completion_timeout(&ctrl->mdp_comp,\ msecs_to_jiffies(1000))) { pr_info("%s: wait_for_completion_timeout (count : %d)", __func__, ++busy_timeout_cnt); /*WARN(1, "mdss_dsi_cmd_mdp_busy timeout");*/ #if defined (CONFIG_FB_MSM_MIPI_SAMSUNG_OCTA_CMD_WQHD_PT_PANEL) dumpreg(); mdp5_dump_regs(); mdss_dsi_dump_power_clk(&ctrl->panel_data, 0); mdss_mdp_dump_power_clk(); mdss_mdp_debug_bus(); xlog_dump(); #if 0 pr_info("run recovery function instead of force panic\n"); dsi_send_events(ctrl, DSI_EV_MDP_BUSY_RELEASE); #else panic("mdss_dsi_cmd_mdp_busy timeout"); #endif #endif } } pr_debug("%s: done pid=%d\n", __func__, current->pid); }
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); }
void mdss_dsi_fifo_status(struct mdss_dsi_ctrl_pdata *ctrl) { u32 status; unsigned char *base; base = ctrl->ctrl_base; status = MIPI_INP(base + 0x000c);/* DSI_FIFO_STATUS */ /* fifo underflow, overflow */ if (status & 0xcccc4489) { MIPI_OUTP(base + 0x000c, status); pr_err("%s: status=%x\n", __func__, status); if (status & 0x0080) /* CMD_DMA_FIFO_UNDERFLOW */ dsi_send_events(ctrl, DSI_EV_MDP_FIFO_UNDERFLOW); MDSS_XLOG_TOUT_HANDLER("mdp", "dsi0", "dsi1", "edp", "hdmi", "panic"); } }