Skip to content

Commit

Permalink
ptp: hclge: convert .adjfreq to .adjfine
Browse files Browse the repository at this point in the history
The hclge implementation of .adjfreq is implemented in terms of a
straight forward "base * ppb / 1 billion" calculation.

Convert this to the newer .adjfine, using the recently added
adjust_by_scaled_ppm helper function.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Cc: Yisen Zhuang <yisen.zhuang@huawei.com>
Cc: Salil Mehta <salil.mehta@huawei.com>
Cc: Richard Cochran <richardcochran@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Jacob Keller authored and David S. Miller committed Nov 11, 2022
1 parent e3f18e9 commit 9745570
Showing 1 changed file with 5 additions and 17 deletions.
22 changes: 5 additions & 17 deletions drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_ptp.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,28 +22,16 @@ static int hclge_ptp_get_cycle(struct hclge_dev *hdev)
return 0;
}

static int hclge_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb)
static int hclge_ptp_adjfine(struct ptp_clock_info *ptp, long scaled_ppm)
{
struct hclge_dev *hdev = hclge_ptp_get_hdev(ptp);
struct hclge_ptp_cycle *cycle = &hdev->ptp->cycle;
u64 adj_val, adj_base, diff;
u64 adj_val, adj_base;
unsigned long flags;
bool is_neg = false;
u32 quo, numerator;

if (ppb < 0) {
ppb = -ppb;
is_neg = true;
}

adj_base = (u64)cycle->quo * (u64)cycle->den + (u64)cycle->numer;
adj_val = adj_base * ppb;
diff = div_u64(adj_val, 1000000000ULL);

if (is_neg)
adj_val = adj_base - diff;
else
adj_val = adj_base + diff;
adj_val = adjust_by_scaled_ppm(adj_base, scaled_ppm);

/* This clock cycle is defined by three part: quotient, numerator
* and denominator. For example, 2.5ns, the quotient is 2,
Expand Down Expand Up @@ -446,7 +434,7 @@ static int hclge_ptp_create_clock(struct hclge_dev *hdev)
ptp->info.max_adj = HCLGE_PTP_CYCLE_ADJ_MAX;
ptp->info.n_ext_ts = 0;
ptp->info.pps = 0;
ptp->info.adjfreq = hclge_ptp_adjfreq;
ptp->info.adjfine = hclge_ptp_adjfine;
ptp->info.adjtime = hclge_ptp_adjtime;
ptp->info.gettimex64 = hclge_ptp_gettimex;
ptp->info.settime64 = hclge_ptp_settime;
Expand Down Expand Up @@ -504,7 +492,7 @@ int hclge_ptp_init(struct hclge_dev *hdev)
goto out;

set_bit(HCLGE_PTP_FLAG_EN, &hdev->ptp->flags);
ret = hclge_ptp_adjfreq(&hdev->ptp->info, 0);
ret = hclge_ptp_adjfine(&hdev->ptp->info, 0);
if (ret) {
dev_err(&hdev->pdev->dev,
"failed to init freq, ret = %d\n", ret);
Expand Down

0 comments on commit 9745570

Please sign in to comment.