diff options
Diffstat (limited to 'arch/microblaze')
27 files changed, 182 insertions, 328 deletions
diff --git a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig index d64c10093b40..ac22dc7f4cab 100644 --- a/arch/microblaze/Kconfig +++ b/arch/microblaze/Kconfig | |||
@@ -15,6 +15,7 @@ config MICROBLAZE | |||
15 | select TRACING_SUPPORT | 15 | select TRACING_SUPPORT |
16 | select OF | 16 | select OF |
17 | select OF_EARLY_FLATTREE | 17 | select OF_EARLY_FLATTREE |
18 | select IRQ_DOMAIN | ||
18 | select HAVE_GENERIC_HARDIRQS | 19 | select HAVE_GENERIC_HARDIRQS |
19 | select GENERIC_IRQ_PROBE | 20 | select GENERIC_IRQ_PROBE |
20 | select GENERIC_IRQ_SHOW | 21 | select GENERIC_IRQ_SHOW |
diff --git a/arch/microblaze/include/asm/atomic.h b/arch/microblaze/include/asm/atomic.h index 615f53992c65..472d8bf726df 100644 --- a/arch/microblaze/include/asm/atomic.h +++ b/arch/microblaze/include/asm/atomic.h | |||
@@ -1,6 +1,7 @@ | |||
1 | #ifndef _ASM_MICROBLAZE_ATOMIC_H | 1 | #ifndef _ASM_MICROBLAZE_ATOMIC_H |
2 | #define _ASM_MICROBLAZE_ATOMIC_H | 2 | #define _ASM_MICROBLAZE_ATOMIC_H |
3 | 3 | ||
4 | #include <asm/cmpxchg.h> | ||
4 | #include <asm-generic/atomic.h> | 5 | #include <asm-generic/atomic.h> |
5 | #include <asm-generic/atomic64.h> | 6 | #include <asm-generic/atomic64.h> |
6 | 7 | ||
diff --git a/arch/microblaze/include/asm/barrier.h b/arch/microblaze/include/asm/barrier.h new file mode 100644 index 000000000000..df5be3e87044 --- /dev/null +++ b/arch/microblaze/include/asm/barrier.h | |||
@@ -0,0 +1,27 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2006 Atmark Techno, Inc. | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_MICROBLAZE_BARRIER_H | ||
10 | #define _ASM_MICROBLAZE_BARRIER_H | ||
11 | |||
12 | #define nop() asm volatile ("nop") | ||
13 | |||
14 | #define smp_read_barrier_depends() do {} while (0) | ||
15 | #define read_barrier_depends() do {} while (0) | ||
16 | |||
17 | #define mb() barrier() | ||
18 | #define rmb() mb() | ||
19 | #define wmb() mb() | ||
20 | #define set_mb(var, value) do { var = value; mb(); } while (0) | ||
21 | #define set_wmb(var, value) do { var = value; wmb(); } while (0) | ||
22 | |||
23 | #define smp_mb() mb() | ||
24 | #define smp_rmb() rmb() | ||
25 | #define smp_wmb() wmb() | ||
26 | |||
27 | #endif /* _ASM_MICROBLAZE_BARRIER_H */ | ||
diff --git a/arch/microblaze/include/asm/cmpxchg.h b/arch/microblaze/include/asm/cmpxchg.h new file mode 100644 index 000000000000..0094859abd9b --- /dev/null +++ b/arch/microblaze/include/asm/cmpxchg.h | |||
@@ -0,0 +1,40 @@ | |||
1 | #ifndef _ASM_MICROBLAZE_CMPXCHG_H | ||
2 | #define _ASM_MICROBLAZE_CMPXCHG_H | ||
3 | |||
4 | void __bad_xchg(volatile void *ptr, int size); | ||
5 | |||
6 | static inline unsigned long __xchg(unsigned long x, volatile void *ptr, | ||
7 | int size) | ||
8 | { | ||
9 | unsigned long ret; | ||
10 | unsigned long flags; | ||
11 | |||
12 | switch (size) { | ||
13 | case 1: | ||
14 | local_irq_save(flags); | ||
15 | ret = *(volatile unsigned char *)ptr; | ||
16 | *(volatile unsigned char *)ptr = x; | ||
17 | local_irq_restore(flags); | ||
18 | break; | ||
19 | |||
20 | case 4: | ||
21 | local_irq_save(flags); | ||
22 | ret = *(volatile unsigned long *)ptr; | ||
23 | *(volatile unsigned long *)ptr = x; | ||
24 | local_irq_restore(flags); | ||
25 | break; | ||
26 | default: | ||
27 | __bad_xchg(ptr, size), ret = 0; | ||
28 | break; | ||
29 | } | ||
30 | |||
31 | return ret; | ||
32 | } | ||
33 | |||
34 | #define xchg(ptr, x) \ | ||
35 | ((__typeof__(*(ptr))) __xchg((unsigned long)(x), (ptr), sizeof(*(ptr)))) | ||
36 | |||
37 | #include <asm-generic/cmpxchg.h> | ||
38 | #include <asm-generic/cmpxchg-local.h> | ||
39 | |||
40 | #endif /* _ASM_MICROBLAZE_CMPXCHG_H */ | ||
diff --git a/arch/microblaze/include/asm/exec.h b/arch/microblaze/include/asm/exec.h new file mode 100644 index 000000000000..e750de1fe8fb --- /dev/null +++ b/arch/microblaze/include/asm/exec.h | |||
@@ -0,0 +1,14 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2006 Atmark Techno, Inc. | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_MICROBLAZE_EXEC_H | ||
10 | #define _ASM_MICROBLAZE_EXEC_H | ||
11 | |||
12 | #define arch_align_stack(x) (x) | ||
13 | |||
14 | #endif /* _ASM_MICROBLAZE_EXEC_H */ | ||
diff --git a/arch/microblaze/include/asm/hardirq.h b/arch/microblaze/include/asm/hardirq.h index cd1ac9aad56c..fb3c05a0cbbf 100644 --- a/arch/microblaze/include/asm/hardirq.h +++ b/arch/microblaze/include/asm/hardirq.h | |||
@@ -1,17 +1 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2006 Atmark Techno, Inc. | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_MICROBLAZE_HARDIRQ_H | ||
10 | #define _ASM_MICROBLAZE_HARDIRQ_H | ||
11 | |||
12 | /* should be defined in each interrupt controller driver */ | ||
13 | extern unsigned int get_irq(struct pt_regs *regs); | ||
14 | |||
15 | #include <asm-generic/hardirq.h> | #include <asm-generic/hardirq.h> | |
16 | |||
17 | #endif /* _ASM_MICROBLAZE_HARDIRQ_H */ | ||
diff --git a/arch/microblaze/include/asm/irq.h b/arch/microblaze/include/asm/irq.h index a175132e4496..bab3b1393ad4 100644 --- a/arch/microblaze/include/asm/irq.h +++ b/arch/microblaze/include/asm/irq.h | |||
@@ -9,49 +9,13 @@ | |||
9 | #ifndef _ASM_MICROBLAZE_IRQ_H | 9 | #ifndef _ASM_MICROBLAZE_IRQ_H |
10 | #define _ASM_MICROBLAZE_IRQ_H | 10 | #define _ASM_MICROBLAZE_IRQ_H |
11 | 11 | ||
12 | 12 | #define NR_IRQS (32 + 1) | |
13 | /* | ||
14 | * Linux IRQ# is currently offset by one to map to the hardware | ||
15 | * irq number. So hardware IRQ0 maps to Linux irq 1. | ||
16 | */ | ||
17 | #define NO_IRQ_OFFSET 1 | ||
18 | #define IRQ_OFFSET NO_IRQ_OFFSET | ||
19 | #define NR_IRQS (32 + IRQ_OFFSET) | ||
20 | #include <asm-generic/irq.h> | 13 | #include <asm-generic/irq.h> |
21 | 14 | ||
22 | /* This type is the placeholder for a hardware interrupt number. It has to | ||
23 | * be big enough to enclose whatever representation is used by a given | ||
24 | * platform. | ||
25 | */ | ||
26 | typedef unsigned long irq_hw_number_t; | ||
27 | |||
28 | extern unsigned int nr_irq; | ||
29 | |||
30 | struct pt_regs; | 15 | struct pt_regs; |
31 | extern void do_IRQ(struct pt_regs *regs); | 16 | extern void do_IRQ(struct pt_regs *regs); |
32 | 17 | ||
33 | /** FIXME - not implement | 18 | /* should be defined in each interrupt controller driver */ |
34 | * irq_dispose_mapping - Unmap an interrupt | 19 | extern unsigned int get_irq(void); |
35 | * @virq: linux virq number of the interrupt to unmap | ||
36 | */ | ||
37 | static inline void irq_dispose_mapping(unsigned int virq) | ||
38 | { | ||
39 | return; | ||
40 | } | ||
41 | |||
42 | struct irq_host; | ||
43 | |||
44 | /** | ||
45 | * irq_create_mapping - Map a hardware interrupt into linux virq space | ||
46 | * @host: host owning this hardware interrupt or NULL for default host | ||
47 | * @hwirq: hardware irq number in that host space | ||
48 | * | ||
49 | * Only one mapping per hardware interrupt is permitted. Returns a linux | ||
50 | * virq number. | ||
51 | * If the sense/trigger is to be specified, set_irq_type() should be called | ||
52 | * on the number returned from that call. | ||
53 | */ | ||
54 | extern unsigned int irq_create_mapping(struct irq_host *host, | ||
55 | irq_hw_number_t hwirq); | ||
56 | 20 | ||
57 | #endif /* _ASM_MICROBLAZE_IRQ_H */ | 21 | #endif /* _ASM_MICROBLAZE_IRQ_H */ |
diff --git a/arch/microblaze/include/asm/page.h b/arch/microblaze/include/asm/page.h index 352cc2352bd5..287c5485d286 100644 --- a/arch/microblaze/include/asm/page.h +++ b/arch/microblaze/include/asm/page.h | |||
@@ -138,6 +138,8 @@ extern unsigned long memory_start; | |||
138 | extern unsigned long memory_size; | 138 | extern unsigned long memory_size; |
139 | extern unsigned long lowmem_size; | 139 | extern unsigned long lowmem_size; |
140 | 140 | ||
141 | extern unsigned long kernel_tlb; | ||
142 | |||
141 | extern int page_is_ram(unsigned long pfn); | 143 | extern int page_is_ram(unsigned long pfn); |
142 | 144 | ||
143 | # define phys_to_pfn(phys) (PFN_DOWN(phys)) | 145 | # define phys_to_pfn(phys) (PFN_DOWN(phys)) |
diff --git a/arch/microblaze/include/asm/pci-bridge.h b/arch/microblaze/include/asm/pci-bridge.h index e9834b2991d0..cb5d39794800 100644 --- a/arch/microblaze/include/asm/pci-bridge.h +++ b/arch/microblaze/include/asm/pci-bridge.h | |||
@@ -10,7 +10,6 @@ | |||
10 | #include <linux/pci.h> | 10 | #include <linux/pci.h> |
11 | #include <linux/list.h> | 11 | #include <linux/list.h> |
12 | #include <linux/ioport.h> | 12 | #include <linux/ioport.h> |
13 | #include <asm-generic/pci-bridge.h> | ||
14 | 13 | ||
15 | struct device_node; | 14 | struct device_node; |
16 | 15 | ||
diff --git a/arch/microblaze/include/asm/pci.h b/arch/microblaze/include/asm/pci.h index 033137628e8a..a0da88bf70c5 100644 --- a/arch/microblaze/include/asm/pci.h +++ b/arch/microblaze/include/asm/pci.h | |||
@@ -94,14 +94,6 @@ extern int pci_mmap_legacy_page_range(struct pci_bus *bus, | |||
94 | */ | 94 | */ |
95 | #define PCI_DMA_BUS_IS_PHYS (1) | 95 | #define PCI_DMA_BUS_IS_PHYS (1) |
96 | 96 | ||
97 | extern void pcibios_resource_to_bus(struct pci_dev *dev, | ||
98 | struct pci_bus_region *region, | ||
99 | struct resource *res); | ||
100 | |||
101 | extern void pcibios_bus_to_resource(struct pci_dev *dev, | ||
102 | struct resource *res, | ||
103 | struct pci_bus_region *region); | ||
104 | |||
105 | static inline struct resource *pcibios_select_root(struct pci_dev *pdev, | 97 | static inline struct resource *pcibios_select_root(struct pci_dev *pdev, |
106 | struct resource *res) | 98 | struct resource *res) |
107 | { | 99 | { |
diff --git a/arch/microblaze/include/asm/pgtable.h b/arch/microblaze/include/asm/pgtable.h index d8f2c3c68d38..3ef7b9cafeca 100644 --- a/arch/microblaze/include/asm/pgtable.h +++ b/arch/microblaze/include/asm/pgtable.h | |||
@@ -542,8 +542,6 @@ extern unsigned long iopa(unsigned long addr); | |||
542 | /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ | 542 | /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */ |
543 | #define kern_addr_valid(addr) (1) | 543 | #define kern_addr_valid(addr) (1) |
544 | 544 | ||
545 | #define io_remap_page_range remap_page_range | ||
546 | |||
547 | /* | 545 | /* |
548 | * No page table caches to initialise | 546 | * No page table caches to initialise |
549 | */ | 547 | */ |
diff --git a/arch/microblaze/include/asm/processor.h b/arch/microblaze/include/asm/processor.h index 7283bfb2f7e4..510a8e1c16ba 100644 --- a/arch/microblaze/include/asm/processor.h +++ b/arch/microblaze/include/asm/processor.h | |||
@@ -125,7 +125,6 @@ struct thread_struct { | |||
125 | .pgdir = swapper_pg_dir, \ | 125 | .pgdir = swapper_pg_dir, \ |
126 | } | 126 | } |
127 | 127 | ||
128 | |||
129 | /* Free all resources held by a thread. */ | 128 | /* Free all resources held by a thread. */ |
130 | extern inline void release_thread(struct task_struct *dead_task) | 129 | extern inline void release_thread(struct task_struct *dead_task) |
131 | { | 130 | { |
@@ -144,6 +143,8 @@ static inline void exit_thread(void) | |||
144 | 143 | ||
145 | unsigned long get_wchan(struct task_struct *p); | 144 | unsigned long get_wchan(struct task_struct *p); |
146 | 145 | ||
146 | extern void ret_from_fork(void); | ||
147 | |||
147 | /* The size allocated for kernel stacks. This _must_ be a power of two! */ | 148 | /* The size allocated for kernel stacks. This _must_ be a power of two! */ |
148 | # define KERNEL_STACK_SIZE 0x2000 | 149 | # define KERNEL_STACK_SIZE 0x2000 |
149 | 150 | ||
@@ -166,6 +167,14 @@ unsigned long get_wchan(struct task_struct *p); | |||
166 | # define STACK_TOP TASK_SIZE | 167 | # define STACK_TOP TASK_SIZE |
167 | # define STACK_TOP_MAX STACK_TOP | 168 | # define STACK_TOP_MAX STACK_TOP |
168 | 169 | ||
170 | void disable_hlt(void); | ||
171 | void enable_hlt(void); | ||
172 | void default_idle(void); | ||
173 | |||
174 | #ifdef CONFIG_DEBUG_FS | ||
175 | extern struct dentry *of_debugfs_root; | ||
176 | #endif | ||
177 | |||
169 | # endif /* __ASSEMBLY__ */ | 178 | # endif /* __ASSEMBLY__ */ |
170 | # endif /* CONFIG_MMU */ | 179 | # endif /* CONFIG_MMU */ |
171 | #endif /* _ASM_MICROBLAZE_PROCESSOR_H */ | 180 | #endif /* _ASM_MICROBLAZE_PROCESSOR_H */ |
diff --git a/arch/microblaze/include/asm/setup.h b/arch/microblaze/include/asm/setup.h index 9f195c094731..0061aa13a340 100644 --- a/arch/microblaze/include/asm/setup.h +++ b/arch/microblaze/include/asm/setup.h | |||
@@ -20,6 +20,8 @@ extern unsigned int boot_cpuid; /* move to smp.h */ | |||
20 | 20 | ||
21 | extern char cmd_line[COMMAND_LINE_SIZE]; | 21 | extern char cmd_line[COMMAND_LINE_SIZE]; |
22 | 22 | ||
23 | extern char *klimit; | ||
24 | |||
23 | void early_printk(const char *fmt, ...); | 25 | void early_printk(const char *fmt, ...); |
24 | 26 | ||
25 | int setup_early_printk(char *opt); | 27 | int setup_early_printk(char *opt); |
@@ -47,6 +49,10 @@ void machine_shutdown(void); | |||
47 | void machine_halt(void); | 49 | void machine_halt(void); |
48 | void machine_power_off(void); | 50 | void machine_power_off(void); |
49 | 51 | ||
52 | void free_init_pages(char *what, unsigned long begin, unsigned long end); | ||
53 | extern void *alloc_maybe_bootmem(size_t size, gfp_t mask); | ||
54 | extern void *zalloc_maybe_bootmem(size_t size, gfp_t mask); | ||
55 | |||
50 | # endif/* __KERNEL__ */ | 56 | # endif/* __KERNEL__ */ |
51 | # endif /* __ASSEMBLY__ */ | 57 | # endif /* __ASSEMBLY__ */ |
52 | #endif /* _ASM_MICROBLAZE_SETUP_H */ | 58 | #endif /* _ASM_MICROBLAZE_SETUP_H */ |
diff --git a/arch/microblaze/include/asm/switch_to.h b/arch/microblaze/include/asm/switch_to.h new file mode 100644 index 000000000000..f45baa2c5e09 --- /dev/null +++ b/arch/microblaze/include/asm/switch_to.h | |||
@@ -0,0 +1,24 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2006 Atmark Techno, Inc. | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_MICROBLAZE_SWITCH_TO_H | ||
10 | #define _ASM_MICROBLAZE_SWITCH_TO_H | ||
11 | |||
12 | struct task_struct; | ||
13 | struct thread_info; | ||
14 | |||
15 | extern struct task_struct *_switch_to(struct thread_info *prev, | ||
16 | struct thread_info *next); | ||
17 | |||
18 | #define switch_to(prev, next, last) \ | ||
19 | do { \ | ||
20 | (last) = _switch_to(task_thread_info(prev), \ | ||
21 | task_thread_info(next)); \ | ||
22 | } while (0) | ||
23 | |||
24 | #endif /* _ASM_MICROBLAZE_SWITCH_TO_H */ | ||
diff --git a/arch/microblaze/include/asm/system.h b/arch/microblaze/include/asm/system.h deleted file mode 100644 index 01228d2b1351..000000000000 --- a/arch/microblaze/include/asm/system.h +++ /dev/null | |||
@@ -1,98 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2006 Atmark Techno, Inc. | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | */ | ||
8 | |||
9 | #ifndef _ASM_MICROBLAZE_SYSTEM_H | ||
10 | #define _ASM_MICROBLAZE_SYSTEM_H | ||
11 | |||
12 | #include <asm/registers.h> | ||
13 | #include <asm/setup.h> | ||
14 | #include <asm/irqflags.h> | ||
15 | #include <asm/cache.h> | ||
16 | |||
17 | #include <asm-generic/cmpxchg.h> | ||
18 | #include <asm-generic/cmpxchg-local.h> | ||
19 | |||
20 | struct task_struct; | ||
21 | struct thread_info; | ||
22 | |||
23 | extern struct task_struct *_switch_to(struct thread_info *prev, | ||
24 | struct thread_info *next); | ||
25 | |||
26 | #define switch_to(prev, next, last) \ | ||
27 | do { \ | ||
28 | (last) = _switch_to(task_thread_info(prev), \ | ||
29 | task_thread_info(next)); \ | ||
30 | } while (0) | ||
31 | |||
32 | #define smp_read_barrier_depends() do {} while (0) | ||
33 | #define read_barrier_depends() do {} while (0) | ||
34 | |||
35 | #define nop() asm volatile ("nop") | ||
36 | #define mb() barrier() | ||
37 | #define rmb() mb() | ||
38 | #define wmb() mb() | ||
39 | #define set_mb(var, value) do { var = value; mb(); } while (0) | ||
40 | #define set_wmb(var, value) do { var = value; wmb(); } while (0) | ||
41 | |||
42 | #define smp_mb() mb() | ||
43 | #define smp_rmb() rmb() | ||
44 | #define smp_wmb() wmb() | ||
45 | |||
46 | void __bad_xchg(volatile void *ptr, int size); | ||
47 | |||
48 | static inline unsigned long __xchg(unsigned long x, volatile void *ptr, | ||
49 | int size) | ||
50 | { | ||
51 | unsigned long ret; | ||
52 | unsigned long flags; | ||
53 | |||
54 | switch (size) { | ||
55 | case 1: | ||
56 | local_irq_save(flags); | ||
57 | ret = *(volatile unsigned char *)ptr; | ||
58 | *(volatile unsigned char *)ptr = x; | ||
59 | local_irq_restore(flags); | ||
60 | break; | ||
61 | |||
62 | case 4: | ||
63 | local_irq_save(flags); | ||
64 | ret = *(volatile unsigned long *)ptr; | ||
65 | *(volatile unsigned long *)ptr = x; | ||
66 | local_irq_restore(flags); | ||
67 | break; | ||
68 | default: | ||
69 | __bad_xchg(ptr, size), ret = 0; | ||
70 | break; | ||
71 | } | ||
72 | |||
73 | return ret; | ||
74 | } | ||
75 | |||
76 | void disable_hlt(void); | ||
77 | void enable_hlt(void); | ||
78 | void default_idle(void); | ||
79 | |||
80 | #define xchg(ptr, x) \ | ||
81 | ((__typeof__(*(ptr))) __xchg((unsigned long)(x), (ptr), sizeof(*(ptr)))) | ||
82 | |||
83 | void free_init_pages(char *what, unsigned long begin, unsigned long end); | ||
84 | void free_initmem(void); | ||
85 | extern char *klimit; | ||
86 | extern unsigned long kernel_tlb; | ||
87 | extern void ret_from_fork(void); | ||
88 | |||
89 | extern void *alloc_maybe_bootmem(size_t size, gfp_t mask); | ||
90 | extern void *zalloc_maybe_bootmem(size_t size, gfp_t mask); | ||
91 | |||
92 | #ifdef CONFIG_DEBUG_FS | ||
93 | extern struct dentry *of_debugfs_root; | ||
94 | #endif | ||
95 | |||
96 | #define arch_align_stack(x) (x) | ||
97 | |||
98 | #endif /* _ASM_MICROBLAZE_SYSTEM_H */ | ||
diff --git a/arch/microblaze/kernel/cpu/pvr.c b/arch/microblaze/kernel/cpu/pvr.c index 488c1ed24e38..3a749d5e71fd 100644 --- a/arch/microblaze/kernel/cpu/pvr.c +++ b/arch/microblaze/kernel/cpu/pvr.c | |||
@@ -12,7 +12,6 @@ | |||
12 | 12 | ||
13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
14 | #include <linux/compiler.h> | 14 | #include <linux/compiler.h> |
15 | #include <asm/system.h> | ||
16 | #include <asm/exceptions.h> | 15 | #include <asm/exceptions.h> |
17 | #include <asm/pvr.h> | 16 | #include <asm/pvr.h> |
18 | 17 | ||
diff --git a/arch/microblaze/kernel/intc.c b/arch/microblaze/kernel/intc.c index 3003d2f9f551..6c54d4dcdec3 100644 --- a/arch/microblaze/kernel/intc.c +++ b/arch/microblaze/kernel/intc.c | |||
@@ -9,6 +9,7 @@ | |||
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <linux/init.h> | 11 | #include <linux/init.h> |
12 | #include <linux/irqdomain.h> | ||
12 | #include <linux/irq.h> | 13 | #include <linux/irq.h> |
13 | #include <asm/page.h> | 14 | #include <asm/page.h> |
14 | #include <linux/io.h> | 15 | #include <linux/io.h> |
@@ -25,8 +26,6 @@ static unsigned int intc_baseaddr; | |||
25 | #define INTC_BASE intc_baseaddr | 26 | #define INTC_BASE intc_baseaddr |
26 | #endif | 27 | #endif |
27 | 28 | ||
28 | unsigned int nr_irq; | ||
29 | |||
30 | /* No one else should require these constants, so define them locally here. */ | 29 | /* No one else should require these constants, so define them locally here. */ |
31 | #define ISR 0x00 /* Interrupt Status Register */ | 30 | #define ISR 0x00 /* Interrupt Status Register */ |
32 | #define IPR 0x04 /* Interrupt Pending Register */ | 31 | #define IPR 0x04 /* Interrupt Pending Register */ |
@@ -84,24 +83,45 @@ static struct irq_chip intc_dev = { | |||
84 | .irq_mask_ack = intc_mask_ack, | 83 | .irq_mask_ack = intc_mask_ack, |
85 | }; | 84 | }; |
86 | 85 | ||
87 | unsigned int get_irq(struct pt_regs *regs) | 86 | static struct irq_domain *root_domain; |
87 | |||
88 | unsigned int get_irq(void) | ||
88 | { | 89 | { |
89 | int irq; | 90 | unsigned int hwirq, irq = -1; |
90 | 91 | ||
91 | /* | 92 | hwirq = in_be32(INTC_BASE + IVR); |
92 | * NOTE: This function is the one that needs to be improved in | 93 | if (hwirq != -1U) |
93 | * order to handle multiple interrupt controllers. It currently | 94 | irq = irq_find_mapping(root_domain, hwirq); |
94 | * is hardcoded to check for interrupts only on the first INTC. | 95 | |
95 | */ | 96 | pr_debug("get_irq: hwirq=%d, irq=%d\n", hwirq, irq); |
96 | irq = in_be32(INTC_BASE + IVR) + NO_IRQ_OFFSET; | ||
97 | pr_debug("get_irq: %d\n", irq); | ||
98 | 97 | ||
99 | return irq; | 98 | return irq; |
100 | } | 99 | } |
101 | 100 | ||
101 | int xintc_map(struct irq_domain *d, unsigned int irq, irq_hw_number_t hw) | ||
102 | { | ||
103 | u32 intr_mask = (u32)d->host_data; | ||
104 | |||
105 | if (intr_mask & (1 << hw)) { | ||
106 | irq_set_chip_and_handler_name(irq, &intc_dev, | ||
107 | handle_edge_irq, "edge"); | ||
108 | irq_clear_status_flags(irq, IRQ_LEVEL); | ||
109 | } else { | ||
110 | irq_set_chip_and_handler_name(irq, &intc_dev, | ||
111 | handle_level_irq, "level"); | ||
112 | irq_set_status_flags(irq, IRQ_LEVEL); | ||
113 | } | ||
114 | return 0; | ||
115 | } | ||
116 | |||
117 | static const struct irq_domain_ops xintc_irq_domain_ops = { | ||
118 | .xlate = irq_domain_xlate_onetwocell, | ||
119 | .map = xintc_map, | ||
120 | }; | ||
121 | |||
102 | void __init init_IRQ(void) | 122 | void __init init_IRQ(void) |
103 | { | 123 | { |
104 | u32 i, intr_mask; | 124 | u32 nr_irq, intr_mask; |
105 | struct device_node *intc = NULL; | 125 | struct device_node *intc = NULL; |
106 | #ifdef CONFIG_SELFMOD_INTC | 126 | #ifdef CONFIG_SELFMOD_INTC |
107 | unsigned int intc_baseaddr = 0; | 127 | unsigned int intc_baseaddr = 0; |
@@ -146,16 +166,9 @@ void __init init_IRQ(void) | |||
146 | /* Turn on the Master Enable. */ | 166 | /* Turn on the Master Enable. */ |
147 | out_be32(intc_baseaddr + MER, MER_HIE | MER_ME); | 167 | out_be32(intc_baseaddr + MER, MER_HIE | MER_ME); |
148 | 168 | ||
149 | for (i = IRQ_OFFSET; i < (nr_irq + IRQ_OFFSET); ++i) { | 169 | /* Yeah, okay, casting the intr_mask to a void* is butt-ugly, but I'm |
150 | if (intr_mask & (0x00000001 << (i - IRQ_OFFSET))) { | 170 | * lazy and Michal can clean it up to something nicer when he tests |
151 | irq_set_chip_and_handler_name(i, &intc_dev, | 171 | * and commits this patch. ~~gcl */ |
152 | handle_edge_irq, "edge"); | 172 | root_domain = irq_domain_add_linear(intc, nr_irq, &xintc_irq_domain_ops, |
153 | irq_clear_status_flags(i, IRQ_LEVEL); | 173 | (void *)intr_mask); |
154 | } else { | ||
155 | irq_set_chip_and_handler_name(i, &intc_dev, | ||
156 | handle_level_irq, "level"); | ||
157 | irq_set_status_flags(i, IRQ_LEVEL); | ||
158 | } | ||
159 | irq_get_irq_data(i)->hwirq = i - IRQ_OFFSET; | ||
160 | } | ||
161 | } | 174 | } |
diff --git a/arch/microblaze/kernel/irq.c b/arch/microblaze/kernel/irq.c index bbebcae72c02..ace700afbfdf 100644 --- a/arch/microblaze/kernel/irq.c +++ b/arch/microblaze/kernel/irq.c | |||
@@ -31,14 +31,13 @@ void __irq_entry do_IRQ(struct pt_regs *regs) | |||
31 | trace_hardirqs_off(); | 31 | trace_hardirqs_off(); |
32 | 32 | ||
33 | irq_enter(); | 33 | irq_enter(); |
34 | irq = get_irq(regs); | 34 | irq = get_irq(); |
35 | next_irq: | 35 | next_irq: |
36 | BUG_ON(!irq); | 36 | BUG_ON(!irq); |
37 | /* Substract 1 because of get_irq */ | 37 | generic_handle_irq(irq); |
38 | generic_handle_irq(irq + IRQ_OFFSET - NO_IRQ_OFFSET); | ||
39 | 38 | ||
40 | irq = get_irq(regs); | 39 | irq = get_irq(); |
41 | if (irq) { | 40 | if (irq != -1U) { |
42 | pr_debug("next irq: %d\n", irq); | 41 | pr_debug("next irq: %d\n", irq); |
43 | ++concurrent_irq; | 42 | ++concurrent_irq; |
44 | goto next_irq; | 43 | goto next_irq; |
@@ -48,18 +47,3 @@ next_irq: | |||
48 | set_irq_regs(old_regs); | 47 | set_irq_regs(old_regs); |
49 | trace_hardirqs_on(); | 48 | trace_hardirqs_on(); |
50 | } | 49 | } |
51 | |||
52 | /* MS: There is no any advance mapping mechanism. We are using simple 32bit | ||
53 | intc without any cascades or any connection that's why mapping is 1:1 */ | ||
54 | unsigned int irq_create_mapping(struct irq_host *host, irq_hw_number_t hwirq) | ||
55 | { | ||
56 | return hwirq + IRQ_OFFSET; | ||
57 | } | ||
58 | EXPORT_SYMBOL_GPL(irq_create_mapping); | ||
59 | |||
60 | unsigned int irq_create_of_mapping(struct device_node *controller, | ||
61 | const u32 *intspec, unsigned int intsize) | ||
62 | { | ||
63 | return intspec[0] + IRQ_OFFSET; | ||
64 | } | ||
65 | EXPORT_SYMBOL_GPL(irq_create_of_mapping); | ||
diff --git a/arch/microblaze/kernel/microblaze_ksyms.c b/arch/microblaze/kernel/microblaze_ksyms.c index 49faeb429599..bb4907c828dc 100644 --- a/arch/microblaze/kernel/microblaze_ksyms.c +++ b/arch/microblaze/kernel/microblaze_ksyms.c | |||
@@ -18,7 +18,6 @@ | |||
18 | #include <asm/cacheflush.h> | 18 | #include <asm/cacheflush.h> |
19 | #include <linux/io.h> | 19 | #include <linux/io.h> |
20 | #include <asm/page.h> | 20 | #include <asm/page.h> |
21 | #include <asm/system.h> | ||
22 | #include <linux/ftrace.h> | 21 | #include <linux/ftrace.h> |
23 | #include <linux/uaccess.h> | 22 | #include <linux/uaccess.h> |
24 | 23 | ||
diff --git a/arch/microblaze/kernel/process.c b/arch/microblaze/kernel/process.c index 7dcb5bfffb75..883b92789cdf 100644 --- a/arch/microblaze/kernel/process.c +++ b/arch/microblaze/kernel/process.c | |||
@@ -13,7 +13,6 @@ | |||
13 | #include <linux/pm.h> | 13 | #include <linux/pm.h> |
14 | #include <linux/tick.h> | 14 | #include <linux/tick.h> |
15 | #include <linux/bitops.h> | 15 | #include <linux/bitops.h> |
16 | #include <asm/system.h> | ||
17 | #include <asm/pgalloc.h> | 16 | #include <asm/pgalloc.h> |
18 | #include <asm/uaccess.h> /* for USER_DS macros */ | 17 | #include <asm/uaccess.h> /* for USER_DS macros */ |
19 | #include <asm/cacheflush.h> | 18 | #include <asm/cacheflush.h> |
@@ -110,9 +109,7 @@ void cpu_idle(void) | |||
110 | rcu_idle_exit(); | 109 | rcu_idle_exit(); |
111 | tick_nohz_idle_exit(); | 110 | tick_nohz_idle_exit(); |
112 | 111 | ||
113 | preempt_enable_no_resched(); | 112 | schedule_preempt_disabled(); |
114 | schedule(); | ||
115 | preempt_disable(); | ||
116 | check_pgt_cache(); | 113 | check_pgt_cache(); |
117 | } | 114 | } |
118 | } | 115 | } |
diff --git a/arch/microblaze/kernel/prom.c b/arch/microblaze/kernel/prom.c index 80d314e81901..4a764ccb9f26 100644 --- a/arch/microblaze/kernel/prom.c +++ b/arch/microblaze/kernel/prom.c | |||
@@ -36,7 +36,6 @@ | |||
36 | #include <asm/processor.h> | 36 | #include <asm/processor.h> |
37 | #include <asm/irq.h> | 37 | #include <asm/irq.h> |
38 | #include <linux/io.h> | 38 | #include <linux/io.h> |
39 | #include <asm/system.h> | ||
40 | #include <asm/mmu.h> | 39 | #include <asm/mmu.h> |
41 | #include <asm/pgtable.h> | 40 | #include <asm/pgtable.h> |
42 | #include <asm/sections.h> | 41 | #include <asm/sections.h> |
diff --git a/arch/microblaze/kernel/setup.c b/arch/microblaze/kernel/setup.c index 61dc7390984e..16d8dfd9094b 100644 --- a/arch/microblaze/kernel/setup.c +++ b/arch/microblaze/kernel/setup.c | |||
@@ -30,7 +30,6 @@ | |||
30 | #include <asm/entry.h> | 30 | #include <asm/entry.h> |
31 | #include <asm/cpuinfo.h> | 31 | #include <asm/cpuinfo.h> |
32 | 32 | ||
33 | #include <asm/system.h> | ||
34 | #include <asm/prom.h> | 33 | #include <asm/prom.h> |
35 | #include <asm/pgtable.h> | 34 | #include <asm/pgtable.h> |
36 | 35 | ||
@@ -51,8 +50,6 @@ void __init setup_arch(char **cmdline_p) | |||
51 | 50 | ||
52 | unflatten_device_tree(); | 51 | unflatten_device_tree(); |
53 | 52 | ||
54 | /* NOTE I think that this function is not necessary to call */ | ||
55 | /* irq_early_init(); */ | ||
56 | setup_cpuinfo(); | 53 | setup_cpuinfo(); |
57 | 54 | ||
58 | microblaze_cache_init(); | 55 | microblaze_cache_init(); |
diff --git a/arch/microblaze/kernel/timer.c b/arch/microblaze/kernel/timer.c index cadfd5608afb..522defa7d41f 100644 --- a/arch/microblaze/kernel/timer.c +++ b/arch/microblaze/kernel/timer.c | |||
@@ -27,7 +27,6 @@ | |||
27 | #include <asm/setup.h> | 27 | #include <asm/setup.h> |
28 | #include <asm/prom.h> | 28 | #include <asm/prom.h> |
29 | #include <asm/irq.h> | 29 | #include <asm/irq.h> |
30 | #include <asm/system.h> | ||
31 | #include <linux/cnt32_to_63.h> | 30 | #include <linux/cnt32_to_63.h> |
32 | 31 | ||
33 | #ifdef CONFIG_SELFMOD_TIMER | 32 | #ifdef CONFIG_SELFMOD_TIMER |
diff --git a/arch/microblaze/kernel/traps.c b/arch/microblaze/kernel/traps.c index ba034d421ec2..5541ac559593 100644 --- a/arch/microblaze/kernel/traps.c +++ b/arch/microblaze/kernel/traps.c | |||
@@ -15,7 +15,6 @@ | |||
15 | #include <linux/debug_locks.h> | 15 | #include <linux/debug_locks.h> |
16 | 16 | ||
17 | #include <asm/exceptions.h> | 17 | #include <asm/exceptions.h> |
18 | #include <asm/system.h> | ||
19 | #include <asm/unwind.h> | 18 | #include <asm/unwind.h> |
20 | 19 | ||
21 | void trap_init(void) | 20 | void trap_init(void) |
diff --git a/arch/microblaze/lib/memcpy.c b/arch/microblaze/lib/memcpy.c index 52746e718dfa..fe9c53fafdea 100644 --- a/arch/microblaze/lib/memcpy.c +++ b/arch/microblaze/lib/memcpy.c | |||
@@ -30,7 +30,6 @@ | |||
30 | #include <linux/module.h> | 30 | #include <linux/module.h> |
31 | 31 | ||
32 | #include <linux/string.h> | 32 | #include <linux/string.h> |
33 | #include <asm/system.h> | ||
34 | 33 | ||
35 | #ifdef __HAVE_ARCH_MEMCPY | 34 | #ifdef __HAVE_ARCH_MEMCPY |
36 | #ifndef CONFIG_OPT_LIB_FUNCTION | 35 | #ifndef CONFIG_OPT_LIB_FUNCTION |
diff --git a/arch/microblaze/mm/fault.c b/arch/microblaze/mm/fault.c index ae97d2ccdc22..c38a265846de 100644 --- a/arch/microblaze/mm/fault.c +++ b/arch/microblaze/mm/fault.c | |||
@@ -33,7 +33,6 @@ | |||
33 | #include <asm/pgtable.h> | 33 | #include <asm/pgtable.h> |
34 | #include <asm/mmu.h> | 34 | #include <asm/mmu.h> |
35 | #include <asm/mmu_context.h> | 35 | #include <asm/mmu_context.h> |
36 | #include <asm/system.h> | ||
37 | #include <linux/uaccess.h> | 36 | #include <linux/uaccess.h> |
38 | #include <asm/exceptions.h> | 37 | #include <asm/exceptions.h> |
39 | 38 | ||
diff --git a/arch/microblaze/pci/pci-common.c b/arch/microblaze/pci/pci-common.c index 85f2ac1230a8..d10403dadd2b 100644 --- a/arch/microblaze/pci/pci-common.c +++ b/arch/microblaze/pci/pci-common.c | |||
@@ -46,9 +46,6 @@ static int global_phb_number; /* Global phb counter */ | |||
46 | /* ISA Memory physical address */ | 46 | /* ISA Memory physical address */ |
47 | resource_size_t isa_mem_base; | 47 | resource_size_t isa_mem_base; |
48 | 48 | ||
49 | /* Default PCI flags is 0 on ppc32, modified at boot on ppc64 */ | ||
50 | unsigned int pci_flags; | ||
51 | |||
52 | static struct dma_map_ops *pci_dma_ops = &dma_direct_ops; | 49 | static struct dma_map_ops *pci_dma_ops = &dma_direct_ops; |
53 | 50 | ||
54 | unsigned long isa_io_base; | 51 | unsigned long isa_io_base; |
@@ -833,64 +830,7 @@ int pci_proc_domain(struct pci_bus *bus) | |||
833 | { | 830 | { |
834 | struct pci_controller *hose = pci_bus_to_host(bus); | 831 | struct pci_controller *hose = pci_bus_to_host(bus); |
835 | 832 | ||
836 | if (!(pci_flags & PCI_ENABLE_PROC_DOMAINS)) | 833 | return 0; |
837 | return 0; | ||
838 | if (pci_flags & PCI_COMPAT_DOMAIN_0) | ||
839 | return hose->global_number != 0; | ||
840 | return 1; | ||
841 | } | ||
842 | |||
843 | void pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region, | ||
844 | struct resource *res) | ||
845 | { | ||
846 | resource_size_t offset = 0, mask = (resource_size_t)-1; | ||
847 | struct pci_controller *hose = pci_bus_to_host(dev->bus); | ||
848 | |||
849 | if (!hose) | ||
850 | return; | ||
851 | if (res->flags & IORESOURCE_IO) { | ||
852 | offset = (unsigned long)hose->io_base_virt - _IO_BASE; | ||
853 | mask = 0xffffffffu; | ||
854 | } else if (res->flags & IORESOURCE_MEM) | ||
855 | offset = hose->pci_mem_offset; | ||
856 | |||
857 | region->start = (res->start - offset) & mask; | ||
858 | region->end = (res->end - offset) & mask; | ||
859 | } | ||
860 | EXPORT_SYMBOL(pcibios_resource_to_bus); | ||
861 | |||
862 | void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, | ||
863 | struct pci_bus_region *region) | ||
864 | { | ||
865 | resource_size_t offset = 0, mask = (resource_size_t)-1; | ||
866 | struct pci_controller *hose = pci_bus_to_host(dev->bus); | ||
867 | |||
868 | if (!hose) | ||
869 | return; | ||
870 | if (res->flags & IORESOURCE_IO) { | ||
871 | offset = (unsigned long)hose->io_base_virt - _IO_BASE; | ||
872 | mask = 0xffffffffu; | ||
873 | } else if (res->flags & IORESOURCE_MEM) | ||
874 | offset = hose->pci_mem_offset; | ||
875 | res->start = (region->start + offset) & mask; | ||
876 | res->end = (region->end + offset) & mask; | ||
877 | } | ||
878 | EXPORT_SYMBOL(pcibios_bus_to_resource); | ||
879 | |||
880 | /* Fixup a bus resource into a linux resource */ | ||
881 | static void __devinit fixup_resource(struct resource *res, struct pci_dev *dev) | ||
882 | { | ||
883 | struct pci_controller *hose = pci_bus_to_host(dev->bus); | ||
884 | resource_size_t offset = 0, mask = (resource_size_t)-1; | ||
885 | |||
886 | if (res->flags & IORESOURCE_IO) { | ||
887 | offset = (unsigned long)hose->io_base_virt - _IO_BASE; | ||
888 | mask = 0xffffffffu; | ||
889 | } else if (res->flags & IORESOURCE_MEM) | ||
890 | offset = hose->pci_mem_offset; | ||
891 | |||
892 | res->start = (res->start + offset) & mask; | ||
893 | res->end = (res->end + offset) & mask; | ||
894 | } | 834 | } |
895 | 835 | ||
896 | /* This header fixup will do the resource fixup for all devices as they are | 836 | /* This header fixup will do the resource fixup for all devices as they are |
@@ -910,13 +850,7 @@ static void __devinit pcibios_fixup_resources(struct pci_dev *dev) | |||
910 | struct resource *res = dev->resource + i; | 850 | struct resource *res = dev->resource + i; |
911 | if (!res->flags) | 851 | if (!res->flags) |
912 | continue; | 852 | continue; |
913 | /* On platforms that have PCI_PROBE_ONLY set, we don't | 853 | if (res->start == 0) { |
914 | * consider 0 as an unassigned BAR value. It's technically | ||
915 | * a valid value, but linux doesn't like it... so when we can | ||
916 | * re-assign things, we do so, but if we can't, we keep it | ||
917 | * around and hope for the best... | ||
918 | */ | ||
919 | if (res->start == 0 && !(pci_flags & PCI_PROBE_ONLY)) { | ||
920 | pr_debug("PCI:%s Resource %d %016llx-%016llx [%x]" \ | 854 | pr_debug("PCI:%s Resource %d %016llx-%016llx [%x]" \ |
921 | "is unassigned\n", | 855 | "is unassigned\n", |
922 | pci_name(dev), i, | 856 | pci_name(dev), i, |
@@ -929,18 +863,11 @@ static void __devinit pcibios_fixup_resources(struct pci_dev *dev) | |||
929 | continue; | 863 | continue; |
930 | } | 864 | } |
931 | 865 | ||
932 | pr_debug("PCI:%s Resource %d %016llx-%016llx [%x] fixup...\n", | 866 | pr_debug("PCI:%s Resource %d %016llx-%016llx [%x]\n", |
933 | pci_name(dev), i, | 867 | pci_name(dev), i, |
934 | (unsigned long long)res->start,\ | 868 | (unsigned long long)res->start,\ |
935 | (unsigned long long)res->end, | 869 | (unsigned long long)res->end, |
936 | (unsigned int)res->flags); | 870 | (unsigned int)res->flags); |
937 | |||
938 | fixup_resource(res, dev); | ||
939 | |||
940 | pr_debug("PCI:%s %016llx-%016llx\n", | ||
941 | pci_name(dev), | ||
942 | (unsigned long long)res->start, | ||
943 | (unsigned long long)res->end); | ||
944 | } | 871 | } |
945 | } | 872 | } |
946 | DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pcibios_fixup_resources); | 873 | DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pcibios_fixup_resources); |
@@ -959,10 +886,6 @@ static int __devinit pcibios_uninitialized_bridge_resource(struct pci_bus *bus, | |||
959 | u16 command; | 886 | u16 command; |
960 | int i; | 887 | int i; |
961 | 888 | ||
962 | /* We don't do anything if PCI_PROBE_ONLY is set */ | ||
963 | if (pci_flags & PCI_PROBE_ONLY) | ||
964 | return 0; | ||
965 | |||
966 | /* Job is a bit different between memory and IO */ | 889 | /* Job is a bit different between memory and IO */ |
967 | if (res->flags & IORESOURCE_MEM) { | 890 | if (res->flags & IORESOURCE_MEM) { |
968 | /* If the BAR is non-0 (res != pci_mem_offset) then it's | 891 | /* If the BAR is non-0 (res != pci_mem_offset) then it's |
@@ -1037,9 +960,6 @@ static void __devinit pcibios_fixup_bridge(struct pci_bus *bus) | |||
1037 | (unsigned long long)res->end, | 960 | (unsigned long long)res->end, |
1038 | (unsigned int)res->flags); | 961 | (unsigned int)res->flags); |
1039 | 962 | ||
1040 | /* Perform fixup */ | ||
1041 | fixup_resource(res, dev); | ||
1042 | |||
1043 | /* Try to detect uninitialized P2P bridge resources, | 963 | /* Try to detect uninitialized P2P bridge resources, |
1044 | * and clear them out so they get re-assigned later | 964 | * and clear them out so they get re-assigned later |
1045 | */ | 965 | */ |
@@ -1107,9 +1027,6 @@ EXPORT_SYMBOL(pcibios_fixup_bus); | |||
1107 | 1027 | ||
1108 | static int skip_isa_ioresource_align(struct pci_dev *dev) | 1028 | static int skip_isa_ioresource_align(struct pci_dev *dev) |
1109 | { | 1029 | { |
1110 | if ((pci_flags & PCI_CAN_SKIP_ISA_ALIGN) && | ||
1111 | !(dev->bus->bridge_ctl & PCI_BRIDGE_CTL_ISA)) | ||
1112 | return 1; | ||
1113 | return 0; | 1030 | return 0; |
1114 | } | 1031 | } |
1115 | 1032 | ||
@@ -1236,8 +1153,6 @@ void pcibios_allocate_bus_resources(struct pci_bus *bus) | |||
1236 | * and as such ensure proper re-allocation | 1153 | * and as such ensure proper re-allocation |
1237 | * later. | 1154 | * later. |
1238 | */ | 1155 | */ |
1239 | if (pci_flags & PCI_REASSIGN_ALL_RSRC) | ||
1240 | goto clear_resource; | ||
1241 | pr = pci_find_parent_resource(bus->self, res); | 1156 | pr = pci_find_parent_resource(bus->self, res); |
1242 | if (pr == res) { | 1157 | if (pr == res) { |
1243 | /* this happens when the generic PCI | 1158 | /* this happens when the generic PCI |
@@ -1422,27 +1337,19 @@ void __init pcibios_resource_survey(void) | |||
1422 | list_for_each_entry(b, &pci_root_buses, node) | 1337 | list_for_each_entry(b, &pci_root_buses, node) |
1423 | pcibios_allocate_bus_resources(b); | 1338 | pcibios_allocate_bus_resources(b); |
1424 | 1339 | ||
1425 | if (!(pci_flags & PCI_REASSIGN_ALL_RSRC)) { | 1340 | pcibios_allocate_resources(0); |
1426 | pcibios_allocate_resources(0); | 1341 | pcibios_allocate_resources(1); |
1427 | pcibios_allocate_resources(1); | ||
1428 | } | ||
1429 | 1342 | ||
1430 | /* Before we start assigning unassigned resource, we try to reserve | 1343 | /* Before we start assigning unassigned resource, we try to reserve |
1431 | * the low IO area and the VGA memory area if they intersect the | 1344 | * the low IO area and the VGA memory area if they intersect the |
1432 | * bus available resources to avoid allocating things on top of them | 1345 | * bus available resources to avoid allocating things on top of them |
1433 | */ | 1346 | */ |
1434 | if (!(pci_flags & PCI_PROBE_ONLY)) { | 1347 | list_for_each_entry(b, &pci_root_buses, node) |
1435 | list_for_each_entry(b, &pci_root_buses, node) | 1348 | pcibios_reserve_legacy_regions(b); |
1436 | pcibios_reserve_legacy_regions(b); | ||
1437 | } | ||
1438 | 1349 | ||
1439 | /* Now, if the platform didn't decide to blindly trust the firmware, | 1350 | /* Now proceed to assigning things that were left unassigned */ |
1440 | * we proceed to assigning things that were left unassigned | 1351 | pr_debug("PCI: Assigning unassigned resources...\n"); |
1441 | */ | 1352 | pci_assign_unassigned_resources(); |
1442 | if (!(pci_flags & PCI_PROBE_ONLY)) { | ||
1443 | pr_debug("PCI: Assigning unassigned resources...\n"); | ||
1444 | pci_assign_unassigned_resources(); | ||
1445 | } | ||
1446 | } | 1353 | } |
1447 | 1354 | ||
1448 | #ifdef CONFIG_HOTPLUG | 1355 | #ifdef CONFIG_HOTPLUG |
@@ -1535,7 +1442,7 @@ static void __devinit pcibios_setup_phb_resources(struct pci_controller *hose, s | |||
1535 | res->end = res->start + IO_SPACE_LIMIT; | 1442 | res->end = res->start + IO_SPACE_LIMIT; |
1536 | res->flags = IORESOURCE_IO; | 1443 | res->flags = IORESOURCE_IO; |
1537 | } | 1444 | } |
1538 | pci_add_resource(resources, res); | 1445 | pci_add_resource_offset(resources, res, hose->io_base_virt - _IO_BASE); |
1539 | 1446 | ||
1540 | pr_debug("PCI: PHB IO resource = %016llx-%016llx [%lx]\n", | 1447 | pr_debug("PCI: PHB IO resource = %016llx-%016llx [%lx]\n", |
1541 | (unsigned long long)res->start, | 1448 | (unsigned long long)res->start, |
@@ -1558,7 +1465,7 @@ static void __devinit pcibios_setup_phb_resources(struct pci_controller *hose, s | |||
1558 | res->flags = IORESOURCE_MEM; | 1465 | res->flags = IORESOURCE_MEM; |
1559 | 1466 | ||
1560 | } | 1467 | } |
1561 | pci_add_resource(resources, res); | 1468 | pci_add_resource_offset(resources, res, hose->pci_mem_offset); |
1562 | 1469 | ||
1563 | pr_debug("PCI: PHB MEM resource %d = %016llx-%016llx [%lx]\n", | 1470 | pr_debug("PCI: PHB MEM resource %d = %016llx-%016llx [%lx]\n", |
1564 | i, (unsigned long long)res->start, | 1471 | i, (unsigned long long)res->start, |