Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

OMAPDSS: DISPC: Revert to older DISPC Smart Standby mechanism for OMAP5

DISPC on OMAP5 has a more optimised mechanism of asserting Mstandby to achieve
more power savings when DISPC is configured in Smart Standby mode. This
mechanism leads to underflows when multiple DISPC pipes are enabled.

There is a register field which can let us revert to the older mechanism of
asserting Mstandby. Configure this field to prevent underflows.

Signed-off-by: Archit Taneja <archit@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>

authored by

Archit Taneja and committed by
Tomi Valkeinen
d0df9a2c c35eeb2e

+8
+7
drivers/video/omap2/dss/dispc.c
··· 87 87 88 88 /* no DISPC_IRQ_FRAMEDONETV on this SoC */ 89 89 bool no_framedone_tv:1; 90 + 91 + /* revert to the OMAP4 mechanism of DISPC Smart Standby operation */ 92 + bool mstandby_workaround:1; 90 93 }; 91 94 92 95 #define DISPC_MAX_NR_FIFOS 5 ··· 3493 3490 dispc_configure_burst_sizes(); 3494 3491 3495 3492 dispc_ovl_enable_zorder_planes(); 3493 + 3494 + if (dispc.feat->mstandby_workaround) 3495 + REG_FLD_MOD(DISPC_MSTANDBY_CTRL, 1, 0, 0); 3496 3496 } 3497 3497 3498 3498 static const struct dispc_features omap24xx_dispc_feats __initconst = { ··· 3590 3584 .calc_core_clk = calc_core_clk_44xx, 3591 3585 .num_fifos = 5, 3592 3586 .gfx_fifo_workaround = true, 3587 + .mstandby_workaround = true, 3593 3588 }; 3594 3589 3595 3590 static int __init dispc_init_features(struct platform_device *pdev)
+1
drivers/video/omap2/dss/dispc.h
··· 39 39 #define DISPC_GLOBAL_BUFFER 0x0800 40 40 #define DISPC_CONTROL3 0x0848 41 41 #define DISPC_CONFIG3 0x084C 42 + #define DISPC_MSTANDBY_CTRL 0x0858 42 43 43 44 /* DISPC overlay registers */ 44 45 #define DISPC_OVL_BA0(n) (DISPC_OVL_BASE(n) + \