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
					
				| @ -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 | ||||
|  | ||||
| @ -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 | ||||
| 	reg_write(ohci, OHCI1394_PhyReqFilterHiSet, ~0); | ||||
| 	reg_write(ohci, OHCI1394_PhyReqFilterLoSet, ~0); | ||||
| #endif | ||||
| 	if (param_remote_dma) { | ||||
| 		reg_write(ohci, OHCI1394_PhyReqFilterHiSet, ~0); | ||||
| 		reg_write(ohci, OHCI1394_PhyReqFilterLoSet, ~0); | ||||
| 	} | ||||
| 
 | ||||
| 	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) | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user