]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[intel] Do not enable ASDE on i350 backplane NIC
authorMichael Brown <mcb30@ipxe.org>
Sun, 16 Apr 2017 20:26:13 +0000 (21:26 +0100)
committerMichael Brown <mcb30@ipxe.org>
Sun, 16 Apr 2017 20:37:41 +0000 (21:37 +0100)
On most Intel NICs, Auto-Speed Detection Enable (ASDE) can be used to
automatically detect the correct link speed by sampling the link using
the internal PHY.  This feature is automatically inhibited when not
appropriate for the physical link (e.g. when using internal SerDes
mode on the 8254x).

On the i350 datasheet ASDE is a reserved bit, but the relevant
auto-speed detection hardware appears still to be present.  However,
enabling ASDE on the i350 1000BASE-KX backplane NIC seems to cause an
immediate link failure.  It is possible that the auto-speed detection
hardware is still present, is not connected to a physical link, and is
not inhibited from being applied in this mode.

Work around this problem by adding an INTEL_NO_ASDE flag bit
(analogous to INTEL_NO_PHY_RST), and applying this for the i350
backplane NIC.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/drivers/net/intel.c
src/drivers/net/intel.h

index 548bf90a79c400853403e68564da6ebb46adf870..1bca87bca699f60963ecf4f47487c9f499af75ab 100644 (file)
@@ -295,7 +295,9 @@ static int intel_reset ( struct intel_nic *intel ) {
        mdelay ( INTEL_RESET_DELAY_MS );
 
        /* Set a sensible default configuration */
-       ctrl |= ( INTEL_CTRL_SLU | INTEL_CTRL_ASDE );
+       if ( ! ( intel->flags & INTEL_NO_ASDE ) )
+               ctrl |= INTEL_CTRL_ASDE;
+       ctrl |= INTEL_CTRL_SLU;
        ctrl &= ~( INTEL_CTRL_LRST | INTEL_CTRL_FRCSPD | INTEL_CTRL_FRCDPLX );
        writel ( ctrl, intel->regs + INTEL_CTRL );
        mdelay ( INTEL_RESET_DELAY_MS );
@@ -1110,7 +1112,7 @@ static struct pci_device_id intel_nics[] = {
        PCI_ROM ( 0x8086, 0x1518, "82576ns", "82576NS SerDes", 0 ),
        PCI_ROM ( 0x8086, 0x1521, "i350", "I350", 0 ),
        PCI_ROM ( 0x8086, 0x1522, "i350-f", "I350 Fiber", 0 ),
-       PCI_ROM ( 0x8086, 0x1523, "i350-b", "I350 Backplane", 0 ),
+       PCI_ROM ( 0x8086, 0x1523, "i350-b", "I350 Backplane", INTEL_NO_ASDE ),
        PCI_ROM ( 0x8086, 0x1524, "i350-2", "I350", 0 ),
        PCI_ROM ( 0x8086, 0x1525, "82567v-4", "82567V-4", 0 ),
        PCI_ROM ( 0x8086, 0x1526, "82576-5", "82576", 0 ),
index 630eaf84cd93f7213af01b2239976ac662ee019a..14877687a2adedc4b3479a80540a792590da5733 100644 (file)
@@ -306,6 +306,8 @@ enum intel_flags {
        INTEL_VMWARE = 0x0002,
        /** PHY reset is broken */
        INTEL_NO_PHY_RST = 0x0004,
+       /** ASDE is broken */
+       INTEL_NO_ASDE = 0x0008,
 };
 
 /**