I can attach bcm54810 phy with fec, using ifconfig eth0, tx doesn't work. 
 
dmesg: 
Broadcom BCM54810 2188000.ethernet-1:00: attached PHY driver [Broadcom BCM54810]
 (mii_bus:phy_addr=2188000.ethernet-1:00, irq=-1) 
fec 2188000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx 
IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready 
 
Here is the output of ifconfig after trying to get ip address from dhcp server: 
 
$ ifconfig eth0 
eth0      Link encap:Ethernet  HWaddr EE:BD:A9:8F:9A:7E 
          inet6 addr: fe80::ecbd:a9ff:fe8f:9a7e/64 Scope:Link 
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1 
          RX packets:12983 errors:21 dropped:727 overruns:0 frame:21 
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:1000 
          RX bytes:9344610 (8.9 MiB)  TX bytes:0 (0.0 B)
 
Here is my Linux .dts file related contents: 
 
&fec { 
        pinctrl-names = "default"; 
        phy-handle = <ðphy0>; 
        pinctrl-0 = <&pinctrl_enet>; 
        phy-mode = "rgmii"; 
        status = "okay"; 
 
        mdio { 
                #address-cells = <1>; 
                #size-cells = <0>; 
 
                ethphy0: ethernet-phy@0 { 
                        reg = <0>; 
                }; 
        }; 
};
 
pinctrl_enet: enetgrp { 
        fsl,pins = < 
                MX6QDL_PAD_RGMII_TXC__RGMII_TXC         0x1b030 
                MX6QDL_PAD_RGMII_TD0__RGMII_TD0         0x1b030 
                MX6QDL_PAD_RGMII_TD1__RGMII_TD1         0x1b030 
                MX6QDL_PAD_RGMII_TD2__RGMII_TD2         0x1b030 
                MX6QDL_PAD_RGMII_TD3__RGMII_TD3         0x1b030 
                MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL   0x1b030 
                MX6QDL_PAD_RGMII_RXC__RGMII_RXC         0x1b030 
                MX6QDL_PAD_RGMII_RD0__RGMII_RD0         0x1b030 
                MX6QDL_PAD_RGMII_RD1__RGMII_RD1         0x1b030 
                MX6QDL_PAD_RGMII_RD2__RGMII_RD2         0x1b030 
                MX6QDL_PAD_RGMII_RD3__RGMII_RD3         0x1b030 
                MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL   0x1b030 
                MX6QDL_PAD_ENET_MDIO__ENET_MDIO         0x1b0b0 
                MX6QDL_PAD_ENET_MDC__ENET_MDC           0x1b0b0 
                MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK    0x1b0b0 
 
        >; 
};
Anyone have any suggestions on what might be wrong or what next to check to 
get Ethernet working in Linux? Thanks.
Hi Joe
one can check with oscilloscope rgmii timings described in Table 60. RGMII Signal Switching Specifications
i.MX 6Solo/6DualLite Applications Processors for Consumer Products
Pay attention to net-phy-broadcom patches comments:
"This PHY has internal delays enabled after reset. This clears the
internal delay enables unless the interface specifically requests them."
[source] kernel: add linux 4.9 support
Best regards
igor
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
Thanks for the reply. It seems that net-pay-broadcom patches comments
is for BCM54612e, not for BCM54810...
it has the same codes:
reg &= ~MII_BCM54XX_AUXCTL_SHDWSEL_MISC_RGMII_SKEW_EN;
I added the code, but still no TX :(
$ ifconfig eth0
eth0 Link encap:Ethernet HWaddr E2:FF:DE:19:79:E9 
 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
 RX packets:25 errors:0 dropped:0 overruns:0 frame:0
 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:1000 
 RX bytes:2031 (1.9 KiB) TX bytes:0 (0.0 B)
please check with oscilloscope rgmii timings described in Table 60. RGMII Signal Switching Specifications