Module Name: src
Committed By: hans
Date: Sat Jul 14 12:59:55 UTC 2012
Modified Files:
src/sys/arch/arm/arm: cpufunc.c cpufunc_asm_sheeva.S
src/sys/arch/arm/include: cpufunc.h
Log Message:
Support cpu_sleep() on Sheeva CPUs.
To generate a diff of this commit:
cvs rdiff -u -r1.106 -r1.107 src/sys/arch/arm/arm/cpufunc.c
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/arm/cpufunc_asm_sheeva.S
cvs rdiff -u -r1.55 -r1.56 src/sys/arch/arm/include/cpufunc.h
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/arm/arm/cpufunc.c
diff -u src/sys/arch/arm/arm/cpufunc.c:1.106 src/sys/arch/arm/arm/cpufunc.c:1.107
--- src/sys/arch/arm/arm/cpufunc.c:1.106 Fri Jul 13 05:23:30 2012
+++ src/sys/arch/arm/arm/cpufunc.c Sat Jul 14 12:59:55 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: cpufunc.c,v 1.106 2012/07/13 05:23:30 matt Exp $ */
+/* $NetBSD: cpufunc.c,v 1.107 2012/07/14 12:59:55 hans Exp $ */
/*
* arm7tdmi support code Copyright (c) 2001 John Fremlin
@@ -49,7 +49,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpufunc.c,v 1.106 2012/07/13 05:23:30 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpufunc.c,v 1.107 2012/07/14 12:59:55 hans Exp $");
#include "opt_compat_netbsd.h"
#include "opt_cpuoptions.h"
@@ -1243,7 +1243,7 @@ struct cpu_functions sheeva_cpufuncs = {
.cf_flush_brnchtgt_C = cpufunc_nullop,
.cf_flush_brnchtgt_E = (void *)cpufunc_nullop,
- .cf_sleep = (void *)cpufunc_nullop,
+ .cf_sleep = (void *)sheeva_cpu_sleep,
/* Soft functions */
@@ -1598,6 +1598,7 @@ set_cpufuncs(void)
cpu_reset_needs_v4_MMU_disable = 1; /* V4 or higher */
get_cachetype_cp15();
pmap_pte_init_generic();
+ cpu_do_powersave = 1; /* Enable powersave */
return 0;
}
#endif /* CPU_SHEEVA */
Index: src/sys/arch/arm/arm/cpufunc_asm_sheeva.S
diff -u src/sys/arch/arm/arm/cpufunc_asm_sheeva.S:1.1 src/sys/arch/arm/arm/cpufunc_asm_sheeva.S:1.2
--- src/sys/arch/arm/arm/cpufunc_asm_sheeva.S:1.1 Sat Oct 2 05:37:58 2010
+++ src/sys/arch/arm/arm/cpufunc_asm_sheeva.S Sat Jul 14 12:59:55 2012
@@ -214,3 +214,11 @@ ENTRY(sheeva_idcache_wbinv_range)
mcr p15, 0, r0, c7, c10, 4 /* drain the write buffer */
ldr lr, [sp], #4
RET
+
+/*
+ * CPU sleep
+ */
+ENTRY_NP(sheeva_cpu_sleep)
+ mov r0, #0
+ mcr p15, 0, r0, c7, c0, 4 /* wait for interrupt */
+ RET
Index: src/sys/arch/arm/include/cpufunc.h
diff -u src/sys/arch/arm/include/cpufunc.h:1.55 src/sys/arch/arm/include/cpufunc.h:1.56
--- src/sys/arch/arm/include/cpufunc.h:1.55 Thu Feb 16 02:29:25 2012
+++ src/sys/arch/arm/include/cpufunc.h Sat Jul 14 12:59:55 2012
@@ -554,6 +554,7 @@ void sheeva_dcache_inv_range (vaddr_t, v
void sheeva_dcache_wb_range (vaddr_t, vsize_t);
void sheeva_idcache_wbinv_range (vaddr_t, vsize_t);
void sheeva_setup(char *);
+void sheeva_cpu_sleep(int);
#endif
#define tlb_flush cpu_tlb_flushID