Part Number: AM3358
Tool/software: Linux
I have a custom PCB using the am335x processor and I am having troubles getting the KSZ9021 micrel phy to work. I am using ti kernel 4.9 and debian as the root file system.
The phy is found by the kernel:
[ 2.645390] davinci_mdio 4a101000.mdio: davinci mdio revision 1.6
[ 2.651566] davinci_mdio 4a101000.mdio: detected phy mask fffffffd
[ 2.658134] davinci_mdio: dt: updated phy_id[1] from phy_mask[fffffffd]
[ 2.666256] libphy: 4a101000.mdio: probed
[ 2.670398] davinci_mdio 4a101000.mdio: phy[1]: device 4a101000.mdio:01, driY
[ 2.680959] cpsw 4a100000.ethernet: Detected MACID = b0:d5:cc:e5:a1:11
[ 2.687798] cpsw 4a100000.ethernet: cpts: overflow check period 2125
but, the micrel driver is not found....!?!? Do I need to link it somehow? The driver is enabled in the kernel!
Set-up in the dtb:
cpsw_default: cpsw_default {
pinctrl-single,pins = <
/* Slave 1 */
0x114 ( PIN_OUTPUT | MUX_MODE0 ) /* (J16) gmii1_txen.gmii1_txen */
0x118 ( PIN_INPUT_PULLUP | MUX_MODE0 ) /* (J17) gmii1_rxdv.gmii1_rxdv */
0x12c ( PIN_OUTPUT | MUX_MODE0 ) /* (K18) gmii1_txclk.gmii1_txclk */
0x130 ( PIN_INPUT_PULLDOWN | MUX_MODE0 ) /* (L18) gmii1_rxclk.gmii1_rxclk */
0x128 ( PIN_OUTPUT | MUX_MODE0 ) /* (K17) gmii1_txd0.gmii1_txd0 */
0x124 ( PIN_OUTPUT | MUX_MODE0 ) /* (K16) gmii1_txd1.gmii1_txd1 */
0x120 ( PIN_OUTPUT | MUX_MODE0 ) /* (K15) gmii1_txd2.gmii1_txd2 */
0x11c ( PIN_OUTPUT | MUX_MODE0 ) /* (J18) gmii1_txd3.gmii1_txd3 */
0x140 ( PIN_INPUT_PULLDOWN | MUX_MODE0 ) /* (M16) gmii1_rxd0.gmii1_rxd0 */
0x13c ( PIN_INPUT_PULLUP | MUX_MODE0 ) /* (L15) gmii1_rxd1.gmii1_rxd1 */
0x138 ( PIN_INPUT_PULLUP | MUX_MODE0 ) /* (L16) gmii1_rxd2.gmii1_rxd2 */
0x134 ( PIN_INPUT_PULLUP | MUX_MODE0 ) /* (L17) gmii1_rxd3.gmii1_rxd3 */
>;
};
cpsw_sleep: cpsw_sleep {
pinctrl-single,pins = <
/* Slave 1 reset value */
0x114 ( PIN_INPUT_PULLDOWN | MUX_MODE7 ) /* (J16) gmii1_txen.gmii1_txen */
0x118 ( PIN_INPUT_PULLDOWN | MUX_MODE7 ) /* (J17) gmii1_rxdv.gmii1_rxdv */
0x12c ( PIN_INPUT_PULLDOWN | MUX_MODE7 ) /* (K18) gmii1_txclk.gmii1_txclk */
0x130 ( PIN_INPUT_PULLDOWN | MUX_MODE7 ) /* (L18) gmii1_rxclk.gmii1_rxclk */
0x128 ( PIN_INPUT_PULLDOWN | MUX_MODE7 ) /* (K17) gmii1_txd0.gmii1_txd0 */
0x124 ( PIN_INPUT_PULLDOWN | MUX_MODE7 ) /* (K16) gmii1_txd1.gmii1_txd1 */
0x120 ( PIN_INPUT_PULLDOWN | MUX_MODE7 ) /* (K15) gmii1_txd2.gmii1_txd2 */
0x11c ( PIN_INPUT_PULLDOWN | MUX_MODE7 ) /* (J18) gmii1_txd3.gmii1_txd3 */
0x140 ( PIN_INPUT_PULLDOWN | MUX_MODE7 ) /* (M16) gmii1_rxd0.gmii1_rxd0 */
0x13c ( PIN_INPUT_PULLDOWN | MUX_MODE7 ) /* (L15) gmii1_rxd1.gmii1_rxd1 */
0x138 ( PIN_INPUT_PULLDOWN | MUX_MODE7 ) /* (L16) gmii1_rxd2.gmii1_rxd2 */
0x134 ( PIN_INPUT_PULLDOWN | MUX_MODE7 ) /* (L17) gmii1_rxd3.gmii1_rxd3 */
>;
};
davinci_mdio_default: davinci_mdio_default {
pinctrl-single,pins = <
0x14c ( PIN_OUTPUT | MUX_MODE0 ) /* (M18) mdio_clk.mdio_clk */
0x148 ( PIN_INPUT | MUX_MODE0 ) /* (M17) mdio_data.mdio_data */
>;
};
davinci_mdio_sleep: davinci_mdio_sleep {
pinctrl-single,pins = <
/* MDIO reset value */
0x148 (PIN_INPUT_PULLDOWN | MUX_MODE7)
0x14c (PIN_INPUT_PULLDOWN | MUX_MODE7)
>;
};
&cpsw_emac0 {
phy_id = <&davinci_mdio>, <1>;
phy-mode = "mii"; //If I change this to a rmii or rgmii-txid the kernel will not find the phy on boot
};
&mac {
pinctrl-names = "default", "sleep";
pinctrl-0 = <&cpsw_default>;
pinctrl-1 = <&cpsw_sleep>;
slaves = <1>;
status = "okay";
};
&davinci_mdio {
pinctrl-names = "default", "sleep";
pinctrl-0 = <&davinci_mdio_default>;
pinctrl-1 = <&davinci_mdio_sleep>;
status = "okay";
};
Trying to set up dhcp in debian but does not connect to network:
root@arm:/home/debian# sudo ifup -a
root@arm:/home/debian# sudo service networking restart
[ 811.811497] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 935.019262] net eth0: initializing cpsw version 1.12 (0)
[ 935.024767] net eth0: initialized cpsw ale version 1.4
[ 935.029998] net eth0: ALE Table size 1024
[ 935.101666] net eth0: phy found : id is : 0x221611
[ 935.123934] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 935.129923] 8021q: adding VLAN 0 to HW filter on device eth0
[ 940.102436] cpsw 4a100000.ethernet eth0: Link is Up - 100Mbps/Full - flow cox
[ 940.110791] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
root@arm:/home/debian# ifconfig
eth0 Link encap:Ethernet HWaddr b0:d5:cc:e5:a1:11
inet addr:169.254.19.194 Bcast:169.254.255.255 Mask:255.255.0.0
inet6 addr: fe80::b2d5:ccff:fee5:a111/64 Scope:Link
UP BROADCAST RUNNING MULTICAST DYNAMIC MTU:1500 Metric:1
RX packets:11469 errors:0 dropped:69 overruns:0 frame:0
TX packets:174 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1442690 (1.3 MiB) TX bytes:16138 (15.7 KiB)
Interrupt:172
If I set a static i cannot get a successful ping.
Does anyone have some insight for what I am doing incorrectly?
Thanks
