Commit 080de8c2 authored by Stefan Richter's avatar Stefan Richter

firewire: fw-ohci: add option for remote debugging

This way firewire-ohci can be used for remote debugging like ohci1394.
Version with amendment from Fri, 11 Apr 2008 00:08:08 +0200.
Signed-off-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
Acked-by: default avatarBernhard Kaindl <bk@suse.de>
parent 17cff9ff
...@@ -41,15 +41,19 @@ to a working state and enables physical DMA by default for all remote nodes. ...@@ -41,15 +41,19 @@ to a working state and enables physical DMA by default for all remote nodes.
This can be turned off by ohci1394's module parameter phys_dma=0. This can be turned off by ohci1394's module parameter phys_dma=0.
The alternative firewire-ohci driver in drivers/firewire uses filtered physical The alternative firewire-ohci driver in drivers/firewire uses filtered physical
DMA, hence is not yet 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:
Remote debugging over FireWire with firewire-ohci) to get unfiltered physical
DMA.
Because ohci1394 depends on the PCI enumeration to be completed, an Because ohci1394 and firewire-ohci depend on the PCI enumeration to be
initialization routine which runs pretty early (long before console_init() completed, an initialization routine which runs pretty early has been
which makes the printk buffer appear on the console can be called) was written. implemented for x86. This routine runs long before console_init() can be
called, i.e. before the printk buffer appears on the console.
To activate it, enable CONFIG_PROVIDE_OHCI1394_DMA_INIT (Kernel hacking menu: To activate it, enable CONFIG_PROVIDE_OHCI1394_DMA_INIT (Kernel hacking menu:
Provide code for enabling DMA over FireWire early on boot) and pass the Remote debugging over FireWire early on boot) and pass the parameter
parameter "ohci1394_dma=early" to the recompiled kernel on boot. "ohci1394_dma=early" to the recompiled kernel on boot.
Tools Tools
----- -----
......
...@@ -1097,6 +1097,11 @@ static void bus_reset_tasklet(unsigned long data) ...@@ -1097,6 +1097,11 @@ static void bus_reset_tasklet(unsigned long data)
reg_write(ohci, OHCI1394_ConfigROMhdr, ohci->next_header); reg_write(ohci, OHCI1394_ConfigROMhdr, ohci->next_header);
} }
#ifdef CONFIG_FIREWIRE_OHCI_REMOTE_DMA
reg_write(ohci, OHCI1394_PhyReqFilterHiSet, ~0);
reg_write(ohci, OHCI1394_PhyReqFilterLoSet, ~0);
#endif
spin_unlock_irqrestore(&ohci->lock, flags); spin_unlock_irqrestore(&ohci->lock, flags);
if (free_rom) if (free_rom)
...@@ -1435,6 +1440,9 @@ static int ohci_cancel_packet(struct fw_card *card, struct fw_packet *packet) ...@@ -1435,6 +1440,9 @@ static int ohci_cancel_packet(struct fw_card *card, struct fw_packet *packet)
static int static int
ohci_enable_phys_dma(struct fw_card *card, int node_id, int generation) 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); struct fw_ohci *ohci = fw_ohci(card);
unsigned long flags; unsigned long flags;
int n, retval = 0; int n, retval = 0;
...@@ -1466,6 +1474,7 @@ ohci_enable_phys_dma(struct fw_card *card, int node_id, int generation) ...@@ -1466,6 +1474,7 @@ ohci_enable_phys_dma(struct fw_card *card, int node_id, int generation)
out: out:
spin_unlock_irqrestore(&ohci->lock, flags); spin_unlock_irqrestore(&ohci->lock, flags);
return retval; return retval;
#endif /* CONFIG_FIREWIRE_OHCI_REMOTE_DMA */
} }
static u64 static u64
......
...@@ -593,7 +593,7 @@ config LATENCYTOP ...@@ -593,7 +593,7 @@ config LATENCYTOP
to find out which userspace is blocking on what kernel operations. to find out which userspace is blocking on what kernel operations.
config PROVIDE_OHCI1394_DMA_INIT config PROVIDE_OHCI1394_DMA_INIT
bool "Provide code for enabling DMA over FireWire early on boot" bool "Remote debugging over FireWire early on boot"
depends on PCI && X86 depends on PCI && X86
help help
If you want to debug problems which hang or crash the kernel early If you want to debug problems which hang or crash the kernel early
...@@ -621,4 +621,15 @@ config PROVIDE_OHCI1394_DMA_INIT ...@@ -621,4 +621,15 @@ 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.
source "samples/Kconfig" source "samples/Kconfig"
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