From: Hans de Goede <hdegoede@redhat.com>
To: Olof Johansson <olof@lixom.net>, Ulf Hansson <ulf.hansson@linaro.org>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-mmc@vger.kernel.org" <linux-mmc@vger.kernel.org>,
linux-pm@vger.kernel.org,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Linus Walleij <linus.walleij@linaro.org>,
Mark Brown <broonie@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
Alexandre Courbot <gnurou@gmail.com>,
Arend van Spriel <arend@broadcom.com>,
Sascha Hauer <s.hauer@pengutronix.de>,
Chris Ball <chris@printf.net>, Chen-Yu Tsai <wens@csie.org>,
Russell King <linux@arm.linux.org.uk>,
Tomasz Figa <tomasz.figa@gmail.com>,
Rob Herring <robh+dt@kernel.org>, Pawel Moll <pawel.moll@arm.com>,
Mark Rutland <mark.rutland@arm.com>
Subject: Re: [RFC 1/2] pwrseq: Add subsystem to handle complex power sequences
Date: Fri, 20 Jun 2014 09:27:18 +0200 [thread overview]
Message-ID: <53A3E256.8090307@redhat.com> (raw)
In-Reply-To: <CAOesGMj6xp_cXZRuqL5HOPX4AeDuCkj69E32xuPVgGk4xABLbQ@mail.gmail.com>
Hi,
On 06/19/2014 07:18 PM, Olof Johansson wrote:
> Hi,
>
>
>
> On Thu, Jun 19, 2014 at 6:04 AM, Ulf Hansson <ulf.hansson@linaro.org> wrote:
>> The pwrseq subsystem handles complex power sequences, typically useful
>> for subsystems that makes use of discoverable buses, like for example
>> MMC and I2C.
>>
>> The pwrseq subsystem is dependant on CONFIG_OF to be able to parse a DT
>> childnode to find out what power sequence method to bind for a device.
>>
>> From the DT childnode, the pwrseq DT parser tries to locate a
>> "power-method" property, which string is matched towards the list of
>> supported pwrseq methods.
>>
>> Each pwrseq method implements it's own power sequence and interfaces
>> the pwrseq core through a few callback functions.
>>
>> To instantiate a pwrseq method, clients shall use the devm_pwrseq_get()
>> API. If needed, clients can explicity drop the references to a pwrseq
>> method using devm_pwrseq_put() API.
>>
>> Besides instantiation, the pwrseq API provides clients opportunity to
>> select a certain power state. In this intial version, PWRSEQ_POWER_ON
>> and PWRSEQ_POWER_OFF are supported. Those are also mandatory for each
>> pwrseq method to support.
>>
>> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
>> ---
>> .../devicetree/bindings/pwrseq/pwrseq.txt | 48 ++++++
>> drivers/Makefile | 2 +-
>> drivers/pwrseq/Makefile | 2 +
>> drivers/pwrseq/core.c | 175 ++++++++++++++++++++
>> drivers/pwrseq/core.h | 37 +++++
>> drivers/pwrseq/method.c | 38 +++++
>> include/linux/pwrseq.h | 50 ++++++
>> 7 files changed, 351 insertions(+), 1 deletion(-)
>> create mode 100644 Documentation/devicetree/bindings/pwrseq/pwrseq.txt
>> create mode 100644 drivers/pwrseq/Makefile
>> create mode 100644 drivers/pwrseq/core.c
>> create mode 100644 drivers/pwrseq/core.h
>> create mode 100644 drivers/pwrseq/method.c
>> create mode 100644 include/linux/pwrseq.h
>>
>> diff --git a/Documentation/devicetree/bindings/pwrseq/pwrseq.txt b/Documentation/devicetree/bindings/pwrseq/pwrseq.txt
>> new file mode 100644
>> index 0000000..80848ae
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/pwrseq/pwrseq.txt
>> @@ -0,0 +1,48 @@
>> +Power sequence DT bindings
>> +
>> +Each power sequence method has a corresponding "power-method" property string.
>> +This property shall be set in a subnode for a device. That subnode should also
>> +describe resourses which are specific to that power method.
>> +
>> +Do note, power sequences as such isn't encoded through DT. Instead those are
>> +implemented by each power method.
>> +
>> +Required subnode properties:
>> +- power-method: should contain the string for the power method to bind.
>> +
>> + Supported power methods: None.
>> +
>> +Example:
>> +
>> +Note, the "clock" power method in this example isn't actually supported, but
>> +used to visualize how a childnode could be described.
>> +
>> +// WLAN SDIO channel
>> +sdi1_per2@80118000 {
>> + compatible = "arm,pl18x", "arm,primecell";
>> + reg = <0x80118000 0x1000>;
>> + interrupts = <0 50 IRQ_TYPE_LEVEL_HIGH>;
>> +
>> + dmas = <&dma 32 0 0x2>, /* Logical - DevToMem */
>> + <&dma 32 0 0x0>; /* Logical - MemToDev */
>> + dma-names = "rx", "tx";
>> +
>> + clocks = <&prcc_kclk 2 4>, <&prcc_pclk 2 6>;
>> + clock-names = "sdi", "apb_pclk";
>> +
>> + arm,primecell-periphid = <0x10480180>;
>> + max-frequency = <100000000>;
>> + bus-width = <4>;
>> + non-removable;
>> + pinctrl-names = "default", "sleep";
>> + pinctrl-0 = <&sdi1_default_mode>;
>> + pinctrl-1 = <&sdi1_sleep_mode>;
>> +
>> + status = "okay";
>> +
>> + pwrseq: pwrseq1 {
>> + power-method = "clock";
>> + clocks = <&someclk 1 2>, <&someclk 3 4>;
>> + clock-names = "pwrseq1", "pwrseq2";
>> + };
>
> I am strongly against the subnode approach as a general framework. We
> don't have a subnode for interrupts, nor for clocks or pinctrl. So why
> should we have it for the power sequencing?
>
> Sure, that fits the linux driver model better, but that's irrelevant
> w.r.t. describing the hardware.
Actually this is about describing the hardware, when you have e.g. an
mmc device which needs pwrseq, there will be 2 sets of certain
resources, ie clocks for the host controller and clocks going directly
to the mmc device. I think putting those both in the same subnode is
a BAD idea, so we really do need a subnode to group the pwrseq resources
together.
Regards,
Hans
WARNING: multiple messages have this Message-ID (diff)
From: hdegoede@redhat.com (Hans de Goede)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC 1/2] pwrseq: Add subsystem to handle complex power sequences
Date: Fri, 20 Jun 2014 09:27:18 +0200 [thread overview]
Message-ID: <53A3E256.8090307@redhat.com> (raw)
In-Reply-To: <CAOesGMj6xp_cXZRuqL5HOPX4AeDuCkj69E32xuPVgGk4xABLbQ@mail.gmail.com>
Hi,
On 06/19/2014 07:18 PM, Olof Johansson wrote:
> Hi,
>
>
>
> On Thu, Jun 19, 2014 at 6:04 AM, Ulf Hansson <ulf.hansson@linaro.org> wrote:
>> The pwrseq subsystem handles complex power sequences, typically useful
>> for subsystems that makes use of discoverable buses, like for example
>> MMC and I2C.
>>
>> The pwrseq subsystem is dependant on CONFIG_OF to be able to parse a DT
>> childnode to find out what power sequence method to bind for a device.
>>
>> From the DT childnode, the pwrseq DT parser tries to locate a
>> "power-method" property, which string is matched towards the list of
>> supported pwrseq methods.
>>
>> Each pwrseq method implements it's own power sequence and interfaces
>> the pwrseq core through a few callback functions.
>>
>> To instantiate a pwrseq method, clients shall use the devm_pwrseq_get()
>> API. If needed, clients can explicity drop the references to a pwrseq
>> method using devm_pwrseq_put() API.
>>
>> Besides instantiation, the pwrseq API provides clients opportunity to
>> select a certain power state. In this intial version, PWRSEQ_POWER_ON
>> and PWRSEQ_POWER_OFF are supported. Those are also mandatory for each
>> pwrseq method to support.
>>
>> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
>> ---
>> .../devicetree/bindings/pwrseq/pwrseq.txt | 48 ++++++
>> drivers/Makefile | 2 +-
>> drivers/pwrseq/Makefile | 2 +
>> drivers/pwrseq/core.c | 175 ++++++++++++++++++++
>> drivers/pwrseq/core.h | 37 +++++
>> drivers/pwrseq/method.c | 38 +++++
>> include/linux/pwrseq.h | 50 ++++++
>> 7 files changed, 351 insertions(+), 1 deletion(-)
>> create mode 100644 Documentation/devicetree/bindings/pwrseq/pwrseq.txt
>> create mode 100644 drivers/pwrseq/Makefile
>> create mode 100644 drivers/pwrseq/core.c
>> create mode 100644 drivers/pwrseq/core.h
>> create mode 100644 drivers/pwrseq/method.c
>> create mode 100644 include/linux/pwrseq.h
>>
>> diff --git a/Documentation/devicetree/bindings/pwrseq/pwrseq.txt b/Documentation/devicetree/bindings/pwrseq/pwrseq.txt
>> new file mode 100644
>> index 0000000..80848ae
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/pwrseq/pwrseq.txt
>> @@ -0,0 +1,48 @@
>> +Power sequence DT bindings
>> +
>> +Each power sequence method has a corresponding "power-method" property string.
>> +This property shall be set in a subnode for a device. That subnode should also
>> +describe resourses which are specific to that power method.
>> +
>> +Do note, power sequences as such isn't encoded through DT. Instead those are
>> +implemented by each power method.
>> +
>> +Required subnode properties:
>> +- power-method: should contain the string for the power method to bind.
>> +
>> + Supported power methods: None.
>> +
>> +Example:
>> +
>> +Note, the "clock" power method in this example isn't actually supported, but
>> +used to visualize how a childnode could be described.
>> +
>> +// WLAN SDIO channel
>> +sdi1_per2 at 80118000 {
>> + compatible = "arm,pl18x", "arm,primecell";
>> + reg = <0x80118000 0x1000>;
>> + interrupts = <0 50 IRQ_TYPE_LEVEL_HIGH>;
>> +
>> + dmas = <&dma 32 0 0x2>, /* Logical - DevToMem */
>> + <&dma 32 0 0x0>; /* Logical - MemToDev */
>> + dma-names = "rx", "tx";
>> +
>> + clocks = <&prcc_kclk 2 4>, <&prcc_pclk 2 6>;
>> + clock-names = "sdi", "apb_pclk";
>> +
>> + arm,primecell-periphid = <0x10480180>;
>> + max-frequency = <100000000>;
>> + bus-width = <4>;
>> + non-removable;
>> + pinctrl-names = "default", "sleep";
>> + pinctrl-0 = <&sdi1_default_mode>;
>> + pinctrl-1 = <&sdi1_sleep_mode>;
>> +
>> + status = "okay";
>> +
>> + pwrseq: pwrseq1 {
>> + power-method = "clock";
>> + clocks = <&someclk 1 2>, <&someclk 3 4>;
>> + clock-names = "pwrseq1", "pwrseq2";
>> + };
>
> I am strongly against the subnode approach as a general framework. We
> don't have a subnode for interrupts, nor for clocks or pinctrl. So why
> should we have it for the power sequencing?
>
> Sure, that fits the linux driver model better, but that's irrelevant
> w.r.t. describing the hardware.
Actually this is about describing the hardware, when you have e.g. an
mmc device which needs pwrseq, there will be 2 sets of certain
resources, ie clocks for the host controller and clocks going directly
to the mmc device. I think putting those both in the same subnode is
a BAD idea, so we really do need a subnode to group the pwrseq resources
together.
Regards,
Hans
next prev parent reply other threads:[~2014-06-20 7:27 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-19 13:04 [RFC 0/2] pwrseq: Add subsystem for power sequences Ulf Hansson
2014-06-19 13:04 ` Ulf Hansson
2014-06-19 13:04 ` [RFC 1/2] pwrseq: Add subsystem to handle complex " Ulf Hansson
2014-06-19 13:04 ` Ulf Hansson
2014-06-19 14:03 ` Hans de Goede
2014-06-19 14:03 ` Hans de Goede
2014-06-19 14:23 ` Hans de Goede
2014-06-19 14:23 ` Hans de Goede
2014-07-01 16:33 ` Ulf Hansson
2014-07-01 16:33 ` Ulf Hansson
2014-06-19 17:18 ` Olof Johansson
2014-06-19 17:18 ` Olof Johansson
2014-06-20 7:27 ` Hans de Goede [this message]
2014-06-20 7:27 ` Hans de Goede
2014-06-20 8:02 ` Olof Johansson
2014-06-20 8:02 ` Olof Johansson
2014-06-20 8:14 ` Hans de Goede
2014-06-20 8:14 ` Hans de Goede
[not found] ` <53A3ED65.80605-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2014-07-01 16:42 ` Ulf Hansson
2014-07-01 16:42 ` Ulf Hansson
2014-07-01 16:42 ` Ulf Hansson
2014-07-01 16:51 ` Arnd Bergmann
2014-07-01 16:51 ` Arnd Bergmann
2014-07-01 16:56 ` Arend van Spriel
2014-07-01 16:56 ` Arend van Spriel
2014-06-20 15:42 ` Arnd Bergmann
2014-06-20 15:42 ` Arnd Bergmann
2014-06-20 15:42 ` Arnd Bergmann
2014-07-01 16:56 ` Ulf Hansson
2014-07-01 16:56 ` Ulf Hansson
2014-06-19 13:04 ` [RFC 2/2] mmc: core: Add support for " Ulf Hansson
2014-06-19 13:04 ` Ulf Hansson
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=53A3E256.8090307@redhat.com \
--to=hdegoede@redhat.com \
--cc=arend@broadcom.com \
--cc=arnd@arndb.de \
--cc=broonie@kernel.org \
--cc=chris@printf.net \
--cc=devicetree@vger.kernel.org \
--cc=gnurou@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=mark.rutland@arm.com \
--cc=olof@lixom.net \
--cc=pawel.moll@arm.com \
--cc=robh+dt@kernel.org \
--cc=s.hauer@pengutronix.de \
--cc=tomasz.figa@gmail.com \
--cc=ulf.hansson@linaro.org \
--cc=wens@csie.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.