xref: /dflybsd-src/sys/dev/netif/ig_hal/e1000_ich8lan.h (revision 01a55482b42bba8de64caeb8c9ede647a9208734)
19c80d176SSepherosa Ziehau /******************************************************************************
29c80d176SSepherosa Ziehau 
3*01a55482SSepherosa Ziehau   Copyright (c) 2001-2019, Intel Corporation
49c80d176SSepherosa Ziehau   All rights reserved.
59c80d176SSepherosa Ziehau 
69c80d176SSepherosa Ziehau   Redistribution and use in source and binary forms, with or without
79c80d176SSepherosa Ziehau   modification, are permitted provided that the following conditions are met:
89c80d176SSepherosa Ziehau 
99c80d176SSepherosa Ziehau    1. Redistributions of source code must retain the above copyright notice,
109c80d176SSepherosa Ziehau       this list of conditions and the following disclaimer.
119c80d176SSepherosa Ziehau 
129c80d176SSepherosa Ziehau    2. Redistributions in binary form must reproduce the above copyright
139c80d176SSepherosa Ziehau       notice, this list of conditions and the following disclaimer in the
149c80d176SSepherosa Ziehau       documentation and/or other materials provided with the distribution.
159c80d176SSepherosa Ziehau 
169c80d176SSepherosa Ziehau    3. Neither the name of the Intel Corporation nor the names of its
179c80d176SSepherosa Ziehau       contributors may be used to endorse or promote products derived from
189c80d176SSepherosa Ziehau       this software without specific prior written permission.
199c80d176SSepherosa Ziehau 
209c80d176SSepherosa Ziehau   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
219c80d176SSepherosa Ziehau   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
229c80d176SSepherosa Ziehau   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
239c80d176SSepherosa Ziehau   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
249c80d176SSepherosa Ziehau   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
259c80d176SSepherosa Ziehau   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
269c80d176SSepherosa Ziehau   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
279c80d176SSepherosa Ziehau   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
289c80d176SSepherosa Ziehau   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
299c80d176SSepherosa Ziehau   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
309c80d176SSepherosa Ziehau   POSSIBILITY OF SUCH DAMAGE.
319c80d176SSepherosa Ziehau 
329c80d176SSepherosa Ziehau ******************************************************************************/
3374dc3754SSepherosa Ziehau /*$FreeBSD$*/
349c80d176SSepherosa Ziehau 
359c80d176SSepherosa Ziehau #ifndef _E1000_ICH8LAN_H_
369c80d176SSepherosa Ziehau #define _E1000_ICH8LAN_H_
379c80d176SSepherosa Ziehau 
389c80d176SSepherosa Ziehau #define ICH_FLASH_GFPREG		0x0000
399c80d176SSepherosa Ziehau #define ICH_FLASH_HSFSTS		0x0004
409c80d176SSepherosa Ziehau #define ICH_FLASH_HSFCTL		0x0006
419c80d176SSepherosa Ziehau #define ICH_FLASH_FADDR			0x0008
429c80d176SSepherosa Ziehau #define ICH_FLASH_FDATA0		0x0010
439c80d176SSepherosa Ziehau 
446a5a645eSSepherosa Ziehau /* Requires up to 10 seconds when MNG might be accessing part. */
456a5a645eSSepherosa Ziehau #define ICH_FLASH_READ_COMMAND_TIMEOUT	10000000
466a5a645eSSepherosa Ziehau #define ICH_FLASH_WRITE_COMMAND_TIMEOUT	10000000
476a5a645eSSepherosa Ziehau #define ICH_FLASH_ERASE_COMMAND_TIMEOUT	10000000
489c80d176SSepherosa Ziehau #define ICH_FLASH_LINEAR_ADDR_MASK	0x00FFFFFF
499c80d176SSepherosa Ziehau #define ICH_FLASH_CYCLE_REPEAT_COUNT	10
509c80d176SSepherosa Ziehau 
519c80d176SSepherosa Ziehau #define ICH_CYCLE_READ			0
529c80d176SSepherosa Ziehau #define ICH_CYCLE_WRITE			2
539c80d176SSepherosa Ziehau #define ICH_CYCLE_ERASE			3
549c80d176SSepherosa Ziehau 
559c80d176SSepherosa Ziehau #define FLASH_GFPREG_BASE_MASK		0x1FFF
569c80d176SSepherosa Ziehau #define FLASH_SECTOR_ADDR_SHIFT		12
579c80d176SSepherosa Ziehau 
589c80d176SSepherosa Ziehau #define ICH_FLASH_SEG_SIZE_256		256
599c80d176SSepherosa Ziehau #define ICH_FLASH_SEG_SIZE_4K		4096
609c80d176SSepherosa Ziehau #define ICH_FLASH_SEG_SIZE_8K		8192
619c80d176SSepherosa Ziehau #define ICH_FLASH_SEG_SIZE_64K		65536
629c80d176SSepherosa Ziehau 
639c80d176SSepherosa Ziehau #define E1000_ICH_FWSM_RSPCIPHY	0x00000040 /* Reset PHY on PCI Reset */
649c80d176SSepherosa Ziehau /* FW established a valid mode */
659c80d176SSepherosa Ziehau #define E1000_ICH_FWSM_FW_VALID	0x00008000
664be59a01SSepherosa Ziehau #define E1000_ICH_FWSM_PCIM2PCI	0x01000000 /* ME PCIm-to-PCI active */
674be59a01SSepherosa Ziehau #define E1000_ICH_FWSM_PCIM2PCI_COUNT	2000
689c80d176SSepherosa Ziehau 
699c80d176SSepherosa Ziehau #define E1000_ICH_MNG_IAMT_MODE		0x2
709c80d176SSepherosa Ziehau 
71379ebbe7SSepherosa Ziehau #define E1000_FWSM_WLOCK_MAC_MASK	0x0380
72379ebbe7SSepherosa Ziehau #define E1000_FWSM_WLOCK_MAC_SHIFT	7
734765c386SMichael Neumann #define E1000_FWSM_ULP_CFG_DONE		0x00000400  /* Low power cfg done */
746a5a645eSSepherosa Ziehau 
756a5a645eSSepherosa Ziehau /* Shared Receive Address Registers */
76379ebbe7SSepherosa Ziehau #define E1000_SHRAL_PCH_LPT(_i)		(0x05408 + ((_i) * 8))
77379ebbe7SSepherosa Ziehau #define E1000_SHRAH_PCH_LPT(_i)		(0x0540C + ((_i) * 8))
786a5a645eSSepherosa Ziehau 
794765c386SMichael Neumann #define E1000_H2ME		0x05B50    /* Host to ME */
804765c386SMichael Neumann #define E1000_H2ME_ULP		0x00000800 /* ULP Indication Bit */
814765c386SMichael Neumann #define E1000_H2ME_ENFORCE_SETTINGS	0x00001000 /* Enforce Settings */
824765c386SMichael Neumann 
839c80d176SSepherosa Ziehau #define ID_LED_DEFAULT_ICH8LAN	((ID_LED_DEF1_DEF2 << 12) | \
846a5a645eSSepherosa Ziehau 				 (ID_LED_OFF1_OFF2 <<  8) | \
856a5a645eSSepherosa Ziehau 				 (ID_LED_OFF1_ON2  <<  4) | \
869c80d176SSepherosa Ziehau 				 (ID_LED_DEF1_DEF2))
879c80d176SSepherosa Ziehau 
889c80d176SSepherosa Ziehau #define E1000_ICH_NVM_SIG_WORD		0x13
899c80d176SSepherosa Ziehau #define E1000_ICH_NVM_SIG_MASK		0xC000
906a5a645eSSepherosa Ziehau #define E1000_ICH_NVM_VALID_SIG_MASK	0xC0
916a5a645eSSepherosa Ziehau #define E1000_ICH_NVM_SIG_VALUE		0x80
929c80d176SSepherosa Ziehau 
939c80d176SSepherosa Ziehau #define E1000_ICH8_LAN_INIT_TIMEOUT	1500
949c80d176SSepherosa Ziehau 
954765c386SMichael Neumann /* FEXT register bit definition */
964765c386SMichael Neumann #define E1000_FEXT_PHY_CABLE_DISCONNECTED	0x00000004
974765c386SMichael Neumann 
989c80d176SSepherosa Ziehau #define E1000_FEXTNVM_SW_CONFIG		1
994765c386SMichael Neumann #define E1000_FEXTNVM_SW_CONFIG_ICH8M	(1 << 27) /* different on ICH8M */
1009c80d176SSepherosa Ziehau 
1014be59a01SSepherosa Ziehau #define E1000_FEXTNVM3_PHY_CFG_COUNTER_MASK	0x0C000000
1024be59a01SSepherosa Ziehau #define E1000_FEXTNVM3_PHY_CFG_COUNTER_50MSEC	0x08000000
1034be59a01SSepherosa Ziehau 
1046a5a645eSSepherosa Ziehau #define E1000_FEXTNVM4_BEACON_DURATION_MASK	0x7
1056a5a645eSSepherosa Ziehau #define E1000_FEXTNVM4_BEACON_DURATION_8USEC	0x7
1066a5a645eSSepherosa Ziehau #define E1000_FEXTNVM4_BEACON_DURATION_16USEC	0x3
1076a5a645eSSepherosa Ziehau 
108379ebbe7SSepherosa Ziehau #define E1000_FEXTNVM6_REQ_PLL_CLK	0x00000100
1094765c386SMichael Neumann #define E1000_FEXTNVM6_ENABLE_K1_ENTRY_CONDITION	0x00000200
110524ce499SSepherosa Ziehau #define E1000_FEXTNVM6_K1_OFF_ENABLE	0x80000000
11174dc3754SSepherosa Ziehau /* bit for disabling packet buffer read */
11274dc3754SSepherosa Ziehau #define E1000_FEXTNVM7_DISABLE_PB_READ	0x00040000
11374dc3754SSepherosa Ziehau #define E1000_FEXTNVM7_SIDE_CLK_UNGATE	0x00000004
1144765c386SMichael Neumann #define E1000_FEXTNVM7_DISABLE_SMB_PERST	0x00000020
11574dc3754SSepherosa Ziehau #define E1000_FEXTNVM9_IOSFSB_CLKGATE_DIS	0x00000800
11674dc3754SSepherosa Ziehau #define E1000_FEXTNVM9_IOSFSB_CLKREQ_DIS	0x00001000
11774dc3754SSepherosa Ziehau #define E1000_FEXTNVM11_DISABLE_PB_READ		0x00000200
11874dc3754SSepherosa Ziehau #define E1000_FEXTNVM11_DISABLE_MULR_FIX	0x00002000
119379ebbe7SSepherosa Ziehau 
12074dc3754SSepherosa Ziehau /* bit24: RXDCTL thresholds granularity: 0 - cache lines, 1 - descriptors */
12174dc3754SSepherosa Ziehau #define E1000_RXDCTL_THRESH_UNIT_DESC	0x01000000
12274dc3754SSepherosa Ziehau 
12374dc3754SSepherosa Ziehau #define NVM_SIZE_MULTIPLIER 4096  /*multiplier for NVMS field*/
12474dc3754SSepherosa Ziehau #define E1000_FLASH_BASE_ADDR 0xE000 /*offset of NVM access regs*/
125524ce499SSepherosa Ziehau #define E1000_CTRL_EXT_NVMVS 0x3 /*NVM valid sector */
126*01a55482SSepherosa Ziehau #define E1000_TARC0_CB_MULTIQ_3_REQ	0x30000000
127*01a55482SSepherosa Ziehau #define E1000_TARC0_CB_MULTIQ_2_REQ	0x20000000
1289c80d176SSepherosa Ziehau #define PCIE_ICH8_SNOOP_ALL	PCIE_NO_SNOOP_ALL
1299c80d176SSepherosa Ziehau 
1309c80d176SSepherosa Ziehau #define E1000_ICH_RAR_ENTRIES	7
1316a5a645eSSepherosa Ziehau #define E1000_PCH2_RAR_ENTRIES	5 /* RAR[0], SHRA[0-3] */
132379ebbe7SSepherosa Ziehau #define E1000_PCH_LPT_RAR_ENTRIES	12 /* RAR[0], SHRA[0-10] */
1339c80d176SSepherosa Ziehau 
1349c80d176SSepherosa Ziehau #define PHY_PAGE_SHIFT		5
1359c80d176SSepherosa Ziehau #define PHY_REG(page, reg)	(((page) << PHY_PAGE_SHIFT) | \
1369c80d176SSepherosa Ziehau 				 ((reg) & MAX_PHY_REG_ADDRESS))
1379c80d176SSepherosa Ziehau #define IGP3_KMRN_DIAG	PHY_REG(770, 19) /* KMRN Diagnostic */
1389c80d176SSepherosa Ziehau #define IGP3_VR_CTRL	PHY_REG(776, 18) /* Voltage Regulator Control */
1399c80d176SSepherosa Ziehau 
1409c80d176SSepherosa Ziehau #define IGP3_KMRN_DIAG_PCS_LOCK_LOSS		0x0002
1419c80d176SSepherosa Ziehau #define IGP3_VR_CTRL_DEV_POWERDOWN_MODE_MASK	0x0300
1429c80d176SSepherosa Ziehau #define IGP3_VR_CTRL_MODE_SHUTDOWN		0x0200
1439c80d176SSepherosa Ziehau 
1446a5a645eSSepherosa Ziehau /* PHY Wakeup Registers and defines */
1456d5e2922SSepherosa Ziehau #define BM_PORT_GEN_CFG		PHY_REG(BM_PORT_CTRL_PAGE, 17)
1466a5a645eSSepherosa Ziehau #define BM_RCTL			PHY_REG(BM_WUC_PAGE, 0)
1476a5a645eSSepherosa Ziehau #define BM_WUC			PHY_REG(BM_WUC_PAGE, 1)
1486a5a645eSSepherosa Ziehau #define BM_WUFC			PHY_REG(BM_WUC_PAGE, 2)
1496a5a645eSSepherosa Ziehau #define BM_WUS			PHY_REG(BM_WUC_PAGE, 3)
1506a5a645eSSepherosa Ziehau #define BM_RAR_L(_i)		(BM_PHY_REG(BM_WUC_PAGE, 16 + ((_i) << 2)))
1516a5a645eSSepherosa Ziehau #define BM_RAR_M(_i)		(BM_PHY_REG(BM_WUC_PAGE, 17 + ((_i) << 2)))
1526a5a645eSSepherosa Ziehau #define BM_RAR_H(_i)		(BM_PHY_REG(BM_WUC_PAGE, 18 + ((_i) << 2)))
1536a5a645eSSepherosa Ziehau #define BM_RAR_CTRL(_i)		(BM_PHY_REG(BM_WUC_PAGE, 19 + ((_i) << 2)))
1546a5a645eSSepherosa Ziehau #define BM_MTA(_i)		(BM_PHY_REG(BM_WUC_PAGE, 128 + ((_i) << 1)))
1556a5a645eSSepherosa Ziehau 
1566a5a645eSSepherosa Ziehau #define BM_RCTL_UPE		0x0001 /* Unicast Promiscuous Mode */
1576a5a645eSSepherosa Ziehau #define BM_RCTL_MPE		0x0002 /* Multicast Promiscuous Mode */
1586a5a645eSSepherosa Ziehau #define BM_RCTL_MO_SHIFT	3      /* Multicast Offset Shift */
1596a5a645eSSepherosa Ziehau #define BM_RCTL_MO_MASK		(3 << 3) /* Multicast Offset Mask */
1606a5a645eSSepherosa Ziehau #define BM_RCTL_BAM		0x0020 /* Broadcast Accept Mode */
1616a5a645eSSepherosa Ziehau #define BM_RCTL_PMCF		0x0040 /* Pass MAC Control Frames */
1626a5a645eSSepherosa Ziehau #define BM_RCTL_RFCE		0x0080 /* Rx Flow Control Enable */
1636a5a645eSSepherosa Ziehau 
1646a5a645eSSepherosa Ziehau #define HV_LED_CONFIG		PHY_REG(768, 30) /* LED Configuration */
1656a5a645eSSepherosa Ziehau #define HV_MUX_DATA_CTRL	PHY_REG(776, 16)
1666a5a645eSSepherosa Ziehau #define HV_MUX_DATA_CTRL_GEN_TO_MAC	0x0400
1676a5a645eSSepherosa Ziehau #define HV_MUX_DATA_CTRL_FORCE_SPEED	0x0004
1686d5e2922SSepherosa Ziehau #define HV_STATS_PAGE	778
1694765c386SMichael Neumann /* Half-duplex collision counts */
1704765c386SMichael Neumann #define HV_SCC_UPPER	PHY_REG(HV_STATS_PAGE, 16) /* Single Collision */
1716d5e2922SSepherosa Ziehau #define HV_SCC_LOWER	PHY_REG(HV_STATS_PAGE, 17)
1724765c386SMichael Neumann #define HV_ECOL_UPPER	PHY_REG(HV_STATS_PAGE, 18) /* Excessive Coll. */
1736d5e2922SSepherosa Ziehau #define HV_ECOL_LOWER	PHY_REG(HV_STATS_PAGE, 19)
1744765c386SMichael Neumann #define HV_MCC_UPPER	PHY_REG(HV_STATS_PAGE, 20) /* Multiple Collision */
1756d5e2922SSepherosa Ziehau #define HV_MCC_LOWER	PHY_REG(HV_STATS_PAGE, 21)
1764765c386SMichael Neumann #define HV_LATECOL_UPPER PHY_REG(HV_STATS_PAGE, 23) /* Late Collision */
1776d5e2922SSepherosa Ziehau #define HV_LATECOL_LOWER PHY_REG(HV_STATS_PAGE, 24)
1784765c386SMichael Neumann #define HV_COLC_UPPER	PHY_REG(HV_STATS_PAGE, 25) /* Collision */
1796d5e2922SSepherosa Ziehau #define HV_COLC_LOWER	PHY_REG(HV_STATS_PAGE, 26)
1806d5e2922SSepherosa Ziehau #define HV_DC_UPPER	PHY_REG(HV_STATS_PAGE, 27) /* Defer Count */
1816d5e2922SSepherosa Ziehau #define HV_DC_LOWER	PHY_REG(HV_STATS_PAGE, 28)
1824765c386SMichael Neumann #define HV_TNCRS_UPPER	PHY_REG(HV_STATS_PAGE, 29) /* Tx with no CRS */
1836d5e2922SSepherosa Ziehau #define HV_TNCRS_LOWER	PHY_REG(HV_STATS_PAGE, 30)
1846a5a645eSSepherosa Ziehau 
1856a5a645eSSepherosa Ziehau #define E1000_FCRTV_PCH	0x05F40 /* PCH Flow Control Refresh Timer Value */
1866a5a645eSSepherosa Ziehau 
1876a5a645eSSepherosa Ziehau #define E1000_NVM_K1_CONFIG	0x1B /* NVM K1 Config Word */
1886a5a645eSSepherosa Ziehau #define E1000_NVM_K1_ENABLE	0x1  /* NVM Enable K1 bit */
18974dc3754SSepherosa Ziehau #define K1_ENTRY_LATENCY	0
19074dc3754SSepherosa Ziehau #define K1_MIN_TIME		1
1916a5a645eSSepherosa Ziehau 
192379ebbe7SSepherosa Ziehau /* SMBus Control Phy Register */
193379ebbe7SSepherosa Ziehau #define CV_SMB_CTRL		PHY_REG(769, 23)
194379ebbe7SSepherosa Ziehau #define CV_SMB_CTRL_FORCE_SMBUS	0x0001
195379ebbe7SSepherosa Ziehau 
1964765c386SMichael Neumann /* I218 Ultra Low Power Configuration 1 Register */
1974765c386SMichael Neumann #define I218_ULP_CONFIG1		PHY_REG(779, 16)
1984765c386SMichael Neumann #define I218_ULP_CONFIG1_START		0x0001 /* Start auto ULP config */
1994765c386SMichael Neumann #define I218_ULP_CONFIG1_IND		0x0004 /* Pwr up from ULP indication */
2004765c386SMichael Neumann #define I218_ULP_CONFIG1_STICKY_ULP	0x0010 /* Set sticky ULP mode */
2014765c386SMichael Neumann #define I218_ULP_CONFIG1_INBAND_EXIT	0x0020 /* Inband on ULP exit */
2024765c386SMichael Neumann #define I218_ULP_CONFIG1_WOL_HOST	0x0040 /* WoL Host on ULP exit */
2034765c386SMichael Neumann #define I218_ULP_CONFIG1_RESET_TO_SMBUS	0x0100 /* Reset to SMBus mode */
20474dc3754SSepherosa Ziehau /* enable ULP even if when phy powered down via lanphypc */
20574dc3754SSepherosa Ziehau #define I218_ULP_CONFIG1_EN_ULP_LANPHYPC	0x0400
20674dc3754SSepherosa Ziehau /* disable clear of sticky ULP on PERST */
20774dc3754SSepherosa Ziehau #define I218_ULP_CONFIG1_DIS_CLR_STICKY_ON_PERST	0x0800
2084765c386SMichael Neumann #define I218_ULP_CONFIG1_DISABLE_SMB_PERST	0x1000 /* Disable on PERST# */
2094765c386SMichael Neumann 
21065aebe9fSSepherosa Ziehau 
2116a5a645eSSepherosa Ziehau /* SMBus Address Phy Register */
2126a5a645eSSepherosa Ziehau #define HV_SMB_ADDR		PHY_REG(768, 26)
2136a5a645eSSepherosa Ziehau #define HV_SMB_ADDR_MASK	0x007F
2146a5a645eSSepherosa Ziehau #define HV_SMB_ADDR_PEC_EN	0x0200
2156a5a645eSSepherosa Ziehau #define HV_SMB_ADDR_VALID	0x0080
216379ebbe7SSepherosa Ziehau #define HV_SMB_ADDR_FREQ_MASK		0x1100
217379ebbe7SSepherosa Ziehau #define HV_SMB_ADDR_FREQ_LOW_SHIFT	8
218379ebbe7SSepherosa Ziehau #define HV_SMB_ADDR_FREQ_HIGH_SHIFT	12
2196a5a645eSSepherosa Ziehau 
2206a5a645eSSepherosa Ziehau /* Strapping Option Register - RO */
2216a5a645eSSepherosa Ziehau #define E1000_STRAP			0x0000C
2226a5a645eSSepherosa Ziehau #define E1000_STRAP_SMBUS_ADDRESS_MASK	0x00FE0000
2236a5a645eSSepherosa Ziehau #define E1000_STRAP_SMBUS_ADDRESS_SHIFT	17
224379ebbe7SSepherosa Ziehau #define E1000_STRAP_SMT_FREQ_MASK	0x00003000
225379ebbe7SSepherosa Ziehau #define E1000_STRAP_SMT_FREQ_SHIFT	12
2266a5a645eSSepherosa Ziehau 
2276a5a645eSSepherosa Ziehau /* OEM Bits Phy Register */
2286a5a645eSSepherosa Ziehau #define HV_OEM_BITS		PHY_REG(768, 25)
2296a5a645eSSepherosa Ziehau #define HV_OEM_BITS_LPLU	0x0004 /* Low Power Link Up */
2306a5a645eSSepherosa Ziehau #define HV_OEM_BITS_GBE_DIS	0x0040 /* Gigabit Disable */
2316a5a645eSSepherosa Ziehau #define HV_OEM_BITS_RESTART_AN	0x0400 /* Restart Auto-negotiation */
2326a5a645eSSepherosa Ziehau 
2336a5a645eSSepherosa Ziehau /* KMRN Mode Control */
2346a5a645eSSepherosa Ziehau #define HV_KMRN_MODE_CTRL	PHY_REG(769, 16)
2356a5a645eSSepherosa Ziehau #define HV_KMRN_MDIO_SLOW	0x0400
2366a5a645eSSepherosa Ziehau 
2376d5e2922SSepherosa Ziehau /* KMRN FIFO Control and Status */
2386d5e2922SSepherosa Ziehau #define HV_KMRN_FIFO_CTRLSTA			PHY_REG(770, 16)
2396d5e2922SSepherosa Ziehau #define HV_KMRN_FIFO_CTRLSTA_PREAMBLE_MASK	0x7000
2406d5e2922SSepherosa Ziehau #define HV_KMRN_FIFO_CTRLSTA_PREAMBLE_SHIFT	12
2416d5e2922SSepherosa Ziehau 
2426a5a645eSSepherosa Ziehau /* PHY Power Management Control */
2436a5a645eSSepherosa Ziehau #define HV_PM_CTRL		PHY_REG(770, 17)
24465aebe9fSSepherosa Ziehau #define HV_PM_CTRL_K1_CLK_REQ		0x200
2454765c386SMichael Neumann #define HV_PM_CTRL_K1_ENABLE		0x4000
2466a5a645eSSepherosa Ziehau 
24774dc3754SSepherosa Ziehau #define I217_PLL_CLOCK_GATE_REG	PHY_REG(772, 28)
24874dc3754SSepherosa Ziehau #define I217_PLL_CLOCK_GATE_MASK	0x07FF
24974dc3754SSepherosa Ziehau 
2504be59a01SSepherosa Ziehau #define SW_FLAG_TIMEOUT		1000 /* SW Semaphore flag timeout in ms */
2516a5a645eSSepherosa Ziehau 
2524765c386SMichael Neumann /* Inband Control */
2534765c386SMichael Neumann #define I217_INBAND_CTRL				PHY_REG(770, 18)
2544765c386SMichael Neumann #define I217_INBAND_CTRL_LINK_STAT_TX_TIMEOUT_MASK	0x3F00
2554765c386SMichael Neumann #define I217_INBAND_CTRL_LINK_STAT_TX_TIMEOUT_SHIFT	8
2564765c386SMichael Neumann 
2574765c386SMichael Neumann /* Low Power Idle GPIO Control */
2584765c386SMichael Neumann #define I217_LPI_GPIO_CTRL			PHY_REG(772, 18)
2594765c386SMichael Neumann #define I217_LPI_GPIO_CTRL_AUTO_EN_LPI		0x0800
2604765c386SMichael Neumann 
2616a5a645eSSepherosa Ziehau /* PHY Low Power Idle Control */
2626a5a645eSSepherosa Ziehau #define I82579_LPI_CTRL				PHY_REG(772, 20)
263379ebbe7SSepherosa Ziehau #define I82579_LPI_CTRL_100_ENABLE		0x2000
264379ebbe7SSepherosa Ziehau #define I82579_LPI_CTRL_1000_ENABLE		0x4000
2656a5a645eSSepherosa Ziehau #define I82579_LPI_CTRL_ENABLE_MASK		0x6000
2664765c386SMichael Neumann 
2674765c386SMichael Neumann /* 82579 DFT Control */
2684765c386SMichael Neumann #define I82579_DFT_CTRL			PHY_REG(769, 20)
2694765c386SMichael Neumann #define I82579_DFT_CTRL_GATE_PHY_RESET	0x0040 /* Gate PHY Reset on MAC Reset */
2706a5a645eSSepherosa Ziehau 
271379ebbe7SSepherosa Ziehau /* Extended Management Interface (EMI) Registers */
2726d5e2922SSepherosa Ziehau #define I82579_EMI_ADDR		0x10
2736d5e2922SSepherosa Ziehau #define I82579_EMI_DATA		0x11
2746d5e2922SSepherosa Ziehau #define I82579_LPI_UPDATE_TIMER	0x4805 /* in 40ns units + 40 ns base value */
275379ebbe7SSepherosa Ziehau #define I82579_MSE_THRESHOLD	0x084F /* 82579 Mean Square Error Threshold */
276379ebbe7SSepherosa Ziehau #define I82577_MSE_THRESHOLD	0x0887 /* 82577 Mean Square Error Threshold */
2774be59a01SSepherosa Ziehau #define I82579_MSE_LINK_DOWN	0x2411 /* MSE count before dropping link */
278379ebbe7SSepherosa Ziehau #define I82579_RX_CONFIG		0x3412 /* Receive configuration */
2794765c386SMichael Neumann #define I82579_LPI_PLL_SHUT		0x4412 /* LPI PLL Shut Enable */
2804765c386SMichael Neumann #define I82579_EEE_PCS_STATUS		0x182E	/* IEEE MMD Register 3.1 >> 8 */
281379ebbe7SSepherosa Ziehau #define I82579_EEE_CAPABILITY		0x0410 /* IEEE MMD Register 3.20 */
282379ebbe7SSepherosa Ziehau #define I82579_EEE_ADVERTISEMENT	0x040E /* IEEE MMD Register 7.60 */
283379ebbe7SSepherosa Ziehau #define I82579_EEE_LP_ABILITY		0x040F /* IEEE MMD Register 7.61 */
2844765c386SMichael Neumann #define I82579_EEE_100_SUPPORTED	(1 << 1) /* 100BaseTx EEE */
2854765c386SMichael Neumann #define I82579_EEE_1000_SUPPORTED	(1 << 2) /* 1000BaseTx EEE */
2864765c386SMichael Neumann #define I82579_LPI_100_PLL_SHUT	(1 << 2) /* 100M LPI PLL Shut Enabled */
287379ebbe7SSepherosa Ziehau #define I217_EEE_PCS_STATUS	0x9401   /* IEEE MMD Register 3.1 */
288379ebbe7SSepherosa Ziehau #define I217_EEE_CAPABILITY	0x8000   /* IEEE MMD Register 3.20 */
289379ebbe7SSepherosa Ziehau #define I217_EEE_ADVERTISEMENT	0x8001   /* IEEE MMD Register 7.60 */
290379ebbe7SSepherosa Ziehau #define I217_EEE_LP_ABILITY	0x8002   /* IEEE MMD Register 7.61 */
2914765c386SMichael Neumann #define I217_RX_CONFIG		0xB20C /* Receive configuration */
2926d5e2922SSepherosa Ziehau 
293379ebbe7SSepherosa Ziehau #define E1000_EEE_RX_LPI_RCVD	0x0400	/* Tx LP idle received */
294379ebbe7SSepherosa Ziehau #define E1000_EEE_TX_LPI_RCVD	0x0800	/* Rx LP idle received */
2959c80d176SSepherosa Ziehau 
296379ebbe7SSepherosa Ziehau /* Intel Rapid Start Technology Support */
297379ebbe7SSepherosa Ziehau #define I217_PROXY_CTRL		BM_PHY_REG(BM_WUC_PAGE, 70)
298379ebbe7SSepherosa Ziehau #define I217_PROXY_CTRL_AUTO_DISABLE	0x0080
299379ebbe7SSepherosa Ziehau #define I217_SxCTRL			PHY_REG(BM_PORT_CTRL_PAGE, 28)
300379ebbe7SSepherosa Ziehau #define I217_SxCTRL_ENABLE_LPI_RESET	0x1000
301379ebbe7SSepherosa Ziehau #define I217_CGFREG			PHY_REG(772, 29)
302379ebbe7SSepherosa Ziehau #define I217_CGFREG_ENABLE_MTA_RESET	0x0002
303379ebbe7SSepherosa Ziehau #define I217_MEMPWR			PHY_REG(772, 26)
304379ebbe7SSepherosa Ziehau #define I217_MEMPWR_DISABLE_SMB_RELEASE	0x0010
3059c80d176SSepherosa Ziehau 
3066a5a645eSSepherosa Ziehau /* Receive Address Initial CRC Calculation */
3076a5a645eSSepherosa Ziehau #define E1000_PCH_RAICC(_n)	(0x05F50 + ((_n) * 4))
3089c80d176SSepherosa Ziehau 
309379ebbe7SSepherosa Ziehau /* Latency Tolerance Reporting */
310379ebbe7SSepherosa Ziehau #define E1000_LTRV			0x000F8
311379ebbe7SSepherosa Ziehau #define E1000_LTRV_VALUE_MASK		0x000003FF
312379ebbe7SSepherosa Ziehau #define E1000_LTRV_SCALE_MAX		5
313379ebbe7SSepherosa Ziehau #define E1000_LTRV_SCALE_FACTOR		5
314379ebbe7SSepherosa Ziehau #define E1000_LTRV_SCALE_SHIFT		10
315379ebbe7SSepherosa Ziehau #define E1000_LTRV_SCALE_MASK		0x00001C00
316379ebbe7SSepherosa Ziehau #define E1000_LTRV_REQ_SHIFT		15
317379ebbe7SSepherosa Ziehau #define E1000_LTRV_NOSNOOP_SHIFT	16
318379ebbe7SSepherosa Ziehau #define E1000_LTRV_SEND			(1 << 30)
319379ebbe7SSepherosa Ziehau 
32065aebe9fSSepherosa Ziehau 
321379ebbe7SSepherosa Ziehau /* Proprietary Latency Tolerance Reporting PCI Capability */
322379ebbe7SSepherosa Ziehau #define E1000_PCI_LTR_CAP_LPT		0xA8
323379ebbe7SSepherosa Ziehau 
324379ebbe7SSepherosa Ziehau /* OBFF Control & Threshold Defines */
325379ebbe7SSepherosa Ziehau #define E1000_SVCR_OFF_EN		0x00000001
326379ebbe7SSepherosa Ziehau #define E1000_SVCR_OFF_MASKINT		0x00001000
327379ebbe7SSepherosa Ziehau #define E1000_SVCR_OFF_TIMER_MASK	0xFFFF0000
328379ebbe7SSepherosa Ziehau #define E1000_SVCR_OFF_TIMER_SHIFT	16
329379ebbe7SSepherosa Ziehau #define E1000_SVT_OFF_HWM_MASK		0x0000001F
330379ebbe7SSepherosa Ziehau 
331*01a55482SSepherosa Ziehau #define E1000_PCI_VENDOR_ID_REGISTER	0x00
332*01a55482SSepherosa Ziehau 
3339c80d176SSepherosa Ziehau void e1000_set_kmrn_lock_loss_workaround_ich8lan(struct e1000_hw *hw,
3349c80d176SSepherosa Ziehau 						 bool state);
3359c80d176SSepherosa Ziehau void e1000_igp3_phy_powerdown_workaround_ich8lan(struct e1000_hw *hw);
3369c80d176SSepherosa Ziehau void e1000_gig_downshift_workaround_ich8lan(struct e1000_hw *hw);
3376d5e2922SSepherosa Ziehau void e1000_suspend_workarounds_ich8lan(struct e1000_hw *hw);
33874dc3754SSepherosa Ziehau u32 e1000_resume_workarounds_pchlan(struct e1000_hw *hw);
3396a5a645eSSepherosa Ziehau s32 e1000_configure_k1_ich8lan(struct e1000_hw *hw, bool k1_enable);
3406a5a645eSSepherosa Ziehau void e1000_copy_rx_addrs_to_phy_ich8lan(struct e1000_hw *hw);
3416a5a645eSSepherosa Ziehau s32 e1000_lv_jumbo_workaround_ich8lan(struct e1000_hw *hw, bool enable);
342379ebbe7SSepherosa Ziehau s32 e1000_read_emi_reg_locked(struct e1000_hw *hw, u16 addr, u16 *data);
3434765c386SMichael Neumann s32 e1000_write_emi_reg_locked(struct e1000_hw *hw, u16 addr, u16 data);
3444765c386SMichael Neumann s32 e1000_set_eee_pchlan(struct e1000_hw *hw);
3454765c386SMichael Neumann s32 e1000_enable_ulp_lpt_lp(struct e1000_hw *hw, bool to_sx);
3464765c386SMichael Neumann s32 e1000_disable_ulp_lpt_lp(struct e1000_hw *hw, bool force);
347379ebbe7SSepherosa Ziehau #endif /* _E1000_ICH8LAN_H_ */
348