linux-watchdog.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Paul Cercueil <paul@crapouillou.net>
To: "Thierry Reding" <thierry.reding@gmail.com>,
	"Daniel Lezcano" <daniel.lezcano@linaro.org>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"Ralf Baechle" <ralf@linux-mips.org>,
	"Paul Burton" <paul.burton@mips.com>,
	"James Hogan" <jhogan@kernel.org>,
	"Jonathan Corbet" <corbet@lwn.net>,
	"Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
Cc: Mathieu Malaterre <malat@debian.org>,
	od@zcrc.me, linux-pwm@vger.kernel.org,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-watchdog@vger.kernel.org, linux-mips@vger.kernel.org,
	linux-doc@vger.kernel.org, linux-clk@vger.kernel.org,
	Paul Cercueil <paul@crapouillou.net>
Subject: [PATCH v10 02/27] doc: Add doc for the Ingenic TCU hardware
Date: Sat,  2 Mar 2019 20:33:48 -0300	[thread overview]
Message-ID: <20190302233413.14813-3-paul@crapouillou.net> (raw)
In-Reply-To: <20190302233413.14813-1-paul@crapouillou.net>

Add a documentation file about the Timer/Counter Unit (TCU) present in
the Ingenic JZ47xx SoCs.

The Timer/Counter Unit (TCU) in Ingenic JZ47xx SoCs is a multi-function
hardware block. It features up to to eight channels, that can be used as
counters, timers, or PWM.

- JZ4725B, JZ4750, JZ4755 only have six TCU channels. The other SoCs all
  have eight channels.

- JZ4725B introduced a separate channel, called Operating System Timer
  (OST). It is a 32-bit programmable timer. On JZ4770 and above, it is
  64-bit.

- Each one of the TCU channels has its own clock, which can be reparented
  to three different clocks (pclk, ext, rtc), gated, and reclocked, through
  their TCSR register.
  * The watchdog and OST hardware blocks also feature a TCSR register with
    the same format in their register space.
  * The TCU registers used to gate/ungate can also gate/ungate the watchdog
    and OST clocks.

- Each TCU channel works in one of two modes:
  * mode TCU1: channels cannot work in sleep mode, but are easier to
    operate.
  * mode TCU2: channels can work in sleep mode, but the operation is a bit
    more complicated than with TCU1 channels.

- The mode of each TCU channel depends on the SoC used:
  * On the oldest SoCs (up to JZ4740), all of the eight channels operate in
    TCU1 mode.
  * On JZ4725B, channel 5 operates as TCU2, the others operate as TCU1.
  * On newest SoCs (JZ4750 and above), channels 1-2 operate as TCU2, the
    others operate as TCU1.

- Each channel can generate an interrupt. Some channels share an interrupt
  line, some don't, and this changes between SoC versions:
  * on older SoCs (JZ4740 and below), channel 0 and channel 1 have their
    own interrupt line; channels 2-7 share the last interrupt line.
  * On JZ4725B, channel 0 has its own interrupt; channels 1-5 share one
    interrupt line; the OST uses the last interrupt line.
  * on newer SoCs (JZ4750 and above), channel 5 has its own interrupt;
    channels 0-4 and (if eight channels) 6-7 all share one interrupt line;
    the OST uses the last interrupt line.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Tested-by: Mathieu Malaterre <malat@debian.org>
Tested-by: Artur Rojek <contact@artur-rojek.eu>
---

Notes:
         v4: New patch in this series
    
         v5: Added information about number of channels, and improved
             documentation about channel modes
    
         v6: Add info about OST (can be 32-bit on older SoCs)
    
         v7: No change
    
         v8: No change
    
         v9: No change
    
         v10: No change

 Documentation/mips/ingenic-tcu.txt | 60 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 60 insertions(+)
 create mode 100644 Documentation/mips/ingenic-tcu.txt

