Re: [PATCH v3 28/31] arm64: Generic timers support

2012-09-08 Thread Shilimkar, Santosh
On Fri, Sep 7, 2012 at 9:57 PM, Catalin Marinas  wrote:
> From: Marc Zyngier 
>
> This patch adds support for the ARM generic timers with A64 instructions
> for accessing the timer registers. It uses the physical counter as the
> clock source and the virtual counter as sched_clock.
>
> The timer frequency can be specified via DT or read from the CNTFRQ_EL0
> register. The physical counter is also accessible from user space
> allowing fast gettimeofday() implementation.
>
> Signed-off-by: Marc Zyngier 
> Signed-off-by: Will Deacon 
> Signed-off-by: Catalin Marinas 
> Acked-by: Tony Lindgren 
> ---
Thanks for C3STOP update.
Acked-by: Santosh Shilimkar 
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v3 28/31] arm64: Generic timers support

2012-09-08 Thread Shilimkar, Santosh
On Fri, Sep 7, 2012 at 9:57 PM, Catalin Marinas catalin.mari...@arm.com wrote:
 From: Marc Zyngier marc.zyng...@arm.com

 This patch adds support for the ARM generic timers with A64 instructions
 for accessing the timer registers. It uses the physical counter as the
 clock source and the virtual counter as sched_clock.

 The timer frequency can be specified via DT or read from the CNTFRQ_EL0
 register. The physical counter is also accessible from user space
 allowing fast gettimeofday() implementation.

 Signed-off-by: Marc Zyngier marc.zyng...@arm.com
 Signed-off-by: Will Deacon will.dea...@arm.com
 Signed-off-by: Catalin Marinas catalin.mari...@arm.com
 Acked-by: Tony Lindgren t...@atomide.com
 ---
Thanks for C3STOP update.
Acked-by: Santosh Shilimkar santosh.shilim...@ti.com
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v3 28/31] arm64: Generic timers support

2012-09-07 Thread Arnd Bergmann
On Friday 07 September 2012, Catalin Marinas wrote:
> From: Marc Zyngier 
> 
> This patch adds support for the ARM generic timers with A64 instructions
> for accessing the timer registers. It uses the physical counter as the
> clock source and the virtual counter as sched_clock.
> 
> The timer frequency can be specified via DT or read from the CNTFRQ_EL0
> register. The physical counter is also accessible from user space
> allowing fast gettimeofday() implementation.
> 
> Signed-off-by: Marc Zyngier 
> Signed-off-by: Will Deacon 
> Signed-off-by: Catalin Marinas 
> Acked-by: Tony Lindgren 

Acked-by: Arnd Bergmann 
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH v3 28/31] arm64: Generic timers support

2012-09-07 Thread Catalin Marinas
From: Marc Zyngier 

This patch adds support for the ARM generic timers with A64 instructions
for accessing the timer registers. It uses the physical counter as the
clock source and the virtual counter as sched_clock.

The timer frequency can be specified via DT or read from the CNTFRQ_EL0
register. The physical counter is also accessible from user space
allowing fast gettimeofday() implementation.

Signed-off-by: Marc Zyngier 
Signed-off-by: Will Deacon 
Signed-off-by: Catalin Marinas 
Acked-by: Tony Lindgren 
---
 arch/arm64/include/asm/arm_generic.h |  100 +++
 arch/arm64/include/asm/timex.h   |   29 +
 arch/arm64/kernel/time.c |   65 ++
 drivers/clocksource/Kconfig  |5 +
 drivers/clocksource/Makefile |1 +
 drivers/clocksource/arm_generic.c|  232 ++
 include/clocksource/arm_generic.h|   21 +++
 7 files changed, 453 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm64/include/asm/arm_generic.h
 create mode 100644 arch/arm64/include/asm/timex.h
 create mode 100644 arch/arm64/kernel/time.c
 create mode 100644 drivers/clocksource/arm_generic.c
 create mode 100644 include/clocksource/arm_generic.h

