sky2 v1.11.1 patches
Subsystems (2)
cover sky2 v1.11.1 patches
These patches are against netdev-2.6#upstream. The enhancements are WOL support and use of dev_printk.
--
Stephen Hemminger <[email protected]>
PATCH 1/5 sky2: handle network device allocation failure
If alloc_etherdev() failed, then sky2_init_netdev will return NULL, and sky2_probe would end up returning 0 instead of -ENOMEM.
drivers/net/sky2.c +14 -6
@@ -3350,7 +3350,7 @@static int __devinit sky2_probe (struct pci_dev *pdev,const struct pci_device_id *ent) { -struct net_device *dev, *dev1 =NULL ; +struct net_device *dev;struct sky2_hw *hw;int err, using_dac =0 ;
@@ -3434,8 +3434,10 @@ hw->chip_id, hw->chip_rev); dev =sky2_init_netdev (hw,0 , using_dac); -if (!dev) +if (!dev) { + err = -ENOMEM ; goto err_out_free_pci; + }if (!disable_msi &&pci_enable_msi (pdev) ==0 ) { err =sky2_test_msi (hw);
@@ -3463,13 +3465,19 @@sky2_show_addr (dev); -if (hw->ports >1 && (dev1 =sky2_init_netdev (hw,1 , using_dac))) { -if (register_netdev (dev1) ==0 ) +if (hw->ports >1 ) { +struct net_device *dev1; + + dev1 =sky2_init_netdev (hw,1 , using_dac); +if (!dev1) { + printk(KERN_WARNING PFX + "allocation of second port failed\n"); + } +else if (!(err =register_netdev (dev1)))sky2_show_addr (dev1);else { -/* Failure to register second port need not be fatal */ printk(KERN_WARNING PFX - "register of second port failed\n"); + "register of second port failed (%d)\n", err); hw->dev[1 ] =NULL ;free_netdev (dev1); }
--
Stephen Hemminger <[email protected]>
Jeff Garzik
AppliedRe: [PATCH 1/5] sky2: handle network device allocation failure
Quoted 4 lines · [email protected] wrote:
If
alloc_etherdev()failed, thensky2_init_netdevwill return NULL, andsky2_probewould end up returning 0 instead of-ENOMEM.Signed-off-by Stephen Hemminger <[email protected]>
applied
PATCH 2/5 sky2: add Wake On Lan support
In reply to [email protected]Adds basic magic packet wake on lan support to the sky2 driver.
Note: initial WOL value is based on BIOS settings.
--- drivers/net/sky2.c | 208 ++++++++++++++++++++++++++++++++++++++++++++++------- drivers/net/sky2.h | 28 ++----- 2 files changed, 189 insertions(+), 47 deletions(-)
drivers/net/sky2.c +181 -27
@@ -567,6 +567,73 @@spin_unlock_bh (&sky2->phy_lock); } +/* Put device in state to listen for Wake On Lan */ +static void sky2_wol_init (struct sky2_port *sky2) +{ +struct sky2_hw *hw = sky2->hw; +unsigned port = sky2->port; +enum flow_control save_mode; +u16 ctrl; +u32 reg1; + +/* Bring hardware out of reset */ +sky2_write16 (hw,B0_CTST ,CS_RST_CLR ); +sky2_write16 (hw,SK_REG (port,GMAC_LINK_CTRL ),GMLC_RST_CLR ); + +sky2_write8 (hw,SK_REG (port,GPHY_CTRL ),GPC_RST_CLR ); +sky2_write8 (hw,SK_REG (port,GMAC_CTRL ),GMC_RST_CLR ); + +/* Force to 10/100 +* sky2_reset will re-enable on resume +*/ + save_mode = sky2->flow_mode; + ctrl = sky2->advertising; + + sky2->advertising &= ~(ADVERTISED_1000baseT_Half|ADVERTISED_1000baseT_Full); + sky2->flow_mode =FC_NONE ; +sky2_phy_power (hw, port,1 ); +sky2_phy_reinit (sky2); + + sky2->flow_mode = save_mode; + sky2->advertising = ctrl; + +/* Set GMAC to no flow control and auto update for speed/duplex */ +gma_write16 (hw, port,GM_GP_CTRL , +GM_GPCR_FC_TX_DIS |GM_GPCR_TX_ENA |GM_GPCR_RX_ENA | +GM_GPCR_DUP_FULL |GM_GPCR_FC_RX_DIS |GM_GPCR_AU_FCT_DIS ); + +/* Set WOL address */ +memcpy_toio (hw->regs +WOL_REGS (port,WOL_MAC_ADDR ), + sky2->netdev->dev_addr,ETH_ALEN ); + +/* Turn on appropriate WOL control bits */ +sky2_write16 (hw,WOL_REGS (port,WOL_CTRL_STAT ),WOL_CTL_CLEAR_RESULT ); + ctrl =0 ; +if (sky2->wol &WAKE_PHY ) + ctrl |=WOL_CTL_ENA_PME_ON_LINK_CHG |WOL_CTL_ENA_LINK_CHG_UNIT ; +else + ctrl |=WOL_CTL_DIS_PME_ON_LINK_CHG |WOL_CTL_DIS_LINK_CHG_UNIT ; + +if (sky2->wol &WAKE_MAGIC ) + ctrl |=WOL_CTL_ENA_PME_ON_MAGIC_PKT |WOL_CTL_ENA_MAGIC_PKT_UNIT ; +else + ctrl |=WOL_CTL_DIS_PME_ON_MAGIC_PKT |WOL_CTL_DIS_MAGIC_PKT_UNIT ;; + + ctrl |=WOL_CTL_DIS_PME_ON_PATTERN |WOL_CTL_DIS_PATTERN_UNIT ; +sky2_write16 (hw,WOL_REGS (port,WOL_CTRL_STAT ), ctrl); + +/* Turn on legacy PCI-Express PME mode */ +sky2_write8 (hw,B2_TST_CTRL1 ,TST_CFG_WRITE_ON ); + reg1 =sky2_pci_read32 (hw,PCI_DEV_REG1 ); + reg1 |=PCI_Y2_PME_LEGACY ; +sky2_pci_write32 (hw,PCI_DEV_REG1 , reg1); +sky2_write8 (hw,B2_TST_CTRL1 ,TST_CFG_WRITE_OFF ); + +/* block receiver */ +sky2_write8 (hw,SK_REG (port,RX_GMF_CTRL_T ),GMF_RST_SET ); + +} +static void sky2_mac_init (struct sky2_hw *hw,unsigned port) {struct sky2_port *sky2 =netdev_priv (hw->dev[port]);
@@ -2399,11 +2466,9 @@ } -static int sky2_reset (struct sky2_hw *hw) +static int __devinit sky2_init (struct sky2_hw *hw) { -u16 status;u8 t8; -int i;sky2_write8 (hw,B0_CTST ,CS_RST_CLR );
@@ -2424,6 +2489,22 @@return -EOPNOTSUPP ; } + hw->pmd_type =sky2_read8 (hw,B2_PMD_TYP ); + hw->ports =1 ; + t8 =sky2_read8 (hw,B2_Y2_HW_RES ); +if ((t8 &CFG_DUAL_MAC_MSK ) ==CFG_DUAL_MAC_MSK ) { +if (!(sky2_read8 (hw,B2_Y2_CLK_GATE ) &Y2_STATUS_LNK2_INAC )) + ++hw->ports; + } + +return 0 ; +} + +static void sky2_reset (struct sky2_hw *hw) +{ +u16 status; +int i; +/* disable ASF */ if (hw->chip_id <=CHIP_ID_YUKON_EC ) {sky2_write8 (hw,B28_Y2_ASF_STAT_CMD ,Y2_ASF_RESET );
@@ -2448,14 +2529,6 @@sky2_pci_write32 (hw,PEX_UNC_ERR_STAT ,0xffffffffUL ); - hw->pmd_type =sky2_read8 (hw,B2_PMD_TYP ); - hw->ports =1 ; - t8 =sky2_read8 (hw,B2_Y2_HW_RES ); -if ((t8 &CFG_DUAL_MAC_MSK ) ==CFG_DUAL_MAC_MSK ) { -if (!(sky2_read8 (hw,B2_Y2_CLK_GATE ) &Y2_STATUS_LNK2_INAC )) - ++hw->ports; - } -sky2_power_on (hw);for (i =0 ; i < hw->ports; i++) {
@@ -2539,7 +2612,37 @@sky2_write8 (hw,STAT_TX_TIMER_CTRL ,TIM_START );sky2_write8 (hw,STAT_LEV_TIMER_CTRL ,TIM_START );sky2_write8 (hw,STAT_ISR_TIMER_CTRL ,TIM_START ); +} +static inline u8 sky2_wol_supported (const struct sky2_hw *hw) +{ +return sky2_is_copper (hw) ? (WAKE_PHY |WAKE_MAGIC ) :0 ; +} + +static void sky2_get_wol (struct net_device *dev,struct ethtool_wolinfo *wol) +{ +const struct sky2_port *sky2 =netdev_priv (dev); + + wol->supported =sky2_wol_supported (sky2->hw); + wol->wolopts = sky2->wol; +} + +static int sky2_set_wol (struct net_device *dev,struct ethtool_wolinfo *wol) +{ +struct sky2_port *sky2 =netdev_priv (dev); +struct sky2_hw *hw = sky2->hw; + +if (wol->wolopts & ~sky2_wol_supported (sky2->hw)) +return -EOPNOTSUPP ; + + sky2->wol = wol->wolopts; + +if (hw->chip_id ==CHIP_ID_YUKON_EC_U ) +sky2_write32 (hw,B0_CTST , sky2->wol + ?Y2_HW_WOL_ON :Y2_HW_WOL_OFF ); + +if (!netif_running (dev)) +sky2_wol_init (sky2);return 0 ; }
@@ -3167,7 +3270,9 @@static const struct ethtool_ops sky2_ethtool_ops = { .get_settings = sky2_get_settings, .set_settings = sky2_set_settings, - .get_drvinfo = sky2_get_drvinfo, + .get_drvinfo = sky2_get_drvinfo, + .get_wol = sky2_get_wol, + .set_wol = sky2_set_wol, .get_msglevel = sky2_get_msglevel, .set_msglevel = sky2_set_msglevel, .nway_reset = sky2_nway_reset,
@@ -3197,7 +3302,8 @@/* Initialize network device */ static __devinit struct net_device *sky2_init_netdev (struct sky2_hw *hw, -unsigned port,int highmem) +unsigned port, +int highmem,int wol) {struct sky2_port *sky2;struct net_device *dev =alloc_etherdev (sizeof (*sky2));
@@ -3245,6 +3351,7 @@ sky2->speed =-1 ; sky2->advertising =sky2_supported_modes (hw); sky2->rx_csum =1 ; + sky2->wol = wol;spin_lock_init (&sky2->phy_lock); sky2->tx_pending =TX_DEF_PENDING ;
@@ -3347,12 +3454,24 @@return err; } +static int __devinit wol_enabled (struct pci_dev *dev) +{ +int pm =pci_find_capability (dev,PCI_CAP_ID_PM ); +u16 value; + +if (!pm) +return 0 ; +if (pci_read_config_word (dev, pm +PCI_PM_CTRL , &value)) +return 0 ; +return value &PCI_PM_CTRL_PME_ENABLE ; +} +static int __devinit sky2_probe (struct pci_dev *pdev,const struct pci_device_id *ent) {struct net_device *dev;struct sky2_hw *hw; -int err, using_dac =0 ; +int err, using_dac =0 , wol_default; err =pci_enable_device (pdev);if (err) {
@@ -3389,6 +3508,8 @@ } } + wol_default =wol_enabled (pdev) ?WAKE_MAGIC :0 ; + err = -ENOMEM ; hw =kzalloc (sizeof (*hw),GFP_KERNEL );if (!hw) {
@@ -3424,7 +3545,7 @@if (!hw->st_le) goto err_out_iounmap; - err =sky2_reset (hw); + err =sky2_init (hw);if (err) goto err_out_iounmap;
@@ -3433,7 +3554,9 @@ pdev->irq, yukon2_name[hw->chip_id -CHIP_ID_YUKON_XL ], hw->chip_id, hw->chip_rev); - dev =sky2_init_netdev (hw,0 , using_dac); +sky2_reset (hw); + + dev =sky2_init_netdev (hw,0 , using_dac, wol_default);if (!dev) { err = -ENOMEM ; goto err_out_free_pci;
@@ -3468,7 +3591,7 @@if (hw->ports >1 ) {struct net_device *dev1; - dev1 =sky2_init_netdev (hw,1 , using_dac); + dev1 =sky2_init_netdev (hw,1 , using_dac, wol_default);if (!dev1) { printk(KERN_WARNING PFX "allocation of second port failed\n");
@@ -3555,23 +3678,29 @@static int sky2_suspend (struct pci_dev *pdev,pm_message_t state) {struct sky2_hw *hw =pci_get_drvdata (pdev); -int i; +int i, wol =0 ;del_timer_sync (&hw->idle_timer);netif_poll_disable (hw->dev[0 ]);for (i =0 ; i < hw->ports; i++) {struct net_device *dev = hw->dev[i]; +struct sky2_port *sky2 =netdev_priv (dev); -if (netif_running (dev)) { +if (netif_running (dev))sky2_down (dev); -netif_device_detach (dev); - } + +if (sky2->wol) +sky2_wol_init (sky2); + + wol |= sky2->wol; }sky2_write32 (hw,B0_IMSK ,0 );sky2_power_aux (hw); +pci_save_state (pdev); +pci_enable_wake (pdev,pci_choose_state (pdev, state), wol);pci_set_power_state (pdev,pci_choose_state (pdev, state));return 0 ;
@@ -3591,18 +3720,13 @@ goto out;pci_enable_wake (pdev,PCI_D0 ,0 ); - - err =sky2_reset (hw); -if (err) - goto out; +sky2_reset (hw);sky2_write32 (hw,B0_IMSK ,Y2_IS_BASE );for (i =0 ; i < hw->ports; i++) {struct net_device *dev = hw->dev[i];if (netif_running (dev)) { -netif_device_attach (dev); - err =sky2_up (dev);if (err) { printk(KERN_ERR PFX "%s: could not up: %d\n",
@@ -3646,6 +3770,35 @@ }#endif +static void sky2_shutdown (struct pci_dev *pdev) +{ +struct sky2_hw *hw =pci_get_drvdata (pdev); +int i, wol =0 ; + +del_timer_sync (&hw->idle_timer); +netif_poll_disable (hw->dev[0 ]); + +for (i =0 ; i < hw->ports; i++) { +struct net_device *dev = hw->dev[i]; +struct sky2_port *sky2 =netdev_priv (dev); + +if (sky2->wol) { + wol =1 ; +sky2_wol_init (sky2); + } + } + +if (wol) +sky2_power_aux (hw); + +pci_enable_wake (pdev, PCI_D3hot, wol); +pci_enable_wake (pdev, PCI_D3cold, wol); + +pci_disable_device (pdev); +pci_set_power_state (pdev, PCI_D3hot); + +} +static struct pci_driver sky2_driver = { .name =DRV_NAME , .id_table = sky2_id_table,
@@ -3657,6 +3810,7 @@ .suspend_late = sky2_suspend_late, .resume_early = sky2_resume_early, #endif + .shutdown = sky2_shutdown, };static int __init sky2_init_module (void )
drivers/net/sky2.h +8 -20
@@ -32,6 +32,7 @@PCI_Y2_PHY1_COMA =1 <<28 ,/* Set PHY 1 to Coma Mode (YUKON-2) */ 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 */ }; enum pci_dev_reg_2 {
@@ -837,33 +838,27 @@GMAC_LINK_CTRL =0x0f10 ,/* 16 bit Link Control Reg */ /* Wake-up Frame Pattern Match Control Registers (YUKON only) */ - -WOL_REG_OFFS =0x20 ,/* HW-Bug: Address is + 0x20 against spec. */ -WOL_CTRL_STAT =0x0f20 ,/* 16 bit WOL Control/Status Reg */ WOL_MATCH_CTL =0x0f22 ,/* 8 bit WOL Match Control Reg */ WOL_MATCH_RES =0x0f23 ,/* 8 bit WOL Match Result Reg */ WOL_MAC_ADDR =0x0f24 ,/* 32 bit WOL MAC Address */ -WOL_PATT_PME =0x0f2a ,/* 8 bit WOL PME Match Enable (Yukon-2) */ -WOL_PATT_ASFM =0x0f2b ,/* 8 bit WOL ASF Match Enable (Yukon-2) */ WOL_PATT_RPTR =0x0f2c ,/* 8 bit WOL Pattern Read Pointer */ /* WOL Pattern Length Registers (YUKON only) */ -WOL_PATT_LEN_LO =0x0f30 ,/* 32 bit WOL Pattern Length 3..0 */ WOL_PATT_LEN_HI =0x0f34 ,/* 24 bit WOL Pattern Length 6..4 */ /* WOL Pattern Counter Registers (YUKON only) */ - -WOL_PATT_CNT_0 =0x0f38 ,/* 32 bit WOL Pattern Counter 3..0 */ WOL_PATT_CNT_4 = 0x0f3c,/* 24 bit WOL Pattern Counter 6..4 */ }; +#define WOL_REGS (port, x) (x + (port)*0x80)enum {WOL_PATT_RAM_1 =0x1000 ,/* WOL Pattern RAM Link 1 */ WOL_PATT_RAM_2 =0x1400 ,/* WOL Pattern RAM Link 2 */ }; +#define WOL_PATT_RAM_BASE (port) (WOL_PATT_RAM_1 + (port)*0x400)enum { BASE_GMAC_1 = 0x2800,/* GMAC 1 registers */
@@ -1715,14 +1710,17 @@ GM_IS_RX_COMPL = 1<<0, /* Frame Reception Complete */#define GMAC_DEF_MSK GM_IS_TX_FF_UR +};/* GMAC_LINK_CTRL 16 bit GMAC Link Control Reg (YUKON only) */ -/* Bits 15.. 2: reserved */ +enum {/* Bits 15.. 2: reserved */ GMLC_RST_CLR =1 <<1 ,/* Clear GMAC Link Reset */ GMLC_RST_SET =1 <<0 ,/* Set GMAC Link Reset */ +};/* WOL_CTRL_STAT 16 bit WOL Control/Status Reg */ +enum {WOL_CTL_LINK_CHG_OCC =1 <<15 ,WOL_CTL_MAGIC_PKT_OCC =1 <<14 ,WOL_CTL_PATTERN_OCC =1 <<13 ,
@@ -1741,17 +1739,6 @@ WOL_CTL_DIS_PATTERN_UNIT = 1<<0, }; -#define WOL_CTL_DEFAULT \ - (WOL_CTL_DIS_PME_ON_LINK_CHG | \ - WOL_CTL_DIS_PME_ON_PATTERN | \ - WOL_CTL_DIS_PME_ON_MAGIC_PKT | \ - WOL_CTL_DIS_LINK_CHG_UNIT | \ - WOL_CTL_DIS_PATTERN_UNIT | \ - WOL_CTL_DIS_MAGIC_PKT_UNIT) - -/* WOL_MATCH_CTL 8 bit WOL Match Control Reg */ -#define WOL_CTL_PATT_ENA (x) (1 << (x)) -/* Control flags */ enum {
@@ -1875,6 +1862,7 @@u8 autoneg;/* AUTONEG_ENABLE, AUTONEG_DISABLE */ u8 duplex;/* DUPLEX_HALF, DUPLEX_FULL */ u8 rx_csum; +u8 wol;enum flow_control flow_mode;enum flow_control flow_status;
--
Stephen Hemminger <[email protected]>
Re: [PATCH 2/5] sky2: add Wake On Lan support
Quoted 4 lines · [email protected] wrote:
Adds basic magic packet wake on lan support to the sky2 driver.
Note: initial WOL value is based on BIOS settings.Signed-off-by Stephen Hemminger <[email protected]>
ACK, but failed to apply
PATCH 3/5 sky2: use dev_err for error reports
In reply to [email protected]Use the standard dev_printk functions instead of printk directly for error reports. Fix a bug where the initialization would return 0 if allocation of network device failed.
--- drivers/net/sky2.c | 75 +++++++++++++++++++++-------------------------------- 1 file changed, 31 insertions(+), 44 deletions(-)
drivers/net/sky2.c +31 -44
@@ -2261,8 +2261,8 @@ pci_err =sky2_pci_read16 (hw,PCI_STATUS );if (net_ratelimit ()) - printk(KERN_ERR PFX "%s: pci hw error (0x%x)\n", -pci_name (hw->pdev), pci_err); +dev_err (&hw->pdev->dev,"PCI hardware error (0x%x)\n" , + pci_err);sky2_write8 (hw,B2_TST_CTRL1 ,TST_CFG_WRITE_ON ); sky2_pci_write16(hw, PCI_STATUS,
@@ -2277,8 +2277,8 @@ pex_err =sky2_pci_read32 (hw,PEX_UNC_ERR_STAT );if (net_ratelimit ()) - printk(KERN_ERR PFX "%s: pci express error (0x%x)\n", -pci_name (hw->pdev), pex_err); +dev_err (&hw->pdev->dev,"PCI Express error (0x%x)\n" , + pex_err);/* clear the interrupt */ sky2_write32 (hw,B2_TST_CTRL1 ,TST_CFG_WRITE_ON );
@@ -2474,8 +2474,8 @@ hw->chip_id =sky2_read8 (hw,B2_CHIP_ID );if (hw->chip_id <CHIP_ID_YUKON_XL || hw->chip_id >CHIP_ID_YUKON_FE ) { - printk(KERN_ERR PFX "%s: unsupported chip type 0x%x\n", - pci_name(hw->pdev), hw->chip_id); +dev_err (&hw->pdev->dev,"unsupported chip type 0x%x\n" , + hw->chip_id);return -EOPNOTSUPP ; }
@@ -2483,9 +2483,9 @@/* This rev is really old, and requires untested workarounds */ if (hw->chip_id ==CHIP_ID_YUKON_EC && hw->chip_rev ==CHIP_REV_YU_EC_A1 ) { - printk(KERN_ERR PFX "%s: unsupported revision Yukon-%s (0x%x) rev %d\n", -pci_name (hw->pdev), yukon2_name[hw->chip_id -CHIP_ID_YUKON_XL ], - hw->chip_id, hw->chip_rev); +dev_err (&hw->pdev->dev,"unsupported revision Yukon-%s (0x%x) rev %d\n" , + yukon2_name[hw->chip_id -CHIP_ID_YUKON_XL ], + hw->chip_id, hw->chip_rev);return -EOPNOTSUPP ; }
@@ -3309,7 +3309,7 @@struct net_device *dev =alloc_etherdev (sizeof (*sky2));if (!dev) { -printk (KERN_ERR "sky2 etherdev alloc failed" ); +dev_err (&hw->pdev->dev,"etherdev alloc failed" );return NULL ; }
@@ -3426,8 +3426,7 @@ err =request_irq (pdev->irq, sky2_test_intr,0 ,DRV_NAME , hw);if (err) { - printk(KERN_ERR PFX "%s: cannot assign irq %d\n", - pci_name(pdev), pdev->irq); +dev_err (&pdev->dev,"cannot assign irq %d\n" , pdev->irq);return err; }
@@ -3438,9 +3437,8 @@if (!hw->msi) {/* MSI test failed, go back to INTx mode */ - printk(KERN_INFO PFX "%s: No interrupt generated using MSI, " -"switching to INTx mode.\n" , - pci_name(pdev)); +dev_info (&pdev->dev,"No interrupt generated using MSI, " +"switching to INTx mode.\n" ); err = -EOPNOTSUPP ;sky2_write8 (hw,B0_CTST ,CS_CL_SW_IRQ );
@@ -3475,15 +3473,13 @@ err =pci_enable_device (pdev);if (err) { - printk(KERN_ERR PFX "%s cannot enable PCI device\n", - pci_name(pdev)); +dev_err (&pdev->dev,"cannot enable PCI device\n" ); goto err_out; } err =pci_request_regions (pdev,DRV_NAME );if (err) { - printk(KERN_ERR PFX "%s cannot obtain PCI resources\n", - pci_name(pdev)); +dev_err (&pdev->dev,"cannot obtain PCI resources\n" ); goto err_out; }
@@ -3494,16 +3490,14 @@ using_dac =1 ; err =pci_set_consistent_dma_mask (pdev,DMA_64BIT_MASK );if (err <0 ) { - printk(KERN_ERR PFX "%s unable to obtain 64 bit DMA " - "for consistent allocations\n", pci_name(pdev)); +dev_err (&pdev->dev,"unable to obtain 64 bit DMA " +"for consistent allocations\n" ); goto err_out_free_regions; } - }else { err =pci_set_dma_mask (pdev,DMA_32BIT_MASK );if (err) { - printk(KERN_ERR PFX "%s no usable DMA configuration\n", - pci_name(pdev)); +dev_err (&pdev->dev,"no usable DMA configuration\n" ); goto err_out_free_regions; } }
@@ -3513,8 +3507,7 @@ err = -ENOMEM ; hw =kzalloc (sizeof (*hw),GFP_KERNEL );if (!hw) { - printk(KERN_ERR PFX "%s: cannot allocate hardware struct\n", - pci_name(pdev)); +dev_err (&pdev->dev,"cannot allocate hardware struct\n" ); goto err_out_free_regions; }
@@ -3522,8 +3515,7 @@ hw->regs =ioremap_nocache (pci_resource_start (pdev,0 ),0x4000 );if (!hw->regs) { - printk(KERN_ERR PFX "%s: cannot map device registers\n", - pci_name(pdev)); +dev_err (&pdev->dev,"cannot map device registers\n" ); goto err_out_free_hw; }
@@ -3549,7 +3541,7 @@if (err) goto err_out_iounmap; - printk(KERN_INFO PFX "v%s addr 0x%llx irq %d Yukon-%s (0x%x) rev %d\n", +dev_info (&pdev->dev,"v%s addr 0x%llx irq %d Yukon-%s (0x%x) rev %d\n" ,DRV_VERSION , (unsigned long long )pci_resource_start (pdev,0 ), pdev->irq, yukon2_name[hw->chip_id -CHIP_ID_YUKON_XL ], hw->chip_id, hw->chip_rev);
@@ -3572,16 +3564,14 @@ err =register_netdev (dev);if (err) { - printk(KERN_ERR PFX "%s: cannot register net device\n", - pci_name(pdev)); +dev_err (&pdev->dev,"cannot register net device\n" ); goto err_out_free_netdev; } err =request_irq (pdev->irq, sky2_intr, hw->msi ?0 :IRQF_SHARED , dev->name, hw);if (err) { - printk(KERN_ERR PFX "%s: cannot assign irq %d\n", - pci_name(pdev), pdev->irq); +dev_err (&pdev->dev,"cannot assign irq %d\n" , pdev->irq); goto err_out_unregister; }sky2_write32 (hw,B0_IMSK ,Y2_IS_BASE );
@@ -3592,18 +3582,15 @@struct net_device *dev1; dev1 =sky2_init_netdev (hw,1 , using_dac, wol_default); -if (!dev1) { - printk(KERN_WARNING PFX - "allocation of second port failed\n"); - } -else if (!(err =register_netdev (dev1))) -sky2_show_addr (dev1); -else { - printk(KERN_WARNING PFX - "register of second port failed (%d)\n", err); +if (!dev1) +dev_warn (&pdev->dev,"allocation for second device failed\n" ); +else if ((err =register_netdev (dev1))) { +dev_warn (&pdev->dev, +"register of second port failed (%d)\n" , err); hw->dev[1 ] =NULL ;free_netdev (dev1); - } + }else +sky2_show_addr (dev1); }setup_timer (&hw->idle_timer, sky2_idle, (unsigned long ) hw);
@@ -3741,7 +3728,7 @@sky2_idle_start (hw);return 0 ; out: - printk(KERN_ERR PFX "%s: resume failed (%d)\n", pci_name(pdev), err); +dev_err (&pdev->dev,"resume failed (%d)\n" , err);pci_disable_device (pdev);return err; }
--
Stephen Hemminger <[email protected]>
Re: [PATCH 3/5] sky2: use dev_err for error reports
Quoted 5 lines · [email protected] wrote:
Use the standard
dev_printkfunctions instead of printk directly for error reports. Fix a bug where the initialization would return 0 if allocation of network device failed.Signed-off-by Stephen Hemminger <[email protected]>
ACK but failed to apply
PATCH 4/5 sky2: software rx/tx stats
In reply to [email protected]Maintain packet statistics in software rather than hardware. This is slightly slower, but allows easier debugging of problems where packets are still being received by PHY but not being handled by hardware.
--- drivers/net/sky2.c | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-)
drivers/net/sky2.c +5 -16
@@ -1510,6 +1510,9 @@if (unlikely (netif_msg_tx_done (sky2)))printk (KERN_DEBUG "%s: tx done %u\n" , dev->name, idx); + sky2->net_stats.tx_packets++; + sky2->net_stats.tx_bytes += re->skb->len; +dev_kfree_skb_any (re->skb); }
@@ -2132,6 +2135,8 @@ goto force_update; skb->protocol =eth_type_trans (skb, dev); + sky2->net_stats.rx_packets++; + sky2->net_stats.rx_bytes += skb->len; dev->last_rx = jiffies;#ifdef SKY2_VLAN_TAG_USED
@@ -2893,25 +2898,9 @@ } } -/* Use hardware MIB variables for critical path statistics and -* transmit feedback not reported at interrupt. -* Other errors are accounted for in interrupt handler. -*/ static struct net_device_stats *sky2_get_stats (struct net_device *dev) {struct sky2_port *sky2 =netdev_priv (dev); -u64 data[13 ]; - -sky2_phy_stats (sky2, data,ARRAY_SIZE (data)); - - sky2->net_stats.tx_bytes = data[0 ]; - sky2->net_stats.rx_bytes = data[1 ]; - sky2->net_stats.tx_packets = data[2 ] + data[4 ] + data[6 ]; - sky2->net_stats.rx_packets = data[3 ] + data[5 ] + data[7 ]; - sky2->net_stats.multicast = data[3 ] + data[5 ]; - sky2->net_stats.collisions = data[10 ]; - sky2->net_stats.tx_aborted_errors = data[12 ]; -return &sky2->net_stats; }
--
Stephen Hemminger <[email protected]>
Jeff Garzik
AppliedRe: [PATCH 4/5] sky2: software rx/tx stats
Quoted 6 lines · [email protected] wrote:
Maintain packet statistics in software rather than hardware. This is slightly slower, but allows easier debugging of problems where packets are still being received by PHY but not being handled by hardware.
Signed-off-by Stephen Hemminger <[email protected]>
applied
PATCH 5/5 sky2: version 1.11.1
In reply to [email protected]Version update to 1.11.1.
--- drivers/net/sky2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/sky2.c +1 -1
@@ -49,7 +49,7 @@#include "sky2.h" #define DRV_NAME "sky2" -#define DRV_VERSION "1.10" +#define DRV_VERSION "1.11.1"#define PFX DRV_NAME " "/*
--
Stephen Hemminger <[email protected]>
Jeff Garzik
AppliedRe: [PATCH 5/5] sky2: version 1.11.1
Quoted 3 lines · [email protected] wrote:
Version update to 1.11.1.
Signed-off-by Stephen Hemminger <[email protected]>
applied