{
        struct e1000_hw *hw = &adapter->hw;
        struct ptp_clock_event event;
-       struct timespec ts;
+       struct timespec64 ts;
        u32 ack = 0, tsauxc, sec, nsec, tsicr = rd32(E1000_TSICR);
 
        if (tsicr & TSINTR_SYS_WRAP) {
 
        if (tsicr & TSINTR_TT0) {
                spin_lock(&adapter->tmreg_lock);
-               ts = timespec_add(adapter->perout[0].start,
-                                 adapter->perout[0].period);
+               ts = timespec64_add(adapter->perout[0].start,
+                                   adapter->perout[0].period);
+               /* u32 conversion of tv_sec is safe until y2106 */
                wr32(E1000_TRGTTIML0, ts.tv_nsec);
-               wr32(E1000_TRGTTIMH0, ts.tv_sec);
+               wr32(E1000_TRGTTIMH0, (u32)ts.tv_sec);
                tsauxc = rd32(E1000_TSAUXC);
                tsauxc |= TSAUXC_EN_TT0;
                wr32(E1000_TSAUXC, tsauxc);
 
        if (tsicr & TSINTR_TT1) {
                spin_lock(&adapter->tmreg_lock);
-               ts = timespec_add(adapter->perout[1].start,
-                                 adapter->perout[1].period);
+               ts = timespec64_add(adapter->perout[1].start,
+                                   adapter->perout[1].period);
                wr32(E1000_TRGTTIML1, ts.tv_nsec);
-               wr32(E1000_TRGTTIMH1, ts.tv_sec);
+               wr32(E1000_TRGTTIMH1, (u32)ts.tv_sec);
                tsauxc = rd32(E1000_TSAUXC);
                tsauxc |= TSAUXC_EN_TT1;
                wr32(E1000_TSAUXC, tsauxc);
 
         * sub-nanosecond resolution.
         */
        wr32(E1000_SYSTIML, ts->tv_nsec);
-       wr32(E1000_SYSTIMH, ts->tv_sec);
+       wr32(E1000_SYSTIMH, (u32)ts->tv_sec);
 }
 
 /**
        struct e1000_hw *hw = &igb->hw;
        u32 tsauxc, tsim, tsauxc_mask, tsim_mask, trgttiml, trgttimh, freqout;
        unsigned long flags;
-       struct timespec ts;
+       struct timespec64 ts;
        int use_freq = 0, pin = -1;
        s64 ns;
 
                }
                ts.tv_sec = rq->perout.period.sec;
                ts.tv_nsec = rq->perout.period.nsec;
-               ns = timespec_to_ns(&ts);
+               ns = timespec64_to_ns(&ts);
                ns = ns >> 1;
                if (on && ns <= 70000000LL) {
                        if (ns < 8LL)
                                return -EINVAL;
                        use_freq = 1;
                }
-               ts = ns_to_timespec(ns);
+               ts = ns_to_timespec64(ns);
                if (rq->perout.index == 1) {
                        if (use_freq) {
                                tsauxc_mask = TSAUXC_EN_CLK1 | TSAUXC_ST1;