diff --git a/arch/arm64/include/asm/arm_generic.h 
b/arch/arm64/include/asm/arm_generic.h
new file mode 100644
index 000..e4cec9d
--- /dev/null
+++ b/arch/arm64/include/asm/arm_generic.h
@@ -0,0 +1,100 @@
+/*
+ * arch/arm64/include/asm/arm_generic.h
+ *
+ * Copyright (C) 2012 ARM Ltd.
+ * Author: Marc Zyngier 
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+#ifndef __ASM_ARM_GENERIC_H
+#define __ASM_ARM_GENERIC_H
+
+#include 
+
+#define ARCH_TIMER_CTRL_ENABLE (1 << 0)
+#define ARCH_TIMER_CTRL_IMASK  (1 << 1)
+#define ARCH_TIMER_CTRL_ISTATUS(1 << 2)
+
+#define ARCH_TIMER_REG_CTRL0
+#define ARCH_TIMER_REG_FREQ1
+#define ARCH_TIMER_REG_TVAL2
+
+static inline void arch_timer_reg_write(int reg, u32 val)
+{
+   switch (reg) {
+   case ARCH_TIMER_REG_CTRL:
+   asm volatile("msr cntp_ctl_el0,  %0" : : "r" (val));
+   break;
+   case ARCH_TIMER_REG_TVAL:
+   asm volatile("msr cntp_tval_el0, %0" : : "r" (val));
+   break;
+   default:
+   BUILD_BUG();
+   }
+
+   isb();
+}
+
+static inline u32 arch_timer_reg_read(int reg)
+{
+   u32 val;
+
+   switch (reg) {
+   case ARCH_TIMER_REG_CTRL:
+   asm volatile("mrs %0,  cntp_ctl_el0" : "=r" (val));
+   break;
+   case ARCH_TIMER_REG_FREQ:
+   asm volatile("mrs %0,   cntfrq_el0" : "=r" (val));
+   break;
+   case ARCH_TIMER_REG_TVAL:
+   asm volatile("mrs %0, cntp_tval_el0" : "=r" (val));
+   break;
+   default:
+   BUILD_BUG();
+   }
+
+   return val;
+}
+
+static inline void __cpuinit arch_counter_enable_user_access(void)
+{
+   u32 cntkctl;
+
+   /* Disable user access to the timers and the virtual counter. */
+   asm volatile("mrs   %0, cntkctl_el1" : "=r" (cntkctl));
+   cntkctl &= ~((3 << 8) | (1 << 1));
+
+   /* Enable user access to the physical counter and frequency. */
+   cntkctl |= 1;
+   asm volatile("msr   cntkctl_el1, %0" : : "r" (cntkctl));
+}
+
+static inline cycle_t arch_counter_get_cntpct(void)
+{
+   cycle_t cval;
+
+   asm volatile("mrs %0, cntpct_el0" : "=r" (cval));
+
+   return cval;
+}
+
+static inline cycle_t arch_counter_get_cntvct(void)
+{
+   cycle_t cval;
+
+   asm volatile("mrs %0, cntvct_el0" : "=r" (cval));
+
+   return cval;
+}
+
+#endif
diff --git a/arch/arm64/include/asm/timex.h b/arch/arm64/include/asm/timex.h
new file mode 100644
index 000..b24a31a
--- /dev/null
+++ b/arch/arm64/include/asm/timex.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public 

[PATCH v3 28/31] arm64: Generic timers support

2012-09-07 Thread Catalin Marinas
From: Marc Zyngier marc.zyng...@arm.com

This patch adds support for the ARM generic timers with A64 instructions
for accessing the timer registers. It uses the physical counter as the
clock source and the virtual counter as sched_clock.

The timer frequency can be specified via DT or read from the CNTFRQ_EL0
register. The physical counter is also accessible from user space
allowing fast gettimeofday() implementation.

Signed-off-by: Marc Zyngier marc.zyng...@arm.com
Signed-off-by: Will Deacon will.dea...@arm.com
Signed-off-by: Catalin Marinas catalin.mari...@arm.com
Acked-by: Tony Lindgren t...@atomide.com
---
 arch/arm64/include/asm/arm_generic.h |  100 +++
 arch/arm64/include/asm/timex.h   |   29 +
 arch/arm64/kernel/time.c |   65 ++
 drivers/clocksource/Kconfig  |5 +
 drivers/clocksource/Makefile |1 +
 drivers/clocksource/arm_generic.c|  232 ++
 include/clocksource/arm_generic.h|   21 +++
 7 files changed, 453 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm64/include/asm/arm_generic.h
 create mode 100644 arch/arm64/include/asm/timex.h
 create mode 100644 arch/arm64/kernel/time.c
 create mode 100644 drivers/clocksource/arm_generic.c
 create mode 100644 include/clocksource/arm_generic.h

diff --git a/arch/arm64/include/asm/arm_generic.h 
b/arch/arm64/include/asm/arm_generic.h
new file mode 100644
index 000..e4cec9d
--- /dev/null
+++ b/arch/arm64/include/asm/arm_generic.h
@@ -0,0 +1,100 @@
+/*
+ * arch/arm64/include/asm/arm_generic.h
+ *
+ * Copyright (C) 2012 ARM Ltd.
+ * Author: Marc Zyngier marc.zyng...@arm.com
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see http://www.gnu.org/licenses/.
+ */
+#ifndef __ASM_ARM_GENERIC_H
+#define __ASM_ARM_GENERIC_H
+
+#include linux/clocksource.h
+
+#define ARCH_TIMER_CTRL_ENABLE (1  0)
+#define ARCH_TIMER_CTRL_IMASK  (1  1)
+#define ARCH_TIMER_CTRL_ISTATUS(1  2)
+
+#define ARCH_TIMER_REG_CTRL0
+#define ARCH_TIMER_REG_FREQ1
+#define ARCH_TIMER_REG_TVAL2
+
+static inline void arch_timer_reg_write(int reg, u32 val)
+{
+   switch (reg) {
+   case ARCH_TIMER_REG_CTRL:
+   asm volatile(msr cntp_ctl_el0,  %0 : : r (val));
+   break;
+   case ARCH_TIMER_REG_TVAL:
+   asm volatile(msr cntp_tval_el0, %0 : : r (val));
+   break;
+   default:
+   BUILD_BUG();
+   }
+
+   isb();
+}
+
+static inline u32 arch_timer_reg_read(int reg)
+{
+   u32 val;
+
+   switch (reg) {
+   case ARCH_TIMER_REG_CTRL:
+   asm volatile(mrs %0,  cntp_ctl_el0 : =r (val));
+   break;
+   case ARCH_TIMER_REG_FREQ:
+   asm volatile(mrs %0,   cntfrq_el0 : =r (val));
+   break;
+   case ARCH_TIMER_REG_TVAL:
+   asm volatile(mrs %0, cntp_tval_el0 : =r (val));
+   break;
+   default:
+   BUILD_BUG();
+   }
+
+   return val;
+}
+
+static inline void __cpuinit arch_counter_enable_user_access(void)
+{
+   u32 cntkctl;
+
+   /* Disable user access to the timers and the virtual counter. */
+   asm volatile(mrs   %0, cntkctl_el1 : =r (cntkctl));
+   cntkctl = ~((3  8) | (1  1));
+
+   /* Enable user access to the physical counter and frequency. */
+   cntkctl |= 1;
+   asm volatile(msr   cntkctl_el1, %0 : : r (cntkctl));
+}
+
+static inline cycle_t arch_counter_get_cntpct(void)
+{
+   cycle_t cval;
+
+   asm volatile(mrs %0, cntpct_el0 : =r (cval));
+
+   return cval;
+}
+
+static inline cycle_t arch_counter_get_cntvct(void)
+{
+   cycle_t cval;
+
+   asm volatile(mrs %0, cntvct_el0 : =r (cval));
+
+   return cval;
+}
+
+#endif
diff --git a/arch/arm64/include/asm/timex.h b/arch/arm64/include/asm/timex.h
new file mode 100644
index 000..b24a31a
--- /dev/null
+++ b/arch/arm64/include/asm/timex.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2012 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License 

Re: [PATCH v3 28/31] arm64: Generic timers support

2012-09-07 Thread Arnd Bergmann
On Friday 07 September 2012, Catalin Marinas wrote:
 From: Marc Zyngier marc.zyng...@arm.com
 
 This patch adds support for the ARM generic timers with A64 instructions
 for accessing the timer registers. It uses the physical counter as the
 clock source and the virtual counter as sched_clock.
 
 The timer frequency can be specified via DT or read from the CNTFRQ_EL0
 register. The physical counter is also accessible from user space
 allowing fast gettimeofday() implementation.
 
 Signed-off-by: Marc Zyngier marc.zyng...@arm.com
 Signed-off-by: Will Deacon will.dea...@arm.com
 Signed-off-by: Catalin Marinas catalin.mari...@arm.com
 Acked-by: Tony Lindgren t...@atomide.com

Acked-by: Arnd Bergmann a...@arndb.de
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/