mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-12 00:38:55 +00:00
atl1c_main.c: add wait_for_idle routine
Slight refactoring of duplicated wait for idle checks Spelling fix Signed-off-by: Joe Perches <joe@perches.com> Acked-by: jie.yang@atheros.com Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
56d417b12e
commit
c930a66220
@ -163,6 +163,24 @@ static inline void atl1c_irq_reset(struct atl1c_adapter *adapter)
|
|||||||
atl1c_irq_enable(adapter);
|
atl1c_irq_enable(adapter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* atl1c_wait_until_idle - wait up to AT_HW_MAX_IDLE_DELAY reads
|
||||||
|
* of the idle status register until the device is actually idle
|
||||||
|
*/
|
||||||
|
static u32 atl1c_wait_until_idle(struct atl1c_hw *hw)
|
||||||
|
{
|
||||||
|
int timeout;
|
||||||
|
u32 data;
|
||||||
|
|
||||||
|
for (timeout = 0; timeout < AT_HW_MAX_IDLE_DELAY; timeout++) {
|
||||||
|
AT_READ_REG(hw, REG_IDLE_STATUS, &data);
|
||||||
|
if ((data & IDLE_STATUS_MASK) == 0)
|
||||||
|
return 0;
|
||||||
|
msleep(1);
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* atl1c_phy_config - Timer Call-back
|
* atl1c_phy_config - Timer Call-back
|
||||||
* @data: pointer to netdev cast into an unsigned long
|
* @data: pointer to netdev cast into an unsigned long
|
||||||
@ -1106,7 +1124,6 @@ static void atl1c_configure_dma(struct atl1c_adapter *adapter)
|
|||||||
static int atl1c_stop_mac(struct atl1c_hw *hw)
|
static int atl1c_stop_mac(struct atl1c_hw *hw)
|
||||||
{
|
{
|
||||||
u32 data;
|
u32 data;
|
||||||
int timeout;
|
|
||||||
|
|
||||||
AT_READ_REG(hw, REG_RXQ_CTRL, &data);
|
AT_READ_REG(hw, REG_RXQ_CTRL, &data);
|
||||||
data &= ~(RXQ1_CTRL_EN | RXQ2_CTRL_EN |
|
data &= ~(RXQ1_CTRL_EN | RXQ2_CTRL_EN |
|
||||||
@ -1117,25 +1134,13 @@ static int atl1c_stop_mac(struct atl1c_hw *hw)
|
|||||||
data &= ~TXQ_CTRL_EN;
|
data &= ~TXQ_CTRL_EN;
|
||||||
AT_WRITE_REG(hw, REG_TWSI_CTRL, data);
|
AT_WRITE_REG(hw, REG_TWSI_CTRL, data);
|
||||||
|
|
||||||
for (timeout = 0; timeout < AT_HW_MAX_IDLE_DELAY; timeout++) {
|
atl1c_wait_until_idle(hw);
|
||||||
AT_READ_REG(hw, REG_IDLE_STATUS, &data);
|
|
||||||
if ((data & (IDLE_STATUS_RXQ_NO_IDLE |
|
|
||||||
IDLE_STATUS_TXQ_NO_IDLE)) == 0)
|
|
||||||
break;
|
|
||||||
msleep(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
AT_READ_REG(hw, REG_MAC_CTRL, &data);
|
AT_READ_REG(hw, REG_MAC_CTRL, &data);
|
||||||
data &= ~(MAC_CTRL_TX_EN | MAC_CTRL_RX_EN);
|
data &= ~(MAC_CTRL_TX_EN | MAC_CTRL_RX_EN);
|
||||||
AT_WRITE_REG(hw, REG_MAC_CTRL, data);
|
AT_WRITE_REG(hw, REG_MAC_CTRL, data);
|
||||||
|
|
||||||
for (timeout = 0; timeout < AT_HW_MAX_IDLE_DELAY; timeout++) {
|
return (int)atl1c_wait_until_idle(hw);
|
||||||
AT_READ_REG(hw, REG_IDLE_STATUS, &data);
|
|
||||||
if ((data & IDLE_STATUS_MASK) == 0)
|
|
||||||
return 0;
|
|
||||||
msleep(1);
|
|
||||||
}
|
|
||||||
return data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void atl1c_enable_rx_ctrl(struct atl1c_hw *hw)
|
static void atl1c_enable_rx_ctrl(struct atl1c_hw *hw)
|
||||||
@ -1178,8 +1183,6 @@ static int atl1c_reset_mac(struct atl1c_hw *hw)
|
|||||||
{
|
{
|
||||||
struct atl1c_adapter *adapter = (struct atl1c_adapter *)hw->adapter;
|
struct atl1c_adapter *adapter = (struct atl1c_adapter *)hw->adapter;
|
||||||
struct pci_dev *pdev = adapter->pdev;
|
struct pci_dev *pdev = adapter->pdev;
|
||||||
u32 idle_status_data = 0;
|
|
||||||
int timeout = 0;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
AT_WRITE_REG(hw, REG_IMR, 0);
|
AT_WRITE_REG(hw, REG_IMR, 0);
|
||||||
@ -1198,15 +1201,10 @@ static int atl1c_reset_mac(struct atl1c_hw *hw)
|
|||||||
AT_WRITE_FLUSH(hw);
|
AT_WRITE_FLUSH(hw);
|
||||||
msleep(10);
|
msleep(10);
|
||||||
/* Wait at least 10ms for All module to be Idle */
|
/* Wait at least 10ms for All module to be Idle */
|
||||||
for (timeout = 0; timeout < AT_HW_MAX_IDLE_DELAY; timeout++) {
|
|
||||||
AT_READ_REG(hw, REG_IDLE_STATUS, &idle_status_data);
|
if (atl1c_wait_until_idle(hw)) {
|
||||||
if ((idle_status_data & IDLE_STATUS_MASK) == 0)
|
|
||||||
break;
|
|
||||||
msleep(1);
|
|
||||||
}
|
|
||||||
if (timeout >= AT_HW_MAX_IDLE_DELAY) {
|
|
||||||
dev_err(&pdev->dev,
|
dev_err(&pdev->dev,
|
||||||
"MAC state machine cann't be idle since"
|
"MAC state machine can't be idle since"
|
||||||
" disabled for 10ms second\n");
|
" disabled for 10ms second\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user