diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2015-09-20 11:50:06 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2015-09-20 11:50:06 +0000 |
commit | 70ac89c5f1c2808e93c1be02074e31a9f7c76ba4 (patch) | |
tree | 9c42df94167615d16cc8cc9bc859048a4d6ddbb5 /sys/arch | |
parent | 278deaf45bc6d79b8b18d0f33b0c7a4655372775 (diff) |
Reset the `pending I$ flushes' flag in tfp_InvalidateICache() if invalidating
the whole I$.
Diffstat (limited to 'sys/arch')
-rw-r--r-- | sys/arch/mips64/mips64/cache_tfp.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/sys/arch/mips64/mips64/cache_tfp.c b/sys/arch/mips64/mips64/cache_tfp.c index 06b9e312f59..896c33ce5f7 100644 --- a/sys/arch/mips64/mips64/cache_tfp.c +++ b/sys/arch/mips64/mips64/cache_tfp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cache_tfp.c,v 1.4 2014/03/31 20:21:19 miod Exp $ */ +/* $OpenBSD: cache_tfp.c,v 1.5 2015/09/20 11:50:05 miod Exp $ */ /* * Copyright (c) 2012 Miodrag Vallat. @@ -66,9 +66,9 @@ tfp_ConfigCache(struct cpu_info *ci) ci->ci_l1data.linesize = 16; #else ci->ci_l1inst.size = 16384; - ci->ci_l1inst.linesize = 32; + ci->ci_l1inst.linesize = TFP_DCTW_STEP; /* but handled in 32b chunks */ ci->ci_l1data.size = 16384; - ci->ci_l1data.linesize = 32; + ci->ci_l1data.linesize = TFP_DCTW_STEP; #endif /* R8000 L1 caches are direct */ @@ -80,6 +80,10 @@ tfp_ConfigCache(struct cpu_info *ci) cache_valias_mask = (max(ci->ci_l1inst.size, ci->ci_l1data.size) - 1) & ~PAGE_MASK; +#ifdef DIAGNOSTIC + if (cache_valias_mask != 0) + panic("page size is too small"); +#endif /* R8000 L2 cache are platform-specific, and not covered here */ memset(&ci->ci_l2, 0, sizeof(struct cache_info)); @@ -125,6 +129,7 @@ tfp_InvalidateICache(struct cpu_info *ci, vaddr_t _va, size_t _sz) if (_sz >= ci->ci_l1inst.size) { tfp_inval_icache(ci->ci_l1inst.size); + ci->ci_cachepending_l1i = 0; } else { /* extend the range to multiple of 32 bytes */ va = _va & ~(32UL - 1); |