@ -1576,6 +1576,38 @@ jme_free_irq(struct jme_adapter *jme)
}
}
static inline void
jme_new_phy_on ( struct jme_adapter * jme )
{
u32 reg ;
reg = jread32 ( jme , JME_PHY_PWR ) ;
reg & = ~ ( PHY_PWR_DWN1SEL | PHY_PWR_DWN1SW |
PHY_PWR_DWN2 | PHY_PWR_CLKSEL ) ;
jwrite32 ( jme , JME_PHY_PWR , reg ) ;
pci_read_config_dword ( jme - > pdev , PCI_PRIV_PE1 , & reg ) ;
reg & = ~ PE1_GPREG0_PBG ;
reg | = PE1_GPREG0_ENBG ;
pci_write_config_dword ( jme - > pdev , PCI_PRIV_PE1 , reg ) ;
}
static inline void
jme_new_phy_off ( struct jme_adapter * jme )
{
u32 reg ;
reg = jread32 ( jme , JME_PHY_PWR ) ;
reg | = PHY_PWR_DWN1SEL | PHY_PWR_DWN1SW |
PHY_PWR_DWN2 | PHY_PWR_CLKSEL ;
jwrite32 ( jme , JME_PHY_PWR , reg ) ;
pci_read_config_dword ( jme - > pdev , PCI_PRIV_PE1 , & reg ) ;
reg & = ~ PE1_GPREG0_PBG ;
reg | = PE1_GPREG0_PDD3COLD ;
pci_write_config_dword ( jme - > pdev , PCI_PRIV_PE1 , reg ) ;
}
static inline void
jme_phy_on ( struct jme_adapter * jme )
{
@ -1584,6 +1616,22 @@ jme_phy_on(struct jme_adapter *jme)
bmcr = jme_mdio_read ( jme - > dev , jme - > mii_if . phy_id , MII_BMCR ) ;
bmcr & = ~ BMCR_PDOWN ;
jme_mdio_write ( jme - > dev , jme - > mii_if . phy_id , MII_BMCR , bmcr ) ;
if ( new_phy_power_ctrl ( jme - > chip_main_rev ) )
jme_new_phy_on ( jme ) ;
}
static inline void
jme_phy_off ( struct jme_adapter * jme )
{
u32 bmcr ;
bmcr = jme_mdio_read ( jme - > dev , jme - > mii_if . phy_id , MII_BMCR ) ;
bmcr | = BMCR_PDOWN ;
jme_mdio_write ( jme - > dev , jme - > mii_if . phy_id , MII_BMCR , bmcr ) ;
if ( new_phy_power_ctrl ( jme - > chip_main_rev ) )
jme_new_phy_off ( jme ) ;
}
static int
@ -1606,12 +1654,11 @@ jme_open(struct net_device *netdev)
jme_start_irq ( jme ) ;
if ( test_bit ( JME_FLAG_SSET , & jme - > flags ) ) {
jme_phy_on ( jme ) ;
jme_phy_on ( jme ) ;
if ( test_bit ( JME_FLAG_SSET , & jme - > flags ) )
jme_set_settings ( netdev , & jme - > old_ecmd ) ;
} else {
else
jme_reset_phy_processor ( jme ) ;
}
jme_reset_link ( jme ) ;
@ -1657,12 +1704,6 @@ jme_wait_link(struct jme_adapter *jme)
}
}
static inline void
jme_phy_off ( struct jme_adapter * jme )
{
jme_mdio_write ( jme - > dev , jme - > mii_if . phy_id , MII_BMCR , BMCR_PDOWN ) ;
}
static void
jme_powersave_phy ( struct jme_adapter * jme )
{
@ -3068,12 +3109,11 @@ jme_resume(struct pci_dev *pdev)
jme_clear_pm ( jme ) ;
pci_restore_state ( pdev ) ;
if ( test_bit ( JME_FLAG_SSET , & jme - > flags ) ) {
jme_phy_on ( jme ) ;
jme_phy_on ( jme ) ;
if ( test_bit ( JME_FLAG_SSET , & jme - > flags ) )
jme_set_settings ( netdev , & jme - > old_ecmd ) ;
} else {
else
jme_reset_phy_processor ( jme ) ;
}
jme_start_irq ( jme ) ;
netif_device_attach ( netdev ) ;