* [PATCH 0/5] sky2: driver update
@ 2008-05-15 0:04 Stephen Hemminger
2008-05-15 0:04 ` [PATCH 1/5] sky2: restore vlan acceleration on reset Stephen Hemminger
` (4 more replies)
0 siblings, 5 replies; 13+ messages in thread
From: Stephen Hemminger @ 2008-05-15 0:04 UTC (permalink / raw)
To: Jeff Garzik; +Cc: netdev
Some patches for 2.6.26 and future versions
--
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 1/5] sky2: restore vlan acceleration on reset
2008-05-15 0:04 [PATCH 0/5] sky2: driver update Stephen Hemminger
@ 2008-05-15 0:04 ` Stephen Hemminger
2008-05-21 17:02 ` Stephen Hemminger
2008-05-22 10:01 ` Jeff Garzik
2008-05-15 0:04 ` [PATCH 2/5] sky2: don't warn if page allocation fails Stephen Hemminger
` (3 subsequent siblings)
4 siblings, 2 replies; 13+ messages in thread
From: Stephen Hemminger @ 2008-05-15 0:04 UTC (permalink / raw)
To: Jeff Garzik; +Cc: netdev
[-- Attachment #1: sky2-vlan-restore.patch --]
[-- Type: text/plain, Size: 1720 bytes --]
If device has to be reset by sky2_restart, then need to restore
the VLAN acceleration settings.
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
---
Please apply to 2.6.26
--- a/drivers/net/sky2.c 2008-05-14 16:28:22.000000000 -0700
+++ b/drivers/net/sky2.c 2008-05-14 16:29:39.000000000 -0700
@@ -1159,17 +1159,9 @@ static int sky2_ioctl(struct net_device
}
#ifdef SKY2_VLAN_TAG_USED
-static void sky2_vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
+static void sky2_set_vlan_mode(struct sky2_hw *hw, u16 port, bool onoff)
{
- struct sky2_port *sky2 = netdev_priv(dev);
- struct sky2_hw *hw = sky2->hw;
- u16 port = sky2->port;
-
- netif_tx_lock_bh(dev);
- napi_disable(&hw->napi);
-
- sky2->vlgrp = grp;
- if (grp) {
+ if (onoff) {
sky2_write32(hw, SK_REG(port, RX_GMF_CTRL_T),
RX_VLAN_STRIP_ON);
sky2_write32(hw, SK_REG(port, TX_GMF_CTRL_T),
@@ -1180,6 +1172,19 @@ static void sky2_vlan_rx_register(struct
sky2_write32(hw, SK_REG(port, TX_GMF_CTRL_T),
TX_VLAN_TAG_OFF);
}
+}
+
+static void sky2_vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
+{
+ struct sky2_port *sky2 = netdev_priv(dev);
+ struct sky2_hw *hw = sky2->hw;
+ u16 port = sky2->port;
+
+ netif_tx_lock_bh(dev);
+ napi_disable(&hw->napi);
+
+ sky2->vlgrp = grp;
+ sky2_set_vlan_mode(hw, port, grp != NULL);
sky2_read32(hw, B0_Y2_SP_LISR);
napi_enable(&hw->napi);
@@ -1418,6 +1423,10 @@ static int sky2_up(struct net_device *de
sky2_prefetch_init(hw, txqaddr[port], sky2->tx_le_map,
TX_RING_SIZE - 1);
+#ifdef SKY2_VLAN_TAG_USED
+ sky2_set_vlan_mode(hw, port, sky2->vlgrp != NULL);
+#endif
+
err = sky2_rx_start(sky2);
if (err)
goto err_out;
--
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 2/5] sky2: don't warn if page allocation fails
2008-05-15 0:04 [PATCH 0/5] sky2: driver update Stephen Hemminger
2008-05-15 0:04 ` [PATCH 1/5] sky2: restore vlan acceleration on reset Stephen Hemminger
@ 2008-05-15 0:04 ` Stephen Hemminger
2008-05-22 9:57 ` Jeff Garzik
2008-05-15 0:04 ` [PATCH 3/5] sky2: split phy power into two functions Stephen Hemminger
` (2 subsequent siblings)
4 siblings, 1 reply; 13+ messages in thread
From: Stephen Hemminger @ 2008-05-15 0:04 UTC (permalink / raw)
To: Jeff Garzik; +Cc: netdev
[-- Attachment #1: sky2-nowarn-alloc-page.patch --]
[-- Type: text/plain, Size: 662 bytes --]
Since driver handles page allocation failure, no need for extra
warnings.
Note: it only allocates single pages so if the system is
so tight it can't one page it is probably hosed anyway.
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
---
Please apply to 2.6.26
--- a/drivers/net/sky2.c 2008-05-14 16:29:39.000000000 -0700
+++ b/drivers/net/sky2.c 2008-05-14 16:29:44.000000000 -0700
@@ -1223,7 +1223,7 @@ static struct sk_buff *sky2_rx_alloc(str
}
for (i = 0; i < sky2->rx_nfrags; i++) {
- struct page *page = alloc_page(GFP_ATOMIC);
+ struct page *page = alloc_page(GFP_ATOMIC | __GFP_NOWARN);
if (!page)
goto free_partial;
--
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 3/5] sky2: split phy power into two functions
2008-05-15 0:04 [PATCH 0/5] sky2: driver update Stephen Hemminger
2008-05-15 0:04 ` [PATCH 1/5] sky2: restore vlan acceleration on reset Stephen Hemminger
2008-05-15 0:04 ` [PATCH 2/5] sky2: don't warn if page allocation fails Stephen Hemminger
@ 2008-05-15 0:04 ` Stephen Hemminger
2008-05-31 2:20 ` Jeff Garzik
2008-05-15 0:04 ` [PATCH 4/5] sky2: put PHY in sleep when down Stephen Hemminger
2008-05-15 0:04 ` [PATCH 5/5] sky2: pci power savings Stephen Hemminger
4 siblings, 1 reply; 13+ messages in thread
From: Stephen Hemminger @ 2008-05-15 0:04 UTC (permalink / raw)
To: Jeff Garzik; +Cc: netdev
[-- Attachment #1: sky2-power-split.patch --]
[-- Type: text/plain, Size: 2961 bytes --]
Later changes add more code to PHY power changes so refactor now.
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
---
This can wait for next release (#upstream) and go in -mm
--- a/drivers/net/sky2.c 2008-05-14 16:29:44.000000000 -0700
+++ b/drivers/net/sky2.c 2008-05-14 16:29:46.000000000 -0700
@@ -619,28 +619,35 @@ static void sky2_phy_init(struct sky2_hw
gm_phy_write(hw, port, PHY_MARV_INT_MASK, PHY_M_DEF_MSK);
}
-static void sky2_phy_power(struct sky2_hw *hw, unsigned port, int onoff)
+static const u32 phy_power[] = { PCI_Y2_PHY1_POWD, PCI_Y2_PHY2_POWD };
+static const u32 coma_mode[] = { PCI_Y2_PHY1_COMA, PCI_Y2_PHY2_COMA };
+
+static void sky2_phy_power_up(struct sky2_hw *hw, unsigned port)
{
u32 reg1;
- static const u32 phy_power[] = { PCI_Y2_PHY1_POWD, PCI_Y2_PHY2_POWD };
- static const u32 coma_mode[] = { PCI_Y2_PHY1_COMA, PCI_Y2_PHY2_COMA };
sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON);
reg1 = sky2_pci_read32(hw, PCI_DEV_REG1);
- /* Turn on/off phy power saving */
- if (onoff)
- reg1 &= ~phy_power[port];
- else
- reg1 |= phy_power[port];
+ reg1 &= ~phy_power[port];
- if (onoff && hw->chip_id == CHIP_ID_YUKON_XL && hw->chip_rev > 1)
+ if (hw->chip_id == CHIP_ID_YUKON_XL && hw->chip_rev > 1)
reg1 |= coma_mode[port];
sky2_pci_write32(hw, PCI_DEV_REG1, reg1);
sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF);
sky2_pci_read32(hw, PCI_DEV_REG1);
+}
+
+static void sky2_phy_power_down(struct sky2_hw *hw, unsigned port)
+{
+ u32 reg1;
+
+ sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON);
+ reg1 = sky2_pci_read32(hw, PCI_DEV_REG1);
+ reg1 |= phy_power[port];
- udelay(100);
+ sky2_pci_write32(hw, PCI_DEV_REG1, reg1);
+ sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF);
}
/* Force a renegotiation */
@@ -675,8 +682,11 @@ static void sky2_wol_init(struct sky2_po
sky2->advertising &= ~(ADVERTISED_1000baseT_Half|ADVERTISED_1000baseT_Full);
sky2->flow_mode = FC_NONE;
- sky2_phy_power(hw, port, 1);
- sky2_phy_reinit(sky2);
+
+ spin_lock_bh(&sky2->phy_lock);
+ sky2_phy_power_up(hw, port);
+ sky2_phy_init(hw, port);
+ spin_unlock_bh(&sky2->phy_lock);
sky2->flow_mode = save_mode;
sky2->advertising = ctrl;
@@ -781,6 +791,7 @@ static void sky2_mac_init(struct sky2_hw
sky2_write8(hw, SK_REG(port, GMAC_IRQ_MSK), GMAC_DEF_MSK);
spin_lock_bh(&sky2->phy_lock);
+ sky2_phy_power_up(hw, port);
sky2_phy_init(hw, port);
spin_unlock_bh(&sky2->phy_lock);
@@ -1385,8 +1396,6 @@ static int sky2_up(struct net_device *de
if (!sky2->rx_ring)
goto err_out;
- sky2_phy_power(hw, port, 1);
-
sky2_mac_init(hw, port);
/* Register is number of 4K blocks on internal RAM buffer. */
@@ -1767,7 +1776,7 @@ static int sky2_down(struct net_device *
sky2_write8(hw, SK_REG(port, RX_GMF_CTRL_T), GMF_RST_SET);
sky2_write8(hw, SK_REG(port, TX_GMF_CTRL_T), GMF_RST_SET);
- sky2_phy_power(hw, port, 0);
+ sky2_phy_power_down(hw, port);
netif_carrier_off(dev);
--
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 4/5] sky2: put PHY in sleep when down
2008-05-15 0:04 [PATCH 0/5] sky2: driver update Stephen Hemminger
` (2 preceding siblings ...)
2008-05-15 0:04 ` [PATCH 3/5] sky2: split phy power into two functions Stephen Hemminger
@ 2008-05-15 0:04 ` Stephen Hemminger
2008-05-15 0:04 ` [PATCH 5/5] sky2: pci power savings Stephen Hemminger
4 siblings, 0 replies; 13+ messages in thread
From: Stephen Hemminger @ 2008-05-15 0:04 UTC (permalink / raw)
To: Jeff Garzik; +Cc: netdev
[-- Attachment #1: sky2-deep-sleep.patch --]
[-- Type: text/plain, Size: 2838 bytes --]
Put PHY int sleep mode (from vendor sk98lin 10.50 driver) when the
network device is brought down.
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
---
This can wait for next release (#upstream) and go in -mm
--- a/drivers/net/sky2.c 2008-05-14 16:29:46.000000000 -0700
+++ b/drivers/net/sky2.c 2008-05-14 16:29:48.000000000 -0700
@@ -641,11 +641,47 @@ static void sky2_phy_power_up(struct sky
static void sky2_phy_power_down(struct sky2_hw *hw, unsigned port)
{
u32 reg1;
+ u16 ctrl;
+
+ /* release GPHY Control reset */
+ sky2_write8(hw, SK_REG(port, GPHY_CTRL), GPC_RST_CLR);
+
+ /* release GMAC reset */
+ sky2_write8(hw, SK_REG(port, GMAC_CTRL), GMC_RST_CLR);
+
+ if (hw->flags & SKY2_HW_NEWER_PHY) {
+ /* select page 2 to access MAC control register */
+ gm_phy_write(hw, port, PHY_MARV_EXT_ADR, 2);
+
+ ctrl = gm_phy_read(hw, port, PHY_MARV_PHY_CTRL);
+ /* allow GMII Power Down */
+ ctrl &= ~PHY_M_MAC_GMIF_PUP;
+ gm_phy_write(hw, port, PHY_MARV_PHY_CTRL, ctrl);
+
+ /* set page register back to 0 */
+ gm_phy_write(hw, port, PHY_MARV_EXT_ADR, 0);
+ }
+
+ /* setup General Purpose Control Register */
+ gma_write16(hw, port, GM_GP_CTRL,
+ GM_GPCR_FL_PASS | GM_GPCR_SPEED_100 | GM_GPCR_AU_ALL_DIS);
+
+ if (hw->chip_id != CHIP_ID_YUKON_EC) {
+ if (hw->chip_id == CHIP_ID_YUKON_EC_U) {
+ ctrl = gm_phy_read(hw, port, PHY_MARV_PHY_CTRL);
+
+ /* enable Power Down */
+ ctrl |= PHY_M_PC_POW_D_ENA;
+ gm_phy_write(hw, port, PHY_MARV_PHY_CTRL, ctrl);
+ }
+
+ /* set IEEE compatible Power Down Mode (dev. #4.99) */
+ gm_phy_write(hw, port, PHY_MARV_CTRL, PHY_CT_PDOWN);
+ }
sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON);
reg1 = sky2_pci_read32(hw, PCI_DEV_REG1);
- reg1 |= phy_power[port];
-
+ reg1 |= phy_power[port]; /* set PHY to PowerDown/COMA Mode */
sky2_pci_write32(hw, PCI_DEV_REG1, reg1);
sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF);
}
--- a/drivers/net/sky2.h 2008-05-14 16:29:12.000000000 -0700
+++ b/drivers/net/sky2.h 2008-05-14 16:29:48.000000000 -0700
@@ -1143,6 +1143,12 @@ enum {
PHY_M_PC_ENA_AUTO = 3, /* 11 = Enable Automatic Crossover */
};
+/* for Yukon-EC Ultra Gigabit Ethernet PHY (88E1149 only) */
+enum {
+ PHY_M_PC_COP_TX_DIS = 1<<3, /* Copper Transmitter Disable */
+ PHY_M_PC_POW_D_ENA = 1<<2, /* Power Down Enable */
+};
+
/* for 10/100 Fast Ethernet PHY (88E3082 only) */
enum {
PHY_M_PC_ENA_DTE_DT = 1<<15, /* Enable Data Terminal Equ. (DTE) Detect */
@@ -1411,6 +1417,7 @@ enum {
/***** PHY_MARV_PHY_CTRL (page 2) 16 bit r/w MAC Specific Ctrl *****/
enum {
PHY_M_MAC_MD_MSK = 7<<7, /* Bit 9.. 7: Mode Select Mask */
+ PHY_M_MAC_GMIF_PUP = 1<<3, /* GMII Power Up (88E1149 only) */
PHY_M_MAC_MD_AUTO = 3,/* Auto Copper/1000Base-X */
PHY_M_MAC_MD_COPPER = 5,/* Copper only */
PHY_M_MAC_MD_1000BX = 7,/* 1000Base-X only */
--
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 5/5] sky2: pci power savings
2008-05-15 0:04 [PATCH 0/5] sky2: driver update Stephen Hemminger
` (3 preceding siblings ...)
2008-05-15 0:04 ` [PATCH 4/5] sky2: put PHY in sleep when down Stephen Hemminger
@ 2008-05-15 0:04 ` Stephen Hemminger
4 siblings, 0 replies; 13+ messages in thread
From: Stephen Hemminger @ 2008-05-15 0:04 UTC (permalink / raw)
To: Jeff Garzik; +Cc: netdev
[-- Attachment #1: pci-power.patch --]
[-- Type: text/plain, Size: 6403 bytes --]
Turn on special bits to save more power when device is shutdown.
Tested on a limited range of hardware, some of the bits are for hardware
that probably isn't even in production (like Yukon Supreme) and was ported
from the vendor driver.
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
---
This is experimental so wait for 2.6.27 (#upstream) and go in -mm
--- a/drivers/net/sky2.c 2008-05-14 16:29:48.000000000 -0700
+++ b/drivers/net/sky2.c 2008-05-14 16:29:50.000000000 -0700
@@ -284,6 +284,86 @@ static void sky2_power_aux(struct sky2_h
PC_VAUX_ON | PC_VCC_OFF));
}
+static void sky2_power_state(struct sky2_hw *hw, pci_power_t state)
+{
+ u16 power_control = sky2_pci_read16(hw, hw->pm_cap + PCI_PM_CTRL);
+ int pex = pci_find_capability(hw->pdev, PCI_CAP_ID_EXP);
+ u32 reg;
+
+ sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON);
+
+ switch (state) {
+ case PCI_D0:
+ break;
+
+ case PCI_D1:
+ power_control |= 1;
+ break;
+
+ case PCI_D2:
+ power_control |= 2;
+ break;
+
+ case PCI_D3hot:
+ case PCI_D3cold:
+ power_control |= 3;
+ if (hw->flags & SKY2_HW_ADV_POWER_CTL) {
+ /* additional power saving measurements */
+ reg = sky2_pci_read32(hw, PCI_DEV_REG4);
+
+ /* set gating core clock for LTSSM in L1 state */
+ reg |= P_PEX_LTSSM_STAT(P_PEX_LTSSM_L1_STAT) |
+ /* auto clock gated scheme controlled by CLKREQ */
+ P_ASPM_A1_MODE_SELECT |
+ /* enable Gate Root Core Clock */
+ P_CLK_GATE_ROOT_COR_ENA;
+
+ if (pex && (hw->flags & SKY2_HW_CLK_POWER)) {
+ /* enable Clock Power Management (CLKREQ) */
+ u16 ctrl = sky2_pci_read16(hw, pex + PCI_EXP_DEVCTL);
+
+ ctrl |= PCI_EXP_DEVCTL_AUX_PME;
+ sky2_pci_write16(hw, pex + PCI_EXP_DEVCTL, ctrl);
+ } else
+ /* force CLKREQ Enable in Our4 (A1b only) */
+ reg |= P_ASPM_FORCE_CLKREQ_ENA;
+
+ /* set Mask Register for Release/Gate Clock */
+ sky2_pci_write32(hw, PCI_DEV_REG5,
+ P_REL_PCIE_EXIT_L1_ST | P_GAT_PCIE_ENTER_L1_ST |
+ P_REL_PCIE_RX_EX_IDLE | P_GAT_PCIE_RX_EL_IDLE |
+ P_REL_GPHY_LINK_UP | P_GAT_GPHY_LINK_DOWN);
+ } else
+ sky2_write8(hw, B28_Y2_ASF_STAT_CMD, Y2_ASF_CLK_HALT);
+
+ /* put CPU into reset state */
+ sky2_write8(hw, B28_Y2_ASF_STAT_CMD, HCU_CCSR_ASF_RESET);
+ if (hw->chip_id == CHIP_ID_YUKON_SUPR && hw->chip_rev == CHIP_REV_YU_SU_A0)
+ /* put CPU into halt state */
+ sky2_write8(hw, B28_Y2_ASF_STAT_CMD, HCU_CCSR_ASF_HALTED);
+
+ if (pex && !(hw->flags & SKY2_HW_RAM_BUFFER)) {
+ reg = sky2_pci_read32(hw, PCI_DEV_REG1);
+ /* force to PCIe L1 */
+ reg |= PCI_FORCE_PEX_L1;
+ sky2_pci_write32(hw, PCI_DEV_REG1, reg);
+ }
+ break;
+
+ default:
+ dev_warn(&hw->pdev->dev, PFX "Invalid power state (%d) ",
+ state);
+ return;
+ }
+
+ power_control |= PCI_PM_CTRL_PME_ENABLE;
+ /* Finally, set the new power state. */
+ sky2_pci_write32(hw, hw->pm_cap + PCI_PM_CTRL, power_control);
+
+ sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF);
+ sky2_pci_read32(hw, B0_CTST);
+}
+
static void sky2_gmac_reset(struct sky2_hw *hw, unsigned port)
{
u16 reg;
@@ -2786,6 +2866,10 @@ static int __devinit sky2_init(struct sk
hw->flags = SKY2_HW_GIGABIT
| SKY2_HW_NEWER_PHY
| SKY2_HW_ADV_POWER_CTL;
+
+ /* check for Rev. A1 dev 4200 */
+ if (sky2_read16(hw, Q_ADDR(Q_XA1, Q_WM)) == 0)
+ hw->flags |= SKY2_HW_CLK_POWER;
break;
case CHIP_ID_YUKON_EX:
@@ -2836,6 +2920,11 @@ static int __devinit sky2_init(struct sk
if (hw->pmd_type == 'L' || hw->pmd_type == 'S' || hw->pmd_type == 'P')
hw->flags |= SKY2_HW_FIBRE_PHY;
+ hw->pm_cap = pci_find_capability(hw->pdev, PCI_CAP_ID_PM);
+ if (hw->pm_cap == 0) {
+ dev_err(&hw->pdev->dev, "cannot find PowerManagement capability\n");
+ return -EIO;
+ }
hw->ports = 1;
t8 = sky2_read8(hw, B2_Y2_HW_RES);
@@ -4407,7 +4496,7 @@ static int sky2_suspend(struct pci_dev *
pci_save_state(pdev);
pci_enable_wake(pdev, pci_choose_state(pdev, state), wol);
- pci_set_power_state(pdev, pci_choose_state(pdev, state));
+ sky2_power_state(hw, pci_choose_state(pdev, state));
return 0;
}
@@ -4420,9 +4509,7 @@ static int sky2_resume(struct pci_dev *p
if (!hw)
return 0;
- err = pci_set_power_state(pdev, PCI_D0);
- if (err)
- goto out;
+ sky2_power_state(hw, PCI_D0);
err = pci_restore_state(pdev);
if (err)
@@ -4490,8 +4577,7 @@ static void sky2_shutdown(struct pci_dev
pci_enable_wake(pdev, PCI_D3cold, wol);
pci_disable_device(pdev);
- pci_set_power_state(pdev, PCI_D3hot);
-
+ sky2_power_state(hw, PCI_D3hot);
}
static struct pci_driver sky2_driver = {
--- a/drivers/net/sky2.h 2008-05-14 16:29:48.000000000 -0700
+++ b/drivers/net/sky2.h 2008-05-14 16:29:50.000000000 -0700
@@ -28,6 +28,11 @@ enum pci_dev_reg_1 {
PCI_Y2_PHY2_POWD = 1<<27, /* Set PHY 2 to Power Down (YUKON-2) */
PCI_Y2_PHY1_POWD = 1<<26, /* Set PHY 1 to Power Down (YUKON-2) */
PCI_Y2_PME_LEGACY= 1<<15, /* PCI Express legacy power management mode */
+
+ PCI_PHY_LNK_TIM_MSK= 3L<<8,/* Bit 9.. 8: GPHY Link Trigger Timer */
+ PCI_ENA_L1_EVENT = 1<<7, /* Enable PEX L1 Event */
+ PCI_ENA_GPHY_LNK = 1<<6, /* Enable PEX L1 on GPHY Link down */
+ PCI_FORCE_PEX_L1 = 1<<5, /* Force to PEX L1 */
};
enum pci_dev_reg_2 {
@@ -45,7 +50,11 @@ enum pci_dev_reg_2 {
/* PCI_OUR_REG_4 32 bit Our Register 4 (Yukon-ECU only) */
enum pci_dev_reg_4 {
- /* (Link Training & Status State Machine) */
+ /* (Link Training & Status State Machine) */
+ P_PEX_LTSSM_STAT_MSK = 0x7fL<<25, /* Bit 31..25: PEX LTSSM Mask */
+#define P_PEX_LTSSM_STAT(x) ((x << 25) & P_PEX_LTSSM_STAT_MSK)
+ P_PEX_LTSSM_L1_STAT = 0x34,
+ P_PEX_LTSSM_DET_STAT = 0x01,
P_TIMER_VALUE_MSK = 0xffL<<16, /* Bit 23..16: Timer Value Mask */
/* (Active State Power Management) */
P_FORCE_ASPM_REQUEST = 1<<15, /* Force ASPM Request (A1 only) */
@@ -454,6 +463,9 @@ enum yukon_ex_rev {
CHIP_REV_YU_EX_A0 = 1,
CHIP_REV_YU_EX_B0 = 2,
};
+enum yukon_supr_rev {
+ CHIP_REV_YU_SU_A0 = 0,
+};
/* B2_Y2_CLK_GATE 8 bit Clock Gating (Yukon-2 only) */
@@ -2059,7 +2071,9 @@ struct sky2_hw {
#define SKY2_HW_NEW_LE 0x00000020 /* new LSOv2 format */
#define SKY2_HW_AUTO_TX_SUM 0x00000040 /* new IP decode for Tx */
#define SKY2_HW_ADV_POWER_CTL 0x00000080 /* additional PHY power regs */
+#define SKY2_HW_CLK_POWER 0x00000100 /* clock power management */
+ int pm_cap;
u8 chip_id;
u8 chip_rev;
u8 pmd_type;
--
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/5] sky2: restore vlan acceleration on reset
2008-05-15 0:04 ` [PATCH 1/5] sky2: restore vlan acceleration on reset Stephen Hemminger
@ 2008-05-21 17:02 ` Stephen Hemminger
2008-05-21 17:12 ` Jeff Garzik
2008-05-22 10:01 ` Jeff Garzik
1 sibling, 1 reply; 13+ messages in thread
From: Stephen Hemminger @ 2008-05-21 17:02 UTC (permalink / raw)
Cc: Jeff Garzik, netdev
On Wed, 14 May 2008 17:04:13 -0700
Stephen Hemminger <shemminger@vyatta.com> wrote:
> If device has to be reset by sky2_restart, then need to restore
> the VLAN acceleration settings.
>
> Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
>
> ---
> Please apply to 2.6.26
Okay, it has been a week with no reply, what is the status
of these patches?
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/5] sky2: restore vlan acceleration on reset
2008-05-21 17:02 ` Stephen Hemminger
@ 2008-05-21 17:12 ` Jeff Garzik
0 siblings, 0 replies; 13+ messages in thread
From: Jeff Garzik @ 2008-05-21 17:12 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: netdev
Stephen Hemminger wrote:
> On Wed, 14 May 2008 17:04:13 -0700
> Stephen Hemminger <shemminger@vyatta.com> wrote:
>
>> If device has to be reset by sky2_restart, then need to restore
>> the VLAN acceleration settings.
>>
>> Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
>>
>> ---
>> Please apply to 2.6.26
>
> Okay, it has been a week with no reply, what is the status
> of these patches?
Ouch, I missed it, sorry. Dug it out...
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 2/5] sky2: don't warn if page allocation fails
2008-05-15 0:04 ` [PATCH 2/5] sky2: don't warn if page allocation fails Stephen Hemminger
@ 2008-05-22 9:57 ` Jeff Garzik
2008-05-27 18:47 ` Stephen Hemminger
0 siblings, 1 reply; 13+ messages in thread
From: Jeff Garzik @ 2008-05-22 9:57 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: netdev, LKML, Nick Piggin, Andrew Morton
>
> for (i = 0; i < sky2->rx_nfrags; i++) {
> - struct page *page = alloc_page(GFP_ATOMIC);
> + struct page *page = alloc_page(GFP_ATOMIC | __GFP_NOWARN);
>
> if (!page)
> goto free_partial;
IMO it's inappropriate to add these warnings to net drivers that
properly check all return values.
This approach is too maintenance intensive, and winds up fixing the same
problem over and over again -- a hint that the fix is in the wrong place.
Jeff
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/5] sky2: restore vlan acceleration on reset
2008-05-15 0:04 ` [PATCH 1/5] sky2: restore vlan acceleration on reset Stephen Hemminger
2008-05-21 17:02 ` Stephen Hemminger
@ 2008-05-22 10:01 ` Jeff Garzik
1 sibling, 0 replies; 13+ messages in thread
From: Jeff Garzik @ 2008-05-22 10:01 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: netdev
applied
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 2/5] sky2: don't warn if page allocation fails
2008-05-22 9:57 ` Jeff Garzik
@ 2008-05-27 18:47 ` Stephen Hemminger
2008-06-03 6:16 ` Nick Piggin
0 siblings, 1 reply; 13+ messages in thread
From: Stephen Hemminger @ 2008-05-27 18:47 UTC (permalink / raw)
To: Jeff Garzik; +Cc: Stephen Hemminger, netdev, LKML, Nick Piggin, Andrew Morton
On Thu, 22 May 2008 05:57:44 -0400
Jeff Garzik <jgarzik@pobox.com> wrote:
> >
> > for (i = 0; i < sky2->rx_nfrags; i++) {
> > - struct page *page = alloc_page(GFP_ATOMIC);
> > + struct page *page = alloc_page(GFP_ATOMIC | __GFP_NOWARN);
> >
> > if (!page)
> > goto free_partial;
>
>
> IMO it's inappropriate to add these warnings to net drivers that
> properly check all return values.
>
> This approach is too maintenance intensive, and winds up fixing the same
> problem over and over again -- a hint that the fix is in the wrong place.
>
> Jeff
>
>
So the __GFP_NOWARN should go away and get replaced by GFP_WARN?
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 3/5] sky2: split phy power into two functions
2008-05-15 0:04 ` [PATCH 3/5] sky2: split phy power into two functions Stephen Hemminger
@ 2008-05-31 2:20 ` Jeff Garzik
0 siblings, 0 replies; 13+ messages in thread
From: Jeff Garzik @ 2008-05-31 2:20 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: netdev
applied 3-5
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 2/5] sky2: don't warn if page allocation fails
2008-05-27 18:47 ` Stephen Hemminger
@ 2008-06-03 6:16 ` Nick Piggin
0 siblings, 0 replies; 13+ messages in thread
From: Nick Piggin @ 2008-06-03 6:16 UTC (permalink / raw)
To: Stephen Hemminger
Cc: Jeff Garzik, Stephen Hemminger, netdev, LKML, Andrew Morton
On Wednesday 28 May 2008 04:47, Stephen Hemminger wrote:
> On Thu, 22 May 2008 05:57:44 -0400
>
> Jeff Garzik <jgarzik@pobox.com> wrote:
> > > for (i = 0; i < sky2->rx_nfrags; i++) {
> > > - struct page *page = alloc_page(GFP_ATOMIC);
> > > + struct page *page = alloc_page(GFP_ATOMIC | __GFP_NOWARN);
> > >
> > > if (!page)
> > > goto free_partial;
> >
> > IMO it's inappropriate to add these warnings to net drivers that
> > properly check all return values.
> >
> > This approach is too maintenance intensive, and winds up fixing the same
> > problem over and over again -- a hint that the fix is in the wrong place.
> >
> > Jeff
>
> So the __GFP_NOWARN should go away and get replaced by GFP_WARN?
We actually still want to see the messages, regardless of what is causing
them, because they can indicate problems in the VM.
The best way is not to add __GFP_NOWARN at all, and just improve the
throttling/thresholding/reporting of the page allocation failure warnings.
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2008-06-03 6:16 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-05-15 0:04 [PATCH 0/5] sky2: driver update Stephen Hemminger
2008-05-15 0:04 ` [PATCH 1/5] sky2: restore vlan acceleration on reset Stephen Hemminger
2008-05-21 17:02 ` Stephen Hemminger
2008-05-21 17:12 ` Jeff Garzik
2008-05-22 10:01 ` Jeff Garzik
2008-05-15 0:04 ` [PATCH 2/5] sky2: don't warn if page allocation fails Stephen Hemminger
2008-05-22 9:57 ` Jeff Garzik
2008-05-27 18:47 ` Stephen Hemminger
2008-06-03 6:16 ` Nick Piggin
2008-05-15 0:04 ` [PATCH 3/5] sky2: split phy power into two functions Stephen Hemminger
2008-05-31 2:20 ` Jeff Garzik
2008-05-15 0:04 ` [PATCH 4/5] sky2: put PHY in sleep when down Stephen Hemminger
2008-05-15 0:04 ` [PATCH 5/5] sky2: pci power savings Stephen Hemminger
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).