OMAP3: hwmod_data: add HWMOD_INIT_NO_RESET flag for dss_dispc
Subsystems (4)
PATCH 1/1 OMAP3: hwmod_data: add HWMOD_INIT_NO_RESET flag for dss_dispc
Resetting DISPC when a DISPC output is enabled causes the DSS to go into an inconsistent state.
commit b923d40dd4211c4ef7d4efa2bd81b7ca1d8744c1
Author: Archit Taneja <[email protected]> Date: Thu Oct 6 18:04:08 2011 -0600
ARM: OMAP2PLUS: DSS: Ensure DSS works correctly if display is
enabled in bootloader
tries to deal with this problem by checking if display is enabled and disabling it before doing reset.
But in my setup dss_dispc is resetted from omap_hwmod_setup_all function _before_ calling omap_dss_reset. So when dispc_disable_outputs is executed dispc is already reset and nothing happens.
This patch and HWMOD_INIT_NO_RESET flags to dss_dispc hwmod thus leaving DISPC untouched so that omap_dss_reset can take care of it.
This solves the l3_app_irq BUG problem on my AM3517 based board.
--- arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
arch/arm/mach-omap2/omap_hwmod_3xxx_data.c +1 -1
@@ -1515,7 +1515,7 @@ static struct omap_hwmod omap3xxx_dss_dispc_hwmod = { }, .slaves = omap3xxx_dss_dispc_slaves, .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_dispc_slaves), - .flags = HWMOD_NO_IDLEST, + .flags = HWMOD_NO_IDLEST | HWMOD_INIT_NO_RESET, .dev_attr = &omap2_3_dss_dispc_dev_attr };
Signature · 1 line
1.7.6.4
PATCH 1/1 OMAP3: hwmod_data: add HWMOD_INIT_NO_RESET flag for dss_dispc
Quoted 10 lines · Ilya Yanok
Resetting DISPC when a DISPC output is enabled causes the DSS to go into an inconsistent state.
commit
b923d40dd4211c4ef7d4efa2bd81b7ca1d8744c1Author: Archit Taneja <[email protected]> Date: Thu Oct 6 18:04:08 2011 -0600ARM: OMAP2PLUS: DSS: Ensure DSS works correctly if display is
enabled in bootloader
Quoted 6 lines
tries to deal with this problem by checking if display is enabled and disabling it before doing reset.
But in my setup
dss_dispcis resetted fromomap_hwmod_setup_allfunction _before_ callingomap_dss_reset. So whendispc_disable_outputsis executed dispc is already reset and nothing happens.
Hmm, why is that? You don't have the dss hwmod before dispc in the list of hwmods? The code presumes that dss hwmod is handled first.
Quoted 2 lines
This patch and
HWMOD_INIT_NO_RESETflags todss_dispchwmod thus leaving DISPC untouched so thatomap_dss_resetcan take care of it.
omap_dss_reset() doesn't reset dispc, so this will leave dispc un-reseted.
The idea of the current code is to do the reset similarly on all OMAPs. The sequence should be:
- omap_dss_reset(), which disables dispc outputs and manually resets dss registers.
- then the rest of the dss modules reset themselves normally, using the softreset bit.
Your patch would break that.
Tomi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20111222/f0e484eb/attachment.sig>
PATCH 1/1 OMAP3: hwmod_data: add HWMOD_INIT_NO_RESET flag for dss_dispc
Hi Tomi,
Quoted 14 lines · Tomi Valkeinen
Quoted 13 lines · Ilya Yanok
Resetting DISPC when a DISPC output is enabled causes the DSS to go into an inconsistent state.
commit
b923d40dd4211c4ef7d4efa2bd81b7ca1d8744c1Author: Archit Taneja <[email protected]> Date: Thu Oct 6 18:04:08 2011 -0600ARM: OMAP2PLUS: DSS: Ensure DSS works correctly if display is
enabled in bootloadertries to deal with this problem by checking if display is enabled and disabling it before doing reset.
Quoted 6 lines
Quoted 3 lines
But in my setup
dss_dispcis resetted fromomap_hwmod_setup_allfunction _before_ callingomap_dss_reset. So whendispc_disable_outputsis executed dispc is already reset and nothing happens.Hmm, why is that? You don't have the dss hwmod before dispc in the list of hwmods? The code presumes that dss hwmod is handled first.
Looking at the arch/arm/mach-omap2/omap_hwmod_3xxx_data.c I can see that dss_dispc is in the list of generic hwmods which is registered first while dss_core hwmod is in revision-specific lists which are registered later. I think this is the real root of the problem, thanks for pointing this out!
Quoted 7 lines
Quoted 3 lines
This patch and
HWMOD_INIT_NO_RESETflags todss_dispchwmod thus leaving DISPC untouched so thatomap_dss_resetcan take care of it.
omap_dss_reset()doesn't reset dispc, so this will leave dispc un-reseted.
Quoted 7 lines
The idea of the current code is to do the reset similarly on all OMAPs. The sequence should be:
-
omap_dss_reset(), which disables dispc outputs and manually resets dss registers.
- then the rest of the dss modules reset themselves normally, using the softreset bit.
But currently omap_dss_reset() is called the last.
Regards, Ilya.