summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorRobert Mustacchi <rm@fingolfin.org>2022-01-18 01:39:06 +0000
committerRobert Mustacchi <rm@fingolfin.org>2022-01-29 23:36:38 +0000
commitf3682895b2a97c009685f16e8a4e5d3dc80e11f2 (patch)
tree5cb0d08c76f8e338453fc55566bc7e8ad4a4976e /usr/src
parent89fbfe0d2fbdaef52447ae1ca77634c69a3cf220 (diff)
downloadillumos-gate-f3682895b2a97c009685f16e8a4e5d3dc80e11f2.tar.gz
14420 Need support for Intel I219 v16-v23
Reviewed by: Brian Bennett <brian.bennett@joyent.com> Approved by: Gordon Ross <gordon.w.ross@gmail.com>
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/man/man7d/e1000g.7d7
-rw-r--r--usr/src/pkg/manifests/driver-network-e1000g.p5m34
-rw-r--r--usr/src/uts/common/io/e1000api/README.illumos5
-rw-r--r--usr/src/uts/common/io/e1000api/e1000_api.c25
-rw-r--r--usr/src/uts/common/io/e1000api/e1000_hw.h28
-rw-r--r--usr/src/uts/common/io/e1000api/e1000_ich8lan.c28
-rw-r--r--usr/src/uts/common/io/e1000g/e1000g_main.c19
7 files changed, 137 insertions, 9 deletions
diff --git a/usr/src/man/man7d/e1000g.7d b/usr/src/man/man7d/e1000g.7d
index ffa71f9d20..3582d0dc20 100644
--- a/usr/src/man/man7d/e1000g.7d
+++ b/usr/src/man/man7d/e1000g.7d
@@ -10,8 +10,9 @@
.\"
.\"
.\" Copyright 2020 Robert Mustacchi
+.\" Copyright 2022 Oxide Computer Company
.\"
-.Dd March 14, 2020
+.Dd January 17, 2022
.Dt E1000G 7D
.Os
.Sh NAME
@@ -140,9 +141,9 @@ Ethernet Connection I218-LM v1-3
.It
Ethernet Connection I218-V v1-3
.It
-Ethernet Connection I219-LM v1-15
+Ethernet Connection I219-LM v1-23
.It
-Ethernet Connection I219-V v1-14
+Ethernet Connection I219-V v1-23
.El
.Pp
The following specific devices are supported by this driver:
diff --git a/usr/src/pkg/manifests/driver-network-e1000g.p5m b/usr/src/pkg/manifests/driver-network-e1000g.p5m
index 8eb5247e29..28cfe93d77 100644
--- a/usr/src/pkg/manifests/driver-network-e1000g.p5m
+++ b/usr/src/pkg/manifests/driver-network-e1000g.p5m
@@ -51,6 +51,10 @@ driver name=e1000g perms="* 0666 root sys" clone_perms="e1000g 0666 root sys" \
alias=pci8086,d4f,p \
alias=pci8086,d53,p \
alias=pci8086,d55,p \
+ alias=pci8086,dc5,p \
+ alias=pci8086,dc6,p \
+ alias=pci8086,dc7,p \
+ alias=pci8086,dc8,p \
alias=pci8086,1000 \
alias=pci8086,1001 \
alias=pci8086,1004.0e11.49 \
@@ -172,11 +176,24 @@ driver name=e1000g perms="* 0666 root sys" clone_perms="e1000g 0666 root sys" \
alias=pci8086,15e2 \
alias=pci8086,15e3 \
alias=pci8086,15f4,p \
+ alias=pci8086,15f5,p \
alias=pci8086,15f9,p \
alias=pci8086,15fa,p \
alias=pci8086,15fb,p \
alias=pci8086,15fc,p \
+ alias=pci8086,1a1c,p \
+ alias=pci8086,1a1d,p \
+ alias=pci8086,1a1e,p \
+ alias=pci8086,1a1f,p \
alias=pci8086,294c \
+ alias=pci8086,550a,p \
+ alias=pci8086,550b,p \
+ alias=pci8086,550c,p \
+ alias=pci8086,550d,p \
+ alias=pci8086,550e,p \
+ alias=pci8086,550f,p \
+ alias=pci8086,5510,p \
+ alias=pci8086,5511,p \
alias=pci8086,f0fe \
alias=pciex8086,d4c \
alias=pciex8086,d4d \
@@ -184,6 +201,10 @@ driver name=e1000g perms="* 0666 root sys" clone_perms="e1000g 0666 root sys" \
alias=pciex8086,d4f \
alias=pciex8086,d53 \
alias=pciex8086,d55 \
+ alias=pciex8086,dc5 \
+ alias=pciex8086,dc6 \
+ alias=pciex8086,dc7 \
+ alias=pciex8086,dc8 \
alias=pciex8086,1049 \
alias=pciex8086,104a \
alias=pciex8086,104b \
@@ -259,11 +280,24 @@ driver name=e1000g perms="* 0666 root sys" clone_perms="e1000g 0666 root sys" \
alias=pciex8086,15e2 \
alias=pciex8086,15e3 \
alias=pciex8086,15f4 \
+ alias=pciex8086,15f5 \
alias=pciex8086,15f9 \
alias=pciex8086,15fa \
alias=pciex8086,15fb \
alias=pciex8086,15fc \
+ alias=pciex8086,1a1c \
+ alias=pciex8086,1a1d \
+ alias=pciex8086,1a1e \
+ alias=pciex8086,1a1f \
alias=pciex8086,294c \
+ alias=pciex8086,550a \
+ alias=pciex8086,550b \
+ alias=pciex8086,550c \
+ alias=pciex8086,550d \
+ alias=pciex8086,550e \
+ alias=pciex8086,550f \
+ alias=pciex8086,5510 \
+ alias=pciex8086,5511 \
alias=pciex8086,f0fe
legacy pkg=SUNWintgige desc="Intel(R) PRO/1000 Server Adapter Driver" \
name="Intel(R) PRO/1000 Server Adapter Driver"
diff --git a/usr/src/uts/common/io/e1000api/README.illumos b/usr/src/uts/common/io/e1000api/README.illumos
index d00891614d..e88eddc913 100644
--- a/usr/src/uts/common/io/e1000api/README.illumos
+++ b/usr/src/uts/common/io/e1000api/README.illumos
@@ -45,11 +45,12 @@ are. DO NOT just blindly copy over new common code. There is more work that
needs to be done in terms of changed interfaces and expectations for the
drivers.
-# Support for Ice Lake, Cannon Lake, and Tiger Lake
+# Support for Ice Lake, Cannon Lake, Tiger Lake, and the more recent I219 LM/V
Due to several changes that have been made to the core e1000 code in
FreeBSD that's specific to changes for iflib, a whole sale update was
-not done and instead support was manually merged based on Intel.
+not done and instead support was manually merged based on information from
+Intel.
# e1000_defines.h
diff --git a/usr/src/uts/common/io/e1000api/e1000_api.c b/usr/src/uts/common/io/e1000api/e1000_api.c
index a6e8d2378d..80e6805503 100644
--- a/usr/src/uts/common/io/e1000api/e1000_api.c
+++ b/usr/src/uts/common/io/e1000api/e1000_api.c
@@ -331,8 +331,33 @@ s32 e1000_set_mac_type(struct e1000_hw *hw)
case E1000_DEV_ID_PCH_TGP_I219_LM14:
case E1000_DEV_ID_PCH_TGP_I219_V14:
case E1000_DEV_ID_PCH_TGP_I219_LM15:
+ case E1000_DEV_ID_PCH_TGP_I219_V15:
mac->type = e1000_pch_tgp;
break;
+ case E1000_DEV_ID_PCH_ADP_I219_LM16:
+ case E1000_DEV_ID_PCH_ADP_I219_V16:
+ case E1000_DEV_ID_PCH_ADP_I219_LM17:
+ case E1000_DEV_ID_PCH_ADP_I219_V17:
+ mac->type = e1000_pch_adp;
+ break;
+ case E1000_DEV_ID_PCH_MTP_I219_LM18:
+ case E1000_DEV_ID_PCH_MTP_I219_V18:
+ case E1000_DEV_ID_PCH_MTP_I219_LM19:
+ case E1000_DEV_ID_PCH_MTP_I219_V19:
+ mac->type = e1000_pch_mtp;
+ break;
+ case E1000_DEV_ID_PCH_LNP_I219_LM20:
+ case E1000_DEV_ID_PCH_LNP_I219_V20:
+ case E1000_DEV_ID_PCH_LNP_I219_LM21:
+ case E1000_DEV_ID_PCH_LNP_I219_V21:
+ mac->type = e1000_pch_lnp;
+ break;
+ case E1000_DEV_ID_PCH_RPL_I219_LM22:
+ case E1000_DEV_ID_PCH_RPL_I219_V22:
+ case E1000_DEV_ID_PCH_RPL_I219_LM23:
+ case E1000_DEV_ID_PCH_RPL_I219_V23:
+ mac->type = e1000_pch_rpl;
+ break;
case E1000_DEV_ID_82575EB_COPPER:
case E1000_DEV_ID_82575EB_FIBER_SERDES:
case E1000_DEV_ID_82575GB_QUAD_COPPER:
diff --git a/usr/src/uts/common/io/e1000api/e1000_hw.h b/usr/src/uts/common/io/e1000api/e1000_hw.h
index a9bb3cef75..9d440c3e71 100644
--- a/usr/src/uts/common/io/e1000api/e1000_hw.h
+++ b/usr/src/uts/common/io/e1000api/e1000_hw.h
@@ -165,6 +165,23 @@ struct e1000_hw;
#define E1000_DEV_ID_PCH_TGP_I219_LM14 0x15F9
#define E1000_DEV_ID_PCH_TGP_I219_V14 0x15FA
#define E1000_DEV_ID_PCH_TGP_I219_LM15 0x15F4
+#define E1000_DEV_ID_PCH_TGP_I219_V15 0x15F5
+#define E1000_DEV_ID_PCH_ADP_I219_LM16 0x1A1E
+#define E1000_DEV_ID_PCH_ADP_I219_V16 0x1A1F
+#define E1000_DEV_ID_PCH_ADP_I219_LM17 0x1A1C
+#define E1000_DEV_ID_PCH_ADP_I219_V17 0x1A1D
+#define E1000_DEV_ID_PCH_MTP_I219_LM18 0x550A
+#define E1000_DEV_ID_PCH_MTP_I219_V18 0x550B
+#define E1000_DEV_ID_PCH_MTP_I219_LM19 0x550C
+#define E1000_DEV_ID_PCH_MTP_I219_V19 0x550D
+#define E1000_DEV_ID_PCH_LNP_I219_LM20 0x550E
+#define E1000_DEV_ID_PCH_LNP_I219_V20 0x550F
+#define E1000_DEV_ID_PCH_LNP_I219_LM21 0x5510
+#define E1000_DEV_ID_PCH_LNP_I219_V21 0x5511
+#define E1000_DEV_ID_PCH_RPL_I219_LM22 0x0DC7
+#define E1000_DEV_ID_PCH_RPL_I219_V22 0x0DC8
+#define E1000_DEV_ID_PCH_RPL_I219_LM23 0x0DC5
+#define E1000_DEV_ID_PCH_RPL_I219_V23 0x0DC6
#define E1000_DEV_ID_82576 0x10C9
#define E1000_DEV_ID_82576_FIBER 0x10E6
#define E1000_DEV_ID_82576_SERDES 0x10E7
@@ -254,9 +271,10 @@ enum e1000_mac_type {
/*
* The following MACs all share the ich8 style of hardware and are
* implemented in ich8, though some are a little more different than
- * others. The pch_lpt, pch_spt, pch_cnp, and pch_tgp families are a bit
- * more different than the others and just have slight variants in
- * behavior between them. They are ordered based on release.
+ * others. The pch_lpt, pch_spt, pch_cnp, pch_tgp, pch_adp, pch_mtp,
+ * pch_lnp, and pch_rpl families are a bit more different than the
+ * others and just have slight variants in behavior between them. They
+ * are ordered based on release.
*/
e1000_ich8lan,
e1000_ich9lan,
@@ -267,6 +285,10 @@ enum e1000_mac_type {
e1000_pch_spt,
e1000_pch_cnp,
e1000_pch_tgp,
+ e1000_pch_adp,
+ e1000_pch_mtp,
+ e1000_pch_lnp,
+ e1000_pch_rpl,
/*
* After this point all MACs are used by the igb(7D) driver as opposed
* to e1000g(7D). If a new MAC is specific to e1000g series of devices,
diff --git a/usr/src/uts/common/io/e1000api/e1000_ich8lan.c b/usr/src/uts/common/io/e1000api/e1000_ich8lan.c
index 57f03e211b..a6bab1312f 100644
--- a/usr/src/uts/common/io/e1000api/e1000_ich8lan.c
+++ b/usr/src/uts/common/io/e1000api/e1000_ich8lan.c
@@ -346,6 +346,10 @@ static s32 e1000_init_phy_workarounds_pchlan(struct e1000_hw *hw)
case e1000_pch_spt:
case e1000_pch_cnp:
case e1000_pch_tgp:
+ case e1000_pch_adp:
+ case e1000_pch_mtp:
+ case e1000_pch_lnp:
+ case e1000_pch_rpl:
if (e1000_phy_is_accessible_pchlan(hw))
break;
@@ -496,6 +500,10 @@ static s32 e1000_init_phy_params_pchlan(struct e1000_hw *hw)
case e1000_pch_spt:
case e1000_pch_cnp:
case e1000_pch_tgp:
+ case e1000_pch_adp:
+ case e1000_pch_mtp:
+ case e1000_pch_lnp:
+ case e1000_pch_rpl:
/* In case the PHY needs to be in mdio slow mode,
* set slow mode and try to get the PHY id again.
*/
@@ -799,6 +807,10 @@ static s32 e1000_init_mac_params_ich8lan(struct e1000_hw *hw)
case e1000_pch_spt:
case e1000_pch_cnp:
case e1000_pch_tgp:
+ case e1000_pch_adp:
+ case e1000_pch_mtp:
+ case e1000_pch_lnp:
+ case e1000_pch_rpl:
/* multicast address update for pch2 */
mac->ops.update_mc_addr_list =
e1000_update_mc_addr_list_pch2lan;
@@ -1832,6 +1844,10 @@ void e1000_init_function_pointers_ich8lan(struct e1000_hw *hw)
case e1000_pch_spt:
case e1000_pch_cnp:
case e1000_pch_tgp:
+ case e1000_pch_adp:
+ case e1000_pch_mtp:
+ case e1000_pch_lnp:
+ case e1000_pch_rpl:
hw->phy.ops.init_params = e1000_init_phy_params_pchlan;
break;
default:
@@ -2298,6 +2314,10 @@ static s32 e1000_sw_lcd_config_ich8lan(struct e1000_hw *hw)
case e1000_pch_spt:
case e1000_pch_cnp:
case e1000_pch_tgp:
+ case e1000_pch_adp:
+ case e1000_pch_mtp:
+ case e1000_pch_lnp:
+ case e1000_pch_rpl:
sw_cfg_mask = E1000_FEXTNVM_SW_CONFIG_ICH8M;
break;
default:
@@ -3417,6 +3437,10 @@ static s32 e1000_valid_nvm_bank_detect_ich8lan(struct e1000_hw *hw, u32 *bank)
case e1000_pch_spt:
case e1000_pch_cnp:
case e1000_pch_tgp:
+ case e1000_pch_adp:
+ case e1000_pch_mtp:
+ case e1000_pch_lnp:
+ case e1000_pch_rpl:
bank1_offset = nvm->flash_bank_size;
act_offset = E1000_ICH_NVM_SIG_WORD;
@@ -4393,6 +4417,10 @@ static s32 e1000_validate_nvm_checksum_ich8lan(struct e1000_hw *hw)
case e1000_pch_spt:
case e1000_pch_cnp:
case e1000_pch_tgp:
+ case e1000_pch_adp:
+ case e1000_pch_mtp:
+ case e1000_pch_lnp:
+ case e1000_pch_rpl:
word = NVM_COMPAT;
valid_csum_mask = NVM_COMPAT_VALID_CSUM;
break;
diff --git a/usr/src/uts/common/io/e1000g/e1000g_main.c b/usr/src/uts/common/io/e1000g/e1000g_main.c
index 7d55a00682..eb579a54ee 100644
--- a/usr/src/uts/common/io/e1000g/e1000g_main.c
+++ b/usr/src/uts/common/io/e1000g/e1000g_main.c
@@ -26,6 +26,7 @@
* Copyright 2012 DEY Storage Systems, Inc. All rights reserved.
* Copyright 2013 Nexenta Systems, Inc. All rights reserved.
* Copyright (c) 2018, Joyent, Inc.
+ * Copyright 2022 Oxide Computer Company
*/
/*
@@ -51,7 +52,7 @@
static char ident[] = "Intel PRO/1000 Ethernet";
/* LINTED E_STATIC_UNUSED */
-static char e1000g_version[] = "Driver Ver. 5.3.24";
+static char e1000g_version[] = "Driver Ver. 5.4.00";
/*
* Proto types for DDI entry points
@@ -713,6 +714,10 @@ e1000g_regs_map(struct e1000g *Adapter)
case e1000_pch_spt:
case e1000_pch_cnp:
case e1000_pch_tgp:
+ case e1000_pch_adp:
+ case e1000_pch_mtp:
+ case e1000_pch_lnp:
+ case e1000_pch_rpl:
/*
* On the SPT, the device flash is actually in BAR0, not a
* separate BAR. Therefore we end up setting the
@@ -913,6 +918,10 @@ e1000g_setup_max_mtu(struct e1000g *Adapter)
case e1000_pch_spt:
case e1000_pch_cnp:
case e1000_pch_tgp:
+ case e1000_pch_adp:
+ case e1000_pch_mtp:
+ case e1000_pch_lnp:
+ case e1000_pch_rpl:
Adapter->max_mtu = MAXIMUM_MTU_9K;
break;
/* types with a special limit */
@@ -1494,6 +1503,14 @@ e1000g_init(struct e1000g *Adapter)
pba = E1000_PBA_26K;
} else if (hw->mac.type == e1000_pch_tgp) {
pba = E1000_PBA_26K;
+ } else if (hw->mac.type == e1000_pch_adp) {
+ pba = E1000_PBA_26K;
+ } else if (hw->mac.type == e1000_pch_mtp) {
+ pba = E1000_PBA_26K;
+ } else if (hw->mac.type == e1000_pch_lnp) {
+ pba = E1000_PBA_26K;
+ } else if (hw->mac.type == e1000_pch_rpl) {
+ pba = E1000_PBA_26K;
} else {
/*
* Total FIFO is 40K