ctr/3ds: attempt to improve cache flushing

This commit is contained in:
notaz 2018-01-31 23:44:45 +02:00
parent 2d2e57b2cf
commit fd587b673e
2 changed files with 13 additions and 35 deletions

View file

@ -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)

View file

@ -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);