aboutsummaryrefslogtreecommitdiff
path: root/frontend
diff options
context:
space:
mode:
authornotaz2011-08-01 23:22:04 +0300
committernotaz2011-08-01 23:32:21 +0300
commit19e57cbf170d1ce49f00097f3cc3a4ed96d77374 (patch)
treefcb7ab0c55a9c1d70e77ad42c495cc71c09ad6ee /frontend
parentf968d35dc0302f3fb7fba5a1bafb5feed1f758f6 (diff)
downloadpcsx_rearmed-19e57cbf170d1ce49f00097f3cc3a4ed96d77374.tar.gz
pcsx_rearmed-19e57cbf170d1ce49f00097f3cc3a4ed96d77374.tar.bz2
pcsx_rearmed-19e57cbf170d1ce49f00097f3cc3a4ed96d77374.zip
frontnd: pcnt: enable counters to avoid using ext tools
Diffstat (limited to 'frontend')
-rw-r--r--frontend/pcnt.h13
-rw-r--r--frontend/plugin.c3
2 files changed, 14 insertions, 2 deletions
diff --git a/frontend/pcnt.h b/frontend/pcnt.h
index 232ae07..3969aa4 100644
--- a/frontend/pcnt.h
+++ b/frontend/pcnt.h
@@ -83,6 +83,19 @@ static inline unsigned int pcnt_get(void)
return val;
}
+static inline void pcnt_init(void)
+{
+#ifdef __ARM_ARCH_7A__
+ int v;
+ asm volatile("mrc p15, 0, %0, c9, c12, 0" : "=r"(v));
+ v |= 5; // master enable, ccnt reset
+ v &= ~8; // ccnt divider 0
+ 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));
+#endif
+}
+
#else
#define pcnt_start(id)
diff --git a/frontend/plugin.c b/frontend/plugin.c
index cbb5558..7b0d301 100644
--- a/frontend/plugin.c
+++ b/frontend/plugin.c
@@ -271,8 +271,7 @@ pc_hook_func (SPU_playCDDAchannel, (short *a0, int a1), (a0, a1), P
void pcnt_hook_plugins(void)
{
- /* test it first */
- pcnt_get();
+ pcnt_init();
hook_it(GPU_writeStatus);
hook_it(GPU_writeData);