Re: [PATCH RFC] w1: omap: disable iclk autoidle

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Tony,

On Mon, 1 Oct 2018 07:47:45 -0700
Tony Lindgren <tony@xxxxxxxxxxx> wrote:

> * Andreas Kemnade <andreas@xxxxxxxxxxxx> [180929 22:39]:
> > +	 * needed to disable autoidle, if system power state is too low
> > +	 * hdq transactions will not work correctly, although registers
> > +	 * are accessible.
> > +	 * According to AM/DM3730 TRM p.2879 the hwmod has to way to
> > +	 * keep iclk running during a transfer if autoidle is enabled  
> 
> Sounds like hdq1w is not wake-up capable and the uart is blocking
> deeper SoC idle states. To me it seems that you should rather just
> use pm_qos in the hdq1w driver to block SoC idle for the duration
> of transfers.
> 
> We had a similar problem with audio playback glitches a while
> back, see commit 9834ffd1ecc3 ("ASoC: omap-mcbsp: Add PM QoS
> support for McBSP to prevent glitches"). See how it does
> pm_qos_add_request(), pm_qos_update_request() and
> pm_qos_remove_request().

I found this interesting function:
/**
 * _setup_iclk_autoidle - configure an IP block's interface clocks
 * @oh: struct omap_hwmod *
 *
 * Set up the module's interface clocks.  XXX This function is still mostly
 * a stub; implementing this properly requires iclk autoidle usecounting in
 * the clock code.   No return value.
 */
static void __init _setup_iclk_autoidle(struct omap_hwmod *oh)
{
        struct omap_hwmod_ocp_if *os;

        if (oh->_state != _HWMOD_STATE_INITIALIZED)
                return;

        list_for_each_entry(os, &oh->slave_ports, node) {
                if (!os->_clk)
                        continue;

                if (os->flags & OCPIF_SWSUP_IDLE) {
                        /* XXX omap_iclk_deny_idle(c); */
                } else {
                        /* XXX omap_iclk_allow_idle(c); */
                        clk_enable(os->_clk);
                }
        }

        return;
}

So at first glance it looks like we just need to uncomment the first XXX
line here. But why the heck we need usecounting for the autoidle
stuff? How do I test it (if I would implement some counter)?
IMHO the clean solution for the hdq problem would be to fix this
function.

Regards,
Andreas

Attachment: pgppIUM_C8C0G.pgp
Description: OpenPGP digital signature


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux