Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/arm Add a sleep routine for the SA-11x0.
details: https://anonhg.NetBSD.org/src/rev/627fd4d0dcdc
branches: trunk
changeset: 521398:627fd4d0dcdc
user: thorpej <thorpej%NetBSD.org@localhost>
date: Wed Jan 30 00:25:07 2002 +0000
description:
Add a sleep routine for the SA-11x0.
diffstat:
sys/arch/arm/arm/cpufunc_asm_sa11x0.S | 97 +++++++++++++++++++++++++++++++++++
sys/arch/arm/conf/files.arm | 3 +-
2 files changed, 99 insertions(+), 1 deletions(-)
diffs (118 lines):
diff -r fcf0faa2848b -r 627fd4d0dcdc sys/arch/arm/arm/cpufunc_asm_sa11x0.S
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/arch/arm/arm/cpufunc_asm_sa11x0.S Wed Jan 30 00:25:07 2002 +0000
@@ -0,0 +1,97 @@
+/* $NetBSD: cpufunc_asm_sa11x0.S,v 1.1 2002/01/30 00:25:08 thorpej Exp $ */
+
+/*
+ * Copyright (c) 2002 Wasabi Systems, Inc.
+ * All rights reserved.
+ *
+ * Written by Jason R. Thorpe for Wasabi Systems, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed for the NetBSD Project by
+ * Wasabi Systems, Inc.
+ * 4. The name of Wasabi Systems, Inc. may not be used to endorse
+ * or promote products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <machine/cpu.h>
+#include <machine/asm.h>
+
+ .data
+ .global _C_LABEL(sa11x0_idle_mem)
+_C_LABEL(sa11x0_idle_mem):
+ .word 0
+
+ .text
+
+ .align 5
+
+ /* We're now 32-byte aligned */
+
+Lsa11x0_idle_mem:
+ .word _C_LABEL(sa11x0_idle_mem) /* 1 */
+
+/*
+ * sa11x0_cpusleep
+ *
+ * This is called when there is nothing on any of the run queues.
+ * We go into IDLE mode so that any IRQ or FIQ will awaken us.
+ */
+ENTRY(sa11x0_cpu_sleep)
+ ldr r1, Lsa11x0_idle_mem /* get address of... */ /* 2 */
+ nop /* 3 */
+ ldr r1, [r1] /* ...non-cacheable page */ /* 4 */
+ nop /* 5 */
+
+ /*
+ * SA-1110 manual, 9.5.2.1 (Entering Idle Mode) says that
+ * to enter idle mode:
+ *
+ * * Disable clock switching
+ * * Issue load from non-cacheable address
+ * * Issue "wait for interrupt"
+ *
+ * The 3-insn sequence must reside in the first 3 words
+ * of a cache line.
+ *
+ * We must disable interrupts in the CPSR so that we can
+ * re-enable clock switching before servicing interrupts.
+ */
+
+ mrs r3, cpsr_all /* 6 */
+ orr r2, r3, #(I32_bit|F32_bit) /* 7 */
+ msr cpsr_all, r2 /* 8 */
+
+ /* We're now 32-byte aligned */
+
+ mcr p15, 0, r0, c15, c2, 2 /* disable clock switching */
+ ldr r0, [r1] /* load from non-cacheable address */
+ mcr p15, 0, r0, c15, c8, 2 /* wait for interrupt
+
+ mcr p15, 0, r0, c15, c1, 2 /* re-enable clock switching */
+
+ /* Restore interrupts (which will cause them to be serviced). */
+ msr cpsr_all, r3
+
+ mov pc, lr
diff -r fcf0faa2848b -r 627fd4d0dcdc sys/arch/arm/conf/files.arm
--- a/sys/arch/arm/conf/files.arm Tue Jan 29 23:02:48 2002 +0000
+++ b/sys/arch/arm/conf/files.arm Wed Jan 30 00:25:07 2002 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: files.arm,v 1.53 2002/01/24 04:23:19 briggs Exp $
+# $NetBSD: files.arm,v 1.54 2002/01/30 00:25:07 thorpej Exp $
# temporary define to allow easy moving to ../arch/arm/arm32
defflag ARM32
@@ -67,6 +67,7 @@
file arch/arm/arm/cpufunc_asm_armv4.S cpu_arm9 | cpu_sa110 |
cpu_xscale
file arch/arm/arm/cpufunc_asm_sa1.S cpu_sa110
+file arch/arm/arm/cpufunc_asm_sa11x0.S cpu_sa110 # XXX
file arch/arm/arm/cpufunc_asm_xscale.S cpu_xscale
file arch/arm/arm/process_machdep.c
file arch/arm/arm/procfs_machdep.c procfs
Home |
Main Index |
Thread Index |
Old Index