diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-09-08 20:45:05 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-09-08 20:45:05 -0400 |
commit | 839fe9156fbe89c3157aa6146d22090f8cffddd8 (patch) | |
tree | 4b47aa216c0a269ad002ee0f9f0681b44d0a80e7 | |
parent | 54283aed90c3cf353e2c01a1d1ca853f5eedf92a (diff) | |
parent | 6dc0dcde406bb0e40ad6a6f45f44534d3a094205 (diff) |
Merge branch 'parisc-4.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux
Pull parisc updates from Helge Deller:
"The most important changes in this patchset are:
- re-enable 64bit PCI bus addresses which were temporarily disabled
for PA-RISC in kernel 4.2
- fix the 64bit CAS operation in the LWS path which now enables us to
enable the 64bit gcc atomic builtins even on 32bit userspace with
64bit kernel
- fix a long-standing bug which sometimes crashed kernel at bootup
while serial interrupt wasn't registered yet"
* 'parisc-4.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux:
parisc: Use platform_device_register_simple("rtc-generic")
parisc: Drop CONFIG_SMP around update_cr16_clocksource()
parisc: Use double word condition in 64bit CAS operation
parisc: Filter out spurious interrupts in PA-RISC irq handler
parisc: Additionally check for in_atomic() in page fault handler
PCI,parisc: Enable 64-bit bus addresses on PA-RISC
parisc: Define ioremap_uc and ioremap_wc
-rw-r--r-- | arch/parisc/include/asm/io.h | 2 | ||||
-rw-r--r-- | arch/parisc/kernel/irq.c | 9 | ||||
-rw-r--r-- | arch/parisc/kernel/syscall.S | 2 | ||||
-rw-r--r-- | arch/parisc/kernel/time.c | 21 | ||||
-rw-r--r-- | arch/parisc/mm/fault.c | 2 | ||||
-rw-r--r-- | drivers/parisc/lba_pci.c | 7 | ||||
-rw-r--r-- | drivers/pci/Kconfig | 2 |
7 files changed, 21 insertions, 24 deletions
diff --git a/arch/parisc/include/asm/io.h b/arch/parisc/include/asm/io.h index 8cd0abf28ffb..1a16f1d1075f 100644 --- a/arch/parisc/include/asm/io.h +++ b/arch/parisc/include/asm/io.h | |||
@@ -137,6 +137,8 @@ static inline void __iomem * ioremap(unsigned long offset, unsigned long size) | |||
137 | return __ioremap(offset, size, _PAGE_NO_CACHE); | 137 | return __ioremap(offset, size, _PAGE_NO_CACHE); |
138 | } | 138 | } |
139 | #define ioremap_nocache(off, sz) ioremap((off), (sz)) | 139 | #define ioremap_nocache(off, sz) ioremap((off), (sz)) |
140 | #define ioremap_wc ioremap_nocache | ||
141 | #define ioremap_uc ioremap_nocache | ||
140 | 142 | ||
141 | extern void iounmap(const volatile void __iomem *addr); | 143 | extern void iounmap(const volatile void __iomem *addr); |
142 | 144 | ||
diff --git a/arch/parisc/kernel/irq.c b/arch/parisc/kernel/irq.c index 413ec3c3f9cc..ba5e1c7b1f17 100644 --- a/arch/parisc/kernel/irq.c +++ b/arch/parisc/kernel/irq.c | |||
@@ -507,8 +507,8 @@ void do_cpu_irq_mask(struct pt_regs *regs) | |||
507 | struct pt_regs *old_regs; | 507 | struct pt_regs *old_regs; |
508 | unsigned long eirr_val; | 508 | unsigned long eirr_val; |
509 | int irq, cpu = smp_processor_id(); | 509 | int irq, cpu = smp_processor_id(); |
510 | #ifdef CONFIG_SMP | ||
511 | struct irq_data *irq_data; | 510 | struct irq_data *irq_data; |
511 | #ifdef CONFIG_SMP | ||
512 | cpumask_t dest; | 512 | cpumask_t dest; |
513 | #endif | 513 | #endif |
514 | 514 | ||
@@ -521,8 +521,13 @@ void do_cpu_irq_mask(struct pt_regs *regs) | |||
521 | goto set_out; | 521 | goto set_out; |
522 | irq = eirr_to_irq(eirr_val); | 522 | irq = eirr_to_irq(eirr_val); |
523 | 523 | ||
524 | #ifdef CONFIG_SMP | ||
525 | irq_data = irq_get_irq_data(irq); | 524 | irq_data = irq_get_irq_data(irq); |
525 | |||
526 | /* Filter out spurious interrupts, mostly from serial port at bootup */ | ||
527 | if (unlikely(!irq_desc_has_action(irq_data_to_desc(irq_data)))) | ||
528 | goto set_out; | ||
529 | |||
530 | #ifdef CONFIG_SMP | ||
526 | cpumask_copy(&dest, irq_data_get_affinity_mask(irq_data)); | 531 | cpumask_copy(&dest, irq_data_get_affinity_mask(irq_data)); |
527 | if (irqd_is_per_cpu(irq_data) && | 532 | if (irqd_is_per_cpu(irq_data) && |
528 | !cpumask_test_cpu(smp_processor_id(), &dest)) { | 533 | !cpumask_test_cpu(smp_processor_id(), &dest)) { |
diff --git a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S index 7ef22e3387e0..0b8d26d3ba43 100644 --- a/arch/parisc/kernel/syscall.S +++ b/arch/parisc/kernel/syscall.S | |||
@@ -821,7 +821,7 @@ cas2_action: | |||
821 | /* 64bit CAS */ | 821 | /* 64bit CAS */ |
822 | #ifdef CONFIG_64BIT | 822 | #ifdef CONFIG_64BIT |
823 | 19: ldd,ma 0(%sr3,%r26), %r29 | 823 | 19: ldd,ma 0(%sr3,%r26), %r29 |
824 | sub,= %r29, %r25, %r0 | 824 | sub,*= %r29, %r25, %r0 |
825 | b,n cas2_end | 825 | b,n cas2_end |
826 | 20: std,ma %r24, 0(%sr3,%r26) | 826 | 20: std,ma %r24, 0(%sr3,%r26) |
827 | copy %r0, %r28 | 827 | copy %r0, %r28 |
diff --git a/arch/parisc/kernel/time.c b/arch/parisc/kernel/time.c index 70e105d62423..400acac0a304 100644 --- a/arch/parisc/kernel/time.c +++ b/arch/parisc/kernel/time.c | |||
@@ -202,7 +202,6 @@ static struct clocksource clocksource_cr16 = { | |||
202 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, | 202 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, |
203 | }; | 203 | }; |
204 | 204 | ||
205 | #ifdef CONFIG_SMP | ||
206 | int update_cr16_clocksource(void) | 205 | int update_cr16_clocksource(void) |
207 | { | 206 | { |
208 | /* since the cr16 cycle counters are not synchronized across CPUs, | 207 | /* since the cr16 cycle counters are not synchronized across CPUs, |
@@ -214,12 +213,6 @@ int update_cr16_clocksource(void) | |||
214 | 213 | ||
215 | return 0; | 214 | return 0; |
216 | } | 215 | } |
217 | #else | ||
218 | int update_cr16_clocksource(void) | ||
219 | { | ||
220 | return 0; /* no change */ | ||
221 | } | ||
222 | #endif /*CONFIG_SMP*/ | ||
223 | 216 | ||
224 | void __init start_cpu_itimer(void) | 217 | void __init start_cpu_itimer(void) |
225 | { | 218 | { |
@@ -231,20 +224,14 @@ void __init start_cpu_itimer(void) | |||
231 | per_cpu(cpu_data, cpu).it_value = next_tick; | 224 | per_cpu(cpu_data, cpu).it_value = next_tick; |
232 | } | 225 | } |
233 | 226 | ||
234 | static struct platform_device rtc_generic_dev = { | ||
235 | .name = "rtc-generic", | ||
236 | .id = -1, | ||
237 | }; | ||
238 | |||
239 | static int __init rtc_init(void) | 227 | static int __init rtc_init(void) |
240 | { | 228 | { |
241 | if (platform_device_register(&rtc_generic_dev) < 0) | 229 | struct platform_device *pdev; |
242 | printk(KERN_ERR "unable to register rtc device...\n"); | ||
243 | 230 | ||
244 | /* not necessarily an error */ | 231 | pdev = platform_device_register_simple("rtc-generic", -1, NULL, 0); |
245 | return 0; | 232 | return PTR_ERR_OR_ZERO(pdev); |
246 | } | 233 | } |
247 | module_init(rtc_init); | 234 | device_initcall(rtc_init); |
248 | 235 | ||
249 | void read_persistent_clock(struct timespec *ts) | 236 | void read_persistent_clock(struct timespec *ts) |
250 | { | 237 | { |
diff --git a/arch/parisc/mm/fault.c b/arch/parisc/mm/fault.c index 15503adddf4f..a762864ec92e 100644 --- a/arch/parisc/mm/fault.c +++ b/arch/parisc/mm/fault.c | |||
@@ -207,7 +207,7 @@ void do_page_fault(struct pt_regs *regs, unsigned long code, | |||
207 | int fault; | 207 | int fault; |
208 | unsigned int flags; | 208 | unsigned int flags; |
209 | 209 | ||
210 | if (pagefault_disabled()) | 210 | if (faulthandler_disabled()) |
211 | goto no_context; | 211 | goto no_context; |
212 | 212 | ||
213 | tsk = current; | 213 | tsk = current; |
diff --git a/drivers/parisc/lba_pci.c b/drivers/parisc/lba_pci.c index 901e1a3fa4e2..7b9e89ba0465 100644 --- a/drivers/parisc/lba_pci.c +++ b/drivers/parisc/lba_pci.c | |||
@@ -1555,8 +1555,11 @@ lba_driver_probe(struct parisc_device *dev) | |||
1555 | if (lba_dev->hba.lmmio_space.flags) | 1555 | if (lba_dev->hba.lmmio_space.flags) |
1556 | pci_add_resource_offset(&resources, &lba_dev->hba.lmmio_space, | 1556 | pci_add_resource_offset(&resources, &lba_dev->hba.lmmio_space, |
1557 | lba_dev->hba.lmmio_space_offset); | 1557 | lba_dev->hba.lmmio_space_offset); |
1558 | if (lba_dev->hba.gmmio_space.flags) | 1558 | if (lba_dev->hba.gmmio_space.flags) { |
1559 | pci_add_resource(&resources, &lba_dev->hba.gmmio_space); | 1559 | /* pci_add_resource(&resources, &lba_dev->hba.gmmio_space); */ |
1560 | pr_warn("LBA: Not registering GMMIO space %pR\n", | ||
1561 | &lba_dev->hba.gmmio_space); | ||
1562 | } | ||
1560 | 1563 | ||
1561 | pci_add_resource(&resources, &lba_dev->hba.bus_num); | 1564 | pci_add_resource(&resources, &lba_dev->hba.bus_num); |
1562 | 1565 | ||
diff --git a/drivers/pci/Kconfig b/drivers/pci/Kconfig index 944f50015ed0..73de4efcbe6e 100644 --- a/drivers/pci/Kconfig +++ b/drivers/pci/Kconfig | |||
@@ -2,7 +2,7 @@ | |||
2 | # PCI configuration | 2 | # PCI configuration |
3 | # | 3 | # |
4 | config PCI_BUS_ADDR_T_64BIT | 4 | config PCI_BUS_ADDR_T_64BIT |
5 | def_bool y if (ARCH_DMA_ADDR_T_64BIT || (64BIT && !PARISC)) | 5 | def_bool y if (ARCH_DMA_ADDR_T_64BIT || 64BIT) |
6 | depends on PCI | 6 | depends on PCI |
7 | 7 | ||
8 | config PCI_MSI | 8 | config PCI_MSI |