Customer needs to understand if there are design guidelines for Rx/Tx timing when doing layout of Ethernet traces between i.MX8MPlus and an FPGA.
Q1) Is timing configurable via ENET regs ?
Research :
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/Documentation/devicetree/bindi... shows the following device tree bindings :
tx-internal-delay-ps:
enum: [0, 2000]
rx-internal-delay-ps:
enum: [0, 2000]
Checking the driver https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/net/ethernet/freescale... shows that this property applies to RGMII ... it is not clear if this also applies to RMIII ?
static int fec_enet_parse_rgmii_delay(struct fec_enet_private *fep, struct device_node *np) { u32 rgmii_tx_delay, rgmii_rx_delay; /* For rgmii tx internal delay, valid values are 0ps and 2000ps */ if (!of_property_read_u32(np, "tx-internal-delay-ps", &rgmii_tx_delay)) { if (rgmii_tx_delay != 0 && rgmii_tx_delay != 2000) { dev_err(&fep->pdev->dev, "The only allowed RGMII TX delay values are: 0ps, 2000ps"); return -EINVAL; } else if (rgmii_tx_delay == 2000) { fep->rgmii_txc_dly = true; } } /* For rgmii rx internal delay, valid values are 0ps and 2000ps */ if (!of_property_read_u32(np, "rx-internal-delay-ps", &rgmii_rx_delay)) { if (rgmii_rx_delay != 0 && rgmii_rx_delay != 2000) { dev_err(&fep->pdev->dev, "The only allowed RGMII RX delay values are: 0ps, 2000ps"); return -EINVAL; } else if (rgmii_rx_delay == 2000) { fep->rgmii_rxc_dly = true; } } return 0; }