[U-Boot] I210 serdes fails to auto negotiate

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
participants (1)
-
John Kading