Revert "gpu: nvgpu: Improve accuracy of dGPU clk measurement"

The newly added nvgpu_current_time_ms API results in inaccurate time 
measurements sometime which causes nvgpu_dgpu_freq_test.sh to fail.

Bug 2637525
Bug 200530176

This reverts commit 318d6451e9.

Change-Id: I96279c556b3c044f590882b3bff358cfcb545ab1
Signed-off-by: Abdul Salam <absalam@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/2147571
Reviewed-by: Deepak Nibade <dnibade@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
Abdul Salam
2019-07-03 19:09:15 +05:30
committed by mobile promotions
parent 1c2968e27f
commit ffda24df36
7 changed files with 9 additions and 52 deletions

View File

@@ -31,7 +31,7 @@
#include <nvgpu/io.h>
#include <nvgpu/list.h>
#include <nvgpu/clk_arb.h>
#include <nvgpu/soc.h>
#include <nvgpu/timers.h>
#include <nvgpu/gk20a.h>
#include <nvgpu/clk.h>
#include <nvgpu/clk_arb.h>
@@ -189,14 +189,13 @@ u32 gv100_get_rate_cntr(struct gk20a *g, struct namemap_cfg *c) {
/* Counter is 36bits , 32 bits on addr[0] and 4 lsb on addr[1] others zero*/
cntr_start = (u64)gk20a_readl(g, c->cntr.reg_cntr_addr[0]);
cntr_start += ((u64)gk20a_readl(g, c->cntr.reg_cntr_addr[1]) << 32);
start_time = (u64)nvgpu_hr_timestamp_us();
start_time = (u64)nvgpu_current_time_ms();
nvgpu_udelay(XTAL_CNTR_DELAY);
stop_time = (u64)nvgpu_hr_timestamp_us();
stop_time = (u64)nvgpu_current_time_ms();
cntr_stop = (u64)gk20a_readl(g, c->cntr.reg_cntr_addr[0]);
cntr_stop += ((u64)gk20a_readl(g, c->cntr.reg_cntr_addr[1]) << 32);
/*Calculate the difference with Acutal time and convert to KHz*/
cntr = (u32)(((cntr_stop - cntr_start) * 1000U) /
(u32)(stop_time-start_time));
cntr = ((u32)(cntr_stop - cntr_start) / (u32)(stop_time-start_time));
nvgpu_mutex_release(&clk->clk_mutex);
return cntr;

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2017-2019, NVIDIA CORPORATION. All rights reserved.
* Copyright (c) 2017-2018, NVIDIA CORPORATION. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -34,5 +34,5 @@ bool nvgpu_is_bpmp_running(struct gk20a *g);
bool nvgpu_is_soc_t194_a01(struct gk20a *g);
int nvgpu_init_soc_vars(struct gk20a *g);
void nvgpu_delay_usecs(unsigned int usecs);
u64 nvgpu_us_counter(void);
#endif /* NVGPU_SOC_H */

View File

@@ -111,8 +111,6 @@ void nvgpu_udelay(unsigned int usecs);
*/
s64 nvgpu_current_time_ms(void);
s64 nvgpu_current_time_ns(void);
s64 nvgpu_current_time_us(void);
u64 nvgpu_hr_timestamp_us(void);
u64 nvgpu_hr_timestamp(void);
#endif /* NVGPU_TIMERS_H */

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2017-2019, NVIDIA CORPORATION. All rights reserved.
* Copyright (c) 2017-2018, NVIDIA CORPORATION. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
@@ -127,8 +127,3 @@ int nvgpu_init_soc_vars(struct gk20a *g)
#endif
return 0;
}
u64 nvgpu_us_counter(void)
{
return (u64)nvgpu_current_time_us();
}

View File

@@ -242,18 +242,6 @@ s64 nvgpu_current_time_ms(void)
return ktime_to_ms(ktime_get());
}
/**
* nvgpu_current_time_us - Time in microseconds from a monotonic clock.
*
* Return a clock in microsecond units. The start time of the clock is
* unspecified; the time returned can be compared with older ones to measure
* durations. The source clock does not jump when the system clock is adjusted.
*/
s64 nvgpu_current_time_us(void)
{
return ktime_to_us(ktime_get());
}
/**
* nvgpu_current_time_ns - Time in nanoseconds from a monotonic clock.
*
@@ -266,18 +254,6 @@ s64 nvgpu_current_time_ns(void)
return ktime_to_ns(ktime_get());
}
/**
* nvgpu_hr_timestamp_us - Time in microseconds from a monotonic clock.
*
* Return a clock in microsecond units. The start time of the clock is
* unspecified; the time returned can be compared with older ones to measure
* durations. The source clock does not jump when the system clock is adjusted.
*/
u64 nvgpu_hr_timestamp_us(void)
{
return nvgpu_us_counter();
}
/**
* nvgpu_hr_timestamp - Opaque 'high resolution' time stamp.
*

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved.
* Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -20,7 +20,6 @@
* DEALINGS IN THE SOFTWARE.
*/
#include <nvgpu/timers.h>
#include <nvgpu/soc.h>
bool nvgpu_platform_is_silicon(struct gk20a *g)
@@ -56,8 +55,3 @@ bool nvgpu_is_soc_t194_a01(struct gk20a *g)
void nvgpu_delay_usecs(unsigned int usecs)
{
}
u64 nvgpu_us_counter(void)
{
return (u64)nvgpu_current_time_us();
}

View File

@@ -34,7 +34,7 @@
#define NSEC_PER_MSEC 1000000
#define NSEC_PER_SEC 1000000000
s64 nvgpu_current_time_us(void)
static inline s64 nvgpu_current_time_us(void)
{
struct timeval now;
s64 time_now;
@@ -251,8 +251,3 @@ u64 nvgpu_hr_timestamp(void)
{
return (u64)nvgpu_current_time_us();
}
u64 nvgpu_hr_timestamp_us(void)
{
return nvgpu_us_counter();
}