forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge tag 'mips_5.4' of git://git.kernel.org/pub/scm/linux/kernel/git…
…/mips/linux Pull MIPS updates from Paul Burton: "Main MIPS changes: - boot_mem_map is removed, providing a nice cleanup made possible by the recent removal of bootmem. - Some fixes to atomics, in general providing compiler barriers for smp_mb__{before,after}_atomic plus fixes specific to Loongson CPUs or MIPS32 systems using cmpxchg64(). - Conversion to the new generic VDSO infrastructure courtesy of Vincenzo Frascino. - Removal of undefined behavior in set_io_port_base(), fixing the behavior of some MIPS kernel configurations when built with recent clang versions. - Initial MIPS32 huge page support, functional on at least Ingenic SoCs. - pte_special() is now supported for some configurations, allowing among other things generic fast GUP to be used. - Miscellaneous fixes & cleanups. And platform specific changes: - Major improvements to Ingenic SoC support from Paul Cercueil, mostly enabled by the inclusion of the new TCU (timer-counter unit) drivers he's spent a very patient year or so working on. Plus some fixes for X1000 SoCs from Zhou Yanjie. - Netgear R6200 v1 systems are now supported by the bcm47xx platform. - DT updates for BMIPS, Lantiq & Microsemi Ocelot systems" * tag 'mips_5.4' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux: (89 commits) MIPS: Detect bad _PFN_SHIFT values MIPS: Disable pte_special() for MIPS32 with RiXi MIPS: ralink: deactivate PCI support for SOC_MT7621 mips: compat: vdso: Use legacy syscalls as fallback MIPS: Drop Loongson _CACHE_* definitions MIPS: tlbex: Remove cpu_has_local_ebase MIPS: tlbex: Simplify r3k check MIPS: Select R3k-style TLB in Kconfig MIPS: PCI: refactor ioc3 special handling mips: remove ioremap_cachable mips/atomic: Fix smp_mb__{before,after}_atomic() mips/atomic: Fix loongson_llsc_mb() wreckage mips/atomic: Fix cmpxchg64 barriers MIPS: Octeon: remove duplicated include from dma-octeon.c firmware: bcm47xx_nvram: Allow COMPILE_TEST firmware: bcm47xx_nvram: Correct size_t printf format MIPS: Treat Loongson Extensions as ASEs MIPS: Remove dev_err() usage after platform_get_irq() MIPS: dts: mscc: describe the PTP ready interrupt MIPS: dts: mscc: describe the PTP register range ...
- Loading branch information
Showing
143 changed files
with
2,916 additions
and
4,954 deletions.
There are no files selected for viewing
22 changes: 0 additions & 22 deletions
22
Documentation/devicetree/bindings/pwm/ingenic,jz47xx-pwm.txt
This file was deleted.
Oops, something went wrong.
137 changes: 137 additions & 0 deletions
137
Documentation/devicetree/bindings/timer/ingenic,tcu.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,137 @@ | ||
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 | ||
followed by "simple-mfd". | ||
- reg: Should be the offset/length value corresponding to the TCU registers | ||
- clocks: List of phandle & clock specifiers for clocks external to the TCU. | ||
The "pclk", "rtc" and "ext" clocks should be provided. The "tcu" clock | ||
should be provided if the SoC has it. | ||
- 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. | ||
- interrupts : Specifies the interrupt the controller is connected to. | ||
|
||
Optional properties: | ||
|
||
- ingenic,pwm-channels-mask: Bitmask of TCU channels reserved for PWM use. | ||
Default value is 0xfc. | ||
|
||
|
||
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 "ingenic,jz4740-watchdog" | ||
- clocks: phandle to the WDT clock | ||
- clock-names: should be "wdt" | ||
|
||
|
||
OS Timer 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", "simple-mfd"; | ||
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>; | ||
clock-names = "rtc", "ext", "pclk"; | ||
|
||
interrupt-controller; | ||
#interrupt-cells = <1>; | ||
|
||
interrupt-parent = <&intc>; | ||
interrupts = <27 26 25>; | ||
|
||
watchdog: watchdog@0 { | ||
compatible = "ingenic,jz4740-watchdog"; | ||
reg = <0x0 0xc>; | ||
|
||
clocks = <&tcu TCU_CLK_WDT>; | ||
clock-names = "wdt"; | ||
}; | ||
|
||
pwm: pwm@40 { | ||
compatible = "ingenic,jz4740-pwm"; | ||
reg = <0x40 0x80>; | ||
|
||
#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>; | ||
|
||
clocks = <&tcu TCU_CLK_OST>; | ||
clock-names = "ost"; | ||
|
||
interrupts = <15>; | ||
}; | ||
}; | ||
}; |
17 changes: 0 additions & 17 deletions
17
Documentation/devicetree/bindings/watchdog/ingenic,jz4740-wdt.txt
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
.. SPDX-License-Identifier: GPL-2.0 | ||
=============================================== | ||
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 JZ4760B 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 drivers/clk/ingenic/tcu.c | ||
interrupts drivers/irqchip/irq-ingenic-tcu.c | ||
timers drivers/clocksource/ingenic-timer.c | ||
OST drivers/clocksource/ingenic-ost.c | ||
PWM drivers/pwm/pwm-jz4740.c | ||
watchdog drivers/watchdog/jz4740_wdt.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. |
Oops, something went wrong.