mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-22 07:01:39 +00:00
x86: Support tracing function
Some changes are needed to x86 timer functions to support tracing. Add these so that the feature works correctly. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
5b7dcf3112
commit
d8819f94d5
5 changed files with 10 additions and 7 deletions
|
@ -40,7 +40,7 @@ struct arch_global_data {
|
||||||
#include <asm-generic/global_data.h>
|
#include <asm-generic/global_data.h>
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
static inline gd_t *get_fs_gd_ptr(void)
|
static inline __attribute__((no_instrument_function)) gd_t *get_fs_gd_ptr(void)
|
||||||
{
|
{
|
||||||
gd_t *gd_ptr;
|
gd_t *gd_ptr;
|
||||||
|
|
||||||
|
|
|
@ -85,7 +85,8 @@ static inline unsigned long long native_read_tscp(unsigned int *aux)
|
||||||
#define EAX_EDX_RET(val, low, high) "=A" (val)
|
#define EAX_EDX_RET(val, low, high) "=A" (val)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static inline unsigned long long native_read_msr(unsigned int msr)
|
static inline __attribute__((no_instrument_function))
|
||||||
|
unsigned long long native_read_msr(unsigned int msr)
|
||||||
{
|
{
|
||||||
DECLARE_ARGS(val, low, high);
|
DECLARE_ARGS(val, low, high);
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,7 @@ void board_init_f_r_trampoline(ulong) __attribute__ ((noreturn));
|
||||||
void board_init_f_r(void) __attribute__ ((noreturn));
|
void board_init_f_r(void) __attribute__ ((noreturn));
|
||||||
|
|
||||||
/* Read the time stamp counter */
|
/* Read the time stamp counter */
|
||||||
static inline uint64_t rdtsc(void)
|
static inline __attribute__((no_instrument_function)) uint64_t rdtsc(void)
|
||||||
{
|
{
|
||||||
uint32_t high, low;
|
uint32_t high, low;
|
||||||
__asm__ __volatile__("rdtsc" : "=a" (low), "=d" (high));
|
__asm__ __volatile__("rdtsc" : "=a" (low), "=d" (high));
|
||||||
|
|
|
@ -28,7 +28,9 @@
|
||||||
#define WRAP_LIBGCC_CALL(type, name) \
|
#define WRAP_LIBGCC_CALL(type, name) \
|
||||||
type __normal_##name(type a, type b) __attribute__((regparm(0))); \
|
type __normal_##name(type a, type b) __attribute__((regparm(0))); \
|
||||||
type __wrap_##name(type a, type b); \
|
type __wrap_##name(type a, type b); \
|
||||||
type __wrap_##name(type a, type b) { return __normal_##name(a, b); }
|
type __attribute__((no_instrument_function)) \
|
||||||
|
__wrap_##name(type a, type b) \
|
||||||
|
{ return __normal_##name(a, b); }
|
||||||
|
|
||||||
WRAP_LIBGCC_CALL(long long, __divdi3)
|
WRAP_LIBGCC_CALL(long long, __divdi3)
|
||||||
WRAP_LIBGCC_CALL(unsigned long long, __udivdi3)
|
WRAP_LIBGCC_CALL(unsigned long long, __udivdi3)
|
||||||
|
|
|
@ -37,7 +37,7 @@ void timer_set_base(u64 base)
|
||||||
* restart. This yields a free running counter guaranteed to take almost 6
|
* restart. This yields a free running counter guaranteed to take almost 6
|
||||||
* years to wrap around even at 100GHz clock rate.
|
* years to wrap around even at 100GHz clock rate.
|
||||||
*/
|
*/
|
||||||
u64 get_ticks(void)
|
u64 __attribute__((no_instrument_function)) get_ticks(void)
|
||||||
{
|
{
|
||||||
u64 now_tick = rdtsc();
|
u64 now_tick = rdtsc();
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ u64 get_ticks(void)
|
||||||
#define PLATFORM_INFO_MSR 0xce
|
#define PLATFORM_INFO_MSR 0xce
|
||||||
|
|
||||||
/* Get the speed of the TSC timer in MHz */
|
/* Get the speed of the TSC timer in MHz */
|
||||||
unsigned long get_tbclk_mhz(void)
|
unsigned __attribute__((no_instrument_function)) long get_tbclk_mhz(void)
|
||||||
{
|
{
|
||||||
u32 ratio;
|
u32 ratio;
|
||||||
u64 platform_info = native_read_msr(PLATFORM_INFO_MSR);
|
u64 platform_info = native_read_msr(PLATFORM_INFO_MSR);
|
||||||
|
@ -75,7 +75,7 @@ ulong get_timer(ulong base)
|
||||||
return get_ms_timer() - base;
|
return get_ms_timer() - base;
|
||||||
}
|
}
|
||||||
|
|
||||||
ulong timer_get_us(void)
|
ulong __attribute__((no_instrument_function)) timer_get_us(void)
|
||||||
{
|
{
|
||||||
return get_ticks() / get_tbclk_mhz();
|
return get_ticks() / get_tbclk_mhz();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue