kern: reflect nintendo cache management behavior for initial processes

This commit is contained in:
Michael Scire 2021-10-25 13:02:35 -07:00
parent 54dde406bc
commit 6ad3219656

View file

@ -180,9 +180,11 @@ namespace ams::kern {
} }
/* Flush caches. */ /* Flush caches. */
/* NOTE: official kernel does an entire cache flush by set/way here, which is incorrect as other cores are online. */ /* NOTE: This seems incorrect according to arm spec, which says not to flush via set/way after boot. */
/* We will simply flush by virtual address, since that's what ARM says is correct to do. */ /* However, Nintendo flushes the entire cache here and not doing so has caused reports of abort with ESR_EL1 */
MESOSPHERE_R_ABORT_UNLESS(cpu::FlushDataCache(GetVoidPointer(address), params.code_num_pages * PageSize)); /* as 0x02000000 (unknown abort) to occur. */
MESOSPHERE_UNUSED(params);
cpu::FlushEntireDataCache();
cpu::InvalidateEntireInstructionCache(); cpu::InvalidateEntireInstructionCache();
return ResultSuccess(); return ResultSuccess();