aboutsummaryrefslogtreecommitdiff
path: root/frontend
diff options
context:
space:
mode:
authornotaz2012-11-19 03:08:06 +0200
committernotaz2012-11-19 03:08:06 +0200
commit603efa29ac7176c5dc27cab52007d4c9f61c3069 (patch)
treee0318839f16eacc5cc30c164913cabd56b7966b9 /frontend
parent6949dd2a369531ccf38c3f4fae7f6fcf3be6dcc6 (diff)
downloadpcsx_rearmed-603efa29ac7176c5dc27cab52007d4c9f61c3069.tar.gz
pcsx_rearmed-603efa29ac7176c5dc27cab52007d4c9f61c3069.tar.bz2
pcsx_rearmed-603efa29ac7176c5dc27cab52007d4c9f61c3069.zip
frontend: pcnt: support arm11
Diffstat (limited to 'frontend')
-rw-r--r--frontend/pcnt.h15
1 files changed, 12 insertions, 3 deletions
diff --git a/frontend/pcnt.h b/frontend/pcnt.h
index 545f0c4..9ddd500 100644
--- a/frontend/pcnt.h
+++ b/frontend/pcnt.h
@@ -11,11 +11,11 @@ enum pcounters {
#ifdef PCNT
-#ifndef __ARM_ARCH_7A__
+#if defined(__ARM_ARCH_7A__) || defined(ARM1176)
+#define PCNT_DIV 1000
+#else
#include <sys/time.h>
#define PCNT_DIV 1
-#else
-#define PCNT_DIV 1000
#endif
static const char *pcnt_names[PCNT_CNT] = { "", "gpu", "spu", "blit", "gte", "test" };
@@ -85,6 +85,9 @@ static inline unsigned int pcnt_get(void)
#ifdef __ARM_ARCH_7A__
__asm__ volatile("mrc p15, 0, %0, c9, c13, 0"
: "=r"(val));
+#elif defined(ARM1176)
+ __asm__ volatile("mrc p15, 0, %0, c15, c12, 1"
+ : "=r"(val));
#else
// all slow on ARM :(
//struct timespec tv;
@@ -107,6 +110,12 @@ static inline void pcnt_init(void)
asm volatile("mcr p15, 0, %0, c9, c12, 0" :: "r"(v));
// enable cycle counter
asm volatile("mcr p15, 0, %0, c9, c12, 1" :: "r"(1<<31));
+#elif defined(ARM1176)
+ int v;
+ asm volatile("mrc p15, 0, %0, c15, c12, 0" : "=r"(v));
+ v |= 5; // master enable, ccnt reset
+ v &= ~8; // ccnt divider 0
+ asm volatile("mcr p15, 0, %0, c15, c12, 0" :: "r"(v));
#endif
}