ARM: Kirkwood: switch to DT clock providers

With true DT clock providers available switch Kirkwood clock setup in
DT- enabled boards. While AUXDATA can be removed completely from bus
probing, some devices still don't know about DT. Therefore, some clkdev
aliases are created until these devices also move to DT.

Signed-off-by: Andrew Lunn <andrew@lunn.ch>
This commit is contained in:
Andrew Lunn 2012-11-17 15:22:28 +01:00 committed by Thomas Petazzoni
parent 5b03df9ace
commit 1611f87251
4 changed files with 83 additions and 13 deletions

View file

@ -19,6 +19,12 @@
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
core_clk: core-clocks@10030 {
compatible = "marvell,kirkwood-core-clock";
reg = <0x10030 0x4>;
#clock-cells = <1>;
};
gpio0: gpio@10100 { gpio0: gpio@10100 {
compatible = "marvell,orion-gpio"; compatible = "marvell,orion-gpio";
#gpio-cells = <2>; #gpio-cells = <2>;
@ -42,6 +48,7 @@
reg = <0x12000 0x100>; reg = <0x12000 0x100>;
reg-shift = <2>; reg-shift = <2>;
interrupts = <33>; interrupts = <33>;
clocks = <&gate_clk 7>;
/* set clock-frequency in board dts */ /* set clock-frequency in board dts */
status = "disabled"; status = "disabled";
}; };
@ -51,6 +58,7 @@
reg = <0x12100 0x100>; reg = <0x12100 0x100>;
reg-shift = <2>; reg-shift = <2>;
interrupts = <34>; interrupts = <34>;
clocks = <&gate_clk 7>;
/* set clock-frequency in board dts */ /* set clock-frequency in board dts */
status = "disabled"; status = "disabled";
}; };
@ -68,12 +76,21 @@
cell-index = <0>; cell-index = <0>;
interrupts = <23>; interrupts = <23>;
reg = <0x10600 0x28>; reg = <0x10600 0x28>;
clocks = <&gate_clk 7>;
status = "disabled"; status = "disabled";
}; };
gate_clk: clock-gating-control@2011c {
compatible = "marvell,kirkwood-gating-clock";
reg = <0x2011c 0x4>;
clocks = <&core_clk 0>;
#clock-cells = <1>;
};
wdt@20300 { wdt@20300 {
compatible = "marvell,orion-wdt"; compatible = "marvell,orion-wdt";
reg = <0x20300 0x28>; reg = <0x20300 0x28>;
clocks = <&gate_clk 7>;
status = "okay"; status = "okay";
}; };
@ -81,6 +98,8 @@
compatible = "marvell,orion-sata"; compatible = "marvell,orion-sata";
reg = <0x80000 0x5000>; reg = <0x80000 0x5000>;
interrupts = <21>; interrupts = <21>;
clocks = <&gate_clk 14>, <&gate_clk 15>;
clock-names = "0", "1";
status = "disabled"; status = "disabled";
}; };
@ -94,6 +113,7 @@
reg = <0x3000000 0x400>; reg = <0x3000000 0x400>;
chip-delay = <25>; chip-delay = <25>;
/* set partition map and/or chip-delay in board dts */ /* set partition map and/or chip-delay in board dts */
clocks = <&gate_clk 7>;
status = "disabled"; status = "disabled";
}; };
@ -104,6 +124,7 @@
#size-cells = <0>; #size-cells = <0>;
interrupts = <29>; interrupts = <29>;
clock-frequency = <100000>; clock-frequency = <100000>;
clocks = <&gate_clk 7>;
status = "disabled"; status = "disabled";
}; };
@ -113,6 +134,7 @@
<0xf5000000 0x800>; <0xf5000000 0x800>;
reg-names = "regs", "sram"; reg-names = "regs", "sram";
interrupts = <22>; interrupts = <22>;
clocks = <&gate_clk 17>;
status = "okay"; status = "okay";
}; };
}; };

View file

@ -46,6 +46,8 @@ config MACH_GURUPLUG
config ARCH_KIRKWOOD_DT config ARCH_KIRKWOOD_DT
bool "Marvell Kirkwood Flattened Device Tree" bool "Marvell Kirkwood Flattened Device Tree"
select MVEBU_CLK_CORE
select MVEBU_CLK_GATING
select USE_OF select USE_OF
help help
Say 'Y' here if you want your kernel to support the Say 'Y' here if you want your kernel to support the

View file

