aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorRichard Cochran <richardcochran@gmail.com>2015-03-29 17:12:10 -0400
committerDavid S. Miller <davem@davemloft.net>2015-03-31 12:01:19 -0400
commit41c2c18ffb4d5e46bca5b419784f67db9b0c1425 (patch)
tree355a430d8ae4bb6cac05e0f45b56e2d5d15274f7 /drivers/net
parentb9acf24f779c778b994a7dc017c977a18560f690 (diff)
ptp: dp83640: convert to the 64 bit get/set time methods.
This device stores the number of seconds in a 32 bit register, and the stored value is unsigned. Therefore this driver and device are ready for the year 2038. However, more work will be needed prior to 2106. Compile tested only. Signed-off-by: Richard Cochran <richardcochran@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/phy/dp83640.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/drivers/net/phy/dp83640.c b/drivers/net/phy/dp83640.c
index e22e602beef3..a83f8e50844c 100644
--- a/drivers/net/phy/dp83640.c
+++ b/drivers/net/phy/dp83640.c
@@ -257,7 +257,7 @@ static void ext_write(int broadcast, struct phy_device *phydev,
257 257
258/* Caller must hold extreg_lock. */ 258/* Caller must hold extreg_lock. */
259static int tdr_write(int bc, struct phy_device *dev, 259static int tdr_write(int bc, struct phy_device *dev,
260 const struct timespec *ts, u16 cmd) 260 const struct timespec64 *ts, u16 cmd)
261{ 261{
262 ext_write(bc, dev, PAGE4, PTP_TDR, ts->tv_nsec & 0xffff);/* ns[15:0] */ 262 ext_write(bc, dev, PAGE4, PTP_TDR, ts->tv_nsec & 0xffff);/* ns[15:0] */
263 ext_write(bc, dev, PAGE4, PTP_TDR, ts->tv_nsec >> 16); /* ns[31:16] */ 263 ext_write(bc, dev, PAGE4, PTP_TDR, ts->tv_nsec >> 16); /* ns[31:16] */
@@ -411,12 +411,12 @@ static int ptp_dp83640_adjtime(struct ptp_clock_info *ptp, s64 delta)
411 struct dp83640_clock *clock = 411 struct dp83640_clock *clock =
412 container_of(ptp, struct dp83640_clock, caps); 412 container_of(ptp, struct dp83640_clock, caps);
413 struct phy_device *phydev = clock->chosen->phydev; 413 struct phy_device *phydev = clock->chosen->phydev;
414 struct timespec ts; 414 struct timespec64 ts;
415 int err; 415 int err;
416 416
417 delta += ADJTIME_FIX; 417 delta += ADJTIME_FIX;
418 418
419 ts = ns_to_timespec(delta); 419 ts = ns_to_timespec64(delta);
420 420
421 mutex_lock(&clock->extreg_lock); 421 mutex_lock(&clock->extreg_lock);
422 422
@@ -427,7 +427,8 @@ static int ptp_dp83640_adjtime(struct ptp_clock_info *ptp, s64 delta)
427 return err; 427 return err;
428} 428}
429 429
430static int ptp_dp83640_gettime(struct ptp_clock_info *ptp, struct timespec *ts) 430static int ptp_dp83640_gettime(struct ptp_clock_info *ptp,
431 struct timespec64 *ts)
431{ 432{
432 struct dp83640_clock *clock = 433 struct dp83640_clock *clock =
433 container_of(ptp, struct dp83640_clock, caps); 434 container_of(ptp, struct dp83640_clock, caps);
@@ -452,7 +453,7 @@ static int ptp_dp83640_gettime(struct ptp_clock_info *ptp, struct timespec *ts)
452} 453}
453 454
454static int ptp_dp83640_settime(struct ptp_clock_info *ptp, 455static int ptp_dp83640_settime(struct ptp_clock_info *ptp,
455 const struct timespec *ts) 456 const struct timespec64 *ts)
456{ 457{
457 struct dp83640_clock *clock = 458 struct dp83640_clock *clock =
458 container_of(ptp, struct dp83640_clock, caps); 459 container_of(ptp, struct dp83640_clock, caps);
@@ -605,7 +606,7 @@ static void recalibrate(struct dp83640_clock *clock)
605{ 606{
606 s64 now, diff; 607 s64 now, diff;
607 struct phy_txts event_ts; 608 struct phy_txts event_ts;
608 struct timespec ts; 609 struct timespec64 ts;
609 struct list_head *this; 610 struct list_head *this;
610 struct dp83640_private *tmp; 611 struct dp83640_private *tmp;
611 struct phy_device *master = clock->chosen->phydev; 612 struct phy_device *master = clock->chosen->phydev;
@@ -697,7 +698,7 @@ static void recalibrate(struct dp83640_clock *clock)
697 diff = now - (s64) phy2txts(&event_ts); 698 diff = now - (s64) phy2txts(&event_ts);
698 pr_info("slave offset %lld nanoseconds\n", diff); 699 pr_info("slave offset %lld nanoseconds\n", diff);
699 diff += ADJTIME_FIX; 700 diff += ADJTIME_FIX;
700 ts = ns_to_timespec(diff); 701 ts = ns_to_timespec64(diff);
701 tdr_write(0, tmp->phydev, &ts, PTP_STEP_CLK); 702 tdr_write(0, tmp->phydev, &ts, PTP_STEP_CLK);
702 } 703 }
703 704
@@ -998,8 +999,8 @@ static void dp83640_clock_init(struct dp83640_clock *clock, struct mii_bus *bus)
998 clock->caps.pps = 0; 999 clock->caps.pps = 0;
999 clock->caps.adjfreq = ptp_dp83640_adjfreq; 1000 clock->caps.adjfreq = ptp_dp83640_adjfreq;
1000 clock->caps.adjtime = ptp_dp83640_adjtime; 1001 clock->caps.adjtime = ptp_dp83640_adjtime;
1001 clock->caps.gettime = ptp_dp83640_gettime; 1002 clock->caps.gettime64 = ptp_dp83640_gettime;
1002 clock->caps.settime = ptp_dp83640_settime; 1003 clock->caps.settime64 = ptp_dp83640_settime;
1003 clock->caps.enable = ptp_dp83640_enable; 1004 clock->caps.enable = ptp_dp83640_enable;
1004 clock->caps.verify = ptp_dp83640_verify; 1005 clock->caps.verify = ptp_dp83640_verify;
1005 /* 1006 /*