|
@@ -61,13 +61,13 @@ static inline void wil_icr_clear(u32 x, void __iomem *addr)
|
|
|
|
|
|
static inline void wil_icr_clear(u32 x, void __iomem *addr)
|
|
static inline void wil_icr_clear(u32 x, void __iomem *addr)
|
|
{
|
|
{
|
|
- iowrite32(x, addr);
|
|
|
|
|
|
+ writel(x, addr);
|
|
}
|
|
}
|
|
#endif /* defined(CONFIG_WIL6210_ISR_COR) */
|
|
#endif /* defined(CONFIG_WIL6210_ISR_COR) */
|
|
|
|
|
|
static inline u32 wil_ioread32_and_clear(void __iomem *addr)
|
|
static inline u32 wil_ioread32_and_clear(void __iomem *addr)
|
|
{
|
|
{
|
|
- u32 x = ioread32(addr);
|
|
|
|
|
|
+ u32 x = readl(addr);
|
|
|
|
|
|
wil_icr_clear(x, addr);
|
|
wil_icr_clear(x, addr);
|
|
|
|
|
|
@@ -76,54 +76,47 @@ static inline u32 wil_ioread32_and_clear(void __iomem *addr)
|
|
|
|
|
|
static void wil6210_mask_irq_tx(struct wil6210_priv *wil)
|
|
static void wil6210_mask_irq_tx(struct wil6210_priv *wil)
|
|
{
|
|
{
|
|
- iowrite32(WIL6210_IRQ_DISABLE, wil->csr +
|
|
|
|
- HOSTADDR(RGF_DMA_EP_TX_ICR) +
|
|
|
|
- offsetof(struct RGF_ICR, IMS));
|
|
|
|
|
|
+ wil_w(wil, RGF_DMA_EP_TX_ICR + offsetof(struct RGF_ICR, IMS),
|
|
|
|
+ WIL6210_IRQ_DISABLE);
|
|
}
|
|
}
|
|
|
|
|
|
static void wil6210_mask_irq_rx(struct wil6210_priv *wil)
|
|
static void wil6210_mask_irq_rx(struct wil6210_priv *wil)
|
|
{
|
|
{
|
|
- iowrite32(WIL6210_IRQ_DISABLE, wil->csr +
|
|
|
|
- HOSTADDR(RGF_DMA_EP_RX_ICR) +
|
|
|
|
- offsetof(struct RGF_ICR, IMS));
|
|
|
|
|
|
+ wil_w(wil, RGF_DMA_EP_RX_ICR + offsetof(struct RGF_ICR, IMS),
|
|
|
|
+ WIL6210_IRQ_DISABLE);
|
|
}
|
|
}
|
|
|
|
|
|
static void wil6210_mask_irq_misc(struct wil6210_priv *wil)
|
|
static void wil6210_mask_irq_misc(struct wil6210_priv *wil)
|
|
{
|
|
{
|
|
- iowrite32(WIL6210_IRQ_DISABLE, wil->csr +
|
|
|
|
- HOSTADDR(RGF_DMA_EP_MISC_ICR) +
|
|
|
|
- offsetof(struct RGF_ICR, IMS));
|
|
|
|
|
|
+ wil_w(wil, RGF_DMA_EP_MISC_ICR + offsetof(struct RGF_ICR, IMS),
|
|
|
|
+ WIL6210_IRQ_DISABLE);
|
|
}
|
|
}
|
|
|
|
|
|
static void wil6210_mask_irq_pseudo(struct wil6210_priv *wil)
|
|
static void wil6210_mask_irq_pseudo(struct wil6210_priv *wil)
|
|
{
|
|
{
|
|
wil_dbg_irq(wil, "%s()\n", __func__);
|
|
wil_dbg_irq(wil, "%s()\n", __func__);
|
|
|
|
|
|
- iowrite32(WIL6210_IRQ_DISABLE, wil->csr +
|
|
|
|
- HOSTADDR(RGF_DMA_PSEUDO_CAUSE_MASK_SW));
|
|
|
|
|
|
+ wil_w(wil, RGF_DMA_PSEUDO_CAUSE_MASK_SW, WIL6210_IRQ_DISABLE);
|
|
|
|
|
|
clear_bit(wil_status_irqen, wil->status);
|
|
clear_bit(wil_status_irqen, wil->status);
|
|
}
|
|
}
|
|
|
|
|
|
void wil6210_unmask_irq_tx(struct wil6210_priv *wil)
|
|
void wil6210_unmask_irq_tx(struct wil6210_priv *wil)
|
|
{
|
|
{
|
|
- iowrite32(WIL6210_IMC_TX, wil->csr +
|
|
|
|
- HOSTADDR(RGF_DMA_EP_TX_ICR) +
|
|
|
|
- offsetof(struct RGF_ICR, IMC));
|
|
|
|
|
|
+ wil_w(wil, RGF_DMA_EP_TX_ICR + offsetof(struct RGF_ICR, IMC),
|
|
|
|
+ WIL6210_IMC_TX);
|
|
}
|
|
}
|
|
|
|
|
|
void wil6210_unmask_irq_rx(struct wil6210_priv *wil)
|
|
void wil6210_unmask_irq_rx(struct wil6210_priv *wil)
|
|
{
|
|
{
|
|
- iowrite32(WIL6210_IMC_RX, wil->csr +
|
|
|
|
- HOSTADDR(RGF_DMA_EP_RX_ICR) +
|
|
|
|
- offsetof(struct RGF_ICR, IMC));
|
|
|
|
|
|
+ wil_w(wil, RGF_DMA_EP_RX_ICR + offsetof(struct RGF_ICR, IMC),
|
|
|
|
+ WIL6210_IMC_RX);
|
|
}
|
|
}
|
|
|
|
|
|
static void wil6210_unmask_irq_misc(struct wil6210_priv *wil)
|
|
static void wil6210_unmask_irq_misc(struct wil6210_priv *wil)
|
|
{
|
|
{
|
|
- iowrite32(WIL6210_IMC_MISC, wil->csr +
|
|
|
|
- HOSTADDR(RGF_DMA_EP_MISC_ICR) +
|
|
|
|
- offsetof(struct RGF_ICR, IMC));
|
|
|
|
|
|
+ wil_w(wil, RGF_DMA_EP_MISC_ICR + offsetof(struct RGF_ICR, IMC),
|
|
|
|
+ WIL6210_IMC_MISC);
|
|
}
|
|
}
|
|
|
|
|
|
static void wil6210_unmask_irq_pseudo(struct wil6210_priv *wil)
|
|
static void wil6210_unmask_irq_pseudo(struct wil6210_priv *wil)
|
|
@@ -132,8 +125,7 @@ static void wil6210_unmask_irq_pseudo(struct wil6210_priv *wil)
|
|
|
|
|
|
set_bit(wil_status_irqen, wil->status);
|
|
set_bit(wil_status_irqen, wil->status);
|
|
|
|
|
|
- iowrite32(WIL6210_IRQ_PSEUDO_MASK, wil->csr +
|
|
|
|
- HOSTADDR(RGF_DMA_PSEUDO_CAUSE_MASK_SW));
|
|
|
|
|
|
+ wil_w(wil, RGF_DMA_PSEUDO_CAUSE_MASK_SW, WIL6210_IRQ_PSEUDO_MASK);
|
|
}
|
|
}
|
|
|
|
|
|
void wil_mask_irq(struct wil6210_priv *wil)
|
|
void wil_mask_irq(struct wil6210_priv *wil)
|
|
@@ -150,12 +142,12 @@ void wil_unmask_irq(struct wil6210_priv *wil)
|
|
{
|
|
{
|
|
wil_dbg_irq(wil, "%s()\n", __func__);
|
|
wil_dbg_irq(wil, "%s()\n", __func__);
|
|
|
|
|
|
- iowrite32(WIL_ICR_ICC_VALUE, wil->csr + HOSTADDR(RGF_DMA_EP_RX_ICR) +
|
|
|
|
- offsetof(struct RGF_ICR, ICC));
|
|
|
|
- iowrite32(WIL_ICR_ICC_VALUE, wil->csr + HOSTADDR(RGF_DMA_EP_TX_ICR) +
|
|
|
|
- offsetof(struct RGF_ICR, ICC));
|
|
|
|
- iowrite32(WIL_ICR_ICC_VALUE, wil->csr + HOSTADDR(RGF_DMA_EP_MISC_ICR) +
|
|
|
|
- offsetof(struct RGF_ICR, ICC));
|
|
|
|
|
|
+ wil_w(wil, RGF_DMA_EP_RX_ICR + offsetof(struct RGF_ICR, ICC),
|
|
|
|
+ WIL_ICR_ICC_VALUE);
|
|
|
|
+ wil_w(wil, RGF_DMA_EP_TX_ICR + offsetof(struct RGF_ICR, ICC),
|
|
|
|
+ WIL_ICR_ICC_VALUE);
|
|
|
|
+ wil_w(wil, RGF_DMA_EP_MISC_ICR + offsetof(struct RGF_ICR, ICC),
|
|
|
|
+ WIL_ICR_ICC_VALUE);
|
|
|
|
|
|
wil6210_unmask_irq_pseudo(wil);
|
|
wil6210_unmask_irq_pseudo(wil);
|
|
wil6210_unmask_irq_tx(wil);
|
|
wil6210_unmask_irq_tx(wil);
|
|
@@ -163,9 +155,6 @@ void wil_unmask_irq(struct wil6210_priv *wil)
|
|
wil6210_unmask_irq_misc(wil);
|
|
wil6210_unmask_irq_misc(wil);
|
|
}
|
|
}
|
|
|
|
|
|
-/* target write operation */
|
|
|
|
-#define W(a, v) do { iowrite32(v, wil->csr + HOSTADDR(a)); wmb(); } while (0)
|
|
|
|
-
|
|
|
|
void wil_configure_interrupt_moderation(struct wil6210_priv *wil)
|
|
void wil_configure_interrupt_moderation(struct wil6210_priv *wil)
|
|
{
|
|
{
|
|
wil_dbg_irq(wil, "%s()\n", __func__);
|
|
wil_dbg_irq(wil, "%s()\n", __func__);
|
|
@@ -177,44 +166,42 @@ void wil_configure_interrupt_moderation(struct wil6210_priv *wil)
|
|
return;
|
|
return;
|
|
|
|
|
|
/* Disable and clear tx counter before (re)configuration */
|
|
/* Disable and clear tx counter before (re)configuration */
|
|
- W(RGF_DMA_ITR_TX_CNT_CTL, BIT_DMA_ITR_TX_CNT_CTL_CLR);
|
|
|
|
- W(RGF_DMA_ITR_TX_CNT_TRSH, wil->tx_max_burst_duration);
|
|
|
|
|
|
+ wil_w(wil, RGF_DMA_ITR_TX_CNT_CTL, BIT_DMA_ITR_TX_CNT_CTL_CLR);
|
|
|
|
+ wil_w(wil, RGF_DMA_ITR_TX_CNT_TRSH, wil->tx_max_burst_duration);
|
|
wil_info(wil, "set ITR_TX_CNT_TRSH = %d usec\n",
|
|
wil_info(wil, "set ITR_TX_CNT_TRSH = %d usec\n",
|
|
wil->tx_max_burst_duration);
|
|
wil->tx_max_burst_duration);
|
|
/* Configure TX max burst duration timer to use usec units */
|
|
/* Configure TX max burst duration timer to use usec units */
|
|
- W(RGF_DMA_ITR_TX_CNT_CTL,
|
|
|
|
- BIT_DMA_ITR_TX_CNT_CTL_EN | BIT_DMA_ITR_TX_CNT_CTL_EXT_TIC_SEL);
|
|
|
|
|
|
+ wil_w(wil, RGF_DMA_ITR_TX_CNT_CTL,
|
|
|
|
+ BIT_DMA_ITR_TX_CNT_CTL_EN | BIT_DMA_ITR_TX_CNT_CTL_EXT_TIC_SEL);
|
|
|
|
|
|
/* Disable and clear tx idle counter before (re)configuration */
|
|
/* Disable and clear tx idle counter before (re)configuration */
|
|
- W(RGF_DMA_ITR_TX_IDL_CNT_CTL, BIT_DMA_ITR_TX_IDL_CNT_CTL_CLR);
|
|
|
|
- W(RGF_DMA_ITR_TX_IDL_CNT_TRSH, wil->tx_interframe_timeout);
|
|
|
|
|
|
+ wil_w(wil, RGF_DMA_ITR_TX_IDL_CNT_CTL, BIT_DMA_ITR_TX_IDL_CNT_CTL_CLR);
|
|
|
|
+ wil_w(wil, RGF_DMA_ITR_TX_IDL_CNT_TRSH, wil->tx_interframe_timeout);
|
|
wil_info(wil, "set ITR_TX_IDL_CNT_TRSH = %d usec\n",
|
|
wil_info(wil, "set ITR_TX_IDL_CNT_TRSH = %d usec\n",
|
|
wil->tx_interframe_timeout);
|
|
wil->tx_interframe_timeout);
|
|
/* Configure TX max burst duration timer to use usec units */
|
|
/* Configure TX max burst duration timer to use usec units */
|
|
- W(RGF_DMA_ITR_TX_IDL_CNT_CTL, BIT_DMA_ITR_TX_IDL_CNT_CTL_EN |
|
|
|
|
- BIT_DMA_ITR_TX_IDL_CNT_CTL_EXT_TIC_SEL);
|
|
|
|
|
|
+ wil_w(wil, RGF_DMA_ITR_TX_IDL_CNT_CTL, BIT_DMA_ITR_TX_IDL_CNT_CTL_EN |
|
|
|
|
+ BIT_DMA_ITR_TX_IDL_CNT_CTL_EXT_TIC_SEL);
|
|
|
|
|
|
/* Disable and clear rx counter before (re)configuration */
|
|
/* Disable and clear rx counter before (re)configuration */
|
|
- W(RGF_DMA_ITR_RX_CNT_CTL, BIT_DMA_ITR_RX_CNT_CTL_CLR);
|
|
|
|
- W(RGF_DMA_ITR_RX_CNT_TRSH, wil->rx_max_burst_duration);
|
|
|
|
|
|
+ wil_w(wil, RGF_DMA_ITR_RX_CNT_CTL, BIT_DMA_ITR_RX_CNT_CTL_CLR);
|
|
|
|
+ wil_w(wil, RGF_DMA_ITR_RX_CNT_TRSH, wil->rx_max_burst_duration);
|
|
wil_info(wil, "set ITR_RX_CNT_TRSH = %d usec\n",
|
|
wil_info(wil, "set ITR_RX_CNT_TRSH = %d usec\n",
|
|
wil->rx_max_burst_duration);
|
|
wil->rx_max_burst_duration);
|
|
/* Configure TX max burst duration timer to use usec units */
|
|
/* Configure TX max burst duration timer to use usec units */
|
|
- W(RGF_DMA_ITR_RX_CNT_CTL,
|
|
|
|
- BIT_DMA_ITR_RX_CNT_CTL_EN | BIT_DMA_ITR_RX_CNT_CTL_EXT_TIC_SEL);
|
|
|
|
|
|
+ wil_w(wil, RGF_DMA_ITR_RX_CNT_CTL,
|
|
|
|
+ BIT_DMA_ITR_RX_CNT_CTL_EN | BIT_DMA_ITR_RX_CNT_CTL_EXT_TIC_SEL);
|
|
|
|
|
|
/* Disable and clear rx idle counter before (re)configuration */
|
|
/* Disable and clear rx idle counter before (re)configuration */
|
|
- W(RGF_DMA_ITR_RX_IDL_CNT_CTL, BIT_DMA_ITR_RX_IDL_CNT_CTL_CLR);
|
|
|
|
- W(RGF_DMA_ITR_RX_IDL_CNT_TRSH, wil->rx_interframe_timeout);
|
|
|
|
|
|
+ wil_w(wil, RGF_DMA_ITR_RX_IDL_CNT_CTL, BIT_DMA_ITR_RX_IDL_CNT_CTL_CLR);
|
|
|
|
+ wil_w(wil, RGF_DMA_ITR_RX_IDL_CNT_TRSH, wil->rx_interframe_timeout);
|
|
wil_info(wil, "set ITR_RX_IDL_CNT_TRSH = %d usec\n",
|
|
wil_info(wil, "set ITR_RX_IDL_CNT_TRSH = %d usec\n",
|
|
wil->rx_interframe_timeout);
|
|
wil->rx_interframe_timeout);
|
|
/* Configure TX max burst duration timer to use usec units */
|
|
/* Configure TX max burst duration timer to use usec units */
|
|
- W(RGF_DMA_ITR_RX_IDL_CNT_CTL, BIT_DMA_ITR_RX_IDL_CNT_CTL_EN |
|
|
|
|
- BIT_DMA_ITR_RX_IDL_CNT_CTL_EXT_TIC_SEL);
|
|
|
|
|
|
+ wil_w(wil, RGF_DMA_ITR_RX_IDL_CNT_CTL, BIT_DMA_ITR_RX_IDL_CNT_CTL_EN |
|
|
|
|
+ BIT_DMA_ITR_RX_IDL_CNT_CTL_EXT_TIC_SEL);
|
|
}
|
|
}
|
|
|
|
|
|
-#undef W
|
|
|
|
-
|
|
|
|
static irqreturn_t wil6210_irq_rx(int irq, void *cookie)
|
|
static irqreturn_t wil6210_irq_rx(int irq, void *cookie)
|
|
{
|
|
{
|
|
struct wil6210_priv *wil = cookie;
|
|
struct wil6210_priv *wil = cookie;
|
|
@@ -452,27 +439,24 @@ static int wil6210_debug_irq_mask(struct wil6210_priv *wil, u32 pseudo_cause)
|
|
u32 icr_rx = wil_ioread32_and_clear(wil->csr +
|
|
u32 icr_rx = wil_ioread32_and_clear(wil->csr +
|
|
HOSTADDR(RGF_DMA_EP_RX_ICR) +
|
|
HOSTADDR(RGF_DMA_EP_RX_ICR) +
|
|
offsetof(struct RGF_ICR, ICR));
|
|
offsetof(struct RGF_ICR, ICR));
|
|
- u32 imv_rx = ioread32(wil->csr +
|
|
|
|
- HOSTADDR(RGF_DMA_EP_RX_ICR) +
|
|
|
|
- offsetof(struct RGF_ICR, IMV));
|
|
|
|
|
|
+ u32 imv_rx = wil_r(wil, RGF_DMA_EP_RX_ICR +
|
|
|
|
+ offsetof(struct RGF_ICR, IMV));
|
|
u32 icm_tx = wil_ioread32_and_clear(wil->csr +
|
|
u32 icm_tx = wil_ioread32_and_clear(wil->csr +
|
|
HOSTADDR(RGF_DMA_EP_TX_ICR) +
|
|
HOSTADDR(RGF_DMA_EP_TX_ICR) +
|
|
offsetof(struct RGF_ICR, ICM));
|
|
offsetof(struct RGF_ICR, ICM));
|
|
u32 icr_tx = wil_ioread32_and_clear(wil->csr +
|
|
u32 icr_tx = wil_ioread32_and_clear(wil->csr +
|
|
HOSTADDR(RGF_DMA_EP_TX_ICR) +
|
|
HOSTADDR(RGF_DMA_EP_TX_ICR) +
|
|
offsetof(struct RGF_ICR, ICR));
|
|
offsetof(struct RGF_ICR, ICR));
|
|
- u32 imv_tx = ioread32(wil->csr +
|
|
|
|
- HOSTADDR(RGF_DMA_EP_TX_ICR) +
|
|
|
|
- offsetof(struct RGF_ICR, IMV));
|
|
|
|
|
|
+ u32 imv_tx = wil_r(wil, RGF_DMA_EP_TX_ICR +
|
|
|
|
+ offsetof(struct RGF_ICR, IMV));
|
|
u32 icm_misc = wil_ioread32_and_clear(wil->csr +
|
|
u32 icm_misc = wil_ioread32_and_clear(wil->csr +
|
|
HOSTADDR(RGF_DMA_EP_MISC_ICR) +
|
|
HOSTADDR(RGF_DMA_EP_MISC_ICR) +
|
|
offsetof(struct RGF_ICR, ICM));
|
|
offsetof(struct RGF_ICR, ICM));
|
|
u32 icr_misc = wil_ioread32_and_clear(wil->csr +
|
|
u32 icr_misc = wil_ioread32_and_clear(wil->csr +
|
|
HOSTADDR(RGF_DMA_EP_MISC_ICR) +
|
|
HOSTADDR(RGF_DMA_EP_MISC_ICR) +
|
|
offsetof(struct RGF_ICR, ICR));
|
|
offsetof(struct RGF_ICR, ICR));
|
|
- u32 imv_misc = ioread32(wil->csr +
|
|
|
|
- HOSTADDR(RGF_DMA_EP_MISC_ICR) +
|
|
|
|
- offsetof(struct RGF_ICR, IMV));
|
|
|
|
|
|
+ u32 imv_misc = wil_r(wil, RGF_DMA_EP_MISC_ICR +
|
|
|
|
+ offsetof(struct RGF_ICR, IMV));
|
|
wil_err(wil, "IRQ when it should be masked: pseudo 0x%08x\n"
|
|
wil_err(wil, "IRQ when it should be masked: pseudo 0x%08x\n"
|
|
"Rx icm:icr:imv 0x%08x 0x%08x 0x%08x\n"
|
|
"Rx icm:icr:imv 0x%08x 0x%08x 0x%08x\n"
|
|
"Tx icm:icr:imv 0x%08x 0x%08x 0x%08x\n"
|
|
"Tx icm:icr:imv 0x%08x 0x%08x 0x%08x\n"
|
|
@@ -492,7 +476,7 @@ static irqreturn_t wil6210_hardirq(int irq, void *cookie)
|
|
{
|
|
{
|
|
irqreturn_t rc = IRQ_HANDLED;
|
|
irqreturn_t rc = IRQ_HANDLED;
|
|
struct wil6210_priv *wil = cookie;
|
|
struct wil6210_priv *wil = cookie;
|
|
- u32 pseudo_cause = ioread32(wil->csr + HOSTADDR(RGF_DMA_PSEUDO_CAUSE));
|
|
|
|
|
|
+ u32 pseudo_cause = wil_r(wil, RGF_DMA_PSEUDO_CAUSE);
|
|
|
|
|
|
/**
|
|
/**
|
|
* pseudo_cause is Clear-On-Read, no need to ACK
|
|
* pseudo_cause is Clear-On-Read, no need to ACK
|
|
@@ -544,9 +528,9 @@ static irqreturn_t wil6210_hardirq(int irq, void *cookie)
|
|
/* can't use wil_ioread32_and_clear because ICC value is not set yet */
|
|
/* can't use wil_ioread32_and_clear because ICC value is not set yet */
|
|
static inline void wil_clear32(void __iomem *addr)
|
|
static inline void wil_clear32(void __iomem *addr)
|
|
{
|
|
{
|
|
- u32 x = ioread32(addr);
|
|
|
|
|
|
+ u32 x = readl(addr);
|
|
|
|
|
|
- iowrite32(x, addr);
|
|
|
|
|
|
+ writel(x, addr);
|
|
}
|
|
}
|
|
|
|
|
|
void wil6210_clear_irq(struct wil6210_priv *wil)
|
|
void wil6210_clear_irq(struct wil6210_priv *wil)
|