@ -14,11 +14,15 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_platform.h> #include <linux/of_platform.h>
#include <linux/clk-provider.h>
#include <linux/clk/mvebu.h>
#include <linux/kexec.h> #include <linux/kexec.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <mach/bridge-regs.h> #include <mach/bridge-regs.h>
#include <linux/platform_data/usb-ehci-orion.h>
#include <plat/irq.h> #include <plat/irq.h>
#include <plat/common.h>
#include "common.h" #include "common.h"
static struct of_device_id kirkwood_dt_match_table[] __initdata = { static struct of_device_id kirkwood_dt_match_table[] __initdata = {
@ -26,16 +30,58 @@ static struct of_device_id kirkwood_dt_match_table[] __initdata = {
{ } { }
}; };
struct of_dev_auxdata kirkwood_auxdata_lookup[] __initdata = { /*
OF_DEV_AUXDATA("marvell,orion-spi", 0xf1010600, "orion_spi.0", NULL), * There are still devices that doesn't know about DT yet. Get clock
OF_DEV_AUXDATA("marvell,mv64xxx-i2c", 0xf1011000, "mv64xxx_i2c.0", * gates here and add a clock lookup alias, so that old platform
NULL), * devices still work.
OF_DEV_AUXDATA("marvell,orion-wdt", 0xf1020300, "orion_wdt", NULL), */
OF_DEV_AUXDATA("marvell,orion-sata", 0xf1080000, "sata_mv.0", NULL),
OF_DEV_AUXDATA("marvell,orion-nand", 0xf4000000, "orion_nand", NULL), static void __init kirkwood_legacy_clk_init(void)
OF_DEV_AUXDATA("marvell,orion-crypto", 0xf1030000, "mv_crypto", NULL), {
{},
}; struct device_node *np = of_find_compatible_node(
NULL, NULL, "marvell,kirkwood-gating-clock");
struct of_phandle_args clkspec;
clkspec.np = np;
clkspec.args_count = 1;
clkspec.args[0] = CGC_BIT_GE0;
orion_clkdev_add(NULL, "mv643xx_eth_port.0",
of_clk_get_from_provider(&clkspec));
clkspec.args[0] = CGC_BIT_PEX0;
orion_clkdev_add("0", "pcie",
of_clk_get_from_provider(&clkspec));
clkspec.args[0] = CGC_BIT_USB0;
orion_clkdev_add(NULL, "orion-ehci.0",
of_clk_get_from_provider(&clkspec));
clkspec.args[0] = CGC_BIT_XOR0;
orion_clkdev_add(NULL, "mv_xor_shared.0",
of_clk_get_from_provider(&clkspec));
clkspec.args[0] = CGC_BIT_XOR1;
orion_clkdev_add(NULL, "mv_xor_shared.1",
of_clk_get_from_provider(&clkspec));
clkspec.args[0] = CGC_BIT_PEX1;
orion_clkdev_add("1", "pcie",
of_clk_get_from_provider(&clkspec));
clkspec.args[0] = CGC_BIT_GE1;
orion_clkdev_add(NULL, "mv643xx_eth_port.1",
of_clk_get_from_provider(&clkspec));
}
static void __init kirkwood_of_clk_init(void)
{
mvebu_clocks_init();
kirkwood_legacy_clk_init();
}
static void __init kirkwood_dt_init(void) static void __init kirkwood_dt_init(void)
{ {
@ -54,7 +100,7 @@ static void __init kirkwood_dt_init(void)
kirkwood_l2_init(); kirkwood_l2_init();
/* Setup root of clk tree */ /* Setup root of clk tree */
kirkwood_clk_init(); kirkwood_of_clk_init();
/* internal devices that every board has */ /* internal devices that every board has */
kirkwood_xor0_init(); kirkwood_xor0_init();
@ -94,8 +140,7 @@ static void __init kirkwood_dt_init(void)
if (of_machine_is_compatible("keymile,km_kirkwood")) if (of_machine_is_compatible("keymile,km_kirkwood"))
km_kirkwood_init(); km_kirkwood_init();
of_platform_populate(NULL, kirkwood_dt_match_table, of_platform_populate(NULL, kirkwood_dt_match_table, NULL, NULL);
kirkwood_auxdata_lookup, NULL);
} }
static const char *kirkwood_dt_board_compat[] = { static const char *kirkwood_dt_board_compat[] = {

View file

@ -12,6 +12,7 @@
#include <linux/mv643xx_eth.h> #include <linux/mv643xx_eth.h>
struct dsa_platform_data; struct dsa_platform_data;
struct mv_sata_platform_data;
void __init orion_uart0_init(void __iomem *membase, void __init orion_uart0_init(void __iomem *membase,
resource_size_t mapbase, resource_size_t mapbase,