• Nimrod Andy's avatar
    net: fec: ptp: fix convergence issue to support LinuxPTP stack · 28b5f058
    Nimrod Andy authored
    iMX6SX IEEE 1588 module has one hw issue in capturing the ATVR register.
    The current SW flow is:
    		ENET0->ATCR |= ENET_ATCR_CAPTURE_MASK;
    		ts_counter_ns = ENET0->ATVR;
    The ATVR value is not expected value that cause LinuxPTP stack cannot be convergent.
    
    ENET Block Guide/ Chapter for the iMX6SX (PELE) address the issue:
    After set ENET_ATCR[Capture], there need some time cycles before the counter
    value is capture in the register clock domain. The wait-time-cycles is at least
    6 clock cycles of the slower clock between the register clock and the 1588 clock.
    So need something like:
    		ENET0->ATCR |= ENET_ATCR_CAPTURE_MASK;
    		wait();
    		ts_counter_ns = ENET0->ATVR;
    
    For iMX6SX, the 1588 ts_clk is fixed to 25Mhz, register clock is 66Mhz, so the
    wait-time-cycles must be greater than 240ns (40ns * 6). The patch add 1us delay
    before cpu read ATVR register.
    
    Changes V2:
    Modify the commit/comments log to describe the issue clearly.
    Signed-off-by: default avatarFugang Duan <B38611@freescale.com>
    Acked-by: default avatarRichard Cochran <richardcochran@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    28b5f058
fec_main.c 85.7 KB