summaryrefslogtreecommitdiffstats
path: root/grub-core/kern/mips/cache.S
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 16:29:51 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 16:29:51 +0000
commit6e7a315eb67cb6c113cf37e1d66c4f11a51a2b3e (patch)
tree32451fa3cdd9321fb2591fada9891b2cb70a9cd1 /grub-core/kern/mips/cache.S
parentInitial commit. (diff)
downloadgrub2-6e7a315eb67cb6c113cf37e1d66c4f11a51a2b3e.tar.xz
grub2-6e7a315eb67cb6c113cf37e1d66c4f11a51a2b3e.zip
Adding upstream version 2.06.upstream/2.06upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'grub-core/kern/mips/cache.S')
-rw-r--r--grub-core/kern/mips/cache.S70
1 files changed, 70 insertions, 0 deletions
diff --git a/grub-core/kern/mips/cache.S b/grub-core/kern/mips/cache.S
new file mode 100644
index 0000000..fa331ec
--- /dev/null
+++ b/grub-core/kern/mips/cache.S
@@ -0,0 +1,70 @@
+
+#include <grub/symbol.h>
+
+ .set noreorder
+ .set nomacro
+
+FUNCTION (grub_arch_sync_caches)
+#include "cache_flush.S"
+ j $ra
+ nop
+
+FUNCTION (grub_arch_sync_dma_caches)
+ move $t2, $a0
+ addu $t3, $a0, $a1
+ srl $t2, $t2, 5
+ sll $t2, $t2, 5
+ addu $t3, $t3, 0x1f
+ srl $t3, $t3, 5
+ sll $t3, $t3, 5
+ move $t0, $t2
+ subu $t1, $t3, $t2
+1:
+ cache_op 1, 0($t0)
+#ifdef GRUB_MACHINE_MIPS_LOONGSON
+ cache_op 1, 1($t0)
+ cache_op 1, 2($t0)
+ cache_op 1, 3($t0)
+
+ addiu $t1, $t1, -0x20
+ bne $t1, $zero, 1b
+ addiu $t0, $t0, 0x20
+#else
+ addiu $t1, $t1, -4
+ bne $t1, $zero, 1b
+ addiu $t0, $t0, 0x4
+#endif
+ sync_op
+ move $t0, $t2
+ subu $t1, $t3, $t2
+2:
+#ifdef GRUB_MACHINE_MIPS_LOONGSON
+ cache_op 0, 0($t0)
+ addiu $t1, $t1, -0x20
+ bne $t1, $zero, 2b
+ addiu $t0, $t0, 0x20
+#else
+ cache_op 0, 0($t0)
+ addiu $t1, $t1, -4
+ bne $t1, $zero, 2b
+ addiu $t0, $t0, 0x4
+#endif
+ sync_op
+ move $t0, $t2
+ subu $t1, $t3, $t2
+2:
+#ifdef GRUB_MACHINE_MIPS_LOONGSON
+ cache_op 23, 0($t0)
+ addiu $t1, $t1, -0x20
+ bne $t1, $zero, 2b
+ addiu $t0, $t0, 0x20
+#else
+ cache_op 23, 0($t0)
+ addiu $t1, $t1, -0x4
+ bne $t1, $zero, 2b
+ addiu $t0, $t0, 0x4
+#endif
+ sync_op
+
+ jr $ra
+ nop