Re: [PATCH 2/2] arm: omap_hwmod disable ick autoidling when a hwmod requires that

From: Tero Kristo
Date: Thu Nov 08 2018 - 07:35:33 EST


On 08/11/2018 13:08, Andreas Kemnade wrote:
Hi,

On Thu, 8 Nov 2018 12:26:08 +0200
Tero Kristo <t-kristo@xxxxxx> wrote:

On 04/10/2018 23:38, Andreas Kemnade wrote:
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@xxxxxxxxxxxx>
---
arch/arm/mach-omap2/omap_hwmod.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c
index bb641e6c93d0..0078b0e1d242 100644
--- a/arch/arm/mach-omap2/omap_hwmod.c
+++ b/arch/arm/mach-omap2/omap_hwmod.c
@@ -986,8 +986,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);

I think calling this unconditionally across all platforms / clock types
might cause problems. Checking kernel, am33xx seems to have one clock
with this flag that is not of omap2 type. Do we have any testing data
that this doesn't break things?

Somehow I have missed that am33xx clock. I have not tested it on that
platform. Concerning am3xxx I have only a beaglebone block but it not
am33xx I guess. So I have to recheck I guess.

Beaglebone black is am33xx based device, so you can use that for testing.

But I think the intention of this flag was to control autoidle
vs. sw-controlled idle according to...
[...]
if (os->flags & OCPIF_SWSUP_IDLE) {
- /* XXX omap_iclk_deny_idle(c); */
+ /*
this comment. So we need a if (clock_is_omap2()) or something like that
or remove that flag from any other clocks?

You could add check within the omap2_clk_deny_idle / allow_idle calls themselves. You can check for presence of flag CLK_IS_BASIC, this is not set for omap clocks.

-Tero


Regards,
Andreas


--
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki