On Wednesday 18 September 2013 09:23 PM, Sricharan R wrote:
> The realtime counter called master counter, produces the count
> used by the private timer peripherals in the MPU_CLUSTER. The
> CNTFRQ per cpu register is used to denote the frequency of the counter.
> Currently the frequency value is passed from the
> DT file, but this is not scalable when we have other non-DT guest
> OS. This register must be set to the right value by the
> host OS, as this will be propagated to the guests as well.
>
> More discussions and the reason for adding this in a non-DT
> way can be seen from below.
> http://www.mail-archive.com/linux-omap@vger.kernel.org/msg93832.html
>
> So configuring this secure register for all the cpus here.
>
> While here, removing the clock-frequency DT entry for omap5 as
> it is no more needed after this patch.
>
> Cc: Santosh Shilimkar <santosh.shilim...@ti.com>
> Cc: Nishanth Menon <n...@ti.com>
> Cc: Rajendra Nayak <rna...@ti.com>
> Cc: Marc Zyngier <marc.zyng...@arm.com>
> Cc: Mark Rutland <mark.rutl...@arm.com>
> Signed-off-by: Sricharan R <r.sricha...@ti.com>
> ---
> [V3] Removed the redundant entry in OMAP5.dtsi and
>      a unnecessary newline in timer.c
>
>  arch/arm/boot/dts/omap5.dtsi      |    1 -
>  arch/arm/mach-omap2/omap-secure.h |    2 ++
>  arch/arm/mach-omap2/omap-smp.c    |    9 +++++++++
>  arch/arm/mach-omap2/timer.c       |    5 +++++
>  4 files changed, 16 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm/boot/dts/omap5.dtsi b/arch/arm/boot/dts/omap5.dtsi
> index 07be2cd..8a45512 100644
> --- a/arch/arm/boot/dts/omap5.dtsi
> +++ b/arch/arm/boot/dts/omap5.dtsi
> @@ -52,7 +52,6 @@
>                            <GIC_PPI 14 (GIC_CPU_MASK_RAW(3) | 
> IRQ_TYPE_LEVEL_LOW)>,
>                            <GIC_PPI 11 (GIC_CPU_MASK_RAW(3) | 
> IRQ_TYPE_LEVEL_LOW)>,
>                            <GIC_PPI 10 (GIC_CPU_MASK_RAW(3) | 
> IRQ_TYPE_LEVEL_LOW)>;
> -             clock-frequency = <6144000>;
>       };
>  
>       gic: interrupt-controller@48211000 {
> diff --git a/arch/arm/mach-omap2/omap-secure.h 
> b/arch/arm/mach-omap2/omap-secure.h
> index 0e72917..5f88824 100644
> --- a/arch/arm/mach-omap2/omap-secure.h
> +++ b/arch/arm/mach-omap2/omap-secure.h
> @@ -42,6 +42,8 @@
>  #define OMAP4_MON_L2X0_AUXCTRL_INDEX 0x109
>  #define OMAP4_MON_L2X0_PREFETCH_INDEX        0x113
>  
> +#define OMAP5_DRA7_MON_SET_CNTFRQ_INDEX      0x109
> +
>  /* Secure PPA(Primary Protected Application) APIs */
>  #define OMAP4_PPA_L2_POR_INDEX               0x23
>  #define OMAP4_PPA_CPU_ACTRL_SMP_INDEX        0x25
> diff --git a/arch/arm/mach-omap2/omap-smp.c b/arch/arm/mach-omap2/omap-smp.c
> index 8708b2a..5a3c8d3 100644
> --- a/arch/arm/mach-omap2/omap-smp.c
> +++ b/arch/arm/mach-omap2/omap-smp.c
> @@ -41,6 +41,8 @@
>  
>  u16 pm44xx_errata;
>  
> +extern unsigned long arch_timer_freq;
> +
>  /* SCU base address */
>  static void __iomem *scu_base;
>  
> @@ -66,6 +68,13 @@ static void omap4_secondary_init(unsigned int cpu)
>                                                       4, 0, 0, 0, 0, 0);
>  
>       /*
> +      * Configure the CNTFRQ register for the secondary cpu's which
> +      * indicates the frequency of the cpu local timers.
> +      */
> +     if (soc_is_omap54xx() || soc_is_dra7xx())
> +             omap_smc1(OMAP5_DRA7_MON_SET_CNTFRQ_INDEX, arch_timer_freq);
> +
> +     /*
>        * Synchronise with the boot thread.
>        */
>       spin_lock(&boot_lock);
> diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c
> index fa74a06..d0af9b2 100644
> --- a/arch/arm/mach-omap2/timer.c
> +++ b/arch/arm/mach-omap2/timer.c
> @@ -55,6 +55,7 @@
>  #include "soc.h"
>  #include "common.h"
>  #include "powerdomain.h"
> +#include "omap-secure.h"
>  
>  #define REALTIME_COUNTER_BASE                                0x48243200
>  #define INCREMENTER_NUMERATOR_OFFSET                 0x10
> @@ -65,6 +66,7 @@
>  
>  static struct omap_dm_timer clkev;
>  static struct clock_event_device clockevent_gpt;
> +unsigned long arch_timer_freq;
>  
>  static irqreturn_t omap2_gp_timer_interrupt(int irq, void *dev_id)
>  {
> @@ -542,6 +544,9 @@ static void __init realtime_counter_init(void)
>       reg |= den;
>       __raw_writel(reg, base + INCREMENTER_DENUMERATOR_RELOAD_OFFSET);
>  
> +     arch_timer_freq = (rate / den) * num;
> +     omap_smc1(OMAP5_DRA7_MON_SET_CNTFRQ_INDEX, arch_timer_freq);
> +
>       iounmap(base);
>  }
>  #else
Sorry. Please ignore this as well. Will resend.

Regards,
 Sricharan
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to