Skip to content

Commit

Permalink
net: stmmac: separate the tas basetime calculation function
Browse files Browse the repository at this point in the history
Separate the TAS basetime calculation function so that it can be
called by other functions.

Signed-off-by: Xiaoliang Yang <xiaoliang.yang_1@nxp.com>
  • Loading branch information
Xiaoliang Yang authored and intel-lab-lkp committed Jun 1, 2021
1 parent 7fc6d3a commit 5abe8df
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 13 deletions.
3 changes: 3 additions & 0 deletions drivers/net/ethernet/stmicro/stmmac/stmmac.h
Expand Up @@ -355,6 +355,9 @@ void stmmac_selftest_run(struct net_device *dev,
void stmmac_selftest_get_strings(struct stmmac_priv *priv, u8 *data);
int stmmac_selftest_get_count(struct stmmac_priv *priv);
#else
struct timespec64 stmmac_calc_tas_basetime(ktime_t old_base_time,
ktime_t current_time,
u64 cycle_time);
static inline void stmmac_selftest_run(struct net_device *dev,
struct ethtool_test *etest, u64 *buf)
{
Expand Down
38 changes: 25 additions & 13 deletions drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c
Expand Up @@ -713,6 +713,29 @@ static int tc_setup_cls(struct stmmac_priv *priv,
return ret;
}

struct timespec64 stmmac_calc_tas_basetime(ktime_t old_base_time,
ktime_t current_time,
u64 cycle_time)
{
struct timespec64 time;

if (ktime_after(old_base_time, current_time)) {
time = ktime_to_timespec64(old_base_time);
} else {
s64 n;
ktime_t base_time;

n = div64_s64(ktime_sub_ns(current_time, old_base_time),
cycle_time);
base_time = ktime_add_ns(old_base_time,
(n + 1) * cycle_time);

time = ktime_to_timespec64(base_time);
}

return time;
}

static int tc_setup_taprio(struct stmmac_priv *priv,
struct tc_taprio_qopt_offload *qopt)
{
Expand Down Expand Up @@ -816,19 +839,8 @@ static int tc_setup_taprio(struct stmmac_priv *priv,
/* Adjust for real system time */
priv->ptp_clock_ops.gettime64(&priv->ptp_clock_ops, &current_time);
current_time_ns = timespec64_to_ktime(current_time);
if (ktime_after(qopt->base_time, current_time_ns)) {
time = ktime_to_timespec64(qopt->base_time);
} else {
ktime_t base_time;
s64 n;

n = div64_s64(ktime_sub_ns(current_time_ns, qopt->base_time),
qopt->cycle_time);
base_time = ktime_add_ns(qopt->base_time,
(n + 1) * qopt->cycle_time);

time = ktime_to_timespec64(base_time);
}
time = stmmac_calc_tas_basetime(qopt->base_time, current_time_ns,
qopt->cycle_time);

priv->plat->est->btr[0] = (u32)time.tv_nsec;
priv->plat->est->btr[1] = (u32)time.tv_sec;
Expand Down

0 comments on commit 5abe8df

Please sign in to comment.