From 5b5ad5ba01cebe6a749bcf5c9fc9637876fe0b1f Mon Sep 17 00:00:00 2001 From: Luka Perkov Date: Tue, 11 Feb 2014 02:07:44 +0000 Subject: mvebu: backport mainline patches from kernel 3.13 This is a backport of the patches accepted to the Linux mainline related to mvebu SoC (Armada XP and Armada 370) between Linux v3.12, and Linux v3.13. This work mainly covers: * Finishes work for sharing the pxa nand driver(drivers/mtd/nand/pxa3xx_nand.c) between the PXA family, and the Armada family. * timer initialization update, and access function for the Armada family. * Generic IRQ handling backporting. * Some bug fixes. Signed-off-by: Seif Mazareeb CC: Luka Perkov git-svn-id: svn://svn.openwrt.org/openwrt/trunk@39566 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- ...e-armada-370-xp-Introduce-new-compatibles.patch | 101 +++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 target/linux/mvebu/patches-3.10/0168-clocksource-armada-370-xp-Introduce-new-compatibles.patch (limited to 'target/linux/mvebu/patches-3.10/0168-clocksource-armada-370-xp-Introduce-new-compatibles.patch') diff --git a/target/linux/mvebu/patches-3.10/0168-clocksource-armada-370-xp-Introduce-new-compatibles.patch b/target/linux/mvebu/patches-3.10/0168-clocksource-armada-370-xp-Introduce-new-compatibles.patch new file mode 100644 index 0000000000..f028dfabc0 --- /dev/null +++ b/target/linux/mvebu/patches-3.10/0168-clocksource-armada-370-xp-Introduce-new-compatibles.patch @@ -0,0 +1,101 @@ +From 9cb47bf175645d15f97e6d964dd4a4f089275ef5 Mon Sep 17 00:00:00 2001 +From: Ezequiel Garcia +Date: Tue, 13 Aug 2013 11:43:13 -0300 +Subject: [PATCH 168/203] clocksource: armada-370-xp: Introduce new compatibles + +The Armada XP SoC clocksource driver cannot work without the 25 MHz +fixed timer. Therefore it's appropriate to introduce a new compatible +string and use it to set the 25 MHz fixed timer. + +The 'marvell,timer-25MHz' property will be marked as deprecated. + +Signed-off-by: Ezequiel Garcia +Signed-off-by: Daniel Lezcano +Reviewed-by: Andrew Lunn +--- + drivers/clocksource/time-armada-370-xp.c | 54 +++++++++++++++++++++++--------- + 1 file changed, 39 insertions(+), 15 deletions(-) + +--- a/drivers/clocksource/time-armada-370-xp.c ++++ b/drivers/clocksource/time-armada-370-xp.c +@@ -13,6 +13,19 @@ + * + * Timer 0 is used as free-running clocksource, while timer 1 is + * used as clock_event_device. ++ * ++ * --- ++ * Clocksource driver for Armada 370 and Armada XP SoC. ++ * This driver implements one compatible string for each SoC, given ++ * each has its own characteristics: ++ * ++ * * Armada 370 has no 25 MHz fixed timer. ++ * ++ * * Armada XP cannot work properly without such 25 MHz fixed timer as ++ * doing otherwise leads to using a clocksource whose frequency varies ++ * when doing cpufreq frequency changes. ++ * ++ * See Documentation/devicetree/bindings/timer/marvell,armada-370-xp-timer.txt + */ + + #include +@@ -212,7 +225,7 @@ static struct local_timer_ops armada_370 + .stop = armada_370_xp_timer_stop, + }; + +-static void __init armada_370_xp_timer_init(struct device_node *np) ++static void __init armada_370_xp_timer_common_init(struct device_node *np) + { + u32 clr = 0, set = 0; + int res; +@@ -221,20 +234,10 @@ static void __init armada_370_xp_timer_i + WARN_ON(!timer_base); + local_base = of_iomap(np, 1); + +- if (of_find_property(np, "marvell,timer-25Mhz", NULL)) { +- /* The fixed 25MHz timer is available so let's use it */ ++ if (timer25Mhz) + set = TIMER0_25MHZ; +- timer_clk = 25000000; +- } else { +- unsigned long rate = 0; +- struct clk *clk = of_clk_get(np, 0); +- WARN_ON(IS_ERR(clk)); +- rate = clk_get_rate(clk); +- timer_clk = rate / TIMER_DIVIDER; +- ++ else + clr = TIMER0_25MHZ; +- timer25Mhz = false; +- } + timer_ctrl_clrset(clr, set); + local_timer_ctrl_clrset(clr, set); + +@@ -288,5 +291,26 @@ static void __init armada_370_xp_timer_i + #endif + } + } +-CLOCKSOURCE_OF_DECLARE(armada_370_xp, "marvell,armada-370-xp-timer", +- armada_370_xp_timer_init); ++ ++static void __init armada_xp_timer_init(struct device_node *np) ++{ ++ /* The fixed 25MHz timer is required, timer25Mhz is true by default */ ++ timer_clk = 25000000; ++ ++ armada_370_xp_timer_common_init(np); ++} ++CLOCKSOURCE_OF_DECLARE(armada_xp, "marvell,armada-xp-timer", ++ armada_xp_timer_init); ++ ++static void __init armada_370_timer_init(struct device_node *np) ++{ ++ struct clk *clk = of_clk_get(np, 0); ++ ++ WARN_ON(IS_ERR(clk)); ++ timer_clk = clk_get_rate(clk) / TIMER_DIVIDER; ++ timer25Mhz = false; ++ ++ armada_370_xp_timer_common_init(np); ++} ++CLOCKSOURCE_OF_DECLARE(armada_370, "marvell,armada-370-timer", ++ armada_370_timer_init); -- cgit v1.2.3