aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/sparc/include/asm/io_32.h11
-rw-r--r--arch/sparc/include/asm/io_64.h11
-rw-r--r--arch/sparc/include/asm/sbus_32.h4
-rw-r--r--arch/sparc/include/asm/sbus_64.h4
-rw-r--r--arch/sparc/kernel/ioport.c2
-rw-r--r--arch/sparc64/kernel/sbus.c16
-rw-r--r--drivers/atm/fore200e.c4
-rw-r--r--drivers/net/myri_sbus.c2
-rw-r--r--drivers/net/sunhme.c14
-rw-r--r--drivers/net/sunqe.c2
-rw-r--r--drivers/scsi/qlogicpti.c2
-rw-r--r--drivers/scsi/sun_esp.c8
12 files changed, 54 insertions, 26 deletions
diff --git a/arch/sparc/include/asm/io_32.h b/arch/sparc/include/asm/io_32.h
index 10d7da450070..3ab3164bd735 100644
--- a/arch/sparc/include/asm/io_32.h
+++ b/arch/sparc/include/asm/io_32.h
@@ -308,6 +308,17 @@ extern void sbus_iounmap(volatile void __iomem *vaddr, unsigned long size);
308#define RTC_PORT(x) (rtc_port + (x)) 308#define RTC_PORT(x) (rtc_port + (x))
309#define RTC_ALWAYS_BCD 0 309#define RTC_ALWAYS_BCD 0
310 310
311static inline int sbus_can_dma_64bit(void)
312{
313 return 0; /* actually, sparc_cpu_model==sun4d */
314}
315static inline int sbus_can_burst64(void)
316{
317 return 0; /* actually, sparc_cpu_model==sun4d */
318}
319struct device;
320extern void sbus_set_sbus64(struct device *, int);
321
311#endif 322#endif
312 323
313#define __ARCH_HAS_NO_PAGE_ZERO_MAPPED 1 324#define __ARCH_HAS_NO_PAGE_ZERO_MAPPED 1
diff --git a/arch/sparc/include/asm/io_64.h b/arch/sparc/include/asm/io_64.h
index 0bff078ffdd0..73a9c5d41954 100644
--- a/arch/sparc/include/asm/io_64.h
+++ b/arch/sparc/include/asm/io_64.h
@@ -495,6 +495,17 @@ extern void pci_iounmap(struct pci_dev *dev, void __iomem *);
495#define sbus_iounmap(__addr, __size) \ 495#define sbus_iounmap(__addr, __size) \
496 release_region((unsigned long)(__addr), (__size)) 496 release_region((unsigned long)(__addr), (__size))
497 497
498static inline int sbus_can_dma_64bit(void)
499{
500 return 1;
501}
502static inline int sbus_can_burst64(void)
503{
504 return 1;
505}
506struct device;
507extern void sbus_set_sbus64(struct device *, int);
508
498/* 509/*
499 * Convert a physical pointer to a virtual kernel pointer for /dev/mem 510 * Convert a physical pointer to a virtual kernel pointer for /dev/mem
500 * access 511 * access
diff --git a/arch/sparc/include/asm/sbus_32.h b/arch/sparc/include/asm/sbus_32.h
index b09284b5ee06..435ae394d2bd 100644
--- a/arch/sparc/include/asm/sbus_32.h
+++ b/arch/sparc/include/asm/sbus_32.h
@@ -102,10 +102,6 @@ sbus_is_slave(struct sbus_dev *dev)
102 for ((bus) = sbus_root; (bus); (bus) = (bus)->next) \ 102 for ((bus) = sbus_root; (bus); (bus) = (bus)->next) \
103 for ((device) = (bus)->devices; (device); (device) = (device)->next) 103 for ((device) = (bus)->devices; (device); (device) = (device)->next)
104 104
105/* Driver DVMA interfaces. */
106#define sbus_can_dma_64bit(sdev) (0) /* actually, sparc_cpu_model==sun4d */
107#define sbus_can_burst64(sdev) (0) /* actually, sparc_cpu_model==sun4d */
108extern void sbus_set_sbus64(struct sbus_dev *, int);
109extern void sbus_fill_device_irq(struct sbus_dev *); 105extern void sbus_fill_device_irq(struct sbus_dev *);
110 106
111/* These yield IOMMU mappings in consistent mode. */ 107/* These yield IOMMU mappings in consistent mode. */
diff --git a/arch/sparc/include/asm/sbus_64.h b/arch/sparc/include/asm/sbus_64.h
index 9a2f27188f6a..79719c2e5fa6 100644
--- a/arch/sparc/include/asm/sbus_64.h
+++ b/arch/sparc/include/asm/sbus_64.h
@@ -94,10 +94,6 @@ extern struct sbus_bus *sbus_root;
94 for ((bus) = sbus_root; (bus); (bus) = (bus)->next) \ 94 for ((bus) = sbus_root; (bus); (bus) = (bus)->next) \
95 for ((device) = (bus)->devices; (device); (device) = (device)->next) 95 for ((device) = (bus)->devices; (device); (device) = (device)->next)
96 96
97/* Driver DVMA interfaces. */
98#define sbus_can_dma_64bit(sdev) (1)
99#define sbus_can_burst64(sdev) (1)
100extern void sbus_set_sbus64(struct sbus_dev *, int);
101extern void sbus_fill_device_irq(struct sbus_dev *); 97extern void sbus_fill_device_irq(struct sbus_dev *);
102 98
103extern void sbus_arch_bus_ranges_init(struct device_node *, struct sbus_bus *); 99extern void sbus_arch_bus_ranges_init(struct device_node *, struct sbus_bus *);
diff --git a/arch/sparc/kernel/ioport.c b/arch/sparc/kernel/ioport.c
index 0b3035978e0d..e87ed519ffaf 100644
--- a/arch/sparc/kernel/ioport.c
+++ b/arch/sparc/kernel/ioport.c
@@ -250,7 +250,7 @@ static void _sparc_free_io(struct resource *res)
250 250
251#ifdef CONFIG_SBUS 251#ifdef CONFIG_SBUS
252 252
253void sbus_set_sbus64(struct sbus_dev *sdev, int x) 253void sbus_set_sbus64(struct device *dev, int x)
254{ 254{
255 printk("sbus_set_sbus64: unsupported\n"); 255 printk("sbus_set_sbus64: unsupported\n");
256} 256}
diff --git a/arch/sparc64/kernel/sbus.c b/arch/sparc64/kernel/sbus.c
index e33a8a660e9e..aa47022e13f3 100644
--- a/arch/sparc64/kernel/sbus.c
+++ b/arch/sparc64/kernel/sbus.c
@@ -52,13 +52,23 @@
52#define STRBUF_TAG_VALID 0x02UL 52#define STRBUF_TAG_VALID 0x02UL
53 53
54/* Enable 64-bit DVMA mode for the given device. */ 54/* Enable 64-bit DVMA mode for the given device. */
55void sbus_set_sbus64(struct sbus_dev *sdev, int bursts) 55void sbus_set_sbus64(struct device *dev, int bursts)
56{ 56{
57 struct iommu *iommu = sdev->ofdev.dev.archdata.iommu; 57 struct iommu *iommu = dev->archdata.iommu;
58 int slot = sdev->slot; 58 struct of_device *op = to_of_device(dev);
59 const struct linux_prom_registers *regs;
59 unsigned long cfg_reg; 60 unsigned long cfg_reg;
61 int slot;
60 u64 val; 62 u64 val;
61 63
64 regs = of_get_property(op->node, "reg", NULL);
65 if (!regs) {
66 printk(KERN_ERR "sbus_set_sbus64: Cannot find regs for %s\n",
67 op->node->full_name);
68 return;
69 }
70 slot = regs->which_io;
71
62 cfg_reg = iommu->write_complete_reg; 72 cfg_reg = iommu->write_complete_reg;
63 switch (slot) { 73 switch (slot) {
64 case 0: 74 case 0:
diff --git a/drivers/atm/fore200e.c b/drivers/atm/fore200e.c
index f607e59bffae..7213590b485d 100644
--- a/drivers/atm/fore200e.c
+++ b/drivers/atm/fore200e.c
@@ -819,8 +819,8 @@ fore200e_sba_map(struct fore200e* fore200e)
819 /* get the supported DVMA burst sizes */ 819 /* get the supported DVMA burst sizes */
820 bursts = prom_getintdefault(sbus_dev->bus->prom_node, "burst-sizes", 0x00); 820 bursts = prom_getintdefault(sbus_dev->bus->prom_node, "burst-sizes", 0x00);
821 821
822 if (sbus_can_dma_64bit(sbus_dev)) 822 if (sbus_can_dma_64bit())
823 sbus_set_sbus64(sbus_dev, bursts); 823 sbus_set_sbus64(&sbus_dev->ofdev.dev, bursts);
824 824
825 fore200e->state = FORE200E_STATE_MAP; 825 fore200e->state = FORE200E_STATE_MAP;
826 return 0; 826 return 0;
diff --git a/drivers/net/myri_sbus.c b/drivers/net/myri_sbus.c
index 858880b619ce..f2a3ff24de44 100644
--- a/drivers/net/myri_sbus.c
+++ b/drivers/net/myri_sbus.c
@@ -1050,7 +1050,7 @@ static int __devinit myri_ether_init(struct sbus_dev *sdev)
1050 mp->myri_bursts = prom_getintdefault(mp->myri_sdev->bus->prom_node, 1050 mp->myri_bursts = prom_getintdefault(mp->myri_sdev->bus->prom_node,
1051 "burst-sizes", 0x00); 1051 "burst-sizes", 0x00);
1052 1052
1053 if (!sbus_can_burst64(sdev)) 1053 if (!sbus_can_burst64())
1054 mp->myri_bursts &= ~(DMA_BURST64); 1054 mp->myri_bursts &= ~(DMA_BURST64);
1055 1055
1056 DET(("MYRI bursts %02x\n", mp->myri_bursts)); 1056 DET(("MYRI bursts %02x\n", mp->myri_bursts));
diff --git a/drivers/net/sunhme.c b/drivers/net/sunhme.c
index 69cc77192961..d15da947c56a 100644
--- a/drivers/net/sunhme.c
+++ b/drivers/net/sunhme.c
@@ -1575,7 +1575,7 @@ static int happy_meal_init(struct happy_meal *hp)
1575 if ((hp->happy_bursts & DMA_BURST64) && 1575 if ((hp->happy_bursts & DMA_BURST64) &&
1576 ((hp->happy_flags & HFLAG_PCI) != 0 1576 ((hp->happy_flags & HFLAG_PCI) != 0
1577#ifdef CONFIG_SBUS 1577#ifdef CONFIG_SBUS
1578 || sbus_can_burst64(hp->happy_dev) 1578 || sbus_can_burst64()
1579#endif 1579#endif
1580 || 0)) { 1580 || 0)) {
1581 u32 gcfg = GREG_CFG_BURST64; 1581 u32 gcfg = GREG_CFG_BURST64;
@@ -1585,11 +1585,13 @@ static int happy_meal_init(struct happy_meal *hp)
1585 * do not. -DaveM 1585 * do not. -DaveM
1586 */ 1586 */
1587#ifdef CONFIG_SBUS 1587#ifdef CONFIG_SBUS
1588 if ((hp->happy_flags & HFLAG_PCI) == 0 && 1588 if ((hp->happy_flags & HFLAG_PCI) == 0) {
1589 sbus_can_dma_64bit(hp->happy_dev)) { 1589 struct sbus_dev *sdev = hp->happy_dev;
1590 sbus_set_sbus64(hp->happy_dev, 1590 if (sbus_can_dma_64bit()) {
1591 hp->happy_bursts); 1591 sbus_set_sbus64(&sdev->ofdev.dev,
1592 gcfg |= GREG_CFG_64BIT; 1592 hp->happy_bursts);
1593 gcfg |= GREG_CFG_64BIT;
1594 }
1593 } 1595 }
1594#endif 1596#endif
1595 1597
diff --git a/drivers/net/sunqe.c b/drivers/net/sunqe.c
index 66f66ee8ca63..4521972fbf3d 100644
--- a/drivers/net/sunqe.c
+++ b/drivers/net/sunqe.c
@@ -722,7 +722,7 @@ static inline void qec_init_once(struct sunqec *qecp, struct sbus_dev *qsdev)
722{ 722{
723 u8 bsizes = qecp->qec_bursts; 723 u8 bsizes = qecp->qec_bursts;
724 724
725 if (sbus_can_burst64(qsdev) && (bsizes & DMA_BURST64)) { 725 if (sbus_can_burst64() && (bsizes & DMA_BURST64)) {
726 sbus_writel(GLOB_CTRL_B64, qecp->gregs + GLOB_CTRL); 726 sbus_writel(GLOB_CTRL_B64, qecp->gregs + GLOB_CTRL);
727 } else if (bsizes & DMA_BURST32) { 727 } else if (bsizes & DMA_BURST32) {
728 sbus_writel(GLOB_CTRL_B32, qecp->gregs + GLOB_CTRL); 728 sbus_writel(GLOB_CTRL_B32, qecp->gregs + GLOB_CTRL);
diff --git a/drivers/scsi/qlogicpti.c b/drivers/scsi/qlogicpti.c
index 1559d455b2b7..e16c56c515f1 100644
--- a/drivers/scsi/qlogicpti.c
+++ b/drivers/scsi/qlogicpti.c
@@ -158,7 +158,7 @@ static inline void set_sbus_cfg1(struct qlogicpti *qpti)
158 * is a nop and the chip ends up using the smallest burst 158 * is a nop and the chip ends up using the smallest burst
159 * size. -DaveM 159 * size. -DaveM
160 */ 160 */
161 if (sbus_can_burst64(qpti->sdev) && (bursts & DMA_BURST64)) { 161 if (sbus_can_burst64() && (bursts & DMA_BURST64)) {
162 val = (SBUS_CFG1_BENAB | SBUS_CFG1_B64); 162 val = (SBUS_CFG1_BENAB | SBUS_CFG1_B64);
163 } else 163 } else
164#endif 164#endif
diff --git a/drivers/scsi/sun_esp.c b/drivers/scsi/sun_esp.c
index f7508743f705..ea0c572c7504 100644
--- a/drivers/scsi/sun_esp.c
+++ b/drivers/scsi/sun_esp.c
@@ -265,15 +265,17 @@ static void sbus_esp_reset_dma(struct esp *esp)
265{ 265{
266 int can_do_burst16, can_do_burst32, can_do_burst64; 266 int can_do_burst16, can_do_burst32, can_do_burst64;
267 int can_do_sbus64, lim; 267 int can_do_sbus64, lim;
268 struct sbus_dev *sdev;
268 u32 val; 269 u32 val;
269 270
270 can_do_burst16 = (esp->bursts & DMA_BURST16) != 0; 271 can_do_burst16 = (esp->bursts & DMA_BURST16) != 0;
271 can_do_burst32 = (esp->bursts & DMA_BURST32) != 0; 272 can_do_burst32 = (esp->bursts & DMA_BURST32) != 0;
272 can_do_burst64 = 0; 273 can_do_burst64 = 0;
273 can_do_sbus64 = 0; 274 can_do_sbus64 = 0;
274 if (sbus_can_dma_64bit(esp->dev)) 275 sdev = esp->dev;
276 if (sbus_can_dma_64bit())
275 can_do_sbus64 = 1; 277 can_do_sbus64 = 1;
276 if (sbus_can_burst64(esp->sdev)) 278 if (sbus_can_burst64())
277 can_do_burst64 = (esp->bursts & DMA_BURST64) != 0; 279 can_do_burst64 = (esp->bursts & DMA_BURST64) != 0;
278 280
279 /* Put the DVMA into a known state. */ 281 /* Put the DVMA into a known state. */
@@ -300,7 +302,7 @@ static void sbus_esp_reset_dma(struct esp *esp)
300 302
301 if (can_do_sbus64) { 303 if (can_do_sbus64) {
302 esp->prev_hme_dmacsr |= DMA_SCSI_SBUS64; 304 esp->prev_hme_dmacsr |= DMA_SCSI_SBUS64;
303 sbus_set_sbus64(esp->dev, esp->bursts); 305 sbus_set_sbus64(&sdev->ofdev.dev, esp->bursts);
304 } 306 }
305 307
306 lim = 1000; 308 lim = 1000;