Skip to content

Commit

Permalink
rtl8xxxu: Flush FIFO before powering down devices
Browse files Browse the repository at this point in the history
This should help when reloading the driver for 8723bu devices

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  • Loading branch information
Jes Sorensen authored and Kalle Valo committed Mar 10, 2016
1 parent fe37d5f commit 430b454
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 0 deletions.
34 changes: 34 additions & 0 deletions drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
Original file line number Diff line number Diff line change
Expand Up @@ -5687,6 +5687,36 @@ static int rtl8xxxu_emu_to_disabled(struct rtl8xxxu_priv *priv)
return 0;
}

static int rtl8xxxu_flush_fifo(struct rtl8xxxu_priv *priv)
{
u32 val32;
int retry, retval;

rtl8xxxu_write8(priv, REG_TXPAUSE, 0xff);

val32 = rtl8xxxu_read32(priv, REG_RXPKT_NUM);
val32 |= RXPKT_NUM_RW_RELEASE_EN;
rtl8xxxu_write32(priv, REG_RXPKT_NUM, val32);

retry = 100;
retval = -EBUSY;

do {
val32 = rtl8xxxu_read32(priv, REG_RXPKT_NUM);
if (val32 & RXPKT_NUM_RXDMA_IDLE) {
retval = 0;
break;
}
} while (retry--);

rtl8xxxu_write16(priv, REG_RQPN_NPQ, 0);
rtl8xxxu_write32(priv, REG_RQPN, 0x80000000);
mdelay(2);
pr_info("%s: retry %i\n", __func__, retry);

return retval;
}

static int rtl8723au_power_on(struct rtl8xxxu_priv *priv)
{
u8 val8;
Expand Down Expand Up @@ -5957,6 +5987,8 @@ static void rtl8xxxu_power_off(struct rtl8xxxu_priv *priv)
rtl8xxxu_write32(priv, REG_FPGA0_XCD_RF_PARM, val32);
}

rtl8xxxu_flush_fifo(priv);

rtl8xxxu_active_to_lps(priv);

/* Turn off RF */
Expand Down Expand Up @@ -5995,6 +6027,8 @@ static void rtl8723bu_power_off(struct rtl8xxxu_priv *priv)
u8 val8;
u16 val16;

rtl8xxxu_flush_fifo(priv);

/*
* Disable TX report timer
*/
Expand Down
2 changes: 2 additions & 0 deletions drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_regs.h
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,8 @@
#define REG_RXDMA_AGG_PG_TH 0x0280
#define RXDMA_USB_AGG_ENABLE BIT(31)
#define REG_RXPKT_NUM 0x0284
#define RXPKT_NUM_RXDMA_IDLE BIT(17)
#define RXPKT_NUM_RW_RELEASE_EN BIT(18)
#define REG_RXDMA_STATUS 0x0288

/* Presumably only found on newer chips such as 8723bu */
Expand Down

0 comments on commit 430b454

Please sign in to comment.