]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/net/ethernet/ti/cpts.c
Merge tag 'arm64-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64...
[karo-tx-linux.git] / drivers / net / ethernet / ti / cpts.c
index fbe42cb107ecadde04bc5d6d07a709020075e7bb..85a55b4ff8c0731a1952068e968715b256afdb91 100644 (file)
@@ -167,10 +167,9 @@ static int cpts_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
        return 0;
 }
 
-static int cpts_ptp_gettime(struct ptp_clock_info *ptp, struct timespec *ts)
+static int cpts_ptp_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts)
 {
        u64 ns;
-       u32 remainder;
        unsigned long flags;
        struct cpts *cpts = container_of(ptp, struct cpts, info);
 
@@ -178,21 +177,19 @@ static int cpts_ptp_gettime(struct ptp_clock_info *ptp, struct timespec *ts)
        ns = timecounter_read(&cpts->tc);
        spin_unlock_irqrestore(&cpts->lock, flags);
 
-       ts->tv_sec = div_u64_rem(ns, 1000000000, &remainder);
-       ts->tv_nsec = remainder;
+       *ts = ns_to_timespec64(ns);
 
        return 0;
 }
 
 static int cpts_ptp_settime(struct ptp_clock_info *ptp,
-                           const struct timespec *ts)
+                           const struct timespec64 *ts)
 {
        u64 ns;
        unsigned long flags;
        struct cpts *cpts = container_of(ptp, struct cpts, info);
 
-       ns = ts->tv_sec * 1000000000ULL;
-       ns += ts->tv_nsec;
+       ns = timespec64_to_ns(ts);
 
        spin_lock_irqsave(&cpts->lock, flags);
        timecounter_init(&cpts->tc, &cpts->cc, ns);
@@ -216,20 +213,20 @@ static struct ptp_clock_info cpts_info = {
        .pps            = 0,
        .adjfreq        = cpts_ptp_adjfreq,
        .adjtime        = cpts_ptp_adjtime,
-       .gettime        = cpts_ptp_gettime,
-       .settime        = cpts_ptp_settime,
+       .gettime64      = cpts_ptp_gettime,
+       .settime64      = cpts_ptp_settime,
        .enable         = cpts_ptp_enable,
 };
 
 static void cpts_overflow_check(struct work_struct *work)
 {
-       struct timespec ts;
+       struct timespec64 ts;
        struct cpts *cpts = container_of(work, struct cpts, overflow_work.work);
 
        cpts_write32(cpts, CPTS_EN, control);
        cpts_write32(cpts, TS_PEND_EN, int_enable);
        cpts_ptp_gettime(&cpts->info, &ts);
-       pr_debug("cpts overflow check at %ld.%09lu\n", ts.tv_sec, ts.tv_nsec);
+       pr_debug("cpts overflow check at %lld.%09lu\n", ts.tv_sec, ts.tv_nsec);
        schedule_delayed_work(&cpts->overflow_work, CPTS_OVERFLOW_PERIOD);
 }