IMX6 Ethernet. Development process to add second ethernet PHY IC support. part 3.
In previous chapter we modified DTS to add support for second PHY IC on our IMX6 Ethernet equipped SoM.
Time to test it.
After compilation of image:
root@OpenWrt:/# sysupgrade -c /tmp/openwrt-imx6ull-cortexa7-flexcan_wifi-squashfs.mtd-sysupgrade.bin
[ 0.669455] fec 20b4000.ethernet: 20b4000.ethernet supply phy not found, using dummy regulator
[ 0.736068] fec 20b4000.ethernet: Invalid MAC address: 00:00:00:00:00:00
[ 0.743299] fec 20b4000.ethernet: Using random MAC address: 06:ad:5c:86:06:fb
[ 0.793239] fec 20b4000.ethernet eth0: registered PHC device 0
[ 0.796583] fec 2188000.ethernet: 2188000.ethernet supply phy not found, using dummy regulator
[ 0.869365] fec 2188000.ethernet eth1: registered PHC device 1
[ 7.792766] Micrel KSZ8081 or KSZ8091 2188000.ethernet-2:03: attached PHY driver [Micrel KSZ8081 or KSZ8091] (mii_bus:phy_addr=2188000.ethernet-2:03, irq=POLL)
[ 7.793353] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 9.841219] fec 20b4000.ethernet eth0: Link is Up — 100Mbps/Full — flow control off
[ 9.841291] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 58.249878] Micrel KSZ8081 or KSZ8091 2188000.ethernet-2:03: attached PHY driver [Micrel KSZ8081 or KSZ8091] (mii_bus:phy_addr=2188000.ethernet-2:03, irq=POLL)
[ 58.250094] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 60.482398] fec 20b4000.ethernet eth0: Link is Up — 100Mbps/Full — flow control off
[ 60.483099] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 114.436870] Micrel KSZ8081 or KSZ8091 2188000.ethernet-2:03: attached PHY driver [Micrel KSZ8081 or KSZ8091] (mii_bus:phy_addr=2188000.ethernet-2:03, irq=POLL)
[ 114.437720] br-lan: port 1(eth0) entered blocking state
[ 114.437744] br-lan: port 1(eth0) entered disabled state
[ 114.438204] device eth0 entered promiscuous mode
[ 114.444940] br-lan: port 1(eth0) entered blocking state
[ 114.444969] br-lan: port 1(eth0) entered forwarding state
[ 115.377165] br-lan: port 1(eth0) entered disabled state
[ 116.465173] fec 20b4000.ethernet eth0: Link is Up — 100Mbps/Full — flow control off
[ 116.465271] br-lan: port 1(eth0) entered blocking state
[ 116.465292] br-lan: port 1(eth0) entered forwarding state
here we see that both ethernet controllers 20b4000 and 2188000 initialized.
Let’s try to configure networks.
Step 5. Network configuration.
# option type ‘bridge’
option ifname ‘eth0’
option proto ‘dhcp’
# option ipaddr ‘192.168.1.1’
# option netmask ‘255.255.255.0’
# option ip6assign ’60’
option ifname ‘eth1’
option proto ‘dhcp’
eth0 Link encap:Ethernet HWaddr 06:AD:5C:86:06:FB
inet addr:192.168.0.122 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::4ad:5cff:fe86:6fb/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:605 errors:0 dropped:0 overruns:0 frame:0
TX packets:1228 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:88497 (86.4 KiB) TX bytes:231956 (226.5 KiB)
eth1 Link encap:Ethernet HWaddr 00:11:22:33:44:55
inet addr:192.168.0.118 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::211:22ff:fe33:4455/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:482 errors:0 dropped:0 overruns:0 frame:0
TX packets:133 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:39921 (38.9 KiB) TX bytes:12518 (12.2 KiB)
PHY 0x00: OUI = 0x0885, Model = 0x16, Rev = 0x01, 10baseT, HDX
PHY 0x03: OUI = 0x0885, Model = 0x16, Rev = 0x01, 10baseT, HDX
1. (7849) — PHY status register —
(8000:0000) 1.15 = 0 100BASE-T4 able
(4000:4000) 1.14 = 1 100BASE-X full duplex able
(2000:2000) 1.13 = 1 100BASE-X half duplex able
(1000:1000) 1.12 = 1 10 Mbps full duplex able
(0800:0800) 1.11 = 1 10 Mbps half duplex able
(0400:0000) 1.10 = 0 100BASE-T2 full duplex able
(0200:0000) 1. 9 = 0 100BASE-T2 half duplex able
(0100:0000) 1. 8 = 0 extended status
(0080:0000) 1. 7 = 0 (reserved)
(0040:0040) 1. 6 = 1 MF preamble suppression
(0020:0020) 1. 5 = 0 A/N complete
(0010:0000) 1. 4 = 0 remote fault
(0008:0008) 1. 3 = 1 A/N able
(0004:0004) 1. 2 = 0 link status
(0002:0000) 1. 1 = 0 jabber detect
(0001:0001) 1. 0 = 1 extended capabilities
Seems that DTS used by u-boot unable to initialize properly at least first PHY IC in a case of MDIO shared between two ICs. Again need to modify DTS but for u-boot now.
Step 6. U-boot’s DTS modification.
&fec1 {
pinctrl-names = «default»;
pinctrl-0 = <&pinctrl_enet1>;
phy-mode = «rmii»;
phy-handle = <ðphy0>;
status = «okay»;
mdio {
#address-cells = <1>;
#size-cells = <0>;
ethphy0: ethernet-phy@2 {
compatible = «ethernet-phy-ieee802.3-c22»;
reg = <2>;
};
};
};
Looks similar to Linux’s DTS but PHY IC address on MDIO bus is 2. Seems it is a mistake. Changed it to 0, recompiled image again, updated firmware and checked PHY status again:
PHY 0x00: OUI = 0x0885, Model = 0x16, Rev = 0x01, 100baseT, FDX
PHY 0x03: OUI = 0x0885, Model = 0x16, Rev = 0x01, 100baseT, FDX
=> setenv ipaddr 192.168.0.99
=> setenv ethaddr 00:11:22:33:44:55
=> ping 192.168.0.100
Using FEC0 device
host 192.168.0.100 is alive