Skip to content

Commit

Permalink
OMAPDSS: DISPC: Add naive threshold calc for fifomerge
Browse files Browse the repository at this point in the history
Take fifo merge into use by implementing a rather naive fifo merge
threshold calculation: keep the low threshold always the same, but
increase the high threshold when fifo merge is used.

This should greatly increase the time between pixel data fetches from
SDRAM, as the usable fifo size is much larger. However, it probably
won't help for fifo underflows, as the low threshols is kept the same.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
  • Loading branch information
Tomi Valkeinen committed Jan 25, 2012
1 parent 83fa2f2 commit e0e405b
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 6 deletions.
28 changes: 24 additions & 4 deletions drivers/video/omap2/dss/dispc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1072,13 +1072,33 @@ void dispc_ovl_compute_fifo_thresholds(enum omap_plane plane,
*/

unsigned buf_unit = dss_feat_get_buffer_size_unit();
unsigned fifo_size, burst_size;
unsigned ovl_fifo_size, total_fifo_size, burst_size;
int i;

burst_size = dispc_ovl_get_burst_size(plane);
fifo_size = dispc_ovl_get_fifo_size(plane);
ovl_fifo_size = dispc_ovl_get_fifo_size(plane);

*fifo_low = fifo_size - burst_size;
*fifo_high = fifo_size - buf_unit;
if (use_fifomerge) {
total_fifo_size = 0;
for (i = 0; i < omap_dss_get_num_overlays(); ++i)
total_fifo_size += dispc_ovl_get_fifo_size(i);
} else {
total_fifo_size = ovl_fifo_size;
}

/*
* We use the same low threshold for both fifomerge and non-fifomerge
* cases, but for fifomerge we calculate the high threshold using the
* combined fifo size
*/

if (dss_has_feature(FEAT_OMAP3_DSI_FIFO_BUG)) {
*fifo_low = ovl_fifo_size - burst_size * 2;
*fifo_high = total_fifo_size - burst_size;
} else {
*fifo_low = ovl_fifo_size - burst_size;
*fifo_high = total_fifo_size - buf_unit;
}
}

static void dispc_ovl_set_fir(enum omap_plane plane,
Expand Down
6 changes: 4 additions & 2 deletions drivers/video/omap2/dss/dss_features.c
Original file line number Diff line number Diff line change
Expand Up @@ -370,7 +370,8 @@ static const struct omap_dss_features omap3430_dss_features = {
FEAT_LINEBUFFERSPLIT | FEAT_RESIZECONF |
FEAT_DSI_PLL_FREQSEL | FEAT_DSI_REVERSE_TXCLKESC |
FEAT_VENC_REQUIRES_TV_DAC_CLK | FEAT_CPR | FEAT_PRELOAD |
FEAT_FIR_COEF_V | FEAT_ALPHA_FIXED_ZORDER | FEAT_FIFO_MERGE,
FEAT_FIR_COEF_V | FEAT_ALPHA_FIXED_ZORDER | FEAT_FIFO_MERGE |
FEAT_OMAP3_DSI_FIFO_BUG,

.num_mgrs = 2,
.num_ovls = 3,
Expand All @@ -394,7 +395,8 @@ static const struct omap_dss_features omap3630_dss_features = {
FEAT_ROWREPEATENABLE | FEAT_LINEBUFFERSPLIT |
FEAT_RESIZECONF | FEAT_DSI_PLL_PWR_BUG |
FEAT_DSI_PLL_FREQSEL | FEAT_CPR | FEAT_PRELOAD |
FEAT_FIR_COEF_V | FEAT_ALPHA_FIXED_ZORDER | FEAT_FIFO_MERGE,
FEAT_FIR_COEF_V | FEAT_ALPHA_FIXED_ZORDER | FEAT_FIFO_MERGE |
FEAT_OMAP3_DSI_FIFO_BUG,

.num_mgrs = 2,
.num_ovls = 3,
Expand Down
2 changes: 2 additions & 0 deletions drivers/video/omap2/dss/dss_features.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ enum dss_feat_id {
FEAT_ALPHA_FIXED_ZORDER = 1 << 26,
FEAT_ALPHA_FREE_ZORDER = 1 << 27,
FEAT_FIFO_MERGE = 1 << 28,
/* An unknown HW bug causing the normal FIFO thresholds not to work */
FEAT_OMAP3_DSI_FIFO_BUG = 1 << 29,
};

/* DSS register field id */
Expand Down

0 comments on commit e0e405b

Please sign in to comment.