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

Commit 8bc588e0 authored by Lubomir Rintel's avatar Lubomir Rintel Committed by Stefan Richter
Browse files

firewire: ohci: Turn remote DMA support into a module parameter



This makes it possible to debug kernel over FireWire without the need to
recompile it.

[Stefan R: changed description from "...0" to "...N"]

Cc: Dave Hansen <dave.hansen@linux.intel.com>
Signed-off-by: default avatarLubomir Rintel <lkundrak@v3.sk>
Signed-off-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
parent a9954ce7
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -38,9 +38,7 @@ Drivers

The firewire-ohci driver in drivers/firewire uses filtered physical
DMA by default, which is more secure but not suitable for remote debugging.
Compile the driver with CONFIG_FIREWIRE_OHCI_REMOTE_DMA (Kernel hacking menu:
Remote debugging over FireWire with firewire-ohci) to get unfiltered physical
DMA.
Pass the remote_dma=1 parameter to the driver to get unfiltered physical DMA.

Because the firewire-ohci driver depends on the PCI enumeration to be
completed, an initialization routine which runs pretty early has been
+11 −8
Original line number Diff line number Diff line
@@ -370,6 +370,10 @@ MODULE_PARM_DESC(debug, "Verbose logging (default = 0"
	", busReset events = "	__stringify(OHCI_PARAM_DEBUG_BUSRESETS)
	", or a combination, or all = -1)");

static bool param_remote_dma;
module_param_named(remote_dma, param_remote_dma, bool, 0444);
MODULE_PARM_DESC(remote_dma, "Enable unfiltered remote DMA (default = N)");

static void log_irqs(struct fw_ohci *ohci, u32 evt)
{
	if (likely(!(param_debug &
@@ -2050,10 +2054,10 @@ static void bus_reset_work(struct work_struct *work)
			  be32_to_cpu(ohci->next_header));
	}

#ifdef CONFIG_FIREWIRE_OHCI_REMOTE_DMA
	if (param_remote_dma) {
		reg_write(ohci, OHCI1394_PhyReqFilterHiSet, ~0);
		reg_write(ohci, OHCI1394_PhyReqFilterLoSet, ~0);
#endif
	}

	spin_unlock_irq(&ohci->lock);

@@ -2587,13 +2591,13 @@ static int ohci_cancel_packet(struct fw_card *card, struct fw_packet *packet)
static int ohci_enable_phys_dma(struct fw_card *card,
				int node_id, int generation)
{
#ifdef CONFIG_FIREWIRE_OHCI_REMOTE_DMA
	return 0;
#else
	struct fw_ohci *ohci = fw_ohci(card);
	unsigned long flags;
	int n, ret = 0;

	if (param_remote_dma)
		return 0;

	/*
	 * FIXME:  Make sure this bitmask is cleared when we clear the busReset
	 * interrupt bit.  Clear physReqResourceAllBuses on bus reset.
@@ -2622,7 +2626,6 @@ static int ohci_enable_phys_dma(struct fw_card *card,
	spin_unlock_irqrestore(&ohci->lock, flags);

	return ret;
#endif /* CONFIG_FIREWIRE_OHCI_REMOTE_DMA */
}

static u32 ohci_read_csr(struct fw_card *card, int csr_offset)
+0 −11
Original line number Diff line number Diff line
@@ -1547,17 +1547,6 @@ config PROVIDE_OHCI1394_DMA_INIT

	  See Documentation/debugging-via-ohci1394.txt for more information.

config FIREWIRE_OHCI_REMOTE_DMA
	bool "Remote debugging over FireWire with firewire-ohci"
	depends on FIREWIRE_OHCI
	help
	  This option lets you use the FireWire bus for remote debugging
	  with help of the firewire-ohci driver. It enables unfiltered
	  remote DMA in firewire-ohci.
	  See Documentation/debugging-via-ohci1394.txt for more information.

	  If unsure, say N.

config BUILD_DOCSRC
	bool "Build targets in Documentation/ tree"
	depends on HEADERS_CHECK