[U-Boot] I210 serdes fails to auto negotiate

John Kading john.kading at gmail.com
Sun Feb 4 23:09:00 UTC 2018


Hi u-boot community!



I am working on a x86 processor with 4 Intel I210 network interfaces.



When U-Boot comes up, it probes the 4 devices and assigns the e1000 driver.



6:0.0 0x157c // PCI_DEVICE_ID_INTEL_I210_SERDES_FLASHLESS

7:0.0 0x157c // PCI_DEVICE_ID_INTEL_I210_SERDES_FLASHLESS

8:0.0 0x157b // PCI_DEVICE_ID_INTEL_I210_COPPER_FLASHLESS

9:0.0 0x157b // PCI_DEVICE_ID_INTEL_I210_COPPER_FLASHLESS



The dhcp command works great with the copper flashless interfaces -- off
and away I go.



The SERDES interface does not behave. It times out in
e1000_copper_link_autoneg() function. It is not quite clear to me if the
serdes version of the i210 should be going through auto negotiation. If I
comment out the copper autoneg as shown below, I can get the link to come
up and dhcp.





@@ -3088,9 +3103,11 @@ e1000_setup_copper_link(struct e1000_hw *hw)

              /* always auto */

              /* Setup autoneg and flow control advertisement

                * and perform autonegotiation */

+/*

              ret_val = e1000_copper_link_autoneg(hw);

              if (ret_val)

                             return ret_val;

+*/



I noticed that even though there are 3 media types, copper, serdes, and
fiber -- i210 only has link logic for copper and fiber. I wondered if the
media_type should be serdes. I rewrote a little bit of the code so that
this serdes version of the I210 would be media type serdes.

+             case PCI_DEVICE_ID_INTEL_I210_SERDES_FLASHLESS:

                             hw->media_type = e1000_media_type_internal_serd
es;

                             break;



I modified the setup link function so that it would not call
e1000_setup_copper_link(hw) to avoid the auto negotiation. This works...



Ok, so it sure seems like I am running up against a bug here, but a little
lost on how to fix this. Has anybody else run into this issue where the
i210 serdes (0x157c) fails to detect link because it times out during auto
negotiation? Is there a reason this device is considered a
e1000_media_type_copper rather than a e1000_media_type_internal_serdes? Or
is this a bug? Any advice for how I should proceed?



Any help is much appreciated!



By the way, I am using the tag v2017.07, however no changes in
drivers/net/e1000.c since then.



Thanks,

John


More information about the U-Boot mailing list