From: Ian Campbell <Ian.Campbell@citrix.com>
To: Oleksandr Tyshchenko <oleksandr.tyshchenko@globallogic.com>
Cc: julien.grall@linaro.org, tim@xen.org,
stefano.stabellini@eu.citrix.com, xen-devel@lists.xen.org
Subject: Re: [RFC PATCH v2] xen/arm: split the init_xen_time() in 2 parts
Date: Tue, 27 Jan 2015 16:43:29 +0000 [thread overview]
Message-ID: <1422377009.16180.7.camel@citrix.com> (raw)
In-Reply-To: <1422365971-16840-1-git-send-email-oleksandr.tyshchenko@globallogic.com>
On Tue, 2015-01-27 at 15:39 +0200, Oleksandr Tyshchenko wrote:
> Create preinit_xen_time() and move to it minimum required
> subset of operations needed to properly initialized
> cpu_khz and boot_count vars. This is allow us to use udelay()
> immediately after the call.
>
> Changes in v2:
> 1. Move timer_ids out of the find_timer_node() and frop this func.
> 2. Use void as a return value for preinit_xen_time().
> 3. Move platform_init() before calling preinit_xen_time().
Please put these after the first --- so they get cut from the eventual
commit log.
Apart from this the patch looks good to me, is there a reason I'm not
aware of that it is still RFC?
>
> Signed-off-by: Oleksandr Tyshchenko <oleksandr.tyshchenko@globallogic.com>
> CC: Julien Grall <julien.grall@linaro.org>
> ---
> xen/arch/arm/setup.c | 6 +++--
> xen/arch/arm/time.c | 62 ++++++++++++++++++++++++++++++--------------------
> xen/include/xen/time.h | 1 +
> 3 files changed, 42 insertions(+), 27 deletions(-)
>
> diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
> index f49569d..a916ca6 100644
> --- a/xen/arch/arm/setup.c
> +++ b/xen/arch/arm/setup.c
> @@ -743,6 +743,10 @@ void __init start_xen(unsigned long boot_phys_offset,
>
> init_IRQ();
>
> + platform_init();
> +
> + preinit_xen_time();
> +
> dt_uart_init();
> console_init_preirq();
> console_init_ring();
> @@ -751,8 +755,6 @@ void __init start_xen(unsigned long boot_phys_offset,
>
> processor_id();
>
> - platform_init();
> -
> smp_init_cpus();
> cpus = smp_get_max_cpus();
>
> diff --git a/xen/arch/arm/time.c b/xen/arch/arm/time.c
> index 0add494..d442e61 100644
> --- a/xen/arch/arm/time.c
> +++ b/xen/arch/arm/time.c
> @@ -61,17 +61,17 @@ unsigned int timer_get_irq(enum timer_ppi ppi)
> return muldiv64(ns, 1000 * cpu_khz, SECONDS(1));
> }
>
> -/* Set up the timer on the boot CPU */
> -int __init init_xen_time(void)
> +static const struct dt_device_match timer_ids[] __initconst =
> +{
> + DT_MATCH_TIMER,
> + { /* sentinel */ },
> +};
> +
> +/* Set up the timer on the boot CPU (early init function) */
> +void __init preinit_xen_time(void)
> {
> - static const struct dt_device_match timer_ids[] __initconst =
> - {
> - DT_MATCH_TIMER,
> - { /* sentinel */ },
> - };
> struct dt_device_node *dev;
> int res;
> - unsigned int i;
> u32 rate;
>
> dev = dt_find_matching_node(NULL, timer_ids);
> @@ -80,6 +80,30 @@ int __init init_xen_time(void)
>
> dt_device_set_used_by(dev, DOMID_XEN);
>
> + res = platform_init_time();
> + if ( res )
> + panic("Timer: Cannot initialize platform timer");
> +
> + res = dt_property_read_u32(dev, "clock-frequency", &rate);
> + if ( res )
> + cpu_khz = rate / 1000;
> + else
> + cpu_khz = READ_SYSREG32(CNTFRQ_EL0) / 1000;
> +
> + boot_count = READ_SYSREG64(CNTPCT_EL0);
> +}
> +
> +/* Set up the timer on the boot CPU (late init function) */
> +int __init init_xen_time(void)
> +{
> + struct dt_device_node *dev;
> + int res;
> + unsigned int i;
> +
> + dev = dt_find_matching_node(NULL, timer_ids);
> + if ( !dev )
> + panic("Unable to find a compatible timer in the device tree");
> +
> /* Retrieve all IRQs for the timer */
> for ( i = TIMER_PHYS_SECURE_PPI; i < MAX_TIMER_PPI; i++ )
> {
> @@ -90,27 +114,15 @@ int __init init_xen_time(void)
> timer_irq[i] = res;
> }
>
> - printk("Generic Timer IRQ: phys=%u hyp=%u virt=%u\n",
> - timer_irq[TIMER_PHYS_NONSECURE_PPI],
> - timer_irq[TIMER_HYP_PPI],
> - timer_irq[TIMER_VIRT_PPI]);
> -
> - res = platform_init_time();
> - if ( res )
> - panic("Timer: Cannot initialize platform timer");
> -
> /* Check that this CPU supports the Generic Timer interface */
> if ( !cpu_has_gentimer )
> panic("CPU does not support the Generic Timer v1 interface");
>
> - res = dt_property_read_u32(dev, "clock-frequency", &rate);
> - if ( res )
> - cpu_khz = rate / 1000;
> - else
> - cpu_khz = READ_SYSREG32(CNTFRQ_EL0) / 1000;
> -
> - boot_count = READ_SYSREG64(CNTPCT_EL0);
> - printk("Using generic timer at %lu KHz\n", cpu_khz);
> + printk("Generic Timer IRQ: phys=%u hyp=%u virt=%u Freq: %lu KHz\n",
> + timer_irq[TIMER_PHYS_NONSECURE_PPI],
> + timer_irq[TIMER_HYP_PPI],
> + timer_irq[TIMER_VIRT_PPI],
> + cpu_khz);
>
> return 0;
> }
> diff --git a/xen/include/xen/time.h b/xen/include/xen/time.h
> index 709501f..bb6259d 100644
> --- a/xen/include/xen/time.h
> +++ b/xen/include/xen/time.h
> @@ -12,6 +12,7 @@
> #include <public/xen.h>
>
> extern int init_xen_time(void);
> +void preinit_xen_time(void);
> extern void cstate_restore_tsc(void);
>
> extern unsigned long cpu_khz;
next prev parent reply other threads:[~2015-01-27 16:43 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-27 13:39 [RFC PATCH v2] xen/arm: split the init_xen_time() in 2 parts Oleksandr Tyshchenko
2015-01-27 16:43 ` Ian Campbell [this message]
2015-01-27 17:00 ` Oleksandr Tyshchenko
2015-01-27 17:09 ` Julien Grall
2015-01-27 17:52 ` Oleksandr Tyshchenko
2015-01-27 18:00 ` Julien Grall
2015-01-27 18:09 ` Oleksandr Tyshchenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1422377009.16180.7.camel@citrix.com \
--to=ian.campbell@citrix.com \
--cc=julien.grall@linaro.org \
--cc=oleksandr.tyshchenko@globallogic.com \
--cc=stefano.stabellini@eu.citrix.com \
--cc=tim@xen.org \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.