i.MX6ULL EVK doesn't have any TJA1100 phy driver in terms of ethernet interface.
instead, I've summarized this FEC issue as follows.
1. FEC interface
- 4 bits TX Data: TXD[0...3] as FEC --> TJA1100
- TXC: tx clock(25MHZ) as FEC <-- TJA1100

this FEC data should be transmitted according to TXC(tx clock) generated by TJA1100.
i.mx6ull reference manual has also this description(IMX6ULLRM.pdf):
TX data are synchronous to TX Clock rising edge

additionally, TJA1100 has also the same behaviour:
TJA1100 expects that FEC data should be synchronous to TX Clock rising edge as well.


2. FEC/PHY Timing diagram
2.1 the expected and ideal behaviour btw FEC tx data and TJA1100 tx clock
if you would send 101010..... data, you must see tx clock and tx data,
that is, TXD data value can be changed to TX clock rising edge as follows:

2.2 the actual & problematic behaviour btw FEC tx data and TJA1100 tx clock.
actual tx data value was changed to TX clock rising/falling edge with 101010.... data sequence.
TJA1100 must see this TX data as all 1's all the time.

3. DTS data for IOMUX pins.
- 4 bits tx data
- tx clcok
- 4 bits rx data
- rx clcok
pinctrl_enet1: enet1grp {
fsl,pins = <
MX6UL_PAD_ENET1_RX_EN__ENET1_RX_EN 0x1b0b0
MX6UL_PAD_ENET1_RX_ER__ENET1_RX_ER 0x1b0b0
MX6UL_PAD_ENET1_RX_DATA0__ENET1_RDATA00 0x1b0b0
MX6UL_PAD_ENET1_RX_DATA1__ENET1_RDATA01 0x1b0b0
MX6UL_PAD_UART1_TX_DATA__ENET1_RDATA02 0x1b0b0
MX6UL_PAD_UART1_RX_DATA__ENET1_RDATA03 0x1b0b0
MX6UL_PAD_UART1_CTS_B__ENET1_RX_CLK 0x4001b031
MX6UL_PAD_ENET1_TX_EN__ENET1_TX_EN 0x1b0b0
MX6UL_PAD_UART1_RTS_B__ENET1_TX_ER 0x1b0b0
MX6UL_PAD_ENET1_TX_DATA0__ENET1_TDATA00 0x1b0b0
MX6UL_PAD_ENET1_TX_DATA1__ENET1_TDATA01 0x1b0b0
MX6UL_PAD_UART2_TX_DATA__ENET1_TDATA02 0x1b0b0
MX6UL_PAD_UART2_RX_DATA__ENET1_TDATA03 0x1b0b0
MX6UL_PAD_ENET1_TX_CLK__ENET1_TX_CLK 0x4001b031
>;
};
4. RX data test is always OK, but TX data is always broken due to TX Clock synchronization.
I've checked tx clock synchronization register for adjusting data output timing like hold time and rising or falling edge,
but failed to find out the initialization code at drivers/net/ethernet/freescale/fec_main.c
additionally, i.mx6ul(l) reference manual doesn't have any explanation for tx data/clock synchronization control/monitoring more.
this FEC driver seems to act on 1G ethernet, that is, TX data output is synchronous to rising and falling both of them.
like 10M/100Mbps, TX data output should be synchronous to only rising edge, one of them.
please, check how to change tx, rx clock& data sync independently in similar i.mx6ull or i.mx6sx or i.mx6ul chip.
if there's patch driver for this issue, it'll big helpful.
Thanks and Regards.
Daeyun.