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: |
