Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cc37d8ef authored by Amitkumar Karwar's avatar Amitkumar Karwar Committed by Kalle Valo
Browse files

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: default avatarAmitkumar Karwar <akarwar@marvell.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 3e668498
Loading
Loading
Loading
Loading
+10 −1
Original line number Original line Diff line number Diff line
@@ -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);
	}
	}