diff --git a/source/arm9/crypto.c b/source/arm9/crypto.c index daf87de..353eccb 100644 --- a/source/arm9/crypto.c +++ b/source/arm9/crypto.c @@ -5,8 +5,10 @@ * profi200 */ +#include #include #include "types.h" +#include "mem_map.h" #include "arm9/crypto.h" #include "arm9/interrupt.h" #include "arm9/ndma.h" @@ -133,6 +135,10 @@ void AES_crypt(AES_ctx *restrict ctx, const u32 *restrict in, u32 *restrict out, u32 size) { + // DMA can't reach TCMs + assert(((u32)in >= ITCM_BOOT9_MIRROR + ITCM_SIZE) && (((u32)in < DTCM_BASE) || ((u32)in >= DTCM_BASE + DTCM_SIZE))); + assert(((u32)out >= ITCM_BOOT9_MIRROR + ITCM_SIZE) && (((u32)out < DTCM_BASE) || ((u32)out >= DTCM_BASE + DTCM_SIZE))); + // Align to 16 bytes. size = (size + 0xFu) & ~0xFu; diff --git a/source/arm9/ndma.c b/source/arm9/ndma.c index 74edc74..2e22788 100644 --- a/source/arm9/ndma.c +++ b/source/arm9/ndma.c @@ -3,7 +3,9 @@ * profi200 */ +#include #include "types.h" +#include "mem_map.h" #include "arm9/ndma.h" #include "arm9/interrupt.h" @@ -11,6 +13,9 @@ void NDMA_copy(u32 *dest, const u32 *source, u32 num) { + assert(((u32)dest >= ITCM_BOOT9_MIRROR + ITCM_SIZE) && (((u32)dest < DTCM_BASE) || ((u32)dest >= DTCM_BASE + DTCM_SIZE))); + assert(((u32)source >= ITCM_BOOT9_MIRROR + ITCM_SIZE) && (((u32)source < DTCM_BASE) || ((u32)source >= DTCM_BASE + DTCM_SIZE))); + REG_NDMA7_SRC_ADDR = (u32)source; REG_NDMA7_DST_ADDR = (u32)dest; REG_NDMA7_WRITE_CNT = num; @@ -26,6 +31,8 @@ void NDMA_fill(u32 *dest, u32 value, u32 num) { + assert(((u32)dest >= ITCM_BOOT9_MIRROR + ITCM_SIZE) && (((u32)dest < DTCM_BASE) || ((u32)dest >= DTCM_BASE + DTCM_SIZE))); + REG_NDMA7_DST_ADDR = (u32)dest; REG_NDMA7_WRITE_CNT = num; REG_NDMA7_BLOCK_CNT = NDMA_BLOCK_SYS_FREQ;