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

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
...@@ -38,9 +38,7 @@ Drivers ...@@ -38,9 +38,7 @@ Drivers
The firewire-ohci driver in drivers/firewire uses filtered physical The firewire-ohci driver in drivers/firewire uses filtered physical
DMA by default, which is more secure but not suitable for remote debugging. 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: Pass the remote_dma=1 parameter to the driver to get unfiltered physical DMA.
Remote debugging over FireWire with firewire-ohci) to get unfiltered physical
DMA.
Because the firewire-ohci driver depends on the PCI enumeration to be Because the firewire-ohci driver depends on the PCI enumeration to be
completed, an initialization routine which runs pretty early has been completed, an initialization routine which runs pretty early has been
......
...@@ -370,6 +370,10 @@ MODULE_PARM_DESC(debug, "Verbose logging (default = 0" ...@@ -370,6 +370,10 @@ MODULE_PARM_DESC(debug, "Verbose logging (default = 0"
", busReset events = " __stringify(OHCI_PARAM_DEBUG_BUSRESETS) ", busReset events = " __stringify(OHCI_PARAM_DEBUG_BUSRESETS)
", or a combination, or all = -1)"); ", 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) static void log_irqs(struct fw_ohci *ohci, u32 evt)
{ {
if (likely(!(param_debug & if (likely(!(param_debug &
...@@ -2050,10 +2054,10 @@ static void bus_reset_work(struct work_struct *work) ...@@ -2050,10 +2054,10 @@ static void bus_reset_work(struct work_struct *work)
be32_to_cpu(ohci->next_header)); 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_PhyReqFilterHiSet, ~0);
reg_write(ohci, OHCI1394_PhyReqFilterLoSet, ~0); reg_write(ohci, OHCI1394_PhyReqFilterLoSet, ~0);
#endif }
spin_unlock_irq(&ohci->lock); spin_unlock_irq(&ohci->lock);
...@@ -2587,13 +2591,13 @@ static int ohci_cancel_packet(struct fw_card *card, struct fw_packet *packet) ...@@ -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, static int ohci_enable_phys_dma(struct fw_card *card,
int node_id, int generation) int node_id, int generation)
{ {
#ifdef CONFIG_FIREWIRE_OHCI_REMOTE_DMA
return 0;
#else
struct fw_ohci *ohci = fw_ohci(card); struct fw_ohci *ohci = fw_ohci(card);
unsigned long flags; unsigned long flags;
int n, ret = 0; int n, ret = 0;
if (param_remote_dma)
return 0;
/* /*
* FIXME: Make sure this bitmask is cleared when we clear the busReset * FIXME: Make sure this bitmask is cleared when we clear the busReset
* interrupt bit. Clear physReqResourceAllBuses on bus reset. * interrupt bit. Clear physReqResourceAllBuses on bus reset.
...@@ -2622,7 +2626,6 @@ static int ohci_enable_phys_dma(struct fw_card *card, ...@@ -2622,7 +2626,6 @@ static int ohci_enable_phys_dma(struct fw_card *card,
spin_unlock_irqrestore(&ohci->lock, flags); spin_unlock_irqrestore(&ohci->lock, flags);
return ret; return ret;
#endif /* CONFIG_FIREWIRE_OHCI_REMOTE_DMA */
} }
static u32 ohci_read_csr(struct fw_card *card, int csr_offset) static u32 ohci_read_csr(struct fw_card *card, int csr_offset)
......
...@@ -1547,17 +1547,6 @@ config PROVIDE_OHCI1394_DMA_INIT ...@@ -1547,17 +1547,6 @@ config PROVIDE_OHCI1394_DMA_INIT
See Documentation/debugging-via-ohci1394.txt for more information. 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 config BUILD_DOCSRC
bool "Build targets in Documentation/ tree" bool "Build targets in Documentation/ tree"
depends on HEADERS_CHECK depends on HEADERS_CHECK
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment