diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-09-25 08:59:04 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-09-25 08:59:04 -0700 |
commit | e2aad1d5716c5f7fa5deb4a96e6b6a4e9f24e78b (patch) | |
tree | 389fbdf161a3c28c9b2f98fdc1ccd89d474ef884 /arch/mips/include/asm/timex.h | |
parent | 3ffdea3feca9e2c95c2e93e217d77c9c368f747a (diff) | |
parent | 4a10c2ac2f368583138b774ca41fac4207911983 (diff) | |
download | kernel_replicant_linux-e2aad1d5716c5f7fa5deb4a96e6b6a4e9f24e78b.tar.gz kernel_replicant_linux-e2aad1d5716c5f7fa5deb4a96e6b6a4e9f24e78b.tar.bz2 kernel_replicant_linux-e2aad1d5716c5f7fa5deb4a96e6b6a4e9f24e78b.zip |
Merge 3.12-rc2 into staging-next.
This resolves the merge problem with two iio drivers that Stephen
Rothwell pointed out.
Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'arch/mips/include/asm/timex.h')
-rw-r--r-- | arch/mips/include/asm/timex.h | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/arch/mips/include/asm/timex.h b/arch/mips/include/asm/timex.h index 6529704aa73a..c5424757da65 100644 --- a/arch/mips/include/asm/timex.h +++ b/arch/mips/include/asm/timex.h @@ -10,7 +10,9 @@ #ifdef __KERNEL__ +#include <asm/cpu-features.h> #include <asm/mipsregs.h> +#include <asm/cpu-type.h> /* * This is the clock rate of the i8253 PIT. A MIPS system may not have @@ -33,9 +35,38 @@ typedef unsigned int cycles_t; +/* + * On R4000/R4400 before version 5.0 an erratum exists such that if the + * cycle counter is read in the exact moment that it is matching the + * compare register, no interrupt will be generated. + * + * There is a suggested workaround and also the erratum can't strike if + * the compare interrupt isn't being used as the clock source device. + * However for now the implementaton of this function doesn't get these + * fine details right. + */ static inline cycles_t get_cycles(void) { - return 0; + switch (boot_cpu_type()) { + case CPU_R4400PC: + case CPU_R4400SC: + case CPU_R4400MC: + if ((read_c0_prid() & 0xff) >= 0x0050) + return read_c0_count(); + break; + + case CPU_R4000PC: + case CPU_R4000SC: + case CPU_R4000MC: + break; + + default: + if (cpu_has_counter) + return read_c0_count(); + break; + } + + return 0; /* no usable counter */ } #endif /* __KERNEL__ */ |