mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-03-30 19:07:15 +00:00
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: Lubomir Rintel <lkundrak@v3.sk> Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
This commit is contained in:
parent
a9954ce769
commit
8bc588e0e5
3 changed files with 12 additions and 22 deletions
|
@ -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"
|
||||||
", 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)
|
||||||
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)
|
||||||
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,
|
||||||
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
|
||||||
|
|
||||||
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
|
||||||
|
|
Loading…
Add table
Reference in a new issue