Commit 97455702 authored by Jacob Keller's avatar Jacob Keller Committed by David S. Miller

ptp: hclge: convert .adjfreq to .adjfine

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: default avatarJacob 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: default avatarDavid S. Miller <davem@davemloft.net>
parent e3f18e9d
...@@ -22,28 +22,16 @@ static int hclge_ptp_get_cycle(struct hclge_dev *hdev) ...@@ -22,28 +22,16 @@ static int hclge_ptp_get_cycle(struct hclge_dev *hdev)
return 0; 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_dev *hdev = hclge_ptp_get_hdev(ptp);
struct hclge_ptp_cycle *cycle = &hdev->ptp->cycle; struct hclge_ptp_cycle *cycle = &hdev->ptp->cycle;
u64 adj_val, adj_base, diff; u64 adj_val, adj_base;
unsigned long flags; unsigned long flags;
bool is_neg = false;
u32 quo, numerator; u32 quo, numerator;
if (ppb < 0) {
ppb = -ppb;
is_neg = true;
}
adj_base = (u64)cycle->quo * (u64)cycle->den + (u64)cycle->numer; adj_base = (u64)cycle->quo * (u64)cycle->den + (u64)cycle->numer;
adj_val = adj_base * ppb; adj_val = adjust_by_scaled_ppm(adj_base, scaled_ppm);
diff = div_u64(adj_val, 1000000000ULL);
if (is_neg)
adj_val = adj_base - diff;
else
adj_val = adj_base + diff;
/* This clock cycle is defined by three part: quotient, numerator /* This clock cycle is defined by three part: quotient, numerator
* and denominator. For example, 2.5ns, the quotient is 2, * and denominator. For example, 2.5ns, the quotient is 2,
...@@ -446,7 +434,7 @@ static int hclge_ptp_create_clock(struct hclge_dev *hdev) ...@@ -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.max_adj = HCLGE_PTP_CYCLE_ADJ_MAX;
ptp->info.n_ext_ts = 0; ptp->info.n_ext_ts = 0;
ptp->info.pps = 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.adjtime = hclge_ptp_adjtime;
ptp->info.gettimex64 = hclge_ptp_gettimex; ptp->info.gettimex64 = hclge_ptp_gettimex;
ptp->info.settime64 = hclge_ptp_settime; ptp->info.settime64 = hclge_ptp_settime;
...@@ -504,7 +492,7 @@ int hclge_ptp_init(struct hclge_dev *hdev) ...@@ -504,7 +492,7 @@ int hclge_ptp_init(struct hclge_dev *hdev)
goto out; goto out;
set_bit(HCLGE_PTP_FLAG_EN, &hdev->ptp->flags); 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) { if (ret) {
dev_err(&hdev->pdev->dev, dev_err(&hdev->pdev->dev,
"failed to init freq, ret = %d\n", ret); "failed to init freq, ret = %d\n", ret);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment