From: Anatoly Burakov <anatoly.burakov@intel.com>
To: dev@dpdk.org
Cc: bruce.richardson@intel.com
Subject: [PATCH v2 01/54] net/e1000/base: copy i225 code into e1000
Date: Tue, 4 Feb 2025 15:10:07 +0000 [thread overview]
Message-ID: <13c09445b09e188bb7b20787fb296018d834a83c.1738681725.git.anatoly.burakov@intel.com> (raw)
In-Reply-To: <cover.1738681725.git.anatoly.burakov@intel.com>
Do a direct copy of i225 code into e1000 directory, replacing all symbol
and definition names with e1000_/E1000_ prefix instead of igc_/IGC_ prefix.
This is done in preparation for merging the two drivers together.
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
drivers/net/intel/e1000/base/e1000_api.c | 19 +
drivers/net/intel/e1000/base/e1000_api.h | 1 +
drivers/net/intel/e1000/base/e1000_defines.h | 175 +++-
drivers/net/intel/e1000/base/e1000_hw.h | 46 +
.../igc_i225.c => e1000/base/e1000_i225.c} | 816 +++++++++---------
drivers/net/intel/e1000/base/e1000_i225.h | 110 +++
drivers/net/intel/e1000/base/e1000_mac.c | 24 +-
drivers/net/intel/e1000/base/e1000_nvm.c | 1 +
drivers/net/intel/e1000/base/e1000_osdep.h | 6 +
drivers/net/intel/e1000/base/e1000_phy.c | 140 ++-
drivers/net/intel/e1000/base/e1000_phy.h | 17 +
drivers/net/intel/e1000/base/e1000_regs.h | 59 ++
drivers/net/intel/e1000/base/meson.build | 1 +
13 files changed, 999 insertions(+), 416 deletions(-)
copy drivers/net/intel/{igc/base/igc_i225.c => e1000/base/e1000_i225.c} (50%)
create mode 100644 drivers/net/intel/e1000/base/e1000_i225.h
diff --git a/drivers/net/intel/e1000/base/e1000_api.c b/drivers/net/intel/e1000/base/e1000_api.c
index 6697b4b64f..bd7bb73030 100644
--- a/drivers/net/intel/e1000/base/e1000_api.c
+++ b/drivers/net/intel/e1000/base/e1000_api.c
@@ -354,6 +354,22 @@ s32 e1000_set_mac_type(struct e1000_hw *hw)
case E1000_DEV_ID_82576_VF_HV:
mac->type = e1000_vfadapt;
break;
+ case E1000_DEV_ID_I225_LM:
+ case E1000_DEV_ID_I225_LMVP:
+ case E1000_DEV_ID_I225_V:
+ case E1000_DEV_ID_I225_K:
+ case E1000_DEV_ID_I225_I:
+ case E1000_DEV_ID_I225_IT:
+ case E1000_DEV_ID_I220_V:
+ case E1000_DEV_ID_I225_BLANK_NVM:
+ case E1000_DEV_ID_I226_K:
+ case E1000_DEV_ID_I226_LMVP:
+ case E1000_DEV_ID_I226_LM:
+ case E1000_DEV_ID_I226_V:
+ case E1000_DEV_ID_I226_IT:
+ case E1000_DEV_ID_I226_BLANK_NVM:
+ mac->type = e1000_i225;
+ break;
case E1000_DEV_ID_I350_VF:
case E1000_DEV_ID_I350_VF_HV:
mac->type = e1000_vfadapt_i350;
@@ -470,6 +486,9 @@ s32 e1000_setup_init_funcs(struct e1000_hw *hw, bool init_device)
case e1000_i211:
e1000_init_function_pointers_i210(hw);
break;
+ case e1000_i225:
+ e1000_init_function_pointers_i225(hw);
+ break;
case e1000_vfadapt:
e1000_init_function_pointers_vf(hw);
break;
diff --git a/drivers/net/intel/e1000/base/e1000_api.h b/drivers/net/intel/e1000/base/e1000_api.h
index 6b38e2b7bb..2466c2fd48 100644
--- a/drivers/net/intel/e1000/base/e1000_api.h
+++ b/drivers/net/intel/e1000/base/e1000_api.h
@@ -19,6 +19,7 @@ extern void e1000_init_function_pointers_vf(struct e1000_hw *hw);
extern void e1000_power_up_fiber_serdes_link(struct e1000_hw *hw);
extern void e1000_shutdown_fiber_serdes_link(struct e1000_hw *hw);
extern void e1000_init_function_pointers_i210(struct e1000_hw *hw);
+extern void e1000_init_function_pointers_i225(struct e1000_hw *hw);
s32 e1000_set_obff_timer(struct e1000_hw *hw, u32 itr);
s32 e1000_set_mac_type(struct e1000_hw *hw);
diff --git a/drivers/net/intel/e1000/base/e1000_defines.h b/drivers/net/intel/e1000/base/e1000_defines.h
index 3fbb6c8ea4..ab8eeb3f3a 100644
--- a/drivers/net/intel/e1000/base/e1000_defines.h
+++ b/drivers/net/intel/e1000/base/e1000_defines.h
@@ -188,6 +188,15 @@
#define E1000_RCTL_BSEX 0x02000000 /* Buffer size extension */
#define E1000_RCTL_SECRC 0x04000000 /* Strip Ethernet CRC */
+#define E1000_DTXMXPKTSZ_TSN 0x19 /* 1600 bytes of max TX DMA packet size */
+#define E1000_TXPBSIZE_TSN 0x04145145 /* 5k bytes buffer for each queue */
+
+/* Transmit Scheduling */
+#define E1000_TQAVCTRL_TRANSMIT_MODE_TSN 0x00000001
+#define E1000_TQAVCTRL_ENHANCED_QAV 0x00000008
+
+#define E1000_TXQCTL_QUEUE_MODE_LAUNCHT 0x00000001
+
/* Use byte values for the following shift parameters
* Usage:
* psrctl |= (((ROUNDUP(value0, 128) >> E1000_PSRCTL_BSIZE0_SHIFT) &
@@ -300,6 +309,8 @@
#define E1000_STATUS_SPEED_10 0x00000000 /* Speed 10Mb/s */
#define E1000_STATUS_SPEED_100 0x00000040 /* Speed 100Mb/s */
#define E1000_STATUS_SPEED_1000 0x00000080 /* Speed 1000Mb/s */
+/* Speed 2.5Gb/s indication for I225 */
+#define E1000_STATUS_SPEED_2500 0x00400000
#define E1000_STATUS_LAN_INIT_DONE 0x00000200 /* Lan Init Compltn by NVM */
#define E1000_STATUS_PHYRA 0x00000400 /* PHY Reset Asserted */
#define E1000_STATUS_GIO_MASTER_ENABLE 0x00080000 /* Master request status */
@@ -331,11 +342,16 @@
#define ADVERTISE_100_FULL 0x0008
#define ADVERTISE_1000_HALF 0x0010 /* Not used, just FYI */
#define ADVERTISE_1000_FULL 0x0020
+#define ADVERTISE_2500_HALF 0x0040 /* NOT used, just FYI */
+#define ADVERTISE_2500_FULL 0x0080
/* 1000/H is not supported, nor spec-compliant. */
#define E1000_ALL_SPEED_DUPLEX ( \
ADVERTISE_10_HALF | ADVERTISE_10_FULL | ADVERTISE_100_HALF | \
ADVERTISE_100_FULL | ADVERTISE_1000_FULL)
+#define E1000_ALL_SPEED_DUPLEX_2500 ( \
+ ADVERTISE_10_HALF | ADVERTISE_10_FULL | ADVERTISE_100_HALF | \
+ ADVERTISE_100_FULL | ADVERTISE_1000_FULL | ADVERTISE_2500_FULL)
#define E1000_ALL_NOT_GIG ( \
ADVERTISE_10_HALF | ADVERTISE_10_FULL | ADVERTISE_100_HALF | \
ADVERTISE_100_FULL)
@@ -344,6 +360,7 @@
#define E1000_ALL_HALF_DUPLEX (ADVERTISE_10_HALF | ADVERTISE_100_HALF)
#define AUTONEG_ADVERTISE_SPEED_DEFAULT E1000_ALL_SPEED_DUPLEX
+#define AUTONEG_ADVERTISE_SPEED_DEFAULT_2500 E1000_ALL_SPEED_DUPLEX_2500
/* LED Control */
#define E1000_PHY_LED0_MODE_MASK 0x00000007
@@ -586,6 +603,8 @@
#define E1000_IMS_VMMB E1000_ICR_VMMB /* Mail box activity */
#define E1000_IMS_RXSEQ E1000_ICR_RXSEQ /* Rx sequence error */
#define E1000_IMS_RXDMT0 E1000_ICR_RXDMT0 /* Rx desc min. threshold */
+#define E1000_QVECTOR_MASK 0x7FFC /* Q-vector mask */
+#define E1000_ITR_VAL_MASK 0x04 /* ITR value mask */
#define E1000_IMS_RXO E1000_ICR_RXO /* Rx overrun */
#define E1000_IMS_RXT0 E1000_ICR_RXT0 /* Rx timer intr */
#define E1000_IMS_TXD_LOW E1000_ICR_TXD_LOW
@@ -618,6 +637,7 @@
#define E1000_ICS_LSC E1000_ICR_LSC /* Link Status Change */
#define E1000_ICS_RXSEQ E1000_ICR_RXSEQ /* Rx sequence error */
#define E1000_ICS_RXDMT0 E1000_ICR_RXDMT0 /* Rx desc min. threshold */
+#define E1000_ICS_DRSTA E1000_ICR_DRSTA /* Device Reset Aserted */
/* Extended Interrupt Cause Set */
#define E1000_EICS_RX_QUEUE0 E1000_EICR_RX_QUEUE0 /* Rx Queue 0 Interrupt */
@@ -770,6 +790,75 @@
#define E1000_TIMINCA_INCPERIOD_SHIFT 24
#define E1000_TIMINCA_INCVALUE_MASK 0x00FFFFFF
+/* Time Sync Interrupt Cause/Mask Register Bits */
+#define TSINTR_SYS_WRAP (1 << 0) /* SYSTIM Wrap around. */
+#define TSINTR_TXTS (1 << 1) /* Transmit Timestamp. */
+#define TSINTR_TT0 (1 << 3) /* Target Time 0 Trigger. */
+#define TSINTR_TT1 (1 << 4) /* Target Time 1 Trigger. */
+#define TSINTR_AUTT0 (1 << 5) /* Auxiliary Timestamp 0 Taken. */
+#define TSINTR_AUTT1 (1 << 6) /* Auxiliary Timestamp 1 Taken. */
+
+#define TSYNC_INTERRUPTS TSINTR_TXTS
+
+/* Split Replication Receive Control */
+#define E1000_SRRCTL_TIMESTAMP 0x40000000
+#define E1000_SRRCTL_TIMER1SEL(timer) (((timer) & 0x3) << 14)
+#define E1000_SRRCTL_TIMER0SEL(timer) (((timer) & 0x3) << 17)
+
+/* Sample RX tstamp in PHY sop */
+#define E1000_TSYNCRXCTL_RXSYNSIG 0x00000400
+
+/* Sample TX tstamp in PHY sop */
+#define E1000_TSYNCTXCTL_TXSYNSIG 0x00000020
+
+/* TSAUXC Configuration Bits */
+#define TSAUXC_EN_TT0 (1 << 0) /* Enable target time 0. */
+#define TSAUXC_EN_TT1 (1 << 1) /* Enable target time 1. */
+#define TSAUXC_EN_CLK0 (1 << 2) /* Enable Configurable Frequency Clock 0. */
+#define TSAUXC_ST0 (1 << 4) /* Start Clock 0 Toggle on Target Time 0. */
+#define TSAUXC_EN_CLK1 (1 << 5) /* Enable Configurable Frequency Clock 1. */
+#define TSAUXC_ST1 (1 << 7) /* Start Clock 1 Toggle on Target Time 1. */
+#define TSAUXC_EN_TS0 (1 << 8) /* Enable hardware timestamp 0. */
+#define TSAUXC_EN_TS1 (1 << 10) /* Enable hardware timestamp 0. */
+
+/* SDP Configuration Bits */
+#define AUX0_SEL_SDP0 (0u << 0) /* Assign SDP0 to auxiliary time stamp 0. */
+#define AUX0_SEL_SDP1 (1u << 0) /* Assign SDP1 to auxiliary time stamp 0. */
+#define AUX0_SEL_SDP2 (2u << 0) /* Assign SDP2 to auxiliary time stamp 0. */
+#define AUX0_SEL_SDP3 (3u << 0) /* Assign SDP3 to auxiliary time stamp 0. */
+#define AUX0_TS_SDP_EN (1u << 2) /* Enable auxiliary time stamp trigger 0. */
+#define AUX1_SEL_SDP0 (0u << 3) /* Assign SDP0 to auxiliary time stamp 1. */
+#define AUX1_SEL_SDP1 (1u << 3) /* Assign SDP1 to auxiliary time stamp 1. */
+#define AUX1_SEL_SDP2 (2u << 3) /* Assign SDP2 to auxiliary time stamp 1. */
+#define AUX1_SEL_SDP3 (3u << 3) /* Assign SDP3 to auxiliary time stamp 1. */
+#define AUX1_TS_SDP_EN (1u << 5) /* Enable auxiliary time stamp trigger 1. */
+#define TS_SDP0_EN (1u << 8) /* SDP0 is assigned to Tsync. */
+#define TS_SDP1_EN (1u << 11) /* SDP1 is assigned to Tsync. */
+#define TS_SDP2_EN (1u << 14) /* SDP2 is assigned to Tsync. */
+#define TS_SDP3_EN (1u << 17) /* SDP3 is assigned to Tsync. */
+#define TS_SDP0_SEL_TT0 (0u << 6) /* Target time 0 is output on SDP0. */
+#define TS_SDP0_SEL_TT1 (1u << 6) /* Target time 1 is output on SDP0. */
+#define TS_SDP1_SEL_TT0 (0u << 9) /* Target time 0 is output on SDP1. */
+#define TS_SDP1_SEL_TT1 (1u << 9) /* Target time 1 is output on SDP1. */
+#define TS_SDP0_SEL_FC0 (2u << 6) /* Freq clock 0 is output on SDP0. */
+#define TS_SDP0_SEL_FC1 (3u << 6) /* Freq clock 1 is output on SDP0. */
+#define TS_SDP1_SEL_FC0 (2u << 9) /* Freq clock 0 is output on SDP1. */
+#define TS_SDP1_SEL_FC1 (3u << 9) /* Freq clock 1 is output on SDP1. */
+#define TS_SDP2_SEL_TT0 (0u << 12) /* Target time 0 is output on SDP2. */
+#define TS_SDP2_SEL_TT1 (1u << 12) /* Target time 1 is output on SDP2. */
+#define TS_SDP2_SEL_FC0 (2u << 12) /* Freq clock 0 is output on SDP2. */
+#define TS_SDP2_SEL_FC1 (3u << 12) /* Freq clock 1 is output on SDP2. */
+#define TS_SDP3_SEL_TT0 (0u << 15) /* Target time 0 is output on SDP3. */
+#define TS_SDP3_SEL_TT1 (1u << 15) /* Target time 1 is output on SDP3. */
+#define TS_SDP3_SEL_FC0 (2u << 15) /* Freq clock 0 is output on SDP3. */
+#define TS_SDP3_SEL_FC1 (3u << 15) /* Freq clock 1 is output on SDP3. */
+
+#define E1000_CTRL_SDP0_DIR 0x00400000 /* SDP0 Data direction */
+#define E1000_CTRL_SDP1_DIR 0x00800000 /* SDP1 Data direction */
+
+/* Extended Device Control */
+#define E1000_CTRL_EXT_SDP2_DIR 0x00000400 /* SDP2 Data direction */
+
/* ETQF register bit definitions */
#define E1000_ETQF_1588 (1 << 30)
#define E1000_FTQF_VF_BP 0x00008000
@@ -824,7 +913,8 @@
#define E1000_THSTAT_PWR_DOWN 0x00000001 /* Power Down Event */
#define E1000_THSTAT_LINK_THROTTLE 0x00000002 /* Link Spd Throttle Event */
-/* I350 EEE defines */
+/* EEE defines */
+#define E1000_IPCNFG_EEE_2_5G_AN 0x00000010 /* IPCNFG EEE Ena 2.5G AN */
#define E1000_IPCNFG_EEE_1G_AN 0x00000008 /* IPCNFG EEE Ena 1G AN */
#define E1000_IPCNFG_EEE_100M_AN 0x00000004 /* IPCNFG EEE Ena 100M AN */
#define E1000_EEER_TX_LPI_EN 0x00010000 /* EEER Tx LPI Enable */
@@ -854,6 +944,10 @@
#define E1000_EEE_SU_LPI_CLK_STP 0x00800000 /* EEE LPI Clock Stop */
#define E1000_EEE_LP_ADV_DEV_I210 7 /* EEE LP Adv Device */
#define E1000_EEE_LP_ADV_ADDR_I210 61 /* EEE LP Adv Register */
+#define E1000_EEE_SU_LPI_CLK_STP 0x00800000 /* EEE LPI Clock Stop */
+#define E1000_EEE_LP_ADV_DEV_I225 7 /* EEE LP Adv Device */
+#define E1000_EEE_LP_ADV_ADDR_I225 61 /* EEE LP Adv Register */
+
/* PCI Express Control */
#define E1000_GCR_RXD_NO_SNOOP 0x00000001
#define E1000_GCR_RXDSCW_NO_SNOOP 0x00000002
@@ -992,6 +1086,12 @@
#define PHY_1000T_STATUS 0x0A /* 1000Base-T Status Reg */
#define PHY_EXT_STATUS 0x0F /* Extended Status Reg */
+/* PHY GPY 211 registers */
+#define STANDARD_AN_REG_MASK 0x0007 /* MMD */
+#define ANEG_MULTIGBT_AN_CTRL 0x0020 /* MULTI GBT AN Control Register */
+#define MMD_DEVADDR_SHIFT 16 /* Shift MMD to higher bits */
+#define CR_2500T_FD_CAPS 0x0080 /* Advertise 2500T FD capability */
+
#define PHY_CONTROL_LB 0x4000 /* PHY Loopback bit */
/* NVM Control */
@@ -1038,6 +1138,15 @@
/* Firmware code revision field word offset*/
#define E1000_I210_FW_VER_OFFSET 328
+#define E1000_EECD_FLUPD_I225 0x00800000 /* Update FLASH */
+#define E1000_EECD_FLUDONE_I225 0x04000000 /* Update FLASH done */
+#define E1000_EECD_FLASH_DETECTED_I225 0x00080000 /* FLASH detected */
+#define E1000_FLUDONE_ATTEMPTS 20000
+#define E1000_EERD_EEWR_MAX_COUNT 512 /* buffered EEPROM words rw */
+#define E1000_EECD_SEC1VAL_I225 0x02000000 /* Sector One Valid */
+#define E1000_FLSECU_BLK_SW_ACCESS_I225 0x00000004 /* Block SW access */
+#define E1000_FWSM_FW_VALID_I225 0x8000 /* FW valid bit */
+
#define E1000_NVM_RW_REG_DATA 16 /* Offset to data in NVM read/write regs */
#define E1000_NVM_RW_REG_DONE 2 /* Offset to READ/WRITE done bit */
#define E1000_NVM_RW_REG_START 1 /* Start operation */
@@ -1256,6 +1365,8 @@
#define IGP04E1000_E_PHY_ID 0x02A80391
#define BCM54616_E_PHY_ID 0x03625D10
#define M88_VENDOR 0x0141
+#define I225_I_PHY_ID 0x67C9DC00
+#define I226_LM_PHY_ID 0x67C9DC10
/* M88E1000 Specific Registers */
#define M88E1000_PHY_SPEC_CTRL 0x10 /* PHY Specific Control Reg */
@@ -1378,6 +1489,8 @@
#define GG82563_PHY_INBAND_CTRL GG82563_REG(194, 18) /* Inband Ctrl */
/* MDI Control */
+#define E1000_MDIC_DATA_MASK 0x0000FFFF
+#define E1000_MDIC_INT_EN 0x20000000
#define E1000_MDIC_REG_MASK 0x001F0000
#define E1000_MDIC_REG_SHIFT 16
#define E1000_MDIC_PHY_MASK 0x03E00000
@@ -1388,6 +1501,14 @@
#define E1000_MDIC_ERROR 0x40000000
#define E1000_MDIC_DEST 0x80000000
+#define E1000_N0_QUEUE -1
+
+#define E1000_MAX_MAC_HDR_LEN 127
+#define E1000_MAX_NETWORK_HDR_LEN 511
+
+#define E1000_VLAPQF_QUEUE_SEL(_n, q_idx) ((q_idx) << ((_n) * 4))
+#define E1000_VLAPQF_P_VALID(_n) (0x1 << (3 + (_n) * 4))
+#define E1000_VLAPQF_QUEUE_MASK 0x03
#define E1000_VFTA_BLOCK_SIZE 8
/* SerDes Control */
#define E1000_GEN_CTL_READY 0x80000000
@@ -1464,6 +1585,57 @@
#define I210_TXPBSIZE_DEFAULT 0x04000014 /* TXPBSIZE default */
+#define I225_RXPBSIZE_DEFAULT 0x000000A2 /* RXPBSIZE default */
+#define I225_TXPBSIZE_DEFAULT 0x04000014 /* TXPBSIZE default */
+#define E1000_RXPBS_SIZE_I225_MASK 0x0000003F /* Rx packet buffer size */
+#define E1000_TXPB0S_SIZE_I225_MASK 0x0000003F /* Tx packet buffer 0 size */
+#define E1000_STM_OPCODE 0xDB00
+#define E1000_EEPROM_FLASH_SIZE_WORD 0x11
+#define INVM_DWORD_TO_RECORD_TYPE(invm_dword) \
+ (u8)((invm_dword) & 0x7)
+#define INVM_DWORD_TO_WORD_ADDRESS(invm_dword) \
+ (u8)(((invm_dword) & 0x0000FE00) >> 9)
+#define INVM_DWORD_TO_WORD_DATA(invm_dword) \
+ (u16)(((invm_dword) & 0xFFFF0000) >> 16)
+#define E1000_INVM_RSA_KEY_SHA256_DATA_SIZE_IN_DWORDS 8
+#define E1000_INVM_CSR_AUTOLOAD_DATA_SIZE_IN_DWORDS 1
+#define E1000_INVM_ULT_BYTES_SIZE 8
+#define E1000_INVM_RECORD_SIZE_IN_BYTES 4
+#define E1000_INVM_VER_FIELD_ONE 0x1FF8
+#define E1000_INVM_VER_FIELD_TWO 0x7FE000
+#define E1000_INVM_IMGTYPE_FIELD 0x1F800000
+
+#define E1000_INVM_MAJOR_MASK 0x3F0
+#define E1000_INVM_MINOR_MASK 0xF
+#define E1000_INVM_MAJOR_SHIFT 4
+
+/* PLL Defines */
+#define E1000_PCI_PMCSR 0x44
+#define E1000_PCI_PMCSR_D3 0x03
+#define E1000_MAX_PLL_TRIES 5
+#define E1000_PHY_PLL_UNCONF 0xFF
+#define E1000_PHY_PLL_FREQ_PAGE 0xFC0000
+#define E1000_PHY_PLL_FREQ_REG 0x000E
+#define E1000_INVM_DEFAULT_AL 0x202F
+#define E1000_INVM_AUTOLOAD 0x0A
+#define E1000_INVM_PLL_WO_VAL 0x0010
+
+/* Proxy Filter Control Extended */
+#define E1000_PROXYFCEX_MDNS 0x00000001 /* mDNS */
+#define E1000_PROXYFCEX_MDNS_M 0x00000002 /* mDNS Multicast */
+#define E1000_PROXYFCEX_MDNS_U 0x00000004 /* mDNS Unicast */
+#define E1000_PROXYFCEX_IPV4_M 0x00000008 /* IPv4 Multicast */
+#define E1000_PROXYFCEX_IPV6_M 0x00000010 /* IPv6 Multicast */
+#define E1000_PROXYFCEX_IGMP 0x00000020 /* IGMP */
+#define E1000_PROXYFCEX_IGMP_M 0x00000040 /* IGMP Multicast */
+#define E1000_PROXYFCEX_ARPRES 0x00000080 /* ARP Response */
+#define E1000_PROXYFCEX_ARPRES_D 0x00000100 /* ARP Response Directed */
+#define E1000_PROXYFCEX_ICMPV4 0x00000200 /* ICMPv4 */
+#define E1000_PROXYFCEX_ICMPV4_D 0x00000400 /* ICMPv4 Directed */
+#define E1000_PROXYFCEX_ICMPV6 0x00000800 /* ICMPv6 */
+#define E1000_PROXYFCEX_ICMPV6_D 0x00001000 /* ICMPv6 Directed */
+#define E1000_PROXYFCEX_DNS 0x00002000 /* DNS */
+
/* Proxy Filter Control */
#define E1000_PROXYFC_D0 0x00000001 /* Enable offload in D0 */
#define E1000_PROXYFC_EX 0x00000004 /* Directed exact proxy */
@@ -1473,6 +1645,7 @@
#define E1000_PROXYFC_IPV4 0x00000040 /* Directed IPv4 Enable */
#define E1000_PROXYFC_IPV6 0x00000080 /* Directed IPv6 Enable */
#define E1000_PROXYFC_NS 0x00000200 /* IPv6 Neighbor Solicitation */
+#define E1000_PROXYFC_NS_DIRECTED 0x00000400 /* Directed NS Proxy Ena */
#define E1000_PROXYFC_ARP 0x00000800 /* ARP Request Proxy Ena */
/* Proxy Status */
#define E1000_PROXYS_CLEAR 0xFFFFFFFF /* Clear */
diff --git a/drivers/net/intel/e1000/base/e1000_hw.h b/drivers/net/intel/e1000/base/e1000_hw.h
index c7e6903ecc..e341c9fe68 100644
--- a/drivers/net/intel/e1000/base/e1000_hw.h
+++ b/drivers/net/intel/e1000/base/e1000_hw.h
@@ -168,6 +168,20 @@ struct e1000_hw;
#define E1000_DEV_ID_I210_SERDES_FLASHLESS 0x157C
#define E1000_DEV_ID_I210_SGMII_FLASHLESS 0x15F6
#define E1000_DEV_ID_I211_COPPER 0x1539
+#define E1000_DEV_ID_I225_LM 0x15F2
+#define E1000_DEV_ID_I225_LMVP 0x5502
+#define E1000_DEV_ID_I225_V 0x15F3
+#define E1000_DEV_ID_I225_K 0x3100
+#define E1000_DEV_ID_I225_I 0x15F8
+#define E1000_DEV_ID_I225_IT 0x0D9F
+#define E1000_DEV_ID_I220_V 0x15F7
+#define E1000_DEV_ID_I225_BLANK_NVM 0x15FD
+#define E1000_DEV_ID_I226_K 0x3102
+#define E1000_DEV_ID_I226_LMVP 0x5503
+#define E1000_DEV_ID_I226_LM 0x125B
+#define E1000_DEV_ID_I226_V 0x125C
+#define E1000_DEV_ID_I226_IT 0x125D
+#define E1000_DEV_ID_I226_BLANK_NVM 0x125F
#define E1000_DEV_ID_I354_BACKPLANE_1GBPS 0x1F40
#define E1000_DEV_ID_I354_SGMII 0x1F41
#define E1000_DEV_ID_I354_BACKPLANE_2_5GBPS 0x1F45
@@ -229,6 +243,7 @@ enum e1000_mac_type {
e1000_i354,
e1000_i210,
e1000_i211,
+ e1000_i225,
e1000_vfadapt,
e1000_vfadapt_i350,
e1000_num_macs /* List is 1-based, so subtract 1 for true count. */
@@ -277,6 +292,7 @@ enum e1000_phy_type {
e1000_phy_82580,
e1000_phy_vf,
e1000_phy_i210,
+ e1000_phy_i225,
};
enum e1000_bus_type {
@@ -363,6 +379,15 @@ enum e1000_serdes_link_state {
e1000_serdes_link_forced_up
};
+enum e1000_invm_structure_type {
+ e1000_invm_uninitialized_structure = 0x00,
+ e1000_invm_word_autoload_structure = 0x01,
+ e1000_invm_csr_autoload_structure = 0x02,
+ e1000_invm_phy_register_autoload_structure = 0x03,
+ e1000_invm_rsa_key_sha256_structure = 0x04,
+ e1000_invm_invalidated_structure = 0x0f,
+};
+
#define __le16 u16
#define __le32 u32
#define __le64 u64
@@ -762,6 +787,15 @@ struct e1000_nvm_operations {
s32 (*write)(struct e1000_hw *, u16, u16, u16 *);
};
+struct e1000_info {
+ s32 (*get_invariants)(struct e1000_hw *hw);
+ struct e1000_mac_operations *mac_ops;
+ const struct e1000_phy_operations *phy_ops;
+ struct e1000_nvm_operations *nvm_ops;
+};
+
+extern const struct e1000_info e1000_i225_info;
+
struct e1000_mac_info {
struct e1000_mac_operations ops;
u8 addr[ETH_ADDR_LEN];
@@ -978,6 +1012,16 @@ struct e1000_dev_spec_vf {
u32 v2p_mailbox;
};
+struct e1000_dev_spec_i225 {
+ bool global_device_reset;
+ bool eee_disable;
+ bool clear_semaphore_once;
+ bool module_plugged;
+ u8 media_port;
+ bool mas_capable;
+ u32 mtu;
+};
+
struct e1000_hw {
void *back;
@@ -1002,6 +1046,7 @@ struct e1000_hw {
struct e1000_dev_spec_ich8lan ich8lan;
struct e1000_dev_spec_82575 _82575;
struct e1000_dev_spec_vf vf;
+ struct e1000_dev_spec_i225 _i225;
} dev_spec;
u16 device_id;
@@ -1019,6 +1064,7 @@ struct e1000_hw {
#include "e1000_ich8lan.h"
#include "e1000_82575.h"
#include "e1000_i210.h"
+#include "e1000_i225.h"
#include "e1000_base.h"
/* These functions must be implemented by drivers */
diff --git a/drivers/net/intel/igc/base/igc_i225.c b/drivers/net/intel/e1000/base/e1000_i225.c
similarity index 50%
copy from drivers/net/intel/igc/base/igc_i225.c
copy to drivers/net/intel/e1000/base/e1000_i225.c
index 17a1573064..018b22210e 100644
--- a/drivers/net/intel/igc/base/igc_i225.c
+++ b/drivers/net/intel/e1000/base/e1000_i225.c
@@ -2,34 +2,34 @@
* Copyright(c) 2001-2020 Intel Corporation
*/
-#include "igc_api.h"
+#include "e1000_api.h"
-static s32 igc_init_nvm_params_i225(struct igc_hw *hw);
-static s32 igc_init_mac_params_i225(struct igc_hw *hw);
-static s32 igc_init_phy_params_i225(struct igc_hw *hw);
-static s32 igc_reset_hw_i225(struct igc_hw *hw);
-static s32 igc_acquire_nvm_i225(struct igc_hw *hw);
-static void igc_release_nvm_i225(struct igc_hw *hw);
-static s32 igc_get_hw_semaphore_i225(struct igc_hw *hw);
-static s32 __igc_write_nvm_srwr(struct igc_hw *hw, u16 offset, u16 words,
+static s32 e1000_init_nvm_params_i225(struct e1000_hw *hw);
+static s32 e1000_init_mac_params_i225(struct e1000_hw *hw);
+static s32 e1000_init_phy_params_i225(struct e1000_hw *hw);
+static s32 e1000_reset_hw_i225(struct e1000_hw *hw);
+static s32 e1000_acquire_nvm_i225(struct e1000_hw *hw);
+static void e1000_release_nvm_i225(struct e1000_hw *hw);
+static s32 e1000_get_hw_semaphore_i225(struct e1000_hw *hw);
+static s32 __e1000_write_nvm_srwr(struct e1000_hw *hw, u16 offset, u16 words,
u16 *data);
-static s32 igc_pool_flash_update_done_i225(struct igc_hw *hw);
-static s32 igc_valid_led_default_i225(struct igc_hw *hw, u16 *data);
+static s32 e1000_pool_flash_update_done_i225(struct e1000_hw *hw);
+static s32 e1000_valid_led_default_i225(struct e1000_hw *hw, u16 *data);
/**
- * igc_init_nvm_params_i225 - Init NVM func ptrs.
+ * e1000_init_nvm_params_i225 - Init NVM func ptrs.
* @hw: pointer to the HW structure
**/
-static s32 igc_init_nvm_params_i225(struct igc_hw *hw)
+static s32 e1000_init_nvm_params_i225(struct e1000_hw *hw)
{
- struct igc_nvm_info *nvm = &hw->nvm;
- u32 eecd = IGC_READ_REG(hw, IGC_EECD);
+ struct e1000_nvm_info *nvm = &hw->nvm;
+ u32 eecd = E1000_READ_REG(hw, E1000_EECD);
u16 size;
- DEBUGFUNC("igc_init_nvm_params_i225");
+ DEBUGFUNC("e1000_init_nvm_params_i225");
- size = (u16)((eecd & IGC_EECD_SIZE_EX_MASK) >>
- IGC_EECD_SIZE_EX_SHIFT);
+ size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >>
+ E1000_EECD_SIZE_EX_SHIFT);
/*
* Added to a constant, "size" becomes the left-shift value
* for setting word_size.
@@ -45,122 +45,122 @@ static s32 igc_init_nvm_params_i225(struct igc_hw *hw)
nvm->word_size = 1 << size;
nvm->opcode_bits = 8;
nvm->delay_usec = 1;
- nvm->type = igc_nvm_eeprom_spi;
+ nvm->type = e1000_nvm_eeprom_spi;
- nvm->page_size = eecd & IGC_EECD_ADDR_BITS ? 32 : 8;
- nvm->address_bits = eecd & IGC_EECD_ADDR_BITS ?
+ nvm->page_size = eecd & E1000_EECD_ADDR_BITS ? 32 : 8;
+ nvm->address_bits = eecd & E1000_EECD_ADDR_BITS ?
16 : 8;
if (nvm->word_size == (1 << 15))
nvm->page_size = 128;
- nvm->ops.acquire = igc_acquire_nvm_i225;
- nvm->ops.release = igc_release_nvm_i225;
- nvm->ops.valid_led_default = igc_valid_led_default_i225;
- if (igc_get_flash_presence_i225(hw)) {
- hw->nvm.type = igc_nvm_flash_hw;
- nvm->ops.read = igc_read_nvm_srrd_i225;
- nvm->ops.write = igc_write_nvm_srwr_i225;
- nvm->ops.validate = igc_validate_nvm_checksum_i225;
- nvm->ops.update = igc_update_nvm_checksum_i225;
+ nvm->ops.acquire = e1000_acquire_nvm_i225;
+ nvm->ops.release = e1000_release_nvm_i225;
+ nvm->ops.valid_led_default = e1000_valid_led_default_i225;
+ if (e1000_get_flash_presence_i225(hw)) {
+ hw->nvm.type = e1000_nvm_flash_hw;
+ nvm->ops.read = e1000_read_nvm_srrd_i225;
+ nvm->ops.write = e1000_write_nvm_srwr_i225;
+ nvm->ops.validate = e1000_validate_nvm_checksum_i225;
+ nvm->ops.update = e1000_update_nvm_checksum_i225;
} else {
- hw->nvm.type = igc_nvm_invm;
- nvm->ops.write = igc_null_write_nvm;
- nvm->ops.validate = igc_null_ops_generic;
- nvm->ops.update = igc_null_ops_generic;
+ hw->nvm.type = e1000_nvm_invm;
+ nvm->ops.write = e1000_null_write_nvm;
+ nvm->ops.validate = e1000_null_ops_generic;
+ nvm->ops.update = e1000_null_ops_generic;
}
- return IGC_SUCCESS;
+ return E1000_SUCCESS;
}
/**
- * igc_init_mac_params_i225 - Init MAC func ptrs.
+ * e1000_init_mac_params_i225 - Init MAC func ptrs.
* @hw: pointer to the HW structure
**/
-static s32 igc_init_mac_params_i225(struct igc_hw *hw)
+static s32 e1000_init_mac_params_i225(struct e1000_hw *hw)
{
- struct igc_mac_info *mac = &hw->mac;
- struct igc_dev_spec_i225 *dev_spec = &hw->dev_spec._i225;
+ struct e1000_mac_info *mac = &hw->mac;
+ struct e1000_dev_spec_i225 *dev_spec = &hw->dev_spec._i225;
- DEBUGFUNC("igc_init_mac_params_i225");
+ DEBUGFUNC("e1000_init_mac_params_i225");
/* Initialize function pointer */
- igc_init_mac_ops_generic(hw);
+ e1000_init_mac_ops_generic(hw);
/* Set media type */
- hw->phy.media_type = igc_media_type_copper;
+ hw->phy.media_type = e1000_media_type_copper;
/* Set mta register count */
mac->mta_reg_count = 128;
/* Set rar entry count */
- mac->rar_entry_count = IGC_RAR_ENTRIES_BASE;
+ mac->rar_entry_count = E1000_RAR_ENTRIES_BASE;
/* reset */
- mac->ops.reset_hw = igc_reset_hw_i225;
+ mac->ops.reset_hw = e1000_reset_hw_i225;
/* hw initialization */
- mac->ops.init_hw = igc_init_hw_i225;
+ mac->ops.init_hw = e1000_init_hw_i225;
/* link setup */
- mac->ops.setup_link = igc_setup_link_generic;
+ mac->ops.setup_link = e1000_setup_link_generic;
/* check for link */
- mac->ops.check_for_link = igc_check_for_link_i225;
+ mac->ops.check_for_link = e1000_check_for_link_i225;
/* link info */
- mac->ops.get_link_up_info = igc_get_speed_and_duplex_copper_generic;
+ mac->ops.get_link_up_info = e1000_get_speed_and_duplex_copper_generic;
/* acquire SW_FW sync */
- mac->ops.acquire_swfw_sync = igc_acquire_swfw_sync_i225;
+ mac->ops.acquire_swfw_sync = e1000_acquire_swfw_sync_i225;
/* release SW_FW sync */
- mac->ops.release_swfw_sync = igc_release_swfw_sync_i225;
+ mac->ops.release_swfw_sync = e1000_release_swfw_sync_i225;
/* Allow a single clear of the SW semaphore on I225 */
dev_spec->clear_semaphore_once = true;
- mac->ops.setup_physical_interface = igc_setup_copper_link_i225;
+ mac->ops.setup_physical_interface = e1000_setup_copper_link_i225;
/* Set if part includes ASF firmware */
mac->asf_firmware_present = true;
/* multicast address update */
- mac->ops.update_mc_addr_list = igc_update_mc_addr_list_generic;
+ mac->ops.update_mc_addr_list = e1000_update_mc_addr_list_generic;
- mac->ops.write_vfta = igc_write_vfta_generic;
+ mac->ops.write_vfta = e1000_write_vfta_generic;
/* Disable EEE by default */
dev_spec->eee_disable = true;
- return IGC_SUCCESS;
+ return E1000_SUCCESS;
}
/**
- * igc_init_phy_params_i225 - Init PHY func ptrs.
+ * e1000_init_phy_params_i225 - Init PHY func ptrs.
* @hw: pointer to the HW structure
**/
-static s32 igc_init_phy_params_i225(struct igc_hw *hw)
+static s32 e1000_init_phy_params_i225(struct e1000_hw *hw)
{
- struct igc_phy_info *phy = &hw->phy;
- s32 ret_val = IGC_SUCCESS;
+ struct e1000_phy_info *phy = &hw->phy;
+ s32 ret_val = E1000_SUCCESS;
u32 ctrl_ext;
- DEBUGFUNC("igc_init_phy_params_i225");
+ DEBUGFUNC("e1000_init_phy_params_i225");
- phy->ops.read_i2c_byte = igc_read_i2c_byte_generic;
- phy->ops.write_i2c_byte = igc_write_i2c_byte_generic;
+ phy->ops.read_i2c_byte = e1000_read_i2c_byte_generic;
+ phy->ops.write_i2c_byte = e1000_write_i2c_byte_generic;
- if (hw->phy.media_type != igc_media_type_copper) {
- phy->type = igc_phy_none;
+ if (hw->phy.media_type != e1000_media_type_copper) {
+ phy->type = e1000_phy_none;
goto out;
}
- phy->ops.power_up = igc_power_up_phy_copper;
- phy->ops.power_down = igc_power_down_phy_copper_base;
+ phy->ops.power_up = e1000_power_up_phy_copper;
+ phy->ops.power_down = e1000_power_down_phy_copper_base;
phy->autoneg_mask = AUTONEG_ADVERTISE_SPEED_DEFAULT_2500;
phy->reset_delay_us = 100;
- phy->ops.acquire = igc_acquire_phy_base;
- phy->ops.check_reset_block = igc_check_reset_block_generic;
- phy->ops.commit = igc_phy_sw_reset_generic;
- phy->ops.release = igc_release_phy_base;
+ phy->ops.acquire = e1000_acquire_phy_base;
+ phy->ops.check_reset_block = e1000_check_reset_block_generic;
+ phy->ops.commit = e1000_phy_sw_reset_generic;
+ phy->ops.release = e1000_release_phy_base;
- ctrl_ext = IGC_READ_REG(hw, IGC_CTRL_EXT);
+ ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
/* Make sure the PHY is in a good state. Several people have reported
* firmware leaving the PHY's page select register set to something
@@ -171,12 +171,12 @@ static s32 igc_init_phy_params_i225(struct igc_hw *hw)
if (ret_val)
goto out;
- IGC_WRITE_REG(hw, IGC_CTRL_EXT, ctrl_ext);
- phy->ops.read_reg = igc_read_phy_reg_gpy;
- phy->ops.write_reg = igc_write_phy_reg_gpy;
+ E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
+ phy->ops.read_reg = e1000_read_phy_reg_gpy;
+ phy->ops.write_reg = e1000_write_phy_reg_gpy;
- ret_val = igc_get_phy_id(hw);
- phy->type = igc_phy_i225;
+ ret_val = e1000_get_phy_id(hw);
+ phy->type = e1000_phy_i225;
out:
@@ -184,41 +184,41 @@ static s32 igc_init_phy_params_i225(struct igc_hw *hw)
}
/**
- * igc_reset_hw_i225 - Reset hardware
+ * e1000_reset_hw_i225 - Reset hardware
* @hw: pointer to the HW structure
*
* This resets the hardware into a known state.
**/
-static s32 igc_reset_hw_i225(struct igc_hw *hw)
+static s32 e1000_reset_hw_i225(struct e1000_hw *hw)
{
u32 ctrl;
s32 ret_val;
- DEBUGFUNC("igc_reset_hw_i225");
+ DEBUGFUNC("e1000_reset_hw_i225");
/*
* Prevent the PCI-E bus from sticking if there is no TLP connection
* on the last TLP read/write transaction when MAC is reset.
*/
- ret_val = igc_disable_pcie_master_generic(hw);
+ ret_val = e1000_disable_pcie_master_generic(hw);
if (ret_val)
DEBUGOUT("PCI-E Master disable polling has failed.\n");
DEBUGOUT("Masking off all interrupts\n");
- IGC_WRITE_REG(hw, IGC_IMC, 0xffffffff);
+ E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
- IGC_WRITE_REG(hw, IGC_RCTL, 0);
- IGC_WRITE_REG(hw, IGC_TCTL, IGC_TCTL_PSP);
- IGC_WRITE_FLUSH(hw);
+ E1000_WRITE_REG(hw, E1000_RCTL, 0);
+ E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP);
+ E1000_WRITE_FLUSH(hw);
msec_delay(10);
- ctrl = IGC_READ_REG(hw, IGC_CTRL);
+ ctrl = E1000_READ_REG(hw, E1000_CTRL);
DEBUGOUT("Issuing a global reset to MAC\n");
- IGC_WRITE_REG(hw, IGC_CTRL, ctrl | IGC_CTRL_RST);
+ E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_RST);
- ret_val = igc_get_auto_rd_done_generic(hw);
+ ret_val = e1000_get_auto_rd_done_generic(hw);
if (ret_val) {
/*
* When auto config read does not complete, do not
@@ -229,167 +229,167 @@ static s32 igc_reset_hw_i225(struct igc_hw *hw)
}
/* Clear any pending interrupt events. */
- IGC_WRITE_REG(hw, IGC_IMC, 0xffffffff);
- IGC_READ_REG(hw, IGC_ICR);
+ E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
+ E1000_READ_REG(hw, E1000_ICR);
/* Install any alternate MAC address into RAR0 */
- ret_val = igc_check_alt_mac_addr_generic(hw);
+ ret_val = e1000_check_alt_mac_addr_generic(hw);
return ret_val;
}
-/* igc_acquire_nvm_i225 - Request for access to EEPROM
+/* e1000_acquire_nvm_i225 - Request for access to EEPROM
* @hw: pointer to the HW structure
*
* Acquire the necessary semaphores for exclusive access to the EEPROM.
* Set the EEPROM access request bit and wait for EEPROM access grant bit.
* Return successful if access grant bit set, else clear the request for
- * EEPROM access and return -IGC_ERR_NVM (-1).
+ * EEPROM access and return -E1000_ERR_NVM (-1).
*/
-static s32 igc_acquire_nvm_i225(struct igc_hw *hw)
+static s32 e1000_acquire_nvm_i225(struct e1000_hw *hw)
{
s32 ret_val;
- DEBUGFUNC("igc_acquire_nvm_i225");
+ DEBUGFUNC("e1000_acquire_nvm_i225");
- ret_val = igc_acquire_swfw_sync_i225(hw, IGC_SWFW_EEP_SM);
+ ret_val = e1000_acquire_swfw_sync_i225(hw, E1000_SWFW_EEP_SM);
return ret_val;
}
-/* igc_release_nvm_i225 - Release exclusive access to EEPROM
+/* e1000_release_nvm_i225 - Release exclusive access to EEPROM
* @hw: pointer to the HW structure
*
* Stop any current commands to the EEPROM and clear the EEPROM request bit,
* then release the semaphores acquired.
*/
-static void igc_release_nvm_i225(struct igc_hw *hw)
+static void e1000_release_nvm_i225(struct e1000_hw *hw)
{
- DEBUGFUNC("igc_release_nvm_i225");
+ DEBUGFUNC("e1000_release_nvm_i225");
- igc_release_swfw_sync_i225(hw, IGC_SWFW_EEP_SM);
+ e1000_release_swfw_sync_i225(hw, E1000_SWFW_EEP_SM);
}
-/* igc_acquire_swfw_sync_i225 - Acquire SW/FW semaphore
+/* e1000_acquire_swfw_sync_i225 - Acquire SW/FW semaphore
* @hw: pointer to the HW structure
* @mask: specifies which semaphore to acquire
*
* Acquire the SW/FW semaphore to access the PHY or NVM. The mask
* will also specify which port we're acquiring the lock for.
*/
-s32 igc_acquire_swfw_sync_i225(struct igc_hw *hw, u16 mask)
+s32 e1000_acquire_swfw_sync_i225(struct e1000_hw *hw, u16 mask)
{
u32 swfw_sync;
u32 swmask = mask;
u32 fwmask = mask << 16;
- s32 ret_val = IGC_SUCCESS;
+ s32 ret_val = E1000_SUCCESS;
s32 i = 0, timeout = 200; /* FIXME: find real value to use here */
- DEBUGFUNC("igc_acquire_swfw_sync_i225");
+ DEBUGFUNC("e1000_acquire_swfw_sync_i225");
while (i < timeout) {
- if (igc_get_hw_semaphore_i225(hw)) {
- ret_val = -IGC_ERR_SWFW_SYNC;
+ if (e1000_get_hw_semaphore_i225(hw)) {
+ ret_val = -E1000_ERR_SWFW_SYNC;
goto out;
}
- swfw_sync = IGC_READ_REG(hw, IGC_SW_FW_SYNC);
+ swfw_sync = E1000_READ_REG(hw, E1000_SW_FW_SYNC);
if (!(swfw_sync & (fwmask | swmask)))
break;
/* Firmware currently using resource (fwmask)
* or other software thread using resource (swmask)
*/
- igc_put_hw_semaphore_generic(hw);
+ e1000_put_hw_semaphore_generic(hw);
msec_delay_irq(5);
i++;
}
if (i == timeout) {
DEBUGOUT("Driver can't access resource, SW_FW_SYNC timeout.\n");
- ret_val = -IGC_ERR_SWFW_SYNC;
+ ret_val = -E1000_ERR_SWFW_SYNC;
goto out;
}
swfw_sync |= swmask;
- IGC_WRITE_REG(hw, IGC_SW_FW_SYNC, swfw_sync);
+ E1000_WRITE_REG(hw, E1000_SW_FW_SYNC, swfw_sync);
- igc_put_hw_semaphore_generic(hw);
+ e1000_put_hw_semaphore_generic(hw);
out:
return ret_val;
}
-/* igc_release_swfw_sync_i225 - Release SW/FW semaphore
+/* e1000_release_swfw_sync_i225 - Release SW/FW semaphore
* @hw: pointer to the HW structure
* @mask: specifies which semaphore to acquire
*
* Release the SW/FW semaphore used to access the PHY or NVM. The mask
* will also specify which port we're releasing the lock for.
*/
-void igc_release_swfw_sync_i225(struct igc_hw *hw, u16 mask)
+void e1000_release_swfw_sync_i225(struct e1000_hw *hw, u16 mask)
{
u32 swfw_sync;
- DEBUGFUNC("igc_release_swfw_sync_i225");
+ DEBUGFUNC("e1000_release_swfw_sync_i225");
- while (igc_get_hw_semaphore_i225(hw) != IGC_SUCCESS)
+ while (e1000_get_hw_semaphore_i225(hw) != E1000_SUCCESS)
; /* Empty */
- swfw_sync = IGC_READ_REG(hw, IGC_SW_FW_SYNC);
+ swfw_sync = E1000_READ_REG(hw, E1000_SW_FW_SYNC);
swfw_sync &= ~mask;
- IGC_WRITE_REG(hw, IGC_SW_FW_SYNC, swfw_sync);
+ E1000_WRITE_REG(hw, E1000_SW_FW_SYNC, swfw_sync);
- igc_put_hw_semaphore_generic(hw);
+ e1000_put_hw_semaphore_generic(hw);
}
/*
- * igc_setup_copper_link_i225 - Configure copper link settings
+ * e1000_setup_copper_link_i225 - Configure copper link settings
* @hw: pointer to the HW structure
*
* Configures the link for auto-neg or forced speed and duplex. Then we check
* for link, once link is established calls to configure collision distance
* and flow control are called.
*/
-s32 igc_setup_copper_link_i225(struct igc_hw *hw)
+s32 e1000_setup_copper_link_i225(struct e1000_hw *hw)
{
u32 phpm_reg;
s32 ret_val;
u32 ctrl;
- DEBUGFUNC("igc_setup_copper_link_i225");
+ DEBUGFUNC("e1000_setup_copper_link_i225");
- ctrl = IGC_READ_REG(hw, IGC_CTRL);
- ctrl |= IGC_CTRL_SLU;
- ctrl &= ~(IGC_CTRL_FRCSPD | IGC_CTRL_FRCDPX);
- IGC_WRITE_REG(hw, IGC_CTRL, ctrl);
+ ctrl = E1000_READ_REG(hw, E1000_CTRL);
+ ctrl |= E1000_CTRL_SLU;
+ ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
+ E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
- phpm_reg = IGC_READ_REG(hw, IGC_I225_PHPM);
- phpm_reg &= ~IGC_I225_PHPM_GO_LINKD;
- IGC_WRITE_REG(hw, IGC_I225_PHPM, phpm_reg);
+ phpm_reg = E1000_READ_REG(hw, E1000_I225_PHPM);
+ phpm_reg &= ~E1000_I225_PHPM_GO_LINKD;
+ E1000_WRITE_REG(hw, E1000_I225_PHPM, phpm_reg);
- ret_val = igc_setup_copper_link_generic(hw);
+ ret_val = e1000_setup_copper_link_generic(hw);
return ret_val;
}
-/* igc_get_hw_semaphore_i225 - Acquire hardware semaphore
+/* e1000_get_hw_semaphore_i225 - Acquire hardware semaphore
* @hw: pointer to the HW structure
*
* Acquire the HW semaphore to access the PHY or NVM
*/
-static s32 igc_get_hw_semaphore_i225(struct igc_hw *hw)
+static s32 e1000_get_hw_semaphore_i225(struct e1000_hw *hw)
{
u32 swsm;
s32 timeout = hw->nvm.word_size + 1;
s32 i = 0;
- DEBUGFUNC("igc_get_hw_semaphore_i225");
+ DEBUGFUNC("e1000_get_hw_semaphore_i225");
/* Get the SW semaphore */
while (i < timeout) {
- swsm = IGC_READ_REG(hw, IGC_SWSM);
- if (!(swsm & IGC_SWSM_SMBI))
+ swsm = E1000_READ_REG(hw, E1000_SWSM);
+ if (!(swsm & E1000_SWSM_SMBI))
break;
usec_delay(50);
@@ -402,10 +402,10 @@ static s32 igc_get_hw_semaphore_i225(struct igc_hw *hw)
*/
if (hw->dev_spec._i225.clear_semaphore_once) {
hw->dev_spec._i225.clear_semaphore_once = false;
- igc_put_hw_semaphore_generic(hw);
+ e1000_put_hw_semaphore_generic(hw);
for (i = 0; i < timeout; i++) {
- swsm = IGC_READ_REG(hw, IGC_SWSM);
- if (!(swsm & IGC_SWSM_SMBI))
+ swsm = E1000_READ_REG(hw, E1000_SWSM);
+ if (!(swsm & E1000_SWSM_SMBI))
break;
usec_delay(50);
@@ -416,17 +416,17 @@ static s32 igc_get_hw_semaphore_i225(struct igc_hw *hw)
if (i == timeout) {
DEBUGOUT("Driver can't access device -\n");
DEBUGOUT("SMBI bit is set.\n");
- return -IGC_ERR_NVM;
+ return -E1000_ERR_NVM;
}
}
/* Get the FW semaphore. */
for (i = 0; i < timeout; i++) {
- swsm = IGC_READ_REG(hw, IGC_SWSM);
- IGC_WRITE_REG(hw, IGC_SWSM, swsm | IGC_SWSM_SWESMBI);
+ swsm = E1000_READ_REG(hw, E1000_SWSM);
+ E1000_WRITE_REG(hw, E1000_SWSM, swsm | E1000_SWSM_SWESMBI);
/* Semaphore acquired if bit latched */
- if (IGC_READ_REG(hw, IGC_SWSM) & IGC_SWSM_SWESMBI)
+ if (E1000_READ_REG(hw, E1000_SWSM) & E1000_SWSM_SWESMBI)
break;
usec_delay(50);
@@ -434,15 +434,15 @@ static s32 igc_get_hw_semaphore_i225(struct igc_hw *hw)
if (i == timeout) {
/* Release semaphores */
- igc_put_hw_semaphore_generic(hw);
+ e1000_put_hw_semaphore_generic(hw);
DEBUGOUT("Driver can't access the NVM\n");
- return -IGC_ERR_NVM;
+ return -E1000_ERR_NVM;
}
- return IGC_SUCCESS;
+ return E1000_SUCCESS;
}
-/* igc_read_nvm_srrd_i225 - Reads Shadow Ram using EERD register
+/* e1000_read_nvm_srrd_i225 - Reads Shadow Ram using EERD register
* @hw: pointer to the HW structure
* @offset: offset of word in the Shadow Ram to read
* @words: number of words to read
@@ -451,37 +451,37 @@ static s32 igc_get_hw_semaphore_i225(struct igc_hw *hw)
* Reads a 16 bit word from the Shadow Ram using the EERD register.
* Uses necessary synchronization semaphores.
*/
-s32 igc_read_nvm_srrd_i225(struct igc_hw *hw, u16 offset, u16 words,
+s32 e1000_read_nvm_srrd_i225(struct e1000_hw *hw, u16 offset, u16 words,
u16 *data)
{
- s32 status = IGC_SUCCESS;
+ s32 status = E1000_SUCCESS;
u16 i, count;
- DEBUGFUNC("igc_read_nvm_srrd_i225");
+ DEBUGFUNC("e1000_read_nvm_srrd_i225");
/* We cannot hold synchronization semaphores for too long,
* because of forceful takeover procedure. However it is more efficient
* to read in bursts than synchronizing access for each word.
*/
- for (i = 0; i < words; i += IGC_EERD_EEWR_MAX_COUNT) {
- count = (words - i) / IGC_EERD_EEWR_MAX_COUNT > 0 ?
- IGC_EERD_EEWR_MAX_COUNT : (words - i);
- if (hw->nvm.ops.acquire(hw) == IGC_SUCCESS) {
- status = igc_read_nvm_eerd(hw, offset, count,
+ for (i = 0; i < words; i += E1000_EERD_EEWR_MAX_COUNT) {
+ count = (words - i) / E1000_EERD_EEWR_MAX_COUNT > 0 ?
+ E1000_EERD_EEWR_MAX_COUNT : (words - i);
+ if (hw->nvm.ops.acquire(hw) == E1000_SUCCESS) {
+ status = e1000_read_nvm_eerd(hw, offset, count,
data + i);
hw->nvm.ops.release(hw);
} else {
- status = IGC_ERR_SWFW_SYNC;
+ status = E1000_ERR_SWFW_SYNC;
}
- if (status != IGC_SUCCESS)
+ if (status != E1000_SUCCESS)
break;
}
return status;
}
-/* igc_write_nvm_srwr_i225 - Write to Shadow RAM using EEWR
+/* e1000_write_nvm_srwr_i225 - Write to Shadow RAM using EEWR
* @hw: pointer to the HW structure
* @offset: offset within the Shadow RAM to be written to
* @words: number of words to write
@@ -489,44 +489,44 @@ s32 igc_read_nvm_srrd_i225(struct igc_hw *hw, u16 offset, u16 words,
*
* Writes data to Shadow RAM at offset using EEWR register.
*
- * If igc_update_nvm_checksum is not called after this function , the
+ * If e1000_update_nvm_checksum is not called after this function , the
* data will not be committed to FLASH and also Shadow RAM will most likely
* contain an invalid checksum.
*
* If error code is returned, data and Shadow RAM may be inconsistent - buffer
* partially written.
*/
-s32 igc_write_nvm_srwr_i225(struct igc_hw *hw, u16 offset, u16 words,
+s32 e1000_write_nvm_srwr_i225(struct e1000_hw *hw, u16 offset, u16 words,
u16 *data)
{
- s32 status = IGC_SUCCESS;
+ s32 status = E1000_SUCCESS;
u16 i, count;
- DEBUGFUNC("igc_write_nvm_srwr_i225");
+ DEBUGFUNC("e1000_write_nvm_srwr_i225");
/* We cannot hold synchronization semaphores for too long,
* because of forceful takeover procedure. However it is more efficient
* to write in bursts than synchronizing access for each word.
*/
- for (i = 0; i < words; i += IGC_EERD_EEWR_MAX_COUNT) {
- count = (words - i) / IGC_EERD_EEWR_MAX_COUNT > 0 ?
- IGC_EERD_EEWR_MAX_COUNT : (words - i);
- if (hw->nvm.ops.acquire(hw) == IGC_SUCCESS) {
- status = __igc_write_nvm_srwr(hw, offset, count,
+ for (i = 0; i < words; i += E1000_EERD_EEWR_MAX_COUNT) {
+ count = (words - i) / E1000_EERD_EEWR_MAX_COUNT > 0 ?
+ E1000_EERD_EEWR_MAX_COUNT : (words - i);
+ if (hw->nvm.ops.acquire(hw) == E1000_SUCCESS) {
+ status = __e1000_write_nvm_srwr(hw, offset, count,
data + i);
hw->nvm.ops.release(hw);
} else {
- status = IGC_ERR_SWFW_SYNC;
+ status = E1000_ERR_SWFW_SYNC;
}
- if (status != IGC_SUCCESS)
+ if (status != E1000_SUCCESS)
break;
}
return status;
}
-/* __igc_write_nvm_srwr - Write to Shadow Ram using EEWR
+/* __e1000_write_nvm_srwr - Write to Shadow Ram using EEWR
* @hw: pointer to the HW structure
* @offset: offset within the Shadow Ram to be written to
* @words: number of words to write
@@ -534,18 +534,18 @@ s32 igc_write_nvm_srwr_i225(struct igc_hw *hw, u16 offset, u16 words,
*
* Writes data to Shadow Ram at offset using EEWR register.
*
- * If igc_update_nvm_checksum is not called after this function , the
+ * If e1000_update_nvm_checksum is not called after this function , the
* Shadow Ram will most likely contain an invalid checksum.
*/
-static s32 __igc_write_nvm_srwr(struct igc_hw *hw, u16 offset, u16 words,
+static s32 __e1000_write_nvm_srwr(struct e1000_hw *hw, u16 offset, u16 words,
u16 *data)
{
- struct igc_nvm_info *nvm = &hw->nvm;
+ struct e1000_nvm_info *nvm = &hw->nvm;
u32 i, k, eewr = 0;
u32 attempts = 100000;
- s32 ret_val = IGC_SUCCESS;
+ s32 ret_val = E1000_SUCCESS;
- DEBUGFUNC("__igc_write_nvm_srwr");
+ DEBUGFUNC("__e1000_write_nvm_srwr");
/* A check for invalid values: offset too large, too many words,
* too many words for the offset, and not enough words.
@@ -553,27 +553,27 @@ static s32 __igc_write_nvm_srwr(struct igc_hw *hw, u16 offset, u16 words,
if (offset >= nvm->word_size || words > (nvm->word_size - offset) ||
words == 0) {
DEBUGOUT("nvm parameter(s) out of bounds\n");
- ret_val = -IGC_ERR_NVM;
+ ret_val = -E1000_ERR_NVM;
goto out;
}
for (i = 0; i < words; i++) {
- eewr = ((offset + i) << IGC_NVM_RW_ADDR_SHIFT) |
- (data[i] << IGC_NVM_RW_REG_DATA) |
- IGC_NVM_RW_REG_START;
+ eewr = ((offset + i) << E1000_NVM_RW_ADDR_SHIFT) |
+ (data[i] << E1000_NVM_RW_REG_DATA) |
+ E1000_NVM_RW_REG_START;
- IGC_WRITE_REG(hw, IGC_SRWR, eewr);
+ E1000_WRITE_REG(hw, E1000_SRWR, eewr);
for (k = 0; k < attempts; k++) {
- if (IGC_NVM_RW_REG_DONE &
- IGC_READ_REG(hw, IGC_SRWR)) {
- ret_val = IGC_SUCCESS;
+ if (E1000_NVM_RW_REG_DONE &
+ E1000_READ_REG(hw, E1000_SRWR)) {
+ ret_val = E1000_SUCCESS;
break;
}
usec_delay(5);
}
- if (ret_val != IGC_SUCCESS) {
+ if (ret_val != E1000_SUCCESS) {
DEBUGOUT("Shadow RAM write EEWR timed out\n");
break;
}
@@ -583,30 +583,30 @@ static s32 __igc_write_nvm_srwr(struct igc_hw *hw, u16 offset, u16 words,
return ret_val;
}
-/* igc_read_invm_version_i225 - Reads iNVM version and image type
+/* e1000_read_invm_version_i225 - Reads iNVM version and image type
* @hw: pointer to the HW structure
* @invm_ver: version structure for the version read
*
* Reads iNVM version and image type.
*/
-s32 igc_read_invm_version_i225(struct igc_hw *hw,
- struct igc_fw_version *invm_ver)
+s32 e1000_read_invm_version_i225(struct e1000_hw *hw,
+ struct e1000_fw_version *invm_ver)
{
u32 *record = NULL;
u32 *next_record = NULL;
u32 i = 0;
u32 invm_dword = 0;
- u32 invm_blocks = IGC_INVM_SIZE - (IGC_INVM_ULT_BYTES_SIZE /
- IGC_INVM_RECORD_SIZE_IN_BYTES);
- u32 buffer[IGC_INVM_SIZE];
- s32 status = -IGC_ERR_INVM_VALUE_NOT_FOUND;
+ u32 invm_blocks = E1000_INVM_SIZE - (E1000_INVM_ULT_BYTES_SIZE /
+ E1000_INVM_RECORD_SIZE_IN_BYTES);
+ u32 buffer[E1000_INVM_SIZE];
+ s32 status = -E1000_ERR_INVM_VALUE_NOT_FOUND;
u16 version = 0;
- DEBUGFUNC("igc_read_invm_version_i225");
+ DEBUGFUNC("e1000_read_invm_version_i225");
/* Read iNVM memory */
- for (i = 0; i < IGC_INVM_SIZE; i++) {
- invm_dword = IGC_READ_REG(hw, IGC_INVM_DATA_REG(i));
+ for (i = 0; i < E1000_INVM_SIZE; i++) {
+ invm_dword = E1000_READ_REG(hw, E1000_INVM_DATA_REG(i));
buffer[i] = invm_dword;
}
@@ -616,44 +616,44 @@ s32 igc_read_invm_version_i225(struct igc_hw *hw,
next_record = &buffer[invm_blocks - i + 1];
/* Check if we have first version location used */
- if (i == 1 && (*record & IGC_INVM_VER_FIELD_ONE) == 0) {
+ if (i == 1 && (*record & E1000_INVM_VER_FIELD_ONE) == 0) {
version = 0;
- status = IGC_SUCCESS;
+ status = E1000_SUCCESS;
break;
}
/* Check if we have second version location used */
else if ((i == 1) &&
- ((*record & IGC_INVM_VER_FIELD_TWO) == 0)) {
- version = (*record & IGC_INVM_VER_FIELD_ONE) >> 3;
- status = IGC_SUCCESS;
+ ((*record & E1000_INVM_VER_FIELD_TWO) == 0)) {
+ version = (*record & E1000_INVM_VER_FIELD_ONE) >> 3;
+ status = E1000_SUCCESS;
break;
}
/* Check if we have odd version location
* used and it is the last one used
*/
- else if ((((*record & IGC_INVM_VER_FIELD_ONE) == 0) &&
+ else if ((((*record & E1000_INVM_VER_FIELD_ONE) == 0) &&
((*record & 0x3) == 0)) || (((*record & 0x3) != 0) &&
(i != 1))) {
- version = (*next_record & IGC_INVM_VER_FIELD_TWO)
+ version = (*next_record & E1000_INVM_VER_FIELD_TWO)
>> 13;
- status = IGC_SUCCESS;
+ status = E1000_SUCCESS;
break;
}
/* Check if we have even version location
* used and it is the last one used
*/
- else if (((*record & IGC_INVM_VER_FIELD_TWO) == 0) &&
+ else if (((*record & E1000_INVM_VER_FIELD_TWO) == 0) &&
((*record & 0x3) == 0)) {
- version = (*record & IGC_INVM_VER_FIELD_ONE) >> 3;
- status = IGC_SUCCESS;
+ version = (*record & E1000_INVM_VER_FIELD_ONE) >> 3;
+ status = E1000_SUCCESS;
break;
}
}
- if (status == IGC_SUCCESS) {
- invm_ver->invm_major = (version & IGC_INVM_MAJOR_MASK)
- >> IGC_INVM_MAJOR_SHIFT;
- invm_ver->invm_minor = version & IGC_INVM_MINOR_MASK;
+ if (status == E1000_SUCCESS) {
+ invm_ver->invm_major = (version & E1000_INVM_MAJOR_MASK)
+ >> E1000_INVM_MAJOR_SHIFT;
+ invm_ver->invm_minor = version & E1000_INVM_MINOR_MASK;
}
/* Read Image Type */
for (i = 1; i < invm_blocks; i++) {
@@ -661,92 +661,92 @@ s32 igc_read_invm_version_i225(struct igc_hw *hw,
next_record = &buffer[invm_blocks - i + 1];
/* Check if we have image type in first location used */
- if (i == 1 && (*record & IGC_INVM_IMGTYPE_FIELD) == 0) {
+ if (i == 1 && (*record & E1000_INVM_IMGTYPE_FIELD) == 0) {
invm_ver->invm_img_type = 0;
- status = IGC_SUCCESS;
+ status = E1000_SUCCESS;
break;
}
/* Check if we have image type in first location used */
else if ((((*record & 0x3) == 0) &&
- ((*record & IGC_INVM_IMGTYPE_FIELD) == 0)) ||
+ ((*record & E1000_INVM_IMGTYPE_FIELD) == 0)) ||
((((*record & 0x3) != 0) && (i != 1)))) {
invm_ver->invm_img_type =
- (*next_record & IGC_INVM_IMGTYPE_FIELD) >> 23;
- status = IGC_SUCCESS;
+ (*next_record & E1000_INVM_IMGTYPE_FIELD) >> 23;
+ status = E1000_SUCCESS;
break;
}
}
return status;
}
-/* igc_validate_nvm_checksum_i225 - Validate EEPROM checksum
+/* e1000_validate_nvm_checksum_i225 - Validate EEPROM checksum
* @hw: pointer to the HW structure
*
* Calculates the EEPROM checksum by reading/adding each word of the EEPROM
* and then verifies that the sum of the EEPROM is equal to 0xBABA.
*/
-s32 igc_validate_nvm_checksum_i225(struct igc_hw *hw)
+s32 e1000_validate_nvm_checksum_i225(struct e1000_hw *hw)
{
- s32 status = IGC_SUCCESS;
- s32 (*read_op_ptr)(struct igc_hw *hw, u16 offset,
+ s32 status = E1000_SUCCESS;
+ s32 (*read_op_ptr)(struct e1000_hw *hw, u16 offset,
u16 count, u16 *data);
- DEBUGFUNC("igc_validate_nvm_checksum_i225");
+ DEBUGFUNC("e1000_validate_nvm_checksum_i225");
- if (hw->nvm.ops.acquire(hw) == IGC_SUCCESS) {
+ if (hw->nvm.ops.acquire(hw) == E1000_SUCCESS) {
/* Replace the read function with semaphore grabbing with
* the one that skips this for a while.
* We have semaphore taken already here.
*/
read_op_ptr = hw->nvm.ops.read;
- hw->nvm.ops.read = igc_read_nvm_eerd;
+ hw->nvm.ops.read = e1000_read_nvm_eerd;
- status = igc_validate_nvm_checksum_generic(hw);
+ status = e1000_validate_nvm_checksum_generic(hw);
/* Revert original read operation. */
hw->nvm.ops.read = read_op_ptr;
hw->nvm.ops.release(hw);
} else {
- status = IGC_ERR_SWFW_SYNC;
+ status = E1000_ERR_SWFW_SYNC;
}
return status;
}
-/* igc_update_nvm_checksum_i225 - Update EEPROM checksum
+/* e1000_update_nvm_checksum_i225 - Update EEPROM checksum
* @hw: pointer to the HW structure
*
* Updates the EEPROM checksum by reading/adding each word of the EEPROM
* up to the checksum. Then calculates the EEPROM checksum and writes the
* value to the EEPROM. Next commit EEPROM data onto the Flash.
*/
-s32 igc_update_nvm_checksum_i225(struct igc_hw *hw)
+s32 e1000_update_nvm_checksum_i225(struct e1000_hw *hw)
{
s32 ret_val;
u16 checksum = 0;
u16 i, nvm_data;
- DEBUGFUNC("igc_update_nvm_checksum_i225");
+ DEBUGFUNC("e1000_update_nvm_checksum_i225");
/* Read the first word from the EEPROM. If this times out or fails, do
* not continue or we could be in for a very long wait while every
* EEPROM read fails
*/
- ret_val = igc_read_nvm_eerd(hw, 0, 1, &nvm_data);
- if (ret_val != IGC_SUCCESS) {
+ ret_val = e1000_read_nvm_eerd(hw, 0, 1, &nvm_data);
+ if (ret_val != E1000_SUCCESS) {
DEBUGOUT("EEPROM read failed\n");
goto out;
}
- if (hw->nvm.ops.acquire(hw) == IGC_SUCCESS) {
+ if (hw->nvm.ops.acquire(hw) == E1000_SUCCESS) {
/* Do not use hw->nvm.ops.write, hw->nvm.ops.read
* because we do not want to take the synchronization
* semaphores twice here.
*/
for (i = 0; i < NVM_CHECKSUM_REG; i++) {
- ret_val = igc_read_nvm_eerd(hw, i, 1, &nvm_data);
+ ret_val = e1000_read_nvm_eerd(hw, i, 1, &nvm_data);
if (ret_val) {
hw->nvm.ops.release(hw);
DEBUGOUT("NVM Read Error while updating\n");
@@ -756,9 +756,9 @@ s32 igc_update_nvm_checksum_i225(struct igc_hw *hw)
checksum += nvm_data;
}
checksum = (u16)NVM_SUM - checksum;
- ret_val = __igc_write_nvm_srwr(hw, NVM_CHECKSUM_REG, 1,
+ ret_val = __e1000_write_nvm_srwr(hw, NVM_CHECKSUM_REG, 1,
&checksum);
- if (ret_val != IGC_SUCCESS) {
+ if (ret_val != E1000_SUCCESS) {
hw->nvm.ops.release(hw);
DEBUGOUT("NVM Write Error while updating checksum.\n");
goto out;
@@ -766,102 +766,102 @@ s32 igc_update_nvm_checksum_i225(struct igc_hw *hw)
hw->nvm.ops.release(hw);
- ret_val = igc_update_flash_i225(hw);
+ ret_val = e1000_update_flash_i225(hw);
} else {
- ret_val = IGC_ERR_SWFW_SYNC;
+ ret_val = E1000_ERR_SWFW_SYNC;
}
out:
return ret_val;
}
-/* igc_get_flash_presence_i225 - Check if flash device is detected.
+/* e1000_get_flash_presence_i225 - Check if flash device is detected.
* @hw: pointer to the HW structure
*/
-bool igc_get_flash_presence_i225(struct igc_hw *hw)
+bool e1000_get_flash_presence_i225(struct e1000_hw *hw)
{
u32 eec = 0;
bool ret_val = false;
- DEBUGFUNC("igc_get_flash_presence_i225");
+ DEBUGFUNC("e1000_get_flash_presence_i225");
- eec = IGC_READ_REG(hw, IGC_EECD);
+ eec = E1000_READ_REG(hw, E1000_EECD);
- if (eec & IGC_EECD_FLASH_DETECTED_I225)
+ if (eec & E1000_EECD_FLASH_DETECTED_I225)
ret_val = true;
return ret_val;
}
-/* igc_set_flsw_flash_burst_counter_i225 - sets FLSW NVM Burst
+/* e1000_set_flsw_flash_burst_counter_i225 - sets FLSW NVM Burst
* Counter in FLSWCNT register.
*
* @hw: pointer to the HW structure
* @burst_counter: size in bytes of the Flash burst to read or write
*/
-s32 igc_set_flsw_flash_burst_counter_i225(struct igc_hw *hw,
+s32 e1000_set_flsw_flash_burst_counter_i225(struct e1000_hw *hw,
u32 burst_counter)
{
- s32 ret_val = IGC_SUCCESS;
+ s32 ret_val = E1000_SUCCESS;
- DEBUGFUNC("igc_set_flsw_flash_burst_counter_i225");
+ DEBUGFUNC("e1000_set_flsw_flash_burst_counter_i225");
/* Validate input data */
- if (burst_counter < IGC_I225_SHADOW_RAM_SIZE) {
+ if (burst_counter < E1000_I225_SHADOW_RAM_SIZE) {
/* Write FLSWCNT - burst counter */
- IGC_WRITE_REG(hw, IGC_I225_FLSWCNT, burst_counter);
+ E1000_WRITE_REG(hw, E1000_I225_FLSWCNT, burst_counter);
} else {
- ret_val = IGC_ERR_INVALID_ARGUMENT;
+ ret_val = E1000_ERR_INVALID_ARGUMENT;
}
return ret_val;
}
-/* igc_write_erase_flash_command_i225 - write/erase to a sector
+/* e1000_write_erase_flash_command_i225 - write/erase to a sector
* region on a given address.
*
* @hw: pointer to the HW structure
* @opcode: opcode to be used for the write command
* @address: the offset to write into the FLASH image
*/
-s32 igc_write_erase_flash_command_i225(struct igc_hw *hw, u32 opcode,
+s32 e1000_write_erase_flash_command_i225(struct e1000_hw *hw, u32 opcode,
u32 address)
{
u32 flswctl = 0;
- s32 timeout = IGC_NVM_GRANT_ATTEMPTS;
- s32 ret_val = IGC_SUCCESS;
+ s32 timeout = E1000_NVM_GRANT_ATTEMPTS;
+ s32 ret_val = E1000_SUCCESS;
- DEBUGFUNC("igc_write_erase_flash_command_i225");
+ DEBUGFUNC("e1000_write_erase_flash_command_i225");
- flswctl = IGC_READ_REG(hw, IGC_I225_FLSWCTL);
+ flswctl = E1000_READ_REG(hw, E1000_I225_FLSWCTL);
/* Polling done bit on FLSWCTL register */
while (timeout) {
- if (flswctl & IGC_FLSWCTL_DONE)
+ if (flswctl & E1000_FLSWCTL_DONE)
break;
usec_delay(5);
- flswctl = IGC_READ_REG(hw, IGC_I225_FLSWCTL);
+ flswctl = E1000_READ_REG(hw, E1000_I225_FLSWCTL);
timeout--;
}
if (!timeout) {
DEBUGOUT("Flash transaction was not done\n");
- return -IGC_ERR_NVM;
+ return -E1000_ERR_NVM;
}
/* Build and issue command on FLSWCTL register */
flswctl = address | opcode;
- IGC_WRITE_REG(hw, IGC_I225_FLSWCTL, flswctl);
+ E1000_WRITE_REG(hw, E1000_I225_FLSWCTL, flswctl);
/* Check if issued command is valid on FLSWCTL register */
- flswctl = IGC_READ_REG(hw, IGC_I225_FLSWCTL);
- if (!(flswctl & IGC_FLSWCTL_CMDV)) {
+ flswctl = E1000_READ_REG(hw, E1000_I225_FLSWCTL);
+ if (!(flswctl & E1000_FLSWCTL_CMDV)) {
DEBUGOUT("Write flash command failed\n");
- ret_val = IGC_ERR_INVALID_ARGUMENT;
+ ret_val = E1000_ERR_INVALID_ARGUMENT;
}
return ret_val;
}
-/* igc_update_flash_i225 - Commit EEPROM to the flash
+/* e1000_update_flash_i225 - Commit EEPROM to the flash
* if fw_valid_bit is set, FW is active. setting FLUPD bit in EEC
* register makes the FW load the internal shadow RAM into the flash.
* Otherwise, fw_valid_bit is 0. if FL_SECU.block_prtotected_sw = 0
@@ -869,7 +869,7 @@ s32 igc_write_erase_flash_command_i225(struct igc_hw *hw, u32 opcode,
*
* @hw: pointer to the HW structure
*/
-s32 igc_update_flash_i225(struct igc_hw *hw)
+s32 e1000_update_flash_i225(struct e1000_hw *hw)
{
u16 current_offset_data = 0;
u32 block_sw_protect = 1;
@@ -879,24 +879,24 @@ s32 igc_update_flash_i225(struct igc_hw *hw)
s32 ret_val = 0;
u32 flup;
- DEBUGFUNC("igc_update_flash_i225");
+ DEBUGFUNC("e1000_update_flash_i225");
- block_sw_protect = IGC_READ_REG(hw, IGC_I225_FLSECU) &
- IGC_FLSECU_BLK_SW_ACCESS_I225;
- fw_valid_bit = IGC_READ_REG(hw, IGC_FWSM) &
- IGC_FWSM_FW_VALID_I225;
+ block_sw_protect = E1000_READ_REG(hw, E1000_I225_FLSECU) &
+ E1000_FLSECU_BLK_SW_ACCESS_I225;
+ fw_valid_bit = E1000_READ_REG(hw, E1000_FWSM) &
+ E1000_FWSM_FW_VALID_I225;
if (fw_valid_bit) {
- ret_val = igc_pool_flash_update_done_i225(hw);
- if (ret_val == -IGC_ERR_NVM) {
+ ret_val = e1000_pool_flash_update_done_i225(hw);
+ if (ret_val == -E1000_ERR_NVM) {
DEBUGOUT("Flash update time out\n");
goto out;
}
- flup = IGC_READ_REG(hw, IGC_EECD) | IGC_EECD_FLUPD_I225;
- IGC_WRITE_REG(hw, IGC_EECD, flup);
+ flup = E1000_READ_REG(hw, E1000_EECD) | E1000_EECD_FLUPD_I225;
+ E1000_WRITE_REG(hw, E1000_EECD, flup);
- ret_val = igc_pool_flash_update_done_i225(hw);
- if (ret_val == IGC_SUCCESS)
+ ret_val = e1000_pool_flash_update_done_i225(hw);
+ if (ret_val == E1000_SUCCESS)
DEBUGOUT("Flash update complete\n");
else
DEBUGOUT("Flash update time out\n");
@@ -907,12 +907,12 @@ s32 igc_update_flash_i225(struct igc_hw *hw)
* base address remains 0x0. otherwise, sector 1 is
* valid and it's base address is 0x1000
*/
- if (IGC_READ_REG(hw, IGC_EECD) & IGC_EECD_SEC1VAL_I225)
+ if (E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_SEC1VAL_I225)
base_address = 0x1000;
/* Valid sector erase */
- ret_val = igc_write_erase_flash_command_i225(hw,
- IGC_I225_ERASE_CMD_OPCODE,
+ ret_val = e1000_write_erase_flash_command_i225(hw,
+ E1000_I225_ERASE_CMD_OPCODE,
base_address);
if (!ret_val) {
DEBUGOUT("Sector erase failed\n");
@@ -922,21 +922,21 @@ s32 igc_update_flash_i225(struct igc_hw *hw)
current_offset = base_address;
/* Write */
- for (i = 0; i < IGC_I225_SHADOW_RAM_SIZE / 2; i++) {
+ for (i = 0; i < E1000_I225_SHADOW_RAM_SIZE / 2; i++) {
/* Set burst write length */
- ret_val = igc_set_flsw_flash_burst_counter_i225(hw,
+ ret_val = e1000_set_flsw_flash_burst_counter_i225(hw,
0x2);
- if (ret_val != IGC_SUCCESS)
+ if (ret_val != E1000_SUCCESS)
break;
/* Set address and opcode */
- ret_val = igc_write_erase_flash_command_i225(hw,
- IGC_I225_WRITE_CMD_OPCODE,
+ ret_val = e1000_write_erase_flash_command_i225(hw,
+ E1000_I225_WRITE_CMD_OPCODE,
2 * current_offset);
- if (ret_val != IGC_SUCCESS)
+ if (ret_val != E1000_SUCCESS)
break;
- ret_val = igc_read_nvm_eerd(hw, current_offset,
+ ret_val = e1000_read_nvm_eerd(hw, current_offset,
1, ¤t_offset_data);
if (ret_val) {
DEBUGOUT("Failed to read from EEPROM\n");
@@ -944,13 +944,13 @@ s32 igc_update_flash_i225(struct igc_hw *hw)
}
/* Write CurrentOffseData to FLSWDATA register */
- IGC_WRITE_REG(hw, IGC_I225_FLSWDATA,
+ E1000_WRITE_REG(hw, E1000_I225_FLSWDATA,
current_offset_data);
current_offset++;
/* Wait till operation has finished */
- ret_val = igc_poll_eerd_eewr_done(hw,
- IGC_NVM_POLL_READ);
+ ret_val = e1000_poll_eerd_eewr_done(hw,
+ E1000_NVM_POLL_READ);
if (ret_val)
break;
@@ -961,20 +961,20 @@ s32 igc_update_flash_i225(struct igc_hw *hw)
return ret_val;
}
-/* igc_pool_flash_update_done_i225 - Pool FLUDONE status.
+/* e1000_pool_flash_update_done_i225 - Pool FLUDONE status.
* @hw: pointer to the HW structure
*/
-s32 igc_pool_flash_update_done_i225(struct igc_hw *hw)
+s32 e1000_pool_flash_update_done_i225(struct e1000_hw *hw)
{
- s32 ret_val = -IGC_ERR_NVM;
+ s32 ret_val = -E1000_ERR_NVM;
u32 i, reg;
- DEBUGFUNC("igc_pool_flash_update_done_i225");
+ DEBUGFUNC("e1000_pool_flash_update_done_i225");
- for (i = 0; i < IGC_FLUDONE_ATTEMPTS; i++) {
- reg = IGC_READ_REG(hw, IGC_EECD);
- if (reg & IGC_EECD_FLUDONE_I225) {
- ret_val = IGC_SUCCESS;
+ for (i = 0; i < E1000_FLUDONE_ATTEMPTS; i++) {
+ reg = E1000_READ_REG(hw, E1000_EECD);
+ if (reg & E1000_EECD_FLUDONE_I225) {
+ ret_val = E1000_SUCCESS;
break;
}
usec_delay(5);
@@ -983,20 +983,20 @@ s32 igc_pool_flash_update_done_i225(struct igc_hw *hw)
return ret_val;
}
-/* igc_set_ltr_i225 - Set Latency Tolerance Reporting thresholds.
+/* e1000_set_ltr_i225 - Set Latency Tolerance Reporting thresholds.
* @hw: pointer to the HW structure
* @link: bool indicating link status
*
* Set the LTR thresholds based on the link speed (Mbps), EEE, and DMAC
* settings, otherwise specify that there is no LTR requirement.
*/
-static s32 igc_set_ltr_i225(struct igc_hw *hw, bool link)
+static s32 e1000_set_ltr_i225(struct e1000_hw *hw, bool link)
{
u16 speed, duplex;
u32 tw_system, ltrc, ltrv, ltr_min, ltr_max, scale_min, scale_max;
s32 size;
- DEBUGFUNC("igc_set_ltr_i225");
+ DEBUGFUNC("e1000_set_ltr_i225");
/* If we do not have link, LTR thresholds are zero. */
if (link) {
@@ -1005,35 +1005,35 @@ static s32 igc_set_ltr_i225(struct igc_hw *hw, bool link)
/* Check if using copper interface with EEE enabled or if the
* link speed is 10 Mbps.
*/
- if (hw->phy.media_type == igc_media_type_copper &&
+ if (hw->phy.media_type == e1000_media_type_copper &&
!hw->dev_spec._i225.eee_disable &&
speed != SPEED_10) {
/* EEE enabled, so send LTRMAX threshold. */
- ltrc = IGC_READ_REG(hw, IGC_LTRC) |
- IGC_LTRC_EEEMS_EN;
- IGC_WRITE_REG(hw, IGC_LTRC, ltrc);
+ ltrc = E1000_READ_REG(hw, E1000_LTRC) |
+ E1000_LTRC_EEEMS_EN;
+ E1000_WRITE_REG(hw, E1000_LTRC, ltrc);
/* Calculate tw_system (nsec). */
if (speed == SPEED_100)
- tw_system = ((IGC_READ_REG(hw, IGC_EEE_SU) &
- IGC_TW_SYSTEM_100_MASK) >>
- IGC_TW_SYSTEM_100_SHIFT) * 500;
+ tw_system = ((E1000_READ_REG(hw, E1000_EEE_SU) &
+ E1000_TW_SYSTEM_100_MASK) >>
+ E1000_TW_SYSTEM_100_SHIFT) * 500;
else
- tw_system = (IGC_READ_REG(hw, IGC_EEE_SU) &
- IGC_TW_SYSTEM_1000_MASK) * 500;
+ tw_system = (E1000_READ_REG(hw, E1000_EEE_SU) &
+ E1000_TW_SYSTEM_1000_MASK) * 500;
} else {
tw_system = 0;
}
/* Get the Rx packet buffer size. */
- size = IGC_READ_REG(hw, IGC_RXPBS) &
- IGC_RXPBS_SIZE_I225_MASK;
+ size = E1000_READ_REG(hw, E1000_RXPBS) &
+ E1000_RXPBS_SIZE_I225_MASK;
/* Calculations vary based on DMAC settings. */
- if (IGC_READ_REG(hw, IGC_DMACR) & IGC_DMACR_DMAC_EN) {
- size -= (IGC_READ_REG(hw, IGC_DMACR) &
- IGC_DMACR_DMACTHR_MASK) >>
- IGC_DMACR_DMACTHR_SHIFT;
+ if (E1000_READ_REG(hw, E1000_DMACR) & E1000_DMACR_DMAC_EN) {
+ size -= (E1000_READ_REG(hw, E1000_DMACR) &
+ E1000_DMACR_DMACTHR_MASK) >>
+ E1000_DMACR_DMACTHR_SHIFT;
/* Convert size to bits. */
size *= 1024 * 8;
} else {
@@ -1048,7 +1048,7 @@ static s32 igc_set_ltr_i225(struct igc_hw *hw, bool link)
if (size < 0) {
DEBUGOUT1("Invalid effective Rx buffer size %d\n",
size);
- return -IGC_ERR_CONFIG;
+ return -E1000_ERR_CONFIG;
}
/* Calculate the thresholds. Since speed is in Mbps, simplify
@@ -1058,46 +1058,46 @@ static s32 igc_set_ltr_i225(struct igc_hw *hw, bool link)
*/
ltr_min = (1000 * size) / speed;
ltr_max = ltr_min + tw_system;
- scale_min = (ltr_min / 1024) < 1024 ? IGC_LTRMINV_SCALE_1024 :
- IGC_LTRMINV_SCALE_32768;
- scale_max = (ltr_max / 1024) < 1024 ? IGC_LTRMAXV_SCALE_1024 :
- IGC_LTRMAXV_SCALE_32768;
- ltr_min /= scale_min == IGC_LTRMINV_SCALE_1024 ? 1024 : 32768;
- ltr_max /= scale_max == IGC_LTRMAXV_SCALE_1024 ? 1024 : 32768;
+ scale_min = (ltr_min / 1024) < 1024 ? E1000_LTRMINV_SCALE_1024 :
+ E1000_LTRMINV_SCALE_32768;
+ scale_max = (ltr_max / 1024) < 1024 ? E1000_LTRMAXV_SCALE_1024 :
+ E1000_LTRMAXV_SCALE_32768;
+ ltr_min /= scale_min == E1000_LTRMINV_SCALE_1024 ? 1024 : 32768;
+ ltr_max /= scale_max == E1000_LTRMAXV_SCALE_1024 ? 1024 : 32768;
/* Only write the LTR thresholds if they differ from before. */
- ltrv = IGC_READ_REG(hw, IGC_LTRMINV);
- if (ltr_min != (ltrv & IGC_LTRMINV_LTRV_MASK)) {
- ltrv = IGC_LTRMINV_LSNP_REQ | ltr_min |
- (scale_min << IGC_LTRMINV_SCALE_SHIFT);
- IGC_WRITE_REG(hw, IGC_LTRMINV, ltrv);
+ ltrv = E1000_READ_REG(hw, E1000_LTRMINV);
+ if (ltr_min != (ltrv & E1000_LTRMINV_LTRV_MASK)) {
+ ltrv = E1000_LTRMINV_LSNP_REQ | ltr_min |
+ (scale_min << E1000_LTRMINV_SCALE_SHIFT);
+ E1000_WRITE_REG(hw, E1000_LTRMINV, ltrv);
}
- ltrv = IGC_READ_REG(hw, IGC_LTRMAXV);
- if (ltr_max != (ltrv & IGC_LTRMAXV_LTRV_MASK)) {
- ltrv = IGC_LTRMAXV_LSNP_REQ | ltr_max |
- (scale_min << IGC_LTRMAXV_SCALE_SHIFT);
- IGC_WRITE_REG(hw, IGC_LTRMAXV, ltrv);
+ ltrv = E1000_READ_REG(hw, E1000_LTRMAXV);
+ if (ltr_max != (ltrv & E1000_LTRMAXV_LTRV_MASK)) {
+ ltrv = E1000_LTRMAXV_LSNP_REQ | ltr_max |
+ (scale_min << E1000_LTRMAXV_SCALE_SHIFT);
+ E1000_WRITE_REG(hw, E1000_LTRMAXV, ltrv);
}
}
- return IGC_SUCCESS;
+ return E1000_SUCCESS;
}
-/* igc_check_for_link_i225 - Check for link
+/* e1000_check_for_link_i225 - Check for link
* @hw: pointer to the HW structure
*
* Checks to see of the link status of the hardware has changed. If a
* change in link status has been detected, then we read the PHY registers
* to get the current speed/duplex if link exists.
*/
-s32 igc_check_for_link_i225(struct igc_hw *hw)
+s32 e1000_check_for_link_i225(struct e1000_hw *hw)
{
- struct igc_mac_info *mac = &hw->mac;
+ struct e1000_mac_info *mac = &hw->mac;
s32 ret_val;
bool link = false;
- DEBUGFUNC("igc_check_for_link_i225");
+ DEBUGFUNC("e1000_check_for_link_i225");
/* We only want to go out to the PHY registers to see if
* Auto-Neg has completed and/or if our link status has
@@ -1105,7 +1105,7 @@ s32 igc_check_for_link_i225(struct igc_hw *hw)
* a Link Status Change or Rx Sequence Error interrupt.
*/
if (!mac->get_link_status) {
- ret_val = IGC_SUCCESS;
+ ret_val = E1000_SUCCESS;
goto out;
}
@@ -1113,7 +1113,7 @@ s32 igc_check_for_link_i225(struct igc_hw *hw)
* link. If so, then we want to get the current speed/duplex
* of the PHY.
*/
- ret_val = igc_phy_has_link_generic(hw, 1, 0, &link);
+ ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link);
if (ret_val)
goto out;
@@ -1125,7 +1125,7 @@ s32 igc_check_for_link_i225(struct igc_hw *hw)
/* Check if there was DownShift, must be checked
* immediately after link-up
*/
- igc_check_downshift_generic(hw);
+ e1000_check_downshift_generic(hw);
/* If we are forcing speed/duplex, then we simply return since
* we have already determined whether we have link or not.
@@ -1144,45 +1144,45 @@ s32 igc_check_for_link_i225(struct igc_hw *hw)
* settings because we may have had to re-autoneg with a
* different link partner.
*/
- ret_val = igc_config_fc_after_link_up_generic(hw);
+ ret_val = e1000_config_fc_after_link_up_generic(hw);
if (ret_val)
DEBUGOUT("Error configuring flow control\n");
out:
/* Now that we are aware of our link settings, we can set the LTR
* thresholds.
*/
- ret_val = igc_set_ltr_i225(hw, link);
+ ret_val = e1000_set_ltr_i225(hw, link);
return ret_val;
}
-/* igc_init_function_pointers_i225 - Init func ptrs.
+/* e1000_init_function_pointers_i225 - Init func ptrs.
* @hw: pointer to the HW structure
*
* Called to initialize all function pointers and parameters.
*/
-void igc_init_function_pointers_i225(struct igc_hw *hw)
+void e1000_init_function_pointers_i225(struct e1000_hw *hw)
{
- igc_init_mac_ops_generic(hw);
- igc_init_phy_ops_generic(hw);
- igc_init_nvm_ops_generic(hw);
- hw->mac.ops.init_params = igc_init_mac_params_i225;
- hw->nvm.ops.init_params = igc_init_nvm_params_i225;
- hw->phy.ops.init_params = igc_init_phy_params_i225;
+ e1000_init_mac_ops_generic(hw);
+ e1000_init_phy_ops_generic(hw);
+ e1000_init_nvm_ops_generic(hw);
+ hw->mac.ops.init_params = e1000_init_mac_params_i225;
+ hw->nvm.ops.init_params = e1000_init_nvm_params_i225;
+ hw->phy.ops.init_params = e1000_init_phy_params_i225;
}
-/* igc_valid_led_default_i225 - Verify a valid default LED config
+/* e1000_valid_led_default_i225 - Verify a valid default LED config
* @hw: pointer to the HW structure
* @data: pointer to the NVM (EEPROM)
*
* Read the EEPROM for the current default LED configuration. If the
* LED configuration is not valid, set to a valid LED configuration.
*/
-static s32 igc_valid_led_default_i225(struct igc_hw *hw, u16 *data)
+static s32 e1000_valid_led_default_i225(struct e1000_hw *hw, u16 *data)
{
s32 ret_val;
- DEBUGFUNC("igc_valid_led_default_i225");
+ DEBUGFUNC("e1000_valid_led_default_i225");
ret_val = hw->nvm.ops.read(hw, NVM_ID_LED_SETTINGS, 1, data);
if (ret_val) {
@@ -1192,10 +1192,10 @@ static s32 igc_valid_led_default_i225(struct igc_hw *hw, u16 *data)
if (*data == ID_LED_RESERVED_0000 || *data == ID_LED_RESERVED_FFFF) {
switch (hw->phy.media_type) {
- case igc_media_type_internal_serdes:
+ case e1000_media_type_internal_serdes:
*data = ID_LED_DEFAULT_I225_SERDES;
break;
- case igc_media_type_copper:
+ case e1000_media_type_copper:
default:
*data = ID_LED_DEFAULT_I225;
break;
@@ -1205,24 +1205,24 @@ static s32 igc_valid_led_default_i225(struct igc_hw *hw, u16 *data)
return ret_val;
}
-/* igc_get_cfg_done_i225 - Read config done bit
+/* e1000_get_cfg_done_i225 - Read config done bit
* @hw: pointer to the HW structure
*
* Read the management control register for the config done bit for
* completion status. NOTE: silicon which is EEPROM-less will fail trying
* to read the config done bit, so an error is *ONLY* logged and returns
- * IGC_SUCCESS. If we were to return with error, EEPROM-less silicon
+ * E1000_SUCCESS. If we were to return with error, EEPROM-less silicon
* would not be able to be reset or change link.
*/
-static s32 igc_get_cfg_done_i225(struct igc_hw *hw)
+static s32 e1000_get_cfg_done_i225(struct e1000_hw *hw)
{
s32 timeout = PHY_CFG_TIMEOUT;
- u32 mask = IGC_NVM_CFG_DONE_PORT_0;
+ u32 mask = E1000_NVM_CFG_DONE_PORT_0;
- DEBUGFUNC("igc_get_cfg_done_i225");
+ DEBUGFUNC("e1000_get_cfg_done_i225");
while (timeout) {
- if (IGC_READ_REG(hw, IGC_EEMNGCTL_I225) & mask)
+ if (E1000_READ_REG(hw, E1000_EEMNGCTL_I225) & mask)
break;
msec_delay(1);
timeout--;
@@ -1230,86 +1230,86 @@ static s32 igc_get_cfg_done_i225(struct igc_hw *hw)
if (!timeout)
DEBUGOUT("MNG configuration cycle has not completed.\n");
- return IGC_SUCCESS;
+ return E1000_SUCCESS;
}
-/* igc_init_hw_i225 - Init hw for I225
+/* e1000_init_hw_i225 - Init hw for I225
* @hw: pointer to the HW structure
*
* Called to initialize hw for i225 hw family.
*/
-s32 igc_init_hw_i225(struct igc_hw *hw)
+s32 e1000_init_hw_i225(struct e1000_hw *hw)
{
s32 ret_val;
- DEBUGFUNC("igc_init_hw_i225");
+ DEBUGFUNC("e1000_init_hw_i225");
- hw->phy.ops.get_cfg_done = igc_get_cfg_done_i225;
- ret_val = igc_init_hw_base(hw);
- igc_set_eee_i225(hw, false, false, false);
+ hw->phy.ops.get_cfg_done = e1000_get_cfg_done_i225;
+ ret_val = e1000_init_hw_base(hw);
+ e1000_set_eee_i225(hw, false, false, false);
return ret_val;
}
/*
- * igc_set_d0_lplu_state_i225 - Set Low-Power-Link-Up (LPLU) D0 state
+ * e1000_set_d0_lplu_state_i225 - Set Low-Power-Link-Up (LPLU) D0 state
* @hw: pointer to the HW structure
* @active: true to enable LPLU, false to disable
*
* Note: since I225 does not actually support LPLU, this function
* simply enables/disables 1G and 2.5G speeds in D0.
*/
-s32 igc_set_d0_lplu_state_i225(struct igc_hw *hw, bool active)
+s32 e1000_set_d0_lplu_state_i225(struct e1000_hw *hw, bool active)
{
u32 data;
- DEBUGFUNC("igc_set_d0_lplu_state_i225");
+ DEBUGFUNC("e1000_set_d0_lplu_state_i225");
- data = IGC_READ_REG(hw, IGC_I225_PHPM);
+ data = E1000_READ_REG(hw, E1000_I225_PHPM);
if (active) {
- data |= IGC_I225_PHPM_DIS_1000;
- data |= IGC_I225_PHPM_DIS_2500;
+ data |= E1000_I225_PHPM_DIS_1000;
+ data |= E1000_I225_PHPM_DIS_2500;
} else {
- data &= ~IGC_I225_PHPM_DIS_1000;
- data &= ~IGC_I225_PHPM_DIS_2500;
+ data &= ~E1000_I225_PHPM_DIS_1000;
+ data &= ~E1000_I225_PHPM_DIS_2500;
}
- IGC_WRITE_REG(hw, IGC_I225_PHPM, data);
- return IGC_SUCCESS;
+ E1000_WRITE_REG(hw, E1000_I225_PHPM, data);
+ return E1000_SUCCESS;
}
/*
- * igc_set_d3_lplu_state_i225 - Set Low-Power-Link-Up (LPLU) D3 state
+ * e1000_set_d3_lplu_state_i225 - Set Low-Power-Link-Up (LPLU) D3 state
* @hw: pointer to the HW structure
* @active: true to enable LPLU, false to disable
*
* Note: since I225 does not actually support LPLU, this function
* simply enables/disables 100M, 1G and 2.5G speeds in D3.
*/
-s32 igc_set_d3_lplu_state_i225(struct igc_hw *hw, bool active)
+s32 e1000_set_d3_lplu_state_i225(struct e1000_hw *hw, bool active)
{
u32 data;
- DEBUGFUNC("igc_set_d3_lplu_state_i225");
+ DEBUGFUNC("e1000_set_d3_lplu_state_i225");
- data = IGC_READ_REG(hw, IGC_I225_PHPM);
+ data = E1000_READ_REG(hw, E1000_I225_PHPM);
if (active) {
- data |= IGC_I225_PHPM_DIS_100_D3;
- data |= IGC_I225_PHPM_DIS_1000_D3;
- data |= IGC_I225_PHPM_DIS_2500_D3;
+ data |= E1000_I225_PHPM_DIS_100_D3;
+ data |= E1000_I225_PHPM_DIS_1000_D3;
+ data |= E1000_I225_PHPM_DIS_2500_D3;
} else {
- data &= ~IGC_I225_PHPM_DIS_100_D3;
- data &= ~IGC_I225_PHPM_DIS_1000_D3;
- data &= ~IGC_I225_PHPM_DIS_2500_D3;
+ data &= ~E1000_I225_PHPM_DIS_100_D3;
+ data &= ~E1000_I225_PHPM_DIS_1000_D3;
+ data &= ~E1000_I225_PHPM_DIS_2500_D3;
}
- IGC_WRITE_REG(hw, IGC_I225_PHPM, data);
- return IGC_SUCCESS;
+ E1000_WRITE_REG(hw, E1000_I225_PHPM, data);
+ return E1000_SUCCESS;
}
/**
- * igc_set_eee_i225 - Enable/disable EEE support
+ * e1000_set_eee_i225 - Enable/disable EEE support
* @hw: pointer to the HW structure
* @adv2p5G: boolean flag enabling 2.5G EEE advertisement
* @adv1G: boolean flag enabling 1G EEE advertisement
@@ -1318,55 +1318,55 @@ s32 igc_set_d3_lplu_state_i225(struct igc_hw *hw, bool active)
* Enable/disable EEE based on setting in dev_spec structure.
*
**/
-s32 igc_set_eee_i225(struct igc_hw *hw, bool adv2p5G, bool adv1G,
+s32 e1000_set_eee_i225(struct e1000_hw *hw, bool adv2p5G, bool adv1G,
bool adv100M)
{
u32 ipcnfg, eeer;
- DEBUGFUNC("igc_set_eee_i225");
+ DEBUGFUNC("e1000_set_eee_i225");
- if (hw->mac.type != igc_i225 ||
- hw->phy.media_type != igc_media_type_copper)
+ if (hw->mac.type != e1000_i225 ||
+ hw->phy.media_type != e1000_media_type_copper)
goto out;
- ipcnfg = IGC_READ_REG(hw, IGC_IPCNFG);
- eeer = IGC_READ_REG(hw, IGC_EEER);
+ ipcnfg = E1000_READ_REG(hw, E1000_IPCNFG);
+ eeer = E1000_READ_REG(hw, E1000_EEER);
/* enable or disable per user setting */
if (!(hw->dev_spec._i225.eee_disable)) {
- u32 eee_su = IGC_READ_REG(hw, IGC_EEE_SU);
+ u32 eee_su = E1000_READ_REG(hw, E1000_EEE_SU);
if (adv100M)
- ipcnfg |= IGC_IPCNFG_EEE_100M_AN;
+ ipcnfg |= E1000_IPCNFG_EEE_100M_AN;
else
- ipcnfg &= ~IGC_IPCNFG_EEE_100M_AN;
+ ipcnfg &= ~E1000_IPCNFG_EEE_100M_AN;
if (adv1G)
- ipcnfg |= IGC_IPCNFG_EEE_1G_AN;
+ ipcnfg |= E1000_IPCNFG_EEE_1G_AN;
else
- ipcnfg &= ~IGC_IPCNFG_EEE_1G_AN;
+ ipcnfg &= ~E1000_IPCNFG_EEE_1G_AN;
if (adv2p5G)
- ipcnfg |= IGC_IPCNFG_EEE_2_5G_AN;
+ ipcnfg |= E1000_IPCNFG_EEE_2_5G_AN;
else
- ipcnfg &= ~IGC_IPCNFG_EEE_2_5G_AN;
+ ipcnfg &= ~E1000_IPCNFG_EEE_2_5G_AN;
- eeer |= (IGC_EEER_TX_LPI_EN | IGC_EEER_RX_LPI_EN |
- IGC_EEER_LPI_FC);
+ eeer |= (E1000_EEER_TX_LPI_EN | E1000_EEER_RX_LPI_EN |
+ E1000_EEER_LPI_FC);
/* This bit should not be set in normal operation. */
- if (eee_su & IGC_EEE_SU_LPI_CLK_STP)
+ if (eee_su & E1000_EEE_SU_LPI_CLK_STP)
DEBUGOUT("LPI Clock Stop Bit should not be set!\n");
} else {
- ipcnfg &= ~(IGC_IPCNFG_EEE_2_5G_AN | IGC_IPCNFG_EEE_1G_AN |
- IGC_IPCNFG_EEE_100M_AN);
- eeer &= ~(IGC_EEER_TX_LPI_EN | IGC_EEER_RX_LPI_EN |
- IGC_EEER_LPI_FC);
+ ipcnfg &= ~(E1000_IPCNFG_EEE_2_5G_AN | E1000_IPCNFG_EEE_1G_AN |
+ E1000_IPCNFG_EEE_100M_AN);
+ eeer &= ~(E1000_EEER_TX_LPI_EN | E1000_EEER_RX_LPI_EN |
+ E1000_EEER_LPI_FC);
}
- IGC_WRITE_REG(hw, IGC_IPCNFG, ipcnfg);
- IGC_WRITE_REG(hw, IGC_EEER, eeer);
- IGC_READ_REG(hw, IGC_IPCNFG);
- IGC_READ_REG(hw, IGC_EEER);
+ E1000_WRITE_REG(hw, E1000_IPCNFG, ipcnfg);
+ E1000_WRITE_REG(hw, E1000_EEER, eeer);
+ E1000_READ_REG(hw, E1000_IPCNFG);
+ E1000_READ_REG(hw, E1000_EEER);
out:
- return IGC_SUCCESS;
+ return E1000_SUCCESS;
}
diff --git a/drivers/net/intel/e1000/base/e1000_i225.h b/drivers/net/intel/e1000/base/e1000_i225.h
new file mode 100644
index 0000000000..b0414b6a36
--- /dev/null
+++ b/drivers/net/intel/e1000/base/e1000_i225.h
@@ -0,0 +1,110 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2001-2020 Intel Corporation
+ */
+
+#ifndef _E1000_I225_H_
+#define _E1000_I225_H_
+
+bool e1000_get_flash_presence_i225(struct e1000_hw *hw);
+s32 e1000_update_flash_i225(struct e1000_hw *hw);
+s32 e1000_update_nvm_checksum_i225(struct e1000_hw *hw);
+s32 e1000_validate_nvm_checksum_i225(struct e1000_hw *hw);
+s32 e1000_write_nvm_srwr_i225(struct e1000_hw *hw, u16 offset,
+ u16 words, u16 *data);
+s32 e1000_read_nvm_srrd_i225(struct e1000_hw *hw, u16 offset,
+ u16 words, u16 *data);
+s32 e1000_read_invm_version_i225(struct e1000_hw *hw,
+ struct e1000_fw_version *invm_ver);
+s32 e1000_set_flsw_flash_burst_counter_i225(struct e1000_hw *hw,
+ u32 burst_counter);
+s32 e1000_write_erase_flash_command_i225(struct e1000_hw *hw, u32 opcode,
+ u32 address);
+s32 e1000_check_for_link_i225(struct e1000_hw *hw);
+s32 e1000_acquire_swfw_sync_i225(struct e1000_hw *hw, u16 mask);
+void e1000_release_swfw_sync_i225(struct e1000_hw *hw, u16 mask);
+s32 e1000_init_hw_i225(struct e1000_hw *hw);
+s32 e1000_setup_copper_link_i225(struct e1000_hw *hw);
+s32 e1000_set_d0_lplu_state_i225(struct e1000_hw *hw, bool active);
+s32 e1000_set_d3_lplu_state_i225(struct e1000_hw *hw, bool active);
+s32 e1000_set_eee_i225(struct e1000_hw *hw, bool adv2p5G, bool adv1G,
+ bool adv100M);
+
+#define ID_LED_DEFAULT_I225 ((ID_LED_OFF1_ON2 << 8) | \
+ (ID_LED_DEF1_DEF2 << 4) | \
+ (ID_LED_OFF1_OFF2))
+#define ID_LED_DEFAULT_I225_SERDES ((ID_LED_DEF1_DEF2 << 8) | \
+ (ID_LED_DEF1_DEF2 << 4) | \
+ (ID_LED_OFF1_ON2))
+
+/* NVM offset defaults for I225 devices */
+#define NVM_INIT_CTRL_2_DEFAULT_I225 0X7243
+#define NVM_INIT_CTRL_4_DEFAULT_I225 0x00C1
+#define NVM_LED_1_CFG_DEFAULT_I225 0x0184
+#define NVM_LED_0_2_CFG_DEFAULT_I225 0x200C
+
+#define E1000_MRQC_ENABLE_RSS_4Q 0x00000002
+#define E1000_MRQC_ENABLE_VMDQ 0x00000003
+#define E1000_MRQC_ENABLE_VMDQ_RSS_2Q 0x00000005
+#define E1000_MRQC_RSS_FIELD_IPV4_UDP 0x00400000
+#define E1000_MRQC_RSS_FIELD_IPV6_UDP 0x00800000
+#define E1000_MRQC_RSS_FIELD_IPV6_UDP_EX 0x01000000
+#define E1000_I225_SHADOW_RAM_SIZE 4096
+#define E1000_I225_ERASE_CMD_OPCODE 0x02000000
+#define E1000_I225_WRITE_CMD_OPCODE 0x01000000
+#define E1000_FLSWCTL_DONE 0x40000000
+#define E1000_FLSWCTL_CMDV 0x10000000
+
+/* SRRCTL bit definitions */
+#define E1000_SRRCTL_BSIZEHDRSIZE_MASK 0x00000F00
+#define E1000_SRRCTL_DESCTYPE_LEGACY 0x00000000
+#define E1000_SRRCTL_DESCTYPE_HDR_SPLIT 0x04000000
+#define E1000_SRRCTL_DESCTYPE_HDR_SPLIT_ALWAYS 0x0A000000
+#define E1000_SRRCTL_DESCTYPE_HDR_REPLICATION 0x06000000
+#define E1000_SRRCTL_DESCTYPE_HDR_REPLICATION_LARGE_PKT 0x08000000
+#define E1000_SRRCTL_DESCTYPE_MASK 0x0E000000
+#define E1000_SRRCTL_DROP_EN 0x80000000
+#define E1000_SRRCTL_BSIZEPKT_MASK 0x0000007F
+#define E1000_SRRCTL_BSIZEHDR_MASK 0x00003F00
+
+#define E1000_RXDADV_RSSTYPE_MASK 0x0000000F
+#define E1000_RXDADV_RSSTYPE_SHIFT 12
+#define E1000_RXDADV_HDRBUFLEN_MASK 0x7FE0
+#define E1000_RXDADV_HDRBUFLEN_SHIFT 5
+#define E1000_RXDADV_SPLITHEADER_EN 0x00001000
+#define E1000_RXDADV_SPH 0x8000
+#define E1000_RXDADV_STAT_TS 0x10000 /* Pkt was time stamped */
+#define E1000_RXDADV_ERR_HBO 0x00800000
+
+/* RSS Hash results */
+#define E1000_RXDADV_RSSTYPE_NONE 0x00000000
+#define E1000_RXDADV_RSSTYPE_IPV4_TCP 0x00000001
+#define E1000_RXDADV_RSSTYPE_IPV4 0x00000002
+#define E1000_RXDADV_RSSTYPE_IPV6_TCP 0x00000003
+#define E1000_RXDADV_RSSTYPE_IPV6_EX 0x00000004
+#define E1000_RXDADV_RSSTYPE_IPV6 0x00000005
+#define E1000_RXDADV_RSSTYPE_IPV6_TCP_EX 0x00000006
+#define E1000_RXDADV_RSSTYPE_IPV4_UDP 0x00000007
+#define E1000_RXDADV_RSSTYPE_IPV6_UDP 0x00000008
+#define E1000_RXDADV_RSSTYPE_IPV6_UDP_EX 0x00000009
+
+/* RSS Packet Types as indicated in the receive descriptor */
+#define E1000_RXDADV_PKTTYPE_ILMASK 0x000000F0
+#define E1000_RXDADV_PKTTYPE_TLMASK 0x00000F00
+#define E1000_RXDADV_PKTTYPE_NONE 0x00000000
+#define E1000_RXDADV_PKTTYPE_IPV4 0x00000010 /* IPV4 hdr present */
+#define E1000_RXDADV_PKTTYPE_IPV4_EX 0x00000020 /* IPV4 hdr + extensions */
+#define E1000_RXDADV_PKTTYPE_IPV6 0x00000040 /* IPV6 hdr present */
+#define E1000_RXDADV_PKTTYPE_IPV6_EX 0x00000080 /* IPV6 hdr + extensions */
+#define E1000_RXDADV_PKTTYPE_TCP 0x00000100 /* TCP hdr present */
+#define E1000_RXDADV_PKTTYPE_UDP 0x00000200 /* UDP hdr present */
+#define E1000_RXDADV_PKTTYPE_SCTP 0x00000400 /* SCTP hdr present */
+#define E1000_RXDADV_PKTTYPE_NFS 0x00000800 /* NFS hdr present */
+
+#define E1000_RXDADV_PKTTYPE_IPSEC_ESP 0x00001000 /* IPSec ESP */
+#define E1000_RXDADV_PKTTYPE_IPSEC_AH 0x00002000 /* IPSec AH */
+#define E1000_RXDADV_PKTTYPE_LINKSEC 0x00004000 /* LinkSec Encap */
+#define E1000_RXDADV_PKTTYPE_ETQF 0x00008000 /* PKTTYPE is ETQF index */
+#define E1000_RXDADV_PKTTYPE_ETQF_MASK 0x00000070 /* ETQF has 8 indices */
+#define E1000_RXDADV_PKTTYPE_ETQF_SHIFT 4 /* Right-shift 4 bits */
+
+#endif
diff --git a/drivers/net/intel/e1000/base/e1000_mac.c b/drivers/net/intel/e1000/base/e1000_mac.c
index d3b3a6bac9..02e03bed1f 100644
--- a/drivers/net/intel/e1000/base/e1000_mac.c
+++ b/drivers/net/intel/e1000/base/e1000_mac.c
@@ -987,9 +987,13 @@ s32 e1000_setup_link_generic(struct e1000_hw *hw)
* based on the EEPROM flow control settings.
*/
if (hw->fc.requested_mode == e1000_fc_default) {
- ret_val = e1000_set_default_fc_generic(hw);
- if (ret_val)
- return ret_val;
+ if (hw->mac.type == e1000_i225) {
+ hw->fc.requested_mode = e1000_fc_full;
+ } else {
+ ret_val = e1000_set_default_fc_generic(hw);
+ if (ret_val)
+ return ret_val;
+ }
}
/* Save off the requested flow control mode for use later. Depending
@@ -1637,8 +1641,18 @@ s32 e1000_get_speed_and_duplex_copper_generic(struct e1000_hw *hw, u16 *speed,
status = E1000_READ_REG(hw, E1000_STATUS);
if (status & E1000_STATUS_SPEED_1000) {
- *speed = SPEED_1000;
- DEBUGOUT("1000 Mbs, ");
+ /* For I225, STATUS will indicate 1G speed in both 1 Gbps
+ * and 2.5 Gbps link modes. An additional bit is used
+ * to differentiate between 1 Gbps and 2.5 Gbps.
+ */
+ if (hw->mac.type == e1000_i225 &&
+ (status & E1000_STATUS_SPEED_2500)) {
+ *speed = SPEED_2500;
+ DEBUGOUT("2500 Mbs, ");
+ } else {
+ *speed = SPEED_1000;
+ DEBUGOUT("1000 Mbs, ");
+ }
} else if (status & E1000_STATUS_SPEED_100) {
*speed = SPEED_100;
DEBUGOUT("100 Mbs, ");
diff --git a/drivers/net/intel/e1000/base/e1000_nvm.c b/drivers/net/intel/e1000/base/e1000_nvm.c
index 430fecaf6d..aec5e80986 100644
--- a/drivers/net/intel/e1000/base/e1000_nvm.c
+++ b/drivers/net/intel/e1000/base/e1000_nvm.c
@@ -1295,6 +1295,7 @@ void e1000_get_fw_version(struct e1000_hw *hw, struct e1000_fw_version *fw_vers)
return;
}
/* fall through */
+ case e1000_i225:
case e1000_i350:
hw->nvm.ops.read(hw, NVM_ETRACK_HIWORD, 1, &etrack_test);
/* find combo image version */
diff --git a/drivers/net/intel/e1000/base/e1000_osdep.h b/drivers/net/intel/e1000/base/e1000_osdep.h
index 46565d05e7..0cf6da1545 100644
--- a/drivers/net/intel/e1000/base/e1000_osdep.h
+++ b/drivers/net/intel/e1000/base/e1000_osdep.h
@@ -117,9 +117,15 @@ static inline uint16_t e1000_read_addr16(volatile void *addr)
#define E1000_READ_REG(hw, reg) \
e1000_read_addr(E1000_PCI_REG_ADDR((hw), (reg)))
+#define E1000_READ_REG_LE_VALUE(hw, reg) \
+ rte_read32(E1000_PCI_REG_ADDR((hw), (reg)))
+
#define E1000_WRITE_REG(hw, reg, value) \
E1000_PCI_REG_WRITE(E1000_PCI_REG_ADDR((hw), (reg)), (value))
+#define E1000_WRITE_REG_LE_VALUE(hw, reg, value) \
+ rte_write32(value, E1000_PCI_REG_ADDR((hw), (reg)))
+
#define E1000_READ_REG_ARRAY(hw, reg, index) \
E1000_PCI_REG(E1000_PCI_REG_ARRAY_ADDR((hw), (reg), (index)))
diff --git a/drivers/net/intel/e1000/base/e1000_phy.c b/drivers/net/intel/e1000/base/e1000_phy.c
index 62d0be5080..ed3fc24365 100644
--- a/drivers/net/intel/e1000/base/e1000_phy.c
+++ b/drivers/net/intel/e1000/base/e1000_phy.c
@@ -1457,6 +1457,7 @@ s32 e1000_phy_setup_autoneg(struct e1000_hw *hw)
s32 ret_val;
u16 mii_autoneg_adv_reg;
u16 mii_1000t_ctrl_reg = 0;
+ u16 aneg_multigbt_an_ctrl = 0;
DEBUGFUNC("e1000_phy_setup_autoneg");
@@ -1475,6 +1476,32 @@ s32 e1000_phy_setup_autoneg(struct e1000_hw *hw)
return ret_val;
}
+ /*
+ * IGC/IGB merge note: in base code, there was a PHY ID check for I225
+ * at this point. However, in DPDK version of IGC this check was
+ * removed because it interfered with some i225-based NICs, and it was
+ * deemed unnecessary because only the i225 NIC would've called this
+ * code anyway because it was in the IGC driver.
+ *
+ * In IGB, it is no longer the case that this code is only called by
+ * i225 NICs, so it could be argued that the check should've been added
+ * back. However, as evidenced in the original commit removing the
+ * check, the removal was causing problems with some i225-based NICs,
+ * adding it back would've introduced the issue again. It is assumed
+ * that only i225 will attempt to advertise 2.5G speed anyway, so it is
+ * hoped that not adding the check will not cause problems.
+ */
+ if (phy->autoneg_mask & ADVERTISE_2500_FULL) {
+ /* Read the MULTI GBT AN Control Register - reg 7.32 */
+ ret_val = phy->ops.read_reg(hw, (STANDARD_AN_REG_MASK <<
+ MMD_DEVADDR_SHIFT) |
+ ANEG_MULTIGBT_AN_CTRL,
+ &aneg_multigbt_an_ctrl);
+
+ if (ret_val)
+ return ret_val;
+ }
+
/* Need to parse both autoneg_advertised and fc and set up
* the appropriate PHY registers. First we will parse for
* autoneg_advertised software override. Since we can advertise
@@ -1528,6 +1555,18 @@ s32 e1000_phy_setup_autoneg(struct e1000_hw *hw)
mii_1000t_ctrl_reg |= CR_1000T_FD_CAPS;
}
+ /* We do not allow the Phy to advertise 2500 Mb Half Duplex */
+ if (phy->autoneg_advertised & ADVERTISE_2500_HALF)
+ DEBUGOUT("Advertise 2500mb Half duplex request denied!\n");
+
+ /* Do we want to advertise 2500 Mb Full Duplex? */
+ if (phy->autoneg_advertised & ADVERTISE_2500_FULL) {
+ DEBUGOUT("Advertise 2500mb Full duplex\n");
+ aneg_multigbt_an_ctrl |= CR_2500T_FD_CAPS;
+ } else {
+ aneg_multigbt_an_ctrl &= ~CR_2500T_FD_CAPS;
+ }
+
/* Check for a software override of the flow control settings, and
* setup the PHY advertisement registers accordingly. If
* auto-negotiation is enabled, then software will have to set the
@@ -1592,6 +1631,28 @@ s32 e1000_phy_setup_autoneg(struct e1000_hw *hw)
ret_val = phy->ops.write_reg(hw, PHY_1000T_CTRL,
mii_1000t_ctrl_reg);
+ /*
+ * IGC/IGB merge note: in base code, there was a PHY ID check for I225
+ * at this point. However, in DPDK version of IGC this check was
+ * removed because it interfered with some i225-based NICs, and it was
+ * deemed unnecessary because only the i225 NIC would've called this
+ * code anyway because it was in the IGC driver.
+ *
+ * In IGB, it is no longer the case that this code is only called by
+ * i225 NICs, so it could be argued that the check should've been added
+ * back. However, as evidenced in the original commit removing the
+ * check, the removal was causing problems with some i225-based NICs,
+ * adding it back would've introduced the issue again. It is assumed
+ * that only i225 will attempt to advertise 2.5G speed anyway, so it is
+ * hoped that not adding the check will not cause problems.
+ */
+ if (phy->autoneg_mask & ADVERTISE_2500_FULL)
+ ret_val = phy->ops.write_reg(hw,
+ (STANDARD_AN_REG_MASK <<
+ MMD_DEVADDR_SHIFT) |
+ ANEG_MULTIGBT_AN_CTRL,
+ aneg_multigbt_an_ctrl);
+
return ret_val;
}
@@ -1848,6 +1909,7 @@ s32 e1000_phy_force_speed_duplex_m88(struct e1000_hw *hw)
case M88E1543_E_PHY_ID:
case M88E1512_E_PHY_ID:
case I210_I_PHY_ID:
+ case I225_I_PHY_ID:
reset_dsp = false;
break;
default:
@@ -1889,6 +1951,8 @@ s32 e1000_phy_force_speed_duplex_m88(struct e1000_hw *hw)
return E1000_SUCCESS;
if (hw->phy.id == I210_I_PHY_ID)
return E1000_SUCCESS;
+ if (hw->phy.id == I225_I_PHY_ID)
+ return E1000_SUCCESS;
if ((hw->phy.id == M88E1543_E_PHY_ID) ||
(hw->phy.id == M88E1512_E_PHY_ID))
return E1000_SUCCESS;
@@ -2416,7 +2480,7 @@ s32 e1000_get_cable_length_m88(struct e1000_hw *hw)
s32 e1000_get_cable_length_m88_gen2(struct e1000_hw *hw)
{
struct e1000_phy_info *phy = &hw->phy;
- s32 ret_val;
+ s32 ret_val = 0;
u16 phy_data, phy_data2, is_cm;
u16 index, default_page;
@@ -2444,6 +2508,8 @@ s32 e1000_get_cable_length_m88_gen2(struct e1000_hw *hw)
phy->max_cable_length = phy_data / (is_cm ? 100 : 1);
phy->cable_length = phy_data / (is_cm ? 100 : 1);
break;
+ case I225_I_PHY_ID:
+ break;
case M88E1543_E_PHY_ID:
case M88E1512_E_PHY_ID:
case M88E1340M_E_PHY_ID:
@@ -3023,6 +3089,9 @@ enum e1000_phy_type e1000_get_phy_type_from_id(u32 phy_id)
case I210_I_PHY_ID:
phy_type = e1000_phy_i210;
break;
+ case I225_I_PHY_ID:
+ phy_type = e1000_phy_i225;
+ break;
default:
phy_type = e1000_phy_unknown;
break;
@@ -3890,7 +3959,7 @@ s32 e1000_phy_force_speed_duplex_82577(struct e1000_hw *hw)
struct e1000_phy_info *phy = &hw->phy;
s32 ret_val;
u16 phy_data;
- bool link;
+ bool link = false;
DEBUGFUNC("e1000_phy_force_speed_duplex_82577");
@@ -4083,6 +4152,73 @@ s32 e1000_read_phy_reg_gs40g(struct e1000_hw *hw, u32 offset, u16 *data)
return ret_val;
}
+/**
+ * e1000_write_phy_reg_gpy - Write GPY PHY register
+ * @hw: pointer to the HW structure
+ * @offset: register offset to write to
+ * @data: data to write at register offset
+ *
+ * Acquires semaphore, if necessary, then writes the data to PHY register
+ * at the offset. Release any acquired semaphores before exiting.
+ **/
+s32 e1000_write_phy_reg_gpy(struct e1000_hw *hw, u32 offset, u16 data)
+{
+ s32 ret_val;
+ u8 dev_addr = (offset & GPY_MMD_MASK) >> GPY_MMD_SHIFT;
+
+ DEBUGFUNC("e1000_write_phy_reg_gpy");
+
+ offset = offset & GPY_REG_MASK;
+
+ if (!dev_addr) {
+ ret_val = hw->phy.ops.acquire(hw);
+ if (ret_val)
+ return ret_val;
+ ret_val = e1000_write_phy_reg_mdic(hw, offset, data);
+ if (ret_val)
+ return ret_val;
+ hw->phy.ops.release(hw);
+ } else {
+ ret_val = e1000_write_xmdio_reg(hw, (u16)offset, dev_addr,
+ data);
+ }
+ return ret_val;
+}
+
+/**
+ * e1000_read_phy_reg_gpy - Read GPY PHY register
+ * @hw: pointer to the HW structure
+ * @offset: lower half is register offset to read to
+ * upper half is MMD to use.
+ * @data: data to read at register offset
+ *
+ * Acquires semaphore, if necessary, then reads the data in the PHY register
+ * at the offset. Release any acquired semaphores before exiting.
+ **/
+s32 e1000_read_phy_reg_gpy(struct e1000_hw *hw, u32 offset, u16 *data)
+{
+ s32 ret_val;
+ u8 dev_addr = (offset & GPY_MMD_MASK) >> GPY_MMD_SHIFT;
+
+ DEBUGFUNC("e1000_read_phy_reg_gpy");
+
+ offset = offset & GPY_REG_MASK;
+
+ if (!dev_addr) {
+ ret_val = hw->phy.ops.acquire(hw);
+ if (ret_val)
+ return ret_val;
+ ret_val = e1000_read_phy_reg_mdic(hw, offset, data);
+ if (ret_val)
+ return ret_val;
+ hw->phy.ops.release(hw);
+ } else {
+ ret_val = e1000_read_xmdio_reg(hw, (u16)offset, dev_addr,
+ data);
+ }
+ return ret_val;
+}
+
/**
* e1000_read_phy_reg_mphy - Read mPHY control register
* @hw: pointer to the HW structure
diff --git a/drivers/net/intel/e1000/base/e1000_phy.h b/drivers/net/intel/e1000/base/e1000_phy.h
index 81c5308589..a7834240e0 100644
--- a/drivers/net/intel/e1000/base/e1000_phy.h
+++ b/drivers/net/intel/e1000/base/e1000_phy.h
@@ -86,6 +86,8 @@ s32 e1000_phy_force_speed_duplex_82577(struct e1000_hw *hw);
s32 e1000_get_cable_length_82577(struct e1000_hw *hw);
s32 e1000_write_phy_reg_gs40g(struct e1000_hw *hw, u32 offset, u16 data);
s32 e1000_read_phy_reg_gs40g(struct e1000_hw *hw, u32 offset, u16 *data);
+s32 e1000_write_phy_reg_gpy(struct e1000_hw *hw, u32 offset, u16 data);
+s32 e1000_read_phy_reg_gpy(struct e1000_hw *hw, u32 offset, u16 *data);
s32 e1000_read_phy_reg_mphy(struct e1000_hw *hw, u32 address, u32 *data);
s32 e1000_write_phy_reg_mphy(struct e1000_hw *hw, u32 address, u32 data,
bool line_override);
@@ -120,6 +122,21 @@ s32 e1000_write_xmdio_reg(struct e1000_hw *hw, u16 addr, u8 dev_addr,
#define GS40G_MAC_SPEED_1G 0X0006
#define GS40G_COPPER_SPEC 0x0010
+#define E1000_I225_PHPM 0x0E14 /* I225 PHY Power Management */
+#define E1000_I225_PHPM_DIS_1000_D3 0x0008 /* Disable 1G in D3 */
+#define E1000_I225_PHPM_LINK_ENERGY 0x0010 /* Link Energy Detect */
+#define E1000_I225_PHPM_GO_LINKD 0x0020 /* Go Link Disconnect */
+#define E1000_I225_PHPM_DIS_1000 0x0040 /* Disable 1G globally */
+#define E1000_I225_PHPM_SPD_B2B_EN 0x0080 /* Smart Power Down Back2Back */
+#define E1000_I225_PHPM_RST_COMPL 0x0100 /* PHY Reset Completed */
+#define E1000_I225_PHPM_DIS_100_D3 0x0200 /* Disable 100M in D3 */
+#define E1000_I225_PHPM_ULP 0x0400 /* Ultra Low-Power Mode */
+#define E1000_I225_PHPM_DIS_2500 0x0800 /* Disable 2.5G globally */
+#define E1000_I225_PHPM_DIS_2500_D3 0x1000 /* Disable 2.5G in D3 */
+/* GPY211 - I225 defines */
+#define GPY_MMD_MASK 0xFFFF0000
+#define GPY_MMD_SHIFT 16
+#define GPY_REG_MASK 0x0000FFFF
/* BM/HV Specific Registers */
#define BM_PORT_CTRL_PAGE 769
#define BM_WUC_PAGE 800
diff --git a/drivers/net/intel/e1000/base/e1000_regs.h b/drivers/net/intel/e1000/base/e1000_regs.h
index 092d9d71e6..32acbb4789 100644
--- a/drivers/net/intel/e1000/base/e1000_regs.h
+++ b/drivers/net/intel/e1000/base/e1000_regs.h
@@ -30,6 +30,10 @@
#define E1000_FCAL 0x00028 /* Flow Control Address Low - RW */
#define E1000_FCAH 0x0002C /* Flow Control Address High -RW */
#define E1000_FEXT 0x0002C /* Future Extended - RW */
+#define E1000_I225_FLSWCTL 0x12048 /* FLASH control register */
+#define E1000_I225_FLSWDATA 0x1204C /* FLASH data register */
+#define E1000_I225_FLSWCNT 0x12050 /* FLASH Access Counter */
+#define E1000_I225_FLSECU 0x12114 /* FLASH Security */
#define E1000_FEXTNVM 0x00028 /* Future Extended NVM - RW */
#define E1000_FEXTNVM3 0x0003C /* Future Extended NVM 3 - RW */
#define E1000_FEXTNVM4 0x00024 /* Future Extended NVM 4 - RW */
@@ -87,8 +91,10 @@
#define E1000_IOSFPC 0x00F28 /* TX corrupted data */
#define E1000_EEMNGCTL 0x01010 /* MNG EEprom Control */
#define E1000_EEMNGCTL_I210 0x01010 /* i210 MNG EEprom Mode Control */
+#define E1000_EEMNGCTL_I225 0x01010 /* i225 MNG EEprom Mode Control */
#define E1000_EEARBC 0x01024 /* EEPROM Auto Read Bus Control */
#define E1000_EEARBC_I210 0x12024 /* EEPROM Auto Read Bus Control */
+#define E1000_EEARBC_I225 0x12024 /* EEPROM Auto Read Bus Control */
#define E1000_FLASHT 0x01028 /* FLASH Timer Register */
#define E1000_EEWR 0x0102C /* EEPROM Write Register - RW */
#define E1000_FLSWCTL 0x01030 /* FLASH control register */
@@ -261,6 +267,9 @@
(0x054E0 + ((_i - 16) * 8)))
#define E1000_RAH(_i) (((_i) <= 15) ? (0x05404 + ((_i) * 8)) : \
(0x054E4 + ((_i - 16) * 8)))
+
+#define E1000_VLAPQF 0x055B0 /* VLAN Priority Queue Filter VLAPQF */
+
#define E1000_SHRAL(_i) (0x05438 + ((_i) * 8))
#define E1000_SHRAH(_i) (0x0543C + ((_i) * 8))
#define E1000_IP4AT_REG(_i) (0x05840 + ((_i) * 8))
@@ -482,6 +491,17 @@
#define E1000_IP6AT 0x05880 /* IPv6 Address Table - RW Array */
#define E1000_WUPL 0x05900 /* Wakeup Packet Length - RW */
#define E1000_WUPM 0x05A00 /* Wakeup Packet Memory - RO A */
+#define E1000_WUPM_EXT 0x0B800 /* Wakeup Packet Memory Extended - RO Array */
+#define E1000_WUFC_EXT 0x0580C /* Wakeup Filter Control Extended - RW */
+#define E1000_WUS_EXT 0x05814 /* Wakeup Status Extended - RW1C */
+#define E1000_FHFTSL 0x05804 /* Flex Filter Indirect Table Select - RW */
+#define E1000_PROXYFCEX 0x05590 /* Proxy Filter Control Extended - RW1C */
+#define E1000_PROXYEXS 0x05594 /* Proxy Extended Status - RO */
+#define E1000_WFUTPF 0x05500 /* Wake Flex UDP TCP Port Filter - RW Array */
+#define E1000_RFUTPF 0x05580 /* Range Flex UDP TCP Port Filter - RW */
+#define E1000_RWPFC 0x05584 /* Range Wake Port Filter Control - RW */
+#define E1000_WFUTPS 0x05588 /* Wake Filter UDP TCP Status - RW1C */
+#define E1000_WCS 0x0558C /* Wake Control Status - RW1C */
/* MSI-X Table Register Descriptions */
#define E1000_PBACL 0x05B68 /* MSIx PBA Clear - Read/Write 1's to clear */
#define E1000_FFLT 0x05F00 /* Flexible Filter Length Table - RW Array */
@@ -593,6 +613,14 @@
#define E1000_RXMTRL 0x0B634 /* Time sync Rx EtherType and Msg Type - RW */
#define E1000_RXUDP 0x0B638 /* Time Sync Rx UDP Port - RW */
+#define E1000_QBVCYCLET 0x331C
+#define E1000_QBVCYCLET_S 0x3320
+#define E1000_STQT(_n) (0x3324 + 0x4 * (_n))
+#define E1000_ENDQT(_n) (0x3334 + 0x4 * (_n))
+#define E1000_TXQCTL(_n) (0x3344 + 0x4 * (_n))
+#define E1000_BASET_L 0x3314
+#define E1000_BASET_H 0x3318
+
/* Filtering Registers */
#define E1000_SAQF(_n) (0x05980 + (4 * (_n))) /* Source Address Queue Fltr */
#define E1000_DAQF(_n) (0x059A0 + (4 * (_n))) /* Dest Address Queue Fltr */
@@ -678,6 +706,7 @@
#define E1000_LTRC 0x01A0 /* Latency Tolerance Reporting Control */
#define E1000_EEER 0x0E30 /* Energy Efficient Ethernet "EEE"*/
#define E1000_EEE_SU 0x0E34 /* EEE Setup */
+#define E1000_EEE_SU_2P5 0x0E3C /* EEE 2.5G Setup */
#define E1000_TLPIC 0x4148 /* EEE Tx LPI Count - TLPIC */
#define E1000_RLPIC 0x414C /* EEE Rx LPI Count - RLPIC */
@@ -687,6 +716,36 @@
#define E1000_O2BGPTC 0x08FE4 /* OS2BMC packets received by BMC */
#define E1000_O2BSPC 0x0415C /* OS2BMC packets transmitted by host */
+#define E1000_LTRMINV 0x5BB0 /* LTR Minimum Value */
+#define E1000_LTRMAXV 0x5BB4 /* LTR Maximum Value */
+/* IEEE 1588 TIMESYNCH */
+#define E1000_TRGTTIML0 0x0B644 /* Target Time Register 0 Low - RW */
+#define E1000_TRGTTIMH0 0x0B648 /* Target Time Register 0 High - RW */
+#define E1000_TRGTTIML1 0x0B64C /* Target Time Register 1 Low - RW */
+#define E1000_TRGTTIMH1 0x0B650 /* Target Time Register 1 High - RW */
+#define E1000_FREQOUT0 0x0B654 /* Frequency Out 0 Control Register - RW */
+#define E1000_FREQOUT1 0x0B658 /* Frequency Out 1 Control Register - RW */
+#define E1000_TSSDP 0x0003C /* Time Sync SDP Configuration Register - RW */
+
+#define E1000_LTRC_EEEMS_EN (1 << 5)
+#define E1000_TW_SYSTEM_100_MASK 0xff00
+#define E1000_TW_SYSTEM_100_SHIFT 8
+#define E1000_TW_SYSTEM_1000_MASK 0xff
+#define E1000_LTRMINV_SCALE_1024 0x02
+#define E1000_LTRMINV_SCALE_32768 0x03
+#define E1000_LTRMAXV_SCALE_1024 0x02
+#define E1000_LTRMAXV_SCALE_32768 0x03
+#define E1000_LTRMINV_LTRV_MASK 0x1ff
+#define E1000_LTRMINV_LSNP_REQ 0x80
+#define E1000_LTRMINV_SCALE_SHIFT 10
+#define E1000_LTRMAXV_LTRV_MASK 0x1ff
+#define E1000_LTRMAXV_LSNP_REQ 0x80
+#define E1000_LTRMAXV_SCALE_SHIFT 10
+
+#define E1000_MRQC_ENABLE_MASK 0x00000007
+#define E1000_MRQC_RSS_FIELD_IPV6_EX 0x00080000
+#define E1000_RCTL_DTYP_MASK 0x00000C00 /* Descriptor type mask */
+
#endif
diff --git a/drivers/net/intel/e1000/base/meson.build b/drivers/net/intel/e1000/base/meson.build
index e73f3d6d55..033b3af2e2 100644
--- a/drivers/net/intel/e1000/base/meson.build
+++ b/drivers/net/intel/e1000/base/meson.build
@@ -12,6 +12,7 @@ sources = [
'e1000_82575.c',
'e1000_api.c',
'e1000_i210.c',
+ 'e1000_i225.c',
'e1000_ich8lan.c',
'e1000_mac.c',
'e1000_manage.c',
--
2.43.5
next prev parent reply other threads:[~2025-02-04 15:11 UTC|newest]
Thread overview: 105+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-31 12:58 [PATCH v1 00/42] Merge Intel IGC and E1000 drivers, and update E1000 base code Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 01/42] net/e1000/base: fix semaphore timeout value Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 02/42] net/e1000/base: add initial support for i225 Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 03/42] net/e1000/base: add link bringup " Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 04/42] net/e1000/base: add LED blink " Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 05/42] net/e1000/base: add NVM/EEPROM " Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 06/42] net/e1000/base: add LTR support in i225 Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 07/42] net/e1000/base: add eee support for i225 Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 08/42] net/e1000/base: add misc definitions " Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 09/42] net/e1000: merge igc with e1000 Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 10/42] net/e1000: add missing i225 devices Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 11/42] net/e1000: add missing hardware support Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 12/42] net/e1000: add support for more I219 devices Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 13/42] net/e1000/base: correct minor formatting issues Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 14/42] net/e1000/base: correct mPHY access logic Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 15/42] net/e1000/base: skip MANC check for 82575 Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 16/42] net/e1000/base: correct disable k1 logic Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 17/42] net/e1000/base: workaround for packet loss Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 18/42] net/e1000/base: add EEE common API function Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 19/42] net/e1000/base: add queue select definitions Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 20/42] net/e1000/base: add profile information field Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 21/42] net/e1000/base: add LPI counters Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 22/42] net/e1000/base: improve code flow in ICH8LAN Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 23/42] net/e1000/base: add definition for EXFWSM register Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 24/42] net/e1000/base: use longer ULP exit timeout on more HW Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 25/42] net/e1000/base: make e1000_access_phy_wakeup_reg_bm non-static Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 26/42] net/e1000/base: make debug prints more informative Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 27/42] net/e1000/base: add WoL definitions Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 28/42] net/e1000/base: hardcode bus parameters for ICH8 Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 29/42] net/e1000/base: improve NVM checksum handling Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 30/42] net/e1000/base: remove redundant access to RO register Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 31/42] net/e1000/base: remove non-inclusive language Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 32/42] net/e1000/base: introduce PHY ID retry mechanism Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 33/42] net/e1000/base: add PHY read/write " Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 34/42] net/e1000/base: fix iterator type Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 35/42] net/e1000/base: fix static analysis warnings Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 36/42] net/e1000/base: fix reset for 82580 Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 37/42] net/e1000/base: fix mac addr hash bit_shift Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 38/42] net/e1000/base: fix uninitialized variable usage Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 39/42] net/e1000/base: fix unchecked return Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 40/42] net/e1000/base: fix data type in MAC hash Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 41/42] net/e1000/base: rename NVM version variable Anatoly Burakov
2025-01-31 12:58 ` [PATCH v1 42/42] net/e1000/base: update readme Anatoly Burakov
2025-01-31 13:11 ` [PATCH v1 00/42] Merge Intel IGC and E1000 drivers, and update E1000 base code Bruce Richardson
2025-01-31 13:13 ` David Marchand
2025-02-03 8:18 ` David Marchand
2025-02-04 15:35 ` Burakov, Anatoly
2025-02-05 10:05 ` David Marchand
2025-02-04 15:10 ` [PATCH v2 00/54] " Anatoly Burakov
2025-02-04 15:10 ` Anatoly Burakov [this message]
2025-02-04 15:10 ` [PATCH v2 02/54] net/e1000: merge igc with e1000 Anatoly Burakov
2025-02-05 10:49 ` Bruce Richardson
2025-02-04 15:10 ` [PATCH v2 03/54] net/igc: remove the driver Anatoly Burakov
2025-02-05 10:45 ` Bruce Richardson
2025-02-04 15:10 ` [PATCH v2 04/54] net/e1000/base: remove unused parameter workaround Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 05/54] net/e1000: add missing i225 devices Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 06/54] net/e1000: add missing hardware support Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 07/54] net/e1000: add support for more I219 devices Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 08/54] net/e1000/base: correct formatting differences Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 09/54] net/e1000/base: add missing definitions Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 10/54] net/e1000/base: read PCIe bus info in i225 Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 11/54] net/e1000/base: rename VLAN PQF macros Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 12/54] net/e1000/base: add PHY power management control Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 13/54] net/e1000/base: remove unused function Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 14/54] net/e1000/base: add LED blink support for i225 Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 15/54] net/e1000/base: increase PHY power up delay Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 16/54] net/e1000/base: fix deadlock in i225 Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 17/54] net/e1000/base: add PHY reset support for i225 Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 18/54] net/e1000/base: fix infinite loop Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 19/54] net/e1000/base: fix bitwise op type mismatch Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 20/54] net/e1000/base: reset loop variable Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 21/54] net/e1000/base: fix LTR for i225 Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 22/54] net/e1000/base: fix typo in LTR calculation Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 23/54] net/e1000/base: fix unused value Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 24/54] net/e1000/base: make set_ltr for i225 non-static Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 25/54] net/e1000/base: fix semaphore timeout value Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 26/54] net/e1000/base: correct mPHY access logic Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 27/54] net/e1000/base: skip MANC check for 82575 Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 28/54] net/e1000/base: correct disable k1 logic Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 29/54] net/e1000/base: workaround for packet loss Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 30/54] net/e1000/base: add EEE common API function Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 31/54] net/e1000/base: add queue select definitions Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 32/54] net/e1000/base: add profile information field Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 33/54] net/e1000/base: add LPI counters Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 34/54] net/e1000/base: improve code flow in ICH8LAN Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 35/54] net/e1000/base: add definition for EXFWSM register Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 36/54] net/e1000/base: use longer ULP exit timeout on more HW Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 37/54] net/e1000/base: make e1000_access_phy_wakeup_reg_bm non-static Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 38/54] net/e1000/base: make debug prints more informative Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 39/54] net/e1000/base: add WoL definitions Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 40/54] net/e1000/base: hardcode bus parameters for ICH8 Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 41/54] net/e1000/base: improve NVM checksum handling Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 42/54] net/e1000/base: remove redundant access to RO register Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 43/54] net/e1000/base: remove non-inclusive language Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 44/54] net/e1000/base: introduce PHY ID retry mechanism Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 45/54] net/e1000/base: add PHY read/write " Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 46/54] net/e1000/base: fix iterator type Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 47/54] net/e1000/base: fix static analysis warnings Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 48/54] net/e1000/base: fix reset for 82580 Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 49/54] net/e1000/base: fix mac addr hash bit_shift Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 50/54] net/e1000/base: fix uninitialized variable usage Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 51/54] net/e1000/base: fix unchecked return Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 52/54] net/e1000/base: fix data type in MAC hash Anatoly Burakov
2025-02-04 15:10 ` [PATCH v2 53/54] net/e1000/base: rename NVM version variable Anatoly Burakov
2025-02-04 15:11 ` [PATCH v2 54/54] net/e1000/base: update readme Anatoly Burakov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=13c09445b09e188bb7b20787fb296018d834a83c.1738681725.git.anatoly.burakov@intel.com \
--to=anatoly.burakov@intel.com \
--cc=bruce.richardson@intel.com \
--cc=dev@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).