On 13.2.2016 11:39, Michal Simek wrote:
> The problem with current implementation is that SPDDONE bit is 1
> but link bit is zero. That's why phydev->link is setup to 0
> which ending up in driver failure that link is not up.
>
> Log:
> Zynq> dhcp
> ethernet@e000b000 Waiting for PHY auto negotiation to complete...
> done
> ethernet@e000b000: No link.
>
> There is at least 1ms delay between spddone bit and link up.
>
> Use genphy_read_status() instead of realtek implemenation which is
> working with page 11. Linux driver is also using generic implementation.
>
> Signed-off-by: Michal Simek
> ---
>
> drivers/net/phy/realtek.c | 10 +-
> 1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/phy/realtek.c b/drivers/net/phy/realtek.c
> index bba48da4099f..259a87fcc59e 100644
> --- a/drivers/net/phy/realtek.c
> +++ b/drivers/net/phy/realtek.c
> @@ -203,6 +203,14 @@ static int rtl8211x_startup(struct phy_device *phydev)
> return 0;
> }
>
> +static int rtl8211e_startup(struct phy_device *phydev)
> +{
> + genphy_update_link(phydev);
> + genphy_parse_link(phydev);
> +
> + return 0;
> +}
> +
> static int rtl8211f_startup(struct phy_device *phydev)
> {
> /* Read the Status (2x to make sure link is right) */
> @@ -230,7 +238,7 @@ static struct phy_driver RTL8211E_driver = {
> .mask = 0xff,
> .features = PHY_GBIT_FEATURES,
> .config = &rtl8211x_config,
> - .startup = &rtl8211x_startup,
> + .startup = &rtl8211e_startup,
> .shutdown = &genphy_shutdown,
> };
>
Applied to zynq repo.
Thanks,
Michal
--
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel - Microblaze cpu - http://www.monstr.eu/fdt/
Maintainer of Linux kernel - Xilinx Zynq ARM architecture
Microblaze U-BOOT custodian and responsible for u-boot arm zynq platform
signature.asc
Description: OpenPGP digital signature
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot