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

Commit 32f6fff4 authored by Grant Likely's avatar Grant Likely Committed by Jens Axboe
Browse files

Sysace: Move IRQ handler registration to occur after FSM is initialized



The FSM needs to be initialized before it is safe to call the ISR

Signed-off-by: default avatarGrant Likely <grant.likely@secretlab.ca>
Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
parent 4a24d861
Loading
Loading
Loading
Loading
+10 −11
Original line number Diff line number Diff line
@@ -949,15 +949,6 @@ static int __devinit ace_setup(struct ace_device *ace)
	if (!ace->baseaddr)
		goto err_ioremap;

	if (ace->irq != NO_IRQ) {
		rc = request_irq(ace->irq, ace_interrupt, 0, "systemace", ace);
		if (rc) {
			/* Failure - fall back to polled mode */
			dev_err(ace->dev, "request_irq failed\n");
			ace->irq = NO_IRQ;
		}
	}

	/*
	 * Initialize the state machine tasklet and stall timer
	 */
@@ -1015,6 +1006,16 @@ static int __devinit ace_setup(struct ace_device *ace)
	val |= ACE_CTRL_DATABUFRDYIRQ | ACE_CTRL_ERRORIRQ;
	ace_out(ace, ACE_CTRL, val);

	/* Now we can hook up the irq handler */
	if (ace->irq != NO_IRQ) {
		rc = request_irq(ace->irq, ace_interrupt, 0, "systemace", ace);
		if (rc) {
			/* Failure - fall back to polled mode */
			dev_err(ace->dev, "request_irq failed\n");
			ace->irq = NO_IRQ;
		}
	}

	/* Print the identification */
	dev_info(ace->dev, "Xilinx SystemACE revision %i.%i.%i\n",
		 (version >> 12) & 0xf, (version >> 8) & 0x0f, version & 0xff);
@@ -1035,8 +1036,6 @@ static int __devinit ace_setup(struct ace_device *ace)
	blk_cleanup_queue(ace->queue);
      err_blk_initq:
	iounmap(ace->baseaddr);
	if (ace->irq != NO_IRQ)
		free_irq(ace->irq, ace);
      err_ioremap:
	dev_info(ace->dev, "xsysace: error initializing device at 0x%lx\n",
	       ace->physaddr);