ARM: Versatile irq and clock DT support
Subsystems (7)
v2 cover ARM: Versatile irq and clock DT support
From: Rob Herring <[email protected]>
This series is some preparation work to fully convert Versatile platform to DT. This converts the IRQ initialization to DT based init and adds clocks to the Versatile DT. This doesn't actually enable using common clock framework, but that is only a matter of removing the old clock code and enabling the appropriate Kconfig options. This will be done when Versatile can be completely converted over to DT boot. I have that working in my tree, but full DT conversion is also dependent on DT PCI support.
For v2, the all users (i.e. Integrator) of irq-versatile-fpga are converted over to use IRQCHIP_DECLARE. The pass-thru feature setup is using the compatible string instead of adding a new property.
I've tested Versatile and Integrator under QEMU and Linus Walleij has tested an earlier version on Versatile AB h/w.
Linus, This could use testing again on Versatile.
Rob
Rob Herring (11):
dts: versatile: add missing irq controller properties
irqchip: versatile-fpga: Add IRQCHIP_DECLARE support
irqchip: versatile-fpga: add support for arm,versatile-sic
ARM: integrator: convert to use irqchip_init
ARM: versatile: remove init_irq hook for DT boot
dts: versatile: add pl180 compatible strings dt/bindings: arm-boards: add binding for Versatile core module dt/bindings: add compatible string for versatile osc clock
ARM: timer-sp: allow getting timer1 clock from DT to fallback to
legacy clock
dts: versatile: add clock tree
clk: versatile: add versatile OSC support
Documentation/devicetree/bindings/arm/arm-boards | 6 ++
.../devicetree/bindings/clock/arm-integrator.txt | 4 +-
arch/arm/boot/dts/versatile-ab.dts | 81 +++++++++++++++++++++-
arch/arm/boot/dts/versatile-pb.dts | 12 +++-
arch/arm/common/timer-sp.c | 4 +-
arch/arm/mach-integrator/integrator_ap.c | 10 +--
arch/arm/mach-integrator/integrator_cp.c | 10 +--
arch/arm/mach-versatile/versatile_dt.c | 1 -
drivers/clk/versatile/Makefile | 3 +-
.../{clk-integrator.c => clk-versatile.c} | 35 +++++++++-
drivers/irqchip/irq-versatile-fpga.c | 17 ++++-
11 files changed, 155 insertions(+), 28 deletions(-)
rename drivers/clk/versatile/{clk-integrator.c => clk-versatile.c} (66%)Signature · 1 line
1.9.1
PATCH v2 1/11 dts: versatile: add missing irq controller properties
From: Rob Herring <[email protected]>
Add valid-mask and clear-mask properties to the versatile dts so the platform code doing the same thing can be removed.
---
v2:
- Drop the passthru-mask property
arch/arm/boot/dts/versatile-ab.dts | 4 ++++ 1 file changed, 4 insertions(+)
arch/arm/boot/dts/versatile-ab.dts +4 -0
@@ -59,6 +59,8 @@ interrupt-controller; #interrupt-cells = <1>; reg = <0x10140000 0x1000>; + clear-mask = <0xffffffff>; + valid-mask = <0xffffffff>; }; sic: intc at 10003000 {
@@ -68,6 +70,8 @@ reg = <0x10003000 0x1000>; interrupt-parent = <&vic>; interrupts = <31>; /* Cascaded to vic */ + clear-mask = <0xffffffff>; + valid-mask = <0xffc203f8>; }; dma at 10130000 {
Signature · 1 line
1.9.1
PATCH v2 2/11 irqchip: versatile-fpga: Add IRQCHIP_DECLARE support
In reply to Rob HerringFrom: Rob Herring <[email protected]>
Add support for initialization using IRQCHIP_DECLARE. This also requires that the controller initialization set the handle_irq function pointer itself when it is a primary controller.
---
v2:
- New patch
drivers/irqchip/irq-versatile-fpga.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
drivers/irqchip/irq-versatile-fpga.c +6 -1
@@ -14,6 +14,8 @@#include <asm/exception.h> #include <asm/mach/irq.h> +#include "irqchip.h" +#define IRQ_STATUS 0x00#define IRQ_RAW_STATUS 0x04#define IRQ_ENABLE_SET 0x08
@@ -201,8 +203,10 @@ int __init fpga_irq_of_init(struct device_node *node,/* Some chips are cascaded from a parent IRQ */ parent_irq =irq_of_parse_and_map (node,0 ); -if (!parent_irq) +if (!parent_irq) { +set_handle_irq (fpga_handle_irq); parent_irq =-1 ; + }fpga_irq_init (base, node->name,0 , parent_irq, valid_mask, node);
@@ -211,4 +215,5 @@ int __init fpga_irq_of_init(struct device_node *node, return 0; } +IRQCHIP_DECLARE (arm_fpga,"arm,versatile-fpga-irq" , fpga_irq_of_init);#endif
Signature · 1 line
1.9.1
PATCH v2 2/11 irqchip: versatile-fpga: Add IRQCHIP_DECLARE support
Quoted 6 lines · Rob Herring
From: Rob Herring <[email protected]>
Add support for initialization using
IRQCHIP_DECLARE. This also requires that the controller initialization set thehandle_irqfunction pointer itself when it is a primary controller.
Quoted 6 lines
Signed-off-by Rob Herring <[email protected]>Cc Thomas Gleixner <[email protected]>Cc Jason Cooper <[email protected]>---
v2:
- New patch
I just assume you know what you're doing ;-)
Yours,
Linus Walleij
PATCH v2 3/11 irqchip: versatile-fpga: add support for arm, versatile-sic
In reply to Rob HerringFrom: Rob Herring <[email protected]>
The secondary controller on ARM Versatile AB and PB is similar to other ARM platforms, but has a pass-thru register to connect some interrupts directly to interrupt inputs on the primary interrupt controller. The PIC_ENABLES register needs to be configured for proper operation when the matching node is arm,versatile-sic. Add the the necessary IRQCHIP_DECLARE as well.
---
v2:
- Rework to use the compatible string for pass-thru register setup.
drivers/irqchip/irq-versatile-fpga.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
drivers/irqchip/irq-versatile-fpga.c +10 -0
@@ -28,6 +28,8 @@#define FIQ_ENABLE_SET 0x28#define FIQ_ENABLE_CLEAR 0x2C +#define PIC_ENABLES 0x20/* set interrupt pass through bits */ +/** * struct fpga_irq_data - irq data container for the FPGA IRQ controller * @base: memory offset in virtual memory
@@ -213,7 +215,15 @@ int __init fpga_irq_of_init(struct device_node *node,writel (clear_mask, base +IRQ_ENABLE_CLEAR );writel (clear_mask, base +FIQ_ENABLE_CLEAR ); +/* +* On Versatile AB/PB, some secondary interrupts have a direct +* pass-thru to the primary controller which need to be enabled. +*/ +if (of_device_is_compatible (node,"arm,versatile-sic" )) +writel (0xffd00000 , base +PIC_ENABLES ); + return 0; }IRQCHIP_DECLARE (arm_fpga,"arm,versatile-fpga-irq" , fpga_irq_of_init); +IRQCHIP_DECLARE (arm_fpga_sic,"arm,versatile-sic" , fpga_irq_of_init);#endif
Signature · 1 line
1.9.1
PATCH v2 3/11 irqchip: versatile-fpga: add support for arm, versatile-sic
Quoted 9 lines · Rob Herring
From: Rob Herring <[email protected]>
The secondary controller on ARM Versatile AB and PB is similar to other ARM platforms, but has a pass-thru register to connect some interrupts directly to interrupt inputs on the primary interrupt controller. The
PIC_ENABLESregister needs to be configured for proper operation when the matching node is arm,versatile-sic. Add the the necessaryIRQCHIP_DECLAREas well.
Quoted 7 lines
Signed-off-by Rob Herring <[email protected]>Cc Thomas Gleixner <[email protected]>Cc Jason Cooper <[email protected]>Cc Arnd Bergmann <[email protected]>---
v2:
- Rework to use the compatible string for pass-thru register setup.
Nice!
drivers/irqchip/irq-versatile-fpga.c int __init fpga_irq_of_init(struct device_node *node, · line 223
Quoted 6 lines
drivers/irqchip/irq-versatile-fpga.c +6
-0+/* +* On Versatile AB/PB, some secondary interrupts have a direct +* pass-thru to the primary controller which need to be enabled. +*/ +if (of_device_is_compatible (node,"arm,versatile-sic" )) +writel (0xffd00000 , base +PIC_ENABLES );
Maybe mention that we pass thru IRQs 20 and 22 thru 31 and why exactly these IRQs?
Anyway:
Yours,
Linus Walleij
PATCH v2 4/11 ARM: integrator: convert to use irqchip_init
In reply to Rob HerringFrom: Rob Herring <[email protected]>
Now that versatile-fpga irqchip has IRQCHIP_DECLARE support, the interrupt related initialization can be removed.
---
v2:
- New patch
arch/arm/mach-integrator/integrator_ap.c | 10 ++-------- arch/arm/mach-integrator/integrator_cp.c | 10 ++-------- 2 files changed, 4 insertions(+), 16 deletions(-)
arch/arm/mach-integrator/integrator_ap.c +2 -8
@@ -31,7 +31,7 @@#include <linux/clockchips.h> #include <linux/interrupt.h> #include <linux/io.h> -#include <linux/irqchip/versatile-fpga.h> +#include <linux/irqchip.h> #include <linux/mtd/physmap.h> #include <linux/clk.h> #include <linux/platform_data/clk-integrator.h>
@@ -439,15 +439,10 @@ static void __init ap_of_timer_init(void)integrator_clockevent_init (rate, base, irq); } -static const struct of_device_id fpga_irq_of_match[]__initconst = { - { .compatible ="arm,versatile-fpga-irq" , .data = fpga_irq_of_init, }, - {/* Sentinel */ } -}; -static void __init ap_init_irq_of (void ) {cm_init (); -of_irq_init (fpga_irq_of_match); +irqchip_init (); }/* For the Device Tree, add in the UART callbacks as AUXDATA */
@@ -570,7 +565,6 @@ DT_MACHINE_START(INTEGRATOR_AP_DT, "ARM Integrator/AP (Device Tree)") .map_io = ap_map_io, .init_early = ap_init_early, .init_irq = ap_init_irq_of, - .handle_irq = fpga_handle_irq, .init_time = ap_of_timer_init, .init_machine = ap_init_of, .restart = integrator_restart,
arch/arm/mach-integrator/integrator_cp.c +2 -8
@@ -20,7 +20,7 @@#include <linux/amba/clcd.h> #include <linux/amba/mmci.h> #include <linux/io.h> -#include <linux/irqchip/versatile-fpga.h> +#include <linux/irqchip.h> #include <linux/gfp.h> #include <linux/mtd/physmap.h> #include <linux/of_irq.h>
@@ -235,15 +235,10 @@ static void __init intcp_init_early(void)sched_clock_register (intcp_read_sched_clock,32 ,24000000 ); } -static const struct of_device_id fpga_irq_of_match[]__initconst = { - { .compatible ="arm,versatile-fpga-irq" , .data = fpga_irq_of_init, }, - {/* Sentinel */ } -}; -static void __init intcp_init_irq_of (void ) {cm_init (); -of_irq_init (fpga_irq_of_match); +irqchip_init (); }/*
@@ -340,7 +335,6 @@ DT_MACHINE_START(INTEGRATOR_CP_DT, "ARM Integrator/CP (Device Tree)") .map_io = intcp_map_io, .init_early = intcp_init_early, .init_irq = intcp_init_irq_of, - .handle_irq = fpga_handle_irq, .init_machine = intcp_init_of, .restart = integrator_restart, .dt_compat = intcp_dt_board_compat,
Signature · 1 line
1.9.1
PATCH v2 4/11 ARM: integrator: convert to use irqchip_init
Quoted 11 lines · Rob Herring
From: Rob Herring <[email protected]>
Now that versatile-fpga irqchip has
IRQCHIP_DECLAREsupport, the interrupt related initialization can be removed.Signed-off-by Rob Herring <[email protected]>Cc Russell King <[email protected]>Cc Linus Walleij <[email protected]>---
v2:
- New patch
Awesomeness, Acked-by.
Will provide Tested-by tags too once I get it running.
Yours,
Linus Walleij
PATCH v2 5/11 ARM: versatile: remove init_irq hook for DT boot
In reply to Rob HerringFrom: Rob Herring <[email protected]>
Now that versatile's irqchips are initialized from DT, the init_irq hook can be removed.
---
v2:
- no change
arch/arm/mach-versatile/versatile_dt.c | 1 - 1 file changed, 1 deletion(-)
arch/arm/mach-versatile/versatile_dt.c +0 -1
@@ -44,7 +44,6 @@ static const char *versatile_dt_match[] __initconst = {DT_MACHINE_START (VERSATILE_PB ,"ARM-Versatile (Device Tree Support)" ) .map_io = versatile_map_io, .init_early = versatile_init_early, - .init_irq = versatile_init_irq, .init_machine = versatile_dt_init, .dt_compat = versatile_dt_match, .restart = versatile_restart,
Signature · 1 line
1.9.1
PATCH v2 5/11 ARM: versatile: remove init_irq hook for DT boot
Quoted 7 lines · Rob Herring
From: Rob Herring <[email protected]>
Now that versatile's irqchips are initialized from DT, the
init_irqhook can be removed.Signed-off-by Rob Herring <[email protected]>Acked-by Arnd Bergmann <[email protected]>
Yours,
Linus Walleij
PATCH v2 6/11 dts: versatile: add pl180 compatible strings
In reply to Rob HerringFrom: Rob Herring <[email protected]>
While not needed for probing, add the "arm,pl180" compatible string for completeness.
---
v2:
- no change
arch/arm/boot/dts/versatile-ab.dts | 2 +- arch/arm/boot/dts/versatile-pb.dts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
arch/arm/boot/dts/versatile-ab.dts +1 -1
@@ -187,7 +187,7 @@ interrupts = <24>; }; mmc at 5000 { - compatible = "arm,primecell"; + compatible = "arm,pl180", "arm,primecell"; reg = < 0x5000 0x1000>; interrupts-extended = <&vic 22 &sic 2>; };
arch/arm/boot/dts/versatile-pb.dts +1 -1
@@ -39,7 +39,7 @@ interrupts = <5>; }; mmc at b000 { - compatible = "arm,primecell"; + compatible = "arm,pl180", "arm,primecell"; reg = <0xb000 0x1000>; interrupts-extended = <&vic 23 &sic 2>; };
Signature · 1 line
1.9.1
PATCH v2 7/11 dt/bindings: arm-boards: add binding for Versatile core module
In reply to Rob HerringFrom: Rob Herring <[email protected]>
Add binding for the core module found on ARM versatile AB and PB boards.
---
v2:
- no change
Documentation/devicetree/bindings/arm/arm-boards | 6 ++++++ 1 file changed, 6 insertions(+)
Documentation/devicetree/bindings/arm/arm-boards +6 -0
@@ -86,3 +86,9 @@ Interrupt controllers: compatible = "arm,versatile-sic"; interrupt-controller; #interrupt-cells = <1>; + +Required nodes: + +- core-module: the root node to the Versatile platforms must have + a core-module with regs and the compatible strings + "arm,core-module-versatile", "syscon"
Signature · 1 line
1.9.1
PATCH v2 7/11 dt/bindings: arm-boards: add binding for Versatile core module
Quoted 10 lines · Rob Herring
From: Rob Herring <[email protected]>
Add binding for the core module found on ARM versatile AB and PB boards.
Signed-off-by Rob Herring <[email protected]>Cc Pawel Moll <[email protected]>Cc Mark Rutland <[email protected]>Cc Ian Campbell <[email protected]>Cc Kumar Gala <[email protected]>Acked-by Arnd Bergmann <[email protected]>
Makes me wonder if I should abstract out the Integrator core modules too. Oh well, put on my TODO...
Yours,
Linus Walleij
PATCH v2 8/11 dt/bindings: add compatible string for versatile osc clock
In reply to Rob HerringFrom: Rob Herring <[email protected]>
---
v2:
- no change
Documentation/devicetree/bindings/clock/arm-integrator.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
Documentation/devicetree/bindings/clock/arm-integrator.txt +2 -2
@@ -1,4 +1,4 @@ -Clock bindings for ARM Integrator Core Module clocks +Clock bindings for ARM Integrator and Versatile Core Module clocks Auxilary Oscillator Clock
@@ -12,7 +12,7 @@ parent node. Required properties: -- compatible: must be "arm,integrator-cm-auxosc" +- compatible: must be "arm,integrator-cm-auxosc" or "arm,versatile-cm-auxosc" - #clock-cells: must be <0> Optional properties:
Signature · 1 line
1.9.1
PATCH v2 9/11 ARM: timer-sp: allow getting timer1 clock from DT to fallback to legacy clock
In reply to Rob HerringFrom: Rob Herring <[email protected]>
The sp804 clocks may be specified in DT, but the kernel may still be using legacy clocks. This is handled if a single clock for sp804 is present, but not when 3 clocks are present.
This prevents Versatile platforms from breaking when the DT has clocks added.
---
v2:
- New patch necessary to handle DT with 3 clocks in sp804 node and still use the legacy non-DT clocks.
arch/arm/common/timer-sp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm/common/timer-sp.c +2 -2
@@ -233,13 +233,13 @@ static void __init sp804_of_init(struct device_node *np)if (IS_ERR (clk1)) clk1 =NULL ; -/* Get the 2nd clock if the timer has 2 timer clocks */ +/* Get the 2nd clock if the timer has 3 timer clocks */ if (of_count_phandle_with_args (np,"clocks" ,"#clock-cells" ) ==3 ) { clk2 =of_clk_get (np,1 );if (IS_ERR (clk2)) {pr_err ("sp804: %s clock not found: %d\n" , np->name, (int )PTR_ERR (clk2)); - goto err; + clk2 =NULL ; } }else clk2 = clk1;
Signature · 1 line
1.9.1
PATCH v2 10/11 dts: versatile: add clock tree
In reply to Rob HerringFrom: Rob Herring <[email protected]>
The versatile dts is missing any clock data. Add the clocks.
It is not clear from the documentation where pclk comes from, so for now it is a dummy clock which is sufficient for things to work.
---
v2:
- Move and Rename crystal node.
- Define pclk as 24MHz based on Linus W's input
- fix timer to be 3 clocks and fix names
- Fix sspclk clock name
arch/arm/boot/dts/versatile-ab.dts | 75 ++++++++++++++++++++++++++++++++++++++ arch/arm/boot/dts/versatile-pb.dts | 10 +++++ 2 files changed, 85 insertions(+)
arch/arm/boot/dts/versatile-ab.dts +75 -0
@@ -19,6 +19,41 @@ reg = <0x0 0x08000000>; }; + xtal24mhz: xtal24mhz at 24M { + #clock-cells = <0>; + compatible = "fixed-clock"; + clock-frequency = <24000000>; + }; + + core-module at 10000000 { + compatible = "arm,core-module-versatile", "syscon"; + reg = <0x10000000 0x200>; + + /* OSC1 on AB, OSC4 on PB */ + osc1: cm_aux_osc at 24M { + #clock-cells = <0>; + compatible = "arm,versatile-cm-auxosc"; + clocks = <&xtal24mhz>; + }; + + /* The timer clock is the 24 MHz oscillator divided to 1MHz */ + timclk: timclk at 1M { + #clock-cells = <0>; + compatible = "fixed-factor-clock"; + clock-div = <24>; + clock-mult = <1>; + clocks = <&xtal24mhz>; + }; + + pclk: pclk at 24M { + #clock-cells = <0>; + compatible = "fixed-factor-clock"; + clock-div = <1>; + clock-mult = <1>; + clocks = <&xtal24mhz>; + }; + }; + flash at 34000000 { compatible = "arm,versatile-flash"; reg = <0x34000000 0x4000000>;
@@ -78,63 +113,85 @@ compatible = "arm,pl081", "arm,primecell"; reg = <0x10130000 0x1000>; interrupts = <17>; + clocks = <&pclk>; + clock-names = "apb_pclk"; }; uart0: uart at 101f1000 { compatible = "arm,pl011", "arm,primecell"; reg = <0x101f1000 0x1000>; interrupts = <12>; + clocks = <&xtal24mhz>, <&pclk>; + clock-names = "uartclk", "apb_pclk"; }; uart1: uart at 101f2000 { compatible = "arm,pl011", "arm,primecell"; reg = <0x101f2000 0x1000>; interrupts = <13>; + clocks = <&xtal24mhz>, <&pclk>; + clock-names = "uartclk", "apb_pclk"; }; uart2: uart at 101f3000 { compatible = "arm,pl011", "arm,primecell"; reg = <0x101f3000 0x1000>; interrupts = <14>; + clocks = <&xtal24mhz>, <&pclk>; + clock-names = "uartclk", "apb_pclk"; }; smc at 10100000 { compatible = "arm,primecell"; reg = <0x10100000 0x1000>; + clocks = <&pclk>; + clock-names = "apb_pclk"; }; mpmc at 10110000 { compatible = "arm,primecell"; reg = <0x10110000 0x1000>; + clocks = <&pclk>; + clock-names = "apb_pclk"; }; display at 10120000 { compatible = "arm,pl110", "arm,primecell"; reg = <0x10120000 0x1000>; interrupts = <16>; + clocks = <&osc1>, <&pclk>; + clock-names = "clcd", "apb_pclk"; }; sctl at 101e0000 { compatible = "arm,primecell"; reg = <0x101e0000 0x1000>; + clocks = <&pclk>; + clock-names = "apb_pclk"; }; watchdog at 101e1000 { compatible = "arm,primecell"; reg = <0x101e1000 0x1000>; interrupts = <0>; + clocks = <&pclk>; + clock-names = "apb_pclk"; }; timer at 101e2000 { compatible = "arm,sp804", "arm,primecell"; reg = <0x101e2000 0x1000>; interrupts = <4>; + clocks = <&timclk>, <&timclk>, <&pclk>; + clock-names = "timer0", "timer1", "apb_pclk"; }; timer at 101e3000 { compatible = "arm,sp804", "arm,primecell"; reg = <0x101e3000 0x1000>; interrupts = <5>; + clocks = <&timclk>, <&timclk>, <&pclk>; + clock-names = "timer0", "timer1", "apb_pclk"; }; gpio0: gpio at 101e4000 {
@@ -145,6 +202,8 @@ #gpio-cells = <2>; interrupt-controller; #interrupt-cells = <2>; + clocks = <&pclk>; + clock-names = "apb_pclk"; }; gpio1: gpio at 101e5000 {
@@ -155,24 +214,32 @@ #gpio-cells = <2>; interrupt-controller; #interrupt-cells = <2>; + clocks = <&pclk>; + clock-names = "apb_pclk"; }; rtc at 101e8000 { compatible = "arm,pl030", "arm,primecell"; reg = <0x101e8000 0x1000>; interrupts = <10>; + clocks = <&pclk>; + clock-names = "apb_pclk"; }; sci at 101f0000 { compatible = "arm,primecell"; reg = <0x101f0000 0x1000>; interrupts = <15>; + clocks = <&pclk>; + clock-names = "apb_pclk"; }; ssp at 101f4000 { compatible = "arm,pl022", "arm,primecell"; reg = <0x101f4000 0x1000>; interrupts = <11>; + clocks = <&xtal24mhz>, <&pclk>; + clock-names = "SSPCLK", "apb_pclk"; }; fpga {
@@ -185,23 +252,31 @@ compatible = "arm,primecell"; reg = <0x4000 0x1000>; interrupts = <24>; + clocks = <&pclk>; + clock-names = "apb_pclk"; }; mmc at 5000 { compatible = "arm,pl180", "arm,primecell"; reg = < 0x5000 0x1000>; interrupts-extended = <&vic 22 &sic 2>; + clocks = <&xtal24mhz>, <&pclk>; + clock-names = "mclk", "apb_pclk"; }; kmi at 6000 { compatible = "arm,pl050", "arm,primecell"; reg = <0x6000 0x1000>; interrupt-parent = <&sic>; interrupts = <3>; + clocks = <&xtal24mhz>, <&pclk>; + clock-names = "KMIREFCLK", "apb_pclk"; }; kmi at 7000 { compatible = "arm,pl050", "arm,primecell"; reg = <0x7000 0x1000>; interrupt-parent = <&sic>; interrupts = <4>; + clocks = <&xtal24mhz>, <&pclk>; + clock-names = "KMIREFCLK", "apb_pclk"; }; }; };
arch/arm/boot/dts/versatile-pb.dts +10 -0
@@ -13,6 +13,8 @@ #gpio-cells = <2>; interrupt-controller; #interrupt-cells = <2>; + clocks = <&pclk>; + clock-names = "apb_pclk"; }; gpio3: gpio at 101e7000 {
@@ -23,6 +25,8 @@ #gpio-cells = <2>; interrupt-controller; #interrupt-cells = <2>; + clocks = <&pclk>; + clock-names = "apb_pclk"; }; fpga {
@@ -31,17 +35,23 @@ reg = <0x9000 0x1000>; interrupt-parent = <&sic>; interrupts = <6>; + clocks = <&xtal24mhz>, <&pclk>; + clock-names = "uartclk", "apb_pclk"; }; sci at a000 { compatible = "arm,primecell"; reg = <0xa000 0x1000>; interrupt-parent = <&sic>; interrupts = <5>; + clocks = <&xtal24mhz>; + clock-names = "apb_pclk"; }; mmc at b000 { compatible = "arm,pl180", "arm,primecell"; reg = <0xb000 0x1000>; interrupts-extended = <&vic 23 &sic 2>; + clocks = <&xtal24mhz>, <&pclk>; + clock-names = "mclk", "apb_pclk"; }; }; };
Signature · 1 line
1.9.1
PATCH v2 10/11 dts: versatile: add clock tree
Quoted 7 lines · Rob Herring
From: Rob Herring <[email protected]>
The versatile dts is missing any clock data. Add the clocks.
It is not clear from the documentation where pclk comes from, so for now it is a dummy clock which is sufficient for things to work.
Quoted 8 lines
Signed-off-by Rob Herring <[email protected]>Acked-by Arnd Bergmann <[email protected]>---
v2:
- Move and Rename crystal node.
- Define pclk as 24MHz based on Linus W's input
- fix timer to be 3 clocks and fix names
- Fix sspclk clock name
Yours,
Linus Walleij
PATCH v2 11/11 clk: versatile: add versatile OSC support
In reply to Rob HerringFrom: Rob Herring <[email protected]>
Versatile platforms share the same OSC programming model as Integrator platforms. Add the necessary parameters and init functions for Versatile.
Renaming the file to clk-versatile.c as versatile is used as the family name for ARM, Ltd. boards.
---
v2:
- Rename clk-integrator.c to clk-versatile.c
drivers/clk/versatile/Makefile | 3 +-
.../{clk-integrator.c => clk-versatile.c} | 35 ++++++++++++++++++++--
2 files changed, 34 insertions(+), 4 deletions(-)
rename drivers/clk/versatile/{clk-integrator.c => clk-versatile.c} (66%)drivers/clk/versatile/Makefile +1 -2
@@ -1,6 +1,5 @@ # Makefile for Versatile-specific clocks -obj-$(CONFIG_ICST) += clk-icst.o -obj-$(CONFIG_ARCH_INTEGRATOR) += clk-integrator.o +obj-$(CONFIG_ICST) += clk-icst.o clk-versatile.o obj-$(CONFIG_INTEGRATOR_IMPD1) += clk-impd1.o obj-$(CONFIG_ARCH_REALVIEW) += clk-realview.o obj-$(CONFIG_ARCH_VEXPRESS) += clk-vexpress.o clk-sp810.o
drivers/clk/versatile/clk-versatile.c renamed from drivers/clk/versatile/clk-integrator.c +33 -2
@@ -17,6 +17,9 @@#define INTEGRATOR_HDR_LOCK_OFFSET 0x14 +#define VERSATILE_SYS_OSCCLCD_OFFSET 0x1c +#define VERSATILE_SYS_LOCK_OFFSET 0x20 +/* Base offset for the core module */ static void __iomem *cm_base;
@@ -37,11 +40,27 @@ static const struct clk_icst_desc __initdata cm_auxosc_desc = { .lock_offset = INTEGRATOR_HDR_LOCK_OFFSET, }; -static void __init of_integrator_cm_osc_setup (struct device_node *np) +static const struct icst_params versatile_auxosc_params = { + .vco_max =ICST307_VCO_MAX , + .vco_min =ICST307_VCO_MIN , + .vd_min =4 +8 , + .vd_max =511 +8 , + .rd_min =1 +2 , + .rd_max =127 +2 , + .s2div = icst307_s2div, + .idx2s = icst307_idx2s, +}; + +static const struct clk_icst_desc versatile_auxosc_desc__initconst = { + .params = &versatile_auxosc_params, + .vco_offset =VERSATILE_SYS_OSCCLCD_OFFSET , + .lock_offset =VERSATILE_SYS_LOCK_OFFSET , +}; +static void __init cm_osc_setup (struct device_node *np, +const struct clk_icst_desc *desc) {struct clk *clk =ERR_PTR (-EINVAL );const char *clk_name = np->name; -const struct clk_icst_desc *desc = &cm_auxosc_desc;const char *parent_name;if (!cm_base) {
@@ -65,5 +84,17 @@ static void __init of_integrator_cm_osc_setup(struct device_node *np)if (!IS_ERR (clk))of_clk_add_provider (np, of_clk_src_simple_get, clk); } + +static void __init of_integrator_cm_osc_setup (struct device_node *np) +{ +cm_osc_setup (np, &cm_auxosc_desc); +}CLK_OF_DECLARE (integrator_cm_auxosc_clk,"arm,integrator-cm-auxosc" , of_integrator_cm_osc_setup); + +static void __init of_versatile_cm_osc_setup (struct device_node *np) +{ +cm_osc_setup (np, &versatile_auxosc_desc); +} +CLK_OF_DECLARE (versatile_cm_auxosc_clk, +"arm,versatile-cm-auxosc" , of_versatile_cm_osc_setup);
Signature · 1 line
1.9.1
PATCH v2 11/11 clk: versatile: add versatile OSC support
Quoted 8 lines · Rob Herring
From: Rob Herring <[email protected]>
Versatile platforms share the same OSC programming model as Integrator platforms. Add the necessary parameters and init functions for Versatile.
Renaming the file to
clk-versatile.cas versatile is used as the family name for ARM, Ltd. boards.
Quoted 6 lines
Signed-off-by Rob Herring <[email protected]>Cc Mike Turquette <[email protected]>Acked-by Arnd Bergmann <[email protected]>---
v2:
- Renameclk-integrator.ctoclk-versatile.c
Nice!
drivers/clk/versatile/clk-versatile.c
Quoted 2 lines
drivers/clk/versatile/clk-versatile.c renamed from drivers/clk/versatile/clk-integrator.c +0
-0
I bet you want to augment the comments in the top of the file header a bit to mention the Versatiles.
With that:
Yours,
Linus Walleij
PATCH v2 11/11 clk: versatile: add versatile OSC support
In reply to Rob HerringQuoting Rob Herring (2014-05-29 15:40:21)
Quoted 11 lines
From: Rob Herring <[email protected]>
Versatile platforms share the same OSC programming model as Integrator platforms. Add the necessary parameters and init functions for Versatile.
Renaming the file to
clk-versatile.cas versatile is used as the family name for ARM, Ltd. boards.Signed-off-by Rob Herring <[email protected]>Cc Mike Turquette <[email protected]>Acked-by Arnd Bergmann <[email protected]>
So it's OK to rename the file and add the new stuff in one commit? I thought there were some guidelines about doing renames separately...
Regards,
Mike
Quoted 89 lines
---
v2:
- Renameclk-integrator.ctoclk-versatile.cdrivers/clk/versatile/Makefile | 3 +- .../{clk-integrator.c => clk-versatile.c} | 35 ++++++++++++++++++++-- 2 files changed, 34 insertions(+), 4 deletions(-) rename drivers/clk/versatile/{clk-integrator.c => clk-versatile.c} (66%)drivers/clk/versatile/Makefile +1
-2@@ -1,6 +1,5 @@ # Makefile for Versatile-specific clocks -obj-$(CONFIG_ICST) += clk-icst.o -obj-$(CONFIG_ARCH_INTEGRATOR) += clk-integrator.o +obj-$(CONFIG_ICST) += clk-icst.o clk-versatile.o obj-$(CONFIG_INTEGRATOR_IMPD1) += clk-impd1.o obj-$(CONFIG_ARCH_REALVIEW) += clk-realview.o obj-$(CONFIG_ARCH_VEXPRESS) += clk-vexpress.o clk-sp810.odrivers/clk/versatile/clk-versatile.c renamed from drivers/clk/versatile/clk-integrator.c +33
-2@@ -17,6 +17,9 @@#define INTEGRATOR_HDR_LOCK_OFFSET 0x14 +#define VERSATILE_SYS_OSCCLCD_OFFSET 0x1c +#define VERSATILE_SYS_LOCK_OFFSET 0x20 +/* Base offset for the core module */ static void __iomem *cm_base;@@ -37,11 +40,27 @@ static const struct clk_icst_desc __initdata cm_auxosc_desc = { .lock_offset = INTEGRATOR_HDR_LOCK_OFFSET, }; -static void __init of_integrator_cm_osc_setup (struct device_node *np) +static const struct icst_params versatile_auxosc_params = { + .vco_max =ICST307_VCO_MAX , + .vco_min =ICST307_VCO_MIN , + .vd_min =4 +8 , + .vd_max =511 +8 , + .rd_min =1 +2 , + .rd_max =127 +2 , + .s2div = icst307_s2div, + .idx2s = icst307_idx2s, +}; + +static const struct clk_icst_desc versatile_auxosc_desc__initconst = { + .params = &versatile_auxosc_params, + .vco_offset =VERSATILE_SYS_OSCCLCD_OFFSET , + .lock_offset =VERSATILE_SYS_LOCK_OFFSET , +}; +static void __init cm_osc_setup (struct device_node *np, +const struct clk_icst_desc *desc) {struct clk *clk =ERR_PTR (-EINVAL );const char *clk_name = np->name; -const struct clk_icst_desc *desc = &cm_auxosc_desc;const char *parent_name;if (!cm_base) {@@ -65,5 +84,17 @@ static void __init of_integrator_cm_osc_setup(struct device_node *np)if (!IS_ERR (clk))of_clk_add_provider (np, of_clk_src_simple_get, clk); } + +static void __init of_integrator_cm_osc_setup (struct device_node *np) +{ +cm_osc_setup (np, &cm_auxosc_desc); +}CLK_OF_DECLARE (integrator_cm_auxosc_clk,"arm,integrator-cm-auxosc" , of_integrator_cm_osc_setup); + +static void __init of_versatile_cm_osc_setup (struct device_node *np) +{ +cm_osc_setup (np, &versatile_auxosc_desc); +} +CLK_OF_DECLARE (versatile_cm_auxosc_clk, +"arm,versatile-cm-auxosc" , of_versatile_cm_osc_setup);Signature · 1 line
1.9.1
PATCH v2 11/11 clk: versatile: add versatile OSC support
Quoted 9 lines · Mike Turquette
Quoting Rob Herring (2014-05-29 15:40:21)
Quoted 8 lines
From: Rob Herring <[email protected]>
Versatile platforms share the same OSC programming model as Integrator platforms. Add the necessary parameters and init functions for Versatile.
Renaming the file to
clk-versatile.cas versatile is used as the family name for ARM, Ltd. boards.
Quoted 6 lines
Quoted 3 lines
Signed-off-by Rob Herring <[email protected]>Cc Mike Turquette <[email protected]>Acked-by Arnd Bergmann <[email protected]>So it's OK to rename the file and add the new stuff in one commit? I thought there were some guidelines about doing renames separately...
You don't want to move of a chunk of code and change it along the way because you can't see the real changes, but a file rename does not affect the diff here (other than the Makefile change).
Rob
Quoted 93 lines
Regards,
MikeQuoted 89 lines
---
v2:
- Renameclk-integrator.ctoclk-versatile.cdrivers/clk/versatile/Makefile | 3 +- .../{clk-integrator.c => clk-versatile.c} | 35 ++++++++++++++++++++-- 2 files changed, 34 insertions(+), 4 deletions(-) rename drivers/clk/versatile/{clk-integrator.c => clk-versatile.c} (66%)drivers/clk/versatile/Makefile +1
-2@@ -1,6 +1,5 @@ # Makefile for Versatile-specific clocks -obj-$(CONFIG_ICST) += clk-icst.o -obj-$(CONFIG_ARCH_INTEGRATOR) += clk-integrator.o +obj-$(CONFIG_ICST) += clk-icst.o clk-versatile.o obj-$(CONFIG_INTEGRATOR_IMPD1) += clk-impd1.o obj-$(CONFIG_ARCH_REALVIEW) += clk-realview.o obj-$(CONFIG_ARCH_VEXPRESS) += clk-vexpress.o clk-sp810.odrivers/clk/versatile/clk-versatile.c renamed from drivers/clk/versatile/clk-integrator.c +33
-3@@ -17,6 +17,9 @@#define INTEGRATOR_HDR_LOCK_OFFSET 0x14 +#define VERSATILE_SYS_OSCCLCD_OFFSET 0x1c +#define VERSATILE_SYS_LOCK_OFFSET 0x20 +/* Base offset for the core module */ static void __iomem *cm_base;@@ -37,11 +40,27 @@ static const struct clk_icst_desc __initdata cm_auxosc_desc = { .lock_offset = INTEGRATOR_HDR_LOCK_OFFSET, }; -static void __init of_integrator_cm_osc_setup (struct device_node *np) +static const struct icst_params versatile_auxosc_params = { + .vco_max =ICST307_VCO_MAX , + .vco_min =ICST307_VCO_MIN , + .vd_min =4 +8 , + .vd_max =511 +8 , + .rd_min =1 +2 , + .rd_max =127 +2 , + .s2div = icst307_s2div, + .idx2s = icst307_idx2s, +}; + +static const struct clk_icst_desc versatile_auxosc_desc__initconst = { + .params = &versatile_auxosc_params, + .vco_offset =VERSATILE_SYS_OSCCLCD_OFFSET , + .lock_offset =VERSATILE_SYS_LOCK_OFFSET , +}; +static void __init cm_osc_setup (struct device_node *np, +const struct clk_icst_desc *desc) {struct clk *clk =ERR_PTR (-EINVAL );const char *clk_name = np->name; -const struct clk_icst_desc *desc = &cm_auxosc_desc;const char *parent_name;if (!cm_base) {@@ -65,5 +84,17 @@ static void __init of_integrator_cm_osc_setup(struct device_node *np)if (!IS_ERR (clk))of_clk_add_provider (np, of_clk_src_simple_get, clk); } + +static void __init of_integrator_cm_osc_setup (struct device_node *np) +{ +cm_osc_setup (np, &cm_auxosc_desc); +}CLK_OF_DECLARE (integrator_cm_auxosc_clk,"arm,integrator-cm-auxosc" , of_integrator_cm_osc_setup); + +static void __init of_versatile_cm_osc_setup (struct device_node *np) +{ +cm_osc_setup (np, &versatile_auxosc_desc); +} +CLK_OF_DECLARE (versatile_cm_auxosc_clk, +"arm,versatile-cm-auxosc" , of_versatile_cm_osc_setup); --1.9.1
PATCH v2 11/11 clk: versatile: add versatile OSC support
Quoting Rob Herring (2014-05-30 19:38:44)
Quoted 14 lines · Mike Turquette
Quoted 13 lines
Quoting Rob Herring (2014-05-29 15:40:21)
Quoted 11 lines
From: Rob Herring <[email protected]>
Versatile platforms share the same OSC programming model as Integrator platforms. Add the necessary parameters and init functions for Versatile.
Renaming the file to
clk-versatile.cas versatile is used as the family name for ARM, Ltd. boards.Signed-off-by Rob Herring <[email protected]>Cc Mike Turquette <[email protected]>Acked-by Arnd Bergmann <[email protected]>
Quoted 6 lines
Quoted 2 lines
So it's OK to rename the file and add the new stuff in one commit? I thought there were some guidelines about doing renames separately...
You don't want to move of a chunk of code and change it along the way because you can't see the real changes, but a file rename does not affect the diff here (other than the
Makefilechange).
Sounds good. Let me know if you want me to take this into clk-next after -rc1 drops. Otherwise:
Regards,
Mike
Quoted 96 lines
Rob
Quoted 93 lines
Regards,
MikeQuoted 89 lines
---
v2:
- Renameclk-integrator.ctoclk-versatile.cdrivers/clk/versatile/Makefile | 3 +- .../{clk-integrator.c => clk-versatile.c} | 35 ++++++++++++++++++++-- 2 files changed, 34 insertions(+), 4 deletions(-) rename drivers/clk/versatile/{clk-integrator.c => clk-versatile.c} (66%)drivers/clk/versatile/Makefile +1
-2@@ -1,6 +1,5 @@ # Makefile for Versatile-specific clocks -obj-$(CONFIG_ICST) += clk-icst.o -obj-$(CONFIG_ARCH_INTEGRATOR) += clk-integrator.o +obj-$(CONFIG_ICST) += clk-icst.o clk-versatile.o obj-$(CONFIG_INTEGRATOR_IMPD1) += clk-impd1.o obj-$(CONFIG_ARCH_REALVIEW) += clk-realview.o obj-$(CONFIG_ARCH_VEXPRESS) += clk-vexpress.o clk-sp810.odrivers/clk/versatile/clk-versatile.c renamed from drivers/clk/versatile/clk-integrator.c +33
-3@@ -17,6 +17,9 @@#define INTEGRATOR_HDR_LOCK_OFFSET 0x14 +#define VERSATILE_SYS_OSCCLCD_OFFSET 0x1c +#define VERSATILE_SYS_LOCK_OFFSET 0x20 +/* Base offset for the core module */ static void __iomem *cm_base;@@ -37,11 +40,27 @@ static const struct clk_icst_desc __initdata cm_auxosc_desc = { .lock_offset = INTEGRATOR_HDR_LOCK_OFFSET, }; -static void __init of_integrator_cm_osc_setup (struct device_node *np) +static const struct icst_params versatile_auxosc_params = { + .vco_max =ICST307_VCO_MAX , + .vco_min =ICST307_VCO_MIN , + .vd_min =4 +8 , + .vd_max =511 +8 , + .rd_min =1 +2 , + .rd_max =127 +2 , + .s2div = icst307_s2div, + .idx2s = icst307_idx2s, +}; + +static const struct clk_icst_desc versatile_auxosc_desc__initconst = { + .params = &versatile_auxosc_params, + .vco_offset =VERSATILE_SYS_OSCCLCD_OFFSET , + .lock_offset =VERSATILE_SYS_LOCK_OFFSET , +}; +static void __init cm_osc_setup (struct device_node *np, +const struct clk_icst_desc *desc) {struct clk *clk =ERR_PTR (-EINVAL );const char *clk_name = np->name; -const struct clk_icst_desc *desc = &cm_auxosc_desc;const char *parent_name;if (!cm_base) {@@ -65,5 +84,17 @@ static void __init of_integrator_cm_osc_setup(struct device_node *np)if (!IS_ERR (clk))of_clk_add_provider (np, of_clk_src_simple_get, clk); } + +static void __init of_integrator_cm_osc_setup (struct device_node *np) +{ +cm_osc_setup (np, &cm_auxosc_desc); +}CLK_OF_DECLARE (integrator_cm_auxosc_clk,"arm,integrator-cm-auxosc" , of_integrator_cm_osc_setup); + +static void __init of_versatile_cm_osc_setup (struct device_node *np) +{ +cm_osc_setup (np, &versatile_auxosc_desc); +} +CLK_OF_DECLARE (versatile_cm_auxosc_clk, +"arm,versatile-cm-auxosc" , of_versatile_cm_osc_setup); --1.9.1
v2 cover ARM: Versatile irq and clock DT support
In reply to Rob HerringQuoted 1 line · Rob Herring
Linus, This could use testing again on Versatile.
OK I should probably test on Versatile *and* the Integrators since these are also affected. Do you have a branch I can pull?
Yours,
Linus Walleij
v2 cover ARM: Versatile irq and clock DT support
Quoted 6 lines · Linus Walleij
Quoted 1 line · Rob Herring
Linus, This could use testing again on Versatile.
OK I should probably test on Versatile *and* the Integrators since these are also affected. Do you have a branch I can pull?
git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git versatile-v2
Rob
v2 cover ARM: Versatile irq and clock DT support
In reply to Linus WalleijLinus,
Quoted 6 lines · Linus Walleij
Quoted 1 line · Rob Herring
Linus, This could use testing again on Versatile.
OK I should probably test on Versatile *and* the Integrators since these are also affected. Do you have a branch I can pull?
Did you get a chance to test this series?
thx,
Jason.
v2 cover ARM: Versatile irq and clock DT support
Quoted 9 lines · Jason Cooper
Quoted 6 lines · Linus Walleij
Quoted 1 line · Rob Herring
Linus, This could use testing again on Versatile.
OK I should probably test on Versatile *and* the Integrators since these are also affected. Do you have a branch I can pull?
Did you get a chance to test this series?
Sadly not yet :-(
I'm snowed under by regressions FTM.
Yours,
Linus Walleij
v2 cover ARM: Versatile irq and clock DT support
Quoted 6 lines · Linus Walleij
Quoted 5 lines · Jason Cooper
Quoted 4 lines · Linus Walleij
Quoted 1 line · Rob Herring
Linus, This could use testing again on Versatile.
Quoted 8 lines
Quoted 4 lines
Quoted 2 lines
OK I should probably test on Versatile *and* the Integrators since these are also affected. Do you have a branch I can pull?
Did you get a chance to test this series?
Sadly not yet :-(
I'm snowed under by regressions FTM.
Tested now and it works like a charm on Versatile/AB.
Also sent a Tested-by tag to Rob's pull request.
Yours,
Linus Walleij