forked from Minki/linux
igb: Add Energy Efficient Ethernet (EEE) for i350 devices.
This patch adds the EEE feature for i350 devices, enabled by default. Signed-off-by: Carolyn Wyborny <carolyn.wyborny@intel.com> Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
422e05d12a
commit
09b068d457
@ -195,7 +195,11 @@ static s32 igb_get_invariants_82575(struct e1000_hw *hw)
|
||||
mac->arc_subsystem_valid =
|
||||
(rd32(E1000_FWSM) & E1000_FWSM_MODE_MASK)
|
||||
? true : false;
|
||||
|
||||
/* enable EEE on i350 parts */
|
||||
if (mac->type == e1000_i350)
|
||||
dev_spec->eee_disable = false;
|
||||
else
|
||||
dev_spec->eee_disable = true;
|
||||
/* physical interface link setup */
|
||||
mac->ops.setup_physical_interface =
|
||||
(hw->phy.media_type == e1000_media_type_copper)
|
||||
@ -1754,6 +1758,46 @@ u16 igb_rxpbs_adjust_82580(u32 data)
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
/**
|
||||
* igb_set_eee_i350 - Enable/disable EEE support
|
||||
* @hw: pointer to the HW structure
|
||||
*
|
||||
* Enable/disable EEE based on setting in dev_spec structure.
|
||||
*
|
||||
**/
|
||||
s32 igb_set_eee_i350(struct e1000_hw *hw)
|
||||
{
|
||||
s32 ret_val = 0;
|
||||
u32 ipcnfg, eeer, ctrl_ext;
|
||||
|
||||
ctrl_ext = rd32(E1000_CTRL_EXT);
|
||||
if ((hw->mac.type != e1000_i350) ||
|
||||
(ctrl_ext & E1000_CTRL_EXT_LINK_MODE_MASK))
|
||||
goto out;
|
||||
ipcnfg = rd32(E1000_IPCNFG);
|
||||
eeer = rd32(E1000_EEER);
|
||||
|
||||
/* enable or disable per user setting */
|
||||
if (!(hw->dev_spec._82575.eee_disable)) {
|
||||
ipcnfg |= (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);
|
||||
|
||||
} else {
|
||||
ipcnfg &= ~(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);
|
||||
}
|
||||
wr32(E1000_IPCNFG, ipcnfg);
|
||||
wr32(E1000_EEER, eeer);
|
||||
out:
|
||||
|
||||
return ret_val;
|
||||
}
|
||||
static struct e1000_mac_operations e1000_mac_ops_82575 = {
|
||||
.init_hw = igb_init_hw_82575,
|
||||
.check_for_link = igb_check_for_link_82575,
|
||||
|
@ -251,5 +251,6 @@ void igb_vmdq_set_anti_spoofing_pf(struct e1000_hw *, bool, int);
|
||||
void igb_vmdq_set_loopback_pf(struct e1000_hw *, bool);
|
||||
void igb_vmdq_set_replication_pf(struct e1000_hw *, bool);
|
||||
u16 igb_rxpbs_adjust_82580(u32 data);
|
||||
s32 igb_set_eee_i350(struct e1000_hw *);
|
||||
|
||||
#endif
|
||||
|
@ -758,6 +758,13 @@
|
||||
#define E1000_MDIC_ERROR 0x40000000
|
||||
#define E1000_MDIC_DEST 0x80000000
|
||||
|
||||
/* Energy Efficient Ethernet */
|
||||
#define E1000_IPCNFG_EEE_1G_AN 0x00000008 /* EEE Enable 1G AN */
|
||||
#define E1000_IPCNFG_EEE_100M_AN 0x00000004 /* EEE Enable 100M AN */
|
||||
#define E1000_EEER_TX_LPI_EN 0x00010000 /* EEE Tx LPI Enable */
|
||||
#define E1000_EEER_RX_LPI_EN 0x00020000 /* EEE Rx LPI Enable */
|
||||
#define E1000_EEER_LPI_FC 0x00040000 /* EEE Enable on FC */
|
||||
|
||||
/* SerDes Control */
|
||||
#define E1000_GEN_CTL_READY 0x80000000
|
||||
#define E1000_GEN_CTL_ADDRESS_SHIFT 8
|
||||
|
@ -488,6 +488,7 @@ struct e1000_mbx_info {
|
||||
struct e1000_dev_spec_82575 {
|
||||
bool sgmii_active;
|
||||
bool global_device_reset;
|
||||
bool eee_disable;
|
||||
};
|
||||
|
||||
struct e1000_hw {
|
||||
|
@ -329,6 +329,10 @@
|
||||
/* DMA Coalescing registers */
|
||||
#define E1000_PCIEMISC 0x05BB8 /* PCIE misc config register */
|
||||
|
||||
/* Energy Efficient Ethernet "EEE" register */
|
||||
#define E1000_IPCNFG 0x0E38 /* Internal PHY Configuration */
|
||||
#define E1000_EEER 0x0E30 /* Energy Efficient Ethernet */
|
||||
|
||||
/* OS2BMC Registers */
|
||||
#define E1000_B2OSPC 0x08FE0 /* BMC2OS packets sent by BMC */
|
||||
#define E1000_B2OGPRC 0x04158 /* BMC2OS packets received by host */
|
||||
|
@ -2014,7 +2014,13 @@ static int __devinit igb_probe(struct pci_dev *pdev,
|
||||
adapter->msix_entries ? "MSI-X" :
|
||||
(adapter->flags & IGB_FLAG_HAS_MSI) ? "MSI" : "legacy",
|
||||
adapter->num_rx_queues, adapter->num_tx_queues);
|
||||
|
||||
switch (hw->mac.type) {
|
||||
case e1000_i350:
|
||||
igb_set_eee_i350(hw);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
|
||||
err_register:
|
||||
|
Loading…
Reference in New Issue
Block a user