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

Commit b6258fc1 authored by Stefan Richter's avatar Stefan Richter
Browse files

firewire: ohci: omit IntEvent.busReset check rom AT queueing



Since commit 82b662dc "flush AT contexts after bus reset for OHCI 1.2",
the driver takes care of any AT packets that were enqueued during a bus
reset phase.  The check from commit 76f73ca1 is therefore no longer
necessary and the MMIO read can be avoided.

Signed-off-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
parent 44b74d90
Loading
Loading
Loading
Loading
+2 −15
Original line number Diff line number Diff line
@@ -1329,21 +1329,8 @@ static int at_context_queue_packet(struct context *ctx,
				     DESCRIPTOR_IRQ_ALWAYS |
				     DESCRIPTOR_BRANCH_ALWAYS);

	/*
	 * If the controller and packet generations don't match, we need to
	 * bail out and try again.  If IntEvent.busReset is set, the AT context
	 * is halted, so appending to the context and trying to run it is
	 * futile.  Most controllers do the right thing and just flush the AT
	 * queue (per section 7.2.3.2 of the OHCI 1.1 specification), but
	 * some controllers (like a JMicron JMB381 PCI-e) misbehave and wind
	 * up stalling out.  So we just bail out in software and try again
	 * later, and everyone is happy.
	 * FIXME: Test of IntEvent.busReset may no longer be necessary since we
	 *        flush AT queues in bus_reset_tasklet.
	 * FIXME: Document how the locking works.
	 */
	if (ohci->generation != packet->generation ||
	    reg_read(ohci, OHCI1394_IntEventSet) & OHCI1394_busReset) {
	/* FIXME: Document how the locking works. */
	if (ohci->generation != packet->generation) {
		if (packet->payload_mapped)
			dma_unmap_single(ohci->card.device, payload_bus,
					 packet->payload_length, DMA_TO_DEVICE);