Hello,
I need some help configuring the ethernet. On my board I have a KSZ8081RNBIA in RMII and an iMX6DL.
I'm using "core-image-minimal", I configured the kernel (3.10.17-r0) to load the proper driver and I added in the device tree this code:
fec: ethernet@02188000 {
compatible = "fsl,imx6q-fec";
reg = <0x02188000 0x4000>;
interrupts = <0 118 0x04 0 119 0x04>;
clocks = <&clks 117>, <&clks 117>, <&clks 190>;
clock-names = "ipg", "ahb", "ptp";
status = "disabled";
};
&fec {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_enet_1>;
phy-mode = "rmii";
phy-handle = <ðphy1>;
status = "okay";
mdio {
#address-cells = <1>;
#size-cells = <0>;
ethphy1: ethernet-phy@0 {
compatible = "micrel,ksz8081";
device_type = "ethernet-phy";
reg = <0>;
};
};
};
enet {
pinctrl_enet_1: enetgrp-1 {
fsl,pins = <
MX6QDL_PAD_ENET_TXD0__ENET_TX_DATA0 0x1b0b0
MX6QDL_PAD_ENET_TXD1__ENET_TX_DATA1 0x1b0b0
MX6QDL_PAD_ENET_TX_EN__ENET_TX_EN 0x1b0b0
MX6QDL_PAD_ENET_RXD0__ENET_RX_DATA0 0x1b0b0
MX6QDL_PAD_ENET_RXD1__ENET_RX_DATA1 0x1b0b0
MX6QDL_PAD_ENET_CRS_DV__ENET_RX_EN 0x1b0b0
MX6QDL_PAD_ENET_MDC__ENET_MDC 0x1b0b0
MX6QDL_PAD_ENET_MDIO__ENET_MDIO 0x1b0b0
MX6QDL_PAD_ENET_RX_ER__ENET_RX_ER 0x1b0b0
MX6QDL_PAD_ENET_REF_CLK__GPIO1_IO23 0x80000000 // Connected to interrupt from KSZ8081
MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0x4001b0a8
>;
};
};
But when I try to configure the connection (ifconfig ...) and then I try to send a ping it hungs (I have to press ctrl+c).
In the kernel log I find this line:
Configuring network interfaces... fec 2188000.ethernet eth0: Freescale FEC PHY driver (Micrel KSZ8081 or KSZ8091) (mii_bus:phy_addr=2188000.ethernet:00, irq=-1)
Is there some problem in the configuration? Should I add something about the interrupt connection to the device tree? I've already tried to add something but with no success.
Please help me,
Thank you in advance
已解决! 转到解答。
I finally solved the issue, adding:
int regval = phy_read(phydev, MII_KSZPHY_OMSO);
regval &= 0xFC;
regval |= KSZPHY_OMSO_RMII_OVERRIDE;
phy_write(phydev, MII_KSZPHY_OMSO, regval);
to
kszphy_config_init
in
micrel.c
Even if there are still rx frame errors to be inspected.
I finally solved the issue, adding:
int regval = phy_read(phydev, MII_KSZPHY_OMSO);
regval &= 0xFC;
regval |= KSZPHY_OMSO_RMII_OVERRIDE;
phy_write(phydev, MII_KSZPHY_OMSO, regval);
to
kszphy_config_init
in
micrel.c
Even if there are still rx frame errors to be inspected.
Hi Roberto
one can look at solution provided for KSZ8031 with i.MX6S
Best regards
igor
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
Hi Igor,
I looked at the solution you linked but I don't have clock problems.
Looking at the Micrel driver in Linux I found that it doesn't use the device tree (in this version of Linux), so this part of the device tree is useless:
ethphy1: ethernet-phy@0 {
compatible = "micrel,ksz8081";
device_type = "ethernet-phy";
reg = <0>;
}
I don't know what to do...