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

Commit d4b70570 authored by Lennert Buytenhek's avatar Lennert Buytenhek Committed by John W. Linville
Browse files

mwl8k: don't touch 'command done' interrupt during firmware load



Since firmware load commands don't generate 'command done' interrupts
like normal commands do, polling for command done interrupts just
unnecessarily slows down the firmware load process.  Removing this bit
of code speeds up loading a typical firmware image from 840 msec to
180 msec.

Signed-off-by: default avatarLennert Buytenhek <buytenh@marvell.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 76266b2a
Loading
Loading
Loading
Loading
+1 −23
Original line number Diff line number Diff line
@@ -411,7 +411,6 @@ mwl8k_send_fw_load_cmd(struct mwl8k_priv *priv, void *data, int length)
{
	void __iomem *regs = priv->regs;
	dma_addr_t dma_addr;
	int rc;
	int loops;

	dma_addr = pci_map_single(priv->pdev, data, length, PCI_DMA_TODEVICE);
@@ -425,7 +424,6 @@ mwl8k_send_fw_load_cmd(struct mwl8k_priv *priv, void *data, int length)
	iowrite32(MWL8K_H2A_INT_DUMMY,
		regs + MWL8K_HIU_H2A_INTERRUPT_EVENTS);

	rc = -ETIMEDOUT;
	loops = 1000;
	do {
		u32 int_code;
@@ -433,7 +431,6 @@ mwl8k_send_fw_load_cmd(struct mwl8k_priv *priv, void *data, int length)
		int_code = ioread32(regs + MWL8K_HIU_INT_CODE);
		if (int_code == MWL8K_INT_CODE_CMD_FINISHED) {
			iowrite32(0, regs + MWL8K_HIU_INT_CODE);
			rc = 0;
			break;
		}

@@ -442,26 +439,7 @@ mwl8k_send_fw_load_cmd(struct mwl8k_priv *priv, void *data, int length)

	pci_unmap_single(priv->pdev, dma_addr, length, PCI_DMA_TODEVICE);

	/*
	 * Clear 'command done' interrupt bit.
	 */
	loops = 1000;
	do {
		u32 status;

		status = ioread32(priv->regs +
				MWL8K_HIU_A2H_INTERRUPT_STATUS);
		if (status & MWL8K_A2H_INT_OPC_DONE) {
			iowrite32(~MWL8K_A2H_INT_OPC_DONE,
				priv->regs + MWL8K_HIU_A2H_INTERRUPT_STATUS);
			ioread32(priv->regs + MWL8K_HIU_A2H_INTERRUPT_STATUS);
			break;
		}

		udelay(1);
	} while (--loops);

	return rc;
	return loops ? 0 : -ETIMEDOUT;
}

static int mwl8k_load_fw_image(struct mwl8k_priv *priv,