Message ID | 1377638890-371-2-git-send-email-sebastian.hesselbarth@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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 -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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 -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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 -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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 -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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
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(-)