Print this page
MFV: illumos-gate@5bb0bdfe588c5df0f63ff8ac292cd608a5f4492a
9950 Need support for Intel I219 v6-v9
Reviewed by: Jason King <jason.king@joyent.com>
Reviewed by: Garrett D'Amore <garrett@damore.org>
Approved by: Garrett D'Amore <garrett@damore.org>
Author: Robert Mustacchi <rm@joyent.com>
4547 e1000g common code doesn't account for LockMAC
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Richard Lowe <richlowe@richlowe.net>
Reviewed by: Garrett D'Amore <garrett@damore.org>
Reviewed by: Jason King <jason.brian.king@gmail.com>
Approved by: Garrett D'Amore <garrett@damore.org>
re #12675 rb4109 some e1000g devices don't support 15 unicast addresses
@@ -23,11 +23,11 @@
*/
/*
* Copyright 2012 DEY Storage Systems, Inc. All rights reserved.
* Copyright 2013 Nexenta Systems, Inc. All rights reserved.
- * Copyright (c) 2017, Joyent, Inc.
+ * Copyright (c) 2018, Joyent, Inc.
*/
/*
* **********************************************************************
* *
@@ -709,10 +709,11 @@
"ddi_regs_map_setup for ICH flash failed");
goto regs_map_fail;
}
break;
case e1000_pch_spt:
+ case e1000_pch_cnp:
/*
* On the SPT, the device flash is actually in BAR0, not a
* separate BAR. Therefore we end up setting the
* ich_flash_handle to be the same as the register handle.
* We mark the same to reduce the confusion in the other
@@ -778,11 +779,11 @@
return (DDI_SUCCESS);
regs_map_fail:
if (osdep->reg_handle != NULL)
ddi_regs_map_free(&osdep->reg_handle);
- if (osdep->ich_flash_handle != NULL && hw->mac.type != e1000_pch_spt)
+ if (osdep->ich_flash_handle != NULL && hw->mac.type < e1000_pch_spt)
ddi_regs_map_free(&osdep->ich_flash_handle);
return (DDI_FAILURE);
}
static int
@@ -907,10 +908,11 @@
break;
/* pch2 can do jumbo frames up to 9K */
case e1000_pch2lan:
case e1000_pch_lpt:
case e1000_pch_spt:
+ case e1000_pch_cnp:
Adapter->max_mtu = MAXIMUM_MTU_9K;
break;
/* types with a special limit */
case e1000_82571:
case e1000_82572:
@@ -1145,11 +1147,11 @@
if (Adapter->attach_progress & ATTACH_PROGRESS_REGS_MAP) {
if (Adapter->osdep.reg_handle != NULL)
ddi_regs_map_free(&Adapter->osdep.reg_handle);
if (Adapter->osdep.ich_flash_handle != NULL &&
- Adapter->shared.mac.type != e1000_pch_spt)
+ Adapter->shared.mac.type < e1000_pch_spt)
ddi_regs_map_free(&Adapter->osdep.ich_flash_handle);
if (Adapter->osdep.io_reg_handle != NULL)
ddi_regs_map_free(&Adapter->osdep.io_reg_handle);
}
@@ -1484,10 +1486,12 @@
pba = E1000_PBA_26K;
} else if (hw->mac.type == e1000_pch_lpt) {
pba = E1000_PBA_26K;
} else if (hw->mac.type == e1000_pch_spt) {
pba = E1000_PBA_26K;
+ } else if (hw->mac.type == e1000_pch_cnp) {
+ pba = E1000_PBA_26K;
} else {
/*
* Total FIFO is 40K
*/
if (Adapter->max_frame_size > FRAME_SIZE_UPTO_8K)
@@ -1710,14 +1714,14 @@
*/
switch (hw->phy.media_type) {
case e1000_media_type_copper:
if (hw->mac.get_link_status) {
/*
- * SPT devices need a bit of extra time before we ask
- * them.
+ * SPT and newer devices need a bit of extra time before
+ * we ask them.
*/
- if (hw->mac.type == e1000_pch_spt)
+ if (hw->mac.type >= e1000_pch_spt)
msec_delay(50);
(void) e1000_check_for_link(hw);
if ((E1000_READ_REG(hw, E1000_STATUS) &
E1000_STATUS_LU)) {
link_up = B_TRUE;
@@ -2074,11 +2078,11 @@
/*
* The I219, eg. the pch_spt, has bugs such that we must ensure that
* rings are flushed before we do anything else. This must be done
* before we release DMA resources.
*/
- if (Adapter->shared.mac.type == e1000_pch_spt)
+ if (Adapter->shared.mac.type >= e1000_pch_spt)
e1000g_flush_desc_rings(Adapter);
if (global) {
e1000g_release_dma_resources(Adapter);
@@ -2534,12 +2538,11 @@
* few of the bits set in the FWSM register. If the value is
* zero, everything is available. If the value is 1, none of the
* additional registers are available. If the value is 2-7, only
* that number are available.
*/
- if (hw->mac.type == e1000_pch_lpt ||
- hw->mac.type == e1000_pch_spt) {
+ if (hw->mac.type >= e1000_pch_lpt) {
uint32_t locked, rar;
locked = E1000_READ_REG(hw, E1000_FWSM) &
E1000_FWSM_WLOCK_MAC_MASK;
locked >>= E1000_FWSM_WLOCK_MAC_SHIFT;