diff options
author | Greg Watson <jarrah@users.sourceforge.net> | 2003-11-02 17:01:47 +0000 |
---|---|---|
committer | Greg Watson <jarrah@users.sourceforge.net> | 2003-11-02 17:01:47 +0000 |
commit | 95e914781748db585186bb88ab88c02e4a97b8ca (patch) | |
tree | 26e37147739529d63215a415fe990deb09ba78e6 /src/arch/ppc/lib/timebase.S | |
parent | 5bcd408b8e72a582bfad61da827a51c2349d037a (diff) |
fix timer routines
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1241 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'src/arch/ppc/lib/timebase.S')
-rw-r--r-- | src/arch/ppc/lib/timebase.S | 66 |
1 files changed, 57 insertions, 9 deletions
diff --git a/src/arch/ppc/lib/timebase.S b/src/arch/ppc/lib/timebase.S index 248248bd82..3c9ebc018f 100644 --- a/src/arch/ppc/lib/timebase.S +++ b/src/arch/ppc/lib/timebase.S @@ -1,12 +1,60 @@ -/* Copyright 1999-2000 AG Electronics Ltd. */ -/* This code is distributed without warranty under the GPL v2 (see COPYING) */ +/* + * (C) Copyright 2000, 2001 + * Erik Theisen, Wave 7 Optics, etheisen@mindspring.com. + * base on code by + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ +#include <ppc_asm.tmpl> .text - .globl _timebase -_timebase: - mftbu 3 - mftb 4 - mftbu 5 - cmpw 3, 5 - bne _timebase +/* + * unsigned long long _get_ticks(void); + */ + .globl _get_ticks +_get_ticks: +1: mftbu r3 + mftb r4 + mftbu r5 + cmpw 0,r3,r5 + bne 1b blr + +/* + * Delay for a number of ticks + */ + .globl _wait_ticks +_wait_ticks: + mflr r8 /* save link register */ + mr r7, r3 /* save tick count */ + bl _get_ticks /* Get start time */ + + /* Calculate end time */ + addc r7, r4, r7 /* Compute end time lower */ + addze r6, r3 /* and end time upper */ + +1: bl _get_ticks /* Get current time */ + subfc r4, r4, r7 /* Subtract current time from end time */ + subfe. r3, r3, r6 + bge 1b /* Loop until time expired */ + + mtlr r8 /* restore link register */ + blr + |