mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 07:17:45 -04:00
ctr/3ds: attempt to improve cache flushing
This commit is contained in:
parent
2d2e57b2cf
commit
fd587b673e
2 changed files with 13 additions and 35 deletions
|
@ -20,48 +20,29 @@ static void ctr_enable_all_svc_kernel(void)
|
|||
svc_access_control[3]=0x3FFFFFFF;
|
||||
}
|
||||
|
||||
|
||||
static void ctr_invalidate_ICache_kernel(void)
|
||||
{
|
||||
__asm__ volatile(
|
||||
"cpsid aif\n\t"
|
||||
"mov r0, #0\n\t"
|
||||
"mcr p15, 0, r0, c7, c5, 0\n\t");
|
||||
}
|
||||
|
||||
static void ctr_flush_DCache_kernel(void)
|
||||
{
|
||||
__asm__ volatile(
|
||||
"cpsid aif\n\t"
|
||||
"mov r0, #0\n\t"
|
||||
"mcr p15, 0, r0, c7, c10, 0\n\t");
|
||||
|
||||
}
|
||||
|
||||
|
||||
static void ctr_enable_all_svc(void)
|
||||
{
|
||||
svcBackdoor((ctr_callback_type)ctr_enable_all_svc_kernel);
|
||||
}
|
||||
|
||||
void ctr_invalidate_ICache(void)
|
||||
static void ctr_clean_invalidate_kernel(void)
|
||||
{
|
||||
// __asm__ volatile("svc 0x2E\n\t");
|
||||
svcBackdoor((ctr_callback_type)ctr_invalidate_ICache_kernel);
|
||||
|
||||
__asm__ volatile(
|
||||
"mrs r1, cpsr\n"
|
||||
"cpsid aif\n" // disable interrupts
|
||||
"mov r0, #0\n"
|
||||
"mcr p15, 0, r0, c7, c10, 0\n" // clean dcache
|
||||
"mcr p15, 0, r0, c7, c10, 4\n" // DSB
|
||||
"mcr p15, 0, r0, c7, c5, 0\n" // invalidate icache+BTAC
|
||||
"msr cpsr_cx, r1\n" // restore interrupts
|
||||
::: "r0", "r1");
|
||||
}
|
||||
|
||||
void ctr_flush_DCache(void)
|
||||
{
|
||||
// __asm__ volatile("svc 0x4B\n\t");
|
||||
svcBackdoor((ctr_callback_type)ctr_flush_DCache_kernel);
|
||||
}
|
||||
|
||||
|
||||
void ctr_flush_invalidate_cache(void)
|
||||
{
|
||||
ctr_flush_DCache();
|
||||
ctr_invalidate_ICache();
|
||||
// __asm__ volatile("svc 0x2E\n\t");
|
||||
// __asm__ volatile("svc 0x4B\n\t");
|
||||
svcBackdoor((ctr_callback_type)ctr_clean_invalidate_kernel);
|
||||
}
|
||||
|
||||
int ctr_svchack_init(void)
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
#ifndef _3DS_UTILS_H
|
||||
#define _3DS_UTILS_H
|
||||
|
||||
void ctr_invalidate_ICache(void);
|
||||
void ctr_flush_DCache(void);
|
||||
|
||||
void ctr_flush_invalidate_cache(void);
|
||||
|
||||
int ctr_svchack_init(void);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue