linux/arch/unicore32/lib/delay.S
<<
>>
Prefs
   1/*
   2 * linux/arch/unicore32/lib/delay.S
   3 *
   4 * Code specific to PKUnity SoC and UniCore ISA
   5 *
   6 * Copyright (C) 2001-2010 GUAN Xue-tao
   7 *
   8 * This program is free software; you can redistribute it and/or modify
   9 * it under the terms of the GNU General Public License version 2 as
  10 * published by the Free Software Foundation.
  11 */
  12#include <linux/linkage.h>
  13#include <asm/assembler.h>
  14#include <asm/param.h>
  15                .text
  16
  17.LC0:           .word   loops_per_jiffy
  18.LC1:           .word   (2199023*HZ)>>11
  19
  20/*
  21 * r0  <= 2000
  22 * lpj <= 0x01ffffff (max. 3355 bogomips)
  23 * HZ  <= 1000
  24 */
  25
  26ENTRY(__udelay)
  27                ldw     r2, .LC1
  28                mul     r0, r2, r0
  29ENTRY(__const_udelay)                           @ 0 <= r0 <= 0x7fffff06
  30                ldw     r2, .LC0
  31                ldw     r2, [r2]                @ max = 0x01ffffff
  32                mov     r0, r0 >> #14           @ max = 0x0001ffff
  33                mov     r2, r2 >> #10           @ max = 0x00007fff
  34                mul     r0, r2, r0              @ max = 2^32-1
  35                mov.a   r0, r0 >> #6
  36                cmoveq  pc, lr
  37
  38/*
  39 * loops = r0 * HZ * loops_per_jiffy / 1000000
  40 *
  41 * Oh, if only we had a cycle counter...
  42 */
  43
  44@ Delay routine
  45ENTRY(__delay)
  46                sub.a   r0, r0, #2
  47                bua     __delay
  48                mov     pc, lr
  49ENDPROC(__udelay)
  50ENDPROC(__const_udelay)
  51ENDPROC(__delay)
  52
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.