mwifiex: use pci_dma_sync_single* APIs
On some platforms, driver is unable read sleep cookie signature even if firmware has written it through DMA. The problem is fixed by using pci_dma_sync_single* APIs while reading DMA buffer shared with firmware. Signed-off-by: Amitkumar Karwar <akarwar@marvell.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
3e66849865
commit
cc37d8efd2
|
@ -439,9 +439,14 @@ static void mwifiex_delay_for_sleep_cookie(struct mwifiex_adapter *adapter,
|
||||||
struct pcie_service_card *card = adapter->card;
|
struct pcie_service_card *card = adapter->card;
|
||||||
u8 *buffer;
|
u8 *buffer;
|
||||||
u32 sleep_cookie, count;
|
u32 sleep_cookie, count;
|
||||||
|
struct sk_buff *cmdrsp = card->cmdrsp_buf;
|
||||||
|
|
||||||
for (count = 0; count < max_delay_loop_cnt; count++) {
|
for (count = 0; count < max_delay_loop_cnt; count++) {
|
||||||
buffer = card->cmdrsp_buf->data;
|
pci_dma_sync_single_for_cpu(card->dev,
|
||||||
|
MWIFIEX_SKB_DMA_ADDR(cmdrsp),
|
||||||
|
sizeof(sleep_cookie),
|
||||||
|
PCI_DMA_FROMDEVICE);
|
||||||
|
buffer = cmdrsp->data;
|
||||||
sleep_cookie = READ_ONCE(*(u32 *)buffer);
|
sleep_cookie = READ_ONCE(*(u32 *)buffer);
|
||||||
|
|
||||||
if (sleep_cookie == MWIFIEX_DEF_SLEEP_COOKIE) {
|
if (sleep_cookie == MWIFIEX_DEF_SLEEP_COOKIE) {
|
||||||
|
@ -449,6 +454,10 @@ static void mwifiex_delay_for_sleep_cookie(struct mwifiex_adapter *adapter,
|
||||||
"sleep cookie found at count %d\n", count);
|
"sleep cookie found at count %d\n", count);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
pci_dma_sync_single_for_device(card->dev,
|
||||||
|
MWIFIEX_SKB_DMA_ADDR(cmdrsp),
|
||||||
|
sizeof(sleep_cookie),
|
||||||
|
PCI_DMA_FROMDEVICE);
|
||||||
usleep_range(20, 30);
|
usleep_range(20, 30);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue