diff options
author | Helge Deller <deller@parisc-linux.org> | 2006-03-27 14:52:15 -0500 |
---|---|---|
committer | Kyle McMartin <kyle@hera.kernel.org> | 2006-03-30 12:48:42 -0500 |
commit | 5076c15862644edb91d2e3436b2fa3e07b28385d (patch) | |
tree | 179750a6a7649c8cf233509c26da144764894ded /drivers | |
parent | 94c3e87a792c70d041954b0ef68ebd22368d0931 (diff) |
[PARISC] I/O-Space must be ioremap_nocache()'d
Addresses in F-space must be accessed uncached on most parisc machines.
Signed-off-by: Helge Deller <deller@parisc-linux.org>
Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/input/serio/gscps2.c | 4 | ||||
-rw-r--r-- | drivers/parisc/ccio-dma.c | 2 | ||||
-rw-r--r-- | drivers/parisc/dino.c | 5 | ||||
-rw-r--r-- | drivers/parisc/eisa.c | 2 | ||||
-rw-r--r-- | drivers/parisc/iosapic.c | 2 | ||||
-rw-r--r-- | drivers/parisc/lba_pci.c | 8 | ||||
-rw-r--r-- | drivers/parisc/sba_iommu.c | 6 | ||||
-rw-r--r-- | drivers/parisc/superio.c | 48 | ||||
-rw-r--r-- | drivers/scsi/lasi700.c | 2 | ||||
-rw-r--r-- | drivers/scsi/zalon.c | 2 | ||||
-rw-r--r-- | drivers/serial/8250_gsc.c | 15 | ||||
-rw-r--r-- | drivers/serial/mux.c | 4 |
12 files changed, 47 insertions, 53 deletions
diff --git a/drivers/input/serio/gscps2.c b/drivers/input/serio/gscps2.c index a7b0de0f92b..c0b1e4becad 100644 --- a/drivers/input/serio/gscps2.c +++ b/drivers/input/serio/gscps2.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * drivers/input/serio/gscps2.c | 2 | * drivers/input/serio/gscps2.c |
3 | * | 3 | * |
4 | * Copyright (c) 2004 Helge Deller <deller@gmx.de> | 4 | * Copyright (c) 2004-2006 Helge Deller <deller@gmx.de> |
5 | * Copyright (c) 2002 Laurent Canet <canetl@esiee.fr> | 5 | * Copyright (c) 2002 Laurent Canet <canetl@esiee.fr> |
6 | * Copyright (c) 2002 Thibaut Varene <varenet@parisc-linux.org> | 6 | * Copyright (c) 2002 Thibaut Varene <varenet@parisc-linux.org> |
7 | * | 7 | * |
@@ -354,7 +354,7 @@ static int __init gscps2_probe(struct parisc_device *dev) | |||
354 | memset(serio, 0, sizeof(struct serio)); | 354 | memset(serio, 0, sizeof(struct serio)); |
355 | ps2port->port = serio; | 355 | ps2port->port = serio; |
356 | ps2port->padev = dev; | 356 | ps2port->padev = dev; |
357 | ps2port->addr = ioremap(hpa, GSC_STATUS + 4); | 357 | ps2port->addr = ioremap_nocache(hpa, GSC_STATUS + 4); |
358 | spin_lock_init(&ps2port->lock); | 358 | spin_lock_init(&ps2port->lock); |
359 | 359 | ||
360 | gscps2_reset(ps2port); | 360 | gscps2_reset(ps2port); |
diff --git a/drivers/parisc/ccio-dma.c b/drivers/parisc/ccio-dma.c index 93f8a8fa889..a5d826237b2 100644 --- a/drivers/parisc/ccio-dma.c +++ b/drivers/parisc/ccio-dma.c | |||
@@ -1560,7 +1560,7 @@ static int ccio_probe(struct parisc_device *dev) | |||
1560 | *ioc_p = ioc; | 1560 | *ioc_p = ioc; |
1561 | 1561 | ||
1562 | ioc->hw_path = dev->hw_path; | 1562 | ioc->hw_path = dev->hw_path; |
1563 | ioc->ioc_regs = ioremap(dev->hpa.start, 4096); | 1563 | ioc->ioc_regs = ioremap_nocache(dev->hpa.start, 4096); |
1564 | ccio_ioc_init(ioc); | 1564 | ccio_ioc_init(ioc); |
1565 | ccio_init_resources(ioc); | 1565 | ccio_init_resources(ioc); |
1566 | hppa_dma_ops = &ccio_ops; | 1566 | hppa_dma_ops = &ccio_ops; |
diff --git a/drivers/parisc/dino.c b/drivers/parisc/dino.c index 3d1a7f98c67..6e8ed0c81a6 100644 --- a/drivers/parisc/dino.c +++ b/drivers/parisc/dino.c | |||
@@ -5,6 +5,7 @@ | |||
5 | ** (c) Copyright 1999 SuSE GmbH | 5 | ** (c) Copyright 1999 SuSE GmbH |
6 | ** (c) Copyright 1999,2000 Hewlett-Packard Company | 6 | ** (c) Copyright 1999,2000 Hewlett-Packard Company |
7 | ** (c) Copyright 2000 Grant Grundler | 7 | ** (c) Copyright 2000 Grant Grundler |
8 | ** (c) Copyright 2006 Helge Deller | ||
8 | ** | 9 | ** |
9 | ** This program is free software; you can redistribute it and/or modify | 10 | ** This program is free software; you can redistribute it and/or modify |
10 | ** it under the terms of the GNU General Public License as published by | 11 | ** it under the terms of the GNU General Public License as published by |
@@ -785,7 +786,7 @@ dino_bridge_init(struct dino_device *dino_dev, const char *name) | |||
785 | if((io_addr & (1 << i)) == 0) | 786 | if((io_addr & (1 << i)) == 0) |
786 | continue; | 787 | continue; |
787 | 788 | ||
788 | start = (unsigned long)(signed int)(0xf0000000 | (i << 23)); | 789 | start = F_EXTEND(0xf0000000UL) | (i << 23); |
789 | end = start + 8 * 1024 * 1024 - 1; | 790 | end = start + 8 * 1024 * 1024 - 1; |
790 | 791 | ||
791 | DBG("DINO RANGE %d is at 0x%lx-0x%lx\n", count, | 792 | DBG("DINO RANGE %d is at 0x%lx-0x%lx\n", count, |
@@ -996,7 +997,7 @@ static int __init dino_probe(struct parisc_device *dev) | |||
996 | } | 997 | } |
997 | 998 | ||
998 | dino_dev->hba.dev = dev; | 999 | dino_dev->hba.dev = dev; |
999 | dino_dev->hba.base_addr = ioremap(hpa, 4096); | 1000 | dino_dev->hba.base_addr = ioremap_nocache(hpa, 4096); |
1000 | dino_dev->hba.lmmio_space_offset = 0; /* CPU addrs == bus addrs */ | 1001 | dino_dev->hba.lmmio_space_offset = 0; /* CPU addrs == bus addrs */ |
1001 | spin_lock_init(&dino_dev->dinosaur_pen); | 1002 | spin_lock_init(&dino_dev->dinosaur_pen); |
1002 | dino_dev->hba.iommu = ccio_get_iommu(dev); | 1003 | dino_dev->hba.iommu = ccio_get_iommu(dev); |
diff --git a/drivers/parisc/eisa.c b/drivers/parisc/eisa.c index 3d94d86c1c9..9d3bd15bf53 100644 --- a/drivers/parisc/eisa.c +++ b/drivers/parisc/eisa.c | |||
@@ -366,7 +366,7 @@ static int __devinit eisa_probe(struct parisc_device *dev) | |||
366 | eisa_dev.eeprom_addr = MIRAGE_EEPROM_BASE_ADDR; | 366 | eisa_dev.eeprom_addr = MIRAGE_EEPROM_BASE_ADDR; |
367 | } | 367 | } |
368 | } | 368 | } |
369 | eisa_eeprom_addr = ioremap(eisa_dev.eeprom_addr, HPEE_MAX_LENGTH); | 369 | eisa_eeprom_addr = ioremap_nocache(eisa_dev.eeprom_addr, HPEE_MAX_LENGTH); |
370 | result = eisa_enumerator(eisa_dev.eeprom_addr, &eisa_dev.hba.io_space, | 370 | result = eisa_enumerator(eisa_dev.eeprom_addr, &eisa_dev.hba.io_space, |
371 | &eisa_dev.hba.lmmio_space); | 371 | &eisa_dev.hba.lmmio_space); |
372 | init_eisa_pic(); | 372 | init_eisa_pic(); |
diff --git a/drivers/parisc/iosapic.c b/drivers/parisc/iosapic.c index 8d7a36392eb..7a458d5bc75 100644 --- a/drivers/parisc/iosapic.c +++ b/drivers/parisc/iosapic.c | |||
@@ -879,7 +879,7 @@ void *iosapic_register(unsigned long hpa) | |||
879 | return NULL; | 879 | return NULL; |
880 | } | 880 | } |
881 | 881 | ||
882 | isi->addr = ioremap(hpa, 4096); | 882 | isi->addr = ioremap_nocache(hpa, 4096); |
883 | isi->isi_hpa = hpa; | 883 | isi->isi_hpa = hpa; |
884 | isi->isi_version = iosapic_rd_version(isi); | 884 | isi->isi_version = iosapic_rd_version(isi); |
885 | isi->isi_num_vectors = IOSAPIC_IRDT_MAX_ENTRY(isi->isi_version) + 1; | 885 | isi->isi_num_vectors = IOSAPIC_IRDT_MAX_ENTRY(isi->isi_version) + 1; |
diff --git a/drivers/parisc/lba_pci.c b/drivers/parisc/lba_pci.c index e8a2a4a852f..3fe4a77fa16 100644 --- a/drivers/parisc/lba_pci.c +++ b/drivers/parisc/lba_pci.c | |||
@@ -1213,7 +1213,7 @@ lba_pat_resources(struct parisc_device *pa_dev, struct lba_device *lba_dev) | |||
1213 | ** Postable I/O port space is per PCI host adapter. | 1213 | ** Postable I/O port space is per PCI host adapter. |
1214 | ** base of 64MB PIOP region | 1214 | ** base of 64MB PIOP region |
1215 | */ | 1215 | */ |
1216 | lba_dev->iop_base = ioremap(p->start, 64 * 1024 * 1024); | 1216 | lba_dev->iop_base = ioremap_nocache(p->start, 64 * 1024 * 1024); |
1217 | 1217 | ||
1218 | sprintf(lba_dev->hba.io_name, "PCI%02lx Ports", | 1218 | sprintf(lba_dev->hba.io_name, "PCI%02lx Ports", |
1219 | lba_dev->hba.bus_num.start); | 1219 | lba_dev->hba.bus_num.start); |
@@ -1525,7 +1525,7 @@ lba_driver_probe(struct parisc_device *dev) | |||
1525 | u32 func_class; | 1525 | u32 func_class; |
1526 | void *tmp_obj; | 1526 | void *tmp_obj; |
1527 | char *version; | 1527 | char *version; |
1528 | void __iomem *addr = ioremap(dev->hpa.start, 4096); | 1528 | void __iomem *addr = ioremap_nocache(dev->hpa.start, 4096); |
1529 | 1529 | ||
1530 | /* Read HW Rev First */ | 1530 | /* Read HW Rev First */ |
1531 | func_class = READ_REG32(addr + LBA_FCLASS); | 1531 | func_class = READ_REG32(addr + LBA_FCLASS); |
@@ -1619,7 +1619,7 @@ lba_driver_probe(struct parisc_device *dev) | |||
1619 | } else { | 1619 | } else { |
1620 | if (!astro_iop_base) { | 1620 | if (!astro_iop_base) { |
1621 | /* Sprockets PDC uses NPIOP region */ | 1621 | /* Sprockets PDC uses NPIOP region */ |
1622 | astro_iop_base = ioremap(LBA_PORT_BASE, 64 * 1024); | 1622 | astro_iop_base = ioremap_nocache(LBA_PORT_BASE, 64 * 1024); |
1623 | pci_port = &lba_astro_port_ops; | 1623 | pci_port = &lba_astro_port_ops; |
1624 | } | 1624 | } |
1625 | 1625 | ||
@@ -1700,7 +1700,7 @@ void __init lba_init(void) | |||
1700 | */ | 1700 | */ |
1701 | void lba_set_iregs(struct parisc_device *lba, u32 ibase, u32 imask) | 1701 | void lba_set_iregs(struct parisc_device *lba, u32 ibase, u32 imask) |
1702 | { | 1702 | { |
1703 | void __iomem * base_addr = ioremap(lba->hpa.start, 4096); | 1703 | void __iomem * base_addr = ioremap_nocache(lba->hpa.start, 4096); |
1704 | 1704 | ||
1705 | imask <<= 2; /* adjust for hints - 2 more bits */ | 1705 | imask <<= 2; /* adjust for hints - 2 more bits */ |
1706 | 1706 | ||
diff --git a/drivers/parisc/sba_iommu.c b/drivers/parisc/sba_iommu.c index 0821747e44c..42b32ff2fca 100644 --- a/drivers/parisc/sba_iommu.c +++ b/drivers/parisc/sba_iommu.c | |||
@@ -1642,9 +1642,9 @@ sba_ioc_init(struct parisc_device *sba, struct ioc *ioc, int ioc_num) | |||
1642 | ** | 1642 | ** |
1643 | **************************************************************************/ | 1643 | **************************************************************************/ |
1644 | 1644 | ||
1645 | static void __iomem *ioc_remap(struct sba_device *sba_dev, int offset) | 1645 | static void __iomem *ioc_remap(struct sba_device *sba_dev, unsigned int offset) |
1646 | { | 1646 | { |
1647 | return ioremap(sba_dev->dev->hpa.start + offset, SBA_FUNC_SIZE); | 1647 | return ioremap_nocache(sba_dev->dev->hpa.start + offset, SBA_FUNC_SIZE); |
1648 | } | 1648 | } |
1649 | 1649 | ||
1650 | static void sba_hw_init(struct sba_device *sba_dev) | 1650 | static void sba_hw_init(struct sba_device *sba_dev) |
@@ -2040,7 +2040,7 @@ sba_driver_callback(struct parisc_device *dev) | |||
2040 | u32 func_class; | 2040 | u32 func_class; |
2041 | int i; | 2041 | int i; |
2042 | char *version; | 2042 | char *version; |
2043 | void __iomem *sba_addr = ioremap(dev->hpa.start, SBA_FUNC_SIZE); | 2043 | void __iomem *sba_addr = ioremap_nocache(dev->hpa.start, SBA_FUNC_SIZE); |
2044 | struct proc_dir_entry *info_entry, *bitmap_entry, *root; | 2044 | struct proc_dir_entry *info_entry, *bitmap_entry, *root; |
2045 | 2045 | ||
2046 | sba_dump_ranges(sba_addr); | 2046 | sba_dump_ranges(sba_addr); |
diff --git a/drivers/parisc/superio.c b/drivers/parisc/superio.c index ad6d3b28a3a..719b863bc20 100644 --- a/drivers/parisc/superio.c +++ b/drivers/parisc/superio.c | |||
@@ -12,6 +12,7 @@ | |||
12 | * (C) Copyright 2001 John Marvin <jsm fc hp com> | 12 | * (C) Copyright 2001 John Marvin <jsm fc hp com> |
13 | * (C) Copyright 2003 Grant Grundler <grundler parisc-linux org> | 13 | * (C) Copyright 2003 Grant Grundler <grundler parisc-linux org> |
14 | * (C) Copyright 2005 Kyle McMartin <kyle@parisc-linux.org> | 14 | * (C) Copyright 2005 Kyle McMartin <kyle@parisc-linux.org> |
15 | * (C) Copyright 2006 Helge Deller <deller@gmx.de> | ||
15 | * | 16 | * |
16 | * This program is free software; you can redistribute it and/or | 17 | * This program is free software; you can redistribute it and/or |
17 | * modify it under the terms of the GNU General Public License as | 18 | * modify it under the terms of the GNU General Public License as |
@@ -388,43 +389,34 @@ int superio_fixup_irq(struct pci_dev *pcidev) | |||
388 | return local_irq; | 389 | return local_irq; |
389 | } | 390 | } |
390 | 391 | ||
391 | static struct uart_port serial[] = { | ||
392 | { | ||
393 | .iotype = UPIO_PORT, | ||
394 | .line = 0, | ||
395 | .type = PORT_16550A, | ||
396 | .uartclk = 115200*16, | ||
397 | .fifosize = 16, | ||
398 | }, | ||
399 | { | ||
400 | .iotype = UPIO_PORT, | ||
401 | .line = 1, | ||
402 | .type = PORT_16550A, | ||
403 | .uartclk = 115200*16, | ||
404 | .fifosize = 16, | ||
405 | } | ||
406 | }; | ||
407 | |||
408 | static void __devinit superio_serial_init(void) | 392 | static void __devinit superio_serial_init(void) |
409 | { | 393 | { |
410 | #ifdef CONFIG_SERIAL_8250 | 394 | #ifdef CONFIG_SERIAL_8250 |
411 | int retval; | 395 | int retval; |
412 | 396 | struct uart_port serial_port; | |
413 | serial[0].iobase = sio_dev.sp1_base; | 397 | |
414 | serial[0].irq = SP1_IRQ; | 398 | memset(&serial_port, 0, sizeof(serial_port)); |
415 | spin_lock_init(&serial[0].lock); | 399 | serial_port.iotype = UPIO_PORT; |
416 | 400 | serial_port.type = PORT_16550A; | |
417 | retval = early_serial_setup(&serial[0]); | 401 | serial_port.uartclk = 115200*16; |
402 | serial_port.fifosize = 16; | ||
403 | spin_lock_init(&serial_port.lock); | ||
404 | |||
405 | /* serial port #1 */ | ||
406 | serial_port.iobase = sio_dev.sp1_base; | ||
407 | serial_port.irq = SP1_IRQ; | ||
408 | serial_port.line = 0; | ||
409 | retval = early_serial_setup(&serial_port); | ||
418 | if (retval < 0) { | 410 | if (retval < 0) { |
419 | printk(KERN_WARNING PFX "Register Serial #0 failed.\n"); | 411 | printk(KERN_WARNING PFX "Register Serial #0 failed.\n"); |
420 | return; | 412 | return; |
421 | } | 413 | } |
422 | 414 | ||
423 | serial[1].iobase = sio_dev.sp2_base; | 415 | /* serial port #2 */ |
424 | serial[1].irq = SP2_IRQ; | 416 | serial_port.iobase = sio_dev.sp2_base; |
425 | spin_lock_init(&serial[1].lock); | 417 | serial_port.irq = SP2_IRQ; |
426 | retval = early_serial_setup(&serial[1]); | 418 | serial_port.line = 1; |
427 | 419 | retval = early_serial_setup(&serial_port); | |
428 | if (retval < 0) | 420 | if (retval < 0) |
429 | printk(KERN_WARNING PFX "Register Serial #1 failed.\n"); | 421 | printk(KERN_WARNING PFX "Register Serial #1 failed.\n"); |
430 | #endif /* CONFIG_SERIAL_8250 */ | 422 | #endif /* CONFIG_SERIAL_8250 */ |
diff --git a/drivers/scsi/lasi700.c b/drivers/scsi/lasi700.c index 459a4daebec..eb7bd310cc8 100644 --- a/drivers/scsi/lasi700.c +++ b/drivers/scsi/lasi700.c | |||
@@ -112,7 +112,7 @@ lasi700_probe(struct parisc_device *dev) | |||
112 | 112 | ||
113 | hostdata->dev = &dev->dev; | 113 | hostdata->dev = &dev->dev; |
114 | dma_set_mask(&dev->dev, DMA_32BIT_MASK); | 114 | dma_set_mask(&dev->dev, DMA_32BIT_MASK); |
115 | hostdata->base = ioremap(base, 0x100); | 115 | hostdata->base = ioremap_nocache(base, 0x100); |
116 | hostdata->differential = 0; | 116 | hostdata->differential = 0; |
117 | 117 | ||
118 | if (dev->id.sversion == LASI_700_SVERSION) { | 118 | if (dev->id.sversion == LASI_700_SVERSION) { |
diff --git a/drivers/scsi/zalon.c b/drivers/scsi/zalon.c index b131432c677..a6cfbb3b361 100644 --- a/drivers/scsi/zalon.c +++ b/drivers/scsi/zalon.c | |||
@@ -88,7 +88,7 @@ zalon_probe(struct parisc_device *dev) | |||
88 | struct gsc_irq gsc_irq; | 88 | struct gsc_irq gsc_irq; |
89 | u32 zalon_vers; | 89 | u32 zalon_vers; |
90 | int error = -ENODEV; | 90 | int error = -ENODEV; |
91 | void __iomem *zalon = ioremap(dev->hpa.start, 4096); | 91 | void __iomem *zalon = ioremap_nocache(dev->hpa.start, 4096); |
92 | void __iomem *io_port = zalon + GSC_SCSI_ZALON_OFFSET; | 92 | void __iomem *io_port = zalon + GSC_SCSI_ZALON_OFFSET; |
93 | static int unit = 0; | 93 | static int unit = 0; |
94 | struct Scsi_Host *host; | 94 | struct Scsi_Host *host; |
diff --git a/drivers/serial/8250_gsc.c b/drivers/serial/8250_gsc.c index 8b4947933d9..913c71cc056 100644 --- a/drivers/serial/8250_gsc.c +++ b/drivers/serial/8250_gsc.c | |||
@@ -52,13 +52,14 @@ serial_init_chip(struct parisc_device *dev) | |||
52 | address += 0x800; | 52 | address += 0x800; |
53 | } | 53 | } |
54 | 54 | ||
55 | memset(&port, 0, sizeof(struct uart_port)); | 55 | memset(&port, 0, sizeof(port)); |
56 | port.mapbase = address; | 56 | port.iotype = UPIO_MEM; |
57 | port.irq = dev->irq; | 57 | port.uartclk = LASI_BASE_BAUD * 16; |
58 | port.iotype = UPIO_MEM; | 58 | port.mapbase = address; |
59 | port.flags = UPF_IOREMAP | UPF_BOOT_AUTOCONF; | 59 | port.membase = ioremap_nocache(address, 16); |
60 | port.uartclk = LASI_BASE_BAUD * 16; | 60 | port.irq = dev->irq; |
61 | port.dev = &dev->dev; | 61 | port.flags = UPF_BOOT_AUTOCONF; |
62 | port.dev = &dev->dev; | ||
62 | 63 | ||
63 | err = serial8250_register_port(&port); | 64 | err = serial8250_register_port(&port); |
64 | if (err < 0) { | 65 | if (err < 0) { |
diff --git a/drivers/serial/mux.c b/drivers/serial/mux.c index 868eaf4a1a6..64c0e89124c 100644 --- a/drivers/serial/mux.c +++ b/drivers/serial/mux.c | |||
@@ -51,7 +51,7 @@ | |||
51 | #define MUX_BREAK(status) ((status & 0xF000) == 0x2000) | 51 | #define MUX_BREAK(status) ((status & 0xF000) == 0x2000) |
52 | 52 | ||
53 | #define MUX_NR 256 | 53 | #define MUX_NR 256 |
54 | static unsigned int port_cnt = 0; | 54 | static unsigned int port_cnt __read_mostly; |
55 | static struct uart_port mux_ports[MUX_NR]; | 55 | static struct uart_port mux_ports[MUX_NR]; |
56 | 56 | ||
57 | static struct uart_driver mux_driver = { | 57 | static struct uart_driver mux_driver = { |
@@ -461,7 +461,7 @@ static int __init mux_probe(struct parisc_device *dev) | |||
461 | port->iobase = 0; | 461 | port->iobase = 0; |
462 | port->mapbase = dev->hpa.start + MUX_OFFSET + | 462 | port->mapbase = dev->hpa.start + MUX_OFFSET + |
463 | (i * MUX_LINE_OFFSET); | 463 | (i * MUX_LINE_OFFSET); |
464 | port->membase = ioremap(port->mapbase, MUX_LINE_OFFSET); | 464 | port->membase = ioremap_nocache(port->mapbase, MUX_LINE_OFFSET); |
465 | port->iotype = UPIO_MEM; | 465 | port->iotype = UPIO_MEM; |
466 | port->type = PORT_MUX; | 466 | port->type = PORT_MUX; |
467 | port->irq = NO_IRQ; | 467 | port->irq = NO_IRQ; |