mbox series

[RFC,0/2] mach-omap2: handle autoidle denial

Message ID 20181004055147.23048-1-andreas@kemnade.info (mailing list archive)
Headers show
Series mach-omap2: handle autoidle denial | expand

Message

Andreas Kemnade Oct. 4, 2018, 5:51 a.m. UTC
On the gta04 with a dm3730 omap_hdq does not work properly when the
device enters lower power states. Idling uart1 and 2 is enough
to show up that problem, if there are no other things enabled.
Further research reveals that hdq iclk must not be turned off during
transfers, also according to the TRM. That fact is also correctly described
in the flags but the code to handle that is incomplete.

Since the order is first disable all autoidles, then disable selected
and then enable all, we need to either change that order or add
a usecount. Since it is done only in init, we could think about changing
order.

Andreas Kemnade (2):
  clk: ti: add a usecount for autoidle
  arm: mach-omap2: setup iclk autoidle according to flags

 arch/arm/mach-omap2/omap_hwmod.c |  8 ++++++--
 drivers/clk/ti/autoidle.c        | 20 ++++++++++++--------
 include/linux/clk/ti.h           |  1 +
 3 files changed, 19 insertions(+), 10 deletions(-)

Comments

Tony Lindgren Oct. 4, 2018, 2:25 p.m. UTC | #1
* Andreas Kemnade <andreas@kemnade.info> [181004 05:56]:
> On the gta04 with a dm3730 omap_hdq does not work properly when the
> device enters lower power states. Idling uart1 and 2 is enough
> to show up that problem, if there are no other things enabled.
> Further research reveals that hdq iclk must not be turned off during
> transfers, also according to the TRM. That fact is also correctly described
> in the flags but the code to handle that is incomplete.
> 
> Since the order is first disable all autoidles, then disable selected
> and then enable all, we need to either change that order or add
> a usecount. Since it is done only in init, we could think about changing
> order.

These patches look OK to me, assuming Tero will review them more
closely.

It seems we should just provide a generic interface for
clk_allow_autoidle() and clk_deny_autoidle()? Otherwise we'll
be forever stuck with pdata callbacks it seems.

Regards,

Tony
Tero Kristo Oct. 4, 2018, 2:42 p.m. UTC | #2
On 04/10/18 17:25, Tony Lindgren wrote:
> * Andreas Kemnade <andreas@kemnade.info> [181004 05:56]:
>> On the gta04 with a dm3730 omap_hdq does not work properly when the
>> device enters lower power states. Idling uart1 and 2 is enough
>> to show up that problem, if there are no other things enabled.
>> Further research reveals that hdq iclk must not be turned off during
>> transfers, also according to the TRM. That fact is also correctly described
>> in the flags but the code to handle that is incomplete.
>>
>> Since the order is first disable all autoidles, then disable selected
>> and then enable all, we need to either change that order or add
>> a usecount. Since it is done only in init, we could think about changing
>> order.
> 
> These patches look OK to me, assuming Tero will review them more
> closely.

There is no locking whatsoever in the autoidle counting atm, that must 
be fixed otherwise you get races.

> It seems we should just provide a generic interface for
> clk_allow_autoidle() and clk_deny_autoidle()? Otherwise we'll
> be forever stuck with pdata callbacks it seems.

The TI clock driver is actually providing these APIs, so that should be 
fine. I don't think there is any use / need for pdata callbacks atm, it 
just happens hwmod core is calling these at the moment which might have 
confused you.

-Tero
--
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
Tony Lindgren Oct. 4, 2018, 3:07 p.m. UTC | #3
* Tero Kristo <t-kristo@ti.com> [181004 14:47]:
> On 04/10/18 17:25, Tony Lindgren wrote:
> > It seems we should just provide a generic interface for
> > clk_allow_autoidle() and clk_deny_autoidle()? Otherwise we'll
> > be forever stuck with pdata callbacks it seems.
> 
> The TI clock driver is actually providing these APIs, so that should be
> fine. I don't think there is any use / need for pdata callbacks atm, it just
> happens hwmod core is calling these at the moment which might have confused
> you.

Hmm OK. So do we already have some way to deny autoidle for a
clock from ti-sysc.c driver without pdata callbacks?

Suman pointed out few days ago that for a reset driver to work
we must do clkdm_deny_idle() and clkdm_allow_idle() as the hwmod
code does. I gues that really just boils down to doing clk deny
idle and allow idle on the clockdomain clkctrl clock?

Regards,

Tony
Tero Kristo Oct. 4, 2018, 3:48 p.m. UTC | #4
On 04/10/18 18:07, Tony Lindgren wrote:
> * Tero Kristo <t-kristo@ti.com> [181004 14:47]:
>> On 04/10/18 17:25, Tony Lindgren wrote:
>>> It seems we should just provide a generic interface for
>>> clk_allow_autoidle() and clk_deny_autoidle()? Otherwise we'll
>>> be forever stuck with pdata callbacks it seems.
>>
>> The TI clock driver is actually providing these APIs, so that should be
>> fine. I don't think there is any use / need for pdata callbacks atm, it just
>> happens hwmod core is calling these at the moment which might have confused
>> you.
> 
> Hmm OK. So do we already have some way to deny autoidle for a
> clock from ti-sysc.c driver without pdata callbacks?
> 
> Suman pointed out few days ago that for a reset driver to work
> we must do clkdm_deny_idle() and clkdm_allow_idle() as the hwmod
> code does. I gues that really just boils down to doing clk deny
> idle and allow idle on the clockdomain clkctrl clock?

Clkdm handling is done via pdata callbacks, that is a separate topic 
from iclk autoidle. Iclk:s are effectively only for omap3, clkdm 
autoidle / deny_idle etc. are a generic mechanism that must be used on 
omap4+ if you want to prevent autoidle of certain domains/IPs.

-Tero
--
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
Tony Lindgren Oct. 4, 2018, 4:08 p.m. UTC | #5
* Tero Kristo <t-kristo@ti.com> [181004 15:53]:
> On 04/10/18 18:07, Tony Lindgren wrote:
> > * Tero Kristo <t-kristo@ti.com> [181004 14:47]:
> > > On 04/10/18 17:25, Tony Lindgren wrote:
> > > > It seems we should just provide a generic interface for
> > > > clk_allow_autoidle() and clk_deny_autoidle()? Otherwise we'll
> > > > be forever stuck with pdata callbacks it seems.
> > > 
> > > The TI clock driver is actually providing these APIs, so that should be
> > > fine. I don't think there is any use / need for pdata callbacks atm, it just
> > > happens hwmod core is calling these at the moment which might have confused
> > > you.
> > 
> > Hmm OK. So do we already have some way to deny autoidle for a
> > clock from ti-sysc.c driver without pdata callbacks?
> > 
> > Suman pointed out few days ago that for a reset driver to work
> > we must do clkdm_deny_idle() and clkdm_allow_idle() as the hwmod
> > code does. I gues that really just boils down to doing clk deny
> > idle and allow idle on the clockdomain clkctrl clock?
> 
> Clkdm handling is done via pdata callbacks, that is a separate topic from
> iclk autoidle. Iclk:s are effectively only for omap3, clkdm autoidle /
> deny_idle etc. are a generic mechanism that must be used on omap4+ if you
> want to prevent autoidle of certain domains/IPs.

OK thanks.

Tony