diff --git a/Documentation/mips/ingenic-tcu.txt b/Documentation/mips/ingenic-tcu.txt
new file mode 100644
index 000000000000..0ea35b2a46da
--- /dev/null
+++ b/Documentation/mips/ingenic-tcu.txt
@@ -0,0 +1,60 @@
+Ingenic JZ47xx SoCs Timer/Counter Unit hardware
+-----------------------------------------------
+
+The Timer/Counter Unit (TCU) in Ingenic JZ47xx SoCs is a multi-function
+hardware block. It features up to to eight channels, that can be used as
+counters, timers, or PWM.
+
+- JZ4725B, JZ4750, JZ4755 only have six TCU channels. The other SoCs all
+  have eight channels.
+
+- JZ4725B introduced a separate channel, called Operating System Timer
+  (OST). It is a 32-bit programmable timer. On JZ4770 and above, it is
+  64-bit.
+
+- Each one of the TCU channels has its own clock, which can be reparented
+  to three different clocks (pclk, ext, rtc), gated, and reclocked, through
+  their TCSR register.
+  * The watchdog and OST hardware blocks also feature a TCSR register with
+    the same format in their register space.
+  * The TCU registers used to gate/ungate can also gate/ungate the watchdog
+    and OST clocks.
+
+- Each TCU channel works in one of two modes:
+  * mode TCU1: channels cannot work in sleep mode, but are easier to
+    operate.
+  * mode TCU2: channels can work in sleep mode, but the operation is a bit
+    more complicated than with TCU1 channels.
+
+- The mode of each TCU channel depends on the SoC used:
+  * On the oldest SoCs (up to JZ4740), all of the eight channels operate in
+    TCU1 mode.
+  * On JZ4725B, channel 5 operates as TCU2, the others operate as TCU1.
+  * On newest SoCs (JZ4750 and above), channels 1-2 operate as TCU2, the
+    others operate as TCU1.
+
+- Each channel can generate an interrupt. Some channels share an interrupt
+  line, some don't, and this changes between SoC versions:
+  * on older SoCs (JZ4740 and below), channel 0 and channel 1 have their
+    own interrupt line; channels 2-7 share the last interrupt line.
+  * On JZ4725B, channel 0 has its own interrupt; channels 1-5 share one
+    interrupt line; the OST uses the last interrupt line.
+  * on newer SoCs (JZ4750 and above), channel 5 has its own interrupt;
+    channels 0-4 and (if eight channels) 6-7 all share one interrupt line;
+    the OST uses the last interrupt line.
+
+Implementation
+--------------
+
+The functionalities of the TCU hardware are spread across multiple drivers:
+- clocks/irq/timer: drivers/clocksource/ingenic-timer.c
+- PWM:              drivers/pwm/pwm-jz4740.c
+- watchdog:         drivers/watchdog/jz4740_wdt.c
+- OST:              drivers/clocksource/ingenic-ost.c
+
+Because various functionalities of the TCU that belong to different drivers
+and frameworks can be controlled from the same registers, all of these
+drivers access their registers through the same regmap.
+
+For more information regarding the devicetree bindings of the TCU drivers,
+have a look at Documentation/devicetree/bindings/mfd/ingenic,tcu.txt.
-- 
2.11.0


  parent reply	other threads:[~2019-03-02 23:34 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-02 23:33 [5.2][PATCH v10 00/27] Ingenic TCU patchset Paul Cercueil
2019-03-02 23:33 ` [PATCH v10 01/27] dt-bindings: ingenic: Add DT bindings for TCU clocks Paul Cercueil
2019-03-02 23:33 ` Paul Cercueil [this message]
2019-03-02 23:33 ` [PATCH v10 03/27] dt-bindings: Add doc for the Ingenic TCU drivers Paul Cercueil
2019-03-02 23:33 ` [PATCH v10 04/27] clocksource: Add a new timer-ingenic driver Paul Cercueil
2019-03-04 12:22   ` Thierry Reding
2019-03-04 18:13     ` Paul Cercueil
2019-03-08 10:22       ` Thierry Reding
2019-03-11 20:52         ` Paul Cercueil
2019-03-05  3:15   ` kbuild test robot
2019-03-02 23:33 ` [PATCH v10 05/27] clocksource: Add driver for the Ingenic JZ47xx OST Paul Cercueil
2019-03-02 23:33 ` [PATCH v10 06/27] MAINTAINERS: Add myself as maintainer for Ingenic TCU drivers Paul Cercueil
2019-03-02 23:33 ` [PATCH v10 07/27] watchdog: jz4740: Use WDT clock provided by TCU driver Paul Cercueil
2019-03-02 23:33 ` [PATCH v10 08/27] watchdog: jz4740: Use regmap " Paul Cercueil
2019-03-02 23:33 ` [PATCH v10 09/27] watchdog: jz4740: Avoid starting watchdog in set_timeout Paul Cercueil
2019-03-02 23:33 ` [PATCH v10 10/27] watchdog: jz4740: Drop dependency on MACH_JZ47xx, use COMPILE_TEST Paul Cercueil
2019-03-02 23:33 ` [PATCH v10 11/27] pwm: jz4740: Apply configuration atomically Paul Cercueil
2019-03-04 11:59   ` Thierry Reding
2019-03-02 23:33 ` [PATCH v10 12/27] pwm: jz4740: Use regmap from TCU driver Paul Cercueil
2019-03-04 12:24   ` Thierry Reding
2019-03-02 23:33 ` [PATCH v10 13/27] pwm: jz4740: Use clocks " Paul Cercueil
2019-03-04 12:30   ` Thierry Reding
2019-03-04 18:18     ` Paul Cercueil
2019-03-02 23:34 ` [PATCH v10 14/27] pwm: jz4740: Improve algorithm of clock calculation Paul Cercueil
2019-03-04 12:33   ` Thierry Reding
2019-03-02 23:34 ` [PATCH v10 15/27] pwm: jz4740: Allow selection of PWM channels 0 and 1 Paul Cercueil
2019-03-04 12:34   ` Thierry Reding
2019-03-02 23:34 ` [PATCH v10 16/27] pwm: jz4740: Drop dependency on MACH_INGENIC, use COMPILE_TEST Paul Cercueil
2019-03-02 23:34 ` [PATCH v10 17/27] pwm: jz4740: Remove unused devicetree compatible strings Paul Cercueil
2019-03-02 23:34 ` [PATCH v10 18/27] clk: jz4740: Add TCU clock Paul Cercueil
2019-03-02 23:34 ` [PATCH v10 19/27] MIPS: Kconfig: Select TCU timer driver when MACH_INGENIC is set Paul Cercueil
2019-03-02 23:34 ` [PATCH v10 20/27] MIPS: jz4740: Add DTS nodes for the TCU drivers Paul Cercueil
2019-03-02 23:34 ` [PATCH v10 21/27] MIPS: qi_lb60: Move PWM devices to devicetree Paul Cercueil
2019-03-02 23:34 ` [PATCH v10 22/27] MIPS: qi_lb60: Reduce system timer and clocksource to 750 kHz Paul Cercueil
2019-03-02 23:34 ` [PATCH v10 23/27] MIPS: CI20: Reduce system timer and clocksource to 3 MHz Paul Cercueil
2019-03-02 23:34 ` [PATCH v10 24/27] MIPS: CI20: defconfig: enable OST driver Paul Cercueil
2019-03-02 23:34 ` [PATCH v10 25/27] MIPS: GCW0: Reduce system timer and clocksource to 750 kHz Paul Cercueil
2019-03-02 23:34 ` [PATCH v10 26/27] MIPS: GCW0: defconfig: Enable OST, watchdog, PWM drivers Paul Cercueil
2019-03-02 23:34 ` [PATCH v10 27/27] MIPS: jz4740: Drop obsolete code 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=20190302233413.14813-3-paul@crapouillou.net \
    --to=paul@crapouillou.net \
    --cc=corbet@lwn.net \
    --cc=daniel.lezcano@linaro.org \
    --cc=devicetree@vger.kernel.org \
    --cc=jhogan@kernel.org \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@vger.kernel.org \
    --cc=linux-pwm@vger.kernel.org \
    --cc=linux-watchdog@vger.kernel.org \
    --cc=malat@debian.org \
    --cc=od@zcrc.me \
    --cc=paul.burton@mips.com \
    --cc=ralf@linux-mips.org \
    --cc=tglx@linutronix.de \
    --cc=thierry.reding@gmail.com \
    --cc=u.kleine-koenig@pengutronix.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).