aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/video/omap2/dss/dispc.c28
-rw-r--r--drivers/video/omap2/dss/dss_features.c6
-rw-r--r--drivers/video/omap2/dss/dss_features.h2
3 files changed, 30 insertions, 6 deletions
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
index a75972250a20..374c987038ac 100644
--- a/drivers/video/omap2/dss/dispc.c
+++ b/drivers/video/omap2/dss/dispc.c
@@ -1072,13 +1072,33 @@ void dispc_ovl_compute_fifo_thresholds(enum omap_plane plane,
1072 */ 1072 */
1073 1073
1074 unsigned buf_unit = dss_feat_get_buffer_size_unit(); 1074 unsigned buf_unit = dss_feat_get_buffer_size_unit();
1075 unsigned fifo_size, burst_size; 1075 unsigned ovl_fifo_size, total_fifo_size, burst_size;
1076 int i;
1076 1077
1077 burst_size = dispc_ovl_get_burst_size(plane); 1078 burst_size = dispc_ovl_get_burst_size(plane);
1078 fifo_size = dispc_ovl_get_fifo_size(plane); 1079 ovl_fifo_size = dispc_ovl_get_fifo_size(plane);
1079 1080
1080 *fifo_low = fifo_size - burst_size; 1081 if (use_fifomerge) {
1081 *fifo_high = fifo_size - buf_unit; 1082 total_fifo_size = 0;
1083 for (i = 0; i < omap_dss_get_num_overlays(); ++i)
1084 total_fifo_size += dispc_ovl_get_fifo_size(i);
1085 } else {
1086 total_fifo_size = ovl_fifo_size;
1087 }
1088
1089 /*
1090 * We use the same low threshold for both fifomerge and non-fifomerge
1091 * cases, but for fifomerge we calculate the high threshold using the
1092 * combined fifo size
1093 */
1094
1095 if (dss_has_feature(FEAT_OMAP3_DSI_FIFO_BUG)) {
1096 *fifo_low = ovl_fifo_size - burst_size * 2;
1097 *fifo_high = total_fifo_size - burst_size;
1098 } else {
1099 *fifo_low = ovl_fifo_size - burst_size;
1100 *fifo_high = total_fifo_size - buf_unit;
1101 }
1082} 1102}
1083 1103
1084static void dispc_ovl_set_fir(enum omap_plane plane, 1104static void dispc_ovl_set_fir(enum omap_plane plane,
diff --git a/drivers/video/omap2/dss/dss_features.c b/drivers/video/omap2/dss/dss_features.c
index c2456c5bcd35..419419ad0493 100644
--- a/drivers/video/omap2/dss/dss_features.c
+++ b/drivers/video/omap2/dss/dss_features.c
@@ -370,7 +370,8 @@ static const struct omap_dss_features omap3430_dss_features = {
370 FEAT_LINEBUFFERSPLIT | FEAT_RESIZECONF | 370 FEAT_LINEBUFFERSPLIT | FEAT_RESIZECONF |
371 FEAT_DSI_PLL_FREQSEL | FEAT_DSI_REVERSE_TXCLKESC | 371 FEAT_DSI_PLL_FREQSEL | FEAT_DSI_REVERSE_TXCLKESC |
372 FEAT_VENC_REQUIRES_TV_DAC_CLK | FEAT_CPR | FEAT_PRELOAD | 372 FEAT_VENC_REQUIRES_TV_DAC_CLK | FEAT_CPR | FEAT_PRELOAD |
373 FEAT_FIR_COEF_V | FEAT_ALPHA_FIXED_ZORDER | FEAT_FIFO_MERGE, 373 FEAT_FIR_COEF_V | FEAT_ALPHA_FIXED_ZORDER | FEAT_FIFO_MERGE |
374 FEAT_OMAP3_DSI_FIFO_BUG,
374 375
375 .num_mgrs = 2, 376 .num_mgrs = 2,
376 .num_ovls = 3, 377 .num_ovls = 3,
@@ -394,7 +395,8 @@ static const struct omap_dss_features omap3630_dss_features = {
394 FEAT_ROWREPEATENABLE | FEAT_LINEBUFFERSPLIT | 395 FEAT_ROWREPEATENABLE | FEAT_LINEBUFFERSPLIT |
395 FEAT_RESIZECONF | FEAT_DSI_PLL_PWR_BUG | 396 FEAT_RESIZECONF | FEAT_DSI_PLL_PWR_BUG |
396 FEAT_DSI_PLL_FREQSEL | FEAT_CPR | FEAT_PRELOAD | 397 FEAT_DSI_PLL_FREQSEL | FEAT_CPR | FEAT_PRELOAD |
397 FEAT_FIR_COEF_V | FEAT_ALPHA_FIXED_ZORDER | FEAT_FIFO_MERGE, 398 FEAT_FIR_COEF_V | FEAT_ALPHA_FIXED_ZORDER | FEAT_FIFO_MERGE |
399 FEAT_OMAP3_DSI_FIFO_BUG,
398 400
399 .num_mgrs = 2, 401 .num_mgrs = 2,
400 .num_ovls = 3, 402 .num_ovls = 3,
diff --git a/drivers/video/omap2/dss/dss_features.h b/drivers/video/omap2/dss/dss_features.h
index 50caee9192a2..5f9b82156778 100644
--- a/drivers/video/omap2/dss/dss_features.h
+++ b/drivers/video/omap2/dss/dss_features.h
@@ -59,6 +59,8 @@ enum dss_feat_id {
59 FEAT_ALPHA_FIXED_ZORDER = 1 << 26, 59 FEAT_ALPHA_FIXED_ZORDER = 1 << 26,
60 FEAT_ALPHA_FREE_ZORDER = 1 << 27, 60 FEAT_ALPHA_FREE_ZORDER = 1 << 27,
61 FEAT_FIFO_MERGE = 1 << 28, 61 FEAT_FIFO_MERGE = 1 << 28,
62 /* An unknown HW bug causing the normal FIFO thresholds not to work */
63 FEAT_OMAP3_DSI_FIFO_BUG = 1 << 29,
62}; 64};
63 65
64/* DSS register field id */ 66/* DSS register field id */