aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Rothwell <sfr@canb.auug.org.au>2006-03-27 22:40:58 -0500
committerPaul Mackerras <paulus@samba.org>2006-03-28 00:45:36 -0500
commitb239cbe957ae730caa8af2f169a4d35b8c1bb299 (patch)
tree7567ee8777c8b4331770240952b738cf4f52d1b9
parent69ed3324983bb937d78a8579ed91b90242ee5aaa (diff)
[PATCH] powerpc: make ISA floppies work again
We used to assume that a DMA mapping request with a NULL dev was for ISA DMA. This assumption was broken at some point. Now we explicitly pass the detected ISA PCI device in the floppy setup. Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Paul Mackerras <paulus@samba.org>
-rw-r--r--arch/powerpc/kernel/pci_64.c1
-rw-r--r--include/asm-powerpc/floppy.h5
2 files changed, 4 insertions, 2 deletions
diff --git a/arch/powerpc/kernel/pci_64.c b/arch/powerpc/kernel/pci_64.c
index ba92bab7cc2c..4c4449be81ce 100644
--- a/arch/powerpc/kernel/pci_64.c
+++ b/arch/powerpc/kernel/pci_64.c
@@ -78,6 +78,7 @@ int global_phb_number; /* Global phb counter */
78 78
79/* Cached ISA bridge dev. */ 79/* Cached ISA bridge dev. */
80struct pci_dev *ppc64_isabridge_dev = NULL; 80struct pci_dev *ppc64_isabridge_dev = NULL;
81EXPORT_SYMBOL_GPL(ppc64_isabridge_dev);
81 82
82static void fixup_broken_pcnet32(struct pci_dev* dev) 83static void fixup_broken_pcnet32(struct pci_dev* dev)
83{ 84{
diff --git a/include/asm-powerpc/floppy.h b/include/asm-powerpc/floppy.h
index e258778ca429..608164c39efb 100644
--- a/include/asm-powerpc/floppy.h
+++ b/include/asm-powerpc/floppy.h
@@ -35,6 +35,7 @@
35#ifdef CONFIG_PCI 35#ifdef CONFIG_PCI
36 36
37#include <linux/pci.h> 37#include <linux/pci.h>
38#include <asm/ppc-pci.h> /* for ppc64_isabridge_dev */
38 39
39#define fd_dma_setup(addr,size,mode,io) powerpc_fd_dma_setup(addr,size,mode,io) 40#define fd_dma_setup(addr,size,mode,io) powerpc_fd_dma_setup(addr,size,mode,io)
40 41
@@ -52,12 +53,12 @@ static __inline__ int powerpc_fd_dma_setup(char *addr, unsigned long size,
52 if (bus_addr 53 if (bus_addr
53 && (addr != prev_addr || size != prev_size || dir != prev_dir)) { 54 && (addr != prev_addr || size != prev_size || dir != prev_dir)) {
54 /* different from last time -- unmap prev */ 55 /* different from last time -- unmap prev */
55 pci_unmap_single(NULL, bus_addr, prev_size, prev_dir); 56 pci_unmap_single(ppc64_isabridge_dev, bus_addr, prev_size, prev_dir);
56 bus_addr = 0; 57 bus_addr = 0;
57 } 58 }
58 59
59 if (!bus_addr) /* need to map it */ 60 if (!bus_addr) /* need to map it */
60 bus_addr = pci_map_single(NULL, addr, size, dir); 61 bus_addr = pci_map_single(ppc64_isabridge_dev, addr, size, dir);
61 62
62 /* remember this one as prev */ 63 /* remember this one as prev */
63 prev_addr = addr; 64 prev_addr = addr;