Module Name: src
Committed By: macallan
Date: Sat Oct 8 00:39:53 UTC 2016
Modified Files:
src/sys/arch/mips/mips: cache_r5k.c
Log Message:
- don't clear KX when disabling interrupts
- sign extend addresses as needed
- use PAGE_SIZE instead of blindly assuming 4KB
now n32 kernels work again on my R5k SGIs
thanks to skrll@ for helping me with this
To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 src/sys/arch/mips/mips/cache_r5k.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/mips/mips/cache_r5k.c
diff -u src/sys/arch/mips/mips/cache_r5k.c:1.16 src/sys/arch/mips/mips/cache_r5k.c:1.17
--- src/sys/arch/mips/mips/cache_r5k.c:1.16 Mon Jul 11 16:15:36 2016
+++ src/sys/arch/mips/mips/cache_r5k.c Sat Oct 8 00:39:53 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: cache_r5k.c,v 1.16 2016/07/11 16:15:36 matt Exp $ */
+/* $NetBSD: cache_r5k.c,v 1.17 2016/10/08 00:39:53 macallan Exp $ */
/*
* Copyright 2001 Wasabi Systems, Inc.
@@ -36,7 +36,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cache_r5k.c,v 1.16 2016/07/11 16:15:36 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cache_r5k.c,v 1.17 2016/10/08 00:39:53 macallan Exp $");
#include <sys/param.h>
@@ -428,11 +428,11 @@ r5k_sdcache_wbinv_range_index(vaddr_t va
* address out of them.
*/
va = MIPS_PHYS_TO_KSEG0(va & (mips_cache_info.mci_sdcache_size - 1));
- r5k_sdcache_wbinv_range(va, size);
+ r5k_sdcache_wbinv_range((intptr_t)va, size);
}
-#define mips_r5k_round_page(x) round_line(x, 128 * 32)
-#define mips_r5k_trunc_page(x) trunc_line(x, 128 * 32)
+#define mips_r5k_round_page(x) round_line(x, PAGE_SIZE)
+#define mips_r5k_trunc_page(x) trunc_line(x, PAGE_SIZE)
void
r5k_sdcache_wbinv_range(register_t va, vsize_t size)
@@ -442,14 +442,8 @@ r5k_sdcache_wbinv_range(register_t va, v
va = mips_r5k_trunc_page(va);
- __asm volatile(
- ".set noreorder \n\t"
- ".set noat \n\t"
- "mfc0 %0, $12 \n\t"
- "mtc0 $0, $12 \n\t"
- ".set reorder \n\t"
- ".set at"
- : "=r"(ostatus));
+ ostatus = mips_cp0_status_read();
+ mips_cp0_status_write(ostatus & ~MIPS_SR_INT_IE);
__asm volatile("mfc0 %0, $28" : "=r"(taglo));
__asm volatile("mtc0 $0, $28");
@@ -458,6 +452,6 @@ r5k_sdcache_wbinv_range(register_t va, v
cache_op_r4k_line(va, CACHEOP_R4K_HIT_WB_INV|CACHE_R4K_SD);
}
- __asm volatile("mtc0 %0, $12; nop" :: "r"(ostatus));
+ mips_cp0_status_write(ostatus);
__asm volatile("mtc0 %0, $28; nop" :: "r"(taglo));
}