cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

delay.c (1275B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * OpenRISC Linux
      4 *
      5 * Linux architectural port borrowing liberally from similar works of
      6 * others.  All original copyrights apply as per the original source
      7 * declaration.
      8 *
      9 * Modifications for the OpenRISC architecture:
     10 * Copyright (C) 2010-2011 Jonas Bonn <jonas@southpole.se>
     11 *
     12 * Precise Delay Loops
     13 */
     14
     15#include <linux/kernel.h>
     16#include <linux/export.h>
     17#include <linux/init.h>
     18#include <linux/timex.h>
     19#include <asm/param.h>
     20#include <asm/delay.h>
     21#include <asm/timex.h>
     22#include <asm/processor.h>
     23
     24int read_current_timer(unsigned long *timer_value)
     25{
     26	*timer_value = get_cycles();
     27	return 0;
     28}
     29
     30void __delay(unsigned long cycles)
     31{
     32	cycles_t start = get_cycles();
     33
     34	while ((get_cycles() - start) < cycles)
     35		cpu_relax();
     36}
     37EXPORT_SYMBOL(__delay);
     38
     39inline void __const_udelay(unsigned long xloops)
     40{
     41	unsigned long long loops;
     42
     43	loops = (unsigned long long)xloops * loops_per_jiffy * HZ;
     44
     45	__delay(loops >> 32);
     46}
     47EXPORT_SYMBOL(__const_udelay);
     48
     49void __udelay(unsigned long usecs)
     50{
     51	__const_udelay(usecs * 0x10C7UL); /* 2**32 / 1000000 (rounded up) */
     52}
     53EXPORT_SYMBOL(__udelay);
     54
     55void __ndelay(unsigned long nsecs)
     56{
     57	__const_udelay(nsecs * 0x5UL); /* 2**32 / 1000000000 (rounded up) */
     58}
     59EXPORT_SYMBOL(__ndelay);