Tool/software: Linux
DRA7xx MII with TJA1100
Hi Experts,
I use DRA7xx customer's board with TJA1100 Ethernet PHY configure on MII mode.
SDK version is 6AM.1.3, follow this link: omapedia.org/.../6AM.1.3_Release_Notes
As customer description, TJA1100 works if processor Ethernet interface is configure as MII mode, there is no need to use specific TJA1100 driver.
I try to configure Ethernet to MII mode on U-Boot and Kernel, but seems not right.
I can use mii command to read PHY register, but U-Boot log shows could not find PHY:
Net: Could not get PHY for ethernet@48484000: addr 3
eth0: ethernet@48484000
I use ifconfig command can see there is a eth0 device, but Kernel lod shows:
[ 27.717882] net eth0: initializing cpsw version 1.15 (0)
[ 27.723239] net eth0: initialized cpsw ale version 1.4
[ 27.729293] net eth0: ALE Table size 1024
[ 27.736542] libphy: PHY 48485000.mdio:03 not found
[ 27.741365] net eth0: phy "48485000.mdio:03" not found on slave 0, err -19
As U-Boot / Kernel log, seems DRA7x can not find PHY.
I've check the TJA1100 register and H/W configuration, PHY address is 0b11, so I just modify the following setting on U-Boot / Kernel:
1. Pin Mux: modify default RGMII interface to MII, and modify MDIO pins from (V1, U4) to (D3, F6).
2. PHY ID: default cpsw_emac0 use 0 for phy_id in device tree setting, modify 0 to 3.
3. PHY MODE: modify default "rgmii" to "mii"
Here are my modifiction for U-Boot and Kernel device tree:
U-Boot mux_data.h
//Remove original MDIO define(V1,U4), add new MDIO define (D3,F6). #if 0 {MDIO_MCLK, (M0 | PIN_INPUT_PULLUP | SLEWCONTROL)}, /* mdio_mclk.mdio_mclk */ {MDIO_D, (M0 | PIN_INPUT_PULLUP | SLEWCONTROL)}, /* mdio_d.mdio_d */ #else {VIN2A_D10, (M3 | PIN_INPUT_PULLDOWN | SLEWCONTROL)}, /* vin2a_d10.mdio_mclk */ {VIN2A_D11, (M3 | PIN_INPUT_PULLDOWN | SLEWCONTROL)}, /* vin2a_d11.mdio_d */ #endif //Remove original RGMII define, add new MII define. #if 0 {RGMII0_TXC, (M0 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* rgmii0_txc.rgmii0_txc */ {RGMII0_TXCTL, (M0 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* rgmii0_txctl.rgmii0_txctl */ {RGMII0_TXD3, (M0 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* rgmii0_txd3.rgmii0_txd3 */ {RGMII0_TXD2, (M0 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* rgmii0_txd2.rgmii0_txd2 */ {RGMII0_TXD1, (M0 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* rgmii0_txd1.rgmii0_txd1 */ {RGMII0_TXD0, (M0 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* rgmii0_txd0.rgmii0_txd0 */ {RGMII0_RXC, (M0 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* rgmii0_rxc.rgmii0_rxc */ {RGMII0_RXCTL, (M0 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* rgmii0_rxctl.rgmii0_rxctl */ {RGMII0_RXD3, (M0 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* rgmii0_rxd3.rgmii0_rxd3 */ {RGMII0_RXD2, (M0 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* rgmii0_rxd2.rgmii0_rxd2 */ {RGMII0_RXD1, (M0 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* rgmii0_rxd1.rgmii0_rxd1 */ {RGMII0_RXD0, (M0 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* rgmii0_rxd0.rgmii0_rxd0 */ #else {MDIO_D, (M3 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* mdio_d.mii0_txer */ {UART3_RXD, (M3 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* uart3_rxd.mii0_rxdv */ {UART3_TXD, (M3 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* uart3_txd.mii0_rxclk */ {RGMII0_TXC, (M3 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* rgmii0_txc.mii0_rxd3 */ {RGMII0_TXCTL, (M3 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},/* rgmii0_txctl.mii0_rxd2 */ {RGMII0_TXD2, (M3 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* rgmii0_txd2.mii0_rxer */ {RGMII0_TXD1, (M3 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* rgmii0_txd1.mii0_rxd1 */ {RGMII0_TXD0, (M3 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* rgmii0_txd0.mii0_rxd0 */ {RGMII0_RXC, (M3 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* rgmii0_rxc.mii0_txclk */ {RGMII0_RXCTL, (M3 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},/* rgmii0_rxctl.mii0_txd3 */ {RGMII0_RXD3, (M3 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* rgmii0_rxd3.mii0_txd2 */ {RGMII0_RXD2, (M3 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* rgmii0_rxd2.mii0_txen */ {RGMII0_RXD1, (M3 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* rgmii0_rxd1.mii0_txd1 */ {RGMII0_RXD0, (M3 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* rgmii0_rxd0.mii0_txd0 */ #endif
U-Boot dra7-evm.dts
cpsw_default: cpsw_default { pinctrl-single,pins = < /* Slave 1 */ 0x240 (PIN_INPUT | MUX_MODE3) /* mdio_d.mii0_txer */ 0x248 (PIN_INPUT | MUX_MODE3) /* uart3_rxd.mii0_rxdv */ 0x24c (PIN_INPUT | MUX_MODE3) /* uart3_txd.mii0_rxclk */ 0x250 (PIN_INPUT | MUX_MODE3) /* rgmii0_txc.mii0_rxd3 */ 0x254 (PIN_INPUT | MUX_MODE3) /* rgmii0_txctl.mii0_rxd2 */ 0x25c (PIN_INPUT | MUX_MODE3) /* rgmii0_txd2.mii0_rxer */ 0x260 (PIN_INPUT | MUX_MODE3) /* rgmii0_txd1.mii0_rxd1 */ 0x264 (PIN_INPUT | MUX_MODE3) /* rgmii0_txd0.mii0_rxd0 */ 0x268 (PIN_INPUT | MUX_MODE3) /* rgmii0_rxc.mii0_txclk */ 0x26c (PIN_INPUT | MUX_MODE3) /* rgmii0_rxctl.mii0_txd3 */ 0x270 (PIN_INPUT | MUX_MODE3) /* rgmii0_rxd3.mii0_txd2 */ 0x274 (PIN_INPUT | MUX_MODE3) /* rgmii0_rxd2.mii0_txen */ 0x278 (PIN_INPUT | MUX_MODE3) /* rgmii0_rxd1.mii0_txd1 */ 0x27c (PIN_INPUT | MUX_MODE3) /* rgmii0_rxd0.mii0_txd0 */ >; }; cpsw_sleep: cpsw_sleep { pinctrl-single,pins = < /* Slave 1 */ 0x240 (MUX_MODE15) 0x248 (MUX_MODE15) 0x24c (MUX_MODE15) 0x250 (MUX_MODE15) 0x254 (MUX_MODE15) 0x25c (MUX_MODE15) 0x260 (MUX_MODE15) 0x264 (MUX_MODE15) 0x268 (MUX_MODE15) 0x26c (MUX_MODE15) 0x270 (MUX_MODE15) 0x274 (MUX_MODE15) 0x278 (MUX_MODE15) 0x27c (MUX_MODE15) >; }; davinci_mdio_default: davinci_mdio_default { pinctrl-single,pins = < 0x190 (PIN_OUTPUT_PULLUP | MUX_MODE3) /* vin2a_d11.mdio_d */ 0x194 (PIN_INPUT_PULLUP | MUX_MODE3) /* vin2a_d10.mdio_clk */ >; }; davinci_mdio_sleep: davinci_mdio_sleep { pinctrl-single,pins = < 0x190 (MUX_MODE15) 0x194 (MUX_MODE15) >; }; &mac { status = "okay"; pinctrl-names = "default", "sleep"; pinctrl-0 = <&cpsw_default>; pinctrl-1 = <&cpsw_sleep>; dual_emac; }; &cpsw_emac0 { phy_id = <&davinci_mdio>, <3>; phy-mode = "mii"; dual_emac_res_vlan = <1>; }; &cpsw_emac1 { phy_id = <&davinci_mdio>, <0>; phy-mode = "rgmii"; dual_emac_res_vlan = <2>; }; &davinci_mdio { pinctrl-names = "default", "sleep"; pinctrl-0 = <&davinci_mdio_default>; pinctrl-1 = <&davinci_mdio_sleep>; };
Kernel dra7-evm.dts
&mac { pinctrl-names = "default", "sleep"; pinctrl-0 = <&cpsw_default>; pinctrl-1 = <&cpsw_sleep>; status = "okay"; }; &davinci_mdio { pinctrl-names = "default", "sleep"; pinctrl-0 = <&davinci_mdio_default>; pinctrl-1 = <&davinci_mdio_sleep>; status = "okay"; }; /*WPI Roger++++++++++++*/ &cpsw_emac0 { phy_id = <&davinci_mdio>, <3>; phy-mode = "mii"; };
Can anyone tell me if I got something wrong on configure MII interface on DRA7xx.
Thanks a lot.
Best Regards,
Wayne Kuo