mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-19 16:57:47 +07:00
ARM: OMAP2+: hwmod: disable ick autoidling when a hwmod requires that
Deny autoidle for hwmods with the OCPIF_SWSUP_IDLE flag, that makes hwmods working properly which cannot handle autoidle properly in lower power states. Affected is e. g. the omap_hdq. Since an ick might have mulitple users, autoidle is disabled when an individual user requires that rather than in _setup_iclk_autoidle. dss_ick is an example for that. Signed-off-by: Andreas Kemnade <andreas@kemnade.info> Acked-by: Tony Lindgren <tony@atomide.com> Tested-by: Keerthy <j-keerthy@ti.com> Signed-off-by: Tero Kristo <t-kristo@ti.com>
This commit is contained in:
parent
fddf4e29a6
commit
12af39cad7
@ -1002,8 +1002,10 @@ static int _enable_clocks(struct omap_hwmod *oh)
|
||||
clk_enable(oh->_clk);
|
||||
|
||||
list_for_each_entry(os, &oh->slave_ports, node) {
|
||||
if (os->_clk && (os->flags & OCPIF_SWSUP_IDLE))
|
||||
if (os->_clk && (os->flags & OCPIF_SWSUP_IDLE)) {
|
||||
omap2_clk_deny_idle(os->_clk);
|
||||
clk_enable(os->_clk);
|
||||
}
|
||||
}
|
||||
|
||||
/* The opt clocks are controlled by the device driver. */
|
||||
@ -1055,8 +1057,10 @@ static int _disable_clocks(struct omap_hwmod *oh)
|
||||
clk_disable(oh->_clk);
|
||||
|
||||
list_for_each_entry(os, &oh->slave_ports, node) {
|
||||
if (os->_clk && (os->flags & OCPIF_SWSUP_IDLE))
|
||||
if (os->_clk && (os->flags & OCPIF_SWSUP_IDLE)) {
|
||||
clk_disable(os->_clk);
|
||||
omap2_clk_allow_idle(os->_clk);
|
||||
}
|
||||
}
|
||||
|
||||
if (oh->flags & HWMOD_OPT_CLKS_NEEDED)
|
||||
@ -2436,9 +2440,13 @@ static void _setup_iclk_autoidle(struct omap_hwmod *oh)
|
||||
continue;
|
||||
|
||||
if (os->flags & OCPIF_SWSUP_IDLE) {
|
||||
/* XXX omap_iclk_deny_idle(c); */
|
||||
/*
|
||||
* we might have multiple users of one iclk with
|
||||
* different requirements, disable autoidle when
|
||||
* the module is enabled, e.g. dss iclk
|
||||
*/
|
||||
} else {
|
||||
/* XXX omap_iclk_allow_idle(c); */
|
||||
/* we are enabling autoidle afterwards anyways */
|
||||
clk_enable(os->_clk);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user