diff -r e8067e7e46f8 usr/src/uts/common/io/rge/rge_chip.c --- a/usr/src/uts/common/io/rge/rge_chip.c Mon Aug 11 14:18:16 2008 -0700 +++ b/usr/src/uts/common/io/rge/rge_chip.c Mon Aug 18 19:09:43 2008 +0200 @@ -894,6 +894,7 @@ val16 = rge_reg_get8(rgep, PHY_STATUS_REG); val16 = 0x12<<8 | val16; if (rgep->chipid.mac_ver != MAC_VER_8101E && + rgep->chipid.mac_ver != MAC_VER_8101E_X && rgep->chipid.mac_ver != MAC_VER_8168B_C) { rge_reg_put16(rgep, PHY_STATUS_REG, val16); rge_reg_put32(rgep, RT_CSI_DATA_REG, 0x00021c01); diff -r e8067e7e46f8 usr/src/uts/common/io/rge/rge_hw.h --- a/usr/src/uts/common/io/rge/rge_hw.h Mon Aug 11 14:18:16 2008 -0700 +++ b/usr/src/uts/common/io/rge/rge_hw.h Mon Aug 18 19:09:43 2008 +0200 @@ -171,6 +171,7 @@ #define MAC_VER_8168B_B 0x30000000 #define MAC_VER_8168B_C 0x38000000 #define MAC_VER_8101E 0x34000000 +#define MAC_VER_8101E_X 0x34800000 #define TX_CONFIG_DEFAULT (TX_INTERFRAME_GAP_802_3 | \ TX_DMA_BURST_1024B) diff -r e8067e7e46f8 usr/src/uts/common/io/rge/rge_main.c --- a/usr/src/uts/common/io/rge/rge_main.c Mon Aug 11 14:18:16 2008 -0700 +++ b/usr/src/uts/common/io/rge/rge_main.c Mon Aug 18 19:09:43 2008 +0200 @@ -1278,10 +1278,16 @@ static boolean_t rge_m_getcapab(void *arg, mac_capab_t cap, void *cap_data) { + rge_t *rgep = arg; + switch (cap) { case MAC_CAPAB_HCKSUM: { uint32_t *hcksum_txflags = cap_data; - *hcksum_txflags = HCKSUM_INET_FULL_V4 | HCKSUM_IPHDRCKSUM; + if (rgep->chipid.mac_ver == MAC_VER_8101E_X) + *hcksum_txflags = 0; + else + *hcksum_txflags = HCKSUM_INET_FULL_V4 | \ + HCKSUM_IPHDRCKSUM; break; } case MAC_CAPAB_POLL: