| 1509 | } |
| 1510 | |
| 1511 | static void |
| 1512 | axgbe_update_tstamp_time(struct axgbe_port *pdata, |
| 1513 | unsigned int sec, unsigned int nsec, int addsub) |
| 1514 | { |
| 1515 | unsigned int count = 100; |
| 1516 | uint32_t sub_val = 0; |
| 1517 | uint32_t sub_val_sec = 0xFFFFFFFF; |
| 1518 | uint32_t sub_val_nsec = 0x3B9ACA00; |
| 1519 | |
| 1520 | if (addsub) { |
| 1521 | if (sec) |
| 1522 | sub_val = sub_val_sec - (sec - 1); |
| 1523 | else |
| 1524 | sub_val = sec; |
| 1525 | |
| 1526 | AXGMAC_IOWRITE(pdata, MAC_STSUR, sub_val); |
| 1527 | sub_val = sub_val_nsec - nsec; |
| 1528 | AXGMAC_IOWRITE(pdata, MAC_STNUR, sub_val); |
| 1529 | AXGMAC_IOWRITE_BITS(pdata, MAC_STNUR, ADDSUB, 1); |
| 1530 | } else { |
| 1531 | AXGMAC_IOWRITE(pdata, MAC_STSUR, sec); |
| 1532 | AXGMAC_IOWRITE_BITS(pdata, MAC_STNUR, ADDSUB, 0); |
| 1533 | AXGMAC_IOWRITE(pdata, MAC_STNUR, nsec); |
| 1534 | } |
| 1535 | AXGMAC_IOWRITE_BITS(pdata, MAC_TSCR, TSUPDT, 1); |
| 1536 | /* Wait for time update to complete */ |
| 1537 | while (--count && AXGMAC_IOREAD_BITS(pdata, MAC_TSCR, TSUPDT)) |
| 1538 | rte_delay_ms(1); |
| 1539 | } |
| 1540 | |
| 1541 | static inline uint64_t |
| 1542 | div_u64_rem(uint64_t dividend, uint32_t divisor, uint32_t *remainder) |
no test coverage detected