linux-i2c.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Kevin Hilman <khilman@linaro.org>
To: Doug Anderson <dianders@chromium.org>
Cc: Wolfram Sang <wsa@the-dreams.de>,
	Kukjin Kim <kgene.kim@samsung.com>,
	Tomasz Figa <tomasz.figa@gmail.com>,
	Javier Martinez Canillas <javier.martinez@collabora.co.uk>,
	naveen krishna <ch.naveen@samsung.com>,
	Jingoo Han <jg1.han@samsung.com>, Jean Delvare <jdelvare@suse.de>,
	Simon Glass <sjg@google.com>,
	Paul Gortmaker <paul.gortmaker@windriver.com>,
	standby24x7@gmail.com, Sachin Kamat <sachin.kamat@linaro.org>,
	"linux-i2c@vger.kernel.org" <linux-i2c@vger.kernel.org>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>,
	linux-samsung-soc <linux-samsung-soc@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] i2c: exynos5: Properly use the "noirq" variants of suspend/resume
Date: Fri, 20 Jun 2014 16:13:59 -0700	[thread overview]
Message-ID: <7h7g4brx6w.fsf@paris.lan> (raw)
In-Reply-To: <CAD=FV=Uz9O0i2gmuk2+BHa-Tksvyxv0+MTi2UEjVREAMNCK7Ug@mail.gmail.com> (Doug Anderson's message of "Fri, 20 Jun 2014 15:05:56 -0700")

Doug Anderson <dianders@chromium.org> writes:

> Kevin,
>
> On Fri, Jun 20, 2014 at 2:48 PM, Kevin Hilman <khilman@linaro.org> wrote:
>> Hi Doug,
>>
>> Doug Anderson <dianders@chromium.org> writes:
>>
>>> On Thu, Jun 19, 2014 at 11:43 AM, Kevin Hilman <khilman@linaro.org> wrote:
>>>> Doug Anderson <dianders@chromium.org> writes:
>>>>
>>>>> The original code for the exynos i2c controller registered for the
>>>>> "noirq" variants.  However during review feedback it was moved to
>>>>> SIMPLE_DEV_PM_OPS without anyone noticing that it meant we were no
>>>>> longer actually "noirq" (despite functions named
>>>>> exynos5_i2c_suspend_noirq and exynos5_i2c_resume_noirq).
>>>>>
>>>>> i2c controllers that might have wakeup sources on them seem to need to
>>>>> resume at noirq time so that the individual drivers can actually read
>>>>> the i2c bus to handle their wakeup.
>>>>
>>>> I suspect usage of the noirq variants pre-dates the existence of the
>>>> late/early callbacks in the PM core, but based on the description above,
>>>> I suspect what you actually want is the late/early callbacks.
>>>
>>> I think it actually really needs noirq.  ;)
>>
>> Yes, it appears it does.   Objection withdrawn.
>>
>> I just wanted to be sure because since the introduction of late/early,
>> the need for noirq should be pretty rare, but there certainly are needs.
>>
>> <tangent>
>> In this case though, the need for it has more to do with the
>> lack of a way for us to describe non parent-child device dependencies
>> than whether or not IRQs are enabled or not.
>> </tangent>
>
> Actually, I'm not sure that's true, but I'll talk through it and you
> can point to where I'm wrong (I often am!)
>
> If you're a wakeup device then you need to be ready to handle
> interrupts as soon as the "noirq" phase of resume is done, right?

As soon as the noirq phase of your own driver is done, correct.

> Said another way: you need to be ready to handle interrupts _before_
> the normal resume code is called and be ready to handle interrupts
> even _before_ the early resume code is called.

Correct.

> That means if you are implementing a bus that's needed by any devices
> with wakeup interrupts then it's your responsibility to also be
> prepared to run this early.
>
> In this particular case the max77686 driver doesn't need to do
> anything at all to be ready to handle interrupts.  It's suspend and
> resume code is just boilerplate "enable wakeups / disable wakeups" and
> it has no "noirq" code.  The max77686 driver doesn't have any "noirq"
> wake call because it would just be empty.
>
> Said another way: the problem isn't that the max77686 wakeup gets
> called before the i2c wakeup.  The problem is that i2c is needed ASAP
> once IRQs are enabled and thus needs to be run noirq.
>
> Does that sound semi-correct?

Yes that's correct.

My point above was (trying to be) that ultimately this is an ordering
issue.  e.g. the bus device needs to be "ready" before wakeup devices on
that bus can handle wakeup interrupts etc.  The way we're handling that
ordering is by the implied ordering of noirq, late/early and "normal"
callbacks.  That's convenient, but not exactly obvious.   

It works because we dont' typically need too many layers here, but it
would be much more understandable if we could describe this kind of
dependency in a way that the suspend/resume code would suspend/resume
things in the right order rather than by tinkering with callback levels
(since otherwise suspend/resume ordering just depends on probe order.)

This issue then usually gets me headed down my usual rant path about how
I think runtime PM is much better suited for handling ordering and
dependencies becuase it automatically handles parent/child dependencies
and non parent/child dependencies can be handled by taking advantage of
the get/put APIs which are refcounted, ect etc. but that's another can
worms.

Kevin

  reply	other threads:[~2014-06-20 23:13 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-19  5:21 [PATCH] i2c: exynos5: Properly use the "noirq" variants of suspend/resume Doug Anderson
2014-06-19 18:43 ` Kevin Hilman
2014-06-19 22:43   ` Doug Anderson
2014-06-20 21:48     ` Kevin Hilman
     [not found]       ` <7hwqcbs166.fsf-4poPxKt068f/PtFMR13I2A@public.gmane.org>
2014-06-20 22:05         ` Doug Anderson
2014-06-20 23:13           ` Kevin Hilman [this message]
2014-06-20 23:53             ` Doug Anderson
     [not found]               ` <CAD=FV=VmPMf6tCNmKJ1o5J7PyAXoU8fb6+s+Fkv18FH2WaQp7A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-06-20 23:59                 ` Tomasz Figa
2014-06-23 22:01                   ` Doug Anderson
2014-06-23 22:19                     ` Kevin Hilman
2014-06-23 22:24                       ` Tomasz Figa
2014-06-23 22:27                       ` Doug Anderson
     [not found]                         ` <CAD=FV=U0P2kyfnxdU2E1Gm8TdD_cFd6brmtQ7-gpajNJuKmWSA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-06-23 22:31                           ` Tomasz Figa
     [not found]                             ` <53A8AAC9.8030407-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2014-06-23 22:46                               ` Doug Anderson
2014-06-23 23:35                               ` Kevin Hilman
2014-06-23 22:23                 ` Kevin Hilman
     [not found]                   ` <7h38evp8ng.fsf-4poPxKt068f/PtFMR13I2A@public.gmane.org>
2014-06-23 22:42                     ` Doug Anderson
2014-06-23 23:31                       ` Kevin Hilman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7h7g4brx6w.fsf@paris.lan \
    --to=khilman@linaro.org \
    --cc=ch.naveen@samsung.com \
    --cc=dianders@chromium.org \
    --cc=javier.martinez@collabora.co.uk \
    --cc=jdelvare@suse.de \
    --cc=jg1.han@samsung.com \
    --cc=kgene.kim@samsung.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=paul.gortmaker@windriver.com \
    --cc=sachin.kamat@linaro.org \
    --cc=sjg@google.com \
    --cc=standby24x7@gmail.com \
    --cc=tomasz.figa@gmail.com \
    --cc=wsa@the-dreams.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).