[RAMEN9610-12313][COMMON] fbdev: dpu: Added esd_thread problem defence code
authorhwangjae lee <hj-yo.lee@samsung.com>
Tue, 19 Feb 2019 06:17:06 +0000 (15:17 +0900)
committerhskang <hs1218.kang@samsung.com>
Wed, 20 Feb 2019 01:00:46 +0000 (10:00 +0900)
Change-Id: I688025c7a114c1db35d2b1c22b7f23e8e1a1f680
Signed-off-by: hwangjae lee <hj-yo.lee@samsung.com>
drivers/video/fbdev/exynos/dpu20/decon.h
drivers/video/fbdev/exynos/dpu20/decon_core.c
drivers/video/fbdev/exynos/dpu20/decon_dsi.c

index 76d78fa61dfb0a4eb146207315a3a3a47e24c63a..b961d3d8b691c5a72b877a4471fafbb0810d5f33 100644 (file)
@@ -70,6 +70,7 @@ extern int dpu_bts_log_level;
 extern int win_update_log_level;
 extern int dpu_mres_log_level;
 extern int decon_systrace_enable;
+extern int esd_bypass_cnt;
 extern struct decon_bts_ops decon_bts_control;
 
 #define DECON_MODULE_NAME      "exynos-decon"
@@ -85,6 +86,7 @@ extern struct decon_bts_ops decon_bts_control;
 #define FD_TRY_CNT             3
 #define VALID_FD_VAL           3
 #define DECON_TRACE_BUF_SIZE   40
+#define MAX_BYPASS_CNT         20
 
 #define DECON_WIN_UPDATE_IDX   MAX_DECON_WIN
 
index 2f56ffd36913354e07383914e60a5d81f286e930..f60150ebdda189c51bbf4dc2a8dcd965617ccdbc 100644 (file)
@@ -69,6 +69,7 @@ module_param(win_update_log_level, int, 0644);
 int dpu_mres_log_level = 6;
 module_param(dpu_mres_log_level, int, 0644);
 int decon_systrace_enable;
+int esd_bypass_cnt;
 
 struct decon_device *decon_drvdata[MAX_DECON_CNT];
 EXPORT_SYMBOL(decon_drvdata);
@@ -2473,6 +2474,14 @@ static int decon_set_win_config(struct decon_device *decon,
                decon_warn("decon-%d skip win_config(state:%s, bypass:%s)\n",
                                decon->id, decon_state_names[decon->state],
                                decon_is_bypass(decon) ? "on" : "off");
+               if (decon_is_bypass(decon)) {
+                       if (esd_bypass_cnt < MAX_BYPASS_CNT) {
+                               esd_bypass_cnt++;
+                       } else {
+                               decon_set_bypass(decon, false);
+                               esd_bypass_cnt = 0;
+                       }
+               }
 #else
                decon_warn("decon-%d skip win_config(state:%s)\n",
                                decon->id, decon_state_names[decon->state]);
@@ -4022,6 +4031,9 @@ static int decon_probe(struct platform_device *pdev)
        decon_systrace_enable = 0;
        decon->systrace.pid = 0;
 
+       /* esd_thread */
+       esd_bypass_cnt = 0;
+
        ret = decon_init_resources(decon, pdev, device_name);
        if (ret)
                goto err_res;
index 6dcc346525417fdacd90b85f16b8a585dcd07f01..b3239bdb0eefee298af5c18581cac4f550c08798 100644 (file)
@@ -420,7 +420,7 @@ static int decon_handle_esd(struct decon_device *decon)
 #if defined(READ_ESD_SOLUTION_TEST)
                status = DSIM_ESD_OK;
 #else
-               status = call_panel_ops(dsim, read_state, dsim);
+               status = DSIM_ESD_OK;
 #endif
                if (status != DSIM_ESD_OK) {
                        decon_err("%s failed to recover subdev(status %d)\n",
@@ -452,6 +452,10 @@ static int decon_handle_esd(struct decon_device *decon)
        }
 
        dsim->esd_recovering = false;
+
+       if (!decon_is_bypass(decon))
+               decon_set_bypass(decon, true);
+
        decon_bypass_off(decon);
        decon_info("%s -\n", __func__);