diff options
Diffstat (limited to 'arch')
350 files changed, 5987 insertions, 1623 deletions
diff --git a/arch/alpha/include/asm/bitops.h b/arch/alpha/include/asm/bitops.h index 1dce24bc455a..adfab8a21dfe 100644 --- a/arch/alpha/include/asm/bitops.h +++ b/arch/alpha/include/asm/bitops.h | |||
@@ -410,7 +410,7 @@ static inline unsigned long __arch_hweight64(unsigned long w) | |||
410 | return __kernel_ctpop(w); | 410 | return __kernel_ctpop(w); |
411 | } | 411 | } |
412 | 412 | ||
413 | static inline unsigned int __arch_weight32(unsigned int w) | 413 | static inline unsigned int __arch_hweight32(unsigned int w) |
414 | { | 414 | { |
415 | return __arch_hweight64(w); | 415 | return __arch_hweight64(w); |
416 | } | 416 | } |
diff --git a/arch/alpha/kernel/Makefile b/arch/alpha/kernel/Makefile index 7739a62440a7..5a62fb46ef20 100644 --- a/arch/alpha/kernel/Makefile +++ b/arch/alpha/kernel/Makefile | |||
@@ -35,7 +35,7 @@ endif | |||
35 | 35 | ||
36 | obj-y += irq_pyxis.o irq_i8259.o irq_srm.o | 36 | obj-y += irq_pyxis.o irq_i8259.o irq_srm.o |
37 | obj-y += err_ev6.o | 37 | obj-y += err_ev6.o |
38 | obj-y += es1888.o smc37c669.o smc37c93x.o ns87312.o gct.o | 38 | obj-y += es1888.o smc37c669.o smc37c93x.o pc873xx.o gct.o |
39 | obj-y += srmcons.o | 39 | obj-y += srmcons.o |
40 | 40 | ||
41 | else | 41 | else |
@@ -63,11 +63,11 @@ obj-$(CONFIG_ALPHA_WILDFIRE) += core_wildfire.o | |||
63 | # Board support | 63 | # Board support |
64 | obj-$(CONFIG_ALPHA_ALCOR) += sys_alcor.o irq_i8259.o irq_srm.o | 64 | obj-$(CONFIG_ALPHA_ALCOR) += sys_alcor.o irq_i8259.o irq_srm.o |
65 | obj-$(CONFIG_ALPHA_CABRIOLET) += sys_cabriolet.o irq_i8259.o irq_srm.o \ | 65 | obj-$(CONFIG_ALPHA_CABRIOLET) += sys_cabriolet.o irq_i8259.o irq_srm.o \ |
66 | ns87312.o | 66 | pc873xx.o |
67 | obj-$(CONFIG_ALPHA_EB164) += sys_cabriolet.o irq_i8259.o irq_srm.o \ | 67 | obj-$(CONFIG_ALPHA_EB164) += sys_cabriolet.o irq_i8259.o irq_srm.o \ |
68 | ns87312.o | 68 | pc873xx.o |
69 | obj-$(CONFIG_ALPHA_EB66P) += sys_cabriolet.o irq_i8259.o irq_srm.o \ | 69 | obj-$(CONFIG_ALPHA_EB66P) += sys_cabriolet.o irq_i8259.o irq_srm.o \ |
70 | ns87312.o | 70 | pc873xx.o |
71 | obj-$(CONFIG_ALPHA_LX164) += sys_cabriolet.o irq_i8259.o irq_srm.o \ | 71 | obj-$(CONFIG_ALPHA_LX164) += sys_cabriolet.o irq_i8259.o irq_srm.o \ |
72 | smc37c93x.o | 72 | smc37c93x.o |
73 | obj-$(CONFIG_ALPHA_PC164) += sys_cabriolet.o irq_i8259.o irq_srm.o \ | 73 | obj-$(CONFIG_ALPHA_PC164) += sys_cabriolet.o irq_i8259.o irq_srm.o \ |
@@ -90,14 +90,14 @@ obj-$(CONFIG_ALPHA_RUFFIAN) += sys_ruffian.o irq_pyxis.o irq_i8259.o | |||
90 | obj-$(CONFIG_ALPHA_RX164) += sys_rx164.o irq_i8259.o | 90 | obj-$(CONFIG_ALPHA_RX164) += sys_rx164.o irq_i8259.o |
91 | obj-$(CONFIG_ALPHA_SABLE) += sys_sable.o | 91 | obj-$(CONFIG_ALPHA_SABLE) += sys_sable.o |
92 | obj-$(CONFIG_ALPHA_LYNX) += sys_sable.o | 92 | obj-$(CONFIG_ALPHA_LYNX) += sys_sable.o |
93 | obj-$(CONFIG_ALPHA_BOOK1) += sys_sio.o irq_i8259.o irq_srm.o ns87312.o | 93 | obj-$(CONFIG_ALPHA_BOOK1) += sys_sio.o irq_i8259.o irq_srm.o pc873xx.o |
94 | obj-$(CONFIG_ALPHA_AVANTI) += sys_sio.o irq_i8259.o irq_srm.o ns87312.o | 94 | obj-$(CONFIG_ALPHA_AVANTI) += sys_sio.o irq_i8259.o irq_srm.o pc873xx.o |
95 | obj-$(CONFIG_ALPHA_NONAME) += sys_sio.o irq_i8259.o irq_srm.o ns87312.o | 95 | obj-$(CONFIG_ALPHA_NONAME) += sys_sio.o irq_i8259.o irq_srm.o pc873xx.o |
96 | obj-$(CONFIG_ALPHA_P2K) += sys_sio.o irq_i8259.o irq_srm.o ns87312.o | 96 | obj-$(CONFIG_ALPHA_P2K) += sys_sio.o irq_i8259.o irq_srm.o pc873xx.o |
97 | obj-$(CONFIG_ALPHA_XL) += sys_sio.o irq_i8259.o irq_srm.o ns87312.o | 97 | obj-$(CONFIG_ALPHA_XL) += sys_sio.o irq_i8259.o irq_srm.o pc873xx.o |
98 | obj-$(CONFIG_ALPHA_SX164) += sys_sx164.o irq_pyxis.o irq_i8259.o \ | 98 | obj-$(CONFIG_ALPHA_SX164) += sys_sx164.o irq_pyxis.o irq_i8259.o \ |
99 | irq_srm.o smc37c669.o | 99 | irq_srm.o smc37c669.o |
100 | obj-$(CONFIG_ALPHA_TAKARA) += sys_takara.o irq_i8259.o ns87312.o | 100 | obj-$(CONFIG_ALPHA_TAKARA) += sys_takara.o irq_i8259.o pc873xx.o |
101 | obj-$(CONFIG_ALPHA_WILDFIRE) += sys_wildfire.o irq_i8259.o | 101 | obj-$(CONFIG_ALPHA_WILDFIRE) += sys_wildfire.o irq_i8259.o |
102 | 102 | ||
103 | # Error support | 103 | # Error support |
diff --git a/arch/alpha/kernel/ns87312.c b/arch/alpha/kernel/ns87312.c deleted file mode 100644 index 342b56d24c20..000000000000 --- a/arch/alpha/kernel/ns87312.c +++ /dev/null | |||
@@ -1,38 +0,0 @@ | |||
1 | /* | ||
2 | * linux/arch/alpha/kernel/ns87312.c | ||
3 | */ | ||
4 | |||
5 | #include <linux/init.h> | ||
6 | #include <asm/io.h> | ||
7 | #include "proto.h" | ||
8 | |||
9 | |||
10 | /* | ||
11 | * The SRM console *disables* the IDE interface, this code ensures it's | ||
12 | * enabled. | ||
13 | * | ||
14 | * This code bangs on a control register of the 87312 Super I/O chip | ||
15 | * that implements parallel port/serial ports/IDE/FDI. Depending on | ||
16 | * the motherboard, the Super I/O chip can be configured through a | ||
17 | * pair of registers that are located either at I/O ports 0x26e/0x26f | ||
18 | * or 0x398/0x399. Unfortunately, autodetecting which base address is | ||
19 | * in use works only once (right after a reset). The Super I/O chip | ||
20 | * has the additional quirk that configuration register data must be | ||
21 | * written twice (I believe this is a safety feature to prevent | ||
22 | * accidental modification---fun, isn't it?). | ||
23 | */ | ||
24 | |||
25 | void __init | ||
26 | ns87312_enable_ide(long ide_base) | ||
27 | { | ||
28 | int data; | ||
29 | unsigned long flags; | ||
30 | |||
31 | local_irq_save(flags); | ||
32 | outb(0, ide_base); /* set the index register for reg #0 */ | ||
33 | data = inb(ide_base+1); /* read the current contents */ | ||
34 | outb(0, ide_base); /* set the index register for reg #0 */ | ||
35 | outb(data | 0x40, ide_base+1); /* turn on IDE */ | ||
36 | outb(data | 0x40, ide_base+1); /* turn on IDE, really! */ | ||
37 | local_irq_restore(flags); | ||
38 | } | ||
diff --git a/arch/alpha/kernel/pc873xx.c b/arch/alpha/kernel/pc873xx.c new file mode 100644 index 000000000000..27dcbff85613 --- /dev/null +++ b/arch/alpha/kernel/pc873xx.c | |||
@@ -0,0 +1,88 @@ | |||
1 | #include <linux/ioport.h> | ||
2 | #include <asm/io.h> | ||
3 | |||
4 | #include "pc873xx.h" | ||
5 | |||
6 | static unsigned pc873xx_probelist[] = {0x398, 0x26e, 0}; | ||
7 | |||
8 | static char *pc873xx_names[] = { | ||
9 | "PC87303", "PC87306", "PC87312", "PC87332", "PC87334" | ||
10 | }; | ||
11 | |||
12 | static unsigned int base, model; | ||
13 | |||
14 | |||
15 | unsigned int __init pc873xx_get_base() | ||
16 | { | ||
17 | return base; | ||
18 | } | ||
19 | |||
20 | char *__init pc873xx_get_model() | ||
21 | { | ||
22 | return pc873xx_names[model]; | ||
23 | } | ||
24 | |||
25 | static unsigned char __init pc873xx_read(unsigned int base, int reg) | ||
26 | { | ||
27 | outb(reg, base); | ||
28 | return inb(base + 1); | ||
29 | } | ||
30 | |||
31 | static void __init pc873xx_write(unsigned int base, int reg, unsigned char data) | ||
32 | { | ||
33 | unsigned long flags; | ||
34 | |||
35 | local_irq_save(flags); | ||
36 | outb(reg, base); | ||
37 | outb(data, base + 1); | ||
38 | outb(data, base + 1); /* Must be written twice */ | ||
39 | local_irq_restore(flags); | ||
40 | } | ||
41 | |||
42 | int __init pc873xx_probe(void) | ||
43 | { | ||
44 | int val, index = 0; | ||
45 | |||
46 | while ((base = pc873xx_probelist[index++])) { | ||
47 | |||
48 | if (request_region(base, 2, "Super IO PC873xx") == NULL) | ||
49 | continue; | ||
50 | |||
51 | val = pc873xx_read(base, REG_SID); | ||
52 | if ((val & 0xf0) == 0x10) { | ||
53 | model = PC87332; | ||
54 | break; | ||
55 | } else if ((val & 0xf8) == 0x70) { | ||
56 | model = PC87306; | ||
57 | break; | ||
58 | } else if ((val & 0xf8) == 0x50) { | ||
59 | model = PC87334; | ||
60 | break; | ||
61 | } else if ((val & 0xf8) == 0x40) { | ||
62 | model = PC87303; | ||
63 | break; | ||
64 | } | ||
65 | |||
66 | release_region(base, 2); | ||
67 | } | ||
68 | |||
69 | return (base == 0) ? -1 : 1; | ||
70 | } | ||
71 | |||
72 | void __init pc873xx_enable_epp19(void) | ||
73 | { | ||
74 | unsigned char data; | ||
75 | |||
76 | printk(KERN_INFO "PC873xx enabling EPP v1.9\n"); | ||
77 | data = pc873xx_read(base, REG_PCR); | ||
78 | pc873xx_write(base, REG_PCR, (data & 0xFC) | 0x02); | ||
79 | } | ||
80 | |||
81 | void __init pc873xx_enable_ide(void) | ||
82 | { | ||
83 | unsigned char data; | ||
84 | |||
85 | printk(KERN_INFO "PC873xx enabling IDE interrupt\n"); | ||
86 | data = pc873xx_read(base, REG_FER); | ||
87 | pc873xx_write(base, REG_FER, data | 0x40); | ||
88 | } | ||
diff --git a/arch/alpha/kernel/pc873xx.h b/arch/alpha/kernel/pc873xx.h new file mode 100644 index 000000000000..25e16956fe3e --- /dev/null +++ b/arch/alpha/kernel/pc873xx.h | |||
@@ -0,0 +1,35 @@ | |||
1 | |||
2 | #ifndef _PC873xx_H_ | ||
3 | #define _PC873xx_H_ | ||
4 | |||
5 | /* | ||
6 | * Control Register Values | ||
7 | */ | ||
8 | #define REG_FER 0x00 | ||
9 | #define REG_FAR 0x01 | ||
10 | #define REG_PTR 0x02 | ||
11 | #define REG_FCR 0x03 | ||
12 | #define REG_PCR 0x04 | ||
13 | #define REG_KRR 0x05 | ||
14 | #define REG_PMC 0x06 | ||
15 | #define REG_TUP 0x07 | ||
16 | #define REG_SID 0x08 | ||
17 | #define REG_ASC 0x09 | ||
18 | #define REG_IRC 0x0e | ||
19 | |||
20 | /* | ||
21 | * Model numbers | ||
22 | */ | ||
23 | #define PC87303 0 | ||
24 | #define PC87306 1 | ||
25 | #define PC87312 2 | ||
26 | #define PC87332 3 | ||
27 | #define PC87334 4 | ||
28 | |||
29 | int pc873xx_probe(void); | ||
30 | unsigned int pc873xx_get_base(void); | ||
31 | char *pc873xx_get_model(void); | ||
32 | void pc873xx_enable_epp19(void); | ||
33 | void pc873xx_enable_ide(void); | ||
34 | |||
35 | #endif | ||
diff --git a/arch/alpha/kernel/pci-sysfs.c b/arch/alpha/kernel/pci-sysfs.c index a5fffc882c72..738fc824e2ea 100644 --- a/arch/alpha/kernel/pci-sysfs.c +++ b/arch/alpha/kernel/pci-sysfs.c | |||
@@ -53,7 +53,6 @@ static int __pci_mmap_fits(struct pci_dev *pdev, int num, | |||
53 | 53 | ||
54 | /** | 54 | /** |
55 | * pci_mmap_resource - map a PCI resource into user memory space | 55 | * pci_mmap_resource - map a PCI resource into user memory space |
56 | * @filp: open sysfs file | ||
57 | * @kobj: kobject for mapping | 56 | * @kobj: kobject for mapping |
58 | * @attr: struct bin_attribute for the file being mapped | 57 | * @attr: struct bin_attribute for the file being mapped |
59 | * @vma: struct vm_area_struct passed into the mmap | 58 | * @vma: struct vm_area_struct passed into the mmap |
@@ -61,7 +60,7 @@ static int __pci_mmap_fits(struct pci_dev *pdev, int num, | |||
61 | * | 60 | * |
62 | * Use the bus mapping routines to map a PCI resource into userspace. | 61 | * Use the bus mapping routines to map a PCI resource into userspace. |
63 | */ | 62 | */ |
64 | static int pci_mmap_resource(struct file *filp, struct kobject *kobj, | 63 | static int pci_mmap_resource(struct kobject *kobj, |
65 | struct bin_attribute *attr, | 64 | struct bin_attribute *attr, |
66 | struct vm_area_struct *vma, int sparse) | 65 | struct vm_area_struct *vma, int sparse) |
67 | { | 66 | { |
diff --git a/arch/alpha/kernel/sys_sio.c b/arch/alpha/kernel/sys_sio.c index d4327e461c22..85b4aea01ef8 100644 --- a/arch/alpha/kernel/sys_sio.c +++ b/arch/alpha/kernel/sys_sio.c | |||
@@ -34,6 +34,7 @@ | |||
34 | #include "irq_impl.h" | 34 | #include "irq_impl.h" |
35 | #include "pci_impl.h" | 35 | #include "pci_impl.h" |
36 | #include "machvec_impl.h" | 36 | #include "machvec_impl.h" |
37 | #include "pc873xx.h" | ||
37 | 38 | ||
38 | #if defined(ALPHA_RESTORE_SRM_SETUP) | 39 | #if defined(ALPHA_RESTORE_SRM_SETUP) |
39 | /* Save LCA configuration data as the console had it set up. */ | 40 | /* Save LCA configuration data as the console had it set up. */ |
@@ -208,7 +209,27 @@ noname_init_pci(void) | |||
208 | common_init_pci(); | 209 | common_init_pci(); |
209 | sio_pci_route(); | 210 | sio_pci_route(); |
210 | sio_fixup_irq_levels(sio_collect_irq_levels()); | 211 | sio_fixup_irq_levels(sio_collect_irq_levels()); |
211 | ns87312_enable_ide(0x26e); | 212 | |
213 | if (pc873xx_probe() == -1) { | ||
214 | printk(KERN_ERR "Probing for PC873xx Super IO chip failed.\n"); | ||
215 | } else { | ||
216 | printk(KERN_INFO "Found %s Super IO chip at 0x%x\n", | ||
217 | pc873xx_get_model(), pc873xx_get_base()); | ||
218 | |||
219 | /* Enabling things in the Super IO chip doesn't actually | ||
220 | * configure and enable things, the legacy drivers still | ||
221 | * need to do the actual configuration and enabling. | ||
222 | * This only unblocks them. | ||
223 | */ | ||
224 | |||
225 | #if !defined(CONFIG_ALPHA_AVANTI) | ||
226 | /* Don't bother on the Avanti family. | ||
227 | * None of them had on-board IDE. | ||
228 | */ | ||
229 | pc873xx_enable_ide(); | ||
230 | #endif | ||
231 | pc873xx_enable_epp19(); | ||
232 | } | ||
212 | } | 233 | } |
213 | 234 | ||
214 | static inline void __init | 235 | static inline void __init |
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 1f254bd6c937..98922f7d2d12 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -955,7 +955,8 @@ config XSCALE_PMU | |||
955 | default y | 955 | default y |
956 | 956 | ||
957 | config CPU_HAS_PMU | 957 | config CPU_HAS_PMU |
958 | depends on CPU_V6 || CPU_V7 || XSCALE_PMU | 958 | depends on (CPU_V6 || CPU_V7 || XSCALE_PMU) && \ |
959 | (!ARCH_OMAP3 || OMAP3_EMU) | ||
959 | default y | 960 | default y |
960 | bool | 961 | bool |
961 | 962 | ||
diff --git a/arch/arm/common/sa1111.c b/arch/arm/common/sa1111.c index a52a27c1d9be..6f80665f477e 100644 --- a/arch/arm/common/sa1111.c +++ b/arch/arm/common/sa1111.c | |||
@@ -951,8 +951,6 @@ static int sa1111_resume(struct platform_device *dev) | |||
951 | if (!save) | 951 | if (!save) |
952 | return 0; | 952 | return 0; |
953 | 953 | ||
954 | spin_lock_irqsave(&sachip->lock, flags); | ||
955 | |||
956 | /* | 954 | /* |
957 | * Ensure that the SA1111 is still here. | 955 | * Ensure that the SA1111 is still here. |
958 | * FIXME: shouldn't do this here. | 956 | * FIXME: shouldn't do this here. |
@@ -969,6 +967,13 @@ static int sa1111_resume(struct platform_device *dev) | |||
969 | * First of all, wake up the chip. | 967 | * First of all, wake up the chip. |
970 | */ | 968 | */ |
971 | sa1111_wake(sachip); | 969 | sa1111_wake(sachip); |
970 | |||
971 | /* | ||
972 | * Only lock for write ops. Also, sa1111_wake must be called with | ||
973 | * released spinlock! | ||
974 | */ | ||
975 | spin_lock_irqsave(&sachip->lock, flags); | ||
976 | |||
972 | sa1111_writel(0, sachip->base + SA1111_INTC + SA1111_INTEN0); | 977 | sa1111_writel(0, sachip->base + SA1111_INTC + SA1111_INTEN0); |
973 | sa1111_writel(0, sachip->base + SA1111_INTC + SA1111_INTEN1); | 978 | sa1111_writel(0, sachip->base + SA1111_INTC + SA1111_INTEN1); |
974 | 979 | ||
diff --git a/arch/arm/include/asm/mach/udc_pxa2xx.h b/arch/arm/include/asm/mach/udc_pxa2xx.h index f3eabf1ecec3..833306ee9e7f 100644 --- a/arch/arm/include/asm/mach/udc_pxa2xx.h +++ b/arch/arm/include/asm/mach/udc_pxa2xx.h | |||
@@ -21,8 +21,8 @@ struct pxa2xx_udc_mach_info { | |||
21 | * here. Note that sometimes the signals go through inverters... | 21 | * here. Note that sometimes the signals go through inverters... |
22 | */ | 22 | */ |
23 | bool gpio_vbus_inverted; | 23 | bool gpio_vbus_inverted; |
24 | u16 gpio_vbus; /* high == vbus present */ | 24 | int gpio_vbus; /* high == vbus present */ |
25 | bool gpio_pullup_inverted; | 25 | bool gpio_pullup_inverted; |
26 | u16 gpio_pullup; /* high == pullup activated */ | 26 | int gpio_pullup; /* high == pullup activated */ |
27 | }; | 27 | }; |
28 | 28 | ||
diff --git a/arch/arm/include/asm/processor.h b/arch/arm/include/asm/processor.h index 6a89567ffc5b..7bed3daf83b8 100644 --- a/arch/arm/include/asm/processor.h +++ b/arch/arm/include/asm/processor.h | |||
@@ -91,7 +91,11 @@ extern void release_thread(struct task_struct *); | |||
91 | 91 | ||
92 | unsigned long get_wchan(struct task_struct *p); | 92 | unsigned long get_wchan(struct task_struct *p); |
93 | 93 | ||
94 | #if __LINUX_ARM_ARCH__ == 6 | ||
95 | #define cpu_relax() smp_mb() | ||
96 | #else | ||
94 | #define cpu_relax() barrier() | 97 | #define cpu_relax() barrier() |
98 | #endif | ||
95 | 99 | ||
96 | /* | 100 | /* |
97 | * Create a new kernel thread | 101 | * Create a new kernel thread |
diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c index c45768614c8a..de12536d687f 100644 --- a/arch/arm/kernel/perf_event.c +++ b/arch/arm/kernel/perf_event.c | |||
@@ -201,7 +201,7 @@ armpmu_event_update(struct perf_event *event, | |||
201 | { | 201 | { |
202 | int shift = 64 - 32; | 202 | int shift = 64 - 32; |
203 | s64 prev_raw_count, new_raw_count; | 203 | s64 prev_raw_count, new_raw_count; |
204 | s64 delta; | 204 | u64 delta; |
205 | 205 | ||
206 | again: | 206 | again: |
207 | prev_raw_count = atomic64_read(&hwc->prev_count); | 207 | prev_raw_count = atomic64_read(&hwc->prev_count); |
diff --git a/arch/arm/mach-msm/dma.c b/arch/arm/mach-msm/dma.c index d029d1f5f9e2..02cae5e2951c 100644 --- a/arch/arm/mach-msm/dma.c +++ b/arch/arm/mach-msm/dma.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <linux/err.h> | 17 | #include <linux/err.h> |
18 | #include <linux/io.h> | 18 | #include <linux/io.h> |
19 | #include <linux/interrupt.h> | 19 | #include <linux/interrupt.h> |
20 | #include <linux/completion.h> | ||
20 | #include <mach/dma.h> | 21 | #include <mach/dma.h> |
21 | 22 | ||
22 | #define MSM_DMOV_CHANNEL_COUNT 16 | 23 | #define MSM_DMOV_CHANNEL_COUNT 16 |
diff --git a/arch/arm/mach-mx3/mach-mx31lilly.c b/arch/arm/mach-mx3/mach-mx31lilly.c index d3d5877c750e..b2c7f512070f 100644 --- a/arch/arm/mach-mx3/mach-mx31lilly.c +++ b/arch/arm/mach-mx3/mach-mx31lilly.c | |||
@@ -115,6 +115,8 @@ static struct platform_device physmap_flash_device = { | |||
115 | 115 | ||
116 | /* USB */ | 116 | /* USB */ |
117 | 117 | ||
118 | #if defined(CONFIG_USB_ULPI) | ||
119 | |||
118 | #define USB_PAD_CFG (PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST | PAD_CTL_HYS_CMOS | \ | 120 | #define USB_PAD_CFG (PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST | PAD_CTL_HYS_CMOS | \ |
119 | PAD_CTL_ODE_CMOS | PAD_CTL_100K_PU) | 121 | PAD_CTL_ODE_CMOS | PAD_CTL_100K_PU) |
120 | 122 | ||
@@ -244,10 +246,20 @@ static struct mxc_usbh_platform_data usbh2_pdata = { | |||
244 | .flags = MXC_EHCI_POWER_PINS_ENABLED, | 246 | .flags = MXC_EHCI_POWER_PINS_ENABLED, |
245 | }; | 247 | }; |
246 | 248 | ||
247 | static struct platform_device *devices[] __initdata = { | 249 | static void lilly1131_usb_init(void) |
248 | &smsc91x_device, | 250 | { |
249 | &physmap_flash_device, | 251 | usbotg_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops, |
250 | }; | 252 | USB_OTG_DRV_VBUS | USB_OTG_DRV_VBUS_EXT); |
253 | usbh2_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops, | ||
254 | USB_OTG_DRV_VBUS | USB_OTG_DRV_VBUS_EXT); | ||
255 | |||
256 | mxc_register_device(&mxc_usbh1, &usbh1_pdata); | ||
257 | mxc_register_device(&mxc_usbh2, &usbh2_pdata); | ||
258 | } | ||
259 | |||
260 | #else | ||
261 | static inline void lilly1131_usb_init(void) {} | ||
262 | #endif /* CONFIG_USB_ULPI */ | ||
251 | 263 | ||
252 | /* SPI */ | 264 | /* SPI */ |
253 | 265 | ||
@@ -279,6 +291,11 @@ static struct spi_board_info mc13783_dev __initdata = { | |||
279 | .platform_data = &mc13783_pdata, | 291 | .platform_data = &mc13783_pdata, |
280 | }; | 292 | }; |
281 | 293 | ||
294 | static struct platform_device *devices[] __initdata = { | ||
295 | &smsc91x_device, | ||
296 | &physmap_flash_device, | ||
297 | }; | ||
298 | |||
282 | static int mx31lilly_baseboard; | 299 | static int mx31lilly_baseboard; |
283 | core_param(mx31lilly_baseboard, mx31lilly_baseboard, int, 0444); | 300 | core_param(mx31lilly_baseboard, mx31lilly_baseboard, int, 0444); |
284 | 301 | ||
@@ -321,13 +338,7 @@ static void __init mx31lilly_board_init(void) | |||
321 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 338 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
322 | 339 | ||
323 | /* USB */ | 340 | /* USB */ |
324 | usbotg_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops, | 341 | lilly1131_usb_init(); |
325 | USB_OTG_DRV_VBUS | USB_OTG_DRV_VBUS_EXT); | ||
326 | usbh2_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops, | ||
327 | USB_OTG_DRV_VBUS | USB_OTG_DRV_VBUS_EXT); | ||
328 | |||
329 | mxc_register_device(&mxc_usbh1, &usbh1_pdata); | ||
330 | mxc_register_device(&mxc_usbh2, &usbh2_pdata); | ||
331 | } | 342 | } |
332 | 343 | ||
333 | static void __init mx31lilly_timer_init(void) | 344 | static void __init mx31lilly_timer_init(void) |
diff --git a/arch/arm/mach-nomadik/clock.c b/arch/arm/mach-nomadik/clock.c index 2c471fc451d7..f035f4185274 100644 --- a/arch/arm/mach-nomadik/clock.c +++ b/arch/arm/mach-nomadik/clock.c | |||
@@ -32,7 +32,10 @@ void clk_disable(struct clk *clk) | |||
32 | } | 32 | } |
33 | EXPORT_SYMBOL(clk_disable); | 33 | EXPORT_SYMBOL(clk_disable); |
34 | 34 | ||
35 | /* We have a fixed clock alone, for now */ | 35 | static struct clk clk_24 = { |
36 | .rate = 2400000, | ||
37 | }; | ||
38 | |||
36 | static struct clk clk_48 = { | 39 | static struct clk clk_48 = { |
37 | .rate = 48 * 1000 * 1000, | 40 | .rate = 48 * 1000 * 1000, |
38 | }; | 41 | }; |
@@ -50,6 +53,8 @@ static struct clk clk_default; | |||
50 | } | 53 | } |
51 | 54 | ||
52 | static struct clk_lookup lookups[] = { | 55 | static struct clk_lookup lookups[] = { |
56 | CLK(&clk_24, "mtu0"), | ||
57 | CLK(&clk_24, "mtu1"), | ||
53 | CLK(&clk_48, "uart0"), | 58 | CLK(&clk_48, "uart0"), |
54 | CLK(&clk_48, "uart1"), | 59 | CLK(&clk_48, "uart1"), |
55 | CLK(&clk_default, "gpio.0"), | 60 | CLK(&clk_default, "gpio.0"), |
@@ -59,10 +64,8 @@ static struct clk_lookup lookups[] = { | |||
59 | CLK(&clk_default, "rng"), | 64 | CLK(&clk_default, "rng"), |
60 | }; | 65 | }; |
61 | 66 | ||
62 | static int __init clk_init(void) | 67 | int __init clk_init(void) |
63 | { | 68 | { |
64 | clkdev_add_table(lookups, ARRAY_SIZE(lookups)); | 69 | clkdev_add_table(lookups, ARRAY_SIZE(lookups)); |
65 | return 0; | 70 | return 0; |
66 | } | 71 | } |
67 | |||
68 | arch_initcall(clk_init); | ||
diff --git a/arch/arm/mach-nomadik/clock.h b/arch/arm/mach-nomadik/clock.h index 5563985a2cc7..78da2e7c3985 100644 --- a/arch/arm/mach-nomadik/clock.h +++ b/arch/arm/mach-nomadik/clock.h | |||
@@ -11,3 +11,5 @@ | |||
11 | struct clk { | 11 | struct clk { |
12 | unsigned long rate; | 12 | unsigned long rate; |
13 | }; | 13 | }; |
14 | |||
15 | int __init clk_init(void); | ||
diff --git a/arch/arm/mach-nomadik/cpu-8815.c b/arch/arm/mach-nomadik/cpu-8815.c index 91c3c901b469..ac58e3b03b1a 100644 --- a/arch/arm/mach-nomadik/cpu-8815.c +++ b/arch/arm/mach-nomadik/cpu-8815.c | |||
@@ -31,6 +31,8 @@ | |||
31 | #include <asm/cacheflush.h> | 31 | #include <asm/cacheflush.h> |
32 | #include <asm/hardware/cache-l2x0.h> | 32 | #include <asm/hardware/cache-l2x0.h> |
33 | 33 | ||
34 | #include "clock.h" | ||
35 | |||
34 | #define __MEM_4K_RESOURCE(x) \ | 36 | #define __MEM_4K_RESOURCE(x) \ |
35 | .res = {.start = (x), .end = (x) + SZ_4K - 1, .flags = IORESOURCE_MEM} | 37 | .res = {.start = (x), .end = (x) + SZ_4K - 1, .flags = IORESOURCE_MEM} |
36 | 38 | ||
@@ -143,6 +145,12 @@ void __init cpu8815_init_irq(void) | |||
143 | /* This modified VIC cell has two register blocks, at 0 and 0x20 */ | 145 | /* This modified VIC cell has two register blocks, at 0 and 0x20 */ |
144 | vic_init(io_p2v(NOMADIK_IC_BASE + 0x00), IRQ_VIC_START + 0, ~0, 0); | 146 | vic_init(io_p2v(NOMADIK_IC_BASE + 0x00), IRQ_VIC_START + 0, ~0, 0); |
145 | vic_init(io_p2v(NOMADIK_IC_BASE + 0x20), IRQ_VIC_START + 32, ~0, 0); | 147 | vic_init(io_p2v(NOMADIK_IC_BASE + 0x20), IRQ_VIC_START + 32, ~0, 0); |
148 | |||
149 | /* | ||
150 | * Init clocks here so that they are available for system timer | ||
151 | * initialization. | ||
152 | */ | ||
153 | clk_init(); | ||
146 | } | 154 | } |
147 | 155 | ||
148 | /* | 156 | /* |
diff --git a/arch/arm/mach-omap2/board-omap3stalker.c b/arch/arm/mach-omap2/board-omap3stalker.c index f848ba8dbc16..a04cffd691c5 100644 --- a/arch/arm/mach-omap2/board-omap3stalker.c +++ b/arch/arm/mach-omap2/board-omap3stalker.c | |||
@@ -538,9 +538,7 @@ static void ads7846_dev_init(void) | |||
538 | printk(KERN_ERR "can't get ads7846 pen down GPIO\n"); | 538 | printk(KERN_ERR "can't get ads7846 pen down GPIO\n"); |
539 | 539 | ||
540 | gpio_direction_input(OMAP3_STALKER_TS_GPIO); | 540 | gpio_direction_input(OMAP3_STALKER_TS_GPIO); |
541 | 541 | gpio_set_debounce(OMAP3_STALKER_TS_GPIO, 310); | |
542 | omap_set_gpio_debounce(OMAP3_STALKER_TS_GPIO, 1); | ||
543 | omap_set_gpio_debounce_time(OMAP3_STALKER_TS_GPIO, 0xa); | ||
544 | } | 542 | } |
545 | 543 | ||
546 | static int ads7846_get_pendown_state(void) | 544 | static int ads7846_get_pendown_state(void) |
diff --git a/arch/arm/mach-omap2/clock44xx_data.c b/arch/arm/mach-omap2/clock44xx_data.c index 02804224517b..e10db7a90cb2 100644 --- a/arch/arm/mach-omap2/clock44xx_data.c +++ b/arch/arm/mach-omap2/clock44xx_data.c | |||
@@ -1369,6 +1369,7 @@ static struct clk emif1_ick = { | |||
1369 | .ops = &clkops_omap2_dflt, | 1369 | .ops = &clkops_omap2_dflt, |
1370 | .enable_reg = OMAP4430_CM_MEMIF_EMIF_1_CLKCTRL, | 1370 | .enable_reg = OMAP4430_CM_MEMIF_EMIF_1_CLKCTRL, |
1371 | .enable_bit = OMAP4430_MODULEMODE_HWCTRL, | 1371 | .enable_bit = OMAP4430_MODULEMODE_HWCTRL, |
1372 | .flags = ENABLE_ON_INIT, | ||
1372 | .clkdm_name = "l3_emif_clkdm", | 1373 | .clkdm_name = "l3_emif_clkdm", |
1373 | .parent = &ddrphy_ck, | 1374 | .parent = &ddrphy_ck, |
1374 | .recalc = &followparent_recalc, | 1375 | .recalc = &followparent_recalc, |
@@ -1379,6 +1380,7 @@ static struct clk emif2_ick = { | |||
1379 | .ops = &clkops_omap2_dflt, | 1380 | .ops = &clkops_omap2_dflt, |
1380 | .enable_reg = OMAP4430_CM_MEMIF_EMIF_2_CLKCTRL, | 1381 | .enable_reg = OMAP4430_CM_MEMIF_EMIF_2_CLKCTRL, |
1381 | .enable_bit = OMAP4430_MODULEMODE_HWCTRL, | 1382 | .enable_bit = OMAP4430_MODULEMODE_HWCTRL, |
1383 | .flags = ENABLE_ON_INIT, | ||
1382 | .clkdm_name = "l3_emif_clkdm", | 1384 | .clkdm_name = "l3_emif_clkdm", |
1383 | .parent = &ddrphy_ck, | 1385 | .parent = &ddrphy_ck, |
1384 | .recalc = &followparent_recalc, | 1386 | .recalc = &followparent_recalc, |
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index 95c9a5f774e1..b7a4133267d8 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c | |||
@@ -409,10 +409,11 @@ static int _init_main_clk(struct omap_hwmod *oh) | |||
409 | return 0; | 409 | return 0; |
410 | 410 | ||
411 | oh->_clk = omap_clk_get_by_name(oh->main_clk); | 411 | oh->_clk = omap_clk_get_by_name(oh->main_clk); |
412 | if (!oh->_clk) | 412 | if (!oh->_clk) { |
413 | pr_warning("omap_hwmod: %s: cannot clk_get main_clk %s\n", | 413 | pr_warning("omap_hwmod: %s: cannot clk_get main_clk %s\n", |
414 | oh->name, oh->main_clk); | 414 | oh->name, oh->main_clk); |
415 | return -EINVAL; | 415 | return -EINVAL; |
416 | } | ||
416 | 417 | ||
417 | if (!oh->_clk->clkdm) | 418 | if (!oh->_clk->clkdm) |
418 | pr_warning("omap_hwmod: %s: missing clockdomain for %s.\n", | 419 | pr_warning("omap_hwmod: %s: missing clockdomain for %s.\n", |
@@ -444,10 +445,11 @@ static int _init_interface_clks(struct omap_hwmod *oh) | |||
444 | continue; | 445 | continue; |
445 | 446 | ||
446 | c = omap_clk_get_by_name(os->clk); | 447 | c = omap_clk_get_by_name(os->clk); |
447 | if (!c) | 448 | if (!c) { |
448 | pr_warning("omap_hwmod: %s: cannot clk_get interface_clk %s\n", | 449 | pr_warning("omap_hwmod: %s: cannot clk_get interface_clk %s\n", |
449 | oh->name, os->clk); | 450 | oh->name, os->clk); |
450 | ret = -EINVAL; | 451 | ret = -EINVAL; |
452 | } | ||
451 | os->_clk = c; | 453 | os->_clk = c; |
452 | } | 454 | } |
453 | 455 | ||
@@ -470,10 +472,11 @@ static int _init_opt_clks(struct omap_hwmod *oh) | |||
470 | 472 | ||
471 | for (i = oh->opt_clks_cnt, oc = oh->opt_clks; i > 0; i--, oc++) { | 473 | for (i = oh->opt_clks_cnt, oc = oh->opt_clks; i > 0; i--, oc++) { |
472 | c = omap_clk_get_by_name(oc->clk); | 474 | c = omap_clk_get_by_name(oc->clk); |
473 | if (!c) | 475 | if (!c) { |
474 | pr_warning("omap_hwmod: %s: cannot clk_get opt_clk %s\n", | 476 | pr_warning("omap_hwmod: %s: cannot clk_get opt_clk %s\n", |
475 | oh->name, oc->clk); | 477 | oh->name, oc->clk); |
476 | ret = -EINVAL; | 478 | ret = -EINVAL; |
479 | } | ||
477 | oc->_clk = c; | 480 | oc->_clk = c; |
478 | } | 481 | } |
479 | 482 | ||
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index 2e967716cc3f..b88737fd6cfe 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c | |||
@@ -99,7 +99,7 @@ static void omap3_enable_io_chain(void) | |||
99 | /* Do a readback to assure write has been done */ | 99 | /* Do a readback to assure write has been done */ |
100 | prm_read_mod_reg(WKUP_MOD, PM_WKEN); | 100 | prm_read_mod_reg(WKUP_MOD, PM_WKEN); |
101 | 101 | ||
102 | while (!(prm_read_mod_reg(WKUP_MOD, PM_WKST) & | 102 | while (!(prm_read_mod_reg(WKUP_MOD, PM_WKEN) & |
103 | OMAP3430_ST_IO_CHAIN_MASK)) { | 103 | OMAP3430_ST_IO_CHAIN_MASK)) { |
104 | timeout++; | 104 | timeout++; |
105 | if (timeout > 1000) { | 105 | if (timeout > 1000) { |
@@ -108,7 +108,7 @@ static void omap3_enable_io_chain(void) | |||
108 | return; | 108 | return; |
109 | } | 109 | } |
110 | prm_set_mod_reg_bits(OMAP3430_ST_IO_CHAIN_MASK, | 110 | prm_set_mod_reg_bits(OMAP3430_ST_IO_CHAIN_MASK, |
111 | WKUP_MOD, PM_WKST); | 111 | WKUP_MOD, PM_WKEN); |
112 | } | 112 | } |
113 | } | 113 | } |
114 | } | 114 | } |
diff --git a/arch/arm/mach-omap2/usb-ehci.c b/arch/arm/mach-omap2/usb-ehci.c index c68f799e83c5..d72d1ac30333 100644 --- a/arch/arm/mach-omap2/usb-ehci.c +++ b/arch/arm/mach-omap2/usb-ehci.c | |||
@@ -20,6 +20,8 @@ | |||
20 | #include <linux/delay.h> | 20 | #include <linux/delay.h> |
21 | #include <linux/platform_device.h> | 21 | #include <linux/platform_device.h> |
22 | #include <linux/clk.h> | 22 | #include <linux/clk.h> |
23 | #include <linux/dma-mapping.h> | ||
24 | |||
23 | #include <asm/io.h> | 25 | #include <asm/io.h> |
24 | #include <plat/mux.h> | 26 | #include <plat/mux.h> |
25 | 27 | ||
diff --git a/arch/arm/mach-pxa/mioa701.c b/arch/arm/mach-pxa/mioa701.c index d60db87dde08..fa6a708b4099 100644 --- a/arch/arm/mach-pxa/mioa701.c +++ b/arch/arm/mach-pxa/mioa701.c | |||
@@ -697,7 +697,7 @@ static struct i2c_board_info __initdata mioa701_pi2c_devices[] = { | |||
697 | }; | 697 | }; |
698 | 698 | ||
699 | /* Board I2C devices. */ | 699 | /* Board I2C devices. */ |
700 | static struct i2c_board_info __initdata mioa701_i2c_devices[] = { | 700 | static struct i2c_board_info mioa701_i2c_devices[] = { |
701 | { | 701 | { |
702 | I2C_BOARD_INFO("mt9m111", 0x5d), | 702 | I2C_BOARD_INFO("mt9m111", 0x5d), |
703 | }, | 703 | }, |
diff --git a/arch/arm/mach-pxa/palmtc.c b/arch/arm/mach-pxa/palmtc.c index 033b567e50bb..ce1104d1bc17 100644 --- a/arch/arm/mach-pxa/palmtc.c +++ b/arch/arm/mach-pxa/palmtc.c | |||
@@ -263,11 +263,11 @@ const struct matrix_keymap_data palmtc_keymap_data = { | |||
263 | .keymap_size = ARRAY_SIZE(palmtc_matrix_keys), | 263 | .keymap_size = ARRAY_SIZE(palmtc_matrix_keys), |
264 | }; | 264 | }; |
265 | 265 | ||
266 | const static unsigned int palmtc_keypad_row_gpios[] = { | 266 | static const unsigned int palmtc_keypad_row_gpios[] = { |
267 | 0, 9, 10, 11 | 267 | 0, 9, 10, 11 |
268 | }; | 268 | }; |
269 | 269 | ||
270 | const static unsigned int palmtc_keypad_col_gpios[] = { | 270 | static const unsigned int palmtc_keypad_col_gpios[] = { |
271 | 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 79, 80 | 271 | 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 79, 80 |
272 | }; | 272 | }; |
273 | 273 | ||
diff --git a/arch/arm/mach-pxa/spitz.c b/arch/arm/mach-pxa/spitz.c index 4d2413ed0ffa..c1048a35f187 100644 --- a/arch/arm/mach-pxa/spitz.c +++ b/arch/arm/mach-pxa/spitz.c | |||
@@ -818,6 +818,9 @@ static struct i2c_board_info akita_i2c_board_info[] = { | |||
818 | .type = "max7310", | 818 | .type = "max7310", |
819 | .addr = 0x18, | 819 | .addr = 0x18, |
820 | .platform_data = &akita_ioexp, | 820 | .platform_data = &akita_ioexp, |
821 | }, { | ||
822 | .type = "wm8750", | ||
823 | .addr = 0x1b, | ||
821 | }, | 824 | }, |
822 | }; | 825 | }; |
823 | 826 | ||
diff --git a/arch/arm/mach-pxa/z2.c b/arch/arm/mach-pxa/z2.c index f5d1ae3db3a4..d303c6929d32 100644 --- a/arch/arm/mach-pxa/z2.c +++ b/arch/arm/mach-pxa/z2.c | |||
@@ -3,8 +3,9 @@ | |||
3 | * | 3 | * |
4 | * Support for the Zipit Z2 Handheld device. | 4 | * Support for the Zipit Z2 Handheld device. |
5 | * | 5 | * |
6 | * Author: Ken McGuire | 6 | * Copyright (C) 2009-2010 Marek Vasut <marek.vasut@gmail.com> |
7 | * Created: Jan 25, 2009 | 7 | * |
8 | * Based on research and code by: Ken McGuire | ||
8 | * Based on mainstone.c as modified for the Zipit Z2. | 9 | * Based on mainstone.c as modified for the Zipit Z2. |
9 | * | 10 | * |
10 | * This program is free software; you can redistribute it and/or modify | 11 | * This program is free software; you can redistribute it and/or modify |
@@ -157,21 +158,14 @@ static struct mtd_partition z2_flash_parts[] = { | |||
157 | { | 158 | { |
158 | .name = "U-Boot Bootloader", | 159 | .name = "U-Boot Bootloader", |
159 | .offset = 0x0, | 160 | .offset = 0x0, |
160 | .size = 0x20000, | 161 | .size = 0x40000, |
161 | }, | 162 | }, { |
162 | { | ||
163 | .name = "Linux Kernel", | ||
164 | .offset = 0x20000, | ||
165 | .size = 0x220000, | ||
166 | }, | ||
167 | { | ||
168 | .name = "Filesystem", | ||
169 | .offset = 0x240000, | ||
170 | .size = 0x5b0000, | ||
171 | }, | ||
172 | { | ||
173 | .name = "U-Boot Environment", | 163 | .name = "U-Boot Environment", |
174 | .offset = 0x7f0000, | 164 | .offset = 0x40000, |
165 | .size = 0x60000, | ||
166 | }, { | ||
167 | .name = "Flash", | ||
168 | .offset = 0x60000, | ||
175 | .size = MTDPART_SIZ_FULL, | 169 | .size = MTDPART_SIZ_FULL, |
176 | }, | 170 | }, |
177 | }; | 171 | }; |
diff --git a/arch/arm/mach-realview/Kconfig b/arch/arm/mach-realview/Kconfig index ee5e392430e8..b4575ae9648e 100644 --- a/arch/arm/mach-realview/Kconfig +++ b/arch/arm/mach-realview/Kconfig | |||
@@ -18,6 +18,7 @@ config REALVIEW_EB_ARM11MP | |||
18 | bool "Support ARM11MPCore tile" | 18 | bool "Support ARM11MPCore tile" |
19 | depends on MACH_REALVIEW_EB | 19 | depends on MACH_REALVIEW_EB |
20 | select CPU_V6 | 20 | select CPU_V6 |
21 | select ARCH_HAS_BARRIERS if SMP | ||
21 | help | 22 | help |
22 | Enable support for the ARM11MPCore tile on the Realview platform. | 23 | Enable support for the ARM11MPCore tile on the Realview platform. |
23 | 24 | ||
@@ -35,6 +36,7 @@ config MACH_REALVIEW_PB11MP | |||
35 | select CPU_V6 | 36 | select CPU_V6 |
36 | select ARM_GIC | 37 | select ARM_GIC |
37 | select HAVE_PATA_PLATFORM | 38 | select HAVE_PATA_PLATFORM |
39 | select ARCH_HAS_BARRIERS if SMP | ||
38 | help | 40 | help |
39 | Include support for the ARM(R) RealView MPCore Platform Baseboard. | 41 | Include support for the ARM(R) RealView MPCore Platform Baseboard. |
40 | PB11MPCore is a platform with an on-board ARM11MPCore and has | 42 | PB11MPCore is a platform with an on-board ARM11MPCore and has |
diff --git a/arch/arm/mach-realview/include/mach/barriers.h b/arch/arm/mach-realview/include/mach/barriers.h new file mode 100644 index 000000000000..0c5d749d7b5f --- /dev/null +++ b/arch/arm/mach-realview/include/mach/barriers.h | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | * Barriers redefined for RealView ARM11MPCore platforms with L220 cache | ||
3 | * controller to work around hardware errata causing the outer_sync() | ||
4 | * operation to deadlock the system. | ||
5 | */ | ||
6 | #define mb() dsb() | ||
7 | #define rmb() dmb() | ||
8 | #define wmb() mb() | ||
diff --git a/arch/arm/mach-realview/realview_eb.c b/arch/arm/mach-realview/realview_eb.c index 422ccd70d5f5..4425018fab82 100644 --- a/arch/arm/mach-realview/realview_eb.c +++ b/arch/arm/mach-realview/realview_eb.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <asm/leds.h> | 32 | #include <asm/leds.h> |
33 | #include <asm/mach-types.h> | 33 | #include <asm/mach-types.h> |
34 | #include <asm/pmu.h> | 34 | #include <asm/pmu.h> |
35 | #include <asm/pgtable.h> | ||
35 | #include <asm/hardware/gic.h> | 36 | #include <asm/hardware/gic.h> |
36 | #include <asm/hardware/cache-l2x0.h> | 37 | #include <asm/hardware/cache-l2x0.h> |
37 | #include <asm/localtimer.h> | 38 | #include <asm/localtimer.h> |
@@ -457,7 +458,7 @@ static void __init realview_eb_init(void) | |||
457 | 458 | ||
458 | MACHINE_START(REALVIEW_EB, "ARM-RealView EB") | 459 | MACHINE_START(REALVIEW_EB, "ARM-RealView EB") |
459 | /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ | 460 | /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ |
460 | .phys_io = REALVIEW_EB_UART0_BASE, | 461 | .phys_io = REALVIEW_EB_UART0_BASE & SECTION_MASK, |
461 | .io_pg_offst = (IO_ADDRESS(REALVIEW_EB_UART0_BASE) >> 18) & 0xfffc, | 462 | .io_pg_offst = (IO_ADDRESS(REALVIEW_EB_UART0_BASE) >> 18) & 0xfffc, |
462 | .boot_params = PHYS_OFFSET + 0x00000100, | 463 | .boot_params = PHYS_OFFSET + 0x00000100, |
463 | .fixup = realview_fixup, | 464 | .fixup = realview_fixup, |
diff --git a/arch/arm/mach-realview/realview_pb1176.c b/arch/arm/mach-realview/realview_pb1176.c index 96568ebfa2bb..099a1f125cf8 100644 --- a/arch/arm/mach-realview/realview_pb1176.c +++ b/arch/arm/mach-realview/realview_pb1176.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <asm/leds.h> | 32 | #include <asm/leds.h> |
33 | #include <asm/mach-types.h> | 33 | #include <asm/mach-types.h> |
34 | #include <asm/pmu.h> | 34 | #include <asm/pmu.h> |
35 | #include <asm/pgtable.h> | ||
35 | #include <asm/hardware/gic.h> | 36 | #include <asm/hardware/gic.h> |
36 | #include <asm/hardware/cache-l2x0.h> | 37 | #include <asm/hardware/cache-l2x0.h> |
37 | 38 | ||
@@ -351,7 +352,7 @@ static void __init realview_pb1176_init(void) | |||
351 | 352 | ||
352 | MACHINE_START(REALVIEW_PB1176, "ARM-RealView PB1176") | 353 | MACHINE_START(REALVIEW_PB1176, "ARM-RealView PB1176") |
353 | /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ | 354 | /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ |
354 | .phys_io = REALVIEW_PB1176_UART0_BASE, | 355 | .phys_io = REALVIEW_PB1176_UART0_BASE & SECTION_MASK, |
355 | .io_pg_offst = (IO_ADDRESS(REALVIEW_PB1176_UART0_BASE) >> 18) & 0xfffc, | 356 | .io_pg_offst = (IO_ADDRESS(REALVIEW_PB1176_UART0_BASE) >> 18) & 0xfffc, |
356 | .boot_params = PHYS_OFFSET + 0x00000100, | 357 | .boot_params = PHYS_OFFSET + 0x00000100, |
357 | .fixup = realview_pb1176_fixup, | 358 | .fixup = realview_pb1176_fixup, |
diff --git a/arch/arm/mach-realview/realview_pb11mp.c b/arch/arm/mach-realview/realview_pb11mp.c index 7fbefbbebaf0..0e07a5ccb75f 100644 --- a/arch/arm/mach-realview/realview_pb11mp.c +++ b/arch/arm/mach-realview/realview_pb11mp.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <asm/leds.h> | 32 | #include <asm/leds.h> |
33 | #include <asm/mach-types.h> | 33 | #include <asm/mach-types.h> |
34 | #include <asm/pmu.h> | 34 | #include <asm/pmu.h> |
35 | #include <asm/pgtable.h> | ||
35 | #include <asm/hardware/gic.h> | 36 | #include <asm/hardware/gic.h> |
36 | #include <asm/hardware/cache-l2x0.h> | 37 | #include <asm/hardware/cache-l2x0.h> |
37 | #include <asm/localtimer.h> | 38 | #include <asm/localtimer.h> |
@@ -373,7 +374,7 @@ static void __init realview_pb11mp_init(void) | |||
373 | 374 | ||
374 | MACHINE_START(REALVIEW_PB11MP, "ARM-RealView PB11MPCore") | 375 | MACHINE_START(REALVIEW_PB11MP, "ARM-RealView PB11MPCore") |
375 | /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ | 376 | /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ |
376 | .phys_io = REALVIEW_PB11MP_UART0_BASE, | 377 | .phys_io = REALVIEW_PB11MP_UART0_BASE & SECTION_MASK, |
377 | .io_pg_offst = (IO_ADDRESS(REALVIEW_PB11MP_UART0_BASE) >> 18) & 0xfffc, | 378 | .io_pg_offst = (IO_ADDRESS(REALVIEW_PB11MP_UART0_BASE) >> 18) & 0xfffc, |
378 | .boot_params = PHYS_OFFSET + 0x00000100, | 379 | .boot_params = PHYS_OFFSET + 0x00000100, |
379 | .fixup = realview_fixup, | 380 | .fixup = realview_fixup, |
diff --git a/arch/arm/mach-realview/realview_pba8.c b/arch/arm/mach-realview/realview_pba8.c index d3c113b3dfce..ac2f06f1ca50 100644 --- a/arch/arm/mach-realview/realview_pba8.c +++ b/arch/arm/mach-realview/realview_pba8.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <asm/leds.h> | 31 | #include <asm/leds.h> |
32 | #include <asm/mach-types.h> | 32 | #include <asm/mach-types.h> |
33 | #include <asm/pmu.h> | 33 | #include <asm/pmu.h> |
34 | #include <asm/pgtable.h> | ||
34 | #include <asm/hardware/gic.h> | 35 | #include <asm/hardware/gic.h> |
35 | 36 | ||
36 | #include <asm/mach/arch.h> | 37 | #include <asm/mach/arch.h> |
@@ -323,7 +324,7 @@ static void __init realview_pba8_init(void) | |||
323 | 324 | ||
324 | MACHINE_START(REALVIEW_PBA8, "ARM-RealView PB-A8") | 325 | MACHINE_START(REALVIEW_PBA8, "ARM-RealView PB-A8") |
325 | /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ | 326 | /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ |
326 | .phys_io = REALVIEW_PBA8_UART0_BASE, | 327 | .phys_io = REALVIEW_PBA8_UART0_BASE & SECTION_MASK, |
327 | .io_pg_offst = (IO_ADDRESS(REALVIEW_PBA8_UART0_BASE) >> 18) & 0xfffc, | 328 | .io_pg_offst = (IO_ADDRESS(REALVIEW_PBA8_UART0_BASE) >> 18) & 0xfffc, |
328 | .boot_params = PHYS_OFFSET + 0x00000100, | 329 | .boot_params = PHYS_OFFSET + 0x00000100, |
329 | .fixup = realview_fixup, | 330 | .fixup = realview_fixup, |
diff --git a/arch/arm/mach-realview/realview_pbx.c b/arch/arm/mach-realview/realview_pbx.c index a235ba30996b..08fd683adc4c 100644 --- a/arch/arm/mach-realview/realview_pbx.c +++ b/arch/arm/mach-realview/realview_pbx.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <asm/mach-types.h> | 31 | #include <asm/mach-types.h> |
32 | #include <asm/pmu.h> | 32 | #include <asm/pmu.h> |
33 | #include <asm/smp_twd.h> | 33 | #include <asm/smp_twd.h> |
34 | #include <asm/pgtable.h> | ||
34 | #include <asm/hardware/gic.h> | 35 | #include <asm/hardware/gic.h> |
35 | #include <asm/hardware/cache-l2x0.h> | 36 | #include <asm/hardware/cache-l2x0.h> |
36 | 37 | ||
@@ -409,7 +410,7 @@ static void __init realview_pbx_init(void) | |||
409 | 410 | ||
410 | MACHINE_START(REALVIEW_PBX, "ARM-RealView PBX") | 411 | MACHINE_START(REALVIEW_PBX, "ARM-RealView PBX") |
411 | /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ | 412 | /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ |
412 | .phys_io = REALVIEW_PBX_UART0_BASE, | 413 | .phys_io = REALVIEW_PBX_UART0_BASE & SECTION_MASK, |
413 | .io_pg_offst = (IO_ADDRESS(REALVIEW_PBX_UART0_BASE) >> 18) & 0xfffc, | 414 | .io_pg_offst = (IO_ADDRESS(REALVIEW_PBX_UART0_BASE) >> 18) & 0xfffc, |
414 | .boot_params = PHYS_OFFSET + 0x00000100, | 415 | .boot_params = PHYS_OFFSET + 0x00000100, |
415 | .fixup = realview_pbx_fixup, | 416 | .fixup = realview_pbx_fixup, |
diff --git a/arch/arm/mach-s5p6442/clock.c b/arch/arm/mach-s5p6442/clock.c index 3aadbf42c112..087e57f20ad5 100644 --- a/arch/arm/mach-s5p6442/clock.c +++ b/arch/arm/mach-s5p6442/clock.c | |||
@@ -294,7 +294,7 @@ void __init_or_cpufreq s5p6442_setup_clocks(void) | |||
294 | mpll = s5p_get_pll45xx(xtal, __raw_readl(S5P_MPLL_CON), pll_4502); | 294 | mpll = s5p_get_pll45xx(xtal, __raw_readl(S5P_MPLL_CON), pll_4502); |
295 | epll = s5p_get_pll45xx(xtal, __raw_readl(S5P_EPLL_CON), pll_4500); | 295 | epll = s5p_get_pll45xx(xtal, __raw_readl(S5P_EPLL_CON), pll_4500); |
296 | 296 | ||
297 | printk(KERN_INFO "S5P6440: PLL settings, A=%ld, M=%ld, E=%ld", | 297 | printk(KERN_INFO "S5P6442: PLL settings, A=%ld, M=%ld, E=%ld", |
298 | apll, mpll, epll); | 298 | apll, mpll, epll); |
299 | 299 | ||
300 | clk_fout_apll.rate = apll; | 300 | clk_fout_apll.rate = apll; |
diff --git a/arch/arm/mach-s5pv210/clock.c b/arch/arm/mach-s5pv210/clock.c index 154bca4abc09..af91fefef2c6 100644 --- a/arch/arm/mach-s5pv210/clock.c +++ b/arch/arm/mach-s5pv210/clock.c | |||
@@ -183,6 +183,11 @@ static int s5pv210_clk_mask0_ctrl(struct clk *clk, int enable) | |||
183 | return s5p_gatectrl(S5P_CLK_SRC_MASK0, clk, enable); | 183 | return s5p_gatectrl(S5P_CLK_SRC_MASK0, clk, enable); |
184 | } | 184 | } |
185 | 185 | ||
186 | static int s5pv210_clk_mask1_ctrl(struct clk *clk, int enable) | ||
187 | { | ||
188 | return s5p_gatectrl(S5P_CLK_SRC_MASK1, clk, enable); | ||
189 | } | ||
190 | |||
186 | static struct clk clk_sclk_hdmi27m = { | 191 | static struct clk clk_sclk_hdmi27m = { |
187 | .name = "sclk_hdmi27m", | 192 | .name = "sclk_hdmi27m", |
188 | .id = -1, | 193 | .id = -1, |
@@ -406,14 +411,14 @@ static struct clk init_clocks_disable[] = { | |||
406 | .id = 0, | 411 | .id = 0, |
407 | .parent = &clk_p, | 412 | .parent = &clk_p, |
408 | .enable = s5pv210_clk_ip3_ctrl, | 413 | .enable = s5pv210_clk_ip3_ctrl, |
409 | .ctrlbit = (1<<4), | 414 | .ctrlbit = (1 << 5), |
410 | }, { | 415 | }, { |
411 | .name = "i2s_v32", | 416 | .name = "i2s_v32", |
412 | .id = 1, | 417 | .id = 1, |
413 | .parent = &clk_p, | 418 | .parent = &clk_p, |
414 | .enable = s5pv210_clk_ip3_ctrl, | 419 | .enable = s5pv210_clk_ip3_ctrl, |
415 | .ctrlbit = (1<<4), | 420 | .ctrlbit = (1 << 6), |
416 | } | 421 | }, |
417 | }; | 422 | }; |
418 | 423 | ||
419 | static struct clk init_clocks[] = { | 424 | static struct clk init_clocks[] = { |
@@ -429,25 +434,25 @@ static struct clk init_clocks[] = { | |||
429 | .id = 0, | 434 | .id = 0, |
430 | .parent = &clk_pclk_psys.clk, | 435 | .parent = &clk_pclk_psys.clk, |
431 | .enable = s5pv210_clk_ip3_ctrl, | 436 | .enable = s5pv210_clk_ip3_ctrl, |
432 | .ctrlbit = (1<<7), | 437 | .ctrlbit = (1 << 17), |
433 | }, { | 438 | }, { |
434 | .name = "uart", | 439 | .name = "uart", |
435 | .id = 1, | 440 | .id = 1, |
436 | .parent = &clk_pclk_psys.clk, | 441 | .parent = &clk_pclk_psys.clk, |
437 | .enable = s5pv210_clk_ip3_ctrl, | 442 | .enable = s5pv210_clk_ip3_ctrl, |
438 | .ctrlbit = (1<<8), | 443 | .ctrlbit = (1 << 18), |
439 | }, { | 444 | }, { |
440 | .name = "uart", | 445 | .name = "uart", |
441 | .id = 2, | 446 | .id = 2, |
442 | .parent = &clk_pclk_psys.clk, | 447 | .parent = &clk_pclk_psys.clk, |
443 | .enable = s5pv210_clk_ip3_ctrl, | 448 | .enable = s5pv210_clk_ip3_ctrl, |
444 | .ctrlbit = (1<<9), | 449 | .ctrlbit = (1 << 19), |
445 | }, { | 450 | }, { |
446 | .name = "uart", | 451 | .name = "uart", |
447 | .id = 3, | 452 | .id = 3, |
448 | .parent = &clk_pclk_psys.clk, | 453 | .parent = &clk_pclk_psys.clk, |
449 | .enable = s5pv210_clk_ip3_ctrl, | 454 | .enable = s5pv210_clk_ip3_ctrl, |
450 | .ctrlbit = (1<<10), | 455 | .ctrlbit = (1 << 20), |
451 | }, | 456 | }, |
452 | }; | 457 | }; |
453 | 458 | ||
@@ -497,8 +502,8 @@ static struct clksrc_clk clk_sclk_dac = { | |||
497 | .clk = { | 502 | .clk = { |
498 | .name = "sclk_dac", | 503 | .name = "sclk_dac", |
499 | .id = -1, | 504 | .id = -1, |
500 | .ctrlbit = (1 << 10), | 505 | .enable = s5pv210_clk_mask0_ctrl, |
501 | .enable = s5pv210_clk_ip1_ctrl, | 506 | .ctrlbit = (1 << 2), |
502 | }, | 507 | }, |
503 | .sources = &clkset_sclk_dac, | 508 | .sources = &clkset_sclk_dac, |
504 | .reg_src = { .reg = S5P_CLK_SRC1, .shift = 8, .size = 1 }, | 509 | .reg_src = { .reg = S5P_CLK_SRC1, .shift = 8, .size = 1 }, |
@@ -527,8 +532,8 @@ static struct clksrc_clk clk_sclk_hdmi = { | |||
527 | .clk = { | 532 | .clk = { |
528 | .name = "sclk_hdmi", | 533 | .name = "sclk_hdmi", |
529 | .id = -1, | 534 | .id = -1, |
530 | .enable = s5pv210_clk_ip1_ctrl, | 535 | .enable = s5pv210_clk_mask0_ctrl, |
531 | .ctrlbit = (1 << 11), | 536 | .ctrlbit = (1 << 0), |
532 | }, | 537 | }, |
533 | .sources = &clkset_sclk_hdmi, | 538 | .sources = &clkset_sclk_hdmi, |
534 | .reg_src = { .reg = S5P_CLK_SRC1, .shift = 0, .size = 1 }, | 539 | .reg_src = { .reg = S5P_CLK_SRC1, .shift = 0, .size = 1 }, |
@@ -565,8 +570,8 @@ static struct clksrc_clk clk_sclk_audio0 = { | |||
565 | .clk = { | 570 | .clk = { |
566 | .name = "sclk_audio", | 571 | .name = "sclk_audio", |
567 | .id = 0, | 572 | .id = 0, |
568 | .enable = s5pv210_clk_ip3_ctrl, | 573 | .enable = s5pv210_clk_mask0_ctrl, |
569 | .ctrlbit = (1 << 4), | 574 | .ctrlbit = (1 << 24), |
570 | }, | 575 | }, |
571 | .sources = &clkset_sclk_audio0, | 576 | .sources = &clkset_sclk_audio0, |
572 | .reg_src = { .reg = S5P_CLK_SRC6, .shift = 0, .size = 4 }, | 577 | .reg_src = { .reg = S5P_CLK_SRC6, .shift = 0, .size = 4 }, |
@@ -594,8 +599,8 @@ static struct clksrc_clk clk_sclk_audio1 = { | |||
594 | .clk = { | 599 | .clk = { |
595 | .name = "sclk_audio", | 600 | .name = "sclk_audio", |
596 | .id = 1, | 601 | .id = 1, |
597 | .enable = s5pv210_clk_ip3_ctrl, | 602 | .enable = s5pv210_clk_mask0_ctrl, |
598 | .ctrlbit = (1 << 5), | 603 | .ctrlbit = (1 << 25), |
599 | }, | 604 | }, |
600 | .sources = &clkset_sclk_audio1, | 605 | .sources = &clkset_sclk_audio1, |
601 | .reg_src = { .reg = S5P_CLK_SRC6, .shift = 4, .size = 4 }, | 606 | .reg_src = { .reg = S5P_CLK_SRC6, .shift = 4, .size = 4 }, |
@@ -623,8 +628,8 @@ static struct clksrc_clk clk_sclk_audio2 = { | |||
623 | .clk = { | 628 | .clk = { |
624 | .name = "sclk_audio", | 629 | .name = "sclk_audio", |
625 | .id = 2, | 630 | .id = 2, |
626 | .enable = s5pv210_clk_ip3_ctrl, | 631 | .enable = s5pv210_clk_mask0_ctrl, |
627 | .ctrlbit = (1 << 6), | 632 | .ctrlbit = (1 << 26), |
628 | }, | 633 | }, |
629 | .sources = &clkset_sclk_audio2, | 634 | .sources = &clkset_sclk_audio2, |
630 | .reg_src = { .reg = S5P_CLK_SRC6, .shift = 8, .size = 4 }, | 635 | .reg_src = { .reg = S5P_CLK_SRC6, .shift = 8, .size = 4 }, |
@@ -680,8 +685,8 @@ static struct clksrc_clk clksrcs[] = { | |||
680 | .clk = { | 685 | .clk = { |
681 | .name = "uclk1", | 686 | .name = "uclk1", |
682 | .id = 0, | 687 | .id = 0, |
683 | .ctrlbit = (1<<17), | 688 | .enable = s5pv210_clk_mask0_ctrl, |
684 | .enable = s5pv210_clk_ip3_ctrl, | 689 | .ctrlbit = (1 << 12), |
685 | }, | 690 | }, |
686 | .sources = &clkset_uart, | 691 | .sources = &clkset_uart, |
687 | .reg_src = { .reg = S5P_CLK_SRC4, .shift = 16, .size = 4 }, | 692 | .reg_src = { .reg = S5P_CLK_SRC4, .shift = 16, .size = 4 }, |
@@ -690,8 +695,8 @@ static struct clksrc_clk clksrcs[] = { | |||
690 | .clk = { | 695 | .clk = { |
691 | .name = "uclk1", | 696 | .name = "uclk1", |
692 | .id = 1, | 697 | .id = 1, |
693 | .enable = s5pv210_clk_ip3_ctrl, | 698 | .enable = s5pv210_clk_mask0_ctrl, |
694 | .ctrlbit = (1 << 18), | 699 | .ctrlbit = (1 << 13), |
695 | }, | 700 | }, |
696 | .sources = &clkset_uart, | 701 | .sources = &clkset_uart, |
697 | .reg_src = { .reg = S5P_CLK_SRC4, .shift = 20, .size = 4 }, | 702 | .reg_src = { .reg = S5P_CLK_SRC4, .shift = 20, .size = 4 }, |
@@ -700,8 +705,8 @@ static struct clksrc_clk clksrcs[] = { | |||
700 | .clk = { | 705 | .clk = { |
701 | .name = "uclk1", | 706 | .name = "uclk1", |
702 | .id = 2, | 707 | .id = 2, |
703 | .enable = s5pv210_clk_ip3_ctrl, | 708 | .enable = s5pv210_clk_mask0_ctrl, |
704 | .ctrlbit = (1 << 19), | 709 | .ctrlbit = (1 << 14), |
705 | }, | 710 | }, |
706 | .sources = &clkset_uart, | 711 | .sources = &clkset_uart, |
707 | .reg_src = { .reg = S5P_CLK_SRC4, .shift = 24, .size = 4 }, | 712 | .reg_src = { .reg = S5P_CLK_SRC4, .shift = 24, .size = 4 }, |
@@ -710,8 +715,8 @@ static struct clksrc_clk clksrcs[] = { | |||
710 | .clk = { | 715 | .clk = { |
711 | .name = "uclk1", | 716 | .name = "uclk1", |
712 | .id = 3, | 717 | .id = 3, |
713 | .enable = s5pv210_clk_ip3_ctrl, | 718 | .enable = s5pv210_clk_mask0_ctrl, |
714 | .ctrlbit = (1 << 20), | 719 | .ctrlbit = (1 << 15), |
715 | }, | 720 | }, |
716 | .sources = &clkset_uart, | 721 | .sources = &clkset_uart, |
717 | .reg_src = { .reg = S5P_CLK_SRC4, .shift = 28, .size = 4 }, | 722 | .reg_src = { .reg = S5P_CLK_SRC4, .shift = 28, .size = 4 }, |
@@ -720,8 +725,8 @@ static struct clksrc_clk clksrcs[] = { | |||
720 | .clk = { | 725 | .clk = { |
721 | .name = "sclk_mixer", | 726 | .name = "sclk_mixer", |
722 | .id = -1, | 727 | .id = -1, |
723 | .enable = s5pv210_clk_ip1_ctrl, | 728 | .enable = s5pv210_clk_mask0_ctrl, |
724 | .ctrlbit = (1 << 9), | 729 | .ctrlbit = (1 << 1), |
725 | }, | 730 | }, |
726 | .sources = &clkset_sclk_mixer, | 731 | .sources = &clkset_sclk_mixer, |
727 | .reg_src = { .reg = S5P_CLK_SRC1, .shift = 4, .size = 1 }, | 732 | .reg_src = { .reg = S5P_CLK_SRC1, .shift = 4, .size = 1 }, |
@@ -738,8 +743,8 @@ static struct clksrc_clk clksrcs[] = { | |||
738 | .clk = { | 743 | .clk = { |
739 | .name = "sclk_fimc", | 744 | .name = "sclk_fimc", |
740 | .id = 0, | 745 | .id = 0, |
741 | .enable = s5pv210_clk_ip0_ctrl, | 746 | .enable = s5pv210_clk_mask1_ctrl, |
742 | .ctrlbit = (1 << 24), | 747 | .ctrlbit = (1 << 2), |
743 | }, | 748 | }, |
744 | .sources = &clkset_group2, | 749 | .sources = &clkset_group2, |
745 | .reg_src = { .reg = S5P_CLK_SRC3, .shift = 12, .size = 4 }, | 750 | .reg_src = { .reg = S5P_CLK_SRC3, .shift = 12, .size = 4 }, |
@@ -748,8 +753,8 @@ static struct clksrc_clk clksrcs[] = { | |||
748 | .clk = { | 753 | .clk = { |
749 | .name = "sclk_fimc", | 754 | .name = "sclk_fimc", |
750 | .id = 1, | 755 | .id = 1, |
751 | .enable = s5pv210_clk_ip0_ctrl, | 756 | .enable = s5pv210_clk_mask1_ctrl, |
752 | .ctrlbit = (1 << 25), | 757 | .ctrlbit = (1 << 3), |
753 | }, | 758 | }, |
754 | .sources = &clkset_group2, | 759 | .sources = &clkset_group2, |
755 | .reg_src = { .reg = S5P_CLK_SRC3, .shift = 16, .size = 4 }, | 760 | .reg_src = { .reg = S5P_CLK_SRC3, .shift = 16, .size = 4 }, |
@@ -758,8 +763,8 @@ static struct clksrc_clk clksrcs[] = { | |||
758 | .clk = { | 763 | .clk = { |
759 | .name = "sclk_fimc", | 764 | .name = "sclk_fimc", |
760 | .id = 2, | 765 | .id = 2, |
761 | .enable = s5pv210_clk_ip0_ctrl, | 766 | .enable = s5pv210_clk_mask1_ctrl, |
762 | .ctrlbit = (1 << 26), | 767 | .ctrlbit = (1 << 4), |
763 | }, | 768 | }, |
764 | .sources = &clkset_group2, | 769 | .sources = &clkset_group2, |
765 | .reg_src = { .reg = S5P_CLK_SRC3, .shift = 20, .size = 4 }, | 770 | .reg_src = { .reg = S5P_CLK_SRC3, .shift = 20, .size = 4 }, |
@@ -768,6 +773,8 @@ static struct clksrc_clk clksrcs[] = { | |||
768 | .clk = { | 773 | .clk = { |
769 | .name = "sclk_cam", | 774 | .name = "sclk_cam", |
770 | .id = 0, | 775 | .id = 0, |
776 | .enable = s5pv210_clk_mask0_ctrl, | ||
777 | .ctrlbit = (1 << 3), | ||
771 | }, | 778 | }, |
772 | .sources = &clkset_group2, | 779 | .sources = &clkset_group2, |
773 | .reg_src = { .reg = S5P_CLK_SRC1, .shift = 12, .size = 4 }, | 780 | .reg_src = { .reg = S5P_CLK_SRC1, .shift = 12, .size = 4 }, |
@@ -776,6 +783,8 @@ static struct clksrc_clk clksrcs[] = { | |||
776 | .clk = { | 783 | .clk = { |
777 | .name = "sclk_cam", | 784 | .name = "sclk_cam", |
778 | .id = 1, | 785 | .id = 1, |
786 | .enable = s5pv210_clk_mask0_ctrl, | ||
787 | .ctrlbit = (1 << 4), | ||
779 | }, | 788 | }, |
780 | .sources = &clkset_group2, | 789 | .sources = &clkset_group2, |
781 | .reg_src = { .reg = S5P_CLK_SRC1, .shift = 16, .size = 4 }, | 790 | .reg_src = { .reg = S5P_CLK_SRC1, .shift = 16, .size = 4 }, |
@@ -784,8 +793,8 @@ static struct clksrc_clk clksrcs[] = { | |||
784 | .clk = { | 793 | .clk = { |
785 | .name = "sclk_fimd", | 794 | .name = "sclk_fimd", |
786 | .id = -1, | 795 | .id = -1, |
787 | .enable = s5pv210_clk_ip1_ctrl, | 796 | .enable = s5pv210_clk_mask0_ctrl, |
788 | .ctrlbit = (1 << 0), | 797 | .ctrlbit = (1 << 5), |
789 | }, | 798 | }, |
790 | .sources = &clkset_group2, | 799 | .sources = &clkset_group2, |
791 | .reg_src = { .reg = S5P_CLK_SRC1, .shift = 20, .size = 4 }, | 800 | .reg_src = { .reg = S5P_CLK_SRC1, .shift = 20, .size = 4 }, |
@@ -794,8 +803,8 @@ static struct clksrc_clk clksrcs[] = { | |||
794 | .clk = { | 803 | .clk = { |
795 | .name = "sclk_mmc", | 804 | .name = "sclk_mmc", |
796 | .id = 0, | 805 | .id = 0, |
797 | .enable = s5pv210_clk_ip2_ctrl, | 806 | .enable = s5pv210_clk_mask0_ctrl, |
798 | .ctrlbit = (1 << 16), | 807 | .ctrlbit = (1 << 8), |
799 | }, | 808 | }, |
800 | .sources = &clkset_group2, | 809 | .sources = &clkset_group2, |
801 | .reg_src = { .reg = S5P_CLK_SRC4, .shift = 0, .size = 4 }, | 810 | .reg_src = { .reg = S5P_CLK_SRC4, .shift = 0, .size = 4 }, |
@@ -804,8 +813,8 @@ static struct clksrc_clk clksrcs[] = { | |||
804 | .clk = { | 813 | .clk = { |
805 | .name = "sclk_mmc", | 814 | .name = "sclk_mmc", |
806 | .id = 1, | 815 | .id = 1, |
807 | .enable = s5pv210_clk_ip2_ctrl, | 816 | .enable = s5pv210_clk_mask0_ctrl, |
808 | .ctrlbit = (1 << 17), | 817 | .ctrlbit = (1 << 9), |
809 | }, | 818 | }, |
810 | .sources = &clkset_group2, | 819 | .sources = &clkset_group2, |
811 | .reg_src = { .reg = S5P_CLK_SRC4, .shift = 4, .size = 4 }, | 820 | .reg_src = { .reg = S5P_CLK_SRC4, .shift = 4, .size = 4 }, |
@@ -814,8 +823,8 @@ static struct clksrc_clk clksrcs[] = { | |||
814 | .clk = { | 823 | .clk = { |
815 | .name = "sclk_mmc", | 824 | .name = "sclk_mmc", |
816 | .id = 2, | 825 | .id = 2, |
817 | .enable = s5pv210_clk_ip2_ctrl, | 826 | .enable = s5pv210_clk_mask0_ctrl, |
818 | .ctrlbit = (1 << 18), | 827 | .ctrlbit = (1 << 10), |
819 | }, | 828 | }, |
820 | .sources = &clkset_group2, | 829 | .sources = &clkset_group2, |
821 | .reg_src = { .reg = S5P_CLK_SRC4, .shift = 8, .size = 4 }, | 830 | .reg_src = { .reg = S5P_CLK_SRC4, .shift = 8, .size = 4 }, |
@@ -824,8 +833,8 @@ static struct clksrc_clk clksrcs[] = { | |||
824 | .clk = { | 833 | .clk = { |
825 | .name = "sclk_mmc", | 834 | .name = "sclk_mmc", |
826 | .id = 3, | 835 | .id = 3, |
827 | .enable = s5pv210_clk_ip2_ctrl, | 836 | .enable = s5pv210_clk_mask0_ctrl, |
828 | .ctrlbit = (1 << 19), | 837 | .ctrlbit = (1 << 11), |
829 | }, | 838 | }, |
830 | .sources = &clkset_group2, | 839 | .sources = &clkset_group2, |
831 | .reg_src = { .reg = S5P_CLK_SRC4, .shift = 12, .size = 4 }, | 840 | .reg_src = { .reg = S5P_CLK_SRC4, .shift = 12, .size = 4 }, |
@@ -864,8 +873,8 @@ static struct clksrc_clk clksrcs[] = { | |||
864 | .clk = { | 873 | .clk = { |
865 | .name = "sclk_csis", | 874 | .name = "sclk_csis", |
866 | .id = -1, | 875 | .id = -1, |
867 | .enable = s5pv210_clk_ip0_ctrl, | 876 | .enable = s5pv210_clk_mask0_ctrl, |
868 | .ctrlbit = (1 << 31), | 877 | .ctrlbit = (1 << 6), |
869 | }, | 878 | }, |
870 | .sources = &clkset_group2, | 879 | .sources = &clkset_group2, |
871 | .reg_src = { .reg = S5P_CLK_SRC1, .shift = 24, .size = 4 }, | 880 | .reg_src = { .reg = S5P_CLK_SRC1, .shift = 24, .size = 4 }, |
@@ -874,8 +883,8 @@ static struct clksrc_clk clksrcs[] = { | |||
874 | .clk = { | 883 | .clk = { |
875 | .name = "sclk_spi", | 884 | .name = "sclk_spi", |
876 | .id = 0, | 885 | .id = 0, |
877 | .enable = s5pv210_clk_ip3_ctrl, | 886 | .enable = s5pv210_clk_mask0_ctrl, |
878 | .ctrlbit = (1 << 12), | 887 | .ctrlbit = (1 << 16), |
879 | }, | 888 | }, |
880 | .sources = &clkset_group2, | 889 | .sources = &clkset_group2, |
881 | .reg_src = { .reg = S5P_CLK_SRC5, .shift = 0, .size = 4 }, | 890 | .reg_src = { .reg = S5P_CLK_SRC5, .shift = 0, .size = 4 }, |
@@ -884,8 +893,8 @@ static struct clksrc_clk clksrcs[] = { | |||
884 | .clk = { | 893 | .clk = { |
885 | .name = "sclk_spi", | 894 | .name = "sclk_spi", |
886 | .id = 1, | 895 | .id = 1, |
887 | .enable = s5pv210_clk_ip3_ctrl, | 896 | .enable = s5pv210_clk_mask0_ctrl, |
888 | .ctrlbit = (1 << 13), | 897 | .ctrlbit = (1 << 17), |
889 | }, | 898 | }, |
890 | .sources = &clkset_group2, | 899 | .sources = &clkset_group2, |
891 | .reg_src = { .reg = S5P_CLK_SRC5, .shift = 4, .size = 4 }, | 900 | .reg_src = { .reg = S5P_CLK_SRC5, .shift = 4, .size = 4 }, |
@@ -894,8 +903,8 @@ static struct clksrc_clk clksrcs[] = { | |||
894 | .clk = { | 903 | .clk = { |
895 | .name = "sclk_pwi", | 904 | .name = "sclk_pwi", |
896 | .id = -1, | 905 | .id = -1, |
897 | .enable = &s5pv210_clk_ip4_ctrl, | 906 | .enable = s5pv210_clk_mask0_ctrl, |
898 | .ctrlbit = (1 << 2), | 907 | .ctrlbit = (1 << 29), |
899 | }, | 908 | }, |
900 | .sources = &clkset_group2, | 909 | .sources = &clkset_group2, |
901 | .reg_src = { .reg = S5P_CLK_SRC6, .shift = 20, .size = 4 }, | 910 | .reg_src = { .reg = S5P_CLK_SRC6, .shift = 20, .size = 4 }, |
@@ -904,8 +913,8 @@ static struct clksrc_clk clksrcs[] = { | |||
904 | .clk = { | 913 | .clk = { |
905 | .name = "sclk_pwm", | 914 | .name = "sclk_pwm", |
906 | .id = -1, | 915 | .id = -1, |
907 | .enable = s5pv210_clk_ip3_ctrl, | 916 | .enable = s5pv210_clk_mask0_ctrl, |
908 | .ctrlbit = (1 << 23), | 917 | .ctrlbit = (1 << 19), |
909 | }, | 918 | }, |
910 | .sources = &clkset_group2, | 919 | .sources = &clkset_group2, |
911 | .reg_src = { .reg = S5P_CLK_SRC5, .shift = 12, .size = 4 }, | 920 | .reg_src = { .reg = S5P_CLK_SRC5, .shift = 12, .size = 4 }, |
diff --git a/arch/arm/mach-ux500/Makefile b/arch/arm/mach-ux500/Makefile index c7bc4199e3a8..4556aea9c3c5 100644 --- a/arch/arm/mach-ux500/Makefile +++ b/arch/arm/mach-ux500/Makefile | |||
@@ -7,4 +7,5 @@ obj-$(CONFIG_UX500_SOC_DB5500) += cpu-db5500.o devices-db5500.o | |||
7 | obj-$(CONFIG_UX500_SOC_DB8500) += cpu-db8500.o devices-db8500.o | 7 | obj-$(CONFIG_UX500_SOC_DB8500) += cpu-db8500.o devices-db8500.o |
8 | obj-$(CONFIG_MACH_U8500_MOP) += board-mop500.o | 8 | obj-$(CONFIG_MACH_U8500_MOP) += board-mop500.o |
9 | obj-$(CONFIG_MACH_U5500) += board-u5500.o | 9 | obj-$(CONFIG_MACH_U5500) += board-u5500.o |
10 | obj-$(CONFIG_SMP) += platsmp.o headsmp.o localtimer.o | 10 | obj-$(CONFIG_SMP) += platsmp.o headsmp.o |
11 | obj-$(CONFIG_LOCAL_TIMERS) += localtimer.o | ||
diff --git a/arch/arm/mach-ux500/clock.c b/arch/arm/mach-ux500/clock.c index 6544855af2f1..fe84b9021c7a 100644 --- a/arch/arm/mach-ux500/clock.c +++ b/arch/arm/mach-ux500/clock.c | |||
@@ -16,6 +16,7 @@ | |||
16 | 16 | ||
17 | #include <asm/clkdev.h> | 17 | #include <asm/clkdev.h> |
18 | 18 | ||
19 | #include <plat/mtu.h> | ||
19 | #include <mach/hardware.h> | 20 | #include <mach/hardware.h> |
20 | #include "clock.h" | 21 | #include "clock.h" |
21 | 22 | ||
@@ -59,6 +60,9 @@ | |||
59 | #define PRCM_DMACLK_MGT 0x074 | 60 | #define PRCM_DMACLK_MGT 0x074 |
60 | #define PRCM_B2R2CLK_MGT 0x078 | 61 | #define PRCM_B2R2CLK_MGT 0x078 |
61 | #define PRCM_TVCLK_MGT 0x07C | 62 | #define PRCM_TVCLK_MGT 0x07C |
63 | #define PRCM_TCR 0x1C8 | ||
64 | #define PRCM_TCR_STOPPED (1 << 16) | ||
65 | #define PRCM_TCR_DOZE_MODE (1 << 17) | ||
62 | #define PRCM_UNIPROCLK_MGT 0x278 | 66 | #define PRCM_UNIPROCLK_MGT 0x278 |
63 | #define PRCM_SSPCLK_MGT 0x280 | 67 | #define PRCM_SSPCLK_MGT 0x280 |
64 | #define PRCM_RNGCLK_MGT 0x284 | 68 | #define PRCM_RNGCLK_MGT 0x284 |
@@ -120,10 +124,95 @@ void clk_disable(struct clk *clk) | |||
120 | } | 124 | } |
121 | EXPORT_SYMBOL(clk_disable); | 125 | EXPORT_SYMBOL(clk_disable); |
122 | 126 | ||
127 | /* | ||
128 | * The MTU has a separate, rather complex muxing setup | ||
129 | * with alternative parents (peripheral cluster or | ||
130 | * ULP or fixed 32768 Hz) depending on settings | ||
131 | */ | ||
132 | static unsigned long clk_mtu_get_rate(struct clk *clk) | ||
133 | { | ||
134 | void __iomem *addr = __io_address(U8500_PRCMU_BASE) | ||
135 | + PRCM_TCR; | ||
136 | u32 tcr = readl(addr); | ||
137 | int mtu = (int) clk->data; | ||
138 | /* | ||
139 | * One of these is selected eventually | ||
140 | * TODO: Replace the constant with a reference | ||
141 | * to the ULP source once this is modeled. | ||
142 | */ | ||
143 | unsigned long clk32k = 32768; | ||
144 | unsigned long mturate; | ||
145 | unsigned long retclk; | ||
146 | |||
147 | /* Get the rate from the parent as a default */ | ||
148 | if (clk->parent_periph) | ||
149 | mturate = clk_get_rate(clk->parent_periph); | ||
150 | else if (clk->parent_cluster) | ||
151 | mturate = clk_get_rate(clk->parent_cluster); | ||
152 | else | ||
153 | /* We need to be connected SOMEWHERE */ | ||
154 | BUG(); | ||
155 | |||
156 | /* | ||
157 | * Are we in doze mode? | ||
158 | * In this mode the parent peripheral or the fixed 32768 Hz | ||
159 | * clock is fed into the block. | ||
160 | */ | ||
161 | if (!(tcr & PRCM_TCR_DOZE_MODE)) { | ||
162 | /* | ||
163 | * Here we're using the clock input from the APE ULP | ||
164 | * clock domain. But first: are the timers stopped? | ||
165 | */ | ||
166 | if (tcr & PRCM_TCR_STOPPED) { | ||
167 | clk32k = 0; | ||
168 | mturate = 0; | ||
169 | } else { | ||
170 | /* Else default mode: 0 and 2.4 MHz */ | ||
171 | clk32k = 0; | ||
172 | if (cpu_is_u5500()) | ||
173 | /* DB5500 divides by 8 */ | ||
174 | mturate /= 8; | ||
175 | else if (cpu_is_u8500ed()) { | ||
176 | /* | ||
177 | * This clocking setting must not be used | ||
178 | * in the ED chip, it is simply not | ||
179 | * connected anywhere! | ||
180 | */ | ||
181 | mturate = 0; | ||
182 | BUG(); | ||
183 | } else | ||
184 | /* | ||
185 | * In this mode the ulp38m4 clock is divided | ||
186 | * by a factor 16, on the DB8500 typically | ||
187 | * 38400000 / 16 ~ 2.4 MHz. | ||
188 | * TODO: Replace the constant with a reference | ||
189 | * to the ULP source once this is modeled. | ||
190 | */ | ||
191 | mturate = 38400000 / 16; | ||
192 | } | ||
193 | } | ||
194 | |||
195 | /* Return the clock selected for this MTU */ | ||
196 | if (tcr & (1 << mtu)) | ||
197 | retclk = clk32k; | ||
198 | else | ||
199 | retclk = mturate; | ||
200 | |||
201 | pr_info("MTU%d clock rate: %lu Hz\n", mtu, retclk); | ||
202 | return retclk; | ||
203 | } | ||
204 | |||
123 | unsigned long clk_get_rate(struct clk *clk) | 205 | unsigned long clk_get_rate(struct clk *clk) |
124 | { | 206 | { |
125 | unsigned long rate; | 207 | unsigned long rate; |
126 | 208 | ||
209 | /* | ||
210 | * If there is a custom getrate callback for this clock, | ||
211 | * it will take precedence. | ||
212 | */ | ||
213 | if (clk->get_rate) | ||
214 | return clk->get_rate(clk); | ||
215 | |||
127 | if (clk->ops && clk->ops->get_rate) | 216 | if (clk->ops && clk->ops->get_rate) |
128 | return clk->ops->get_rate(clk); | 217 | return clk->ops->get_rate(clk); |
129 | 218 | ||
@@ -341,8 +430,9 @@ static DEFINE_PRCC_CLK(5, usb_v1, 0, 0, NULL); | |||
341 | 430 | ||
342 | /* Peripheral Cluster #6 */ | 431 | /* Peripheral Cluster #6 */ |
343 | 432 | ||
344 | static DEFINE_PRCC_CLK(6, mtu1_v1, 8, -1, NULL); | 433 | /* MTU ID in data */ |
345 | static DEFINE_PRCC_CLK(6, mtu0_v1, 7, -1, NULL); | 434 | static DEFINE_PRCC_CLK_CUSTOM(6, mtu1_v1, 8, -1, NULL, clk_mtu_get_rate, 1); |
435 | static DEFINE_PRCC_CLK_CUSTOM(6, mtu0_v1, 7, -1, NULL, clk_mtu_get_rate, 0); | ||
346 | static DEFINE_PRCC_CLK(6, cfgreg_v1, 6, 6, NULL); | 436 | static DEFINE_PRCC_CLK(6, cfgreg_v1, 6, 6, NULL); |
347 | static DEFINE_PRCC_CLK(6, dmc_ed, 6, 6, NULL); | 437 | static DEFINE_PRCC_CLK(6, dmc_ed, 6, 6, NULL); |
348 | static DEFINE_PRCC_CLK(6, hash1, 5, -1, NULL); | 438 | static DEFINE_PRCC_CLK(6, hash1, 5, -1, NULL); |
@@ -357,8 +447,9 @@ static DEFINE_PRCC_CLK(6, rng_v1, 0, 0, &clk_rngclk); | |||
357 | /* Peripheral Cluster #7 */ | 447 | /* Peripheral Cluster #7 */ |
358 | 448 | ||
359 | static DEFINE_PRCC_CLK(7, tzpc0_ed, 4, -1, NULL); | 449 | static DEFINE_PRCC_CLK(7, tzpc0_ed, 4, -1, NULL); |
360 | static DEFINE_PRCC_CLK(7, mtu1_ed, 3, -1, NULL); | 450 | /* MTU ID in data */ |
361 | static DEFINE_PRCC_CLK(7, mtu0_ed, 2, -1, NULL); | 451 | static DEFINE_PRCC_CLK_CUSTOM(7, mtu1_ed, 3, -1, NULL, clk_mtu_get_rate, 1); |
452 | static DEFINE_PRCC_CLK_CUSTOM(7, mtu0_ed, 2, -1, NULL, clk_mtu_get_rate, 0); | ||
362 | static DEFINE_PRCC_CLK(7, wdg_ed, 1, -1, NULL); | 453 | static DEFINE_PRCC_CLK(7, wdg_ed, 1, -1, NULL); |
363 | static DEFINE_PRCC_CLK(7, cfgreg_ed, 0, -1, NULL); | 454 | static DEFINE_PRCC_CLK(7, cfgreg_ed, 0, -1, NULL); |
364 | 455 | ||
@@ -503,15 +594,17 @@ static struct clk_lookup u8500_v1_clks[] = { | |||
503 | CLK(uiccclk, "uicc", NULL), | 594 | CLK(uiccclk, "uicc", NULL), |
504 | }; | 595 | }; |
505 | 596 | ||
506 | static int __init clk_init(void) | 597 | int __init clk_init(void) |
507 | { | 598 | { |
508 | if (cpu_is_u8500ed()) { | 599 | if (cpu_is_u8500ed()) { |
509 | clk_prcmu_ops.enable = clk_prcmu_ed_enable; | 600 | clk_prcmu_ops.enable = clk_prcmu_ed_enable; |
510 | clk_prcmu_ops.disable = clk_prcmu_ed_disable; | 601 | clk_prcmu_ops.disable = clk_prcmu_ed_disable; |
602 | clk_per6clk.rate = 100000000; | ||
511 | } else if (cpu_is_u5500()) { | 603 | } else if (cpu_is_u5500()) { |
512 | /* Clock tree for U5500 not implemented yet */ | 604 | /* Clock tree for U5500 not implemented yet */ |
513 | clk_prcc_ops.enable = clk_prcc_ops.disable = NULL; | 605 | clk_prcc_ops.enable = clk_prcc_ops.disable = NULL; |
514 | clk_prcmu_ops.enable = clk_prcmu_ops.disable = NULL; | 606 | clk_prcmu_ops.enable = clk_prcmu_ops.disable = NULL; |
607 | clk_per6clk.rate = 26000000; | ||
515 | } | 608 | } |
516 | 609 | ||
517 | clkdev_add_table(u8500_common_clks, ARRAY_SIZE(u8500_common_clks)); | 610 | clkdev_add_table(u8500_common_clks, ARRAY_SIZE(u8500_common_clks)); |
@@ -522,4 +615,3 @@ static int __init clk_init(void) | |||
522 | 615 | ||
523 | return 0; | 616 | return 0; |
524 | } | 617 | } |
525 | arch_initcall(clk_init); | ||
diff --git a/arch/arm/mach-ux500/clock.h b/arch/arm/mach-ux500/clock.h index e4f99b65026f..a05802501527 100644 --- a/arch/arm/mach-ux500/clock.h +++ b/arch/arm/mach-ux500/clock.h | |||
@@ -28,6 +28,9 @@ struct clkops { | |||
28 | * @ops: pointer to clkops struct used to control this clock | 28 | * @ops: pointer to clkops struct used to control this clock |
29 | * @name: name, for debugging | 29 | * @name: name, for debugging |
30 | * @enabled: refcount. positive if enabled, zero if disabled | 30 | * @enabled: refcount. positive if enabled, zero if disabled |
31 | * @get_rate: custom callback for getting the clock rate | ||
32 | * @data: custom per-clock data for example for the get_rate | ||
33 | * callback | ||
31 | * @rate: fixed rate for clocks which don't implement | 34 | * @rate: fixed rate for clocks which don't implement |
32 | * ops->getrate | 35 | * ops->getrate |
33 | * @prcmu_cg_off: address offset of the combined enable/disable register | 36 | * @prcmu_cg_off: address offset of the combined enable/disable register |
@@ -67,6 +70,8 @@ struct clk { | |||
67 | const struct clkops *ops; | 70 | const struct clkops *ops; |
68 | const char *name; | 71 | const char *name; |
69 | unsigned int enabled; | 72 | unsigned int enabled; |
73 | unsigned long (*get_rate)(struct clk *); | ||
74 | void *data; | ||
70 | 75 | ||
71 | unsigned long rate; | 76 | unsigned long rate; |
72 | struct list_head list; | 77 | struct list_head list; |
@@ -117,9 +122,26 @@ struct clk clk_##_name = { \ | |||
117 | .parent_periph = _kernclk \ | 122 | .parent_periph = _kernclk \ |
118 | } | 123 | } |
119 | 124 | ||
125 | #define DEFINE_PRCC_CLK_CUSTOM(_pclust, _name, _bus_en, _kernel_en, _kernclk, _callback, _data) \ | ||
126 | struct clk clk_##_name = { \ | ||
127 | .name = #_name, \ | ||
128 | .ops = &clk_prcc_ops, \ | ||
129 | .cluster = _pclust, \ | ||
130 | .prcc_bus = _bus_en, \ | ||
131 | .prcc_kernel = _kernel_en, \ | ||
132 | .parent_cluster = &clk_per##_pclust##clk, \ | ||
133 | .parent_periph = _kernclk, \ | ||
134 | .get_rate = _callback, \ | ||
135 | .data = (void *) _data \ | ||
136 | } | ||
137 | |||
138 | |||
120 | #define CLK(_clk, _devname, _conname) \ | 139 | #define CLK(_clk, _devname, _conname) \ |
121 | { \ | 140 | { \ |
122 | .clk = &clk_##_clk, \ | 141 | .clk = &clk_##_clk, \ |
123 | .dev_id = _devname, \ | 142 | .dev_id = _devname, \ |
124 | .con_id = _conname, \ | 143 | .con_id = _conname, \ |
125 | } | 144 | } |
145 | |||
146 | int __init clk_db8500_ed_fixup(void); | ||
147 | int __init clk_init(void); | ||
diff --git a/arch/arm/mach-ux500/cpu.c b/arch/arm/mach-ux500/cpu.c index d81ad023963c..e0fd747e447a 100644 --- a/arch/arm/mach-ux500/cpu.c +++ b/arch/arm/mach-ux500/cpu.c | |||
@@ -62,6 +62,12 @@ void __init ux500_init_irq(void) | |||
62 | { | 62 | { |
63 | gic_dist_init(0, __io_address(UX500_GIC_DIST_BASE), 29); | 63 | gic_dist_init(0, __io_address(UX500_GIC_DIST_BASE), 29); |
64 | gic_cpu_init(0, __io_address(UX500_GIC_CPU_BASE)); | 64 | gic_cpu_init(0, __io_address(UX500_GIC_CPU_BASE)); |
65 | |||
66 | /* | ||
67 | * Init clocks here so that they are available for system timer | ||
68 | * initialization. | ||
69 | */ | ||
70 | clk_init(); | ||
65 | } | 71 | } |
66 | 72 | ||
67 | #ifdef CONFIG_CACHE_L2X0 | 73 | #ifdef CONFIG_CACHE_L2X0 |
diff --git a/arch/arm/mach-vexpress/ct-ca9x4.c b/arch/arm/mach-vexpress/ct-ca9x4.c index e6f73030d5f0..6353459bb567 100644 --- a/arch/arm/mach-vexpress/ct-ca9x4.c +++ b/arch/arm/mach-vexpress/ct-ca9x4.c | |||
@@ -2,6 +2,7 @@ | |||
2 | * Versatile Express Core Tile Cortex A9x4 Support | 2 | * Versatile Express Core Tile Cortex A9x4 Support |
3 | */ | 3 | */ |
4 | #include <linux/init.h> | 4 | #include <linux/init.h> |
5 | #include <linux/gfp.h> | ||
5 | #include <linux/device.h> | 6 | #include <linux/device.h> |
6 | #include <linux/dma-mapping.h> | 7 | #include <linux/dma-mapping.h> |
7 | #include <linux/platform_device.h> | 8 | #include <linux/platform_device.h> |
@@ -9,6 +10,7 @@ | |||
9 | #include <linux/amba/clcd.h> | 10 | #include <linux/amba/clcd.h> |
10 | 11 | ||
11 | #include <asm/clkdev.h> | 12 | #include <asm/clkdev.h> |
13 | #include <asm/pgtable.h> | ||
12 | #include <asm/hardware/arm_timer.h> | 14 | #include <asm/hardware/arm_timer.h> |
13 | #include <asm/hardware/cache-l2x0.h> | 15 | #include <asm/hardware/cache-l2x0.h> |
14 | #include <asm/hardware/gic.h> | 16 | #include <asm/hardware/gic.h> |
@@ -235,7 +237,7 @@ static void ct_ca9x4_init(void) | |||
235 | } | 237 | } |
236 | 238 | ||
237 | MACHINE_START(VEXPRESS, "ARM-Versatile Express CA9x4") | 239 | MACHINE_START(VEXPRESS, "ARM-Versatile Express CA9x4") |
238 | .phys_io = V2M_UART0, | 240 | .phys_io = V2M_UART0 & SECTION_MASK, |
239 | .io_pg_offst = (__MMIO_P2V(V2M_UART0) >> 18) & 0xfffc, | 241 | .io_pg_offst = (__MMIO_P2V(V2M_UART0) >> 18) & 0xfffc, |
240 | .boot_params = PHYS_OFFSET + 0x00000100, | 242 | .boot_params = PHYS_OFFSET + 0x00000100, |
241 | .map_io = ct_ca9x4_map_io, | 243 | .map_io = ct_ca9x4_map_io, |
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig index 346ae14824a5..101105e52610 100644 --- a/arch/arm/mm/Kconfig +++ b/arch/arm/mm/Kconfig | |||
@@ -735,6 +735,25 @@ config NEEDS_SYSCALL_FOR_CMPXCHG | |||
735 | Forget about fast user space cmpxchg support. | 735 | Forget about fast user space cmpxchg support. |
736 | It is just not possible. | 736 | It is just not possible. |
737 | 737 | ||
738 | config DMA_CACHE_RWFO | ||
739 | bool "Enable read/write for ownership DMA cache maintenance" | ||
740 | depends on CPU_V6 && SMP | ||
741 | default y | ||
742 | help | ||
743 | The Snoop Control Unit on ARM11MPCore does not detect the | ||
744 | cache maintenance operations and the dma_{map,unmap}_area() | ||
745 | functions may leave stale cache entries on other CPUs. By | ||
746 | enabling this option, Read or Write For Ownership in the ARMv6 | ||
747 | DMA cache maintenance functions is performed. These LDR/STR | ||
748 | instructions change the cache line state to shared or modified | ||
749 | so that the cache operation has the desired effect. | ||
750 | |||
751 | Note that the workaround is only valid on processors that do | ||
752 | not perform speculative loads into the D-cache. For such | ||
753 | processors, if cache maintenance operations are not broadcast | ||
754 | in hardware, other workarounds are needed (e.g. cache | ||
755 | maintenance broadcasting in software via FIQ). | ||
756 | |||
738 | config OUTER_CACHE | 757 | config OUTER_CACHE |
739 | bool | 758 | bool |
740 | 759 | ||
@@ -794,6 +813,8 @@ config ARM_L1_CACHE_SHIFT | |||
794 | 813 | ||
795 | config ARM_DMA_MEM_BUFFERABLE | 814 | config ARM_DMA_MEM_BUFFERABLE |
796 | bool "Use non-cacheable memory for DMA" if CPU_V6 && !CPU_V7 | 815 | bool "Use non-cacheable memory for DMA" if CPU_V6 && !CPU_V7 |
816 | depends on !(MACH_REALVIEW_PB1176 || REALVIEW_EB_ARM11MP || \ | ||
817 | MACH_REALVIEW_PB11MP) | ||
797 | default y if CPU_V6 || CPU_V7 | 818 | default y if CPU_V6 || CPU_V7 |
798 | help | 819 | help |
799 | Historically, the kernel has used strongly ordered mappings to | 820 | Historically, the kernel has used strongly ordered mappings to |
diff --git a/arch/arm/mm/cache-v6.S b/arch/arm/mm/cache-v6.S index e46ecd847138..86aa689ef1aa 100644 --- a/arch/arm/mm/cache-v6.S +++ b/arch/arm/mm/cache-v6.S | |||
@@ -211,8 +211,9 @@ v6_dma_inv_range: | |||
211 | mcrne p15, 0, r1, c7, c15, 1 @ clean & invalidate unified line | 211 | mcrne p15, 0, r1, c7, c15, 1 @ clean & invalidate unified line |
212 | #endif | 212 | #endif |
213 | 1: | 213 | 1: |
214 | #ifdef CONFIG_SMP | 214 | #ifdef CONFIG_DMA_CACHE_RWFO |
215 | str r0, [r0] @ write for ownership | 215 | ldr r2, [r0] @ read for ownership |
216 | str r2, [r0] @ write for ownership | ||
216 | #endif | 217 | #endif |
217 | #ifdef HARVARD_CACHE | 218 | #ifdef HARVARD_CACHE |
218 | mcr p15, 0, r0, c7, c6, 1 @ invalidate D line | 219 | mcr p15, 0, r0, c7, c6, 1 @ invalidate D line |
@@ -234,7 +235,7 @@ v6_dma_inv_range: | |||
234 | v6_dma_clean_range: | 235 | v6_dma_clean_range: |
235 | bic r0, r0, #D_CACHE_LINE_SIZE - 1 | 236 | bic r0, r0, #D_CACHE_LINE_SIZE - 1 |
236 | 1: | 237 | 1: |
237 | #ifdef CONFIG_SMP | 238 | #ifdef CONFIG_DMA_CACHE_RWFO |
238 | ldr r2, [r0] @ read for ownership | 239 | ldr r2, [r0] @ read for ownership |
239 | #endif | 240 | #endif |
240 | #ifdef HARVARD_CACHE | 241 | #ifdef HARVARD_CACHE |
@@ -257,7 +258,7 @@ v6_dma_clean_range: | |||
257 | ENTRY(v6_dma_flush_range) | 258 | ENTRY(v6_dma_flush_range) |
258 | bic r0, r0, #D_CACHE_LINE_SIZE - 1 | 259 | bic r0, r0, #D_CACHE_LINE_SIZE - 1 |
259 | 1: | 260 | 1: |
260 | #ifdef CONFIG_SMP | 261 | #ifdef CONFIG_DMA_CACHE_RWFO |
261 | ldr r2, [r0] @ read for ownership | 262 | ldr r2, [r0] @ read for ownership |
262 | str r2, [r0] @ write for ownership | 263 | str r2, [r0] @ write for ownership |
263 | #endif | 264 | #endif |
@@ -283,9 +284,13 @@ ENTRY(v6_dma_map_area) | |||
283 | add r1, r1, r0 | 284 | add r1, r1, r0 |
284 | teq r2, #DMA_FROM_DEVICE | 285 | teq r2, #DMA_FROM_DEVICE |
285 | beq v6_dma_inv_range | 286 | beq v6_dma_inv_range |
287 | #ifndef CONFIG_DMA_CACHE_RWFO | ||
288 | b v6_dma_clean_range | ||
289 | #else | ||
286 | teq r2, #DMA_TO_DEVICE | 290 | teq r2, #DMA_TO_DEVICE |
287 | beq v6_dma_clean_range | 291 | beq v6_dma_clean_range |
288 | b v6_dma_flush_range | 292 | b v6_dma_flush_range |
293 | #endif | ||
289 | ENDPROC(v6_dma_map_area) | 294 | ENDPROC(v6_dma_map_area) |
290 | 295 | ||
291 | /* | 296 | /* |
@@ -295,6 +300,11 @@ ENDPROC(v6_dma_map_area) | |||
295 | * - dir - DMA direction | 300 | * - dir - DMA direction |
296 | */ | 301 | */ |
297 | ENTRY(v6_dma_unmap_area) | 302 | ENTRY(v6_dma_unmap_area) |
303 | #ifndef CONFIG_DMA_CACHE_RWFO | ||
304 | add r1, r1, r0 | ||
305 | teq r2, #DMA_TO_DEVICE | ||
306 | bne v6_dma_inv_range | ||
307 | #endif | ||
298 | mov pc, lr | 308 | mov pc, lr |
299 | ENDPROC(v6_dma_unmap_area) | 309 | ENDPROC(v6_dma_unmap_area) |
300 | 310 | ||
diff --git a/arch/arm/mm/copypage-feroceon.c b/arch/arm/mm/copypage-feroceon.c index 5eb4fd93893d..ac163de7dc01 100644 --- a/arch/arm/mm/copypage-feroceon.c +++ b/arch/arm/mm/copypage-feroceon.c | |||
@@ -18,7 +18,7 @@ feroceon_copy_user_page(void *kto, const void *kfrom) | |||
18 | { | 18 | { |
19 | asm("\ | 19 | asm("\ |
20 | stmfd sp!, {r4-r9, lr} \n\ | 20 | stmfd sp!, {r4-r9, lr} \n\ |
21 | mov ip, %0 \n\ | 21 | mov ip, %2 \n\ |
22 | 1: mov lr, r1 \n\ | 22 | 1: mov lr, r1 \n\ |
23 | ldmia r1!, {r2 - r9} \n\ | 23 | ldmia r1!, {r2 - r9} \n\ |
24 | pld [lr, #32] \n\ | 24 | pld [lr, #32] \n\ |
@@ -64,7 +64,7 @@ feroceon_copy_user_page(void *kto, const void *kfrom) | |||
64 | mcr p15, 0, ip, c7, c10, 4 @ drain WB\n\ | 64 | mcr p15, 0, ip, c7, c10, 4 @ drain WB\n\ |
65 | ldmfd sp!, {r4-r9, pc}" | 65 | ldmfd sp!, {r4-r9, pc}" |
66 | : | 66 | : |
67 | : "I" (PAGE_SIZE)); | 67 | : "r" (kto), "r" (kfrom), "I" (PAGE_SIZE)); |
68 | } | 68 | } |
69 | 69 | ||
70 | void feroceon_copy_user_highpage(struct page *to, struct page *from, | 70 | void feroceon_copy_user_highpage(struct page *to, struct page *from, |
diff --git a/arch/arm/mm/copypage-v4wb.c b/arch/arm/mm/copypage-v4wb.c index 7c2eb55cd4a9..cb589cbb2b6c 100644 --- a/arch/arm/mm/copypage-v4wb.c +++ b/arch/arm/mm/copypage-v4wb.c | |||
@@ -27,7 +27,7 @@ v4wb_copy_user_page(void *kto, const void *kfrom) | |||
27 | { | 27 | { |
28 | asm("\ | 28 | asm("\ |
29 | stmfd sp!, {r4, lr} @ 2\n\ | 29 | stmfd sp!, {r4, lr} @ 2\n\ |
30 | mov r2, %0 @ 1\n\ | 30 | mov r2, %2 @ 1\n\ |
31 | ldmia r1!, {r3, r4, ip, lr} @ 4\n\ | 31 | ldmia r1!, {r3, r4, ip, lr} @ 4\n\ |
32 | 1: mcr p15, 0, r0, c7, c6, 1 @ 1 invalidate D line\n\ | 32 | 1: mcr p15, 0, r0, c7, c6, 1 @ 1 invalidate D line\n\ |
33 | stmia r0!, {r3, r4, ip, lr} @ 4\n\ | 33 | stmia r0!, {r3, r4, ip, lr} @ 4\n\ |
@@ -44,7 +44,7 @@ v4wb_copy_user_page(void *kto, const void *kfrom) | |||
44 | mcr p15, 0, r1, c7, c10, 4 @ 1 drain WB\n\ | 44 | mcr p15, 0, r1, c7, c10, 4 @ 1 drain WB\n\ |
45 | ldmfd sp!, {r4, pc} @ 3" | 45 | ldmfd sp!, {r4, pc} @ 3" |
46 | : | 46 | : |
47 | : "I" (PAGE_SIZE / 64)); | 47 | : "r" (kto), "r" (kfrom), "I" (PAGE_SIZE / 64)); |
48 | } | 48 | } |
49 | 49 | ||
50 | void v4wb_copy_user_highpage(struct page *to, struct page *from, | 50 | void v4wb_copy_user_highpage(struct page *to, struct page *from, |
diff --git a/arch/arm/mm/copypage-v4wt.c b/arch/arm/mm/copypage-v4wt.c index 172e6a55458e..30c7d048a324 100644 --- a/arch/arm/mm/copypage-v4wt.c +++ b/arch/arm/mm/copypage-v4wt.c | |||
@@ -25,7 +25,7 @@ v4wt_copy_user_page(void *kto, const void *kfrom) | |||
25 | { | 25 | { |
26 | asm("\ | 26 | asm("\ |
27 | stmfd sp!, {r4, lr} @ 2\n\ | 27 | stmfd sp!, {r4, lr} @ 2\n\ |
28 | mov r2, %0 @ 1\n\ | 28 | mov r2, %2 @ 1\n\ |
29 | ldmia r1!, {r3, r4, ip, lr} @ 4\n\ | 29 | ldmia r1!, {r3, r4, ip, lr} @ 4\n\ |
30 | 1: stmia r0!, {r3, r4, ip, lr} @ 4\n\ | 30 | 1: stmia r0!, {r3, r4, ip, lr} @ 4\n\ |
31 | ldmia r1!, {r3, r4, ip, lr} @ 4+1\n\ | 31 | ldmia r1!, {r3, r4, ip, lr} @ 4+1\n\ |
@@ -40,7 +40,7 @@ v4wt_copy_user_page(void *kto, const void *kfrom) | |||
40 | mcr p15, 0, r2, c7, c7, 0 @ flush ID cache\n\ | 40 | mcr p15, 0, r2, c7, c7, 0 @ flush ID cache\n\ |
41 | ldmfd sp!, {r4, pc} @ 3" | 41 | ldmfd sp!, {r4, pc} @ 3" |
42 | : | 42 | : |
43 | : "I" (PAGE_SIZE / 64)); | 43 | : "r" (kto), "r" (kfrom), "I" (PAGE_SIZE / 64)); |
44 | } | 44 | } |
45 | 45 | ||
46 | void v4wt_copy_user_highpage(struct page *to, struct page *from, | 46 | void v4wt_copy_user_highpage(struct page *to, struct page *from, |
diff --git a/arch/arm/mm/copypage-xsc3.c b/arch/arm/mm/copypage-xsc3.c index 747ad4140fc7..f9cde0702f1e 100644 --- a/arch/arm/mm/copypage-xsc3.c +++ b/arch/arm/mm/copypage-xsc3.c | |||
@@ -34,7 +34,7 @@ xsc3_mc_copy_user_page(void *kto, const void *kfrom) | |||
34 | { | 34 | { |
35 | asm("\ | 35 | asm("\ |
36 | stmfd sp!, {r4, r5, lr} \n\ | 36 | stmfd sp!, {r4, r5, lr} \n\ |
37 | mov lr, %0 \n\ | 37 | mov lr, %2 \n\ |
38 | \n\ | 38 | \n\ |
39 | pld [r1, #0] \n\ | 39 | pld [r1, #0] \n\ |
40 | pld [r1, #32] \n\ | 40 | pld [r1, #32] \n\ |
@@ -67,7 +67,7 @@ xsc3_mc_copy_user_page(void *kto, const void *kfrom) | |||
67 | \n\ | 67 | \n\ |
68 | ldmfd sp!, {r4, r5, pc}" | 68 | ldmfd sp!, {r4, r5, pc}" |
69 | : | 69 | : |
70 | : "I" (PAGE_SIZE / 64 - 1)); | 70 | : "r" (kto), "r" (kfrom), "I" (PAGE_SIZE / 64 - 1)); |
71 | } | 71 | } |
72 | 72 | ||
73 | void xsc3_mc_copy_user_highpage(struct page *to, struct page *from, | 73 | void xsc3_mc_copy_user_highpage(struct page *to, struct page *from, |
diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index 13fa536d82e6..9e7742f0a102 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c | |||
@@ -24,15 +24,6 @@ | |||
24 | #include <asm/tlbflush.h> | 24 | #include <asm/tlbflush.h> |
25 | #include <asm/sizes.h> | 25 | #include <asm/sizes.h> |
26 | 26 | ||
27 | /* Sanity check size */ | ||
28 | #if (CONSISTENT_DMA_SIZE % SZ_2M) | ||
29 | #error "CONSISTENT_DMA_SIZE must be multiple of 2MiB" | ||
30 | #endif | ||
31 | |||
32 | #define CONSISTENT_OFFSET(x) (((unsigned long)(x) - CONSISTENT_BASE) >> PAGE_SHIFT) | ||
33 | #define CONSISTENT_PTE_INDEX(x) (((unsigned long)(x) - CONSISTENT_BASE) >> PGDIR_SHIFT) | ||
34 | #define NUM_CONSISTENT_PTES (CONSISTENT_DMA_SIZE >> PGDIR_SHIFT) | ||
35 | |||
36 | static u64 get_coherent_dma_mask(struct device *dev) | 27 | static u64 get_coherent_dma_mask(struct device *dev) |
37 | { | 28 | { |
38 | u64 mask = ISA_DMA_THRESHOLD; | 29 | u64 mask = ISA_DMA_THRESHOLD; |
@@ -123,6 +114,15 @@ static void __dma_free_buffer(struct page *page, size_t size) | |||
123 | } | 114 | } |
124 | 115 | ||
125 | #ifdef CONFIG_MMU | 116 | #ifdef CONFIG_MMU |
117 | /* Sanity check size */ | ||
118 | #if (CONSISTENT_DMA_SIZE % SZ_2M) | ||
119 | #error "CONSISTENT_DMA_SIZE must be multiple of 2MiB" | ||
120 | #endif | ||
121 | |||
122 | #define CONSISTENT_OFFSET(x) (((unsigned long)(x) - CONSISTENT_BASE) >> PAGE_SHIFT) | ||
123 | #define CONSISTENT_PTE_INDEX(x) (((unsigned long)(x) - CONSISTENT_BASE) >> PGDIR_SHIFT) | ||
124 | #define NUM_CONSISTENT_PTES (CONSISTENT_DMA_SIZE >> PGDIR_SHIFT) | ||
125 | |||
126 | /* | 126 | /* |
127 | * These are the page tables (2MB each) covering uncached, DMA consistent allocations | 127 | * These are the page tables (2MB each) covering uncached, DMA consistent allocations |
128 | */ | 128 | */ |
diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c index 92f5801f99c1..cbfb2edcf7d1 100644 --- a/arch/arm/mm/fault.c +++ b/arch/arm/mm/fault.c | |||
@@ -393,6 +393,9 @@ do_translation_fault(unsigned long addr, unsigned int fsr, | |||
393 | if (addr < TASK_SIZE) | 393 | if (addr < TASK_SIZE) |
394 | return do_page_fault(addr, fsr, regs); | 394 | return do_page_fault(addr, fsr, regs); |
395 | 395 | ||
396 | if (user_mode(regs)) | ||
397 | goto bad_area; | ||
398 | |||
396 | index = pgd_index(addr); | 399 | index = pgd_index(addr); |
397 | 400 | ||
398 | /* | 401 | /* |
diff --git a/arch/arm/mm/highmem.c b/arch/arm/mm/highmem.c index 77b030f5ec09..086816b205b8 100644 --- a/arch/arm/mm/highmem.c +++ b/arch/arm/mm/highmem.c | |||
@@ -48,7 +48,16 @@ void *kmap_atomic(struct page *page, enum km_type type) | |||
48 | 48 | ||
49 | debug_kmap_atomic(type); | 49 | debug_kmap_atomic(type); |
50 | 50 | ||
51 | kmap = kmap_high_get(page); | 51 | #ifdef CONFIG_DEBUG_HIGHMEM |
52 | /* | ||
53 | * There is no cache coherency issue when non VIVT, so force the | ||
54 | * dedicated kmap usage for better debugging purposes in that case. | ||
55 | */ | ||
56 | if (!cache_is_vivt()) | ||
57 | kmap = NULL; | ||
58 | else | ||
59 | #endif | ||
60 | kmap = kmap_high_get(page); | ||
52 | if (kmap) | 61 | if (kmap) |
53 | return kmap; | 62 | return kmap; |
54 | 63 | ||
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c index 1ba6cf5a2c02..f6a999465323 100644 --- a/arch/arm/mm/init.c +++ b/arch/arm/mm/init.c | |||
@@ -678,10 +678,10 @@ void __init mem_init(void) | |||
678 | void free_initmem(void) | 678 | void free_initmem(void) |
679 | { | 679 | { |
680 | #ifdef CONFIG_HAVE_TCM | 680 | #ifdef CONFIG_HAVE_TCM |
681 | extern char *__tcm_start, *__tcm_end; | 681 | extern char __tcm_start, __tcm_end; |
682 | 682 | ||
683 | totalram_pages += free_area(__phys_to_pfn(__pa(__tcm_start)), | 683 | totalram_pages += free_area(__phys_to_pfn(__pa(&__tcm_start)), |
684 | __phys_to_pfn(__pa(__tcm_end)), | 684 | __phys_to_pfn(__pa(&__tcm_end)), |
685 | "TCM link"); | 685 | "TCM link"); |
686 | #endif | 686 | #endif |
687 | 687 | ||
diff --git a/arch/arm/plat-nomadik/timer.c b/arch/arm/plat-nomadik/timer.c index 0ff3798769ab..08aaa4a7f65f 100644 --- a/arch/arm/plat-nomadik/timer.c +++ b/arch/arm/plat-nomadik/timer.c | |||
@@ -13,7 +13,9 @@ | |||
13 | #include <linux/irq.h> | 13 | #include <linux/irq.h> |
14 | #include <linux/io.h> | 14 | #include <linux/io.h> |
15 | #include <linux/clockchips.h> | 15 | #include <linux/clockchips.h> |
16 | #include <linux/clk.h> | ||
16 | #include <linux/jiffies.h> | 17 | #include <linux/jiffies.h> |
18 | #include <linux/err.h> | ||
17 | #include <asm/mach/time.h> | 19 | #include <asm/mach/time.h> |
18 | 20 | ||
19 | #include <plat/mtu.h> | 21 | #include <plat/mtu.h> |
@@ -124,13 +126,25 @@ static struct irqaction nmdk_timer_irq = { | |||
124 | void __init nmdk_timer_init(void) | 126 | void __init nmdk_timer_init(void) |
125 | { | 127 | { |
126 | unsigned long rate; | 128 | unsigned long rate; |
127 | u32 cr = MTU_CRn_32BITS;; | 129 | struct clk *clk0; |
130 | struct clk *clk1; | ||
131 | u32 cr; | ||
132 | |||
133 | clk0 = clk_get_sys("mtu0", NULL); | ||
134 | BUG_ON(IS_ERR(clk0)); | ||
135 | |||
136 | clk1 = clk_get_sys("mtu1", NULL); | ||
137 | BUG_ON(IS_ERR(clk1)); | ||
138 | |||
139 | clk_enable(clk0); | ||
140 | clk_enable(clk1); | ||
128 | 141 | ||
129 | /* | 142 | /* |
130 | * Tick rate is 2.4MHz for Nomadik and 110MHz for ux500: | 143 | * Tick rate is 2.4MHz for Nomadik and 110MHz for ux500: |
131 | * use a divide-by-16 counter if it's more than 16MHz | 144 | * use a divide-by-16 counter if it's more than 16MHz |
132 | */ | 145 | */ |
133 | rate = CLOCK_TICK_RATE; | 146 | cr = MTU_CRn_32BITS;; |
147 | rate = clk_get_rate(clk0); | ||
134 | if (rate > 16 << 20) { | 148 | if (rate > 16 << 20) { |
135 | rate /= 16; | 149 | rate /= 16; |
136 | cr |= MTU_CRn_PRESCALE_16; | 150 | cr |= MTU_CRn_PRESCALE_16; |
@@ -153,6 +167,14 @@ void __init nmdk_timer_init(void) | |||
153 | nmdk_clksrc.name); | 167 | nmdk_clksrc.name); |
154 | 168 | ||
155 | /* Timer 1 is used for events, fix according to rate */ | 169 | /* Timer 1 is used for events, fix according to rate */ |
170 | cr = MTU_CRn_32BITS; | ||
171 | rate = clk_get_rate(clk1); | ||
172 | if (rate > 16 << 20) { | ||
173 | rate /= 16; | ||
174 | cr |= MTU_CRn_PRESCALE_16; | ||
175 | } else { | ||
176 | cr |= MTU_CRn_PRESCALE_1; | ||
177 | } | ||
156 | writel(cr | MTU_CRn_ONESHOT, mtu_base + MTU_CR(1)); /* off, currently */ | 178 | writel(cr | MTU_CRn_ONESHOT, mtu_base + MTU_CR(1)); /* off, currently */ |
157 | nmdk_clkevt.mult = div_sc(rate, NSEC_PER_SEC, nmdk_clkevt.shift); | 179 | nmdk_clkevt.mult = div_sc(rate, NSEC_PER_SEC, nmdk_clkevt.shift); |
158 | nmdk_clkevt.max_delta_ns = | 180 | nmdk_clkevt.max_delta_ns = |
diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c index c64875f11fac..44bafdab2dce 100644 --- a/arch/arm/plat-omap/dmtimer.c +++ b/arch/arm/plat-omap/dmtimer.c | |||
@@ -541,11 +541,11 @@ void omap_dm_timer_stop(struct omap_dm_timer *timer) | |||
541 | * timer is stopped | 541 | * timer is stopped |
542 | */ | 542 | */ |
543 | udelay(3500000 / clk_get_rate(timer->fclk) + 1); | 543 | udelay(3500000 / clk_get_rate(timer->fclk) + 1); |
544 | /* Ack possibly pending interrupt */ | ||
545 | omap_dm_timer_write_reg(timer, OMAP_TIMER_STAT_REG, | ||
546 | OMAP_TIMER_INT_OVERFLOW); | ||
547 | #endif | 544 | #endif |
548 | } | 545 | } |
546 | /* Ack possibly pending interrupt */ | ||
547 | omap_dm_timer_write_reg(timer, OMAP_TIMER_STAT_REG, | ||
548 | OMAP_TIMER_INT_OVERFLOW); | ||
549 | } | 549 | } |
550 | EXPORT_SYMBOL_GPL(omap_dm_timer_stop); | 550 | EXPORT_SYMBOL_GPL(omap_dm_timer_stop); |
551 | 551 | ||
diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c index 393e9219a5b6..9b7e3545f325 100644 --- a/arch/arm/plat-omap/gpio.c +++ b/arch/arm/plat-omap/gpio.c | |||
@@ -673,6 +673,7 @@ static void _set_gpio_debounce(struct gpio_bank *bank, unsigned gpio, | |||
673 | if (cpu_is_omap34xx() || cpu_is_omap44xx()) | 673 | if (cpu_is_omap34xx() || cpu_is_omap44xx()) |
674 | clk_disable(bank->dbck); | 674 | clk_disable(bank->dbck); |
675 | } | 675 | } |
676 | bank->dbck_enable_mask = val; | ||
676 | 677 | ||
677 | __raw_writel(val, reg); | 678 | __raw_writel(val, reg); |
678 | } | 679 | } |
diff --git a/arch/arm/plat-omap/iovmm.c b/arch/arm/plat-omap/iovmm.c index e43983ba59c5..8ce0de247c71 100644 --- a/arch/arm/plat-omap/iovmm.c +++ b/arch/arm/plat-omap/iovmm.c | |||
@@ -140,8 +140,10 @@ static struct sg_table *sgtable_alloc(const size_t bytes, u32 flags) | |||
140 | return ERR_PTR(-ENOMEM); | 140 | return ERR_PTR(-ENOMEM); |
141 | 141 | ||
142 | err = sg_alloc_table(sgt, nr_entries, GFP_KERNEL); | 142 | err = sg_alloc_table(sgt, nr_entries, GFP_KERNEL); |
143 | if (err) | 143 | if (err) { |
144 | kfree(sgt); | ||
144 | return ERR_PTR(err); | 145 | return ERR_PTR(err); |
146 | } | ||
145 | 147 | ||
146 | pr_debug("%s: sgt:%p(%d entries)\n", __func__, sgt, nr_entries); | 148 | pr_debug("%s: sgt:%p(%d entries)\n", __func__, sgt, nr_entries); |
147 | 149 | ||
diff --git a/arch/arm/plat-pxa/Makefile b/arch/arm/plat-pxa/Makefile index 6187edfbcb77..a17cc0c6a6b0 100644 --- a/arch/arm/plat-pxa/Makefile +++ b/arch/arm/plat-pxa/Makefile | |||
@@ -2,8 +2,9 @@ | |||
2 | # Makefile for code common across different PXA processor families | 2 | # Makefile for code common across different PXA processor families |
3 | # | 3 | # |
4 | 4 | ||
5 | obj-y := dma.o pmu.o | 5 | obj-y := dma.o |
6 | 6 | ||
7 | obj-$(CONFIG_ARCH_PXA) += pmu.o | ||
7 | obj-$(CONFIG_GENERIC_GPIO) += gpio.o | 8 | obj-$(CONFIG_GENERIC_GPIO) += gpio.o |
8 | obj-$(CONFIG_PXA3xx) += mfp.o | 9 | obj-$(CONFIG_PXA3xx) += mfp.o |
9 | obj-$(CONFIG_ARCH_MMP) += mfp.o | 10 | obj-$(CONFIG_ARCH_MMP) += mfp.o |
diff --git a/arch/arm/plat-s5p/irq-eint.c b/arch/arm/plat-s5p/irq-eint.c index e56c8075df97..f36cd3327025 100644 --- a/arch/arm/plat-s5p/irq-eint.c +++ b/arch/arm/plat-s5p/irq-eint.c | |||
@@ -71,7 +71,7 @@ static int s5p_irq_eint_set_type(unsigned int irq, unsigned int type) | |||
71 | break; | 71 | break; |
72 | 72 | ||
73 | case IRQ_TYPE_EDGE_FALLING: | 73 | case IRQ_TYPE_EDGE_FALLING: |
74 | newvalue = S5P_EXTINT_RISEEDGE; | 74 | newvalue = S5P_EXTINT_FALLEDGE; |
75 | break; | 75 | break; |
76 | 76 | ||
77 | case IRQ_TYPE_EDGE_BOTH: | 77 | case IRQ_TYPE_EDGE_BOTH: |
diff --git a/arch/arm/plat-samsung/include/plat/sdhci.h b/arch/arm/plat-samsung/include/plat/sdhci.h index 13f9fb20900a..016674fa20dd 100644 --- a/arch/arm/plat-samsung/include/plat/sdhci.h +++ b/arch/arm/plat-samsung/include/plat/sdhci.h | |||
@@ -166,8 +166,10 @@ static inline void s3c6410_default_sdhci2(void) { } | |||
166 | #else | 166 | #else |
167 | static inline void s3c6410_default_sdhci0(void) { } | 167 | static inline void s3c6410_default_sdhci0(void) { } |
168 | static inline void s3c6410_default_sdhci1(void) { } | 168 | static inline void s3c6410_default_sdhci1(void) { } |
169 | static inline void s3c6410_default_sdhci2(void) { } | ||
169 | static inline void s3c6400_default_sdhci0(void) { } | 170 | static inline void s3c6400_default_sdhci0(void) { } |
170 | static inline void s3c6400_default_sdhci1(void) { } | 171 | static inline void s3c6400_default_sdhci1(void) { } |
172 | static inline void s3c6400_default_sdhci2(void) { } | ||
171 | 173 | ||
172 | #endif /* CONFIG_S3C64XX_SETUP_SDHCI */ | 174 | #endif /* CONFIG_S3C64XX_SETUP_SDHCI */ |
173 | 175 | ||
@@ -239,7 +241,7 @@ static inline void s5pv210_default_sdhci0(void) | |||
239 | s3c_hsmmc0_def_platdata.cfg_card = s5pv210_setup_sdhci_cfg_card; | 241 | s3c_hsmmc0_def_platdata.cfg_card = s5pv210_setup_sdhci_cfg_card; |
240 | } | 242 | } |
241 | #else | 243 | #else |
242 | static inline void s5pc100_default_sdhci0(void) { } | 244 | static inline void s5pv210_default_sdhci0(void) { } |
243 | #endif /* CONFIG_S3C_DEV_HSMMC */ | 245 | #endif /* CONFIG_S3C_DEV_HSMMC */ |
244 | 246 | ||
245 | #ifdef CONFIG_S3C_DEV_HSMMC1 | 247 | #ifdef CONFIG_S3C_DEV_HSMMC1 |
diff --git a/arch/arm/vfp/vfphw.S b/arch/arm/vfp/vfphw.S index 66dc2d03b7fc..d66cead97d28 100644 --- a/arch/arm/vfp/vfphw.S +++ b/arch/arm/vfp/vfphw.S | |||
@@ -277,7 +277,7 @@ ENTRY(vfp_put_double) | |||
277 | #ifdef CONFIG_VFPv3 | 277 | #ifdef CONFIG_VFPv3 |
278 | @ d16 - d31 registers | 278 | @ d16 - d31 registers |
279 | .irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 | 279 | .irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 |
280 | 1: mcrr p11, 3, r1, r2, c\dr @ fmdrr r1, r2, d\dr | 280 | 1: mcrr p11, 3, r0, r1, c\dr @ fmdrr r0, r1, d\dr |
281 | mov pc, lr | 281 | mov pc, lr |
282 | .org 1b + 8 | 282 | .org 1b + 8 |
283 | .endr | 283 | .endr |
diff --git a/arch/cris/arch-v10/drivers/ds1302.c b/arch/cris/arch-v10/drivers/ds1302.c index 77630df94343..884275629ef7 100644 --- a/arch/cris/arch-v10/drivers/ds1302.c +++ b/arch/cris/arch-v10/drivers/ds1302.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/module.h> | 19 | #include <linux/module.h> |
20 | #include <linux/miscdevice.h> | 20 | #include <linux/miscdevice.h> |
21 | #include <linux/delay.h> | 21 | #include <linux/delay.h> |
22 | #include <linux/smp_lock.h> | ||
22 | #include <linux/bcd.h> | 23 | #include <linux/bcd.h> |
23 | #include <linux/capability.h> | 24 | #include <linux/capability.h> |
24 | 25 | ||
@@ -238,9 +239,7 @@ static unsigned char days_in_mo[] = | |||
238 | 239 | ||
239 | /* ioctl that supports RTC_RD_TIME and RTC_SET_TIME (read and set time/date). */ | 240 | /* ioctl that supports RTC_RD_TIME and RTC_SET_TIME (read and set time/date). */ |
240 | 241 | ||
241 | static int | 242 | static int rtc_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
242 | rtc_ioctl(struct inode *inode, struct file *file, unsigned int cmd, | ||
243 | unsigned long arg) | ||
244 | { | 243 | { |
245 | unsigned long flags; | 244 | unsigned long flags; |
246 | 245 | ||
@@ -354,6 +353,17 @@ rtc_ioctl(struct inode *inode, struct file *file, unsigned int cmd, | |||
354 | } | 353 | } |
355 | } | 354 | } |
356 | 355 | ||
356 | static long rtc_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | ||
357 | { | ||
358 | int ret; | ||
359 | |||
360 | lock_kernel(); | ||
361 | ret = rtc_ioctl(file, cmd, arg); | ||
362 | unlock_kernel(); | ||
363 | |||
364 | return ret; | ||
365 | } | ||
366 | |||
357 | static void | 367 | static void |
358 | print_rtc_status(void) | 368 | print_rtc_status(void) |
359 | { | 369 | { |
@@ -375,8 +385,8 @@ print_rtc_status(void) | |||
375 | /* The various file operations we support. */ | 385 | /* The various file operations we support. */ |
376 | 386 | ||
377 | static const struct file_operations rtc_fops = { | 387 | static const struct file_operations rtc_fops = { |
378 | .owner = THIS_MODULE, | 388 | .owner = THIS_MODULE, |
379 | .ioctl = rtc_ioctl, | 389 | .unlocked_ioctl = rtc_unlocked_ioctl, |
380 | }; | 390 | }; |
381 | 391 | ||
382 | /* Probe for the chip by writing something to its RAM and try reading it back. */ | 392 | /* Probe for the chip by writing something to its RAM and try reading it back. */ |
diff --git a/arch/cris/arch-v10/drivers/pcf8563.c b/arch/cris/arch-v10/drivers/pcf8563.c index 1e90c1a9c849..7dcb1f85f42b 100644 --- a/arch/cris/arch-v10/drivers/pcf8563.c +++ b/arch/cris/arch-v10/drivers/pcf8563.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <linux/delay.h> | 27 | #include <linux/delay.h> |
28 | #include <linux/bcd.h> | 28 | #include <linux/bcd.h> |
29 | #include <linux/mutex.h> | 29 | #include <linux/mutex.h> |
30 | #include <linux/smp_lock.h> | ||
30 | 31 | ||
31 | #include <asm/uaccess.h> | 32 | #include <asm/uaccess.h> |
32 | #include <asm/system.h> | 33 | #include <asm/system.h> |
@@ -53,7 +54,7 @@ static DEFINE_MUTEX(rtc_lock); /* Protect state etc */ | |||
53 | static const unsigned char days_in_month[] = | 54 | static const unsigned char days_in_month[] = |
54 | { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; | 55 | { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; |
55 | 56 | ||
56 | int pcf8563_ioctl(struct inode *, struct file *, unsigned int, unsigned long); | 57 | static long pcf8563_unlocked_ioctl(struct file *, unsigned int, unsigned long); |
57 | 58 | ||
58 | /* Cache VL bit value read at driver init since writing the RTC_SECOND | 59 | /* Cache VL bit value read at driver init since writing the RTC_SECOND |
59 | * register clears the VL status. | 60 | * register clears the VL status. |
@@ -62,7 +63,7 @@ static int voltage_low; | |||
62 | 63 | ||
63 | static const struct file_operations pcf8563_fops = { | 64 | static const struct file_operations pcf8563_fops = { |
64 | .owner = THIS_MODULE, | 65 | .owner = THIS_MODULE, |
65 | .ioctl = pcf8563_ioctl, | 66 | .unlocked_ioctl = pcf8563_unlocked_ioctl, |
66 | }; | 67 | }; |
67 | 68 | ||
68 | unsigned char | 69 | unsigned char |
@@ -212,8 +213,7 @@ pcf8563_exit(void) | |||
212 | * ioctl calls for this driver. Why return -ENOTTY upon error? Because | 213 | * ioctl calls for this driver. Why return -ENOTTY upon error? Because |
213 | * POSIX says so! | 214 | * POSIX says so! |
214 | */ | 215 | */ |
215 | int pcf8563_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, | 216 | static int pcf8563_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) |
216 | unsigned long arg) | ||
217 | { | 217 | { |
218 | /* Some sanity checks. */ | 218 | /* Some sanity checks. */ |
219 | if (_IOC_TYPE(cmd) != RTC_MAGIC) | 219 | if (_IOC_TYPE(cmd) != RTC_MAGIC) |
@@ -339,6 +339,17 @@ int pcf8563_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, | |||
339 | return 0; | 339 | return 0; |
340 | } | 340 | } |
341 | 341 | ||
342 | static long pcf8563_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | ||
343 | { | ||
344 | int ret; | ||
345 | |||
346 | lock_kernel(); | ||
347 | return pcf8563_ioctl(filp, cmd, arg); | ||
348 | unlock_kernel(); | ||
349 | |||
350 | return ret; | ||
351 | } | ||
352 | |||
342 | static int __init pcf8563_register(void) | 353 | static int __init pcf8563_register(void) |
343 | { | 354 | { |
344 | if (pcf8563_init() < 0) { | 355 | if (pcf8563_init() < 0) { |
diff --git a/arch/cris/arch-v10/kernel/irq.c b/arch/cris/arch-v10/kernel/irq.c index 1a61efc13982..a0c0df8be9c8 100644 --- a/arch/cris/arch-v10/kernel/irq.c +++ b/arch/cris/arch-v10/kernel/irq.c | |||
@@ -17,8 +17,8 @@ | |||
17 | #include <linux/kernel.h> | 17 | #include <linux/kernel.h> |
18 | #include <linux/init.h> | 18 | #include <linux/init.h> |
19 | 19 | ||
20 | #define mask_irq(irq_nr) (*R_VECT_MASK_CLR = 1 << (irq_nr)); | 20 | #define crisv10_mask_irq(irq_nr) (*R_VECT_MASK_CLR = 1 << (irq_nr)); |
21 | #define unmask_irq(irq_nr) (*R_VECT_MASK_SET = 1 << (irq_nr)); | 21 | #define crisv10_unmask_irq(irq_nr) (*R_VECT_MASK_SET = 1 << (irq_nr)); |
22 | 22 | ||
23 | /* don't use set_int_vector, it bypasses the linux interrupt handlers. it is | 23 | /* don't use set_int_vector, it bypasses the linux interrupt handlers. it is |
24 | * global just so that the kernel gdb can use it. | 24 | * global just so that the kernel gdb can use it. |
@@ -116,12 +116,12 @@ static unsigned int startup_crisv10_irq(unsigned int irq) | |||
116 | 116 | ||
117 | static void enable_crisv10_irq(unsigned int irq) | 117 | static void enable_crisv10_irq(unsigned int irq) |
118 | { | 118 | { |
119 | unmask_irq(irq); | 119 | crisv10_unmask_irq(irq); |
120 | } | 120 | } |
121 | 121 | ||
122 | static void disable_crisv10_irq(unsigned int irq) | 122 | static void disable_crisv10_irq(unsigned int irq) |
123 | { | 123 | { |
124 | mask_irq(irq); | 124 | crisv10_mask_irq(irq); |
125 | } | 125 | } |
126 | 126 | ||
127 | static void ack_crisv10_irq(unsigned int irq) | 127 | static void ack_crisv10_irq(unsigned int irq) |
diff --git a/arch/cris/arch-v10/lib/dmacopy.c b/arch/cris/arch-v10/lib/dmacopy.c index e5fb44f505c5..49f5b8ca5b47 100644 --- a/arch/cris/arch-v10/lib/dmacopy.c +++ b/arch/cris/arch-v10/lib/dmacopy.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* $Id: dmacopy.c,v 1.1 2001/12/17 13:59:27 bjornw Exp $ | 1 | /* |
2 | * | ||
3 | * memcpy for large blocks, using memory-memory DMA channels 6 and 7 in Etrax | 2 | * memcpy for large blocks, using memory-memory DMA channels 6 and 7 in Etrax |
4 | */ | 3 | */ |
5 | 4 | ||
@@ -13,11 +12,11 @@ void *dma_memcpy(void *pdst, | |||
13 | unsigned int pn) | 12 | unsigned int pn) |
14 | { | 13 | { |
15 | static etrax_dma_descr indma, outdma; | 14 | static etrax_dma_descr indma, outdma; |
16 | 15 | ||
17 | D(printk("dma_memcpy %d bytes... ", pn)); | 16 | D(printk(KERN_DEBUG "dma_memcpy %d bytes... ", pn)); |
18 | 17 | ||
19 | #if 0 | 18 | #if 0 |
20 | *R_GEN_CONFIG = genconfig_shadow = | 19 | *R_GEN_CONFIG = genconfig_shadow = |
21 | (genconfig_shadow & ~0x3c0000) | | 20 | (genconfig_shadow & ~0x3c0000) | |
22 | IO_STATE(R_GEN_CONFIG, dma6, intdma7) | | 21 | IO_STATE(R_GEN_CONFIG, dma6, intdma7) | |
23 | IO_STATE(R_GEN_CONFIG, dma7, intdma6); | 22 | IO_STATE(R_GEN_CONFIG, dma7, intdma6); |
@@ -32,11 +31,11 @@ void *dma_memcpy(void *pdst, | |||
32 | *R_DMA_CH7_FIRST = &outdma; | 31 | *R_DMA_CH7_FIRST = &outdma; |
33 | *R_DMA_CH6_CMD = IO_STATE(R_DMA_CH6_CMD, cmd, start); | 32 | *R_DMA_CH6_CMD = IO_STATE(R_DMA_CH6_CMD, cmd, start); |
34 | *R_DMA_CH7_CMD = IO_STATE(R_DMA_CH7_CMD, cmd, start); | 33 | *R_DMA_CH7_CMD = IO_STATE(R_DMA_CH7_CMD, cmd, start); |
35 | |||
36 | while(*R_DMA_CH7_CMD == 1) /* wait for completion */ ; | ||
37 | 34 | ||
38 | D(printk("done\n")); | 35 | while (*R_DMA_CH7_CMD == 1) |
36 | /* wait for completion */; | ||
39 | 37 | ||
38 | D(printk(KERN_DEBUG "done\n")); | ||
40 | } | 39 | } |
41 | 40 | ||
42 | 41 | ||
diff --git a/arch/cris/arch-v10/lib/hw_settings.S b/arch/cris/arch-v10/lib/hw_settings.S index 56905aaa7b6e..c09f19f478a5 100644 --- a/arch/cris/arch-v10/lib/hw_settings.S +++ b/arch/cris/arch-v10/lib/hw_settings.S | |||
@@ -1,13 +1,11 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: hw_settings.S,v 1.1 2001/12/17 13:59:27 bjornw Exp $ | ||
3 | * | ||
4 | * This table is used by some tools to extract hardware parameters. | 2 | * This table is used by some tools to extract hardware parameters. |
5 | * The table should be included in the kernel and the decompressor. | 3 | * The table should be included in the kernel and the decompressor. |
6 | * Don't forget to update the tools if you change this table. | 4 | * Don't forget to update the tools if you change this table. |
7 | * | 5 | * |
8 | * Copyright (C) 2001 Axis Communications AB | 6 | * Copyright (C) 2001 Axis Communications AB |
9 | * | 7 | * |
10 | * Authors: Mikael Starvik (starvik@axis.com) | 8 | * Authors: Mikael Starvik (starvik@axis.com) |
11 | */ | 9 | */ |
12 | 10 | ||
13 | #define PA_SET_VALUE ((CONFIG_ETRAX_DEF_R_PORT_PA_DIR << 8) | \ | 11 | #define PA_SET_VALUE ((CONFIG_ETRAX_DEF_R_PORT_PA_DIR << 8) | \ |
@@ -15,13 +13,13 @@ | |||
15 | #define PB_SET_VALUE ((CONFIG_ETRAX_DEF_R_PORT_PB_CONFIG << 16) | \ | 13 | #define PB_SET_VALUE ((CONFIG_ETRAX_DEF_R_PORT_PB_CONFIG << 16) | \ |
16 | (CONFIG_ETRAX_DEF_R_PORT_PB_DIR << 8) | \ | 14 | (CONFIG_ETRAX_DEF_R_PORT_PB_DIR << 8) | \ |
17 | (CONFIG_ETRAX_DEF_R_PORT_PB_DATA)) | 15 | (CONFIG_ETRAX_DEF_R_PORT_PB_DATA)) |
18 | 16 | ||
19 | .ascii "HW_PARAM_MAGIC" ; Magic number | 17 | .ascii "HW_PARAM_MAGIC" ; Magic number |
20 | .dword 0xc0004000 ; Kernel start address | 18 | .dword 0xc0004000 ; Kernel start address |
21 | 19 | ||
22 | ; Debug port | 20 | ; Debug port |
23 | #ifdef CONFIG_ETRAX_DEBUG_PORT0 | 21 | #ifdef CONFIG_ETRAX_DEBUG_PORT0 |
24 | .dword 0 | 22 | .dword 0 |
25 | #elif defined(CONFIG_ETRAX_DEBUG_PORT1) | 23 | #elif defined(CONFIG_ETRAX_DEBUG_PORT1) |
26 | .dword 1 | 24 | .dword 1 |
27 | #elif defined(CONFIG_ETRAX_DEBUG_PORT2) | 25 | #elif defined(CONFIG_ETRAX_DEBUG_PORT2) |
@@ -30,7 +28,7 @@ | |||
30 | .dword 3 | 28 | .dword 3 |
31 | #else | 29 | #else |
32 | .dword 4 ; No debug | 30 | .dword 4 ; No debug |
33 | #endif | 31 | #endif |
34 | 32 | ||
35 | ; SDRAM or EDO DRAM? | 33 | ; SDRAM or EDO DRAM? |
36 | #ifdef CONFIG_ETRAX_SDRAM | 34 | #ifdef CONFIG_ETRAX_SDRAM |
@@ -39,7 +37,7 @@ | |||
39 | .dword 0 | 37 | .dword 0 |
40 | #endif | 38 | #endif |
41 | 39 | ||
42 | ; Register values | 40 | ; Register values |
43 | .dword R_WAITSTATES | 41 | .dword R_WAITSTATES |
44 | .dword CONFIG_ETRAX_DEF_R_WAITSTATES | 42 | .dword CONFIG_ETRAX_DEF_R_WAITSTATES |
45 | .dword R_BUS_CONFIG | 43 | .dword R_BUS_CONFIG |
@@ -56,7 +54,7 @@ | |||
56 | .dword CONFIG_ETRAX_DEF_R_DRAM_TIMING | 54 | .dword CONFIG_ETRAX_DEF_R_DRAM_TIMING |
57 | #endif | 55 | #endif |
58 | .dword R_PORT_PA_SET | 56 | .dword R_PORT_PA_SET |
59 | .dword PA_SET_VALUE | 57 | .dword PA_SET_VALUE |
60 | .dword R_PORT_PB_SET | 58 | .dword R_PORT_PB_SET |
61 | .dword PB_SET_VALUE | 59 | .dword PB_SET_VALUE |
62 | .dword 0 ; No more register values | 60 | .dword 0 ; No more register values |
diff --git a/arch/cris/arch-v32/drivers/Kconfig b/arch/cris/arch-v32/drivers/Kconfig index b9e328e688be..a2dd740c5907 100644 --- a/arch/cris/arch-v32/drivers/Kconfig +++ b/arch/cris/arch-v32/drivers/Kconfig | |||
@@ -360,24 +360,10 @@ config ETRAX_SER4_DSR_BIT | |||
360 | string "Ser 4 DSR bit (empty = not used)" | 360 | string "Ser 4 DSR bit (empty = not used)" |
361 | depends on ETRAX_SERIAL_PORT4 | 361 | depends on ETRAX_SERIAL_PORT4 |
362 | 362 | ||
363 | config ETRAX_SER3_CD_BIT | 363 | config ETRAX_SER4_CD_BIT |
364 | string "Ser 4 CD bit (empty = not used)" | 364 | string "Ser 4 CD bit (empty = not used)" |
365 | depends on ETRAX_SERIAL_PORT4 | 365 | depends on ETRAX_SERIAL_PORT4 |
366 | 366 | ||
367 | config ETRAX_RS485 | ||
368 | bool "RS-485 support" | ||
369 | depends on ETRAXFS_SERIAL | ||
370 | help | ||
371 | Enables support for RS-485 serial communication. For a primer on | ||
372 | RS-485, see <http://www.hw.cz/english/docs/rs485/rs485.html>. | ||
373 | |||
374 | config ETRAX_RS485_DISABLE_RECEIVER | ||
375 | bool "Disable serial receiver" | ||
376 | depends on ETRAX_RS485 | ||
377 | help | ||
378 | It is necessary to disable the serial receiver to avoid serial | ||
379 | loopback. Not all products are able to do this in software only. | ||
380 | |||
381 | config ETRAX_SYNCHRONOUS_SERIAL | 367 | config ETRAX_SYNCHRONOUS_SERIAL |
382 | bool "Synchronous serial-port support" | 368 | bool "Synchronous serial-port support" |
383 | depends on ETRAX_ARCH_V32 | 369 | depends on ETRAX_ARCH_V32 |
diff --git a/arch/cris/arch-v32/drivers/i2c.c b/arch/cris/arch-v32/drivers/i2c.c index 506826399ae7..2fd6a740d895 100644 --- a/arch/cris/arch-v32/drivers/i2c.c +++ b/arch/cris/arch-v32/drivers/i2c.c | |||
@@ -649,10 +649,10 @@ i2c_release(struct inode *inode, struct file *filp) | |||
649 | /* Main device API. ioctl's to write or read to/from i2c registers. | 649 | /* Main device API. ioctl's to write or read to/from i2c registers. |
650 | */ | 650 | */ |
651 | 651 | ||
652 | static int | 652 | static long |
653 | i2c_ioctl(struct inode *inode, struct file *file, | 653 | i2c_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
654 | unsigned int cmd, unsigned long arg) | ||
655 | { | 654 | { |
655 | int ret; | ||
656 | if(_IOC_TYPE(cmd) != ETRAXI2C_IOCTYPE) { | 656 | if(_IOC_TYPE(cmd) != ETRAXI2C_IOCTYPE) { |
657 | return -ENOTTY; | 657 | return -ENOTTY; |
658 | } | 658 | } |
@@ -665,9 +665,13 @@ i2c_ioctl(struct inode *inode, struct file *file, | |||
665 | I2C_ARGREG(arg), | 665 | I2C_ARGREG(arg), |
666 | I2C_ARGVALUE(arg))); | 666 | I2C_ARGVALUE(arg))); |
667 | 667 | ||
668 | return i2c_writereg(I2C_ARGSLAVE(arg), | 668 | lock_kernel(); |
669 | ret = i2c_writereg(I2C_ARGSLAVE(arg), | ||
669 | I2C_ARGREG(arg), | 670 | I2C_ARGREG(arg), |
670 | I2C_ARGVALUE(arg)); | 671 | I2C_ARGVALUE(arg)); |
672 | unlock_kernel(); | ||
673 | return ret; | ||
674 | |||
671 | case I2C_READREG: | 675 | case I2C_READREG: |
672 | { | 676 | { |
673 | unsigned char val; | 677 | unsigned char val; |
@@ -675,7 +679,9 @@ i2c_ioctl(struct inode *inode, struct file *file, | |||
675 | D(printk("i2cr %d %d ", | 679 | D(printk("i2cr %d %d ", |
676 | I2C_ARGSLAVE(arg), | 680 | I2C_ARGSLAVE(arg), |
677 | I2C_ARGREG(arg))); | 681 | I2C_ARGREG(arg))); |
682 | lock_kernel(); | ||
678 | val = i2c_readreg(I2C_ARGSLAVE(arg), I2C_ARGREG(arg)); | 683 | val = i2c_readreg(I2C_ARGSLAVE(arg), I2C_ARGREG(arg)); |
684 | unlock_kernel(); | ||
679 | D(printk("= %d\n", val)); | 685 | D(printk("= %d\n", val)); |
680 | return val; | 686 | return val; |
681 | } | 687 | } |
@@ -688,10 +694,10 @@ i2c_ioctl(struct inode *inode, struct file *file, | |||
688 | } | 694 | } |
689 | 695 | ||
690 | static const struct file_operations i2c_fops = { | 696 | static const struct file_operations i2c_fops = { |
691 | .owner = THIS_MODULE, | 697 | .owner = THIS_MODULE, |
692 | .ioctl = i2c_ioctl, | 698 | .unlocked_ioctl = i2c_ioctl, |
693 | .open = i2c_open, | 699 | .open = i2c_open, |
694 | .release = i2c_release, | 700 | .release = i2c_release, |
695 | }; | 701 | }; |
696 | 702 | ||
697 | static int __init i2c_init(void) | 703 | static int __init i2c_init(void) |
diff --git a/arch/cris/arch-v32/drivers/pcf8563.c b/arch/cris/arch-v32/drivers/pcf8563.c index f4478506e52c..bef6eb53b153 100644 --- a/arch/cris/arch-v32/drivers/pcf8563.c +++ b/arch/cris/arch-v32/drivers/pcf8563.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/init.h> | 24 | #include <linux/init.h> |
25 | #include <linux/fs.h> | 25 | #include <linux/fs.h> |
26 | #include <linux/ioctl.h> | 26 | #include <linux/ioctl.h> |
27 | #include <linux/smp_lock.h> | ||
27 | #include <linux/delay.h> | 28 | #include <linux/delay.h> |
28 | #include <linux/bcd.h> | 29 | #include <linux/bcd.h> |
29 | #include <linux/mutex.h> | 30 | #include <linux/mutex.h> |
@@ -49,7 +50,7 @@ static DEFINE_MUTEX(rtc_lock); /* Protect state etc */ | |||
49 | static const unsigned char days_in_month[] = | 50 | static const unsigned char days_in_month[] = |
50 | { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; | 51 | { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; |
51 | 52 | ||
52 | int pcf8563_ioctl(struct inode *, struct file *, unsigned int, unsigned long); | 53 | static long pcf8563_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg); |
53 | 54 | ||
54 | /* Cache VL bit value read at driver init since writing the RTC_SECOND | 55 | /* Cache VL bit value read at driver init since writing the RTC_SECOND |
55 | * register clears the VL status. | 56 | * register clears the VL status. |
@@ -57,8 +58,8 @@ int pcf8563_ioctl(struct inode *, struct file *, unsigned int, unsigned long); | |||
57 | static int voltage_low; | 58 | static int voltage_low; |
58 | 59 | ||
59 | static const struct file_operations pcf8563_fops = { | 60 | static const struct file_operations pcf8563_fops = { |
60 | .owner = THIS_MODULE, | 61 | .owner = THIS_MODULE, |
61 | .ioctl = pcf8563_ioctl | 62 | .unlocked_ioctl = pcf8563_unlocked_ioctl, |
62 | }; | 63 | }; |
63 | 64 | ||
64 | unsigned char | 65 | unsigned char |
@@ -208,8 +209,7 @@ pcf8563_exit(void) | |||
208 | * ioctl calls for this driver. Why return -ENOTTY upon error? Because | 209 | * ioctl calls for this driver. Why return -ENOTTY upon error? Because |
209 | * POSIX says so! | 210 | * POSIX says so! |
210 | */ | 211 | */ |
211 | int pcf8563_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, | 212 | static int pcf8563_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) |
212 | unsigned long arg) | ||
213 | { | 213 | { |
214 | /* Some sanity checks. */ | 214 | /* Some sanity checks. */ |
215 | if (_IOC_TYPE(cmd) != RTC_MAGIC) | 215 | if (_IOC_TYPE(cmd) != RTC_MAGIC) |
@@ -335,6 +335,17 @@ int pcf8563_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, | |||
335 | return 0; | 335 | return 0; |
336 | } | 336 | } |
337 | 337 | ||
338 | static long pcf8563_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | ||
339 | { | ||
340 | int ret; | ||
341 | |||
342 | lock_kernel(); | ||
343 | return pcf8563_ioctl(filp, cmd, arg); | ||
344 | unlock_kernel(); | ||
345 | |||
346 | return ret; | ||
347 | } | ||
348 | |||
338 | static int __init pcf8563_register(void) | 349 | static int __init pcf8563_register(void) |
339 | { | 350 | { |
340 | if (pcf8563_init() < 0) { | 351 | if (pcf8563_init() < 0) { |
diff --git a/arch/cris/arch-v32/kernel/crisksyms.c b/arch/cris/arch-v32/kernel/crisksyms.c index 64933e2c0f5b..bde8d1a10cad 100644 --- a/arch/cris/arch-v32/kernel/crisksyms.c +++ b/arch/cris/arch-v32/kernel/crisksyms.c | |||
@@ -24,5 +24,5 @@ EXPORT_SYMBOL(crisv32_io_get_name); | |||
24 | EXPORT_SYMBOL(crisv32_io_get); | 24 | EXPORT_SYMBOL(crisv32_io_get); |
25 | 25 | ||
26 | /* Functions masking/unmasking interrupts */ | 26 | /* Functions masking/unmasking interrupts */ |
27 | EXPORT_SYMBOL(mask_irq); | 27 | EXPORT_SYMBOL(crisv32_mask_irq); |
28 | EXPORT_SYMBOL(unmask_irq); | 28 | EXPORT_SYMBOL(crisv32_unmask_irq); |
diff --git a/arch/cris/arch-v32/kernel/irq.c b/arch/cris/arch-v32/kernel/irq.c index b6241198fb98..0b1febe44aa3 100644 --- a/arch/cris/arch-v32/kernel/irq.c +++ b/arch/cris/arch-v32/kernel/irq.c | |||
@@ -280,8 +280,7 @@ out: | |||
280 | return cpu; | 280 | return cpu; |
281 | } | 281 | } |
282 | 282 | ||
283 | void | 283 | void crisv32_mask_irq(int irq) |
284 | mask_irq(int irq) | ||
285 | { | 284 | { |
286 | int cpu; | 285 | int cpu; |
287 | 286 | ||
@@ -289,8 +288,7 @@ mask_irq(int irq) | |||
289 | block_irq(irq, cpu); | 288 | block_irq(irq, cpu); |
290 | } | 289 | } |
291 | 290 | ||
292 | void | 291 | void crisv32_unmask_irq(int irq) |
293 | unmask_irq(int irq) | ||
294 | { | 292 | { |
295 | unblock_irq(irq, irq_cpu(irq)); | 293 | unblock_irq(irq, irq_cpu(irq)); |
296 | } | 294 | } |
@@ -298,23 +296,23 @@ unmask_irq(int irq) | |||
298 | 296 | ||
299 | static unsigned int startup_crisv32_irq(unsigned int irq) | 297 | static unsigned int startup_crisv32_irq(unsigned int irq) |
300 | { | 298 | { |
301 | unmask_irq(irq); | 299 | crisv32_unmask_irq(irq); |
302 | return 0; | 300 | return 0; |
303 | } | 301 | } |
304 | 302 | ||
305 | static void shutdown_crisv32_irq(unsigned int irq) | 303 | static void shutdown_crisv32_irq(unsigned int irq) |
306 | { | 304 | { |
307 | mask_irq(irq); | 305 | crisv32_mask_irq(irq); |
308 | } | 306 | } |
309 | 307 | ||
310 | static void enable_crisv32_irq(unsigned int irq) | 308 | static void enable_crisv32_irq(unsigned int irq) |
311 | { | 309 | { |
312 | unmask_irq(irq); | 310 | crisv32_unmask_irq(irq); |
313 | } | 311 | } |
314 | 312 | ||
315 | static void disable_crisv32_irq(unsigned int irq) | 313 | static void disable_crisv32_irq(unsigned int irq) |
316 | { | 314 | { |
317 | mask_irq(irq); | 315 | crisv32_mask_irq(irq); |
318 | } | 316 | } |
319 | 317 | ||
320 | static void ack_crisv32_irq(unsigned int irq) | 318 | static void ack_crisv32_irq(unsigned int irq) |
diff --git a/arch/cris/arch-v32/kernel/smp.c b/arch/cris/arch-v32/kernel/smp.c index 058adddf4e4b..84fed3b4b079 100644 --- a/arch/cris/arch-v32/kernel/smp.c +++ b/arch/cris/arch-v32/kernel/smp.c | |||
@@ -168,8 +168,8 @@ void __init smp_callin(void) | |||
168 | 168 | ||
169 | /* Enable IRQ and idle */ | 169 | /* Enable IRQ and idle */ |
170 | REG_WR(intr_vect, irq_regs[cpu], rw_mask, vect_mask); | 170 | REG_WR(intr_vect, irq_regs[cpu], rw_mask, vect_mask); |
171 | unmask_irq(IPI_INTR_VECT); | 171 | crisv32_unmask_irq(IPI_INTR_VECT); |
172 | unmask_irq(TIMER0_INTR_VECT); | 172 | crisv32_unmask_irq(TIMER0_INTR_VECT); |
173 | preempt_disable(); | 173 | preempt_disable(); |
174 | notify_cpu_starting(cpu); | 174 | notify_cpu_starting(cpu); |
175 | local_irq_enable(); | 175 | local_irq_enable(); |
diff --git a/arch/cris/include/arch-v10/arch/irq.h b/arch/cris/include/arch-v10/arch/irq.h index 6248004eca1c..7d345947b3ee 100644 --- a/arch/cris/include/arch-v10/arch/irq.h +++ b/arch/cris/include/arch-v10/arch/irq.h | |||
@@ -93,15 +93,16 @@ void set_break_vector(int n, irqvectptr addr); | |||
93 | "push $r10\n\t" /* push orig_r10 */ \ | 93 | "push $r10\n\t" /* push orig_r10 */ \ |
94 | "clear.d [$sp=$sp-4]\n\t" /* frametype - this is a normal stackframe */ | 94 | "clear.d [$sp=$sp-4]\n\t" /* frametype - this is a normal stackframe */ |
95 | 95 | ||
96 | /* BLOCK_IRQ and UNBLOCK_IRQ do the same as mask_irq and unmask_irq */ | 96 | /* BLOCK_IRQ and UNBLOCK_IRQ do the same as |
97 | * crisv10_mask_irq and crisv10_unmask_irq */ | ||
97 | 98 | ||
98 | #define BLOCK_IRQ(mask,nr) \ | 99 | #define BLOCK_IRQ(mask,nr) \ |
99 | "move.d " #mask ",$r0\n\t" \ | 100 | "move.d " #mask ",$r0\n\t" \ |
100 | "move.d $r0,[0xb00000d8]\n\t" | 101 | "move.d $r0,[0xb00000d8]\n\t" |
101 | 102 | ||
102 | #define UNBLOCK_IRQ(mask) \ | 103 | #define UNBLOCK_IRQ(mask) \ |
103 | "move.d " #mask ",$r0\n\t" \ | 104 | "move.d " #mask ",$r0\n\t" \ |
104 | "move.d $r0,[0xb00000dc]\n\t" | 105 | "move.d $r0,[0xb00000dc]\n\t" |
105 | 106 | ||
106 | #define IRQ_NAME2(nr) nr##_interrupt(void) | 107 | #define IRQ_NAME2(nr) nr##_interrupt(void) |
107 | #define IRQ_NAME(nr) IRQ_NAME2(IRQ##nr) | 108 | #define IRQ_NAME(nr) IRQ_NAME2(IRQ##nr) |
diff --git a/arch/cris/include/arch-v32/arch/irq.h b/arch/cris/include/arch-v32/arch/irq.h index 9e4c9fbdfddf..b31e9984f849 100644 --- a/arch/cris/include/arch-v32/arch/irq.h +++ b/arch/cris/include/arch-v32/arch/irq.h | |||
@@ -23,8 +23,8 @@ struct etrax_interrupt_vector { | |||
23 | 23 | ||
24 | extern struct etrax_interrupt_vector *etrax_irv; /* head.S */ | 24 | extern struct etrax_interrupt_vector *etrax_irv; /* head.S */ |
25 | 25 | ||
26 | void mask_irq(int irq); | 26 | void crisv32_mask_irq(int irq); |
27 | void unmask_irq(int irq); | 27 | void crisv32_unmask_irq(int irq); |
28 | 28 | ||
29 | void set_exception_vector(int n, irqvectptr addr); | 29 | void set_exception_vector(int n, irqvectptr addr); |
30 | 30 | ||
diff --git a/arch/cris/include/asm/param.h b/arch/cris/include/asm/param.h index 0e47994e40be..484fcf8667c0 100644 --- a/arch/cris/include/asm/param.h +++ b/arch/cris/include/asm/param.h | |||
@@ -2,22 +2,9 @@ | |||
2 | #define _ASMCRIS_PARAM_H | 2 | #define _ASMCRIS_PARAM_H |
3 | 3 | ||
4 | /* Currently we assume that HZ=100 is good for CRIS. */ | 4 | /* Currently we assume that HZ=100 is good for CRIS. */ |
5 | #ifdef __KERNEL__ | ||
6 | # define HZ CONFIG_HZ /* Internal kernel timer frequency */ | ||
7 | # define USER_HZ 100 /* .. some user interfaces are in "ticks" */ | ||
8 | # define CLOCKS_PER_SEC (USER_HZ) /* like times() */ | ||
9 | #endif | ||
10 | |||
11 | #ifndef HZ | ||
12 | #define HZ 100 | ||
13 | #endif | ||
14 | 5 | ||
15 | #define EXEC_PAGESIZE 8192 | 6 | #define EXEC_PAGESIZE 8192 |
16 | 7 | ||
17 | #ifndef NOGROUP | 8 | #include <asm-generic/param.h> |
18 | #define NOGROUP (-1) | ||
19 | #endif | ||
20 | |||
21 | #define MAXHOSTNAMELEN 64 /* max length of hostname */ | ||
22 | 9 | ||
23 | #endif | 10 | #endif /* _ASMCRIS_PARAM_H */ |
diff --git a/arch/frv/kernel/break.S b/arch/frv/kernel/break.S index bd0bdf908d93..cbb6958a3147 100644 --- a/arch/frv/kernel/break.S +++ b/arch/frv/kernel/break.S | |||
@@ -21,7 +21,7 @@ | |||
21 | # | 21 | # |
22 | # the break handler has its own stack | 22 | # the break handler has its own stack |
23 | # | 23 | # |
24 | .section .bss.stack | 24 | .section .bss..stack |
25 | .globl __break_user_context | 25 | .globl __break_user_context |
26 | .balign THREAD_SIZE | 26 | .balign THREAD_SIZE |
27 | __break_stack: | 27 | __break_stack: |
@@ -63,7 +63,7 @@ __break_trace_through_exceptions: | |||
63 | # entry point for Break Exceptions/Interrupts | 63 | # entry point for Break Exceptions/Interrupts |
64 | # | 64 | # |
65 | ############################################################################### | 65 | ############################################################################### |
66 | .section .text.break | 66 | .section .text..break |
67 | .balign 4 | 67 | .balign 4 |
68 | .globl __entry_break | 68 | .globl __entry_break |
69 | __entry_break: | 69 | __entry_break: |
diff --git a/arch/frv/kernel/entry.S b/arch/frv/kernel/entry.S index 189397ec012a..63d579bf1c29 100644 --- a/arch/frv/kernel/entry.S +++ b/arch/frv/kernel/entry.S | |||
@@ -38,7 +38,7 @@ | |||
38 | 38 | ||
39 | #define nr_syscalls ((syscall_table_size)/4) | 39 | #define nr_syscalls ((syscall_table_size)/4) |
40 | 40 | ||
41 | .section .text.entry | 41 | .section .text..entry |
42 | .balign 4 | 42 | .balign 4 |
43 | 43 | ||
44 | .macro LEDS val | 44 | .macro LEDS val |
diff --git a/arch/frv/kernel/gdb-stub.c b/arch/frv/kernel/gdb-stub.c index 84d103c33c9c..a4dba6b20bd0 100644 --- a/arch/frv/kernel/gdb-stub.c +++ b/arch/frv/kernel/gdb-stub.c | |||
@@ -1789,6 +1789,12 @@ void gdbstub(int sigval) | |||
1789 | flush_cache = 1; | 1789 | flush_cache = 1; |
1790 | break; | 1790 | break; |
1791 | 1791 | ||
1792 | /* pNN: Read value of reg N and return it */ | ||
1793 | case 'p': | ||
1794 | /* return no value, indicating that we don't support | ||
1795 | * this command and that gdb should use 'g' instead */ | ||
1796 | break; | ||
1797 | |||
1792 | /* PNN,=RRRRRRRR: Write value R to reg N return OK */ | 1798 | /* PNN,=RRRRRRRR: Write value R to reg N return OK */ |
1793 | case 'P': | 1799 | case 'P': |
1794 | ptr = &input_buffer[1]; | 1800 | ptr = &input_buffer[1]; |
diff --git a/arch/frv/kernel/head.S b/arch/frv/kernel/head.S index b825ef3f2d54..e9a8cc63ac94 100644 --- a/arch/frv/kernel/head.S +++ b/arch/frv/kernel/head.S | |||
@@ -542,7 +542,7 @@ __head_end: | |||
542 | .size _boot, .-_boot | 542 | .size _boot, .-_boot |
543 | 543 | ||
544 | # provide a point for GDB to place a break | 544 | # provide a point for GDB to place a break |
545 | .section .text.start,"ax" | 545 | .section .text..start,"ax" |
546 | .globl _start | 546 | .globl _start |
547 | .balign 4 | 547 | .balign 4 |
548 | _start: | 548 | _start: |
diff --git a/arch/frv/kernel/vmlinux.lds.S b/arch/frv/kernel/vmlinux.lds.S index cbe811fccfcc..8b973f3cc90e 100644 --- a/arch/frv/kernel/vmlinux.lds.S +++ b/arch/frv/kernel/vmlinux.lds.S | |||
@@ -57,10 +57,10 @@ SECTIONS | |||
57 | _text = .; | 57 | _text = .; |
58 | _stext = .; | 58 | _stext = .; |
59 | .text : { | 59 | .text : { |
60 | *(.text.start) | 60 | *(.text..start) |
61 | *(.text.entry) | 61 | *(.text..entry) |
62 | *(.text.break) | 62 | *(.text..break) |
63 | *(.text.tlbmiss) | 63 | *(.text..tlbmiss) |
64 | TEXT_TEXT | 64 | TEXT_TEXT |
65 | SCHED_TEXT | 65 | SCHED_TEXT |
66 | LOCK_TEXT | 66 | LOCK_TEXT |
@@ -114,7 +114,7 @@ SECTIONS | |||
114 | 114 | ||
115 | .sbss : { *(.sbss .sbss.*) } | 115 | .sbss : { *(.sbss .sbss.*) } |
116 | .bss : { *(.bss .bss.*) } | 116 | .bss : { *(.bss .bss.*) } |
117 | .bss.stack : { *(.bss) } | 117 | .bss..stack : { *(.bss) } |
118 | 118 | ||
119 | __bss_stop = .; | 119 | __bss_stop = .; |
120 | _end = . ; | 120 | _end = . ; |
diff --git a/arch/frv/mm/fault.c b/arch/frv/mm/fault.c index 30f5d100a81c..a325d57a83d5 100644 --- a/arch/frv/mm/fault.c +++ b/arch/frv/mm/fault.c | |||
@@ -257,10 +257,10 @@ asmlinkage void do_page_fault(int datammu, unsigned long esr0, unsigned long ear | |||
257 | */ | 257 | */ |
258 | out_of_memory: | 258 | out_of_memory: |
259 | up_read(&mm->mmap_sem); | 259 | up_read(&mm->mmap_sem); |
260 | printk("VM: killing process %s\n", current->comm); | 260 | if (!user_mode(__frame)) |
261 | if (user_mode(__frame)) | 261 | goto no_context; |
262 | do_group_exit(SIGKILL); | 262 | pagefault_out_of_memory(); |
263 | goto no_context; | 263 | return; |
264 | 264 | ||
265 | do_sigbus: | 265 | do_sigbus: |
266 | up_read(&mm->mmap_sem); | 266 | up_read(&mm->mmap_sem); |
diff --git a/arch/frv/mm/tlb-miss.S b/arch/frv/mm/tlb-miss.S index 7f392bc651a3..f3ac019bb18b 100644 --- a/arch/frv/mm/tlb-miss.S +++ b/arch/frv/mm/tlb-miss.S | |||
@@ -15,7 +15,7 @@ | |||
15 | #include <asm/pgtable.h> | 15 | #include <asm/pgtable.h> |
16 | #include <asm/spr-regs.h> | 16 | #include <asm/spr-regs.h> |
17 | 17 | ||
18 | .section .text.tlbmiss | 18 | .section .text..tlbmiss |
19 | .balign 4 | 19 | .balign 4 |
20 | 20 | ||
21 | .globl __entry_insn_mmu_miss | 21 | .globl __entry_insn_mmu_miss |
diff --git a/arch/h8300/boot/compressed/head.S b/arch/h8300/boot/compressed/head.S index 985a81a2435a..10e9a2d1cc6c 100644 --- a/arch/h8300/boot/compressed/head.S +++ b/arch/h8300/boot/compressed/head.S | |||
@@ -9,7 +9,7 @@ | |||
9 | 9 | ||
10 | #define SRAM_START 0xff4000 | 10 | #define SRAM_START 0xff4000 |
11 | 11 | ||
12 | .section .text.startup | 12 | .section .text..startup |
13 | .global startup | 13 | .global startup |
14 | startup: | 14 | startup: |
15 | mov.l #SRAM_START+0x8000, sp | 15 | mov.l #SRAM_START+0x8000, sp |
diff --git a/arch/h8300/boot/compressed/vmlinux.lds b/arch/h8300/boot/compressed/vmlinux.lds index 65e2a0d1ae39..a0a3a0ed54ef 100644 --- a/arch/h8300/boot/compressed/vmlinux.lds +++ b/arch/h8300/boot/compressed/vmlinux.lds | |||
@@ -4,7 +4,7 @@ SECTIONS | |||
4 | { | 4 | { |
5 | __stext = . ; | 5 | __stext = . ; |
6 | __text = .; | 6 | __text = .; |
7 | *(.text.startup) | 7 | *(.text..startup) |
8 | *(.text) | 8 | *(.text) |
9 | __etext = . ; | 9 | __etext = . ; |
10 | } | 10 | } |
diff --git a/arch/ia64/include/asm/asmmacro.h b/arch/ia64/include/asm/asmmacro.h index c1642fd64029..3ab6d75aa3db 100644 --- a/arch/ia64/include/asm/asmmacro.h +++ b/arch/ia64/include/asm/asmmacro.h | |||
@@ -70,12 +70,12 @@ name: | |||
70 | * path (ivt.S - TLB miss processing) or in places where it might not be | 70 | * path (ivt.S - TLB miss processing) or in places where it might not be |
71 | * safe to use a "tpa" instruction (mca_asm.S - error recovery). | 71 | * safe to use a "tpa" instruction (mca_asm.S - error recovery). |
72 | */ | 72 | */ |
73 | .section ".data.patch.vtop", "a" // declare section & section attributes | 73 | .section ".data..patch.vtop", "a" // declare section & section attributes |
74 | .previous | 74 | .previous |
75 | 75 | ||
76 | #define LOAD_PHYSICAL(pr, reg, obj) \ | 76 | #define LOAD_PHYSICAL(pr, reg, obj) \ |
77 | [1:](pr)movl reg = obj; \ | 77 | [1:](pr)movl reg = obj; \ |
78 | .xdata4 ".data.patch.vtop", 1b-. | 78 | .xdata4 ".data..patch.vtop", 1b-. |
79 | 79 | ||
80 | /* | 80 | /* |
81 | * For now, we always put in the McKinley E9 workaround. On CPUs that don't need it, | 81 | * For now, we always put in the McKinley E9 workaround. On CPUs that don't need it, |
@@ -84,11 +84,11 @@ name: | |||
84 | #define DO_MCKINLEY_E9_WORKAROUND | 84 | #define DO_MCKINLEY_E9_WORKAROUND |
85 | 85 | ||
86 | #ifdef DO_MCKINLEY_E9_WORKAROUND | 86 | #ifdef DO_MCKINLEY_E9_WORKAROUND |
87 | .section ".data.patch.mckinley_e9", "a" | 87 | .section ".data..patch.mckinley_e9", "a" |
88 | .previous | 88 | .previous |
89 | /* workaround for Itanium 2 Errata 9: */ | 89 | /* workaround for Itanium 2 Errata 9: */ |
90 | # define FSYS_RETURN \ | 90 | # define FSYS_RETURN \ |
91 | .xdata4 ".data.patch.mckinley_e9", 1f-.; \ | 91 | .xdata4 ".data..patch.mckinley_e9", 1f-.; \ |
92 | 1:{ .mib; \ | 92 | 1:{ .mib; \ |
93 | nop.m 0; \ | 93 | nop.m 0; \ |
94 | mov r16=ar.pfs; \ | 94 | mov r16=ar.pfs; \ |
@@ -107,11 +107,11 @@ name: | |||
107 | * If physical stack register size is different from DEF_NUM_STACK_REG, | 107 | * If physical stack register size is different from DEF_NUM_STACK_REG, |
108 | * dynamically patch the kernel for correct size. | 108 | * dynamically patch the kernel for correct size. |
109 | */ | 109 | */ |
110 | .section ".data.patch.phys_stack_reg", "a" | 110 | .section ".data..patch.phys_stack_reg", "a" |
111 | .previous | 111 | .previous |
112 | #define LOAD_PHYS_STACK_REG_SIZE(reg) \ | 112 | #define LOAD_PHYS_STACK_REG_SIZE(reg) \ |
113 | [1:] adds reg=IA64_NUM_PHYS_STACK_REG*8+8,r0; \ | 113 | [1:] adds reg=IA64_NUM_PHYS_STACK_REG*8+8,r0; \ |
114 | .xdata4 ".data.patch.phys_stack_reg", 1b-. | 114 | .xdata4 ".data..patch.phys_stack_reg", 1b-. |
115 | 115 | ||
116 | /* | 116 | /* |
117 | * Up until early 2004, use of .align within a function caused bad unwind info. | 117 | * Up until early 2004, use of .align within a function caused bad unwind info. |
diff --git a/arch/ia64/include/asm/cache.h b/arch/ia64/include/asm/cache.h index e7482bd628ff..988254a7d349 100644 --- a/arch/ia64/include/asm/cache.h +++ b/arch/ia64/include/asm/cache.h | |||
@@ -24,6 +24,6 @@ | |||
24 | # define SMP_CACHE_BYTES (1 << 3) | 24 | # define SMP_CACHE_BYTES (1 << 3) |
25 | #endif | 25 | #endif |
26 | 26 | ||
27 | #define __read_mostly __attribute__((__section__(".data.read_mostly"))) | 27 | #define __read_mostly __attribute__((__section__(".data..read_mostly"))) |
28 | 28 | ||
29 | #endif /* _ASM_IA64_CACHE_H */ | 29 | #endif /* _ASM_IA64_CACHE_H */ |
diff --git a/arch/ia64/include/asm/percpu.h b/arch/ia64/include/asm/percpu.h index 1bd408265694..14aa1c58912b 100644 --- a/arch/ia64/include/asm/percpu.h +++ b/arch/ia64/include/asm/percpu.h | |||
@@ -31,7 +31,7 @@ extern void *per_cpu_init(void); | |||
31 | 31 | ||
32 | #endif /* SMP */ | 32 | #endif /* SMP */ |
33 | 33 | ||
34 | #define PER_CPU_BASE_SECTION ".data.percpu" | 34 | #define PER_CPU_BASE_SECTION ".data..percpu" |
35 | 35 | ||
36 | /* | 36 | /* |
37 | * Be extremely careful when taking the address of this variable! Due to virtual | 37 | * Be extremely careful when taking the address of this variable! Due to virtual |
diff --git a/arch/ia64/kernel/Makefile.gate b/arch/ia64/kernel/Makefile.gate index ab9b03a9adcc..ceeffc509764 100644 --- a/arch/ia64/kernel/Makefile.gate +++ b/arch/ia64/kernel/Makefile.gate | |||
@@ -21,7 +21,7 @@ GATECFLAGS_gate-syms.o = -r | |||
21 | $(obj)/gate-syms.o: $(obj)/gate.lds $(obj)/gate.o FORCE | 21 | $(obj)/gate-syms.o: $(obj)/gate.lds $(obj)/gate.o FORCE |
22 | $(call if_changed,gate) | 22 | $(call if_changed,gate) |
23 | 23 | ||
24 | # gate-data.o contains the gate DSO image as data in section .data.gate. | 24 | # gate-data.o contains the gate DSO image as data in section .data..gate. |
25 | # We must build gate.so before we can assemble it. | 25 | # We must build gate.so before we can assemble it. |
26 | # Note: kbuild does not track this dependency due to usage of .incbin | 26 | # Note: kbuild does not track this dependency due to usage of .incbin |
27 | $(obj)/gate-data.o: $(obj)/gate.so | 27 | $(obj)/gate-data.o: $(obj)/gate.so |
diff --git a/arch/ia64/kernel/gate-data.S b/arch/ia64/kernel/gate-data.S index 258c0a3238fb..b3ef1c72e132 100644 --- a/arch/ia64/kernel/gate-data.S +++ b/arch/ia64/kernel/gate-data.S | |||
@@ -1,3 +1,3 @@ | |||
1 | .section .data.gate, "aw" | 1 | .section .data..gate, "aw" |
2 | 2 | ||
3 | .incbin "arch/ia64/kernel/gate.so" | 3 | .incbin "arch/ia64/kernel/gate.so" |
diff --git a/arch/ia64/kernel/gate.S b/arch/ia64/kernel/gate.S index cf5e0a105e16..245d3e1ec7e1 100644 --- a/arch/ia64/kernel/gate.S +++ b/arch/ia64/kernel/gate.S | |||
@@ -21,18 +21,18 @@ | |||
21 | * to targets outside the shared object) and to avoid multi-phase kernel builds, we | 21 | * to targets outside the shared object) and to avoid multi-phase kernel builds, we |
22 | * simply create minimalistic "patch lists" in special ELF sections. | 22 | * simply create minimalistic "patch lists" in special ELF sections. |
23 | */ | 23 | */ |
24 | .section ".data.patch.fsyscall_table", "a" | 24 | .section ".data..patch.fsyscall_table", "a" |
25 | .previous | 25 | .previous |
26 | #define LOAD_FSYSCALL_TABLE(reg) \ | 26 | #define LOAD_FSYSCALL_TABLE(reg) \ |
27 | [1:] movl reg=0; \ | 27 | [1:] movl reg=0; \ |
28 | .xdata4 ".data.patch.fsyscall_table", 1b-. | 28 | .xdata4 ".data..patch.fsyscall_table", 1b-. |
29 | 29 | ||
30 | .section ".data.patch.brl_fsys_bubble_down", "a" | 30 | .section ".data..patch.brl_fsys_bubble_down", "a" |
31 | .previous | 31 | .previous |
32 | #define BRL_COND_FSYS_BUBBLE_DOWN(pr) \ | 32 | #define BRL_COND_FSYS_BUBBLE_DOWN(pr) \ |
33 | [1:](pr)brl.cond.sptk 0; \ | 33 | [1:](pr)brl.cond.sptk 0; \ |
34 | ;; \ | 34 | ;; \ |
35 | .xdata4 ".data.patch.brl_fsys_bubble_down", 1b-. | 35 | .xdata4 ".data..patch.brl_fsys_bubble_down", 1b-. |
36 | 36 | ||
37 | GLOBAL_ENTRY(__kernel_syscall_via_break) | 37 | GLOBAL_ENTRY(__kernel_syscall_via_break) |
38 | .prologue | 38 | .prologue |
diff --git a/arch/ia64/kernel/gate.lds.S b/arch/ia64/kernel/gate.lds.S index 88c64ed47c36..d32b0855110a 100644 --- a/arch/ia64/kernel/gate.lds.S +++ b/arch/ia64/kernel/gate.lds.S | |||
@@ -33,21 +33,21 @@ SECTIONS | |||
33 | */ | 33 | */ |
34 | . = GATE_ADDR + 0x600; | 34 | . = GATE_ADDR + 0x600; |
35 | 35 | ||
36 | .data.patch : { | 36 | .data..patch : { |
37 | __paravirt_start_gate_mckinley_e9_patchlist = .; | 37 | __paravirt_start_gate_mckinley_e9_patchlist = .; |
38 | *(.data.patch.mckinley_e9) | 38 | *(.data..patch.mckinley_e9) |
39 | __paravirt_end_gate_mckinley_e9_patchlist = .; | 39 | __paravirt_end_gate_mckinley_e9_patchlist = .; |
40 | 40 | ||
41 | __paravirt_start_gate_vtop_patchlist = .; | 41 | __paravirt_start_gate_vtop_patchlist = .; |
42 | *(.data.patch.vtop) | 42 | *(.data..patch.vtop) |
43 | __paravirt_end_gate_vtop_patchlist = .; | 43 | __paravirt_end_gate_vtop_patchlist = .; |
44 | 44 | ||
45 | __paravirt_start_gate_fsyscall_patchlist = .; | 45 | __paravirt_start_gate_fsyscall_patchlist = .; |
46 | *(.data.patch.fsyscall_table) | 46 | *(.data..patch.fsyscall_table) |
47 | __paravirt_end_gate_fsyscall_patchlist = .; | 47 | __paravirt_end_gate_fsyscall_patchlist = .; |
48 | 48 | ||
49 | __paravirt_start_gate_brl_fsys_bubble_down_patchlist = .; | 49 | __paravirt_start_gate_brl_fsys_bubble_down_patchlist = .; |
50 | *(.data.patch.brl_fsys_bubble_down) | 50 | *(.data..patch.brl_fsys_bubble_down) |
51 | __paravirt_end_gate_brl_fsys_bubble_down_patchlist = .; | 51 | __paravirt_end_gate_brl_fsys_bubble_down_patchlist = .; |
52 | } :readable | 52 | } :readable |
53 | 53 | ||
diff --git a/arch/ia64/kernel/init_task.c b/arch/ia64/kernel/init_task.c index e253ab8fcbc8..f9efe9739d3f 100644 --- a/arch/ia64/kernel/init_task.c +++ b/arch/ia64/kernel/init_task.c | |||
@@ -23,7 +23,7 @@ static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand); | |||
23 | * Initial task structure. | 23 | * Initial task structure. |
24 | * | 24 | * |
25 | * We need to make sure that this is properly aligned due to the way process stacks are | 25 | * We need to make sure that this is properly aligned due to the way process stacks are |
26 | * handled. This is done by having a special ".data.init_task" section... | 26 | * handled. This is done by having a special ".data..init_task" section... |
27 | */ | 27 | */ |
28 | #define init_thread_info init_task_mem.s.thread_info | 28 | #define init_thread_info init_task_mem.s.thread_info |
29 | 29 | ||
diff --git a/arch/ia64/kernel/ivt.S b/arch/ia64/kernel/ivt.S index 179fd122e837..d93e396bf599 100644 --- a/arch/ia64/kernel/ivt.S +++ b/arch/ia64/kernel/ivt.S | |||
@@ -82,7 +82,7 @@ | |||
82 | mov r19=n;; /* prepare to save predicates */ \ | 82 | mov r19=n;; /* prepare to save predicates */ \ |
83 | br.sptk.many dispatch_to_fault_handler | 83 | br.sptk.many dispatch_to_fault_handler |
84 | 84 | ||
85 | .section .text.ivt,"ax" | 85 | .section .text..ivt,"ax" |
86 | 86 | ||
87 | .align 32768 // align on 32KB boundary | 87 | .align 32768 // align on 32KB boundary |
88 | .global ia64_ivt | 88 | .global ia64_ivt |
diff --git a/arch/ia64/kernel/minstate.h b/arch/ia64/kernel/minstate.h index 292e214a3b84..d56753a11636 100644 --- a/arch/ia64/kernel/minstate.h +++ b/arch/ia64/kernel/minstate.h | |||
@@ -16,7 +16,7 @@ | |||
16 | #define ACCOUNT_SYS_ENTER | 16 | #define ACCOUNT_SYS_ENTER |
17 | #endif | 17 | #endif |
18 | 18 | ||
19 | .section ".data.patch.rse", "a" | 19 | .section ".data..patch.rse", "a" |
20 | .previous | 20 | .previous |
21 | 21 | ||
22 | /* | 22 | /* |
@@ -215,7 +215,7 @@ | |||
215 | (pUStk) extr.u r17=r18,3,6; \ | 215 | (pUStk) extr.u r17=r18,3,6; \ |
216 | (pUStk) sub r16=r18,r22; \ | 216 | (pUStk) sub r16=r18,r22; \ |
217 | [1:](pKStk) br.cond.sptk.many 1f; \ | 217 | [1:](pKStk) br.cond.sptk.many 1f; \ |
218 | .xdata4 ".data.patch.rse",1b-. \ | 218 | .xdata4 ".data..patch.rse",1b-. \ |
219 | ;; \ | 219 | ;; \ |
220 | cmp.ge p6,p7 = 33,r17; \ | 220 | cmp.ge p6,p7 = 33,r17; \ |
221 | ;; \ | 221 | ;; \ |
diff --git a/arch/ia64/kernel/paravirtentry.S b/arch/ia64/kernel/paravirtentry.S index 6158560d7f17..92d880c4d3d1 100644 --- a/arch/ia64/kernel/paravirtentry.S +++ b/arch/ia64/kernel/paravirtentry.S | |||
@@ -28,7 +28,7 @@ | |||
28 | #include "entry.h" | 28 | #include "entry.h" |
29 | 29 | ||
30 | #define DATA8(sym, init_value) \ | 30 | #define DATA8(sym, init_value) \ |
31 | .pushsection .data.read_mostly ; \ | 31 | .pushsection .data..read_mostly ; \ |
32 | .align 8 ; \ | 32 | .align 8 ; \ |
33 | .global sym ; \ | 33 | .global sym ; \ |
34 | sym: ; \ | 34 | sym: ; \ |
diff --git a/arch/ia64/kernel/vmlinux.lds.S b/arch/ia64/kernel/vmlinux.lds.S index 1295ba327f6f..e07218a2577f 100644 --- a/arch/ia64/kernel/vmlinux.lds.S +++ b/arch/ia64/kernel/vmlinux.lds.S | |||
@@ -8,7 +8,7 @@ | |||
8 | 8 | ||
9 | #define IVT_TEXT \ | 9 | #define IVT_TEXT \ |
10 | VMLINUX_SYMBOL(__start_ivt_text) = .; \ | 10 | VMLINUX_SYMBOL(__start_ivt_text) = .; \ |
11 | *(.text.ivt) \ | 11 | *(.text..ivt) \ |
12 | VMLINUX_SYMBOL(__end_ivt_text) = .; | 12 | VMLINUX_SYMBOL(__end_ivt_text) = .; |
13 | 13 | ||
14 | OUTPUT_FORMAT("elf64-ia64-little") | 14 | OUTPUT_FORMAT("elf64-ia64-little") |
@@ -54,8 +54,8 @@ SECTIONS | |||
54 | .text2 : AT(ADDR(.text2) - LOAD_OFFSET) | 54 | .text2 : AT(ADDR(.text2) - LOAD_OFFSET) |
55 | { *(.text2) } | 55 | { *(.text2) } |
56 | #ifdef CONFIG_SMP | 56 | #ifdef CONFIG_SMP |
57 | .text.lock : AT(ADDR(.text.lock) - LOAD_OFFSET) | 57 | .text..lock : AT(ADDR(.text..lock) - LOAD_OFFSET) |
58 | { *(.text.lock) } | 58 | { *(.text..lock) } |
59 | #endif | 59 | #endif |
60 | _etext = .; | 60 | _etext = .; |
61 | 61 | ||
@@ -75,10 +75,10 @@ SECTIONS | |||
75 | __stop___mca_table = .; | 75 | __stop___mca_table = .; |
76 | } | 76 | } |
77 | 77 | ||
78 | .data.patch.phys_stack_reg : AT(ADDR(.data.patch.phys_stack_reg) - LOAD_OFFSET) | 78 | .data..patch.phys_stack_reg : AT(ADDR(.data..patch.phys_stack_reg) - LOAD_OFFSET) |
79 | { | 79 | { |
80 | __start___phys_stack_reg_patchlist = .; | 80 | __start___phys_stack_reg_patchlist = .; |
81 | *(.data.patch.phys_stack_reg) | 81 | *(.data..patch.phys_stack_reg) |
82 | __end___phys_stack_reg_patchlist = .; | 82 | __end___phys_stack_reg_patchlist = .; |
83 | } | 83 | } |
84 | 84 | ||
@@ -110,24 +110,24 @@ SECTIONS | |||
110 | INIT_TEXT_SECTION(PAGE_SIZE) | 110 | INIT_TEXT_SECTION(PAGE_SIZE) |
111 | INIT_DATA_SECTION(16) | 111 | INIT_DATA_SECTION(16) |
112 | 112 | ||
113 | .data.patch.vtop : AT(ADDR(.data.patch.vtop) - LOAD_OFFSET) | 113 | .data..patch.vtop : AT(ADDR(.data..patch.vtop) - LOAD_OFFSET) |
114 | { | 114 | { |
115 | __start___vtop_patchlist = .; | 115 | __start___vtop_patchlist = .; |
116 | *(.data.patch.vtop) | 116 | *(.data..patch.vtop) |
117 | __end___vtop_patchlist = .; | 117 | __end___vtop_patchlist = .; |
118 | } | 118 | } |
119 | 119 | ||
120 | .data.patch.rse : AT(ADDR(.data.patch.rse) - LOAD_OFFSET) | 120 | .data..patch.rse : AT(ADDR(.data..patch.rse) - LOAD_OFFSET) |
121 | { | 121 | { |
122 | __start___rse_patchlist = .; | 122 | __start___rse_patchlist = .; |
123 | *(.data.patch.rse) | 123 | *(.data..patch.rse) |
124 | __end___rse_patchlist = .; | 124 | __end___rse_patchlist = .; |
125 | } | 125 | } |
126 | 126 | ||
127 | .data.patch.mckinley_e9 : AT(ADDR(.data.patch.mckinley_e9) - LOAD_OFFSET) | 127 | .data..patch.mckinley_e9 : AT(ADDR(.data..patch.mckinley_e9) - LOAD_OFFSET) |
128 | { | 128 | { |
129 | __start___mckinley_e9_bundles = .; | 129 | __start___mckinley_e9_bundles = .; |
130 | *(.data.patch.mckinley_e9) | 130 | *(.data..patch.mckinley_e9) |
131 | __end___mckinley_e9_bundles = .; | 131 | __end___mckinley_e9_bundles = .; |
132 | } | 132 | } |
133 | 133 | ||
@@ -175,17 +175,17 @@ SECTIONS | |||
175 | . = ALIGN(PAGE_SIZE); | 175 | . = ALIGN(PAGE_SIZE); |
176 | __init_end = .; | 176 | __init_end = .; |
177 | 177 | ||
178 | .data.page_aligned : AT(ADDR(.data.page_aligned) - LOAD_OFFSET) | 178 | .data..page_aligned : AT(ADDR(.data..page_aligned) - LOAD_OFFSET) |
179 | { | 179 | { |
180 | PAGE_ALIGNED_DATA(PAGE_SIZE) | 180 | PAGE_ALIGNED_DATA(PAGE_SIZE) |
181 | . = ALIGN(PAGE_SIZE); | 181 | . = ALIGN(PAGE_SIZE); |
182 | __start_gate_section = .; | 182 | __start_gate_section = .; |
183 | *(.data.gate) | 183 | *(.data..gate) |
184 | __stop_gate_section = .; | 184 | __stop_gate_section = .; |
185 | #ifdef CONFIG_XEN | 185 | #ifdef CONFIG_XEN |
186 | . = ALIGN(PAGE_SIZE); | 186 | . = ALIGN(PAGE_SIZE); |
187 | __xen_start_gate_section = .; | 187 | __xen_start_gate_section = .; |
188 | *(.data.gate.xen) | 188 | *(.data..gate.xen) |
189 | __xen_stop_gate_section = .; | 189 | __xen_stop_gate_section = .; |
190 | #endif | 190 | #endif |
191 | } | 191 | } |
diff --git a/arch/ia64/kvm/kvm-ia64.c b/arch/ia64/kvm/kvm-ia64.c index d5f4e9161201..21b701374f72 100644 --- a/arch/ia64/kvm/kvm-ia64.c +++ b/arch/ia64/kvm/kvm-ia64.c | |||
@@ -144,6 +144,7 @@ int kvm_arch_hardware_enable(void *garbage) | |||
144 | VP_INIT_ENV : VP_INIT_ENV_INITALIZE, | 144 | VP_INIT_ENV : VP_INIT_ENV_INITALIZE, |
145 | __pa(kvm_vm_buffer), KVM_VM_BUFFER_BASE, &tmp_base); | 145 | __pa(kvm_vm_buffer), KVM_VM_BUFFER_BASE, &tmp_base); |
146 | if (status != 0) { | 146 | if (status != 0) { |
147 | spin_unlock(&vp_lock); | ||
147 | printk(KERN_WARNING"kvm: Failed to Enable VT Support!!!!\n"); | 148 | printk(KERN_WARNING"kvm: Failed to Enable VT Support!!!!\n"); |
148 | return -EINVAL; | 149 | return -EINVAL; |
149 | } | 150 | } |
diff --git a/arch/ia64/kvm/vmm_ivt.S b/arch/ia64/kvm/vmm_ivt.S index 40920c630649..24018484c6e9 100644 --- a/arch/ia64/kvm/vmm_ivt.S +++ b/arch/ia64/kvm/vmm_ivt.S | |||
@@ -104,7 +104,7 @@ GLOBAL_ENTRY(kvm_vmm_panic) | |||
104 | br.call.sptk.many b6=vmm_panic_handler; | 104 | br.call.sptk.many b6=vmm_panic_handler; |
105 | END(kvm_vmm_panic) | 105 | END(kvm_vmm_panic) |
106 | 106 | ||
107 | .section .text.ivt,"ax" | 107 | .section .text..ivt,"ax" |
108 | 108 | ||
109 | .align 32768 // align on 32KB boundary | 109 | .align 32768 // align on 32KB boundary |
110 | .global kvm_ia64_ivt | 110 | .global kvm_ia64_ivt |
diff --git a/arch/ia64/mm/tlb.c b/arch/ia64/mm/tlb.c index 5dfd916e9ea6..7b3cdc6c6d91 100644 --- a/arch/ia64/mm/tlb.c +++ b/arch/ia64/mm/tlb.c | |||
@@ -121,7 +121,7 @@ static inline void down_spin(struct spinaphore *ss) | |||
121 | ia64_invala(); | 121 | ia64_invala(); |
122 | 122 | ||
123 | for (;;) { | 123 | for (;;) { |
124 | asm volatile ("ld4.c.nc %0=[%1]" : "=r"(serve) : "r"(&ss->serve) : "memory"); | 124 | asm volatile ("ld8.c.nc %0=[%1]" : "=r"(serve) : "r"(&ss->serve) : "memory"); |
125 | if (time_before(t, serve)) | 125 | if (time_before(t, serve)) |
126 | return; | 126 | return; |
127 | cpu_relax(); | 127 | cpu_relax(); |
diff --git a/arch/ia64/scripts/unwcheck.py b/arch/ia64/scripts/unwcheck.py index c27849889e19..2bfd941ff7c7 100644 --- a/arch/ia64/scripts/unwcheck.py +++ b/arch/ia64/scripts/unwcheck.py | |||
@@ -1,4 +1,4 @@ | |||
1 | #!/usr/bin/env python | 1 | #!/usr/bin/python |
2 | # | 2 | # |
3 | # Usage: unwcheck.py FILE | 3 | # Usage: unwcheck.py FILE |
4 | # | 4 | # |
diff --git a/arch/ia64/xen/gate-data.S b/arch/ia64/xen/gate-data.S index 7d4830afc91d..6f95b6b32a4e 100644 --- a/arch/ia64/xen/gate-data.S +++ b/arch/ia64/xen/gate-data.S | |||
@@ -1,3 +1,3 @@ | |||
1 | .section .data.gate.xen, "aw" | 1 | .section .data..gate.xen, "aw" |
2 | 2 | ||
3 | .incbin "arch/ia64/xen/gate.so" | 3 | .incbin "arch/ia64/xen/gate.so" |
diff --git a/arch/ia64/xen/xensetup.S b/arch/ia64/xen/xensetup.S index aff8346ea193..b820ed02ab9f 100644 --- a/arch/ia64/xen/xensetup.S +++ b/arch/ia64/xen/xensetup.S | |||
@@ -14,7 +14,7 @@ | |||
14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
15 | #include <xen/interface/elfnote.h> | 15 | #include <xen/interface/elfnote.h> |
16 | 16 | ||
17 | .section .data.read_mostly | 17 | .section .data..read_mostly |
18 | .align 8 | 18 | .align 8 |
19 | .global xen_domain_type | 19 | .global xen_domain_type |
20 | xen_domain_type: | 20 | xen_domain_type: |
diff --git a/arch/m32r/mm/fault.c b/arch/m32r/mm/fault.c index 28ee389e5f5a..b8ec002aef8e 100644 --- a/arch/m32r/mm/fault.c +++ b/arch/m32r/mm/fault.c | |||
@@ -188,7 +188,6 @@ good_area: | |||
188 | if ((error_code & ACE_INSTRUCTION) && !(vma->vm_flags & VM_EXEC)) | 188 | if ((error_code & ACE_INSTRUCTION) && !(vma->vm_flags & VM_EXEC)) |
189 | goto bad_area; | 189 | goto bad_area; |
190 | 190 | ||
191 | survive: | ||
192 | /* | 191 | /* |
193 | * If for any reason at all we couldn't handle the fault, | 192 | * If for any reason at all we couldn't handle the fault, |
194 | * make sure we exit gracefully rather than endlessly redo | 193 | * make sure we exit gracefully rather than endlessly redo |
@@ -271,15 +270,10 @@ no_context: | |||
271 | */ | 270 | */ |
272 | out_of_memory: | 271 | out_of_memory: |
273 | up_read(&mm->mmap_sem); | 272 | up_read(&mm->mmap_sem); |
274 | if (is_global_init(tsk)) { | 273 | if (!(error_code & ACE_USERMODE)) |
275 | yield(); | 274 | goto no_context; |
276 | down_read(&mm->mmap_sem); | 275 | pagefault_out_of_memory(); |
277 | goto survive; | 276 | return; |
278 | } | ||
279 | printk("VM: killing process %s\n", tsk->comm); | ||
280 | if (error_code & ACE_USERMODE) | ||
281 | do_group_exit(SIGKILL); | ||
282 | goto no_context; | ||
283 | 277 | ||
284 | do_sigbus: | 278 | do_sigbus: |
285 | up_read(&mm->mmap_sem); | 279 | up_read(&mm->mmap_sem); |
diff --git a/arch/m68knommu/kernel/vmlinux.lds.S b/arch/m68knommu/kernel/vmlinux.lds.S index 9f1784f586b9..a91b2713451d 100644 --- a/arch/m68knommu/kernel/vmlinux.lds.S +++ b/arch/m68knommu/kernel/vmlinux.lds.S | |||
@@ -57,7 +57,7 @@ SECTIONS { | |||
57 | .romvec : { | 57 | .romvec : { |
58 | __rom_start = . ; | 58 | __rom_start = . ; |
59 | _romvec = .; | 59 | _romvec = .; |
60 | *(.data.initvect) | 60 | *(.data..initvect) |
61 | } > romvec | 61 | } > romvec |
62 | #endif | 62 | #endif |
63 | 63 | ||
@@ -68,7 +68,7 @@ SECTIONS { | |||
68 | TEXT_TEXT | 68 | TEXT_TEXT |
69 | SCHED_TEXT | 69 | SCHED_TEXT |
70 | LOCK_TEXT | 70 | LOCK_TEXT |
71 | *(.text.lock) | 71 | *(.text..lock) |
72 | 72 | ||
73 | . = ALIGN(16); /* Exception table */ | 73 | . = ALIGN(16); /* Exception table */ |
74 | __start___ex_table = .; | 74 | __start___ex_table = .; |
diff --git a/arch/m68knommu/platform/68360/head-ram.S b/arch/m68knommu/platform/68360/head-ram.S index 2ef06242398b..8eb94fb6b971 100644 --- a/arch/m68knommu/platform/68360/head-ram.S +++ b/arch/m68knommu/platform/68360/head-ram.S | |||
@@ -280,7 +280,7 @@ _dprbase: | |||
280 | * and then overwritten as needed. | 280 | * and then overwritten as needed. |
281 | */ | 281 | */ |
282 | 282 | ||
283 | .section ".data.initvect","awx" | 283 | .section ".data..initvect","awx" |
284 | .long RAMEND /* Reset: Initial Stack Pointer - 0. */ | 284 | .long RAMEND /* Reset: Initial Stack Pointer - 0. */ |
285 | .long _start /* Reset: Initial Program Counter - 1. */ | 285 | .long _start /* Reset: Initial Program Counter - 1. */ |
286 | .long buserr /* Bus Error - 2. */ | 286 | .long buserr /* Bus Error - 2. */ |
diff --git a/arch/m68knommu/platform/68360/head-rom.S b/arch/m68knommu/platform/68360/head-rom.S index 62ecf4144b3b..97510e55b802 100644 --- a/arch/m68knommu/platform/68360/head-rom.S +++ b/arch/m68knommu/platform/68360/head-rom.S | |||
@@ -291,7 +291,7 @@ _dprbase: | |||
291 | * and then overwritten as needed. | 291 | * and then overwritten as needed. |
292 | */ | 292 | */ |
293 | 293 | ||
294 | .section ".data.initvect","awx" | 294 | .section ".data..initvect","awx" |
295 | .long RAMEND /* Reset: Initial Stack Pointer - 0. */ | 295 | .long RAMEND /* Reset: Initial Stack Pointer - 0. */ |
296 | .long _start /* Reset: Initial Program Counter - 1. */ | 296 | .long _start /* Reset: Initial Program Counter - 1. */ |
297 | .long buserr /* Bus Error - 2. */ | 297 | .long buserr /* Bus Error - 2. */ |
diff --git a/arch/microblaze/include/asm/page.h b/arch/microblaze/include/asm/page.h index de493f86d28f..464ff32bee3d 100644 --- a/arch/microblaze/include/asm/page.h +++ b/arch/microblaze/include/asm/page.h | |||
@@ -34,6 +34,8 @@ | |||
34 | /* MS be sure that SLAB allocates aligned objects */ | 34 | /* MS be sure that SLAB allocates aligned objects */ |
35 | #define ARCH_KMALLOC_MINALIGN L1_CACHE_BYTES | 35 | #define ARCH_KMALLOC_MINALIGN L1_CACHE_BYTES |
36 | 36 | ||
37 | #define ARCH_SLAB_MINALIGN L1_CACHE_BYTES | ||
38 | |||
37 | #define PAGE_UP(addr) (((addr)+((PAGE_SIZE)-1))&(~((PAGE_SIZE)-1))) | 39 | #define PAGE_UP(addr) (((addr)+((PAGE_SIZE)-1))&(~((PAGE_SIZE)-1))) |
38 | #define PAGE_DOWN(addr) ((addr)&(~((PAGE_SIZE)-1))) | 40 | #define PAGE_DOWN(addr) ((addr)&(~((PAGE_SIZE)-1))) |
39 | 41 | ||
diff --git a/arch/microblaze/kernel/dma.c b/arch/microblaze/kernel/dma.c index 9dcd90b5df55..79c74659f204 100644 --- a/arch/microblaze/kernel/dma.c +++ b/arch/microblaze/kernel/dma.c | |||
@@ -90,7 +90,6 @@ static int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl, | |||
90 | /* FIXME this part of code is untested */ | 90 | /* FIXME this part of code is untested */ |
91 | for_each_sg(sgl, sg, nents, i) { | 91 | for_each_sg(sgl, sg, nents, i) { |
92 | sg->dma_address = sg_phys(sg) + get_dma_direct_offset(dev); | 92 | sg->dma_address = sg_phys(sg) + get_dma_direct_offset(dev); |
93 | sg->dma_length = sg->length; | ||
94 | __dma_sync_page(page_to_phys(sg_page(sg)), sg->offset, | 93 | __dma_sync_page(page_to_phys(sg_page(sg)), sg->offset, |
95 | sg->length, direction); | 94 | sg->length, direction); |
96 | } | 95 | } |
diff --git a/arch/microblaze/pci/pci-common.c b/arch/microblaze/pci/pci-common.c index 9cb782b8e036..23be25fec4d6 100644 --- a/arch/microblaze/pci/pci-common.c +++ b/arch/microblaze/pci/pci-common.c | |||
@@ -1277,6 +1277,7 @@ void pcibios_allocate_bus_resources(struct pci_bus *bus) | |||
1277 | printk(KERN_WARNING "PCI: Cannot allocate resource region " | 1277 | printk(KERN_WARNING "PCI: Cannot allocate resource region " |
1278 | "%d of PCI bridge %d, will remap\n", i, bus->number); | 1278 | "%d of PCI bridge %d, will remap\n", i, bus->number); |
1279 | clear_resource: | 1279 | clear_resource: |
1280 | res->start = res->end = 0; | ||
1280 | res->flags = 0; | 1281 | res->flags = 0; |
1281 | } | 1282 | } |
1282 | 1283 | ||
diff --git a/arch/mips/alchemy/common/power.c b/arch/mips/alchemy/common/power.c index 14eb8c492da2..5ef06a164a82 100644 --- a/arch/mips/alchemy/common/power.c +++ b/arch/mips/alchemy/common/power.c | |||
@@ -193,9 +193,15 @@ static void restore_core_regs(void) | |||
193 | 193 | ||
194 | void au_sleep(void) | 194 | void au_sleep(void) |
195 | { | 195 | { |
196 | save_core_regs(); | 196 | int cpuid = alchemy_get_cputype(); |
197 | au1xxx_save_and_sleep(); | 197 | if (cpuid != ALCHEMY_CPU_UNKNOWN) { |
198 | restore_core_regs(); | 198 | save_core_regs(); |
199 | if (cpuid <= ALCHEMY_CPU_AU1500) | ||
200 | alchemy_sleep_au1000(); | ||
201 | else if (cpuid <= ALCHEMY_CPU_AU1200) | ||
202 | alchemy_sleep_au1550(); | ||
203 | restore_core_regs(); | ||
204 | } | ||
199 | } | 205 | } |
200 | 206 | ||
201 | #endif /* CONFIG_PM */ | 207 | #endif /* CONFIG_PM */ |
diff --git a/arch/mips/alchemy/common/sleeper.S b/arch/mips/alchemy/common/sleeper.S index 4f4b16741d12..77f3c743b716 100644 --- a/arch/mips/alchemy/common/sleeper.S +++ b/arch/mips/alchemy/common/sleeper.S | |||
@@ -22,10 +22,9 @@ | |||
22 | .set noat | 22 | .set noat |
23 | .align 5 | 23 | .align 5 |
24 | 24 | ||
25 | /* Save all of the processor general registers and go to sleep. | 25 | |
26 | * A wakeup condition will get us back here to restore the registers. | 26 | /* preparatory stuff */ |
27 | */ | 27 | .macro SETUP_SLEEP |
28 | LEAF(au1xxx_save_and_sleep) | ||
29 | subu sp, PT_SIZE | 28 | subu sp, PT_SIZE |
30 | sw $1, PT_R1(sp) | 29 | sw $1, PT_R1(sp) |
31 | sw $2, PT_R2(sp) | 30 | sw $2, PT_R2(sp) |
@@ -69,12 +68,32 @@ LEAF(au1xxx_save_and_sleep) | |||
69 | */ | 68 | */ |
70 | lui t3, 0xb190 /* sys_xxx */ | 69 | lui t3, 0xb190 /* sys_xxx */ |
71 | sw sp, 0x0018(t3) | 70 | sw sp, 0x0018(t3) |
72 | la k0, 3f /* resume path */ | 71 | la k0, alchemy_sleep_wakeup /* resume path */ |
73 | sw k0, 0x001c(t3) | 72 | sw k0, 0x001c(t3) |
73 | .endm | ||
74 | 74 | ||
75 | /* Put SDRAM into self refresh: Preload instructions into cache, | 75 | .macro DO_SLEEP |
76 | * issue a precharge, auto/self refresh, then sleep commands to it. | 76 | /* put power supply and processor to sleep */ |
77 | */ | 77 | sw zero, 0x0078(t3) /* sys_slppwr */ |
78 | sync | ||
79 | sw zero, 0x007c(t3) /* sys_sleep */ | ||
80 | sync | ||
81 | nop | ||
82 | nop | ||
83 | nop | ||
84 | nop | ||
85 | nop | ||
86 | nop | ||
87 | nop | ||
88 | nop | ||
89 | .endm | ||
90 | |||
91 | /* sleep code for Au1000/Au1100/Au1500 memory controller type */ | ||
92 | LEAF(alchemy_sleep_au1000) | ||
93 | |||
94 | SETUP_SLEEP | ||
95 | |||
96 | /* cache following instructions, as memory gets put to sleep */ | ||
78 | la t0, 1f | 97 | la t0, 1f |
79 | .set mips3 | 98 | .set mips3 |
80 | cache 0x14, 0(t0) | 99 | cache 0x14, 0(t0) |
@@ -84,17 +103,32 @@ LEAF(au1xxx_save_and_sleep) | |||
84 | .set mips0 | 103 | .set mips0 |
85 | 104 | ||
86 | 1: lui a0, 0xb400 /* mem_xxx */ | 105 | 1: lui a0, 0xb400 /* mem_xxx */ |
87 | #if defined(CONFIG_SOC_AU1000) || defined(CONFIG_SOC_AU1100) || \ | ||
88 | defined(CONFIG_SOC_AU1500) | ||
89 | sw zero, 0x001c(a0) /* Precharge */ | 106 | sw zero, 0x001c(a0) /* Precharge */ |
90 | sync | 107 | sync |
91 | sw zero, 0x0020(a0) /* Auto Refresh */ | 108 | sw zero, 0x0020(a0) /* Auto Refresh */ |
92 | sync | 109 | sync |
93 | sw zero, 0x0030(a0) /* Sleep */ | 110 | sw zero, 0x0030(a0) /* Sleep */ |
94 | sync | 111 | sync |
95 | #endif | ||
96 | 112 | ||
97 | #if defined(CONFIG_SOC_AU1550) || defined(CONFIG_SOC_AU1200) | 113 | DO_SLEEP |
114 | |||
115 | END(alchemy_sleep_au1000) | ||
116 | |||
117 | /* sleep code for Au1550/Au1200 memory controller type */ | ||
118 | LEAF(alchemy_sleep_au1550) | ||
119 | |||
120 | SETUP_SLEEP | ||
121 | |||
122 | /* cache following instructions, as memory gets put to sleep */ | ||
123 | la t0, 1f | ||
124 | .set mips3 | ||
125 | cache 0x14, 0(t0) | ||
126 | cache 0x14, 32(t0) | ||
127 | cache 0x14, 64(t0) | ||
128 | cache 0x14, 96(t0) | ||
129 | .set mips0 | ||
130 | |||
131 | 1: lui a0, 0xb400 /* mem_xxx */ | ||
98 | sw zero, 0x08c0(a0) /* Precharge */ | 132 | sw zero, 0x08c0(a0) /* Precharge */ |
99 | sync | 133 | sync |
100 | sw zero, 0x08d0(a0) /* Self Refresh */ | 134 | sw zero, 0x08d0(a0) /* Self Refresh */ |
@@ -114,26 +148,17 @@ LEAF(au1xxx_save_and_sleep) | |||
114 | and t1, t0, t1 /* clear CE[1:0] */ | 148 | and t1, t0, t1 /* clear CE[1:0] */ |
115 | sw t1, 0x0840(a0) /* mem_sdconfiga */ | 149 | sw t1, 0x0840(a0) /* mem_sdconfiga */ |
116 | sync | 150 | sync |
117 | #endif | ||
118 | 151 | ||
119 | /* put power supply and processor to sleep */ | 152 | DO_SLEEP |
120 | sw zero, 0x0078(t3) /* sys_slppwr */ | 153 | |
121 | sync | 154 | END(alchemy_sleep_au1550) |
122 | sw zero, 0x007c(t3) /* sys_sleep */ | 155 | |
123 | sync | ||
124 | nop | ||
125 | nop | ||
126 | nop | ||
127 | nop | ||
128 | nop | ||
129 | nop | ||
130 | nop | ||
131 | nop | ||
132 | 156 | ||
133 | /* This is where we return upon wakeup. | 157 | /* This is where we return upon wakeup. |
134 | * Reload all of the registers and return. | 158 | * Reload all of the registers and return. |
135 | */ | 159 | */ |
136 | 3: lw k0, 0x20(sp) | 160 | LEAF(alchemy_sleep_wakeup) |
161 | lw k0, 0x20(sp) | ||
137 | mtc0 k0, CP0_STATUS | 162 | mtc0 k0, CP0_STATUS |
138 | lw k0, 0x1c(sp) | 163 | lw k0, 0x1c(sp) |
139 | mtc0 k0, CP0_CONTEXT | 164 | mtc0 k0, CP0_CONTEXT |
@@ -169,4 +194,4 @@ LEAF(au1xxx_save_and_sleep) | |||
169 | lw $31, PT_R31(sp) | 194 | lw $31, PT_R31(sp) |
170 | jr ra | 195 | jr ra |
171 | addiu sp, PT_SIZE | 196 | addiu sp, PT_SIZE |
172 | END(au1xxx_save_and_sleep) | 197 | END(alchemy_sleep_wakeup) |
diff --git a/arch/mips/ar7/platform.c b/arch/mips/ar7/platform.c index 566f2d7f2ea3..8f31d1d59683 100644 --- a/arch/mips/ar7/platform.c +++ b/arch/mips/ar7/platform.c | |||
@@ -542,7 +542,7 @@ static int __init ar7_register_uarts(void) | |||
542 | if (IS_ERR(bus_clk)) | 542 | if (IS_ERR(bus_clk)) |
543 | panic("unable to get bus clk\n"); | 543 | panic("unable to get bus clk\n"); |
544 | 544 | ||
545 | uart_port.type = PORT_16550A; | 545 | uart_port.type = PORT_AR7; |
546 | uart_port.uartclk = clk_get_rate(bus_clk) / 2; | 546 | uart_port.uartclk = clk_get_rate(bus_clk) / 2; |
547 | uart_port.iotype = UPIO_MEM32; | 547 | uart_port.iotype = UPIO_MEM32; |
548 | uart_port.regshift = 2; | 548 | uart_port.regshift = 2; |
diff --git a/arch/mips/bcm47xx/Makefile b/arch/mips/bcm47xx/Makefile index 35294b12d638..7465e8a72d9a 100644 --- a/arch/mips/bcm47xx/Makefile +++ b/arch/mips/bcm47xx/Makefile | |||
@@ -3,4 +3,4 @@ | |||
3 | # under Linux. | 3 | # under Linux. |
4 | # | 4 | # |
5 | 5 | ||
6 | obj-y := gpio.o irq.o prom.o serial.o setup.o time.o wgt634u.o | 6 | obj-y := gpio.o irq.o nvram.o prom.o serial.o setup.o time.o wgt634u.o |
diff --git a/arch/mips/bcm47xx/nvram.c b/arch/mips/bcm47xx/nvram.c new file mode 100644 index 000000000000..06e03b222f6d --- /dev/null +++ b/arch/mips/bcm47xx/nvram.c | |||
@@ -0,0 +1,94 @@ | |||
1 | /* | ||
2 | * BCM947xx nvram variable access | ||
3 | * | ||
4 | * Copyright (C) 2005 Broadcom Corporation | ||
5 | * Copyright (C) 2006 Felix Fietkau <nbd@openwrt.org> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify it | ||
8 | * under the terms of the GNU General Public License as published by the | ||
9 | * Free Software Foundation; either version 2 of the License, or (at your | ||
10 | * option) any later version. | ||
11 | */ | ||
12 | |||
13 | #include <linux/init.h> | ||
14 | #include <linux/types.h> | ||
15 | #include <linux/module.h> | ||
16 | #include <linux/ssb/ssb.h> | ||
17 | #include <linux/kernel.h> | ||
18 | #include <linux/string.h> | ||
19 | #include <asm/addrspace.h> | ||
20 | #include <asm/mach-bcm47xx/nvram.h> | ||
21 | #include <asm/mach-bcm47xx/bcm47xx.h> | ||
22 | |||
23 | static char nvram_buf[NVRAM_SPACE]; | ||
24 | |||
25 | /* Probe for NVRAM header */ | ||
26 | static void __init early_nvram_init(void) | ||
27 | { | ||
28 | struct ssb_mipscore *mcore = &ssb_bcm47xx.mipscore; | ||
29 | struct nvram_header *header; | ||
30 | int i; | ||
31 | u32 base, lim, off; | ||
32 | u32 *src, *dst; | ||
33 | |||
34 | base = mcore->flash_window; | ||
35 | lim = mcore->flash_window_size; | ||
36 | |||
37 | off = FLASH_MIN; | ||
38 | while (off <= lim) { | ||
39 | /* Windowed flash access */ | ||
40 | header = (struct nvram_header *) | ||
41 | KSEG1ADDR(base + off - NVRAM_SPACE); | ||
42 | if (header->magic == NVRAM_HEADER) | ||
43 | goto found; | ||
44 | off <<= 1; | ||
45 | } | ||
46 | |||
47 | /* Try embedded NVRAM at 4 KB and 1 KB as last resorts */ | ||
48 | header = (struct nvram_header *) KSEG1ADDR(base + 4096); | ||
49 | if (header->magic == NVRAM_HEADER) | ||
50 | goto found; | ||
51 | |||
52 | header = (struct nvram_header *) KSEG1ADDR(base + 1024); | ||
53 | if (header->magic == NVRAM_HEADER) | ||
54 | goto found; | ||
55 | |||
56 | return; | ||
57 | |||
58 | found: | ||
59 | src = (u32 *) header; | ||
60 | dst = (u32 *) nvram_buf; | ||
61 | for (i = 0; i < sizeof(struct nvram_header); i += 4) | ||
62 | *dst++ = *src++; | ||
63 | for (; i < header->len && i < NVRAM_SPACE; i += 4) | ||
64 | *dst++ = le32_to_cpu(*src++); | ||
65 | } | ||
66 | |||
67 | int nvram_getenv(char *name, char *val, size_t val_len) | ||
68 | { | ||
69 | char *var, *value, *end, *eq; | ||
70 | |||
71 | if (!name) | ||
72 | return 1; | ||
73 | |||
74 | if (!nvram_buf[0]) | ||
75 | early_nvram_init(); | ||
76 | |||
77 | /* Look for name=value and return value */ | ||
78 | var = &nvram_buf[sizeof(struct nvram_header)]; | ||
79 | end = nvram_buf + sizeof(nvram_buf) - 2; | ||
80 | end[0] = end[1] = '\0'; | ||
81 | for (; *var; var = value + strlen(value) + 1) { | ||
82 | eq = strchr(var, '='); | ||
83 | if (!eq) | ||
84 | break; | ||
85 | value = eq + 1; | ||
86 | if ((eq - var) == strlen(name) && | ||
87 | strncmp(var, name, (eq - var)) == 0) { | ||
88 | snprintf(val, val_len, "%s", value); | ||
89 | return 0; | ||
90 | } | ||
91 | } | ||
92 | return 1; | ||
93 | } | ||
94 | EXPORT_SYMBOL(nvram_getenv); | ||
diff --git a/arch/mips/bcm47xx/setup.c b/arch/mips/bcm47xx/setup.c index d442e11625fa..b1aee33efd11 100644 --- a/arch/mips/bcm47xx/setup.c +++ b/arch/mips/bcm47xx/setup.c | |||
@@ -1,8 +1,8 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (C) 2004 Florian Schirmer <jolt@tuxbox.org> | 2 | * Copyright (C) 2004 Florian Schirmer <jolt@tuxbox.org> |
3 | * Copyright (C) 2005 Waldemar Brodkorb <wbx@openwrt.org> | ||
4 | * Copyright (C) 2006 Felix Fietkau <nbd@openwrt.org> | 3 | * Copyright (C) 2006 Felix Fietkau <nbd@openwrt.org> |
5 | * Copyright (C) 2006 Michael Buesch <mb@bu3sch.de> | 4 | * Copyright (C) 2006 Michael Buesch <mb@bu3sch.de> |
5 | * Copyright (C) 2010 Waldemar Brodkorb <wbx@openadk.org> | ||
6 | * | 6 | * |
7 | * This program is free software; you can redistribute it and/or modify it | 7 | * This program is free software; you can redistribute it and/or modify it |
8 | * under the terms of the GNU General Public License as published by the | 8 | * under the terms of the GNU General Public License as published by the |
@@ -33,6 +33,7 @@ | |||
33 | #include <asm/time.h> | 33 | #include <asm/time.h> |
34 | #include <bcm47xx.h> | 34 | #include <bcm47xx.h> |
35 | #include <asm/fw/cfe/cfe_api.h> | 35 | #include <asm/fw/cfe/cfe_api.h> |
36 | #include <asm/mach-bcm47xx/nvram.h> | ||
36 | 37 | ||
37 | struct ssb_bus ssb_bcm47xx; | 38 | struct ssb_bus ssb_bcm47xx; |
38 | EXPORT_SYMBOL(ssb_bcm47xx); | 39 | EXPORT_SYMBOL(ssb_bcm47xx); |
@@ -81,28 +82,42 @@ static int bcm47xx_get_invariants(struct ssb_bus *bus, | |||
81 | /* Fill boardinfo structure */ | 82 | /* Fill boardinfo structure */ |
82 | memset(&(iv->boardinfo), 0 , sizeof(struct ssb_boardinfo)); | 83 | memset(&(iv->boardinfo), 0 , sizeof(struct ssb_boardinfo)); |
83 | 84 | ||
84 | if (cfe_getenv("boardvendor", buf, sizeof(buf)) >= 0) | 85 | if (cfe_getenv("boardvendor", buf, sizeof(buf)) >= 0 || |
86 | nvram_getenv("boardvendor", buf, sizeof(buf)) >= 0) | ||
85 | iv->boardinfo.type = (u16)simple_strtoul(buf, NULL, 0); | 87 | iv->boardinfo.type = (u16)simple_strtoul(buf, NULL, 0); |
86 | if (cfe_getenv("boardtype", buf, sizeof(buf)) >= 0) | 88 | if (cfe_getenv("boardtype", buf, sizeof(buf)) >= 0 || |
89 | nvram_getenv("boardtype", buf, sizeof(buf)) >= 0) | ||
87 | iv->boardinfo.type = (u16)simple_strtoul(buf, NULL, 0); | 90 | iv->boardinfo.type = (u16)simple_strtoul(buf, NULL, 0); |
88 | if (cfe_getenv("boardrev", buf, sizeof(buf)) >= 0) | 91 | if (cfe_getenv("boardrev", buf, sizeof(buf)) >= 0 || |
92 | nvram_getenv("boardrev", buf, sizeof(buf)) >= 0) | ||
89 | iv->boardinfo.rev = (u16)simple_strtoul(buf, NULL, 0); | 93 | iv->boardinfo.rev = (u16)simple_strtoul(buf, NULL, 0); |
90 | 94 | ||
91 | /* Fill sprom structure */ | 95 | /* Fill sprom structure */ |
92 | memset(&(iv->sprom), 0, sizeof(struct ssb_sprom)); | 96 | memset(&(iv->sprom), 0, sizeof(struct ssb_sprom)); |
93 | iv->sprom.revision = 3; | 97 | iv->sprom.revision = 3; |
94 | 98 | ||
95 | if (cfe_getenv("et0macaddr", buf, sizeof(buf)) >= 0) | 99 | if (cfe_getenv("et0macaddr", buf, sizeof(buf)) >= 0 || |
100 | nvram_getenv("et0macaddr", buf, sizeof(buf)) >= 0) | ||
96 | str2eaddr(buf, iv->sprom.et0mac); | 101 | str2eaddr(buf, iv->sprom.et0mac); |
97 | if (cfe_getenv("et1macaddr", buf, sizeof(buf)) >= 0) | 102 | |
103 | if (cfe_getenv("et1macaddr", buf, sizeof(buf)) >= 0 || | ||
104 | nvram_getenv("et1macaddr", buf, sizeof(buf)) >= 0) | ||
98 | str2eaddr(buf, iv->sprom.et1mac); | 105 | str2eaddr(buf, iv->sprom.et1mac); |
99 | if (cfe_getenv("et0phyaddr", buf, sizeof(buf)) >= 0) | 106 | |
100 | iv->sprom.et0phyaddr = simple_strtoul(buf, NULL, 10); | 107 | if (cfe_getenv("et0phyaddr", buf, sizeof(buf)) >= 0 || |
101 | if (cfe_getenv("et1phyaddr", buf, sizeof(buf)) >= 0) | 108 | nvram_getenv("et0phyaddr", buf, sizeof(buf)) >= 0) |
102 | iv->sprom.et1phyaddr = simple_strtoul(buf, NULL, 10); | 109 | iv->sprom.et0phyaddr = simple_strtoul(buf, NULL, 0); |
103 | if (cfe_getenv("et0mdcport", buf, sizeof(buf)) >= 0) | 110 | |
111 | if (cfe_getenv("et1phyaddr", buf, sizeof(buf)) >= 0 || | ||
112 | nvram_getenv("et1phyaddr", buf, sizeof(buf)) >= 0) | ||
113 | iv->sprom.et1phyaddr = simple_strtoul(buf, NULL, 0); | ||
114 | |||
115 | if (cfe_getenv("et0mdcport", buf, sizeof(buf)) >= 0 || | ||
116 | nvram_getenv("et0mdcport", buf, sizeof(buf)) >= 0) | ||
104 | iv->sprom.et0mdcport = simple_strtoul(buf, NULL, 10); | 117 | iv->sprom.et0mdcport = simple_strtoul(buf, NULL, 10); |
105 | if (cfe_getenv("et1mdcport", buf, sizeof(buf)) >= 0) | 118 | |
119 | if (cfe_getenv("et1mdcport", buf, sizeof(buf)) >= 0 || | ||
120 | nvram_getenv("et1mdcport", buf, sizeof(buf)) >= 0) | ||
106 | iv->sprom.et1mdcport = simple_strtoul(buf, NULL, 10); | 121 | iv->sprom.et1mdcport = simple_strtoul(buf, NULL, 10); |
107 | 122 | ||
108 | return 0; | 123 | return 0; |
diff --git a/arch/mips/include/asm/mach-ar7/ar7.h b/arch/mips/include/asm/mach-ar7/ar7.h index f1cf38943497..483ffea9ecb1 100644 --- a/arch/mips/include/asm/mach-ar7/ar7.h +++ b/arch/mips/include/asm/mach-ar7/ar7.h | |||
@@ -50,7 +50,7 @@ | |||
50 | #define UR8_REGS_WDT (AR7_REGS_BASE + 0x0b00) | 50 | #define UR8_REGS_WDT (AR7_REGS_BASE + 0x0b00) |
51 | #define UR8_REGS_UART1 (AR7_REGS_BASE + 0x0f00) | 51 | #define UR8_REGS_UART1 (AR7_REGS_BASE + 0x0f00) |
52 | 52 | ||
53 | #define AR7_RESET_PEREPHERIAL 0x0 | 53 | #define AR7_RESET_PERIPHERAL 0x0 |
54 | #define AR7_RESET_SOFTWARE 0x4 | 54 | #define AR7_RESET_SOFTWARE 0x4 |
55 | #define AR7_RESET_STATUS 0x8 | 55 | #define AR7_RESET_STATUS 0x8 |
56 | 56 | ||
@@ -128,7 +128,7 @@ static inline int ar7_has_high_cpmac(void) | |||
128 | static inline void ar7_device_enable(u32 bit) | 128 | static inline void ar7_device_enable(u32 bit) |
129 | { | 129 | { |
130 | void *reset_reg = | 130 | void *reset_reg = |
131 | (void *)KSEG1ADDR(AR7_REGS_RESET + AR7_RESET_PEREPHERIAL); | 131 | (void *)KSEG1ADDR(AR7_REGS_RESET + AR7_RESET_PERIPHERAL); |
132 | writel(readl(reset_reg) | (1 << bit), reset_reg); | 132 | writel(readl(reset_reg) | (1 << bit), reset_reg); |
133 | msleep(20); | 133 | msleep(20); |
134 | } | 134 | } |
@@ -136,7 +136,7 @@ static inline void ar7_device_enable(u32 bit) | |||
136 | static inline void ar7_device_disable(u32 bit) | 136 | static inline void ar7_device_disable(u32 bit) |
137 | { | 137 | { |
138 | void *reset_reg = | 138 | void *reset_reg = |
139 | (void *)KSEG1ADDR(AR7_REGS_RESET + AR7_RESET_PEREPHERIAL); | 139 | (void *)KSEG1ADDR(AR7_REGS_RESET + AR7_RESET_PERIPHERAL); |
140 | writel(readl(reset_reg) & ~(1 << bit), reset_reg); | 140 | writel(readl(reset_reg) & ~(1 << bit), reset_reg); |
141 | msleep(20); | 141 | msleep(20); |
142 | } | 142 | } |
diff --git a/arch/mips/include/asm/mach-ar7/gpio.h b/arch/mips/include/asm/mach-ar7/gpio.h index 73f9b162c970..abc317c0372e 100644 --- a/arch/mips/include/asm/mach-ar7/gpio.h +++ b/arch/mips/include/asm/mach-ar7/gpio.h | |||
@@ -24,7 +24,7 @@ | |||
24 | #define AR7_GPIO_MAX 32 | 24 | #define AR7_GPIO_MAX 32 |
25 | #define NR_BUILTIN_GPIO AR7_GPIO_MAX | 25 | #define NR_BUILTIN_GPIO AR7_GPIO_MAX |
26 | 26 | ||
27 | #define gpio_to_irq(gpio) NULL | 27 | #define gpio_to_irq(gpio) -1 |
28 | 28 | ||
29 | #define gpio_get_value __gpio_get_value | 29 | #define gpio_get_value __gpio_get_value |
30 | #define gpio_set_value __gpio_set_value | 30 | #define gpio_set_value __gpio_set_value |
diff --git a/arch/mips/include/asm/mach-au1x00/au1000.h b/arch/mips/include/asm/mach-au1x00/au1000.h index e76941db2312..a6976619160a 100644 --- a/arch/mips/include/asm/mach-au1x00/au1000.h +++ b/arch/mips/include/asm/mach-au1x00/au1000.h | |||
@@ -188,7 +188,8 @@ extern unsigned long get_au1x00_uart_baud_base(void); | |||
188 | extern unsigned long au1xxx_calc_clock(void); | 188 | extern unsigned long au1xxx_calc_clock(void); |
189 | 189 | ||
190 | /* PM: arch/mips/alchemy/common/sleeper.S, power.c, irq.c */ | 190 | /* PM: arch/mips/alchemy/common/sleeper.S, power.c, irq.c */ |
191 | void au1xxx_save_and_sleep(void); | 191 | void alchemy_sleep_au1000(void); |
192 | void alchemy_sleep_au1550(void); | ||
192 | void au_sleep(void); | 193 | void au_sleep(void); |
193 | 194 | ||
194 | 195 | ||
diff --git a/arch/mips/include/asm/mach-bcm47xx/nvram.h b/arch/mips/include/asm/mach-bcm47xx/nvram.h new file mode 100644 index 000000000000..0d8cc146f7a4 --- /dev/null +++ b/arch/mips/include/asm/mach-bcm47xx/nvram.h | |||
@@ -0,0 +1,36 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2005, Broadcom Corporation | ||
3 | * Copyright (C) 2006, Felix Fietkau <nbd@openwrt.org> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify it | ||
6 | * under the terms of the GNU General Public License as published by the | ||
7 | * Free Software Foundation; either version 2 of the License, or (at your | ||
8 | * option) any later version. | ||
9 | */ | ||
10 | |||
11 | #ifndef __NVRAM_H | ||
12 | #define __NVRAM_H | ||
13 | |||
14 | #include <linux/types.h> | ||
15 | |||
16 | struct nvram_header { | ||
17 | u32 magic; | ||
18 | u32 len; | ||
19 | u32 crc_ver_init; /* 0:7 crc, 8:15 ver, 16:31 sdram_init */ | ||
20 | u32 config_refresh; /* 0:15 sdram_config, 16:31 sdram_refresh */ | ||
21 | u32 config_ncdl; /* ncdl values for memc */ | ||
22 | }; | ||
23 | |||
24 | #define NVRAM_HEADER 0x48534C46 /* 'FLSH' */ | ||
25 | #define NVRAM_VERSION 1 | ||
26 | #define NVRAM_HEADER_SIZE 20 | ||
27 | #define NVRAM_SPACE 0x8000 | ||
28 | |||
29 | #define FLASH_MIN 0x00020000 /* Minimum flash size */ | ||
30 | |||
31 | #define NVRAM_MAX_VALUE_LEN 255 | ||
32 | #define NVRAM_MAX_PARAM_LEN 64 | ||
33 | |||
34 | extern int nvram_getenv(char *name, char *val, size_t val_len); | ||
35 | |||
36 | #endif | ||
diff --git a/arch/mips/include/asm/mach-bcm63xx/gpio.h b/arch/mips/include/asm/mach-bcm63xx/gpio.h index 7cda8c0a3979..1eb534de8e3b 100644 --- a/arch/mips/include/asm/mach-bcm63xx/gpio.h +++ b/arch/mips/include/asm/mach-bcm63xx/gpio.h | |||
@@ -3,7 +3,7 @@ | |||
3 | 3 | ||
4 | #include <bcm63xx_gpio.h> | 4 | #include <bcm63xx_gpio.h> |
5 | 5 | ||
6 | #define gpio_to_irq(gpio) NULL | 6 | #define gpio_to_irq(gpio) -1 |
7 | 7 | ||
8 | #define gpio_get_value __gpio_get_value | 8 | #define gpio_get_value __gpio_get_value |
9 | #define gpio_set_value __gpio_set_value | 9 | #define gpio_set_value __gpio_set_value |
diff --git a/arch/mips/kernel/ftrace.c b/arch/mips/kernel/ftrace.c index e9e64e0ff7aa..5a84a1f11231 100644 --- a/arch/mips/kernel/ftrace.c +++ b/arch/mips/kernel/ftrace.c | |||
@@ -2,7 +2,7 @@ | |||
2 | * Code for replacing ftrace calls with jumps. | 2 | * Code for replacing ftrace calls with jumps. |
3 | * | 3 | * |
4 | * Copyright (C) 2007-2008 Steven Rostedt <srostedt@redhat.com> | 4 | * Copyright (C) 2007-2008 Steven Rostedt <srostedt@redhat.com> |
5 | * Copyright (C) 2009 DSLab, Lanzhou University, China | 5 | * Copyright (C) 2009, 2010 DSLab, Lanzhou University, China |
6 | * Author: Wu Zhangjin <wuzhangjin@gmail.com> | 6 | * Author: Wu Zhangjin <wuzhangjin@gmail.com> |
7 | * | 7 | * |
8 | * Thanks goes to Steven Rostedt for writing the original x86 version. | 8 | * Thanks goes to Steven Rostedt for writing the original x86 version. |
@@ -12,18 +12,62 @@ | |||
12 | #include <linux/init.h> | 12 | #include <linux/init.h> |
13 | #include <linux/ftrace.h> | 13 | #include <linux/ftrace.h> |
14 | 14 | ||
15 | #include <asm/cacheflush.h> | ||
16 | #include <asm/asm.h> | 15 | #include <asm/asm.h> |
17 | #include <asm/asm-offsets.h> | 16 | #include <asm/asm-offsets.h> |
17 | #include <asm/cacheflush.h> | ||
18 | #include <asm/uasm.h> | ||
19 | |||
20 | /* | ||
21 | * If the Instruction Pointer is in module space (0xc0000000), return true; | ||
22 | * otherwise, it is in kernel space (0x80000000), return false. | ||
23 | * | ||
24 | * FIXME: This will not work when the kernel space and module space are the | ||
25 | * same. If they are the same, we need to modify scripts/recordmcount.pl, | ||
26 | * ftrace_make_nop/call() and the other related parts to ensure the | ||
27 | * enabling/disabling of the calling site to _mcount is right for both kernel | ||
28 | * and module. | ||
29 | */ | ||
30 | |||
31 | static inline int in_module(unsigned long ip) | ||
32 | { | ||
33 | return ip & 0x40000000; | ||
34 | } | ||
18 | 35 | ||
19 | #ifdef CONFIG_DYNAMIC_FTRACE | 36 | #ifdef CONFIG_DYNAMIC_FTRACE |
20 | 37 | ||
21 | #define JAL 0x0c000000 /* jump & link: ip --> ra, jump to target */ | 38 | #define JAL 0x0c000000 /* jump & link: ip --> ra, jump to target */ |
22 | #define ADDR_MASK 0x03ffffff /* op_code|addr : 31...26|25 ....0 */ | 39 | #define ADDR_MASK 0x03ffffff /* op_code|addr : 31...26|25 ....0 */ |
23 | #define jump_insn_encode(op_code, addr) \ | ||
24 | ((unsigned int)((op_code) | (((addr) >> 2) & ADDR_MASK))) | ||
25 | 40 | ||
26 | static unsigned int ftrace_nop = 0x00000000; | 41 | #define INSN_B_1F_4 0x10000004 /* b 1f; offset = 4 */ |
42 | #define INSN_B_1F_5 0x10000005 /* b 1f; offset = 5 */ | ||
43 | #define INSN_NOP 0x00000000 /* nop */ | ||
44 | #define INSN_JAL(addr) \ | ||
45 | ((unsigned int)(JAL | (((addr) >> 2) & ADDR_MASK))) | ||
46 | |||
47 | static unsigned int insn_jal_ftrace_caller __read_mostly; | ||
48 | static unsigned int insn_lui_v1_hi16_mcount __read_mostly; | ||
49 | static unsigned int insn_j_ftrace_graph_caller __maybe_unused __read_mostly; | ||
50 | |||
51 | static inline void ftrace_dyn_arch_init_insns(void) | ||
52 | { | ||
53 | u32 *buf; | ||
54 | unsigned int v1; | ||
55 | |||
56 | /* lui v1, hi16_mcount */ | ||
57 | v1 = 3; | ||
58 | buf = (u32 *)&insn_lui_v1_hi16_mcount; | ||
59 | UASM_i_LA_mostly(&buf, v1, MCOUNT_ADDR); | ||
60 | |||
61 | /* jal (ftrace_caller + 8), jump over the first two instruction */ | ||
62 | buf = (u32 *)&insn_jal_ftrace_caller; | ||
63 | uasm_i_jal(&buf, (FTRACE_ADDR + 8)); | ||
64 | |||
65 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | ||
66 | /* j ftrace_graph_caller */ | ||
67 | buf = (u32 *)&insn_j_ftrace_graph_caller; | ||
68 | uasm_i_j(&buf, (unsigned long)ftrace_graph_caller); | ||
69 | #endif | ||
70 | } | ||
27 | 71 | ||
28 | static int ftrace_modify_code(unsigned long ip, unsigned int new_code) | 72 | static int ftrace_modify_code(unsigned long ip, unsigned int new_code) |
29 | { | 73 | { |
@@ -40,67 +84,56 @@ static int ftrace_modify_code(unsigned long ip, unsigned int new_code) | |||
40 | return 0; | 84 | return 0; |
41 | } | 85 | } |
42 | 86 | ||
43 | static int lui_v1; | ||
44 | static int jal_mcount; | ||
45 | |||
46 | int ftrace_make_nop(struct module *mod, | 87 | int ftrace_make_nop(struct module *mod, |
47 | struct dyn_ftrace *rec, unsigned long addr) | 88 | struct dyn_ftrace *rec, unsigned long addr) |
48 | { | 89 | { |
49 | unsigned int new; | 90 | unsigned int new; |
50 | int faulted; | ||
51 | unsigned long ip = rec->ip; | 91 | unsigned long ip = rec->ip; |
52 | 92 | ||
53 | /* We have compiled module with -mlong-calls, but compiled the kernel | 93 | /* |
54 | * without it, we need to cope with them respectively. */ | 94 | * We have compiled module with -mlong-calls, but compiled the kernel |
55 | if (ip & 0x40000000) { | 95 | * without it, we need to cope with them respectively. |
56 | /* record it for ftrace_make_call */ | 96 | */ |
57 | if (lui_v1 == 0) { | 97 | if (in_module(ip)) { |
58 | /* lui_v1 = *(unsigned int *)ip; */ | 98 | #if defined(KBUILD_MCOUNT_RA_ADDRESS) && defined(CONFIG_32BIT) |
59 | safe_load_code(lui_v1, ip, faulted); | 99 | /* |
60 | 100 | * lui v1, hi_16bit_of_mcount --> b 1f (0x10000005) | |
61 | if (unlikely(faulted)) | 101 | * addiu v1, v1, low_16bit_of_mcount |
62 | return -EFAULT; | 102 | * move at, ra |
63 | } | 103 | * move $12, ra_address |
64 | 104 | * jalr v1 | |
65 | /* lui v1, hi_16bit_of_mcount --> b 1f (0x10000004) | 105 | * sub sp, sp, 8 |
106 | * 1: offset = 5 instructions | ||
107 | */ | ||
108 | new = INSN_B_1F_5; | ||
109 | #else | ||
110 | /* | ||
111 | * lui v1, hi_16bit_of_mcount --> b 1f (0x10000004) | ||
66 | * addiu v1, v1, low_16bit_of_mcount | 112 | * addiu v1, v1, low_16bit_of_mcount |
67 | * move at, ra | 113 | * move at, ra |
68 | * jalr v1 | 114 | * jalr v1 |
69 | * nop | 115 | * nop | move $12, ra_address | sub sp, sp, 8 |
70 | * 1f: (ip + 12) | 116 | * 1: offset = 4 instructions |
71 | */ | 117 | */ |
72 | new = 0x10000004; | 118 | new = INSN_B_1F_4; |
119 | #endif | ||
73 | } else { | 120 | } else { |
74 | /* record/calculate it for ftrace_make_call */ | 121 | /* |
75 | if (jal_mcount == 0) { | 122 | * move at, ra |
76 | /* We can record it directly like this: | 123 | * jal _mcount --> nop |
77 | * jal_mcount = *(unsigned int *)ip; | ||
78 | * Herein, jump over the first two nop instructions */ | ||
79 | jal_mcount = jump_insn_encode(JAL, (MCOUNT_ADDR + 8)); | ||
80 | } | ||
81 | |||
82 | /* move at, ra | ||
83 | * jalr v1 --> nop | ||
84 | */ | 124 | */ |
85 | new = ftrace_nop; | 125 | new = INSN_NOP; |
86 | } | 126 | } |
87 | return ftrace_modify_code(ip, new); | 127 | return ftrace_modify_code(ip, new); |
88 | } | 128 | } |
89 | 129 | ||
90 | static int modified; /* initialized as 0 by default */ | ||
91 | |||
92 | int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr) | 130 | int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr) |
93 | { | 131 | { |
94 | unsigned int new; | 132 | unsigned int new; |
95 | unsigned long ip = rec->ip; | 133 | unsigned long ip = rec->ip; |
96 | 134 | ||
97 | /* We just need to remove the "b ftrace_stub" at the fist time! */ | ||
98 | if (modified == 0) { | ||
99 | modified = 1; | ||
100 | ftrace_modify_code(addr, ftrace_nop); | ||
101 | } | ||
102 | /* ip, module: 0xc0000000, kernel: 0x80000000 */ | 135 | /* ip, module: 0xc0000000, kernel: 0x80000000 */ |
103 | new = (ip & 0x40000000) ? lui_v1 : jal_mcount; | 136 | new = in_module(ip) ? insn_lui_v1_hi16_mcount : insn_jal_ftrace_caller; |
104 | 137 | ||
105 | return ftrace_modify_code(ip, new); | 138 | return ftrace_modify_code(ip, new); |
106 | } | 139 | } |
@@ -111,44 +144,48 @@ int ftrace_update_ftrace_func(ftrace_func_t func) | |||
111 | { | 144 | { |
112 | unsigned int new; | 145 | unsigned int new; |
113 | 146 | ||
114 | new = jump_insn_encode(JAL, (unsigned long)func); | 147 | new = INSN_JAL((unsigned long)func); |
115 | 148 | ||
116 | return ftrace_modify_code(FTRACE_CALL_IP, new); | 149 | return ftrace_modify_code(FTRACE_CALL_IP, new); |
117 | } | 150 | } |
118 | 151 | ||
119 | int __init ftrace_dyn_arch_init(void *data) | 152 | int __init ftrace_dyn_arch_init(void *data) |
120 | { | 153 | { |
154 | /* Encode the instructions when booting */ | ||
155 | ftrace_dyn_arch_init_insns(); | ||
156 | |||
157 | /* Remove "b ftrace_stub" to ensure ftrace_caller() is executed */ | ||
158 | ftrace_modify_code(MCOUNT_ADDR, INSN_NOP); | ||
159 | |||
121 | /* The return code is retured via data */ | 160 | /* The return code is retured via data */ |
122 | *(unsigned long *)data = 0; | 161 | *(unsigned long *)data = 0; |
123 | 162 | ||
124 | return 0; | 163 | return 0; |
125 | } | 164 | } |
126 | #endif /* CONFIG_DYNAMIC_FTRACE */ | 165 | #endif /* CONFIG_DYNAMIC_FTRACE */ |
127 | 166 | ||
128 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | 167 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
129 | 168 | ||
130 | #ifdef CONFIG_DYNAMIC_FTRACE | 169 | #ifdef CONFIG_DYNAMIC_FTRACE |
131 | 170 | ||
132 | extern void ftrace_graph_call(void); | 171 | extern void ftrace_graph_call(void); |
133 | #define JMP 0x08000000 /* jump to target directly */ | ||
134 | #define CALL_FTRACE_GRAPH_CALLER \ | ||
135 | jump_insn_encode(JMP, (unsigned long)(&ftrace_graph_caller)) | ||
136 | #define FTRACE_GRAPH_CALL_IP ((unsigned long)(&ftrace_graph_call)) | 172 | #define FTRACE_GRAPH_CALL_IP ((unsigned long)(&ftrace_graph_call)) |
137 | 173 | ||
138 | int ftrace_enable_ftrace_graph_caller(void) | 174 | int ftrace_enable_ftrace_graph_caller(void) |
139 | { | 175 | { |
140 | return ftrace_modify_code(FTRACE_GRAPH_CALL_IP, | 176 | return ftrace_modify_code(FTRACE_GRAPH_CALL_IP, |
141 | CALL_FTRACE_GRAPH_CALLER); | 177 | insn_j_ftrace_graph_caller); |
142 | } | 178 | } |
143 | 179 | ||
144 | int ftrace_disable_ftrace_graph_caller(void) | 180 | int ftrace_disable_ftrace_graph_caller(void) |
145 | { | 181 | { |
146 | return ftrace_modify_code(FTRACE_GRAPH_CALL_IP, ftrace_nop); | 182 | return ftrace_modify_code(FTRACE_GRAPH_CALL_IP, INSN_NOP); |
147 | } | 183 | } |
148 | 184 | ||
149 | #endif /* !CONFIG_DYNAMIC_FTRACE */ | 185 | #endif /* CONFIG_DYNAMIC_FTRACE */ |
150 | 186 | ||
151 | #ifndef KBUILD_MCOUNT_RA_ADDRESS | 187 | #ifndef KBUILD_MCOUNT_RA_ADDRESS |
188 | |||
152 | #define S_RA_SP (0xafbf << 16) /* s{d,w} ra, offset(sp) */ | 189 | #define S_RA_SP (0xafbf << 16) /* s{d,w} ra, offset(sp) */ |
153 | #define S_R_SP (0xafb0 << 16) /* s{d,w} R, offset(sp) */ | 190 | #define S_R_SP (0xafb0 << 16) /* s{d,w} R, offset(sp) */ |
154 | #define OFFSET_MASK 0xffff /* stack offset range: 0 ~ PT_SIZE */ | 191 | #define OFFSET_MASK 0xffff /* stack offset range: 0 ~ PT_SIZE */ |
@@ -162,17 +199,17 @@ unsigned long ftrace_get_parent_addr(unsigned long self_addr, | |||
162 | unsigned int code; | 199 | unsigned int code; |
163 | int faulted; | 200 | int faulted; |
164 | 201 | ||
165 | /* in module or kernel? */ | 202 | /* |
166 | if (self_addr & 0x40000000) { | 203 | * For module, move the ip from calling site of mcount to the |
167 | /* module: move to the instruction "lui v1, HI_16BIT_OF_MCOUNT" */ | 204 | * instruction "lui v1, hi_16bit_of_mcount"(offset is 20), but for |
168 | ip = self_addr - 20; | 205 | * kernel, move to the instruction "move ra, at"(offset is 12) |
169 | } else { | 206 | */ |
170 | /* kernel: move to the instruction "move ra, at" */ | 207 | ip = self_addr - (in_module(self_addr) ? 20 : 12); |
171 | ip = self_addr - 12; | ||
172 | } | ||
173 | 208 | ||
174 | /* search the text until finding the non-store instruction or "s{d,w} | 209 | /* |
175 | * ra, offset(sp)" instruction */ | 210 | * search the text until finding the non-store instruction or "s{d,w} |
211 | * ra, offset(sp)" instruction | ||
212 | */ | ||
176 | do { | 213 | do { |
177 | ip -= 4; | 214 | ip -= 4; |
178 | 215 | ||
@@ -181,10 +218,11 @@ unsigned long ftrace_get_parent_addr(unsigned long self_addr, | |||
181 | 218 | ||
182 | if (unlikely(faulted)) | 219 | if (unlikely(faulted)) |
183 | return 0; | 220 | return 0; |
184 | 221 | /* | |
185 | /* If we hit the non-store instruction before finding where the | 222 | * If we hit the non-store instruction before finding where the |
186 | * ra is stored, then this is a leaf function and it does not | 223 | * ra is stored, then this is a leaf function and it does not |
187 | * store the ra on the stack. */ | 224 | * store the ra on the stack |
225 | */ | ||
188 | if ((code & S_R_SP) != S_R_SP) | 226 | if ((code & S_R_SP) != S_R_SP) |
189 | return parent_addr; | 227 | return parent_addr; |
190 | 228 | ||
@@ -202,7 +240,7 @@ unsigned long ftrace_get_parent_addr(unsigned long self_addr, | |||
202 | return 0; | 240 | return 0; |
203 | } | 241 | } |
204 | 242 | ||
205 | #endif | 243 | #endif /* !KBUILD_MCOUNT_RA_ADDRESS */ |
206 | 244 | ||
207 | /* | 245 | /* |
208 | * Hook the return address and push it in the stack of return addrs | 246 | * Hook the return address and push it in the stack of return addrs |
@@ -220,7 +258,8 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr, | |||
220 | if (unlikely(atomic_read(¤t->tracing_graph_pause))) | 258 | if (unlikely(atomic_read(¤t->tracing_graph_pause))) |
221 | return; | 259 | return; |
222 | 260 | ||
223 | /* "parent" is the stack address saved the return address of the caller | 261 | /* |
262 | * "parent" is the stack address saved the return address of the caller | ||
224 | * of _mcount. | 263 | * of _mcount. |
225 | * | 264 | * |
226 | * if the gcc < 4.5, a leaf function does not save the return address | 265 | * if the gcc < 4.5, a leaf function does not save the return address |
@@ -242,10 +281,11 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr, | |||
242 | goto out; | 281 | goto out; |
243 | #ifndef KBUILD_MCOUNT_RA_ADDRESS | 282 | #ifndef KBUILD_MCOUNT_RA_ADDRESS |
244 | parent = (unsigned long *)ftrace_get_parent_addr(self_addr, old, | 283 | parent = (unsigned long *)ftrace_get_parent_addr(self_addr, old, |
245 | (unsigned long)parent, | 284 | (unsigned long)parent, fp); |
246 | fp); | 285 | /* |
247 | /* If fails when getting the stack address of the non-leaf function's | 286 | * If fails when getting the stack address of the non-leaf function's |
248 | * ra, stop function graph tracer and return */ | 287 | * ra, stop function graph tracer and return |
288 | */ | ||
249 | if (parent == 0) | 289 | if (parent == 0) |
250 | goto out; | 290 | goto out; |
251 | #endif | 291 | #endif |
@@ -272,4 +312,4 @@ out: | |||
272 | ftrace_graph_stop(); | 312 | ftrace_graph_stop(); |
273 | WARN_ON(1); | 313 | WARN_ON(1); |
274 | } | 314 | } |
275 | #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ | 315 | #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ |
diff --git a/arch/mips/kernel/mcount.S b/arch/mips/kernel/mcount.S index 6851fc97a511..6bfcb7a00ec6 100644 --- a/arch/mips/kernel/mcount.S +++ b/arch/mips/kernel/mcount.S | |||
@@ -6,6 +6,7 @@ | |||
6 | * more details. | 6 | * more details. |
7 | * | 7 | * |
8 | * Copyright (C) 2009 Lemote Inc. & DSLab, Lanzhou University, China | 8 | * Copyright (C) 2009 Lemote Inc. & DSLab, Lanzhou University, China |
9 | * Copyright (C) 2010 DSLab, Lanzhou University, China | ||
9 | * Author: Wu Zhangjin <wuzhangjin@gmail.com> | 10 | * Author: Wu Zhangjin <wuzhangjin@gmail.com> |
10 | */ | 11 | */ |
11 | 12 | ||
@@ -45,8 +46,6 @@ | |||
45 | PTR_L a5, PT_R9(sp) | 46 | PTR_L a5, PT_R9(sp) |
46 | PTR_L a6, PT_R10(sp) | 47 | PTR_L a6, PT_R10(sp) |
47 | PTR_L a7, PT_R11(sp) | 48 | PTR_L a7, PT_R11(sp) |
48 | #endif | ||
49 | #ifdef CONFIG_64BIT | ||
50 | PTR_ADDIU sp, PT_SIZE | 49 | PTR_ADDIU sp, PT_SIZE |
51 | #else | 50 | #else |
52 | PTR_ADDIU sp, (PT_SIZE + 8) | 51 | PTR_ADDIU sp, (PT_SIZE + 8) |
@@ -58,6 +57,12 @@ | |||
58 | move ra, AT | 57 | move ra, AT |
59 | .endm | 58 | .endm |
60 | 59 | ||
60 | /* | ||
61 | * The -mmcount-ra-address option of gcc 4.5 uses register $12 to pass | ||
62 | * the location of the parent's return address. | ||
63 | */ | ||
64 | #define MCOUNT_RA_ADDRESS_REG $12 | ||
65 | |||
61 | #ifdef CONFIG_DYNAMIC_FTRACE | 66 | #ifdef CONFIG_DYNAMIC_FTRACE |
62 | 67 | ||
63 | NESTED(ftrace_caller, PT_SIZE, ra) | 68 | NESTED(ftrace_caller, PT_SIZE, ra) |
@@ -71,14 +76,14 @@ _mcount: | |||
71 | 76 | ||
72 | MCOUNT_SAVE_REGS | 77 | MCOUNT_SAVE_REGS |
73 | #ifdef KBUILD_MCOUNT_RA_ADDRESS | 78 | #ifdef KBUILD_MCOUNT_RA_ADDRESS |
74 | PTR_S t0, PT_R12(sp) /* t0 saved the location of the return address(at) by -mmcount-ra-address */ | 79 | PTR_S MCOUNT_RA_ADDRESS_REG, PT_R12(sp) |
75 | #endif | 80 | #endif |
76 | 81 | ||
77 | move a0, ra /* arg1: next ip, selfaddr */ | 82 | move a0, ra /* arg1: self return address */ |
78 | .globl ftrace_call | 83 | .globl ftrace_call |
79 | ftrace_call: | 84 | ftrace_call: |
80 | nop /* a placeholder for the call to a real tracing function */ | 85 | nop /* a placeholder for the call to a real tracing function */ |
81 | move a1, AT /* arg2: the caller's next ip, parent */ | 86 | move a1, AT /* arg2: parent's return address */ |
82 | 87 | ||
83 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | 88 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
84 | .globl ftrace_graph_call | 89 | .globl ftrace_graph_call |
@@ -119,9 +124,9 @@ NESTED(_mcount, PT_SIZE, ra) | |||
119 | static_trace: | 124 | static_trace: |
120 | MCOUNT_SAVE_REGS | 125 | MCOUNT_SAVE_REGS |
121 | 126 | ||
122 | move a0, ra /* arg1: next ip, selfaddr */ | 127 | move a0, ra /* arg1: self return address */ |
123 | jalr t2 /* (1) call *ftrace_trace_function */ | 128 | jalr t2 /* (1) call *ftrace_trace_function */ |
124 | move a1, AT /* arg2: the caller's next ip, parent */ | 129 | move a1, AT /* arg2: parent's return address */ |
125 | 130 | ||
126 | MCOUNT_RESTORE_REGS | 131 | MCOUNT_RESTORE_REGS |
127 | .globl ftrace_stub | 132 | .globl ftrace_stub |
@@ -134,28 +139,34 @@ ftrace_stub: | |||
134 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | 139 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
135 | 140 | ||
136 | NESTED(ftrace_graph_caller, PT_SIZE, ra) | 141 | NESTED(ftrace_graph_caller, PT_SIZE, ra) |
137 | #ifdef CONFIG_DYNAMIC_FTRACE | 142 | #ifndef CONFIG_DYNAMIC_FTRACE |
138 | PTR_L a1, PT_R31(sp) /* load the original ra from the stack */ | ||
139 | #ifdef KBUILD_MCOUNT_RA_ADDRESS | ||
140 | PTR_L t0, PT_R12(sp) /* load the original t0 from the stack */ | ||
141 | #endif | ||
142 | #else | ||
143 | MCOUNT_SAVE_REGS | 143 | MCOUNT_SAVE_REGS |
144 | move a1, ra /* arg2: next ip, selfaddr */ | ||
145 | #endif | 144 | #endif |
146 | 145 | ||
146 | /* arg1: Get the location of the parent's return address */ | ||
147 | #ifdef KBUILD_MCOUNT_RA_ADDRESS | 147 | #ifdef KBUILD_MCOUNT_RA_ADDRESS |
148 | bnez t0, 1f /* non-leaf func: t0 saved the location of the return address */ | 148 | #ifdef CONFIG_DYNAMIC_FTRACE |
149 | PTR_L a0, PT_R12(sp) | ||
150 | #else | ||
151 | move a0, MCOUNT_RA_ADDRESS_REG | ||
152 | #endif | ||
153 | bnez a0, 1f /* non-leaf func: stored in MCOUNT_RA_ADDRESS_REG */ | ||
149 | nop | 154 | nop |
150 | PTR_LA t0, PT_R1(sp) /* leaf func: get the location of at(old ra) from our own stack */ | 155 | #endif |
151 | 1: move a0, t0 /* arg1: the location of the return address */ | 156 | PTR_LA a0, PT_R1(sp) /* leaf func: the location in current stack */ |
157 | 1: | ||
158 | |||
159 | /* arg2: Get self return address */ | ||
160 | #ifdef CONFIG_DYNAMIC_FTRACE | ||
161 | PTR_L a1, PT_R31(sp) | ||
152 | #else | 162 | #else |
153 | PTR_LA a0, PT_R1(sp) /* arg1: &AT -> a0 */ | 163 | move a1, ra |
154 | #endif | 164 | #endif |
155 | jal prepare_ftrace_return | 165 | |
166 | /* arg3: Get frame pointer of current stack */ | ||
156 | #ifdef CONFIG_FRAME_POINTER | 167 | #ifdef CONFIG_FRAME_POINTER |
157 | move a2, fp /* arg3: frame pointer */ | 168 | move a2, fp |
158 | #else | 169 | #else /* ! CONFIG_FRAME_POINTER */ |
159 | #ifdef CONFIG_64BIT | 170 | #ifdef CONFIG_64BIT |
160 | PTR_LA a2, PT_SIZE(sp) | 171 | PTR_LA a2, PT_SIZE(sp) |
161 | #else | 172 | #else |
@@ -163,6 +174,8 @@ NESTED(ftrace_graph_caller, PT_SIZE, ra) | |||
163 | #endif | 174 | #endif |
164 | #endif | 175 | #endif |
165 | 176 | ||
177 | jal prepare_ftrace_return | ||
178 | nop | ||
166 | MCOUNT_RESTORE_REGS | 179 | MCOUNT_RESTORE_REGS |
167 | RETURN_BACK | 180 | RETURN_BACK |
168 | END(ftrace_graph_caller) | 181 | END(ftrace_graph_caller) |
diff --git a/arch/mips/kernel/mips-mt-fpaff.c b/arch/mips/kernel/mips-mt-fpaff.c index f5981c499109..2340f11dc29c 100644 --- a/arch/mips/kernel/mips-mt-fpaff.c +++ b/arch/mips/kernel/mips-mt-fpaff.c | |||
@@ -3,6 +3,7 @@ | |||
3 | * Copyright (C) 2005 Mips Technologies, Inc | 3 | * Copyright (C) 2005 Mips Technologies, Inc |
4 | */ | 4 | */ |
5 | #include <linux/cpu.h> | 5 | #include <linux/cpu.h> |
6 | #include <linux/cpuset.h> | ||
6 | #include <linux/cpumask.h> | 7 | #include <linux/cpumask.h> |
7 | #include <linux/delay.h> | 8 | #include <linux/delay.h> |
8 | #include <linux/kernel.h> | 9 | #include <linux/kernel.h> |
@@ -39,6 +40,21 @@ static inline struct task_struct *find_process_by_pid(pid_t pid) | |||
39 | return pid ? find_task_by_vpid(pid) : current; | 40 | return pid ? find_task_by_vpid(pid) : current; |
40 | } | 41 | } |
41 | 42 | ||
43 | /* | ||
44 | * check the target process has a UID that matches the current process's | ||
45 | */ | ||
46 | static bool check_same_owner(struct task_struct *p) | ||
47 | { | ||
48 | const struct cred *cred = current_cred(), *pcred; | ||
49 | bool match; | ||
50 | |||
51 | rcu_read_lock(); | ||
52 | pcred = __task_cred(p); | ||
53 | match = (cred->euid == pcred->euid || | ||
54 | cred->euid == pcred->uid); | ||
55 | rcu_read_unlock(); | ||
56 | return match; | ||
57 | } | ||
42 | 58 | ||
43 | /* | 59 | /* |
44 | * mipsmt_sys_sched_setaffinity - set the cpu affinity of a process | 60 | * mipsmt_sys_sched_setaffinity - set the cpu affinity of a process |
@@ -46,12 +62,10 @@ static inline struct task_struct *find_process_by_pid(pid_t pid) | |||
46 | asmlinkage long mipsmt_sys_sched_setaffinity(pid_t pid, unsigned int len, | 62 | asmlinkage long mipsmt_sys_sched_setaffinity(pid_t pid, unsigned int len, |
47 | unsigned long __user *user_mask_ptr) | 63 | unsigned long __user *user_mask_ptr) |
48 | { | 64 | { |
49 | cpumask_t new_mask; | 65 | cpumask_var_t cpus_allowed, new_mask, effective_mask; |
50 | cpumask_t effective_mask; | ||
51 | int retval; | ||
52 | struct task_struct *p; | ||
53 | struct thread_info *ti; | 66 | struct thread_info *ti; |
54 | uid_t euid; | 67 | struct task_struct *p; |
68 | int retval; | ||
55 | 69 | ||
56 | if (len < sizeof(new_mask)) | 70 | if (len < sizeof(new_mask)) |
57 | return -EINVAL; | 71 | return -EINVAL; |
@@ -60,53 +74,74 @@ asmlinkage long mipsmt_sys_sched_setaffinity(pid_t pid, unsigned int len, | |||
60 | return -EFAULT; | 74 | return -EFAULT; |
61 | 75 | ||
62 | get_online_cpus(); | 76 | get_online_cpus(); |
63 | read_lock(&tasklist_lock); | 77 | rcu_read_lock(); |
64 | 78 | ||
65 | p = find_process_by_pid(pid); | 79 | p = find_process_by_pid(pid); |
66 | if (!p) { | 80 | if (!p) { |
67 | read_unlock(&tasklist_lock); | 81 | rcu_read_unlock(); |
68 | put_online_cpus(); | 82 | put_online_cpus(); |
69 | return -ESRCH; | 83 | return -ESRCH; |
70 | } | 84 | } |
71 | 85 | ||
72 | /* | 86 | /* Prevent p going away */ |
73 | * It is not safe to call set_cpus_allowed with the | ||
74 | * tasklist_lock held. We will bump the task_struct's | ||
75 | * usage count and drop tasklist_lock before invoking | ||
76 | * set_cpus_allowed. | ||
77 | */ | ||
78 | get_task_struct(p); | 87 | get_task_struct(p); |
88 | rcu_read_unlock(); | ||
79 | 89 | ||
80 | euid = current_euid(); | 90 | if (!alloc_cpumask_var(&cpus_allowed, GFP_KERNEL)) { |
91 | retval = -ENOMEM; | ||
92 | goto out_put_task; | ||
93 | } | ||
94 | if (!alloc_cpumask_var(&new_mask, GFP_KERNEL)) { | ||
95 | retval = -ENOMEM; | ||
96 | goto out_free_cpus_allowed; | ||
97 | } | ||
98 | if (!alloc_cpumask_var(&effective_mask, GFP_KERNEL)) { | ||
99 | retval = -ENOMEM; | ||
100 | goto out_free_new_mask; | ||
101 | } | ||
81 | retval = -EPERM; | 102 | retval = -EPERM; |
82 | if (euid != p->cred->euid && euid != p->cred->uid && | 103 | if (!check_same_owner(p) && !capable(CAP_SYS_NICE)) |
83 | !capable(CAP_SYS_NICE)) { | ||
84 | read_unlock(&tasklist_lock); | ||
85 | goto out_unlock; | 104 | goto out_unlock; |
86 | } | ||
87 | 105 | ||
88 | retval = security_task_setscheduler(p, 0, NULL); | 106 | retval = security_task_setscheduler(p, 0, NULL); |
89 | if (retval) | 107 | if (retval) |
90 | goto out_unlock; | 108 | goto out_unlock; |
91 | 109 | ||
92 | /* Record new user-specified CPU set for future reference */ | 110 | /* Record new user-specified CPU set for future reference */ |
93 | p->thread.user_cpus_allowed = new_mask; | 111 | cpumask_copy(&p->thread.user_cpus_allowed, new_mask); |
94 | |||
95 | /* Unlock the task list */ | ||
96 | read_unlock(&tasklist_lock); | ||
97 | 112 | ||
113 | again: | ||
98 | /* Compute new global allowed CPU set if necessary */ | 114 | /* Compute new global allowed CPU set if necessary */ |
99 | ti = task_thread_info(p); | 115 | ti = task_thread_info(p); |
100 | if (test_ti_thread_flag(ti, TIF_FPUBOUND) && | 116 | if (test_ti_thread_flag(ti, TIF_FPUBOUND) && |
101 | cpus_intersects(new_mask, mt_fpu_cpumask)) { | 117 | cpus_intersects(*new_mask, mt_fpu_cpumask)) { |
102 | cpus_and(effective_mask, new_mask, mt_fpu_cpumask); | 118 | cpus_and(*effective_mask, *new_mask, mt_fpu_cpumask); |
103 | retval = set_cpus_allowed_ptr(p, &effective_mask); | 119 | retval = set_cpus_allowed_ptr(p, effective_mask); |
104 | } else { | 120 | } else { |
121 | cpumask_copy(effective_mask, new_mask); | ||
105 | clear_ti_thread_flag(ti, TIF_FPUBOUND); | 122 | clear_ti_thread_flag(ti, TIF_FPUBOUND); |
106 | retval = set_cpus_allowed_ptr(p, &new_mask); | 123 | retval = set_cpus_allowed_ptr(p, new_mask); |
107 | } | 124 | } |
108 | 125 | ||
126 | if (!retval) { | ||
127 | cpuset_cpus_allowed(p, cpus_allowed); | ||
128 | if (!cpumask_subset(effective_mask, cpus_allowed)) { | ||
129 | /* | ||
130 | * We must have raced with a concurrent cpuset | ||
131 | * update. Just reset the cpus_allowed to the | ||
132 | * cpuset's cpus_allowed | ||
133 | */ | ||
134 | cpumask_copy(new_mask, cpus_allowed); | ||
135 | goto again; | ||
136 | } | ||
137 | } | ||
109 | out_unlock: | 138 | out_unlock: |
139 | free_cpumask_var(effective_mask); | ||
140 | out_free_new_mask: | ||
141 | free_cpumask_var(new_mask); | ||
142 | out_free_cpus_allowed: | ||
143 | free_cpumask_var(cpus_allowed); | ||
144 | out_put_task: | ||
110 | put_task_struct(p); | 145 | put_task_struct(p); |
111 | put_online_cpus(); | 146 | put_online_cpus(); |
112 | return retval; | 147 | return retval; |
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index 8bdd6a663c7f..852780868fb4 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c | |||
@@ -976,7 +976,7 @@ asmlinkage void do_cpu(struct pt_regs *regs) | |||
976 | 976 | ||
977 | case 2: | 977 | case 2: |
978 | raw_notifier_call_chain(&cu2_chain, CU2_EXCEPTION, regs); | 978 | raw_notifier_call_chain(&cu2_chain, CU2_EXCEPTION, regs); |
979 | break; | 979 | return; |
980 | 980 | ||
981 | case 3: | 981 | case 3: |
982 | break; | 982 | break; |
diff --git a/arch/mips/lasat/image/head.S b/arch/mips/lasat/image/head.S index efb95f2609c2..e0ecda92c40a 100644 --- a/arch/mips/lasat/image/head.S +++ b/arch/mips/lasat/image/head.S | |||
@@ -1,7 +1,7 @@ | |||
1 | #include <asm/lasat/head.h> | 1 | #include <asm/lasat/head.h> |
2 | 2 | ||
3 | .text | 3 | .text |
4 | .section .text.start, "ax" | 4 | .section .text..start, "ax" |
5 | .set noreorder | 5 | .set noreorder |
6 | .set mips3 | 6 | .set mips3 |
7 | 7 | ||
diff --git a/arch/mips/lasat/image/romscript.normal b/arch/mips/lasat/image/romscript.normal index 988f8ad189cb..0864c963e188 100644 --- a/arch/mips/lasat/image/romscript.normal +++ b/arch/mips/lasat/image/romscript.normal | |||
@@ -4,7 +4,7 @@ SECTIONS | |||
4 | { | 4 | { |
5 | .text : | 5 | .text : |
6 | { | 6 | { |
7 | *(.text.start) | 7 | *(.text..start) |
8 | } | 8 | } |
9 | 9 | ||
10 | /* Data in ROM */ | 10 | /* Data in ROM */ |
diff --git a/arch/mips/loongson/Kconfig b/arch/mips/loongson/Kconfig index 3df1967dea08..c97ca69b94e0 100644 --- a/arch/mips/loongson/Kconfig +++ b/arch/mips/loongson/Kconfig | |||
@@ -23,6 +23,7 @@ config LEMOTE_FULOONG2E | |||
23 | select GENERIC_HARDIRQS_NO__DO_IRQ | 23 | select GENERIC_HARDIRQS_NO__DO_IRQ |
24 | select GENERIC_ISA_DMA_SUPPORT_BROKEN | 24 | select GENERIC_ISA_DMA_SUPPORT_BROKEN |
25 | select CPU_HAS_WB | 25 | select CPU_HAS_WB |
26 | select LOONGSON_MC146818 | ||
26 | help | 27 | help |
27 | Lemote Fuloong(2e) mini-PC board based on the Chinese Loongson-2E CPU and | 28 | Lemote Fuloong(2e) mini-PC board based on the Chinese Loongson-2E CPU and |
28 | an FPGA northbridge | 29 | an FPGA northbridge |
@@ -51,6 +52,7 @@ config LEMOTE_MACH2F | |||
51 | select SYS_SUPPORTS_64BIT_KERNEL | 52 | select SYS_SUPPORTS_64BIT_KERNEL |
52 | select SYS_SUPPORTS_HIGHMEM | 53 | select SYS_SUPPORTS_HIGHMEM |
53 | select SYS_SUPPORTS_LITTLE_ENDIAN | 54 | select SYS_SUPPORTS_LITTLE_ENDIAN |
55 | select LOONGSON_MC146818 | ||
54 | help | 56 | help |
55 | Lemote Loongson 2F family machines utilize the 2F revision of | 57 | Lemote Loongson 2F family machines utilize the 2F revision of |
56 | Loongson processor and the AMD CS5536 south bridge. | 58 | Loongson processor and the AMD CS5536 south bridge. |
@@ -83,3 +85,7 @@ config LOONGSON_UART_BASE | |||
83 | bool | 85 | bool |
84 | default y | 86 | default y |
85 | depends on EARLY_PRINTK || SERIAL_8250 | 87 | depends on EARLY_PRINTK || SERIAL_8250 |
88 | |||
89 | config LOONGSON_MC146818 | ||
90 | bool | ||
91 | default n | ||
diff --git a/arch/mips/loongson/common/Makefile b/arch/mips/loongson/common/Makefile index cdd2e812ba1a..e526488df655 100644 --- a/arch/mips/loongson/common/Makefile +++ b/arch/mips/loongson/common/Makefile | |||
@@ -12,6 +12,7 @@ obj-$(CONFIG_GENERIC_GPIO) += gpio.o | |||
12 | obj-$(CONFIG_EARLY_PRINTK) += early_printk.o | 12 | obj-$(CONFIG_EARLY_PRINTK) += early_printk.o |
13 | obj-$(CONFIG_SERIAL_8250) += serial.o | 13 | obj-$(CONFIG_SERIAL_8250) += serial.o |
14 | obj-$(CONFIG_LOONGSON_UART_BASE) += uart_base.o | 14 | obj-$(CONFIG_LOONGSON_UART_BASE) += uart_base.o |
15 | obj-$(CONFIG_LOONGSON_MC146818) += rtc.o | ||
15 | 16 | ||
16 | # | 17 | # |
17 | # Enable CS5536 Virtual Support Module(VSM) to virtulize the PCI configure | 18 | # Enable CS5536 Virtual Support Module(VSM) to virtulize the PCI configure |
diff --git a/arch/mips/loongson/common/cs5536/cs5536_ehci.c b/arch/mips/loongson/common/cs5536/cs5536_ehci.c index eaf8b86e3318..5b5cbba699b3 100644 --- a/arch/mips/loongson/common/cs5536/cs5536_ehci.c +++ b/arch/mips/loongson/common/cs5536/cs5536_ehci.c | |||
@@ -49,6 +49,8 @@ void pci_ehci_write_reg(int reg, u32 value) | |||
49 | lo |= SOFT_BAR_EHCI_FLAG; | 49 | lo |= SOFT_BAR_EHCI_FLAG; |
50 | _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo); | 50 | _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo); |
51 | } else if ((value & 0x01) == 0x00) { | 51 | } else if ((value & 0x01) == 0x00) { |
52 | _rdmsr(USB_MSR_REG(USB_EHCI), &hi, &lo); | ||
53 | lo = value; | ||
52 | _wrmsr(USB_MSR_REG(USB_EHCI), hi, lo); | 54 | _wrmsr(USB_MSR_REG(USB_EHCI), hi, lo); |
53 | 55 | ||
54 | value &= 0xfffffff0; | 56 | value &= 0xfffffff0; |
diff --git a/arch/mips/loongson/common/cs5536/cs5536_ide.c b/arch/mips/loongson/common/cs5536/cs5536_ide.c index 9a96b5664c78..681d1291a2c7 100644 --- a/arch/mips/loongson/common/cs5536/cs5536_ide.c +++ b/arch/mips/loongson/common/cs5536/cs5536_ide.c | |||
@@ -51,6 +51,7 @@ void pci_ide_write_reg(int reg, u32 value) | |||
51 | lo |= SOFT_BAR_IDE_FLAG; | 51 | lo |= SOFT_BAR_IDE_FLAG; |
52 | _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo); | 52 | _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo); |
53 | } else if (value & 0x01) { | 53 | } else if (value & 0x01) { |
54 | _rdmsr(IDE_MSR_REG(IDE_IO_BAR), &hi, &lo); | ||
54 | lo = (value & 0xfffffff0) | 0x1; | 55 | lo = (value & 0xfffffff0) | 0x1; |
55 | _wrmsr(IDE_MSR_REG(IDE_IO_BAR), hi, lo); | 56 | _wrmsr(IDE_MSR_REG(IDE_IO_BAR), hi, lo); |
56 | 57 | ||
@@ -65,19 +66,30 @@ void pci_ide_write_reg(int reg, u32 value) | |||
65 | _rdmsr(DIVIL_MSR_REG(DIVIL_BALL_OPTS), &hi, &lo); | 66 | _rdmsr(DIVIL_MSR_REG(DIVIL_BALL_OPTS), &hi, &lo); |
66 | lo |= 0x01; | 67 | lo |= 0x01; |
67 | _wrmsr(DIVIL_MSR_REG(DIVIL_BALL_OPTS), hi, lo); | 68 | _wrmsr(DIVIL_MSR_REG(DIVIL_BALL_OPTS), hi, lo); |
68 | } else | 69 | } else { |
70 | _rdmsr(IDE_MSR_REG(IDE_CFG), &hi, &lo); | ||
71 | lo = value; | ||
69 | _wrmsr(IDE_MSR_REG(IDE_CFG), hi, lo); | 72 | _wrmsr(IDE_MSR_REG(IDE_CFG), hi, lo); |
73 | } | ||
70 | break; | 74 | break; |
71 | case PCI_IDE_DTC_REG: | 75 | case PCI_IDE_DTC_REG: |
76 | _rdmsr(IDE_MSR_REG(IDE_DTC), &hi, &lo); | ||
77 | lo = value; | ||
72 | _wrmsr(IDE_MSR_REG(IDE_DTC), hi, lo); | 78 | _wrmsr(IDE_MSR_REG(IDE_DTC), hi, lo); |
73 | break; | 79 | break; |
74 | case PCI_IDE_CAST_REG: | 80 | case PCI_IDE_CAST_REG: |
81 | _rdmsr(IDE_MSR_REG(IDE_CAST), &hi, &lo); | ||
82 | lo = value; | ||
75 | _wrmsr(IDE_MSR_REG(IDE_CAST), hi, lo); | 83 | _wrmsr(IDE_MSR_REG(IDE_CAST), hi, lo); |
76 | break; | 84 | break; |
77 | case PCI_IDE_ETC_REG: | 85 | case PCI_IDE_ETC_REG: |
86 | _rdmsr(IDE_MSR_REG(IDE_ETC), &hi, &lo); | ||
87 | lo = value; | ||
78 | _wrmsr(IDE_MSR_REG(IDE_ETC), hi, lo); | 88 | _wrmsr(IDE_MSR_REG(IDE_ETC), hi, lo); |
79 | break; | 89 | break; |
80 | case PCI_IDE_PM_REG: | 90 | case PCI_IDE_PM_REG: |
91 | _rdmsr(IDE_MSR_REG(IDE_INTERNAL_PM), &hi, &lo); | ||
92 | lo = value; | ||
81 | _wrmsr(IDE_MSR_REG(IDE_INTERNAL_PM), hi, lo); | 93 | _wrmsr(IDE_MSR_REG(IDE_INTERNAL_PM), hi, lo); |
82 | break; | 94 | break; |
83 | default: | 95 | default: |
@@ -167,6 +179,7 @@ u32 pci_ide_read_reg(int reg) | |||
167 | case PCI_IDE_ETC_REG: | 179 | case PCI_IDE_ETC_REG: |
168 | _rdmsr(IDE_MSR_REG(IDE_ETC), &hi, &lo); | 180 | _rdmsr(IDE_MSR_REG(IDE_ETC), &hi, &lo); |
169 | conf_data = lo; | 181 | conf_data = lo; |
182 | break; | ||
170 | case PCI_IDE_PM_REG: | 183 | case PCI_IDE_PM_REG: |
171 | _rdmsr(IDE_MSR_REG(IDE_INTERNAL_PM), &hi, &lo); | 184 | _rdmsr(IDE_MSR_REG(IDE_INTERNAL_PM), &hi, &lo); |
172 | conf_data = lo; | 185 | conf_data = lo; |
diff --git a/arch/mips/loongson/common/cs5536/cs5536_isa.c b/arch/mips/loongson/common/cs5536/cs5536_isa.c index f5c0818831b2..4d9f65abeaff 100644 --- a/arch/mips/loongson/common/cs5536/cs5536_isa.c +++ b/arch/mips/loongson/common/cs5536/cs5536_isa.c | |||
@@ -61,7 +61,7 @@ static void divil_lbar_enable(void) | |||
61 | for (offset = DIVIL_LBAR_SMB; offset <= DIVIL_LBAR_PMS; offset++) { | 61 | for (offset = DIVIL_LBAR_SMB; offset <= DIVIL_LBAR_PMS; offset++) { |
62 | _rdmsr(DIVIL_MSR_REG(offset), &hi, &lo); | 62 | _rdmsr(DIVIL_MSR_REG(offset), &hi, &lo); |
63 | hi |= 0x01; | 63 | hi |= 0x01; |
64 | _wrmsr(DIVIL_MSR_REG(DIVIL_LBAR_SMB), hi, lo); | 64 | _wrmsr(DIVIL_MSR_REG(offset), hi, lo); |
65 | } | 65 | } |
66 | } | 66 | } |
67 | 67 | ||
@@ -76,7 +76,7 @@ static void divil_lbar_disable(void) | |||
76 | for (offset = DIVIL_LBAR_SMB; offset <= DIVIL_LBAR_PMS; offset++) { | 76 | for (offset = DIVIL_LBAR_SMB; offset <= DIVIL_LBAR_PMS; offset++) { |
77 | _rdmsr(DIVIL_MSR_REG(offset), &hi, &lo); | 77 | _rdmsr(DIVIL_MSR_REG(offset), &hi, &lo); |
78 | hi &= ~0x01; | 78 | hi &= ~0x01; |
79 | _wrmsr(DIVIL_MSR_REG(DIVIL_LBAR_SMB), hi, lo); | 79 | _wrmsr(DIVIL_MSR_REG(offset), hi, lo); |
80 | } | 80 | } |
81 | } | 81 | } |
82 | 82 | ||
diff --git a/arch/mips/loongson/common/cs5536/cs5536_ohci.c b/arch/mips/loongson/common/cs5536/cs5536_ohci.c index db5900aadd6b..bdedf512baf7 100644 --- a/arch/mips/loongson/common/cs5536/cs5536_ohci.c +++ b/arch/mips/loongson/common/cs5536/cs5536_ohci.c | |||
@@ -49,6 +49,8 @@ void pci_ohci_write_reg(int reg, u32 value) | |||
49 | lo |= SOFT_BAR_OHCI_FLAG; | 49 | lo |= SOFT_BAR_OHCI_FLAG; |
50 | _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo); | 50 | _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo); |
51 | } else if ((value & 0x01) == 0x00) { | 51 | } else if ((value & 0x01) == 0x00) { |
52 | _rdmsr(USB_MSR_REG(USB_OHCI), &hi, &lo); | ||
53 | lo = value; | ||
52 | _wrmsr(USB_MSR_REG(USB_OHCI), hi, lo); | 54 | _wrmsr(USB_MSR_REG(USB_OHCI), hi, lo); |
53 | 55 | ||
54 | value &= 0xfffffff0; | 56 | value &= 0xfffffff0; |
diff --git a/arch/mips/loongson/common/rtc.c b/arch/mips/loongson/common/rtc.c new file mode 100644 index 000000000000..a90d87c01555 --- /dev/null +++ b/arch/mips/loongson/common/rtc.c | |||
@@ -0,0 +1,43 @@ | |||
1 | /* | ||
2 | * Lemote Fuloong platform support | ||
3 | * | ||
4 | * Copyright(c) 2010 Arnaud Patard <apatard@mandriva.com> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | */ | ||
11 | |||
12 | #include <linux/init.h> | ||
13 | #include <linux/kernel.h> | ||
14 | #include <linux/platform_device.h> | ||
15 | #include <linux/mc146818rtc.h> | ||
16 | |||
17 | struct resource loongson_rtc_resources[] = { | ||
18 | { | ||
19 | .start = RTC_PORT(0), | ||
20 | .end = RTC_PORT(1), | ||
21 | .flags = IORESOURCE_IO, | ||
22 | }, { | ||
23 | .start = RTC_IRQ, | ||
24 | .end = RTC_IRQ, | ||
25 | .flags = IORESOURCE_IRQ, | ||
26 | } | ||
27 | }; | ||
28 | |||
29 | static struct platform_device loongson_rtc_device = { | ||
30 | .name = "rtc_cmos", | ||
31 | .id = -1, | ||
32 | .resource = loongson_rtc_resources, | ||
33 | .num_resources = ARRAY_SIZE(loongson_rtc_resources), | ||
34 | }; | ||
35 | |||
36 | |||
37 | static int __init loongson_rtc_platform_init(void) | ||
38 | { | ||
39 | platform_device_register(&loongson_rtc_device); | ||
40 | return 0; | ||
41 | } | ||
42 | |||
43 | device_initcall(loongson_rtc_platform_init); | ||
diff --git a/arch/mips/math-emu/dp_simple.c b/arch/mips/math-emu/dp_simple.c index d9ae1dbabda7..b90974246e5b 100644 --- a/arch/mips/math-emu/dp_simple.c +++ b/arch/mips/math-emu/dp_simple.c | |||
@@ -78,6 +78,7 @@ ieee754dp ieee754dp_abs(ieee754dp x) | |||
78 | DPSIGN(x) = 0; | 78 | DPSIGN(x) = 0; |
79 | 79 | ||
80 | if (xc == IEEE754_CLASS_SNAN) { | 80 | if (xc == IEEE754_CLASS_SNAN) { |
81 | SETCX(IEEE754_INVALID_OPERATION); | ||
81 | return ieee754dp_nanxcpt(ieee754dp_indef(), "abs"); | 82 | return ieee754dp_nanxcpt(ieee754dp_indef(), "abs"); |
82 | } | 83 | } |
83 | 84 | ||
diff --git a/arch/mips/math-emu/sp_simple.c b/arch/mips/math-emu/sp_simple.c index 3175477d36f6..2fd53c920e99 100644 --- a/arch/mips/math-emu/sp_simple.c +++ b/arch/mips/math-emu/sp_simple.c | |||
@@ -78,6 +78,7 @@ ieee754sp ieee754sp_abs(ieee754sp x) | |||
78 | SPSIGN(x) = 0; | 78 | SPSIGN(x) = 0; |
79 | 79 | ||
80 | if (xc == IEEE754_CLASS_SNAN) { | 80 | if (xc == IEEE754_CLASS_SNAN) { |
81 | SETCX(IEEE754_INVALID_OPERATION); | ||
81 | return ieee754sp_nanxcpt(ieee754sp_indef(), "abs"); | 82 | return ieee754sp_nanxcpt(ieee754sp_indef(), "abs"); |
82 | } | 83 | } |
83 | 84 | ||
diff --git a/arch/mips/oprofile/op_model_loongson2.c b/arch/mips/oprofile/op_model_loongson2.c index d0d24e047676..60d3ea602118 100644 --- a/arch/mips/oprofile/op_model_loongson2.c +++ b/arch/mips/oprofile/op_model_loongson2.c | |||
@@ -43,6 +43,12 @@ static struct loongson2_register_config { | |||
43 | static char *oprofid = "LoongsonPerf"; | 43 | static char *oprofid = "LoongsonPerf"; |
44 | static irqreturn_t loongson2_perfcount_handler(int irq, void *dev_id); | 44 | static irqreturn_t loongson2_perfcount_handler(int irq, void *dev_id); |
45 | 45 | ||
46 | static void reset_counters(void *arg) | ||
47 | { | ||
48 | write_c0_perfctrl(0); | ||
49 | write_c0_perfcnt(0); | ||
50 | } | ||
51 | |||
46 | static void loongson2_reg_setup(struct op_counter_config *cfg) | 52 | static void loongson2_reg_setup(struct op_counter_config *cfg) |
47 | { | 53 | { |
48 | unsigned int ctrl = 0; | 54 | unsigned int ctrl = 0; |
@@ -139,7 +145,7 @@ static int __init loongson2_init(void) | |||
139 | 145 | ||
140 | static void loongson2_exit(void) | 146 | static void loongson2_exit(void) |
141 | { | 147 | { |
142 | write_c0_perfctrl(0); | 148 | reset_counters(NULL); |
143 | free_irq(LOONGSON2_PERFCNT_IRQ, oprofid); | 149 | free_irq(LOONGSON2_PERFCNT_IRQ, oprofid); |
144 | } | 150 | } |
145 | 151 | ||
diff --git a/arch/mn10300/mm/fault.c b/arch/mn10300/mm/fault.c index 53bb17d0f068..81f153fa51b4 100644 --- a/arch/mn10300/mm/fault.c +++ b/arch/mn10300/mm/fault.c | |||
@@ -338,11 +338,10 @@ no_context: | |||
338 | */ | 338 | */ |
339 | out_of_memory: | 339 | out_of_memory: |
340 | up_read(&mm->mmap_sem); | 340 | up_read(&mm->mmap_sem); |
341 | monitor_signal(regs); | 341 | if ((fault_code & MMUFCR_xFC_ACCESS) != MMUFCR_xFC_ACCESS_USR) |
342 | printk(KERN_ALERT "VM: killing process %s\n", tsk->comm); | 342 | goto no_context; |
343 | if ((fault_code & MMUFCR_xFC_ACCESS) == MMUFCR_xFC_ACCESS_USR) | 343 | pagefault_out_of_memory(); |
344 | do_exit(SIGKILL); | 344 | return; |
345 | goto no_context; | ||
346 | 345 | ||
347 | do_sigbus: | 346 | do_sigbus: |
348 | up_read(&mm->mmap_sem); | 347 | up_read(&mm->mmap_sem); |
diff --git a/arch/mn10300/unit-asb2305/pci-asb2305.c b/arch/mn10300/unit-asb2305/pci-asb2305.c index d6119b879a98..45b40ac6c464 100644 --- a/arch/mn10300/unit-asb2305/pci-asb2305.c +++ b/arch/mn10300/unit-asb2305/pci-asb2305.c | |||
@@ -117,6 +117,7 @@ static void __init pcibios_allocate_bus_resources(struct list_head *bus_list) | |||
117 | * Invalidate the resource to prevent | 117 | * Invalidate the resource to prevent |
118 | * child resource allocations in this | 118 | * child resource allocations in this |
119 | * range. */ | 119 | * range. */ |
120 | r->start = r->end = 0; | ||
120 | r->flags = 0; | 121 | r->flags = 0; |
121 | } | 122 | } |
122 | } | 123 | } |
diff --git a/arch/parisc/include/asm/cache.h b/arch/parisc/include/asm/cache.h index 32c2cca74345..45effe6978fa 100644 --- a/arch/parisc/include/asm/cache.h +++ b/arch/parisc/include/asm/cache.h | |||
@@ -28,7 +28,7 @@ | |||
28 | 28 | ||
29 | #define SMP_CACHE_BYTES L1_CACHE_BYTES | 29 | #define SMP_CACHE_BYTES L1_CACHE_BYTES |
30 | 30 | ||
31 | #define __read_mostly __attribute__((__section__(".data.read_mostly"))) | 31 | #define __read_mostly __attribute__((__section__(".data..read_mostly"))) |
32 | 32 | ||
33 | void parisc_cache_init(void); /* initializes cache-flushing */ | 33 | void parisc_cache_init(void); /* initializes cache-flushing */ |
34 | void disable_sr_hashing_asm(int); /* low level support for above */ | 34 | void disable_sr_hashing_asm(int); /* low level support for above */ |
diff --git a/arch/parisc/include/asm/system.h b/arch/parisc/include/asm/system.h index 4653c77bf9d1..2ab4af58ecb9 100644 --- a/arch/parisc/include/asm/system.h +++ b/arch/parisc/include/asm/system.h | |||
@@ -174,7 +174,7 @@ static inline void set_eiem(unsigned long val) | |||
174 | }) | 174 | }) |
175 | 175 | ||
176 | #ifdef CONFIG_SMP | 176 | #ifdef CONFIG_SMP |
177 | # define __lock_aligned __attribute__((__section__(".data.lock_aligned"))) | 177 | # define __lock_aligned __attribute__((__section__(".data..lock_aligned"))) |
178 | #endif | 178 | #endif |
179 | 179 | ||
180 | #define arch_align_stack(x) (x) | 180 | #define arch_align_stack(x) (x) |
diff --git a/arch/parisc/kernel/head.S b/arch/parisc/kernel/head.S index 0e3d9f9b9e33..4dbdf0ed6fa0 100644 --- a/arch/parisc/kernel/head.S +++ b/arch/parisc/kernel/head.S | |||
@@ -345,7 +345,7 @@ smp_slave_stext: | |||
345 | ENDPROC(stext) | 345 | ENDPROC(stext) |
346 | 346 | ||
347 | #ifndef CONFIG_64BIT | 347 | #ifndef CONFIG_64BIT |
348 | .section .data.read_mostly | 348 | .section .data..read_mostly |
349 | 349 | ||
350 | .align 4 | 350 | .align 4 |
351 | .export $global$,data | 351 | .export $global$,data |
diff --git a/arch/parisc/kernel/init_task.c b/arch/parisc/kernel/init_task.c index d020eae6525c..4a91e433416f 100644 --- a/arch/parisc/kernel/init_task.c +++ b/arch/parisc/kernel/init_task.c | |||
@@ -53,11 +53,11 @@ union thread_union init_thread_union __init_task_data | |||
53 | * guarantee that global objects will be laid out in memory in the same order | 53 | * guarantee that global objects will be laid out in memory in the same order |
54 | * as the order of declaration, so put these in different sections and use | 54 | * as the order of declaration, so put these in different sections and use |
55 | * the linker script to order them. */ | 55 | * the linker script to order them. */ |
56 | pmd_t pmd0[PTRS_PER_PMD] __attribute__ ((__section__ (".data.vm0.pmd"), aligned(PAGE_SIZE))); | 56 | pmd_t pmd0[PTRS_PER_PMD] __attribute__ ((__section__ (".data..vm0.pmd"), aligned(PAGE_SIZE))); |
57 | #endif | 57 | #endif |
58 | 58 | ||
59 | pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__ ((__section__ (".data.vm0.pgd"), aligned(PAGE_SIZE))); | 59 | pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__ ((__section__ (".data..vm0.pgd"), aligned(PAGE_SIZE))); |
60 | pte_t pg0[PT_INITIAL * PTRS_PER_PTE] __attribute__ ((__section__ (".data.vm0.pte"), aligned(PAGE_SIZE))); | 60 | pte_t pg0[PT_INITIAL * PTRS_PER_PTE] __attribute__ ((__section__ (".data..vm0.pte"), aligned(PAGE_SIZE))); |
61 | 61 | ||
62 | /* | 62 | /* |
63 | * Initial task structure. | 63 | * Initial task structure. |
diff --git a/arch/parisc/kernel/vmlinux.lds.S b/arch/parisc/kernel/vmlinux.lds.S index 9dab4a4e09f7..d64a6bbec2aa 100644 --- a/arch/parisc/kernel/vmlinux.lds.S +++ b/arch/parisc/kernel/vmlinux.lds.S | |||
@@ -94,8 +94,8 @@ SECTIONS | |||
94 | 94 | ||
95 | /* PA-RISC locks requires 16-byte alignment */ | 95 | /* PA-RISC locks requires 16-byte alignment */ |
96 | . = ALIGN(16); | 96 | . = ALIGN(16); |
97 | .data.lock_aligned : { | 97 | .data..lock_aligned : { |
98 | *(.data.lock_aligned) | 98 | *(.data..lock_aligned) |
99 | } | 99 | } |
100 | 100 | ||
101 | /* End of data section */ | 101 | /* End of data section */ |
@@ -105,10 +105,10 @@ SECTIONS | |||
105 | __bss_start = .; | 105 | __bss_start = .; |
106 | /* page table entries need to be PAGE_SIZE aligned */ | 106 | /* page table entries need to be PAGE_SIZE aligned */ |
107 | . = ALIGN(PAGE_SIZE); | 107 | . = ALIGN(PAGE_SIZE); |
108 | .data.vmpages : { | 108 | .data..vmpages : { |
109 | *(.data.vm0.pmd) | 109 | *(.data..vm0.pmd) |
110 | *(.data.vm0.pgd) | 110 | *(.data..vm0.pgd) |
111 | *(.data.vm0.pte) | 111 | *(.data..vm0.pte) |
112 | } | 112 | } |
113 | .bss : { | 113 | .bss : { |
114 | *(.bss) | 114 | *(.bss) |
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 66a315e06dce..6506bf4fbff1 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
@@ -351,7 +351,7 @@ config ARCH_ENABLE_MEMORY_HOTREMOVE | |||
351 | 351 | ||
352 | config KEXEC | 352 | config KEXEC |
353 | bool "kexec system call (EXPERIMENTAL)" | 353 | bool "kexec system call (EXPERIMENTAL)" |
354 | depends on PPC_BOOK3S && EXPERIMENTAL | 354 | depends on (PPC_BOOK3S || (FSL_BOOKE && !SMP)) && EXPERIMENTAL |
355 | help | 355 | help |
356 | kexec is a system call that implements the ability to shutdown your | 356 | kexec is a system call that implements the ability to shutdown your |
357 | current kernel, and to start another kernel. It is like a reboot | 357 | current kernel, and to start another kernel. It is like a reboot |
@@ -400,7 +400,7 @@ config IRQ_ALL_CPUS | |||
400 | 400 | ||
401 | config SPARSE_IRQ | 401 | config SPARSE_IRQ |
402 | bool "Support sparse irq numbering" | 402 | bool "Support sparse irq numbering" |
403 | default y | 403 | default n |
404 | help | 404 | help |
405 | This enables support for sparse irqs. This is useful for distro | 405 | This enables support for sparse irqs. This is useful for distro |
406 | kernels that want to define a high CONFIG_NR_CPUS value but still | 406 | kernels that want to define a high CONFIG_NR_CPUS value but still |
@@ -409,7 +409,7 @@ config SPARSE_IRQ | |||
409 | ( Sparse IRQs can also be beneficial on NUMA boxes, as they spread | 409 | ( Sparse IRQs can also be beneficial on NUMA boxes, as they spread |
410 | out the irq_desc[] array in a more NUMA-friendly way. ) | 410 | out the irq_desc[] array in a more NUMA-friendly way. ) |
411 | 411 | ||
412 | If you don't know what to do here, say Y. | 412 | If you don't know what to do here, say N. |
413 | 413 | ||
414 | config NUMA | 414 | config NUMA |
415 | bool "NUMA support" | 415 | bool "NUMA support" |
diff --git a/arch/powerpc/Kconfig.debug b/arch/powerpc/Kconfig.debug index 53696da4518f..2d38a50e66ba 100644 --- a/arch/powerpc/Kconfig.debug +++ b/arch/powerpc/Kconfig.debug | |||
@@ -135,13 +135,6 @@ config DEBUGGER | |||
135 | depends on KGDB || XMON | 135 | depends on KGDB || XMON |
136 | default y | 136 | default y |
137 | 137 | ||
138 | config IRQSTACKS | ||
139 | bool "Use separate kernel stacks when processing interrupts" | ||
140 | help | ||
141 | If you say Y here the kernel will use separate kernel stacks | ||
142 | for handling hard and soft interrupts. This can help avoid | ||
143 | overflowing the process kernel stacks. | ||
144 | |||
145 | config VIRQ_DEBUG | 138 | config VIRQ_DEBUG |
146 | bool "Expose hardware/virtual IRQ mapping via debugfs" | 139 | bool "Expose hardware/virtual IRQ mapping via debugfs" |
147 | depends on DEBUG_FS | 140 | depends on DEBUG_FS |
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile index 1a54a3b3a3fa..77cfe7a29e25 100644 --- a/arch/powerpc/Makefile +++ b/arch/powerpc/Makefile | |||
@@ -92,10 +92,10 @@ endif | |||
92 | else | 92 | else |
93 | KBUILD_CFLAGS += $(call cc-option,-mtune=power4) | 93 | KBUILD_CFLAGS += $(call cc-option,-mtune=power4) |
94 | endif | 94 | endif |
95 | else | ||
96 | LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o | ||
97 | endif | 95 | endif |
98 | 96 | ||
97 | LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o | ||
98 | |||
99 | ifeq ($(CONFIG_TUNE_CELL),y) | 99 | ifeq ($(CONFIG_TUNE_CELL),y) |
100 | KBUILD_CFLAGS += $(call cc-option,-mtune=cell) | 100 | KBUILD_CFLAGS += $(call cc-option,-mtune=cell) |
101 | endif | 101 | endif |
@@ -112,6 +112,11 @@ KBUILD_CFLAGS += $(call cc-option,-mspe=no) | |||
112 | # kernel considerably. | 112 | # kernel considerably. |
113 | KBUILD_CFLAGS += $(call cc-option,-funit-at-a-time) | 113 | KBUILD_CFLAGS += $(call cc-option,-funit-at-a-time) |
114 | 114 | ||
115 | # FIXME: the module load should be taught about the additional relocs | ||
116 | # generated by this. | ||
117 | # revert to pre-gcc-4.4 behaviour of .eh_frame | ||
118 | KBUILD_CFLAGS += $(call cc-option,-fno-dwarf2-cfi-asm) | ||
119 | |||
115 | # Never use string load/store instructions as they are | 120 | # Never use string load/store instructions as they are |
116 | # often slow when they are implemented at all | 121 | # often slow when they are implemented at all |
117 | KBUILD_CFLAGS += -mno-string | 122 | KBUILD_CFLAGS += -mno-string |
diff --git a/arch/powerpc/boot/4xx.c b/arch/powerpc/boot/4xx.c index 27db8938827a..9d3bd4c45a24 100644 --- a/arch/powerpc/boot/4xx.c +++ b/arch/powerpc/boot/4xx.c | |||
@@ -519,7 +519,7 @@ void ibm440ep_fixup_clocks(unsigned int sys_clk, | |||
519 | { | 519 | { |
520 | unsigned int plb_clk = __ibm440eplike_fixup_clocks(sys_clk, tmr_clk, 0); | 520 | unsigned int plb_clk = __ibm440eplike_fixup_clocks(sys_clk, tmr_clk, 0); |
521 | 521 | ||
522 | /* serial clocks beed fixup based on int/ext */ | 522 | /* serial clocks need fixup based on int/ext */ |
523 | eplike_fixup_uart_clk(0, "/plb/opb/serial@ef600300", ser_clk, plb_clk); | 523 | eplike_fixup_uart_clk(0, "/plb/opb/serial@ef600300", ser_clk, plb_clk); |
524 | eplike_fixup_uart_clk(1, "/plb/opb/serial@ef600400", ser_clk, plb_clk); | 524 | eplike_fixup_uart_clk(1, "/plb/opb/serial@ef600400", ser_clk, plb_clk); |
525 | eplike_fixup_uart_clk(2, "/plb/opb/serial@ef600500", ser_clk, plb_clk); | 525 | eplike_fixup_uart_clk(2, "/plb/opb/serial@ef600500", ser_clk, plb_clk); |
@@ -532,7 +532,7 @@ void ibm440gx_fixup_clocks(unsigned int sys_clk, | |||
532 | { | 532 | { |
533 | unsigned int plb_clk = __ibm440eplike_fixup_clocks(sys_clk, tmr_clk, 1); | 533 | unsigned int plb_clk = __ibm440eplike_fixup_clocks(sys_clk, tmr_clk, 1); |
534 | 534 | ||
535 | /* serial clocks beed fixup based on int/ext */ | 535 | /* serial clocks need fixup based on int/ext */ |
536 | eplike_fixup_uart_clk(0, "/plb/opb/serial@40000200", ser_clk, plb_clk); | 536 | eplike_fixup_uart_clk(0, "/plb/opb/serial@40000200", ser_clk, plb_clk); |
537 | eplike_fixup_uart_clk(1, "/plb/opb/serial@40000300", ser_clk, plb_clk); | 537 | eplike_fixup_uart_clk(1, "/plb/opb/serial@40000300", ser_clk, plb_clk); |
538 | } | 538 | } |
@@ -543,10 +543,10 @@ void ibm440spe_fixup_clocks(unsigned int sys_clk, | |||
543 | { | 543 | { |
544 | unsigned int plb_clk = __ibm440eplike_fixup_clocks(sys_clk, tmr_clk, 1); | 544 | unsigned int plb_clk = __ibm440eplike_fixup_clocks(sys_clk, tmr_clk, 1); |
545 | 545 | ||
546 | /* serial clocks beed fixup based on int/ext */ | 546 | /* serial clocks need fixup based on int/ext */ |
547 | eplike_fixup_uart_clk(0, "/plb/opb/serial@10000200", ser_clk, plb_clk); | 547 | eplike_fixup_uart_clk(0, "/plb/opb/serial@f0000200", ser_clk, plb_clk); |
548 | eplike_fixup_uart_clk(1, "/plb/opb/serial@10000300", ser_clk, plb_clk); | 548 | eplike_fixup_uart_clk(1, "/plb/opb/serial@f0000300", ser_clk, plb_clk); |
549 | eplike_fixup_uart_clk(2, "/plb/opb/serial@10000600", ser_clk, plb_clk); | 549 | eplike_fixup_uart_clk(2, "/plb/opb/serial@f0000600", ser_clk, plb_clk); |
550 | } | 550 | } |
551 | 551 | ||
552 | void ibm405gp_fixup_clocks(unsigned int sys_clk, unsigned int ser_clk) | 552 | void ibm405gp_fixup_clocks(unsigned int sys_clk, unsigned int ser_clk) |
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile index ad0df7d0a643..fae8192c8fcc 100644 --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile | |||
@@ -141,7 +141,7 @@ $(patsubst %.S,%.o, $(filter %.S, $(src-boot))): %.o: %.S FORCE | |||
141 | $(obj)/wrapper.a: $(obj-wlib) FORCE | 141 | $(obj)/wrapper.a: $(obj-wlib) FORCE |
142 | $(call if_changed,bootar) | 142 | $(call if_changed,bootar) |
143 | 143 | ||
144 | hostprogs-y := addnote addRamDisk hack-coff mktree | 144 | hostprogs-y := addnote hack-coff mktree |
145 | 145 | ||
146 | targets += $(patsubst $(obj)/%,%,$(obj-boot) wrapper.a) | 146 | targets += $(patsubst $(obj)/%,%,$(obj-boot) wrapper.a) |
147 | extra-y := $(obj)/wrapper.a $(obj-plat) $(obj)/empty.o \ | 147 | extra-y := $(obj)/wrapper.a $(obj-plat) $(obj)/empty.o \ |
diff --git a/arch/powerpc/boot/addRamDisk.c b/arch/powerpc/boot/addRamDisk.c deleted file mode 100644 index 893f446cbd22..000000000000 --- a/arch/powerpc/boot/addRamDisk.c +++ /dev/null | |||
@@ -1,311 +0,0 @@ | |||
1 | #include <stdio.h> | ||
2 | #include <stdlib.h> | ||
3 | #include <netinet/in.h> | ||
4 | #include <unistd.h> | ||
5 | #include <sys/types.h> | ||
6 | #include <sys/stat.h> | ||
7 | #include <string.h> | ||
8 | #include <elf.h> | ||
9 | |||
10 | #define ElfHeaderSize (64 * 1024) | ||
11 | #define ElfPages (ElfHeaderSize / 4096) | ||
12 | #define KERNELBASE (0xc000000000000000) | ||
13 | #define _ALIGN_UP(addr,size) (((addr)+((size)-1))&(~((size)-1))) | ||
14 | |||
15 | struct addr_range { | ||
16 | unsigned long long addr; | ||
17 | unsigned long memsize; | ||
18 | unsigned long offset; | ||
19 | }; | ||
20 | |||
21 | static int check_elf64(void *p, int size, struct addr_range *r) | ||
22 | { | ||
23 | Elf64_Ehdr *elf64 = p; | ||
24 | Elf64_Phdr *elf64ph; | ||
25 | |||
26 | if (elf64->e_ident[EI_MAG0] != ELFMAG0 || | ||
27 | elf64->e_ident[EI_MAG1] != ELFMAG1 || | ||
28 | elf64->e_ident[EI_MAG2] != ELFMAG2 || | ||
29 | elf64->e_ident[EI_MAG3] != ELFMAG3 || | ||
30 | elf64->e_ident[EI_CLASS] != ELFCLASS64 || | ||
31 | elf64->e_ident[EI_DATA] != ELFDATA2MSB || | ||
32 | elf64->e_type != ET_EXEC || elf64->e_machine != EM_PPC64) | ||
33 | return 0; | ||
34 | |||
35 | if ((elf64->e_phoff + sizeof(Elf64_Phdr)) > size) | ||
36 | return 0; | ||
37 | |||
38 | elf64ph = (Elf64_Phdr *) ((unsigned long)elf64 + | ||
39 | (unsigned long)elf64->e_phoff); | ||
40 | |||
41 | r->memsize = (unsigned long)elf64ph->p_memsz; | ||
42 | r->offset = (unsigned long)elf64ph->p_offset; | ||
43 | r->addr = (unsigned long long)elf64ph->p_vaddr; | ||
44 | |||
45 | #ifdef DEBUG | ||
46 | printf("PPC64 ELF file, ph:\n"); | ||
47 | printf("p_type 0x%08x\n", elf64ph->p_type); | ||
48 | printf("p_flags 0x%08x\n", elf64ph->p_flags); | ||
49 | printf("p_offset 0x%016llx\n", elf64ph->p_offset); | ||
50 | printf("p_vaddr 0x%016llx\n", elf64ph->p_vaddr); | ||
51 | printf("p_paddr 0x%016llx\n", elf64ph->p_paddr); | ||
52 | printf("p_filesz 0x%016llx\n", elf64ph->p_filesz); | ||
53 | printf("p_memsz 0x%016llx\n", elf64ph->p_memsz); | ||
54 | printf("p_align 0x%016llx\n", elf64ph->p_align); | ||
55 | printf("... skipping 0x%08lx bytes of ELF header\n", | ||
56 | (unsigned long)elf64ph->p_offset); | ||
57 | #endif | ||
58 | |||
59 | return 64; | ||
60 | } | ||
61 | static void get4k(FILE *file, char *buf ) | ||
62 | { | ||
63 | unsigned j; | ||
64 | unsigned num = fread(buf, 1, 4096, file); | ||
65 | for ( j=num; j<4096; ++j ) | ||
66 | buf[j] = 0; | ||
67 | } | ||
68 | |||
69 | static void put4k(FILE *file, char *buf ) | ||
70 | { | ||
71 | fwrite(buf, 1, 4096, file); | ||
72 | } | ||
73 | |||
74 | static void death(const char *msg, FILE *fdesc, const char *fname) | ||
75 | { | ||
76 | fprintf(stderr, msg); | ||
77 | fclose(fdesc); | ||
78 | unlink(fname); | ||
79 | exit(1); | ||
80 | } | ||
81 | |||
82 | int main(int argc, char **argv) | ||
83 | { | ||
84 | char inbuf[4096]; | ||
85 | struct addr_range vmlinux; | ||
86 | FILE *ramDisk; | ||
87 | FILE *inputVmlinux; | ||
88 | FILE *outputVmlinux; | ||
89 | |||
90 | char *rd_name, *lx_name, *out_name; | ||
91 | |||
92 | size_t i; | ||
93 | unsigned long ramFileLen; | ||
94 | unsigned long ramLen; | ||
95 | unsigned long roundR; | ||
96 | unsigned long offset_end; | ||
97 | |||
98 | unsigned long kernelLen; | ||
99 | unsigned long actualKernelLen; | ||
100 | unsigned long round; | ||
101 | unsigned long roundedKernelLen; | ||
102 | unsigned long ramStartOffs; | ||
103 | unsigned long ramPages; | ||
104 | unsigned long roundedKernelPages; | ||
105 | unsigned long hvReleaseData; | ||
106 | u_int32_t eyeCatcher = 0xc8a5d9c4; | ||
107 | unsigned long naca; | ||
108 | unsigned long xRamDisk; | ||
109 | unsigned long xRamDiskSize; | ||
110 | long padPages; | ||
111 | |||
112 | |||
113 | if (argc < 2) { | ||
114 | fprintf(stderr, "Name of RAM disk file missing.\n"); | ||
115 | exit(1); | ||
116 | } | ||
117 | rd_name = argv[1]; | ||
118 | |||
119 | if (argc < 3) { | ||
120 | fprintf(stderr, "Name of vmlinux file missing.\n"); | ||
121 | exit(1); | ||
122 | } | ||
123 | lx_name = argv[2]; | ||
124 | |||
125 | if (argc < 4) { | ||
126 | fprintf(stderr, "Name of vmlinux output file missing.\n"); | ||
127 | exit(1); | ||
128 | } | ||
129 | out_name = argv[3]; | ||
130 | |||
131 | |||
132 | ramDisk = fopen(rd_name, "r"); | ||
133 | if ( ! ramDisk ) { | ||
134 | fprintf(stderr, "RAM disk file \"%s\" failed to open.\n", rd_name); | ||
135 | exit(1); | ||
136 | } | ||
137 | |||
138 | inputVmlinux = fopen(lx_name, "r"); | ||
139 | if ( ! inputVmlinux ) { | ||
140 | fprintf(stderr, "vmlinux file \"%s\" failed to open.\n", lx_name); | ||
141 | exit(1); | ||
142 | } | ||
143 | |||
144 | outputVmlinux = fopen(out_name, "w+"); | ||
145 | if ( ! outputVmlinux ) { | ||
146 | fprintf(stderr, "output vmlinux file \"%s\" failed to open.\n", out_name); | ||
147 | exit(1); | ||
148 | } | ||
149 | |||
150 | i = fread(inbuf, 1, sizeof(inbuf), inputVmlinux); | ||
151 | if (i != sizeof(inbuf)) { | ||
152 | fprintf(stderr, "can not read vmlinux file %s: %u\n", lx_name, i); | ||
153 | exit(1); | ||
154 | } | ||
155 | |||
156 | i = check_elf64(inbuf, sizeof(inbuf), &vmlinux); | ||
157 | if (i == 0) { | ||
158 | fprintf(stderr, "You must have a linux kernel specified as argv[2]\n"); | ||
159 | exit(1); | ||
160 | } | ||
161 | |||
162 | /* Input Vmlinux file */ | ||
163 | fseek(inputVmlinux, 0, SEEK_END); | ||
164 | kernelLen = ftell(inputVmlinux); | ||
165 | fseek(inputVmlinux, 0, SEEK_SET); | ||
166 | printf("kernel file size = %lu\n", kernelLen); | ||
167 | |||
168 | actualKernelLen = kernelLen - ElfHeaderSize; | ||
169 | |||
170 | printf("actual kernel length (minus ELF header) = %lu\n", actualKernelLen); | ||
171 | |||
172 | round = actualKernelLen % 4096; | ||
173 | roundedKernelLen = actualKernelLen; | ||
174 | if ( round ) | ||
175 | roundedKernelLen += (4096 - round); | ||
176 | printf("Vmlinux length rounded up to a 4k multiple = %ld/0x%lx \n", roundedKernelLen, roundedKernelLen); | ||
177 | roundedKernelPages = roundedKernelLen / 4096; | ||
178 | printf("Vmlinux pages to copy = %ld/0x%lx \n", roundedKernelPages, roundedKernelPages); | ||
179 | |||
180 | offset_end = _ALIGN_UP(vmlinux.memsize, 4096); | ||
181 | /* calc how many pages we need to insert between the vmlinux and the start of the ram disk */ | ||
182 | padPages = offset_end/4096 - roundedKernelPages; | ||
183 | |||
184 | /* Check and see if the vmlinux is already larger than _end in System.map */ | ||
185 | if (padPages < 0) { | ||
186 | /* vmlinux is larger than _end - adjust the offset to the start of the embedded ram disk */ | ||
187 | offset_end = roundedKernelLen; | ||
188 | printf("vmlinux is larger than _end indicates it needs to be - offset_end = %lx \n", offset_end); | ||
189 | padPages = 0; | ||
190 | printf("will insert %lx pages between the vmlinux and the start of the ram disk \n", padPages); | ||
191 | } | ||
192 | else { | ||
193 | /* _end is larger than vmlinux - use the offset to _end that we calculated from the system map */ | ||
194 | printf("vmlinux is smaller than _end indicates is needed - offset_end = %lx \n", offset_end); | ||
195 | printf("will insert %lx pages between the vmlinux and the start of the ram disk \n", padPages); | ||
196 | } | ||
197 | |||
198 | |||
199 | |||
200 | /* Input Ram Disk file */ | ||
201 | // Set the offset that the ram disk will be started at. | ||
202 | ramStartOffs = offset_end; /* determined from the input vmlinux file and the system map */ | ||
203 | printf("Ram Disk will start at offset = 0x%lx \n", ramStartOffs); | ||
204 | |||
205 | fseek(ramDisk, 0, SEEK_END); | ||
206 | ramFileLen = ftell(ramDisk); | ||
207 | fseek(ramDisk, 0, SEEK_SET); | ||
208 | printf("%s file size = %ld/0x%lx \n", rd_name, ramFileLen, ramFileLen); | ||
209 | |||
210 | ramLen = ramFileLen; | ||
211 | |||
212 | roundR = 4096 - (ramLen % 4096); | ||
213 | if ( roundR ) { | ||
214 | printf("Rounding RAM disk file up to a multiple of 4096, adding %ld/0x%lx \n", roundR, roundR); | ||
215 | ramLen += roundR; | ||
216 | } | ||
217 | |||
218 | printf("Rounded RAM disk size is %ld/0x%lx \n", ramLen, ramLen); | ||
219 | ramPages = ramLen / 4096; | ||
220 | printf("RAM disk pages to copy = %ld/0x%lx\n", ramPages, ramPages); | ||
221 | |||
222 | |||
223 | |||
224 | // Copy 64K ELF header | ||
225 | for (i=0; i<(ElfPages); ++i) { | ||
226 | get4k( inputVmlinux, inbuf ); | ||
227 | put4k( outputVmlinux, inbuf ); | ||
228 | } | ||
229 | |||
230 | /* Copy the vmlinux (as full pages). */ | ||
231 | fseek(inputVmlinux, ElfHeaderSize, SEEK_SET); | ||
232 | for ( i=0; i<roundedKernelPages; ++i ) { | ||
233 | get4k( inputVmlinux, inbuf ); | ||
234 | put4k( outputVmlinux, inbuf ); | ||
235 | } | ||
236 | |||
237 | /* Insert pad pages (if appropriate) that are needed between */ | ||
238 | /* | the end of the vmlinux and the ram disk. */ | ||
239 | for (i=0; i<padPages; ++i) { | ||
240 | memset(inbuf, 0, 4096); | ||
241 | put4k(outputVmlinux, inbuf); | ||
242 | } | ||
243 | |||
244 | /* Copy the ram disk (as full pages). */ | ||
245 | for ( i=0; i<ramPages; ++i ) { | ||
246 | get4k( ramDisk, inbuf ); | ||
247 | put4k( outputVmlinux, inbuf ); | ||
248 | } | ||
249 | |||
250 | /* Close the input files */ | ||
251 | fclose(ramDisk); | ||
252 | fclose(inputVmlinux); | ||
253 | /* And flush the written output file */ | ||
254 | fflush(outputVmlinux); | ||
255 | |||
256 | |||
257 | |||
258 | /* Fixup the new vmlinux to contain the ram disk starting offset (xRamDisk) and the ram disk size (xRamDiskSize) */ | ||
259 | /* fseek to the hvReleaseData pointer */ | ||
260 | fseek(outputVmlinux, ElfHeaderSize + 0x24, SEEK_SET); | ||
261 | if (fread(&hvReleaseData, 4, 1, outputVmlinux) != 1) { | ||
262 | death("Could not read hvReleaseData pointer\n", outputVmlinux, out_name); | ||
263 | } | ||
264 | hvReleaseData = ntohl(hvReleaseData); /* Convert to native int */ | ||
265 | printf("hvReleaseData is at %08lx\n", hvReleaseData); | ||
266 | |||
267 | /* fseek to the hvReleaseData */ | ||
268 | fseek(outputVmlinux, ElfHeaderSize + hvReleaseData, SEEK_SET); | ||
269 | if (fread(inbuf, 0x40, 1, outputVmlinux) != 1) { | ||
270 | death("Could not read hvReleaseData\n", outputVmlinux, out_name); | ||
271 | } | ||
272 | /* Check hvReleaseData sanity */ | ||
273 | if (memcmp(inbuf, &eyeCatcher, 4) != 0) { | ||
274 | death("hvReleaseData is invalid\n", outputVmlinux, out_name); | ||
275 | } | ||
276 | /* Get the naca pointer */ | ||
277 | naca = ntohl(*((u_int32_t*) &inbuf[0x0C])) - KERNELBASE; | ||
278 | printf("Naca is at offset 0x%lx \n", naca); | ||
279 | |||
280 | /* fseek to the naca */ | ||
281 | fseek(outputVmlinux, ElfHeaderSize + naca, SEEK_SET); | ||
282 | if (fread(inbuf, 0x18, 1, outputVmlinux) != 1) { | ||
283 | death("Could not read naca\n", outputVmlinux, out_name); | ||
284 | } | ||
285 | xRamDisk = ntohl(*((u_int32_t *) &inbuf[0x0c])); | ||
286 | xRamDiskSize = ntohl(*((u_int32_t *) &inbuf[0x14])); | ||
287 | /* Make sure a RAM disk isn't already present */ | ||
288 | if ((xRamDisk != 0) || (xRamDiskSize != 0)) { | ||
289 | death("RAM disk is already attached to this kernel\n", outputVmlinux, out_name); | ||
290 | } | ||
291 | /* Fill in the values */ | ||
292 | *((u_int32_t *) &inbuf[0x0c]) = htonl(ramStartOffs); | ||
293 | *((u_int32_t *) &inbuf[0x14]) = htonl(ramPages); | ||
294 | |||
295 | /* Write out the new naca */ | ||
296 | fflush(outputVmlinux); | ||
297 | fseek(outputVmlinux, ElfHeaderSize + naca, SEEK_SET); | ||
298 | if (fwrite(inbuf, 0x18, 1, outputVmlinux) != 1) { | ||
299 | death("Could not write naca\n", outputVmlinux, out_name); | ||
300 | } | ||
301 | printf("Ram Disk of 0x%lx pages is attached to the kernel at offset 0x%08lx\n", | ||
302 | ramPages, ramStartOffs); | ||
303 | |||
304 | /* Done */ | ||
305 | fclose(outputVmlinux); | ||
306 | /* Set permission to executable */ | ||
307 | chmod(out_name, S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH); | ||
308 | |||
309 | return 0; | ||
310 | } | ||
311 | |||
diff --git a/arch/powerpc/boot/dts/icon.dts b/arch/powerpc/boot/dts/icon.dts new file mode 100644 index 000000000000..abcd0caeccae --- /dev/null +++ b/arch/powerpc/boot/dts/icon.dts | |||
@@ -0,0 +1,447 @@ | |||
1 | /* | ||
2 | * Device Tree Source for Mosaix Technologies, Inc. ICON board | ||
3 | * | ||
4 | * Copyright 2010 DENX Software Engineering, Stefan Roese <sr@denx.de> | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without | ||
8 | * any warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | /dts-v1/; | ||
12 | |||
13 | / { | ||
14 | #address-cells = <2>; | ||
15 | #size-cells = <2>; | ||
16 | model = "mosaixtech,icon"; | ||
17 | compatible = "mosaixtech,icon"; | ||
18 | dcr-parent = <&{/cpus/cpu@0}>; | ||
19 | |||
20 | aliases { | ||
21 | ethernet0 = &EMAC0; | ||
22 | serial0 = &UART0; | ||
23 | serial1 = &UART1; | ||
24 | serial2 = &UART2; | ||
25 | }; | ||
26 | |||
27 | cpus { | ||
28 | #address-cells = <1>; | ||
29 | #size-cells = <0>; | ||
30 | |||
31 | cpu@0 { | ||
32 | device_type = "cpu"; | ||
33 | model = "PowerPC,440SPe"; | ||
34 | reg = <0x00000000>; | ||
35 | clock-frequency = <0>; /* Filled in by U-Boot */ | ||
36 | timebase-frequency = <0>; /* Filled in by U-Boot */ | ||
37 | i-cache-line-size = <32>; | ||
38 | d-cache-line-size = <32>; | ||
39 | i-cache-size = <32768>; | ||
40 | d-cache-size = <32768>; | ||
41 | dcr-controller; | ||
42 | dcr-access-method = "native"; | ||
43 | reset-type = <2>; /* Use chip-reset */ | ||
44 | }; | ||
45 | }; | ||
46 | |||
47 | memory { | ||
48 | device_type = "memory"; | ||
49 | reg = <0x0 0x00000000 0x0 0x00000000>; /* Filled in by U-Boot */ | ||
50 | }; | ||
51 | |||
52 | UIC0: interrupt-controller0 { | ||
53 | compatible = "ibm,uic-440spe","ibm,uic"; | ||
54 | interrupt-controller; | ||
55 | cell-index = <0>; | ||
56 | dcr-reg = <0x0c0 0x009>; | ||
57 | #address-cells = <0>; | ||
58 | #size-cells = <0>; | ||
59 | #interrupt-cells = <2>; | ||
60 | }; | ||
61 | |||
62 | UIC1: interrupt-controller1 { | ||
63 | compatible = "ibm,uic-440spe","ibm,uic"; | ||
64 | interrupt-controller; | ||
65 | cell-index = <1>; | ||
66 | dcr-reg = <0x0d0 0x009>; | ||
67 | #address-cells = <0>; | ||
68 | #size-cells = <0>; | ||
69 | #interrupt-cells = <2>; | ||
70 | interrupts = <0x1e 0x4 0x1f 0x4>; /* cascade */ | ||
71 | interrupt-parent = <&UIC0>; | ||
72 | }; | ||
73 | |||
74 | UIC2: interrupt-controller2 { | ||
75 | compatible = "ibm,uic-440spe","ibm,uic"; | ||
76 | interrupt-controller; | ||
77 | cell-index = <2>; | ||
78 | dcr-reg = <0x0e0 0x009>; | ||
79 | #address-cells = <0>; | ||
80 | #size-cells = <0>; | ||
81 | #interrupt-cells = <2>; | ||
82 | interrupts = <0xa 0x4 0xb 0x4>; /* cascade */ | ||
83 | interrupt-parent = <&UIC0>; | ||
84 | }; | ||
85 | |||
86 | UIC3: interrupt-controller3 { | ||
87 | compatible = "ibm,uic-440spe","ibm,uic"; | ||
88 | interrupt-controller; | ||
89 | cell-index = <3>; | ||
90 | dcr-reg = <0x0f0 0x009>; | ||
91 | #address-cells = <0>; | ||
92 | #size-cells = <0>; | ||
93 | #interrupt-cells = <2>; | ||
94 | interrupts = <0x10 0x4 0x11 0x4>; /* cascade */ | ||
95 | interrupt-parent = <&UIC0>; | ||
96 | }; | ||
97 | |||
98 | SDR0: sdr { | ||
99 | compatible = "ibm,sdr-440spe"; | ||
100 | dcr-reg = <0x00e 0x002>; | ||
101 | }; | ||
102 | |||
103 | CPR0: cpr { | ||
104 | compatible = "ibm,cpr-440spe"; | ||
105 | dcr-reg = <0x00c 0x002>; | ||
106 | }; | ||
107 | |||
108 | MQ0: mq { | ||
109 | compatible = "ibm,mq-440spe"; | ||
110 | dcr-reg = <0x040 0x020>; | ||
111 | }; | ||
112 | |||
113 | plb { | ||
114 | compatible = "ibm,plb-440spe", "ibm,plb-440gp", "ibm,plb4"; | ||
115 | #address-cells = <2>; | ||
116 | #size-cells = <1>; | ||
117 | /* addr-child addr-parent size */ | ||
118 | ranges = <0x4 0x00100000 0x4 0x00100000 0x00001000 | ||
119 | 0x4 0x00200000 0x4 0x00200000 0x00000400 | ||
120 | 0x4 0xe0000000 0x4 0xe0000000 0x20000000 | ||
121 | 0xc 0x00000000 0xc 0x00000000 0x20000000 | ||
122 | 0xd 0x00000000 0xd 0x00000000 0x80000000 | ||
123 | 0xd 0x80000000 0xd 0x80000000 0x80000000 | ||
124 | 0xe 0x00000000 0xe 0x00000000 0x80000000 | ||
125 | 0xe 0x80000000 0xe 0x80000000 0x80000000 | ||
126 | 0xf 0x00000000 0xf 0x00000000 0x80000000 | ||
127 | 0xf 0x80000000 0xf 0x80000000 0x80000000>; | ||
128 | clock-frequency = <0>; /* Filled in by U-Boot */ | ||
129 | |||
130 | SDRAM0: sdram { | ||
131 | compatible = "ibm,sdram-440spe", "ibm,sdram-405gp"; | ||
132 | dcr-reg = <0x010 0x002>; | ||
133 | }; | ||
134 | |||
135 | MAL0: mcmal { | ||
136 | compatible = "ibm,mcmal-440spe", "ibm,mcmal2"; | ||
137 | dcr-reg = <0x180 0x062>; | ||
138 | num-tx-chans = <2>; | ||
139 | num-rx-chans = <1>; | ||
140 | interrupt-parent = <&MAL0>; | ||
141 | interrupts = <0x0 0x1 0x2 0x3 0x4>; | ||
142 | #interrupt-cells = <1>; | ||
143 | #address-cells = <0>; | ||
144 | #size-cells = <0>; | ||
145 | interrupt-map = </*TXEOB*/ 0x0 &UIC1 0x6 0x4 | ||
146 | /*RXEOB*/ 0x1 &UIC1 0x7 0x4 | ||
147 | /*SERR*/ 0x2 &UIC1 0x1 0x4 | ||
148 | /*TXDE*/ 0x3 &UIC1 0x2 0x4 | ||
149 | /*RXDE*/ 0x4 &UIC1 0x3 0x4>; | ||
150 | }; | ||
151 | |||
152 | POB0: opb { | ||
153 | compatible = "ibm,opb-440spe", "ibm,opb-440gp", "ibm,opb"; | ||
154 | #address-cells = <1>; | ||
155 | #size-cells = <1>; | ||
156 | ranges = <0xe0000000 0x00000004 0xe0000000 0x20000000>; | ||
157 | clock-frequency = <0>; /* Filled in by U-Boot */ | ||
158 | |||
159 | EBC0: ebc { | ||
160 | compatible = "ibm,ebc-440spe", "ibm,ebc-440gp", "ibm,ebc"; | ||
161 | dcr-reg = <0x012 0x002>; | ||
162 | #address-cells = <2>; | ||
163 | #size-cells = <1>; | ||
164 | clock-frequency = <0>; /* Filled in by U-Boot */ | ||
165 | /* ranges property is supplied by U-Boot */ | ||
166 | interrupts = <0x5 0x1>; | ||
167 | interrupt-parent = <&UIC1>; | ||
168 | |||
169 | nor_flash@0,0 { | ||
170 | compatible = "cfi-flash"; | ||
171 | bank-width = <2>; | ||
172 | reg = <0x00000000 0x00000000 0x01000000>; | ||
173 | #address-cells = <1>; | ||
174 | #size-cells = <1>; | ||
175 | partition@0 { | ||
176 | label = "kernel"; | ||
177 | reg = <0x00000000 0x001e0000>; | ||
178 | }; | ||
179 | partition@1e0000 { | ||
180 | label = "dtb"; | ||
181 | reg = <0x001e0000 0x00020000>; | ||
182 | }; | ||
183 | partition@200000 { | ||
184 | label = "root"; | ||
185 | reg = <0x00200000 0x00200000>; | ||
186 | }; | ||
187 | partition@400000 { | ||
188 | label = "user"; | ||
189 | reg = <0x00400000 0x00b60000>; | ||
190 | }; | ||
191 | partition@f60000 { | ||
192 | label = "env"; | ||
193 | reg = <0x00f60000 0x00040000>; | ||
194 | }; | ||
195 | partition@fa0000 { | ||
196 | label = "u-boot"; | ||
197 | reg = <0x00fa0000 0x00060000>; | ||
198 | }; | ||
199 | }; | ||
200 | |||
201 | SysACE_CompactFlash: sysace@1,0 { | ||
202 | compatible = "xlnx,sysace"; | ||
203 | interrupt-parent = <&UIC2>; | ||
204 | interrupts = <24 0x4>; | ||
205 | reg = <0x00000001 0x00000000 0x10000>; | ||
206 | }; | ||
207 | }; | ||
208 | |||
209 | UART0: serial@f0000200 { | ||
210 | device_type = "serial"; | ||
211 | compatible = "ns16550"; | ||
212 | reg = <0xf0000200 0x00000008>; | ||
213 | virtual-reg = <0xa0000200>; | ||
214 | clock-frequency = <0>; /* Filled in by U-Boot */ | ||
215 | current-speed = <115200>; | ||
216 | interrupt-parent = <&UIC0>; | ||
217 | interrupts = <0x0 0x4>; | ||
218 | }; | ||
219 | |||
220 | UART1: serial@f0000300 { | ||
221 | device_type = "serial"; | ||
222 | compatible = "ns16550"; | ||
223 | reg = <0xf0000300 0x00000008>; | ||
224 | virtual-reg = <0xa0000300>; | ||
225 | clock-frequency = <0>; | ||
226 | current-speed = <0>; | ||
227 | interrupt-parent = <&UIC0>; | ||
228 | interrupts = <0x1 0x4>; | ||
229 | }; | ||
230 | |||
231 | |||
232 | UART2: serial@f0000600 { | ||
233 | device_type = "serial"; | ||
234 | compatible = "ns16550"; | ||
235 | reg = <0xf0000600 0x00000008>; | ||
236 | virtual-reg = <0xa0000600>; | ||
237 | clock-frequency = <0>; | ||
238 | current-speed = <0>; | ||
239 | interrupt-parent = <&UIC1>; | ||
240 | interrupts = <0x5 0x4>; | ||
241 | }; | ||
242 | |||
243 | IIC0: i2c@f0000400 { | ||
244 | compatible = "ibm,iic-440spe", "ibm,iic-440gp", "ibm,iic"; | ||
245 | reg = <0xf0000400 0x00000014>; | ||
246 | interrupt-parent = <&UIC0>; | ||
247 | interrupts = <0x2 0x4>; | ||
248 | }; | ||
249 | |||
250 | IIC1: i2c@f0000500 { | ||
251 | compatible = "ibm,iic-440spe", "ibm,iic-440gp", "ibm,iic"; | ||
252 | reg = <0xf0000500 0x00000014>; | ||
253 | interrupt-parent = <&UIC0>; | ||
254 | interrupts = <0x3 0x4>; | ||
255 | #address-cells = <1>; | ||
256 | #size-cells = <0>; | ||
257 | |||
258 | rtc@68 { | ||
259 | compatible = "stm,m41t00"; | ||
260 | reg = <0x68>; | ||
261 | }; | ||
262 | }; | ||
263 | |||
264 | EMAC0: ethernet@f0000800 { | ||
265 | linux,network-index = <0x0>; | ||
266 | device_type = "network"; | ||
267 | compatible = "ibm,emac-440spe", "ibm,emac4"; | ||
268 | interrupt-parent = <&UIC1>; | ||
269 | interrupts = <0x1c 0x4 0x1d 0x4>; | ||
270 | reg = <0xf0000800 0x00000074>; | ||
271 | local-mac-address = [000000000000]; | ||
272 | mal-device = <&MAL0>; | ||
273 | mal-tx-channel = <0>; | ||
274 | mal-rx-channel = <0>; | ||
275 | cell-index = <0>; | ||
276 | max-frame-size = <9000>; | ||
277 | rx-fifo-size = <4096>; | ||
278 | tx-fifo-size = <2048>; | ||
279 | phy-mode = "gmii"; | ||
280 | phy-map = <0x00000000>; | ||
281 | has-inverted-stacr-oc; | ||
282 | has-new-stacr-staopc; | ||
283 | }; | ||
284 | }; | ||
285 | |||
286 | PCIX0: pci@c0ec00000 { | ||
287 | device_type = "pci"; | ||
288 | #interrupt-cells = <1>; | ||
289 | #size-cells = <2>; | ||
290 | #address-cells = <3>; | ||
291 | compatible = "ibm,plb-pcix-440spe", "ibm,plb-pcix"; | ||
292 | primary; | ||
293 | large-inbound-windows; | ||
294 | enable-msi-hole; | ||
295 | reg = <0x0000000c 0x0ec00000 0x00000008 /* Config space access */ | ||
296 | 0x00000000 0x00000000 0x00000000 /* no IACK cycles */ | ||
297 | 0x0000000c 0x0ed00000 0x00000004 /* Special cycles */ | ||
298 | 0x0000000c 0x0ec80000 0x00000100 /* Internal registers */ | ||
299 | 0x0000000c 0x0ec80100 0x000000fc>; /* Internal messaging registers */ | ||
300 | |||
301 | /* Outbound ranges, one memory and one IO, | ||
302 | * later cannot be changed | ||
303 | */ | ||
304 | ranges = <0x02000000 0x00000000 0x80000000 0x0000000d 0x80000000 0x00000000 0x80000000 | ||
305 | 0x01000000 0x00000000 0x00000000 0x0000000c 0x08000000 0x00000000 0x00010000>; | ||
306 | |||
307 | /* Inbound 4GB range starting at 0 */ | ||
308 | dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x1 0x00000000>; | ||
309 | |||
310 | /* This drives busses 0 to 0xf */ | ||
311 | bus-range = <0x0 0xf>; | ||
312 | |||
313 | /* PCI-X interrupt (SM502) is routed to extIRQ10 (UIC1, 19) */ | ||
314 | interrupt-map-mask = <0x0 0x0 0x0 0x0>; | ||
315 | interrupt-map = <0x0 0x0 0x0 0x0 &UIC1 19 0x8>; | ||
316 | }; | ||
317 | |||
318 | PCIE0: pciex@d00000000 { | ||
319 | device_type = "pci"; | ||
320 | #interrupt-cells = <1>; | ||
321 | #size-cells = <2>; | ||
322 | #address-cells = <3>; | ||
323 | compatible = "ibm,plb-pciex-440spe", "ibm,plb-pciex"; | ||
324 | primary; | ||
325 | port = <0x0>; /* port number */ | ||
326 | reg = <0x0000000d 0x00000000 0x20000000 /* Config space access */ | ||
327 | 0x0000000c 0x10000000 0x00001000>; /* Registers */ | ||
328 | dcr-reg = <0x100 0x020>; | ||
329 | sdr-base = <0x300>; | ||
330 | |||
331 | /* Outbound ranges, one memory and one IO, | ||
332 | * later cannot be changed | ||
333 | */ | ||
334 | ranges = <0x02000000 0x00000000 0x80000000 0x0000000e 0x00000000 0x00000000 0x80000000 | ||
335 | 0x01000000 0x00000000 0x00000000 0x0000000f 0x80000000 0x00000000 0x00010000>; | ||
336 | |||
337 | /* Inbound 4GB range starting at 0 */ | ||
338 | dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x1 0x00000000>; | ||
339 | |||
340 | /* This drives busses 0x10 to 0x1f */ | ||
341 | bus-range = <0x10 0x1f>; | ||
342 | |||
343 | /* Legacy interrupts (note the weird polarity, the bridge seems | ||
344 | * to invert PCIe legacy interrupts). | ||
345 | * We are de-swizzling here because the numbers are actually for | ||
346 | * port of the root complex virtual P2P bridge. But I want | ||
347 | * to avoid putting a node for it in the tree, so the numbers | ||
348 | * below are basically de-swizzled numbers. | ||
349 | * The real slot is on idsel 0, so the swizzling is 1:1 | ||
350 | */ | ||
351 | interrupt-map-mask = <0x0 0x0 0x0 0x7>; | ||
352 | interrupt-map = < | ||
353 | 0x0 0x0 0x0 0x1 &UIC3 0x0 0x4 /* swizzled int A */ | ||
354 | 0x0 0x0 0x0 0x2 &UIC3 0x1 0x4 /* swizzled int B */ | ||
355 | 0x0 0x0 0x0 0x3 &UIC3 0x2 0x4 /* swizzled int C */ | ||
356 | 0x0 0x0 0x0 0x4 &UIC3 0x3 0x4 /* swizzled int D */>; | ||
357 | }; | ||
358 | |||
359 | PCIE1: pciex@d20000000 { | ||
360 | device_type = "pci"; | ||
361 | #interrupt-cells = <1>; | ||
362 | #size-cells = <2>; | ||
363 | #address-cells = <3>; | ||
364 | compatible = "ibm,plb-pciex-440spe", "ibm,plb-pciex"; | ||
365 | primary; | ||
366 | port = <0x1>; /* port number */ | ||
367 | reg = <0x0000000d 0x20000000 0x20000000 /* Config space access */ | ||
368 | 0x0000000c 0x10001000 0x00001000>; /* Registers */ | ||
369 | dcr-reg = <0x120 0x020>; | ||
370 | sdr-base = <0x340>; | ||
371 | |||
372 | /* Outbound ranges, one memory and one IO, | ||
373 | * later cannot be changed | ||
374 | */ | ||
375 | ranges = <0x02000000 0x00000000 0x80000000 0x0000000e 0x80000000 0x00000000 0x80000000 | ||
376 | 0x01000000 0x00000000 0x00000000 0x0000000f 0x80010000 0x00000000 0x00010000>; | ||
377 | |||
378 | /* Inbound 4GB range starting at 0 */ | ||
379 | dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x1 0x00000000>; | ||
380 | |||
381 | /* This drives busses 0x20 to 0x2f */ | ||
382 | bus-range = <0x20 0x2f>; | ||
383 | |||
384 | /* Legacy interrupts (note the weird polarity, the bridge seems | ||
385 | * to invert PCIe legacy interrupts). | ||
386 | * We are de-swizzling here because the numbers are actually for | ||
387 | * port of the root complex virtual P2P bridge. But I want | ||
388 | * to avoid putting a node for it in the tree, so the numbers | ||
389 | * below are basically de-swizzled numbers. | ||
390 | * The real slot is on idsel 0, so the swizzling is 1:1 | ||
391 | */ | ||
392 | interrupt-map-mask = <0x0 0x0 0x0 0x7>; | ||
393 | interrupt-map = < | ||
394 | 0x0 0x0 0x0 0x1 &UIC3 0x4 0x4 /* swizzled int A */ | ||
395 | 0x0 0x0 0x0 0x2 &UIC3 0x5 0x4 /* swizzled int B */ | ||
396 | 0x0 0x0 0x0 0x3 &UIC3 0x6 0x4 /* swizzled int C */ | ||
397 | 0x0 0x0 0x0 0x4 &UIC3 0x7 0x4 /* swizzled int D */>; | ||
398 | }; | ||
399 | |||
400 | I2O: i2o@400100000 { | ||
401 | compatible = "ibm,i2o-440spe"; | ||
402 | reg = <0x00000004 0x00100000 0x100>; | ||
403 | dcr-reg = <0x060 0x020>; | ||
404 | }; | ||
405 | |||
406 | DMA0: dma0@400100100 { | ||
407 | compatible = "ibm,dma-440spe"; | ||
408 | cell-index = <0>; | ||
409 | reg = <0x00000004 0x00100100 0x100>; | ||
410 | dcr-reg = <0x060 0x020>; | ||
411 | interrupt-parent = <&DMA0>; | ||
412 | interrupts = <0 1>; | ||
413 | #interrupt-cells = <1>; | ||
414 | #address-cells = <0>; | ||
415 | #size-cells = <0>; | ||
416 | interrupt-map = < | ||
417 | 0 &UIC0 0x14 4 | ||
418 | 1 &UIC1 0x16 4>; | ||
419 | }; | ||
420 | |||
421 | DMA1: dma1@400100200 { | ||
422 | compatible = "ibm,dma-440spe"; | ||
423 | cell-index = <1>; | ||
424 | reg = <0x00000004 0x00100200 0x100>; | ||
425 | dcr-reg = <0x060 0x020>; | ||
426 | interrupt-parent = <&DMA1>; | ||
427 | interrupts = <0 1>; | ||
428 | #interrupt-cells = <1>; | ||
429 | #address-cells = <0>; | ||
430 | #size-cells = <0>; | ||
431 | interrupt-map = < | ||
432 | 0 &UIC0 0x16 4 | ||
433 | 1 &UIC1 0x16 4>; | ||
434 | }; | ||
435 | |||
436 | xor-accel@400200000 { | ||
437 | compatible = "amcc,xor-accelerator"; | ||
438 | reg = <0x00000004 0x00200000 0x400>; | ||
439 | interrupt-parent = <&UIC1>; | ||
440 | interrupts = <0x1f 4>; | ||
441 | }; | ||
442 | }; | ||
443 | |||
444 | chosen { | ||
445 | linux,stdout-path = "/plb/opb/serial@f0000200"; | ||
446 | }; | ||
447 | }; | ||
diff --git a/arch/powerpc/boot/dts/katmai.dts b/arch/powerpc/boot/dts/katmai.dts index 8cf2c0c88c05..7c3be5e45748 100644 --- a/arch/powerpc/boot/dts/katmai.dts +++ b/arch/powerpc/boot/dts/katmai.dts | |||
@@ -44,6 +44,7 @@ | |||
44 | d-cache-size = <32768>; | 44 | d-cache-size = <32768>; |
45 | dcr-controller; | 45 | dcr-controller; |
46 | dcr-access-method = "native"; | 46 | dcr-access-method = "native"; |
47 | reset-type = <2>; /* Use chip-reset */ | ||
47 | }; | 48 | }; |
48 | }; | 49 | }; |
49 | 50 | ||
diff --git a/arch/powerpc/boot/dts/lite5200.dts b/arch/powerpc/boot/dts/lite5200.dts index 82ff2b13bc37..179a1785d645 100644 --- a/arch/powerpc/boot/dts/lite5200.dts +++ b/arch/powerpc/boot/dts/lite5200.dts | |||
@@ -134,12 +134,16 @@ | |||
134 | compatible = "fsl,mpc5200-gpio"; | 134 | compatible = "fsl,mpc5200-gpio"; |
135 | reg = <0xb00 0x40>; | 135 | reg = <0xb00 0x40>; |
136 | interrupts = <1 7 0>; | 136 | interrupts = <1 7 0>; |
137 | gpio-controller; | ||
138 | #gpio-cells = <2>; | ||
137 | }; | 139 | }; |
138 | 140 | ||
139 | gpio@c00 { | 141 | gpio@c00 { |
140 | compatible = "fsl,mpc5200-gpio-wkup"; | 142 | compatible = "fsl,mpc5200-gpio-wkup"; |
141 | reg = <0xc00 0x40>; | 143 | reg = <0xc00 0x40>; |
142 | interrupts = <1 8 0 0 3 0>; | 144 | interrupts = <1 8 0 0 3 0>; |
145 | gpio-controller; | ||
146 | #gpio-cells = <2>; | ||
143 | }; | 147 | }; |
144 | 148 | ||
145 | spi@f00 { | 149 | spi@f00 { |
@@ -230,8 +234,8 @@ | |||
230 | reg = <0x3000 0x400>; // fec range, since we need to setup fec interrupts | 234 | reg = <0x3000 0x400>; // fec range, since we need to setup fec interrupts |
231 | interrupts = <2 5 0>; // these are for "mii command finished", not link changes & co. | 235 | interrupts = <2 5 0>; // these are for "mii command finished", not link changes & co. |
232 | 236 | ||
233 | phy0: ethernet-phy@1 { | 237 | phy0: ethernet-phy@0 { |
234 | reg = <1>; | 238 | reg = <0>; |
235 | }; | 239 | }; |
236 | }; | 240 | }; |
237 | 241 | ||
@@ -255,7 +259,13 @@ | |||
255 | compatible = "fsl,mpc5200-i2c","fsl-i2c"; | 259 | compatible = "fsl,mpc5200-i2c","fsl-i2c"; |
256 | reg = <0x3d40 0x40>; | 260 | reg = <0x3d40 0x40>; |
257 | interrupts = <2 16 0>; | 261 | interrupts = <2 16 0>; |
262 | |||
263 | eeprom@50 { | ||
264 | compatible = "atmel,24c02"; | ||
265 | reg = <0x50>; | ||
266 | }; | ||
258 | }; | 267 | }; |
268 | |||
259 | sram@8000 { | 269 | sram@8000 { |
260 | compatible = "fsl,mpc5200-sram"; | 270 | compatible = "fsl,mpc5200-sram"; |
261 | reg = <0x8000 0x4000>; | 271 | reg = <0x8000 0x4000>; |
@@ -281,4 +291,18 @@ | |||
281 | 0x02000000 0 0xa0000000 0xa0000000 0 0x10000000 | 291 | 0x02000000 0 0xa0000000 0xa0000000 0 0x10000000 |
282 | 0x01000000 0 0x00000000 0xb0000000 0 0x01000000>; | 292 | 0x01000000 0 0x00000000 0xb0000000 0 0x01000000>; |
283 | }; | 293 | }; |
294 | |||
295 | localbus { | ||
296 | compatible = "fsl,mpc5200-lpb","simple-bus"; | ||
297 | #address-cells = <2>; | ||
298 | #size-cells = <1>; | ||
299 | |||
300 | ranges = <0 0 0xff000000 0x01000000>; | ||
301 | |||
302 | flash@0,0 { | ||
303 | compatible = "amd,am29lv652d", "cfi-flash"; | ||
304 | reg = <0 0 0x01000000>; | ||
305 | bank-width = <1>; | ||
306 | }; | ||
307 | }; | ||
284 | }; | 308 | }; |
diff --git a/arch/powerpc/boot/dts/lite5200b.dts b/arch/powerpc/boot/dts/lite5200b.dts index e45a63be3a86..59702ace900f 100644 --- a/arch/powerpc/boot/dts/lite5200b.dts +++ b/arch/powerpc/boot/dts/lite5200b.dts | |||
@@ -259,6 +259,11 @@ | |||
259 | compatible = "fsl,mpc5200b-i2c","fsl,mpc5200-i2c","fsl-i2c"; | 259 | compatible = "fsl,mpc5200b-i2c","fsl,mpc5200-i2c","fsl-i2c"; |
260 | reg = <0x3d40 0x40>; | 260 | reg = <0x3d40 0x40>; |
261 | interrupts = <2 16 0>; | 261 | interrupts = <2 16 0>; |
262 | |||
263 | eeprom@50 { | ||
264 | compatible = "atmel,24c02"; | ||
265 | reg = <0x50>; | ||
266 | }; | ||
262 | }; | 267 | }; |
263 | 268 | ||
264 | sram@8000 { | 269 | sram@8000 { |
diff --git a/arch/powerpc/boot/dts/mpc8548cds.dts b/arch/powerpc/boot/dts/mpc8548cds.dts index 4173af387c63..0f5262452682 100644 --- a/arch/powerpc/boot/dts/mpc8548cds.dts +++ b/arch/powerpc/boot/dts/mpc8548cds.dts | |||
@@ -20,10 +20,8 @@ | |||
20 | aliases { | 20 | aliases { |
21 | ethernet0 = &enet0; | 21 | ethernet0 = &enet0; |
22 | ethernet1 = &enet1; | 22 | ethernet1 = &enet1; |
23 | /* | ||
24 | ethernet2 = &enet2; | 23 | ethernet2 = &enet2; |
25 | ethernet3 = &enet3; | 24 | ethernet3 = &enet3; |
26 | */ | ||
27 | serial0 = &serial0; | 25 | serial0 = &serial0; |
28 | serial1 = &serial1; | 26 | serial1 = &serial1; |
29 | pci0 = &pci0; | 27 | pci0 = &pci0; |
@@ -254,7 +252,6 @@ | |||
254 | }; | 252 | }; |
255 | }; | 253 | }; |
256 | 254 | ||
257 | /* eTSEC 3/4 are currently broken | ||
258 | enet2: ethernet@26000 { | 255 | enet2: ethernet@26000 { |
259 | #address-cells = <1>; | 256 | #address-cells = <1>; |
260 | #size-cells = <1>; | 257 | #size-cells = <1>; |
@@ -310,7 +307,6 @@ | |||
310 | }; | 307 | }; |
311 | }; | 308 | }; |
312 | }; | 309 | }; |
313 | */ | ||
314 | 310 | ||
315 | serial0: serial@4500 { | 311 | serial0: serial@4500 { |
316 | cell-index = <0>; | 312 | cell-index = <0>; |
diff --git a/arch/powerpc/boot/dts/mpc8572ds_camp_core0.dts b/arch/powerpc/boot/dts/mpc8572ds_camp_core0.dts index 5bd1011fde96..3375c2ab0c32 100644 --- a/arch/powerpc/boot/dts/mpc8572ds_camp_core0.dts +++ b/arch/powerpc/boot/dts/mpc8572ds_camp_core0.dts | |||
@@ -215,6 +215,18 @@ | |||
215 | clock-frequency = <0>; | 215 | clock-frequency = <0>; |
216 | }; | 216 | }; |
217 | 217 | ||
218 | msi@41600 { | ||
219 | compatible = "fsl,mpc8572-msi", "fsl,mpic-msi"; | ||
220 | reg = <0x41600 0x80>; | ||
221 | msi-available-ranges = <0 0x80>; | ||
222 | interrupts = < | ||
223 | 0xe0 0 | ||
224 | 0xe1 0 | ||
225 | 0xe2 0 | ||
226 | 0xe3 0>; | ||
227 | interrupt-parent = <&mpic>; | ||
228 | }; | ||
229 | |||
218 | global-utilities@e0000 { //global utilities block | 230 | global-utilities@e0000 { //global utilities block |
219 | compatible = "fsl,mpc8572-guts"; | 231 | compatible = "fsl,mpc8572-guts"; |
220 | reg = <0xe0000 0x1000>; | 232 | reg = <0xe0000 0x1000>; |
@@ -243,8 +255,7 @@ | |||
243 | protected-sources = < | 255 | protected-sources = < |
244 | 31 32 33 37 38 39 /* enet2 enet3 */ | 256 | 31 32 33 37 38 39 /* enet2 enet3 */ |
245 | 76 77 78 79 26 42 /* dma2 pci2 serial*/ | 257 | 76 77 78 79 26 42 /* dma2 pci2 serial*/ |
246 | 0xe0 0xe1 0xe2 0xe3 /* msi */ | 258 | 0xe4 0xe5 0xe6 0xe7 /* msi */ |
247 | 0xe4 0xe5 0xe6 0xe7 | ||
248 | >; | 259 | >; |
249 | }; | 260 | }; |
250 | }; | 261 | }; |
diff --git a/arch/powerpc/boot/dts/mpc8572ds_camp_core1.dts b/arch/powerpc/boot/dts/mpc8572ds_camp_core1.dts index 0efc3456e297..e7b477f6a3fe 100644 --- a/arch/powerpc/boot/dts/mpc8572ds_camp_core1.dts +++ b/arch/powerpc/boot/dts/mpc8572ds_camp_core1.dts | |||
@@ -154,12 +154,8 @@ | |||
154 | msi@41600 { | 154 | msi@41600 { |
155 | compatible = "fsl,mpc8572-msi", "fsl,mpic-msi"; | 155 | compatible = "fsl,mpc8572-msi", "fsl,mpic-msi"; |
156 | reg = <0x41600 0x80>; | 156 | reg = <0x41600 0x80>; |
157 | msi-available-ranges = <0 0x100>; | 157 | msi-available-ranges = <0x80 0x80>; |
158 | interrupts = < | 158 | interrupts = < |
159 | 0xe0 0 | ||
160 | 0xe1 0 | ||
161 | 0xe2 0 | ||
162 | 0xe3 0 | ||
163 | 0xe4 0 | 159 | 0xe4 0 |
164 | 0xe5 0 | 160 | 0xe5 0 |
165 | 0xe6 0 | 161 | 0xe6 0 |
@@ -190,6 +186,7 @@ | |||
190 | 0x1 0x2 0x3 0x4 /* pci slot */ | 186 | 0x1 0x2 0x3 0x4 /* pci slot */ |
191 | 0x9 0xa 0xb 0xc /* usb */ | 187 | 0x9 0xa 0xb 0xc /* usb */ |
192 | 0x6 0x7 0xe 0x5 /* Audio elgacy SATA */ | 188 | 0x6 0x7 0xe 0x5 /* Audio elgacy SATA */ |
189 | 0xe0 0xe1 0xe2 0xe3 /* msi */ | ||
193 | >; | 190 | >; |
194 | }; | 191 | }; |
195 | }; | 192 | }; |
diff --git a/arch/powerpc/boot/dts/p1021mds.dts b/arch/powerpc/boot/dts/p1021mds.dts new file mode 100644 index 000000000000..7fad2df25981 --- /dev/null +++ b/arch/powerpc/boot/dts/p1021mds.dts | |||
@@ -0,0 +1,698 @@ | |||
1 | /* | ||
2 | * P1021 MDS Device Tree Source | ||
3 | * | ||
4 | * Copyright 2010 Freescale Semiconductor Inc. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify it | ||
7 | * under the terms of the GNU General Public License as published by the | ||
8 | * Free Software Foundation; either version 2 of the License, or (at your | ||
9 | * option) any later version. | ||
10 | */ | ||
11 | |||
12 | /dts-v1/; | ||
13 | / { | ||
14 | model = "fsl,P1021"; | ||
15 | compatible = "fsl,P1021MDS"; | ||
16 | #address-cells = <2>; | ||
17 | #size-cells = <2>; | ||
18 | |||
19 | aliases { | ||
20 | serial0 = &serial0; | ||
21 | serial1 = &serial1; | ||
22 | ethernet0 = &enet0; | ||
23 | ethernet1 = &enet1; | ||
24 | ethernet2 = &enet2; | ||
25 | ethernet3 = &enet3; | ||
26 | ethernet4 = &enet4; | ||
27 | pci0 = &pci0; | ||
28 | pci1 = &pci1; | ||
29 | }; | ||
30 | |||
31 | cpus { | ||
32 | #address-cells = <1>; | ||
33 | #size-cells = <0>; | ||
34 | |||
35 | PowerPC,P1021@0 { | ||
36 | device_type = "cpu"; | ||
37 | reg = <0x0>; | ||
38 | next-level-cache = <&L2>; | ||
39 | }; | ||
40 | |||
41 | PowerPC,P1021@1 { | ||
42 | device_type = "cpu"; | ||
43 | reg = <0x1>; | ||
44 | next-level-cache = <&L2>; | ||
45 | }; | ||
46 | }; | ||
47 | |||
48 | memory { | ||
49 | device_type = "memory"; | ||
50 | }; | ||
51 | |||
52 | localbus@ffe05000 { | ||
53 | #address-cells = <2>; | ||
54 | #size-cells = <1>; | ||
55 | compatible = "fsl,p1021-elbc", "fsl,elbc", "simple-bus"; | ||
56 | reg = <0 0xffe05000 0 0x1000>; | ||
57 | interrupts = <19 2>; | ||
58 | interrupt-parent = <&mpic>; | ||
59 | |||
60 | /* NAND Flash, BCSR, PMC0/1*/ | ||
61 | ranges = <0x0 0x0 0x0 0xfc000000 0x02000000 | ||
62 | 0x1 0x0 0x0 0xf8000000 0x00008000 | ||
63 | 0x2 0x0 0x0 0xf8010000 0x00020000 | ||
64 | 0x3 0x0 0x0 0xf8020000 0x00020000>; | ||
65 | |||
66 | nand@0,0 { | ||
67 | #address-cells = <1>; | ||
68 | #size-cells = <1>; | ||
69 | compatible = "fsl,p1021-fcm-nand", | ||
70 | "fsl,elbc-fcm-nand"; | ||
71 | reg = <0x0 0x0 0x40000>; | ||
72 | |||
73 | partition@0 { | ||
74 | /* This location must not be altered */ | ||
75 | /* 1MB for u-boot Bootloader Image */ | ||
76 | reg = <0x0 0x00100000>; | ||
77 | label = "NAND (RO) U-Boot Image"; | ||
78 | read-only; | ||
79 | }; | ||
80 | |||
81 | partition@100000 { | ||
82 | /* 1MB for DTB Image */ | ||
83 | reg = <0x00100000 0x00100000>; | ||
84 | label = "NAND (RO) DTB Image"; | ||
85 | read-only; | ||
86 | }; | ||
87 | |||
88 | partition@200000 { | ||
89 | /* 4MB for Linux Kernel Image */ | ||
90 | reg = <0x00200000 0x00400000>; | ||
91 | label = "NAND (RO) Linux Kernel Image"; | ||
92 | read-only; | ||
93 | }; | ||
94 | |||
95 | partition@600000 { | ||
96 | /* 5MB for Compressed Root file System Image */ | ||
97 | reg = <0x00600000 0x00500000>; | ||
98 | label = "NAND (RO) Compressed RFS Image"; | ||
99 | read-only; | ||
100 | }; | ||
101 | |||
102 | partition@b00000 { | ||
103 | /* 6MB for JFFS2 based Root file System */ | ||
104 | reg = <0x00a00000 0x00600000>; | ||
105 | label = "NAND (RW) JFFS2 Root File System"; | ||
106 | }; | ||
107 | |||
108 | partition@1100000 { | ||
109 | /* 14MB for JFFS2 based Root file System */ | ||
110 | reg = <0x01100000 0x00e00000>; | ||
111 | label = "NAND (RW) Writable User area"; | ||
112 | }; | ||
113 | |||
114 | partition@1f00000 { | ||
115 | /* 1MB for microcode */ | ||
116 | reg = <0x01f00000 0x00100000>; | ||
117 | label = "NAND (RO) QE Ucode"; | ||
118 | read-only; | ||
119 | }; | ||
120 | }; | ||
121 | |||
122 | bcsr@1,0 { | ||
123 | #address-cells = <1>; | ||
124 | #size-cells = <1>; | ||
125 | compatible = "fsl,p1021mds-bcsr"; | ||
126 | reg = <1 0 0x8000>; | ||
127 | ranges = <0 1 0 0x8000>; | ||
128 | }; | ||
129 | |||
130 | pib@2,0 { | ||
131 | compatible = "fsl,p1021mds-pib"; | ||
132 | reg = <2 0 0x10000>; | ||
133 | }; | ||
134 | |||
135 | pib@3,0 { | ||
136 | compatible = "fsl,p1021mds-pib"; | ||
137 | reg = <3 0 0x10000>; | ||
138 | }; | ||
139 | }; | ||
140 | |||
141 | soc@ffe00000 { | ||
142 | |||
143 | #address-cells = <1>; | ||
144 | #size-cells = <1>; | ||
145 | device_type = "soc"; | ||
146 | compatible = "fsl,p1021-immr", "simple-bus"; | ||
147 | ranges = <0x0 0x0 0xffe00000 0x100000>; | ||
148 | bus-frequency = <0>; // Filled out by uboot. | ||
149 | |||
150 | ecm-law@0 { | ||
151 | compatible = "fsl,ecm-law"; | ||
152 | reg = <0x0 0x1000>; | ||
153 | fsl,num-laws = <12>; | ||
154 | }; | ||
155 | |||
156 | ecm@1000 { | ||
157 | compatible = "fsl,p1021-ecm", "fsl,ecm"; | ||
158 | reg = <0x1000 0x1000>; | ||
159 | interrupts = <16 2>; | ||
160 | interrupt-parent = <&mpic>; | ||
161 | }; | ||
162 | |||
163 | memory-controller@2000 { | ||
164 | compatible = "fsl,p1021-memory-controller"; | ||
165 | reg = <0x2000 0x1000>; | ||
166 | interrupt-parent = <&mpic>; | ||
167 | interrupts = <16 2>; | ||
168 | }; | ||
169 | |||
170 | i2c@3000 { | ||
171 | #address-cells = <1>; | ||
172 | #size-cells = <0>; | ||
173 | cell-index = <0>; | ||
174 | compatible = "fsl-i2c"; | ||
175 | reg = <0x3000 0x100>; | ||
176 | interrupts = <43 2>; | ||
177 | interrupt-parent = <&mpic>; | ||
178 | dfsrr; | ||
179 | rtc@68 { | ||
180 | compatible = "dallas,ds1374"; | ||
181 | reg = <0x68>; | ||
182 | }; | ||
183 | }; | ||
184 | |||
185 | i2c@3100 { | ||
186 | #address-cells = <1>; | ||
187 | #size-cells = <0>; | ||
188 | cell-index = <1>; | ||
189 | compatible = "fsl-i2c"; | ||
190 | reg = <0x3100 0x100>; | ||
191 | interrupts = <43 2>; | ||
192 | interrupt-parent = <&mpic>; | ||
193 | dfsrr; | ||
194 | }; | ||
195 | |||
196 | serial0: serial@4500 { | ||
197 | cell-index = <0>; | ||
198 | device_type = "serial"; | ||
199 | compatible = "ns16550"; | ||
200 | reg = <0x4500 0x100>; | ||
201 | clock-frequency = <0>; | ||
202 | interrupts = <42 2>; | ||
203 | interrupt-parent = <&mpic>; | ||
204 | }; | ||
205 | |||
206 | serial1: serial@4600 { | ||
207 | cell-index = <1>; | ||
208 | device_type = "serial"; | ||
209 | compatible = "ns16550"; | ||
210 | reg = <0x4600 0x100>; | ||
211 | clock-frequency = <0>; | ||
212 | interrupts = <42 2>; | ||
213 | interrupt-parent = <&mpic>; | ||
214 | }; | ||
215 | |||
216 | spi@7000 { | ||
217 | cell-index = <0>; | ||
218 | #address-cells = <1>; | ||
219 | #size-cells = <0>; | ||
220 | compatible = "fsl,espi"; | ||
221 | reg = <0x7000 0x1000>; | ||
222 | interrupts = <59 0x2>; | ||
223 | interrupt-parent = <&mpic>; | ||
224 | espi,num-ss-bits = <4>; | ||
225 | mode = "cpu"; | ||
226 | |||
227 | fsl_m25p80@0 { | ||
228 | #address-cells = <1>; | ||
229 | #size-cells = <1>; | ||
230 | compatible = "fsl,espi-flash"; | ||
231 | reg = <0>; | ||
232 | linux,modalias = "fsl_m25p80"; | ||
233 | spi-max-frequency = <40000000>; /* input clock */ | ||
234 | partition@u-boot { | ||
235 | label = "u-boot-spi"; | ||
236 | reg = <0x00000000 0x00100000>; | ||
237 | read-only; | ||
238 | }; | ||
239 | partition@kernel { | ||
240 | label = "kernel-spi"; | ||
241 | reg = <0x00100000 0x00500000>; | ||
242 | read-only; | ||
243 | }; | ||
244 | partition@dtb { | ||
245 | label = "dtb-spi"; | ||
246 | reg = <0x00600000 0x00100000>; | ||
247 | read-only; | ||
248 | }; | ||
249 | partition@fs { | ||
250 | label = "file system-spi"; | ||
251 | reg = <0x00700000 0x00900000>; | ||
252 | }; | ||
253 | }; | ||
254 | }; | ||
255 | |||
256 | gpio: gpio-controller@f000 { | ||
257 | #gpio-cells = <2>; | ||
258 | compatible = "fsl,mpc8572-gpio"; | ||
259 | reg = <0xf000 0x100>; | ||
260 | interrupts = <47 0x2>; | ||
261 | interrupt-parent = <&mpic>; | ||
262 | gpio-controller; | ||
263 | }; | ||
264 | |||
265 | L2: l2-cache-controller@20000 { | ||
266 | compatible = "fsl,p1021-l2-cache-controller"; | ||
267 | reg = <0x20000 0x1000>; | ||
268 | cache-line-size = <32>; // 32 bytes | ||
269 | cache-size = <0x40000>; // L2,256K | ||
270 | interrupt-parent = <&mpic>; | ||
271 | interrupts = <16 2>; | ||
272 | }; | ||
273 | |||
274 | dma@21300 { | ||
275 | #address-cells = <1>; | ||
276 | #size-cells = <1>; | ||
277 | compatible = "fsl,eloplus-dma"; | ||
278 | reg = <0x21300 0x4>; | ||
279 | ranges = <0x0 0x21100 0x200>; | ||
280 | cell-index = <0>; | ||
281 | dma-channel@0 { | ||
282 | compatible = "fsl,eloplus-dma-channel"; | ||
283 | reg = <0x0 0x80>; | ||
284 | cell-index = <0>; | ||
285 | interrupt-parent = <&mpic>; | ||
286 | interrupts = <20 2>; | ||
287 | }; | ||
288 | dma-channel@80 { | ||
289 | compatible = "fsl,eloplus-dma-channel"; | ||
290 | reg = <0x80 0x80>; | ||
291 | cell-index = <1>; | ||
292 | interrupt-parent = <&mpic>; | ||
293 | interrupts = <21 2>; | ||
294 | }; | ||
295 | dma-channel@100 { | ||
296 | compatible = "fsl,eloplus-dma-channel"; | ||
297 | reg = <0x100 0x80>; | ||
298 | cell-index = <2>; | ||
299 | interrupt-parent = <&mpic>; | ||
300 | interrupts = <22 2>; | ||
301 | }; | ||
302 | dma-channel@180 { | ||
303 | compatible = "fsl,eloplus-dma-channel"; | ||
304 | reg = <0x180 0x80>; | ||
305 | cell-index = <3>; | ||
306 | interrupt-parent = <&mpic>; | ||
307 | interrupts = <23 2>; | ||
308 | }; | ||
309 | }; | ||
310 | |||
311 | usb@22000 { | ||
312 | #address-cells = <1>; | ||
313 | #size-cells = <0>; | ||
314 | compatible = "fsl-usb2-dr"; | ||
315 | reg = <0x22000 0x1000>; | ||
316 | interrupt-parent = <&mpic>; | ||
317 | interrupts = <28 0x2>; | ||
318 | phy_type = "ulpi"; | ||
319 | }; | ||
320 | |||
321 | mdio@24000 { | ||
322 | #address-cells = <1>; | ||
323 | #size-cells = <0>; | ||
324 | compatible = "fsl,etsec2-mdio"; | ||
325 | reg = <0x24000 0x1000 0xb0030 0x4>; | ||
326 | |||
327 | phy0: ethernet-phy@0 { | ||
328 | interrupt-parent = <&mpic>; | ||
329 | interrupts = <1 1>; | ||
330 | reg = <0x0>; | ||
331 | }; | ||
332 | phy1: ethernet-phy@1 { | ||
333 | interrupt-parent = <&mpic>; | ||
334 | interrupts = <2 1>; | ||
335 | reg = <0x1>; | ||
336 | }; | ||
337 | phy4: ethernet-phy@4 { | ||
338 | interrupt-parent = <&mpic>; | ||
339 | reg = <0x4>; | ||
340 | }; | ||
341 | }; | ||
342 | |||
343 | mdio@25000 { | ||
344 | #address-cells = <1>; | ||
345 | #size-cells = <0>; | ||
346 | compatible = "fsl,etsec2-tbi"; | ||
347 | reg = <0x25000 0x1000 0xb1030 0x4>; | ||
348 | tbi0: tbi-phy@11 { | ||
349 | reg = <0x11>; | ||
350 | device_type = "tbi-phy"; | ||
351 | }; | ||
352 | }; | ||
353 | |||
354 | enet0: ethernet@B0000 { | ||
355 | #address-cells = <1>; | ||
356 | #size-cells = <1>; | ||
357 | cell-index = <0>; | ||
358 | device_type = "network"; | ||
359 | model = "eTSEC"; | ||
360 | compatible = "fsl,etsec2"; | ||
361 | fsl,num_rx_queues = <0x8>; | ||
362 | fsl,num_tx_queues = <0x8>; | ||
363 | local-mac-address = [ 00 00 00 00 00 00 ]; | ||
364 | interrupt-parent = <&mpic>; | ||
365 | phy-handle = <&phy0>; | ||
366 | phy-connection-type = "rgmii-id"; | ||
367 | queue-group@0{ | ||
368 | #address-cells = <1>; | ||
369 | #size-cells = <1>; | ||
370 | reg = <0xB0000 0x1000>; | ||
371 | interrupts = <29 2 30 2 34 2>; | ||
372 | }; | ||
373 | queue-group@1{ | ||
374 | #address-cells = <1>; | ||
375 | #size-cells = <1>; | ||
376 | reg = <0xB4000 0x1000>; | ||
377 | interrupts = <17 2 18 2 24 2>; | ||
378 | }; | ||
379 | }; | ||
380 | |||
381 | enet1: ethernet@B1000 { | ||
382 | #address-cells = <1>; | ||
383 | #size-cells = <1>; | ||
384 | cell-index = <0>; | ||
385 | device_type = "network"; | ||
386 | model = "eTSEC"; | ||
387 | compatible = "fsl,etsec2"; | ||
388 | fsl,num_rx_queues = <0x8>; | ||
389 | fsl,num_tx_queues = <0x8>; | ||
390 | local-mac-address = [ 00 00 00 00 00 00 ]; | ||
391 | interrupt-parent = <&mpic>; | ||
392 | phy-handle = <&phy4>; | ||
393 | tbi-handle = <&tbi0>; | ||
394 | phy-connection-type = "sgmii"; | ||
395 | queue-group@0{ | ||
396 | #address-cells = <1>; | ||
397 | #size-cells = <1>; | ||
398 | reg = <0xB1000 0x1000>; | ||
399 | interrupts = <35 2 36 2 40 2>; | ||
400 | }; | ||
401 | queue-group@1{ | ||
402 | #address-cells = <1>; | ||
403 | #size-cells = <1>; | ||
404 | reg = <0xB5000 0x1000>; | ||
405 | interrupts = <51 2 52 2 67 2>; | ||
406 | }; | ||
407 | }; | ||
408 | |||
409 | enet2: ethernet@B2000 { | ||
410 | #address-cells = <1>; | ||
411 | #size-cells = <1>; | ||
412 | cell-index = <0>; | ||
413 | device_type = "network"; | ||
414 | model = "eTSEC"; | ||
415 | compatible = "fsl,etsec2"; | ||
416 | fsl,num_rx_queues = <0x8>; | ||
417 | fsl,num_tx_queues = <0x8>; | ||
418 | local-mac-address = [ 00 00 00 00 00 00 ]; | ||
419 | interrupt-parent = <&mpic>; | ||
420 | phy-handle = <&phy1>; | ||
421 | phy-connection-type = "rgmii-id"; | ||
422 | queue-group@0{ | ||
423 | #address-cells = <1>; | ||
424 | #size-cells = <1>; | ||
425 | reg = <0xB2000 0x1000>; | ||
426 | interrupts = <31 2 32 2 33 2>; | ||
427 | }; | ||
428 | queue-group@1{ | ||
429 | #address-cells = <1>; | ||
430 | #size-cells = <1>; | ||
431 | reg = <0xB6000 0x1000>; | ||
432 | interrupts = <25 2 26 2 27 2>; | ||
433 | }; | ||
434 | }; | ||
435 | |||
436 | sdhci@2e000 { | ||
437 | compatible = "fsl,p1021-esdhc", "fsl,esdhc"; | ||
438 | reg = <0x2e000 0x1000>; | ||
439 | interrupts = <72 0x2>; | ||
440 | interrupt-parent = <&mpic>; | ||
441 | /* Filled in by U-Boot */ | ||
442 | clock-frequency = <0>; | ||
443 | }; | ||
444 | |||
445 | crypto@30000 { | ||
446 | compatible = "fsl,sec3.3", "fsl,sec3.1", | ||
447 | "fsl,sec3.0", "fsl,sec2.4", | ||
448 | "fsl,sec2.2", "fsl,sec2.1", "fsl,sec2.0"; | ||
449 | reg = <0x30000 0x10000>; | ||
450 | interrupts = <45 2 58 2>; | ||
451 | interrupt-parent = <&mpic>; | ||
452 | fsl,num-channels = <4>; | ||
453 | fsl,channel-fifo-len = <24>; | ||
454 | fsl,exec-units-mask = <0x97c>; | ||
455 | fsl,descriptor-types-mask = <0x3a30abf>; | ||
456 | }; | ||
457 | |||
458 | mpic: pic@40000 { | ||
459 | interrupt-controller; | ||
460 | #address-cells = <0>; | ||
461 | #interrupt-cells = <2>; | ||
462 | reg = <0x40000 0x40000>; | ||
463 | compatible = "chrp,open-pic"; | ||
464 | device_type = "open-pic"; | ||
465 | }; | ||
466 | |||
467 | msi@41600 { | ||
468 | compatible = "fsl,p1021-msi", "fsl,mpic-msi"; | ||
469 | reg = <0x41600 0x80>; | ||
470 | msi-available-ranges = <0 0x100>; | ||
471 | interrupts = < | ||
472 | 0xe0 0 | ||
473 | 0xe1 0 | ||
474 | 0xe2 0 | ||
475 | 0xe3 0 | ||
476 | 0xe4 0 | ||
477 | 0xe5 0 | ||
478 | 0xe6 0 | ||
479 | 0xe7 0>; | ||
480 | interrupt-parent = <&mpic>; | ||
481 | }; | ||
482 | |||
483 | global-utilities@e0000 { //global utilities block | ||
484 | compatible = "fsl,p1021-guts"; | ||
485 | reg = <0xe0000 0x1000>; | ||
486 | fsl,has-rstcr; | ||
487 | }; | ||
488 | |||
489 | par_io@e0100 { | ||
490 | #address-cells = <1>; | ||
491 | #size-cells = <1>; | ||
492 | reg = <0xe0100 0x60>; | ||
493 | ranges = <0x0 0xe0100 0x60>; | ||
494 | device_type = "par_io"; | ||
495 | num-ports = <3>; | ||
496 | pio1: ucc_pin@01 { | ||
497 | pio-map = < | ||
498 | /* port pin dir open_drain assignment has_irq */ | ||
499 | 0x1 0x13 0x1 0x0 0x1 0x0 /* QE_MUX_MDC */ | ||
500 | 0x1 0x14 0x3 0x0 0x1 0x0 /* QE_MUX_MDIO */ | ||
501 | 0x0 0x17 0x2 0x0 0x2 0x0 /* CLK12 */ | ||
502 | 0x0 0x18 0x2 0x0 0x1 0x0 /* CLK9 | ||
503 | */ | ||
504 | 0x0 0x7 0x1 0x0 0x2 0x0 /* ENET1_TXD0_SER1_TXD0 */ | ||
505 | 0x0 0x9 0x1 0x0 0x2 0x0 /* ENET1_TXD1_SER1_TXD1 */ | ||
506 | 0x0 0xb 0x1 0x0 0x2 0x0 /* ENET1_TXD2_SER1_TXD2 */ | ||
507 | 0x0 0xc 0x1 0x0 0x2 0x0 /* ENET1_TXD3_SER1_TXD3 */ | ||
508 | 0x0 0x6 0x2 0x0 0x2 0x0 /* ENET1_RXD0_SER1_RXD0 */ | ||
509 | 0x0 0xa 0x2 0x0 0x2 0x0 /* ENET1_RXD1_SER1_RXD1 */ | ||
510 | 0x0 0xe 0x2 0x0 0x2 0x0 /* ENET1_RXD2_SER1_RXD2 */ | ||
511 | 0x0 0xf 0x2 0x0 0x2 0x0 /* ENET1_RXD3_SER1_RXD3 */ | ||
512 | 0x0 0x5 0x1 0x0 0x2 0x0 /* ENET1_TX_EN_SER1_RTS_B */ | ||
513 | 0x0 0xd 0x1 0x0 0x2 0x0 /* ENET1_TX_ER */ | ||
514 | 0x0 0x4 0x2 0x0 0x2 0x0 /* ENET1_RX_DV_SER1_CTS_B */ | ||
515 | 0x0 0x8 0x2 0x0 0x2 0x0 /* ENET1_RX_ER_SER1_CD_B */ | ||
516 | 0x0 0x11 0x2 0x0 0x2 0x0 /* ENET1_CRS */ | ||
517 | 0x0 0x10 0x2 0x0 0x2 0x0>; /* ENET1_COL */ | ||
518 | }; | ||
519 | |||
520 | pio2: ucc_pin@02 { | ||
521 | pio-map = < | ||
522 | /* port pin dir open_drain assignment has_irq */ | ||
523 | 0x1 0x13 0x1 0x0 0x1 0x0 /* QE_MUX_MDC */ | ||
524 | 0x1 0x14 0x3 0x0 0x1 0x0 /* QE_MUX_MDIO */ | ||
525 | 0x1 0xb 0x2 0x0 0x1 0x0 /* CLK13 */ | ||
526 | 0x1 0x7 0x1 0x0 0x2 0x0 /* ENET5_TXD0_SER5_TXD0 */ | ||
527 | 0x1 0xa 0x1 0x0 0x2 0x0 /* ENET5_TXD1_SER5_TXD1 */ | ||
528 | 0x1 0x6 0x2 0x0 0x2 0x0 /* ENET5_RXD0_SER5_RXD0 */ | ||
529 | 0x1 0x9 0x2 0x0 0x2 0x0 /* ENET5_RXD1_SER5_RXD1 */ | ||
530 | 0x1 0x5 0x1 0x0 0x2 0x0 /* ENET5_TX_EN_SER5_RTS_B */ | ||
531 | 0x1 0x4 0x2 0x0 0x2 0x0 /* ENET5_RX_DV_SER5_CTS_B */ | ||
532 | 0x1 0x8 0x2 0x0 0x2 0x0>; /* ENET5_RX_ER_SER5_CD_B */ | ||
533 | }; | ||
534 | }; | ||
535 | }; | ||
536 | |||
537 | pci0: pcie@ffe09000 { | ||
538 | compatible = "fsl,mpc8548-pcie"; | ||
539 | device_type = "pci"; | ||
540 | #interrupt-cells = <1>; | ||
541 | #size-cells = <2>; | ||
542 | #address-cells = <3>; | ||
543 | reg = <0 0xffe09000 0 0x1000>; | ||
544 | bus-range = <0 255>; | ||
545 | ranges = <0x2000000 0x0 0xa0000000 0 0xa0000000 0x0 0x20000000 | ||
546 | 0x1000000 0x0 0x00000000 0 0xffc10000 0x0 0x10000>; | ||
547 | clock-frequency = <33333333>; | ||
548 | interrupt-parent = <&mpic>; | ||
549 | interrupts = <16 2>; | ||
550 | interrupt-map-mask = <0xf800 0 0 7>; | ||
551 | interrupt-map = < | ||
552 | /* IDSEL 0x0 */ | ||
553 | 0000 0 0 1 &mpic 4 1 | ||
554 | 0000 0 0 2 &mpic 5 1 | ||
555 | 0000 0 0 3 &mpic 6 1 | ||
556 | 0000 0 0 4 &mpic 7 1 | ||
557 | >; | ||
558 | pcie@0 { | ||
559 | reg = <0x0 0x0 0x0 0x0 0x0>; | ||
560 | #size-cells = <2>; | ||
561 | #address-cells = <3>; | ||
562 | device_type = "pci"; | ||
563 | ranges = <0x2000000 0x0 0xa0000000 | ||
564 | 0x2000000 0x0 0xa0000000 | ||
565 | 0x0 0x20000000 | ||
566 | |||
567 | 0x1000000 0x0 0x0 | ||
568 | 0x1000000 0x0 0x0 | ||
569 | 0x0 0x100000>; | ||
570 | }; | ||
571 | }; | ||
572 | |||
573 | pci1: pcie@ffe0a000 { | ||
574 | compatible = "fsl,mpc8548-pcie"; | ||
575 | device_type = "pci"; | ||
576 | #interrupt-cells = <1>; | ||
577 | #size-cells = <2>; | ||
578 | #address-cells = <3>; | ||
579 | reg = <0 0xffe0a000 0 0x1000>; | ||
580 | bus-range = <0 255>; | ||
581 | ranges = <0x2000000 0x0 0xc0000000 0 0xc0000000 0x0 0x20000000 | ||
582 | 0x1000000 0x0 0x00000000 0 0xffc20000 0x0 0x10000>; | ||
583 | clock-frequency = <33333333>; | ||
584 | interrupt-parent = <&mpic>; | ||
585 | interrupts = <16 2>; | ||
586 | interrupt-map-mask = <0xf800 0 0 7>; | ||
587 | interrupt-map = < | ||
588 | /* IDSEL 0x0 */ | ||
589 | 0000 0 0 1 &mpic 0 1 | ||
590 | 0000 0 0 2 &mpic 1 1 | ||
591 | 0000 0 0 3 &mpic 2 1 | ||
592 | 0000 0 0 4 &mpic 3 1 | ||
593 | >; | ||
594 | pcie@0 { | ||
595 | reg = <0x0 0x0 0x0 0x0 0x0>; | ||
596 | #size-cells = <2>; | ||
597 | #address-cells = <3>; | ||
598 | device_type = "pci"; | ||
599 | ranges = <0x2000000 0x0 0xc0000000 | ||
600 | 0x2000000 0x0 0xc0000000 | ||
601 | 0x0 0x20000000 | ||
602 | |||
603 | 0x1000000 0x0 0x0 | ||
604 | 0x1000000 0x0 0x0 | ||
605 | 0x0 0x100000>; | ||
606 | }; | ||
607 | }; | ||
608 | |||
609 | qe@ffe80000 { | ||
610 | #address-cells = <1>; | ||
611 | #size-cells = <1>; | ||
612 | device_type = "qe"; | ||
613 | compatible = "fsl,qe"; | ||
614 | ranges = <0x0 0x0 0xffe80000 0x40000>; | ||
615 | reg = <0 0xffe80000 0 0x480>; | ||
616 | brg-frequency = <0>; | ||
617 | bus-frequency = <0>; | ||
618 | fsl,qe-num-riscs = <1>; | ||
619 | fsl,qe-num-snums = <28>; | ||
620 | |||
621 | qeic: interrupt-controller@80 { | ||
622 | interrupt-controller; | ||
623 | compatible = "fsl,qe-ic"; | ||
624 | #address-cells = <0>; | ||
625 | #interrupt-cells = <1>; | ||
626 | reg = <0x80 0x80>; | ||
627 | interrupts = <63 2 60 2>; //high:47 low:44 | ||
628 | interrupt-parent = <&mpic>; | ||
629 | }; | ||
630 | |||
631 | enet3: ucc@2000 { | ||
632 | device_type = "network"; | ||
633 | compatible = "ucc_geth"; | ||
634 | cell-index = <1>; | ||
635 | reg = <0x2000 0x200>; | ||
636 | interrupts = <32>; | ||
637 | interrupt-parent = <&qeic>; | ||
638 | local-mac-address = [ 00 00 00 00 00 00 ]; | ||
639 | rx-clock-name = "clk12"; | ||
640 | tx-clock-name = "clk9"; | ||
641 | pio-handle = <&pio1>; | ||
642 | phy-handle = <&qe_phy0>; | ||
643 | phy-connection-type = "mii"; | ||
644 | }; | ||
645 | |||
646 | mdio@2120 { | ||
647 | #address-cells = <1>; | ||
648 | #size-cells = <0>; | ||
649 | reg = <0x2120 0x18>; | ||
650 | compatible = "fsl,ucc-mdio"; | ||
651 | |||
652 | qe_phy0: ethernet-phy@0 { | ||
653 | interrupt-parent = <&mpic>; | ||
654 | interrupts = <4 1>; | ||
655 | reg = <0x0>; | ||
656 | device_type = "ethernet-phy"; | ||
657 | }; | ||
658 | qe_phy1: ethernet-phy@03 { | ||
659 | interrupt-parent = <&mpic>; | ||
660 | interrupts = <5 1>; | ||
661 | reg = <0x3>; | ||
662 | device_type = "ethernet-phy"; | ||
663 | }; | ||
664 | tbi-phy@11 { | ||
665 | reg = <0x11>; | ||
666 | device_type = "tbi-phy"; | ||
667 | }; | ||
668 | }; | ||
669 | |||
670 | enet4: ucc@2400 { | ||
671 | device_type = "network"; | ||
672 | compatible = "ucc_geth"; | ||
673 | cell-index = <5>; | ||
674 | reg = <0x2400 0x200>; | ||
675 | interrupts = <40>; | ||
676 | interrupt-parent = <&qeic>; | ||
677 | local-mac-address = [ 00 00 00 00 00 00 ]; | ||
678 | rx-clock-name = "none"; | ||
679 | tx-clock-name = "clk13"; | ||
680 | pio-handle = <&pio2>; | ||
681 | phy-handle = <&qe_phy1>; | ||
682 | phy-connection-type = "rmii"; | ||
683 | }; | ||
684 | |||
685 | muram@10000 { | ||
686 | #address-cells = <1>; | ||
687 | #size-cells = <1>; | ||
688 | compatible = "fsl,qe-muram", "fsl,cpm-muram"; | ||
689 | ranges = <0x0 0x10000 0x6000>; | ||
690 | |||
691 | data-only@0 { | ||
692 | compatible = "fsl,qe-muram-data", | ||
693 | "fsl,cpm-muram-data"; | ||
694 | reg = <0x0 0x6000>; | ||
695 | }; | ||
696 | }; | ||
697 | }; | ||
698 | }; | ||
diff --git a/arch/powerpc/boot/dts/redwood.dts b/arch/powerpc/boot/dts/redwood.dts index d2af32e2bf7a..81636c01d906 100644 --- a/arch/powerpc/boot/dts/redwood.dts +++ b/arch/powerpc/boot/dts/redwood.dts | |||
@@ -234,10 +234,132 @@ | |||
234 | has-inverted-stacr-oc; | 234 | has-inverted-stacr-oc; |
235 | has-new-stacr-staopc; | 235 | has-new-stacr-staopc; |
236 | }; | 236 | }; |
237 | }; | ||
238 | PCIE0: pciex@d00000000 { | ||
239 | device_type = "pci"; | ||
240 | #interrupt-cells = <1>; | ||
241 | #size-cells = <2>; | ||
242 | #address-cells = <3>; | ||
243 | compatible = "ibm,plb-pciex-460sx", "ibm,plb-pciex"; | ||
244 | primary; | ||
245 | port = <0x0>; /* port number */ | ||
246 | reg = <0x0000000d 0x00000000 0x20000000 /* Config space access */ | ||
247 | 0x0000000c 0x10000000 0x00001000>; /* Registers */ | ||
248 | dcr-reg = <0x100 0x020>; | ||
249 | sdr-base = <0x300>; | ||
250 | |||
251 | /* Outbound ranges, one memory and one IO, | ||
252 | * later cannot be changed | ||
253 | */ | ||
254 | ranges = <0x02000000 0x00000000 0x80000000 0x0000000e 0x00000000 0x00000000 0x80000000 | ||
255 | 0x01000000 0x00000000 0x00000000 0x0000000f 0x80000000 0x00000000 0x00010000>; | ||
256 | |||
257 | /* Inbound 2GB range starting at 0 */ | ||
258 | dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x80000000>; | ||
237 | 259 | ||
260 | /* This drives busses 10 to 0x1f */ | ||
261 | bus-range = <0x10 0x1f>; | ||
262 | |||
263 | /* Legacy interrupts (note the weird polarity, the bridge seems | ||
264 | * to invert PCIe legacy interrupts). | ||
265 | * We are de-swizzling here because the numbers are actually for | ||
266 | * port of the root complex virtual P2P bridge. But I want | ||
267 | * to avoid putting a node for it in the tree, so the numbers | ||
268 | * below are basically de-swizzled numbers. | ||
269 | * The real slot is on idsel 0, so the swizzling is 1:1 | ||
270 | */ | ||
271 | interrupt-map-mask = <0x0 0x0 0x0 0x7>; | ||
272 | interrupt-map = < | ||
273 | 0x0 0x0 0x0 0x1 &UIC3 0x0 0x4 /* swizzled int A */ | ||
274 | 0x0 0x0 0x0 0x2 &UIC3 0x1 0x4 /* swizzled int B */ | ||
275 | 0x0 0x0 0x0 0x3 &UIC3 0x2 0x4 /* swizzled int C */ | ||
276 | 0x0 0x0 0x0 0x4 &UIC3 0x3 0x4 /* swizzled int D */>; | ||
277 | }; | ||
278 | |||
279 | PCIE1: pciex@d20000000 { | ||
280 | device_type = "pci"; | ||
281 | #interrupt-cells = <1>; | ||
282 | #size-cells = <2>; | ||
283 | #address-cells = <3>; | ||
284 | compatible = "ibm,plb-pciex-460sx", "ibm,plb-pciex"; | ||
285 | primary; | ||
286 | port = <0x1>; /* port number */ | ||
287 | reg = <0x0000000d 0x20000000 0x20000000 /* Config space access */ | ||
288 | 0x0000000c 0x10001000 0x00001000>; /* Registers */ | ||
289 | dcr-reg = <0x120 0x020>; | ||
290 | sdr-base = <0x340>; | ||
291 | |||
292 | /* Outbound ranges, one memory and one IO, | ||
293 | * later cannot be changed | ||
294 | */ | ||
295 | ranges = <0x02000000 0x00000000 0x80000000 0x0000000e 0x80000000 0x00000000 0x80000000 | ||
296 | 0x01000000 0x00000000 0x00000000 0x0000000f 0x80010000 0x00000000 0x00010000>; | ||
297 | |||
298 | /* Inbound 2GB range starting at 0 */ | ||
299 | dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x80000000>; | ||
300 | |||
301 | /* This drives busses 10 to 0x1f */ | ||
302 | bus-range = <0x20 0x2f>; | ||
303 | |||
304 | /* Legacy interrupts (note the weird polarity, the bridge seems | ||
305 | * to invert PCIe legacy interrupts). | ||
306 | * We are de-swizzling here because the numbers are actually for | ||
307 | * port of the root complex virtual P2P bridge. But I want | ||
308 | * to avoid putting a node for it in the tree, so the numbers | ||
309 | * below are basically de-swizzled numbers. | ||
310 | * The real slot is on idsel 0, so the swizzling is 1:1 | ||
311 | */ | ||
312 | interrupt-map-mask = <0x0 0x0 0x0 0x7>; | ||
313 | interrupt-map = < | ||
314 | 0x0 0x0 0x0 0x1 &UIC3 0x4 0x4 /* swizzled int A */ | ||
315 | 0x0 0x0 0x0 0x2 &UIC3 0x5 0x4 /* swizzled int B */ | ||
316 | 0x0 0x0 0x0 0x3 &UIC3 0x6 0x4 /* swizzled int C */ | ||
317 | 0x0 0x0 0x0 0x4 &UIC3 0x7 0x4 /* swizzled int D */>; | ||
318 | }; | ||
319 | |||
320 | PCIE2: pciex@d40000000 { | ||
321 | device_type = "pci"; | ||
322 | #interrupt-cells = <1>; | ||
323 | #size-cells = <2>; | ||
324 | #address-cells = <3>; | ||
325 | compatible = "ibm,plb-pciex-460sx", "ibm,plb-pciex"; | ||
326 | primary; | ||
327 | port = <0x2>; /* port number */ | ||
328 | reg = <0x0000000d 0x40000000 0x20000000 /* Config space access */ | ||
329 | 0x0000000c 0x10002000 0x00001000>; /* Registers */ | ||
330 | dcr-reg = <0x140 0x020>; | ||
331 | sdr-base = <0x370>; | ||
332 | |||
333 | /* Outbound ranges, one memory and one IO, | ||
334 | * later cannot be changed | ||
335 | */ | ||
336 | ranges = <0x02000000 0x00000000 0x80000000 0x0000000f 0x00000000 0x00000000 0x80000000 | ||
337 | 0x01000000 0x00000000 0x00000000 0x0000000f 0x80020000 0x00000000 0x00010000>; | ||
338 | |||
339 | /* Inbound 2GB range starting at 0 */ | ||
340 | dma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x80000000>; | ||
341 | |||
342 | /* This drives busses 10 to 0x1f */ | ||
343 | bus-range = <0x30 0x3f>; | ||
344 | |||
345 | /* Legacy interrupts (note the weird polarity, the bridge seems | ||
346 | * to invert PCIe legacy interrupts). | ||
347 | * We are de-swizzling here because the numbers are actually for | ||
348 | * port of the root complex virtual P2P bridge. But I want | ||
349 | * to avoid putting a node for it in the tree, so the numbers | ||
350 | * below are basically de-swizzled numbers. | ||
351 | * The real slot is on idsel 0, so the swizzling is 1:1 | ||
352 | */ | ||
353 | interrupt-map-mask = <0x0 0x0 0x0 0x7>; | ||
354 | interrupt-map = < | ||
355 | 0x0 0x0 0x0 0x1 &UIC3 0x8 0x4 /* swizzled int A */ | ||
356 | 0x0 0x0 0x0 0x2 &UIC3 0x9 0x4 /* swizzled int B */ | ||
357 | 0x0 0x0 0x0 0x3 &UIC3 0xa 0x4 /* swizzled int C */ | ||
358 | 0x0 0x0 0x0 0x4 &UIC3 0xb 0x4 /* swizzled int D */>; | ||
238 | }; | 359 | }; |
239 | 360 | ||
240 | }; | 361 | }; |
362 | |||
241 | chosen { | 363 | chosen { |
242 | linux,stdout-path = "/plb/opb/serial@ef600200"; | 364 | linux,stdout-path = "/plb/opb/serial@ef600200"; |
243 | }; | 365 | }; |
diff --git a/arch/powerpc/configs/40x/acadia_defconfig b/arch/powerpc/configs/40x/acadia_defconfig index 8e95f8d227b9..4aa17b676a3f 100644 --- a/arch/powerpc/configs/40x/acadia_defconfig +++ b/arch/powerpc/configs/40x/acadia_defconfig | |||
@@ -98,8 +98,7 @@ CONFIG_GROUP_SCHED=y | |||
98 | CONFIG_USER_SCHED=y | 98 | CONFIG_USER_SCHED=y |
99 | # CONFIG_CGROUP_SCHED is not set | 99 | # CONFIG_CGROUP_SCHED is not set |
100 | # CONFIG_CGROUPS is not set | 100 | # CONFIG_CGROUPS is not set |
101 | CONFIG_SYSFS_DEPRECATED=y | 101 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
102 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
103 | # CONFIG_RELAY is not set | 102 | # CONFIG_RELAY is not set |
104 | # CONFIG_NAMESPACES is not set | 103 | # CONFIG_NAMESPACES is not set |
105 | CONFIG_BLK_DEV_INITRD=y | 104 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/40x/ep405_defconfig b/arch/powerpc/configs/40x/ep405_defconfig index 918f23fd2b18..9a5f1ab777ed 100644 --- a/arch/powerpc/configs/40x/ep405_defconfig +++ b/arch/powerpc/configs/40x/ep405_defconfig | |||
@@ -98,8 +98,7 @@ CONFIG_FAIR_GROUP_SCHED=y | |||
98 | CONFIG_USER_SCHED=y | 98 | CONFIG_USER_SCHED=y |
99 | # CONFIG_CGROUP_SCHED is not set | 99 | # CONFIG_CGROUP_SCHED is not set |
100 | # CONFIG_CGROUPS is not set | 100 | # CONFIG_CGROUPS is not set |
101 | CONFIG_SYSFS_DEPRECATED=y | 101 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
102 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
103 | # CONFIG_RELAY is not set | 102 | # CONFIG_RELAY is not set |
104 | # CONFIG_NAMESPACES is not set | 103 | # CONFIG_NAMESPACES is not set |
105 | CONFIG_BLK_DEV_INITRD=y | 104 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/40x/hcu4_defconfig b/arch/powerpc/configs/40x/hcu4_defconfig index f87ef0382280..0b452135d1d4 100644 --- a/arch/powerpc/configs/40x/hcu4_defconfig +++ b/arch/powerpc/configs/40x/hcu4_defconfig | |||
@@ -98,8 +98,7 @@ CONFIG_FAIR_GROUP_SCHED=y | |||
98 | CONFIG_USER_SCHED=y | 98 | CONFIG_USER_SCHED=y |
99 | # CONFIG_CGROUP_SCHED is not set | 99 | # CONFIG_CGROUP_SCHED is not set |
100 | # CONFIG_CGROUPS is not set | 100 | # CONFIG_CGROUPS is not set |
101 | CONFIG_SYSFS_DEPRECATED=y | 101 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
102 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
103 | # CONFIG_RELAY is not set | 102 | # CONFIG_RELAY is not set |
104 | # CONFIG_NAMESPACES is not set | 103 | # CONFIG_NAMESPACES is not set |
105 | CONFIG_BLK_DEV_INITRD=y | 104 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/40x/kilauea_defconfig b/arch/powerpc/configs/40x/kilauea_defconfig index 19fbcb075376..4d2de0bed60e 100644 --- a/arch/powerpc/configs/40x/kilauea_defconfig +++ b/arch/powerpc/configs/40x/kilauea_defconfig | |||
@@ -98,8 +98,7 @@ CONFIG_GROUP_SCHED=y | |||
98 | CONFIG_USER_SCHED=y | 98 | CONFIG_USER_SCHED=y |
99 | # CONFIG_CGROUP_SCHED is not set | 99 | # CONFIG_CGROUP_SCHED is not set |
100 | # CONFIG_CGROUPS is not set | 100 | # CONFIG_CGROUPS is not set |
101 | CONFIG_SYSFS_DEPRECATED=y | 101 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
102 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
103 | # CONFIG_RELAY is not set | 102 | # CONFIG_RELAY is not set |
104 | # CONFIG_NAMESPACES is not set | 103 | # CONFIG_NAMESPACES is not set |
105 | CONFIG_BLK_DEV_INITRD=y | 104 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/40x/makalu_defconfig b/arch/powerpc/configs/40x/makalu_defconfig index eb41cd695979..a1f3f505e4a7 100644 --- a/arch/powerpc/configs/40x/makalu_defconfig +++ b/arch/powerpc/configs/40x/makalu_defconfig | |||
@@ -98,8 +98,7 @@ CONFIG_GROUP_SCHED=y | |||
98 | CONFIG_USER_SCHED=y | 98 | CONFIG_USER_SCHED=y |
99 | # CONFIG_CGROUP_SCHED is not set | 99 | # CONFIG_CGROUP_SCHED is not set |
100 | # CONFIG_CGROUPS is not set | 100 | # CONFIG_CGROUPS is not set |
101 | CONFIG_SYSFS_DEPRECATED=y | 101 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
102 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
103 | # CONFIG_RELAY is not set | 102 | # CONFIG_RELAY is not set |
104 | # CONFIG_NAMESPACES is not set | 103 | # CONFIG_NAMESPACES is not set |
105 | CONFIG_BLK_DEV_INITRD=y | 104 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/40x/virtex_defconfig b/arch/powerpc/configs/40x/virtex_defconfig index 416e79ac0711..c76313577140 100644 --- a/arch/powerpc/configs/40x/virtex_defconfig +++ b/arch/powerpc/configs/40x/virtex_defconfig | |||
@@ -77,8 +77,7 @@ CONFIG_IKCONFIG_PROC=y | |||
77 | CONFIG_LOG_BUF_SHIFT=14 | 77 | CONFIG_LOG_BUF_SHIFT=14 |
78 | # CONFIG_GROUP_SCHED is not set | 78 | # CONFIG_GROUP_SCHED is not set |
79 | # CONFIG_CGROUPS is not set | 79 | # CONFIG_CGROUPS is not set |
80 | CONFIG_SYSFS_DEPRECATED=y | 80 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
81 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
82 | # CONFIG_RELAY is not set | 81 | # CONFIG_RELAY is not set |
83 | CONFIG_NAMESPACES=y | 82 | CONFIG_NAMESPACES=y |
84 | # CONFIG_UTS_NS is not set | 83 | # CONFIG_UTS_NS is not set |
diff --git a/arch/powerpc/configs/40x/walnut_defconfig b/arch/powerpc/configs/40x/walnut_defconfig index bfff0eae39d2..6597b2f1d1a8 100644 --- a/arch/powerpc/configs/40x/walnut_defconfig +++ b/arch/powerpc/configs/40x/walnut_defconfig | |||
@@ -98,8 +98,7 @@ CONFIG_FAIR_GROUP_SCHED=y | |||
98 | CONFIG_USER_SCHED=y | 98 | CONFIG_USER_SCHED=y |
99 | # CONFIG_CGROUP_SCHED is not set | 99 | # CONFIG_CGROUP_SCHED is not set |
100 | # CONFIG_CGROUPS is not set | 100 | # CONFIG_CGROUPS is not set |
101 | CONFIG_SYSFS_DEPRECATED=y | 101 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
102 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
103 | # CONFIG_RELAY is not set | 102 | # CONFIG_RELAY is not set |
104 | # CONFIG_NAMESPACES is not set | 103 | # CONFIG_NAMESPACES is not set |
105 | CONFIG_BLK_DEV_INITRD=y | 104 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/44x/arches_defconfig b/arch/powerpc/configs/44x/arches_defconfig index 1f6d0490e28d..2d3dfb55fbed 100644 --- a/arch/powerpc/configs/44x/arches_defconfig +++ b/arch/powerpc/configs/44x/arches_defconfig | |||
@@ -98,8 +98,7 @@ CONFIG_RCU_FANOUT=32 | |||
98 | CONFIG_LOG_BUF_SHIFT=14 | 98 | CONFIG_LOG_BUF_SHIFT=14 |
99 | # CONFIG_GROUP_SCHED is not set | 99 | # CONFIG_GROUP_SCHED is not set |
100 | # CONFIG_CGROUPS is not set | 100 | # CONFIG_CGROUPS is not set |
101 | CONFIG_SYSFS_DEPRECATED=y | 101 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
102 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
103 | # CONFIG_RELAY is not set | 102 | # CONFIG_RELAY is not set |
104 | # CONFIG_NAMESPACES is not set | 103 | # CONFIG_NAMESPACES is not set |
105 | CONFIG_BLK_DEV_INITRD=y | 104 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/44x/bamboo_defconfig b/arch/powerpc/configs/44x/bamboo_defconfig index 788faac6c27a..51a00c46df19 100644 --- a/arch/powerpc/configs/44x/bamboo_defconfig +++ b/arch/powerpc/configs/44x/bamboo_defconfig | |||
@@ -102,8 +102,7 @@ CONFIG_FAIR_GROUP_SCHED=y | |||
102 | CONFIG_USER_SCHED=y | 102 | CONFIG_USER_SCHED=y |
103 | # CONFIG_CGROUP_SCHED is not set | 103 | # CONFIG_CGROUP_SCHED is not set |
104 | # CONFIG_CGROUPS is not set | 104 | # CONFIG_CGROUPS is not set |
105 | CONFIG_SYSFS_DEPRECATED=y | 105 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
106 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
107 | # CONFIG_RELAY is not set | 106 | # CONFIG_RELAY is not set |
108 | # CONFIG_NAMESPACES is not set | 107 | # CONFIG_NAMESPACES is not set |
109 | CONFIG_BLK_DEV_INITRD=y | 108 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/44x/canyonlands_defconfig b/arch/powerpc/configs/44x/canyonlands_defconfig index 4ef8bcab61f8..1028b1bfb602 100644 --- a/arch/powerpc/configs/44x/canyonlands_defconfig +++ b/arch/powerpc/configs/44x/canyonlands_defconfig | |||
@@ -98,8 +98,7 @@ CONFIG_RCU_FANOUT=32 | |||
98 | CONFIG_LOG_BUF_SHIFT=14 | 98 | CONFIG_LOG_BUF_SHIFT=14 |
99 | # CONFIG_GROUP_SCHED is not set | 99 | # CONFIG_GROUP_SCHED is not set |
100 | # CONFIG_CGROUPS is not set | 100 | # CONFIG_CGROUPS is not set |
101 | CONFIG_SYSFS_DEPRECATED=y | 101 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
102 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
103 | # CONFIG_RELAY is not set | 102 | # CONFIG_RELAY is not set |
104 | # CONFIG_NAMESPACES is not set | 103 | # CONFIG_NAMESPACES is not set |
105 | CONFIG_BLK_DEV_INITRD=y | 104 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/44x/ebony_defconfig b/arch/powerpc/configs/44x/ebony_defconfig index ca17b1496e32..69f5633cbd4f 100644 --- a/arch/powerpc/configs/44x/ebony_defconfig +++ b/arch/powerpc/configs/44x/ebony_defconfig | |||
@@ -101,8 +101,7 @@ CONFIG_FAIR_GROUP_SCHED=y | |||
101 | CONFIG_USER_SCHED=y | 101 | CONFIG_USER_SCHED=y |
102 | # CONFIG_CGROUP_SCHED is not set | 102 | # CONFIG_CGROUP_SCHED is not set |
103 | # CONFIG_CGROUPS is not set | 103 | # CONFIG_CGROUPS is not set |
104 | CONFIG_SYSFS_DEPRECATED=y | 104 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
105 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
106 | # CONFIG_RELAY is not set | 105 | # CONFIG_RELAY is not set |
107 | # CONFIG_NAMESPACES is not set | 106 | # CONFIG_NAMESPACES is not set |
108 | CONFIG_BLK_DEV_INITRD=y | 107 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/44x/eiger_defconfig b/arch/powerpc/configs/44x/eiger_defconfig index e3149bade0b2..dcd859c8b4a6 100644 --- a/arch/powerpc/configs/44x/eiger_defconfig +++ b/arch/powerpc/configs/44x/eiger_defconfig | |||
@@ -98,8 +98,7 @@ CONFIG_RCU_FANOUT=32 | |||
98 | CONFIG_LOG_BUF_SHIFT=14 | 98 | CONFIG_LOG_BUF_SHIFT=14 |
99 | # CONFIG_GROUP_SCHED is not set | 99 | # CONFIG_GROUP_SCHED is not set |
100 | # CONFIG_CGROUPS is not set | 100 | # CONFIG_CGROUPS is not set |
101 | CONFIG_SYSFS_DEPRECATED=y | 101 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
102 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
103 | # CONFIG_RELAY is not set | 102 | # CONFIG_RELAY is not set |
104 | # CONFIG_NAMESPACES is not set | 103 | # CONFIG_NAMESPACES is not set |
105 | CONFIG_BLK_DEV_INITRD=y | 104 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/44x/icon_defconfig b/arch/powerpc/configs/44x/icon_defconfig new file mode 100644 index 000000000000..277f88c2750f --- /dev/null +++ b/arch/powerpc/configs/44x/icon_defconfig | |||
@@ -0,0 +1,1451 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.34-rc7 | ||
4 | # Fri May 21 17:40:22 2010 | ||
5 | # | ||
6 | # CONFIG_PPC64 is not set | ||
7 | |||
8 | # | ||
9 | # Processor support | ||
10 | # | ||
11 | # CONFIG_PPC_BOOK3S_32 is not set | ||
12 | # CONFIG_PPC_85xx is not set | ||
13 | # CONFIG_PPC_8xx is not set | ||
14 | # CONFIG_40x is not set | ||
15 | CONFIG_44x=y | ||
16 | # CONFIG_E200 is not set | ||
17 | CONFIG_4xx=y | ||
18 | CONFIG_BOOKE=y | ||
19 | CONFIG_PTE_64BIT=y | ||
20 | CONFIG_PHYS_64BIT=y | ||
21 | CONFIG_PPC_MMU_NOHASH=y | ||
22 | CONFIG_PPC_MMU_NOHASH_32=y | ||
23 | # CONFIG_PPC_MM_SLICES is not set | ||
24 | CONFIG_NOT_COHERENT_CACHE=y | ||
25 | CONFIG_PPC32=y | ||
26 | CONFIG_WORD_SIZE=32 | ||
27 | CONFIG_ARCH_PHYS_ADDR_T_64BIT=y | ||
28 | CONFIG_MMU=y | ||
29 | CONFIG_GENERIC_CMOS_UPDATE=y | ||
30 | CONFIG_GENERIC_TIME=y | ||
31 | CONFIG_GENERIC_TIME_VSYSCALL=y | ||
32 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
33 | CONFIG_GENERIC_HARDIRQS=y | ||
34 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y | ||
35 | # CONFIG_HAVE_SETUP_PER_CPU_AREA is not set | ||
36 | # CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK is not set | ||
37 | CONFIG_IRQ_PER_CPU=y | ||
38 | CONFIG_NR_IRQS=512 | ||
39 | CONFIG_STACKTRACE_SUPPORT=y | ||
40 | CONFIG_HAVE_LATENCYTOP_SUPPORT=y | ||
41 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
42 | CONFIG_LOCKDEP_SUPPORT=y | ||
43 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | ||
44 | CONFIG_ARCH_HAS_ILOG2_U32=y | ||
45 | CONFIG_GENERIC_HWEIGHT=y | ||
46 | CONFIG_GENERIC_FIND_NEXT_BIT=y | ||
47 | # CONFIG_ARCH_NO_VIRT_TO_BUS is not set | ||
48 | CONFIG_PPC=y | ||
49 | CONFIG_EARLY_PRINTK=y | ||
50 | CONFIG_GENERIC_NVRAM=y | ||
51 | CONFIG_SCHED_OMIT_FRAME_POINTER=y | ||
52 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y | ||
53 | CONFIG_PPC_OF=y | ||
54 | CONFIG_OF=y | ||
55 | CONFIG_PPC_UDBG_16550=y | ||
56 | # CONFIG_GENERIC_TBSYNC is not set | ||
57 | CONFIG_AUDIT_ARCH=y | ||
58 | CONFIG_GENERIC_BUG=y | ||
59 | CONFIG_DTC=y | ||
60 | # CONFIG_DEFAULT_UIMAGE is not set | ||
61 | CONFIG_ARCH_HIBERNATION_POSSIBLE=y | ||
62 | CONFIG_PPC_DCR_NATIVE=y | ||
63 | # CONFIG_PPC_DCR_MMIO is not set | ||
64 | CONFIG_PPC_DCR=y | ||
65 | CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y | ||
66 | CONFIG_PPC_ADV_DEBUG_REGS=y | ||
67 | CONFIG_PPC_ADV_DEBUG_IACS=4 | ||
68 | CONFIG_PPC_ADV_DEBUG_DACS=2 | ||
69 | CONFIG_PPC_ADV_DEBUG_DVCS=2 | ||
70 | CONFIG_PPC_ADV_DEBUG_DAC_RANGE=y | ||
71 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
72 | CONFIG_CONSTRUCTORS=y | ||
73 | |||
74 | # | ||
75 | # General setup | ||
76 | # | ||
77 | CONFIG_EXPERIMENTAL=y | ||
78 | CONFIG_BROKEN_ON_SMP=y | ||
79 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
80 | CONFIG_LOCALVERSION="" | ||
81 | CONFIG_LOCALVERSION_AUTO=y | ||
82 | CONFIG_SWAP=y | ||
83 | CONFIG_SYSVIPC=y | ||
84 | CONFIG_SYSVIPC_SYSCTL=y | ||
85 | CONFIG_POSIX_MQUEUE=y | ||
86 | CONFIG_POSIX_MQUEUE_SYSCTL=y | ||
87 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
88 | # CONFIG_TASKSTATS is not set | ||
89 | # CONFIG_AUDIT is not set | ||
90 | |||
91 | # | ||
92 | # RCU Subsystem | ||
93 | # | ||
94 | CONFIG_TREE_RCU=y | ||
95 | # CONFIG_TREE_PREEMPT_RCU is not set | ||
96 | # CONFIG_TINY_RCU is not set | ||
97 | # CONFIG_RCU_TRACE is not set | ||
98 | CONFIG_RCU_FANOUT=32 | ||
99 | # CONFIG_RCU_FANOUT_EXACT is not set | ||
100 | # CONFIG_TREE_RCU_TRACE is not set | ||
101 | # CONFIG_IKCONFIG is not set | ||
102 | CONFIG_LOG_BUF_SHIFT=14 | ||
103 | # CONFIG_CGROUPS is not set | ||
104 | CONFIG_SYSFS_DEPRECATED=y | ||
105 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
106 | # CONFIG_RELAY is not set | ||
107 | # CONFIG_NAMESPACES is not set | ||
108 | CONFIG_BLK_DEV_INITRD=y | ||
109 | CONFIG_INITRAMFS_SOURCE="" | ||
110 | CONFIG_RD_GZIP=y | ||
111 | # CONFIG_RD_BZIP2 is not set | ||
112 | # CONFIG_RD_LZMA is not set | ||
113 | # CONFIG_RD_LZO is not set | ||
114 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
115 | CONFIG_SYSCTL=y | ||
116 | CONFIG_ANON_INODES=y | ||
117 | CONFIG_EMBEDDED=y | ||
118 | CONFIG_SYSCTL_SYSCALL=y | ||
119 | CONFIG_KALLSYMS=y | ||
120 | # CONFIG_KALLSYMS_ALL is not set | ||
121 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
122 | CONFIG_HOTPLUG=y | ||
123 | CONFIG_PRINTK=y | ||
124 | # CONFIG_LOGBUFFER is not set | ||
125 | CONFIG_BUG=y | ||
126 | CONFIG_ELF_CORE=y | ||
127 | CONFIG_BASE_FULL=y | ||
128 | CONFIG_FUTEX=y | ||
129 | CONFIG_EPOLL=y | ||
130 | CONFIG_SIGNALFD=y | ||
131 | CONFIG_TIMERFD=y | ||
132 | CONFIG_EVENTFD=y | ||
133 | CONFIG_SHMEM=y | ||
134 | CONFIG_AIO=y | ||
135 | CONFIG_HAVE_PERF_EVENTS=y | ||
136 | |||
137 | # | ||
138 | # Kernel Performance Events And Counters | ||
139 | # | ||
140 | # CONFIG_PERF_EVENTS is not set | ||
141 | # CONFIG_PERF_COUNTERS is not set | ||
142 | CONFIG_VM_EVENT_COUNTERS=y | ||
143 | CONFIG_PCI_QUIRKS=y | ||
144 | CONFIG_SLUB_DEBUG=y | ||
145 | CONFIG_COMPAT_BRK=y | ||
146 | # CONFIG_SLAB is not set | ||
147 | CONFIG_SLUB=y | ||
148 | # CONFIG_SLOB is not set | ||
149 | # CONFIG_PROFILING is not set | ||
150 | CONFIG_HAVE_OPROFILE=y | ||
151 | # CONFIG_KPROBES is not set | ||
152 | CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y | ||
153 | CONFIG_HAVE_IOREMAP_PROT=y | ||
154 | CONFIG_HAVE_KPROBES=y | ||
155 | CONFIG_HAVE_KRETPROBES=y | ||
156 | CONFIG_HAVE_ARCH_TRACEHOOK=y | ||
157 | CONFIG_HAVE_DMA_ATTRS=y | ||
158 | CONFIG_HAVE_DMA_API_DEBUG=y | ||
159 | |||
160 | # | ||
161 | # GCOV-based kernel profiling | ||
162 | # | ||
163 | # CONFIG_SLOW_WORK is not set | ||
164 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | ||
165 | CONFIG_SLABINFO=y | ||
166 | CONFIG_RT_MUTEXES=y | ||
167 | CONFIG_BASE_SMALL=0 | ||
168 | CONFIG_MODULES=y | ||
169 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
170 | CONFIG_MODULE_UNLOAD=y | ||
171 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
172 | # CONFIG_MODVERSIONS is not set | ||
173 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
174 | CONFIG_BLOCK=y | ||
175 | CONFIG_LBDAF=y | ||
176 | # CONFIG_BLK_DEV_BSG is not set | ||
177 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
178 | |||
179 | # | ||
180 | # IO Schedulers | ||
181 | # | ||
182 | CONFIG_IOSCHED_NOOP=y | ||
183 | CONFIG_IOSCHED_DEADLINE=y | ||
184 | CONFIG_IOSCHED_CFQ=y | ||
185 | # CONFIG_DEFAULT_DEADLINE is not set | ||
186 | CONFIG_DEFAULT_CFQ=y | ||
187 | # CONFIG_DEFAULT_NOOP is not set | ||
188 | CONFIG_DEFAULT_IOSCHED="cfq" | ||
189 | # CONFIG_INLINE_SPIN_TRYLOCK is not set | ||
190 | # CONFIG_INLINE_SPIN_TRYLOCK_BH is not set | ||
191 | # CONFIG_INLINE_SPIN_LOCK is not set | ||
192 | # CONFIG_INLINE_SPIN_LOCK_BH is not set | ||
193 | # CONFIG_INLINE_SPIN_LOCK_IRQ is not set | ||
194 | # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set | ||
195 | CONFIG_INLINE_SPIN_UNLOCK=y | ||
196 | # CONFIG_INLINE_SPIN_UNLOCK_BH is not set | ||
197 | CONFIG_INLINE_SPIN_UNLOCK_IRQ=y | ||
198 | # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set | ||
199 | # CONFIG_INLINE_READ_TRYLOCK is not set | ||
200 | # CONFIG_INLINE_READ_LOCK is not set | ||
201 | # CONFIG_INLINE_READ_LOCK_BH is not set | ||
202 | # CONFIG_INLINE_READ_LOCK_IRQ is not set | ||
203 | # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set | ||
204 | CONFIG_INLINE_READ_UNLOCK=y | ||
205 | # CONFIG_INLINE_READ_UNLOCK_BH is not set | ||
206 | CONFIG_INLINE_READ_UNLOCK_IRQ=y | ||
207 | # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set | ||
208 | # CONFIG_INLINE_WRITE_TRYLOCK is not set | ||
209 | # CONFIG_INLINE_WRITE_LOCK is not set | ||
210 | # CONFIG_INLINE_WRITE_LOCK_BH is not set | ||
211 | # CONFIG_INLINE_WRITE_LOCK_IRQ is not set | ||
212 | # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set | ||
213 | CONFIG_INLINE_WRITE_UNLOCK=y | ||
214 | # CONFIG_INLINE_WRITE_UNLOCK_BH is not set | ||
215 | CONFIG_INLINE_WRITE_UNLOCK_IRQ=y | ||
216 | # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set | ||
217 | # CONFIG_MUTEX_SPIN_ON_OWNER is not set | ||
218 | # CONFIG_FREEZER is not set | ||
219 | CONFIG_PPC4xx_PCI_EXPRESS=y | ||
220 | |||
221 | # | ||
222 | # Platform support | ||
223 | # | ||
224 | # CONFIG_PPC_CELL is not set | ||
225 | # CONFIG_PPC_CELL_NATIVE is not set | ||
226 | # CONFIG_PQ2ADS is not set | ||
227 | # CONFIG_BAMBOO is not set | ||
228 | # CONFIG_EBONY is not set | ||
229 | # CONFIG_SAM440EP is not set | ||
230 | # CONFIG_SEQUOIA is not set | ||
231 | # CONFIG_TAISHAN is not set | ||
232 | # CONFIG_KATMAI is not set | ||
233 | # CONFIG_RAINIER is not set | ||
234 | # CONFIG_WARP is not set | ||
235 | # CONFIG_ARCHES is not set | ||
236 | # CONFIG_CANYONLANDS is not set | ||
237 | # CONFIG_GLACIER is not set | ||
238 | # CONFIG_REDWOOD is not set | ||
239 | # CONFIG_EIGER is not set | ||
240 | # CONFIG_YOSEMITE is not set | ||
241 | CONFIG_ICON=y | ||
242 | # CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set | ||
243 | CONFIG_PPC44x_SIMPLE=y | ||
244 | # CONFIG_PPC4xx_GPIO is not set | ||
245 | CONFIG_440SPe=y | ||
246 | CONFIG_STDBINUTILS=y | ||
247 | # CONFIG_IPIC is not set | ||
248 | # CONFIG_MPIC is not set | ||
249 | # CONFIG_MPIC_WEIRD is not set | ||
250 | # CONFIG_PPC_I8259 is not set | ||
251 | # CONFIG_PPC_RTAS is not set | ||
252 | # CONFIG_MMIO_NVRAM is not set | ||
253 | # CONFIG_PPC_MPC106 is not set | ||
254 | # CONFIG_PPC_970_NAP is not set | ||
255 | # CONFIG_PPC_INDIRECT_IO is not set | ||
256 | # CONFIG_GENERIC_IOMAP is not set | ||
257 | # CONFIG_CPU_FREQ is not set | ||
258 | # CONFIG_FSL_ULI1575 is not set | ||
259 | # CONFIG_SIMPLE_GPIO is not set | ||
260 | |||
261 | # | ||
262 | # Kernel options | ||
263 | # | ||
264 | CONFIG_HIGHMEM=y | ||
265 | # CONFIG_NO_HZ is not set | ||
266 | # CONFIG_HIGH_RES_TIMERS is not set | ||
267 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
268 | # CONFIG_HZ_100 is not set | ||
269 | CONFIG_HZ_250=y | ||
270 | # CONFIG_HZ_300 is not set | ||
271 | # CONFIG_HZ_1000 is not set | ||
272 | CONFIG_HZ=250 | ||
273 | # CONFIG_SCHED_HRTICK is not set | ||
274 | CONFIG_PREEMPT_NONE=y | ||
275 | # CONFIG_PREEMPT_VOLUNTARY is not set | ||
276 | # CONFIG_PREEMPT is not set | ||
277 | CONFIG_BINFMT_ELF=y | ||
278 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
279 | # CONFIG_HAVE_AOUT is not set | ||
280 | # CONFIG_BINFMT_MISC is not set | ||
281 | # CONFIG_MATH_EMULATION is not set | ||
282 | # CONFIG_IOMMU_HELPER is not set | ||
283 | # CONFIG_SWIOTLB is not set | ||
284 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | ||
285 | CONFIG_ARCH_HAS_WALK_MEMORY=y | ||
286 | CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y | ||
287 | CONFIG_SPARSE_IRQ=y | ||
288 | CONFIG_MAX_ACTIVE_REGIONS=32 | ||
289 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
290 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
291 | CONFIG_SELECT_MEMORY_MODEL=y | ||
292 | CONFIG_FLATMEM_MANUAL=y | ||
293 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
294 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
295 | CONFIG_FLATMEM=y | ||
296 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
297 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
298 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
299 | CONFIG_MIGRATION=y | ||
300 | CONFIG_PHYS_ADDR_T_64BIT=y | ||
301 | CONFIG_ZONE_DMA_FLAG=1 | ||
302 | CONFIG_BOUNCE=y | ||
303 | CONFIG_VIRT_TO_BUS=y | ||
304 | # CONFIG_KSM is not set | ||
305 | CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 | ||
306 | CONFIG_PPC_4K_PAGES=y | ||
307 | # CONFIG_PPC_16K_PAGES is not set | ||
308 | # CONFIG_PPC_64K_PAGES is not set | ||
309 | # CONFIG_PPC_256K_PAGES is not set | ||
310 | CONFIG_FORCE_MAX_ZONEORDER=11 | ||
311 | CONFIG_PROC_DEVICETREE=y | ||
312 | CONFIG_CMDLINE_BOOL=y | ||
313 | CONFIG_CMDLINE="" | ||
314 | CONFIG_EXTRA_TARGETS="" | ||
315 | # CONFIG_ARCH_HAS_NMI_WATCHDOG is not set | ||
316 | CONFIG_SECCOMP=y | ||
317 | CONFIG_ISA_DMA_API=y | ||
318 | |||
319 | # | ||
320 | # Bus options | ||
321 | # | ||
322 | CONFIG_ZONE_DMA=y | ||
323 | CONFIG_NEED_DMA_MAP_STATE=y | ||
324 | CONFIG_PPC_INDIRECT_PCI=y | ||
325 | CONFIG_4xx_SOC=y | ||
326 | CONFIG_PPC_PCI_CHOICE=y | ||
327 | CONFIG_PCI=y | ||
328 | CONFIG_PCI_DOMAINS=y | ||
329 | CONFIG_PCI_SYSCALL=y | ||
330 | CONFIG_PCIEPORTBUS=y | ||
331 | CONFIG_PCIEAER=y | ||
332 | # CONFIG_PCIE_ECRC is not set | ||
333 | # CONFIG_PCIEAER_INJECT is not set | ||
334 | # CONFIG_PCIEASPM is not set | ||
335 | CONFIG_ARCH_SUPPORTS_MSI=y | ||
336 | # CONFIG_PCI_MSI is not set | ||
337 | # CONFIG_PCI_DEBUG is not set | ||
338 | # CONFIG_PCI_STUB is not set | ||
339 | # CONFIG_PCI_IOV is not set | ||
340 | # CONFIG_PCCARD is not set | ||
341 | # CONFIG_HOTPLUG_PCI is not set | ||
342 | # CONFIG_HAS_RAPIDIO is not set | ||
343 | |||
344 | # | ||
345 | # Advanced setup | ||
346 | # | ||
347 | # CONFIG_ADVANCED_OPTIONS is not set | ||
348 | |||
349 | # | ||
350 | # Default settings for advanced configuration options are used | ||
351 | # | ||
352 | CONFIG_LOWMEM_SIZE=0x30000000 | ||
353 | CONFIG_PAGE_OFFSET=0xc0000000 | ||
354 | CONFIG_KERNEL_START=0xc0000000 | ||
355 | CONFIG_PHYSICAL_START=0x00000000 | ||
356 | CONFIG_TASK_SIZE=0xc0000000 | ||
357 | CONFIG_CONSISTENT_SIZE=0x00200000 | ||
358 | CONFIG_NET=y | ||
359 | |||
360 | # | ||
361 | # Networking options | ||
362 | # | ||
363 | CONFIG_PACKET=y | ||
364 | CONFIG_UNIX=y | ||
365 | # CONFIG_NET_KEY is not set | ||
366 | CONFIG_INET=y | ||
367 | # CONFIG_IP_MULTICAST is not set | ||
368 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
369 | CONFIG_IP_FIB_HASH=y | ||
370 | CONFIG_IP_PNP=y | ||
371 | CONFIG_IP_PNP_DHCP=y | ||
372 | CONFIG_IP_PNP_BOOTP=y | ||
373 | # CONFIG_IP_PNP_RARP is not set | ||
374 | # CONFIG_NET_IPIP is not set | ||
375 | # CONFIG_NET_IPGRE is not set | ||
376 | # CONFIG_ARPD is not set | ||
377 | # CONFIG_SYN_COOKIES is not set | ||
378 | # CONFIG_INET_AH is not set | ||
379 | # CONFIG_INET_ESP is not set | ||
380 | # CONFIG_INET_IPCOMP is not set | ||
381 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
382 | # CONFIG_INET_TUNNEL is not set | ||
383 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | ||
384 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | ||
385 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
386 | # CONFIG_INET_LRO is not set | ||
387 | CONFIG_INET_DIAG=y | ||
388 | CONFIG_INET_TCP_DIAG=y | ||
389 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
390 | CONFIG_TCP_CONG_CUBIC=y | ||
391 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
392 | # CONFIG_TCP_MD5SIG is not set | ||
393 | # CONFIG_IPV6 is not set | ||
394 | # CONFIG_NETWORK_SECMARK is not set | ||
395 | # CONFIG_NETFILTER is not set | ||
396 | # CONFIG_IP_DCCP is not set | ||
397 | # CONFIG_IP_SCTP is not set | ||
398 | # CONFIG_RDS is not set | ||
399 | # CONFIG_TIPC is not set | ||
400 | # CONFIG_ATM is not set | ||
401 | # CONFIG_BRIDGE is not set | ||
402 | # CONFIG_NET_DSA is not set | ||
403 | # CONFIG_VLAN_8021Q is not set | ||
404 | # CONFIG_DECNET is not set | ||
405 | # CONFIG_LLC2 is not set | ||
406 | # CONFIG_IPX is not set | ||
407 | # CONFIG_ATALK is not set | ||
408 | # CONFIG_X25 is not set | ||
409 | # CONFIG_LAPB is not set | ||
410 | # CONFIG_ECONET is not set | ||
411 | # CONFIG_WAN_ROUTER is not set | ||
412 | # CONFIG_PHONET is not set | ||
413 | # CONFIG_IEEE802154 is not set | ||
414 | # CONFIG_NET_SCHED is not set | ||
415 | # CONFIG_DCB is not set | ||
416 | |||
417 | # | ||
418 | # Network testing | ||
419 | # | ||
420 | # CONFIG_NET_PKTGEN is not set | ||
421 | # CONFIG_HAMRADIO is not set | ||
422 | # CONFIG_CAN is not set | ||
423 | # CONFIG_IRDA is not set | ||
424 | # CONFIG_BT is not set | ||
425 | # CONFIG_AF_RXRPC is not set | ||
426 | CONFIG_WIRELESS=y | ||
427 | # CONFIG_CFG80211 is not set | ||
428 | # CONFIG_LIB80211 is not set | ||
429 | |||
430 | # | ||
431 | # CFG80211 needs to be enabled for MAC80211 | ||
432 | # | ||
433 | # CONFIG_WIMAX is not set | ||
434 | # CONFIG_RFKILL is not set | ||
435 | # CONFIG_NET_9P is not set | ||
436 | |||
437 | # | ||
438 | # Device Drivers | ||
439 | # | ||
440 | |||
441 | # | ||
442 | # Generic Driver Options | ||
443 | # | ||
444 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
445 | # CONFIG_DEVTMPFS is not set | ||
446 | CONFIG_STANDALONE=y | ||
447 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
448 | CONFIG_FW_LOADER=y | ||
449 | CONFIG_FIRMWARE_IN_KERNEL=y | ||
450 | CONFIG_EXTRA_FIRMWARE="" | ||
451 | # CONFIG_DEBUG_DRIVER is not set | ||
452 | # CONFIG_DEBUG_DEVRES is not set | ||
453 | # CONFIG_SYS_HYPERVISOR is not set | ||
454 | CONFIG_CONNECTOR=y | ||
455 | CONFIG_PROC_EVENTS=y | ||
456 | CONFIG_MTD=y | ||
457 | # CONFIG_MTD_DEBUG is not set | ||
458 | # CONFIG_MTD_TESTS is not set | ||
459 | # CONFIG_MTD_CONCAT is not set | ||
460 | CONFIG_MTD_PARTITIONS=y | ||
461 | # CONFIG_MTD_REDBOOT_PARTS is not set | ||
462 | CONFIG_MTD_CMDLINE_PARTS=y | ||
463 | CONFIG_MTD_OF_PARTS=y | ||
464 | # CONFIG_MTD_AR7_PARTS is not set | ||
465 | |||
466 | # | ||
467 | # User Modules And Translation Layers | ||
468 | # | ||
469 | CONFIG_MTD_CHAR=y | ||
470 | CONFIG_MTD_BLKDEVS=y | ||
471 | CONFIG_MTD_BLOCK=y | ||
472 | # CONFIG_FTL is not set | ||
473 | # CONFIG_NFTL is not set | ||
474 | # CONFIG_INFTL is not set | ||
475 | # CONFIG_RFD_FTL is not set | ||
476 | # CONFIG_SSFDC is not set | ||
477 | # CONFIG_MTD_OOPS is not set | ||
478 | |||
479 | # | ||
480 | # RAM/ROM/Flash chip drivers | ||
481 | # | ||
482 | CONFIG_MTD_CFI=y | ||
483 | # CONFIG_MTD_JEDECPROBE is not set | ||
484 | CONFIG_MTD_GEN_PROBE=y | ||
485 | # CONFIG_MTD_CFI_ADV_OPTIONS is not set | ||
486 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
487 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
488 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
489 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
490 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
491 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
492 | CONFIG_MTD_CFI_I1=y | ||
493 | CONFIG_MTD_CFI_I2=y | ||
494 | # CONFIG_MTD_CFI_I4 is not set | ||
495 | # CONFIG_MTD_CFI_I8 is not set | ||
496 | # CONFIG_MTD_CFI_INTELEXT is not set | ||
497 | CONFIG_MTD_CFI_AMDSTD=y | ||
498 | # CONFIG_MTD_CFI_STAA is not set | ||
499 | CONFIG_MTD_CFI_UTIL=y | ||
500 | # CONFIG_MTD_RAM is not set | ||
501 | # CONFIG_MTD_ROM is not set | ||
502 | # CONFIG_MTD_ABSENT is not set | ||
503 | |||
504 | # | ||
505 | # Mapping drivers for chip access | ||
506 | # | ||
507 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
508 | # CONFIG_MTD_PHYSMAP is not set | ||
509 | CONFIG_MTD_PHYSMAP_OF=y | ||
510 | # CONFIG_MTD_INTEL_VR_NOR is not set | ||
511 | # CONFIG_MTD_PLATRAM is not set | ||
512 | |||
513 | # | ||
514 | # Self-contained MTD device drivers | ||
515 | # | ||
516 | # CONFIG_MTD_PMC551 is not set | ||
517 | # CONFIG_MTD_SLRAM is not set | ||
518 | # CONFIG_MTD_PHRAM is not set | ||
519 | # CONFIG_MTD_MTDRAM is not set | ||
520 | # CONFIG_MTD_BLOCK2MTD is not set | ||
521 | |||
522 | # | ||
523 | # Disk-On-Chip Device Drivers | ||
524 | # | ||
525 | # CONFIG_MTD_DOC2000 is not set | ||
526 | # CONFIG_MTD_DOC2001 is not set | ||
527 | # CONFIG_MTD_DOC2001PLUS is not set | ||
528 | # CONFIG_MTD_NAND is not set | ||
529 | # CONFIG_MTD_ONENAND is not set | ||
530 | |||
531 | # | ||
532 | # LPDDR flash memory drivers | ||
533 | # | ||
534 | # CONFIG_MTD_LPDDR is not set | ||
535 | |||
536 | # | ||
537 | # UBI - Unsorted block images | ||
538 | # | ||
539 | # CONFIG_MTD_UBI is not set | ||
540 | CONFIG_OF_FLATTREE=y | ||
541 | CONFIG_OF_DYNAMIC=y | ||
542 | CONFIG_OF_DEVICE=y | ||
543 | CONFIG_OF_I2C=y | ||
544 | # CONFIG_PARPORT is not set | ||
545 | CONFIG_BLK_DEV=y | ||
546 | # CONFIG_BLK_DEV_FD is not set | ||
547 | # CONFIG_BLK_CPQ_DA is not set | ||
548 | # CONFIG_BLK_CPQ_CISS_DA is not set | ||
549 | # CONFIG_BLK_DEV_DAC960 is not set | ||
550 | # CONFIG_BLK_DEV_UMEM is not set | ||
551 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
552 | # CONFIG_BLK_DEV_LOOP is not set | ||
553 | # CONFIG_BLK_DEV_DRBD is not set | ||
554 | # CONFIG_BLK_DEV_NBD is not set | ||
555 | # CONFIG_BLK_DEV_SX8 is not set | ||
556 | CONFIG_BLK_DEV_RAM=y | ||
557 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
558 | CONFIG_BLK_DEV_RAM_SIZE=35000 | ||
559 | # CONFIG_BLK_DEV_XIP is not set | ||
560 | # CONFIG_CDROM_PKTCDVD is not set | ||
561 | # CONFIG_ATA_OVER_ETH is not set | ||
562 | CONFIG_XILINX_SYSACE=y | ||
563 | # CONFIG_BLK_DEV_HD is not set | ||
564 | # CONFIG_MISC_DEVICES is not set | ||
565 | CONFIG_HAVE_IDE=y | ||
566 | # CONFIG_IDE is not set | ||
567 | |||
568 | # | ||
569 | # SCSI device support | ||
570 | # | ||
571 | CONFIG_SCSI_MOD=y | ||
572 | # CONFIG_RAID_ATTRS is not set | ||
573 | CONFIG_SCSI=y | ||
574 | CONFIG_SCSI_DMA=y | ||
575 | # CONFIG_SCSI_TGT is not set | ||
576 | # CONFIG_SCSI_NETLINK is not set | ||
577 | CONFIG_SCSI_PROC_FS=y | ||
578 | |||
579 | # | ||
580 | # SCSI support type (disk, tape, CD-ROM) | ||
581 | # | ||
582 | CONFIG_BLK_DEV_SD=y | ||
583 | # CONFIG_CHR_DEV_ST is not set | ||
584 | # CONFIG_CHR_DEV_OSST is not set | ||
585 | # CONFIG_BLK_DEV_SR is not set | ||
586 | # CONFIG_CHR_DEV_SG is not set | ||
587 | # CONFIG_CHR_DEV_SCH is not set | ||
588 | # CONFIG_SCSI_MULTI_LUN is not set | ||
589 | CONFIG_SCSI_CONSTANTS=y | ||
590 | CONFIG_SCSI_LOGGING=y | ||
591 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
592 | CONFIG_SCSI_WAIT_SCAN=m | ||
593 | |||
594 | # | ||
595 | # SCSI Transports | ||
596 | # | ||
597 | # CONFIG_SCSI_SPI_ATTRS is not set | ||
598 | # CONFIG_SCSI_FC_ATTRS is not set | ||
599 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
600 | CONFIG_SCSI_SAS_ATTRS=y | ||
601 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
602 | # CONFIG_SCSI_SRP_ATTRS is not set | ||
603 | # CONFIG_SCSI_LOWLEVEL is not set | ||
604 | # CONFIG_SCSI_DH is not set | ||
605 | # CONFIG_SCSI_OSD_INITIATOR is not set | ||
606 | # CONFIG_ATA is not set | ||
607 | # CONFIG_MD is not set | ||
608 | CONFIG_FUSION=y | ||
609 | # CONFIG_FUSION_SPI is not set | ||
610 | # CONFIG_FUSION_FC is not set | ||
611 | CONFIG_FUSION_SAS=y | ||
612 | CONFIG_FUSION_MAX_SGE=128 | ||
613 | CONFIG_FUSION_CTL=y | ||
614 | CONFIG_FUSION_LOGGING=y | ||
615 | |||
616 | # | ||
617 | # IEEE 1394 (FireWire) support | ||
618 | # | ||
619 | |||
620 | # | ||
621 | # You can enable one or both FireWire driver stacks. | ||
622 | # | ||
623 | |||
624 | # | ||
625 | # The newer stack is recommended. | ||
626 | # | ||
627 | # CONFIG_FIREWIRE is not set | ||
628 | # CONFIG_IEEE1394 is not set | ||
629 | # CONFIG_I2O is not set | ||
630 | # CONFIG_MACINTOSH_DRIVERS is not set | ||
631 | CONFIG_NETDEVICES=y | ||
632 | # CONFIG_DUMMY is not set | ||
633 | # CONFIG_BONDING is not set | ||
634 | # CONFIG_MACVLAN is not set | ||
635 | # CONFIG_EQUALIZER is not set | ||
636 | # CONFIG_TUN is not set | ||
637 | # CONFIG_VETH is not set | ||
638 | # CONFIG_ARCNET is not set | ||
639 | # CONFIG_PHYLIB is not set | ||
640 | CONFIG_NET_ETHERNET=y | ||
641 | # CONFIG_MII is not set | ||
642 | # CONFIG_HAPPYMEAL is not set | ||
643 | # CONFIG_SUNGEM is not set | ||
644 | # CONFIG_CASSINI is not set | ||
645 | # CONFIG_NET_VENDOR_3COM is not set | ||
646 | # CONFIG_ETHOC is not set | ||
647 | # CONFIG_DNET is not set | ||
648 | # CONFIG_NET_TULIP is not set | ||
649 | # CONFIG_HP100 is not set | ||
650 | CONFIG_IBM_NEW_EMAC=y | ||
651 | CONFIG_IBM_NEW_EMAC_RXB=128 | ||
652 | CONFIG_IBM_NEW_EMAC_TXB=64 | ||
653 | CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32 | ||
654 | CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256 | ||
655 | CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0 | ||
656 | # CONFIG_IBM_NEW_EMAC_DEBUG is not set | ||
657 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||
658 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | ||
659 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
660 | CONFIG_IBM_NEW_EMAC_EMAC4=y | ||
661 | # CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set | ||
662 | # CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set | ||
663 | # CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set | ||
664 | # CONFIG_NET_PCI is not set | ||
665 | # CONFIG_B44 is not set | ||
666 | # CONFIG_KS8842 is not set | ||
667 | # CONFIG_KS8851_MLL is not set | ||
668 | # CONFIG_ATL2 is not set | ||
669 | # CONFIG_XILINX_EMACLITE is not set | ||
670 | # CONFIG_NETDEV_1000 is not set | ||
671 | # CONFIG_NETDEV_10000 is not set | ||
672 | # CONFIG_TR is not set | ||
673 | # CONFIG_WLAN is not set | ||
674 | |||
675 | # | ||
676 | # Enable WiMAX (Networking options) to see the WiMAX drivers | ||
677 | # | ||
678 | # CONFIG_WAN is not set | ||
679 | # CONFIG_FDDI is not set | ||
680 | # CONFIG_HIPPI is not set | ||
681 | # CONFIG_PPP is not set | ||
682 | # CONFIG_SLIP is not set | ||
683 | # CONFIG_NET_FC is not set | ||
684 | # CONFIG_NETCONSOLE is not set | ||
685 | # CONFIG_NETPOLL is not set | ||
686 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
687 | # CONFIG_VMXNET3 is not set | ||
688 | # CONFIG_ISDN is not set | ||
689 | # CONFIG_PHONE is not set | ||
690 | |||
691 | # | ||
692 | # Input device support | ||
693 | # | ||
694 | CONFIG_INPUT=y | ||
695 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
696 | # CONFIG_INPUT_POLLDEV is not set | ||
697 | # CONFIG_INPUT_SPARSEKMAP is not set | ||
698 | |||
699 | # | ||
700 | # Userland interfaces | ||
701 | # | ||
702 | CONFIG_INPUT_MOUSEDEV=y | ||
703 | CONFIG_INPUT_MOUSEDEV_PSAUX=y | ||
704 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=640 | ||
705 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480 | ||
706 | # CONFIG_INPUT_JOYDEV is not set | ||
707 | # CONFIG_INPUT_EVDEV is not set | ||
708 | # CONFIG_INPUT_EVBUG is not set | ||
709 | |||
710 | # | ||
711 | # Input Device Drivers | ||
712 | # | ||
713 | CONFIG_INPUT_KEYBOARD=y | ||
714 | # CONFIG_KEYBOARD_ADP5588 is not set | ||
715 | CONFIG_KEYBOARD_ATKBD=y | ||
716 | # CONFIG_QT2160 is not set | ||
717 | # CONFIG_KEYBOARD_LKKBD is not set | ||
718 | # CONFIG_KEYBOARD_MAX7359 is not set | ||
719 | # CONFIG_KEYBOARD_NEWTON is not set | ||
720 | # CONFIG_KEYBOARD_OPENCORES is not set | ||
721 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
722 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
723 | # CONFIG_KEYBOARD_XTKBD is not set | ||
724 | CONFIG_INPUT_MOUSE=y | ||
725 | CONFIG_MOUSE_PS2=y | ||
726 | # CONFIG_MOUSE_PS2_ALPS is not set | ||
727 | # CONFIG_MOUSE_PS2_LOGIPS2PP is not set | ||
728 | # CONFIG_MOUSE_PS2_SYNAPTICS is not set | ||
729 | # CONFIG_MOUSE_PS2_TRACKPOINT is not set | ||
730 | # CONFIG_MOUSE_PS2_ELANTECH is not set | ||
731 | # CONFIG_MOUSE_PS2_SENTELIC is not set | ||
732 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set | ||
733 | # CONFIG_MOUSE_SERIAL is not set | ||
734 | # CONFIG_MOUSE_VSXXXAA is not set | ||
735 | # CONFIG_MOUSE_SYNAPTICS_I2C is not set | ||
736 | # CONFIG_INPUT_JOYSTICK is not set | ||
737 | # CONFIG_INPUT_TABLET is not set | ||
738 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
739 | # CONFIG_INPUT_MISC is not set | ||
740 | |||
741 | # | ||
742 | # Hardware I/O ports | ||
743 | # | ||
744 | CONFIG_SERIO=y | ||
745 | CONFIG_SERIO_I8042=y | ||
746 | CONFIG_SERIO_SERPORT=y | ||
747 | # CONFIG_SERIO_PCIPS2 is not set | ||
748 | CONFIG_SERIO_LIBPS2=y | ||
749 | # CONFIG_SERIO_RAW is not set | ||
750 | # CONFIG_SERIO_XILINX_XPS_PS2 is not set | ||
751 | # CONFIG_SERIO_ALTERA_PS2 is not set | ||
752 | # CONFIG_GAMEPORT is not set | ||
753 | |||
754 | # | ||
755 | # Character devices | ||
756 | # | ||
757 | CONFIG_VT=y | ||
758 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
759 | CONFIG_VT_CONSOLE=y | ||
760 | CONFIG_HW_CONSOLE=y | ||
761 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
762 | CONFIG_DEVKMEM=y | ||
763 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
764 | # CONFIG_NOZOMI is not set | ||
765 | |||
766 | # | ||
767 | # Serial drivers | ||
768 | # | ||
769 | CONFIG_SERIAL_8250=y | ||
770 | CONFIG_SERIAL_8250_CONSOLE=y | ||
771 | # CONFIG_SERIAL_8250_PCI is not set | ||
772 | CONFIG_SERIAL_8250_NR_UARTS=4 | ||
773 | CONFIG_SERIAL_8250_RUNTIME_UARTS=4 | ||
774 | CONFIG_SERIAL_8250_EXTENDED=y | ||
775 | # CONFIG_SERIAL_8250_MANY_PORTS is not set | ||
776 | CONFIG_SERIAL_8250_SHARE_IRQ=y | ||
777 | # CONFIG_SERIAL_8250_DETECT_IRQ is not set | ||
778 | # CONFIG_SERIAL_8250_RSA is not set | ||
779 | |||
780 | # | ||
781 | # Non-8250 serial port support | ||
782 | # | ||
783 | # CONFIG_SERIAL_UARTLITE is not set | ||
784 | CONFIG_SERIAL_CORE=y | ||
785 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
786 | # CONFIG_SERIAL_JSM is not set | ||
787 | CONFIG_SERIAL_OF_PLATFORM=y | ||
788 | # CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set | ||
789 | # CONFIG_SERIAL_TIMBERDALE is not set | ||
790 | # CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set | ||
791 | CONFIG_UNIX98_PTYS=y | ||
792 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | ||
793 | CONFIG_LEGACY_PTYS=y | ||
794 | CONFIG_LEGACY_PTY_COUNT=256 | ||
795 | # CONFIG_HVC_UDBG is not set | ||
796 | # CONFIG_IPMI_HANDLER is not set | ||
797 | # CONFIG_HW_RANDOM is not set | ||
798 | # CONFIG_NVRAM is not set | ||
799 | # CONFIG_R3964 is not set | ||
800 | # CONFIG_APPLICOM is not set | ||
801 | # CONFIG_RAW_DRIVER is not set | ||
802 | # CONFIG_BOOTCOUNT is not set | ||
803 | # CONFIG_DISPLAY_PDSP1880 is not set | ||
804 | # CONFIG_MUCMC52_IO is not set | ||
805 | # CONFIG_UC101_IO is not set | ||
806 | # CONFIG_SRAM is not set | ||
807 | # CONFIG_TCG_TPM is not set | ||
808 | CONFIG_DEVPORT=y | ||
809 | CONFIG_I2C=y | ||
810 | CONFIG_I2C_BOARDINFO=y | ||
811 | CONFIG_I2C_COMPAT=y | ||
812 | CONFIG_I2C_CHARDEV=y | ||
813 | CONFIG_I2C_HELPER_AUTO=y | ||
814 | |||
815 | # | ||
816 | # I2C Hardware Bus support | ||
817 | # | ||
818 | |||
819 | # | ||
820 | # PC SMBus host controller drivers | ||
821 | # | ||
822 | # CONFIG_I2C_ALI1535 is not set | ||
823 | # CONFIG_I2C_ALI1563 is not set | ||
824 | # CONFIG_I2C_ALI15X3 is not set | ||
825 | # CONFIG_I2C_AMD756 is not set | ||
826 | # CONFIG_I2C_AMD8111 is not set | ||
827 | # CONFIG_I2C_I801 is not set | ||
828 | # CONFIG_I2C_ISCH is not set | ||
829 | # CONFIG_I2C_PIIX4 is not set | ||
830 | # CONFIG_I2C_NFORCE2 is not set | ||
831 | # CONFIG_I2C_SIS5595 is not set | ||
832 | # CONFIG_I2C_SIS630 is not set | ||
833 | # CONFIG_I2C_SIS96X is not set | ||
834 | # CONFIG_I2C_VIA is not set | ||
835 | # CONFIG_I2C_VIAPRO is not set | ||
836 | |||
837 | # | ||
838 | # I2C system bus drivers (mostly embedded / system-on-chip) | ||
839 | # | ||
840 | CONFIG_I2C_IBM_IIC=y | ||
841 | # CONFIG_I2C_MPC is not set | ||
842 | # CONFIG_I2C_OCORES is not set | ||
843 | # CONFIG_I2C_SIMTEC is not set | ||
844 | # CONFIG_I2C_XILINX is not set | ||
845 | |||
846 | # | ||
847 | # External I2C/SMBus adapter drivers | ||
848 | # | ||
849 | # CONFIG_I2C_PARPORT_LIGHT is not set | ||
850 | # CONFIG_I2C_TAOS_EVM is not set | ||
851 | |||
852 | # | ||
853 | # Other I2C/SMBus bus drivers | ||
854 | # | ||
855 | # CONFIG_I2C_PCA_PLATFORM is not set | ||
856 | # CONFIG_I2C_STUB is not set | ||
857 | # CONFIG_I2C_DEBUG_CORE is not set | ||
858 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
859 | # CONFIG_I2C_DEBUG_BUS is not set | ||
860 | # CONFIG_SPI is not set | ||
861 | |||
862 | # | ||
863 | # PPS support | ||
864 | # | ||
865 | # CONFIG_PPS is not set | ||
866 | CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y | ||
867 | # CONFIG_GPIOLIB is not set | ||
868 | # CONFIG_W1 is not set | ||
869 | # CONFIG_POWER_SUPPLY is not set | ||
870 | # CONFIG_HWMON is not set | ||
871 | # CONFIG_THERMAL is not set | ||
872 | # CONFIG_WATCHDOG is not set | ||
873 | CONFIG_SSB_POSSIBLE=y | ||
874 | |||
875 | # | ||
876 | # Sonics Silicon Backplane | ||
877 | # | ||
878 | # CONFIG_SSB is not set | ||
879 | |||
880 | # | ||
881 | # Multifunction device drivers | ||
882 | # | ||
883 | # CONFIG_MFD_CORE is not set | ||
884 | # CONFIG_MFD_88PM860X is not set | ||
885 | CONFIG_MFD_SM501=y | ||
886 | # CONFIG_HTC_PASIC3 is not set | ||
887 | # CONFIG_TWL4030_CORE is not set | ||
888 | # CONFIG_MFD_TMIO is not set | ||
889 | # CONFIG_PMIC_DA903X is not set | ||
890 | # CONFIG_PMIC_ADP5520 is not set | ||
891 | # CONFIG_MFD_MAX8925 is not set | ||
892 | # CONFIG_MFD_WM8400 is not set | ||
893 | # CONFIG_MFD_WM831X is not set | ||
894 | # CONFIG_MFD_WM8350_I2C is not set | ||
895 | # CONFIG_MFD_WM8994 is not set | ||
896 | # CONFIG_MFD_PCF50633 is not set | ||
897 | # CONFIG_AB3100_CORE is not set | ||
898 | # CONFIG_LPC_SCH is not set | ||
899 | # CONFIG_REGULATOR is not set | ||
900 | # CONFIG_MEDIA_SUPPORT is not set | ||
901 | |||
902 | # | ||
903 | # Graphics support | ||
904 | # | ||
905 | # CONFIG_AGP is not set | ||
906 | CONFIG_VGA_ARB=y | ||
907 | CONFIG_VGA_ARB_MAX_GPUS=16 | ||
908 | # CONFIG_DRM is not set | ||
909 | # CONFIG_VGASTATE is not set | ||
910 | CONFIG_VIDEO_OUTPUT_CONTROL=m | ||
911 | CONFIG_FB=y | ||
912 | # CONFIG_FIRMWARE_EDID is not set | ||
913 | # CONFIG_FB_DDC is not set | ||
914 | # CONFIG_FB_BOOT_VESA_SUPPORT is not set | ||
915 | CONFIG_FB_CFB_FILLRECT=y | ||
916 | CONFIG_FB_CFB_COPYAREA=y | ||
917 | CONFIG_FB_CFB_IMAGEBLIT=y | ||
918 | # CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set | ||
919 | # CONFIG_FB_SYS_FILLRECT is not set | ||
920 | # CONFIG_FB_SYS_COPYAREA is not set | ||
921 | # CONFIG_FB_SYS_IMAGEBLIT is not set | ||
922 | # CONFIG_FB_FOREIGN_ENDIAN is not set | ||
923 | # CONFIG_FB_SYS_FOPS is not set | ||
924 | # CONFIG_FB_SVGALIB is not set | ||
925 | # CONFIG_FB_MACMODES is not set | ||
926 | # CONFIG_FB_BACKLIGHT is not set | ||
927 | # CONFIG_FB_MODE_HELPERS is not set | ||
928 | # CONFIG_FB_TILEBLITTING is not set | ||
929 | |||
930 | # | ||
931 | # Frame buffer hardware drivers | ||
932 | # | ||
933 | # CONFIG_FB_CIRRUS is not set | ||
934 | # CONFIG_FB_PM2 is not set | ||
935 | # CONFIG_FB_CYBER2000 is not set | ||
936 | # CONFIG_FB_OF is not set | ||
937 | # CONFIG_FB_CT65550 is not set | ||
938 | # CONFIG_FB_ASILIANT is not set | ||
939 | # CONFIG_FB_IMSTT is not set | ||
940 | # CONFIG_FB_VGA16 is not set | ||
941 | # CONFIG_FB_UVESA is not set | ||
942 | # CONFIG_FB_S1D13XXX is not set | ||
943 | # CONFIG_FB_NVIDIA is not set | ||
944 | # CONFIG_FB_RIVA is not set | ||
945 | # CONFIG_FB_MATROX is not set | ||
946 | # CONFIG_FB_RADEON is not set | ||
947 | # CONFIG_FB_ATY128 is not set | ||
948 | # CONFIG_FB_ATY is not set | ||
949 | # CONFIG_FB_S3 is not set | ||
950 | # CONFIG_FB_SAVAGE is not set | ||
951 | # CONFIG_FB_SIS is not set | ||
952 | # CONFIG_FB_VIA is not set | ||
953 | # CONFIG_FB_NEOMAGIC is not set | ||
954 | # CONFIG_FB_KYRO is not set | ||
955 | # CONFIG_FB_3DFX is not set | ||
956 | # CONFIG_FB_VOODOO1 is not set | ||
957 | # CONFIG_FB_VT8623 is not set | ||
958 | # CONFIG_FB_TRIDENT is not set | ||
959 | # CONFIG_FB_ARK is not set | ||
960 | # CONFIG_FB_PM3 is not set | ||
961 | # CONFIG_FB_CARMINE is not set | ||
962 | CONFIG_FB_SM501=y | ||
963 | # CONFIG_FB_IBM_GXT4500 is not set | ||
964 | # CONFIG_FB_VIRTUAL is not set | ||
965 | # CONFIG_FB_METRONOME is not set | ||
966 | # CONFIG_FB_MB862XX is not set | ||
967 | # CONFIG_FB_BROADSHEET is not set | ||
968 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
969 | |||
970 | # | ||
971 | # Display device support | ||
972 | # | ||
973 | # CONFIG_DISPLAY_SUPPORT is not set | ||
974 | |||
975 | # | ||
976 | # Console display driver support | ||
977 | # | ||
978 | CONFIG_DUMMY_CONSOLE=y | ||
979 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
980 | # CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set | ||
981 | # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set | ||
982 | # CONFIG_FONTS is not set | ||
983 | CONFIG_FONT_8x8=y | ||
984 | CONFIG_FONT_8x16=y | ||
985 | CONFIG_LOGO=y | ||
986 | # CONFIG_LOGO_LINUX_MONO is not set | ||
987 | # CONFIG_LOGO_LINUX_VGA16 is not set | ||
988 | CONFIG_LOGO_LINUX_CLUT224=y | ||
989 | # CONFIG_SOUND is not set | ||
990 | CONFIG_HID_SUPPORT=y | ||
991 | CONFIG_HID=y | ||
992 | # CONFIG_HIDRAW is not set | ||
993 | # CONFIG_HID_PID is not set | ||
994 | |||
995 | # | ||
996 | # Special HID drivers | ||
997 | # | ||
998 | # CONFIG_USB_SUPPORT is not set | ||
999 | # CONFIG_UWB is not set | ||
1000 | # CONFIG_MMC is not set | ||
1001 | # CONFIG_MEMSTICK is not set | ||
1002 | # CONFIG_NEW_LEDS is not set | ||
1003 | # CONFIG_ACCESSIBILITY is not set | ||
1004 | # CONFIG_INFINIBAND is not set | ||
1005 | # CONFIG_EDAC is not set | ||
1006 | CONFIG_RTC_LIB=y | ||
1007 | CONFIG_RTC_CLASS=y | ||
1008 | CONFIG_RTC_HCTOSYS=y | ||
1009 | CONFIG_RTC_HCTOSYS_DEVICE="rtc0" | ||
1010 | # CONFIG_RTC_DEBUG is not set | ||
1011 | |||
1012 | # | ||
1013 | # RTC interfaces | ||
1014 | # | ||
1015 | CONFIG_RTC_INTF_SYSFS=y | ||
1016 | CONFIG_RTC_INTF_PROC=y | ||
1017 | CONFIG_RTC_INTF_DEV=y | ||
1018 | # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set | ||
1019 | # CONFIG_RTC_DRV_TEST is not set | ||
1020 | |||
1021 | # | ||
1022 | # I2C RTC drivers | ||
1023 | # | ||
1024 | CONFIG_RTC_DRV_DS1307=y | ||
1025 | # CONFIG_RTC_DRV_DS1374 is not set | ||
1026 | # CONFIG_RTC_DRV_DS1672 is not set | ||
1027 | # CONFIG_RTC_DRV_MAX6900 is not set | ||
1028 | # CONFIG_RTC_DRV_RS5C372 is not set | ||
1029 | # CONFIG_RTC_DRV_ISL1208 is not set | ||
1030 | # CONFIG_RTC_DRV_X1205 is not set | ||
1031 | # CONFIG_RTC_DRV_PCF8563 is not set | ||
1032 | # CONFIG_RTC_DRV_PCF8583 is not set | ||
1033 | # CONFIG_RTC_DRV_M41T80 is not set | ||
1034 | # CONFIG_RTC_DRV_BQ32K is not set | ||
1035 | # CONFIG_RTC_DRV_S35390A is not set | ||
1036 | # CONFIG_RTC_DRV_FM3130 is not set | ||
1037 | # CONFIG_RTC_DRV_RX8581 is not set | ||
1038 | # CONFIG_RTC_DRV_RX8025 is not set | ||
1039 | |||
1040 | # | ||
1041 | # SPI RTC drivers | ||
1042 | # | ||
1043 | |||
1044 | # | ||
1045 | # Platform RTC drivers | ||
1046 | # | ||
1047 | # CONFIG_RTC_DRV_CMOS is not set | ||
1048 | # CONFIG_RTC_DRV_DS1286 is not set | ||
1049 | # CONFIG_RTC_DRV_DS1511 is not set | ||
1050 | # CONFIG_RTC_DRV_DS1553 is not set | ||
1051 | # CONFIG_RTC_DRV_DS1742 is not set | ||
1052 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
1053 | # CONFIG_RTC_DRV_M48T86 is not set | ||
1054 | # CONFIG_RTC_DRV_M48T35 is not set | ||
1055 | # CONFIG_RTC_DRV_M48T59 is not set | ||
1056 | # CONFIG_RTC_DRV_MSM6242 is not set | ||
1057 | # CONFIG_RTC_DRV_BQ4802 is not set | ||
1058 | # CONFIG_RTC_DRV_RP5C01 is not set | ||
1059 | # CONFIG_RTC_DRV_V3020 is not set | ||
1060 | |||
1061 | # | ||
1062 | # on-CPU RTC drivers | ||
1063 | # | ||
1064 | # CONFIG_RTC_DRV_GENERIC is not set | ||
1065 | # CONFIG_DMADEVICES is not set | ||
1066 | # CONFIG_AUXDISPLAY is not set | ||
1067 | # CONFIG_UIO is not set | ||
1068 | |||
1069 | # | ||
1070 | # TI VLYNQ | ||
1071 | # | ||
1072 | # CONFIG_STAGING is not set | ||
1073 | |||
1074 | # | ||
1075 | # File systems | ||
1076 | # | ||
1077 | CONFIG_EXT2_FS=y | ||
1078 | # CONFIG_EXT2_FS_XATTR is not set | ||
1079 | # CONFIG_EXT2_FS_XIP is not set | ||
1080 | CONFIG_EXT3_FS=y | ||
1081 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | ||
1082 | CONFIG_EXT3_FS_XATTR=y | ||
1083 | # CONFIG_EXT3_FS_POSIX_ACL is not set | ||
1084 | # CONFIG_EXT3_FS_SECURITY is not set | ||
1085 | # CONFIG_EXT4_FS is not set | ||
1086 | CONFIG_JBD=y | ||
1087 | CONFIG_FS_MBCACHE=y | ||
1088 | # CONFIG_REISERFS_FS is not set | ||
1089 | # CONFIG_JFS_FS is not set | ||
1090 | # CONFIG_FS_POSIX_ACL is not set | ||
1091 | # CONFIG_XFS_FS is not set | ||
1092 | # CONFIG_GFS2_FS is not set | ||
1093 | # CONFIG_OCFS2_FS is not set | ||
1094 | # CONFIG_BTRFS_FS is not set | ||
1095 | # CONFIG_NILFS2_FS is not set | ||
1096 | CONFIG_FILE_LOCKING=y | ||
1097 | CONFIG_FSNOTIFY=y | ||
1098 | CONFIG_DNOTIFY=y | ||
1099 | CONFIG_INOTIFY=y | ||
1100 | CONFIG_INOTIFY_USER=y | ||
1101 | # CONFIG_QUOTA is not set | ||
1102 | # CONFIG_AUTOFS_FS is not set | ||
1103 | # CONFIG_AUTOFS4_FS is not set | ||
1104 | # CONFIG_FUSE_FS is not set | ||
1105 | |||
1106 | # | ||
1107 | # Caches | ||
1108 | # | ||
1109 | # CONFIG_FSCACHE is not set | ||
1110 | |||
1111 | # | ||
1112 | # CD-ROM/DVD Filesystems | ||
1113 | # | ||
1114 | # CONFIG_ISO9660_FS is not set | ||
1115 | # CONFIG_UDF_FS is not set | ||
1116 | |||
1117 | # | ||
1118 | # DOS/FAT/NT Filesystems | ||
1119 | # | ||
1120 | CONFIG_FAT_FS=y | ||
1121 | # CONFIG_MSDOS_FS is not set | ||
1122 | CONFIG_VFAT_FS=y | ||
1123 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | ||
1124 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | ||
1125 | # CONFIG_NTFS_FS is not set | ||
1126 | |||
1127 | # | ||
1128 | # Pseudo filesystems | ||
1129 | # | ||
1130 | CONFIG_PROC_FS=y | ||
1131 | CONFIG_PROC_KCORE=y | ||
1132 | CONFIG_PROC_SYSCTL=y | ||
1133 | CONFIG_PROC_PAGE_MONITOR=y | ||
1134 | CONFIG_SYSFS=y | ||
1135 | CONFIG_TMPFS=y | ||
1136 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
1137 | # CONFIG_HUGETLB_PAGE is not set | ||
1138 | # CONFIG_CONFIGFS_FS is not set | ||
1139 | CONFIG_MISC_FILESYSTEMS=y | ||
1140 | # CONFIG_ADFS_FS is not set | ||
1141 | # CONFIG_AFFS_FS is not set | ||
1142 | # CONFIG_HFS_FS is not set | ||
1143 | # CONFIG_HFSPLUS_FS is not set | ||
1144 | # CONFIG_BEFS_FS is not set | ||
1145 | # CONFIG_BFS_FS is not set | ||
1146 | # CONFIG_EFS_FS is not set | ||
1147 | # CONFIG_JFFS2_FS is not set | ||
1148 | # CONFIG_YAFFS_FS is not set | ||
1149 | # CONFIG_LOGFS is not set | ||
1150 | CONFIG_CRAMFS=y | ||
1151 | # CONFIG_SQUASHFS is not set | ||
1152 | # CONFIG_VXFS_FS is not set | ||
1153 | # CONFIG_MINIX_FS is not set | ||
1154 | # CONFIG_OMFS_FS is not set | ||
1155 | # CONFIG_HPFS_FS is not set | ||
1156 | # CONFIG_QNX4FS_FS is not set | ||
1157 | # CONFIG_ROMFS_FS is not set | ||
1158 | # CONFIG_SYSV_FS is not set | ||
1159 | # CONFIG_UFS_FS is not set | ||
1160 | CONFIG_NETWORK_FILESYSTEMS=y | ||
1161 | CONFIG_NFS_FS=y | ||
1162 | CONFIG_NFS_V3=y | ||
1163 | # CONFIG_NFS_V3_ACL is not set | ||
1164 | # CONFIG_NFS_V4 is not set | ||
1165 | CONFIG_ROOT_NFS=y | ||
1166 | # CONFIG_NFSD is not set | ||
1167 | CONFIG_LOCKD=y | ||
1168 | CONFIG_LOCKD_V4=y | ||
1169 | CONFIG_NFS_COMMON=y | ||
1170 | CONFIG_SUNRPC=y | ||
1171 | # CONFIG_RPCSEC_GSS_KRB5 is not set | ||
1172 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
1173 | # CONFIG_SMB_FS is not set | ||
1174 | # CONFIG_CEPH_FS is not set | ||
1175 | # CONFIG_CIFS is not set | ||
1176 | # CONFIG_NCP_FS is not set | ||
1177 | # CONFIG_CODA_FS is not set | ||
1178 | # CONFIG_AFS_FS is not set | ||
1179 | |||
1180 | # | ||
1181 | # Partition Types | ||
1182 | # | ||
1183 | # CONFIG_PARTITION_ADVANCED is not set | ||
1184 | CONFIG_MSDOS_PARTITION=y | ||
1185 | CONFIG_NLS=y | ||
1186 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
1187 | CONFIG_NLS_CODEPAGE_437=y | ||
1188 | # CONFIG_NLS_CODEPAGE_737 is not set | ||
1189 | # CONFIG_NLS_CODEPAGE_775 is not set | ||
1190 | CONFIG_NLS_CODEPAGE_850=y | ||
1191 | # CONFIG_NLS_CODEPAGE_852 is not set | ||
1192 | # CONFIG_NLS_CODEPAGE_855 is not set | ||
1193 | # CONFIG_NLS_CODEPAGE_857 is not set | ||
1194 | # CONFIG_NLS_CODEPAGE_860 is not set | ||
1195 | # CONFIG_NLS_CODEPAGE_861 is not set | ||
1196 | # CONFIG_NLS_CODEPAGE_862 is not set | ||
1197 | # CONFIG_NLS_CODEPAGE_863 is not set | ||
1198 | # CONFIG_NLS_CODEPAGE_864 is not set | ||
1199 | # CONFIG_NLS_CODEPAGE_865 is not set | ||
1200 | # CONFIG_NLS_CODEPAGE_866 is not set | ||
1201 | # CONFIG_NLS_CODEPAGE_869 is not set | ||
1202 | # CONFIG_NLS_CODEPAGE_936 is not set | ||
1203 | # CONFIG_NLS_CODEPAGE_950 is not set | ||
1204 | # CONFIG_NLS_CODEPAGE_932 is not set | ||
1205 | # CONFIG_NLS_CODEPAGE_949 is not set | ||
1206 | # CONFIG_NLS_CODEPAGE_874 is not set | ||
1207 | # CONFIG_NLS_ISO8859_8 is not set | ||
1208 | # CONFIG_NLS_CODEPAGE_1250 is not set | ||
1209 | # CONFIG_NLS_CODEPAGE_1251 is not set | ||
1210 | # CONFIG_NLS_ASCII is not set | ||
1211 | CONFIG_NLS_ISO8859_1=y | ||
1212 | # CONFIG_NLS_ISO8859_2 is not set | ||
1213 | # CONFIG_NLS_ISO8859_3 is not set | ||
1214 | # CONFIG_NLS_ISO8859_4 is not set | ||
1215 | # CONFIG_NLS_ISO8859_5 is not set | ||
1216 | # CONFIG_NLS_ISO8859_6 is not set | ||
1217 | # CONFIG_NLS_ISO8859_7 is not set | ||
1218 | # CONFIG_NLS_ISO8859_9 is not set | ||
1219 | # CONFIG_NLS_ISO8859_13 is not set | ||
1220 | # CONFIG_NLS_ISO8859_14 is not set | ||
1221 | CONFIG_NLS_ISO8859_15=y | ||
1222 | # CONFIG_NLS_KOI8_R is not set | ||
1223 | # CONFIG_NLS_KOI8_U is not set | ||
1224 | # CONFIG_NLS_UTF8 is not set | ||
1225 | # CONFIG_DLM is not set | ||
1226 | # CONFIG_BINARY_PRINTF is not set | ||
1227 | |||
1228 | # | ||
1229 | # Library routines | ||
1230 | # | ||
1231 | CONFIG_BITREVERSE=y | ||
1232 | CONFIG_GENERIC_FIND_LAST_BIT=y | ||
1233 | # CONFIG_CRC_CCITT is not set | ||
1234 | # CONFIG_CRC16 is not set | ||
1235 | # CONFIG_CRC_T10DIF is not set | ||
1236 | # CONFIG_CRC_ITU_T is not set | ||
1237 | CONFIG_CRC32=y | ||
1238 | # CONFIG_CRC7 is not set | ||
1239 | # CONFIG_LIBCRC32C is not set | ||
1240 | CONFIG_ZLIB_INFLATE=y | ||
1241 | CONFIG_DECOMPRESS_GZIP=y | ||
1242 | CONFIG_HAS_IOMEM=y | ||
1243 | CONFIG_HAS_IOPORT=y | ||
1244 | CONFIG_HAS_DMA=y | ||
1245 | CONFIG_HAVE_LMB=y | ||
1246 | CONFIG_NLATTR=y | ||
1247 | CONFIG_GENERIC_ATOMIC64=y | ||
1248 | |||
1249 | # | ||
1250 | # Kernel hacking | ||
1251 | # | ||
1252 | # CONFIG_PRINTK_TIME is not set | ||
1253 | CONFIG_ENABLE_WARN_DEPRECATED=y | ||
1254 | CONFIG_ENABLE_MUST_CHECK=y | ||
1255 | CONFIG_FRAME_WARN=1024 | ||
1256 | CONFIG_MAGIC_SYSRQ=y | ||
1257 | # CONFIG_STRIP_ASM_SYMS is not set | ||
1258 | # CONFIG_UNUSED_SYMBOLS is not set | ||
1259 | # CONFIG_DEBUG_FS is not set | ||
1260 | # CONFIG_HEADERS_CHECK is not set | ||
1261 | CONFIG_DEBUG_KERNEL=y | ||
1262 | # CONFIG_DEBUG_SHIRQ is not set | ||
1263 | CONFIG_DETECT_SOFTLOCKUP=y | ||
1264 | # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set | ||
1265 | CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 | ||
1266 | CONFIG_DETECT_HUNG_TASK=y | ||
1267 | # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set | ||
1268 | CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 | ||
1269 | CONFIG_SCHED_DEBUG=y | ||
1270 | # CONFIG_SCHEDSTATS is not set | ||
1271 | # CONFIG_TIMER_STATS is not set | ||
1272 | # CONFIG_DEBUG_OBJECTS is not set | ||
1273 | # CONFIG_SLUB_DEBUG_ON is not set | ||
1274 | # CONFIG_SLUB_STATS is not set | ||
1275 | # CONFIG_DEBUG_KMEMLEAK is not set | ||
1276 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
1277 | # CONFIG_RT_MUTEX_TESTER is not set | ||
1278 | # CONFIG_DEBUG_SPINLOCK is not set | ||
1279 | # CONFIG_DEBUG_MUTEXES is not set | ||
1280 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
1281 | # CONFIG_PROVE_LOCKING is not set | ||
1282 | # CONFIG_LOCK_STAT is not set | ||
1283 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
1284 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
1285 | # CONFIG_DEBUG_KOBJECT is not set | ||
1286 | # CONFIG_DEBUG_HIGHMEM is not set | ||
1287 | # CONFIG_DEBUG_BUGVERBOSE is not set | ||
1288 | # CONFIG_DEBUG_INFO is not set | ||
1289 | # CONFIG_DEBUG_VM is not set | ||
1290 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
1291 | # CONFIG_DEBUG_MEMORY_INIT is not set | ||
1292 | # CONFIG_DEBUG_LIST is not set | ||
1293 | # CONFIG_DEBUG_SG is not set | ||
1294 | # CONFIG_DEBUG_NOTIFIERS is not set | ||
1295 | # CONFIG_DEBUG_CREDENTIALS is not set | ||
1296 | # CONFIG_RCU_TORTURE_TEST is not set | ||
1297 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
1298 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
1299 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | ||
1300 | # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set | ||
1301 | # CONFIG_FAULT_INJECTION is not set | ||
1302 | # CONFIG_LATENCYTOP is not set | ||
1303 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
1304 | # CONFIG_DEBUG_PAGEALLOC is not set | ||
1305 | CONFIG_HAVE_FUNCTION_TRACER=y | ||
1306 | CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y | ||
1307 | CONFIG_HAVE_DYNAMIC_FTRACE=y | ||
1308 | CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y | ||
1309 | CONFIG_TRACING_SUPPORT=y | ||
1310 | CONFIG_FTRACE=y | ||
1311 | # CONFIG_FUNCTION_TRACER is not set | ||
1312 | # CONFIG_IRQSOFF_TRACER is not set | ||
1313 | # CONFIG_SCHED_TRACER is not set | ||
1314 | # CONFIG_ENABLE_DEFAULT_TRACERS is not set | ||
1315 | # CONFIG_BOOT_TRACER is not set | ||
1316 | CONFIG_BRANCH_PROFILE_NONE=y | ||
1317 | # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set | ||
1318 | # CONFIG_PROFILE_ALL_BRANCHES is not set | ||
1319 | # CONFIG_STACK_TRACER is not set | ||
1320 | # CONFIG_KMEMTRACE is not set | ||
1321 | # CONFIG_WORKQUEUE_TRACER is not set | ||
1322 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
1323 | # CONFIG_DMA_API_DEBUG is not set | ||
1324 | # CONFIG_SAMPLES is not set | ||
1325 | CONFIG_HAVE_ARCH_KGDB=y | ||
1326 | # CONFIG_KGDB is not set | ||
1327 | # CONFIG_PPC_DISABLE_WERROR is not set | ||
1328 | CONFIG_PPC_WERROR=y | ||
1329 | CONFIG_PRINT_STACK_DEPTH=64 | ||
1330 | # CONFIG_DEBUG_STACKOVERFLOW is not set | ||
1331 | # CONFIG_DEBUG_STACK_USAGE is not set | ||
1332 | # CONFIG_CODE_PATCHING_SELFTEST is not set | ||
1333 | # CONFIG_FTR_FIXUP_SELFTEST is not set | ||
1334 | # CONFIG_MSI_BITMAP_SELFTEST is not set | ||
1335 | # CONFIG_XMON is not set | ||
1336 | # CONFIG_IRQSTACKS is not set | ||
1337 | # CONFIG_BDI_SWITCH is not set | ||
1338 | # CONFIG_PPC_EARLY_DEBUG is not set | ||
1339 | |||
1340 | # | ||
1341 | # Security options | ||
1342 | # | ||
1343 | # CONFIG_KEYS is not set | ||
1344 | # CONFIG_SECURITY is not set | ||
1345 | # CONFIG_SECURITYFS is not set | ||
1346 | # CONFIG_DEFAULT_SECURITY_SELINUX is not set | ||
1347 | # CONFIG_DEFAULT_SECURITY_SMACK is not set | ||
1348 | # CONFIG_DEFAULT_SECURITY_TOMOYO is not set | ||
1349 | CONFIG_DEFAULT_SECURITY_DAC=y | ||
1350 | CONFIG_DEFAULT_SECURITY="" | ||
1351 | CONFIG_CRYPTO=y | ||
1352 | |||
1353 | # | ||
1354 | # Crypto core or helper | ||
1355 | # | ||
1356 | CONFIG_CRYPTO_ALGAPI=y | ||
1357 | CONFIG_CRYPTO_ALGAPI2=y | ||
1358 | CONFIG_CRYPTO_AEAD2=y | ||
1359 | CONFIG_CRYPTO_BLKCIPHER=y | ||
1360 | CONFIG_CRYPTO_BLKCIPHER2=y | ||
1361 | CONFIG_CRYPTO_HASH=y | ||
1362 | CONFIG_CRYPTO_HASH2=y | ||
1363 | CONFIG_CRYPTO_RNG2=y | ||
1364 | CONFIG_CRYPTO_PCOMP=y | ||
1365 | CONFIG_CRYPTO_MANAGER=y | ||
1366 | CONFIG_CRYPTO_MANAGER2=y | ||
1367 | # CONFIG_CRYPTO_GF128MUL is not set | ||
1368 | # CONFIG_CRYPTO_NULL is not set | ||
1369 | CONFIG_CRYPTO_WORKQUEUE=y | ||
1370 | # CONFIG_CRYPTO_CRYPTD is not set | ||
1371 | # CONFIG_CRYPTO_AUTHENC is not set | ||
1372 | # CONFIG_CRYPTO_TEST is not set | ||
1373 | |||
1374 | # | ||
1375 | # Authenticated Encryption with Associated Data | ||
1376 | # | ||
1377 | # CONFIG_CRYPTO_CCM is not set | ||
1378 | # CONFIG_CRYPTO_GCM is not set | ||
1379 | # CONFIG_CRYPTO_SEQIV is not set | ||
1380 | |||
1381 | # | ||
1382 | # Block modes | ||
1383 | # | ||
1384 | CONFIG_CRYPTO_CBC=y | ||
1385 | # CONFIG_CRYPTO_CTR is not set | ||
1386 | # CONFIG_CRYPTO_CTS is not set | ||
1387 | CONFIG_CRYPTO_ECB=y | ||
1388 | # CONFIG_CRYPTO_LRW is not set | ||
1389 | CONFIG_CRYPTO_PCBC=y | ||
1390 | # CONFIG_CRYPTO_XTS is not set | ||
1391 | |||
1392 | # | ||
1393 | # Hash modes | ||
1394 | # | ||
1395 | # CONFIG_CRYPTO_HMAC is not set | ||
1396 | # CONFIG_CRYPTO_XCBC is not set | ||
1397 | # CONFIG_CRYPTO_VMAC is not set | ||
1398 | |||
1399 | # | ||
1400 | # Digest | ||
1401 | # | ||
1402 | # CONFIG_CRYPTO_CRC32C is not set | ||
1403 | # CONFIG_CRYPTO_GHASH is not set | ||
1404 | # CONFIG_CRYPTO_MD4 is not set | ||
1405 | CONFIG_CRYPTO_MD5=y | ||
1406 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
1407 | # CONFIG_CRYPTO_RMD128 is not set | ||
1408 | # CONFIG_CRYPTO_RMD160 is not set | ||
1409 | # CONFIG_CRYPTO_RMD256 is not set | ||
1410 | # CONFIG_CRYPTO_RMD320 is not set | ||
1411 | # CONFIG_CRYPTO_SHA1 is not set | ||
1412 | # CONFIG_CRYPTO_SHA256 is not set | ||
1413 | # CONFIG_CRYPTO_SHA512 is not set | ||
1414 | # CONFIG_CRYPTO_TGR192 is not set | ||
1415 | # CONFIG_CRYPTO_WP512 is not set | ||
1416 | |||
1417 | # | ||
1418 | # Ciphers | ||
1419 | # | ||
1420 | # CONFIG_CRYPTO_AES is not set | ||
1421 | # CONFIG_CRYPTO_ANUBIS is not set | ||
1422 | # CONFIG_CRYPTO_ARC4 is not set | ||
1423 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
1424 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
1425 | # CONFIG_CRYPTO_CAST5 is not set | ||
1426 | # CONFIG_CRYPTO_CAST6 is not set | ||
1427 | CONFIG_CRYPTO_DES=y | ||
1428 | # CONFIG_CRYPTO_FCRYPT is not set | ||
1429 | # CONFIG_CRYPTO_KHAZAD is not set | ||
1430 | # CONFIG_CRYPTO_SALSA20 is not set | ||
1431 | # CONFIG_CRYPTO_SEED is not set | ||
1432 | # CONFIG_CRYPTO_SERPENT is not set | ||
1433 | # CONFIG_CRYPTO_TEA is not set | ||
1434 | # CONFIG_CRYPTO_TWOFISH is not set | ||
1435 | |||
1436 | # | ||
1437 | # Compression | ||
1438 | # | ||
1439 | # CONFIG_CRYPTO_DEFLATE is not set | ||
1440 | # CONFIG_CRYPTO_ZLIB is not set | ||
1441 | # CONFIG_CRYPTO_LZO is not set | ||
1442 | |||
1443 | # | ||
1444 | # Random Number Generation | ||
1445 | # | ||
1446 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | ||
1447 | CONFIG_CRYPTO_HW=y | ||
1448 | # CONFIG_CRYPTO_DEV_HIFN_795X is not set | ||
1449 | # CONFIG_CRYPTO_DEV_PPC4XX is not set | ||
1450 | # CONFIG_PPC_CLOCK is not set | ||
1451 | # CONFIG_VIRTUALIZATION is not set | ||
diff --git a/arch/powerpc/configs/44x/katmai_defconfig b/arch/powerpc/configs/44x/katmai_defconfig index af244e1d255e..a2c24d1e051e 100644 --- a/arch/powerpc/configs/44x/katmai_defconfig +++ b/arch/powerpc/configs/44x/katmai_defconfig | |||
@@ -97,8 +97,7 @@ CONFIG_RCU_FANOUT=32 | |||
97 | CONFIG_LOG_BUF_SHIFT=14 | 97 | CONFIG_LOG_BUF_SHIFT=14 |
98 | # CONFIG_GROUP_SCHED is not set | 98 | # CONFIG_GROUP_SCHED is not set |
99 | # CONFIG_CGROUPS is not set | 99 | # CONFIG_CGROUPS is not set |
100 | CONFIG_SYSFS_DEPRECATED=y | 100 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
101 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
102 | # CONFIG_RELAY is not set | 101 | # CONFIG_RELAY is not set |
103 | # CONFIG_NAMESPACES is not set | 102 | # CONFIG_NAMESPACES is not set |
104 | CONFIG_BLK_DEV_INITRD=y | 103 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/44x/rainier_defconfig b/arch/powerpc/configs/44x/rainier_defconfig index 8fed3b26af2e..3bb55b57077e 100644 --- a/arch/powerpc/configs/44x/rainier_defconfig +++ b/arch/powerpc/configs/44x/rainier_defconfig | |||
@@ -101,8 +101,7 @@ CONFIG_FAIR_GROUP_SCHED=y | |||
101 | CONFIG_USER_SCHED=y | 101 | CONFIG_USER_SCHED=y |
102 | # CONFIG_CGROUP_SCHED is not set | 102 | # CONFIG_CGROUP_SCHED is not set |
103 | # CONFIG_CGROUPS is not set | 103 | # CONFIG_CGROUPS is not set |
104 | CONFIG_SYSFS_DEPRECATED=y | 104 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
105 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
106 | # CONFIG_RELAY is not set | 105 | # CONFIG_RELAY is not set |
107 | # CONFIG_NAMESPACES is not set | 106 | # CONFIG_NAMESPACES is not set |
108 | CONFIG_BLK_DEV_INITRD=y | 107 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/44x/redwood_defconfig b/arch/powerpc/configs/44x/redwood_defconfig index a67ec91a28c3..684f40dc8a41 100644 --- a/arch/powerpc/configs/44x/redwood_defconfig +++ b/arch/powerpc/configs/44x/redwood_defconfig | |||
@@ -98,8 +98,7 @@ CONFIG_RCU_FANOUT=32 | |||
98 | CONFIG_LOG_BUF_SHIFT=14 | 98 | CONFIG_LOG_BUF_SHIFT=14 |
99 | # CONFIG_GROUP_SCHED is not set | 99 | # CONFIG_GROUP_SCHED is not set |
100 | # CONFIG_CGROUPS is not set | 100 | # CONFIG_CGROUPS is not set |
101 | CONFIG_SYSFS_DEPRECATED=y | 101 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
102 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
103 | # CONFIG_RELAY is not set | 102 | # CONFIG_RELAY is not set |
104 | # CONFIG_NAMESPACES is not set | 103 | # CONFIG_NAMESPACES is not set |
105 | CONFIG_BLK_DEV_INITRD=y | 104 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/44x/sam440ep_defconfig b/arch/powerpc/configs/44x/sam440ep_defconfig index 886cb6aa6432..e202924e6173 100644 --- a/arch/powerpc/configs/44x/sam440ep_defconfig +++ b/arch/powerpc/configs/44x/sam440ep_defconfig | |||
@@ -103,8 +103,7 @@ CONFIG_FAIR_GROUP_SCHED=y | |||
103 | CONFIG_USER_SCHED=y | 103 | CONFIG_USER_SCHED=y |
104 | # CONFIG_CGROUP_SCHED is not set | 104 | # CONFIG_CGROUP_SCHED is not set |
105 | # CONFIG_CGROUPS is not set | 105 | # CONFIG_CGROUPS is not set |
106 | CONFIG_SYSFS_DEPRECATED=y | 106 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
107 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
108 | # CONFIG_RELAY is not set | 107 | # CONFIG_RELAY is not set |
109 | # CONFIG_NAMESPACES is not set | 108 | # CONFIG_NAMESPACES is not set |
110 | CONFIG_BLK_DEV_INITRD=y | 109 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/44x/sequoia_defconfig b/arch/powerpc/configs/44x/sequoia_defconfig index 1b2f41dbcafb..c348a4662a9e 100644 --- a/arch/powerpc/configs/44x/sequoia_defconfig +++ b/arch/powerpc/configs/44x/sequoia_defconfig | |||
@@ -102,8 +102,7 @@ CONFIG_GROUP_SCHED=y | |||
102 | CONFIG_USER_SCHED=y | 102 | CONFIG_USER_SCHED=y |
103 | # CONFIG_CGROUP_SCHED is not set | 103 | # CONFIG_CGROUP_SCHED is not set |
104 | # CONFIG_CGROUPS is not set | 104 | # CONFIG_CGROUPS is not set |
105 | CONFIG_SYSFS_DEPRECATED=y | 105 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
106 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
107 | # CONFIG_RELAY is not set | 106 | # CONFIG_RELAY is not set |
108 | # CONFIG_NAMESPACES is not set | 107 | # CONFIG_NAMESPACES is not set |
109 | CONFIG_BLK_DEV_INITRD=y | 108 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/44x/taishan_defconfig b/arch/powerpc/configs/44x/taishan_defconfig index 12041d355b8c..f4cb7e84cb83 100644 --- a/arch/powerpc/configs/44x/taishan_defconfig +++ b/arch/powerpc/configs/44x/taishan_defconfig | |||
@@ -101,8 +101,7 @@ CONFIG_FAIR_GROUP_SCHED=y | |||
101 | CONFIG_USER_SCHED=y | 101 | CONFIG_USER_SCHED=y |
102 | # CONFIG_CGROUP_SCHED is not set | 102 | # CONFIG_CGROUP_SCHED is not set |
103 | # CONFIG_CGROUPS is not set | 103 | # CONFIG_CGROUPS is not set |
104 | CONFIG_SYSFS_DEPRECATED=y | 104 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
105 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
106 | # CONFIG_RELAY is not set | 105 | # CONFIG_RELAY is not set |
107 | # CONFIG_NAMESPACES is not set | 106 | # CONFIG_NAMESPACES is not set |
108 | CONFIG_BLK_DEV_INITRD=y | 107 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/44x/virtex5_defconfig b/arch/powerpc/configs/44x/virtex5_defconfig index 2518b8568c70..c7ead0ec00bc 100644 --- a/arch/powerpc/configs/44x/virtex5_defconfig +++ b/arch/powerpc/configs/44x/virtex5_defconfig | |||
@@ -80,8 +80,7 @@ CONFIG_IKCONFIG_PROC=y | |||
80 | CONFIG_LOG_BUF_SHIFT=14 | 80 | CONFIG_LOG_BUF_SHIFT=14 |
81 | # CONFIG_GROUP_SCHED is not set | 81 | # CONFIG_GROUP_SCHED is not set |
82 | # CONFIG_CGROUPS is not set | 82 | # CONFIG_CGROUPS is not set |
83 | CONFIG_SYSFS_DEPRECATED=y | 83 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
84 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
85 | # CONFIG_RELAY is not set | 84 | # CONFIG_RELAY is not set |
86 | CONFIG_NAMESPACES=y | 85 | CONFIG_NAMESPACES=y |
87 | # CONFIG_UTS_NS is not set | 86 | # CONFIG_UTS_NS is not set |
diff --git a/arch/powerpc/configs/52xx/cm5200_defconfig b/arch/powerpc/configs/52xx/cm5200_defconfig index 218d49b36a0c..7664c83c17c2 100644 --- a/arch/powerpc/configs/52xx/cm5200_defconfig +++ b/arch/powerpc/configs/52xx/cm5200_defconfig | |||
@@ -95,8 +95,7 @@ CONFIG_RCU_FANOUT=32 | |||
95 | # CONFIG_IKCONFIG is not set | 95 | # CONFIG_IKCONFIG is not set |
96 | CONFIG_LOG_BUF_SHIFT=14 | 96 | CONFIG_LOG_BUF_SHIFT=14 |
97 | # CONFIG_CGROUPS is not set | 97 | # CONFIG_CGROUPS is not set |
98 | CONFIG_SYSFS_DEPRECATED=y | 98 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
99 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
100 | # CONFIG_RELAY is not set | 99 | # CONFIG_RELAY is not set |
101 | # CONFIG_NAMESPACES is not set | 100 | # CONFIG_NAMESPACES is not set |
102 | CONFIG_BLK_DEV_INITRD=y | 101 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/52xx/lite5200b_defconfig b/arch/powerpc/configs/52xx/lite5200b_defconfig index 90492ff25232..eac7c17eef34 100644 --- a/arch/powerpc/configs/52xx/lite5200b_defconfig +++ b/arch/powerpc/configs/52xx/lite5200b_defconfig | |||
@@ -96,8 +96,7 @@ CONFIG_RCU_FANOUT=32 | |||
96 | # CONFIG_IKCONFIG is not set | 96 | # CONFIG_IKCONFIG is not set |
97 | CONFIG_LOG_BUF_SHIFT=14 | 97 | CONFIG_LOG_BUF_SHIFT=14 |
98 | # CONFIG_CGROUPS is not set | 98 | # CONFIG_CGROUPS is not set |
99 | CONFIG_SYSFS_DEPRECATED=y | 99 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
100 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
101 | # CONFIG_RELAY is not set | 100 | # CONFIG_RELAY is not set |
102 | # CONFIG_NAMESPACES is not set | 101 | # CONFIG_NAMESPACES is not set |
103 | CONFIG_BLK_DEV_INITRD=y | 102 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/52xx/motionpro_defconfig b/arch/powerpc/configs/52xx/motionpro_defconfig index dffc8cac825f..27afb6ecdf61 100644 --- a/arch/powerpc/configs/52xx/motionpro_defconfig +++ b/arch/powerpc/configs/52xx/motionpro_defconfig | |||
@@ -95,8 +95,7 @@ CONFIG_RCU_FANOUT=32 | |||
95 | # CONFIG_IKCONFIG is not set | 95 | # CONFIG_IKCONFIG is not set |
96 | CONFIG_LOG_BUF_SHIFT=14 | 96 | CONFIG_LOG_BUF_SHIFT=14 |
97 | # CONFIG_CGROUPS is not set | 97 | # CONFIG_CGROUPS is not set |
98 | CONFIG_SYSFS_DEPRECATED=y | 98 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
99 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
100 | # CONFIG_RELAY is not set | 99 | # CONFIG_RELAY is not set |
101 | # CONFIG_NAMESPACES is not set | 100 | # CONFIG_NAMESPACES is not set |
102 | CONFIG_BLK_DEV_INITRD=y | 101 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/52xx/pcm030_defconfig b/arch/powerpc/configs/52xx/pcm030_defconfig index 3cb2a522046a..5fe39ddb4e14 100644 --- a/arch/powerpc/configs/52xx/pcm030_defconfig +++ b/arch/powerpc/configs/52xx/pcm030_defconfig | |||
@@ -98,8 +98,7 @@ CONFIG_IKCONFIG=y | |||
98 | CONFIG_IKCONFIG_PROC=y | 98 | CONFIG_IKCONFIG_PROC=y |
99 | CONFIG_LOG_BUF_SHIFT=14 | 99 | CONFIG_LOG_BUF_SHIFT=14 |
100 | # CONFIG_CGROUPS is not set | 100 | # CONFIG_CGROUPS is not set |
101 | CONFIG_SYSFS_DEPRECATED=y | 101 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
102 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
103 | # CONFIG_RELAY is not set | 102 | # CONFIG_RELAY is not set |
104 | # CONFIG_NAMESPACES is not set | 103 | # CONFIG_NAMESPACES is not set |
105 | # CONFIG_BLK_DEV_INITRD is not set | 104 | # CONFIG_BLK_DEV_INITRD is not set |
diff --git a/arch/powerpc/configs/52xx/tqm5200_defconfig b/arch/powerpc/configs/52xx/tqm5200_defconfig index 96181c62abfa..a108b84c0074 100644 --- a/arch/powerpc/configs/52xx/tqm5200_defconfig +++ b/arch/powerpc/configs/52xx/tqm5200_defconfig | |||
@@ -95,8 +95,7 @@ CONFIG_RCU_FANOUT=32 | |||
95 | # CONFIG_IKCONFIG is not set | 95 | # CONFIG_IKCONFIG is not set |
96 | CONFIG_LOG_BUF_SHIFT=14 | 96 | CONFIG_LOG_BUF_SHIFT=14 |
97 | # CONFIG_CGROUPS is not set | 97 | # CONFIG_CGROUPS is not set |
98 | CONFIG_SYSFS_DEPRECATED=y | 98 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
99 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
100 | # CONFIG_RELAY is not set | 99 | # CONFIG_RELAY is not set |
101 | # CONFIG_NAMESPACES is not set | 100 | # CONFIG_NAMESPACES is not set |
102 | CONFIG_BLK_DEV_INITRD=y | 101 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/86xx/gef_ppc9a_defconfig b/arch/powerpc/configs/86xx/gef_ppc9a_defconfig index 183c59c6d896..b728a7d64250 100644 --- a/arch/powerpc/configs/86xx/gef_ppc9a_defconfig +++ b/arch/powerpc/configs/86xx/gef_ppc9a_defconfig | |||
@@ -103,8 +103,7 @@ CONFIG_IKCONFIG=y | |||
103 | CONFIG_IKCONFIG_PROC=y | 103 | CONFIG_IKCONFIG_PROC=y |
104 | CONFIG_LOG_BUF_SHIFT=14 | 104 | CONFIG_LOG_BUF_SHIFT=14 |
105 | # CONFIG_CGROUPS is not set | 105 | # CONFIG_CGROUPS is not set |
106 | CONFIG_SYSFS_DEPRECATED=y | 106 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
107 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
108 | CONFIG_RELAY=y | 107 | CONFIG_RELAY=y |
109 | # CONFIG_NAMESPACES is not set | 108 | # CONFIG_NAMESPACES is not set |
110 | CONFIG_BLK_DEV_INITRD=y | 109 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/86xx/gef_sbc310_defconfig b/arch/powerpc/configs/86xx/gef_sbc310_defconfig index 1524d948a2ba..8e738de5f6a5 100644 --- a/arch/powerpc/configs/86xx/gef_sbc310_defconfig +++ b/arch/powerpc/configs/86xx/gef_sbc310_defconfig | |||
@@ -103,8 +103,7 @@ CONFIG_IKCONFIG=y | |||
103 | CONFIG_IKCONFIG_PROC=y | 103 | CONFIG_IKCONFIG_PROC=y |
104 | CONFIG_LOG_BUF_SHIFT=14 | 104 | CONFIG_LOG_BUF_SHIFT=14 |
105 | # CONFIG_CGROUPS is not set | 105 | # CONFIG_CGROUPS is not set |
106 | CONFIG_SYSFS_DEPRECATED=y | 106 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
107 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
108 | CONFIG_RELAY=y | 107 | CONFIG_RELAY=y |
109 | # CONFIG_NAMESPACES is not set | 108 | # CONFIG_NAMESPACES is not set |
110 | CONFIG_BLK_DEV_INITRD=y | 109 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/86xx/gef_sbc610_defconfig b/arch/powerpc/configs/86xx/gef_sbc610_defconfig index 767c204c0603..59bf9e27d7f2 100644 --- a/arch/powerpc/configs/86xx/gef_sbc610_defconfig +++ b/arch/powerpc/configs/86xx/gef_sbc610_defconfig | |||
@@ -103,8 +103,7 @@ CONFIG_IKCONFIG=y | |||
103 | CONFIG_IKCONFIG_PROC=y | 103 | CONFIG_IKCONFIG_PROC=y |
104 | CONFIG_LOG_BUF_SHIFT=14 | 104 | CONFIG_LOG_BUF_SHIFT=14 |
105 | # CONFIG_CGROUPS is not set | 105 | # CONFIG_CGROUPS is not set |
106 | CONFIG_SYSFS_DEPRECATED=y | 106 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
107 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
108 | CONFIG_RELAY=y | 107 | CONFIG_RELAY=y |
109 | # CONFIG_NAMESPACES is not set | 108 | # CONFIG_NAMESPACES is not set |
110 | CONFIG_BLK_DEV_INITRD=y | 109 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/86xx/mpc8610_hpcd_defconfig b/arch/powerpc/configs/86xx/mpc8610_hpcd_defconfig index 55b9e4e867ac..4e8b01e73245 100644 --- a/arch/powerpc/configs/86xx/mpc8610_hpcd_defconfig +++ b/arch/powerpc/configs/86xx/mpc8610_hpcd_defconfig | |||
@@ -98,8 +98,7 @@ CONFIG_IKCONFIG=y | |||
98 | CONFIG_IKCONFIG_PROC=y | 98 | CONFIG_IKCONFIG_PROC=y |
99 | CONFIG_LOG_BUF_SHIFT=14 | 99 | CONFIG_LOG_BUF_SHIFT=14 |
100 | # CONFIG_CGROUPS is not set | 100 | # CONFIG_CGROUPS is not set |
101 | CONFIG_SYSFS_DEPRECATED=y | 101 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
102 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
103 | # CONFIG_RELAY is not set | 102 | # CONFIG_RELAY is not set |
104 | # CONFIG_NAMESPACES is not set | 103 | # CONFIG_NAMESPACES is not set |
105 | CONFIG_BLK_DEV_INITRD=y | 104 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/86xx/mpc8641_hpcn_defconfig b/arch/powerpc/configs/86xx/mpc8641_hpcn_defconfig index 1be38eb05783..20fde6374aad 100644 --- a/arch/powerpc/configs/86xx/mpc8641_hpcn_defconfig +++ b/arch/powerpc/configs/86xx/mpc8641_hpcn_defconfig | |||
@@ -103,8 +103,7 @@ CONFIG_IKCONFIG=y | |||
103 | CONFIG_IKCONFIG_PROC=y | 103 | CONFIG_IKCONFIG_PROC=y |
104 | CONFIG_LOG_BUF_SHIFT=14 | 104 | CONFIG_LOG_BUF_SHIFT=14 |
105 | # CONFIG_CGROUPS is not set | 105 | # CONFIG_CGROUPS is not set |
106 | CONFIG_SYSFS_DEPRECATED=y | 106 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
107 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
108 | # CONFIG_RELAY is not set | 107 | # CONFIG_RELAY is not set |
109 | # CONFIG_NAMESPACES is not set | 108 | # CONFIG_NAMESPACES is not set |
110 | CONFIG_BLK_DEV_INITRD=y | 109 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/86xx/sbc8641d_defconfig b/arch/powerpc/configs/86xx/sbc8641d_defconfig index a63009457323..74f714d85936 100644 --- a/arch/powerpc/configs/86xx/sbc8641d_defconfig +++ b/arch/powerpc/configs/86xx/sbc8641d_defconfig | |||
@@ -102,8 +102,7 @@ CONFIG_IKCONFIG=y | |||
102 | CONFIG_IKCONFIG_PROC=y | 102 | CONFIG_IKCONFIG_PROC=y |
103 | CONFIG_LOG_BUF_SHIFT=14 | 103 | CONFIG_LOG_BUF_SHIFT=14 |
104 | # CONFIG_CGROUPS is not set | 104 | # CONFIG_CGROUPS is not set |
105 | CONFIG_SYSFS_DEPRECATED=y | 105 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
106 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
107 | CONFIG_RELAY=y | 106 | CONFIG_RELAY=y |
108 | # CONFIG_NAMESPACES is not set | 107 | # CONFIG_NAMESPACES is not set |
109 | CONFIG_BLK_DEV_INITRD=y | 108 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/adder875_defconfig b/arch/powerpc/configs/adder875_defconfig index 9f89d5c9c0be..a670cee255b9 100644 --- a/arch/powerpc/configs/adder875_defconfig +++ b/arch/powerpc/configs/adder875_defconfig | |||
@@ -92,8 +92,7 @@ CONFIG_RCU_FANOUT=32 | |||
92 | # CONFIG_IKCONFIG is not set | 92 | # CONFIG_IKCONFIG is not set |
93 | CONFIG_LOG_BUF_SHIFT=14 | 93 | CONFIG_LOG_BUF_SHIFT=14 |
94 | # CONFIG_CGROUPS is not set | 94 | # CONFIG_CGROUPS is not set |
95 | CONFIG_SYSFS_DEPRECATED=y | 95 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
96 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
97 | # CONFIG_RELAY is not set | 96 | # CONFIG_RELAY is not set |
98 | # CONFIG_NAMESPACES is not set | 97 | # CONFIG_NAMESPACES is not set |
99 | # CONFIG_BLK_DEV_INITRD is not set | 98 | # CONFIG_BLK_DEV_INITRD is not set |
diff --git a/arch/powerpc/configs/amigaone_defconfig b/arch/powerpc/configs/amigaone_defconfig index b63cc38df6b1..851287e78fc3 100644 --- a/arch/powerpc/configs/amigaone_defconfig +++ b/arch/powerpc/configs/amigaone_defconfig | |||
@@ -87,8 +87,7 @@ CONFIG_IKCONFIG_PROC=y | |||
87 | CONFIG_LOG_BUF_SHIFT=15 | 87 | CONFIG_LOG_BUF_SHIFT=15 |
88 | # CONFIG_GROUP_SCHED is not set | 88 | # CONFIG_GROUP_SCHED is not set |
89 | # CONFIG_CGROUPS is not set | 89 | # CONFIG_CGROUPS is not set |
90 | CONFIG_SYSFS_DEPRECATED=y | 90 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
91 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
92 | # CONFIG_RELAY is not set | 91 | # CONFIG_RELAY is not set |
93 | CONFIG_NAMESPACES=y | 92 | CONFIG_NAMESPACES=y |
94 | # CONFIG_UTS_NS is not set | 93 | # CONFIG_UTS_NS is not set |
diff --git a/arch/powerpc/configs/c2k_defconfig b/arch/powerpc/configs/c2k_defconfig index 4ab6074db3cf..b429a655b541 100644 --- a/arch/powerpc/configs/c2k_defconfig +++ b/arch/powerpc/configs/c2k_defconfig | |||
@@ -102,8 +102,7 @@ CONFIG_RCU_FANOUT=32 | |||
102 | # CONFIG_IKCONFIG is not set | 102 | # CONFIG_IKCONFIG is not set |
103 | CONFIG_LOG_BUF_SHIFT=17 | 103 | CONFIG_LOG_BUF_SHIFT=17 |
104 | # CONFIG_CGROUPS is not set | 104 | # CONFIG_CGROUPS is not set |
105 | CONFIG_SYSFS_DEPRECATED=y | 105 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
106 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
107 | # CONFIG_RELAY is not set | 106 | # CONFIG_RELAY is not set |
108 | CONFIG_NAMESPACES=y | 107 | CONFIG_NAMESPACES=y |
109 | # CONFIG_UTS_NS is not set | 108 | # CONFIG_UTS_NS is not set |
diff --git a/arch/powerpc/configs/cell_defconfig b/arch/powerpc/configs/cell_defconfig index c6d2baa7aaeb..943371954317 100644 --- a/arch/powerpc/configs/cell_defconfig +++ b/arch/powerpc/configs/cell_defconfig | |||
@@ -83,8 +83,7 @@ CONFIG_CPUSETS=y | |||
83 | # CONFIG_CGROUP_SCHED is not set | 83 | # CONFIG_CGROUP_SCHED is not set |
84 | # CONFIG_CGROUP_CPUACCT is not set | 84 | # CONFIG_CGROUP_CPUACCT is not set |
85 | # CONFIG_RESOURCE_COUNTERS is not set | 85 | # CONFIG_RESOURCE_COUNTERS is not set |
86 | CONFIG_SYSFS_DEPRECATED=y | 86 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
87 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
88 | CONFIG_PROC_PID_CPUSET=y | 87 | CONFIG_PROC_PID_CPUSET=y |
89 | # CONFIG_RELAY is not set | 88 | # CONFIG_RELAY is not set |
90 | CONFIG_NAMESPACES=y | 89 | CONFIG_NAMESPACES=y |
diff --git a/arch/powerpc/configs/celleb_defconfig b/arch/powerpc/configs/celleb_defconfig index d2123779512a..6be6c09eba6d 100644 --- a/arch/powerpc/configs/celleb_defconfig +++ b/arch/powerpc/configs/celleb_defconfig | |||
@@ -78,8 +78,7 @@ CONFIG_LOG_BUF_SHIFT=15 | |||
78 | # CONFIG_GROUP_SCHED is not set | 78 | # CONFIG_GROUP_SCHED is not set |
79 | # CONFIG_USER_SCHED is not set | 79 | # CONFIG_USER_SCHED is not set |
80 | # CONFIG_CGROUP_SCHED is not set | 80 | # CONFIG_CGROUP_SCHED is not set |
81 | CONFIG_SYSFS_DEPRECATED=y | 81 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
82 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
83 | # CONFIG_RELAY is not set | 82 | # CONFIG_RELAY is not set |
84 | CONFIG_NAMESPACES=y | 83 | CONFIG_NAMESPACES=y |
85 | # CONFIG_UTS_NS is not set | 84 | # CONFIG_UTS_NS is not set |
diff --git a/arch/powerpc/configs/chrp32_defconfig b/arch/powerpc/configs/chrp32_defconfig index 5094a65a4493..2fdab660fce3 100644 --- a/arch/powerpc/configs/chrp32_defconfig +++ b/arch/powerpc/configs/chrp32_defconfig | |||
@@ -77,8 +77,7 @@ CONFIG_IKCONFIG_PROC=y | |||
77 | CONFIG_LOG_BUF_SHIFT=15 | 77 | CONFIG_LOG_BUF_SHIFT=15 |
78 | # CONFIG_CGROUPS is not set | 78 | # CONFIG_CGROUPS is not set |
79 | # CONFIG_GROUP_SCHED is not set | 79 | # CONFIG_GROUP_SCHED is not set |
80 | CONFIG_SYSFS_DEPRECATED=y | 80 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
81 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
82 | # CONFIG_RELAY is not set | 81 | # CONFIG_RELAY is not set |
83 | CONFIG_NAMESPACES=y | 82 | CONFIG_NAMESPACES=y |
84 | # CONFIG_UTS_NS is not set | 83 | # CONFIG_UTS_NS is not set |
diff --git a/arch/powerpc/configs/ep8248e_defconfig b/arch/powerpc/configs/ep8248e_defconfig index 81e904e9f392..6b708395a7c6 100644 --- a/arch/powerpc/configs/ep8248e_defconfig +++ b/arch/powerpc/configs/ep8248e_defconfig | |||
@@ -96,8 +96,7 @@ CONFIG_IKCONFIG=y | |||
96 | CONFIG_IKCONFIG_PROC=y | 96 | CONFIG_IKCONFIG_PROC=y |
97 | CONFIG_LOG_BUF_SHIFT=14 | 97 | CONFIG_LOG_BUF_SHIFT=14 |
98 | # CONFIG_CGROUPS is not set | 98 | # CONFIG_CGROUPS is not set |
99 | CONFIG_SYSFS_DEPRECATED=y | 99 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
100 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
101 | # CONFIG_RELAY is not set | 100 | # CONFIG_RELAY is not set |
102 | # CONFIG_NAMESPACES is not set | 101 | # CONFIG_NAMESPACES is not set |
103 | # CONFIG_BLK_DEV_INITRD is not set | 102 | # CONFIG_BLK_DEV_INITRD is not set |
diff --git a/arch/powerpc/configs/ep88xc_defconfig b/arch/powerpc/configs/ep88xc_defconfig index c5af46ef5f40..1cee889dd9ec 100644 --- a/arch/powerpc/configs/ep88xc_defconfig +++ b/arch/powerpc/configs/ep88xc_defconfig | |||
@@ -91,8 +91,7 @@ CONFIG_RCU_FANOUT=32 | |||
91 | # CONFIG_IKCONFIG is not set | 91 | # CONFIG_IKCONFIG is not set |
92 | CONFIG_LOG_BUF_SHIFT=14 | 92 | CONFIG_LOG_BUF_SHIFT=14 |
93 | # CONFIG_CGROUPS is not set | 93 | # CONFIG_CGROUPS is not set |
94 | CONFIG_SYSFS_DEPRECATED=y | 94 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
95 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
96 | # CONFIG_RELAY is not set | 95 | # CONFIG_RELAY is not set |
97 | # CONFIG_NAMESPACES is not set | 96 | # CONFIG_NAMESPACES is not set |
98 | # CONFIG_BLK_DEV_INITRD is not set | 97 | # CONFIG_BLK_DEV_INITRD is not set |
diff --git a/arch/powerpc/configs/g5_defconfig b/arch/powerpc/configs/g5_defconfig index 826a65d3f002..57d3ffa3026a 100644 --- a/arch/powerpc/configs/g5_defconfig +++ b/arch/powerpc/configs/g5_defconfig | |||
@@ -82,8 +82,7 @@ CONFIG_IKCONFIG_PROC=y | |||
82 | CONFIG_LOG_BUF_SHIFT=17 | 82 | CONFIG_LOG_BUF_SHIFT=17 |
83 | # CONFIG_CGROUPS is not set | 83 | # CONFIG_CGROUPS is not set |
84 | # CONFIG_GROUP_SCHED is not set | 84 | # CONFIG_GROUP_SCHED is not set |
85 | CONFIG_SYSFS_DEPRECATED=y | 85 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
86 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
87 | # CONFIG_RELAY is not set | 86 | # CONFIG_RELAY is not set |
88 | CONFIG_NAMESPACES=y | 87 | CONFIG_NAMESPACES=y |
89 | # CONFIG_UTS_NS is not set | 88 | # CONFIG_UTS_NS is not set |
diff --git a/arch/powerpc/configs/gamecube_defconfig b/arch/powerpc/configs/gamecube_defconfig index 942e1193e9e4..1c2dbf07ac35 100644 --- a/arch/powerpc/configs/gamecube_defconfig +++ b/arch/powerpc/configs/gamecube_defconfig | |||
@@ -101,8 +101,7 @@ CONFIG_FAIR_GROUP_SCHED=y | |||
101 | CONFIG_USER_SCHED=y | 101 | CONFIG_USER_SCHED=y |
102 | # CONFIG_CGROUP_SCHED is not set | 102 | # CONFIG_CGROUP_SCHED is not set |
103 | # CONFIG_CGROUPS is not set | 103 | # CONFIG_CGROUPS is not set |
104 | CONFIG_SYSFS_DEPRECATED=y | 104 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
105 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
106 | # CONFIG_RELAY is not set | 105 | # CONFIG_RELAY is not set |
107 | # CONFIG_NAMESPACES is not set | 106 | # CONFIG_NAMESPACES is not set |
108 | CONFIG_BLK_DEV_INITRD=y | 107 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/holly_defconfig b/arch/powerpc/configs/holly_defconfig index a211a79959ca..a60d61bee48d 100644 --- a/arch/powerpc/configs/holly_defconfig +++ b/arch/powerpc/configs/holly_defconfig | |||
@@ -73,7 +73,6 @@ CONFIG_SYSVIPC_SYSCTL=y | |||
73 | CONFIG_LOG_BUF_SHIFT=14 | 73 | CONFIG_LOG_BUF_SHIFT=14 |
74 | # CONFIG_CGROUPS is not set | 74 | # CONFIG_CGROUPS is not set |
75 | # CONFIG_FAIR_GROUP_SCHED is not set | 75 | # CONFIG_FAIR_GROUP_SCHED is not set |
76 | CONFIG_SYSFS_DEPRECATED=y | ||
77 | # CONFIG_RELAY is not set | 76 | # CONFIG_RELAY is not set |
78 | CONFIG_BLK_DEV_INITRD=y | 77 | CONFIG_BLK_DEV_INITRD=y |
79 | CONFIG_INITRAMFS_SOURCE="" | 78 | CONFIG_INITRAMFS_SOURCE="" |
diff --git a/arch/powerpc/configs/iseries_defconfig b/arch/powerpc/configs/iseries_defconfig index 76982c51a4c7..151c8e14f3ab 100644 --- a/arch/powerpc/configs/iseries_defconfig +++ b/arch/powerpc/configs/iseries_defconfig | |||
@@ -81,8 +81,7 @@ CONFIG_IKCONFIG_PROC=y | |||
81 | CONFIG_LOG_BUF_SHIFT=17 | 81 | CONFIG_LOG_BUF_SHIFT=17 |
82 | # CONFIG_CGROUPS is not set | 82 | # CONFIG_CGROUPS is not set |
83 | # CONFIG_GROUP_SCHED is not set | 83 | # CONFIG_GROUP_SCHED is not set |
84 | CONFIG_SYSFS_DEPRECATED=y | 84 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
85 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
86 | # CONFIG_RELAY is not set | 85 | # CONFIG_RELAY is not set |
87 | CONFIG_NAMESPACES=y | 86 | CONFIG_NAMESPACES=y |
88 | # CONFIG_UTS_NS is not set | 87 | # CONFIG_UTS_NS is not set |
diff --git a/arch/powerpc/configs/linkstation_defconfig b/arch/powerpc/configs/linkstation_defconfig index 588a2add393f..8ecacf74d3e5 100644 --- a/arch/powerpc/configs/linkstation_defconfig +++ b/arch/powerpc/configs/linkstation_defconfig | |||
@@ -97,8 +97,7 @@ CONFIG_IKCONFIG=y | |||
97 | CONFIG_IKCONFIG_PROC=y | 97 | CONFIG_IKCONFIG_PROC=y |
98 | CONFIG_LOG_BUF_SHIFT=14 | 98 | CONFIG_LOG_BUF_SHIFT=14 |
99 | # CONFIG_CGROUPS is not set | 99 | # CONFIG_CGROUPS is not set |
100 | CONFIG_SYSFS_DEPRECATED=y | 100 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
101 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
102 | # CONFIG_RELAY is not set | 101 | # CONFIG_RELAY is not set |
103 | CONFIG_NAMESPACES=y | 102 | CONFIG_NAMESPACES=y |
104 | # CONFIG_UTS_NS is not set | 103 | # CONFIG_UTS_NS is not set |
diff --git a/arch/powerpc/configs/maple_defconfig b/arch/powerpc/configs/maple_defconfig index 8b244003b9e1..dc50eec58e78 100644 --- a/arch/powerpc/configs/maple_defconfig +++ b/arch/powerpc/configs/maple_defconfig | |||
@@ -78,8 +78,7 @@ CONFIG_IKCONFIG_PROC=y | |||
78 | CONFIG_LOG_BUF_SHIFT=17 | 78 | CONFIG_LOG_BUF_SHIFT=17 |
79 | # CONFIG_CGROUPS is not set | 79 | # CONFIG_CGROUPS is not set |
80 | # CONFIG_GROUP_SCHED is not set | 80 | # CONFIG_GROUP_SCHED is not set |
81 | CONFIG_SYSFS_DEPRECATED=y | 81 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
82 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
83 | # CONFIG_RELAY is not set | 82 | # CONFIG_RELAY is not set |
84 | CONFIG_NAMESPACES=y | 83 | CONFIG_NAMESPACES=y |
85 | # CONFIG_UTS_NS is not set | 84 | # CONFIG_UTS_NS is not set |
diff --git a/arch/powerpc/configs/mgcoge_defconfig b/arch/powerpc/configs/mgcoge_defconfig index 0cbd56fe2e1e..b36ebb7e843e 100644 --- a/arch/powerpc/configs/mgcoge_defconfig +++ b/arch/powerpc/configs/mgcoge_defconfig | |||
@@ -96,8 +96,7 @@ CONFIG_IKCONFIG=y | |||
96 | CONFIG_IKCONFIG_PROC=y | 96 | CONFIG_IKCONFIG_PROC=y |
97 | CONFIG_LOG_BUF_SHIFT=14 | 97 | CONFIG_LOG_BUF_SHIFT=14 |
98 | # CONFIG_CGROUPS is not set | 98 | # CONFIG_CGROUPS is not set |
99 | CONFIG_SYSFS_DEPRECATED=y | 99 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
100 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
101 | # CONFIG_RELAY is not set | 100 | # CONFIG_RELAY is not set |
102 | # CONFIG_NAMESPACES is not set | 101 | # CONFIG_NAMESPACES is not set |
103 | CONFIG_BLK_DEV_INITRD=y | 102 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/mgsuvd_defconfig b/arch/powerpc/configs/mgsuvd_defconfig index c1be26151021..0dd5015ea81d 100644 --- a/arch/powerpc/configs/mgsuvd_defconfig +++ b/arch/powerpc/configs/mgsuvd_defconfig | |||
@@ -90,8 +90,7 @@ CONFIG_RCU_FANOUT=32 | |||
90 | # CONFIG_IKCONFIG is not set | 90 | # CONFIG_IKCONFIG is not set |
91 | CONFIG_LOG_BUF_SHIFT=17 | 91 | CONFIG_LOG_BUF_SHIFT=17 |
92 | # CONFIG_CGROUPS is not set | 92 | # CONFIG_CGROUPS is not set |
93 | CONFIG_SYSFS_DEPRECATED=y | 93 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
94 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
95 | # CONFIG_RELAY is not set | 94 | # CONFIG_RELAY is not set |
96 | # CONFIG_NAMESPACES is not set | 95 | # CONFIG_NAMESPACES is not set |
97 | CONFIG_BLK_DEV_INITRD=y | 96 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/mpc512x_defconfig b/arch/powerpc/configs/mpc512x_defconfig index a04727295d46..aa2654e6edeb 100644 --- a/arch/powerpc/configs/mpc512x_defconfig +++ b/arch/powerpc/configs/mpc512x_defconfig | |||
@@ -97,8 +97,7 @@ CONFIG_RCU_FANOUT=32 | |||
97 | CONFIG_LOG_BUF_SHIFT=16 | 97 | CONFIG_LOG_BUF_SHIFT=16 |
98 | # CONFIG_GROUP_SCHED is not set | 98 | # CONFIG_GROUP_SCHED is not set |
99 | # CONFIG_CGROUPS is not set | 99 | # CONFIG_CGROUPS is not set |
100 | CONFIG_SYSFS_DEPRECATED=y | 100 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
101 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
102 | # CONFIG_RELAY is not set | 101 | # CONFIG_RELAY is not set |
103 | CONFIG_NAMESPACES=y | 102 | CONFIG_NAMESPACES=y |
104 | # CONFIG_UTS_NS is not set | 103 | # CONFIG_UTS_NS is not set |
diff --git a/arch/powerpc/configs/mpc5200_defconfig b/arch/powerpc/configs/mpc5200_defconfig index 7012ac0134f0..f875ec21c91c 100644 --- a/arch/powerpc/configs/mpc5200_defconfig +++ b/arch/powerpc/configs/mpc5200_defconfig | |||
@@ -97,8 +97,7 @@ CONFIG_RCU_FANOUT=32 | |||
97 | # CONFIG_IKCONFIG is not set | 97 | # CONFIG_IKCONFIG is not set |
98 | CONFIG_LOG_BUF_SHIFT=14 | 98 | CONFIG_LOG_BUF_SHIFT=14 |
99 | # CONFIG_CGROUPS is not set | 99 | # CONFIG_CGROUPS is not set |
100 | CONFIG_SYSFS_DEPRECATED=y | 100 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
101 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
102 | # CONFIG_RELAY is not set | 101 | # CONFIG_RELAY is not set |
103 | CONFIG_NAMESPACES=y | 102 | CONFIG_NAMESPACES=y |
104 | # CONFIG_UTS_NS is not set | 103 | # CONFIG_UTS_NS is not set |
diff --git a/arch/powerpc/configs/mpc7448_hpc2_defconfig b/arch/powerpc/configs/mpc7448_hpc2_defconfig index 27c63ceeb45a..b1e88fe1d9fb 100644 --- a/arch/powerpc/configs/mpc7448_hpc2_defconfig +++ b/arch/powerpc/configs/mpc7448_hpc2_defconfig | |||
@@ -95,8 +95,7 @@ CONFIG_RCU_FANOUT=32 | |||
95 | # CONFIG_IKCONFIG is not set | 95 | # CONFIG_IKCONFIG is not set |
96 | CONFIG_LOG_BUF_SHIFT=14 | 96 | CONFIG_LOG_BUF_SHIFT=14 |
97 | # CONFIG_CGROUPS is not set | 97 | # CONFIG_CGROUPS is not set |
98 | CONFIG_SYSFS_DEPRECATED=y | 98 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
99 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
100 | # CONFIG_RELAY is not set | 99 | # CONFIG_RELAY is not set |
101 | # CONFIG_NAMESPACES is not set | 100 | # CONFIG_NAMESPACES is not set |
102 | CONFIG_BLK_DEV_INITRD=y | 101 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/pasemi_defconfig b/arch/powerpc/configs/pasemi_defconfig index 20ba0cfff8ba..74a7216183e8 100644 --- a/arch/powerpc/configs/pasemi_defconfig +++ b/arch/powerpc/configs/pasemi_defconfig | |||
@@ -98,8 +98,7 @@ CONFIG_RCU_FANOUT=64 | |||
98 | CONFIG_LOG_BUF_SHIFT=17 | 98 | CONFIG_LOG_BUF_SHIFT=17 |
99 | # CONFIG_GROUP_SCHED is not set | 99 | # CONFIG_GROUP_SCHED is not set |
100 | # CONFIG_CGROUPS is not set | 100 | # CONFIG_CGROUPS is not set |
101 | CONFIG_SYSFS_DEPRECATED=y | 101 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
102 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
103 | # CONFIG_RELAY is not set | 102 | # CONFIG_RELAY is not set |
104 | CONFIG_NAMESPACES=y | 103 | CONFIG_NAMESPACES=y |
105 | # CONFIG_UTS_NS is not set | 104 | # CONFIG_UTS_NS is not set |
diff --git a/arch/powerpc/configs/pmac32_defconfig b/arch/powerpc/configs/pmac32_defconfig index ea8870a34482..753bb7912e28 100644 --- a/arch/powerpc/configs/pmac32_defconfig +++ b/arch/powerpc/configs/pmac32_defconfig | |||
@@ -93,8 +93,7 @@ CONFIG_IKCONFIG_PROC=y | |||
93 | CONFIG_LOG_BUF_SHIFT=14 | 93 | CONFIG_LOG_BUF_SHIFT=14 |
94 | # CONFIG_GROUP_SCHED is not set | 94 | # CONFIG_GROUP_SCHED is not set |
95 | # CONFIG_CGROUPS is not set | 95 | # CONFIG_CGROUPS is not set |
96 | CONFIG_SYSFS_DEPRECATED=y | 96 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
97 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
98 | # CONFIG_RELAY is not set | 97 | # CONFIG_RELAY is not set |
99 | CONFIG_NAMESPACES=y | 98 | CONFIG_NAMESPACES=y |
100 | # CONFIG_UTS_NS is not set | 99 | # CONFIG_UTS_NS is not set |
diff --git a/arch/powerpc/configs/ppc40x_defconfig b/arch/powerpc/configs/ppc40x_defconfig index 35b60683cde5..afb4d1bb2ba9 100644 --- a/arch/powerpc/configs/ppc40x_defconfig +++ b/arch/powerpc/configs/ppc40x_defconfig | |||
@@ -99,8 +99,7 @@ CONFIG_FAIR_GROUP_SCHED=y | |||
99 | CONFIG_USER_SCHED=y | 99 | CONFIG_USER_SCHED=y |
100 | # CONFIG_CGROUP_SCHED is not set | 100 | # CONFIG_CGROUP_SCHED is not set |
101 | # CONFIG_CGROUPS is not set | 101 | # CONFIG_CGROUPS is not set |
102 | CONFIG_SYSFS_DEPRECATED=y | 102 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
103 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
104 | # CONFIG_RELAY is not set | 103 | # CONFIG_RELAY is not set |
105 | # CONFIG_NAMESPACES is not set | 104 | # CONFIG_NAMESPACES is not set |
106 | CONFIG_BLK_DEV_INITRD=y | 105 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/ppc44x_defconfig b/arch/powerpc/configs/ppc44x_defconfig index 46f5c47e9f85..bd3d23fb4dd3 100644 --- a/arch/powerpc/configs/ppc44x_defconfig +++ b/arch/powerpc/configs/ppc44x_defconfig | |||
@@ -103,8 +103,7 @@ CONFIG_FAIR_GROUP_SCHED=y | |||
103 | CONFIG_USER_SCHED=y | 103 | CONFIG_USER_SCHED=y |
104 | # CONFIG_CGROUP_SCHED is not set | 104 | # CONFIG_CGROUP_SCHED is not set |
105 | # CONFIG_CGROUPS is not set | 105 | # CONFIG_CGROUPS is not set |
106 | CONFIG_SYSFS_DEPRECATED=y | 106 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
107 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
108 | # CONFIG_RELAY is not set | 107 | # CONFIG_RELAY is not set |
109 | # CONFIG_NAMESPACES is not set | 108 | # CONFIG_NAMESPACES is not set |
110 | CONFIG_BLK_DEV_INITRD=y | 109 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/ppc64_defconfig b/arch/powerpc/configs/ppc64_defconfig index dad617e2a88c..369f4e02c5dd 100644 --- a/arch/powerpc/configs/ppc64_defconfig +++ b/arch/powerpc/configs/ppc64_defconfig | |||
@@ -93,8 +93,7 @@ CONFIG_CPUSETS=y | |||
93 | # CONFIG_GROUP_SCHED is not set | 93 | # CONFIG_GROUP_SCHED is not set |
94 | # CONFIG_CGROUP_CPUACCT is not set | 94 | # CONFIG_CGROUP_CPUACCT is not set |
95 | # CONFIG_RESOURCE_COUNTERS is not set | 95 | # CONFIG_RESOURCE_COUNTERS is not set |
96 | CONFIG_SYSFS_DEPRECATED=y | 96 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
97 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
98 | CONFIG_PROC_PID_CPUSET=y | 97 | CONFIG_PROC_PID_CPUSET=y |
99 | CONFIG_RELAY=y | 98 | CONFIG_RELAY=y |
100 | CONFIG_NAMESPACES=y | 99 | CONFIG_NAMESPACES=y |
diff --git a/arch/powerpc/configs/ppc64e_defconfig b/arch/powerpc/configs/ppc64e_defconfig index 8195f1650cbf..403e82e2e83c 100644 --- a/arch/powerpc/configs/ppc64e_defconfig +++ b/arch/powerpc/configs/ppc64e_defconfig | |||
@@ -107,8 +107,7 @@ CONFIG_CPUSETS=y | |||
107 | CONFIG_PROC_PID_CPUSET=y | 107 | CONFIG_PROC_PID_CPUSET=y |
108 | # CONFIG_CGROUP_CPUACCT is not set | 108 | # CONFIG_CGROUP_CPUACCT is not set |
109 | # CONFIG_RESOURCE_COUNTERS is not set | 109 | # CONFIG_RESOURCE_COUNTERS is not set |
110 | CONFIG_SYSFS_DEPRECATED=y | 110 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
111 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
112 | CONFIG_RELAY=y | 111 | CONFIG_RELAY=y |
113 | CONFIG_NAMESPACES=y | 112 | CONFIG_NAMESPACES=y |
114 | # CONFIG_UTS_NS is not set | 113 | # CONFIG_UTS_NS is not set |
diff --git a/arch/powerpc/configs/pq2fads_defconfig b/arch/powerpc/configs/pq2fads_defconfig index 68c175ea427a..12c8ee8dd12b 100644 --- a/arch/powerpc/configs/pq2fads_defconfig +++ b/arch/powerpc/configs/pq2fads_defconfig | |||
@@ -96,8 +96,7 @@ CONFIG_IKCONFIG=y | |||
96 | CONFIG_IKCONFIG_PROC=y | 96 | CONFIG_IKCONFIG_PROC=y |
97 | CONFIG_LOG_BUF_SHIFT=14 | 97 | CONFIG_LOG_BUF_SHIFT=14 |
98 | # CONFIG_CGROUPS is not set | 98 | # CONFIG_CGROUPS is not set |
99 | CONFIG_SYSFS_DEPRECATED=y | 99 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
100 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
101 | # CONFIG_RELAY is not set | 100 | # CONFIG_RELAY is not set |
102 | # CONFIG_NAMESPACES is not set | 101 | # CONFIG_NAMESPACES is not set |
103 | CONFIG_BLK_DEV_INITRD=y | 102 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/configs/prpmc2800_defconfig b/arch/powerpc/configs/prpmc2800_defconfig index 93f4505b5ac2..a18f597c6e5f 100644 --- a/arch/powerpc/configs/prpmc2800_defconfig +++ b/arch/powerpc/configs/prpmc2800_defconfig | |||
@@ -98,8 +98,7 @@ CONFIG_RCU_FANOUT=32 | |||
98 | # CONFIG_IKCONFIG is not set | 98 | # CONFIG_IKCONFIG is not set |
99 | CONFIG_LOG_BUF_SHIFT=14 | 99 | CONFIG_LOG_BUF_SHIFT=14 |
100 | # CONFIG_CGROUPS is not set | 100 | # CONFIG_CGROUPS is not set |
101 | CONFIG_SYSFS_DEPRECATED=y | 101 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
102 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
103 | # CONFIG_RELAY is not set | 102 | # CONFIG_RELAY is not set |
104 | CONFIG_NAMESPACES=y | 103 | CONFIG_NAMESPACES=y |
105 | # CONFIG_UTS_NS is not set | 104 | # CONFIG_UTS_NS is not set |
diff --git a/arch/powerpc/configs/pseries_defconfig b/arch/powerpc/configs/pseries_defconfig index 16a14589bd40..16ae717d1958 100644 --- a/arch/powerpc/configs/pseries_defconfig +++ b/arch/powerpc/configs/pseries_defconfig | |||
@@ -92,8 +92,7 @@ CONFIG_CPUSETS=y | |||
92 | # CONFIG_GROUP_SCHED is not set | 92 | # CONFIG_GROUP_SCHED is not set |
93 | CONFIG_CGROUP_CPUACCT=y | 93 | CONFIG_CGROUP_CPUACCT=y |
94 | # CONFIG_RESOURCE_COUNTERS is not set | 94 | # CONFIG_RESOURCE_COUNTERS is not set |
95 | CONFIG_SYSFS_DEPRECATED=y | 95 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
96 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
97 | CONFIG_PROC_PID_CPUSET=y | 96 | CONFIG_PROC_PID_CPUSET=y |
98 | CONFIG_RELAY=y | 97 | CONFIG_RELAY=y |
99 | CONFIG_NAMESPACES=y | 98 | CONFIG_NAMESPACES=y |
diff --git a/arch/powerpc/configs/storcenter_defconfig b/arch/powerpc/configs/storcenter_defconfig index b1625801526e..01be0e207f40 100644 --- a/arch/powerpc/configs/storcenter_defconfig +++ b/arch/powerpc/configs/storcenter_defconfig | |||
@@ -95,8 +95,7 @@ CONFIG_RCU_FANOUT=32 | |||
95 | # CONFIG_IKCONFIG is not set | 95 | # CONFIG_IKCONFIG is not set |
96 | CONFIG_LOG_BUF_SHIFT=14 | 96 | CONFIG_LOG_BUF_SHIFT=14 |
97 | # CONFIG_CGROUPS is not set | 97 | # CONFIG_CGROUPS is not set |
98 | CONFIG_SYSFS_DEPRECATED=y | 98 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
99 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
100 | # CONFIG_RELAY is not set | 99 | # CONFIG_RELAY is not set |
101 | # CONFIG_NAMESPACES is not set | 100 | # CONFIG_NAMESPACES is not set |
102 | # CONFIG_BLK_DEV_INITRD is not set | 101 | # CONFIG_BLK_DEV_INITRD is not set |
diff --git a/arch/powerpc/configs/wii_defconfig b/arch/powerpc/configs/wii_defconfig index c386828c639a..ee054f8118be 100644 --- a/arch/powerpc/configs/wii_defconfig +++ b/arch/powerpc/configs/wii_defconfig | |||
@@ -102,8 +102,7 @@ CONFIG_FAIR_GROUP_SCHED=y | |||
102 | CONFIG_USER_SCHED=y | 102 | CONFIG_USER_SCHED=y |
103 | # CONFIG_CGROUP_SCHED is not set | 103 | # CONFIG_CGROUP_SCHED is not set |
104 | # CONFIG_CGROUPS is not set | 104 | # CONFIG_CGROUPS is not set |
105 | CONFIG_SYSFS_DEPRECATED=y | 105 | # CONFIG_SYSFS_DEPRECATED_V2 is not set |
106 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
107 | CONFIG_RELAY=y | 106 | CONFIG_RELAY=y |
108 | # CONFIG_NAMESPACES is not set | 107 | # CONFIG_NAMESPACES is not set |
109 | CONFIG_BLK_DEV_INITRD=y | 108 | CONFIG_BLK_DEV_INITRD=y |
diff --git a/arch/powerpc/include/asm/cache.h b/arch/powerpc/include/asm/cache.h index 725634fc18c6..4b509411ad8a 100644 --- a/arch/powerpc/include/asm/cache.h +++ b/arch/powerpc/include/asm/cache.h | |||
@@ -42,7 +42,7 @@ extern struct ppc64_caches ppc64_caches; | |||
42 | #endif /* __powerpc64__ && ! __ASSEMBLY__ */ | 42 | #endif /* __powerpc64__ && ! __ASSEMBLY__ */ |
43 | 43 | ||
44 | #if !defined(__ASSEMBLY__) | 44 | #if !defined(__ASSEMBLY__) |
45 | #define __read_mostly __attribute__((__section__(".data.read_mostly"))) | 45 | #define __read_mostly __attribute__((__section__(".data..read_mostly"))) |
46 | #endif | 46 | #endif |
47 | 47 | ||
48 | #endif /* __KERNEL__ */ | 48 | #endif /* __KERNEL__ */ |
diff --git a/arch/powerpc/include/asm/cputable.h b/arch/powerpc/include/asm/cputable.h index e3cba4e1eb34..b0b21134f61a 100644 --- a/arch/powerpc/include/asm/cputable.h +++ b/arch/powerpc/include/asm/cputable.h | |||
@@ -70,6 +70,7 @@ struct pt_regs; | |||
70 | extern int machine_check_generic(struct pt_regs *regs); | 70 | extern int machine_check_generic(struct pt_regs *regs); |
71 | extern int machine_check_4xx(struct pt_regs *regs); | 71 | extern int machine_check_4xx(struct pt_regs *regs); |
72 | extern int machine_check_440A(struct pt_regs *regs); | 72 | extern int machine_check_440A(struct pt_regs *regs); |
73 | extern int machine_check_e500mc(struct pt_regs *regs); | ||
73 | extern int machine_check_e500(struct pt_regs *regs); | 74 | extern int machine_check_e500(struct pt_regs *regs); |
74 | extern int machine_check_e200(struct pt_regs *regs); | 75 | extern int machine_check_e200(struct pt_regs *regs); |
75 | extern int machine_check_47x(struct pt_regs *regs); | 76 | extern int machine_check_47x(struct pt_regs *regs); |
diff --git a/arch/powerpc/include/asm/irq.h b/arch/powerpc/include/asm/irq.h index e054baef1845..ecba37a91749 100644 --- a/arch/powerpc/include/asm/irq.h +++ b/arch/powerpc/include/asm/irq.h | |||
@@ -358,7 +358,6 @@ extern void exc_lvl_ctx_init(void); | |||
358 | #define exc_lvl_ctx_init() | 358 | #define exc_lvl_ctx_init() |
359 | #endif | 359 | #endif |
360 | 360 | ||
361 | #ifdef CONFIG_IRQSTACKS | ||
362 | /* | 361 | /* |
363 | * Per-cpu stacks for handling hard and soft interrupts. | 362 | * Per-cpu stacks for handling hard and soft interrupts. |
364 | */ | 363 | */ |
@@ -369,11 +368,6 @@ extern void irq_ctx_init(void); | |||
369 | extern void call_do_softirq(struct thread_info *tp); | 368 | extern void call_do_softirq(struct thread_info *tp); |
370 | extern int call_handle_irq(int irq, void *p1, | 369 | extern int call_handle_irq(int irq, void *p1, |
371 | struct thread_info *tp, void *func); | 370 | struct thread_info *tp, void *func); |
372 | #else | ||
373 | #define irq_ctx_init() | ||
374 | |||
375 | #endif /* CONFIG_IRQSTACKS */ | ||
376 | |||
377 | extern void do_IRQ(struct pt_regs *regs); | 371 | extern void do_IRQ(struct pt_regs *regs); |
378 | 372 | ||
379 | #endif /* _ASM_IRQ_H */ | 373 | #endif /* _ASM_IRQ_H */ |
diff --git a/arch/powerpc/include/asm/kdump.h b/arch/powerpc/include/asm/kdump.h index 5ebfe5d3c61f..6857af58b02e 100644 --- a/arch/powerpc/include/asm/kdump.h +++ b/arch/powerpc/include/asm/kdump.h | |||
@@ -3,8 +3,17 @@ | |||
3 | 3 | ||
4 | #include <asm/page.h> | 4 | #include <asm/page.h> |
5 | 5 | ||
6 | /* Kdump kernel runs at 32 MB, change at your peril. */ | 6 | /* |
7 | * If CONFIG_RELOCATABLE is enabled we can place the kdump kernel anywhere. | ||
8 | * To keep enough space in the RMO for the first stage kernel on 64bit, we | ||
9 | * place it at 64MB. If CONFIG_RELOCATABLE is not enabled we must place | ||
10 | * the second stage at 32MB. | ||
11 | */ | ||
12 | #if defined(CONFIG_RELOCATABLE) && defined(CONFIG_PPC64) | ||
13 | #define KDUMP_KERNELBASE 0x4000000 | ||
14 | #else | ||
7 | #define KDUMP_KERNELBASE 0x2000000 | 15 | #define KDUMP_KERNELBASE 0x2000000 |
16 | #endif | ||
8 | 17 | ||
9 | /* How many bytes to reserve at zero for kdump. The reserve limit should | 18 | /* How many bytes to reserve at zero for kdump. The reserve limit should |
10 | * be greater or equal to the trampoline's end address. | 19 | * be greater or equal to the trampoline's end address. |
diff --git a/arch/powerpc/include/asm/kexec.h b/arch/powerpc/include/asm/kexec.h index a6ca6da1430b..2a9cd74a841e 100644 --- a/arch/powerpc/include/asm/kexec.h +++ b/arch/powerpc/include/asm/kexec.h | |||
@@ -2,6 +2,18 @@ | |||
2 | #define _ASM_POWERPC_KEXEC_H | 2 | #define _ASM_POWERPC_KEXEC_H |
3 | #ifdef __KERNEL__ | 3 | #ifdef __KERNEL__ |
4 | 4 | ||
5 | #ifdef CONFIG_FSL_BOOKE | ||
6 | |||
7 | /* | ||
8 | * On FSL-BookE we setup a 1:1 mapping which covers the first 2GiB of memory | ||
9 | * and therefore we can only deal with memory within this range | ||
10 | */ | ||
11 | #define KEXEC_SOURCE_MEMORY_LIMIT (2 * 1024 * 1024 * 1024UL) | ||
12 | #define KEXEC_DESTINATION_MEMORY_LIMIT (2 * 1024 * 1024 * 1024UL) | ||
13 | #define KEXEC_CONTROL_MEMORY_LIMIT (2 * 1024 * 1024 * 1024UL) | ||
14 | |||
15 | #else | ||
16 | |||
5 | /* | 17 | /* |
6 | * Maximum page that is mapped directly into kernel memory. | 18 | * Maximum page that is mapped directly into kernel memory. |
7 | * XXX: Since we copy virt we can use any page we allocate | 19 | * XXX: Since we copy virt we can use any page we allocate |
@@ -21,6 +33,7 @@ | |||
21 | /* TASK_SIZE, probably left over from use_mm ?? */ | 33 | /* TASK_SIZE, probably left over from use_mm ?? */ |
22 | #define KEXEC_CONTROL_MEMORY_LIMIT TASK_SIZE | 34 | #define KEXEC_CONTROL_MEMORY_LIMIT TASK_SIZE |
23 | #endif | 35 | #endif |
36 | #endif | ||
24 | 37 | ||
25 | #define KEXEC_CONTROL_PAGE_SIZE 4096 | 38 | #define KEXEC_CONTROL_PAGE_SIZE 4096 |
26 | 39 | ||
diff --git a/arch/powerpc/include/asm/macio.h b/arch/powerpc/include/asm/macio.h index 19a661b4cb98..675e159b5ef4 100644 --- a/arch/powerpc/include/asm/macio.h +++ b/arch/powerpc/include/asm/macio.h | |||
@@ -123,10 +123,6 @@ static inline struct pci_dev *macio_get_pci_dev(struct macio_dev *mdev) | |||
123 | */ | 123 | */ |
124 | struct macio_driver | 124 | struct macio_driver |
125 | { | 125 | { |
126 | char *name; | ||
127 | struct of_device_id *match_table; | ||
128 | struct module *owner; | ||
129 | |||
130 | int (*probe)(struct macio_dev* dev, const struct of_device_id *match); | 126 | int (*probe)(struct macio_dev* dev, const struct of_device_id *match); |
131 | int (*remove)(struct macio_dev* dev); | 127 | int (*remove)(struct macio_dev* dev); |
132 | 128 | ||
diff --git a/arch/powerpc/include/asm/page_64.h b/arch/powerpc/include/asm/page_64.h index bfc4e027e2ad..358ff14ea25e 100644 --- a/arch/powerpc/include/asm/page_64.h +++ b/arch/powerpc/include/asm/page_64.h | |||
@@ -162,14 +162,6 @@ do { \ | |||
162 | 162 | ||
163 | #endif /* !CONFIG_HUGETLB_PAGE */ | 163 | #endif /* !CONFIG_HUGETLB_PAGE */ |
164 | 164 | ||
165 | #ifdef MODULE | ||
166 | #define __page_aligned __attribute__((__aligned__(PAGE_SIZE))) | ||
167 | #else | ||
168 | #define __page_aligned \ | ||
169 | __attribute__((__aligned__(PAGE_SIZE), \ | ||
170 | __section__(".data.page_aligned"))) | ||
171 | #endif | ||
172 | |||
173 | #define VM_DATA_DEFAULT_FLAGS \ | 165 | #define VM_DATA_DEFAULT_FLAGS \ |
174 | (test_thread_flag(TIF_32BIT) ? \ | 166 | (test_thread_flag(TIF_32BIT) ? \ |
175 | VM_DATA_DEFAULT_FLAGS32 : VM_DATA_DEFAULT_FLAGS64) | 167 | VM_DATA_DEFAULT_FLAGS32 : VM_DATA_DEFAULT_FLAGS64) |
diff --git a/arch/powerpc/include/asm/ptrace.h b/arch/powerpc/include/asm/ptrace.h index 5d8be0416227..0175a676b34b 100644 --- a/arch/powerpc/include/asm/ptrace.h +++ b/arch/powerpc/include/asm/ptrace.h | |||
@@ -24,11 +24,7 @@ | |||
24 | * 2 of the License, or (at your option) any later version. | 24 | * 2 of the License, or (at your option) any later version. |
25 | */ | 25 | */ |
26 | 26 | ||
27 | #ifdef __KERNEL__ | ||
28 | #include <linux/types.h> | 27 | #include <linux/types.h> |
29 | #else | ||
30 | #include <stdint.h> | ||
31 | #endif | ||
32 | 28 | ||
33 | #ifndef __ASSEMBLY__ | 29 | #ifndef __ASSEMBLY__ |
34 | 30 | ||
@@ -364,13 +360,13 @@ static inline unsigned long regs_get_kernel_stack_nth(struct pt_regs *regs, | |||
364 | #ifndef __ASSEMBLY__ | 360 | #ifndef __ASSEMBLY__ |
365 | 361 | ||
366 | struct ppc_debug_info { | 362 | struct ppc_debug_info { |
367 | uint32_t version; /* Only version 1 exists to date */ | 363 | __u32 version; /* Only version 1 exists to date */ |
368 | uint32_t num_instruction_bps; | 364 | __u32 num_instruction_bps; |
369 | uint32_t num_data_bps; | 365 | __u32 num_data_bps; |
370 | uint32_t num_condition_regs; | 366 | __u32 num_condition_regs; |
371 | uint32_t data_bp_alignment; | 367 | __u32 data_bp_alignment; |
372 | uint32_t sizeof_condition; /* size of the DVC register */ | 368 | __u32 sizeof_condition; /* size of the DVC register */ |
373 | uint64_t features; | 369 | __u64 features; |
374 | }; | 370 | }; |
375 | 371 | ||
376 | #endif /* __ASSEMBLY__ */ | 372 | #endif /* __ASSEMBLY__ */ |
@@ -386,13 +382,13 @@ struct ppc_debug_info { | |||
386 | #ifndef __ASSEMBLY__ | 382 | #ifndef __ASSEMBLY__ |
387 | 383 | ||
388 | struct ppc_hw_breakpoint { | 384 | struct ppc_hw_breakpoint { |
389 | uint32_t version; /* currently, version must be 1 */ | 385 | __u32 version; /* currently, version must be 1 */ |
390 | uint32_t trigger_type; /* only some combinations allowed */ | 386 | __u32 trigger_type; /* only some combinations allowed */ |
391 | uint32_t addr_mode; /* address match mode */ | 387 | __u32 addr_mode; /* address match mode */ |
392 | uint32_t condition_mode; /* break/watchpoint condition flags */ | 388 | __u32 condition_mode; /* break/watchpoint condition flags */ |
393 | uint64_t addr; /* break/watchpoint address */ | 389 | __u64 addr; /* break/watchpoint address */ |
394 | uint64_t addr2; /* range end or mask */ | 390 | __u64 addr2; /* range end or mask */ |
395 | uint64_t condition_value; /* contents of the DVC register */ | 391 | __u64 condition_value; /* contents of the DVC register */ |
396 | }; | 392 | }; |
397 | 393 | ||
398 | #endif /* __ASSEMBLY__ */ | 394 | #endif /* __ASSEMBLY__ */ |
diff --git a/arch/powerpc/include/asm/reg_booke.h b/arch/powerpc/include/asm/reg_booke.h index 5304a37ba425..2360317179a9 100644 --- a/arch/powerpc/include/asm/reg_booke.h +++ b/arch/powerpc/include/asm/reg_booke.h | |||
@@ -4,6 +4,12 @@ | |||
4 | * are not true Book E PowerPCs, they borrowed a number of features | 4 | * are not true Book E PowerPCs, they borrowed a number of features |
5 | * before Book E was finalized, and are included here as well. Unfortunatly, | 5 | * before Book E was finalized, and are included here as well. Unfortunatly, |
6 | * they sometimes used different locations than true Book E CPUs did. | 6 | * they sometimes used different locations than true Book E CPUs did. |
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License version 2 | ||
10 | * as published by the Free Software Foundation. | ||
11 | * | ||
12 | * Copyright 2009-2010 Freescale Semiconductor, Inc. | ||
7 | */ | 13 | */ |
8 | #ifdef __KERNEL__ | 14 | #ifdef __KERNEL__ |
9 | #ifndef __ASM_POWERPC_REG_BOOKE_H__ | 15 | #ifndef __ASM_POWERPC_REG_BOOKE_H__ |
@@ -88,6 +94,7 @@ | |||
88 | #define SPRN_IVOR35 0x213 /* Interrupt Vector Offset Register 35 */ | 94 | #define SPRN_IVOR35 0x213 /* Interrupt Vector Offset Register 35 */ |
89 | #define SPRN_IVOR36 0x214 /* Interrupt Vector Offset Register 36 */ | 95 | #define SPRN_IVOR36 0x214 /* Interrupt Vector Offset Register 36 */ |
90 | #define SPRN_IVOR37 0x215 /* Interrupt Vector Offset Register 37 */ | 96 | #define SPRN_IVOR37 0x215 /* Interrupt Vector Offset Register 37 */ |
97 | #define SPRN_MCARU 0x239 /* Machine Check Address Register Upper */ | ||
91 | #define SPRN_MCSRR0 0x23A /* Machine Check Save and Restore Register 0 */ | 98 | #define SPRN_MCSRR0 0x23A /* Machine Check Save and Restore Register 0 */ |
92 | #define SPRN_MCSRR1 0x23B /* Machine Check Save and Restore Register 1 */ | 99 | #define SPRN_MCSRR1 0x23B /* Machine Check Save and Restore Register 1 */ |
93 | #define SPRN_MCSR 0x23C /* Machine Check Status Register */ | 100 | #define SPRN_MCSR 0x23C /* Machine Check Status Register */ |
@@ -196,8 +203,11 @@ | |||
196 | #define PPC47x_MCSR_IPR 0x00400000 /* Imprecise Machine Check Exception */ | 203 | #define PPC47x_MCSR_IPR 0x00400000 /* Imprecise Machine Check Exception */ |
197 | 204 | ||
198 | #ifdef CONFIG_E500 | 205 | #ifdef CONFIG_E500 |
206 | /* All e500 */ | ||
199 | #define MCSR_MCP 0x80000000UL /* Machine Check Input Pin */ | 207 | #define MCSR_MCP 0x80000000UL /* Machine Check Input Pin */ |
200 | #define MCSR_ICPERR 0x40000000UL /* I-Cache Parity Error */ | 208 | #define MCSR_ICPERR 0x40000000UL /* I-Cache Parity Error */ |
209 | |||
210 | /* e500v1/v2 */ | ||
201 | #define MCSR_DCP_PERR 0x20000000UL /* D-Cache Push Parity Error */ | 211 | #define MCSR_DCP_PERR 0x20000000UL /* D-Cache Push Parity Error */ |
202 | #define MCSR_DCPERR 0x10000000UL /* D-Cache Parity Error */ | 212 | #define MCSR_DCPERR 0x10000000UL /* D-Cache Parity Error */ |
203 | #define MCSR_BUS_IAERR 0x00000080UL /* Instruction Address Error */ | 213 | #define MCSR_BUS_IAERR 0x00000080UL /* Instruction Address Error */ |
@@ -209,12 +219,20 @@ | |||
209 | #define MCSR_BUS_IPERR 0x00000002UL /* Instruction parity Error */ | 219 | #define MCSR_BUS_IPERR 0x00000002UL /* Instruction parity Error */ |
210 | #define MCSR_BUS_RPERR 0x00000001UL /* Read parity Error */ | 220 | #define MCSR_BUS_RPERR 0x00000001UL /* Read parity Error */ |
211 | 221 | ||
212 | /* e500 parts may set unused bits in MCSR; mask these off */ | 222 | /* e500mc */ |
213 | #define MCSR_MASK (MCSR_MCP | MCSR_ICPERR | MCSR_DCP_PERR | \ | 223 | #define MCSR_DCPERR_MC 0x20000000UL /* D-Cache Parity Error */ |
214 | MCSR_DCPERR | MCSR_BUS_IAERR | MCSR_BUS_RAERR | \ | 224 | #define MCSR_L2MMU_MHIT 0x04000000UL /* Hit on multiple TLB entries */ |
215 | MCSR_BUS_WAERR | MCSR_BUS_IBERR | MCSR_BUS_RBERR | \ | 225 | #define MCSR_NMI 0x00100000UL /* Non-Maskable Interrupt */ |
216 | MCSR_BUS_WBERR | MCSR_BUS_IPERR | MCSR_BUS_RPERR) | 226 | #define MCSR_MAV 0x00080000UL /* MCAR address valid */ |
227 | #define MCSR_MEA 0x00040000UL /* MCAR is effective address */ | ||
228 | #define MCSR_IF 0x00010000UL /* Instruction Fetch */ | ||
229 | #define MCSR_LD 0x00008000UL /* Load */ | ||
230 | #define MCSR_ST 0x00004000UL /* Store */ | ||
231 | #define MCSR_LDG 0x00002000UL /* Guarded Load */ | ||
232 | #define MCSR_TLBSYNC 0x00000002UL /* Multiple tlbsyncs detected */ | ||
233 | #define MCSR_BSL2_ERR 0x00000001UL /* Backside L2 cache error */ | ||
217 | #endif | 234 | #endif |
235 | |||
218 | #ifdef CONFIG_E200 | 236 | #ifdef CONFIG_E200 |
219 | #define MCSR_MCP 0x80000000UL /* Machine Check Input Pin */ | 237 | #define MCSR_MCP 0x80000000UL /* Machine Check Input Pin */ |
220 | #define MCSR_CP_PERR 0x20000000UL /* Cache Push Parity Error */ | 238 | #define MCSR_CP_PERR 0x20000000UL /* Cache Push Parity Error */ |
@@ -225,11 +243,6 @@ | |||
225 | #define MCSR_BUS_DRERR 0x00000008UL /* Read Bus Error on data load */ | 243 | #define MCSR_BUS_DRERR 0x00000008UL /* Read Bus Error on data load */ |
226 | #define MCSR_BUS_WRERR 0x00000004UL /* Write Bus Error on buffered | 244 | #define MCSR_BUS_WRERR 0x00000004UL /* Write Bus Error on buffered |
227 | store or cache line push */ | 245 | store or cache line push */ |
228 | |||
229 | /* e200 parts may set unused bits in MCSR; mask these off */ | ||
230 | #define MCSR_MASK (MCSR_MCP | MCSR_CP_PERR | MCSR_CPERR | \ | ||
231 | MCSR_EXCP_ERR | MCSR_BUS_IRERR | MCSR_BUS_DRERR | \ | ||
232 | MCSR_BUS_WRERR) | ||
233 | #endif | 246 | #endif |
234 | 247 | ||
235 | /* Bit definitions for the DBSR. */ | 248 | /* Bit definitions for the DBSR. */ |
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index 877326320e74..58d0572de6f9 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile | |||
@@ -57,8 +57,12 @@ obj-$(CONFIG_CRASH_DUMP) += crash_dump.o | |||
57 | obj-$(CONFIG_E500) += idle_e500.o | 57 | obj-$(CONFIG_E500) += idle_e500.o |
58 | obj-$(CONFIG_6xx) += idle_6xx.o l2cr_6xx.o cpu_setup_6xx.o | 58 | obj-$(CONFIG_6xx) += idle_6xx.o l2cr_6xx.o cpu_setup_6xx.o |
59 | obj-$(CONFIG_TAU) += tau_6xx.o | 59 | obj-$(CONFIG_TAU) += tau_6xx.o |
60 | obj-$(CONFIG_HIBERNATION) += swsusp.o suspend.o \ | 60 | obj-$(CONFIG_HIBERNATION) += swsusp.o suspend.o |
61 | swsusp_$(CONFIG_WORD_SIZE).o | 61 | ifeq ($(CONFIG_FSL_BOOKE),y) |
62 | obj-$(CONFIG_HIBERNATION) += swsusp_booke.o | ||
63 | else | ||
64 | obj-$(CONFIG_HIBERNATION) += swsusp_$(CONFIG_WORD_SIZE).o | ||
65 | endif | ||
62 | obj64-$(CONFIG_HIBERNATION) += swsusp_asm64.o | 66 | obj64-$(CONFIG_HIBERNATION) += swsusp_asm64.o |
63 | obj-$(CONFIG_MODULES) += module.o module_$(CONFIG_WORD_SIZE).o | 67 | obj-$(CONFIG_MODULES) += module.o module_$(CONFIG_WORD_SIZE).o |
64 | obj-$(CONFIG_44x) += cpu_setup_44x.o | 68 | obj-$(CONFIG_44x) += cpu_setup_44x.o |
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c index 9556be903e96..87aa0f3c6047 100644 --- a/arch/powerpc/kernel/cputable.c +++ b/arch/powerpc/kernel/cputable.c | |||
@@ -1840,7 +1840,7 @@ static struct cpu_spec __initdata cpu_specs[] = { | |||
1840 | .oprofile_cpu_type = "ppc/e500mc", | 1840 | .oprofile_cpu_type = "ppc/e500mc", |
1841 | .oprofile_type = PPC_OPROFILE_FSL_EMB, | 1841 | .oprofile_type = PPC_OPROFILE_FSL_EMB, |
1842 | .cpu_setup = __setup_cpu_e500mc, | 1842 | .cpu_setup = __setup_cpu_e500mc, |
1843 | .machine_check = machine_check_e500, | 1843 | .machine_check = machine_check_e500mc, |
1844 | .platform = "ppce500mc", | 1844 | .platform = "ppce500mc", |
1845 | }, | 1845 | }, |
1846 | { /* default match */ | 1846 | { /* default match */ |
diff --git a/arch/powerpc/kernel/crash.c b/arch/powerpc/kernel/crash.c index 8c066d6a8e4b..29df48f2b61a 100644 --- a/arch/powerpc/kernel/crash.c +++ b/arch/powerpc/kernel/crash.c | |||
@@ -163,6 +163,7 @@ static void crash_kexec_prepare_cpus(int cpu) | |||
163 | } | 163 | } |
164 | 164 | ||
165 | /* wait for all the CPUs to hit real mode but timeout if they don't come in */ | 165 | /* wait for all the CPUs to hit real mode but timeout if they don't come in */ |
166 | #ifdef CONFIG_PPC_STD_MMU_64 | ||
166 | static void crash_kexec_wait_realmode(int cpu) | 167 | static void crash_kexec_wait_realmode(int cpu) |
167 | { | 168 | { |
168 | unsigned int msecs; | 169 | unsigned int msecs; |
@@ -187,6 +188,7 @@ static void crash_kexec_wait_realmode(int cpu) | |||
187 | } | 188 | } |
188 | mb(); | 189 | mb(); |
189 | } | 190 | } |
191 | #endif | ||
190 | 192 | ||
191 | /* | 193 | /* |
192 | * This function will be called by secondary cpus or by kexec cpu | 194 | * This function will be called by secondary cpus or by kexec cpu |
@@ -445,7 +447,9 @@ void default_machine_crash_shutdown(struct pt_regs *regs) | |||
445 | crash_kexec_prepare_cpus(crashing_cpu); | 447 | crash_kexec_prepare_cpus(crashing_cpu); |
446 | cpu_set(crashing_cpu, cpus_in_crash); | 448 | cpu_set(crashing_cpu, cpus_in_crash); |
447 | crash_kexec_stop_spus(); | 449 | crash_kexec_stop_spus(); |
450 | #if defined(CONFIG_PPC_STD_MMU_64) && defined(CONFIG_SMP) | ||
448 | crash_kexec_wait_realmode(crashing_cpu); | 451 | crash_kexec_wait_realmode(crashing_cpu); |
452 | #endif | ||
449 | if (ppc_md.kexec_cpu_down) | 453 | if (ppc_md.kexec_cpu_down) |
450 | ppc_md.kexec_cpu_down(1, 0); | 454 | ppc_md.kexec_cpu_down(1, 0); |
451 | } | 455 | } |
diff --git a/arch/powerpc/kernel/fsl_booke_entry_mapping.S b/arch/powerpc/kernel/fsl_booke_entry_mapping.S new file mode 100644 index 000000000000..beb4d78a2304 --- /dev/null +++ b/arch/powerpc/kernel/fsl_booke_entry_mapping.S | |||
@@ -0,0 +1,237 @@ | |||
1 | |||
2 | /* 1. Find the index of the entry we're executing in */ | ||
3 | bl invstr /* Find our address */ | ||
4 | invstr: mflr r6 /* Make it accessible */ | ||
5 | mfmsr r7 | ||
6 | rlwinm r4,r7,27,31,31 /* extract MSR[IS] */ | ||
7 | mfspr r7, SPRN_PID0 | ||
8 | slwi r7,r7,16 | ||
9 | or r7,r7,r4 | ||
10 | mtspr SPRN_MAS6,r7 | ||
11 | tlbsx 0,r6 /* search MSR[IS], SPID=PID0 */ | ||
12 | mfspr r7,SPRN_MAS1 | ||
13 | andis. r7,r7,MAS1_VALID@h | ||
14 | bne match_TLB | ||
15 | |||
16 | mfspr r7,SPRN_MMUCFG | ||
17 | rlwinm r7,r7,21,28,31 /* extract MMUCFG[NPIDS] */ | ||
18 | cmpwi r7,3 | ||
19 | bne match_TLB /* skip if NPIDS != 3 */ | ||
20 | |||
21 | mfspr r7,SPRN_PID1 | ||
22 | slwi r7,r7,16 | ||
23 | or r7,r7,r4 | ||
24 | mtspr SPRN_MAS6,r7 | ||
25 | tlbsx 0,r6 /* search MSR[IS], SPID=PID1 */ | ||
26 | mfspr r7,SPRN_MAS1 | ||
27 | andis. r7,r7,MAS1_VALID@h | ||
28 | bne match_TLB | ||
29 | mfspr r7, SPRN_PID2 | ||
30 | slwi r7,r7,16 | ||
31 | or r7,r7,r4 | ||
32 | mtspr SPRN_MAS6,r7 | ||
33 | tlbsx 0,r6 /* Fall through, we had to match */ | ||
34 | |||
35 | match_TLB: | ||
36 | mfspr r7,SPRN_MAS0 | ||
37 | rlwinm r3,r7,16,20,31 /* Extract MAS0(Entry) */ | ||
38 | |||
39 | mfspr r7,SPRN_MAS1 /* Insure IPROT set */ | ||
40 | oris r7,r7,MAS1_IPROT@h | ||
41 | mtspr SPRN_MAS1,r7 | ||
42 | tlbwe | ||
43 | |||
44 | /* 2. Invalidate all entries except the entry we're executing in */ | ||
45 | mfspr r9,SPRN_TLB1CFG | ||
46 | andi. r9,r9,0xfff | ||
47 | li r6,0 /* Set Entry counter to 0 */ | ||
48 | 1: lis r7,0x1000 /* Set MAS0(TLBSEL) = 1 */ | ||
49 | rlwimi r7,r6,16,4,15 /* Setup MAS0 = TLBSEL | ESEL(r6) */ | ||
50 | mtspr SPRN_MAS0,r7 | ||
51 | tlbre | ||
52 | mfspr r7,SPRN_MAS1 | ||
53 | rlwinm r7,r7,0,2,31 /* Clear MAS1 Valid and IPROT */ | ||
54 | cmpw r3,r6 | ||
55 | beq skpinv /* Dont update the current execution TLB */ | ||
56 | mtspr SPRN_MAS1,r7 | ||
57 | tlbwe | ||
58 | isync | ||
59 | skpinv: addi r6,r6,1 /* Increment */ | ||
60 | cmpw r6,r9 /* Are we done? */ | ||
61 | bne 1b /* If not, repeat */ | ||
62 | |||
63 | /* Invalidate TLB0 */ | ||
64 | li r6,0x04 | ||
65 | tlbivax 0,r6 | ||
66 | TLBSYNC | ||
67 | /* Invalidate TLB1 */ | ||
68 | li r6,0x0c | ||
69 | tlbivax 0,r6 | ||
70 | TLBSYNC | ||
71 | |||
72 | /* 3. Setup a temp mapping and jump to it */ | ||
73 | andi. r5, r3, 0x1 /* Find an entry not used and is non-zero */ | ||
74 | addi r5, r5, 0x1 | ||
75 | lis r7,0x1000 /* Set MAS0(TLBSEL) = 1 */ | ||
76 | rlwimi r7,r3,16,4,15 /* Setup MAS0 = TLBSEL | ESEL(r3) */ | ||
77 | mtspr SPRN_MAS0,r7 | ||
78 | tlbre | ||
79 | |||
80 | /* grab and fixup the RPN */ | ||
81 | mfspr r6,SPRN_MAS1 /* extract MAS1[SIZE] */ | ||
82 | rlwinm r6,r6,25,27,31 | ||
83 | li r8,-1 | ||
84 | addi r6,r6,10 | ||
85 | slw r6,r8,r6 /* convert to mask */ | ||
86 | |||
87 | bl 1f /* Find our address */ | ||
88 | 1: mflr r7 | ||
89 | |||
90 | mfspr r8,SPRN_MAS3 | ||
91 | #ifdef CONFIG_PHYS_64BIT | ||
92 | mfspr r23,SPRN_MAS7 | ||
93 | #endif | ||
94 | and r8,r6,r8 | ||
95 | subfic r9,r6,-4096 | ||
96 | and r9,r9,r7 | ||
97 | |||
98 | or r25,r8,r9 | ||
99 | ori r8,r25,(MAS3_SX|MAS3_SW|MAS3_SR) | ||
100 | |||
101 | /* Just modify the entry ID and EPN for the temp mapping */ | ||
102 | lis r7,0x1000 /* Set MAS0(TLBSEL) = 1 */ | ||
103 | rlwimi r7,r5,16,4,15 /* Setup MAS0 = TLBSEL | ESEL(r5) */ | ||
104 | mtspr SPRN_MAS0,r7 | ||
105 | xori r6,r4,1 /* Setup TMP mapping in the other Address space */ | ||
106 | slwi r6,r6,12 | ||
107 | oris r6,r6,(MAS1_VALID|MAS1_IPROT)@h | ||
108 | ori r6,r6,(MAS1_TSIZE(BOOK3E_PAGESZ_4K))@l | ||
109 | mtspr SPRN_MAS1,r6 | ||
110 | mfspr r6,SPRN_MAS2 | ||
111 | li r7,0 /* temp EPN = 0 */ | ||
112 | rlwimi r7,r6,0,20,31 | ||
113 | mtspr SPRN_MAS2,r7 | ||
114 | mtspr SPRN_MAS3,r8 | ||
115 | tlbwe | ||
116 | |||
117 | xori r6,r4,1 | ||
118 | slwi r6,r6,5 /* setup new context with other address space */ | ||
119 | bl 1f /* Find our address */ | ||
120 | 1: mflr r9 | ||
121 | rlwimi r7,r9,0,20,31 | ||
122 | addi r7,r7,(2f - 1b) | ||
123 | mtspr SPRN_SRR0,r7 | ||
124 | mtspr SPRN_SRR1,r6 | ||
125 | rfi | ||
126 | 2: | ||
127 | /* 4. Clear out PIDs & Search info */ | ||
128 | li r6,0 | ||
129 | mtspr SPRN_MAS6,r6 | ||
130 | mtspr SPRN_PID0,r6 | ||
131 | |||
132 | mfspr r7,SPRN_MMUCFG | ||
133 | rlwinm r7,r7,21,28,31 /* extract MMUCFG[NPIDS] */ | ||
134 | cmpwi r7,3 | ||
135 | bne 2f /* skip if NPIDS != 3 */ | ||
136 | |||
137 | mtspr SPRN_PID1,r6 | ||
138 | mtspr SPRN_PID2,r6 | ||
139 | |||
140 | /* 5. Invalidate mapping we started in */ | ||
141 | 2: | ||
142 | lis r7,0x1000 /* Set MAS0(TLBSEL) = 1 */ | ||
143 | rlwimi r7,r3,16,4,15 /* Setup MAS0 = TLBSEL | ESEL(r3) */ | ||
144 | mtspr SPRN_MAS0,r7 | ||
145 | tlbre | ||
146 | mfspr r6,SPRN_MAS1 | ||
147 | rlwinm r6,r6,0,2,0 /* clear IPROT */ | ||
148 | mtspr SPRN_MAS1,r6 | ||
149 | tlbwe | ||
150 | /* Invalidate TLB1 */ | ||
151 | li r9,0x0c | ||
152 | tlbivax 0,r9 | ||
153 | TLBSYNC | ||
154 | |||
155 | /* The mapping only needs to be cache-coherent on SMP */ | ||
156 | #ifdef CONFIG_SMP | ||
157 | #define M_IF_SMP MAS2_M | ||
158 | #else | ||
159 | #define M_IF_SMP 0 | ||
160 | #endif | ||
161 | |||
162 | #if defined(ENTRY_MAPPING_BOOT_SETUP) | ||
163 | |||
164 | /* 6. Setup KERNELBASE mapping in TLB1[0] */ | ||
165 | lis r6,0x1000 /* Set MAS0(TLBSEL) = TLB1(1), ESEL = 0 */ | ||
166 | mtspr SPRN_MAS0,r6 | ||
167 | lis r6,(MAS1_VALID|MAS1_IPROT)@h | ||
168 | ori r6,r6,(MAS1_TSIZE(BOOK3E_PAGESZ_64M))@l | ||
169 | mtspr SPRN_MAS1,r6 | ||
170 | lis r6,MAS2_VAL(PAGE_OFFSET, BOOK3E_PAGESZ_64M, M_IF_SMP)@h | ||
171 | ori r6,r6,MAS2_VAL(PAGE_OFFSET, BOOK3E_PAGESZ_64M, M_IF_SMP)@l | ||
172 | mtspr SPRN_MAS2,r6 | ||
173 | mtspr SPRN_MAS3,r8 | ||
174 | tlbwe | ||
175 | |||
176 | /* 7. Jump to KERNELBASE mapping */ | ||
177 | lis r6,(KERNELBASE & ~0xfff)@h | ||
178 | ori r6,r6,(KERNELBASE & ~0xfff)@l | ||
179 | |||
180 | #elif defined(ENTRY_MAPPING_KEXEC_SETUP) | ||
181 | /* | ||
182 | * 6. Setup a 1:1 mapping in TLB1. Esel 0 is unsued, 1 or 2 contains the tmp | ||
183 | * mapping so we start at 3. We setup 8 mappings, each 256MiB in size. This | ||
184 | * will cover the first 2GiB of memory. | ||
185 | */ | ||
186 | |||
187 | lis r10, (MAS1_VALID|MAS1_IPROT)@h | ||
188 | ori r10,r10, (MAS1_TSIZE(BOOK3E_PAGESZ_256M))@l | ||
189 | li r11, 0 | ||
190 | li r0, 8 | ||
191 | mtctr r0 | ||
192 | |||
193 | next_tlb_setup: | ||
194 | addi r0, r11, 3 | ||
195 | rlwinm r0, r0, 16, 4, 15 // Compute esel | ||
196 | rlwinm r9, r11, 28, 0, 3 // Compute [ER]PN | ||
197 | oris r0, r0, (MAS0_TLBSEL(1))@h | ||
198 | mtspr SPRN_MAS0,r0 | ||
199 | mtspr SPRN_MAS1,r10 | ||
200 | mtspr SPRN_MAS2,r9 | ||
201 | ori r9, r9, (MAS3_SX|MAS3_SW|MAS3_SR) | ||
202 | mtspr SPRN_MAS3,r9 | ||
203 | tlbwe | ||
204 | addi r11, r11, 1 | ||
205 | bdnz+ next_tlb_setup | ||
206 | |||
207 | /* 7. Jump to our 1:1 mapping */ | ||
208 | li r6, 0 | ||
209 | |||
210 | #else | ||
211 | #error You need to specify the mapping or not use this at all. | ||
212 | #endif | ||
213 | |||
214 | lis r7,MSR_KERNEL@h | ||
215 | ori r7,r7,MSR_KERNEL@l | ||
216 | bl 1f /* Find our address */ | ||
217 | 1: mflr r9 | ||
218 | rlwimi r6,r9,0,20,31 | ||
219 | addi r6,r6,(2f - 1b) | ||
220 | add r6, r6, r25 | ||
221 | mtspr SPRN_SRR0,r6 | ||
222 | mtspr SPRN_SRR1,r7 | ||
223 | rfi /* start execution out of TLB1[0] entry */ | ||
224 | |||
225 | /* 8. Clear out the temp mapping */ | ||
226 | 2: lis r7,0x1000 /* Set MAS0(TLBSEL) = 1 */ | ||
227 | rlwimi r7,r5,16,4,15 /* Setup MAS0 = TLBSEL | ESEL(r5) */ | ||
228 | mtspr SPRN_MAS0,r7 | ||
229 | tlbre | ||
230 | mfspr r8,SPRN_MAS1 | ||
231 | rlwinm r8,r8,0,2,0 /* clear IPROT */ | ||
232 | mtspr SPRN_MAS1,r8 | ||
233 | tlbwe | ||
234 | /* Invalidate TLB1 */ | ||
235 | li r9,0x0c | ||
236 | tlbivax 0,r9 | ||
237 | TLBSYNC | ||
diff --git a/arch/powerpc/kernel/head_fsl_booke.S b/arch/powerpc/kernel/head_fsl_booke.S index edd4a57fd29e..4faeba247854 100644 --- a/arch/powerpc/kernel/head_fsl_booke.S +++ b/arch/powerpc/kernel/head_fsl_booke.S | |||
@@ -94,204 +94,10 @@ _ENTRY(_start); | |||
94 | */ | 94 | */ |
95 | 95 | ||
96 | _ENTRY(__early_start) | 96 | _ENTRY(__early_start) |
97 | /* 1. Find the index of the entry we're executing in */ | ||
98 | bl invstr /* Find our address */ | ||
99 | invstr: mflr r6 /* Make it accessible */ | ||
100 | mfmsr r7 | ||
101 | rlwinm r4,r7,27,31,31 /* extract MSR[IS] */ | ||
102 | mfspr r7, SPRN_PID0 | ||
103 | slwi r7,r7,16 | ||
104 | or r7,r7,r4 | ||
105 | mtspr SPRN_MAS6,r7 | ||
106 | tlbsx 0,r6 /* search MSR[IS], SPID=PID0 */ | ||
107 | mfspr r7,SPRN_MAS1 | ||
108 | andis. r7,r7,MAS1_VALID@h | ||
109 | bne match_TLB | ||
110 | |||
111 | mfspr r7,SPRN_MMUCFG | ||
112 | rlwinm r7,r7,21,28,31 /* extract MMUCFG[NPIDS] */ | ||
113 | cmpwi r7,3 | ||
114 | bne match_TLB /* skip if NPIDS != 3 */ | ||
115 | |||
116 | mfspr r7,SPRN_PID1 | ||
117 | slwi r7,r7,16 | ||
118 | or r7,r7,r4 | ||
119 | mtspr SPRN_MAS6,r7 | ||
120 | tlbsx 0,r6 /* search MSR[IS], SPID=PID1 */ | ||
121 | mfspr r7,SPRN_MAS1 | ||
122 | andis. r7,r7,MAS1_VALID@h | ||
123 | bne match_TLB | ||
124 | mfspr r7, SPRN_PID2 | ||
125 | slwi r7,r7,16 | ||
126 | or r7,r7,r4 | ||
127 | mtspr SPRN_MAS6,r7 | ||
128 | tlbsx 0,r6 /* Fall through, we had to match */ | ||
129 | |||
130 | match_TLB: | ||
131 | mfspr r7,SPRN_MAS0 | ||
132 | rlwinm r3,r7,16,20,31 /* Extract MAS0(Entry) */ | ||
133 | |||
134 | mfspr r7,SPRN_MAS1 /* Insure IPROT set */ | ||
135 | oris r7,r7,MAS1_IPROT@h | ||
136 | mtspr SPRN_MAS1,r7 | ||
137 | tlbwe | ||
138 | |||
139 | /* 2. Invalidate all entries except the entry we're executing in */ | ||
140 | mfspr r9,SPRN_TLB1CFG | ||
141 | andi. r9,r9,0xfff | ||
142 | li r6,0 /* Set Entry counter to 0 */ | ||
143 | 1: lis r7,0x1000 /* Set MAS0(TLBSEL) = 1 */ | ||
144 | rlwimi r7,r6,16,4,15 /* Setup MAS0 = TLBSEL | ESEL(r6) */ | ||
145 | mtspr SPRN_MAS0,r7 | ||
146 | tlbre | ||
147 | mfspr r7,SPRN_MAS1 | ||
148 | rlwinm r7,r7,0,2,31 /* Clear MAS1 Valid and IPROT */ | ||
149 | cmpw r3,r6 | ||
150 | beq skpinv /* Dont update the current execution TLB */ | ||
151 | mtspr SPRN_MAS1,r7 | ||
152 | tlbwe | ||
153 | isync | ||
154 | skpinv: addi r6,r6,1 /* Increment */ | ||
155 | cmpw r6,r9 /* Are we done? */ | ||
156 | bne 1b /* If not, repeat */ | ||
157 | |||
158 | /* Invalidate TLB0 */ | ||
159 | li r6,0x04 | ||
160 | tlbivax 0,r6 | ||
161 | TLBSYNC | ||
162 | /* Invalidate TLB1 */ | ||
163 | li r6,0x0c | ||
164 | tlbivax 0,r6 | ||
165 | TLBSYNC | ||
166 | |||
167 | /* 3. Setup a temp mapping and jump to it */ | ||
168 | andi. r5, r3, 0x1 /* Find an entry not used and is non-zero */ | ||
169 | addi r5, r5, 0x1 | ||
170 | lis r7,0x1000 /* Set MAS0(TLBSEL) = 1 */ | ||
171 | rlwimi r7,r3,16,4,15 /* Setup MAS0 = TLBSEL | ESEL(r3) */ | ||
172 | mtspr SPRN_MAS0,r7 | ||
173 | tlbre | ||
174 | |||
175 | /* grab and fixup the RPN */ | ||
176 | mfspr r6,SPRN_MAS1 /* extract MAS1[SIZE] */ | ||
177 | rlwinm r6,r6,25,27,31 | ||
178 | li r8,-1 | ||
179 | addi r6,r6,10 | ||
180 | slw r6,r8,r6 /* convert to mask */ | ||
181 | |||
182 | bl 1f /* Find our address */ | ||
183 | 1: mflr r7 | ||
184 | |||
185 | mfspr r8,SPRN_MAS3 | ||
186 | #ifdef CONFIG_PHYS_64BIT | ||
187 | mfspr r23,SPRN_MAS7 | ||
188 | #endif | ||
189 | and r8,r6,r8 | ||
190 | subfic r9,r6,-4096 | ||
191 | and r9,r9,r7 | ||
192 | |||
193 | or r25,r8,r9 | ||
194 | ori r8,r25,(MAS3_SX|MAS3_SW|MAS3_SR) | ||
195 | |||
196 | /* Just modify the entry ID and EPN for the temp mapping */ | ||
197 | lis r7,0x1000 /* Set MAS0(TLBSEL) = 1 */ | ||
198 | rlwimi r7,r5,16,4,15 /* Setup MAS0 = TLBSEL | ESEL(r5) */ | ||
199 | mtspr SPRN_MAS0,r7 | ||
200 | xori r6,r4,1 /* Setup TMP mapping in the other Address space */ | ||
201 | slwi r6,r6,12 | ||
202 | oris r6,r6,(MAS1_VALID|MAS1_IPROT)@h | ||
203 | ori r6,r6,(MAS1_TSIZE(BOOK3E_PAGESZ_4K))@l | ||
204 | mtspr SPRN_MAS1,r6 | ||
205 | mfspr r6,SPRN_MAS2 | ||
206 | li r7,0 /* temp EPN = 0 */ | ||
207 | rlwimi r7,r6,0,20,31 | ||
208 | mtspr SPRN_MAS2,r7 | ||
209 | mtspr SPRN_MAS3,r8 | ||
210 | tlbwe | ||
211 | |||
212 | xori r6,r4,1 | ||
213 | slwi r6,r6,5 /* setup new context with other address space */ | ||
214 | bl 1f /* Find our address */ | ||
215 | 1: mflr r9 | ||
216 | rlwimi r7,r9,0,20,31 | ||
217 | addi r7,r7,(2f - 1b) | ||
218 | mtspr SPRN_SRR0,r7 | ||
219 | mtspr SPRN_SRR1,r6 | ||
220 | rfi | ||
221 | 2: | ||
222 | /* 4. Clear out PIDs & Search info */ | ||
223 | li r6,0 | ||
224 | mtspr SPRN_MAS6,r6 | ||
225 | mtspr SPRN_PID0,r6 | ||
226 | |||
227 | mfspr r7,SPRN_MMUCFG | ||
228 | rlwinm r7,r7,21,28,31 /* extract MMUCFG[NPIDS] */ | ||
229 | cmpwi r7,3 | ||
230 | bne 2f /* skip if NPIDS != 3 */ | ||
231 | 97 | ||
232 | mtspr SPRN_PID1,r6 | 98 | #define ENTRY_MAPPING_BOOT_SETUP |
233 | mtspr SPRN_PID2,r6 | 99 | #include "fsl_booke_entry_mapping.S" |
234 | 100 | #undef ENTRY_MAPPING_BOOT_SETUP | |
235 | /* 5. Invalidate mapping we started in */ | ||
236 | 2: | ||
237 | lis r7,0x1000 /* Set MAS0(TLBSEL) = 1 */ | ||
238 | rlwimi r7,r3,16,4,15 /* Setup MAS0 = TLBSEL | ESEL(r3) */ | ||
239 | mtspr SPRN_MAS0,r7 | ||
240 | tlbre | ||
241 | mfspr r6,SPRN_MAS1 | ||
242 | rlwinm r6,r6,0,2,0 /* clear IPROT */ | ||
243 | mtspr SPRN_MAS1,r6 | ||
244 | tlbwe | ||
245 | /* Invalidate TLB1 */ | ||
246 | li r9,0x0c | ||
247 | tlbivax 0,r9 | ||
248 | TLBSYNC | ||
249 | |||
250 | /* The mapping only needs to be cache-coherent on SMP */ | ||
251 | #ifdef CONFIG_SMP | ||
252 | #define M_IF_SMP MAS2_M | ||
253 | #else | ||
254 | #define M_IF_SMP 0 | ||
255 | #endif | ||
256 | |||
257 | /* 6. Setup KERNELBASE mapping in TLB1[0] */ | ||
258 | lis r6,0x1000 /* Set MAS0(TLBSEL) = TLB1(1), ESEL = 0 */ | ||
259 | mtspr SPRN_MAS0,r6 | ||
260 | lis r6,(MAS1_VALID|MAS1_IPROT)@h | ||
261 | ori r6,r6,(MAS1_TSIZE(BOOK3E_PAGESZ_64M))@l | ||
262 | mtspr SPRN_MAS1,r6 | ||
263 | lis r6,MAS2_VAL(PAGE_OFFSET, BOOK3E_PAGESZ_64M, M_IF_SMP)@h | ||
264 | ori r6,r6,MAS2_VAL(PAGE_OFFSET, BOOK3E_PAGESZ_64M, M_IF_SMP)@l | ||
265 | mtspr SPRN_MAS2,r6 | ||
266 | mtspr SPRN_MAS3,r8 | ||
267 | tlbwe | ||
268 | |||
269 | /* 7. Jump to KERNELBASE mapping */ | ||
270 | lis r6,(KERNELBASE & ~0xfff)@h | ||
271 | ori r6,r6,(KERNELBASE & ~0xfff)@l | ||
272 | lis r7,MSR_KERNEL@h | ||
273 | ori r7,r7,MSR_KERNEL@l | ||
274 | bl 1f /* Find our address */ | ||
275 | 1: mflr r9 | ||
276 | rlwimi r6,r9,0,20,31 | ||
277 | addi r6,r6,(2f - 1b) | ||
278 | mtspr SPRN_SRR0,r6 | ||
279 | mtspr SPRN_SRR1,r7 | ||
280 | rfi /* start execution out of TLB1[0] entry */ | ||
281 | |||
282 | /* 8. Clear out the temp mapping */ | ||
283 | 2: lis r7,0x1000 /* Set MAS0(TLBSEL) = 1 */ | ||
284 | rlwimi r7,r5,16,4,15 /* Setup MAS0 = TLBSEL | ESEL(r5) */ | ||
285 | mtspr SPRN_MAS0,r7 | ||
286 | tlbre | ||
287 | mfspr r8,SPRN_MAS1 | ||
288 | rlwinm r8,r8,0,2,0 /* clear IPROT */ | ||
289 | mtspr SPRN_MAS1,r8 | ||
290 | tlbwe | ||
291 | /* Invalidate TLB1 */ | ||
292 | li r9,0x0c | ||
293 | tlbivax 0,r9 | ||
294 | TLBSYNC | ||
295 | 101 | ||
296 | /* Establish the interrupt vector offsets */ | 102 | /* Establish the interrupt vector offsets */ |
297 | SET_IVOR(0, CriticalInput); | 103 | SET_IVOR(0, CriticalInput); |
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c index 30817d9b20cb..77be3d058a65 100644 --- a/arch/powerpc/kernel/irq.c +++ b/arch/powerpc/kernel/irq.c | |||
@@ -295,7 +295,10 @@ void fixup_irqs(const struct cpumask *map) | |||
295 | 295 | ||
296 | for_each_irq(irq) { | 296 | for_each_irq(irq) { |
297 | desc = irq_to_desc(irq); | 297 | desc = irq_to_desc(irq); |
298 | if (desc && desc->status & IRQ_PER_CPU) | 298 | if (!desc) |
299 | continue; | ||
300 | |||
301 | if (desc->status & IRQ_PER_CPU) | ||
299 | continue; | 302 | continue; |
300 | 303 | ||
301 | cpumask_and(mask, desc->affinity, map); | 304 | cpumask_and(mask, desc->affinity, map); |
@@ -317,7 +320,6 @@ void fixup_irqs(const struct cpumask *map) | |||
317 | } | 320 | } |
318 | #endif | 321 | #endif |
319 | 322 | ||
320 | #ifdef CONFIG_IRQSTACKS | ||
321 | static inline void handle_one_irq(unsigned int irq) | 323 | static inline void handle_one_irq(unsigned int irq) |
322 | { | 324 | { |
323 | struct thread_info *curtp, *irqtp; | 325 | struct thread_info *curtp, *irqtp; |
@@ -358,12 +360,6 @@ static inline void handle_one_irq(unsigned int irq) | |||
358 | if (irqtp->flags) | 360 | if (irqtp->flags) |
359 | set_bits(irqtp->flags, &curtp->flags); | 361 | set_bits(irqtp->flags, &curtp->flags); |
360 | } | 362 | } |
361 | #else | ||
362 | static inline void handle_one_irq(unsigned int irq) | ||
363 | { | ||
364 | generic_handle_irq(irq); | ||
365 | } | ||
366 | #endif | ||
367 | 363 | ||
368 | static inline void check_stack_overflow(void) | 364 | static inline void check_stack_overflow(void) |
369 | { | 365 | { |
@@ -455,7 +451,6 @@ void exc_lvl_ctx_init(void) | |||
455 | } | 451 | } |
456 | #endif | 452 | #endif |
457 | 453 | ||
458 | #ifdef CONFIG_IRQSTACKS | ||
459 | struct thread_info *softirq_ctx[NR_CPUS] __read_mostly; | 454 | struct thread_info *softirq_ctx[NR_CPUS] __read_mostly; |
460 | struct thread_info *hardirq_ctx[NR_CPUS] __read_mostly; | 455 | struct thread_info *hardirq_ctx[NR_CPUS] __read_mostly; |
461 | 456 | ||
@@ -492,10 +487,6 @@ static inline void do_softirq_onstack(void) | |||
492 | irqtp->task = NULL; | 487 | irqtp->task = NULL; |
493 | } | 488 | } |
494 | 489 | ||
495 | #else | ||
496 | #define do_softirq_onstack() __do_softirq() | ||
497 | #endif /* CONFIG_IRQSTACKS */ | ||
498 | |||
499 | void do_softirq(void) | 490 | void do_softirq(void) |
500 | { | 491 | { |
501 | unsigned long flags; | 492 | unsigned long flags; |
diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c index c533525ca56a..bc47352deb1f 100644 --- a/arch/powerpc/kernel/kprobes.c +++ b/arch/powerpc/kernel/kprobes.c | |||
@@ -378,17 +378,6 @@ static int __kprobes trampoline_probe_handler(struct kprobe *p, | |||
378 | * single-stepped a copy of the instruction. The address of this | 378 | * single-stepped a copy of the instruction. The address of this |
379 | * copy is p->ainsn.insn. | 379 | * copy is p->ainsn.insn. |
380 | */ | 380 | */ |
381 | static void __kprobes resume_execution(struct kprobe *p, struct pt_regs *regs) | ||
382 | { | ||
383 | int ret; | ||
384 | unsigned int insn = *p->ainsn.insn; | ||
385 | |||
386 | regs->nip = (unsigned long)p->addr; | ||
387 | ret = emulate_step(regs, insn); | ||
388 | if (ret == 0) | ||
389 | regs->nip = (unsigned long)p->addr + 4; | ||
390 | } | ||
391 | |||
392 | static int __kprobes post_kprobe_handler(struct pt_regs *regs) | 381 | static int __kprobes post_kprobe_handler(struct pt_regs *regs) |
393 | { | 382 | { |
394 | struct kprobe *cur = kprobe_running(); | 383 | struct kprobe *cur = kprobe_running(); |
@@ -406,7 +395,8 @@ static int __kprobes post_kprobe_handler(struct pt_regs *regs) | |||
406 | cur->post_handler(cur, regs, 0); | 395 | cur->post_handler(cur, regs, 0); |
407 | } | 396 | } |
408 | 397 | ||
409 | resume_execution(cur, regs); | 398 | /* Adjust nip to after the single-stepped instruction */ |
399 | regs->nip = (unsigned long)cur->addr + 4; | ||
410 | regs->msr |= kcb->kprobe_saved_msr; | 400 | regs->msr |= kcb->kprobe_saved_msr; |
411 | 401 | ||
412 | /*Restore back the original saved kprobes variables and continue. */ | 402 | /*Restore back the original saved kprobes variables and continue. */ |
diff --git a/arch/powerpc/kernel/machine_kexec_64.c b/arch/powerpc/kernel/machine_kexec_64.c index 26f9900f773c..ed31a29c4ff7 100644 --- a/arch/powerpc/kernel/machine_kexec_64.c +++ b/arch/powerpc/kernel/machine_kexec_64.c | |||
@@ -182,28 +182,12 @@ static void kexec_prepare_cpus_wait(int wait_state) | |||
182 | 182 | ||
183 | my_cpu = get_cpu(); | 183 | my_cpu = get_cpu(); |
184 | /* Make sure each CPU has atleast made it to the state we need */ | 184 | /* Make sure each CPU has atleast made it to the state we need */ |
185 | for (i=0; i < NR_CPUS; i++) { | 185 | for_each_online_cpu(i) { |
186 | if (i == my_cpu) | 186 | if (i == my_cpu) |
187 | continue; | 187 | continue; |
188 | 188 | ||
189 | while (paca[i].kexec_state < wait_state) { | 189 | while (paca[i].kexec_state < wait_state) { |
190 | barrier(); | 190 | barrier(); |
191 | if (!cpu_possible(i)) { | ||
192 | printk("kexec: cpu %d hw_cpu_id %d is not" | ||
193 | " possible, ignoring\n", | ||
194 | i, paca[i].hw_cpu_id); | ||
195 | break; | ||
196 | } | ||
197 | if (!cpu_online(i)) { | ||
198 | /* Fixme: this can be spinning in | ||
199 | * pSeries_secondary_wait with a paca | ||
200 | * waiting for it to go online. | ||
201 | */ | ||
202 | printk("kexec: cpu %d hw_cpu_id %d is not" | ||
203 | " online, ignoring\n", | ||
204 | i, paca[i].hw_cpu_id); | ||
205 | break; | ||
206 | } | ||
207 | if (i != notified) { | 191 | if (i != notified) { |
208 | printk( "kexec: waiting for cpu %d (physical" | 192 | printk( "kexec: waiting for cpu %d (physical" |
209 | " %d) to enter %i state\n", | 193 | " %d) to enter %i state\n", |
diff --git a/arch/powerpc/kernel/misc_32.S b/arch/powerpc/kernel/misc_32.S index 8043d1b73cf0..6bbd7a604d24 100644 --- a/arch/powerpc/kernel/misc_32.S +++ b/arch/powerpc/kernel/misc_32.S | |||
@@ -33,7 +33,6 @@ | |||
33 | 33 | ||
34 | .text | 34 | .text |
35 | 35 | ||
36 | #ifdef CONFIG_IRQSTACKS | ||
37 | _GLOBAL(call_do_softirq) | 36 | _GLOBAL(call_do_softirq) |
38 | mflr r0 | 37 | mflr r0 |
39 | stw r0,4(r1) | 38 | stw r0,4(r1) |
@@ -56,7 +55,6 @@ _GLOBAL(call_handle_irq) | |||
56 | lwz r0,4(r1) | 55 | lwz r0,4(r1) |
57 | mtlr r0 | 56 | mtlr r0 |
58 | blr | 57 | blr |
59 | #endif /* CONFIG_IRQSTACKS */ | ||
60 | 58 | ||
61 | /* | 59 | /* |
62 | * This returns the high 64 bits of the product of two 64-bit numbers. | 60 | * This returns the high 64 bits of the product of two 64-bit numbers. |
@@ -711,6 +709,22 @@ relocate_new_kernel: | |||
711 | /* r4 = reboot_code_buffer */ | 709 | /* r4 = reboot_code_buffer */ |
712 | /* r5 = start_address */ | 710 | /* r5 = start_address */ |
713 | 711 | ||
712 | #ifdef CONFIG_FSL_BOOKE | ||
713 | |||
714 | mr r29, r3 | ||
715 | mr r30, r4 | ||
716 | mr r31, r5 | ||
717 | |||
718 | #define ENTRY_MAPPING_KEXEC_SETUP | ||
719 | #include "fsl_booke_entry_mapping.S" | ||
720 | #undef ENTRY_MAPPING_KEXEC_SETUP | ||
721 | |||
722 | mr r3, r29 | ||
723 | mr r4, r30 | ||
724 | mr r5, r31 | ||
725 | |||
726 | li r0, 0 | ||
727 | #else | ||
714 | li r0, 0 | 728 | li r0, 0 |
715 | 729 | ||
716 | /* | 730 | /* |
@@ -727,6 +741,7 @@ relocate_new_kernel: | |||
727 | rfi | 741 | rfi |
728 | 742 | ||
729 | 1: | 743 | 1: |
744 | #endif | ||
730 | /* from this point address translation is turned off */ | 745 | /* from this point address translation is turned off */ |
731 | /* and interrupts are disabled */ | 746 | /* and interrupts are disabled */ |
732 | 747 | ||
diff --git a/arch/powerpc/kernel/misc_64.S b/arch/powerpc/kernel/misc_64.S index a2b18dffa03e..e5144906a56d 100644 --- a/arch/powerpc/kernel/misc_64.S +++ b/arch/powerpc/kernel/misc_64.S | |||
@@ -28,7 +28,6 @@ | |||
28 | 28 | ||
29 | .text | 29 | .text |
30 | 30 | ||
31 | #ifdef CONFIG_IRQSTACKS | ||
32 | _GLOBAL(call_do_softirq) | 31 | _GLOBAL(call_do_softirq) |
33 | mflr r0 | 32 | mflr r0 |
34 | std r0,16(r1) | 33 | std r0,16(r1) |
@@ -52,7 +51,6 @@ _GLOBAL(call_handle_irq) | |||
52 | ld r0,16(r1) | 51 | ld r0,16(r1) |
53 | mtlr r0 | 52 | mtlr r0 |
54 | blr | 53 | blr |
55 | #endif /* CONFIG_IRQSTACKS */ | ||
56 | 54 | ||
57 | .section ".toc","aw" | 55 | .section ".toc","aw" |
58 | PPC64_CACHES: | 56 | PPC64_CACHES: |
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c index 6646005dffb1..5b38f6ae2b29 100644 --- a/arch/powerpc/kernel/pci-common.c +++ b/arch/powerpc/kernel/pci-common.c | |||
@@ -1309,6 +1309,7 @@ void pcibios_allocate_bus_resources(struct pci_bus *bus) | |||
1309 | printk(KERN_WARNING "PCI: Cannot allocate resource region " | 1309 | printk(KERN_WARNING "PCI: Cannot allocate resource region " |
1310 | "%d of PCI bridge %d, will remap\n", i, bus->number); | 1310 | "%d of PCI bridge %d, will remap\n", i, bus->number); |
1311 | clear_resource: | 1311 | clear_resource: |
1312 | res->start = res->end = 0; | ||
1312 | res->flags = 0; | 1313 | res->flags = 0; |
1313 | } | 1314 | } |
1314 | 1315 | ||
diff --git a/arch/powerpc/kernel/perf_event.c b/arch/powerpc/kernel/perf_event.c index 43b83c35cf54..5c14ffe51258 100644 --- a/arch/powerpc/kernel/perf_event.c +++ b/arch/powerpc/kernel/perf_event.c | |||
@@ -791,8 +791,11 @@ static void power_pmu_disable(struct perf_event *event) | |||
791 | cpuhw = &__get_cpu_var(cpu_hw_events); | 791 | cpuhw = &__get_cpu_var(cpu_hw_events); |
792 | for (i = 0; i < cpuhw->n_events; ++i) { | 792 | for (i = 0; i < cpuhw->n_events; ++i) { |
793 | if (event == cpuhw->event[i]) { | 793 | if (event == cpuhw->event[i]) { |
794 | while (++i < cpuhw->n_events) | 794 | while (++i < cpuhw->n_events) { |
795 | cpuhw->event[i-1] = cpuhw->event[i]; | 795 | cpuhw->event[i-1] = cpuhw->event[i]; |
796 | cpuhw->events[i-1] = cpuhw->events[i]; | ||
797 | cpuhw->flags[i-1] = cpuhw->flags[i]; | ||
798 | } | ||
796 | --cpuhw->n_events; | 799 | --cpuhw->n_events; |
797 | ppmu->disable_pmc(event->hw.idx - 1, cpuhw->mmcr); | 800 | ppmu->disable_pmc(event->hw.idx - 1, cpuhw->mmcr); |
798 | if (event->hw.idx) { | 801 | if (event->hw.idx) { |
diff --git a/arch/powerpc/kernel/ppc_ksyms.c b/arch/powerpc/kernel/ppc_ksyms.c index bc9f39d2598b..3b4dcc82a4c1 100644 --- a/arch/powerpc/kernel/ppc_ksyms.c +++ b/arch/powerpc/kernel/ppc_ksyms.c | |||
@@ -101,7 +101,7 @@ EXPORT_SYMBOL(pci_dram_offset); | |||
101 | EXPORT_SYMBOL(start_thread); | 101 | EXPORT_SYMBOL(start_thread); |
102 | EXPORT_SYMBOL(kernel_thread); | 102 | EXPORT_SYMBOL(kernel_thread); |
103 | 103 | ||
104 | #ifndef CONFIG_BOOKE | 104 | #ifdef CONFIG_PPC_FPU |
105 | EXPORT_SYMBOL_GPL(cvt_df); | 105 | EXPORT_SYMBOL_GPL(cvt_df); |
106 | EXPORT_SYMBOL_GPL(cvt_fd); | 106 | EXPORT_SYMBOL_GPL(cvt_fd); |
107 | #endif | 107 | #endif |
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index 9d255b4f0a0e..773424df828a 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c | |||
@@ -1005,7 +1005,6 @@ out: | |||
1005 | return error; | 1005 | return error; |
1006 | } | 1006 | } |
1007 | 1007 | ||
1008 | #ifdef CONFIG_IRQSTACKS | ||
1009 | static inline int valid_irq_stack(unsigned long sp, struct task_struct *p, | 1008 | static inline int valid_irq_stack(unsigned long sp, struct task_struct *p, |
1010 | unsigned long nbytes) | 1009 | unsigned long nbytes) |
1011 | { | 1010 | { |
@@ -1030,10 +1029,6 @@ static inline int valid_irq_stack(unsigned long sp, struct task_struct *p, | |||
1030 | return 0; | 1029 | return 0; |
1031 | } | 1030 | } |
1032 | 1031 | ||
1033 | #else | ||
1034 | #define valid_irq_stack(sp, p, nb) 0 | ||
1035 | #endif /* CONFIG_IRQSTACKS */ | ||
1036 | |||
1037 | int validate_sp(unsigned long sp, struct task_struct *p, | 1032 | int validate_sp(unsigned long sp, struct task_struct *p, |
1038 | unsigned long nbytes) | 1033 | unsigned long nbytes) |
1039 | { | 1034 | { |
diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c index 97d4bd9442d3..3b6f8ae9b8cc 100644 --- a/arch/powerpc/kernel/prom_init.c +++ b/arch/powerpc/kernel/prom_init.c | |||
@@ -872,7 +872,7 @@ static void __init prom_send_capabilities(void) | |||
872 | "ibm_architecture_vec structure inconsistent: 0x%x !\n", | 872 | "ibm_architecture_vec structure inconsistent: 0x%x !\n", |
873 | *cores); | 873 | *cores); |
874 | } else { | 874 | } else { |
875 | *cores = NR_CPUS / prom_count_smt_threads(); | 875 | *cores = DIV_ROUND_UP(NR_CPUS, prom_count_smt_threads()); |
876 | prom_printf("Max number of cores passed to firmware: 0x%x\n", | 876 | prom_printf("Max number of cores passed to firmware: 0x%x\n", |
877 | (unsigned long)*cores); | 877 | (unsigned long)*cores); |
878 | } | 878 | } |
diff --git a/arch/powerpc/kernel/prom_init_check.sh b/arch/powerpc/kernel/prom_init_check.sh index 1ac136b128f0..9f82f4937892 100644 --- a/arch/powerpc/kernel/prom_init_check.sh +++ b/arch/powerpc/kernel/prom_init_check.sh | |||
@@ -52,12 +52,18 @@ do | |||
52 | if [ "${UNDEF:0:9}" = "_restgpr_" ]; then | 52 | if [ "${UNDEF:0:9}" = "_restgpr_" ]; then |
53 | OK=1 | 53 | OK=1 |
54 | fi | 54 | fi |
55 | if [ "${UNDEF:0:10}" = "_restgpr0_" ]; then | ||
56 | OK=1 | ||
57 | fi | ||
55 | if [ "${UNDEF:0:11}" = "_rest32gpr_" ]; then | 58 | if [ "${UNDEF:0:11}" = "_rest32gpr_" ]; then |
56 | OK=1 | 59 | OK=1 |
57 | fi | 60 | fi |
58 | if [ "${UNDEF:0:9}" = "_savegpr_" ]; then | 61 | if [ "${UNDEF:0:9}" = "_savegpr_" ]; then |
59 | OK=1 | 62 | OK=1 |
60 | fi | 63 | fi |
64 | if [ "${UNDEF:0:10}" = "_savegpr0_" ]; then | ||
65 | OK=1 | ||
66 | fi | ||
61 | if [ "${UNDEF:0:11}" = "_save32gpr_" ]; then | 67 | if [ "${UNDEF:0:11}" = "_save32gpr_" ]; then |
62 | OK=1 | 68 | OK=1 |
63 | fi | 69 | fi |
diff --git a/arch/powerpc/kernel/rtas_flash.c b/arch/powerpc/kernel/rtas_flash.c index bfc2abafac44..67a84d8f118d 100644 --- a/arch/powerpc/kernel/rtas_flash.c +++ b/arch/powerpc/kernel/rtas_flash.c | |||
@@ -94,12 +94,8 @@ struct flash_block_list { | |||
94 | struct flash_block_list *next; | 94 | struct flash_block_list *next; |
95 | struct flash_block blocks[FLASH_BLOCKS_PER_NODE]; | 95 | struct flash_block blocks[FLASH_BLOCKS_PER_NODE]; |
96 | }; | 96 | }; |
97 | struct flash_block_list_header { /* just the header of flash_block_list */ | ||
98 | unsigned long num_blocks; | ||
99 | struct flash_block_list *next; | ||
100 | }; | ||
101 | 97 | ||
102 | static struct flash_block_list_header rtas_firmware_flash_list = {0, NULL}; | 98 | static struct flash_block_list *rtas_firmware_flash_list; |
103 | 99 | ||
104 | /* Use slab cache to guarantee 4k alignment */ | 100 | /* Use slab cache to guarantee 4k alignment */ |
105 | static struct kmem_cache *flash_block_cache = NULL; | 101 | static struct kmem_cache *flash_block_cache = NULL; |
@@ -108,13 +104,14 @@ static struct kmem_cache *flash_block_cache = NULL; | |||
108 | 104 | ||
109 | /* Local copy of the flash block list. | 105 | /* Local copy of the flash block list. |
110 | * We only allow one open of the flash proc file and create this | 106 | * We only allow one open of the flash proc file and create this |
111 | * list as we go. This list will be put in the | 107 | * list as we go. The rtas_firmware_flash_list varable will be |
112 | * rtas_firmware_flash_list var once it is fully read. | 108 | * set once the data is fully read. |
113 | * | 109 | * |
114 | * For convenience as we build the list we use virtual addrs, | 110 | * For convenience as we build the list we use virtual addrs, |
115 | * we do not fill in the version number, and the length field | 111 | * we do not fill in the version number, and the length field |
116 | * is treated as the number of entries currently in the block | 112 | * is treated as the number of entries currently in the block |
117 | * (i.e. not a byte count). This is all fixed on release. | 113 | * (i.e. not a byte count). This is all fixed when calling |
114 | * the flash routine. | ||
118 | */ | 115 | */ |
119 | 116 | ||
120 | /* Status int must be first member of struct */ | 117 | /* Status int must be first member of struct */ |
@@ -201,16 +198,16 @@ static int rtas_flash_release(struct inode *inode, struct file *file) | |||
201 | if (uf->flist) { | 198 | if (uf->flist) { |
202 | /* File was opened in write mode for a new flash attempt */ | 199 | /* File was opened in write mode for a new flash attempt */ |
203 | /* Clear saved list */ | 200 | /* Clear saved list */ |
204 | if (rtas_firmware_flash_list.next) { | 201 | if (rtas_firmware_flash_list) { |
205 | free_flash_list(rtas_firmware_flash_list.next); | 202 | free_flash_list(rtas_firmware_flash_list); |
206 | rtas_firmware_flash_list.next = NULL; | 203 | rtas_firmware_flash_list = NULL; |
207 | } | 204 | } |
208 | 205 | ||
209 | if (uf->status != FLASH_AUTH) | 206 | if (uf->status != FLASH_AUTH) |
210 | uf->status = flash_list_valid(uf->flist); | 207 | uf->status = flash_list_valid(uf->flist); |
211 | 208 | ||
212 | if (uf->status == FLASH_IMG_READY) | 209 | if (uf->status == FLASH_IMG_READY) |
213 | rtas_firmware_flash_list.next = uf->flist; | 210 | rtas_firmware_flash_list = uf->flist; |
214 | else | 211 | else |
215 | free_flash_list(uf->flist); | 212 | free_flash_list(uf->flist); |
216 | 213 | ||
@@ -593,7 +590,7 @@ static void rtas_flash_firmware(int reboot_type) | |||
593 | unsigned long rtas_block_list; | 590 | unsigned long rtas_block_list; |
594 | int i, status, update_token; | 591 | int i, status, update_token; |
595 | 592 | ||
596 | if (rtas_firmware_flash_list.next == NULL) | 593 | if (rtas_firmware_flash_list == NULL) |
597 | return; /* nothing to do */ | 594 | return; /* nothing to do */ |
598 | 595 | ||
599 | if (reboot_type != SYS_RESTART) { | 596 | if (reboot_type != SYS_RESTART) { |
@@ -610,20 +607,25 @@ static void rtas_flash_firmware(int reboot_type) | |||
610 | return; | 607 | return; |
611 | } | 608 | } |
612 | 609 | ||
613 | /* NOTE: the "first" block list is a global var with no data | 610 | /* |
614 | * blocks in the kernel data segment. We do this because | 611 | * NOTE: the "first" block must be under 4GB, so we create |
615 | * we want to ensure this block_list addr is under 4GB. | 612 | * an entry with no data blocks in the reserved buffer in |
613 | * the kernel data segment. | ||
616 | */ | 614 | */ |
617 | rtas_firmware_flash_list.num_blocks = 0; | 615 | spin_lock(&rtas_data_buf_lock); |
618 | flist = (struct flash_block_list *)&rtas_firmware_flash_list; | 616 | flist = (struct flash_block_list *)&rtas_data_buf[0]; |
617 | flist->num_blocks = 0; | ||
618 | flist->next = rtas_firmware_flash_list; | ||
619 | rtas_block_list = virt_to_abs(flist); | 619 | rtas_block_list = virt_to_abs(flist); |
620 | if (rtas_block_list >= 4UL*1024*1024*1024) { | 620 | if (rtas_block_list >= 4UL*1024*1024*1024) { |
621 | printk(KERN_ALERT "FLASH: kernel bug...flash list header addr above 4GB\n"); | 621 | printk(KERN_ALERT "FLASH: kernel bug...flash list header addr above 4GB\n"); |
622 | spin_unlock(&rtas_data_buf_lock); | ||
622 | return; | 623 | return; |
623 | } | 624 | } |
624 | 625 | ||
625 | printk(KERN_ALERT "FLASH: preparing saved firmware image for flash\n"); | 626 | printk(KERN_ALERT "FLASH: preparing saved firmware image for flash\n"); |
626 | /* Update the block_list in place. */ | 627 | /* Update the block_list in place. */ |
628 | rtas_firmware_flash_list = NULL; /* too hard to backout on error */ | ||
627 | image_size = 0; | 629 | image_size = 0; |
628 | for (f = flist; f; f = next) { | 630 | for (f = flist; f; f = next) { |
629 | /* Translate data addrs to absolute */ | 631 | /* Translate data addrs to absolute */ |
@@ -664,6 +666,7 @@ static void rtas_flash_firmware(int reboot_type) | |||
664 | printk(KERN_ALERT "FLASH: unknown flash return code %d\n", status); | 666 | printk(KERN_ALERT "FLASH: unknown flash return code %d\n", status); |
665 | break; | 667 | break; |
666 | } | 668 | } |
669 | spin_unlock(&rtas_data_buf_lock); | ||
667 | } | 670 | } |
668 | 671 | ||
669 | static void remove_flash_pde(struct proc_dir_entry *dp) | 672 | static void remove_flash_pde(struct proc_dir_entry *dp) |
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c index 8f58986c2ad9..7d84b210f168 100644 --- a/arch/powerpc/kernel/setup_32.c +++ b/arch/powerpc/kernel/setup_32.c | |||
@@ -241,7 +241,6 @@ int __init ppc_init(void) | |||
241 | 241 | ||
242 | arch_initcall(ppc_init); | 242 | arch_initcall(ppc_init); |
243 | 243 | ||
244 | #ifdef CONFIG_IRQSTACKS | ||
245 | static void __init irqstack_early_init(void) | 244 | static void __init irqstack_early_init(void) |
246 | { | 245 | { |
247 | unsigned int i; | 246 | unsigned int i; |
@@ -255,9 +254,6 @@ static void __init irqstack_early_init(void) | |||
255 | __va(lmb_alloc(THREAD_SIZE, THREAD_SIZE)); | 254 | __va(lmb_alloc(THREAD_SIZE, THREAD_SIZE)); |
256 | } | 255 | } |
257 | } | 256 | } |
258 | #else | ||
259 | #define irqstack_early_init() | ||
260 | #endif | ||
261 | 257 | ||
262 | #if defined(CONFIG_BOOKE) || defined(CONFIG_40x) | 258 | #if defined(CONFIG_BOOKE) || defined(CONFIG_40x) |
263 | static void __init exc_lvl_early_init(void) | 259 | static void __init exc_lvl_early_init(void) |
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c index f3fb5a79de52..643dcac40fcb 100644 --- a/arch/powerpc/kernel/setup_64.c +++ b/arch/powerpc/kernel/setup_64.c | |||
@@ -432,7 +432,6 @@ static u64 slb0_limit(void) | |||
432 | return 1UL << SID_SHIFT; | 432 | return 1UL << SID_SHIFT; |
433 | } | 433 | } |
434 | 434 | ||
435 | #ifdef CONFIG_IRQSTACKS | ||
436 | static void __init irqstack_early_init(void) | 435 | static void __init irqstack_early_init(void) |
437 | { | 436 | { |
438 | u64 limit = slb0_limit(); | 437 | u64 limit = slb0_limit(); |
@@ -451,9 +450,6 @@ static void __init irqstack_early_init(void) | |||
451 | THREAD_SIZE, limit)); | 450 | THREAD_SIZE, limit)); |
452 | } | 451 | } |
453 | } | 452 | } |
454 | #else | ||
455 | #define irqstack_early_init() | ||
456 | #endif | ||
457 | 453 | ||
458 | #ifdef CONFIG_PPC_BOOK3E | 454 | #ifdef CONFIG_PPC_BOOK3E |
459 | static void __init exc_lvl_early_init(void) | 455 | static void __init exc_lvl_early_init(void) |
diff --git a/arch/powerpc/kernel/swsusp_booke.S b/arch/powerpc/kernel/swsusp_booke.S new file mode 100644 index 000000000000..11a39307dd71 --- /dev/null +++ b/arch/powerpc/kernel/swsusp_booke.S | |||
@@ -0,0 +1,193 @@ | |||
1 | /* | ||
2 | * Based on swsusp_32.S, modified for FSL BookE by | ||
3 | * Anton Vorontsov <avorontsov@ru.mvista.com> | ||
4 | * Copyright (c) 2009-2010 MontaVista Software, LLC. | ||
5 | */ | ||
6 | |||
7 | #include <linux/threads.h> | ||
8 | #include <asm/processor.h> | ||
9 | #include <asm/page.h> | ||
10 | #include <asm/cputable.h> | ||
11 | #include <asm/thread_info.h> | ||
12 | #include <asm/ppc_asm.h> | ||
13 | #include <asm/asm-offsets.h> | ||
14 | #include <asm/mmu.h> | ||
15 | |||
16 | /* | ||
17 | * Structure for storing CPU registers on the save area. | ||
18 | */ | ||
19 | #define SL_SP 0 | ||
20 | #define SL_PC 4 | ||
21 | #define SL_MSR 8 | ||
22 | #define SL_TCR 0xc | ||
23 | #define SL_SPRG0 0x10 | ||
24 | #define SL_SPRG1 0x14 | ||
25 | #define SL_SPRG2 0x18 | ||
26 | #define SL_SPRG3 0x1c | ||
27 | #define SL_SPRG4 0x20 | ||
28 | #define SL_SPRG5 0x24 | ||
29 | #define SL_SPRG6 0x28 | ||
30 | #define SL_SPRG7 0x2c | ||
31 | #define SL_TBU 0x30 | ||
32 | #define SL_TBL 0x34 | ||
33 | #define SL_R2 0x38 | ||
34 | #define SL_CR 0x3c | ||
35 | #define SL_LR 0x40 | ||
36 | #define SL_R12 0x44 /* r12 to r31 */ | ||
37 | #define SL_SIZE (SL_R12 + 80) | ||
38 | |||
39 | .section .data | ||
40 | .align 5 | ||
41 | |||
42 | _GLOBAL(swsusp_save_area) | ||
43 | .space SL_SIZE | ||
44 | |||
45 | |||
46 | .section .text | ||
47 | .align 5 | ||
48 | |||
49 | _GLOBAL(swsusp_arch_suspend) | ||
50 | lis r11,swsusp_save_area@h | ||
51 | ori r11,r11,swsusp_save_area@l | ||
52 | |||
53 | mflr r0 | ||
54 | stw r0,SL_LR(r11) | ||
55 | mfcr r0 | ||
56 | stw r0,SL_CR(r11) | ||
57 | stw r1,SL_SP(r11) | ||
58 | stw r2,SL_R2(r11) | ||
59 | stmw r12,SL_R12(r11) | ||
60 | |||
61 | /* Save MSR & TCR */ | ||
62 | mfmsr r4 | ||
63 | stw r4,SL_MSR(r11) | ||
64 | mfspr r4,SPRN_TCR | ||
65 | stw r4,SL_TCR(r11) | ||
66 | |||
67 | /* Get a stable timebase and save it */ | ||
68 | 1: mfspr r4,SPRN_TBRU | ||
69 | stw r4,SL_TBU(r11) | ||
70 | mfspr r5,SPRN_TBRL | ||
71 | stw r5,SL_TBL(r11) | ||
72 | mfspr r3,SPRN_TBRU | ||
73 | cmpw r3,r4 | ||
74 | bne 1b | ||
75 | |||
76 | /* Save SPRGs */ | ||
77 | mfsprg r4,0 | ||
78 | stw r4,SL_SPRG0(r11) | ||
79 | mfsprg r4,1 | ||
80 | stw r4,SL_SPRG1(r11) | ||
81 | mfsprg r4,2 | ||
82 | stw r4,SL_SPRG2(r11) | ||
83 | mfsprg r4,3 | ||
84 | stw r4,SL_SPRG3(r11) | ||
85 | mfsprg r4,4 | ||
86 | stw r4,SL_SPRG4(r11) | ||
87 | mfsprg r4,5 | ||
88 | stw r4,SL_SPRG5(r11) | ||
89 | mfsprg r4,6 | ||
90 | stw r4,SL_SPRG6(r11) | ||
91 | mfsprg r4,7 | ||
92 | stw r4,SL_SPRG7(r11) | ||
93 | |||
94 | /* Call the low level suspend stuff (we should probably have made | ||
95 | * a stackframe... | ||
96 | */ | ||
97 | bl swsusp_save | ||
98 | |||
99 | /* Restore LR from the save area */ | ||
100 | lis r11,swsusp_save_area@h | ||
101 | ori r11,r11,swsusp_save_area@l | ||
102 | lwz r0,SL_LR(r11) | ||
103 | mtlr r0 | ||
104 | |||
105 | blr | ||
106 | |||
107 | _GLOBAL(swsusp_arch_resume) | ||
108 | sync | ||
109 | |||
110 | /* Load ptr the list of pages to copy in r3 */ | ||
111 | lis r11,(restore_pblist)@h | ||
112 | ori r11,r11,restore_pblist@l | ||
113 | lwz r3,0(r11) | ||
114 | |||
115 | /* Copy the pages. This is a very basic implementation, to | ||
116 | * be replaced by something more cache efficient */ | ||
117 | 1: | ||
118 | li r0,256 | ||
119 | mtctr r0 | ||
120 | lwz r5,pbe_address(r3) /* source */ | ||
121 | lwz r6,pbe_orig_address(r3) /* destination */ | ||
122 | 2: | ||
123 | lwz r8,0(r5) | ||
124 | lwz r9,4(r5) | ||
125 | lwz r10,8(r5) | ||
126 | lwz r11,12(r5) | ||
127 | addi r5,r5,16 | ||
128 | stw r8,0(r6) | ||
129 | stw r9,4(r6) | ||
130 | stw r10,8(r6) | ||
131 | stw r11,12(r6) | ||
132 | addi r6,r6,16 | ||
133 | bdnz 2b | ||
134 | lwz r3,pbe_next(r3) | ||
135 | cmpwi 0,r3,0 | ||
136 | bne 1b | ||
137 | |||
138 | bl flush_dcache_L1 | ||
139 | bl flush_instruction_cache | ||
140 | |||
141 | lis r11,swsusp_save_area@h | ||
142 | ori r11,r11,swsusp_save_area@l | ||
143 | |||
144 | lwz r4,SL_SPRG0(r11) | ||
145 | mtsprg 0,r4 | ||
146 | lwz r4,SL_SPRG1(r11) | ||
147 | mtsprg 1,r4 | ||
148 | lwz r4,SL_SPRG2(r11) | ||
149 | mtsprg 2,r4 | ||
150 | lwz r4,SL_SPRG3(r11) | ||
151 | mtsprg 3,r4 | ||
152 | lwz r4,SL_SPRG4(r11) | ||
153 | mtsprg 4,r4 | ||
154 | lwz r4,SL_SPRG5(r11) | ||
155 | mtsprg 5,r4 | ||
156 | lwz r4,SL_SPRG6(r11) | ||
157 | mtsprg 6,r4 | ||
158 | lwz r4,SL_SPRG7(r11) | ||
159 | mtsprg 7,r4 | ||
160 | |||
161 | /* restore the MSR */ | ||
162 | lwz r3,SL_MSR(r11) | ||
163 | mtmsr r3 | ||
164 | |||
165 | /* Restore TB */ | ||
166 | li r3,0 | ||
167 | mtspr SPRN_TBWL,r3 | ||
168 | lwz r3,SL_TBU(r11) | ||
169 | lwz r4,SL_TBL(r11) | ||
170 | mtspr SPRN_TBWU,r3 | ||
171 | mtspr SPRN_TBWL,r4 | ||
172 | |||
173 | /* Restore TCR and clear any pending bits in TSR. */ | ||
174 | lwz r4,SL_TCR(r11) | ||
175 | mtspr SPRN_TCR,r4 | ||
176 | lis r4, (TSR_ENW | TSR_WIS | TSR_DIS | TSR_FIS)@h | ||
177 | mtspr SPRN_TSR,r4 | ||
178 | |||
179 | /* Kick decrementer */ | ||
180 | li r0,1 | ||
181 | mtdec r0 | ||
182 | |||
183 | /* Restore the callee-saved registers and return */ | ||
184 | lwz r0,SL_CR(r11) | ||
185 | mtcr r0 | ||
186 | lwz r2,SL_R2(r11) | ||
187 | lmw r12,SL_R12(r11) | ||
188 | lwz r1,SL_SP(r11) | ||
189 | lwz r0,SL_LR(r11) | ||
190 | mtlr r0 | ||
191 | |||
192 | li r3,0 | ||
193 | blr | ||
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index 3031fc712ad0..25fc33984c2b 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c | |||
@@ -1,5 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) | 2 | * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) |
3 | * Copyright 2007-2010 Freescale Semiconductor, Inc. | ||
3 | * | 4 | * |
4 | * This program is free software; you can redistribute it and/or | 5 | * This program is free software; you can redistribute it and/or |
5 | * modify it under the terms of the GNU General Public License | 6 | * modify it under the terms of the GNU General Public License |
@@ -305,7 +306,7 @@ static inline int check_io_access(struct pt_regs *regs) | |||
305 | #ifndef CONFIG_FSL_BOOKE | 306 | #ifndef CONFIG_FSL_BOOKE |
306 | #define get_mc_reason(regs) ((regs)->dsisr) | 307 | #define get_mc_reason(regs) ((regs)->dsisr) |
307 | #else | 308 | #else |
308 | #define get_mc_reason(regs) (mfspr(SPRN_MCSR) & MCSR_MASK) | 309 | #define get_mc_reason(regs) (mfspr(SPRN_MCSR)) |
309 | #endif | 310 | #endif |
310 | #define REASON_FP ESR_FP | 311 | #define REASON_FP ESR_FP |
311 | #define REASON_ILLEGAL (ESR_PIL | ESR_PUO) | 312 | #define REASON_ILLEGAL (ESR_PIL | ESR_PUO) |
@@ -421,6 +422,91 @@ int machine_check_47x(struct pt_regs *regs) | |||
421 | return 0; | 422 | return 0; |
422 | } | 423 | } |
423 | #elif defined(CONFIG_E500) | 424 | #elif defined(CONFIG_E500) |
425 | int machine_check_e500mc(struct pt_regs *regs) | ||
426 | { | ||
427 | unsigned long mcsr = mfspr(SPRN_MCSR); | ||
428 | unsigned long reason = mcsr; | ||
429 | int recoverable = 1; | ||
430 | |||
431 | printk("Machine check in kernel mode.\n"); | ||
432 | printk("Caused by (from MCSR=%lx): ", reason); | ||
433 | |||
434 | if (reason & MCSR_MCP) | ||
435 | printk("Machine Check Signal\n"); | ||
436 | |||
437 | if (reason & MCSR_ICPERR) { | ||
438 | printk("Instruction Cache Parity Error\n"); | ||
439 | |||
440 | /* | ||
441 | * This is recoverable by invalidating the i-cache. | ||
442 | */ | ||
443 | mtspr(SPRN_L1CSR1, mfspr(SPRN_L1CSR1) | L1CSR1_ICFI); | ||
444 | while (mfspr(SPRN_L1CSR1) & L1CSR1_ICFI) | ||
445 | ; | ||
446 | |||
447 | /* | ||
448 | * This will generally be accompanied by an instruction | ||
449 | * fetch error report -- only treat MCSR_IF as fatal | ||
450 | * if it wasn't due to an L1 parity error. | ||
451 | */ | ||
452 | reason &= ~MCSR_IF; | ||
453 | } | ||
454 | |||
455 | if (reason & MCSR_DCPERR_MC) { | ||
456 | printk("Data Cache Parity Error\n"); | ||
457 | recoverable = 0; | ||
458 | } | ||
459 | |||
460 | if (reason & MCSR_L2MMU_MHIT) { | ||
461 | printk("Hit on multiple TLB entries\n"); | ||
462 | recoverable = 0; | ||
463 | } | ||
464 | |||
465 | if (reason & MCSR_NMI) | ||
466 | printk("Non-maskable interrupt\n"); | ||
467 | |||
468 | if (reason & MCSR_IF) { | ||
469 | printk("Instruction Fetch Error Report\n"); | ||
470 | recoverable = 0; | ||
471 | } | ||
472 | |||
473 | if (reason & MCSR_LD) { | ||
474 | printk("Load Error Report\n"); | ||
475 | recoverable = 0; | ||
476 | } | ||
477 | |||
478 | if (reason & MCSR_ST) { | ||
479 | printk("Store Error Report\n"); | ||
480 | recoverable = 0; | ||
481 | } | ||
482 | |||
483 | if (reason & MCSR_LDG) { | ||
484 | printk("Guarded Load Error Report\n"); | ||
485 | recoverable = 0; | ||
486 | } | ||
487 | |||
488 | if (reason & MCSR_TLBSYNC) | ||
489 | printk("Simultaneous tlbsync operations\n"); | ||
490 | |||
491 | if (reason & MCSR_BSL2_ERR) { | ||
492 | printk("Level 2 Cache Error\n"); | ||
493 | recoverable = 0; | ||
494 | } | ||
495 | |||
496 | if (reason & MCSR_MAV) { | ||
497 | u64 addr; | ||
498 | |||
499 | addr = mfspr(SPRN_MCAR); | ||
500 | addr |= (u64)mfspr(SPRN_MCARU) << 32; | ||
501 | |||
502 | printk("Machine Check %s Address: %#llx\n", | ||
503 | reason & MCSR_MEA ? "Effective" : "Physical", addr); | ||
504 | } | ||
505 | |||
506 | mtspr(SPRN_MCSR, mcsr); | ||
507 | return mfspr(SPRN_MCSR) == 0 && recoverable; | ||
508 | } | ||
509 | |||
424 | int machine_check_e500(struct pt_regs *regs) | 510 | int machine_check_e500(struct pt_regs *regs) |
425 | { | 511 | { |
426 | unsigned long reason = get_mc_reason(regs); | 512 | unsigned long reason = get_mc_reason(regs); |
diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S index dcd01c82e701..8a0deefac08d 100644 --- a/arch/powerpc/kernel/vmlinux.lds.S +++ b/arch/powerpc/kernel/vmlinux.lds.S | |||
@@ -223,19 +223,17 @@ SECTIONS | |||
223 | #endif | 223 | #endif |
224 | 224 | ||
225 | /* The initial task and kernel stack */ | 225 | /* The initial task and kernel stack */ |
226 | .data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET) { | 226 | INIT_TASK_DATA_SECTION(THREAD_SIZE) |
227 | INIT_TASK_DATA(THREAD_SIZE) | ||
228 | } | ||
229 | 227 | ||
230 | .data.page_aligned : AT(ADDR(.data.page_aligned) - LOAD_OFFSET) { | 228 | .data..page_aligned : AT(ADDR(.data..page_aligned) - LOAD_OFFSET) { |
231 | PAGE_ALIGNED_DATA(PAGE_SIZE) | 229 | PAGE_ALIGNED_DATA(PAGE_SIZE) |
232 | } | 230 | } |
233 | 231 | ||
234 | .data.cacheline_aligned : AT(ADDR(.data.cacheline_aligned) - LOAD_OFFSET) { | 232 | .data..cacheline_aligned : AT(ADDR(.data..cacheline_aligned) - LOAD_OFFSET) { |
235 | CACHELINE_ALIGNED_DATA(L1_CACHE_BYTES) | 233 | CACHELINE_ALIGNED_DATA(L1_CACHE_BYTES) |
236 | } | 234 | } |
237 | 235 | ||
238 | .data.read_mostly : AT(ADDR(.data.read_mostly) - LOAD_OFFSET) { | 236 | .data..read_mostly : AT(ADDR(.data..read_mostly) - LOAD_OFFSET) { |
239 | READ_MOSTLY_DATA(L1_CACHE_BYTES) | 237 | READ_MOSTLY_DATA(L1_CACHE_BYTES) |
240 | } | 238 | } |
241 | 239 | ||
diff --git a/arch/powerpc/kvm/e500.c b/arch/powerpc/kvm/e500.c index bc2b4004eb26..e8a00b0c4449 100644 --- a/arch/powerpc/kvm/e500.c +++ b/arch/powerpc/kvm/e500.c | |||
@@ -164,7 +164,7 @@ static int __init kvmppc_e500_init(void) | |||
164 | return kvm_init(NULL, sizeof(struct kvmppc_vcpu_e500), 0, THIS_MODULE); | 164 | return kvm_init(NULL, sizeof(struct kvmppc_vcpu_e500), 0, THIS_MODULE); |
165 | } | 165 | } |
166 | 166 | ||
167 | static void __init kvmppc_e500_exit(void) | 167 | static void __exit kvmppc_e500_exit(void) |
168 | { | 168 | { |
169 | kvmppc_booke_exit(); | 169 | kvmppc_booke_exit(); |
170 | } | 170 | } |
diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile index 3040dac18a37..111da1c03a11 100644 --- a/arch/powerpc/lib/Makefile +++ b/arch/powerpc/lib/Makefile | |||
@@ -12,8 +12,8 @@ CFLAGS_REMOVE_code-patching.o = -pg | |||
12 | CFLAGS_REMOVE_feature-fixups.o = -pg | 12 | CFLAGS_REMOVE_feature-fixups.o = -pg |
13 | 13 | ||
14 | obj-y := string.o alloc.o \ | 14 | obj-y := string.o alloc.o \ |
15 | checksum_$(CONFIG_WORD_SIZE).o | 15 | checksum_$(CONFIG_WORD_SIZE).o crtsavres.o |
16 | obj-$(CONFIG_PPC32) += div64.o copy_32.o crtsavres.o | 16 | obj-$(CONFIG_PPC32) += div64.o copy_32.o |
17 | obj-$(CONFIG_HAS_IOMEM) += devres.o | 17 | obj-$(CONFIG_HAS_IOMEM) += devres.o |
18 | 18 | ||
19 | obj-$(CONFIG_PPC64) += copypage_64.o copyuser_64.o \ | 19 | obj-$(CONFIG_PPC64) += copypage_64.o copyuser_64.o \ |
diff --git a/arch/powerpc/lib/crtsavres.S b/arch/powerpc/lib/crtsavres.S index 70a9cd8a3008..1c893f05d224 100644 --- a/arch/powerpc/lib/crtsavres.S +++ b/arch/powerpc/lib/crtsavres.S | |||
@@ -6,6 +6,7 @@ | |||
6 | * Written By Michael Meissner | 6 | * Written By Michael Meissner |
7 | * | 7 | * |
8 | * Based on gcc/config/rs6000/crtsavres.asm from gcc | 8 | * Based on gcc/config/rs6000/crtsavres.asm from gcc |
9 | * 64 bit additions from reading the PPC elf64abi document. | ||
9 | * | 10 | * |
10 | * This file is free software; you can redistribute it and/or modify it | 11 | * This file is free software; you can redistribute it and/or modify it |
11 | * under the terms of the GNU General Public License as published by the | 12 | * under the terms of the GNU General Public License as published by the |
@@ -44,6 +45,8 @@ | |||
44 | 45 | ||
45 | #ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE | 46 | #ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE |
46 | 47 | ||
48 | #ifndef CONFIG_PPC64 | ||
49 | |||
47 | /* Routines for saving integer registers, called by the compiler. */ | 50 | /* Routines for saving integer registers, called by the compiler. */ |
48 | /* Called with r11 pointing to the stack header word of the caller of the */ | 51 | /* Called with r11 pointing to the stack header word of the caller of the */ |
49 | /* function, just beyond the end of the integer save area. */ | 52 | /* function, just beyond the end of the integer save area. */ |
@@ -226,4 +229,130 @@ _GLOBAL(_rest32gpr_31_x) | |||
226 | mtlr 0 | 229 | mtlr 0 |
227 | mr 1,11 | 230 | mr 1,11 |
228 | blr | 231 | blr |
232 | |||
233 | #else /* CONFIG_PPC64 */ | ||
234 | |||
235 | .globl _savegpr0_14 | ||
236 | _savegpr0_14: | ||
237 | std r14,-144(r1) | ||
238 | .globl _savegpr0_15 | ||
239 | _savegpr0_15: | ||
240 | std r15,-136(r1) | ||
241 | .globl _savegpr0_16 | ||
242 | _savegpr0_16: | ||
243 | std r16,-128(r1) | ||
244 | .globl _savegpr0_17 | ||
245 | _savegpr0_17: | ||
246 | std r17,-120(r1) | ||
247 | .globl _savegpr0_18 | ||
248 | _savegpr0_18: | ||
249 | std r18,-112(r1) | ||
250 | .globl _savegpr0_19 | ||
251 | _savegpr0_19: | ||
252 | std r19,-104(r1) | ||
253 | .globl _savegpr0_20 | ||
254 | _savegpr0_20: | ||
255 | std r20,-96(r1) | ||
256 | .globl _savegpr0_21 | ||
257 | _savegpr0_21: | ||
258 | std r21,-88(r1) | ||
259 | .globl _savegpr0_22 | ||
260 | _savegpr0_22: | ||
261 | std r22,-80(r1) | ||
262 | .globl _savegpr0_23 | ||
263 | _savegpr0_23: | ||
264 | std r23,-72(r1) | ||
265 | .globl _savegpr0_24 | ||
266 | _savegpr0_24: | ||
267 | std r24,-64(r1) | ||
268 | .globl _savegpr0_25 | ||
269 | _savegpr0_25: | ||
270 | std r25,-56(r1) | ||
271 | .globl _savegpr0_26 | ||
272 | _savegpr0_26: | ||
273 | std r26,-48(r1) | ||
274 | .globl _savegpr0_27 | ||
275 | _savegpr0_27: | ||
276 | std r27,-40(r1) | ||
277 | .globl _savegpr0_28 | ||
278 | _savegpr0_28: | ||
279 | std r28,-32(r1) | ||
280 | .globl _savegpr0_29 | ||
281 | _savegpr0_29: | ||
282 | std r29,-24(r1) | ||
283 | .globl _savegpr0_30 | ||
284 | _savegpr0_30: | ||
285 | std r30,-16(r1) | ||
286 | .globl _savegpr0_31 | ||
287 | _savegpr0_31: | ||
288 | std r31,-8(r1) | ||
289 | std r0,16(r1) | ||
290 | blr | ||
291 | |||
292 | .globl _restgpr0_14 | ||
293 | _restgpr0_14: | ||
294 | ld r14,-144(r1) | ||
295 | .globl _restgpr0_15 | ||
296 | _restgpr0_15: | ||
297 | ld r15,-136(r1) | ||
298 | .globl _restgpr0_16 | ||
299 | _restgpr0_16: | ||
300 | ld r16,-128(r1) | ||
301 | .globl _restgpr0_17 | ||
302 | _restgpr0_17: | ||
303 | ld r17,-120(r1) | ||
304 | .globl _restgpr0_18 | ||
305 | _restgpr0_18: | ||
306 | ld r18,-112(r1) | ||
307 | .globl _restgpr0_19 | ||
308 | _restgpr0_19: | ||
309 | ld r19,-104(r1) | ||
310 | .globl _restgpr0_20 | ||
311 | _restgpr0_20: | ||
312 | ld r20,-96(r1) | ||
313 | .globl _restgpr0_21 | ||
314 | _restgpr0_21: | ||
315 | ld r21,-88(r1) | ||
316 | .globl _restgpr0_22 | ||
317 | _restgpr0_22: | ||
318 | ld r22,-80(r1) | ||
319 | .globl _restgpr0_23 | ||
320 | _restgpr0_23: | ||
321 | ld r23,-72(r1) | ||
322 | .globl _restgpr0_24 | ||
323 | _restgpr0_24: | ||
324 | ld r24,-64(r1) | ||
325 | .globl _restgpr0_25 | ||
326 | _restgpr0_25: | ||
327 | ld r25,-56(r1) | ||
328 | .globl _restgpr0_26 | ||
329 | _restgpr0_26: | ||
330 | ld r26,-48(r1) | ||
331 | .globl _restgpr0_27 | ||
332 | _restgpr0_27: | ||
333 | ld r27,-40(r1) | ||
334 | .globl _restgpr0_28 | ||
335 | _restgpr0_28: | ||
336 | ld r28,-32(r1) | ||
337 | .globl _restgpr0_29 | ||
338 | _restgpr0_29: | ||
339 | ld r0,16(r1) | ||
340 | ld r29,-24(r1) | ||
341 | mtlr r0 | ||
342 | ld r30,-16(r1) | ||
343 | ld r31,-8(r1) | ||
344 | blr | ||
345 | |||
346 | .globl _restgpr0_30 | ||
347 | _restgpr0_30: | ||
348 | ld r30,-16(r1) | ||
349 | .globl _restgpr0_31 | ||
350 | _restgpr0_31: | ||
351 | ld r0,16(r1) | ||
352 | ld r31,-8(r1) | ||
353 | mtlr r0 | ||
354 | blr | ||
355 | |||
356 | #endif /* CONFIG_PPC64 */ | ||
357 | |||
229 | #endif | 358 | #endif |
diff --git a/arch/powerpc/lib/feature-fixups.c b/arch/powerpc/lib/feature-fixups.c index e640175b65ae..0d08d0171392 100644 --- a/arch/powerpc/lib/feature-fixups.c +++ b/arch/powerpc/lib/feature-fixups.c | |||
@@ -12,6 +12,7 @@ | |||
12 | * 2 of the License, or (at your option) any later version. | 12 | * 2 of the License, or (at your option) any later version. |
13 | */ | 13 | */ |
14 | 14 | ||
15 | #include <linux/types.h> | ||
15 | #include <linux/kernel.h> | 16 | #include <linux/kernel.h> |
16 | #include <linux/string.h> | 17 | #include <linux/string.h> |
17 | #include <linux/init.h> | 18 | #include <linux/init.h> |
@@ -288,8 +289,8 @@ static void test_alternative_case_with_external_branch(void) | |||
288 | 289 | ||
289 | static void test_cpu_macros(void) | 290 | static void test_cpu_macros(void) |
290 | { | 291 | { |
291 | extern void ftr_fixup_test_FTR_macros; | 292 | extern u8 ftr_fixup_test_FTR_macros; |
292 | extern void ftr_fixup_test_FTR_macros_expected; | 293 | extern u8 ftr_fixup_test_FTR_macros_expected; |
293 | unsigned long size = &ftr_fixup_test_FTR_macros_expected - | 294 | unsigned long size = &ftr_fixup_test_FTR_macros_expected - |
294 | &ftr_fixup_test_FTR_macros; | 295 | &ftr_fixup_test_FTR_macros; |
295 | 296 | ||
@@ -301,8 +302,8 @@ static void test_cpu_macros(void) | |||
301 | static void test_fw_macros(void) | 302 | static void test_fw_macros(void) |
302 | { | 303 | { |
303 | #ifdef CONFIG_PPC64 | 304 | #ifdef CONFIG_PPC64 |
304 | extern void ftr_fixup_test_FW_FTR_macros; | 305 | extern u8 ftr_fixup_test_FW_FTR_macros; |
305 | extern void ftr_fixup_test_FW_FTR_macros_expected; | 306 | extern u8 ftr_fixup_test_FW_FTR_macros_expected; |
306 | unsigned long size = &ftr_fixup_test_FW_FTR_macros_expected - | 307 | unsigned long size = &ftr_fixup_test_FW_FTR_macros_expected - |
307 | &ftr_fixup_test_FW_FTR_macros; | 308 | &ftr_fixup_test_FW_FTR_macros; |
308 | 309 | ||
@@ -314,10 +315,10 @@ static void test_fw_macros(void) | |||
314 | 315 | ||
315 | static void test_lwsync_macros(void) | 316 | static void test_lwsync_macros(void) |
316 | { | 317 | { |
317 | extern void lwsync_fixup_test; | 318 | extern u8 lwsync_fixup_test; |
318 | extern void end_lwsync_fixup_test; | 319 | extern u8 end_lwsync_fixup_test; |
319 | extern void lwsync_fixup_test_expected_LWSYNC; | 320 | extern u8 lwsync_fixup_test_expected_LWSYNC; |
320 | extern void lwsync_fixup_test_expected_SYNC; | 321 | extern u8 lwsync_fixup_test_expected_SYNC; |
321 | unsigned long size = &end_lwsync_fixup_test - | 322 | unsigned long size = &end_lwsync_fixup_test - |
322 | &lwsync_fixup_test; | 323 | &lwsync_fixup_test; |
323 | 324 | ||
diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c index 9fc02dc72ce9..34347b2e7e31 100644 --- a/arch/powerpc/mm/pgtable_32.c +++ b/arch/powerpc/mm/pgtable_32.c | |||
@@ -115,11 +115,7 @@ pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address) | |||
115 | { | 115 | { |
116 | struct page *ptepage; | 116 | struct page *ptepage; |
117 | 117 | ||
118 | #ifdef CONFIG_HIGHPTE | ||
119 | gfp_t flags = GFP_KERNEL | __GFP_HIGHMEM | __GFP_REPEAT | __GFP_ZERO; | ||
120 | #else | ||
121 | gfp_t flags = GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO; | 118 | gfp_t flags = GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO; |
122 | #endif | ||
123 | 119 | ||
124 | ptepage = alloc_pages(flags, 0); | 120 | ptepage = alloc_pages(flags, 0); |
125 | if (!ptepage) | 121 | if (!ptepage) |
diff --git a/arch/powerpc/oprofile/op_model_cell.c b/arch/powerpc/oprofile/op_model_cell.c index 2c9e52267292..7fd90d02d8c6 100644 --- a/arch/powerpc/oprofile/op_model_cell.c +++ b/arch/powerpc/oprofile/op_model_cell.c | |||
@@ -1077,7 +1077,7 @@ static int calculate_lfsr(int n) | |||
1077 | index = ENTRIES-1; | 1077 | index = ENTRIES-1; |
1078 | 1078 | ||
1079 | /* make sure index is valid */ | 1079 | /* make sure index is valid */ |
1080 | if ((index > ENTRIES) || (index < 0)) | 1080 | if ((index >= ENTRIES) || (index < 0)) |
1081 | index = ENTRIES-1; | 1081 | index = ENTRIES-1; |
1082 | 1082 | ||
1083 | return initial_lfsr[index]; | 1083 | return initial_lfsr[index]; |
diff --git a/arch/powerpc/platforms/44x/Kconfig b/arch/powerpc/platforms/44x/Kconfig index eeba0a70e466..69d668c072ae 100644 --- a/arch/powerpc/platforms/44x/Kconfig +++ b/arch/powerpc/platforms/44x/Kconfig | |||
@@ -171,6 +171,17 @@ config ISS4xx | |||
171 | help | 171 | help |
172 | This option enables support for the IBM ISS simulation environment | 172 | This option enables support for the IBM ISS simulation environment |
173 | 173 | ||
174 | config ICON | ||
175 | bool "Icon" | ||
176 | depends on 44x | ||
177 | default n | ||
178 | select PPC44x_SIMPLE | ||
179 | select 440SPe | ||
180 | select PCI | ||
181 | select PPC4xx_PCI_EXPRESS | ||
182 | help | ||
183 | This option enables support for the AMCC PPC440SPe evaluation board. | ||
184 | |||
174 | #config LUAN | 185 | #config LUAN |
175 | # bool "Luan" | 186 | # bool "Luan" |
176 | # depends on 44x | 187 | # depends on 44x |
diff --git a/arch/powerpc/platforms/44x/ppc44x_simple.c b/arch/powerpc/platforms/44x/ppc44x_simple.c index e8c23ccaa1fc..5f7a29d7f590 100644 --- a/arch/powerpc/platforms/44x/ppc44x_simple.c +++ b/arch/powerpc/platforms/44x/ppc44x_simple.c | |||
@@ -61,7 +61,8 @@ static char *board[] __initdata = { | |||
61 | "amcc,redwood", | 61 | "amcc,redwood", |
62 | "amcc,sequoia", | 62 | "amcc,sequoia", |
63 | "amcc,taishan", | 63 | "amcc,taishan", |
64 | "amcc,yosemite" | 64 | "amcc,yosemite", |
65 | "mosaixtech,icon" | ||
65 | }; | 66 | }; |
66 | 67 | ||
67 | static int __init ppc44x_probe(void) | 68 | static int __init ppc44x_probe(void) |
diff --git a/arch/powerpc/platforms/52xx/mpc52xx_pm.c b/arch/powerpc/platforms/52xx/mpc52xx_pm.c index a55b0b6813ed..76722532bd95 100644 --- a/arch/powerpc/platforms/52xx/mpc52xx_pm.c +++ b/arch/powerpc/platforms/52xx/mpc52xx_pm.c | |||
@@ -64,10 +64,19 @@ int mpc52xx_pm_prepare(void) | |||
64 | { .type = "builtin", .compatible = "mpc5200", }, /* efika */ | 64 | { .type = "builtin", .compatible = "mpc5200", }, /* efika */ |
65 | {} | 65 | {} |
66 | }; | 66 | }; |
67 | struct resource res; | ||
67 | 68 | ||
68 | /* map the whole register space */ | 69 | /* map the whole register space */ |
69 | np = of_find_matching_node(NULL, immr_ids); | 70 | np = of_find_matching_node(NULL, immr_ids); |
70 | mbar = of_iomap(np, 0); | 71 | |
72 | if (of_address_to_resource(np, 0, &res)) { | ||
73 | pr_err("mpc52xx_pm_prepare(): could not get IMMR address\n"); | ||
74 | of_node_put(np); | ||
75 | return -ENOSYS; | ||
76 | } | ||
77 | |||
78 | mbar = ioremap(res.start, 0xc000); /* we should map whole region including SRAM */ | ||
79 | |||
71 | of_node_put(np); | 80 | of_node_put(np); |
72 | if (!mbar) { | 81 | if (!mbar) { |
73 | pr_err("mpc52xx_pm_prepare(): could not map registers\n"); | 82 | pr_err("mpc52xx_pm_prepare(): could not map registers\n"); |
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_mds.c b/arch/powerpc/platforms/85xx/mpc85xx_mds.c index f0684c8ac960..8fe87fc61485 100644 --- a/arch/powerpc/platforms/85xx/mpc85xx_mds.c +++ b/arch/powerpc/platforms/85xx/mpc85xx_mds.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (C) Freescale Semicondutor, Inc. 2006-2007. All rights reserved. | 2 | * Copyright (C) Freescale Semicondutor, Inc. 2006-2010. All rights reserved. |
3 | * | 3 | * |
4 | * Author: Andy Fleming <afleming@freescale.com> | 4 | * Author: Andy Fleming <afleming@freescale.com> |
5 | * | 5 | * |
@@ -154,6 +154,10 @@ static int mpc8568_mds_phy_fixups(struct phy_device *phydev) | |||
154 | * Setup the architecture | 154 | * Setup the architecture |
155 | * | 155 | * |
156 | */ | 156 | */ |
157 | #ifdef CONFIG_SMP | ||
158 | extern void __init mpc85xx_smp_init(void); | ||
159 | #endif | ||
160 | |||
157 | static void __init mpc85xx_mds_setup_arch(void) | 161 | static void __init mpc85xx_mds_setup_arch(void) |
158 | { | 162 | { |
159 | struct device_node *np; | 163 | struct device_node *np; |
@@ -194,6 +198,10 @@ static void __init mpc85xx_mds_setup_arch(void) | |||
194 | } | 198 | } |
195 | #endif | 199 | #endif |
196 | 200 | ||
201 | #ifdef CONFIG_SMP | ||
202 | mpc85xx_smp_init(); | ||
203 | #endif | ||
204 | |||
197 | #ifdef CONFIG_QUICC_ENGINE | 205 | #ifdef CONFIG_QUICC_ENGINE |
198 | np = of_find_compatible_node(NULL, NULL, "fsl,qe"); | 206 | np = of_find_compatible_node(NULL, NULL, "fsl,qe"); |
199 | if (!np) { | 207 | if (!np) { |
@@ -271,9 +279,49 @@ static void __init mpc85xx_mds_setup_arch(void) | |||
271 | BCSR_UCC_RGMII, BCSR_UCC_RTBI); | 279 | BCSR_UCC_RGMII, BCSR_UCC_RTBI); |
272 | } | 280 | } |
273 | 281 | ||
282 | } else if (machine_is(p1021_mds)) { | ||
283 | #define BCSR11_ENET_MICRST (0x1 << 5) | ||
284 | /* Reset Micrel PHY */ | ||
285 | clrbits8(&bcsr_regs[11], BCSR11_ENET_MICRST); | ||
286 | setbits8(&bcsr_regs[11], BCSR11_ENET_MICRST); | ||
274 | } | 287 | } |
288 | |||
275 | iounmap(bcsr_regs); | 289 | iounmap(bcsr_regs); |
276 | } | 290 | } |
291 | |||
292 | if (machine_is(p1021_mds)) { | ||
293 | #define MPC85xx_PMUXCR_OFFSET 0x60 | ||
294 | #define MPC85xx_PMUXCR_QE0 0x00008000 | ||
295 | #define MPC85xx_PMUXCR_QE3 0x00001000 | ||
296 | #define MPC85xx_PMUXCR_QE9 0x00000040 | ||
297 | #define MPC85xx_PMUXCR_QE12 0x00000008 | ||
298 | static __be32 __iomem *pmuxcr; | ||
299 | |||
300 | np = of_find_node_by_name(NULL, "global-utilities"); | ||
301 | |||
302 | if (np) { | ||
303 | pmuxcr = of_iomap(np, 0) + MPC85xx_PMUXCR_OFFSET; | ||
304 | |||
305 | if (!pmuxcr) | ||
306 | printk(KERN_EMERG "Error: Alternate function" | ||
307 | " signal multiplex control register not" | ||
308 | " mapped!\n"); | ||
309 | else | ||
310 | /* P1021 has pins muxed for QE and other functions. To | ||
311 | * enable QE UEC mode, we need to set bit QE0 for UCC1 | ||
312 | * in Eth mode, QE0 and QE3 for UCC5 in Eth mode, QE9 | ||
313 | * and QE12 for QE MII management singals in PMUXCR | ||
314 | * register. | ||
315 | */ | ||
316 | setbits32(pmuxcr, MPC85xx_PMUXCR_QE0 | | ||
317 | MPC85xx_PMUXCR_QE3 | | ||
318 | MPC85xx_PMUXCR_QE9 | | ||
319 | MPC85xx_PMUXCR_QE12); | ||
320 | |||
321 | of_node_put(np); | ||
322 | } | ||
323 | |||
324 | } | ||
277 | #endif /* CONFIG_QUICC_ENGINE */ | 325 | #endif /* CONFIG_QUICC_ENGINE */ |
278 | 326 | ||
279 | #ifdef CONFIG_SWIOTLB | 327 | #ifdef CONFIG_SWIOTLB |
@@ -330,6 +378,16 @@ static struct of_device_id mpc85xx_ids[] = { | |||
330 | {}, | 378 | {}, |
331 | }; | 379 | }; |
332 | 380 | ||
381 | static struct of_device_id p1021_ids[] = { | ||
382 | { .type = "soc", }, | ||
383 | { .compatible = "soc", }, | ||
384 | { .compatible = "simple-bus", }, | ||
385 | { .type = "qe", }, | ||
386 | { .compatible = "fsl,qe", }, | ||
387 | { .compatible = "gianfar", }, | ||
388 | {}, | ||
389 | }; | ||
390 | |||
333 | static int __init mpc85xx_publish_devices(void) | 391 | static int __init mpc85xx_publish_devices(void) |
334 | { | 392 | { |
335 | if (machine_is(mpc8568_mds)) | 393 | if (machine_is(mpc8568_mds)) |
@@ -342,11 +400,22 @@ static int __init mpc85xx_publish_devices(void) | |||
342 | 400 | ||
343 | return 0; | 401 | return 0; |
344 | } | 402 | } |
403 | |||
404 | static int __init p1021_publish_devices(void) | ||
405 | { | ||
406 | /* Publish the QE devices */ | ||
407 | of_platform_bus_probe(NULL, p1021_ids, NULL); | ||
408 | |||
409 | return 0; | ||
410 | } | ||
411 | |||
345 | machine_device_initcall(mpc8568_mds, mpc85xx_publish_devices); | 412 | machine_device_initcall(mpc8568_mds, mpc85xx_publish_devices); |
346 | machine_device_initcall(mpc8569_mds, mpc85xx_publish_devices); | 413 | machine_device_initcall(mpc8569_mds, mpc85xx_publish_devices); |
414 | machine_device_initcall(p1021_mds, p1021_publish_devices); | ||
347 | 415 | ||
348 | machine_arch_initcall(mpc8568_mds, swiotlb_setup_bus_notifier); | 416 | machine_arch_initcall(mpc8568_mds, swiotlb_setup_bus_notifier); |
349 | machine_arch_initcall(mpc8569_mds, swiotlb_setup_bus_notifier); | 417 | machine_arch_initcall(mpc8569_mds, swiotlb_setup_bus_notifier); |
418 | machine_arch_initcall(p1021_mds, swiotlb_setup_bus_notifier); | ||
350 | 419 | ||
351 | static void __init mpc85xx_mds_pic_init(void) | 420 | static void __init mpc85xx_mds_pic_init(void) |
352 | { | 421 | { |
@@ -366,7 +435,7 @@ static void __init mpc85xx_mds_pic_init(void) | |||
366 | 435 | ||
367 | mpic = mpic_alloc(np, r.start, | 436 | mpic = mpic_alloc(np, r.start, |
368 | MPIC_PRIMARY | MPIC_WANTS_RESET | MPIC_BIG_ENDIAN | | 437 | MPIC_PRIMARY | MPIC_WANTS_RESET | MPIC_BIG_ENDIAN | |
369 | MPIC_BROKEN_FRR_NIRQS, | 438 | MPIC_BROKEN_FRR_NIRQS | MPIC_SINGLE_DEST_CPU, |
370 | 0, 256, " OpenPIC "); | 439 | 0, 256, " OpenPIC "); |
371 | BUG_ON(mpic == NULL); | 440 | BUG_ON(mpic == NULL); |
372 | of_node_put(np); | 441 | of_node_put(np); |
@@ -380,7 +449,11 @@ static void __init mpc85xx_mds_pic_init(void) | |||
380 | if (!np) | 449 | if (!np) |
381 | return; | 450 | return; |
382 | } | 451 | } |
383 | qe_ic_init(np, 0, qe_ic_cascade_muxed_mpic, NULL); | 452 | if (machine_is(p1021_mds)) |
453 | qe_ic_init(np, 0, qe_ic_cascade_low_mpic, | ||
454 | qe_ic_cascade_high_mpic); | ||
455 | else | ||
456 | qe_ic_init(np, 0, qe_ic_cascade_muxed_mpic, NULL); | ||
384 | of_node_put(np); | 457 | of_node_put(np); |
385 | #endif /* CONFIG_QUICC_ENGINE */ | 458 | #endif /* CONFIG_QUICC_ENGINE */ |
386 | } | 459 | } |
@@ -426,3 +499,26 @@ define_machine(mpc8569_mds) { | |||
426 | .pcibios_fixup_bus = fsl_pcibios_fixup_bus, | 499 | .pcibios_fixup_bus = fsl_pcibios_fixup_bus, |
427 | #endif | 500 | #endif |
428 | }; | 501 | }; |
502 | |||
503 | static int __init p1021_mds_probe(void) | ||
504 | { | ||
505 | unsigned long root = of_get_flat_dt_root(); | ||
506 | |||
507 | return of_flat_dt_is_compatible(root, "fsl,P1021MDS"); | ||
508 | |||
509 | } | ||
510 | |||
511 | define_machine(p1021_mds) { | ||
512 | .name = "P1021 MDS", | ||
513 | .probe = p1021_mds_probe, | ||
514 | .setup_arch = mpc85xx_mds_setup_arch, | ||
515 | .init_IRQ = mpc85xx_mds_pic_init, | ||
516 | .get_irq = mpic_get_irq, | ||
517 | .restart = fsl_rstcr_restart, | ||
518 | .calibrate_decr = generic_calibrate_decr, | ||
519 | .progress = udbg_progress, | ||
520 | #ifdef CONFIG_PCI | ||
521 | .pcibios_fixup_bus = fsl_pcibios_fixup_bus, | ||
522 | #endif | ||
523 | }; | ||
524 | |||
diff --git a/arch/powerpc/platforms/cell/iommu.c b/arch/powerpc/platforms/cell/iommu.c index 22667a09d40e..4326b737d913 100644 --- a/arch/powerpc/platforms/cell/iommu.c +++ b/arch/powerpc/platforms/cell/iommu.c | |||
@@ -1066,7 +1066,7 @@ static int __init cell_iommu_fixed_mapping_init(void) | |||
1066 | fbase = _ALIGN_UP(fbase, 1 << IO_SEGMENT_SHIFT); | 1066 | fbase = _ALIGN_UP(fbase, 1 << IO_SEGMENT_SHIFT); |
1067 | fsize = lmb_phys_mem_size(); | 1067 | fsize = lmb_phys_mem_size(); |
1068 | 1068 | ||
1069 | if ((fbase + fsize) <= 0x800000000) | 1069 | if ((fbase + fsize) <= 0x800000000ul) |
1070 | hbase = 0; /* use the device tree window */ | 1070 | hbase = 0; /* use the device tree window */ |
1071 | else { | 1071 | else { |
1072 | /* If we're over 32 GB we need to cheat. We can't map all of | 1072 | /* If we're over 32 GB we need to cheat. We can't map all of |
diff --git a/arch/powerpc/platforms/iseries/pci.c b/arch/powerpc/platforms/iseries/pci.c index 3fc2e6494b8b..ab3962b0d246 100644 --- a/arch/powerpc/platforms/iseries/pci.c +++ b/arch/powerpc/platforms/iseries/pci.c | |||
@@ -445,7 +445,11 @@ void __init iSeries_pcibios_fixup_resources(struct pci_dev *pdev) | |||
445 | } | 445 | } |
446 | 446 | ||
447 | allocate_device_bars(pdev); | 447 | allocate_device_bars(pdev); |
448 | iseries_device_information(pdev, bus, *sub_bus); | 448 | if (likely(sub_bus)) |
449 | iseries_device_information(pdev, bus, *sub_bus); | ||
450 | else | ||
451 | printk(KERN_ERR "PCI: Device node %s has missing or invalid " | ||
452 | "linux,subbus property\n", node->full_name); | ||
449 | } | 453 | } |
450 | 454 | ||
451 | /* | 455 | /* |
diff --git a/arch/powerpc/sysdev/fsl_msi.c b/arch/powerpc/sysdev/fsl_msi.c index a7be144f5874..962c2d8dd8d9 100644 --- a/arch/powerpc/sysdev/fsl_msi.c +++ b/arch/powerpc/sysdev/fsl_msi.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (C) 2007-2008 Freescale Semiconductor, Inc. All rights reserved. | 2 | * Copyright (C) 2007-2010 Freescale Semiconductor, Inc. |
3 | * | 3 | * |
4 | * Author: Tony Li <tony.li@freescale.com> | 4 | * Author: Tony Li <tony.li@freescale.com> |
5 | * Jason Jin <Jason.jin@freescale.com> | 5 | * Jason Jin <Jason.jin@freescale.com> |
@@ -22,14 +22,20 @@ | |||
22 | #include <asm/prom.h> | 22 | #include <asm/prom.h> |
23 | #include <asm/hw_irq.h> | 23 | #include <asm/hw_irq.h> |
24 | #include <asm/ppc-pci.h> | 24 | #include <asm/ppc-pci.h> |
25 | #include <asm/mpic.h> | ||
25 | #include "fsl_msi.h" | 26 | #include "fsl_msi.h" |
26 | 27 | ||
28 | LIST_HEAD(msi_head); | ||
29 | |||
27 | struct fsl_msi_feature { | 30 | struct fsl_msi_feature { |
28 | u32 fsl_pic_ip; | 31 | u32 fsl_pic_ip; |
29 | u32 msiir_offset; | 32 | u32 msiir_offset; |
30 | }; | 33 | }; |
31 | 34 | ||
32 | static struct fsl_msi *fsl_msi; | 35 | struct fsl_msi_cascade_data { |
36 | struct fsl_msi *msi_data; | ||
37 | int index; | ||
38 | }; | ||
33 | 39 | ||
34 | static inline u32 fsl_msi_read(u32 __iomem *base, unsigned int reg) | 40 | static inline u32 fsl_msi_read(u32 __iomem *base, unsigned int reg) |
35 | { | 41 | { |
@@ -54,10 +60,12 @@ static struct irq_chip fsl_msi_chip = { | |||
54 | static int fsl_msi_host_map(struct irq_host *h, unsigned int virq, | 60 | static int fsl_msi_host_map(struct irq_host *h, unsigned int virq, |
55 | irq_hw_number_t hw) | 61 | irq_hw_number_t hw) |
56 | { | 62 | { |
63 | struct fsl_msi *msi_data = h->host_data; | ||
57 | struct irq_chip *chip = &fsl_msi_chip; | 64 | struct irq_chip *chip = &fsl_msi_chip; |
58 | 65 | ||
59 | irq_to_desc(virq)->status |= IRQ_TYPE_EDGE_FALLING; | 66 | irq_to_desc(virq)->status |= IRQ_TYPE_EDGE_FALLING; |
60 | 67 | ||
68 | set_irq_chip_data(virq, msi_data); | ||
61 | set_irq_chip_and_handler(virq, chip, handle_edge_irq); | 69 | set_irq_chip_and_handler(virq, chip, handle_edge_irq); |
62 | 70 | ||
63 | return 0; | 71 | return 0; |
@@ -96,11 +104,12 @@ static int fsl_msi_check_device(struct pci_dev *pdev, int nvec, int type) | |||
96 | static void fsl_teardown_msi_irqs(struct pci_dev *pdev) | 104 | static void fsl_teardown_msi_irqs(struct pci_dev *pdev) |
97 | { | 105 | { |
98 | struct msi_desc *entry; | 106 | struct msi_desc *entry; |
99 | struct fsl_msi *msi_data = fsl_msi; | 107 | struct fsl_msi *msi_data; |
100 | 108 | ||
101 | list_for_each_entry(entry, &pdev->msi_list, list) { | 109 | list_for_each_entry(entry, &pdev->msi_list, list) { |
102 | if (entry->irq == NO_IRQ) | 110 | if (entry->irq == NO_IRQ) |
103 | continue; | 111 | continue; |
112 | msi_data = get_irq_data(entry->irq); | ||
104 | set_irq_msi(entry->irq, NULL); | 113 | set_irq_msi(entry->irq, NULL); |
105 | msi_bitmap_free_hwirqs(&msi_data->bitmap, | 114 | msi_bitmap_free_hwirqs(&msi_data->bitmap, |
106 | virq_to_hw(entry->irq), 1); | 115 | virq_to_hw(entry->irq), 1); |
@@ -111,9 +120,10 @@ static void fsl_teardown_msi_irqs(struct pci_dev *pdev) | |||
111 | } | 120 | } |
112 | 121 | ||
113 | static void fsl_compose_msi_msg(struct pci_dev *pdev, int hwirq, | 122 | static void fsl_compose_msi_msg(struct pci_dev *pdev, int hwirq, |
114 | struct msi_msg *msg) | 123 | struct msi_msg *msg, |
124 | struct fsl_msi *fsl_msi_data) | ||
115 | { | 125 | { |
116 | struct fsl_msi *msi_data = fsl_msi; | 126 | struct fsl_msi *msi_data = fsl_msi_data; |
117 | struct pci_controller *hose = pci_bus_to_host(pdev->bus); | 127 | struct pci_controller *hose = pci_bus_to_host(pdev->bus); |
118 | u32 base = 0; | 128 | u32 base = 0; |
119 | 129 | ||
@@ -130,14 +140,19 @@ static void fsl_compose_msi_msg(struct pci_dev *pdev, int hwirq, | |||
130 | 140 | ||
131 | static int fsl_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type) | 141 | static int fsl_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type) |
132 | { | 142 | { |
133 | int rc, hwirq; | 143 | int rc, hwirq = -ENOMEM; |
134 | unsigned int virq; | 144 | unsigned int virq; |
135 | struct msi_desc *entry; | 145 | struct msi_desc *entry; |
136 | struct msi_msg msg; | 146 | struct msi_msg msg; |
137 | struct fsl_msi *msi_data = fsl_msi; | 147 | struct fsl_msi *msi_data; |
138 | 148 | ||
139 | list_for_each_entry(entry, &pdev->msi_list, list) { | 149 | list_for_each_entry(entry, &pdev->msi_list, list) { |
140 | hwirq = msi_bitmap_alloc_hwirqs(&msi_data->bitmap, 1); | 150 | list_for_each_entry(msi_data, &msi_head, list) { |
151 | hwirq = msi_bitmap_alloc_hwirqs(&msi_data->bitmap, 1); | ||
152 | if (hwirq >= 0) | ||
153 | break; | ||
154 | } | ||
155 | |||
141 | if (hwirq < 0) { | 156 | if (hwirq < 0) { |
142 | rc = hwirq; | 157 | rc = hwirq; |
143 | pr_debug("%s: fail allocating msi interrupt\n", | 158 | pr_debug("%s: fail allocating msi interrupt\n", |
@@ -154,25 +169,31 @@ static int fsl_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type) | |||
154 | rc = -ENOSPC; | 169 | rc = -ENOSPC; |
155 | goto out_free; | 170 | goto out_free; |
156 | } | 171 | } |
172 | set_irq_data(virq, msi_data); | ||
157 | set_irq_msi(virq, entry); | 173 | set_irq_msi(virq, entry); |
158 | 174 | ||
159 | fsl_compose_msi_msg(pdev, hwirq, &msg); | 175 | fsl_compose_msi_msg(pdev, hwirq, &msg, msi_data); |
160 | write_msi_msg(virq, &msg); | 176 | write_msi_msg(virq, &msg); |
161 | } | 177 | } |
162 | return 0; | 178 | return 0; |
163 | 179 | ||
164 | out_free: | 180 | out_free: |
181 | /* free by the caller of this function */ | ||
165 | return rc; | 182 | return rc; |
166 | } | 183 | } |
167 | 184 | ||
168 | static void fsl_msi_cascade(unsigned int irq, struct irq_desc *desc) | 185 | static void fsl_msi_cascade(unsigned int irq, struct irq_desc *desc) |
169 | { | 186 | { |
170 | unsigned int cascade_irq; | 187 | unsigned int cascade_irq; |
171 | struct fsl_msi *msi_data = fsl_msi; | 188 | struct fsl_msi *msi_data; |
172 | int msir_index = -1; | 189 | int msir_index = -1; |
173 | u32 msir_value = 0; | 190 | u32 msir_value = 0; |
174 | u32 intr_index; | 191 | u32 intr_index; |
175 | u32 have_shift = 0; | 192 | u32 have_shift = 0; |
193 | struct fsl_msi_cascade_data *cascade_data; | ||
194 | |||
195 | cascade_data = (struct fsl_msi_cascade_data *)get_irq_data(irq); | ||
196 | msi_data = cascade_data->msi_data; | ||
176 | 197 | ||
177 | raw_spin_lock(&desc->lock); | 198 | raw_spin_lock(&desc->lock); |
178 | if ((msi_data->feature & FSL_PIC_IP_MASK) == FSL_PIC_IP_IPIC) { | 199 | if ((msi_data->feature & FSL_PIC_IP_MASK) == FSL_PIC_IP_IPIC) { |
@@ -187,13 +208,13 @@ static void fsl_msi_cascade(unsigned int irq, struct irq_desc *desc) | |||
187 | if (unlikely(desc->status & IRQ_INPROGRESS)) | 208 | if (unlikely(desc->status & IRQ_INPROGRESS)) |
188 | goto unlock; | 209 | goto unlock; |
189 | 210 | ||
190 | msir_index = (int)desc->handler_data; | 211 | msir_index = cascade_data->index; |
191 | 212 | ||
192 | if (msir_index >= NR_MSI_REG) | 213 | if (msir_index >= NR_MSI_REG) |
193 | cascade_irq = NO_IRQ; | 214 | cascade_irq = NO_IRQ; |
194 | 215 | ||
195 | desc->status |= IRQ_INPROGRESS; | 216 | desc->status |= IRQ_INPROGRESS; |
196 | switch (fsl_msi->feature & FSL_PIC_IP_MASK) { | 217 | switch (msi_data->feature & FSL_PIC_IP_MASK) { |
197 | case FSL_PIC_IP_MPIC: | 218 | case FSL_PIC_IP_MPIC: |
198 | msir_value = fsl_msi_read(msi_data->msi_regs, | 219 | msir_value = fsl_msi_read(msi_data->msi_regs, |
199 | msir_index * 0x10); | 220 | msir_index * 0x10); |
@@ -229,6 +250,30 @@ unlock: | |||
229 | raw_spin_unlock(&desc->lock); | 250 | raw_spin_unlock(&desc->lock); |
230 | } | 251 | } |
231 | 252 | ||
253 | static int fsl_of_msi_remove(struct of_device *ofdev) | ||
254 | { | ||
255 | struct fsl_msi *msi = ofdev->dev.platform_data; | ||
256 | int virq, i; | ||
257 | struct fsl_msi_cascade_data *cascade_data; | ||
258 | |||
259 | if (msi->list.prev != NULL) | ||
260 | list_del(&msi->list); | ||
261 | for (i = 0; i < NR_MSI_REG; i++) { | ||
262 | virq = msi->msi_virqs[i]; | ||
263 | if (virq != NO_IRQ) { | ||
264 | cascade_data = get_irq_data(virq); | ||
265 | kfree(cascade_data); | ||
266 | irq_dispose_mapping(virq); | ||
267 | } | ||
268 | } | ||
269 | if (msi->bitmap.bitmap) | ||
270 | msi_bitmap_free(&msi->bitmap); | ||
271 | iounmap(msi->msi_regs); | ||
272 | kfree(msi); | ||
273 | |||
274 | return 0; | ||
275 | } | ||
276 | |||
232 | static int __devinit fsl_of_msi_probe(struct of_device *dev, | 277 | static int __devinit fsl_of_msi_probe(struct of_device *dev, |
233 | const struct of_device_id *match) | 278 | const struct of_device_id *match) |
234 | { | 279 | { |
@@ -239,15 +284,18 @@ static int __devinit fsl_of_msi_probe(struct of_device *dev, | |||
239 | int virt_msir; | 284 | int virt_msir; |
240 | const u32 *p; | 285 | const u32 *p; |
241 | struct fsl_msi_feature *features = match->data; | 286 | struct fsl_msi_feature *features = match->data; |
287 | struct fsl_msi_cascade_data *cascade_data = NULL; | ||
288 | int len; | ||
289 | u32 offset; | ||
242 | 290 | ||
243 | printk(KERN_DEBUG "Setting up Freescale MSI support\n"); | 291 | printk(KERN_DEBUG "Setting up Freescale MSI support\n"); |
244 | 292 | ||
245 | msi = kzalloc(sizeof(struct fsl_msi), GFP_KERNEL); | 293 | msi = kzalloc(sizeof(struct fsl_msi), GFP_KERNEL); |
246 | if (!msi) { | 294 | if (!msi) { |
247 | dev_err(&dev->dev, "No memory for MSI structure\n"); | 295 | dev_err(&dev->dev, "No memory for MSI structure\n"); |
248 | err = -ENOMEM; | 296 | return -ENOMEM; |
249 | goto error_out; | ||
250 | } | 297 | } |
298 | dev->dev.platform_data = msi; | ||
251 | 299 | ||
252 | msi->irqhost = irq_alloc_host(dev->dev.of_node, IRQ_HOST_MAP_LINEAR, | 300 | msi->irqhost = irq_alloc_host(dev->dev.of_node, IRQ_HOST_MAP_LINEAR, |
253 | NR_MSI_IRQS, &fsl_msi_host_ops, 0); | 301 | NR_MSI_IRQS, &fsl_msi_host_ops, 0); |
@@ -298,27 +346,47 @@ static int __devinit fsl_of_msi_probe(struct of_device *dev, | |||
298 | err = -EINVAL; | 346 | err = -EINVAL; |
299 | goto error_out; | 347 | goto error_out; |
300 | } | 348 | } |
349 | offset = 0; | ||
350 | p = of_get_property(dev->dev.of_node, "msi-available-ranges", &len); | ||
351 | if (p) | ||
352 | offset = *p / IRQS_PER_MSI_REG; | ||
301 | 353 | ||
302 | count /= sizeof(u32); | 354 | count /= sizeof(u32); |
303 | for (i = 0; i < count / 2; i++) { | 355 | for (i = 0; i < min(count / 2, NR_MSI_REG); i++) { |
304 | if (i > NR_MSI_REG) | ||
305 | break; | ||
306 | virt_msir = irq_of_parse_and_map(dev->dev.of_node, i); | 356 | virt_msir = irq_of_parse_and_map(dev->dev.of_node, i); |
307 | if (virt_msir != NO_IRQ) { | 357 | if (virt_msir != NO_IRQ) { |
308 | set_irq_data(virt_msir, (void *)i); | 358 | cascade_data = kzalloc( |
359 | sizeof(struct fsl_msi_cascade_data), | ||
360 | GFP_KERNEL); | ||
361 | if (!cascade_data) { | ||
362 | dev_err(&dev->dev, | ||
363 | "No memory for MSI cascade data\n"); | ||
364 | err = -ENOMEM; | ||
365 | goto error_out; | ||
366 | } | ||
367 | msi->msi_virqs[i] = virt_msir; | ||
368 | cascade_data->index = i + offset; | ||
369 | cascade_data->msi_data = msi; | ||
370 | set_irq_data(virt_msir, (void *)cascade_data); | ||
309 | set_irq_chained_handler(virt_msir, fsl_msi_cascade); | 371 | set_irq_chained_handler(virt_msir, fsl_msi_cascade); |
310 | } | 372 | } |
311 | } | 373 | } |
312 | 374 | ||
313 | fsl_msi = msi; | 375 | list_add_tail(&msi->list, &msi_head); |
314 | 376 | ||
315 | WARN_ON(ppc_md.setup_msi_irqs); | 377 | /* The multiple setting ppc_md.setup_msi_irqs will not harm things */ |
316 | ppc_md.setup_msi_irqs = fsl_setup_msi_irqs; | 378 | if (!ppc_md.setup_msi_irqs) { |
317 | ppc_md.teardown_msi_irqs = fsl_teardown_msi_irqs; | 379 | ppc_md.setup_msi_irqs = fsl_setup_msi_irqs; |
318 | ppc_md.msi_check_device = fsl_msi_check_device; | 380 | ppc_md.teardown_msi_irqs = fsl_teardown_msi_irqs; |
381 | ppc_md.msi_check_device = fsl_msi_check_device; | ||
382 | } else if (ppc_md.setup_msi_irqs != fsl_setup_msi_irqs) { | ||
383 | dev_err(&dev->dev, "Different MSI driver already installed!\n"); | ||
384 | err = -ENODEV; | ||
385 | goto error_out; | ||
386 | } | ||
319 | return 0; | 387 | return 0; |
320 | error_out: | 388 | error_out: |
321 | kfree(msi); | 389 | fsl_of_msi_remove(dev); |
322 | return err; | 390 | return err; |
323 | } | 391 | } |
324 | 392 | ||
@@ -351,6 +419,7 @@ static struct of_platform_driver fsl_of_msi_driver = { | |||
351 | .of_match_table = fsl_of_msi_ids, | 419 | .of_match_table = fsl_of_msi_ids, |
352 | }, | 420 | }, |
353 | .probe = fsl_of_msi_probe, | 421 | .probe = fsl_of_msi_probe, |
422 | .remove = fsl_of_msi_remove, | ||
354 | }; | 423 | }; |
355 | 424 | ||
356 | static __init int fsl_of_msi_init(void) | 425 | static __init int fsl_of_msi_init(void) |
diff --git a/arch/powerpc/sysdev/fsl_msi.h b/arch/powerpc/sysdev/fsl_msi.h index 331c7e7025b7..624580c252d7 100644 --- a/arch/powerpc/sysdev/fsl_msi.h +++ b/arch/powerpc/sysdev/fsl_msi.h | |||
@@ -32,8 +32,11 @@ struct fsl_msi { | |||
32 | u32 msi_addr_hi; | 32 | u32 msi_addr_hi; |
33 | void __iomem *msi_regs; | 33 | void __iomem *msi_regs; |
34 | u32 feature; | 34 | u32 feature; |
35 | int msi_virqs[NR_MSI_REG]; | ||
35 | 36 | ||
36 | struct msi_bitmap bitmap; | 37 | struct msi_bitmap bitmap; |
38 | |||
39 | struct list_head list; /* support multiple MSI banks */ | ||
37 | }; | 40 | }; |
38 | 41 | ||
39 | #endif /* _POWERPC_SYSDEV_FSL_MSI_H */ | 42 | #endif /* _POWERPC_SYSDEV_FSL_MSI_H */ |
diff --git a/arch/powerpc/sysdev/fsl_rio.c b/arch/powerpc/sysdev/fsl_rio.c index cd37e49e7034..30e1626b2e85 100644 --- a/arch/powerpc/sysdev/fsl_rio.c +++ b/arch/powerpc/sysdev/fsl_rio.c | |||
@@ -1426,7 +1426,7 @@ int fsl_rio_setup(struct of_device *dev) | |||
1426 | port->iores.flags = IORESOURCE_MEM; | 1426 | port->iores.flags = IORESOURCE_MEM; |
1427 | port->iores.name = "rio_io_win"; | 1427 | port->iores.name = "rio_io_win"; |
1428 | 1428 | ||
1429 | priv->pwirq = irq_of_parse_and_map(dev->node, 0); | 1429 | priv->pwirq = irq_of_parse_and_map(dev->dev.of_node, 0); |
1430 | priv->bellirq = irq_of_parse_and_map(dev->dev.of_node, 2); | 1430 | priv->bellirq = irq_of_parse_and_map(dev->dev.of_node, 2); |
1431 | priv->txirq = irq_of_parse_and_map(dev->dev.of_node, 3); | 1431 | priv->txirq = irq_of_parse_and_map(dev->dev.of_node, 3); |
1432 | priv->rxirq = irq_of_parse_and_map(dev->dev.of_node, 4); | 1432 | priv->rxirq = irq_of_parse_and_map(dev->dev.of_node, 4); |
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c index 2102487612a4..20b73c025a45 100644 --- a/arch/powerpc/sysdev/mpic.c +++ b/arch/powerpc/sysdev/mpic.c | |||
@@ -1666,7 +1666,7 @@ static int mpic_resume(struct sys_device *dev) | |||
1666 | mpic->save_data[i].dest); | 1666 | mpic->save_data[i].dest); |
1667 | 1667 | ||
1668 | #ifdef CONFIG_MPIC_U3_HT_IRQS | 1668 | #ifdef CONFIG_MPIC_U3_HT_IRQS |
1669 | { | 1669 | if (mpic->fixups) { |
1670 | struct mpic_irq_fixup *fixup = &mpic->fixups[i]; | 1670 | struct mpic_irq_fixup *fixup = &mpic->fixups[i]; |
1671 | 1671 | ||
1672 | if (fixup->base) { | 1672 | if (fixup->base) { |
diff --git a/arch/powerpc/sysdev/ppc4xx_pci.c b/arch/powerpc/sysdev/ppc4xx_pci.c index 106d767bf65b..156aa7d36258 100644 --- a/arch/powerpc/sysdev/ppc4xx_pci.c +++ b/arch/powerpc/sysdev/ppc4xx_pci.c | |||
@@ -974,6 +974,123 @@ static struct ppc4xx_pciex_hwops ppc460ex_pcie_hwops __initdata = | |||
974 | .setup_utl = ppc460ex_pciex_init_utl, | 974 | .setup_utl = ppc460ex_pciex_init_utl, |
975 | }; | 975 | }; |
976 | 976 | ||
977 | static int __init ppc460sx_pciex_core_init(struct device_node *np) | ||
978 | { | ||
979 | /* HSS drive amplitude */ | ||
980 | mtdcri(SDR0, PESDR0_460SX_HSSL0DAMP, 0xB9843211); | ||
981 | mtdcri(SDR0, PESDR0_460SX_HSSL1DAMP, 0xB9843211); | ||
982 | mtdcri(SDR0, PESDR0_460SX_HSSL2DAMP, 0xB9843211); | ||
983 | mtdcri(SDR0, PESDR0_460SX_HSSL3DAMP, 0xB9843211); | ||
984 | mtdcri(SDR0, PESDR0_460SX_HSSL4DAMP, 0xB9843211); | ||
985 | mtdcri(SDR0, PESDR0_460SX_HSSL5DAMP, 0xB9843211); | ||
986 | mtdcri(SDR0, PESDR0_460SX_HSSL6DAMP, 0xB9843211); | ||
987 | mtdcri(SDR0, PESDR0_460SX_HSSL7DAMP, 0xB9843211); | ||
988 | |||
989 | mtdcri(SDR0, PESDR1_460SX_HSSL0DAMP, 0xB9843211); | ||
990 | mtdcri(SDR0, PESDR1_460SX_HSSL1DAMP, 0xB9843211); | ||
991 | mtdcri(SDR0, PESDR1_460SX_HSSL2DAMP, 0xB9843211); | ||
992 | mtdcri(SDR0, PESDR1_460SX_HSSL3DAMP, 0xB9843211); | ||
993 | |||
994 | mtdcri(SDR0, PESDR2_460SX_HSSL0DAMP, 0xB9843211); | ||
995 | mtdcri(SDR0, PESDR2_460SX_HSSL1DAMP, 0xB9843211); | ||
996 | mtdcri(SDR0, PESDR2_460SX_HSSL2DAMP, 0xB9843211); | ||
997 | mtdcri(SDR0, PESDR2_460SX_HSSL3DAMP, 0xB9843211); | ||
998 | |||
999 | /* HSS TX pre-emphasis */ | ||
1000 | mtdcri(SDR0, PESDR0_460SX_HSSL0COEFA, 0xDCB98987); | ||
1001 | mtdcri(SDR0, PESDR0_460SX_HSSL1COEFA, 0xDCB98987); | ||
1002 | mtdcri(SDR0, PESDR0_460SX_HSSL2COEFA, 0xDCB98987); | ||
1003 | mtdcri(SDR0, PESDR0_460SX_HSSL3COEFA, 0xDCB98987); | ||
1004 | mtdcri(SDR0, PESDR0_460SX_HSSL4COEFA, 0xDCB98987); | ||
1005 | mtdcri(SDR0, PESDR0_460SX_HSSL5COEFA, 0xDCB98987); | ||
1006 | mtdcri(SDR0, PESDR0_460SX_HSSL6COEFA, 0xDCB98987); | ||
1007 | mtdcri(SDR0, PESDR0_460SX_HSSL7COEFA, 0xDCB98987); | ||
1008 | |||
1009 | mtdcri(SDR0, PESDR1_460SX_HSSL0COEFA, 0xDCB98987); | ||
1010 | mtdcri(SDR0, PESDR1_460SX_HSSL1COEFA, 0xDCB98987); | ||
1011 | mtdcri(SDR0, PESDR1_460SX_HSSL2COEFA, 0xDCB98987); | ||
1012 | mtdcri(SDR0, PESDR1_460SX_HSSL3COEFA, 0xDCB98987); | ||
1013 | |||
1014 | mtdcri(SDR0, PESDR2_460SX_HSSL0COEFA, 0xDCB98987); | ||
1015 | mtdcri(SDR0, PESDR2_460SX_HSSL1COEFA, 0xDCB98987); | ||
1016 | mtdcri(SDR0, PESDR2_460SX_HSSL2COEFA, 0xDCB98987); | ||
1017 | mtdcri(SDR0, PESDR2_460SX_HSSL3COEFA, 0xDCB98987); | ||
1018 | |||
1019 | /* HSS TX calibration control */ | ||
1020 | mtdcri(SDR0, PESDR0_460SX_HSSL1CALDRV, 0x22222222); | ||
1021 | mtdcri(SDR0, PESDR1_460SX_HSSL1CALDRV, 0x22220000); | ||
1022 | mtdcri(SDR0, PESDR2_460SX_HSSL1CALDRV, 0x22220000); | ||
1023 | |||
1024 | /* HSS TX slew control */ | ||
1025 | mtdcri(SDR0, PESDR0_460SX_HSSSLEW, 0xFFFFFFFF); | ||
1026 | mtdcri(SDR0, PESDR1_460SX_HSSSLEW, 0xFFFF0000); | ||
1027 | mtdcri(SDR0, PESDR2_460SX_HSSSLEW, 0xFFFF0000); | ||
1028 | |||
1029 | udelay(100); | ||
1030 | |||
1031 | /* De-assert PLLRESET */ | ||
1032 | dcri_clrset(SDR0, PESDR0_PLLLCT2, 0x00000100, 0); | ||
1033 | |||
1034 | /* Reset DL, UTL, GPL before configuration */ | ||
1035 | mtdcri(SDR0, PESDR0_460SX_RCSSET, | ||
1036 | PESDRx_RCSSET_RSTDL | PESDRx_RCSSET_RSTGU); | ||
1037 | mtdcri(SDR0, PESDR1_460SX_RCSSET, | ||
1038 | PESDRx_RCSSET_RSTDL | PESDRx_RCSSET_RSTGU); | ||
1039 | mtdcri(SDR0, PESDR2_460SX_RCSSET, | ||
1040 | PESDRx_RCSSET_RSTDL | PESDRx_RCSSET_RSTGU); | ||
1041 | |||
1042 | udelay(100); | ||
1043 | |||
1044 | /* | ||
1045 | * If bifurcation is not enabled, u-boot would have disabled the | ||
1046 | * third PCIe port | ||
1047 | */ | ||
1048 | if (((mfdcri(SDR0, PESDR1_460SX_HSSCTLSET) & 0x00000001) == | ||
1049 | 0x00000001)) { | ||
1050 | printk(KERN_INFO "PCI: PCIE bifurcation setup successfully.\n"); | ||
1051 | printk(KERN_INFO "PCI: Total 3 PCIE ports are present\n"); | ||
1052 | return 3; | ||
1053 | } | ||
1054 | |||
1055 | printk(KERN_INFO "PCI: Total 2 PCIE ports are present\n"); | ||
1056 | return 2; | ||
1057 | } | ||
1058 | |||
1059 | static int ppc460sx_pciex_init_port_hw(struct ppc4xx_pciex_port *port) | ||
1060 | { | ||
1061 | |||
1062 | if (port->endpoint) | ||
1063 | dcri_clrset(SDR0, port->sdr_base + PESDRn_UTLSET2, | ||
1064 | 0x01000000, 0); | ||
1065 | else | ||
1066 | dcri_clrset(SDR0, port->sdr_base + PESDRn_UTLSET2, | ||
1067 | 0, 0x01000000); | ||
1068 | |||
1069 | /*Gen-1*/ | ||
1070 | mtdcri(SDR0, port->sdr_base + PESDRn_460SX_RCEI, 0x08000000); | ||
1071 | |||
1072 | dcri_clrset(SDR0, port->sdr_base + PESDRn_RCSSET, | ||
1073 | (PESDRx_RCSSET_RSTGU | PESDRx_RCSSET_RSTDL), | ||
1074 | PESDRx_RCSSET_RSTPYN); | ||
1075 | |||
1076 | port->has_ibpre = 1; | ||
1077 | |||
1078 | return 0; | ||
1079 | } | ||
1080 | |||
1081 | static int ppc460sx_pciex_init_utl(struct ppc4xx_pciex_port *port) | ||
1082 | { | ||
1083 | /* Max 128 Bytes */ | ||
1084 | out_be32 (port->utl_base + PEUTL_PBBSZ, 0x00000000); | ||
1085 | return 0; | ||
1086 | } | ||
1087 | |||
1088 | static struct ppc4xx_pciex_hwops ppc460sx_pcie_hwops __initdata = { | ||
1089 | .core_init = ppc460sx_pciex_core_init, | ||
1090 | .port_init_hw = ppc460sx_pciex_init_port_hw, | ||
1091 | .setup_utl = ppc460sx_pciex_init_utl, | ||
1092 | }; | ||
1093 | |||
977 | #endif /* CONFIG_44x */ | 1094 | #endif /* CONFIG_44x */ |
978 | 1095 | ||
979 | #ifdef CONFIG_40x | 1096 | #ifdef CONFIG_40x |
@@ -1089,6 +1206,8 @@ static int __init ppc4xx_pciex_check_core_init(struct device_node *np) | |||
1089 | } | 1206 | } |
1090 | if (of_device_is_compatible(np, "ibm,plb-pciex-460ex")) | 1207 | if (of_device_is_compatible(np, "ibm,plb-pciex-460ex")) |
1091 | ppc4xx_pciex_hwops = &ppc460ex_pcie_hwops; | 1208 | ppc4xx_pciex_hwops = &ppc460ex_pcie_hwops; |
1209 | if (of_device_is_compatible(np, "ibm,plb-pciex-460sx")) | ||
1210 | ppc4xx_pciex_hwops = &ppc460sx_pcie_hwops; | ||
1092 | #endif /* CONFIG_44x */ | 1211 | #endif /* CONFIG_44x */ |
1093 | #ifdef CONFIG_40x | 1212 | #ifdef CONFIG_40x |
1094 | if (of_device_is_compatible(np, "ibm,plb-pciex-405ex")) | 1213 | if (of_device_is_compatible(np, "ibm,plb-pciex-405ex")) |
diff --git a/arch/powerpc/sysdev/ppc4xx_pci.h b/arch/powerpc/sysdev/ppc4xx_pci.h index d04e40b306fb..56d9e5deccbf 100644 --- a/arch/powerpc/sysdev/ppc4xx_pci.h +++ b/arch/powerpc/sysdev/ppc4xx_pci.h | |||
@@ -324,6 +324,64 @@ | |||
324 | #define PESDR0_460EX_IHS2 0x036D | 324 | #define PESDR0_460EX_IHS2 0x036D |
325 | 325 | ||
326 | /* | 326 | /* |
327 | * 460SX addtional DCRs | ||
328 | */ | ||
329 | #define PESDRn_460SX_RCEI 0x02 | ||
330 | |||
331 | #define PESDR0_460SX_HSSL0DAMP 0x320 | ||
332 | #define PESDR0_460SX_HSSL1DAMP 0x321 | ||
333 | #define PESDR0_460SX_HSSL2DAMP 0x322 | ||
334 | #define PESDR0_460SX_HSSL3DAMP 0x323 | ||
335 | #define PESDR0_460SX_HSSL4DAMP 0x324 | ||
336 | #define PESDR0_460SX_HSSL5DAMP 0x325 | ||
337 | #define PESDR0_460SX_HSSL6DAMP 0x326 | ||
338 | #define PESDR0_460SX_HSSL7DAMP 0x327 | ||
339 | |||
340 | #define PESDR1_460SX_HSSL0DAMP 0x354 | ||
341 | #define PESDR1_460SX_HSSL1DAMP 0x355 | ||
342 | #define PESDR1_460SX_HSSL2DAMP 0x356 | ||
343 | #define PESDR1_460SX_HSSL3DAMP 0x357 | ||
344 | |||
345 | #define PESDR2_460SX_HSSL0DAMP 0x384 | ||
346 | #define PESDR2_460SX_HSSL1DAMP 0x385 | ||
347 | #define PESDR2_460SX_HSSL2DAMP 0x386 | ||
348 | #define PESDR2_460SX_HSSL3DAMP 0x387 | ||
349 | |||
350 | #define PESDR0_460SX_HSSL0COEFA 0x328 | ||
351 | #define PESDR0_460SX_HSSL1COEFA 0x329 | ||
352 | #define PESDR0_460SX_HSSL2COEFA 0x32A | ||
353 | #define PESDR0_460SX_HSSL3COEFA 0x32B | ||
354 | #define PESDR0_460SX_HSSL4COEFA 0x32C | ||
355 | #define PESDR0_460SX_HSSL5COEFA 0x32D | ||
356 | #define PESDR0_460SX_HSSL6COEFA 0x32E | ||
357 | #define PESDR0_460SX_HSSL7COEFA 0x32F | ||
358 | |||
359 | #define PESDR1_460SX_HSSL0COEFA 0x358 | ||
360 | #define PESDR1_460SX_HSSL1COEFA 0x359 | ||
361 | #define PESDR1_460SX_HSSL2COEFA 0x35A | ||
362 | #define PESDR1_460SX_HSSL3COEFA 0x35B | ||
363 | |||
364 | #define PESDR2_460SX_HSSL0COEFA 0x388 | ||
365 | #define PESDR2_460SX_HSSL1COEFA 0x389 | ||
366 | #define PESDR2_460SX_HSSL2COEFA 0x38A | ||
367 | #define PESDR2_460SX_HSSL3COEFA 0x38B | ||
368 | |||
369 | #define PESDR0_460SX_HSSL1CALDRV 0x339 | ||
370 | #define PESDR1_460SX_HSSL1CALDRV 0x361 | ||
371 | #define PESDR2_460SX_HSSL1CALDRV 0x391 | ||
372 | |||
373 | #define PESDR0_460SX_HSSSLEW 0x338 | ||
374 | #define PESDR1_460SX_HSSSLEW 0x360 | ||
375 | #define PESDR2_460SX_HSSSLEW 0x390 | ||
376 | |||
377 | #define PESDR0_460SX_HSSCTLSET 0x31E | ||
378 | #define PESDR1_460SX_HSSCTLSET 0x352 | ||
379 | #define PESDR2_460SX_HSSCTLSET 0x382 | ||
380 | |||
381 | #define PESDR0_460SX_RCSSET 0x304 | ||
382 | #define PESDR1_460SX_RCSSET 0x344 | ||
383 | #define PESDR2_460SX_RCSSET 0x374 | ||
384 | /* | ||
327 | * Of the above, some are common offsets from the base | 385 | * Of the above, some are common offsets from the base |
328 | */ | 386 | */ |
329 | #define PESDRn_UTLSET1 0x00 | 387 | #define PESDRn_UTLSET1 0x00 |
diff --git a/arch/s390/appldata/appldata_os.c b/arch/s390/appldata/appldata_os.c index 55c80ffd42b9..92f1cb745d69 100644 --- a/arch/s390/appldata/appldata_os.c +++ b/arch/s390/appldata/appldata_os.c | |||
@@ -181,7 +181,7 @@ static int __init appldata_os_init(void) | |||
181 | goto out; | 181 | goto out; |
182 | } | 182 | } |
183 | 183 | ||
184 | appldata_os_data = kzalloc(max_size, GFP_DMA); | 184 | appldata_os_data = kzalloc(max_size, GFP_KERNEL | GFP_DMA); |
185 | if (appldata_os_data == NULL) { | 185 | if (appldata_os_data == NULL) { |
186 | rc = -ENOMEM; | 186 | rc = -ENOMEM; |
187 | goto out; | 187 | goto out; |
diff --git a/arch/s390/defconfig b/arch/s390/defconfig index bcd6884985ad..253f158db668 100644 --- a/arch/s390/defconfig +++ b/arch/s390/defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.34-rc3 | 3 | # Linux kernel version: 2.6.35-rc1 |
4 | # Fri Apr 9 09:57:10 2010 | 4 | # Fri Jun 4 11:32:40 2010 |
5 | # | 5 | # |
6 | CONFIG_SCHED_MC=y | 6 | CONFIG_SCHED_MC=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -35,11 +35,13 @@ CONFIG_CONSTRUCTORS=y | |||
35 | CONFIG_EXPERIMENTAL=y | 35 | CONFIG_EXPERIMENTAL=y |
36 | CONFIG_LOCK_KERNEL=y | 36 | CONFIG_LOCK_KERNEL=y |
37 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 37 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
38 | CONFIG_CROSS_COMPILE="" | ||
38 | CONFIG_LOCALVERSION="" | 39 | CONFIG_LOCALVERSION="" |
39 | CONFIG_LOCALVERSION_AUTO=y | 40 | CONFIG_LOCALVERSION_AUTO=y |
40 | CONFIG_HAVE_KERNEL_GZIP=y | 41 | CONFIG_HAVE_KERNEL_GZIP=y |
41 | CONFIG_HAVE_KERNEL_BZIP2=y | 42 | CONFIG_HAVE_KERNEL_BZIP2=y |
42 | CONFIG_HAVE_KERNEL_LZMA=y | 43 | CONFIG_HAVE_KERNEL_LZMA=y |
44 | CONFIG_HAVE_KERNEL_LZO=y | ||
43 | CONFIG_KERNEL_GZIP=y | 45 | CONFIG_KERNEL_GZIP=y |
44 | # CONFIG_KERNEL_BZIP2 is not set | 46 | # CONFIG_KERNEL_BZIP2 is not set |
45 | # CONFIG_KERNEL_LZMA is not set | 47 | # CONFIG_KERNEL_LZMA is not set |
@@ -77,6 +79,7 @@ CONFIG_CGROUP_NS=y | |||
77 | # CONFIG_CGROUP_CPUACCT is not set | 79 | # CONFIG_CGROUP_CPUACCT is not set |
78 | # CONFIG_RESOURCE_COUNTERS is not set | 80 | # CONFIG_RESOURCE_COUNTERS is not set |
79 | # CONFIG_CGROUP_SCHED is not set | 81 | # CONFIG_CGROUP_SCHED is not set |
82 | # CONFIG_BLK_CGROUP is not set | ||
80 | CONFIG_SYSFS_DEPRECATED=y | 83 | CONFIG_SYSFS_DEPRECATED=y |
81 | CONFIG_SYSFS_DEPRECATED_V2=y | 84 | CONFIG_SYSFS_DEPRECATED_V2=y |
82 | # CONFIG_RELAY is not set | 85 | # CONFIG_RELAY is not set |
@@ -157,7 +160,6 @@ CONFIG_STOP_MACHINE=y | |||
157 | CONFIG_BLOCK=y | 160 | CONFIG_BLOCK=y |
158 | CONFIG_BLK_DEV_BSG=y | 161 | CONFIG_BLK_DEV_BSG=y |
159 | # CONFIG_BLK_DEV_INTEGRITY is not set | 162 | # CONFIG_BLK_DEV_INTEGRITY is not set |
160 | # CONFIG_BLK_CGROUP is not set | ||
161 | CONFIG_BLOCK_COMPAT=y | 163 | CONFIG_BLOCK_COMPAT=y |
162 | 164 | ||
163 | # | 165 | # |
@@ -166,7 +168,6 @@ CONFIG_BLOCK_COMPAT=y | |||
166 | CONFIG_IOSCHED_NOOP=y | 168 | CONFIG_IOSCHED_NOOP=y |
167 | CONFIG_IOSCHED_DEADLINE=y | 169 | CONFIG_IOSCHED_DEADLINE=y |
168 | CONFIG_IOSCHED_CFQ=y | 170 | CONFIG_IOSCHED_CFQ=y |
169 | # CONFIG_CFQ_GROUP_IOSCHED is not set | ||
170 | CONFIG_DEFAULT_DEADLINE=y | 171 | CONFIG_DEFAULT_DEADLINE=y |
171 | # CONFIG_DEFAULT_CFQ is not set | 172 | # CONFIG_DEFAULT_CFQ is not set |
172 | # CONFIG_DEFAULT_NOOP is not set | 173 | # CONFIG_DEFAULT_NOOP is not set |
@@ -247,7 +248,6 @@ CONFIG_64BIT=y | |||
247 | CONFIG_SMP=y | 248 | CONFIG_SMP=y |
248 | CONFIG_NR_CPUS=32 | 249 | CONFIG_NR_CPUS=32 |
249 | CONFIG_HOTPLUG_CPU=y | 250 | CONFIG_HOTPLUG_CPU=y |
250 | # CONFIG_SCHED_BOOK is not set | ||
251 | CONFIG_COMPAT=y | 251 | CONFIG_COMPAT=y |
252 | CONFIG_SYSVIPC_COMPAT=y | 252 | CONFIG_SYSVIPC_COMPAT=y |
253 | CONFIG_AUDIT_ARCH=y | 253 | CONFIG_AUDIT_ARCH=y |
@@ -320,7 +320,6 @@ CONFIG_COMPAT_BINFMT_ELF=y | |||
320 | # CONFIG_HAVE_AOUT is not set | 320 | # CONFIG_HAVE_AOUT is not set |
321 | CONFIG_BINFMT_MISC=m | 321 | CONFIG_BINFMT_MISC=m |
322 | CONFIG_FORCE_MAX_ZONEORDER=9 | 322 | CONFIG_FORCE_MAX_ZONEORDER=9 |
323 | # CONFIG_PROCESS_DEBUG is not set | ||
324 | CONFIG_PFAULT=y | 323 | CONFIG_PFAULT=y |
325 | # CONFIG_SHARED_KERNEL is not set | 324 | # CONFIG_SHARED_KERNEL is not set |
326 | # CONFIG_CMM is not set | 325 | # CONFIG_CMM is not set |
@@ -457,6 +456,7 @@ CONFIG_NF_CONNTRACK=m | |||
457 | # CONFIG_IP6_NF_IPTABLES is not set | 456 | # CONFIG_IP6_NF_IPTABLES is not set |
458 | # CONFIG_IP_DCCP is not set | 457 | # CONFIG_IP_DCCP is not set |
459 | CONFIG_IP_SCTP=m | 458 | CONFIG_IP_SCTP=m |
459 | # CONFIG_NET_SCTPPROBE is not set | ||
460 | # CONFIG_SCTP_DBG_MSG is not set | 460 | # CONFIG_SCTP_DBG_MSG is not set |
461 | # CONFIG_SCTP_DBG_OBJCNT is not set | 461 | # CONFIG_SCTP_DBG_OBJCNT is not set |
462 | # CONFIG_SCTP_HMAC_NONE is not set | 462 | # CONFIG_SCTP_HMAC_NONE is not set |
@@ -465,6 +465,7 @@ CONFIG_SCTP_HMAC_MD5=y | |||
465 | # CONFIG_RDS is not set | 465 | # CONFIG_RDS is not set |
466 | # CONFIG_TIPC is not set | 466 | # CONFIG_TIPC is not set |
467 | # CONFIG_ATM is not set | 467 | # CONFIG_ATM is not set |
468 | # CONFIG_L2TP is not set | ||
468 | # CONFIG_BRIDGE is not set | 469 | # CONFIG_BRIDGE is not set |
469 | # CONFIG_VLAN_8021Q is not set | 470 | # CONFIG_VLAN_8021Q is not set |
470 | # CONFIG_DECNET is not set | 471 | # CONFIG_DECNET is not set |
@@ -525,6 +526,7 @@ CONFIG_NET_ACT_NAT=m | |||
525 | # CONFIG_NET_CLS_IND is not set | 526 | # CONFIG_NET_CLS_IND is not set |
526 | CONFIG_NET_SCH_FIFO=y | 527 | CONFIG_NET_SCH_FIFO=y |
527 | # CONFIG_DCB is not set | 528 | # CONFIG_DCB is not set |
529 | CONFIG_RPS=y | ||
528 | 530 | ||
529 | # | 531 | # |
530 | # Network testing | 532 | # Network testing |
@@ -546,6 +548,7 @@ CONFIG_CAN_VCAN=m | |||
546 | # CONFIG_WIMAX is not set | 548 | # CONFIG_WIMAX is not set |
547 | # CONFIG_RFKILL is not set | 549 | # CONFIG_RFKILL is not set |
548 | # CONFIG_NET_9P is not set | 550 | # CONFIG_NET_9P is not set |
551 | # CONFIG_CAIF is not set | ||
549 | # CONFIG_PCMCIA is not set | 552 | # CONFIG_PCMCIA is not set |
550 | CONFIG_CCW=y | 553 | CONFIG_CCW=y |
551 | 554 | ||
@@ -728,6 +731,7 @@ CONFIG_VIRTIO_NET=m | |||
728 | # Character devices | 731 | # Character devices |
729 | # | 732 | # |
730 | CONFIG_DEVKMEM=y | 733 | CONFIG_DEVKMEM=y |
734 | # CONFIG_N_GSM is not set | ||
731 | CONFIG_UNIX98_PTYS=y | 735 | CONFIG_UNIX98_PTYS=y |
732 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | 736 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set |
733 | CONFIG_LEGACY_PTYS=y | 737 | CONFIG_LEGACY_PTYS=y |
@@ -775,6 +779,7 @@ CONFIG_S390_TAPE_34XX=m | |||
775 | # CONFIG_MONREADER is not set | 779 | # CONFIG_MONREADER is not set |
776 | CONFIG_MONWRITER=m | 780 | CONFIG_MONWRITER=m |
777 | CONFIG_S390_VMUR=m | 781 | CONFIG_S390_VMUR=m |
782 | # CONFIG_RAMOOPS is not set | ||
778 | 783 | ||
779 | # | 784 | # |
780 | # PPS support | 785 | # PPS support |
@@ -788,10 +793,6 @@ CONFIG_S390_VMUR=m | |||
788 | # CONFIG_NEW_LEDS is not set | 793 | # CONFIG_NEW_LEDS is not set |
789 | CONFIG_ACCESSIBILITY=y | 794 | CONFIG_ACCESSIBILITY=y |
790 | # CONFIG_AUXDISPLAY is not set | 795 | # CONFIG_AUXDISPLAY is not set |
791 | |||
792 | # | ||
793 | # TI VLYNQ | ||
794 | # | ||
795 | # CONFIG_STAGING is not set | 796 | # CONFIG_STAGING is not set |
796 | 797 | ||
797 | # | 798 | # |
@@ -976,6 +977,7 @@ CONFIG_DEBUG_MEMORY_INIT=y | |||
976 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | 977 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set |
977 | CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y | 978 | CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y |
978 | # CONFIG_LKDTM is not set | 979 | # CONFIG_LKDTM is not set |
980 | # CONFIG_CPU_NOTIFIER_ERROR_INJECT is not set | ||
979 | # CONFIG_FAULT_INJECTION is not set | 981 | # CONFIG_FAULT_INJECTION is not set |
980 | # CONFIG_LATENCYTOP is not set | 982 | # CONFIG_LATENCYTOP is not set |
981 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 983 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
@@ -1010,6 +1012,7 @@ CONFIG_BRANCH_PROFILE_NONE=y | |||
1010 | CONFIG_KPROBE_EVENT=y | 1012 | CONFIG_KPROBE_EVENT=y |
1011 | # CONFIG_RING_BUFFER_BENCHMARK is not set | 1013 | # CONFIG_RING_BUFFER_BENCHMARK is not set |
1012 | # CONFIG_DYNAMIC_DEBUG is not set | 1014 | # CONFIG_DYNAMIC_DEBUG is not set |
1015 | # CONFIG_ATOMIC64_SELFTEST is not set | ||
1013 | CONFIG_SAMPLES=y | 1016 | CONFIG_SAMPLES=y |
1014 | # CONFIG_SAMPLE_TRACEPOINTS is not set | 1017 | # CONFIG_SAMPLE_TRACEPOINTS is not set |
1015 | # CONFIG_SAMPLE_TRACE_EVENTS is not set | 1018 | # CONFIG_SAMPLE_TRACE_EVENTS is not set |
diff --git a/arch/s390/include/asm/cache.h b/arch/s390/include/asm/cache.h index 9b866816863c..24aafa68b643 100644 --- a/arch/s390/include/asm/cache.h +++ b/arch/s390/include/asm/cache.h | |||
@@ -14,6 +14,6 @@ | |||
14 | #define L1_CACHE_BYTES 256 | 14 | #define L1_CACHE_BYTES 256 |
15 | #define L1_CACHE_SHIFT 8 | 15 | #define L1_CACHE_SHIFT 8 |
16 | 16 | ||
17 | #define __read_mostly __attribute__((__section__(".data.read_mostly"))) | 17 | #define __read_mostly __attribute__((__section__(".data..read_mostly"))) |
18 | 18 | ||
19 | #endif | 19 | #endif |
diff --git a/arch/s390/kernel/module.c b/arch/s390/kernel/module.c index 639380a0c45c..22cfd634c355 100644 --- a/arch/s390/kernel/module.c +++ b/arch/s390/kernel/module.c | |||
@@ -55,8 +55,10 @@ void *module_alloc(unsigned long size) | |||
55 | /* Free memory returned from module_alloc */ | 55 | /* Free memory returned from module_alloc */ |
56 | void module_free(struct module *mod, void *module_region) | 56 | void module_free(struct module *mod, void *module_region) |
57 | { | 57 | { |
58 | vfree(mod->arch.syminfo); | 58 | if (mod) { |
59 | mod->arch.syminfo = NULL; | 59 | vfree(mod->arch.syminfo); |
60 | mod->arch.syminfo = NULL; | ||
61 | } | ||
60 | vfree(module_region); | 62 | vfree(module_region); |
61 | } | 63 | } |
62 | 64 | ||
diff --git a/arch/s390/kernel/swsusp_asm64.S b/arch/s390/kernel/swsusp_asm64.S index c56d3f56d020..1f066e46e83e 100644 --- a/arch/s390/kernel/swsusp_asm64.S +++ b/arch/s390/kernel/swsusp_asm64.S | |||
@@ -264,7 +264,7 @@ restore_registers: | |||
264 | lghi %r2,0 | 264 | lghi %r2,0 |
265 | br %r14 | 265 | br %r14 |
266 | 266 | ||
267 | .section .data.nosave,"aw",@progbits | 267 | .section .data..nosave,"aw",@progbits |
268 | .align 8 | 268 | .align 8 |
269 | .Ldisabled_wait_31: | 269 | .Ldisabled_wait_31: |
270 | .long 0x000a0000,0x00000000 | 270 | .long 0x000a0000,0x00000000 |
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index 8093e6f47f49..ae3705816878 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c | |||
@@ -761,7 +761,7 @@ static int __init kvm_s390_init(void) | |||
761 | * to hold the maximum amount of facilites. On the other hand, we | 761 | * to hold the maximum amount of facilites. On the other hand, we |
762 | * only set facilities that are known to work in KVM. | 762 | * only set facilities that are known to work in KVM. |
763 | */ | 763 | */ |
764 | facilities = (unsigned long long *) get_zeroed_page(GFP_DMA); | 764 | facilities = (unsigned long long *) get_zeroed_page(GFP_KERNEL|GFP_DMA); |
765 | if (!facilities) { | 765 | if (!facilities) { |
766 | kvm_exit(); | 766 | kvm_exit(); |
767 | return -ENOMEM; | 767 | return -ENOMEM; |
diff --git a/arch/s390/kvm/sigp.c b/arch/s390/kvm/sigp.c index eff3c5989b46..702276f5e2fa 100644 --- a/arch/s390/kvm/sigp.c +++ b/arch/s390/kvm/sigp.c | |||
@@ -113,7 +113,7 @@ static int __inject_sigp_stop(struct kvm_s390_local_interrupt *li, int action) | |||
113 | { | 113 | { |
114 | struct kvm_s390_interrupt_info *inti; | 114 | struct kvm_s390_interrupt_info *inti; |
115 | 115 | ||
116 | inti = kzalloc(sizeof(*inti), GFP_KERNEL); | 116 | inti = kzalloc(sizeof(*inti), GFP_ATOMIC); |
117 | if (!inti) | 117 | if (!inti) |
118 | return -ENOMEM; | 118 | return -ENOMEM; |
119 | inti->type = KVM_S390_SIGP_STOP; | 119 | inti->type = KVM_S390_SIGP_STOP; |
diff --git a/arch/s390/mm/extmem.c b/arch/s390/mm/extmem.c index 6409fd57eb04..3cc95dd0a3a6 100644 --- a/arch/s390/mm/extmem.c +++ b/arch/s390/mm/extmem.c | |||
@@ -105,7 +105,7 @@ static int | |||
105 | dcss_set_subcodes(void) | 105 | dcss_set_subcodes(void) |
106 | { | 106 | { |
107 | #ifdef CONFIG_64BIT | 107 | #ifdef CONFIG_64BIT |
108 | char *name = kmalloc(8 * sizeof(char), GFP_DMA); | 108 | char *name = kmalloc(8 * sizeof(char), GFP_KERNEL | GFP_DMA); |
109 | unsigned long rx, ry; | 109 | unsigned long rx, ry; |
110 | int rc; | 110 | int rc; |
111 | 111 | ||
@@ -252,12 +252,13 @@ dcss_diag_translate_rc (int vm_rc) { | |||
252 | static int | 252 | static int |
253 | query_segment_type (struct dcss_segment *seg) | 253 | query_segment_type (struct dcss_segment *seg) |
254 | { | 254 | { |
255 | struct qin64 *qin = kmalloc (sizeof(struct qin64), GFP_DMA); | ||
256 | struct qout64 *qout = kmalloc (sizeof(struct qout64), GFP_DMA); | ||
257 | |||
258 | int diag_cc, rc, i; | ||
259 | unsigned long dummy, vmrc; | 255 | unsigned long dummy, vmrc; |
256 | int diag_cc, rc, i; | ||
257 | struct qout64 *qout; | ||
258 | struct qin64 *qin; | ||
260 | 259 | ||
260 | qin = kmalloc(sizeof(*qin), GFP_KERNEL | GFP_DMA); | ||
261 | qout = kmalloc(sizeof(*qout), GFP_KERNEL | GFP_DMA); | ||
261 | if ((qin == NULL) || (qout == NULL)) { | 262 | if ((qin == NULL) || (qout == NULL)) { |
262 | rc = -ENOMEM; | 263 | rc = -ENOMEM; |
263 | goto out_free; | 264 | goto out_free; |
@@ -286,7 +287,7 @@ query_segment_type (struct dcss_segment *seg) | |||
286 | copy data for the new format. */ | 287 | copy data for the new format. */ |
287 | if (segext_scode == DCSS_SEGEXT) { | 288 | if (segext_scode == DCSS_SEGEXT) { |
288 | struct qout64_old *qout_old; | 289 | struct qout64_old *qout_old; |
289 | qout_old = kzalloc(sizeof(struct qout64_old), GFP_DMA); | 290 | qout_old = kzalloc(sizeof(*qout_old), GFP_KERNEL | GFP_DMA); |
290 | if (qout_old == NULL) { | 291 | if (qout_old == NULL) { |
291 | rc = -ENOMEM; | 292 | rc = -ENOMEM; |
292 | goto out_free; | 293 | goto out_free; |
@@ -407,11 +408,11 @@ segment_overlaps_others (struct dcss_segment *seg) | |||
407 | static int | 408 | static int |
408 | __segment_load (char *name, int do_nonshared, unsigned long *addr, unsigned long *end) | 409 | __segment_load (char *name, int do_nonshared, unsigned long *addr, unsigned long *end) |
409 | { | 410 | { |
410 | struct dcss_segment *seg = kmalloc(sizeof(struct dcss_segment), | ||
411 | GFP_DMA); | ||
412 | int rc, diag_cc; | ||
413 | unsigned long start_addr, end_addr, dummy; | 411 | unsigned long start_addr, end_addr, dummy; |
412 | struct dcss_segment *seg; | ||
413 | int rc, diag_cc; | ||
414 | 414 | ||
415 | seg = kmalloc(sizeof(*seg), GFP_KERNEL | GFP_DMA); | ||
415 | if (seg == NULL) { | 416 | if (seg == NULL) { |
416 | rc = -ENOMEM; | 417 | rc = -ENOMEM; |
417 | goto out; | 418 | goto out; |
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index c5ee4ce60b57..573fca1fbd9b 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig | |||
@@ -9,7 +9,7 @@ config SUPERH | |||
9 | def_bool y | 9 | def_bool y |
10 | select EMBEDDED | 10 | select EMBEDDED |
11 | select HAVE_CLK | 11 | select HAVE_CLK |
12 | select HAVE_IDE | 12 | select HAVE_IDE if HAS_IOPORT |
13 | select HAVE_LMB | 13 | select HAVE_LMB |
14 | select HAVE_OPROFILE | 14 | select HAVE_OPROFILE |
15 | select HAVE_GENERIC_DMA_COHERENT | 15 | select HAVE_GENERIC_DMA_COHERENT |
@@ -174,6 +174,9 @@ config ARCH_HAS_DEFAULT_IDLE | |||
174 | config ARCH_HAS_CPU_IDLE_WAIT | 174 | config ARCH_HAS_CPU_IDLE_WAIT |
175 | def_bool y | 175 | def_bool y |
176 | 176 | ||
177 | config NO_IOPORT | ||
178 | bool | ||
179 | |||
177 | config IO_TRAPPED | 180 | config IO_TRAPPED |
178 | bool | 181 | bool |
179 | 182 | ||
@@ -776,6 +779,17 @@ config ENTRY_OFFSET | |||
776 | default "0x00010000" if PAGE_SIZE_64KB | 779 | default "0x00010000" if PAGE_SIZE_64KB |
777 | default "0x00000000" | 780 | default "0x00000000" |
778 | 781 | ||
782 | config ROMIMAGE_MMCIF | ||
783 | bool "Include MMCIF loader in romImage (EXPERIMENTAL)" | ||
784 | depends on CPU_SUBTYPE_SH7724 && EXPERIMENTAL | ||
785 | help | ||
786 | Say Y here to include experimental MMCIF loading code in | ||
787 | romImage. With this enabled it is possible to write the romImage | ||
788 | kernel image to an MMC card and boot the kernel straight from | ||
789 | the reset vector. At reset the processor Mask ROM will load the | ||
790 | first part of the romImage which in turn loads the rest the kernel | ||
791 | image to RAM using the MMCIF hardware block. | ||
792 | |||
779 | choice | 793 | choice |
780 | prompt "Kernel command line" | 794 | prompt "Kernel command line" |
781 | optional | 795 | optional |
diff --git a/arch/sh/boards/Kconfig b/arch/sh/boards/Kconfig index 938e87d51482..07b35ca2f644 100644 --- a/arch/sh/boards/Kconfig +++ b/arch/sh/boards/Kconfig | |||
@@ -154,6 +154,7 @@ config SH_SDK7786 | |||
154 | bool "SDK7786" | 154 | bool "SDK7786" |
155 | depends on CPU_SUBTYPE_SH7786 | 155 | depends on CPU_SUBTYPE_SH7786 |
156 | select SYS_SUPPORTS_PCI | 156 | select SYS_SUPPORTS_PCI |
157 | select NO_IOPORT if !PCI | ||
157 | help | 158 | help |
158 | Select SDK7786 if configuring for a Renesas Technology Europe | 159 | Select SDK7786 if configuring for a Renesas Technology Europe |
159 | SH7786-65nm board. | 160 | SH7786-65nm board. |
@@ -190,6 +191,7 @@ config SH_URQUELL | |||
190 | depends on CPU_SUBTYPE_SH7786 | 191 | depends on CPU_SUBTYPE_SH7786 |
191 | select ARCH_REQUIRE_GPIOLIB | 192 | select ARCH_REQUIRE_GPIOLIB |
192 | select SYS_SUPPORTS_PCI | 193 | select SYS_SUPPORTS_PCI |
194 | select NO_IOPORT if !PCI | ||
193 | 195 | ||
194 | config SH_MIGOR | 196 | config SH_MIGOR |
195 | bool "Migo-R" | 197 | bool "Migo-R" |
@@ -286,6 +288,7 @@ config SH_LBOX_RE2 | |||
286 | config SH_X3PROTO | 288 | config SH_X3PROTO |
287 | bool "SH-X3 Prototype board" | 289 | bool "SH-X3 Prototype board" |
288 | depends on CPU_SUBTYPE_SHX3 | 290 | depends on CPU_SUBTYPE_SHX3 |
291 | select NO_IOPORT if !PCI | ||
289 | 292 | ||
290 | config SH_MAGIC_PANEL_R2 | 293 | config SH_MAGIC_PANEL_R2 |
291 | bool "Magic Panel R2" | 294 | bool "Magic Panel R2" |
diff --git a/arch/sh/boards/mach-ap325rxa/setup.c b/arch/sh/boards/mach-ap325rxa/setup.c index 57e37e284208..3a170bd3f3d0 100644 --- a/arch/sh/boards/mach-ap325rxa/setup.c +++ b/arch/sh/boards/mach-ap325rxa/setup.c | |||
@@ -328,7 +328,7 @@ static struct soc_camera_platform_info camera_info = { | |||
328 | .set_capture = camera_set_capture, | 328 | .set_capture = camera_set_capture, |
329 | }; | 329 | }; |
330 | 330 | ||
331 | struct soc_camera_link camera_link = { | 331 | static struct soc_camera_link camera_link = { |
332 | .bus_id = 0, | 332 | .bus_id = 0, |
333 | .add_device = ap325rxa_camera_add, | 333 | .add_device = ap325rxa_camera_add, |
334 | .del_device = ap325rxa_camera_del, | 334 | .del_device = ap325rxa_camera_del, |
diff --git a/arch/sh/boards/mach-ecovec24/setup.c b/arch/sh/boards/mach-ecovec24/setup.c index 49714258732e..1d7b495a7db4 100644 --- a/arch/sh/boards/mach-ecovec24/setup.c +++ b/arch/sh/boards/mach-ecovec24/setup.c | |||
@@ -12,6 +12,8 @@ | |||
12 | #include <linux/device.h> | 12 | #include <linux/device.h> |
13 | #include <linux/platform_device.h> | 13 | #include <linux/platform_device.h> |
14 | #include <linux/mfd/sh_mobile_sdhi.h> | 14 | #include <linux/mfd/sh_mobile_sdhi.h> |
15 | #include <linux/mmc/host.h> | ||
16 | #include <linux/mmc/sh_mmcif.h> | ||
15 | #include <linux/mtd/physmap.h> | 17 | #include <linux/mtd/physmap.h> |
16 | #include <linux/gpio.h> | 18 | #include <linux/gpio.h> |
17 | #include <linux/interrupt.h> | 19 | #include <linux/interrupt.h> |
@@ -23,10 +25,8 @@ | |||
23 | #include <linux/spi/spi.h> | 25 | #include <linux/spi/spi.h> |
24 | #include <linux/spi/sh_msiof.h> | 26 | #include <linux/spi/sh_msiof.h> |
25 | #include <linux/spi/mmc_spi.h> | 27 | #include <linux/spi/mmc_spi.h> |
26 | #include <linux/mmc/host.h> | ||
27 | #include <linux/input.h> | 28 | #include <linux/input.h> |
28 | #include <linux/input/sh_keysc.h> | 29 | #include <linux/input/sh_keysc.h> |
29 | #include <linux/mfd/sh_mobile_sdhi.h> | ||
30 | #include <video/sh_mobile_lcdc.h> | 30 | #include <video/sh_mobile_lcdc.h> |
31 | #include <sound/sh_fsi.h> | 31 | #include <sound/sh_fsi.h> |
32 | #include <media/sh_mobile_ceu.h> | 32 | #include <media/sh_mobile_ceu.h> |
@@ -139,7 +139,7 @@ static struct resource sh_eth_resources[] = { | |||
139 | }, | 139 | }, |
140 | }; | 140 | }; |
141 | 141 | ||
142 | struct sh_eth_plat_data sh_eth_plat = { | 142 | static struct sh_eth_plat_data sh_eth_plat = { |
143 | .phy = 0x1f, /* SMSC LAN8700 */ | 143 | .phy = 0x1f, /* SMSC LAN8700 */ |
144 | .edmac_endian = EDMAC_LITTLE_ENDIAN, | 144 | .edmac_endian = EDMAC_LITTLE_ENDIAN, |
145 | .ether_link_active_low = 1 | 145 | .ether_link_active_low = 1 |
@@ -159,7 +159,7 @@ static struct platform_device sh_eth_device = { | |||
159 | }; | 159 | }; |
160 | 160 | ||
161 | /* USB0 host */ | 161 | /* USB0 host */ |
162 | void usb0_port_power(int port, int power) | 162 | static void usb0_port_power(int port, int power) |
163 | { | 163 | { |
164 | gpio_set_value(GPIO_PTB4, power); | 164 | gpio_set_value(GPIO_PTB4, power); |
165 | } | 165 | } |
@@ -195,7 +195,7 @@ static struct platform_device usb0_host_device = { | |||
195 | }; | 195 | }; |
196 | 196 | ||
197 | /* USB1 host/function */ | 197 | /* USB1 host/function */ |
198 | void usb1_port_power(int port, int power) | 198 | static void usb1_port_power(int port, int power) |
199 | { | 199 | { |
200 | gpio_set_value(GPIO_PTB5, power); | 200 | gpio_set_value(GPIO_PTB5, power); |
201 | } | 201 | } |
@@ -421,7 +421,7 @@ static int ts_init(void) | |||
421 | return 0; | 421 | return 0; |
422 | } | 422 | } |
423 | 423 | ||
424 | struct tsc2007_platform_data tsc2007_info = { | 424 | static struct tsc2007_platform_data tsc2007_info = { |
425 | .model = 2007, | 425 | .model = 2007, |
426 | .x_plate_ohms = 180, | 426 | .x_plate_ohms = 180, |
427 | .get_pendown_state = ts_get_pendown_state, | 427 | .get_pendown_state = ts_get_pendown_state, |
@@ -436,7 +436,7 @@ static struct i2c_board_info ts_i2c_clients = { | |||
436 | }; | 436 | }; |
437 | 437 | ||
438 | #ifdef CONFIG_MFD_SH_MOBILE_SDHI | 438 | #ifdef CONFIG_MFD_SH_MOBILE_SDHI |
439 | /* SHDI0 */ | 439 | /* SDHI0 */ |
440 | static void sdhi0_set_pwr(struct platform_device *pdev, int state) | 440 | static void sdhi0_set_pwr(struct platform_device *pdev, int state) |
441 | { | 441 | { |
442 | gpio_set_value(GPIO_PTB6, state); | 442 | gpio_set_value(GPIO_PTB6, state); |
@@ -474,7 +474,8 @@ static struct platform_device sdhi0_device = { | |||
474 | }, | 474 | }, |
475 | }; | 475 | }; |
476 | 476 | ||
477 | /* SHDI1 */ | 477 | #if !defined(CONFIG_MMC_SH_MMCIF) |
478 | /* SDHI1 */ | ||
478 | static void sdhi1_set_pwr(struct platform_device *pdev, int state) | 479 | static void sdhi1_set_pwr(struct platform_device *pdev, int state) |
479 | { | 480 | { |
480 | gpio_set_value(GPIO_PTB7, state); | 481 | gpio_set_value(GPIO_PTB7, state); |
@@ -511,6 +512,7 @@ static struct platform_device sdhi1_device = { | |||
511 | .hwblk_id = HWBLK_SDHI1, | 512 | .hwblk_id = HWBLK_SDHI1, |
512 | }, | 513 | }, |
513 | }; | 514 | }; |
515 | #endif /* CONFIG_MMC_SH_MMCIF */ | ||
514 | 516 | ||
515 | #else | 517 | #else |
516 | 518 | ||
@@ -720,7 +722,7 @@ static struct clk fsimckb_clk = { | |||
720 | .rate = 0, /* unknown */ | 722 | .rate = 0, /* unknown */ |
721 | }; | 723 | }; |
722 | 724 | ||
723 | struct sh_fsi_platform_info fsi_info = { | 725 | static struct sh_fsi_platform_info fsi_info = { |
724 | .portb_flags = SH_FSI_BRS_INV | | 726 | .portb_flags = SH_FSI_BRS_INV | |
725 | SH_FSI_OUT_SLAVE_MODE | | 727 | SH_FSI_OUT_SLAVE_MODE | |
726 | SH_FSI_IN_SLAVE_MODE | | 728 | SH_FSI_IN_SLAVE_MODE | |
@@ -777,7 +779,7 @@ static struct platform_device irda_device = { | |||
777 | #include <media/ak881x.h> | 779 | #include <media/ak881x.h> |
778 | #include <media/sh_vou.h> | 780 | #include <media/sh_vou.h> |
779 | 781 | ||
780 | struct ak881x_pdata ak881x_pdata = { | 782 | static struct ak881x_pdata ak881x_pdata = { |
781 | .flags = AK881X_IF_MODE_SLAVE, | 783 | .flags = AK881X_IF_MODE_SLAVE, |
782 | }; | 784 | }; |
783 | 785 | ||
@@ -786,7 +788,7 @@ static struct i2c_board_info ak8813 = { | |||
786 | .platform_data = &ak881x_pdata, | 788 | .platform_data = &ak881x_pdata, |
787 | }; | 789 | }; |
788 | 790 | ||
789 | struct sh_vou_pdata sh_vou_pdata = { | 791 | static struct sh_vou_pdata sh_vou_pdata = { |
790 | .bus_fmt = SH_VOU_BUS_8BIT, | 792 | .bus_fmt = SH_VOU_BUS_8BIT, |
791 | .flags = SH_VOU_HSYNC_LOW | SH_VOU_VSYNC_LOW, | 793 | .flags = SH_VOU_HSYNC_LOW | SH_VOU_VSYNC_LOW, |
792 | .board_info = &ak8813, | 794 | .board_info = &ak8813, |
@@ -819,6 +821,58 @@ static struct platform_device vou_device = { | |||
819 | }, | 821 | }, |
820 | }; | 822 | }; |
821 | 823 | ||
824 | #if defined(CONFIG_MMC_SH_MMCIF) | ||
825 | /* SH_MMCIF */ | ||
826 | static void mmcif_set_pwr(struct platform_device *pdev, int state) | ||
827 | { | ||
828 | gpio_set_value(GPIO_PTB7, state); | ||
829 | } | ||
830 | |||
831 | static void mmcif_down_pwr(struct platform_device *pdev) | ||
832 | { | ||
833 | gpio_set_value(GPIO_PTB7, 0); | ||
834 | } | ||
835 | |||
836 | static struct resource sh_mmcif_resources[] = { | ||
837 | [0] = { | ||
838 | .name = "SH_MMCIF", | ||
839 | .start = 0xA4CA0000, | ||
840 | .end = 0xA4CA00FF, | ||
841 | .flags = IORESOURCE_MEM, | ||
842 | }, | ||
843 | [1] = { | ||
844 | /* MMC2I */ | ||
845 | .start = 29, | ||
846 | .flags = IORESOURCE_IRQ, | ||
847 | }, | ||
848 | [2] = { | ||
849 | /* MMC3I */ | ||
850 | .start = 30, | ||
851 | .flags = IORESOURCE_IRQ, | ||
852 | }, | ||
853 | }; | ||
854 | |||
855 | static struct sh_mmcif_plat_data sh_mmcif_plat = { | ||
856 | .set_pwr = mmcif_set_pwr, | ||
857 | .down_pwr = mmcif_down_pwr, | ||
858 | .sup_pclk = 0, /* SH7724: Max Pclk/2 */ | ||
859 | .caps = MMC_CAP_4_BIT_DATA | | ||
860 | MMC_CAP_8_BIT_DATA | | ||
861 | MMC_CAP_NEEDS_POLL, | ||
862 | .ocr = MMC_VDD_32_33 | MMC_VDD_33_34, | ||
863 | }; | ||
864 | |||
865 | static struct platform_device sh_mmcif_device = { | ||
866 | .name = "sh_mmcif", | ||
867 | .id = 0, | ||
868 | .dev = { | ||
869 | .platform_data = &sh_mmcif_plat, | ||
870 | }, | ||
871 | .num_resources = ARRAY_SIZE(sh_mmcif_resources), | ||
872 | .resource = sh_mmcif_resources, | ||
873 | }; | ||
874 | #endif | ||
875 | |||
822 | static struct platform_device *ecovec_devices[] __initdata = { | 876 | static struct platform_device *ecovec_devices[] __initdata = { |
823 | &heartbeat_device, | 877 | &heartbeat_device, |
824 | &nor_flash_device, | 878 | &nor_flash_device, |
@@ -831,7 +885,9 @@ static struct platform_device *ecovec_devices[] __initdata = { | |||
831 | &keysc_device, | 885 | &keysc_device, |
832 | #ifdef CONFIG_MFD_SH_MOBILE_SDHI | 886 | #ifdef CONFIG_MFD_SH_MOBILE_SDHI |
833 | &sdhi0_device, | 887 | &sdhi0_device, |
888 | #if !defined(CONFIG_MMC_SH_MMCIF) | ||
834 | &sdhi1_device, | 889 | &sdhi1_device, |
890 | #endif | ||
835 | #else | 891 | #else |
836 | &msiof0_device, | 892 | &msiof0_device, |
837 | #endif | 893 | #endif |
@@ -841,6 +897,9 @@ static struct platform_device *ecovec_devices[] __initdata = { | |||
841 | &fsi_device, | 897 | &fsi_device, |
842 | &irda_device, | 898 | &irda_device, |
843 | &vou_device, | 899 | &vou_device, |
900 | #if defined(CONFIG_MMC_SH_MMCIF) | ||
901 | &sh_mmcif_device, | ||
902 | #endif | ||
844 | }; | 903 | }; |
845 | 904 | ||
846 | #ifdef CONFIG_I2C | 905 | #ifdef CONFIG_I2C |
@@ -1134,6 +1193,7 @@ static int __init arch_setup(void) | |||
1134 | gpio_request(GPIO_PTB6, NULL); | 1193 | gpio_request(GPIO_PTB6, NULL); |
1135 | gpio_direction_output(GPIO_PTB6, 0); | 1194 | gpio_direction_output(GPIO_PTB6, 0); |
1136 | 1195 | ||
1196 | #if !defined(CONFIG_MMC_SH_MMCIF) | ||
1137 | /* enable SDHI1 on CN12 (needs DS2.6,7 set to ON,OFF) */ | 1197 | /* enable SDHI1 on CN12 (needs DS2.6,7 set to ON,OFF) */ |
1138 | gpio_request(GPIO_FN_SDHI1CD, NULL); | 1198 | gpio_request(GPIO_FN_SDHI1CD, NULL); |
1139 | gpio_request(GPIO_FN_SDHI1WP, NULL); | 1199 | gpio_request(GPIO_FN_SDHI1WP, NULL); |
@@ -1148,6 +1208,7 @@ static int __init arch_setup(void) | |||
1148 | 1208 | ||
1149 | /* I/O buffer drive ability is high for SDHI1 */ | 1209 | /* I/O buffer drive ability is high for SDHI1 */ |
1150 | __raw_writew((__raw_readw(IODRIVEA) & ~0x3000) | 0x2000 , IODRIVEA); | 1210 | __raw_writew((__raw_readw(IODRIVEA) & ~0x3000) | 0x2000 , IODRIVEA); |
1211 | #endif /* CONFIG_MMC_SH_MMCIF */ | ||
1151 | #else | 1212 | #else |
1152 | /* enable MSIOF0 on CN11 (needs DS2.4 set to OFF) */ | 1213 | /* enable MSIOF0 on CN11 (needs DS2.4 set to OFF) */ |
1153 | gpio_request(GPIO_FN_MSIOF0_TXD, NULL); | 1214 | gpio_request(GPIO_FN_MSIOF0_TXD, NULL); |
@@ -1223,6 +1284,25 @@ static int __init arch_setup(void) | |||
1223 | gpio_request(GPIO_PTU5, NULL); | 1284 | gpio_request(GPIO_PTU5, NULL); |
1224 | gpio_direction_output(GPIO_PTU5, 0); | 1285 | gpio_direction_output(GPIO_PTU5, 0); |
1225 | 1286 | ||
1287 | #if defined(CONFIG_MMC_SH_MMCIF) | ||
1288 | /* enable MMCIF (needs DS2.6,7 set to OFF,ON) */ | ||
1289 | gpio_request(GPIO_FN_MMC_D7, NULL); | ||
1290 | gpio_request(GPIO_FN_MMC_D6, NULL); | ||
1291 | gpio_request(GPIO_FN_MMC_D5, NULL); | ||
1292 | gpio_request(GPIO_FN_MMC_D4, NULL); | ||
1293 | gpio_request(GPIO_FN_MMC_D3, NULL); | ||
1294 | gpio_request(GPIO_FN_MMC_D2, NULL); | ||
1295 | gpio_request(GPIO_FN_MMC_D1, NULL); | ||
1296 | gpio_request(GPIO_FN_MMC_D0, NULL); | ||
1297 | gpio_request(GPIO_FN_MMC_CLK, NULL); | ||
1298 | gpio_request(GPIO_FN_MMC_CMD, NULL); | ||
1299 | gpio_request(GPIO_PTB7, NULL); | ||
1300 | gpio_direction_output(GPIO_PTB7, 0); | ||
1301 | |||
1302 | /* I/O buffer drive ability is high for MMCIF */ | ||
1303 | __raw_writew((__raw_readw(IODRIVEA) & ~0x3000) | 0x2000 , IODRIVEA); | ||
1304 | #endif | ||
1305 | |||
1226 | /* enable I2C device */ | 1306 | /* enable I2C device */ |
1227 | i2c_register_board_info(0, i2c0_devices, | 1307 | i2c_register_board_info(0, i2c0_devices, |
1228 | ARRAY_SIZE(i2c0_devices)); | 1308 | ARRAY_SIZE(i2c0_devices)); |
diff --git a/arch/sh/boards/mach-migor/setup.c b/arch/sh/boards/mach-migor/setup.c index 87185de20446..662debe4ead2 100644 --- a/arch/sh/boards/mach-migor/setup.c +++ b/arch/sh/boards/mach-migor/setup.c | |||
@@ -181,7 +181,7 @@ static int migor_nand_flash_ready(struct mtd_info *mtd) | |||
181 | return gpio_get_value(GPIO_PTA1); /* NAND_RBn */ | 181 | return gpio_get_value(GPIO_PTA1); /* NAND_RBn */ |
182 | } | 182 | } |
183 | 183 | ||
184 | struct platform_nand_data migor_nand_flash_data = { | 184 | static struct platform_nand_data migor_nand_flash_data = { |
185 | .chip = { | 185 | .chip = { |
186 | .nr_chips = 1, | 186 | .nr_chips = 1, |
187 | .partitions = migor_nand_flash_partitions, | 187 | .partitions = migor_nand_flash_partitions, |
diff --git a/arch/sh/boards/mach-se/7724/setup.c b/arch/sh/boards/mach-se/7724/setup.c index f9b82546c2df..552ebd9ba82b 100644 --- a/arch/sh/boards/mach-se/7724/setup.c +++ b/arch/sh/boards/mach-se/7724/setup.c | |||
@@ -283,7 +283,7 @@ static struct clk fsimcka_clk = { | |||
283 | }; | 283 | }; |
284 | 284 | ||
285 | /* change J20, J21, J22 pin to 1-2 connection to use slave mode */ | 285 | /* change J20, J21, J22 pin to 1-2 connection to use slave mode */ |
286 | struct sh_fsi_platform_info fsi_info = { | 286 | static struct sh_fsi_platform_info fsi_info = { |
287 | .porta_flags = SH_FSI_BRS_INV | | 287 | .porta_flags = SH_FSI_BRS_INV | |
288 | SH_FSI_OUT_SLAVE_MODE | | 288 | SH_FSI_OUT_SLAVE_MODE | |
289 | SH_FSI_IN_SLAVE_MODE | | 289 | SH_FSI_IN_SLAVE_MODE | |
@@ -371,7 +371,7 @@ static struct resource sh_eth_resources[] = { | |||
371 | }, | 371 | }, |
372 | }; | 372 | }; |
373 | 373 | ||
374 | struct sh_eth_plat_data sh_eth_plat = { | 374 | static struct sh_eth_plat_data sh_eth_plat = { |
375 | .phy = 0x1f, /* SMSC LAN8187 */ | 375 | .phy = 0x1f, /* SMSC LAN8187 */ |
376 | .edmac_endian = EDMAC_LITTLE_ENDIAN, | 376 | .edmac_endian = EDMAC_LITTLE_ENDIAN, |
377 | }; | 377 | }; |
@@ -535,7 +535,7 @@ static struct platform_device irda_device = { | |||
535 | #include <media/ak881x.h> | 535 | #include <media/ak881x.h> |
536 | #include <media/sh_vou.h> | 536 | #include <media/sh_vou.h> |
537 | 537 | ||
538 | struct ak881x_pdata ak881x_pdata = { | 538 | static struct ak881x_pdata ak881x_pdata = { |
539 | .flags = AK881X_IF_MODE_SLAVE, | 539 | .flags = AK881X_IF_MODE_SLAVE, |
540 | }; | 540 | }; |
541 | 541 | ||
@@ -545,7 +545,7 @@ static struct i2c_board_info ak8813 = { | |||
545 | .platform_data = &ak881x_pdata, | 545 | .platform_data = &ak881x_pdata, |
546 | }; | 546 | }; |
547 | 547 | ||
548 | struct sh_vou_pdata sh_vou_pdata = { | 548 | static struct sh_vou_pdata sh_vou_pdata = { |
549 | .bus_fmt = SH_VOU_BUS_8BIT, | 549 | .bus_fmt = SH_VOU_BUS_8BIT, |
550 | .flags = SH_VOU_HSYNC_LOW | SH_VOU_VSYNC_LOW, | 550 | .flags = SH_VOU_HSYNC_LOW | SH_VOU_VSYNC_LOW, |
551 | .board_info = &ak8813, | 551 | .board_info = &ak8813, |
diff --git a/arch/sh/boot/compressed/vmlinux.scr b/arch/sh/boot/compressed/vmlinux.scr index f02382ae5c48..862d74808236 100644 --- a/arch/sh/boot/compressed/vmlinux.scr +++ b/arch/sh/boot/compressed/vmlinux.scr | |||
@@ -1,6 +1,6 @@ | |||
1 | SECTIONS | 1 | SECTIONS |
2 | { | 2 | { |
3 | .rodata.compressed : { | 3 | .rodata..compressed : { |
4 | input_len = .; | 4 | input_len = .; |
5 | LONG(input_data_end - input_data) input_data = .; | 5 | LONG(input_data_end - input_data) input_data = .; |
6 | *(.data) | 6 | *(.data) |
diff --git a/arch/sh/boot/romimage/Makefile b/arch/sh/boot/romimage/Makefile index f473a24a2d92..2216ee57f251 100644 --- a/arch/sh/boot/romimage/Makefile +++ b/arch/sh/boot/romimage/Makefile | |||
@@ -1,16 +1,21 @@ | |||
1 | # | 1 | # |
2 | # linux/arch/sh/boot/romimage/Makefile | 2 | # linux/arch/sh/boot/romimage/Makefile |
3 | # | 3 | # |
4 | # create an image suitable for burning to flash from zImage | 4 | # create an romImage file suitable for burning to flash/mmc from zImage |
5 | # | 5 | # |
6 | 6 | ||
7 | targets := vmlinux head.o zeropage.bin piggy.o | 7 | targets := vmlinux head.o zeropage.bin piggy.o |
8 | load-y := 0 | ||
8 | 9 | ||
9 | OBJECTS = $(obj)/head.o | 10 | mmcif-load-$(CONFIG_CPU_SUBTYPE_SH7724) := 0xe5200000 # ILRAM |
10 | LDFLAGS_vmlinux := --oformat $(ld-bfd) -Ttext 0 -e romstart \ | 11 | mmcif-obj-$(CONFIG_CPU_SUBTYPE_SH7724) := $(obj)/mmcif-sh7724.o |
12 | load-$(CONFIG_ROMIMAGE_MMCIF) := $(mmcif-load-y) | ||
13 | obj-$(CONFIG_ROMIMAGE_MMCIF) := $(mmcif-obj-y) | ||
14 | |||
15 | LDFLAGS_vmlinux := --oformat $(ld-bfd) -Ttext $(load-y) -e romstart \ | ||
11 | -T $(obj)/../../kernel/vmlinux.lds | 16 | -T $(obj)/../../kernel/vmlinux.lds |
12 | 17 | ||
13 | $(obj)/vmlinux: $(OBJECTS) $(obj)/piggy.o FORCE | 18 | $(obj)/vmlinux: $(obj)/head.o $(obj-y) $(obj)/piggy.o FORCE |
14 | $(call if_changed,ld) | 19 | $(call if_changed,ld) |
15 | @: | 20 | @: |
16 | 21 | ||
diff --git a/arch/sh/boot/romimage/head.S b/arch/sh/boot/romimage/head.S index 93e779a405ec..4671d1b82150 100644 --- a/arch/sh/boot/romimage/head.S +++ b/arch/sh/boot/romimage/head.S | |||
@@ -12,8 +12,40 @@ romstart: | |||
12 | /* include board specific setup code */ | 12 | /* include board specific setup code */ |
13 | #include <mach/romimage.h> | 13 | #include <mach/romimage.h> |
14 | 14 | ||
15 | #ifdef CONFIG_ROMIMAGE_MMCIF | ||
16 | /* load the romImage to above the empty zero page */ | ||
17 | mov.l empty_zero_page_dst, r4 | ||
18 | mov.l empty_zero_page_dst_adj, r5 | ||
19 | add r5, r4 | ||
20 | mov.l bytes_to_load, r5 | ||
21 | mov.l loader_function, r7 | ||
22 | jsr @r7 | ||
23 | mov r4, r15 | ||
24 | |||
25 | mov.l empty_zero_page_dst, r4 | ||
26 | mov.l empty_zero_page_dst_adj, r5 | ||
27 | add r5, r4 | ||
28 | mov.l loaded_code_offs, r5 | ||
29 | add r5, r4 | ||
30 | jmp @r4 | ||
31 | nop | ||
32 | |||
33 | .balign 4 | ||
34 | empty_zero_page_dst_adj: | ||
35 | .long PAGE_SIZE | ||
36 | bytes_to_load: | ||
37 | .long end_data - romstart | ||
38 | loader_function: | ||
39 | .long mmcif_loader | ||
40 | loaded_code_offs: | ||
41 | .long loaded_code - romstart | ||
42 | loaded_code: | ||
43 | #endif /* CONFIG_ROMIMAGE_MMCIF */ | ||
44 | |||
15 | /* copy the empty_zero_page contents to where vmlinux expects it */ | 45 | /* copy the empty_zero_page contents to where vmlinux expects it */ |
16 | mova empty_zero_page_src, r0 | 46 | mova extra_data_pos, r0 |
47 | mov.l extra_data_size, r1 | ||
48 | add r1, r0 | ||
17 | mov.l empty_zero_page_dst, r1 | 49 | mov.l empty_zero_page_dst, r1 |
18 | mov #(PAGE_SHIFT - 4), r4 | 50 | mov #(PAGE_SHIFT - 4), r4 |
19 | mov #1, r3 | 51 | mov #1, r3 |
@@ -37,7 +69,9 @@ romstart: | |||
37 | mov #PAGE_SHIFT, r4 | 69 | mov #PAGE_SHIFT, r4 |
38 | mov #1, r1 | 70 | mov #1, r1 |
39 | shld r4, r1 | 71 | shld r4, r1 |
40 | mova empty_zero_page_src, r0 | 72 | mova extra_data_pos, r0 |
73 | add r1, r0 | ||
74 | mov.l extra_data_size, r1 | ||
41 | add r1, r0 | 75 | add r1, r0 |
42 | jmp @r0 | 76 | jmp @r0 |
43 | nop | 77 | nop |
@@ -45,4 +79,6 @@ romstart: | |||
45 | .align 2 | 79 | .align 2 |
46 | empty_zero_page_dst: | 80 | empty_zero_page_dst: |
47 | .long _text | 81 | .long _text |
48 | empty_zero_page_src: | 82 | extra_data_pos: |
83 | extra_data_size: | ||
84 | .long zero_page_pos - extra_data_pos | ||
diff --git a/arch/sh/boot/romimage/mmcif-sh7724.c b/arch/sh/boot/romimage/mmcif-sh7724.c new file mode 100644 index 000000000000..14863d7292cb --- /dev/null +++ b/arch/sh/boot/romimage/mmcif-sh7724.c | |||
@@ -0,0 +1,72 @@ | |||
1 | /* | ||
2 | * sh7724 MMCIF loader | ||
3 | * | ||
4 | * Copyright (C) 2010 Magnus Damm | ||
5 | * | ||
6 | * This file is subject to the terms and conditions of the GNU General Public | ||
7 | * License. See the file "COPYING" in the main directory of this archive | ||
8 | * for more details. | ||
9 | */ | ||
10 | |||
11 | #include <linux/mmc/sh_mmcif.h> | ||
12 | #include <mach/romimage.h> | ||
13 | |||
14 | #define MMCIF_BASE (void __iomem *)0xa4ca0000 | ||
15 | |||
16 | #define MSTPCR2 0xa4150038 | ||
17 | #define PTWCR 0xa4050146 | ||
18 | #define PTXCR 0xa4050148 | ||
19 | #define PSELA 0xa405014e | ||
20 | #define PSELE 0xa4050156 | ||
21 | #define HIZCRC 0xa405015c | ||
22 | #define DRVCRA 0xa405018a | ||
23 | |||
24 | enum { MMCIF_PROGRESS_ENTER, MMCIF_PROGRESS_INIT, | ||
25 | MMCIF_PROGRESS_LOAD, MMCIF_PROGRESS_DONE }; | ||
26 | |||
27 | /* SH7724 specific MMCIF loader | ||
28 | * | ||
29 | * loads the romImage from an MMC card starting from block 512 | ||
30 | * use the following line to write the romImage to an MMC card | ||
31 | * # dd if=arch/sh/boot/romImage of=/dev/sdx bs=512 seek=512 | ||
32 | */ | ||
33 | asmlinkage void mmcif_loader(unsigned char *buf, unsigned long no_bytes) | ||
34 | { | ||
35 | mmcif_update_progress(MMCIF_PROGRESS_ENTER); | ||
36 | |||
37 | /* enable clock to the MMCIF hardware block */ | ||
38 | __raw_writel(__raw_readl(MSTPCR2) & ~0x20000000, MSTPCR2); | ||
39 | |||
40 | /* setup pins D7-D0 */ | ||
41 | __raw_writew(0x0000, PTWCR); | ||
42 | |||
43 | /* setup pins MMC_CLK, MMC_CMD */ | ||
44 | __raw_writew(__raw_readw(PTXCR) & ~0x000f, PTXCR); | ||
45 | |||
46 | /* select D3-D0 pin function */ | ||
47 | __raw_writew(__raw_readw(PSELA) & ~0x2000, PSELA); | ||
48 | |||
49 | /* select D7-D4 pin function */ | ||
50 | __raw_writew(__raw_readw(PSELE) & ~0x3000, PSELE); | ||
51 | |||
52 | /* disable Hi-Z for the MMC pins */ | ||
53 | __raw_writew(__raw_readw(HIZCRC) & ~0x0620, HIZCRC); | ||
54 | |||
55 | /* high drive capability for MMC pins */ | ||
56 | __raw_writew(__raw_readw(DRVCRA) | 0x3000, DRVCRA); | ||
57 | |||
58 | mmcif_update_progress(MMCIF_PROGRESS_INIT); | ||
59 | |||
60 | /* setup MMCIF hardware */ | ||
61 | sh_mmcif_boot_init(MMCIF_BASE); | ||
62 | |||
63 | mmcif_update_progress(MMCIF_PROGRESS_LOAD); | ||
64 | |||
65 | /* load kernel via MMCIF interface */ | ||
66 | sh_mmcif_boot_slurp(MMCIF_BASE, buf, no_bytes); | ||
67 | |||
68 | /* disable clock to the MMCIF hardware block */ | ||
69 | __raw_writel(__raw_readl(MSTPCR2) | 0x20000000, MSTPCR2); | ||
70 | |||
71 | mmcif_update_progress(MMCIF_PROGRESS_DONE); | ||
72 | } | ||
diff --git a/arch/sh/boot/romimage/vmlinux.scr b/arch/sh/boot/romimage/vmlinux.scr index 287c08f8b4bb..590394e2f5f2 100644 --- a/arch/sh/boot/romimage/vmlinux.scr +++ b/arch/sh/boot/romimage/vmlinux.scr | |||
@@ -1,6 +1,8 @@ | |||
1 | SECTIONS | 1 | SECTIONS |
2 | { | 2 | { |
3 | .text : { | 3 | .text : { |
4 | zero_page_pos = .; | ||
4 | *(.data) | 5 | *(.data) |
6 | end_data = .; | ||
5 | } | 7 | } |
6 | } | 8 | } |
diff --git a/arch/sh/drivers/pci/pci.c b/arch/sh/drivers/pci/pci.c index 953af139e230..1e9598d2bbf4 100644 --- a/arch/sh/drivers/pci/pci.c +++ b/arch/sh/drivers/pci/pci.c | |||
@@ -139,8 +139,6 @@ static void pcibios_fixup_device_resources(struct pci_dev *dev, | |||
139 | for (i = 0; i < PCI_NUM_RESOURCES; i++) { | 139 | for (i = 0; i < PCI_NUM_RESOURCES; i++) { |
140 | if (!dev->resource[i].start) | 140 | if (!dev->resource[i].start) |
141 | continue; | 141 | continue; |
142 | if (dev->resource[i].flags & IORESOURCE_PCI_FIXED) | ||
143 | continue; | ||
144 | if (dev->resource[i].flags & IORESOURCE_IO) | 142 | if (dev->resource[i].flags & IORESOURCE_IO) |
145 | offset = hose->io_offset; | 143 | offset = hose->io_offset; |
146 | else if (dev->resource[i].flags & IORESOURCE_MEM) | 144 | else if (dev->resource[i].flags & IORESOURCE_MEM) |
diff --git a/arch/sh/include/asm/cache.h b/arch/sh/include/asm/cache.h index e461d67f03c3..ef9e555aafba 100644 --- a/arch/sh/include/asm/cache.h +++ b/arch/sh/include/asm/cache.h | |||
@@ -14,7 +14,7 @@ | |||
14 | 14 | ||
15 | #define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) | 15 | #define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) |
16 | 16 | ||
17 | #define __read_mostly __attribute__((__section__(".data.read_mostly"))) | 17 | #define __read_mostly __attribute__((__section__(".data..read_mostly"))) |
18 | 18 | ||
19 | #ifndef __ASSEMBLY__ | 19 | #ifndef __ASSEMBLY__ |
20 | struct cache_info { | 20 | struct cache_info { |
diff --git a/arch/sh/include/asm/io.h b/arch/sh/include/asm/io.h index f689554e17c1..b237d525d592 100644 --- a/arch/sh/include/asm/io.h +++ b/arch/sh/include/asm/io.h | |||
@@ -39,6 +39,8 @@ | |||
39 | #include <asm/io_generic.h> | 39 | #include <asm/io_generic.h> |
40 | #include <asm/io_trapped.h> | 40 | #include <asm/io_trapped.h> |
41 | 41 | ||
42 | #ifdef CONFIG_HAS_IOPORT | ||
43 | |||
42 | #define inb(p) sh_mv.mv_inb((p)) | 44 | #define inb(p) sh_mv.mv_inb((p)) |
43 | #define inw(p) sh_mv.mv_inw((p)) | 45 | #define inw(p) sh_mv.mv_inw((p)) |
44 | #define inl(p) sh_mv.mv_inl((p)) | 46 | #define inl(p) sh_mv.mv_inl((p)) |
@@ -60,6 +62,8 @@ | |||
60 | #define outsw(p,b,c) sh_mv.mv_outsw((p), (b), (c)) | 62 | #define outsw(p,b,c) sh_mv.mv_outsw((p), (b), (c)) |
61 | #define outsl(p,b,c) sh_mv.mv_outsl((p), (b), (c)) | 63 | #define outsl(p,b,c) sh_mv.mv_outsl((p), (b), (c)) |
62 | 64 | ||
65 | #endif | ||
66 | |||
63 | #define __raw_writeb(v,a) (__chk_io_ptr(a), *(volatile u8 __force *)(a) = (v)) | 67 | #define __raw_writeb(v,a) (__chk_io_ptr(a), *(volatile u8 __force *)(a) = (v)) |
64 | #define __raw_writew(v,a) (__chk_io_ptr(a), *(volatile u16 __force *)(a) = (v)) | 68 | #define __raw_writew(v,a) (__chk_io_ptr(a), *(volatile u16 __force *)(a) = (v)) |
65 | #define __raw_writel(v,a) (__chk_io_ptr(a), *(volatile u32 __force *)(a) = (v)) | 69 | #define __raw_writel(v,a) (__chk_io_ptr(a), *(volatile u32 __force *)(a) = (v)) |
@@ -240,6 +244,8 @@ __BUILD_MEMORY_STRING(q, u64) | |||
240 | 244 | ||
241 | #define IO_SPACE_LIMIT 0xffffffff | 245 | #define IO_SPACE_LIMIT 0xffffffff |
242 | 246 | ||
247 | #ifdef CONFIG_HAS_IOPORT | ||
248 | |||
243 | /* | 249 | /* |
244 | * This function provides a method for the generic case where a | 250 | * This function provides a method for the generic case where a |
245 | * board-specific ioport_map simply needs to return the port + some | 251 | * board-specific ioport_map simply needs to return the port + some |
@@ -255,6 +261,8 @@ static inline void __set_io_port_base(unsigned long pbase) | |||
255 | 261 | ||
256 | #define __ioport_map(p, n) sh_mv.mv_ioport_map((p), (n)) | 262 | #define __ioport_map(p, n) sh_mv.mv_ioport_map((p), (n)) |
257 | 263 | ||
264 | #endif | ||
265 | |||
258 | /* We really want to try and get these to memcpy etc */ | 266 | /* We really want to try and get these to memcpy etc */ |
259 | void memcpy_fromio(void *, const volatile void __iomem *, unsigned long); | 267 | void memcpy_fromio(void *, const volatile void __iomem *, unsigned long); |
260 | void memcpy_toio(volatile void __iomem *, const void *, unsigned long); | 268 | void memcpy_toio(volatile void __iomem *, const void *, unsigned long); |
diff --git a/arch/sh/include/asm/machvec.h b/arch/sh/include/asm/machvec.h index bc0218cb72e1..a0b0cf79cf8a 100644 --- a/arch/sh/include/asm/machvec.h +++ b/arch/sh/include/asm/machvec.h | |||
@@ -19,6 +19,10 @@ struct sh_machine_vector { | |||
19 | const char *mv_name; | 19 | const char *mv_name; |
20 | int mv_nr_irqs; | 20 | int mv_nr_irqs; |
21 | 21 | ||
22 | int (*mv_irq_demux)(int irq); | ||
23 | void (*mv_init_irq)(void); | ||
24 | |||
25 | #ifdef CONFIG_HAS_IOPORT | ||
22 | u8 (*mv_inb)(unsigned long); | 26 | u8 (*mv_inb)(unsigned long); |
23 | u16 (*mv_inw)(unsigned long); | 27 | u16 (*mv_inw)(unsigned long); |
24 | u32 (*mv_inl)(unsigned long); | 28 | u32 (*mv_inl)(unsigned long); |
@@ -40,12 +44,9 @@ struct sh_machine_vector { | |||
40 | void (*mv_outsw)(unsigned long, const void *src, unsigned long count); | 44 | void (*mv_outsw)(unsigned long, const void *src, unsigned long count); |
41 | void (*mv_outsl)(unsigned long, const void *src, unsigned long count); | 45 | void (*mv_outsl)(unsigned long, const void *src, unsigned long count); |
42 | 46 | ||
43 | int (*mv_irq_demux)(int irq); | ||
44 | |||
45 | void (*mv_init_irq)(void); | ||
46 | |||
47 | void __iomem *(*mv_ioport_map)(unsigned long port, unsigned int size); | 47 | void __iomem *(*mv_ioport_map)(unsigned long port, unsigned int size); |
48 | void (*mv_ioport_unmap)(void __iomem *); | 48 | void (*mv_ioport_unmap)(void __iomem *); |
49 | #endif | ||
49 | 50 | ||
50 | int (*mv_clk_init)(void); | 51 | int (*mv_clk_init)(void); |
51 | int (*mv_mode_pins)(void); | 52 | int (*mv_mode_pins)(void); |
diff --git a/arch/sh/include/cpu-sh4/cpu/sh7724.h b/arch/sh/include/cpu-sh4/cpu/sh7724.h index fbbf550cc529..4c27b68789b3 100644 --- a/arch/sh/include/cpu-sh4/cpu/sh7724.h +++ b/arch/sh/include/cpu-sh4/cpu/sh7724.h | |||
@@ -9,6 +9,7 @@ | |||
9 | * MD3: BSC - Area0 Bus Width (16/32-bit) [CS0BCR.9,10] | 9 | * MD3: BSC - Area0 Bus Width (16/32-bit) [CS0BCR.9,10] |
10 | * MD5: BSC - Endian Mode (L: Big, H: Little) [CMNCR.3] | 10 | * MD5: BSC - Endian Mode (L: Big, H: Little) [CMNCR.3] |
11 | * MD8: Test Mode | 11 | * MD8: Test Mode |
12 | * BOOT: FBR - Boot Mode (L: MMCIF, H: Area0) | ||
12 | */ | 13 | */ |
13 | 14 | ||
14 | /* Pin Function Controller: | 15 | /* Pin Function Controller: |
diff --git a/arch/sh/include/mach-common/mach/romimage.h b/arch/sh/include/mach-common/mach/romimage.h index 267e24112d82..08fb42269ecd 100644 --- a/arch/sh/include/mach-common/mach/romimage.h +++ b/arch/sh/include/mach-common/mach/romimage.h | |||
@@ -1 +1,11 @@ | |||
1 | #ifdef __ASSEMBLY__ | ||
2 | |||
1 | /* do nothing here by default */ | 3 | /* do nothing here by default */ |
4 | |||
5 | #else /* __ASSEMBLY__ */ | ||
6 | |||
7 | extern inline void mmcif_update_progress(int nr) | ||
8 | { | ||
9 | } | ||
10 | |||
11 | #endif /* __ASSEMBLY__ */ | ||
diff --git a/arch/sh/include/mach-ecovec24/mach/romimage.h b/arch/sh/include/mach-ecovec24/mach/romimage.h index 1c8787ecb1c1..1dcf5e6c8d83 100644 --- a/arch/sh/include/mach-ecovec24/mach/romimage.h +++ b/arch/sh/include/mach-ecovec24/mach/romimage.h | |||
@@ -1,3 +1,5 @@ | |||
1 | #ifdef __ASSEMBLY__ | ||
2 | |||
1 | /* EcoVec board specific boot code: | 3 | /* EcoVec board specific boot code: |
2 | * converts the "partner-jet-script.txt" script into assembly | 4 | * converts the "partner-jet-script.txt" script into assembly |
3 | * the assembly code is the first code to be executed in the romImage | 5 | * the assembly code is the first code to be executed in the romImage |
@@ -18,3 +20,28 @@ | |||
18 | .align 2 | 20 | .align 2 |
19 | 1 : .long 0xa8000000 | 21 | 1 : .long 0xa8000000 |
20 | 2 : | 22 | 2 : |
23 | |||
24 | #else /* __ASSEMBLY__ */ | ||
25 | |||
26 | /* Ecovec board specific information: | ||
27 | * | ||
28 | * Set the following to enable MMCIF boot from the MMC card in CN12: | ||
29 | * | ||
30 | * DS1.5 = OFF (SH BOOT pin set to L) | ||
31 | * DS2.6 = OFF (Select MMCIF on CN12 instead of SDHI1) | ||
32 | * DS2.7 = ON (Select MMCIF on CN12 instead of SDHI1) | ||
33 | * | ||
34 | */ | ||
35 | #define HIZCRA 0xa4050158 | ||
36 | #define PGDR 0xa405012c | ||
37 | |||
38 | extern inline void mmcif_update_progress(int nr) | ||
39 | { | ||
40 | /* disable Hi-Z for LED pins */ | ||
41 | __raw_writew(__raw_readw(HIZCRA) & ~(1 << 1), HIZCRA); | ||
42 | |||
43 | /* update progress on LED4, LED5, LED6 and LED7 */ | ||
44 | __raw_writeb(1 << (nr - 1), PGDR); | ||
45 | } | ||
46 | |||
47 | #endif /* __ASSEMBLY__ */ | ||
diff --git a/arch/sh/include/mach-kfr2r09/mach/romimage.h b/arch/sh/include/mach-kfr2r09/mach/romimage.h index a110823f2bde..976256a323f2 100644 --- a/arch/sh/include/mach-kfr2r09/mach/romimage.h +++ b/arch/sh/include/mach-kfr2r09/mach/romimage.h | |||
@@ -1,3 +1,5 @@ | |||
1 | #ifdef __ASSEMBLY__ | ||
2 | |||
1 | /* kfr2r09 board specific boot code: | 3 | /* kfr2r09 board specific boot code: |
2 | * converts the "partner-jet-script.txt" script into assembly | 4 | * converts the "partner-jet-script.txt" script into assembly |
3 | * the assembly code is the first code to be executed in the romImage | 5 | * the assembly code is the first code to be executed in the romImage |
@@ -18,3 +20,11 @@ | |||
18 | .align 2 | 20 | .align 2 |
19 | 1: .long 0xa8000000 | 21 | 1: .long 0xa8000000 |
20 | 2: | 22 | 2: |
23 | |||
24 | #else /* __ASSEMBLY__ */ | ||
25 | |||
26 | extern inline void mmcif_update_progress(int nr) | ||
27 | { | ||
28 | } | ||
29 | |||
30 | #endif /* __ASSEMBLY__ */ | ||
diff --git a/arch/sh/kernel/Makefile b/arch/sh/kernel/Makefile index 650b92f00ee5..e25f3c69525d 100644 --- a/arch/sh/kernel/Makefile +++ b/arch/sh/kernel/Makefile | |||
@@ -12,7 +12,7 @@ endif | |||
12 | CFLAGS_REMOVE_return_address.o = -pg | 12 | CFLAGS_REMOVE_return_address.o = -pg |
13 | 13 | ||
14 | obj-y := clkdev.o debugtraps.o dma-nommu.o dumpstack.o \ | 14 | obj-y := clkdev.o debugtraps.o dma-nommu.o dumpstack.o \ |
15 | idle.o io.o io_generic.o irq.o \ | 15 | idle.o io.o irq.o \ |
16 | irq_$(BITS).o machvec.o nmi_debug.o process.o \ | 16 | irq_$(BITS).o machvec.o nmi_debug.o process.o \ |
17 | process_$(BITS).o ptrace_$(BITS).o \ | 17 | process_$(BITS).o ptrace_$(BITS).o \ |
18 | reboot.o return_address.o \ | 18 | reboot.o return_address.o \ |
@@ -39,6 +39,7 @@ obj-$(CONFIG_DUMP_CODE) += disassemble.o | |||
39 | obj-$(CONFIG_HIBERNATION) += swsusp.o | 39 | obj-$(CONFIG_HIBERNATION) += swsusp.o |
40 | obj-$(CONFIG_DWARF_UNWINDER) += dwarf.o | 40 | obj-$(CONFIG_DWARF_UNWINDER) += dwarf.o |
41 | obj-$(CONFIG_PERF_EVENTS) += perf_event.o perf_callchain.o | 41 | obj-$(CONFIG_PERF_EVENTS) += perf_event.o perf_callchain.o |
42 | obj-$(CONFIG_HAS_IOPORT) += io_generic.o | ||
42 | 43 | ||
43 | obj-$(CONFIG_HAVE_HW_BREAKPOINT) += hw_breakpoint.o | 44 | obj-$(CONFIG_HAVE_HW_BREAKPOINT) += hw_breakpoint.o |
44 | obj-$(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) += localtimer.o | 45 | obj-$(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) += localtimer.o |
diff --git a/arch/sh/kernel/dwarf.c b/arch/sh/kernel/dwarf.c index 886d7d83ace3..49c09c7d5b77 100644 --- a/arch/sh/kernel/dwarf.c +++ b/arch/sh/kernel/dwarf.c | |||
@@ -49,6 +49,8 @@ static DEFINE_SPINLOCK(dwarf_fde_lock); | |||
49 | 49 | ||
50 | static struct dwarf_cie *cached_cie; | 50 | static struct dwarf_cie *cached_cie; |
51 | 51 | ||
52 | static unsigned int dwarf_unwinder_ready; | ||
53 | |||
52 | /** | 54 | /** |
53 | * dwarf_frame_alloc_reg - allocate memory for a DWARF register | 55 | * dwarf_frame_alloc_reg - allocate memory for a DWARF register |
54 | * @frame: the DWARF frame whose list of registers we insert on | 56 | * @frame: the DWARF frame whose list of registers we insert on |
@@ -582,6 +584,13 @@ struct dwarf_frame *dwarf_unwind_stack(unsigned long pc, | |||
582 | unsigned long addr; | 584 | unsigned long addr; |
583 | 585 | ||
584 | /* | 586 | /* |
587 | * If we've been called in to before initialization has | ||
588 | * completed, bail out immediately. | ||
589 | */ | ||
590 | if (!dwarf_unwinder_ready) | ||
591 | return NULL; | ||
592 | |||
593 | /* | ||
585 | * If we're starting at the top of the stack we need get the | 594 | * If we're starting at the top of the stack we need get the |
586 | * contents of a physical register to get the CFA in order to | 595 | * contents of a physical register to get the CFA in order to |
587 | * begin the virtual unwinding of the stack. | 596 | * begin the virtual unwinding of the stack. |
@@ -1167,7 +1176,7 @@ void module_dwarf_cleanup(struct module *mod) | |||
1167 | */ | 1176 | */ |
1168 | static int __init dwarf_unwinder_init(void) | 1177 | static int __init dwarf_unwinder_init(void) |
1169 | { | 1178 | { |
1170 | int err; | 1179 | int err = -ENOMEM; |
1171 | 1180 | ||
1172 | dwarf_frame_cachep = kmem_cache_create("dwarf_frames", | 1181 | dwarf_frame_cachep = kmem_cache_create("dwarf_frames", |
1173 | sizeof(struct dwarf_frame), 0, | 1182 | sizeof(struct dwarf_frame), 0, |
@@ -1181,11 +1190,15 @@ static int __init dwarf_unwinder_init(void) | |||
1181 | mempool_alloc_slab, | 1190 | mempool_alloc_slab, |
1182 | mempool_free_slab, | 1191 | mempool_free_slab, |
1183 | dwarf_frame_cachep); | 1192 | dwarf_frame_cachep); |
1193 | if (!dwarf_frame_pool) | ||
1194 | goto out; | ||
1184 | 1195 | ||
1185 | dwarf_reg_pool = mempool_create(DWARF_REG_MIN_REQ, | 1196 | dwarf_reg_pool = mempool_create(DWARF_REG_MIN_REQ, |
1186 | mempool_alloc_slab, | 1197 | mempool_alloc_slab, |
1187 | mempool_free_slab, | 1198 | mempool_free_slab, |
1188 | dwarf_reg_cachep); | 1199 | dwarf_reg_cachep); |
1200 | if (!dwarf_reg_pool) | ||
1201 | goto out; | ||
1189 | 1202 | ||
1190 | err = dwarf_parse_section(__start_eh_frame, __stop_eh_frame, NULL); | 1203 | err = dwarf_parse_section(__start_eh_frame, __stop_eh_frame, NULL); |
1191 | if (err) | 1204 | if (err) |
@@ -1195,11 +1208,13 @@ static int __init dwarf_unwinder_init(void) | |||
1195 | if (err) | 1208 | if (err) |
1196 | goto out; | 1209 | goto out; |
1197 | 1210 | ||
1211 | dwarf_unwinder_ready = 1; | ||
1212 | |||
1198 | return 0; | 1213 | return 0; |
1199 | 1214 | ||
1200 | out: | 1215 | out: |
1201 | printk(KERN_ERR "Failed to initialise DWARF unwinder: %d\n", err); | 1216 | printk(KERN_ERR "Failed to initialise DWARF unwinder: %d\n", err); |
1202 | dwarf_unwinder_cleanup(); | 1217 | dwarf_unwinder_cleanup(); |
1203 | return -EINVAL; | 1218 | return err; |
1204 | } | 1219 | } |
1205 | early_initcall(dwarf_unwinder_init); | 1220 | early_initcall(dwarf_unwinder_init); |
diff --git a/arch/sh/kernel/io.c b/arch/sh/kernel/io.c index 4770c241c679..5c51b794ba2a 100644 --- a/arch/sh/kernel/io.c +++ b/arch/sh/kernel/io.c | |||
@@ -112,25 +112,3 @@ void memset_io(volatile void __iomem *dst, int c, unsigned long count) | |||
112 | } | 112 | } |
113 | } | 113 | } |
114 | EXPORT_SYMBOL(memset_io); | 114 | EXPORT_SYMBOL(memset_io); |
115 | |||
116 | #ifndef CONFIG_GENERIC_IOMAP | ||
117 | |||
118 | void __iomem *ioport_map(unsigned long port, unsigned int nr) | ||
119 | { | ||
120 | void __iomem *ret; | ||
121 | |||
122 | ret = __ioport_map_trapped(port, nr); | ||
123 | if (ret) | ||
124 | return ret; | ||
125 | |||
126 | return __ioport_map(port, nr); | ||
127 | } | ||
128 | EXPORT_SYMBOL(ioport_map); | ||
129 | |||
130 | void ioport_unmap(void __iomem *addr) | ||
131 | { | ||
132 | sh_mv.mv_ioport_unmap(addr); | ||
133 | } | ||
134 | EXPORT_SYMBOL(ioport_unmap); | ||
135 | |||
136 | #endif /* CONFIG_GENERIC_IOMAP */ | ||
diff --git a/arch/sh/kernel/io_generic.c b/arch/sh/kernel/io_generic.c index e1e1dbd19557..447d78f666f9 100644 --- a/arch/sh/kernel/io_generic.c +++ b/arch/sh/kernel/io_generic.c | |||
@@ -158,3 +158,23 @@ void __iomem *generic_ioport_map(unsigned long addr, unsigned int size) | |||
158 | void generic_ioport_unmap(void __iomem *addr) | 158 | void generic_ioport_unmap(void __iomem *addr) |
159 | { | 159 | { |
160 | } | 160 | } |
161 | |||
162 | #ifndef CONFIG_GENERIC_IOMAP | ||
163 | void __iomem *ioport_map(unsigned long port, unsigned int nr) | ||
164 | { | ||
165 | void __iomem *ret; | ||
166 | |||
167 | ret = __ioport_map_trapped(port, nr); | ||
168 | if (ret) | ||
169 | return ret; | ||
170 | |||
171 | return __ioport_map(port, nr); | ||
172 | } | ||
173 | EXPORT_SYMBOL(ioport_map); | ||
174 | |||
175 | void ioport_unmap(void __iomem *addr) | ||
176 | { | ||
177 | sh_mv.mv_ioport_unmap(addr); | ||
178 | } | ||
179 | EXPORT_SYMBOL(ioport_unmap); | ||
180 | #endif /* CONFIG_GENERIC_IOMAP */ | ||
diff --git a/arch/sh/kernel/io_trapped.c b/arch/sh/kernel/io_trapped.c index 4a8bb4eeb8ad..2947d2bd1291 100644 --- a/arch/sh/kernel/io_trapped.c +++ b/arch/sh/kernel/io_trapped.c | |||
@@ -91,10 +91,14 @@ int register_trapped_io(struct trapped_io *tiop) | |||
91 | tiop->magic = IO_TRAPPED_MAGIC; | 91 | tiop->magic = IO_TRAPPED_MAGIC; |
92 | INIT_LIST_HEAD(&tiop->list); | 92 | INIT_LIST_HEAD(&tiop->list); |
93 | spin_lock_irq(&trapped_lock); | 93 | spin_lock_irq(&trapped_lock); |
94 | #ifdef CONFIG_HAS_IOPORT | ||
94 | if (flags & IORESOURCE_IO) | 95 | if (flags & IORESOURCE_IO) |
95 | list_add(&tiop->list, &trapped_io); | 96 | list_add(&tiop->list, &trapped_io); |
97 | #endif | ||
98 | #ifdef CONFIG_HAS_IOMEM | ||
96 | if (flags & IORESOURCE_MEM) | 99 | if (flags & IORESOURCE_MEM) |
97 | list_add(&tiop->list, &trapped_mem); | 100 | list_add(&tiop->list, &trapped_mem); |
101 | #endif | ||
98 | spin_unlock_irq(&trapped_lock); | 102 | spin_unlock_irq(&trapped_lock); |
99 | 103 | ||
100 | return 0; | 104 | return 0; |
diff --git a/arch/sh/kernel/machvec.c b/arch/sh/kernel/machvec.c index 85cfaf916fdc..9f9bb63616ad 100644 --- a/arch/sh/kernel/machvec.c +++ b/arch/sh/kernel/machvec.c | |||
@@ -118,6 +118,14 @@ void __init sh_mv_setup(void) | |||
118 | sh_mv.mv_##elem = generic_##elem; \ | 118 | sh_mv.mv_##elem = generic_##elem; \ |
119 | } while (0) | 119 | } while (0) |
120 | 120 | ||
121 | #ifdef CONFIG_HAS_IOPORT | ||
122 | |||
123 | #ifdef P2SEG | ||
124 | __set_io_port_base(P2SEG); | ||
125 | #else | ||
126 | __set_io_port_base(0); | ||
127 | #endif | ||
128 | |||
121 | mv_set(inb); mv_set(inw); mv_set(inl); | 129 | mv_set(inb); mv_set(inw); mv_set(inl); |
122 | mv_set(outb); mv_set(outw); mv_set(outl); | 130 | mv_set(outb); mv_set(outw); mv_set(outl); |
123 | 131 | ||
@@ -129,16 +137,13 @@ void __init sh_mv_setup(void) | |||
129 | 137 | ||
130 | mv_set(ioport_map); | 138 | mv_set(ioport_map); |
131 | mv_set(ioport_unmap); | 139 | mv_set(ioport_unmap); |
140 | |||
141 | #endif | ||
142 | |||
132 | mv_set(irq_demux); | 143 | mv_set(irq_demux); |
133 | mv_set(mode_pins); | 144 | mv_set(mode_pins); |
134 | mv_set(mem_init); | 145 | mv_set(mem_init); |
135 | 146 | ||
136 | if (!sh_mv.mv_nr_irqs) | 147 | if (!sh_mv.mv_nr_irqs) |
137 | sh_mv.mv_nr_irqs = NR_IRQS; | 148 | sh_mv.mv_nr_irqs = NR_IRQS; |
138 | |||
139 | #ifdef P2SEG | ||
140 | __set_io_port_base(P2SEG); | ||
141 | #else | ||
142 | __set_io_port_base(0); | ||
143 | #endif | ||
144 | } | 149 | } |
diff --git a/arch/sh/kernel/return_address.c b/arch/sh/kernel/return_address.c index cbf1dd5372b2..5124aeb28c3f 100644 --- a/arch/sh/kernel/return_address.c +++ b/arch/sh/kernel/return_address.c | |||
@@ -24,6 +24,8 @@ void *return_address(unsigned int depth) | |||
24 | struct dwarf_frame *tmp; | 24 | struct dwarf_frame *tmp; |
25 | 25 | ||
26 | tmp = dwarf_unwind_stack(ra, frame); | 26 | tmp = dwarf_unwind_stack(ra, frame); |
27 | if (!tmp) | ||
28 | return NULL; | ||
27 | 29 | ||
28 | if (frame) | 30 | if (frame) |
29 | dwarf_free_frame(frame); | 31 | dwarf_free_frame(frame); |
diff --git a/arch/sh/mm/pmb.c b/arch/sh/mm/pmb.c index 18623ba751b3..6379091a1647 100644 --- a/arch/sh/mm/pmb.c +++ b/arch/sh/mm/pmb.c | |||
@@ -770,7 +770,7 @@ static void __init pmb_resize(void) | |||
770 | spin_unlock_irqrestore(&pmbe->lock, flags); | 770 | spin_unlock_irqrestore(&pmbe->lock, flags); |
771 | } | 771 | } |
772 | 772 | ||
773 | read_lock(&pmb_rwlock); | 773 | read_unlock(&pmb_rwlock); |
774 | } | 774 | } |
775 | #endif | 775 | #endif |
776 | 776 | ||
diff --git a/arch/sparc/boot/btfixupprep.c b/arch/sparc/boot/btfixupprep.c index bbf91b9c3d39..e7f2940bd270 100644 --- a/arch/sparc/boot/btfixupprep.c +++ b/arch/sparc/boot/btfixupprep.c | |||
@@ -325,7 +325,7 @@ main1: | |||
325 | (*rr)->next = NULL; | 325 | (*rr)->next = NULL; |
326 | } | 326 | } |
327 | printf("! Generated by btfixupprep. Do not edit.\n\n"); | 327 | printf("! Generated by btfixupprep. Do not edit.\n\n"); |
328 | printf("\t.section\t\".data.init\",#alloc,#write\n\t.align\t4\n\n"); | 328 | printf("\t.section\t\".data..init\",#alloc,#write\n\t.align\t4\n\n"); |
329 | printf("\t.global\t___btfixup_start\n___btfixup_start:\n\n"); | 329 | printf("\t.global\t___btfixup_start\n___btfixup_start:\n\n"); |
330 | for (i = 0; i < last; i++) { | 330 | for (i = 0; i < last; i++) { |
331 | f = array + i; | 331 | f = array + i; |
diff --git a/arch/sparc/include/asm/cache.h b/arch/sparc/include/asm/cache.h index 78b07009f60a..0588b8c7faa2 100644 --- a/arch/sparc/include/asm/cache.h +++ b/arch/sparc/include/asm/cache.h | |||
@@ -21,7 +21,7 @@ | |||
21 | 21 | ||
22 | #define SMP_CACHE_BYTES (1 << SMP_CACHE_BYTES_SHIFT) | 22 | #define SMP_CACHE_BYTES (1 << SMP_CACHE_BYTES_SHIFT) |
23 | 23 | ||
24 | #define __read_mostly __attribute__((__section__(".data.read_mostly"))) | 24 | #define __read_mostly __attribute__((__section__(".data..read_mostly"))) |
25 | 25 | ||
26 | #ifdef CONFIG_SPARC32 | 26 | #ifdef CONFIG_SPARC32 |
27 | #include <asm/asi.h> | 27 | #include <asm/asi.h> |
diff --git a/arch/um/include/asm/arch_hweight.h b/arch/um/include/asm/arch_hweight.h new file mode 100644 index 000000000000..c656cf443f4a --- /dev/null +++ b/arch/um/include/asm/arch_hweight.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef _ASM_UM_HWEIGHT_H | ||
2 | #define _ASM_UM_HWEIGHT_H | ||
3 | |||
4 | #include <asm-generic/bitops/arch_hweight.h> | ||
5 | |||
6 | #endif | ||
diff --git a/arch/um/kernel/dyn.lds.S b/arch/um/kernel/dyn.lds.S index 7fcad58e216d..69268014dd8e 100644 --- a/arch/um/kernel/dyn.lds.S +++ b/arch/um/kernel/dyn.lds.S | |||
@@ -94,7 +94,7 @@ SECTIONS | |||
94 | .data : { | 94 | .data : { |
95 | INIT_TASK_DATA(KERNEL_STACK_SIZE) | 95 | INIT_TASK_DATA(KERNEL_STACK_SIZE) |
96 | . = ALIGN(KERNEL_STACK_SIZE); | 96 | . = ALIGN(KERNEL_STACK_SIZE); |
97 | *(.data.init_irqstack) | 97 | *(.data..init_irqstack) |
98 | DATA_DATA | 98 | DATA_DATA |
99 | *(.data.* .gnu.linkonce.d.*) | 99 | *(.data.* .gnu.linkonce.d.*) |
100 | SORT(CONSTRUCTORS) | 100 | SORT(CONSTRUCTORS) |
diff --git a/arch/um/kernel/init_task.c b/arch/um/kernel/init_task.c index 8aa77b61a5ff..ddc9698b66ed 100644 --- a/arch/um/kernel/init_task.c +++ b/arch/um/kernel/init_task.c | |||
@@ -34,5 +34,5 @@ union thread_union init_thread_union __init_task_data = | |||
34 | { INIT_THREAD_INFO(init_task) }; | 34 | { INIT_THREAD_INFO(init_task) }; |
35 | 35 | ||
36 | union thread_union cpu0_irqstack | 36 | union thread_union cpu0_irqstack |
37 | __attribute__((__section__(".data.init_irqstack"))) = | 37 | __attribute__((__section__(".data..init_irqstack"))) = |
38 | { INIT_THREAD_INFO(init_task) }; | 38 | { INIT_THREAD_INFO(init_task) }; |
diff --git a/arch/um/kernel/skas/uaccess.c b/arch/um/kernel/skas/uaccess.c index e22c96993db3..696634214dc6 100644 --- a/arch/um/kernel/skas/uaccess.c +++ b/arch/um/kernel/skas/uaccess.c | |||
@@ -81,7 +81,7 @@ static int do_op_one_page(unsigned long addr, int len, int is_write, | |||
81 | 81 | ||
82 | current->thread.fault_catcher = NULL; | 82 | current->thread.fault_catcher = NULL; |
83 | 83 | ||
84 | kunmap_atomic(page, KM_UML_USERCOPY); | 84 | kunmap_atomic((void *)addr, KM_UML_USERCOPY); |
85 | 85 | ||
86 | return n; | 86 | return n; |
87 | } | 87 | } |
diff --git a/arch/um/kernel/uml.lds.S b/arch/um/kernel/uml.lds.S index e7a6cca667aa..ec6378550671 100644 --- a/arch/um/kernel/uml.lds.S +++ b/arch/um/kernel/uml.lds.S | |||
@@ -50,7 +50,7 @@ SECTIONS | |||
50 | { | 50 | { |
51 | INIT_TASK_DATA(KERNEL_STACK_SIZE) | 51 | INIT_TASK_DATA(KERNEL_STACK_SIZE) |
52 | . = ALIGN(KERNEL_STACK_SIZE); | 52 | . = ALIGN(KERNEL_STACK_SIZE); |
53 | *(.data.init_irqstack) | 53 | *(.data..init_irqstack) |
54 | DATA_DATA | 54 | DATA_DATA |
55 | *(.gnu.linkonce.d*) | 55 | *(.gnu.linkonce.d*) |
56 | CONSTRUCTORS | 56 | CONSTRUCTORS |
diff --git a/arch/um/os-Linux/mem.c b/arch/um/os-Linux/mem.c index 93a11d7edfa0..e696144d2be3 100644 --- a/arch/um/os-Linux/mem.c +++ b/arch/um/os-Linux/mem.c | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <errno.h> | 10 | #include <errno.h> |
11 | #include <fcntl.h> | 11 | #include <fcntl.h> |
12 | #include <string.h> | 12 | #include <string.h> |
13 | #include <sys/stat.h> | ||
13 | #include <sys/mman.h> | 14 | #include <sys/mman.h> |
14 | #include <sys/param.h> | 15 | #include <sys/param.h> |
15 | #include "init.h" | 16 | #include "init.h" |
diff --git a/arch/x86/.gitignore b/arch/x86/.gitignore new file mode 100644 index 000000000000..028079065af6 --- /dev/null +++ b/arch/x86/.gitignore | |||
@@ -0,0 +1,3 @@ | |||
1 | boot/compressed/vmlinux | ||
2 | tools/test_get_len | ||
3 | |||
diff --git a/arch/x86/boot/compressed/mkpiggy.c b/arch/x86/boot/compressed/mkpiggy.c index bcbd36c41432..5c228129d175 100644 --- a/arch/x86/boot/compressed/mkpiggy.c +++ b/arch/x86/boot/compressed/mkpiggy.c | |||
@@ -77,7 +77,7 @@ int main(int argc, char *argv[]) | |||
77 | offs += 32*1024 + 18; /* Add 32K + 18 bytes slack */ | 77 | offs += 32*1024 + 18; /* Add 32K + 18 bytes slack */ |
78 | offs = (offs+4095) & ~4095; /* Round to a 4K boundary */ | 78 | offs = (offs+4095) & ~4095; /* Round to a 4K boundary */ |
79 | 79 | ||
80 | printf(".section \".rodata.compressed\",\"a\",@progbits\n"); | 80 | printf(".section \".rodata..compressed\",\"a\",@progbits\n"); |
81 | printf(".globl z_input_len\n"); | 81 | printf(".globl z_input_len\n"); |
82 | printf("z_input_len = %lu\n", ilen); | 82 | printf("z_input_len = %lu\n", ilen); |
83 | printf(".globl z_output_len\n"); | 83 | printf(".globl z_output_len\n"); |
diff --git a/arch/x86/boot/compressed/vmlinux.lds.S b/arch/x86/boot/compressed/vmlinux.lds.S index a6f1a59a5b0c..5ddabceee124 100644 --- a/arch/x86/boot/compressed/vmlinux.lds.S +++ b/arch/x86/boot/compressed/vmlinux.lds.S | |||
@@ -26,8 +26,8 @@ SECTIONS | |||
26 | HEAD_TEXT | 26 | HEAD_TEXT |
27 | _ehead = . ; | 27 | _ehead = . ; |
28 | } | 28 | } |
29 | .rodata.compressed : { | 29 | .rodata..compressed : { |
30 | *(.rodata.compressed) | 30 | *(.rodata..compressed) |
31 | } | 31 | } |
32 | .text : { | 32 | .text : { |
33 | _text = .; /* Text */ | 33 | _text = .; /* Text */ |
diff --git a/arch/x86/boot/video-vga.c b/arch/x86/boot/video-vga.c index ed7aeff786b2..45bc9402aa49 100644 --- a/arch/x86/boot/video-vga.c +++ b/arch/x86/boot/video-vga.c | |||
@@ -41,13 +41,12 @@ static __videocard video_vga; | |||
41 | static u8 vga_set_basic_mode(void) | 41 | static u8 vga_set_basic_mode(void) |
42 | { | 42 | { |
43 | struct biosregs ireg, oreg; | 43 | struct biosregs ireg, oreg; |
44 | u16 ax; | ||
45 | u8 mode; | 44 | u8 mode; |
46 | 45 | ||
47 | initregs(&ireg); | 46 | initregs(&ireg); |
48 | 47 | ||
49 | /* Query current mode */ | 48 | /* Query current mode */ |
50 | ax = 0x0f00; | 49 | ireg.ax = 0x0f00; |
51 | intcall(0x10, &ireg, &oreg); | 50 | intcall(0x10, &ireg, &oreg); |
52 | mode = oreg.al; | 51 | mode = oreg.al; |
53 | 52 | ||
diff --git a/arch/x86/include/asm/cache.h b/arch/x86/include/asm/cache.h index 2f9047cfaaca..48f99f15452e 100644 --- a/arch/x86/include/asm/cache.h +++ b/arch/x86/include/asm/cache.h | |||
@@ -7,7 +7,7 @@ | |||
7 | #define L1_CACHE_SHIFT (CONFIG_X86_L1_CACHE_SHIFT) | 7 | #define L1_CACHE_SHIFT (CONFIG_X86_L1_CACHE_SHIFT) |
8 | #define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) | 8 | #define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) |
9 | 9 | ||
10 | #define __read_mostly __attribute__((__section__(".data.read_mostly"))) | 10 | #define __read_mostly __attribute__((__section__(".data..read_mostly"))) |
11 | 11 | ||
12 | #define INTERNODE_CACHE_SHIFT CONFIG_X86_INTERNODE_CACHE_SHIFT | 12 | #define INTERNODE_CACHE_SHIFT CONFIG_X86_INTERNODE_CACHE_SHIFT |
13 | #define INTERNODE_CACHE_BYTES (1 << INTERNODE_CACHE_SHIFT) | 13 | #define INTERNODE_CACHE_BYTES (1 << INTERNODE_CACHE_SHIFT) |
diff --git a/arch/x86/include/asm/io_apic.h b/arch/x86/include/asm/io_apic.h index 63cb4096c3dc..9cb2edb87c2f 100644 --- a/arch/x86/include/asm/io_apic.h +++ b/arch/x86/include/asm/io_apic.h | |||
@@ -183,7 +183,7 @@ struct mp_ioapic_gsi{ | |||
183 | u32 gsi_end; | 183 | u32 gsi_end; |
184 | }; | 184 | }; |
185 | extern struct mp_ioapic_gsi mp_gsi_routing[]; | 185 | extern struct mp_ioapic_gsi mp_gsi_routing[]; |
186 | extern u32 gsi_end; | 186 | extern u32 gsi_top; |
187 | int mp_find_ioapic(u32 gsi); | 187 | int mp_find_ioapic(u32 gsi); |
188 | int mp_find_ioapic_pin(int ioapic, u32 gsi); | 188 | int mp_find_ioapic_pin(int ioapic, u32 gsi); |
189 | void __init mp_register_ioapic(int id, u32 address, u32 gsi_base); | 189 | void __init mp_register_ioapic(int id, u32 address, u32 gsi_base); |
@@ -197,7 +197,7 @@ static const int timer_through_8259 = 0; | |||
197 | static inline void ioapic_init_mappings(void) { } | 197 | static inline void ioapic_init_mappings(void) { } |
198 | static inline void ioapic_insert_resources(void) { } | 198 | static inline void ioapic_insert_resources(void) { } |
199 | static inline void probe_nr_irqs_gsi(void) { } | 199 | static inline void probe_nr_irqs_gsi(void) { } |
200 | #define gsi_end (NR_IRQS_LEGACY - 1) | 200 | #define gsi_top (NR_IRQS_LEGACY) |
201 | static inline int mp_find_ioapic(u32 gsi) { return 0; } | 201 | static inline int mp_find_ioapic(u32 gsi) { return 0; } |
202 | 202 | ||
203 | struct io_apic_irq_attr; | 203 | struct io_apic_irq_attr; |
diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h index b49d8ca228f6..8c7ae4318629 100644 --- a/arch/x86/include/asm/msr-index.h +++ b/arch/x86/include/asm/msr-index.h | |||
@@ -110,6 +110,7 @@ | |||
110 | #define MSR_AMD64_PATCH_LOADER 0xc0010020 | 110 | #define MSR_AMD64_PATCH_LOADER 0xc0010020 |
111 | #define MSR_AMD64_OSVW_ID_LENGTH 0xc0010140 | 111 | #define MSR_AMD64_OSVW_ID_LENGTH 0xc0010140 |
112 | #define MSR_AMD64_OSVW_STATUS 0xc0010141 | 112 | #define MSR_AMD64_OSVW_STATUS 0xc0010141 |
113 | #define MSR_AMD64_DC_CFG 0xc0011022 | ||
113 | #define MSR_AMD64_IBSFETCHCTL 0xc0011030 | 114 | #define MSR_AMD64_IBSFETCHCTL 0xc0011030 |
114 | #define MSR_AMD64_IBSFETCHLINAD 0xc0011031 | 115 | #define MSR_AMD64_IBSFETCHLINAD 0xc0011031 |
115 | #define MSR_AMD64_IBSFETCHPHYSAD 0xc0011032 | 116 | #define MSR_AMD64_IBSFETCHPHYSAD 0xc0011032 |
diff --git a/arch/x86/include/asm/pci_x86.h b/arch/x86/include/asm/pci_x86.h index 8d8797eae5d7..cd2a31dc5fb8 100644 --- a/arch/x86/include/asm/pci_x86.h +++ b/arch/x86/include/asm/pci_x86.h | |||
@@ -53,6 +53,8 @@ extern int pcibios_last_bus; | |||
53 | extern struct pci_bus *pci_root_bus; | 53 | extern struct pci_bus *pci_root_bus; |
54 | extern struct pci_ops pci_root_ops; | 54 | extern struct pci_ops pci_root_ops; |
55 | 55 | ||
56 | void pcibios_scan_specific_bus(int busn); | ||
57 | |||
56 | /* pci-irq.c */ | 58 | /* pci-irq.c */ |
57 | 59 | ||
58 | struct irq_info { | 60 | struct irq_info { |
diff --git a/arch/x86/include/asm/percpu.h b/arch/x86/include/asm/percpu.h index 0797e748d280..cd28f9ad910d 100644 --- a/arch/x86/include/asm/percpu.h +++ b/arch/x86/include/asm/percpu.h | |||
@@ -77,6 +77,7 @@ do { \ | |||
77 | if (0) { \ | 77 | if (0) { \ |
78 | pto_T__ pto_tmp__; \ | 78 | pto_T__ pto_tmp__; \ |
79 | pto_tmp__ = (val); \ | 79 | pto_tmp__ = (val); \ |
80 | (void)pto_tmp__; \ | ||
80 | } \ | 81 | } \ |
81 | switch (sizeof(var)) { \ | 82 | switch (sizeof(var)) { \ |
82 | case 1: \ | 83 | case 1: \ |
@@ -115,6 +116,7 @@ do { \ | |||
115 | if (0) { \ | 116 | if (0) { \ |
116 | pao_T__ pao_tmp__; \ | 117 | pao_T__ pao_tmp__; \ |
117 | pao_tmp__ = (val); \ | 118 | pao_tmp__ = (val); \ |
119 | (void)pao_tmp__; \ | ||
118 | } \ | 120 | } \ |
119 | switch (sizeof(var)) { \ | 121 | switch (sizeof(var)) { \ |
120 | case 1: \ | 122 | case 1: \ |
diff --git a/arch/x86/include/asm/pgtable_32_types.h b/arch/x86/include/asm/pgtable_32_types.h index 5e67c1532314..ed5903be26fe 100644 --- a/arch/x86/include/asm/pgtable_32_types.h +++ b/arch/x86/include/asm/pgtable_32_types.h | |||
@@ -26,7 +26,7 @@ | |||
26 | */ | 26 | */ |
27 | #define VMALLOC_OFFSET (8 * 1024 * 1024) | 27 | #define VMALLOC_OFFSET (8 * 1024 * 1024) |
28 | 28 | ||
29 | #ifndef __ASSEMBLER__ | 29 | #ifndef __ASSEMBLY__ |
30 | extern bool __vmalloc_start_set; /* set once high_memory is set */ | 30 | extern bool __vmalloc_start_set; /* set once high_memory is set */ |
31 | #endif | 31 | #endif |
32 | 32 | ||
diff --git a/arch/x86/include/asm/suspend_32.h b/arch/x86/include/asm/suspend_32.h index 48dcfa62ea07..fd921c3a6841 100644 --- a/arch/x86/include/asm/suspend_32.h +++ b/arch/x86/include/asm/suspend_32.h | |||
@@ -15,6 +15,8 @@ static inline int arch_prepare_suspend(void) { return 0; } | |||
15 | struct saved_context { | 15 | struct saved_context { |
16 | u16 es, fs, gs, ss; | 16 | u16 es, fs, gs, ss; |
17 | unsigned long cr0, cr2, cr3, cr4; | 17 | unsigned long cr0, cr2, cr3, cr4; |
18 | u64 misc_enable; | ||
19 | bool misc_enable_saved; | ||
18 | struct desc_ptr gdt; | 20 | struct desc_ptr gdt; |
19 | struct desc_ptr idt; | 21 | struct desc_ptr idt; |
20 | u16 ldt; | 22 | u16 ldt; |
diff --git a/arch/x86/include/asm/suspend_64.h b/arch/x86/include/asm/suspend_64.h index 06284f42b759..8d942afae681 100644 --- a/arch/x86/include/asm/suspend_64.h +++ b/arch/x86/include/asm/suspend_64.h | |||
@@ -27,6 +27,8 @@ struct saved_context { | |||
27 | u16 ds, es, fs, gs, ss; | 27 | u16 ds, es, fs, gs, ss; |
28 | unsigned long gs_base, gs_kernel_base, fs_base; | 28 | unsigned long gs_base, gs_kernel_base, fs_base; |
29 | unsigned long cr0, cr2, cr3, cr4, cr8; | 29 | unsigned long cr0, cr2, cr3, cr4, cr8; |
30 | u64 misc_enable; | ||
31 | bool misc_enable_saved; | ||
30 | unsigned long efer; | 32 | unsigned long efer; |
31 | u16 gdt_pad; | 33 | u16 gdt_pad; |
32 | u16 gdt_limit; | 34 | u16 gdt_limit; |
diff --git a/arch/x86/include/asm/system.h b/arch/x86/include/asm/system.h index b8fe48ee2ed9..e7f4d33c55ed 100644 --- a/arch/x86/include/asm/system.h +++ b/arch/x86/include/asm/system.h | |||
@@ -451,7 +451,7 @@ void stop_this_cpu(void *dummy); | |||
451 | * | 451 | * |
452 | * (Could use an alternative three way for this if there was one.) | 452 | * (Could use an alternative three way for this if there was one.) |
453 | */ | 453 | */ |
454 | static inline void rdtsc_barrier(void) | 454 | static __always_inline void rdtsc_barrier(void) |
455 | { | 455 | { |
456 | alternative(ASM_NOP3, "mfence", X86_FEATURE_MFENCE_RDTSC); | 456 | alternative(ASM_NOP3, "mfence", X86_FEATURE_MFENCE_RDTSC); |
457 | alternative(ASM_NOP3, "lfence", X86_FEATURE_LFENCE_RDTSC); | 457 | alternative(ASM_NOP3, "lfence", X86_FEATURE_LFENCE_RDTSC); |
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index 60cc4058ed5f..c05872aa3ce0 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c | |||
@@ -118,7 +118,7 @@ static unsigned int gsi_to_irq(unsigned int gsi) | |||
118 | if (gsi >= NR_IRQS_LEGACY) | 118 | if (gsi >= NR_IRQS_LEGACY) |
119 | irq = gsi; | 119 | irq = gsi; |
120 | else | 120 | else |
121 | irq = gsi_end + 1 + gsi; | 121 | irq = gsi_top + gsi; |
122 | 122 | ||
123 | return irq; | 123 | return irq; |
124 | } | 124 | } |
@@ -129,10 +129,10 @@ static u32 irq_to_gsi(int irq) | |||
129 | 129 | ||
130 | if (irq < NR_IRQS_LEGACY) | 130 | if (irq < NR_IRQS_LEGACY) |
131 | gsi = isa_irq_to_gsi[irq]; | 131 | gsi = isa_irq_to_gsi[irq]; |
132 | else if (irq <= gsi_end) | 132 | else if (irq < gsi_top) |
133 | gsi = irq; | 133 | gsi = irq; |
134 | else if (irq <= (gsi_end + NR_IRQS_LEGACY)) | 134 | else if (irq < (gsi_top + NR_IRQS_LEGACY)) |
135 | gsi = irq - gsi_end; | 135 | gsi = irq - gsi_top; |
136 | else | 136 | else |
137 | gsi = 0xffffffff; | 137 | gsi = 0xffffffff; |
138 | 138 | ||
diff --git a/arch/x86/kernel/acpi/wakeup_32.S b/arch/x86/kernel/acpi/wakeup_32.S index 8ded418b0593..13ab720573e3 100644 --- a/arch/x86/kernel/acpi/wakeup_32.S +++ b/arch/x86/kernel/acpi/wakeup_32.S | |||
@@ -1,4 +1,4 @@ | |||
1 | .section .text.page_aligned | 1 | .section .text..page_aligned |
2 | #include <linux/linkage.h> | 2 | #include <linux/linkage.h> |
3 | #include <asm/segment.h> | 3 | #include <asm/segment.h> |
4 | #include <asm/page_types.h> | 4 | #include <asm/page_types.h> |
diff --git a/arch/x86/kernel/amd_iommu.c b/arch/x86/kernel/amd_iommu.c index fa5a1474cd18..0d20286d78c6 100644 --- a/arch/x86/kernel/amd_iommu.c +++ b/arch/x86/kernel/amd_iommu.c | |||
@@ -1487,6 +1487,7 @@ static int __attach_device(struct device *dev, | |||
1487 | struct protection_domain *domain) | 1487 | struct protection_domain *domain) |
1488 | { | 1488 | { |
1489 | struct iommu_dev_data *dev_data, *alias_data; | 1489 | struct iommu_dev_data *dev_data, *alias_data; |
1490 | int ret; | ||
1490 | 1491 | ||
1491 | dev_data = get_dev_data(dev); | 1492 | dev_data = get_dev_data(dev); |
1492 | alias_data = get_dev_data(dev_data->alias); | 1493 | alias_data = get_dev_data(dev_data->alias); |
@@ -1498,13 +1499,14 @@ static int __attach_device(struct device *dev, | |||
1498 | spin_lock(&domain->lock); | 1499 | spin_lock(&domain->lock); |
1499 | 1500 | ||
1500 | /* Some sanity checks */ | 1501 | /* Some sanity checks */ |
1502 | ret = -EBUSY; | ||
1501 | if (alias_data->domain != NULL && | 1503 | if (alias_data->domain != NULL && |
1502 | alias_data->domain != domain) | 1504 | alias_data->domain != domain) |
1503 | return -EBUSY; | 1505 | goto out_unlock; |
1504 | 1506 | ||
1505 | if (dev_data->domain != NULL && | 1507 | if (dev_data->domain != NULL && |
1506 | dev_data->domain != domain) | 1508 | dev_data->domain != domain) |
1507 | return -EBUSY; | 1509 | goto out_unlock; |
1508 | 1510 | ||
1509 | /* Do real assignment */ | 1511 | /* Do real assignment */ |
1510 | if (dev_data->alias != dev) { | 1512 | if (dev_data->alias != dev) { |
@@ -1520,10 +1522,14 @@ static int __attach_device(struct device *dev, | |||
1520 | 1522 | ||
1521 | atomic_inc(&dev_data->bind); | 1523 | atomic_inc(&dev_data->bind); |
1522 | 1524 | ||
1525 | ret = 0; | ||
1526 | |||
1527 | out_unlock: | ||
1528 | |||
1523 | /* ready */ | 1529 | /* ready */ |
1524 | spin_unlock(&domain->lock); | 1530 | spin_unlock(&domain->lock); |
1525 | 1531 | ||
1526 | return 0; | 1532 | return ret; |
1527 | } | 1533 | } |
1528 | 1534 | ||
1529 | /* | 1535 | /* |
@@ -2324,10 +2330,6 @@ int __init amd_iommu_init_dma_ops(void) | |||
2324 | 2330 | ||
2325 | iommu_detected = 1; | 2331 | iommu_detected = 1; |
2326 | swiotlb = 0; | 2332 | swiotlb = 0; |
2327 | #ifdef CONFIG_GART_IOMMU | ||
2328 | gart_iommu_aperture_disabled = 1; | ||
2329 | gart_iommu_aperture = 0; | ||
2330 | #endif | ||
2331 | 2333 | ||
2332 | /* Make the driver finally visible to the drivers */ | 2334 | /* Make the driver finally visible to the drivers */ |
2333 | dma_ops = &amd_iommu_dma_ops; | 2335 | dma_ops = &amd_iommu_dma_ops; |
diff --git a/arch/x86/kernel/amd_iommu_init.c b/arch/x86/kernel/amd_iommu_init.c index 3bacb4d0844c..3cc63e2b8dd4 100644 --- a/arch/x86/kernel/amd_iommu_init.c +++ b/arch/x86/kernel/amd_iommu_init.c | |||
@@ -287,8 +287,12 @@ static u8 * __init iommu_map_mmio_space(u64 address) | |||
287 | { | 287 | { |
288 | u8 *ret; | 288 | u8 *ret; |
289 | 289 | ||
290 | if (!request_mem_region(address, MMIO_REGION_LENGTH, "amd_iommu")) | 290 | if (!request_mem_region(address, MMIO_REGION_LENGTH, "amd_iommu")) { |
291 | pr_err("AMD-Vi: Can not reserve memory region %llx for mmio\n", | ||
292 | address); | ||
293 | pr_err("AMD-Vi: This is a BIOS bug. Please contact your hardware vendor\n"); | ||
291 | return NULL; | 294 | return NULL; |
295 | } | ||
292 | 296 | ||
293 | ret = ioremap_nocache(address, MMIO_REGION_LENGTH); | 297 | ret = ioremap_nocache(address, MMIO_REGION_LENGTH); |
294 | if (ret != NULL) | 298 | if (ret != NULL) |
@@ -1314,7 +1318,7 @@ static int __init amd_iommu_init(void) | |||
1314 | ret = amd_iommu_init_dma_ops(); | 1318 | ret = amd_iommu_init_dma_ops(); |
1315 | 1319 | ||
1316 | if (ret) | 1320 | if (ret) |
1317 | goto free; | 1321 | goto free_disable; |
1318 | 1322 | ||
1319 | amd_iommu_init_api(); | 1323 | amd_iommu_init_api(); |
1320 | 1324 | ||
@@ -1332,9 +1336,10 @@ static int __init amd_iommu_init(void) | |||
1332 | out: | 1336 | out: |
1333 | return ret; | 1337 | return ret; |
1334 | 1338 | ||
1335 | free: | 1339 | free_disable: |
1336 | disable_iommus(); | 1340 | disable_iommus(); |
1337 | 1341 | ||
1342 | free: | ||
1338 | amd_iommu_uninit_devices(); | 1343 | amd_iommu_uninit_devices(); |
1339 | 1344 | ||
1340 | free_pages((unsigned long)amd_iommu_pd_alloc_bitmap, | 1345 | free_pages((unsigned long)amd_iommu_pd_alloc_bitmap, |
@@ -1353,6 +1358,15 @@ free: | |||
1353 | 1358 | ||
1354 | free_unity_maps(); | 1359 | free_unity_maps(); |
1355 | 1360 | ||
1361 | #ifdef CONFIG_GART_IOMMU | ||
1362 | /* | ||
1363 | * We failed to initialize the AMD IOMMU - try fallback to GART | ||
1364 | * if possible. | ||
1365 | */ | ||
1366 | gart_iommu_init(); | ||
1367 | |||
1368 | #endif | ||
1369 | |||
1356 | goto out; | 1370 | goto out; |
1357 | } | 1371 | } |
1358 | 1372 | ||
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c index 33f3563a2a52..e41ed24ab26d 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c | |||
@@ -89,8 +89,8 @@ int nr_ioapics; | |||
89 | /* IO APIC gsi routing info */ | 89 | /* IO APIC gsi routing info */ |
90 | struct mp_ioapic_gsi mp_gsi_routing[MAX_IO_APICS]; | 90 | struct mp_ioapic_gsi mp_gsi_routing[MAX_IO_APICS]; |
91 | 91 | ||
92 | /* The last gsi number used */ | 92 | /* The one past the highest gsi number used */ |
93 | u32 gsi_end; | 93 | u32 gsi_top; |
94 | 94 | ||
95 | /* MP IRQ source entries */ | 95 | /* MP IRQ source entries */ |
96 | struct mpc_intsrc mp_irqs[MAX_IRQ_SOURCES]; | 96 | struct mpc_intsrc mp_irqs[MAX_IRQ_SOURCES]; |
@@ -1035,7 +1035,7 @@ static int pin_2_irq(int idx, int apic, int pin) | |||
1035 | if (gsi >= NR_IRQS_LEGACY) | 1035 | if (gsi >= NR_IRQS_LEGACY) |
1036 | irq = gsi; | 1036 | irq = gsi; |
1037 | else | 1037 | else |
1038 | irq = gsi_end + 1 + gsi; | 1038 | irq = gsi_top + gsi; |
1039 | } | 1039 | } |
1040 | 1040 | ||
1041 | #ifdef CONFIG_X86_32 | 1041 | #ifdef CONFIG_X86_32 |
@@ -3853,7 +3853,7 @@ void __init probe_nr_irqs_gsi(void) | |||
3853 | { | 3853 | { |
3854 | int nr; | 3854 | int nr; |
3855 | 3855 | ||
3856 | nr = gsi_end + 1 + NR_IRQS_LEGACY; | 3856 | nr = gsi_top + NR_IRQS_LEGACY; |
3857 | if (nr > nr_irqs_gsi) | 3857 | if (nr > nr_irqs_gsi) |
3858 | nr_irqs_gsi = nr; | 3858 | nr_irqs_gsi = nr; |
3859 | 3859 | ||
@@ -4294,8 +4294,8 @@ void __init mp_register_ioapic(int id, u32 address, u32 gsi_base) | |||
4294 | */ | 4294 | */ |
4295 | nr_ioapic_registers[idx] = entries; | 4295 | nr_ioapic_registers[idx] = entries; |
4296 | 4296 | ||
4297 | if (mp_gsi_routing[idx].gsi_end > gsi_end) | 4297 | if (mp_gsi_routing[idx].gsi_end >= gsi_top) |
4298 | gsi_end = mp_gsi_routing[idx].gsi_end; | 4298 | gsi_top = mp_gsi_routing[idx].gsi_end + 1; |
4299 | 4299 | ||
4300 | printk(KERN_INFO "IOAPIC[%d]: apic_id %d, version %d, address 0x%x, " | 4300 | printk(KERN_INFO "IOAPIC[%d]: apic_id %d, version %d, address 0x%x, " |
4301 | "GSI %d-%d\n", idx, mp_ioapics[idx].apicid, | 4301 | "GSI %d-%d\n", idx, mp_ioapics[idx].apicid, |
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c index 707165dbc203..18cc42562250 100644 --- a/arch/x86/kernel/cpu/mcheck/mce.c +++ b/arch/x86/kernel/cpu/mcheck/mce.c | |||
@@ -36,6 +36,7 @@ | |||
36 | #include <linux/fs.h> | 36 | #include <linux/fs.h> |
37 | #include <linux/mm.h> | 37 | #include <linux/mm.h> |
38 | #include <linux/debugfs.h> | 38 | #include <linux/debugfs.h> |
39 | #include <linux/edac_mce.h> | ||
39 | 40 | ||
40 | #include <asm/processor.h> | 41 | #include <asm/processor.h> |
41 | #include <asm/hw_irq.h> | 42 | #include <asm/hw_irq.h> |
@@ -169,6 +170,15 @@ void mce_log(struct mce *mce) | |||
169 | entry = rcu_dereference_check_mce(mcelog.next); | 170 | entry = rcu_dereference_check_mce(mcelog.next); |
170 | for (;;) { | 171 | for (;;) { |
171 | /* | 172 | /* |
173 | * If edac_mce is enabled, it will check the error type | ||
174 | * and will process it, if it is a known error. | ||
175 | * Otherwise, the error will be sent through mcelog | ||
176 | * interface | ||
177 | */ | ||
178 | if (edac_mce_parse(mce)) | ||
179 | return; | ||
180 | |||
181 | /* | ||
172 | * When the buffer fills up discard new entries. | 182 | * When the buffer fills up discard new entries. |
173 | * Assume that the earlier errors are the more | 183 | * Assume that the earlier errors are the more |
174 | * interesting ones: | 184 | * interesting ones: |
diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c index c77586061bcb..5db5b7d65a18 100644 --- a/arch/x86/kernel/cpu/perf_event.c +++ b/arch/x86/kernel/cpu/perf_event.c | |||
@@ -106,6 +106,7 @@ struct cpu_hw_events { | |||
106 | 106 | ||
107 | int n_events; | 107 | int n_events; |
108 | int n_added; | 108 | int n_added; |
109 | int n_txn; | ||
109 | int assign[X86_PMC_IDX_MAX]; /* event to counter assignment */ | 110 | int assign[X86_PMC_IDX_MAX]; /* event to counter assignment */ |
110 | u64 tags[X86_PMC_IDX_MAX]; | 111 | u64 tags[X86_PMC_IDX_MAX]; |
111 | struct perf_event *event_list[X86_PMC_IDX_MAX]; /* in enabled order */ | 112 | struct perf_event *event_list[X86_PMC_IDX_MAX]; /* in enabled order */ |
@@ -983,6 +984,7 @@ static int x86_pmu_enable(struct perf_event *event) | |||
983 | out: | 984 | out: |
984 | cpuc->n_events = n; | 985 | cpuc->n_events = n; |
985 | cpuc->n_added += n - n0; | 986 | cpuc->n_added += n - n0; |
987 | cpuc->n_txn += n - n0; | ||
986 | 988 | ||
987 | return 0; | 989 | return 0; |
988 | } | 990 | } |
@@ -1089,6 +1091,14 @@ static void x86_pmu_disable(struct perf_event *event) | |||
1089 | struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); | 1091 | struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); |
1090 | int i; | 1092 | int i; |
1091 | 1093 | ||
1094 | /* | ||
1095 | * If we're called during a txn, we don't need to do anything. | ||
1096 | * The events never got scheduled and ->cancel_txn will truncate | ||
1097 | * the event_list. | ||
1098 | */ | ||
1099 | if (cpuc->group_flag & PERF_EVENT_TXN_STARTED) | ||
1100 | return; | ||
1101 | |||
1092 | x86_pmu_stop(event); | 1102 | x86_pmu_stop(event); |
1093 | 1103 | ||
1094 | for (i = 0; i < cpuc->n_events; i++) { | 1104 | for (i = 0; i < cpuc->n_events; i++) { |
@@ -1379,6 +1389,7 @@ static void x86_pmu_start_txn(const struct pmu *pmu) | |||
1379 | struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); | 1389 | struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); |
1380 | 1390 | ||
1381 | cpuc->group_flag |= PERF_EVENT_TXN_STARTED; | 1391 | cpuc->group_flag |= PERF_EVENT_TXN_STARTED; |
1392 | cpuc->n_txn = 0; | ||
1382 | } | 1393 | } |
1383 | 1394 | ||
1384 | /* | 1395 | /* |
@@ -1391,6 +1402,11 @@ static void x86_pmu_cancel_txn(const struct pmu *pmu) | |||
1391 | struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); | 1402 | struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); |
1392 | 1403 | ||
1393 | cpuc->group_flag &= ~PERF_EVENT_TXN_STARTED; | 1404 | cpuc->group_flag &= ~PERF_EVENT_TXN_STARTED; |
1405 | /* | ||
1406 | * Truncate the collected events. | ||
1407 | */ | ||
1408 | cpuc->n_added -= cpuc->n_txn; | ||
1409 | cpuc->n_events -= cpuc->n_txn; | ||
1394 | } | 1410 | } |
1395 | 1411 | ||
1396 | /* | 1412 | /* |
@@ -1419,6 +1435,12 @@ static int x86_pmu_commit_txn(const struct pmu *pmu) | |||
1419 | */ | 1435 | */ |
1420 | memcpy(cpuc->assign, assign, n*sizeof(int)); | 1436 | memcpy(cpuc->assign, assign, n*sizeof(int)); |
1421 | 1437 | ||
1438 | /* | ||
1439 | * Clear out the txn count so that ->cancel_txn() which gets | ||
1440 | * run after ->commit_txn() doesn't undo things. | ||
1441 | */ | ||
1442 | cpuc->n_txn = 0; | ||
1443 | |||
1422 | return 0; | 1444 | return 0; |
1423 | } | 1445 | } |
1424 | 1446 | ||
diff --git a/arch/x86/kernel/cpu/perf_event_amd.c b/arch/x86/kernel/cpu/perf_event_amd.c index 611df11ba15e..c2897b7b4a3b 100644 --- a/arch/x86/kernel/cpu/perf_event_amd.c +++ b/arch/x86/kernel/cpu/perf_event_amd.c | |||
@@ -102,8 +102,8 @@ static const u64 amd_perfmon_event_map[] = | |||
102 | [PERF_COUNT_HW_INSTRUCTIONS] = 0x00c0, | 102 | [PERF_COUNT_HW_INSTRUCTIONS] = 0x00c0, |
103 | [PERF_COUNT_HW_CACHE_REFERENCES] = 0x0080, | 103 | [PERF_COUNT_HW_CACHE_REFERENCES] = 0x0080, |
104 | [PERF_COUNT_HW_CACHE_MISSES] = 0x0081, | 104 | [PERF_COUNT_HW_CACHE_MISSES] = 0x0081, |
105 | [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = 0x00c4, | 105 | [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = 0x00c2, |
106 | [PERF_COUNT_HW_BRANCH_MISSES] = 0x00c5, | 106 | [PERF_COUNT_HW_BRANCH_MISSES] = 0x00c3, |
107 | }; | 107 | }; |
108 | 108 | ||
109 | static u64 amd_pmu_event_map(int hw_event) | 109 | static u64 amd_pmu_event_map(int hw_event) |
diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c index fdbc652d3feb..214ac860ebe0 100644 --- a/arch/x86/kernel/cpu/perf_event_intel.c +++ b/arch/x86/kernel/cpu/perf_event_intel.c | |||
@@ -72,6 +72,7 @@ static struct event_constraint intel_westmere_event_constraints[] = | |||
72 | INTEL_EVENT_CONSTRAINT(0x51, 0x3), /* L1D */ | 72 | INTEL_EVENT_CONSTRAINT(0x51, 0x3), /* L1D */ |
73 | INTEL_EVENT_CONSTRAINT(0x60, 0x1), /* OFFCORE_REQUESTS_OUTSTANDING */ | 73 | INTEL_EVENT_CONSTRAINT(0x60, 0x1), /* OFFCORE_REQUESTS_OUTSTANDING */ |
74 | INTEL_EVENT_CONSTRAINT(0x63, 0x3), /* CACHE_LOCK_CYCLES */ | 74 | INTEL_EVENT_CONSTRAINT(0x63, 0x3), /* CACHE_LOCK_CYCLES */ |
75 | INTEL_EVENT_CONSTRAINT(0xb3, 0x1), /* SNOOPQ_REQUEST_OUTSTANDING */ | ||
75 | EVENT_CONSTRAINT_END | 76 | EVENT_CONSTRAINT_END |
76 | }; | 77 | }; |
77 | 78 | ||
diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c index 7bca3c6a02fb..0d6fc71bedb1 100644 --- a/arch/x86/kernel/e820.c +++ b/arch/x86/kernel/e820.c | |||
@@ -729,7 +729,7 @@ static int __init e820_mark_nvs_memory(void) | |||
729 | struct e820entry *ei = &e820.map[i]; | 729 | struct e820entry *ei = &e820.map[i]; |
730 | 730 | ||
731 | if (ei->type == E820_NVS) | 731 | if (ei->type == E820_NVS) |
732 | hibernate_nvs_register(ei->addr, ei->size); | 732 | suspend_nvs_register(ei->addr, ei->size); |
733 | } | 733 | } |
734 | 734 | ||
735 | return 0; | 735 | return 0; |
diff --git a/arch/x86/kernel/init_task.c b/arch/x86/kernel/init_task.c index 3a54dcb9cd0e..43e9ccf44947 100644 --- a/arch/x86/kernel/init_task.c +++ b/arch/x86/kernel/init_task.c | |||
@@ -34,7 +34,7 @@ EXPORT_SYMBOL(init_task); | |||
34 | /* | 34 | /* |
35 | * per-CPU TSS segments. Threads are completely 'soft' on Linux, | 35 | * per-CPU TSS segments. Threads are completely 'soft' on Linux, |
36 | * no more per-task TSS's. The TSS size is kept cacheline-aligned | 36 | * no more per-task TSS's. The TSS size is kept cacheline-aligned |
37 | * so they are allowed to end up in the .data.cacheline_aligned | 37 | * so they are allowed to end up in the .data..cacheline_aligned |
38 | * section. Since TSS's are completely CPU-local, we want them | 38 | * section. Since TSS's are completely CPU-local, we want them |
39 | * on exact cacheline boundaries, to eliminate cacheline ping-pong. | 39 | * on exact cacheline boundaries, to eliminate cacheline ping-pong. |
40 | */ | 40 | */ |
diff --git a/arch/x86/kernel/mpparse.c b/arch/x86/kernel/mpparse.c index 5ae5d2426edf..d86dbf7e54be 100644 --- a/arch/x86/kernel/mpparse.c +++ b/arch/x86/kernel/mpparse.c | |||
@@ -123,7 +123,7 @@ static void __init MP_ioapic_info(struct mpc_ioapic *m) | |||
123 | printk(KERN_INFO "I/O APIC #%d Version %d at 0x%X.\n", | 123 | printk(KERN_INFO "I/O APIC #%d Version %d at 0x%X.\n", |
124 | m->apicid, m->apicver, m->apicaddr); | 124 | m->apicid, m->apicver, m->apicaddr); |
125 | 125 | ||
126 | mp_register_ioapic(m->apicid, m->apicaddr, gsi_end + 1); | 126 | mp_register_ioapic(m->apicid, m->apicaddr, gsi_top); |
127 | } | 127 | } |
128 | 128 | ||
129 | static void print_MP_intsrc_info(struct mpc_intsrc *m) | 129 | static void print_MP_intsrc_info(struct mpc_intsrc *m) |
diff --git a/arch/x86/kernel/pci-calgary_64.c b/arch/x86/kernel/pci-calgary_64.c index fb99f7edb341..078d4ec1a9d9 100644 --- a/arch/x86/kernel/pci-calgary_64.c +++ b/arch/x86/kernel/pci-calgary_64.c | |||
@@ -103,11 +103,16 @@ int use_calgary __read_mostly = 0; | |||
103 | #define PMR_SOFTSTOPFAULT 0x40000000 | 103 | #define PMR_SOFTSTOPFAULT 0x40000000 |
104 | #define PMR_HARDSTOP 0x20000000 | 104 | #define PMR_HARDSTOP 0x20000000 |
105 | 105 | ||
106 | #define MAX_NUM_OF_PHBS 8 /* how many PHBs in total? */ | 106 | /* |
107 | #define MAX_NUM_CHASSIS 8 /* max number of chassis */ | 107 | * The maximum PHB bus number. |
108 | /* MAX_PHB_BUS_NUM is the maximal possible dev->bus->number */ | 108 | * x3950M2 (rare): 8 chassis, 48 PHBs per chassis = 384 |
109 | #define MAX_PHB_BUS_NUM (MAX_NUM_OF_PHBS * MAX_NUM_CHASSIS * 2) | 109 | * x3950M2: 4 chassis, 48 PHBs per chassis = 192 |
110 | #define PHBS_PER_CALGARY 4 | 110 | * x3950 (PCIE): 8 chassis, 32 PHBs per chassis = 256 |
111 | * x3950 (PCIX): 8 chassis, 16 PHBs per chassis = 128 | ||
112 | */ | ||
113 | #define MAX_PHB_BUS_NUM 256 | ||
114 | |||
115 | #define PHBS_PER_CALGARY 4 | ||
111 | 116 | ||
112 | /* register offsets in Calgary's internal register space */ | 117 | /* register offsets in Calgary's internal register space */ |
113 | static const unsigned long tar_offsets[] = { | 118 | static const unsigned long tar_offsets[] = { |
@@ -1051,8 +1056,6 @@ static int __init calgary_init_one(struct pci_dev *dev) | |||
1051 | struct iommu_table *tbl; | 1056 | struct iommu_table *tbl; |
1052 | int ret; | 1057 | int ret; |
1053 | 1058 | ||
1054 | BUG_ON(dev->bus->number >= MAX_PHB_BUS_NUM); | ||
1055 | |||
1056 | bbar = busno_to_bbar(dev->bus->number); | 1059 | bbar = busno_to_bbar(dev->bus->number); |
1057 | ret = calgary_setup_tar(dev, bbar); | 1060 | ret = calgary_setup_tar(dev, bbar); |
1058 | if (ret) | 1061 | if (ret) |
diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c index 8e1aac86b50c..e3af342fe83a 100644 --- a/arch/x86/kernel/reboot.c +++ b/arch/x86/kernel/reboot.c | |||
@@ -228,6 +228,14 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = { | |||
228 | DMI_MATCH(DMI_PRODUCT_NAME, "Precision WorkStation T5400"), | 228 | DMI_MATCH(DMI_PRODUCT_NAME, "Precision WorkStation T5400"), |
229 | }, | 229 | }, |
230 | }, | 230 | }, |
231 | { /* Handle problems with rebooting on Dell T7400's */ | ||
232 | .callback = set_bios_reboot, | ||
233 | .ident = "Dell Precision T7400", | ||
234 | .matches = { | ||
235 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | ||
236 | DMI_MATCH(DMI_PRODUCT_NAME, "Precision WorkStation T7400"), | ||
237 | }, | ||
238 | }, | ||
231 | { /* Handle problems with rebooting on HP laptops */ | 239 | { /* Handle problems with rebooting on HP laptops */ |
232 | .callback = set_bios_reboot, | 240 | .callback = set_bios_reboot, |
233 | .ident = "HP Compaq Laptop", | 241 | .ident = "HP Compaq Laptop", |
diff --git a/arch/x86/kernel/setup_percpu.c b/arch/x86/kernel/setup_percpu.c index a867940a6dfc..de3b63ae3da2 100644 --- a/arch/x86/kernel/setup_percpu.c +++ b/arch/x86/kernel/setup_percpu.c | |||
@@ -21,12 +21,6 @@ | |||
21 | #include <asm/cpu.h> | 21 | #include <asm/cpu.h> |
22 | #include <asm/stackprotector.h> | 22 | #include <asm/stackprotector.h> |
23 | 23 | ||
24 | #ifdef CONFIG_DEBUG_PER_CPU_MAPS | ||
25 | # define DBG(fmt, ...) pr_dbg(fmt, ##__VA_ARGS__) | ||
26 | #else | ||
27 | # define DBG(fmt, ...) do { if (0) pr_dbg(fmt, ##__VA_ARGS__); } while (0) | ||
28 | #endif | ||
29 | |||
30 | DEFINE_PER_CPU(int, cpu_number); | 24 | DEFINE_PER_CPU(int, cpu_number); |
31 | EXPORT_PER_CPU_SYMBOL(cpu_number); | 25 | EXPORT_PER_CPU_SYMBOL(cpu_number); |
32 | 26 | ||
@@ -247,7 +241,7 @@ void __init setup_per_cpu_areas(void) | |||
247 | #endif | 241 | #endif |
248 | #endif | 242 | #endif |
249 | /* | 243 | /* |
250 | * Up to this point, the boot CPU has been using .data.init | 244 | * Up to this point, the boot CPU has been using .init.data |
251 | * area. Reload any changed state for the boot CPU. | 245 | * area. Reload any changed state for the boot CPU. |
252 | */ | 246 | */ |
253 | if (cpu == boot_cpu_id) | 247 | if (cpu == boot_cpu_id) |
diff --git a/arch/x86/kernel/sfi.c b/arch/x86/kernel/sfi.c index 7ded57896c0a..cb22acf3ed09 100644 --- a/arch/x86/kernel/sfi.c +++ b/arch/x86/kernel/sfi.c | |||
@@ -93,7 +93,7 @@ static int __init sfi_parse_ioapic(struct sfi_table_header *table) | |||
93 | pentry = (struct sfi_apic_table_entry *)sb->pentry; | 93 | pentry = (struct sfi_apic_table_entry *)sb->pentry; |
94 | 94 | ||
95 | for (i = 0; i < num; i++) { | 95 | for (i = 0; i < num; i++) { |
96 | mp_register_ioapic(i, pentry->phys_addr, gsi_end + 1); | 96 | mp_register_ioapic(i, pentry->phys_addr, gsi_top); |
97 | pentry++; | 97 | pentry++; |
98 | } | 98 | } |
99 | 99 | ||
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 37462f1ddba5..c4f33b2e77d6 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c | |||
@@ -686,7 +686,7 @@ static void __cpuinit do_fork_idle(struct work_struct *work) | |||
686 | static void __cpuinit announce_cpu(int cpu, int apicid) | 686 | static void __cpuinit announce_cpu(int cpu, int apicid) |
687 | { | 687 | { |
688 | static int current_node = -1; | 688 | static int current_node = -1; |
689 | int node = cpu_to_node(cpu); | 689 | int node = early_cpu_to_node(cpu); |
690 | 690 | ||
691 | if (system_state == SYSTEM_BOOTING) { | 691 | if (system_state == SYSTEM_BOOTING) { |
692 | if (node != current_node) { | 692 | if (node != current_node) { |
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index 142d70c74b02..725ef4d17cd5 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c | |||
@@ -526,6 +526,7 @@ asmlinkage __kprobes struct pt_regs *sync_regs(struct pt_regs *eregs) | |||
526 | dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code) | 526 | dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code) |
527 | { | 527 | { |
528 | struct task_struct *tsk = current; | 528 | struct task_struct *tsk = current; |
529 | int user_icebp = 0; | ||
529 | unsigned long dr6; | 530 | unsigned long dr6; |
530 | int si_code; | 531 | int si_code; |
531 | 532 | ||
@@ -534,6 +535,14 @@ dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code) | |||
534 | /* Filter out all the reserved bits which are preset to 1 */ | 535 | /* Filter out all the reserved bits which are preset to 1 */ |
535 | dr6 &= ~DR6_RESERVED; | 536 | dr6 &= ~DR6_RESERVED; |
536 | 537 | ||
538 | /* | ||
539 | * If dr6 has no reason to give us about the origin of this trap, | ||
540 | * then it's very likely the result of an icebp/int01 trap. | ||
541 | * User wants a sigtrap for that. | ||
542 | */ | ||
543 | if (!dr6 && user_mode(regs)) | ||
544 | user_icebp = 1; | ||
545 | |||
537 | /* Catch kmemcheck conditions first of all! */ | 546 | /* Catch kmemcheck conditions first of all! */ |
538 | if ((dr6 & DR_STEP) && kmemcheck_trap(regs)) | 547 | if ((dr6 & DR_STEP) && kmemcheck_trap(regs)) |
539 | return; | 548 | return; |
@@ -575,7 +584,7 @@ dotraplinkage void __kprobes do_debug(struct pt_regs *regs, long error_code) | |||
575 | regs->flags &= ~X86_EFLAGS_TF; | 584 | regs->flags &= ~X86_EFLAGS_TF; |
576 | } | 585 | } |
577 | si_code = get_si_code(tsk->thread.debugreg6); | 586 | si_code = get_si_code(tsk->thread.debugreg6); |
578 | if (tsk->thread.debugreg6 & (DR_STEP | DR_TRAP_BITS)) | 587 | if (tsk->thread.debugreg6 & (DR_STEP | DR_TRAP_BITS) || user_icebp) |
579 | send_sigtrap(tsk, regs, error_code, si_code); | 588 | send_sigtrap(tsk, regs, error_code, si_code); |
580 | preempt_conditional_cli(regs); | 589 | preempt_conditional_cli(regs); |
581 | 590 | ||
diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S index 2cc249718c46..d0bb52296fa3 100644 --- a/arch/x86/kernel/vmlinux.lds.S +++ b/arch/x86/kernel/vmlinux.lds.S | |||
@@ -97,7 +97,7 @@ SECTIONS | |||
97 | HEAD_TEXT | 97 | HEAD_TEXT |
98 | #ifdef CONFIG_X86_32 | 98 | #ifdef CONFIG_X86_32 |
99 | . = ALIGN(PAGE_SIZE); | 99 | . = ALIGN(PAGE_SIZE); |
100 | *(.text.page_aligned) | 100 | *(.text..page_aligned) |
101 | #endif | 101 | #endif |
102 | . = ALIGN(8); | 102 | . = ALIGN(8); |
103 | _stext = .; | 103 | _stext = .; |
@@ -305,7 +305,7 @@ SECTIONS | |||
305 | . = ALIGN(PAGE_SIZE); | 305 | . = ALIGN(PAGE_SIZE); |
306 | .bss : AT(ADDR(.bss) - LOAD_OFFSET) { | 306 | .bss : AT(ADDR(.bss) - LOAD_OFFSET) { |
307 | __bss_start = .; | 307 | __bss_start = .; |
308 | *(.bss.page_aligned) | 308 | *(.bss..page_aligned) |
309 | *(.bss) | 309 | *(.bss) |
310 | . = ALIGN(4); | 310 | . = ALIGN(4); |
311 | __bss_stop = .; | 311 | __bss_stop = .; |
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index 81563e76e28f..a6f695d76928 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c | |||
@@ -1815,6 +1815,9 @@ static int set_spte(struct kvm_vcpu *vcpu, u64 *sptep, | |||
1815 | 1815 | ||
1816 | spte |= PT_WRITABLE_MASK; | 1816 | spte |= PT_WRITABLE_MASK; |
1817 | 1817 | ||
1818 | if (!tdp_enabled && !(pte_access & ACC_WRITE_MASK)) | ||
1819 | spte &= ~PT_USER_MASK; | ||
1820 | |||
1818 | /* | 1821 | /* |
1819 | * Optimization: for pte sync, if spte was writable the hash | 1822 | * Optimization: for pte sync, if spte was writable the hash |
1820 | * lookup is unnecessary (and expensive). Write protection | 1823 | * lookup is unnecessary (and expensive). Write protection |
@@ -1870,6 +1873,8 @@ static void mmu_set_spte(struct kvm_vcpu *vcpu, u64 *sptep, | |||
1870 | 1873 | ||
1871 | child = page_header(pte & PT64_BASE_ADDR_MASK); | 1874 | child = page_header(pte & PT64_BASE_ADDR_MASK); |
1872 | mmu_page_remove_parent_pte(child, sptep); | 1875 | mmu_page_remove_parent_pte(child, sptep); |
1876 | __set_spte(sptep, shadow_trap_nonpresent_pte); | ||
1877 | kvm_flush_remote_tlbs(vcpu->kvm); | ||
1873 | } else if (pfn != spte_to_pfn(*sptep)) { | 1878 | } else if (pfn != spte_to_pfn(*sptep)) { |
1874 | pgprintk("hfn old %lx new %lx\n", | 1879 | pgprintk("hfn old %lx new %lx\n", |
1875 | spte_to_pfn(*sptep), pfn); | 1880 | spte_to_pfn(*sptep), pfn); |
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 96dc232bfc56..ce438e0fdd26 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <linux/ftrace_event.h> | 28 | #include <linux/ftrace_event.h> |
29 | #include <linux/slab.h> | 29 | #include <linux/slab.h> |
30 | 30 | ||
31 | #include <asm/tlbflush.h> | ||
31 | #include <asm/desc.h> | 32 | #include <asm/desc.h> |
32 | 33 | ||
33 | #include <asm/virtext.h> | 34 | #include <asm/virtext.h> |
@@ -56,6 +57,8 @@ MODULE_LICENSE("GPL"); | |||
56 | 57 | ||
57 | #define DEBUGCTL_RESERVED_BITS (~(0x3fULL)) | 58 | #define DEBUGCTL_RESERVED_BITS (~(0x3fULL)) |
58 | 59 | ||
60 | static bool erratum_383_found __read_mostly; | ||
61 | |||
59 | static const u32 host_save_user_msrs[] = { | 62 | static const u32 host_save_user_msrs[] = { |
60 | #ifdef CONFIG_X86_64 | 63 | #ifdef CONFIG_X86_64 |
61 | MSR_STAR, MSR_LSTAR, MSR_CSTAR, MSR_SYSCALL_MASK, MSR_KERNEL_GS_BASE, | 64 | MSR_STAR, MSR_LSTAR, MSR_CSTAR, MSR_SYSCALL_MASK, MSR_KERNEL_GS_BASE, |
@@ -374,6 +377,31 @@ static void svm_queue_exception(struct kvm_vcpu *vcpu, unsigned nr, | |||
374 | svm->vmcb->control.event_inj_err = error_code; | 377 | svm->vmcb->control.event_inj_err = error_code; |
375 | } | 378 | } |
376 | 379 | ||
380 | static void svm_init_erratum_383(void) | ||
381 | { | ||
382 | u32 low, high; | ||
383 | int err; | ||
384 | u64 val; | ||
385 | |||
386 | /* Only Fam10h is affected */ | ||
387 | if (boot_cpu_data.x86 != 0x10) | ||
388 | return; | ||
389 | |||
390 | /* Use _safe variants to not break nested virtualization */ | ||
391 | val = native_read_msr_safe(MSR_AMD64_DC_CFG, &err); | ||
392 | if (err) | ||
393 | return; | ||
394 | |||
395 | val |= (1ULL << 47); | ||
396 | |||
397 | low = lower_32_bits(val); | ||
398 | high = upper_32_bits(val); | ||
399 | |||
400 | native_write_msr_safe(MSR_AMD64_DC_CFG, low, high); | ||
401 | |||
402 | erratum_383_found = true; | ||
403 | } | ||
404 | |||
377 | static int has_svm(void) | 405 | static int has_svm(void) |
378 | { | 406 | { |
379 | const char *msg; | 407 | const char *msg; |
@@ -429,6 +457,8 @@ static int svm_hardware_enable(void *garbage) | |||
429 | 457 | ||
430 | wrmsrl(MSR_VM_HSAVE_PA, page_to_pfn(sd->save_area) << PAGE_SHIFT); | 458 | wrmsrl(MSR_VM_HSAVE_PA, page_to_pfn(sd->save_area) << PAGE_SHIFT); |
431 | 459 | ||
460 | svm_init_erratum_383(); | ||
461 | |||
432 | return 0; | 462 | return 0; |
433 | } | 463 | } |
434 | 464 | ||
@@ -1410,8 +1440,59 @@ static int nm_interception(struct vcpu_svm *svm) | |||
1410 | return 1; | 1440 | return 1; |
1411 | } | 1441 | } |
1412 | 1442 | ||
1413 | static int mc_interception(struct vcpu_svm *svm) | 1443 | static bool is_erratum_383(void) |
1414 | { | 1444 | { |
1445 | int err, i; | ||
1446 | u64 value; | ||
1447 | |||
1448 | if (!erratum_383_found) | ||
1449 | return false; | ||
1450 | |||
1451 | value = native_read_msr_safe(MSR_IA32_MC0_STATUS, &err); | ||
1452 | if (err) | ||
1453 | return false; | ||
1454 | |||
1455 | /* Bit 62 may or may not be set for this mce */ | ||
1456 | value &= ~(1ULL << 62); | ||
1457 | |||
1458 | if (value != 0xb600000000010015ULL) | ||
1459 | return false; | ||
1460 | |||
1461 | /* Clear MCi_STATUS registers */ | ||
1462 | for (i = 0; i < 6; ++i) | ||
1463 | native_write_msr_safe(MSR_IA32_MCx_STATUS(i), 0, 0); | ||
1464 | |||
1465 | value = native_read_msr_safe(MSR_IA32_MCG_STATUS, &err); | ||
1466 | if (!err) { | ||
1467 | u32 low, high; | ||
1468 | |||
1469 | value &= ~(1ULL << 2); | ||
1470 | low = lower_32_bits(value); | ||
1471 | high = upper_32_bits(value); | ||
1472 | |||
1473 | native_write_msr_safe(MSR_IA32_MCG_STATUS, low, high); | ||
1474 | } | ||
1475 | |||
1476 | /* Flush tlb to evict multi-match entries */ | ||
1477 | __flush_tlb_all(); | ||
1478 | |||
1479 | return true; | ||
1480 | } | ||
1481 | |||
1482 | static void svm_handle_mce(struct vcpu_svm *svm) | ||
1483 | { | ||
1484 | if (is_erratum_383()) { | ||
1485 | /* | ||
1486 | * Erratum 383 triggered. Guest state is corrupt so kill the | ||
1487 | * guest. | ||
1488 | */ | ||
1489 | pr_err("KVM: Guest triggered AMD Erratum 383\n"); | ||
1490 | |||
1491 | set_bit(KVM_REQ_TRIPLE_FAULT, &svm->vcpu.requests); | ||
1492 | |||
1493 | return; | ||
1494 | } | ||
1495 | |||
1415 | /* | 1496 | /* |
1416 | * On an #MC intercept the MCE handler is not called automatically in | 1497 | * On an #MC intercept the MCE handler is not called automatically in |
1417 | * the host. So do it by hand here. | 1498 | * the host. So do it by hand here. |
@@ -1420,6 +1501,11 @@ static int mc_interception(struct vcpu_svm *svm) | |||
1420 | "int $0x12\n"); | 1501 | "int $0x12\n"); |
1421 | /* not sure if we ever come back to this point */ | 1502 | /* not sure if we ever come back to this point */ |
1422 | 1503 | ||
1504 | return; | ||
1505 | } | ||
1506 | |||
1507 | static int mc_interception(struct vcpu_svm *svm) | ||
1508 | { | ||
1423 | return 1; | 1509 | return 1; |
1424 | } | 1510 | } |
1425 | 1511 | ||
@@ -3088,6 +3174,14 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu) | |||
3088 | vcpu->arch.regs_avail &= ~(1 << VCPU_EXREG_PDPTR); | 3174 | vcpu->arch.regs_avail &= ~(1 << VCPU_EXREG_PDPTR); |
3089 | vcpu->arch.regs_dirty &= ~(1 << VCPU_EXREG_PDPTR); | 3175 | vcpu->arch.regs_dirty &= ~(1 << VCPU_EXREG_PDPTR); |
3090 | } | 3176 | } |
3177 | |||
3178 | /* | ||
3179 | * We need to handle MC intercepts here before the vcpu has a chance to | ||
3180 | * change the physical cpu | ||
3181 | */ | ||
3182 | if (unlikely(svm->vmcb->control.exit_code == | ||
3183 | SVM_EXIT_EXCP_BASE + MC_VECTOR)) | ||
3184 | svm_handle_mce(svm); | ||
3091 | } | 3185 | } |
3092 | 3186 | ||
3093 | #undef R | 3187 | #undef R |
diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c index 550df481accd..787c52ca49c3 100644 --- a/arch/x86/mm/numa.c +++ b/arch/x86/mm/numa.c | |||
@@ -3,12 +3,6 @@ | |||
3 | #include <linux/module.h> | 3 | #include <linux/module.h> |
4 | #include <linux/bootmem.h> | 4 | #include <linux/bootmem.h> |
5 | 5 | ||
6 | #ifdef CONFIG_DEBUG_PER_CPU_MAPS | ||
7 | # define DBG(x...) printk(KERN_DEBUG x) | ||
8 | #else | ||
9 | # define DBG(x...) | ||
10 | #endif | ||
11 | |||
12 | /* | 6 | /* |
13 | * Which logical CPUs are on which nodes | 7 | * Which logical CPUs are on which nodes |
14 | */ | 8 | */ |
diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c index acc15b23b743..64121a18b8cb 100644 --- a/arch/x86/mm/pat.c +++ b/arch/x86/mm/pat.c | |||
@@ -302,7 +302,7 @@ int reserve_memtype(u64 start, u64 end, unsigned long req_type, | |||
302 | return -EINVAL; | 302 | return -EINVAL; |
303 | } | 303 | } |
304 | 304 | ||
305 | new = kmalloc(sizeof(struct memtype), GFP_KERNEL); | 305 | new = kzalloc(sizeof(struct memtype), GFP_KERNEL); |
306 | if (!new) | 306 | if (!new) |
307 | return -ENOMEM; | 307 | return -ENOMEM; |
308 | 308 | ||
diff --git a/arch/x86/mm/pat_rbtree.c b/arch/x86/mm/pat_rbtree.c index f537087bb740..8acaddd0fb21 100644 --- a/arch/x86/mm/pat_rbtree.c +++ b/arch/x86/mm/pat_rbtree.c | |||
@@ -34,8 +34,7 @@ | |||
34 | * memtype_lock protects the rbtree. | 34 | * memtype_lock protects the rbtree. |
35 | */ | 35 | */ |
36 | 36 | ||
37 | static void memtype_rb_augment_cb(struct rb_node *node); | 37 | static struct rb_root memtype_rbroot = RB_ROOT; |
38 | static struct rb_root memtype_rbroot = RB_AUGMENT_ROOT(&memtype_rb_augment_cb); | ||
39 | 38 | ||
40 | static int is_node_overlap(struct memtype *node, u64 start, u64 end) | 39 | static int is_node_overlap(struct memtype *node, u64 start, u64 end) |
41 | { | 40 | { |
@@ -56,7 +55,7 @@ static u64 get_subtree_max_end(struct rb_node *node) | |||
56 | } | 55 | } |
57 | 56 | ||
58 | /* Update 'subtree_max_end' for a node, based on node and its children */ | 57 | /* Update 'subtree_max_end' for a node, based on node and its children */ |
59 | static void update_node_max_end(struct rb_node *node) | 58 | static void memtype_rb_augment_cb(struct rb_node *node, void *__unused) |
60 | { | 59 | { |
61 | struct memtype *data; | 60 | struct memtype *data; |
62 | u64 max_end, child_max_end; | 61 | u64 max_end, child_max_end; |
@@ -78,25 +77,6 @@ static void update_node_max_end(struct rb_node *node) | |||
78 | data->subtree_max_end = max_end; | 77 | data->subtree_max_end = max_end; |
79 | } | 78 | } |
80 | 79 | ||
81 | /* Update 'subtree_max_end' for a node and all its ancestors */ | ||
82 | static void update_path_max_end(struct rb_node *node) | ||
83 | { | ||
84 | u64 old_max_end, new_max_end; | ||
85 | |||
86 | while (node) { | ||
87 | struct memtype *data = container_of(node, struct memtype, rb); | ||
88 | |||
89 | old_max_end = data->subtree_max_end; | ||
90 | update_node_max_end(node); | ||
91 | new_max_end = data->subtree_max_end; | ||
92 | |||
93 | if (new_max_end == old_max_end) | ||
94 | break; | ||
95 | |||
96 | node = rb_parent(node); | ||
97 | } | ||
98 | } | ||
99 | |||
100 | /* Find the first (lowest start addr) overlapping range from rb tree */ | 80 | /* Find the first (lowest start addr) overlapping range from rb tree */ |
101 | static struct memtype *memtype_rb_lowest_match(struct rb_root *root, | 81 | static struct memtype *memtype_rb_lowest_match(struct rb_root *root, |
102 | u64 start, u64 end) | 82 | u64 start, u64 end) |
@@ -190,12 +170,6 @@ failure: | |||
190 | return -EBUSY; | 170 | return -EBUSY; |
191 | } | 171 | } |
192 | 172 | ||
193 | static void memtype_rb_augment_cb(struct rb_node *node) | ||
194 | { | ||
195 | if (node) | ||
196 | update_path_max_end(node); | ||
197 | } | ||
198 | |||
199 | static void memtype_rb_insert(struct rb_root *root, struct memtype *newdata) | 173 | static void memtype_rb_insert(struct rb_root *root, struct memtype *newdata) |
200 | { | 174 | { |
201 | struct rb_node **node = &(root->rb_node); | 175 | struct rb_node **node = &(root->rb_node); |
@@ -213,6 +187,7 @@ static void memtype_rb_insert(struct rb_root *root, struct memtype *newdata) | |||
213 | 187 | ||
214 | rb_link_node(&newdata->rb, parent, node); | 188 | rb_link_node(&newdata->rb, parent, node); |
215 | rb_insert_color(&newdata->rb, root); | 189 | rb_insert_color(&newdata->rb, root); |
190 | rb_augment_insert(&newdata->rb, memtype_rb_augment_cb, NULL); | ||
216 | } | 191 | } |
217 | 192 | ||
218 | int rbt_memtype_check_insert(struct memtype *new, unsigned long *ret_type) | 193 | int rbt_memtype_check_insert(struct memtype *new, unsigned long *ret_type) |
@@ -226,6 +201,7 @@ int rbt_memtype_check_insert(struct memtype *new, unsigned long *ret_type) | |||
226 | if (ret_type) | 201 | if (ret_type) |
227 | new->type = *ret_type; | 202 | new->type = *ret_type; |
228 | 203 | ||
204 | new->subtree_max_end = new->end; | ||
229 | memtype_rb_insert(&memtype_rbroot, new); | 205 | memtype_rb_insert(&memtype_rbroot, new); |
230 | } | 206 | } |
231 | return err; | 207 | return err; |
@@ -233,13 +209,16 @@ int rbt_memtype_check_insert(struct memtype *new, unsigned long *ret_type) | |||
233 | 209 | ||
234 | struct memtype *rbt_memtype_erase(u64 start, u64 end) | 210 | struct memtype *rbt_memtype_erase(u64 start, u64 end) |
235 | { | 211 | { |
212 | struct rb_node *deepest; | ||
236 | struct memtype *data; | 213 | struct memtype *data; |
237 | 214 | ||
238 | data = memtype_rb_exact_match(&memtype_rbroot, start, end); | 215 | data = memtype_rb_exact_match(&memtype_rbroot, start, end); |
239 | if (!data) | 216 | if (!data) |
240 | goto out; | 217 | goto out; |
241 | 218 | ||
219 | deepest = rb_augment_erase_begin(&data->rb); | ||
242 | rb_erase(&data->rb, &memtype_rbroot); | 220 | rb_erase(&data->rb, &memtype_rbroot); |
221 | rb_augment_erase_end(deepest, memtype_rb_augment_cb, NULL); | ||
243 | out: | 222 | out: |
244 | return data; | 223 | return data; |
245 | } | 224 | } |
diff --git a/arch/x86/pci/i386.c b/arch/x86/pci/i386.c index 97da2ba9344b..6fdb3ec30c31 100644 --- a/arch/x86/pci/i386.c +++ b/arch/x86/pci/i386.c | |||
@@ -96,6 +96,7 @@ EXPORT_SYMBOL(pcibios_align_resource); | |||
96 | * the fact the PCI specs explicitly allow address decoders to be | 96 | * the fact the PCI specs explicitly allow address decoders to be |
97 | * shared between expansion ROMs and other resource regions, it's | 97 | * shared between expansion ROMs and other resource regions, it's |
98 | * at least dangerous) | 98 | * at least dangerous) |
99 | * - bad resource sizes or overlaps with other regions | ||
99 | * | 100 | * |
100 | * Our solution: | 101 | * Our solution: |
101 | * (1) Allocate resources for all buses behind PCI-to-PCI bridges. | 102 | * (1) Allocate resources for all buses behind PCI-to-PCI bridges. |
@@ -136,6 +137,7 @@ static void __init pcibios_allocate_bus_resources(struct list_head *bus_list) | |||
136 | * child resource allocations in this | 137 | * child resource allocations in this |
137 | * range. | 138 | * range. |
138 | */ | 139 | */ |
140 | r->start = r->end = 0; | ||
139 | r->flags = 0; | 141 | r->flags = 0; |
140 | } | 142 | } |
141 | } | 143 | } |
diff --git a/arch/x86/pci/legacy.c b/arch/x86/pci/legacy.c index 0db5eaf54560..8d460eaf524f 100644 --- a/arch/x86/pci/legacy.c +++ b/arch/x86/pci/legacy.c | |||
@@ -11,28 +11,14 @@ | |||
11 | */ | 11 | */ |
12 | static void __devinit pcibios_fixup_peer_bridges(void) | 12 | static void __devinit pcibios_fixup_peer_bridges(void) |
13 | { | 13 | { |
14 | int n, devfn; | 14 | int n; |
15 | long node; | ||
16 | 15 | ||
17 | if (pcibios_last_bus <= 0 || pcibios_last_bus > 0xff) | 16 | if (pcibios_last_bus <= 0 || pcibios_last_bus > 0xff) |
18 | return; | 17 | return; |
19 | DBG("PCI: Peer bridge fixup\n"); | 18 | DBG("PCI: Peer bridge fixup\n"); |
20 | 19 | ||
21 | for (n=0; n <= pcibios_last_bus; n++) { | 20 | for (n=0; n <= pcibios_last_bus; n++) |
22 | u32 l; | 21 | pcibios_scan_specific_bus(n); |
23 | if (pci_find_bus(0, n)) | ||
24 | continue; | ||
25 | node = get_mp_bus_to_node(n); | ||
26 | for (devfn = 0; devfn < 256; devfn += 8) { | ||
27 | if (!raw_pci_read(0, n, devfn, PCI_VENDOR_ID, 2, &l) && | ||
28 | l != 0x0000 && l != 0xffff) { | ||
29 | DBG("Found device at %02x:%02x [%04x]\n", n, devfn, l); | ||
30 | printk(KERN_INFO "PCI: Discovered peer bus %02x\n", n); | ||
31 | pci_scan_bus_on_node(n, &pci_root_ops, node); | ||
32 | break; | ||
33 | } | ||
34 | } | ||
35 | } | ||
36 | } | 22 | } |
37 | 23 | ||
38 | int __init pci_legacy_init(void) | 24 | int __init pci_legacy_init(void) |
@@ -50,6 +36,28 @@ int __init pci_legacy_init(void) | |||
50 | return 0; | 36 | return 0; |
51 | } | 37 | } |
52 | 38 | ||
39 | void pcibios_scan_specific_bus(int busn) | ||
40 | { | ||
41 | int devfn; | ||
42 | long node; | ||
43 | u32 l; | ||
44 | |||
45 | if (pci_find_bus(0, busn)) | ||
46 | return; | ||
47 | |||
48 | node = get_mp_bus_to_node(busn); | ||
49 | for (devfn = 0; devfn < 256; devfn += 8) { | ||
50 | if (!raw_pci_read(0, busn, devfn, PCI_VENDOR_ID, 2, &l) && | ||
51 | l != 0x0000 && l != 0xffff) { | ||
52 | DBG("Found device at %02x:%02x [%04x]\n", busn, devfn, l); | ||
53 | printk(KERN_INFO "PCI: Discovered peer bus %02x\n", busn); | ||
54 | pci_scan_bus_on_node(busn, &pci_root_ops, node); | ||
55 | return; | ||
56 | } | ||
57 | } | ||
58 | } | ||
59 | EXPORT_SYMBOL_GPL(pcibios_scan_specific_bus); | ||
60 | |||
53 | int __init pci_subsys_init(void) | 61 | int __init pci_subsys_init(void) |
54 | { | 62 | { |
55 | /* | 63 | /* |
diff --git a/arch/x86/power/cpu.c b/arch/x86/power/cpu.c index 0a979f3e5b8a..1290ba54b350 100644 --- a/arch/x86/power/cpu.c +++ b/arch/x86/power/cpu.c | |||
@@ -105,6 +105,8 @@ static void __save_processor_state(struct saved_context *ctxt) | |||
105 | ctxt->cr4 = read_cr4(); | 105 | ctxt->cr4 = read_cr4(); |
106 | ctxt->cr8 = read_cr8(); | 106 | ctxt->cr8 = read_cr8(); |
107 | #endif | 107 | #endif |
108 | ctxt->misc_enable_saved = !rdmsrl_safe(MSR_IA32_MISC_ENABLE, | ||
109 | &ctxt->misc_enable); | ||
108 | } | 110 | } |
109 | 111 | ||
110 | /* Needed by apm.c */ | 112 | /* Needed by apm.c */ |
@@ -152,6 +154,8 @@ static void fix_processor_context(void) | |||
152 | */ | 154 | */ |
153 | static void __restore_processor_state(struct saved_context *ctxt) | 155 | static void __restore_processor_state(struct saved_context *ctxt) |
154 | { | 156 | { |
157 | if (ctxt->misc_enable_saved) | ||
158 | wrmsrl(MSR_IA32_MISC_ENABLE, ctxt->misc_enable); | ||
155 | /* | 159 | /* |
156 | * control registers | 160 | * control registers |
157 | */ | 161 | */ |
diff --git a/arch/x86/xen/suspend.c b/arch/x86/xen/suspend.c index 987267f79bf5..a9c661108034 100644 --- a/arch/x86/xen/suspend.c +++ b/arch/x86/xen/suspend.c | |||
@@ -60,6 +60,6 @@ static void xen_vcpu_notify_restore(void *data) | |||
60 | 60 | ||
61 | void xen_arch_resume(void) | 61 | void xen_arch_resume(void) |
62 | { | 62 | { |
63 | smp_call_function(xen_vcpu_notify_restore, | 63 | on_each_cpu(xen_vcpu_notify_restore, |
64 | (void *)CLOCK_EVT_NOTIFY_RESUME, 1); | 64 | (void *)CLOCK_EVT_NOTIFY_RESUME, 1); |
65 | } | 65 | } |
diff --git a/arch/xtensa/mm/fault.c b/arch/xtensa/mm/fault.c index bc0733359a88..e367e3026436 100644 --- a/arch/xtensa/mm/fault.c +++ b/arch/xtensa/mm/fault.c | |||
@@ -105,7 +105,6 @@ good_area: | |||
105 | * make sure we exit gracefully rather than endlessly redo | 105 | * make sure we exit gracefully rather than endlessly redo |
106 | * the fault. | 106 | * the fault. |
107 | */ | 107 | */ |
108 | survive: | ||
109 | fault = handle_mm_fault(mm, vma, address, is_write ? FAULT_FLAG_WRITE : 0); | 108 | fault = handle_mm_fault(mm, vma, address, is_write ? FAULT_FLAG_WRITE : 0); |
110 | if (unlikely(fault & VM_FAULT_ERROR)) { | 109 | if (unlikely(fault & VM_FAULT_ERROR)) { |
111 | if (fault & VM_FAULT_OOM) | 110 | if (fault & VM_FAULT_OOM) |
@@ -146,15 +145,10 @@ bad_area: | |||
146 | */ | 145 | */ |
147 | out_of_memory: | 146 | out_of_memory: |
148 | up_read(&mm->mmap_sem); | 147 | up_read(&mm->mmap_sem); |
149 | if (is_global_init(current)) { | 148 | if (!user_mode(regs)) |
150 | yield(); | 149 | bad_page_fault(regs, address, SIGKILL); |
151 | down_read(&mm->mmap_sem); | 150 | else |
152 | goto survive; | 151 | pagefault_out_of_memory(); |
153 | } | ||
154 | printk("VM: killing process %s\n", current->comm); | ||
155 | if (user_mode(regs)) | ||
156 | do_group_exit(SIGKILL); | ||
157 | bad_page_fault(regs, address, SIGKILL); | ||
158 | return; | 152 | return; |
159 | 153 | ||
160 | do_sigbus: | 154 | do_sigbus: |