blob: 2cf846edb3fcc4e941e44a8fc032eecd789b22d7 [file] [log] [blame]
jdl@freescale.comdd56fdf2005-09-07 15:59:48 -05001#ifndef _ASM_POWERPC_TIMEX_H
2#define _ASM_POWERPC_TIMEX_H
3
4#ifdef __KERNEL__
5
6/*
7 * PowerPC architecture timex specifications
8 */
9
jdl@freescale.comdd56fdf2005-09-07 15:59:48 -050010#include <asm/cputable.h>
Benjamin Herrenschmidt859deea2006-10-20 14:37:05 +100011#include <asm/reg.h>
jdl@freescale.comdd56fdf2005-09-07 15:59:48 -050012
Benjamin Herrenschmidtcbd27b82005-10-12 11:39:33 +100013#define CLOCK_TICK_RATE 1024000 /* Underlying HZ */
jdl@freescale.comdd56fdf2005-09-07 15:59:48 -050014
15typedef unsigned long cycles_t;
16
17static inline cycles_t get_cycles(void)
18{
Benjamin Herrenschmidt859deea2006-10-20 14:37:05 +100019#ifdef __powerpc64__
20 return mftb();
21#else
jdl@freescale.comdd56fdf2005-09-07 15:59:48 -050022 cycles_t ret;
23
jdl@freescale.comdd56fdf2005-09-07 15:59:48 -050024 /*
25 * For the "cycle" counter we use the timebase lower half.
26 * Currently only used on SMP.
27 */
28
29 ret = 0;
30
31 __asm__ __volatile__(
LEROY Christopheae2163b2013-11-22 17:57:31 +010032#ifdef CONFIG_8xx
33 "97: mftb %0\n"
34#else
Scott Woodbeb2dc02013-08-20 19:33:12 -050035 "97: mfspr %0, %2\n"
LEROY Christopheae2163b2013-11-22 17:57:31 +010036#endif
jdl@freescale.comdd56fdf2005-09-07 15:59:48 -050037 "99:\n"
38 ".section __ftr_fixup,\"a\"\n"
Benjamin Herrenschmidt0909c8c2006-10-20 11:47:18 +100039 ".align 2\n"
40 "98:\n"
jdl@freescale.comdd56fdf2005-09-07 15:59:48 -050041 " .long %1\n"
42 " .long 0\n"
Benjamin Herrenschmidt0909c8c2006-10-20 11:47:18 +100043 " .long 97b-98b\n"
44 " .long 99b-98b\n"
Michael Ellermanfac23fe2008-06-24 11:32:54 +100045 " .long 0\n"
46 " .long 0\n"
jdl@freescale.comdd56fdf2005-09-07 15:59:48 -050047 ".previous"
LEROY Christopheae2163b2013-11-22 17:57:31 +010048#ifdef CONFIG_8xx
49 : "=r" (ret) : "i" (CPU_FTR_601));
50#else
Scott Woodbeb2dc02013-08-20 19:33:12 -050051 : "=r" (ret) : "i" (CPU_FTR_601), "i" (SPRN_TBRL));
LEROY Christopheae2163b2013-11-22 17:57:31 +010052#endif
jdl@freescale.comdd56fdf2005-09-07 15:59:48 -050053 return ret;
Benjamin Herrenschmidt859deea2006-10-20 14:37:05 +100054#endif
jdl@freescale.comdd56fdf2005-09-07 15:59:48 -050055}
56
57#endif /* __KERNEL__ */
58#endif /* _ASM_POWERPC_TIMEX_H */