From: Paul Cercueil <paul@crapouillou.net>
To: Rob Herring <robh@kernel.org>
Cc: Thierry Reding <thierry.reding@gmail.com>,
Mark Rutland <mark.rutland@arm.com>,
Daniel Lezcano <daniel.lezcano@linaro.org>,
Thomas Gleixner <tglx@linutronix.de>,
Wim Van Sebroeck <wim@linux-watchdog.org>,
Guenter Roeck <linux@roeck-us.net>,
Ralf Baechle <ralf@linux-mips.org>,
Paul Burton <paul.burton@mips.com>,
Jonathan Corbet <corbet@lwn.net>,
Michael Turquette <mturquette@baylibre.com>,
Stephen Boyd <sboyd@kernel.org>, Lee Jones <lee.jones@linaro.org>,
linux-pwm@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-watchdog@vger.kernel.org,
linux-mips@linux-mips.org, linux-doc@vger.kernel.org,
linux-clk@vger.kernel.org
Subject: Re: [PATCH v5 04/21] dt-bindings: Add doc for the Ingenic TCU drivers
Date: Tue, 31 Jul 2018 00:01:01 +0200 [thread overview]
Message-ID: <1532988062.4702.2@smtp.crapouillou.net> (raw)
In-Reply-To: <20180725152105.GA6347@rob-hp-laptop>
Hi Rob,
Le mer. 25 juil. 2018 =E0 17:21, Rob Herring <robh@kernel.org> a =E9crit :
> On Wed, Jul 25, 2018 at 01:19:41AM +0200, Paul Cercueil wrote:
>> Add documentation about how to properly use the Ingenic TCU
>> (Timer/Counter Unit) drivers from devicetree.
>>=20
>> Signed-off-by: Paul Cercueil <paul@crapouillou.net>
>> ---
>> .../devicetree/bindings/pwm/ingenic,jz47xx-pwm.txt | 24 +---
>> .../devicetree/bindings/timer/ingenic,tcu.txt | 147=20
>> +++++++++++++++++++++
>> .../bindings/watchdog/ingenic,jz4740-wdt.txt | 17 +--
>> 3 files changed, 151 insertions(+), 37 deletions(-)
>> create mode 100644=20
>> Documentation/devicetree/bindings/timer/ingenic,tcu.txt
>>=20
>> v4: New patch in this series. Corresponds to V2 patches 3-4-5 with
>> added content.
>>=20
>> v5: - Edited PWM/watchdog DT bindings documentation to point to=20
>> the new
>> document.
>> - Moved main document to
>> Documentation/devicetree/bindings/timer/ingenic,tcu.txt
>> - Updated documentation to reflect the new devicetree bindings.
>>=20
>> diff --git=20
>> a/Documentation/devicetree/bindings/pwm/ingenic,jz47xx-pwm.txt=20
>> b/Documentation/devicetree/bindings/pwm/ingenic,jz47xx-pwm.txt
>> index 7d9d3f90641b..a722cdde3aa7 100644
>> --- a/Documentation/devicetree/bindings/pwm/ingenic,jz47xx-pwm.txt
>> +++ b/Documentation/devicetree/bindings/pwm/ingenic,jz47xx-pwm.txt
>> @@ -1,25 +1,5 @@
>> Ingenic JZ47xx PWM Controller
>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D
>>=20
>> -Required properties:
>> -- compatible: One of:
>> - * "ingenic,jz4740-pwm"
>> - * "ingenic,jz4770-pwm"
>> - * "ingenic,jz4780-pwm"
>> -- #pwm-cells: Should be 3. See pwm.txt in this directory for a=20
>> description
>> - of the cells format.
>> -- clocks : phandle to the external clock.
>> -- clock-names : Should be "ext".
>> -
>> -
>> -Example:
>> -
>> - pwm: pwm@10002000 {
>> - compatible =3D "ingenic,jz4740-pwm";
>> - reg =3D <0x10002000 0x1000>;
>> -
>> - #pwm-cells =3D <3>;
>> -
>> - clocks =3D <&ext>;
>> - clock-names =3D "ext";
>> - };
>> +This documentation has moved; for a description of the devicetree=20
>> bindings of
>> +this driver, please refer to ../timer/ingenic,tcu.txt.
>=20
> This should be evident from the git log. Just remove it.
Ok.
>> diff --git=20
>> a/Documentation/devicetree/bindings/timer/ingenic,tcu.txt=20
>> b/Documentation/devicetree/bindings/timer/ingenic,tcu.txt
>> new file mode 100644
>> index 000000000000..65d125b460aa
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/timer/ingenic,tcu.txt
>> @@ -0,0 +1,147 @@
>> +Ingenic JZ47xx SoCs Timer/Counter Unit devicetree bindings
>> +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>> +
>> +For a description of the TCU hardware and drivers, have a look at
>> +Documentation/mips/ingenic-tcu.txt.
>> +
>> +Required properties:
>> +
>> +- compatible: Must be one of:
>> + * ingenic,jz4740-tcu
>> + * ingenic,jz4725b-tcu
>> + * ingenic,jz4770-tcu
>> +- reg: Should be the offset/length value corresponding to the TCU=20
>> registers
>=20
>> +- #address-cells: Should be <1>;
>> +- #size-cells: Should be <1>;
>> +- ranges: Should be one range for the full TCU registers area
>=20
> These can all be implied.
Ok.
>> +- clocks: List of phandle & clock specifiers for clocks external=20
>> to the TCU.
>> + The "pclk", "rtc", "ext" and "tcu" clocks should be provided.
>> +- clock-names: List of name strings for the external clocks.
>> +- #clock-cells: Should be <1>;
>> + Clock consumers specify this argument to identify a clock. The=20
>> valid values
>> + may be found in <dt-bindings/clock/ingenic,tcu.h>.
>> +- interrupt-controller : Identifies the node as an interrupt=20
>> controller
>> +- #interrupt-cells : Specifies the number of cells needed to=20
>> encode an
>> + interrupt source. The value should be 1.
>> +- interrupt-parent : phandle of the interrupt controller.
>> +- interrupts : Specifies the interrupt the controller is connected=20
>> to.
>=20
> How many and what are they. The example shows there are 3.
They are 2 or 3, and they are all the same (three parent IRQs for one=20
irqchip).
It's explained in the hardware doc, should I add it here as well?
>> +
>> +Optional properties:
>> +
>> +- ingenic,timer-channel: Specifies the TCU channel that should be=20
>> used as
>> + system timer. If not provided, the TCU channel 0 is used for the=20
>> system timer.
>> +
>> +- ingenic,clocksource-channel: Specifies the TCU channel that=20
>> should be used
>> + as clocksource and sched_clock. It must be a different channel=20
>> than the one
>> + used as system timer. If not provided, neither a clocksource nor=20
>> a
>> + sched_clock is instantiated.
>=20
> clocksource and sched_clock are Linux specific and don't belong in DT.
> You should define properties of the hardware or use existing=20
> properties
> like interrupts or clocks to figure out which channel to use. For
> example, if some channels don't have an interrupt, then use them for
> clocksource and not a clockevent. Or you could have timers that run in
> low-power modes or not. If all the channels are identical, then it
> shouldn't matter which ones the OS picks.
We already talked about that. All the TCU channels can be used for PWM.
The problem is I cannot know from the driver's scope which channels will
be free and which channels will be requested for PWM. You suggested=20
that I
parse the devicetree for clients, and I did that in the V3/V4 patchset.=20
But
it only works for clients requesting through devicetree, not from=20
platform
code or even sysfs.
One thing I can try is to dynamically change the channels the system=20
timer
and clocksource are using when the current ones are requested for PWM.=20
But
that sounds hardcore...
>> +
>> +
>> +Children nodes
>> +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>> +
>> +
>> +PWM node:
>> +---------
>> +
>> +Required properties:
>> +
>> +- compatible: Must be one of:
>> + * ingenic,jz4740-pwm
>> + * ingenic,jz4725b-pwm
>> +- #pwm-cells: Should be 3. See ../pwm/pwm.txt for a description of=20
>> the cell
>> + format.
>> +- clocks: List of phandle & clock specifiers for the TCU clocks.
>> +- clock-names: List of name strings for the TCU clocks.
>> +
>> +
>> +Watchdog node:
>> +--------------
>> +
>> +Required properties:
>> +
>> +- compatible: Must be one of:
>> + * ingenic,jz4740-watchdog
>> + * ingenic,jz4780-watchdog
>> +- clocks: phandle to the RTC clock
>> +- clock-names: should be "rtc"
>> +
>> +
>> +OST node:
>> +---------
>> +
>> +Required properties:
>> +
>> +- compatible: Must be one of:
>> + * ingenic,jz4725b-ost
>> + * ingenic,jz4770-ost
>> +- clocks: phandle to the OST clock
>> +- clock-names: should be "ost"
>> +- interrupts : Specifies the interrupt the OST is connected to.
>> +
>> +
>> +Example
>> +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>> +
>> +#include <dt-bindings/clock/jz4770-cgu.h>
>> +#include <dt-bindings/clock/ingenic,tcu.h>
>> +
>> +/ {
>> + tcu: timer@10002000 {
>> + compatible =3D "ingenic,jz4770-tcu";
>> + reg =3D <0x10002000 0x1000>;
>> + #address-cells =3D <1>;
>> + #size-cells =3D <1>;
>> + ranges =3D <0x0 0x10002000 0x1000>;
>> +
>> + #clock-cells =3D <1>;
>> +
>> + clocks =3D <&cgu JZ4770_CLK_RTC
>> + &cgu JZ4770_CLK_EXT
>> + &cgu JZ4770_CLK_PCLK
>> + &cgu JZ4770_CLK_EXT>;
>> + clock-names =3D "rtc", "ext", "pclk", "tcu";
>> +
>> + interrupt-controller;
>> + #interrupt-cells =3D <1>;
>> +
>> + interrupt-parent =3D <&intc>;
>> + interrupts =3D <27 26 25>;
>> +
>> + watchdog: watchdog@0 {
>> + compatible =3D "ingenic,jz4740-watchdog";
>> + reg =3D <0x0 0x10>;
>> +
>> + clocks =3D <&tcu TCU_CLK_WDT>;
>> + clock-names =3D "wdt";
>> + };
>> +
>> + pwm: pwm@10 {
>> + compatible =3D "ingenic,jz4740-pwm";
>> + reg =3D <0x10 0xff0>;
>> +
>> + #pwm-cells =3D <3>;
>> +
>> + clocks =3D <&tcu TCU_CLK_TIMER0
>> + &tcu TCU_CLK_TIMER1
>> + &tcu TCU_CLK_TIMER2
>> + &tcu TCU_CLK_TIMER3
>> + &tcu TCU_CLK_TIMER4
>> + &tcu TCU_CLK_TIMER5
>> + &tcu TCU_CLK_TIMER6
>> + &tcu TCU_CLK_TIMER7>;
>> + clock-names =3D "timer0", "timer1", "timer2", "timer3",
>> + "timer4", "timer5", "timer6", "timer7";
>> + };
>> +
>> + ost: timer@e0 {
>> + compatible =3D "ingenic,jz4770-ost";
>> + reg =3D <0xe0 0x20>;
>=20
> This is creating an overlapping region with PWM which should be=20
> avoided.
> Are timers and PWM the same h/w? Then there should be one node (or=20
> maybe
> you can do 1 node per channel if each channel is independent (has its
> own register range, clocks, interrupts, etc.
>=20
> Or the PWM node needs to exclude this region (by having 2 reg=20
> regions).
I will use two regions then.
>>=20
> +};
>>=20
> + };
>> +
>> + clocks =3D <&tcu TCU_CLK_OST>;
>> + clock-names =3D "ost";
>> +
>> + interrupts =3D <15>;
>> + };
Thanks,
-Paul Cercueil
=
WARNING: multiple messages have this Message-ID (diff)
From: Paul Cercueil <paul@crapouillou.net>
To: Rob Herring <robh@kernel.org>
Cc: Thierry Reding <thierry.reding@gmail.com>,
Mark Rutland <mark.rutland@arm.com>,
Daniel Lezcano <daniel.lezcano@linaro.org>,
Thomas Gleixner <tglx@linutronix.de>,
Wim Van Sebroeck <wim@linux-watchdog.org>,
Guenter Roeck <linux@roeck-us.net>,
Ralf Baechle <ralf@linux-mips.org>,
Paul Burton <paul.burton@mips.com>,
Jonathan Corbet <corbet@lwn.net>,
Michael Turquette <mturquette@baylibre.com>,
Stephen Boyd <sboyd@kernel.org>, Lee Jones <lee.jones@linaro.org>,
linux-pwm@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-watchdog@vger.kernel.org,
linux-mips@linux-mips.org, linux-doc@vger.kernel.org,
linux-clk@vger.kernel.org
Subject: Re: [PATCH v5 04/21] dt-bindings: Add doc for the Ingenic TCU drivers
Date: Tue, 31 Jul 2018 00:01:01 +0200 [thread overview]
Message-ID: <1532988062.4702.2@smtp.crapouillou.net> (raw)
In-Reply-To: <20180725152105.GA6347@rob-hp-laptop>
Hi Rob,
Le mer. 25 juil. 2018 à 17:21, Rob Herring <robh@kernel.org> a écrit :
> On Wed, Jul 25, 2018 at 01:19:41AM +0200, Paul Cercueil wrote:
>> Add documentation about how to properly use the Ingenic TCU
>> (Timer/Counter Unit) drivers from devicetree.
>>
>> Signed-off-by: Paul Cercueil <paul@crapouillou.net>
>> ---
>> .../devicetree/bindings/pwm/ingenic,jz47xx-pwm.txt | 24 +---
>> .../devicetree/bindings/timer/ingenic,tcu.txt | 147
>> +++++++++++++++++++++
>> .../bindings/watchdog/ingenic,jz4740-wdt.txt | 17 +--
>> 3 files changed, 151 insertions(+), 37 deletions(-)
>> create mode 100644
>> Documentation/devicetree/bindings/timer/ingenic,tcu.txt
>>
>> v4: New patch in this series. Corresponds to V2 patches 3-4-5 with
>> added content.
>>
>> v5: - Edited PWM/watchdog DT bindings documentation to point to
>> the new
>> document.
>> - Moved main document to
>> Documentation/devicetree/bindings/timer/ingenic,tcu.txt
>> - Updated documentation to reflect the new devicetree bindings.
>>
>> diff --git
>> a/Documentation/devicetree/bindings/pwm/ingenic,jz47xx-pwm.txt
>> b/Documentation/devicetree/bindings/pwm/ingenic,jz47xx-pwm.txt
>> index 7d9d3f90641b..a722cdde3aa7 100644
>> --- a/Documentation/devicetree/bindings/pwm/ingenic,jz47xx-pwm.txt
>> +++ b/Documentation/devicetree/bindings/pwm/ingenic,jz47xx-pwm.txt
>> @@ -1,25 +1,5 @@
>> Ingenic JZ47xx PWM Controller
>> =============================
>>
>> -Required properties:
>> -- compatible: One of:
>> - * "ingenic,jz4740-pwm"
>> - * "ingenic,jz4770-pwm"
>> - * "ingenic,jz4780-pwm"
>> -- #pwm-cells: Should be 3. See pwm.txt in this directory for a
>> description
>> - of the cells format.
>> -- clocks : phandle to the external clock.
>> -- clock-names : Should be "ext".
>> -
>> -
>> -Example:
>> -
>> - pwm: pwm@10002000 {
>> - compatible = "ingenic,jz4740-pwm";
>> - reg = <0x10002000 0x1000>;
>> -
>> - #pwm-cells = <3>;
>> -
>> - clocks = <&ext>;
>> - clock-names = "ext";
>> - };
>> +This documentation has moved; for a description of the devicetree
>> bindings of
>> +this driver, please refer to ../timer/ingenic,tcu.txt.
>
> This should be evident from the git log. Just remove it.
Ok.
>> diff --git
>> a/Documentation/devicetree/bindings/timer/ingenic,tcu.txt
>> b/Documentation/devicetree/bindings/timer/ingenic,tcu.txt
>> new file mode 100644
>> index 000000000000..65d125b460aa
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/timer/ingenic,tcu.txt
>> @@ -0,0 +1,147 @@
>> +Ingenic JZ47xx SoCs Timer/Counter Unit devicetree bindings
>> +==========================================================
>> +
>> +For a description of the TCU hardware and drivers, have a look at
>> +Documentation/mips/ingenic-tcu.txt.
>> +
>> +Required properties:
>> +
>> +- compatible: Must be one of:
>> + * ingenic,jz4740-tcu
>> + * ingenic,jz4725b-tcu
>> + * ingenic,jz4770-tcu
>> +- reg: Should be the offset/length value corresponding to the TCU
>> registers
>
>> +- #address-cells: Should be <1>;
>> +- #size-cells: Should be <1>;
>> +- ranges: Should be one range for the full TCU registers area
>
> These can all be implied.
Ok.
>> +- clocks: List of phandle & clock specifiers for clocks external
>> to the TCU.
>> + The "pclk", "rtc", "ext" and "tcu" clocks should be provided.
>> +- clock-names: List of name strings for the external clocks.
>> +- #clock-cells: Should be <1>;
>> + Clock consumers specify this argument to identify a clock. The
>> valid values
>> + may be found in <dt-bindings/clock/ingenic,tcu.h>.
>> +- interrupt-controller : Identifies the node as an interrupt
>> controller
>> +- #interrupt-cells : Specifies the number of cells needed to
>> encode an
>> + interrupt source. The value should be 1.
>> +- interrupt-parent : phandle of the interrupt controller.
>> +- interrupts : Specifies the interrupt the controller is connected
>> to.
>
> How many and what are they. The example shows there are 3.
They are 2 or 3, and they are all the same (three parent IRQs for one
irqchip).
It's explained in the hardware doc, should I add it here as well?
>> +
>> +Optional properties:
>> +
>> +- ingenic,timer-channel: Specifies the TCU channel that should be
>> used as
>> + system timer. If not provided, the TCU channel 0 is used for the
>> system timer.
>> +
>> +- ingenic,clocksource-channel: Specifies the TCU channel that
>> should be used
>> + as clocksource and sched_clock. It must be a different channel
>> than the one
>> + used as system timer. If not provided, neither a clocksource nor
>> a
>> + sched_clock is instantiated.
>
> clocksource and sched_clock are Linux specific and don't belong in DT.
> You should define properties of the hardware or use existing
> properties
> like interrupts or clocks to figure out which channel to use. For
> example, if some channels don't have an interrupt, then use them for
> clocksource and not a clockevent. Or you could have timers that run in
> low-power modes or not. If all the channels are identical, then it
> shouldn't matter which ones the OS picks.
We already talked about that. All the TCU channels can be used for PWM.
The problem is I cannot know from the driver's scope which channels will
be free and which channels will be requested for PWM. You suggested
that I
parse the devicetree for clients, and I did that in the V3/V4 patchset.
But
it only works for clients requesting through devicetree, not from
platform
code or even sysfs.
One thing I can try is to dynamically change the channels the system
timer
and clocksource are using when the current ones are requested for PWM.
But
that sounds hardcore...
>> +
>> +
>> +Children nodes
>> +==========================================================
>> +
>> +
>> +PWM node:
>> +---------
>> +
>> +Required properties:
>> +
>> +- compatible: Must be one of:
>> + * ingenic,jz4740-pwm
>> + * ingenic,jz4725b-pwm
>> +- #pwm-cells: Should be 3. See ../pwm/pwm.txt for a description of
>> the cell
>> + format.
>> +- clocks: List of phandle & clock specifiers for the TCU clocks.
>> +- clock-names: List of name strings for the TCU clocks.
>> +
>> +
>> +Watchdog node:
>> +--------------
>> +
>> +Required properties:
>> +
>> +- compatible: Must be one of:
>> + * ingenic,jz4740-watchdog
>> + * ingenic,jz4780-watchdog
>> +- clocks: phandle to the RTC clock
>> +- clock-names: should be "rtc"
>> +
>> +
>> +OST node:
>> +---------
>> +
>> +Required properties:
>> +
>> +- compatible: Must be one of:
>> + * ingenic,jz4725b-ost
>> + * ingenic,jz4770-ost
>> +- clocks: phandle to the OST clock
>> +- clock-names: should be "ost"
>> +- interrupts : Specifies the interrupt the OST is connected to.
>> +
>> +
>> +Example
>> +==========================================================
>> +
>> +#include <dt-bindings/clock/jz4770-cgu.h>
>> +#include <dt-bindings/clock/ingenic,tcu.h>
>> +
>> +/ {
>> + tcu: timer@10002000 {
>> + compatible = "ingenic,jz4770-tcu";
>> + reg = <0x10002000 0x1000>;
>> + #address-cells = <1>;
>> + #size-cells = <1>;
>> + ranges = <0x0 0x10002000 0x1000>;
>> +
>> + #clock-cells = <1>;
>> +
>> + clocks = <&cgu JZ4770_CLK_RTC
>> + &cgu JZ4770_CLK_EXT
>> + &cgu JZ4770_CLK_PCLK
>> + &cgu JZ4770_CLK_EXT>;
>> + clock-names = "rtc", "ext", "pclk", "tcu";
>> +
>> + interrupt-controller;
>> + #interrupt-cells = <1>;
>> +
>> + interrupt-parent = <&intc>;
>> + interrupts = <27 26 25>;
>> +
>> + watchdog: watchdog@0 {
>> + compatible = "ingenic,jz4740-watchdog";
>> + reg = <0x0 0x10>;
>> +
>> + clocks = <&tcu TCU_CLK_WDT>;
>> + clock-names = "wdt";
>> + };
>> +
>> + pwm: pwm@10 {
>> + compatible = "ingenic,jz4740-pwm";
>> + reg = <0x10 0xff0>;
>> +
>> + #pwm-cells = <3>;
>> +
>> + clocks = <&tcu TCU_CLK_TIMER0
>> + &tcu TCU_CLK_TIMER1
>> + &tcu TCU_CLK_TIMER2
>> + &tcu TCU_CLK_TIMER3
>> + &tcu TCU_CLK_TIMER4
>> + &tcu TCU_CLK_TIMER5
>> + &tcu TCU_CLK_TIMER6
>> + &tcu TCU_CLK_TIMER7>;
>> + clock-names = "timer0", "timer1", "timer2", "timer3",
>> + "timer4", "timer5", "timer6", "timer7";
>> + };
>> +
>> + ost: timer@e0 {
>> + compatible = "ingenic,jz4770-ost";
>> + reg = <0xe0 0x20>;
>
> This is creating an overlapping region with PWM which should be
> avoided.
> Are timers and PWM the same h/w? Then there should be one node (or
> maybe
> you can do 1 node per channel if each channel is independent (has its
> own register range, clocks, interrupts, etc.
>
> Or the PWM node needs to exclude this region (by having 2 reg
> regions).
I will use two regions then.
>>
> +};
>>
> + };
>> +
>> + clocks = <&tcu TCU_CLK_OST>;
>> + clock-names = "ost";
>> +
>> + interrupts = <15>;
>> + };
Thanks,
-Paul Cercueil
--
To unsubscribe from this list: send the line "unsubscribe linux-doc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: Paul Cercueil <paul@crapouillou.net>
To: Rob Herring <robh@kernel.org>
Cc: Thierry Reding <thierry.reding@gmail.com>,
Mark Rutland <mark.rutland@arm.com>,
Daniel Lezcano <daniel.lezcano@linaro.org>,
Thomas Gleixner <tglx@linutronix.de>,
Wim Van Sebroeck <wim@linux-watchdog.org>,
Guenter Roeck <linux@roeck-us.net>,
Ralf Baechle <ralf@linux-mips.org>,
Paul Burton <paul.burton@mips.com>,
Jonathan Corbet <corbet@lwn.net>,
Michael Turquette <mturquette@baylibre.com>,
Stephen Boyd <sboyd@kernel.org>, Lee Jones <lee.jones@linaro.org>,
linux-pwm@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-watchdog@vger.kernel.org,
linux-mips@linux-mips.org, linux-doc@vger.kernel.org,
linux-clk@vger.kernel.org
Subject: Re: [PATCH v5 04/21] dt-bindings: Add doc for the Ingenic TCU drivers
Date: Tue, 31 Jul 2018 00:01:01 +0200 [thread overview]
Message-ID: <1532988062.4702.2@smtp.crapouillou.net> (raw)
In-Reply-To: <20180725152105.GA6347@rob-hp-laptop>
Hi Rob,
Le mer. 25 juil. 2018 à 17:21, Rob Herring <robh@kernel.org> a écrit :
> On Wed, Jul 25, 2018 at 01:19:41AM +0200, Paul Cercueil wrote:
>> Add documentation about how to properly use the Ingenic TCU
>> (Timer/Counter Unit) drivers from devicetree.
>>
>> Signed-off-by: Paul Cercueil <paul@crapouillou.net>
>> ---
>> .../devicetree/bindings/pwm/ingenic,jz47xx-pwm.txt | 24 +---
>> .../devicetree/bindings/timer/ingenic,tcu.txt | 147
>> +++++++++++++++++++++
>> .../bindings/watchdog/ingenic,jz4740-wdt.txt | 17 +--
>> 3 files changed, 151 insertions(+), 37 deletions(-)
>> create mode 100644
>> Documentation/devicetree/bindings/timer/ingenic,tcu.txt
>>
>> v4: New patch in this series. Corresponds to V2 patches 3-4-5 with
>> added content.
>>
>> v5: - Edited PWM/watchdog DT bindings documentation to point to
>> the new
>> document.
>> - Moved main document to
>> Documentation/devicetree/bindings/timer/ingenic,tcu.txt
>> - Updated documentation to reflect the new devicetree bindings.
>>
>> diff --git
>> a/Documentation/devicetree/bindings/pwm/ingenic,jz47xx-pwm.txt
>> b/Documentation/devicetree/bindings/pwm/ingenic,jz47xx-pwm.txt
>> index 7d9d3f90641b..a722cdde3aa7 100644
>> --- a/Documentation/devicetree/bindings/pwm/ingenic,jz47xx-pwm.txt
>> +++ b/Documentation/devicetree/bindings/pwm/ingenic,jz47xx-pwm.txt
>> @@ -1,25 +1,5 @@
>> Ingenic JZ47xx PWM Controller
>> =============================
>>
>> -Required properties:
>> -- compatible: One of:
>> - * "ingenic,jz4740-pwm"
>> - * "ingenic,jz4770-pwm"
>> - * "ingenic,jz4780-pwm"
>> -- #pwm-cells: Should be 3. See pwm.txt in this directory for a
>> description
>> - of the cells format.
>> -- clocks : phandle to the external clock.
>> -- clock-names : Should be "ext".
>> -
>> -
>> -Example:
>> -
>> - pwm: pwm@10002000 {
>> - compatible = "ingenic,jz4740-pwm";
>> - reg = <0x10002000 0x1000>;
>> -
>> - #pwm-cells = <3>;
>> -
>> - clocks = <&ext>;
>> - clock-names = "ext";
>> - };
>> +This documentation has moved; for a description of the devicetree
>> bindings of
>> +this driver, please refer to ../timer/ingenic,tcu.txt.
>
> This should be evident from the git log. Just remove it.
Ok.
>> diff --git
>> a/Documentation/devicetree/bindings/timer/ingenic,tcu.txt
>> b/Documentation/devicetree/bindings/timer/ingenic,tcu.txt
>> new file mode 100644
>> index 000000000000..65d125b460aa
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/timer/ingenic,tcu.txt
>> @@ -0,0 +1,147 @@
>> +Ingenic JZ47xx SoCs Timer/Counter Unit devicetree bindings
>> +==========================================================
>> +
>> +For a description of the TCU hardware and drivers, have a look at
>> +Documentation/mips/ingenic-tcu.txt.
>> +
>> +Required properties:
>> +
>> +- compatible: Must be one of:
>> + * ingenic,jz4740-tcu
>> + * ingenic,jz4725b-tcu
>> + * ingenic,jz4770-tcu
>> +- reg: Should be the offset/length value corresponding to the TCU
>> registers
>
>> +- #address-cells: Should be <1>;
>> +- #size-cells: Should be <1>;
>> +- ranges: Should be one range for the full TCU registers area
>
> These can all be implied.
Ok.
>> +- clocks: List of phandle & clock specifiers for clocks external
>> to the TCU.
>> + The "pclk", "rtc", "ext" and "tcu" clocks should be provided.
>> +- clock-names: List of name strings for the external clocks.
>> +- #clock-cells: Should be <1>;
>> + Clock consumers specify this argument to identify a clock. The
>> valid values
>> + may be found in <dt-bindings/clock/ingenic,tcu.h>.
>> +- interrupt-controller : Identifies the node as an interrupt
>> controller
>> +- #interrupt-cells : Specifies the number of cells needed to
>> encode an
>> + interrupt source. The value should be 1.
>> +- interrupt-parent : phandle of the interrupt controller.
>> +- interrupts : Specifies the interrupt the controller is connected
>> to.
>
> How many and what are they. The example shows there are 3.
They are 2 or 3, and they are all the same (three parent IRQs for one
irqchip).
It's explained in the hardware doc, should I add it here as well?
>> +
>> +Optional properties:
>> +
>> +- ingenic,timer-channel: Specifies the TCU channel that should be
>> used as
>> + system timer. If not provided, the TCU channel 0 is used for the
>> system timer.
>> +
>> +- ingenic,clocksource-channel: Specifies the TCU channel that
>> should be used
>> + as clocksource and sched_clock. It must be a different channel
>> than the one
>> + used as system timer. If not provided, neither a clocksource nor
>> a
>> + sched_clock is instantiated.
>
> clocksource and sched_clock are Linux specific and don't belong in DT.
> You should define properties of the hardware or use existing
> properties
> like interrupts or clocks to figure out which channel to use. For
> example, if some channels don't have an interrupt, then use them for
> clocksource and not a clockevent. Or you could have timers that run in
> low-power modes or not. If all the channels are identical, then it
> shouldn't matter which ones the OS picks.
We already talked about that. All the TCU channels can be used for PWM.
The problem is I cannot know from the driver's scope which channels will
be free and which channels will be requested for PWM. You suggested
that I
parse the devicetree for clients, and I did that in the V3/V4 patchset.
But
it only works for clients requesting through devicetree, not from
platform
code or even sysfs.
One thing I can try is to dynamically change the channels the system
timer
and clocksource are using when the current ones are requested for PWM.
But
that sounds hardcore...
>> +
>> +
>> +Children nodes
>> +==========================================================
>> +
>> +
>> +PWM node:
>> +---------
>> +
>> +Required properties:
>> +
>> +- compatible: Must be one of:
>> + * ingenic,jz4740-pwm
>> + * ingenic,jz4725b-pwm
>> +- #pwm-cells: Should be 3. See ../pwm/pwm.txt for a description of
>> the cell
>> + format.
>> +- clocks: List of phandle & clock specifiers for the TCU clocks.
>> +- clock-names: List of name strings for the TCU clocks.
>> +
>> +
>> +Watchdog node:
>> +--------------
>> +
>> +Required properties:
>> +
>> +- compatible: Must be one of:
>> + * ingenic,jz4740-watchdog
>> + * ingenic,jz4780-watchdog
>> +- clocks: phandle to the RTC clock
>> +- clock-names: should be "rtc"
>> +
>> +
>> +OST node:
>> +---------
>> +
>> +Required properties:
>> +
>> +- compatible: Must be one of:
>> + * ingenic,jz4725b-ost
>> + * ingenic,jz4770-ost
>> +- clocks: phandle to the OST clock
>> +- clock-names: should be "ost"
>> +- interrupts : Specifies the interrupt the OST is connected to.
>> +
>> +
>> +Example
>> +==========================================================
>> +
>> +#include <dt-bindings/clock/jz4770-cgu.h>
>> +#include <dt-bindings/clock/ingenic,tcu.h>
>> +
>> +/ {
>> + tcu: timer@10002000 {
>> + compatible = "ingenic,jz4770-tcu";
>> + reg = <0x10002000 0x1000>;
>> + #address-cells = <1>;
>> + #size-cells = <1>;
>> + ranges = <0x0 0x10002000 0x1000>;
>> +
>> + #clock-cells = <1>;
>> +
>> + clocks = <&cgu JZ4770_CLK_RTC
>> + &cgu JZ4770_CLK_EXT
>> + &cgu JZ4770_CLK_PCLK
>> + &cgu JZ4770_CLK_EXT>;
>> + clock-names = "rtc", "ext", "pclk", "tcu";
>> +
>> + interrupt-controller;
>> + #interrupt-cells = <1>;
>> +
>> + interrupt-parent = <&intc>;
>> + interrupts = <27 26 25>;
>> +
>> + watchdog: watchdog@0 {
>> + compatible = "ingenic,jz4740-watchdog";
>> + reg = <0x0 0x10>;
>> +
>> + clocks = <&tcu TCU_CLK_WDT>;
>> + clock-names = "wdt";
>> + };
>> +
>> + pwm: pwm@10 {
>> + compatible = "ingenic,jz4740-pwm";
>> + reg = <0x10 0xff0>;
>> +
>> + #pwm-cells = <3>;
>> +
>> + clocks = <&tcu TCU_CLK_TIMER0
>> + &tcu TCU_CLK_TIMER1
>> + &tcu TCU_CLK_TIMER2
>> + &tcu TCU_CLK_TIMER3
>> + &tcu TCU_CLK_TIMER4
>> + &tcu TCU_CLK_TIMER5
>> + &tcu TCU_CLK_TIMER6
>> + &tcu TCU_CLK_TIMER7>;
>> + clock-names = "timer0", "timer1", "timer2", "timer3",
>> + "timer4", "timer5", "timer6", "timer7";
>> + };
>> +
>> + ost: timer@e0 {
>> + compatible = "ingenic,jz4770-ost";
>> + reg = <0xe0 0x20>;
>
> This is creating an overlapping region with PWM which should be
> avoided.
> Are timers and PWM the same h/w? Then there should be one node (or
> maybe
> you can do 1 node per channel if each channel is independent (has its
> own register range, clocks, interrupts, etc.
>
> Or the PWM node needs to exclude this region (by having 2 reg
> regions).
I will use two regions then.
>>
> +};
>>
> + };
>> +
>> + clocks = <&tcu TCU_CLK_OST>;
>> + clock-names = "ost";
>> +
>> + interrupts = <15>;
>> + };
Thanks,
-Paul Cercueil
next prev parent reply other threads:[~2018-07-30 22:01 UTC|newest]
Thread overview: 81+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-24 23:19 [PATCH v5 00/21] Ingenic JZ47xx TCU patchset v5 Paul Cercueil
2018-07-24 23:19 ` Paul Cercueil
2018-07-24 23:19 ` [PATCH v5 01/21] mfd: Add ingenic-tcu.h header Paul Cercueil
2018-07-24 23:19 ` Paul Cercueil
2018-07-24 23:19 ` [PATCH v5 02/21] dt-bindings: ingenic: Add DT bindings for TCU clocks Paul Cercueil
2018-07-24 23:19 ` Paul Cercueil
2018-07-24 23:19 ` [PATCH v5 03/21] doc: Add doc for the Ingenic TCU hardware Paul Cercueil
2018-07-24 23:19 ` Paul Cercueil
2018-07-24 23:19 ` [PATCH v5 04/21] dt-bindings: Add doc for the Ingenic TCU drivers Paul Cercueil
2018-07-24 23:19 ` Paul Cercueil
2018-07-25 15:21 ` Rob Herring
2018-07-25 15:21 ` Rob Herring
2018-07-30 22:01 ` Paul Cercueil [this message]
2018-07-30 22:01 ` Paul Cercueil
2018-07-30 22:01 ` Paul Cercueil
2018-10-01 8:48 ` Daniel Lezcano
2018-07-24 23:19 ` [PATCH v5 05/21] clocksource: Add a new timer-ingenic driver Paul Cercueil
2018-07-24 23:19 ` Paul Cercueil
2018-07-24 23:19 ` [PATCH v5 06/21] clocksource: Add driver for the Ingenic JZ47xx OST Paul Cercueil
2018-07-24 23:19 ` Paul Cercueil
2018-07-24 23:19 ` [PATCH v5 07/21] MAINTAINERS: Add myself as maintainer for Ingenic TCU drivers Paul Cercueil
2018-07-24 23:19 ` Paul Cercueil
2018-07-24 23:19 ` [PATCH v5 08/21] watchdog: jz4740: Use regmap and WDT clock provided by TCU driver Paul Cercueil
2018-07-24 23:19 ` Paul Cercueil
2018-07-25 1:14 ` Guenter Roeck
2018-07-25 1:14 ` Guenter Roeck
2018-07-30 21:27 ` Paul Cercueil
2018-07-30 21:27 ` Paul Cercueil
2018-07-30 21:27 ` Paul Cercueil
2018-07-24 23:19 ` [PATCH v5 09/21] watchdog: jz4740: Drop dependency on MACH_JZ47xx, use COMPILE_TEST Paul Cercueil
2018-07-24 23:19 ` Paul Cercueil
2018-07-24 23:19 ` [PATCH v5 10/21] pwm: jz4740: Use regmap and clocks from TCU driver Paul Cercueil
2018-07-24 23:19 ` Paul Cercueil
2018-07-24 23:19 ` [PATCH v5 11/21] pwm: jz4740: Drop dependency on MACH_INGENIC, use COMPILE_TEST Paul Cercueil
2018-07-24 23:19 ` Paul Cercueil
2018-07-24 23:19 ` [PATCH v5 12/21] pwm: jz4740: Remove unused devicetree compatible strings Paul Cercueil
2018-07-24 23:19 ` Paul Cercueil
2018-07-24 23:19 ` [PATCH v5 13/21] pwm: jz4740: Add support for the JZ4725B Paul Cercueil
2018-07-24 23:19 ` Paul Cercueil
2018-07-24 23:19 ` [PATCH v5 14/21] clk: jz4740: Add TCU clock Paul Cercueil
2018-07-24 23:19 ` Paul Cercueil
2018-07-25 15:22 ` Rob Herring
2018-07-25 15:22 ` Rob Herring
2018-07-25 23:30 ` Stephen Boyd
2018-07-25 23:30 ` Stephen Boyd
2018-07-25 23:30 ` Stephen Boyd
2018-07-25 23:30 ` Stephen Boyd
2018-07-25 23:30 ` Stephen Boyd
2018-07-24 23:19 ` [PATCH v5 15/21] MIPS: Kconfig: Select TCU timer driver when MACH_INGENIC is set Paul Cercueil
2018-07-24 23:19 ` Paul Cercueil
2018-07-24 23:19 ` [PATCH v5 16/21] MIPS: jz4740: Add DTS nodes for the TCU drivers Paul Cercueil
2018-07-24 23:19 ` Paul Cercueil
2018-07-24 23:19 ` [PATCH v5 17/21] MIPS: qi_lb60: Move PWM devices to devicetree Paul Cercueil
2018-07-24 23:19 ` Paul Cercueil
2018-07-24 23:19 ` [PATCH v5 18/21] MIPS: qi_lb60: Use 750 kHz system timer & enable clocksource Paul Cercueil
2018-07-24 23:19 ` Paul Cercueil
2018-07-24 23:19 ` [PATCH v5 19/21] MIPS: CI20: Reduce system timer clock to 3 MHz Paul Cercueil
2018-07-24 23:19 ` Paul Cercueil
2018-07-24 23:19 ` [PATCH v5 20/21] MIPS: CI20: defconfig: enable OST driver Paul Cercueil
2018-07-24 23:19 ` Paul Cercueil
2018-07-24 23:22 ` [PATCH v5 21/21] MIPS: jz4740: Drop obsolete code Paul Cercueil
2018-07-24 23:22 ` Paul Cercueil
-- strict thread matches above, loose matches on Subject: below --
2018-10-03 10:32 [PATCH v5 04/21] dt-bindings: Add doc for the Ingenic TCU drivers Paul Cercueil
2018-10-03 10:32 Paul Cercueil
2018-10-03 10:32 Paul Cercueil
2018-10-06 9:20 ` Alexandre Belloni
[not found] <5bb49c78.1c69fb81.4b6a9.fb44SMTPIN_ADDED_MISSING@mx.google.com>
2018-10-03 12:47 ` Daniel Lezcano
2018-10-03 12:51 Paul Cercueil
2018-10-03 12:51 Paul Cercueil
2018-10-03 12:51 Paul Cercueil
[not found] <5bb4bb5d.1c69fb81.ed9a6.adc6SMTPIN_ADDED_MISSING@mx.google.com>
2018-10-03 13:02 ` Daniel Lezcano
2018-10-03 13:39 Paul Cercueil
2018-10-03 13:39 Paul Cercueil
2018-10-03 13:39 Paul Cercueil
2018-10-07 19:14 Paul Cercueil
2018-10-07 19:14 Paul Cercueil
2018-10-07 19:14 Paul Cercueil
[not found] <5bb4c6ad.1c69fb81.42bb.93ecSMTPIN_ADDED_MISSING@mx.google.com>
2018-10-09 6:36 ` Lee Jones
2018-10-10 10:38 Paul Cercueil
2018-10-10 10:38 Paul Cercueil
2018-10-10 10:38 Paul Cercueil
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=1532988062.4702.2@smtp.crapouillou.net \
--to=paul@crapouillou.net \
--cc=corbet@lwn.net \
--cc=daniel.lezcano@linaro.org \
--cc=devicetree@vger.kernel.org \
--cc=lee.jones@linaro.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@linux-mips.org \
--cc=linux-pwm@vger.kernel.org \
--cc=linux-watchdog@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=mark.rutland@arm.com \
--cc=mturquette@baylibre.com \
--cc=paul.burton@mips.com \
--cc=ralf@linux-mips.org \
--cc=robh@kernel.org \
--cc=sboyd@kernel.org \
--cc=tglx@linutronix.de \
--cc=thierry.reding@gmail.com \
--cc=wim@linux-watchdog.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.