/****************************************************************************** * Copyright (c) 2004, 2008 IBM Corporation * All rights reserved. * This program and the accompanying materials * are made available under the terms of the BSD License * which accompanies this distribution, and is available at * http://www.opensource.org/licenses/bsd-license.php * * Contributors: * IBM Corporation - initial implementation *****************************************************************************/ #include #include "kernel.h" //******************************************************************* // variable "tb_freq" contains the frequency in Hz // and is read from the device tree (setup by LLFW) in "init.c" uint64_t tb_freq; //------------------------------------------------------------------- // Read the current timebase uint64_t get_time(void) { uint64_t act; __asm__ __volatile__( "0: mftbu %0 ;\ mftbl %%r0 ; \ mftbu %%r4 ; \ cmpw %0,%%r4 ; \ bne 0b; \ sldi %0,%0,32; \ or %0,%0,%%r0" : "=r"(act) : /* no inputs */ : "r0", "r4"); return act; }