]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - arch/powerpc/lib/ticks.S
Add GPL-2.0+ SPDX-License-Identifier to source files
[karo-tx-uboot.git] / arch / powerpc / lib / ticks.S
1 /*
2  * (C) Copyright 2000, 2001
3  * Erik Theisen, Wave 7 Optics, etheisen@mindspring.com.
4  *  base on code by
5  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
6  *
7  * SPDX-License-Identifier:     GPL-2.0+
8  */
9
10 #include <ppc_asm.tmpl>
11 #include <ppc_defs.h>
12 #include <config.h>
13 #include <watchdog.h>
14
15 /*
16  * unsigned long long get_ticks(void);
17  *
18  * read timebase as "long long"
19  */
20         .globl  get_ticks
21 get_ticks:
22 1:      mftbu   r3
23         mftb    r4
24         mftbu   r5
25         cmp     0,r3,r5
26         bne     1b
27         blr
28
29 /*
30  * Delay for a number of ticks
31  */
32         .globl  wait_ticks
33 wait_ticks:
34         stwu    r1, -16(r1)
35         mflr    r0              /* save link register */
36         stw     r0, 20(r1)      /* Use r0 or GDB will be unhappy */
37         stw     r14, 12(r1)     /* save used registers */
38         stw     r15, 8(r1)
39         mr      r14, r3         /* save tick count */
40         bl      get_ticks       /* Get start time */
41
42         /* Calculate end time */
43         addc    r14, r4, r14    /* Compute end time lower */
44         addze   r15, r3         /*     and end time upper */
45
46         WATCHDOG_RESET          /* Trigger watchdog, if needed */
47 1:      bl      get_ticks       /* Get current time */
48         subfc   r4, r4, r14     /* Subtract current time from end time */
49         subfe.  r3, r3, r15
50         bge     1b              /* Loop until time expired */
51
52         lwz     r15, 8(r1)      /* restore saved registers */
53         lwz     r14, 12(r1)
54         lwz     r0, 20(r1)
55         addi    r1,r1,16
56         mtlr    r0
57         blr