diff options
-rw-r--r-- | arch/sparc/include/asm/io_32.h | 11 | ||||
-rw-r--r-- | arch/sparc/include/asm/io_64.h | 11 | ||||
-rw-r--r-- | arch/sparc/include/asm/sbus_32.h | 4 | ||||
-rw-r--r-- | arch/sparc/include/asm/sbus_64.h | 4 | ||||
-rw-r--r-- | arch/sparc/kernel/ioport.c | 2 | ||||
-rw-r--r-- | arch/sparc64/kernel/sbus.c | 16 | ||||
-rw-r--r-- | drivers/atm/fore200e.c | 4 | ||||
-rw-r--r-- | drivers/net/myri_sbus.c | 2 | ||||
-rw-r--r-- | drivers/net/sunhme.c | 14 | ||||
-rw-r--r-- | drivers/net/sunqe.c | 2 | ||||
-rw-r--r-- | drivers/scsi/qlogicpti.c | 2 | ||||
-rw-r--r-- | drivers/scsi/sun_esp.c | 8 |
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 | ||
311 | static inline int sbus_can_dma_64bit(void) | ||
312 | { | ||
313 | return 0; /* actually, sparc_cpu_model==sun4d */ | ||
314 | } | ||
315 | static inline int sbus_can_burst64(void) | ||
316 | { | ||
317 | return 0; /* actually, sparc_cpu_model==sun4d */ | ||
318 | } | ||
319 | struct device; | ||
320 | extern 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 | ||
498 | static inline int sbus_can_dma_64bit(void) | ||
499 | { | ||
500 | return 1; | ||
501 | } | ||
502 | static inline int sbus_can_burst64(void) | ||
503 | { | ||
504 | return 1; | ||
505 | } | ||
506 | struct device; | ||
507 | extern 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 */ | ||
108 | extern void sbus_set_sbus64(struct sbus_dev *, int); | ||
109 | extern void sbus_fill_device_irq(struct sbus_dev *); | 105 | extern 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) | ||
100 | extern void sbus_set_sbus64(struct sbus_dev *, int); | ||
101 | extern void sbus_fill_device_irq(struct sbus_dev *); | 97 | extern void sbus_fill_device_irq(struct sbus_dev *); |
102 | 98 | ||
103 | extern void sbus_arch_bus_ranges_init(struct device_node *, struct sbus_bus *); | 99 | extern 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 | ||
253 | void sbus_set_sbus64(struct sbus_dev *sdev, int x) | 253 | void 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. */ |
55 | void sbus_set_sbus64(struct sbus_dev *sdev, int bursts) | 55 | void 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; |