From 8c235914f498b8caf03bf6b094d961f9fdee1856 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Fri, 29 May 2015 20:05:22 +0000 Subject: [PATCH] - added I/D-cache invalidate git-svn-id: http://moon:8086/svn/mips@38 a8ebac50-d88d-4704-bea3-6648445a41b3 --- src/bootloader/libsys_boot.c | 58 ++++++++++++++++++++++++++++++++++++ src/bootloader/libsys_boot.h | 8 +++++ 2 files changed, 66 insertions(+) diff --git a/src/bootloader/libsys_boot.c b/src/bootloader/libsys_boot.c index 4478f01..ad246db 100644 --- a/src/bootloader/libsys_boot.c +++ b/src/bootloader/libsys_boot.c @@ -80,6 +80,64 @@ uint32_t CP0_PRID_read(void) return result; } +void CP0_TR_write_ptr(uint32_t* pPtr) +{ + __asm__ + ( + "swc0 $31, 0(%[pPtr])\n" + : + : [pPtr] "r" (pPtr) + ); +} + +void CP0_TR_read_ptr(uint32_t* pPtr) +{ + __asm__ + ( + "lwc0 $31, 0(%[pPtr])\n" + : + : [pPtr] "r" (pPtr) + ); +} + +void ICACHE_invalidate_all(void) +{ + __asm__ + ( + "cop0 32\n" + ); +} + +void ICACHE_invalidate_at(uint32_t* pPtr) +{ + __asm__ + ( + "mtc0 %[pPtr], $31\n" + "cop0 33\n" + : + : [pPtr] "r" (pPtr) + ); +} + +void DCACHE_invalidate_all(void) +{ + __asm__ + ( + "cop0 34\n" + ); +} + +void DCACHE_invalidate_at(uint32_t* pPtr) +{ + __asm__ + ( + "mtc0 %[pPtr], $31\n" + "cop0 35\n" + : + : [pPtr] "r" (pPtr) + ); +} + // --------------------------------------------------------------------------------- char readchar(void) { diff --git a/src/bootloader/libsys_boot.h b/src/bootloader/libsys_boot.h index 2ea41dd..62385c2 100644 --- a/src/bootloader/libsys_boot.h +++ b/src/bootloader/libsys_boot.h @@ -59,6 +59,14 @@ void CP0_SR_write(uint32_t val); uint32_t CP0_CR_read(void); void CP0_CR_write(uint32_t val); uint32_t CP0_PRID_read(void); +uint32_t CP0_TR_read(void); +void CP0_TR_write(uint32_t val); +void CP0_TR_write_ptr(uint32_t* pPtr); +void CP0_TR_read_ptr(uint32_t* pPtr); +void ICACHE_invalidate_all(void); +void ICACHE_invalidate_at(uint32_t* pPtr); +void DCACHE_invalidate_all(void); +void DCACHE_invalidate_at(uint32_t* pPtr); // General char readchar(void);