Message ID | 20181004055147.23048-1-andreas@kemnade.info (mailing list archive) |
---|---|
Headers | show |
Series | mach-omap2: handle autoidle denial | expand |
* 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
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
* 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
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
* 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