* [PATCH RFC v2 00/16] ARM: provide common arch init for DT clocks
[not found] <1376964271-22715-1-git-send-email-sebastian.hesselbarth@gmail.com>
@ 2013-08-27 21:27 ` Sebastian Hesselbarth
[not found] ` <1376964271-22715-1-git-send-email-sebastian.hesselbarth-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-08-27 21:28 ` [PATCH RFC v2 13/16] ARM: tegra: split tegra_pmc_init() in two Sebastian Hesselbarth
2 siblings, 0 replies; 12+ messages in thread
From: Sebastian Hesselbarth @ 2013-08-27 21:27 UTC (permalink / raw)
Cc: Sebastian Hesselbarth, Mike Turquette, Russell King,
Arnd Bergmann, linux-tegra, kernel, linux-samsung-soc,
linux-arm-kernel, linux-kernel
This RFC converts arch/arm to provide a common arch init for DT clock
providers. Currently, the call to of_clk_init(NULL) to initialize DT
clock providers is spread among several mach-dirs. Since most machs
require DT clocks initialized before timers, no initcall can be used.
By adding of_clk_init(NULL) to ARM time_init(), we can remove all
mach-specific .init_time hooks that basically called of_clk_init before
starting timers.
Based on the previous version, this one now includes patches provided by
Stephen Warren for mach-tegra and Soren Brinkmann for mach-zynq.
With mach-tegra now requiring clocks as late as the other machs, the
patch to protect of_clk_init() from being called twice, has been dropped.
The RFCv2 is based on next-20130827 and has been compile tested for
multi_v7_defconfig and mach-dove. All single patches have also been sent
to the respective maintainers and corresponding mailing lists.
Before going for a real patch set after v3.11 drops, I prefer to have
Tested-by or Acked-by for at least mach-imx, mach-mxs, mach-sti, and
mach-vexpress. Others are trivial, prepared by maintainers (mach-tegra
and mach-zynq), or have already been Acked-by (mach-highbank).
Also, I'd like to know if the patches should be grouped by mach- or
rather been split into mach- preparation and .init_time removal.
Sebastian Hesselbarth (14):
ARM: call clk_of_init from time_init
ARM: dove: remove custom .init_time hook
ARM: exynos: remove custom .init_time hook
ARM: highbank: remove custom .init_time hook
ARM: imx: remove custom .init_time hook
ARM: kirkwood: remove custom .init_time hook
ARM: mvebu: remove custom .init_time hook
ARM: mxs: remove custom .init_time hook
ARM: nspire: remove custom .init_time hook
ARM: rockchip: remove custom .init_time hook
ARM: socfpga: remove call to of_clk_init
ARM: sti: remove custom .init_time hook
ARM: vexpress: remove custom .init_time hook
clk: vt8500: remove call to of_clk_init
Soren Brinkmann (1):
ARM: zynq: Don't call of_clk_init()
Stephen Warren (1):
ARM: tegra: split tegra_pmc_init() in two
arch/arm/kernel/time.c | 24 +++++++++++-------
arch/arm/mach-dove/board-dt.c | 17 +------------
arch/arm/mach-exynos/common.c | 7 -----
arch/arm/mach-exynos/common.h | 1 -
arch/arm/mach-exynos/mach-exynos4-dt.c | 1 -
arch/arm/mach-exynos/mach-exynos5-dt.c | 1 -
arch/arm/mach-highbank/highbank.c | 23 +++++------------
arch/arm/mach-imx/clk-imx51-imx53.c | 29 +++++++--------------
arch/arm/mach-imx/common.h | 4 ---
arch/arm/mach-imx/imx51-dt.c | 6 ----
arch/arm/mach-imx/mach-imx53.c | 6 ----
arch/arm/mach-imx/mach-imx6q.c | 14 ++--------
arch/arm/mach-imx/mach-imx6sl.c | 7 -----
arch/arm/mach-imx/mach-vf610.c | 9 -------
arch/arm/mach-kirkwood/board-dt.c | 8 ------
arch/arm/mach-mvebu/armada-370-xp.c | 2 -
arch/arm/mach-mxs/mach-mxs.c | 13 ----------
arch/arm/mach-nspire/nspire.c | 9 -------
arch/arm/mach-rockchip/rockchip.c | 9 -------
arch/arm/mach-socfpga/socfpga.c | 2 -
arch/arm/mach-sti/board-dt.c | 10 +++----
arch/arm/mach-tegra/common.c | 4 +--
arch/arm/mach-tegra/pmc.c | 41 +++++++++++++++++--------------
arch/arm/mach-tegra/pmc.h | 1 +
arch/arm/mach-tegra/tegra.c | 5 ++-
arch/arm/mach-vexpress/v2m.c | 14 +----------
arch/arm/mach-zynq/common.c | 9 +++----
drivers/clk/clk-highbank.c | 10 +++++--
drivers/clk/clk-vt8500.c | 2 -
drivers/clk/mxs/clk-imx23.c | 16 +++++-------
drivers/clk/mxs/clk-imx28.c | 16 +++++-------
drivers/clk/zynq/clkc.c | 4 ++-
include/linux/clk/mxs.h | 2 -
33 files changed, 95 insertions(+), 231 deletions(-)
---
Cc: Mike Turquette <mturquette@linaro.org>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: linux-tegra@vger.kernel.org
Cc: kernel@stlinux.com
Cc: linux-samsung-soc@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
--
1.7.2.5
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH RFC v2 01/16] ARM: call clk_of_init from time_init
[not found] ` <1376964271-22715-1-git-send-email-sebastian.hesselbarth-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2013-08-27 21:27 ` Sebastian Hesselbarth
2013-08-27 22:19 ` Sören Brinkmann
0 siblings, 1 reply; 12+ messages in thread
From: Sebastian Hesselbarth @ 2013-08-27 21:27 UTC (permalink / raw)
Cc: Sebastian Hesselbarth, Russell King, Arnd Bergmann,
linux-tegra-u79uwXL29TY76Z2rM5mHXA, kernel-F5mvAk5X5gdBDgjK7y7TUQ,
linux-samsung-soc-u79uwXL29TY76Z2rM5mHXA,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
linux-kernel-u79uwXL29TY76Z2rM5mHXA
Most DT ARM machs require common clock providers initialized before timers.
Currently, arch/arm machs use .init_time to call clk_of_init right before
clocksource_of_init. This prevents to remove that hook and use the default
hook instead. clk_of_init is safe to call for non-DT platforms, so add
the call to ARM arch time_init by default. While at it, also reorder includes
alphabetically.
Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
---
Changelog:
v1->v2:
- reorder includes alphabetically
Cc: Russell King <linux-lFZ/pmaqli7XmaaqVzeoHQ@public.gmane.org>
Cc: Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>
Cc: linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Cc: kernel-F5mvAk5X5gdBDgjK7y7TUQ@public.gmane.org
Cc: linux-samsung-soc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Cc: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
---
arch/arm/kernel/time.c | 24 ++++++++++++++----------
1 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c
index 98aee32..dd1028e 100644
--- a/arch/arm/kernel/time.c
+++ b/arch/arm/kernel/time.c
@@ -11,25 +11,26 @@
* This file contains the ARM-specific time handling details:
* reading the RTC at bootup, etc...
*/
+#include <linux/clk-provider.h>
+#include <linux/clocksource.h>
+#include <linux/errno.h>
#include <linux/export.h>
-#include <linux/kernel.h>
-#include <linux/interrupt.h>
-#include <linux/time.h>
#include <linux/init.h>
+#include <linux/interrupt.h>
+#include <linux/irq.h>
+#include <linux/kernel.h>
+#include <linux/profile.h>
#include <linux/sched.h>
+#include <linux/sched_clock.h>
#include <linux/smp.h>
+#include <linux/time.h>
#include <linux/timex.h>
-#include <linux/errno.h>
-#include <linux/profile.h>
#include <linux/timer.h>
-#include <linux/clocksource.h>
-#include <linux/irq.h>
-#include <linux/sched_clock.h>
-#include <asm/thread_info.h>
-#include <asm/stacktrace.h>
#include <asm/mach/arch.h>
#include <asm/mach/time.h>
+#include <asm/stacktrace.h>
+#include <asm/thread_info.h>
#if defined(CONFIG_RTC_DRV_CMOS) || defined(CONFIG_RTC_DRV_CMOS_MODULE) || \
defined(CONFIG_NVRAM) || defined(CONFIG_NVRAM_MODULE)
@@ -116,6 +117,9 @@ int __init register_persistent_clock(clock_access_fn read_boot,
void __init time_init(void)
{
+ /* initalize common clocks before timers */
+ of_clk_init(NULL);
+
if (machine_desc->init_time)
machine_desc->init_time();
else
--
1.7.2.5
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH RFC v2 13/16] ARM: tegra: split tegra_pmc_init() in two
[not found] <1376964271-22715-1-git-send-email-sebastian.hesselbarth@gmail.com>
2013-08-27 21:27 ` [PATCH RFC v2 00/16] ARM: provide common arch init for DT clocks Sebastian Hesselbarth
[not found] ` <1376964271-22715-1-git-send-email-sebastian.hesselbarth-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2013-08-27 21:28 ` Sebastian Hesselbarth
[not found] ` <1377638890-371-14-git-send-email-sebastian.hesselbarth-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2 siblings, 1 reply; 12+ messages in thread
From: Sebastian Hesselbarth @ 2013-08-27 21:28 UTC (permalink / raw)
To: Sebastian Hesselbarth
Cc: Stephen Warren, Stephen Warren, Russell King, Arnd Bergmann,
linux-tegra, linux-arm-kernel, linux-kernel
From: Stephen Warren <swarren@nvidia.com>
Tegra's board file currently initializes clocks much earlier than those
for most other ARM SoCs. The reason is:
* The PMC HW block is involved in the path of some interrupts (i.e. it
inverts, or not, the IRQ input pin dedicated to the PMIC).
* So, that part of the PMC must be initialized early so that the IRQ
polarity is correct.
* The PMC initialization is currently monolithic, and the PMC has some
clock inputs, so the init routine ends up calling of_clk_get_by_name(),
and hence clocks must be set up early too.
In order to defer clock initialization to the more typical location,
split out the portions of tegra_pmc_init() that are truly IRQ-related
into a separate tegra_pmc_init_irq(), which can be called from the
machine descriptor's .init_irq() function, and defer the rest until
the machine descriptor's .init_machine() function. With arch/arm calling
of_clk_init(NULL) from time_init() this also allows the removal of
.init_time() hook.
Signed-off-by: Stephen Warren <swarren@nvidia.com>
---
Changelog:
v1->v2:
- took Stephen Warren's patch provided to separate Tegra's pmc_init
- sqashed in .init_time removal and reworded patch text
Cc: Stephen Warren <swarren@wwwdotorg.org>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: linux-tegra@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
---
arch/arm/mach-tegra/common.c | 4 +---
arch/arm/mach-tegra/pmc.c | 41 ++++++++++++++++++++++-------------------
arch/arm/mach-tegra/pmc.h | 1 +
arch/arm/mach-tegra/tegra.c | 5 +++--
4 files changed, 27 insertions(+), 24 deletions(-)
diff --git a/arch/arm/mach-tegra/common.c b/arch/arm/mach-tegra/common.c
index 94a119a..58dc91c5 100644
--- a/arch/arm/mach-tegra/common.c
+++ b/arch/arm/mach-tegra/common.c
@@ -24,7 +24,6 @@
#include <linux/delay.h>
#include <linux/reboot.h>
#include <linux/irqchip.h>
-#include <linux/clk-provider.h>
#include <asm/hardware/cache-l2x0.h>
@@ -61,8 +60,7 @@ u32 tegra_uart_config[4] = {
#ifdef CONFIG_OF
void __init tegra_dt_init_irq(void)
{
- of_clk_init(NULL);
- tegra_pmc_init();
+ tegra_pmc_init_irq();
tegra_init_irq();
irqchip_init();
tegra_legacy_irq_syscore_init();
diff --git a/arch/arm/mach-tegra/pmc.c b/arch/arm/mach-tegra/pmc.c
index 8acb881..7916ff9 100644
--- a/arch/arm/mach-tegra/pmc.c
+++ b/arch/arm/mach-tegra/pmc.c
@@ -285,13 +285,10 @@ static const struct of_device_id matches[] __initconst = {
{ }
};
-static void __init tegra_pmc_parse_dt(void)
+void __init tegra_pmc_init_irq(void)
{
struct device_node *np;
- u32 prop;
- enum tegra_suspend_mode suspend_mode;
- u32 core_good_time[2] = {0, 0};
- u32 lp0_vec[2] = {0, 0};
+ u32 val;
np = of_find_matching_node(NULL, matches);
BUG_ON(!np);
@@ -300,6 +297,26 @@ static void __init tegra_pmc_parse_dt(void)
tegra_pmc_invert_interrupt = of_property_read_bool(np,
"nvidia,invert-interrupt");
+
+ val = tegra_pmc_readl(PMC_CTRL);
+ if (tegra_pmc_invert_interrupt)
+ val |= PMC_CTRL_INTR_LOW;
+ else
+ val &= ~PMC_CTRL_INTR_LOW;
+ tegra_pmc_writel(val, PMC_CTRL);
+}
+
+void __init tegra_pmc_init(void)
+{
+ struct device_node *np;
+ u32 prop;
+ enum tegra_suspend_mode suspend_mode;
+ u32 core_good_time[2] = {0, 0};
+ u32 lp0_vec[2] = {0, 0};
+
+ np = of_find_matching_node(NULL, matches);
+ BUG_ON(!np);
+
tegra_pclk = of_clk_get_by_name(np, "pclk");
WARN_ON(IS_ERR(tegra_pclk));
@@ -365,17 +382,3 @@ static void __init tegra_pmc_parse_dt(void)
pmc_pm_data.suspend_mode = suspend_mode;
}
-
-void __init tegra_pmc_init(void)
-{
- u32 val;
-
- tegra_pmc_parse_dt();
-
- val = tegra_pmc_readl(PMC_CTRL);
- if (tegra_pmc_invert_interrupt)
- val |= PMC_CTRL_INTR_LOW;
- else
- val &= ~PMC_CTRL_INTR_LOW;
- tegra_pmc_writel(val, PMC_CTRL);
-}
diff --git a/arch/arm/mach-tegra/pmc.h b/arch/arm/mach-tegra/pmc.h
index 549f8c7..4d5f8f3 100644
--- a/arch/arm/mach-tegra/pmc.h
+++ b/arch/arm/mach-tegra/pmc.h
@@ -39,6 +39,7 @@ bool tegra_pmc_cpu_is_powered(int cpuid);
int tegra_pmc_cpu_power_on(int cpuid);
int tegra_pmc_cpu_remove_clamping(int cpuid);
+void tegra_pmc_init_irq(void);
void tegra_pmc_init(void);
#endif
diff --git a/arch/arm/mach-tegra/tegra.c b/arch/arm/mach-tegra/tegra.c
index 5b86055..2e21928 100644
--- a/arch/arm/mach-tegra/tegra.c
+++ b/arch/arm/mach-tegra/tegra.c
@@ -16,7 +16,6 @@
*
*/
-#include <linux/clocksource.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/platform_device.h>
@@ -44,6 +43,7 @@
#include "common.h"
#include "fuse.h"
#include "iomap.h"
+#include "pmc.h"
static void __init tegra_dt_init(void)
{
@@ -51,6 +51,8 @@ static void __init tegra_dt_init(void)
struct soc_device *soc_dev;
struct device *parent = NULL;
+ tegra_pmc_init();
+
tegra_clocks_apply_init_table();
soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
@@ -119,7 +121,6 @@ DT_MACHINE_START(TEGRA_DT, "NVIDIA Tegra SoC (Flattened Device Tree)")
.smp = smp_ops(tegra_smp_ops),
.init_early = tegra_init_early,
.init_irq = tegra_dt_init_irq,
- .init_time = clocksource_of_init,
.init_machine = tegra_dt_init,
.init_late = tegra_dt_init_late,
.restart = tegra_assert_system_reset,
--
1.7.2.5
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH RFC v2 13/16] ARM: tegra: split tegra_pmc_init() in two
[not found] ` <1377638890-371-14-git-send-email-sebastian.hesselbarth-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2013-08-27 21:59 ` Stephen Warren
[not found] ` <521D214C.80809-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-09-11 19:56 ` Stephen Warren
1 sibling, 1 reply; 12+ messages in thread
From: Stephen Warren @ 2013-08-27 21:59 UTC (permalink / raw)
To: Sebastian Hesselbarth
Cc: Stephen Warren, Russell King, Arnd Bergmann,
linux-tegra-u79uwXL29TY76Z2rM5mHXA,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
linux-kernel-u79uwXL29TY76Z2rM5mHXA
On 08/27/2013 03:28 PM, Sebastian Hesselbarth wrote:
> From: Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
>
> Tegra's board file currently initializes clocks much earlier than those
> for most other ARM SoCs. The reason is:
>
> * The PMC HW block is involved in the path of some interrupts (i.e. it
> inverts, or not, the IRQ input pin dedicated to the PMIC).
>
> * So, that part of the PMC must be initialized early so that the IRQ
> polarity is correct.
>
> * The PMC initialization is currently monolithic, and the PMC has some
> clock inputs, so the init routine ends up calling of_clk_get_by_name(),
> and hence clocks must be set up early too.
>
> In order to defer clock initialization to the more typical location,
> split out the portions of tegra_pmc_init() that are truly IRQ-related
> into a separate tegra_pmc_init_irq(), which can be called from the
> machine descriptor's .init_irq() function, and defer the rest until
> the machine descriptor's .init_machine() function. With arch/arm calling
> of_clk_init(NULL) from time_init() this also allows the removal of
> .init_time() hook.
>
> Signed-off-by: Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
> ---
> Changelog:
> v1->v2:
> - took Stephen Warren's patch provided to separate Tegra's pmc_init
> - sqashed in .init_time removal and reworded patch text
I think it'd be better to keep the 2 patches separate so the two logical
changes are in different patches. I suppose it isn't a huge deal though.
Either way, on this patch, your S-o-b line is missing above.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH RFC v2 13/16] ARM: tegra: split tegra_pmc_init() in two
[not found] ` <521D214C.80809-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
@ 2013-08-27 22:09 ` Sebastian Hesselbarth
0 siblings, 0 replies; 12+ messages in thread
From: Sebastian Hesselbarth @ 2013-08-27 22:09 UTC (permalink / raw)
To: Stephen Warren
Cc: Stephen Warren, Russell King, Arnd Bergmann,
linux-tegra-u79uwXL29TY76Z2rM5mHXA,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
linux-kernel-u79uwXL29TY76Z2rM5mHXA
On 08/27/13 23:59, Stephen Warren wrote:
> On 08/27/2013 03:28 PM, Sebastian Hesselbarth wrote:
>> From: Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
>>
>> Tegra's board file currently initializes clocks much earlier than those
>> for most other ARM SoCs. The reason is:
>>
>> * The PMC HW block is involved in the path of some interrupts (i.e. it
>> inverts, or not, the IRQ input pin dedicated to the PMIC).
>>
>> * So, that part of the PMC must be initialized early so that the IRQ
>> polarity is correct.
>>
>> * The PMC initialization is currently monolithic, and the PMC has some
>> clock inputs, so the init routine ends up calling of_clk_get_by_name(),
>> and hence clocks must be set up early too.
>>
>> In order to defer clock initialization to the more typical location,
>> split out the portions of tegra_pmc_init() that are truly IRQ-related
>> into a separate tegra_pmc_init_irq(), which can be called from the
>> machine descriptor's .init_irq() function, and defer the rest until
>> the machine descriptor's .init_machine() function. With arch/arm calling
>> of_clk_init(NULL) from time_init() this also allows the removal of
>> .init_time() hook.
>>
>> Signed-off-by: Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
>> ---
>> Changelog:
>> v1->v2:
>> - took Stephen Warren's patch provided to separate Tegra's pmc_init
>> - sqashed in .init_time removal and reworded patch text
>
> I think it'd be better to keep the 2 patches separate so the two logical
> changes are in different patches. I suppose it isn't a huge deal though.
>
> Either way, on this patch, your S-o-b line is missing above.
Stephen,
I was already wondering here, if I should separate the patches into
preparation and actual removal. I put that question into the cover
letter and removed it from this patch text ;)
As you suggest to use preparation/removal, I will take that approach
for the final patch set. Will take you original unmodified patch then.
Sebastian
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH RFC v2 01/16] ARM: call clk_of_init from time_init
2013-08-27 21:27 ` [PATCH RFC v2 01/16] ARM: call clk_of_init from time_init Sebastian Hesselbarth
@ 2013-08-27 22:19 ` Sören Brinkmann
2013-08-27 22:58 ` Sebastian Hesselbarth
0 siblings, 1 reply; 12+ messages in thread
From: Sören Brinkmann @ 2013-08-27 22:19 UTC (permalink / raw)
To: Sebastian Hesselbarth
Cc: Russell King, Arnd Bergmann, linux-tegra, kernel,
linux-samsung-soc, linux-arm-kernel, linux-kernel
On Tue, Aug 27, 2013 at 11:27:55PM +0200, Sebastian Hesselbarth wrote:
> Most DT ARM machs require common clock providers initialized before timers.
> Currently, arch/arm machs use .init_time to call clk_of_init right before
> clocksource_of_init. This prevents to remove that hook and use the default
> hook instead. clk_of_init is safe to call for non-DT platforms, so add
> the call to ARM arch time_init by default. While at it, also reorder includes
> alphabetically.
>
> Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
> ---
> Changelog:
> v1->v2:
> - reorder includes alphabetically
>
> Cc: Russell King <linux@arm.linux.org.uk>
> Cc: Arnd Bergmann <arnd@arndb.de>
> Cc: linux-tegra@vger.kernel.org
> Cc: kernel@stlinux.com
> Cc: linux-samsung-soc@vger.kernel.org
> Cc: linux-arm-kernel@lists.infradead.org
> Cc: linux-kernel@vger.kernel.org
> ---
> arch/arm/kernel/time.c | 24 ++++++++++++++----------
> 1 files changed, 14 insertions(+), 10 deletions(-)
>
> diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c
> index 98aee32..dd1028e 100644
> --- a/arch/arm/kernel/time.c
> +++ b/arch/arm/kernel/time.c
> @@ -11,25 +11,26 @@
[ ... ]
> void __init time_init(void)
> {
> + /* initalize common clocks before timers */
> + of_clk_init(NULL);
> +
> if (machine_desc->init_time)
> machine_desc->init_time();
> else
This forces zynq to move some initialization our clock code relies on to
init_irq(). Also, the current code already takes an approach of
doing either common init or machine specific init.
I think it might be better to move the call to of_clk_init() down into
the else branch of the if-else.
Though, this probably contradicts the purpose of the whole series.
Sören
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH RFC v2 01/16] ARM: call clk_of_init from time_init
2013-08-27 22:19 ` Sören Brinkmann
@ 2013-08-27 22:58 ` Sebastian Hesselbarth
2013-08-27 23:20 ` Sören Brinkmann
2013-08-29 13:45 ` Arnd Bergmann
0 siblings, 2 replies; 12+ messages in thread
From: Sebastian Hesselbarth @ 2013-08-27 22:58 UTC (permalink / raw)
To: Sören Brinkmann
Cc: Russell King, Arnd Bergmann, linux-tegra, kernel,
linux-samsung-soc, linux-arm-kernel, linux-kernel
On 08/28/13 00:19, Sören Brinkmann wrote:
> On Tue, Aug 27, 2013 at 11:27:55PM +0200, Sebastian Hesselbarth wrote:
>> Most DT ARM machs require common clock providers initialized before timers.
>> Currently, arch/arm machs use .init_time to call clk_of_init right before
>> clocksource_of_init. This prevents to remove that hook and use the default
>> hook instead. clk_of_init is safe to call for non-DT platforms, so add
>> the call to ARM arch time_init by default. While at it, also reorder includes
>> alphabetically.
>>
>> Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
>> ---
>> Changelog:
>> v1->v2:
>> - reorder includes alphabetically
>>
>> Cc: Russell King <linux@arm.linux.org.uk>
>> Cc: Arnd Bergmann <arnd@arndb.de>
>> Cc: linux-tegra@vger.kernel.org
>> Cc: kernel@stlinux.com
>> Cc: linux-samsung-soc@vger.kernel.org
>> Cc: linux-arm-kernel@lists.infradead.org
>> Cc: linux-kernel@vger.kernel.org
>> ---
>> arch/arm/kernel/time.c | 24 ++++++++++++++----------
>> 1 files changed, 14 insertions(+), 10 deletions(-)
>>
>> diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c
>> index 98aee32..dd1028e 100644
>> --- a/arch/arm/kernel/time.c
>> +++ b/arch/arm/kernel/time.c
>> @@ -11,25 +11,26 @@
> [ ... ]
>> void __init time_init(void)
>> {
>> + /* initalize common clocks before timers */
>> + of_clk_init(NULL);
>> +
>> if (machine_desc->init_time)
>> machine_desc->init_time();
>> else
>
> This forces zynq to move some initialization our clock code relies on to
> init_irq(). Also, the current code already takes an approach of
> doing either common init or machine specific init.
Soeren,
you know that patch 16/16 takes care of zynq's clock init?
It's your own patch you provided from the last RFC. Looking at it, it
moves zynq_sclr_init() to .init_irq and removes the call to
of_clk_init() from zynq_clock_init() which is called by
zynq_sclr_init().
Isn't that solving the above issues for mach-zynq?
> I think it might be better to move the call to of_clk_init() down into
> the else branch of the if-else.
Possibly, yes. But we could also unconditionally call of_clk_init() at
the beginning of time_init() and call clocksource_of_init() at the end.
That will make .init_time() to some fixup hook between initialization of
clocks and timers.
> Though, this probably contradicts the purpose of the whole series.
Hmm, the purpose was to allow most platforms to remove a custom
.init_time hook only calling of_clk_init() and clocksource_of_init().
If we move of_clk_init() above also in the else-branch the purpose
is still met.
Sebastian
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH RFC v2 01/16] ARM: call clk_of_init from time_init
2013-08-27 22:58 ` Sebastian Hesselbarth
@ 2013-08-27 23:20 ` Sören Brinkmann
2013-08-29 13:45 ` Arnd Bergmann
1 sibling, 0 replies; 12+ messages in thread
From: Sören Brinkmann @ 2013-08-27 23:20 UTC (permalink / raw)
To: Sebastian Hesselbarth
Cc: Russell King, Arnd Bergmann, linux-tegra, kernel,
linux-samsung-soc, linux-arm-kernel, linux-kernel
On Wed, Aug 28, 2013 at 12:58:39AM +0200, Sebastian Hesselbarth wrote:
> On 08/28/13 00:19, Sören Brinkmann wrote:
> >On Tue, Aug 27, 2013 at 11:27:55PM +0200, Sebastian Hesselbarth wrote:
> >>Most DT ARM machs require common clock providers initialized before timers.
> >>Currently, arch/arm machs use .init_time to call clk_of_init right before
> >>clocksource_of_init. This prevents to remove that hook and use the default
> >>hook instead. clk_of_init is safe to call for non-DT platforms, so add
> >>the call to ARM arch time_init by default. While at it, also reorder includes
> >>alphabetically.
> >>
> >>Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
> >>---
> >>Changelog:
> >>v1->v2:
> >>- reorder includes alphabetically
> >>
> >>Cc: Russell King <linux@arm.linux.org.uk>
> >>Cc: Arnd Bergmann <arnd@arndb.de>
> >>Cc: linux-tegra@vger.kernel.org
> >>Cc: kernel@stlinux.com
> >>Cc: linux-samsung-soc@vger.kernel.org
> >>Cc: linux-arm-kernel@lists.infradead.org
> >>Cc: linux-kernel@vger.kernel.org
> >>---
> >> arch/arm/kernel/time.c | 24 ++++++++++++++----------
> >> 1 files changed, 14 insertions(+), 10 deletions(-)
> >>
> >>diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c
> >>index 98aee32..dd1028e 100644
> >>--- a/arch/arm/kernel/time.c
> >>+++ b/arch/arm/kernel/time.c
> >>@@ -11,25 +11,26 @@
> >[ ... ]
> >> void __init time_init(void)
> >> {
> >>+ /* initalize common clocks before timers */
> >>+ of_clk_init(NULL);
> >>+
> >> if (machine_desc->init_time)
> >> machine_desc->init_time();
> >> else
> >
> >This forces zynq to move some initialization our clock code relies on to
> >init_irq(). Also, the current code already takes an approach of
> >doing either common init or machine specific init.
>
> Soeren,
>
> you know that patch 16/16 takes care of zynq's clock init?
>
> It's your own patch you provided from the last RFC. Looking at it, it
> moves zynq_sclr_init() to .init_irq and removes the call to
> of_clk_init() from zynq_clock_init() which is called by
> zynq_sclr_init().
>
> Isn't that solving the above issues for mach-zynq?
Yes, I know. This alternative approach came to me after I sent my patch
and took a closer look at init_irq(). As you said, we move our problem
just to an earlier boot stage. Which wouldn't be true if a strict
if-else would allow us to explicitly call everything in the right order
- which init_irq by the way does.
I mentioned it in an email in the original thread yesterday. But since
there is a v2 now, I just thought to bring it up here now.
>
> >I think it might be better to move the call to of_clk_init() down into
> >the else branch of the if-else.
>
> Possibly, yes. But we could also unconditionally call of_clk_init() at
> the beginning of time_init() and call clocksource_of_init() at the end.
> That will make .init_time() to some fixup hook between
> initialization of clocks and timers.
Right, the question is what is the common case? What do SOCs use the
custom init_time() hook for?
If SOCs use it for things additionally to clock init where
execution order doesn't matter, your patch works perfectly well and is
the preferred solution.
If they use it just to call of_clk_init() and of_clocksource_init(),
those hooks can go away and it would work in the else branch or outside,
equally well.
If they use it like Zynq, to do some required SOC specific init which must
be done before clock init, it would make more sense to have it in the
else branch. That way the SOC intentionally replaces init_time()
with its own implementation and has to take care of calling everything in the
right order.
Another approach might be to move the custom init_time() hook before the
call to of_clk_init().
As I said, it depends on how this hook is used.
Sören
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH RFC v2 01/16] ARM: call clk_of_init from time_init
2013-08-27 22:58 ` Sebastian Hesselbarth
2013-08-27 23:20 ` Sören Brinkmann
@ 2013-08-29 13:45 ` Arnd Bergmann
1 sibling, 0 replies; 12+ messages in thread
From: Arnd Bergmann @ 2013-08-29 13:45 UTC (permalink / raw)
To: Sebastian Hesselbarth
Cc: Sören Brinkmann, Russell King, linux-tegra, kernel,
linux-samsung-soc, linux-arm-kernel, linux-kernel
On Wednesday 28 August 2013, Sebastian Hesselbarth wrote:
> >
> > This forces zynq to move some initialization our clock code relies on to
> > init_irq(). Also, the current code already takes an approach of
> > doing either common init or machine specific init.
>
> Soeren,
>
> you know that patch 16/16 takes care of zynq's clock init?
>
> It's your own patch you provided from the last RFC. Looking at it, it
> moves zynq_sclr_init() to .init_irq and removes the call to
> of_clk_init() from zynq_clock_init() which is called by
> zynq_sclr_init().
>
> Isn't that solving the above issues for mach-zynq?
Please be careful with the patch ordering here. The patch series should
be bisectable, i.e. no patch should ever knowingly break any of the
platforms, with the fix getting added in a later patch.
You should be able to do that by cleaning up all platforms to not
rely on ordering first, then add this patch, and finally remove
the other calls.
Arnd
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH RFC v2 13/16] ARM: tegra: split tegra_pmc_init() in two
[not found] ` <1377638890-371-14-git-send-email-sebastian.hesselbarth-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-08-27 21:59 ` Stephen Warren
@ 2013-09-11 19:56 ` Stephen Warren
[not found] ` <5230CAF7.6010103-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
1 sibling, 1 reply; 12+ messages in thread
From: Stephen Warren @ 2013-09-11 19:56 UTC (permalink / raw)
To: Sebastian Hesselbarth
Cc: Stephen Warren, Russell King, Arnd Bergmann,
linux-tegra-u79uwXL29TY76Z2rM5mHXA,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
linux-kernel-u79uwXL29TY76Z2rM5mHXA
On 08/27/2013 03:28 PM, Sebastian Hesselbarth wrote:
> From: Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
>
> Tegra's board file currently initializes clocks much earlier than those
> for most other ARM SoCs. The reason is:
>
> * The PMC HW block is involved in the path of some interrupts (i.e. it
> inverts, or not, the IRQ input pin dedicated to the PMIC).
>
> * So, that part of the PMC must be initialized early so that the IRQ
> polarity is correct.
>
> * The PMC initialization is currently monolithic, and the PMC has some
> clock inputs, so the init routine ends up calling of_clk_get_by_name(),
> and hence clocks must be set up early too.
>
> In order to defer clock initialization to the more typical location,
> split out the portions of tegra_pmc_init() that are truly IRQ-related
> into a separate tegra_pmc_init_irq(), which can be called from the
> machine descriptor's .init_irq() function, and defer the rest until
> the machine descriptor's .init_machine() function. With arch/arm calling
> of_clk_init(NULL) from time_init() this also allows the removal of
> .init_time() hook.
Sebastian, I assume you're targeting v3.13 or later for this patch
series? If so, it might be a good idea if I apply this patch myself to
the Tegra tree so that I can base any future Tegra patches on top of it
to avoid any possible conflicts. I can put this patch first in the
cleanup branch so you can merge it into whatever tree you use for the
rest of this series. Does that work for you? If so, let me know. Thanks.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH RFC v2 13/16] ARM: tegra: split tegra_pmc_init() in two
[not found] ` <5230CAF7.6010103-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
@ 2013-09-12 6:21 ` Sebastian Hesselbarth
2013-09-12 16:32 ` Stephen Warren
0 siblings, 1 reply; 12+ messages in thread
From: Sebastian Hesselbarth @ 2013-09-12 6:21 UTC (permalink / raw)
To: Stephen Warren
Cc: Stephen Warren, Russell King, Arnd Bergmann,
linux-tegra-u79uwXL29TY76Z2rM5mHXA,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
linux-kernel-u79uwXL29TY76Z2rM5mHXA, Olof Johansson,
Mike Turquette
On 09/11/2013 09:56 PM, Stephen Warren wrote:
> On 08/27/2013 03:28 PM, Sebastian Hesselbarth wrote:
>> From: Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
>>
>> Tegra's board file currently initializes clocks much earlier than those
>> for most other ARM SoCs. The reason is:
>>
>> * The PMC HW block is involved in the path of some interrupts (i.e. it
>> inverts, or not, the IRQ input pin dedicated to the PMIC).
>>
>> * So, that part of the PMC must be initialized early so that the IRQ
>> polarity is correct.
>>
>> * The PMC initialization is currently monolithic, and the PMC has some
>> clock inputs, so the init routine ends up calling of_clk_get_by_name(),
>> and hence clocks must be set up early too.
>>
>> In order to defer clock initialization to the more typical location,
>> split out the portions of tegra_pmc_init() that are truly IRQ-related
>> into a separate tegra_pmc_init_irq(), which can be called from the
>> machine descriptor's .init_irq() function, and defer the rest until
>> the machine descriptor's .init_machine() function. With arch/arm calling
>> of_clk_init(NULL) from time_init() this also allows the removal of
>> .init_time() hook.
>
> Sebastian, I assume you're targeting v3.13 or later for this patch
> series? If so, it might be a good idea if I apply this patch myself to
> the Tegra tree so that I can base any future Tegra patches on top of it
> to avoid any possible conflicts. I can put this patch first in the
> cleanup branch so you can merge it into whatever tree you use for the
> rest of this series. Does that work for you? If so, let me know. Thanks.
Yes, I was waiting for v3.12-rc1 to drop to have something stable with
the new machs inside. I haven't made up my mind who will finally take
the patches but I guess it's either arm-soc or each individual
maintainer.
Currently, the patch set includes your original patch and another one to
remove .init_time when the arch-wide default callback is available. If
you want to take it now, I can add the corresponding dependency to the
cover letter and drop the patch from my set.
If Arnd, Olof, and Mike say that current mainline head is stable with
respect to arm-soc and clk, I can also send it today or tomorrow.
Sebastian
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH RFC v2 13/16] ARM: tegra: split tegra_pmc_init() in two
2013-09-12 6:21 ` Sebastian Hesselbarth
@ 2013-09-12 16:32 ` Stephen Warren
0 siblings, 0 replies; 12+ messages in thread
From: Stephen Warren @ 2013-09-12 16:32 UTC (permalink / raw)
To: Sebastian Hesselbarth
Cc: Stephen Warren, Russell King, Arnd Bergmann, linux-tegra,
linux-arm-kernel, linux-kernel, Olof Johansson, Mike Turquette
On 09/12/2013 12:21 AM, Sebastian Hesselbarth wrote:
> On 09/11/2013 09:56 PM, Stephen Warren wrote:
>> On 08/27/2013 03:28 PM, Sebastian Hesselbarth wrote:
>>> From: Stephen Warren <swarren@nvidia.com>
>>>
>>> Tegra's board file currently initializes clocks much earlier than those
>>> for most other ARM SoCs. The reason is:
>>>
>>> * The PMC HW block is involved in the path of some interrupts (i.e. it
>>> inverts, or not, the IRQ input pin dedicated to the PMIC).
>>>
>>> * So, that part of the PMC must be initialized early so that the IRQ
>>> polarity is correct.
>>>
>>> * The PMC initialization is currently monolithic, and the PMC has some
>>> clock inputs, so the init routine ends up calling of_clk_get_by_name(),
>>> and hence clocks must be set up early too.
>>>
>>> In order to defer clock initialization to the more typical location,
>>> split out the portions of tegra_pmc_init() that are truly IRQ-related
>>> into a separate tegra_pmc_init_irq(), which can be called from the
>>> machine descriptor's .init_irq() function, and defer the rest until
>>> the machine descriptor's .init_machine() function. With arch/arm calling
>>> of_clk_init(NULL) from time_init() this also allows the removal of
>>> .init_time() hook.
>>
>> Sebastian, I assume you're targeting v3.13 or later for this patch
>> series? If so, it might be a good idea if I apply this patch myself to
>> the Tegra tree so that I can base any future Tegra patches on top of it
>> to avoid any possible conflicts. I can put this patch first in the
>> cleanup branch so you can merge it into whatever tree you use for the
>> rest of this series. Does that work for you? If so, let me know. Thanks.
>
> Yes, I was waiting for v3.12-rc1 to drop to have something stable with
> the new machs inside. I haven't made up my mind who will finally take
> the patches but I guess it's either arm-soc or each individual
> maintainer.
OK, I'll take this one patch through the Tegra tree, making sure it's
first and based on v3.12-rc1, and I'll create a tag for you to pull into
your branch as needed.
> Currently, the patch set includes your original patch and another one to
> remove .init_time when the arch-wide default callback is available. If
> you want to take it now, I can add the corresponding dependency to the
> cover letter and drop the patch from my set.
Sounds good. From memory, that second patch you mentioned can go through
any tree you want; I don't think it will cause any conflicts since it's
tiny.
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2013-09-12 16:32 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1376964271-22715-1-git-send-email-sebastian.hesselbarth@gmail.com>
2013-08-27 21:27 ` [PATCH RFC v2 00/16] ARM: provide common arch init for DT clocks Sebastian Hesselbarth
[not found] ` <1376964271-22715-1-git-send-email-sebastian.hesselbarth-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-08-27 21:27 ` [PATCH RFC v2 01/16] ARM: call clk_of_init from time_init Sebastian Hesselbarth
2013-08-27 22:19 ` Sören Brinkmann
2013-08-27 22:58 ` Sebastian Hesselbarth
2013-08-27 23:20 ` Sören Brinkmann
2013-08-29 13:45 ` Arnd Bergmann
2013-08-27 21:28 ` [PATCH RFC v2 13/16] ARM: tegra: split tegra_pmc_init() in two Sebastian Hesselbarth
[not found] ` <1377638890-371-14-git-send-email-sebastian.hesselbarth-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-08-27 21:59 ` Stephen Warren
[not found] ` <521D214C.80809-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-08-27 22:09 ` Sebastian Hesselbarth
2013-09-11 19:56 ` Stephen Warren
[not found] ` <5230CAF7.6010103-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-09-12 6:21 ` Sebastian Hesselbarth
2013-09-12 16:32 ` Stephen Warren
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).