Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F167250088
D58806.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
D58806.id.diff
View Options
diff --git a/sys/dev/aq/aq_fw2x.c b/sys/dev/aq/aq_fw2x.c
--- a/sys/dev/aq/aq_fw2x.c
+++ b/sys/dev/aq/aq_fw2x.c
@@ -750,6 +750,9 @@
uint16_t ctrl;
int err;
+ if ((hw->fw_caps & FW2X_CAP_TEMPERATURE) == 0)
+ return (ENOTSUP);
+
mtx_lock(&hw->fw_mtx);
aq_fw2x_phy_id_probe(hw);
err = aq_fw2x_phy_read(hw, AQ_PHY_MMD_GLOBAL, AQ_PHY_THERMAL_CTRL_REG,
diff --git a/sys/dev/aq/aq_main.c b/sys/dev/aq/aq_main.c
--- a/sys/dev/aq/aq_main.c
+++ b/sys/dev/aq/aq_main.c
@@ -109,6 +109,8 @@
"Aquantia AQtion 5Gbit Network Adapter"),
PVID(AQUANTIA_VENDOR_ID, AQ_DEVICE_ID_D109,
"Aquantia AQtion 2.5Gbit Network Adapter"),
+ PVID(AQUANTIA_VENDOR_ID, AQ_DEVICE_ID_D100,
+ "Aquantia AQtion 10Gbit Network Adapter"),
PVID(AQUANTIA_VENDOR_ID, AQ_DEVICE_ID_AQC107,
"Aquantia AQtion 10Gbit Network Adapter"),
@@ -782,10 +784,12 @@
softc->init_retries = 0;
/* aq_hw_init reloads the PHY, resetting the thermal-shutdown arming. */
- if (hw->fw_ops->thermal_arm != NULL &&
- hw->fw_ops->thermal_arm(hw) != 0)
- device_printf(softc->dev,
- "could not arm PHY thermal shutdown\n");
+ if (hw->fw_ops->thermal_arm != NULL) {
+ err = hw->fw_ops->thermal_arm(hw);
+ if (err != 0 && err != ENOTSUP)
+ device_printf(softc->dev,
+ "could not arm PHY thermal shutdown\n");
+ }
aq_if_media_status(ctx, &ifmr);
diff --git a/sys/dev/aq/aq_media.c b/sys/dev/aq/aq_media.c
--- a/sys/dev/aq/aq_media.c
+++ b/sys/dev/aq/aq_media.c
@@ -62,12 +62,12 @@
int ifm_fibre; /* IFM_* subtype, SFP cage */
uint32_t mbps; /* link speed, Mbit/s */
} aq_media_types[] = {
- { AQ_LINK_10M, aq_fw_10M, IFM_10_T, 0, 10 },
- { AQ_LINK_100M, aq_fw_100M, IFM_100_TX, IFM_100_FX, 100 },
- { AQ_LINK_1G, aq_fw_1G, IFM_1000_T, IFM_1000_SX, 1000 },
- { AQ_LINK_2G5, aq_fw_2G5, IFM_2500_T, IFM_2500_SX, 2500 },
- { AQ_LINK_5G, aq_fw_5G, IFM_5000_T, 0, 5000 },
- { AQ_LINK_10G, aq_fw_10G, IFM_10G_T, IFM_10G_SFI, 10000 },
+ { AQ_LINK_10M, aq_fw_10M, IFM_10_T, 0, 10 },
+ { AQ_LINK_100M, aq_fw_100M, IFM_100_TX, IFM_100_SGMII, 100 },
+ { AQ_LINK_1G, aq_fw_1G, IFM_1000_T, IFM_1000_SGMII, 1000 },
+ { AQ_LINK_2G5, aq_fw_2G5, IFM_2500_T, IFM_2500_X, 2500 },
+ { AQ_LINK_5G, aq_fw_5G, IFM_5000_T, 0, 5000 },
+ { AQ_LINK_10G, aq_fw_10G, IFM_10G_T, IFM_10G_SFI, 10000 },
};
/* SFF-8472 table 3.5 compliance bits, relative to SFF_8472_TRANS_START. */
@@ -81,9 +81,16 @@
#define AQ_SFF_1G_LX 0x02
#define AQ_SFF_1G_CX 0x04
#define AQ_SFF_1G_T 0x08
+
#define AQ_SFF_TRANS_CABLE 5 /* byte 8 */
-#define AQ_SFF_CABLE_ACTIVE 0x04
-#define AQ_SFF_CABLE_PASSIVE 0x08
+#define AQ_SFF_CABLE_PASSIVE 0x04
+#define AQ_SFF_CABLE_ACTIVE 0x08
+
+/* SFF-8024 extended codes, the only place a BASE-T module names itself. */
+#define AQ_SFF_EXT_10G_T_SFI 0x16
+#define AQ_SFF_EXT_10G_T_SR 0x1c
+
+static void aq_media_reload(struct aq_dev *aq_dev);
/* Names the medium in the cage, not what the cage could in principle hold. */
static void
@@ -91,7 +98,7 @@
{
struct aq_hw *hw = &aq_dev->hw;
uint8_t code[SFF_8472_TRANS_END - SFF_8472_TRANS_START + 1];
- uint8_t cable;
+ uint8_t cable, ext;
aq_dev->sfp_ifm_1g = 0;
aq_dev->sfp_ifm_10g = 0;
@@ -127,6 +134,11 @@
aq_dev->sfp_ifm_1g = IFM_1000_T;
else if (cable != 0)
aq_dev->sfp_ifm_1g = IFM_1000_CX;
+
+ if (hw->fw_ops->get_module_eeprom(hw, SFF_8472_BASE, SFF_8472_TRANS,
+ sizeof ext, &ext) == 0 &&
+ (ext == AQ_SFF_EXT_10G_T_SFI || ext == AQ_SFF_EXT_10G_T_SR))
+ aq_dev->sfp_ifm_10g = IFM_10G_T;
}
/* Fibre parts prefer what the module reported over the table default. */
@@ -173,8 +185,15 @@
aq_dev->media_active |= IFM_ETH_TXPAUSE;
/* The module can be swapped while the port is down. */
- if (aq_dev->media_type == AQ_MEDIA_TYPE_FIBRE && link_speed != 0)
+ if (aq_dev->media_type == AQ_MEDIA_TYPE_FIBRE && link_speed != 0) {
+ int old_1g = aq_dev->sfp_ifm_1g;
+ int old_10g = aq_dev->sfp_ifm_10g;
+
aq_sfp_scan(aq_dev);
+ if (aq_dev->sfp_ifm_1g != old_1g ||
+ aq_dev->sfp_ifm_10g != old_10g)
+ aq_media_reload(aq_dev);
+ }
for (i = 0; i < nitems(aq_media_types); i++)
if (link_speed == aq_media_types[i].mbps)
@@ -280,16 +299,12 @@
ifmedia_add(aq_dev->media, IFM_ETHER | media_link_speed | IFM_FDX |
IFM_ETH_TXPAUSE, 0, NULL);
}
-void
-aq_initmedia(struct aq_dev *aq_dev)
+
+static void
+aq_media_populate(struct aq_dev *aq_dev)
{
u_int i;
- AQ_DBG_ENTER();
-
- aq_dev->sfp_ifm_1g = 0;
- aq_dev->sfp_ifm_10g = 0;
-
// ifconfig eth0 none
ifmedia_add(aq_dev->media, IFM_ETHER | IFM_NONE, 0, NULL);
@@ -303,6 +318,28 @@
continue;
aq_add_media_types(aq_dev, aq_media_ifm(aq_dev, i));
}
+}
+
+/* A swapped module renames the advertised speeds, so rebuild the list. */
+static void
+aq_media_reload(struct aq_dev *aq_dev)
+{
+ ifmedia_removeall(aq_dev->media);
+ aq_media_populate(aq_dev);
+ ifmedia_set(aq_dev->media,
+ IFM_ETHER | IFM_AUTO | IFM_FDX | IFM_ETH_RXPAUSE | IFM_ETH_TXPAUSE);
+}
+
+void
+aq_initmedia(struct aq_dev *aq_dev)
+{
+
+ AQ_DBG_ENTER();
+
+ aq_dev->sfp_ifm_1g = 0;
+ aq_dev->sfp_ifm_10g = 0;
+
+ aq_media_populate(aq_dev);
// link is initially autoselect
ifmedia_set(aq_dev->media,
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Aug 21, 9:10 AM (3 h, 1 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
36983899
Default Alt Text
D58806.id.diff (5 KB)
Attached To
Mode
D58806: aq(4): probe the D100 device ID and fix SFP media reporting
Attached
Detach File
Event Timeline
Log In to Comment