From: Ulf Hansson <ulf.hansson@linaro.org>
To: Dave Gerlach <d-gerlach@ti.com>
Cc: Rob Herring <robh@kernel.org>,
Kevin Hilman <khilman@baylibre.com>,
Tero Kristo <t-kristo@ti.com>,
"Rafael J . Wysocki" <rjw@rjwysocki.net>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-pm@vger.kernel.org" <linux-pm@vger.kernel.org>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
Nishanth Menon <nm@ti.com>, Keerthy <j-keerthy@ti.com>,
Russell King <rmk+kernel@armlinux.org.uk>,
Sudeep Holla <sudeep.holla@arm.com>,
Santosh Shilimkar <ssantosh@kernel.org>,
Lokesh Vutla <lokeshvutla@ti.com>
Subject: Re: [PATCH v3 2/4] dt-bindings: Add TI SCI PM Domains
Date: Wed, 25 Jan 2017 22:13:43 +0100 [thread overview]
Message-ID: <CAPDyKFp6heJ0c=iKT1VYm4uGf04RehJ=vVyNHQu5aC-vNLHvVg@mail.gmail.com> (raw)
In-Reply-To: <23936395-d653-56c8-13f9-6dfeb6e9257b@ti.com>
On 25 January 2017 at 17:59, Dave Gerlach <d-gerlach@ti.com> wrote:
> On 01/24/2017 04:03 AM, Ulf Hansson wrote:
>>
>> On 23 January 2017 at 21:11, Dave Gerlach <d-gerlach@ti.com> wrote:
>>>
>>> On 01/20/2017 10:52 AM, Ulf Hansson wrote:
>>>>
>>>>
>>>> [...]
>>>>
>>>>>>> Another option is create something new either common or TI SCI
>>>>>>> specific. It could be just a table of ids and phandles in the SCI
>>>>>>> node. I'm much more comfortable with an isolated property in one node
>>>>>>> than something scattered throughout the DT.
>>>>>>
>>>>>>
>>>>>>
>>>>>> To me, this seems like the best possible solution.
>>>>>>
>>>>>> However, perhaps we should also consider the SCPI Generic power domain
>>>>>> (drivers/firmware/scpi_pm_domain.c), because I believe it's closely
>>>>>> related.
>>>>>> To change the power state of a device, this PM domain calls
>>>>>> scpi_device_set|get_power_state() (drivers/firmware/arm_scpi.c), which
>>>>>> also needs a device id as a parameter. Very similar to our case with
>>>>>> the TI SCI domain.
>>>>>>
>>>>>> Currently these SCPI device ids lacks corresponding DT bindings, so
>>>>>> the scpi_pm_domain tries to work around it by assigning ids
>>>>>> dynamically at genpd creation time.
>>>>>>
>>>>>> That makes me wonder, whether we should think of something
>>>>>> common/generic?
>>>>>
>>>>>
>>>>>
>>>>> When you say something common/generic, do you mean a better binding for
>>>>> genpd,
>>>>> or something bigger than that like a new driver? Because I do think a
>>>>> phandle
>>>>> cell left open for the genpd provider to interpret solves both the scpi
>>>>> and
>>>>> ti-sci problem we are facing here in the best way. Using generic PM
>>>>> domains lets
>>>>> us do exactly what we want apart from interpreting the phandle cell
>>>>> with
>>>>> our
>>>>> driver, and I feel like anything else we try at this point is just
>>>>> going
>>>>> to be
>>>>> to work around that. Is bringing back genpd xlate something we can
>>>>> discuss?
>>>>
>>>>
>>>>
>>>> Bringing back xlate, how would that help? Wouldn't that just mean that
>>>> you will get one genpd per device? That's not an option, I think we
>>>> are all in agreement to that.
>>>
>>>
>>>
>>> Sure, perhaps the custom xlate wouldn't be the right way to do it, as we
>>> wouldn't be able to associate a device directly to a phandle, at least
>>> with
>>> how it was implemented before, but I think we can skip that entirely.
>>> Does
>>> opening up the interpretation of the cells of the 'power-domains' phandle
>>> not solve all of these issues? Is that out of the question?
>>>
>>> genpd_xlate_simple currently just makes sure the args_count of the
>>> 'power-domains' phandle was zero and bails if it was not. Why couldn't we
>>> remove this check and let the driver interpret it while still using
>>> of_genpd_add_provider_simple to register the provider? It's still a
>>> 'simple'
>>> provider from the perspective of the genpd framework and the actual pm
>>> domain mapping will not change, but now the driver can parse the cells
>>> and
>>> do whatever it needs to, such as reading a device id.
>>>
>>> I think that's a bit more flexible and will avoid breaking anything that
>>> is
>>> there today.
>>
>>
>> Would you mind providing an example? Perhaps also some code snippets
>> dealing with the parsing?
>
>
> So again the goal of this is to move the ti,sci-id value back to
> power-domains phandle instead of having a separate property, so that would
> be step one in the DT. Then in the power-domains node change
> #power-domain-cells to one. And then from there, the only change to the
> genpd framework is this:
>
> diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
> index a5e1262b964b..b82e61f0bcfa 100644
> --- a/drivers/base/power/domain.c
> +++ b/drivers/base/power/domain.c
> @@ -1603,8 +1603,6 @@ static struct generic_pm_domain genpd_xlate_simple
> struct of_phandle_args *genpdspec,
> void *data)
> {
> - if (genpdspec->args_count != 0)
> - return ERR_PTR(-EINVAL);
> return data;
> }
>
>
> because genpd_xlate_simple only checks that the phandle is zero so that it
> can fail if it is not, but there's no functional reason it needs to do this.
> The genpd framework works as it did before no matter what the cells are set
> to if using of_genpd_add_provider_simple. Then in the attach_dev callback
> inside the ti_sci_pm_domains driver instead of doing
>
> ret = of_property_read_u32(np, "ti,sci-id", &idx);
>
> to read the ti,sc-id for a device into idx we can now do:
>
> ret = of_parse_phandle_with_args(np, "power-domains",
> "#power-domain-cells", 0, &pd_args);
> idx = pd_args.args[0];
>
> or even simpler from within our driver
>
> ret = of_property_read_u32_index(np, "power-domains", 1, &idx);
>
> To read the value into idx.
>
> This requires minimal changes to the genpd framework and gives the option
> for the driver to interpret the cell manually when using a simple provider.
> The genpd framework still uses the phandle just to get the power-domain
> device and the cells are left entirely up to the driver to interpret, but if
> desired you could still use the genpd onecell driver for a specific use of
> the phandle cell, or use it with zero cells.
>
> I can send out an updated series if there are no major objections, or just
> to start discussion there.
Ok, this seems to work! I am ready to review! :-)
Of course, don't forget to update the existing DT doc for the power
domain bindings.
Kind regards
Uffe
next prev parent reply other threads:[~2017-01-25 21:13 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-04 20:55 [PATCH v3 0/4] ARM: K2G: Add support for TI-SCI Generic PM Domains Dave Gerlach
2017-01-04 20:55 ` [PATCH v3 1/4] PM / Domains: Add generic data pointer to genpd data struct Dave Gerlach
2017-01-04 20:55 ` [PATCH v3 2/4] dt-bindings: Add TI SCI PM Domains Dave Gerlach
2017-01-09 17:50 ` Rob Herring
2017-01-09 17:57 ` Dave Gerlach
2017-01-11 21:34 ` Rob Herring
2017-01-12 15:27 ` Dave Gerlach
2017-01-13 19:25 ` Rob Herring
2017-01-13 20:28 ` Dave Gerlach
2017-01-14 2:40 ` Rob Herring
2017-01-16 22:12 ` Dave Gerlach
2017-01-17 7:48 ` Tero Kristo
2017-01-17 23:37 ` Rob Herring
2017-01-18 0:07 ` Kevin Hilman
2017-01-18 23:03 ` Rob Herring
2017-01-20 14:00 ` Ulf Hansson
2017-01-20 14:18 ` Sudeep Holla
2017-01-20 14:20 ` Dave Gerlach
2017-01-20 16:52 ` Ulf Hansson
2017-01-23 20:11 ` Dave Gerlach
2017-01-24 10:03 ` Ulf Hansson
2017-01-25 16:59 ` Dave Gerlach
2017-01-25 21:13 ` Ulf Hansson [this message]
2017-01-25 22:32 ` Rob Herring
2017-01-26 15:09 ` Dave Gerlach
2017-01-26 16:00 ` Rob Herring
2017-01-04 20:55 ` [PATCH v3 3/4] soc: ti: Add ti_sci_pm_domains driver Dave Gerlach
2017-01-04 20:55 ` [PATCH v3 4/4] ARM: keystone: Drop PM domain support for k2g Dave Gerlach
2017-01-04 21:54 ` [PATCH v3 0/4] ARM: K2G: Add support for TI-SCI Generic PM Domains Santosh Shilimkar
2017-01-04 22:06 ` Dave Gerlach
2017-01-19 17:51 ` santosh.shilimkar
2017-01-19 18:59 ` Dave Gerlach
2017-01-19 19:04 ` Santosh Shilimkar
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='CAPDyKFp6heJ0c=iKT1VYm4uGf04RehJ=vVyNHQu5aC-vNLHvVg@mail.gmail.com' \
--to=ulf.hansson@linaro.org \
--cc=d-gerlach@ti.com \
--cc=devicetree@vger.kernel.org \
--cc=j-keerthy@ti.com \
--cc=khilman@baylibre.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=lokeshvutla@ti.com \
--cc=nm@ti.com \
--cc=rjw@rjwysocki.net \
--cc=rmk+kernel@armlinux.org.uk \
--cc=robh@kernel.org \
--cc=ssantosh@kernel.org \
--cc=sudeep.holla@arm.com \
--cc=t-kristo@ti.com \
/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).