summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorian <ian@FreeBSD.org>2014-03-16 20:39:39 +0000
committerian <ian@FreeBSD.org>2014-03-16 20:39:39 +0000
commitb4f67e8868c26b09ed1952eda12577270b563438 (patch)
tree00830d06dd083f85201cdf2e8d8a5db9e47a18b2
parentf0d3c9671fb51a25c5fa9614ac972c711c132973 (diff)
downloadFreeBSD-src-b4f67e8868c26b09ed1952eda12577270b563438.zip
FreeBSD-src-b4f67e8868c26b09ed1952eda12577270b563438.tar.gz
Use armv7 TLB flush code, not arm11, for cortex-a processors.
The armv7 architecture uses a unified TLB model for maintenence ops even if separate instruction and data TLBs are implemented in hardware. That means that there's no distinction between the 'I' and 'D' flavors of flush, they all use the same 'ID' implementation. On the other hand, there is a difference between SMP and UP on armv7, but not on arm11, so use the armv7 routines for cortex-a processors.
-rw-r--r--sys/arm/arm/cpufunc.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/sys/arm/arm/cpufunc.c b/sys/arm/arm/cpufunc.c
index 07726a3..6412357 100644
--- a/sys/arm/arm/cpufunc.c
+++ b/sys/arm/arm/cpufunc.c
@@ -754,14 +754,18 @@ struct cpu_functions cortexa_cpufuncs = {
cpufunc_faultstatus, /* Faultstatus */
cpufunc_faultaddress, /* Faultaddress */
- /* TLB functions */
+ /*
+ * TLB functions. ARMv7 does all TLB ops based on a unified TLB model
+ * whether the hardware implements separate I+D or not, so we use the
+ * same 'ID' functions for all 3 variations.
+ */
armv7_tlb_flushID, /* tlb_flushID */
armv7_tlb_flushID_SE, /* tlb_flushID_SE */
- arm11_tlb_flushI, /* tlb_flushI */
- arm11_tlb_flushI_SE, /* tlb_flushI_SE */
- arm11_tlb_flushD, /* tlb_flushD */
- arm11_tlb_flushD_SE, /* tlb_flushD_SE */
+ armv7_tlb_flushID, /* tlb_flushI */
+ armv7_tlb_flushID_SE, /* tlb_flushI_SE */
+ armv7_tlb_flushID, /* tlb_flushD */
+ armv7_tlb_flushID_SE, /* tlb_flushD_SE */
/* Cache operations */
OpenPOWER on IntegriCloud