diff options
Diffstat (limited to 'arch/mips')
86 files changed, 882 insertions, 818 deletions
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 705a7a9170f3..fd7620f025fa 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | config MIPS | 1 | config MIPS |
| 2 | bool | 2 | bool |
| 3 | default y | 3 | default y |
| 4 | select HAVE_GENERIC_DMA_COHERENT | ||
| 4 | select HAVE_IDE | 5 | select HAVE_IDE |
| 5 | select HAVE_OPROFILE | 6 | select HAVE_OPROFILE |
| 6 | select HAVE_ARCH_KGDB | 7 | select HAVE_ARCH_KGDB |
| @@ -357,7 +358,14 @@ config SGI_IP22 | |||
| 357 | select SWAP_IO_SPACE | 358 | select SWAP_IO_SPACE |
| 358 | select SYS_HAS_CPU_R4X00 | 359 | select SYS_HAS_CPU_R4X00 |
| 359 | select SYS_HAS_CPU_R5000 | 360 | select SYS_HAS_CPU_R5000 |
| 360 | select SYS_HAS_EARLY_PRINTK | 361 | # |
| 362 | # Disable EARLY_PRINTK for now since it leads to overwritten prom | ||
| 363 | # memory during early boot on some machines. | ||
| 364 | # | ||
| 365 | # See http://www.linux-mips.org/cgi-bin/mesg.cgi?a=linux-mips&i=20091119164009.GA15038%40deprecation.cyrius.com | ||
| 366 | # for a more details discussion | ||
| 367 | # | ||
| 368 | # select SYS_HAS_EARLY_PRINTK | ||
| 361 | select SYS_SUPPORTS_32BIT_KERNEL | 369 | select SYS_SUPPORTS_32BIT_KERNEL |
| 362 | select SYS_SUPPORTS_64BIT_KERNEL | 370 | select SYS_SUPPORTS_64BIT_KERNEL |
| 363 | select SYS_SUPPORTS_BIG_ENDIAN | 371 | select SYS_SUPPORTS_BIG_ENDIAN |
| @@ -409,7 +417,14 @@ config SGI_IP28 | |||
| 409 | select SGI_HAS_ZILOG | 417 | select SGI_HAS_ZILOG |
| 410 | select SWAP_IO_SPACE | 418 | select SWAP_IO_SPACE |
| 411 | select SYS_HAS_CPU_R10000 | 419 | select SYS_HAS_CPU_R10000 |
| 412 | select SYS_HAS_EARLY_PRINTK | 420 | # |
| 421 | # Disable EARLY_PRINTK for now since it leads to overwritten prom | ||
| 422 | # memory during early boot on some machines. | ||
| 423 | # | ||
| 424 | # See http://www.linux-mips.org/cgi-bin/mesg.cgi?a=linux-mips&i=20091119164009.GA15038%40deprecation.cyrius.com | ||
| 425 | # for a more details discussion | ||
| 426 | # | ||
| 427 | # select SYS_HAS_EARLY_PRINTK | ||
| 413 | select SYS_SUPPORTS_64BIT_KERNEL | 428 | select SYS_SUPPORTS_64BIT_KERNEL |
| 414 | select SYS_SUPPORTS_BIG_ENDIAN | 429 | select SYS_SUPPORTS_BIG_ENDIAN |
| 415 | help | 430 | help |
| @@ -1012,9 +1027,9 @@ config BOOT_ELF32 | |||
| 1012 | 1027 | ||
| 1013 | config MIPS_L1_CACHE_SHIFT | 1028 | config MIPS_L1_CACHE_SHIFT |
| 1014 | int | 1029 | int |
| 1015 | default "4" if MACH_DECSTATION || MIKROTIK_RB532 | 1030 | default "4" if MACH_DECSTATION || MIKROTIK_RB532 || PMC_MSP4200_EVAL |
| 1031 | default "6" if MIPS_CPU_SCACHE | ||
| 1016 | default "7" if SGI_IP22 || SGI_IP27 || SGI_IP28 || SNI_RM || CPU_CAVIUM_OCTEON | 1032 | default "7" if SGI_IP22 || SGI_IP27 || SGI_IP28 || SNI_RM || CPU_CAVIUM_OCTEON |
| 1017 | default "4" if PMC_MSP4200_EVAL | ||
| 1018 | default "5" | 1033 | default "5" |
| 1019 | 1034 | ||
| 1020 | config HAVE_STD_PC_SERIAL_PORT | 1035 | config HAVE_STD_PC_SERIAL_PORT |
| @@ -1438,6 +1453,7 @@ choice | |||
| 1438 | 1453 | ||
| 1439 | config PAGE_SIZE_4KB | 1454 | config PAGE_SIZE_4KB |
| 1440 | bool "4kB" | 1455 | bool "4kB" |
| 1456 | depends on !CPU_LOONGSON2 | ||
| 1441 | help | 1457 | help |
| 1442 | This option select the standard 4kB Linux page size. On some | 1458 | This option select the standard 4kB Linux page size. On some |
| 1443 | R3000-family processors this is the only available page size. Using | 1459 | R3000-family processors this is the only available page size. Using |
| @@ -1762,7 +1778,7 @@ config SYS_SUPPORTS_SMARTMIPS | |||
| 1762 | 1778 | ||
| 1763 | config ARCH_FLATMEM_ENABLE | 1779 | config ARCH_FLATMEM_ENABLE |
| 1764 | def_bool y | 1780 | def_bool y |
| 1765 | depends on !NUMA | 1781 | depends on !NUMA && !CPU_LOONGSON2 |
| 1766 | 1782 | ||
| 1767 | config ARCH_DISCONTIGMEM_ENABLE | 1783 | config ARCH_DISCONTIGMEM_ENABLE |
| 1768 | bool | 1784 | bool |
diff --git a/arch/mips/alchemy/common/irq.c b/arch/mips/alchemy/common/irq.c index c88c821b4c36..d670928afcfd 100644 --- a/arch/mips/alchemy/common/irq.c +++ b/arch/mips/alchemy/common/irq.c | |||
| @@ -354,6 +354,28 @@ static void au1x_ic1_ack(unsigned int irq_nr) | |||
| 354 | au_sync(); | 354 | au_sync(); |
| 355 | } | 355 | } |
| 356 | 356 | ||
| 357 | static void au1x_ic0_maskack(unsigned int irq_nr) | ||
| 358 | { | ||
| 359 | unsigned int bit = irq_nr - AU1000_INTC0_INT_BASE; | ||
| 360 | |||
| 361 | au_writel(1 << bit, IC0_WAKECLR); | ||
| 362 | au_writel(1 << bit, IC0_MASKCLR); | ||
| 363 | au_writel(1 << bit, IC0_RISINGCLR); | ||
| 364 | au_writel(1 << bit, IC0_FALLINGCLR); | ||
| 365 | au_sync(); | ||
| 366 | } | ||
| 367 | |||
| 368 | static void au1x_ic1_maskack(unsigned int irq_nr) | ||
| 369 | { | ||
| 370 | unsigned int bit = irq_nr - AU1000_INTC1_INT_BASE; | ||
| 371 | |||
| 372 | au_writel(1 << bit, IC1_WAKECLR); | ||
| 373 | au_writel(1 << bit, IC1_MASKCLR); | ||
| 374 | au_writel(1 << bit, IC1_RISINGCLR); | ||
| 375 | au_writel(1 << bit, IC1_FALLINGCLR); | ||
| 376 | au_sync(); | ||
| 377 | } | ||
| 378 | |||
| 357 | static int au1x_ic1_setwake(unsigned int irq, unsigned int on) | 379 | static int au1x_ic1_setwake(unsigned int irq, unsigned int on) |
| 358 | { | 380 | { |
| 359 | unsigned int bit = irq - AU1000_INTC1_INT_BASE; | 381 | unsigned int bit = irq - AU1000_INTC1_INT_BASE; |
| @@ -379,25 +401,21 @@ static int au1x_ic1_setwake(unsigned int irq, unsigned int on) | |||
| 379 | /* | 401 | /* |
| 380 | * irq_chips for both ICs; this way the mask handlers can be | 402 | * irq_chips for both ICs; this way the mask handlers can be |
| 381 | * as short as possible. | 403 | * as short as possible. |
| 382 | * | ||
| 383 | * NOTE: the ->ack() callback is used by the handle_edge_irq | ||
| 384 | * flowhandler only, the ->mask_ack() one by handle_level_irq, | ||
| 385 | * so no need for an irq_chip for each type of irq (level/edge). | ||
| 386 | */ | 404 | */ |
| 387 | static struct irq_chip au1x_ic0_chip = { | 405 | static struct irq_chip au1x_ic0_chip = { |
| 388 | .name = "Alchemy-IC0", | 406 | .name = "Alchemy-IC0", |
| 389 | .ack = au1x_ic0_ack, /* edge */ | 407 | .ack = au1x_ic0_ack, |
| 390 | .mask = au1x_ic0_mask, | 408 | .mask = au1x_ic0_mask, |
| 391 | .mask_ack = au1x_ic0_mask, /* level */ | 409 | .mask_ack = au1x_ic0_maskack, |
| 392 | .unmask = au1x_ic0_unmask, | 410 | .unmask = au1x_ic0_unmask, |
| 393 | .set_type = au1x_ic_settype, | 411 | .set_type = au1x_ic_settype, |
| 394 | }; | 412 | }; |
| 395 | 413 | ||
| 396 | static struct irq_chip au1x_ic1_chip = { | 414 | static struct irq_chip au1x_ic1_chip = { |
| 397 | .name = "Alchemy-IC1", | 415 | .name = "Alchemy-IC1", |
| 398 | .ack = au1x_ic1_ack, /* edge */ | 416 | .ack = au1x_ic1_ack, |
| 399 | .mask = au1x_ic1_mask, | 417 | .mask = au1x_ic1_mask, |
| 400 | .mask_ack = au1x_ic1_mask, /* level */ | 418 | .mask_ack = au1x_ic1_maskack, |
| 401 | .unmask = au1x_ic1_unmask, | 419 | .unmask = au1x_ic1_unmask, |
| 402 | .set_type = au1x_ic_settype, | 420 | .set_type = au1x_ic_settype, |
| 403 | .set_wake = au1x_ic1_setwake, | 421 | .set_wake = au1x_ic1_setwake, |
diff --git a/arch/mips/alchemy/mtx-1/board_setup.c b/arch/mips/alchemy/mtx-1/board_setup.c index cc32c69a74ad..45b61c9b82b9 100644 --- a/arch/mips/alchemy/mtx-1/board_setup.c +++ b/arch/mips/alchemy/mtx-1/board_setup.c | |||
| @@ -69,6 +69,7 @@ void __init board_setup(void) | |||
| 69 | #else | 69 | #else |
| 70 | au_writel(0xf, Au1500_PCI_CFG); | 70 | au_writel(0xf, Au1500_PCI_CFG); |
| 71 | #endif | 71 | #endif |
| 72 | board_pci_idsel = mtx1_pci_idsel; | ||
| 72 | #endif | 73 | #endif |
| 73 | 74 | ||
| 74 | /* Initialize sys_pinfunc */ | 75 | /* Initialize sys_pinfunc */ |
| @@ -85,8 +86,6 @@ void __init board_setup(void) | |||
| 85 | alchemy_gpio_direction_output(211, 1); /* green on */ | 86 | alchemy_gpio_direction_output(211, 1); /* green on */ |
| 86 | alchemy_gpio_direction_output(212, 0); /* red off */ | 87 | alchemy_gpio_direction_output(212, 0); /* red off */ |
| 87 | 88 | ||
| 88 | board_pci_idsel = mtx1_pci_idsel; | ||
| 89 | |||
| 90 | printk(KERN_INFO "4G Systems MTX-1 Board\n"); | 89 | printk(KERN_INFO "4G Systems MTX-1 Board\n"); |
| 91 | } | 90 | } |
| 92 | 91 | ||
diff --git a/arch/mips/ar7/platform.c b/arch/mips/ar7/platform.c index e2278c04459d..835f3f0319ca 100644 --- a/arch/mips/ar7/platform.c +++ b/arch/mips/ar7/platform.c | |||
| @@ -503,6 +503,7 @@ static int __init ar7_register_devices(void) | |||
| 503 | { | 503 | { |
| 504 | u16 chip_id; | 504 | u16 chip_id; |
| 505 | int res; | 505 | int res; |
| 506 | u32 *bootcr, val; | ||
| 506 | #ifdef CONFIG_SERIAL_8250 | 507 | #ifdef CONFIG_SERIAL_8250 |
| 507 | static struct uart_port uart_port[2]; | 508 | static struct uart_port uart_port[2]; |
| 508 | 509 | ||
| @@ -595,7 +596,13 @@ static int __init ar7_register_devices(void) | |||
| 595 | 596 | ||
| 596 | ar7_wdt_res.end = ar7_wdt_res.start + 0x20; | 597 | ar7_wdt_res.end = ar7_wdt_res.start + 0x20; |
| 597 | 598 | ||
| 598 | res = platform_device_register(&ar7_wdt); | 599 | bootcr = (u32 *)ioremap_nocache(AR7_REGS_DCL, 4); |
| 600 | val = *bootcr; | ||
| 601 | iounmap(bootcr); | ||
| 602 | |||
| 603 | /* Register watchdog only if enabled in hardware */ | ||
| 604 | if (val & AR7_WDT_HW_ENA) | ||
| 605 | res = platform_device_register(&ar7_wdt); | ||
| 599 | 606 | ||
| 600 | return res; | 607 | return res; |
| 601 | } | 608 | } |
diff --git a/arch/mips/bcm47xx/prom.c b/arch/mips/bcm47xx/prom.c index 079e33d52783..fb284c3b2cff 100644 --- a/arch/mips/bcm47xx/prom.c +++ b/arch/mips/bcm47xx/prom.c | |||
| @@ -100,7 +100,7 @@ static __init void prom_init_console(void) | |||
| 100 | 100 | ||
| 101 | static __init void prom_init_cmdline(void) | 101 | static __init void prom_init_cmdline(void) |
| 102 | { | 102 | { |
| 103 | char buf[CL_SIZE]; | 103 | static char buf[CL_SIZE] __initdata; |
| 104 | 104 | ||
| 105 | /* Get the kernel command line from CFE */ | 105 | /* Get the kernel command line from CFE */ |
| 106 | if (cfe_getenv("LINUX_CMDLINE", buf, CL_SIZE) >= 0) { | 106 | if (cfe_getenv("LINUX_CMDLINE", buf, CL_SIZE) >= 0) { |
diff --git a/arch/mips/bcm63xx/Makefile b/arch/mips/bcm63xx/Makefile index c146d1ededed..00064b660809 100644 --- a/arch/mips/bcm63xx/Makefile +++ b/arch/mips/bcm63xx/Makefile | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | obj-y += clk.o cpu.o cs.o gpio.o irq.o prom.o setup.o timer.o \ | 1 | obj-y += clk.o cpu.o cs.o gpio.o irq.o prom.o setup.o timer.o \ |
| 2 | dev-dsp.o dev-enet.o dev-pcmcia.o dev-uart.o | 2 | dev-dsp.o dev-enet.o dev-pcmcia.o dev-uart.o dev-wdt.o |
| 3 | obj-$(CONFIG_EARLY_PRINTK) += early_printk.o | 3 | obj-$(CONFIG_EARLY_PRINTK) += early_printk.o |
| 4 | 4 | ||
| 5 | obj-y += boards/ | 5 | obj-y += boards/ |
diff --git a/arch/mips/bcm63xx/boards/board_bcm963xx.c b/arch/mips/bcm63xx/boards/board_bcm963xx.c index 78e155d21be6..05a35cf5963d 100644 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c | |||
| @@ -24,7 +24,6 @@ | |||
| 24 | #include <bcm63xx_dev_enet.h> | 24 | #include <bcm63xx_dev_enet.h> |
| 25 | #include <bcm63xx_dev_dsp.h> | 25 | #include <bcm63xx_dev_dsp.h> |
| 26 | #include <bcm63xx_dev_pcmcia.h> | 26 | #include <bcm63xx_dev_pcmcia.h> |
| 27 | #include <bcm63xx_dev_uart.h> | ||
| 28 | #include <board_bcm963xx.h> | 27 | #include <board_bcm963xx.h> |
| 29 | 28 | ||
| 30 | #define PFX "board_bcm963xx: " | 29 | #define PFX "board_bcm963xx: " |
| @@ -794,8 +793,6 @@ int __init board_register_devices(void) | |||
| 794 | { | 793 | { |
| 795 | u32 val; | 794 | u32 val; |
| 796 | 795 | ||
| 797 | bcm63xx_uart_register(); | ||
| 798 | |||
| 799 | if (board.has_pccard) | 796 | if (board.has_pccard) |
| 800 | bcm63xx_pcmcia_register(); | 797 | bcm63xx_pcmcia_register(); |
| 801 | 798 | ||
diff --git a/arch/mips/bcm63xx/cpu.c b/arch/mips/bcm63xx/cpu.c index 6dc43f0483e8..70378bb5e3f9 100644 --- a/arch/mips/bcm63xx/cpu.c +++ b/arch/mips/bcm63xx/cpu.c | |||
| @@ -10,6 +10,7 @@ | |||
| 10 | #include <linux/kernel.h> | 10 | #include <linux/kernel.h> |
| 11 | #include <linux/module.h> | 11 | #include <linux/module.h> |
| 12 | #include <linux/cpu.h> | 12 | #include <linux/cpu.h> |
| 13 | #include <asm/cpu-info.h> | ||
| 13 | #include <bcm63xx_cpu.h> | 14 | #include <bcm63xx_cpu.h> |
| 14 | #include <bcm63xx_regs.h> | 15 | #include <bcm63xx_regs.h> |
| 15 | #include <bcm63xx_io.h> | 16 | #include <bcm63xx_io.h> |
| @@ -284,6 +285,7 @@ void __init bcm63xx_cpu_init(void) | |||
| 284 | { | 285 | { |
| 285 | unsigned int tmp, expected_cpu_id; | 286 | unsigned int tmp, expected_cpu_id; |
| 286 | struct cpuinfo_mips *c = ¤t_cpu_data; | 287 | struct cpuinfo_mips *c = ¤t_cpu_data; |
| 288 | unsigned int cpu = smp_processor_id(); | ||
| 287 | 289 | ||
| 288 | /* soc registers location depends on cpu type */ | 290 | /* soc registers location depends on cpu type */ |
| 289 | expected_cpu_id = 0; | 291 | expected_cpu_id = 0; |
| @@ -293,6 +295,7 @@ void __init bcm63xx_cpu_init(void) | |||
| 293 | * BCM6338 as the same PrId as BCM3302 see arch/mips/kernel/cpu-probe.c | 295 | * BCM6338 as the same PrId as BCM3302 see arch/mips/kernel/cpu-probe.c |
| 294 | */ | 296 | */ |
| 295 | case CPU_BCM3302: | 297 | case CPU_BCM3302: |
| 298 | __cpu_name[cpu] = "Broadcom BCM6338"; | ||
| 296 | expected_cpu_id = BCM6338_CPU_ID; | 299 | expected_cpu_id = BCM6338_CPU_ID; |
| 297 | bcm63xx_regs_base = bcm96338_regs_base; | 300 | bcm63xx_regs_base = bcm96338_regs_base; |
| 298 | bcm63xx_irqs = bcm96338_irqs; | 301 | bcm63xx_irqs = bcm96338_irqs; |
diff --git a/arch/mips/bcm63xx/dev-uart.c b/arch/mips/bcm63xx/dev-uart.c index 5f3d89c4a988..b0519461ad9b 100644 --- a/arch/mips/bcm63xx/dev-uart.c +++ b/arch/mips/bcm63xx/dev-uart.c | |||
| @@ -10,7 +10,6 @@ | |||
| 10 | #include <linux/kernel.h> | 10 | #include <linux/kernel.h> |
| 11 | #include <linux/platform_device.h> | 11 | #include <linux/platform_device.h> |
| 12 | #include <bcm63xx_cpu.h> | 12 | #include <bcm63xx_cpu.h> |
| 13 | #include <bcm63xx_dev_uart.h> | ||
| 14 | 13 | ||
| 15 | static struct resource uart_resources[] = { | 14 | static struct resource uart_resources[] = { |
| 16 | { | 15 | { |
| @@ -39,3 +38,4 @@ int __init bcm63xx_uart_register(void) | |||
| 39 | uart_resources[1].start = bcm63xx_get_irq_number(IRQ_UART0); | 38 | uart_resources[1].start = bcm63xx_get_irq_number(IRQ_UART0); |
| 40 | return platform_device_register(&bcm63xx_uart_device); | 39 | return platform_device_register(&bcm63xx_uart_device); |
| 41 | } | 40 | } |
| 41 | arch_initcall(bcm63xx_uart_register); | ||
diff --git a/arch/mips/bcm63xx/dev-wdt.c b/arch/mips/bcm63xx/dev-wdt.c new file mode 100644 index 000000000000..3e6c716a4c11 --- /dev/null +++ b/arch/mips/bcm63xx/dev-wdt.c | |||
| @@ -0,0 +1,37 @@ | |||
| 1 | /* | ||
| 2 | * This file is subject to the terms and conditions of the GNU General Public | ||
| 3 | * License. See the file "COPYING" in the main directory of this archive | ||
| 4 | * for more details. | ||
| 5 | * | ||
| 6 | * Copyright (C) 2008 Florian Fainelli <florian@openwrt.org> | ||
| 7 | */ | ||
| 8 | |||
| 9 | #include <linux/init.h> | ||
| 10 | #include <linux/kernel.h> | ||
| 11 | #include <linux/platform_device.h> | ||
| 12 | #include <bcm63xx_cpu.h> | ||
| 13 | |||
| 14 | static struct resource wdt_resources[] = { | ||
| 15 | { | ||
| 16 | .start = -1, /* filled at runtime */ | ||
| 17 | .end = -1, /* filled at runtime */ | ||
| 18 | .flags = IORESOURCE_MEM, | ||
| 19 | }, | ||
| 20 | }; | ||
| 21 | |||
| 22 | static struct platform_device bcm63xx_wdt_device = { | ||
| 23 | .name = "bcm63xx-wdt", | ||
| 24 | .id = 0, | ||
| 25 | .num_resources = ARRAY_SIZE(wdt_resources), | ||
| 26 | .resource = wdt_resources, | ||
| 27 | }; | ||
| 28 | |||
| 29 | int __init bcm63xx_wdt_register(void) | ||
| 30 | { | ||
| 31 | wdt_resources[0].start = bcm63xx_regset_address(RSET_WDT); | ||
| 32 | wdt_resources[0].end = wdt_resources[0].start; | ||
| 33 | wdt_resources[0].end += RSET_WDT_SIZE - 1; | ||
| 34 | |||
| 35 | return platform_device_register(&bcm63xx_wdt_device); | ||
| 36 | } | ||
| 37 | arch_initcall(bcm63xx_wdt_register); | ||
diff --git a/arch/mips/bcm63xx/setup.c b/arch/mips/bcm63xx/setup.c index b18a0ca926fa..d0056598fbfc 100644 --- a/arch/mips/bcm63xx/setup.c +++ b/arch/mips/bcm63xx/setup.c | |||
| @@ -75,7 +75,9 @@ void bcm63xx_machine_reboot(void) | |||
| 75 | bcm6348_a1_reboot(); | 75 | bcm6348_a1_reboot(); |
| 76 | 76 | ||
| 77 | printk(KERN_INFO "triggering watchdog soft-reset...\n"); | 77 | printk(KERN_INFO "triggering watchdog soft-reset...\n"); |
| 78 | bcm_perf_writel(SYS_PLL_SOFT_RESET, PERF_SYS_PLL_CTL_REG); | 78 | reg = bcm_perf_readl(PERF_SYS_PLL_CTL_REG); |
| 79 | reg |= SYS_PLL_SOFT_RESET; | ||
| 80 | bcm_perf_writel(reg, PERF_SYS_PLL_CTL_REG); | ||
| 79 | while (1) | 81 | while (1) |
| 80 | ; | 82 | ; |
| 81 | } | 83 | } |
diff --git a/arch/mips/cavium-octeon/octeon-irq.c b/arch/mips/cavium-octeon/octeon-irq.c index 384f1842bfb1..6f2acf09328d 100644 --- a/arch/mips/cavium-octeon/octeon-irq.c +++ b/arch/mips/cavium-octeon/octeon-irq.c | |||
| @@ -17,6 +17,15 @@ DEFINE_RWLOCK(octeon_irq_ciu0_rwlock); | |||
| 17 | DEFINE_RWLOCK(octeon_irq_ciu1_rwlock); | 17 | DEFINE_RWLOCK(octeon_irq_ciu1_rwlock); |
| 18 | DEFINE_SPINLOCK(octeon_irq_msi_lock); | 18 | DEFINE_SPINLOCK(octeon_irq_msi_lock); |
| 19 | 19 | ||
| 20 | static int octeon_coreid_for_cpu(int cpu) | ||
| 21 | { | ||
| 22 | #ifdef CONFIG_SMP | ||
| 23 | return cpu_logical_map(cpu); | ||
| 24 | #else | ||
| 25 | return cvmx_get_core_num(); | ||
| 26 | #endif | ||
| 27 | } | ||
| 28 | |||
| 20 | static void octeon_irq_core_ack(unsigned int irq) | 29 | static void octeon_irq_core_ack(unsigned int irq) |
| 21 | { | 30 | { |
| 22 | unsigned int bit = irq - OCTEON_IRQ_SW0; | 31 | unsigned int bit = irq - OCTEON_IRQ_SW0; |
| @@ -152,11 +161,10 @@ static void octeon_irq_ciu0_disable(unsigned int irq) | |||
| 152 | int bit = irq - OCTEON_IRQ_WORKQ0; /* Bit 0-63 of EN0 */ | 161 | int bit = irq - OCTEON_IRQ_WORKQ0; /* Bit 0-63 of EN0 */ |
| 153 | unsigned long flags; | 162 | unsigned long flags; |
| 154 | uint64_t en0; | 163 | uint64_t en0; |
| 155 | #ifdef CONFIG_SMP | ||
| 156 | int cpu; | 164 | int cpu; |
| 157 | write_lock_irqsave(&octeon_irq_ciu0_rwlock, flags); | 165 | write_lock_irqsave(&octeon_irq_ciu0_rwlock, flags); |
| 158 | for_each_online_cpu(cpu) { | 166 | for_each_online_cpu(cpu) { |
| 159 | int coreid = cpu_logical_map(cpu); | 167 | int coreid = octeon_coreid_for_cpu(cpu); |
| 160 | en0 = cvmx_read_csr(CVMX_CIU_INTX_EN0(coreid * 2)); | 168 | en0 = cvmx_read_csr(CVMX_CIU_INTX_EN0(coreid * 2)); |
| 161 | en0 &= ~(1ull << bit); | 169 | en0 &= ~(1ull << bit); |
| 162 | cvmx_write_csr(CVMX_CIU_INTX_EN0(coreid * 2), en0); | 170 | cvmx_write_csr(CVMX_CIU_INTX_EN0(coreid * 2), en0); |
| @@ -167,26 +175,57 @@ static void octeon_irq_ciu0_disable(unsigned int irq) | |||
| 167 | */ | 175 | */ |
| 168 | cvmx_read_csr(CVMX_CIU_INTX_EN0(cvmx_get_core_num() * 2)); | 176 | cvmx_read_csr(CVMX_CIU_INTX_EN0(cvmx_get_core_num() * 2)); |
| 169 | write_unlock_irqrestore(&octeon_irq_ciu0_rwlock, flags); | 177 | write_unlock_irqrestore(&octeon_irq_ciu0_rwlock, flags); |
| 170 | #else | 178 | } |
| 171 | int coreid = cvmx_get_core_num(); | 179 | |
| 172 | local_irq_save(flags); | 180 | /* |
| 173 | en0 = cvmx_read_csr(CVMX_CIU_INTX_EN0(coreid * 2)); | 181 | * Enable the irq on the current core for chips that have the EN*_W1{S,C} |
| 174 | en0 &= ~(1ull << bit); | 182 | * registers. |
| 175 | cvmx_write_csr(CVMX_CIU_INTX_EN0(coreid * 2), en0); | 183 | */ |
| 176 | cvmx_read_csr(CVMX_CIU_INTX_EN0(coreid * 2)); | 184 | static void octeon_irq_ciu0_enable_v2(unsigned int irq) |
| 177 | local_irq_restore(flags); | 185 | { |
| 178 | #endif | 186 | int index = cvmx_get_core_num() * 2; |
| 187 | u64 mask = 1ull << (irq - OCTEON_IRQ_WORKQ0); | ||
| 188 | |||
| 189 | cvmx_write_csr(CVMX_CIU_INTX_EN0_W1S(index), mask); | ||
| 190 | } | ||
| 191 | |||
| 192 | /* | ||
| 193 | * Disable the irq on the current core for chips that have the EN*_W1{S,C} | ||
| 194 | * registers. | ||
| 195 | */ | ||
| 196 | static void octeon_irq_ciu0_disable_v2(unsigned int irq) | ||
| 197 | { | ||
| 198 | int index = cvmx_get_core_num() * 2; | ||
| 199 | u64 mask = 1ull << (irq - OCTEON_IRQ_WORKQ0); | ||
| 200 | |||
| 201 | cvmx_write_csr(CVMX_CIU_INTX_EN0_W1C(index), mask); | ||
| 202 | } | ||
| 203 | |||
| 204 | /* | ||
| 205 | * Disable the irq on the all cores for chips that have the EN*_W1{S,C} | ||
| 206 | * registers. | ||
| 207 | */ | ||
| 208 | static void octeon_irq_ciu0_disable_all_v2(unsigned int irq) | ||
| 209 | { | ||
| 210 | u64 mask = 1ull << (irq - OCTEON_IRQ_WORKQ0); | ||
| 211 | int index; | ||
| 212 | int cpu; | ||
| 213 | for_each_online_cpu(cpu) { | ||
| 214 | index = octeon_coreid_for_cpu(cpu) * 2; | ||
| 215 | cvmx_write_csr(CVMX_CIU_INTX_EN0_W1C(index), mask); | ||
| 216 | } | ||
| 179 | } | 217 | } |
| 180 | 218 | ||
| 181 | #ifdef CONFIG_SMP | 219 | #ifdef CONFIG_SMP |
| 182 | static int octeon_irq_ciu0_set_affinity(unsigned int irq, const struct cpumask *dest) | 220 | static int octeon_irq_ciu0_set_affinity(unsigned int irq, const struct cpumask *dest) |
| 183 | { | 221 | { |
| 184 | int cpu; | 222 | int cpu; |
| 223 | unsigned long flags; | ||
| 185 | int bit = irq - OCTEON_IRQ_WORKQ0; /* Bit 0-63 of EN0 */ | 224 | int bit = irq - OCTEON_IRQ_WORKQ0; /* Bit 0-63 of EN0 */ |
| 186 | 225 | ||
| 187 | write_lock(&octeon_irq_ciu0_rwlock); | 226 | write_lock_irqsave(&octeon_irq_ciu0_rwlock, flags); |
| 188 | for_each_online_cpu(cpu) { | 227 | for_each_online_cpu(cpu) { |
| 189 | int coreid = cpu_logical_map(cpu); | 228 | int coreid = octeon_coreid_for_cpu(cpu); |
| 190 | uint64_t en0 = | 229 | uint64_t en0 = |
| 191 | cvmx_read_csr(CVMX_CIU_INTX_EN0(coreid * 2)); | 230 | cvmx_read_csr(CVMX_CIU_INTX_EN0(coreid * 2)); |
| 192 | if (cpumask_test_cpu(cpu, dest)) | 231 | if (cpumask_test_cpu(cpu, dest)) |
| @@ -200,11 +239,45 @@ static int octeon_irq_ciu0_set_affinity(unsigned int irq, const struct cpumask * | |||
| 200 | * of them are done. | 239 | * of them are done. |
| 201 | */ | 240 | */ |
| 202 | cvmx_read_csr(CVMX_CIU_INTX_EN0(cvmx_get_core_num() * 2)); | 241 | cvmx_read_csr(CVMX_CIU_INTX_EN0(cvmx_get_core_num() * 2)); |
| 203 | write_unlock(&octeon_irq_ciu0_rwlock); | 242 | write_unlock_irqrestore(&octeon_irq_ciu0_rwlock, flags); |
| 204 | 243 | ||
| 205 | return 0; | 244 | return 0; |
| 206 | } | 245 | } |
| 246 | |||
| 247 | /* | ||
| 248 | * Set affinity for the irq for chips that have the EN*_W1{S,C} | ||
| 249 | * registers. | ||
| 250 | */ | ||
| 251 | static int octeon_irq_ciu0_set_affinity_v2(unsigned int irq, | ||
| 252 | const struct cpumask *dest) | ||
| 253 | { | ||
| 254 | int cpu; | ||
| 255 | int index; | ||
| 256 | u64 mask = 1ull << (irq - OCTEON_IRQ_WORKQ0); | ||
| 257 | for_each_online_cpu(cpu) { | ||
| 258 | index = octeon_coreid_for_cpu(cpu) * 2; | ||
| 259 | if (cpumask_test_cpu(cpu, dest)) | ||
| 260 | cvmx_write_csr(CVMX_CIU_INTX_EN0_W1S(index), mask); | ||
| 261 | else | ||
| 262 | cvmx_write_csr(CVMX_CIU_INTX_EN0_W1C(index), mask); | ||
| 263 | } | ||
| 264 | return 0; | ||
| 265 | } | ||
| 266 | #endif | ||
| 267 | |||
| 268 | /* | ||
| 269 | * Newer octeon chips have support for lockless CIU operation. | ||
| 270 | */ | ||
| 271 | static struct irq_chip octeon_irq_chip_ciu0_v2 = { | ||
| 272 | .name = "CIU0", | ||
| 273 | .enable = octeon_irq_ciu0_enable_v2, | ||
| 274 | .disable = octeon_irq_ciu0_disable_all_v2, | ||
| 275 | .ack = octeon_irq_ciu0_disable_v2, | ||
| 276 | .eoi = octeon_irq_ciu0_enable_v2, | ||
| 277 | #ifdef CONFIG_SMP | ||
| 278 | .set_affinity = octeon_irq_ciu0_set_affinity_v2, | ||
| 207 | #endif | 279 | #endif |
| 280 | }; | ||
| 208 | 281 | ||
| 209 | static struct irq_chip octeon_irq_chip_ciu0 = { | 282 | static struct irq_chip octeon_irq_chip_ciu0 = { |
| 210 | .name = "CIU0", | 283 | .name = "CIU0", |
| @@ -269,11 +342,10 @@ static void octeon_irq_ciu1_disable(unsigned int irq) | |||
| 269 | int bit = irq - OCTEON_IRQ_WDOG0; /* Bit 0-63 of EN1 */ | 342 | int bit = irq - OCTEON_IRQ_WDOG0; /* Bit 0-63 of EN1 */ |
| 270 | unsigned long flags; | 343 | unsigned long flags; |
| 271 | uint64_t en1; | 344 | uint64_t en1; |
| 272 | #ifdef CONFIG_SMP | ||
| 273 | int cpu; | 345 | int cpu; |
| 274 | write_lock_irqsave(&octeon_irq_ciu1_rwlock, flags); | 346 | write_lock_irqsave(&octeon_irq_ciu1_rwlock, flags); |
| 275 | for_each_online_cpu(cpu) { | 347 | for_each_online_cpu(cpu) { |
| 276 | int coreid = cpu_logical_map(cpu); | 348 | int coreid = octeon_coreid_for_cpu(cpu); |
| 277 | en1 = cvmx_read_csr(CVMX_CIU_INTX_EN1(coreid * 2 + 1)); | 349 | en1 = cvmx_read_csr(CVMX_CIU_INTX_EN1(coreid * 2 + 1)); |
| 278 | en1 &= ~(1ull << bit); | 350 | en1 &= ~(1ull << bit); |
| 279 | cvmx_write_csr(CVMX_CIU_INTX_EN1(coreid * 2 + 1), en1); | 351 | cvmx_write_csr(CVMX_CIU_INTX_EN1(coreid * 2 + 1), en1); |
| @@ -284,26 +356,58 @@ static void octeon_irq_ciu1_disable(unsigned int irq) | |||
| 284 | */ | 356 | */ |
| 285 | cvmx_read_csr(CVMX_CIU_INTX_EN1(cvmx_get_core_num() * 2 + 1)); | 357 | cvmx_read_csr(CVMX_CIU_INTX_EN1(cvmx_get_core_num() * 2 + 1)); |
| 286 | write_unlock_irqrestore(&octeon_irq_ciu1_rwlock, flags); | 358 | write_unlock_irqrestore(&octeon_irq_ciu1_rwlock, flags); |
| 287 | #else | 359 | } |
| 288 | int coreid = cvmx_get_core_num(); | 360 | |
| 289 | local_irq_save(flags); | 361 | /* |
| 290 | en1 = cvmx_read_csr(CVMX_CIU_INTX_EN1(coreid * 2 + 1)); | 362 | * Enable the irq on the current core for chips that have the EN*_W1{S,C} |
| 291 | en1 &= ~(1ull << bit); | 363 | * registers. |
| 292 | cvmx_write_csr(CVMX_CIU_INTX_EN1(coreid * 2 + 1), en1); | 364 | */ |
| 293 | cvmx_read_csr(CVMX_CIU_INTX_EN1(coreid * 2 + 1)); | 365 | static void octeon_irq_ciu1_enable_v2(unsigned int irq) |
| 294 | local_irq_restore(flags); | 366 | { |
| 295 | #endif | 367 | int index = cvmx_get_core_num() * 2 + 1; |
| 368 | u64 mask = 1ull << (irq - OCTEON_IRQ_WDOG0); | ||
| 369 | |||
| 370 | cvmx_write_csr(CVMX_CIU_INTX_EN1_W1S(index), mask); | ||
| 371 | } | ||
| 372 | |||
| 373 | /* | ||
| 374 | * Disable the irq on the current core for chips that have the EN*_W1{S,C} | ||
| 375 | * registers. | ||
| 376 | */ | ||
| 377 | static void octeon_irq_ciu1_disable_v2(unsigned int irq) | ||
| 378 | { | ||
| 379 | int index = cvmx_get_core_num() * 2 + 1; | ||
| 380 | u64 mask = 1ull << (irq - OCTEON_IRQ_WDOG0); | ||
| 381 | |||
| 382 | cvmx_write_csr(CVMX_CIU_INTX_EN1_W1C(index), mask); | ||
| 383 | } | ||
| 384 | |||
| 385 | /* | ||
| 386 | * Disable the irq on the all cores for chips that have the EN*_W1{S,C} | ||
| 387 | * registers. | ||
| 388 | */ | ||
| 389 | static void octeon_irq_ciu1_disable_all_v2(unsigned int irq) | ||
| 390 | { | ||
| 391 | u64 mask = 1ull << (irq - OCTEON_IRQ_WDOG0); | ||
| 392 | int index; | ||
| 393 | int cpu; | ||
| 394 | for_each_online_cpu(cpu) { | ||
| 395 | index = octeon_coreid_for_cpu(cpu) * 2 + 1; | ||
| 396 | cvmx_write_csr(CVMX_CIU_INTX_EN1_W1C(index), mask); | ||
| 397 | } | ||
| 296 | } | 398 | } |
| 297 | 399 | ||
| 298 | #ifdef CONFIG_SMP | 400 | #ifdef CONFIG_SMP |
| 299 | static int octeon_irq_ciu1_set_affinity(unsigned int irq, const struct cpumask *dest) | 401 | static int octeon_irq_ciu1_set_affinity(unsigned int irq, |
| 402 | const struct cpumask *dest) | ||
| 300 | { | 403 | { |
| 301 | int cpu; | 404 | int cpu; |
| 405 | unsigned long flags; | ||
| 302 | int bit = irq - OCTEON_IRQ_WDOG0; /* Bit 0-63 of EN1 */ | 406 | int bit = irq - OCTEON_IRQ_WDOG0; /* Bit 0-63 of EN1 */ |
| 303 | 407 | ||
| 304 | write_lock(&octeon_irq_ciu1_rwlock); | 408 | write_lock_irqsave(&octeon_irq_ciu1_rwlock, flags); |
| 305 | for_each_online_cpu(cpu) { | 409 | for_each_online_cpu(cpu) { |
| 306 | int coreid = cpu_logical_map(cpu); | 410 | int coreid = octeon_coreid_for_cpu(cpu); |
| 307 | uint64_t en1 = | 411 | uint64_t en1 = |
| 308 | cvmx_read_csr(CVMX_CIU_INTX_EN1 | 412 | cvmx_read_csr(CVMX_CIU_INTX_EN1 |
| 309 | (coreid * 2 + 1)); | 413 | (coreid * 2 + 1)); |
| @@ -318,12 +422,46 @@ static int octeon_irq_ciu1_set_affinity(unsigned int irq, const struct cpumask * | |||
| 318 | * of them are done. | 422 | * of them are done. |
| 319 | */ | 423 | */ |
| 320 | cvmx_read_csr(CVMX_CIU_INTX_EN1(cvmx_get_core_num() * 2 + 1)); | 424 | cvmx_read_csr(CVMX_CIU_INTX_EN1(cvmx_get_core_num() * 2 + 1)); |
| 321 | write_unlock(&octeon_irq_ciu1_rwlock); | 425 | write_unlock_irqrestore(&octeon_irq_ciu1_rwlock, flags); |
| 426 | |||
| 427 | return 0; | ||
| 428 | } | ||
| 322 | 429 | ||
| 430 | /* | ||
| 431 | * Set affinity for the irq for chips that have the EN*_W1{S,C} | ||
| 432 | * registers. | ||
| 433 | */ | ||
| 434 | static int octeon_irq_ciu1_set_affinity_v2(unsigned int irq, | ||
| 435 | const struct cpumask *dest) | ||
| 436 | { | ||
| 437 | int cpu; | ||
| 438 | int index; | ||
| 439 | u64 mask = 1ull << (irq - OCTEON_IRQ_WDOG0); | ||
| 440 | for_each_online_cpu(cpu) { | ||
| 441 | index = octeon_coreid_for_cpu(cpu) * 2 + 1; | ||
| 442 | if (cpumask_test_cpu(cpu, dest)) | ||
| 443 | cvmx_write_csr(CVMX_CIU_INTX_EN1_W1S(index), mask); | ||
| 444 | else | ||
| 445 | cvmx_write_csr(CVMX_CIU_INTX_EN1_W1C(index), mask); | ||
| 446 | } | ||
| 323 | return 0; | 447 | return 0; |
| 324 | } | 448 | } |
| 325 | #endif | 449 | #endif |
| 326 | 450 | ||
| 451 | /* | ||
| 452 | * Newer octeon chips have support for lockless CIU operation. | ||
| 453 | */ | ||
| 454 | static struct irq_chip octeon_irq_chip_ciu1_v2 = { | ||
| 455 | .name = "CIU0", | ||
| 456 | .enable = octeon_irq_ciu1_enable_v2, | ||
| 457 | .disable = octeon_irq_ciu1_disable_all_v2, | ||
| 458 | .ack = octeon_irq_ciu1_disable_v2, | ||
| 459 | .eoi = octeon_irq_ciu1_enable_v2, | ||
| 460 | #ifdef CONFIG_SMP | ||
| 461 | .set_affinity = octeon_irq_ciu1_set_affinity_v2, | ||
| 462 | #endif | ||
| 463 | }; | ||
| 464 | |||
| 327 | static struct irq_chip octeon_irq_chip_ciu1 = { | 465 | static struct irq_chip octeon_irq_chip_ciu1 = { |
| 328 | .name = "CIU1", | 466 | .name = "CIU1", |
| 329 | .enable = octeon_irq_ciu1_enable, | 467 | .enable = octeon_irq_ciu1_enable, |
| @@ -420,6 +558,8 @@ static struct irq_chip octeon_irq_chip_msi = { | |||
| 420 | void __init arch_init_irq(void) | 558 | void __init arch_init_irq(void) |
| 421 | { | 559 | { |
| 422 | int irq; | 560 | int irq; |
| 561 | struct irq_chip *chip0; | ||
| 562 | struct irq_chip *chip1; | ||
| 423 | 563 | ||
| 424 | #ifdef CONFIG_SMP | 564 | #ifdef CONFIG_SMP |
| 425 | /* Set the default affinity to the boot cpu. */ | 565 | /* Set the default affinity to the boot cpu. */ |
| @@ -430,6 +570,16 @@ void __init arch_init_irq(void) | |||
| 430 | if (NR_IRQS < OCTEON_IRQ_LAST) | 570 | if (NR_IRQS < OCTEON_IRQ_LAST) |
| 431 | pr_err("octeon_irq_init: NR_IRQS is set too low\n"); | 571 | pr_err("octeon_irq_init: NR_IRQS is set too low\n"); |
| 432 | 572 | ||
| 573 | if (OCTEON_IS_MODEL(OCTEON_CN58XX_PASS2_X) || | ||
| 574 | OCTEON_IS_MODEL(OCTEON_CN56XX_PASS2_X) || | ||
| 575 | OCTEON_IS_MODEL(OCTEON_CN52XX_PASS2_X)) { | ||
| 576 | chip0 = &octeon_irq_chip_ciu0_v2; | ||
| 577 | chip1 = &octeon_irq_chip_ciu1_v2; | ||
| 578 | } else { | ||
| 579 | chip0 = &octeon_irq_chip_ciu0; | ||
| 580 | chip1 = &octeon_irq_chip_ciu1; | ||
| 581 | } | ||
| 582 | |||
| 433 | /* 0 - 15 reserved for i8259 master and slave controller. */ | 583 | /* 0 - 15 reserved for i8259 master and slave controller. */ |
| 434 | 584 | ||
| 435 | /* 17 - 23 Mips internal */ | 585 | /* 17 - 23 Mips internal */ |
| @@ -440,14 +590,12 @@ void __init arch_init_irq(void) | |||
| 440 | 590 | ||
| 441 | /* 24 - 87 CIU_INT_SUM0 */ | 591 | /* 24 - 87 CIU_INT_SUM0 */ |
| 442 | for (irq = OCTEON_IRQ_WORKQ0; irq <= OCTEON_IRQ_BOOTDMA; irq++) { | 592 | for (irq = OCTEON_IRQ_WORKQ0; irq <= OCTEON_IRQ_BOOTDMA; irq++) { |
| 443 | set_irq_chip_and_handler(irq, &octeon_irq_chip_ciu0, | 593 | set_irq_chip_and_handler(irq, chip0, handle_percpu_irq); |
| 444 | handle_percpu_irq); | ||
| 445 | } | 594 | } |
| 446 | 595 | ||
| 447 | /* 88 - 151 CIU_INT_SUM1 */ | 596 | /* 88 - 151 CIU_INT_SUM1 */ |
| 448 | for (irq = OCTEON_IRQ_WDOG0; irq <= OCTEON_IRQ_RESERVED151; irq++) { | 597 | for (irq = OCTEON_IRQ_WDOG0; irq <= OCTEON_IRQ_RESERVED151; irq++) { |
| 449 | set_irq_chip_and_handler(irq, &octeon_irq_chip_ciu1, | 598 | set_irq_chip_and_handler(irq, chip1, handle_percpu_irq); |
| 450 | handle_percpu_irq); | ||
| 451 | } | 599 | } |
| 452 | 600 | ||
| 453 | #ifdef CONFIG_PCI_MSI | 601 | #ifdef CONFIG_PCI_MSI |
| @@ -505,14 +653,10 @@ asmlinkage void plat_irq_dispatch(void) | |||
| 505 | #ifdef CONFIG_HOTPLUG_CPU | 653 | #ifdef CONFIG_HOTPLUG_CPU |
| 506 | static int is_irq_enabled_on_cpu(unsigned int irq, unsigned int cpu) | 654 | static int is_irq_enabled_on_cpu(unsigned int irq, unsigned int cpu) |
| 507 | { | 655 | { |
| 508 | unsigned int isset; | 656 | unsigned int isset; |
| 509 | #ifdef CONFIG_SMP | 657 | int coreid = octeon_coreid_for_cpu(cpu); |
| 510 | int coreid = cpu_logical_map(cpu); | ||
| 511 | #else | ||
| 512 | int coreid = cvmx_get_core_num(); | ||
| 513 | #endif | ||
| 514 | int bit = (irq < OCTEON_IRQ_WDOG0) ? | 658 | int bit = (irq < OCTEON_IRQ_WDOG0) ? |
| 515 | irq - OCTEON_IRQ_WORKQ0 : irq - OCTEON_IRQ_WDOG0; | 659 | irq - OCTEON_IRQ_WORKQ0 : irq - OCTEON_IRQ_WDOG0; |
| 516 | if (irq < 64) { | 660 | if (irq < 64) { |
| 517 | isset = (cvmx_read_csr(CVMX_CIU_INTX_EN0(coreid * 2)) & | 661 | isset = (cvmx_read_csr(CVMX_CIU_INTX_EN0(coreid * 2)) & |
| 518 | (1ull << bit)) >> bit; | 662 | (1ull << bit)) >> bit; |
diff --git a/arch/mips/cavium-octeon/smp.c b/arch/mips/cavium-octeon/smp.c index 32d51a31dc48..c198efdf583e 100644 --- a/arch/mips/cavium-octeon/smp.c +++ b/arch/mips/cavium-octeon/smp.c | |||
| @@ -65,11 +65,12 @@ void octeon_send_ipi_single(int cpu, unsigned int action) | |||
| 65 | cvmx_write_csr(CVMX_CIU_MBOX_SETX(coreid), action); | 65 | cvmx_write_csr(CVMX_CIU_MBOX_SETX(coreid), action); |
| 66 | } | 66 | } |
| 67 | 67 | ||
| 68 | static inline void octeon_send_ipi_mask(cpumask_t mask, unsigned int action) | 68 | static inline void octeon_send_ipi_mask(const struct cpumask *mask, |
| 69 | unsigned int action) | ||
| 69 | { | 70 | { |
| 70 | unsigned int i; | 71 | unsigned int i; |
| 71 | 72 | ||
| 72 | for_each_cpu_mask(i, mask) | 73 | for_each_cpu_mask(i, *mask) |
| 73 | octeon_send_ipi_single(i, action); | 74 | octeon_send_ipi_single(i, action); |
| 74 | } | 75 | } |
| 75 | 76 | ||
diff --git a/arch/mips/configs/rbtx49xx_defconfig b/arch/mips/configs/rbtx49xx_defconfig index c69813b8488c..6c6a19aebe1f 100644 --- a/arch/mips/configs/rbtx49xx_defconfig +++ b/arch/mips/configs/rbtx49xx_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.29-rc7 | 3 | # Linux kernel version: 2.6.32-rc6 |
| 4 | # Wed Mar 4 23:08:06 2009 | 4 | # Sun Nov 8 22:59:47 2009 |
| 5 | # | 5 | # |
| 6 | CONFIG_MIPS=y | 6 | CONFIG_MIPS=y |
| 7 | 7 | ||
| @@ -9,16 +9,18 @@ CONFIG_MIPS=y | |||
| 9 | # Machine selection | 9 | # Machine selection |
| 10 | # | 10 | # |
| 11 | # CONFIG_MACH_ALCHEMY is not set | 11 | # CONFIG_MACH_ALCHEMY is not set |
| 12 | # CONFIG_AR7 is not set | ||
| 12 | # CONFIG_BASLER_EXCITE is not set | 13 | # CONFIG_BASLER_EXCITE is not set |
| 13 | # CONFIG_BCM47XX is not set | 14 | # CONFIG_BCM47XX is not set |
| 15 | # CONFIG_BCM63XX is not set | ||
| 14 | # CONFIG_MIPS_COBALT is not set | 16 | # CONFIG_MIPS_COBALT is not set |
| 15 | # CONFIG_MACH_DECSTATION is not set | 17 | # CONFIG_MACH_DECSTATION is not set |
| 16 | # CONFIG_MACH_JAZZ is not set | 18 | # CONFIG_MACH_JAZZ is not set |
| 17 | # CONFIG_LASAT is not set | 19 | # CONFIG_LASAT is not set |
| 18 | # CONFIG_LEMOTE_FULONG is not set | 20 | # CONFIG_MACH_LOONGSON is not set |
| 19 | # CONFIG_MIPS_MALTA is not set | 21 | # CONFIG_MIPS_MALTA is not set |
| 20 | # CONFIG_MIPS_SIM is not set | 22 | # CONFIG_MIPS_SIM is not set |
| 21 | # CONFIG_MACH_EMMA is not set | 23 | # CONFIG_NEC_MARKEINS is not set |
| 22 | # CONFIG_MACH_VR41XX is not set | 24 | # CONFIG_MACH_VR41XX is not set |
| 23 | # CONFIG_NXP_STB220 is not set | 25 | # CONFIG_NXP_STB220 is not set |
| 24 | # CONFIG_NXP_STB225 is not set | 26 | # CONFIG_NXP_STB225 is not set |
| @@ -45,6 +47,7 @@ CONFIG_MACH_TX49XX=y | |||
| 45 | # CONFIG_WR_PPMC is not set | 47 | # CONFIG_WR_PPMC is not set |
| 46 | # CONFIG_CAVIUM_OCTEON_SIMULATOR is not set | 48 | # CONFIG_CAVIUM_OCTEON_SIMULATOR is not set |
| 47 | # CONFIG_CAVIUM_OCTEON_REFERENCE_BOARD is not set | 49 | # CONFIG_CAVIUM_OCTEON_REFERENCE_BOARD is not set |
| 50 | # CONFIG_ALCHEMY_GPIO_INDIRECT is not set | ||
| 48 | CONFIG_MACH_TXX9=y | 51 | CONFIG_MACH_TXX9=y |
| 49 | CONFIG_TOSHIBA_RBTX4927=y | 52 | CONFIG_TOSHIBA_RBTX4927=y |
| 50 | CONFIG_TOSHIBA_RBTX4938=y | 53 | CONFIG_TOSHIBA_RBTX4938=y |
| @@ -86,7 +89,6 @@ CONFIG_DMA_NONCOHERENT=y | |||
| 86 | CONFIG_DMA_NEED_PCI_MAP_STATE=y | 89 | CONFIG_DMA_NEED_PCI_MAP_STATE=y |
| 87 | CONFIG_EARLY_PRINTK=y | 90 | CONFIG_EARLY_PRINTK=y |
| 88 | CONFIG_SYS_HAS_EARLY_PRINTK=y | 91 | CONFIG_SYS_HAS_EARLY_PRINTK=y |
| 89 | # CONFIG_HOTPLUG_CPU is not set | ||
| 90 | # CONFIG_NO_IOPORT is not set | 92 | # CONFIG_NO_IOPORT is not set |
| 91 | CONFIG_GENERIC_GPIO=y | 93 | CONFIG_GENERIC_GPIO=y |
| 92 | CONFIG_CPU_BIG_ENDIAN=y | 94 | CONFIG_CPU_BIG_ENDIAN=y |
| @@ -101,7 +103,7 @@ CONFIG_MIPS_L1_CACHE_SHIFT=5 | |||
| 101 | # | 103 | # |
| 102 | # CPU selection | 104 | # CPU selection |
| 103 | # | 105 | # |
| 104 | # CONFIG_CPU_LOONGSON2 is not set | 106 | # CONFIG_CPU_LOONGSON2E is not set |
| 105 | # CONFIG_CPU_MIPS32_R1 is not set | 107 | # CONFIG_CPU_MIPS32_R1 is not set |
| 106 | # CONFIG_CPU_MIPS32_R2 is not set | 108 | # CONFIG_CPU_MIPS32_R2 is not set |
| 107 | # CONFIG_CPU_MIPS64_R1 is not set | 109 | # CONFIG_CPU_MIPS64_R1 is not set |
| @@ -137,6 +139,7 @@ CONFIG_32BIT=y | |||
| 137 | CONFIG_PAGE_SIZE_4KB=y | 139 | CONFIG_PAGE_SIZE_4KB=y |
| 138 | # CONFIG_PAGE_SIZE_8KB is not set | 140 | # CONFIG_PAGE_SIZE_8KB is not set |
| 139 | # CONFIG_PAGE_SIZE_16KB is not set | 141 | # CONFIG_PAGE_SIZE_16KB is not set |
| 142 | # CONFIG_PAGE_SIZE_32KB is not set | ||
| 140 | # CONFIG_PAGE_SIZE_64KB is not set | 143 | # CONFIG_PAGE_SIZE_64KB is not set |
| 141 | CONFIG_CPU_HAS_PREFETCH=y | 144 | CONFIG_CPU_HAS_PREFETCH=y |
| 142 | CONFIG_MIPS_MT_DISABLED=y | 145 | CONFIG_MIPS_MT_DISABLED=y |
| @@ -154,7 +157,10 @@ CONFIG_SPLIT_PTLOCK_CPUS=4 | |||
| 154 | # CONFIG_PHYS_ADDR_T_64BIT is not set | 157 | # CONFIG_PHYS_ADDR_T_64BIT is not set |
| 155 | CONFIG_ZONE_DMA_FLAG=0 | 158 | CONFIG_ZONE_DMA_FLAG=0 |
| 156 | CONFIG_VIRT_TO_BUS=y | 159 | CONFIG_VIRT_TO_BUS=y |
| 157 | CONFIG_UNEVICTABLE_LRU=y | 160 | CONFIG_HAVE_MLOCK=y |
| 161 | CONFIG_HAVE_MLOCKED_PAGE_BIT=y | ||
| 162 | # CONFIG_KSM is not set | ||
| 163 | CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 | ||
| 158 | CONFIG_TICK_ONESHOT=y | 164 | CONFIG_TICK_ONESHOT=y |
| 159 | CONFIG_NO_HZ=y | 165 | CONFIG_NO_HZ=y |
| 160 | CONFIG_HIGH_RES_TIMERS=y | 166 | CONFIG_HIGH_RES_TIMERS=y |
| @@ -175,6 +181,7 @@ CONFIG_PREEMPT_NONE=y | |||
| 175 | CONFIG_LOCKDEP_SUPPORT=y | 181 | CONFIG_LOCKDEP_SUPPORT=y |
| 176 | CONFIG_STACKTRACE_SUPPORT=y | 182 | CONFIG_STACKTRACE_SUPPORT=y |
| 177 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 183 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
| 184 | CONFIG_CONSTRUCTORS=y | ||
| 178 | 185 | ||
| 179 | # | 186 | # |
| 180 | # General setup | 187 | # General setup |
| @@ -194,11 +201,12 @@ CONFIG_SYSVIPC_SYSCTL=y | |||
| 194 | # | 201 | # |
| 195 | # RCU Subsystem | 202 | # RCU Subsystem |
| 196 | # | 203 | # |
| 197 | CONFIG_CLASSIC_RCU=y | 204 | CONFIG_TREE_RCU=y |
| 198 | # CONFIG_TREE_RCU is not set | 205 | # CONFIG_TREE_PREEMPT_RCU is not set |
| 199 | # CONFIG_PREEMPT_RCU is not set | 206 | # CONFIG_RCU_TRACE is not set |
| 207 | CONFIG_RCU_FANOUT=32 | ||
| 208 | # CONFIG_RCU_FANOUT_EXACT is not set | ||
| 200 | # CONFIG_TREE_RCU_TRACE is not set | 209 | # CONFIG_TREE_RCU_TRACE is not set |
| 201 | # CONFIG_PREEMPT_RCU_TRACE is not set | ||
| 202 | CONFIG_IKCONFIG=y | 210 | CONFIG_IKCONFIG=y |
| 203 | CONFIG_IKCONFIG_PROC=y | 211 | CONFIG_IKCONFIG_PROC=y |
| 204 | CONFIG_LOG_BUF_SHIFT=14 | 212 | CONFIG_LOG_BUF_SHIFT=14 |
| @@ -209,8 +217,12 @@ CONFIG_SYSFS_DEPRECATED_V2=y | |||
| 209 | # CONFIG_NAMESPACES is not set | 217 | # CONFIG_NAMESPACES is not set |
| 210 | CONFIG_BLK_DEV_INITRD=y | 218 | CONFIG_BLK_DEV_INITRD=y |
| 211 | CONFIG_INITRAMFS_SOURCE="" | 219 | CONFIG_INITRAMFS_SOURCE="" |
| 220 | CONFIG_RD_GZIP=y | ||
| 221 | # CONFIG_RD_BZIP2 is not set | ||
| 222 | # CONFIG_RD_LZMA is not set | ||
| 212 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 223 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
| 213 | CONFIG_SYSCTL=y | 224 | CONFIG_SYSCTL=y |
| 225 | CONFIG_ANON_INODES=y | ||
| 214 | CONFIG_EMBEDDED=y | 226 | CONFIG_EMBEDDED=y |
| 215 | CONFIG_SYSCTL_SYSCALL=y | 227 | CONFIG_SYSCTL_SYSCALL=y |
| 216 | CONFIG_KALLSYMS=y | 228 | CONFIG_KALLSYMS=y |
| @@ -220,25 +232,35 @@ CONFIG_PRINTK=y | |||
| 220 | CONFIG_BUG=y | 232 | CONFIG_BUG=y |
| 221 | CONFIG_ELF_CORE=y | 233 | CONFIG_ELF_CORE=y |
| 222 | # CONFIG_PCSPKR_PLATFORM is not set | 234 | # CONFIG_PCSPKR_PLATFORM is not set |
| 223 | CONFIG_COMPAT_BRK=y | ||
| 224 | CONFIG_BASE_FULL=y | 235 | CONFIG_BASE_FULL=y |
| 225 | # CONFIG_FUTEX is not set | 236 | CONFIG_FUTEX=y |
| 226 | CONFIG_ANON_INODES=y | ||
| 227 | # CONFIG_EPOLL is not set | 237 | # CONFIG_EPOLL is not set |
| 228 | CONFIG_SIGNALFD=y | 238 | CONFIG_SIGNALFD=y |
| 229 | CONFIG_TIMERFD=y | 239 | CONFIG_TIMERFD=y |
| 230 | CONFIG_EVENTFD=y | 240 | CONFIG_EVENTFD=y |
| 231 | CONFIG_SHMEM=y | 241 | CONFIG_SHMEM=y |
| 232 | CONFIG_AIO=y | 242 | CONFIG_AIO=y |
| 243 | |||
| 244 | # | ||
| 245 | # Kernel Performance Events And Counters | ||
| 246 | # | ||
| 233 | CONFIG_VM_EVENT_COUNTERS=y | 247 | CONFIG_VM_EVENT_COUNTERS=y |
| 234 | CONFIG_PCI_QUIRKS=y | 248 | CONFIG_PCI_QUIRKS=y |
| 249 | CONFIG_COMPAT_BRK=y | ||
| 235 | CONFIG_SLAB=y | 250 | CONFIG_SLAB=y |
| 236 | # CONFIG_SLUB is not set | 251 | # CONFIG_SLUB is not set |
| 237 | # CONFIG_SLOB is not set | 252 | # CONFIG_SLOB is not set |
| 238 | # CONFIG_PROFILING is not set | 253 | # CONFIG_PROFILING is not set |
| 239 | CONFIG_HAVE_OPROFILE=y | 254 | CONFIG_HAVE_OPROFILE=y |
| 240 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | 255 | |
| 256 | # | ||
| 257 | # GCOV-based kernel profiling | ||
| 258 | # | ||
| 259 | # CONFIG_GCOV_KERNEL is not set | ||
| 260 | # CONFIG_SLOW_WORK is not set | ||
| 261 | CONFIG_HAVE_GENERIC_DMA_COHERENT=y | ||
| 241 | CONFIG_SLABINFO=y | 262 | CONFIG_SLABINFO=y |
| 263 | CONFIG_RT_MUTEXES=y | ||
| 242 | CONFIG_BASE_SMALL=0 | 264 | CONFIG_BASE_SMALL=0 |
| 243 | CONFIG_MODULES=y | 265 | CONFIG_MODULES=y |
| 244 | # CONFIG_MODULE_FORCE_LOAD is not set | 266 | # CONFIG_MODULE_FORCE_LOAD is not set |
| @@ -246,8 +268,8 @@ CONFIG_MODULE_UNLOAD=y | |||
| 246 | # CONFIG_MODVERSIONS is not set | 268 | # CONFIG_MODVERSIONS is not set |
| 247 | # CONFIG_MODULE_SRCVERSION_ALL is not set | 269 | # CONFIG_MODULE_SRCVERSION_ALL is not set |
| 248 | CONFIG_BLOCK=y | 270 | CONFIG_BLOCK=y |
| 249 | # CONFIG_LBD is not set | 271 | # CONFIG_LBDAF is not set |
| 250 | # CONFIG_BLK_DEV_IO_TRACE is not set | 272 | # CONFIG_BLK_DEV_BSG is not set |
| 251 | # CONFIG_BLK_DEV_INTEGRITY is not set | 273 | # CONFIG_BLK_DEV_INTEGRITY is not set |
| 252 | 274 | ||
| 253 | # | 275 | # |
| @@ -274,6 +296,7 @@ CONFIG_PCI_DOMAINS=y | |||
| 274 | # CONFIG_ARCH_SUPPORTS_MSI is not set | 296 | # CONFIG_ARCH_SUPPORTS_MSI is not set |
| 275 | # CONFIG_PCI_LEGACY is not set | 297 | # CONFIG_PCI_LEGACY is not set |
| 276 | # CONFIG_PCI_STUB is not set | 298 | # CONFIG_PCI_STUB is not set |
| 299 | # CONFIG_PCI_IOV is not set | ||
| 277 | CONFIG_MMU=y | 300 | CONFIG_MMU=y |
| 278 | 301 | ||
| 279 | # | 302 | # |
| @@ -288,6 +311,7 @@ CONFIG_TRAD_SIGNALS=y | |||
| 288 | # | 311 | # |
| 289 | # Power management options | 312 | # Power management options |
| 290 | # | 313 | # |
| 314 | CONFIG_ARCH_HIBERNATION_POSSIBLE=y | ||
| 291 | CONFIG_ARCH_SUSPEND_POSSIBLE=y | 315 | CONFIG_ARCH_SUSPEND_POSSIBLE=y |
| 292 | # CONFIG_PM is not set | 316 | # CONFIG_PM is not set |
| 293 | CONFIG_NET=y | 317 | CONFIG_NET=y |
| @@ -295,7 +319,6 @@ CONFIG_NET=y | |||
| 295 | # | 319 | # |
| 296 | # Networking options | 320 | # Networking options |
| 297 | # | 321 | # |
| 298 | CONFIG_COMPAT_NET_DEV_OPS=y | ||
| 299 | CONFIG_PACKET=y | 322 | CONFIG_PACKET=y |
| 300 | # CONFIG_PACKET_MMAP is not set | 323 | # CONFIG_PACKET_MMAP is not set |
| 301 | CONFIG_UNIX=y | 324 | CONFIG_UNIX=y |
| @@ -311,6 +334,7 @@ CONFIG_IP_PNP=y | |||
| 311 | # CONFIG_NET_IPIP is not set | 334 | # CONFIG_NET_IPIP is not set |
| 312 | # CONFIG_NET_IPGRE is not set | 335 | # CONFIG_NET_IPGRE is not set |
| 313 | # CONFIG_IP_MROUTE is not set | 336 | # CONFIG_IP_MROUTE is not set |
| 337 | # CONFIG_ARPD is not set | ||
| 314 | # CONFIG_SYN_COOKIES is not set | 338 | # CONFIG_SYN_COOKIES is not set |
| 315 | # CONFIG_INET_AH is not set | 339 | # CONFIG_INET_AH is not set |
| 316 | # CONFIG_INET_ESP is not set | 340 | # CONFIG_INET_ESP is not set |
| @@ -336,6 +360,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | |||
| 336 | # CONFIG_LLC2 is not set | 360 | # CONFIG_LLC2 is not set |
| 337 | # CONFIG_IPX is not set | 361 | # CONFIG_IPX is not set |
| 338 | # CONFIG_ATALK is not set | 362 | # CONFIG_ATALK is not set |
| 363 | # CONFIG_PHONET is not set | ||
| 339 | # CONFIG_NET_SCHED is not set | 364 | # CONFIG_NET_SCHED is not set |
| 340 | # CONFIG_DCB is not set | 365 | # CONFIG_DCB is not set |
| 341 | 366 | ||
| @@ -347,7 +372,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | |||
| 347 | # CONFIG_CAN is not set | 372 | # CONFIG_CAN is not set |
| 348 | # CONFIG_IRDA is not set | 373 | # CONFIG_IRDA is not set |
| 349 | # CONFIG_BT is not set | 374 | # CONFIG_BT is not set |
| 350 | # CONFIG_PHONET is not set | ||
| 351 | # CONFIG_WIRELESS is not set | 375 | # CONFIG_WIRELESS is not set |
| 352 | # CONFIG_WIMAX is not set | 376 | # CONFIG_WIMAX is not set |
| 353 | # CONFIG_RFKILL is not set | 377 | # CONFIG_RFKILL is not set |
| @@ -365,9 +389,9 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y | |||
| 365 | # CONFIG_CONNECTOR is not set | 389 | # CONFIG_CONNECTOR is not set |
| 366 | CONFIG_MTD=y | 390 | CONFIG_MTD=y |
| 367 | # CONFIG_MTD_DEBUG is not set | 391 | # CONFIG_MTD_DEBUG is not set |
| 392 | # CONFIG_MTD_TESTS is not set | ||
| 368 | # CONFIG_MTD_CONCAT is not set | 393 | # CONFIG_MTD_CONCAT is not set |
| 369 | CONFIG_MTD_PARTITIONS=y | 394 | CONFIG_MTD_PARTITIONS=y |
| 370 | # CONFIG_MTD_TESTS is not set | ||
| 371 | # CONFIG_MTD_REDBOOT_PARTS is not set | 395 | # CONFIG_MTD_REDBOOT_PARTS is not set |
| 372 | CONFIG_MTD_CMDLINE_PARTS=y | 396 | CONFIG_MTD_CMDLINE_PARTS=y |
| 373 | # CONFIG_MTD_AR7_PARTS is not set | 397 | # CONFIG_MTD_AR7_PARTS is not set |
| @@ -376,9 +400,9 @@ CONFIG_MTD_CMDLINE_PARTS=y | |||
| 376 | # User Modules And Translation Layers | 400 | # User Modules And Translation Layers |
| 377 | # | 401 | # |
| 378 | CONFIG_MTD_CHAR=y | 402 | CONFIG_MTD_CHAR=y |
| 379 | # CONFIG_MTD_BLKDEVS is not set | 403 | CONFIG_MTD_BLKDEVS=m |
| 380 | # CONFIG_MTD_BLOCK is not set | 404 | CONFIG_MTD_BLOCK=m |
| 381 | # CONFIG_MTD_BLOCK_RO is not set | 405 | CONFIG_MTD_BLOCK_RO=m |
| 382 | # CONFIG_FTL is not set | 406 | # CONFIG_FTL is not set |
| 383 | # CONFIG_NFTL is not set | 407 | # CONFIG_NFTL is not set |
| 384 | # CONFIG_INFTL is not set | 408 | # CONFIG_INFTL is not set |
| @@ -414,16 +438,20 @@ CONFIG_MTD_CFI_UTIL=y | |||
| 414 | # | 438 | # |
| 415 | # Mapping drivers for chip access | 439 | # Mapping drivers for chip access |
| 416 | # | 440 | # |
| 417 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | 441 | CONFIG_MTD_COMPLEX_MAPPINGS=y |
| 418 | CONFIG_MTD_PHYSMAP=y | 442 | CONFIG_MTD_PHYSMAP=y |
| 419 | # CONFIG_MTD_PHYSMAP_COMPAT is not set | 443 | # CONFIG_MTD_PHYSMAP_COMPAT is not set |
| 444 | # CONFIG_MTD_PCI is not set | ||
| 445 | # CONFIG_MTD_GPIO_ADDR is not set | ||
| 420 | # CONFIG_MTD_INTEL_VR_NOR is not set | 446 | # CONFIG_MTD_INTEL_VR_NOR is not set |
| 447 | CONFIG_MTD_RBTX4939=y | ||
| 421 | # CONFIG_MTD_PLATRAM is not set | 448 | # CONFIG_MTD_PLATRAM is not set |
| 422 | 449 | ||
| 423 | # | 450 | # |
| 424 | # Self-contained MTD device drivers | 451 | # Self-contained MTD device drivers |
| 425 | # | 452 | # |
| 426 | # CONFIG_MTD_PMC551 is not set | 453 | # CONFIG_MTD_PMC551 is not set |
| 454 | # CONFIG_MTD_SST25L is not set | ||
| 427 | # CONFIG_MTD_SLRAM is not set | 455 | # CONFIG_MTD_SLRAM is not set |
| 428 | # CONFIG_MTD_PHRAM is not set | 456 | # CONFIG_MTD_PHRAM is not set |
| 429 | # CONFIG_MTD_MTDRAM is not set | 457 | # CONFIG_MTD_MTDRAM is not set |
| @@ -435,7 +463,15 @@ CONFIG_MTD_PHYSMAP=y | |||
| 435 | # CONFIG_MTD_DOC2000 is not set | 463 | # CONFIG_MTD_DOC2000 is not set |
| 436 | # CONFIG_MTD_DOC2001 is not set | 464 | # CONFIG_MTD_DOC2001 is not set |
| 437 | # CONFIG_MTD_DOC2001PLUS is not set | 465 | # CONFIG_MTD_DOC2001PLUS is not set |
| 438 | # CONFIG_MTD_NAND is not set | 466 | CONFIG_MTD_NAND=m |
| 467 | # CONFIG_MTD_NAND_VERIFY_WRITE is not set | ||
| 468 | # CONFIG_MTD_NAND_ECC_SMC is not set | ||
| 469 | # CONFIG_MTD_NAND_MUSEUM_IDS is not set | ||
| 470 | CONFIG_MTD_NAND_IDS=m | ||
| 471 | # CONFIG_MTD_NAND_CAFE is not set | ||
| 472 | # CONFIG_MTD_NAND_NANDSIM is not set | ||
| 473 | # CONFIG_MTD_NAND_PLATFORM is not set | ||
| 474 | CONFIG_MTD_NAND_TXX9NDFMC=m | ||
| 439 | # CONFIG_MTD_ONENAND is not set | 475 | # CONFIG_MTD_ONENAND is not set |
| 440 | 476 | ||
| 441 | # | 477 | # |
| @@ -471,6 +507,7 @@ CONFIG_IDE=y | |||
| 471 | # | 507 | # |
| 472 | # Please see Documentation/ide/ide.txt for help/info on IDE drives | 508 | # Please see Documentation/ide/ide.txt for help/info on IDE drives |
| 473 | # | 509 | # |
| 510 | CONFIG_IDE_XFER_MODE=y | ||
| 474 | CONFIG_IDE_TIMINGS=y | 511 | CONFIG_IDE_TIMINGS=y |
| 475 | # CONFIG_BLK_DEV_IDE_SATA is not set | 512 | # CONFIG_BLK_DEV_IDE_SATA is not set |
| 476 | CONFIG_IDE_GD=y | 513 | CONFIG_IDE_GD=y |
| @@ -534,8 +571,13 @@ CONFIG_BLK_DEV_IDEDMA=y | |||
| 534 | # | 571 | # |
| 535 | 572 | ||
| 536 | # | 573 | # |
| 537 | # A new alternative FireWire stack is available with EXPERIMENTAL=y | 574 | # You can enable one or both FireWire driver stacks. |
| 538 | # | 575 | # |
| 576 | |||
| 577 | # | ||
| 578 | # See the help texts for more information. | ||
| 579 | # | ||
| 580 | # CONFIG_FIREWIRE is not set | ||
| 539 | # CONFIG_IEEE1394 is not set | 581 | # CONFIG_IEEE1394 is not set |
| 540 | # CONFIG_I2O is not set | 582 | # CONFIG_I2O is not set |
| 541 | CONFIG_NETDEVICES=y | 583 | CONFIG_NETDEVICES=y |
| @@ -574,6 +616,8 @@ CONFIG_MII=y | |||
| 574 | # CONFIG_NET_VENDOR_3COM is not set | 616 | # CONFIG_NET_VENDOR_3COM is not set |
| 575 | CONFIG_SMC91X=y | 617 | CONFIG_SMC91X=y |
| 576 | # CONFIG_DM9000 is not set | 618 | # CONFIG_DM9000 is not set |
| 619 | # CONFIG_ETHOC is not set | ||
| 620 | # CONFIG_DNET is not set | ||
| 577 | # CONFIG_NET_TULIP is not set | 621 | # CONFIG_NET_TULIP is not set |
| 578 | # CONFIG_HP100 is not set | 622 | # CONFIG_HP100 is not set |
| 579 | CONFIG_NE2000=y | 623 | CONFIG_NE2000=y |
| @@ -602,18 +646,15 @@ CONFIG_TC35815=y | |||
| 602 | # CONFIG_SMSC9420 is not set | 646 | # CONFIG_SMSC9420 is not set |
| 603 | # CONFIG_SUNDANCE is not set | 647 | # CONFIG_SUNDANCE is not set |
| 604 | # CONFIG_TLAN is not set | 648 | # CONFIG_TLAN is not set |
| 649 | # CONFIG_KS8842 is not set | ||
| 650 | # CONFIG_KS8851 is not set | ||
| 651 | # CONFIG_KS8851_MLL is not set | ||
| 605 | # CONFIG_VIA_RHINE is not set | 652 | # CONFIG_VIA_RHINE is not set |
| 606 | # CONFIG_ATL2 is not set | 653 | # CONFIG_ATL2 is not set |
| 607 | # CONFIG_NETDEV_1000 is not set | 654 | # CONFIG_NETDEV_1000 is not set |
| 608 | # CONFIG_NETDEV_10000 is not set | 655 | # CONFIG_NETDEV_10000 is not set |
| 609 | # CONFIG_TR is not set | 656 | # CONFIG_TR is not set |
| 610 | 657 | # CONFIG_WLAN is not set | |
| 611 | # | ||
| 612 | # Wireless LAN | ||
| 613 | # | ||
| 614 | # CONFIG_WLAN_PRE80211 is not set | ||
| 615 | # CONFIG_WLAN_80211 is not set | ||
| 616 | # CONFIG_IWLWIFI_LEDS is not set | ||
| 617 | 658 | ||
| 618 | # | 659 | # |
| 619 | # Enable WiMAX (Networking options) to see the WiMAX drivers | 660 | # Enable WiMAX (Networking options) to see the WiMAX drivers |
| @@ -653,6 +694,7 @@ CONFIG_DEVKMEM=y | |||
| 653 | # | 694 | # |
| 654 | # Non-8250 serial port support | 695 | # Non-8250 serial port support |
| 655 | # | 696 | # |
| 697 | # CONFIG_SERIAL_MAX3100 is not set | ||
| 656 | CONFIG_SERIAL_CORE=y | 698 | CONFIG_SERIAL_CORE=y |
| 657 | CONFIG_SERIAL_CORE_CONSOLE=y | 699 | CONFIG_SERIAL_CORE_CONSOLE=y |
| 658 | CONFIG_SERIAL_TXX9=y | 700 | CONFIG_SERIAL_TXX9=y |
| @@ -666,7 +708,9 @@ CONFIG_UNIX98_PTYS=y | |||
| 666 | CONFIG_LEGACY_PTYS=y | 708 | CONFIG_LEGACY_PTYS=y |
| 667 | CONFIG_LEGACY_PTY_COUNT=256 | 709 | CONFIG_LEGACY_PTY_COUNT=256 |
| 668 | # CONFIG_IPMI_HANDLER is not set | 710 | # CONFIG_IPMI_HANDLER is not set |
| 669 | # CONFIG_HW_RANDOM is not set | 711 | CONFIG_HW_RANDOM=m |
| 712 | # CONFIG_HW_RANDOM_TIMERIOMEM is not set | ||
| 713 | CONFIG_HW_RANDOM_TX4939=m | ||
| 670 | # CONFIG_R3964 is not set | 714 | # CONFIG_R3964 is not set |
| 671 | # CONFIG_APPLICOM is not set | 715 | # CONFIG_APPLICOM is not set |
| 672 | # CONFIG_RAW_DRIVER is not set | 716 | # CONFIG_RAW_DRIVER is not set |
| @@ -686,6 +730,10 @@ CONFIG_SPI_TXX9=y | |||
| 686 | # SPI Protocol Masters | 730 | # SPI Protocol Masters |
| 687 | # | 731 | # |
| 688 | # CONFIG_SPI_TLE62X0 is not set | 732 | # CONFIG_SPI_TLE62X0 is not set |
| 733 | |||
| 734 | # | ||
| 735 | # PPS support | ||
| 736 | # | ||
| 689 | CONFIG_ARCH_REQUIRE_GPIOLIB=y | 737 | CONFIG_ARCH_REQUIRE_GPIOLIB=y |
| 690 | CONFIG_GPIOLIB=y | 738 | CONFIG_GPIOLIB=y |
| 691 | 739 | ||
| @@ -701,17 +749,22 @@ CONFIG_GPIOLIB=y | |||
| 701 | # PCI GPIO expanders: | 749 | # PCI GPIO expanders: |
| 702 | # | 750 | # |
| 703 | # CONFIG_GPIO_BT8XX is not set | 751 | # CONFIG_GPIO_BT8XX is not set |
| 752 | # CONFIG_GPIO_LANGWELL is not set | ||
| 704 | 753 | ||
| 705 | # | 754 | # |
| 706 | # SPI GPIO expanders: | 755 | # SPI GPIO expanders: |
| 707 | # | 756 | # |
| 708 | # CONFIG_GPIO_MAX7301 is not set | 757 | # CONFIG_GPIO_MAX7301 is not set |
| 709 | # CONFIG_GPIO_MCP23S08 is not set | 758 | # CONFIG_GPIO_MCP23S08 is not set |
| 759 | # CONFIG_GPIO_MC33880 is not set | ||
| 760 | |||
| 761 | # | ||
| 762 | # AC97 GPIO expanders: | ||
| 763 | # | ||
| 710 | # CONFIG_W1 is not set | 764 | # CONFIG_W1 is not set |
| 711 | # CONFIG_POWER_SUPPLY is not set | 765 | # CONFIG_POWER_SUPPLY is not set |
| 712 | # CONFIG_HWMON is not set | 766 | # CONFIG_HWMON is not set |
| 713 | # CONFIG_THERMAL is not set | 767 | # CONFIG_THERMAL is not set |
| 714 | # CONFIG_THERMAL_HWMON is not set | ||
| 715 | CONFIG_WATCHDOG=y | 768 | CONFIG_WATCHDOG=y |
| 716 | # CONFIG_WATCHDOG_NOWAYOUT is not set | 769 | # CONFIG_WATCHDOG_NOWAYOUT is not set |
| 717 | 770 | ||
| @@ -740,28 +793,17 @@ CONFIG_SSB_POSSIBLE=y | |||
| 740 | # CONFIG_MFD_CORE is not set | 793 | # CONFIG_MFD_CORE is not set |
| 741 | # CONFIG_MFD_SM501 is not set | 794 | # CONFIG_MFD_SM501 is not set |
| 742 | # CONFIG_HTC_PASIC3 is not set | 795 | # CONFIG_HTC_PASIC3 is not set |
| 796 | # CONFIG_UCB1400_CORE is not set | ||
| 743 | # CONFIG_MFD_TMIO is not set | 797 | # CONFIG_MFD_TMIO is not set |
| 798 | # CONFIG_MFD_MC13783 is not set | ||
| 799 | # CONFIG_EZX_PCAP is not set | ||
| 744 | # CONFIG_REGULATOR is not set | 800 | # CONFIG_REGULATOR is not set |
| 745 | 801 | # CONFIG_MEDIA_SUPPORT is not set | |
| 746 | # | ||
| 747 | # Multimedia devices | ||
| 748 | # | ||
| 749 | |||
| 750 | # | ||
| 751 | # Multimedia core support | ||
| 752 | # | ||
| 753 | # CONFIG_VIDEO_DEV is not set | ||
| 754 | # CONFIG_DVB_CORE is not set | ||
| 755 | # CONFIG_VIDEO_MEDIA is not set | ||
| 756 | |||
| 757 | # | ||
| 758 | # Multimedia drivers | ||
| 759 | # | ||
| 760 | # CONFIG_DAB is not set | ||
| 761 | 802 | ||
| 762 | # | 803 | # |
| 763 | # Graphics support | 804 | # Graphics support |
| 764 | # | 805 | # |
| 806 | # CONFIG_VGA_ARB is not set | ||
| 765 | # CONFIG_DRM is not set | 807 | # CONFIG_DRM is not set |
| 766 | # CONFIG_VGASTATE is not set | 808 | # CONFIG_VGASTATE is not set |
| 767 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | 809 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set |
| @@ -772,7 +814,42 @@ CONFIG_SSB_POSSIBLE=y | |||
| 772 | # Display device support | 814 | # Display device support |
| 773 | # | 815 | # |
| 774 | # CONFIG_DISPLAY_SUPPORT is not set | 816 | # CONFIG_DISPLAY_SUPPORT is not set |
| 775 | # CONFIG_SOUND is not set | 817 | CONFIG_SOUND=m |
| 818 | # CONFIG_SOUND_OSS_CORE is not set | ||
| 819 | CONFIG_SND=m | ||
| 820 | CONFIG_SND_TIMER=m | ||
| 821 | CONFIG_SND_PCM=m | ||
| 822 | # CONFIG_SND_SEQUENCER is not set | ||
| 823 | # CONFIG_SND_MIXER_OSS is not set | ||
| 824 | # CONFIG_SND_PCM_OSS is not set | ||
| 825 | # CONFIG_SND_HRTIMER is not set | ||
| 826 | # CONFIG_SND_DYNAMIC_MINORS is not set | ||
| 827 | # CONFIG_SND_SUPPORT_OLD_API is not set | ||
| 828 | # CONFIG_SND_VERBOSE_PROCFS is not set | ||
| 829 | # CONFIG_SND_VERBOSE_PRINTK is not set | ||
| 830 | # CONFIG_SND_DEBUG is not set | ||
| 831 | CONFIG_SND_VMASTER=y | ||
| 832 | # CONFIG_SND_RAWMIDI_SEQ is not set | ||
| 833 | # CONFIG_SND_OPL3_LIB_SEQ is not set | ||
| 834 | # CONFIG_SND_OPL4_LIB_SEQ is not set | ||
| 835 | # CONFIG_SND_SBAWE_SEQ is not set | ||
| 836 | # CONFIG_SND_EMU10K1_SEQ is not set | ||
| 837 | CONFIG_SND_AC97_CODEC=m | ||
| 838 | # CONFIG_SND_DRIVERS is not set | ||
| 839 | # CONFIG_SND_PCI is not set | ||
| 840 | # CONFIG_SND_SPI is not set | ||
| 841 | # CONFIG_SND_MIPS is not set | ||
| 842 | CONFIG_SND_SOC=m | ||
| 843 | CONFIG_SND_SOC_AC97_BUS=y | ||
| 844 | CONFIG_SND_SOC_TXX9ACLC=m | ||
| 845 | CONFIG_HAS_TXX9_ACLC=y | ||
| 846 | CONFIG_SND_SOC_TXX9ACLC_AC97=m | ||
| 847 | CONFIG_SND_SOC_TXX9ACLC_GENERIC=m | ||
| 848 | CONFIG_SND_SOC_I2C_AND_SPI=m | ||
| 849 | # CONFIG_SND_SOC_ALL_CODECS is not set | ||
| 850 | CONFIG_SND_SOC_AC97_CODEC=m | ||
| 851 | # CONFIG_SOUND_PRIME is not set | ||
| 852 | CONFIG_AC97_BUS=m | ||
| 776 | # CONFIG_USB_SUPPORT is not set | 853 | # CONFIG_USB_SUPPORT is not set |
| 777 | # CONFIG_MMC is not set | 854 | # CONFIG_MMC is not set |
| 778 | # CONFIG_MEMSTICK is not set | 855 | # CONFIG_MEMSTICK is not set |
| @@ -783,6 +860,8 @@ CONFIG_LEDS_CLASS=y | |||
| 783 | # LED drivers | 860 | # LED drivers |
| 784 | # | 861 | # |
| 785 | CONFIG_LEDS_GPIO=y | 862 | CONFIG_LEDS_GPIO=y |
| 863 | CONFIG_LEDS_GPIO_PLATFORM=y | ||
| 864 | # CONFIG_LEDS_DAC124S085 is not set | ||
| 786 | 865 | ||
| 787 | # | 866 | # |
| 788 | # LED Triggers | 867 | # LED Triggers |
| @@ -792,7 +871,12 @@ CONFIG_LEDS_TRIGGERS=y | |||
| 792 | CONFIG_LEDS_TRIGGER_IDE_DISK=y | 871 | CONFIG_LEDS_TRIGGER_IDE_DISK=y |
| 793 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | 872 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y |
| 794 | # CONFIG_LEDS_TRIGGER_BACKLIGHT is not set | 873 | # CONFIG_LEDS_TRIGGER_BACKLIGHT is not set |
| 874 | # CONFIG_LEDS_TRIGGER_GPIO is not set | ||
| 795 | # CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set | 875 | # CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set |
| 876 | |||
| 877 | # | ||
| 878 | # iptables trigger is under Netfilter config (LED target) | ||
| 879 | # | ||
| 796 | # CONFIG_ACCESSIBILITY is not set | 880 | # CONFIG_ACCESSIBILITY is not set |
| 797 | # CONFIG_INFINIBAND is not set | 881 | # CONFIG_INFINIBAND is not set |
| 798 | CONFIG_RTC_LIB=y | 882 | CONFIG_RTC_LIB=y |
| @@ -820,6 +904,7 @@ CONFIG_RTC_INTF_DEV_UIE_EMUL=y | |||
| 820 | # CONFIG_RTC_DRV_R9701 is not set | 904 | # CONFIG_RTC_DRV_R9701 is not set |
| 821 | CONFIG_RTC_DRV_RS5C348=y | 905 | CONFIG_RTC_DRV_RS5C348=y |
| 822 | # CONFIG_RTC_DRV_DS3234 is not set | 906 | # CONFIG_RTC_DRV_DS3234 is not set |
| 907 | # CONFIG_RTC_DRV_PCF2123 is not set | ||
| 823 | 908 | ||
| 824 | # | 909 | # |
| 825 | # Platform RTC drivers | 910 | # Platform RTC drivers |
| @@ -840,8 +925,26 @@ CONFIG_RTC_DRV_DS1742=y | |||
| 840 | # on-CPU RTC drivers | 925 | # on-CPU RTC drivers |
| 841 | # | 926 | # |
| 842 | CONFIG_RTC_DRV_TX4939=y | 927 | CONFIG_RTC_DRV_TX4939=y |
| 843 | # CONFIG_DMADEVICES is not set | 928 | CONFIG_DMADEVICES=y |
| 929 | |||
| 930 | # | ||
| 931 | # DMA Devices | ||
| 932 | # | ||
| 933 | CONFIG_TXX9_DMAC=m | ||
| 934 | CONFIG_DMA_ENGINE=y | ||
| 935 | |||
| 936 | # | ||
| 937 | # DMA Clients | ||
| 938 | # | ||
| 939 | # CONFIG_NET_DMA is not set | ||
| 940 | # CONFIG_ASYNC_TX_DMA is not set | ||
| 941 | # CONFIG_DMATEST is not set | ||
| 942 | # CONFIG_AUXDISPLAY is not set | ||
| 844 | # CONFIG_UIO is not set | 943 | # CONFIG_UIO is not set |
| 944 | |||
| 945 | # | ||
| 946 | # TI VLYNQ | ||
| 947 | # | ||
| 845 | # CONFIG_STAGING is not set | 948 | # CONFIG_STAGING is not set |
| 846 | 949 | ||
| 847 | # | 950 | # |
| @@ -853,9 +956,10 @@ CONFIG_RTC_DRV_TX4939=y | |||
| 853 | # CONFIG_REISERFS_FS is not set | 956 | # CONFIG_REISERFS_FS is not set |
| 854 | # CONFIG_JFS_FS is not set | 957 | # CONFIG_JFS_FS is not set |
| 855 | CONFIG_FS_POSIX_ACL=y | 958 | CONFIG_FS_POSIX_ACL=y |
| 856 | CONFIG_FILE_LOCKING=y | ||
| 857 | # CONFIG_XFS_FS is not set | 959 | # CONFIG_XFS_FS is not set |
| 858 | # CONFIG_OCFS2_FS is not set | 960 | # CONFIG_OCFS2_FS is not set |
| 961 | CONFIG_FILE_LOCKING=y | ||
| 962 | CONFIG_FSNOTIFY=y | ||
| 859 | # CONFIG_DNOTIFY is not set | 963 | # CONFIG_DNOTIFY is not set |
| 860 | CONFIG_INOTIFY=y | 964 | CONFIG_INOTIFY=y |
| 861 | CONFIG_INOTIFY_USER=y | 965 | CONFIG_INOTIFY_USER=y |
| @@ -866,6 +970,10 @@ CONFIG_INOTIFY_USER=y | |||
| 866 | CONFIG_GENERIC_ACL=y | 970 | CONFIG_GENERIC_ACL=y |
| 867 | 971 | ||
| 868 | # | 972 | # |
| 973 | # Caches | ||
| 974 | # | ||
| 975 | |||
| 976 | # | ||
| 869 | # CD-ROM/DVD Filesystems | 977 | # CD-ROM/DVD Filesystems |
| 870 | # | 978 | # |
| 871 | # CONFIG_ISO9660_FS is not set | 979 | # CONFIG_ISO9660_FS is not set |
| @@ -890,7 +998,27 @@ CONFIG_TMPFS=y | |||
| 890 | CONFIG_TMPFS_POSIX_ACL=y | 998 | CONFIG_TMPFS_POSIX_ACL=y |
| 891 | # CONFIG_HUGETLB_PAGE is not set | 999 | # CONFIG_HUGETLB_PAGE is not set |
| 892 | # CONFIG_CONFIGFS_FS is not set | 1000 | # CONFIG_CONFIGFS_FS is not set |
| 893 | # CONFIG_MISC_FILESYSTEMS is not set | 1001 | CONFIG_MISC_FILESYSTEMS=y |
| 1002 | # CONFIG_HFSPLUS_FS is not set | ||
| 1003 | CONFIG_JFFS2_FS=m | ||
| 1004 | CONFIG_JFFS2_FS_DEBUG=0 | ||
| 1005 | CONFIG_JFFS2_FS_WRITEBUFFER=y | ||
| 1006 | # CONFIG_JFFS2_FS_WBUF_VERIFY is not set | ||
| 1007 | # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set | ||
| 1008 | CONFIG_JFFS2_ZLIB=y | ||
| 1009 | # CONFIG_JFFS2_LZO is not set | ||
| 1010 | CONFIG_JFFS2_RTIME=y | ||
| 1011 | # CONFIG_JFFS2_RUBIN is not set | ||
| 1012 | # CONFIG_CRAMFS is not set | ||
| 1013 | # CONFIG_SQUASHFS is not set | ||
| 1014 | # CONFIG_VXFS_FS is not set | ||
| 1015 | # CONFIG_MINIX_FS is not set | ||
| 1016 | # CONFIG_OMFS_FS is not set | ||
| 1017 | # CONFIG_HPFS_FS is not set | ||
| 1018 | # CONFIG_QNX4FS_FS is not set | ||
| 1019 | # CONFIG_ROMFS_FS is not set | ||
| 1020 | # CONFIG_SYSV_FS is not set | ||
| 1021 | # CONFIG_UFS_FS is not set | ||
| 894 | CONFIG_NETWORK_FILESYSTEMS=y | 1022 | CONFIG_NETWORK_FILESYSTEMS=y |
| 895 | CONFIG_NFS_FS=y | 1023 | CONFIG_NFS_FS=y |
| 896 | CONFIG_NFS_V3=y | 1024 | CONFIG_NFS_V3=y |
| @@ -922,6 +1050,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y | |||
| 922 | CONFIG_ENABLE_MUST_CHECK=y | 1050 | CONFIG_ENABLE_MUST_CHECK=y |
| 923 | CONFIG_FRAME_WARN=1024 | 1051 | CONFIG_FRAME_WARN=1024 |
| 924 | # CONFIG_MAGIC_SYSRQ is not set | 1052 | # CONFIG_MAGIC_SYSRQ is not set |
| 1053 | CONFIG_STRIP_ASM_SYMS=y | ||
| 925 | # CONFIG_UNUSED_SYMBOLS is not set | 1054 | # CONFIG_UNUSED_SYMBOLS is not set |
| 926 | CONFIG_DEBUG_FS=y | 1055 | CONFIG_DEBUG_FS=y |
| 927 | # CONFIG_HEADERS_CHECK is not set | 1056 | # CONFIG_HEADERS_CHECK is not set |
| @@ -929,11 +1058,9 @@ CONFIG_DEBUG_FS=y | |||
| 929 | # CONFIG_DEBUG_MEMORY_INIT is not set | 1058 | # CONFIG_DEBUG_MEMORY_INIT is not set |
| 930 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 1059 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set |
| 931 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 1060 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
| 932 | 1061 | CONFIG_TRACING_SUPPORT=y | |
| 933 | # | 1062 | # CONFIG_FTRACE is not set |
| 934 | # Tracers | 1063 | # CONFIG_DYNAMIC_DEBUG is not set |
| 935 | # | ||
| 936 | # CONFIG_DYNAMIC_PRINTK_DEBUG is not set | ||
| 937 | # CONFIG_SAMPLES is not set | 1064 | # CONFIG_SAMPLES is not set |
| 938 | CONFIG_HAVE_ARCH_KGDB=y | 1065 | CONFIG_HAVE_ARCH_KGDB=y |
| 939 | CONFIG_CMDLINE="" | 1066 | CONFIG_CMDLINE="" |
| @@ -946,6 +1073,7 @@ CONFIG_CMDLINE="" | |||
| 946 | # CONFIG_SECURITYFS is not set | 1073 | # CONFIG_SECURITYFS is not set |
| 947 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | 1074 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set |
| 948 | # CONFIG_CRYPTO is not set | 1075 | # CONFIG_CRYPTO is not set |
| 1076 | # CONFIG_BINARY_PRINTF is not set | ||
| 949 | 1077 | ||
| 950 | # | 1078 | # |
| 951 | # Library routines | 1079 | # Library routines |
| @@ -959,6 +1087,10 @@ CONFIG_GENERIC_FIND_LAST_BIT=y | |||
| 959 | CONFIG_CRC32=y | 1087 | CONFIG_CRC32=y |
| 960 | # CONFIG_CRC7 is not set | 1088 | # CONFIG_CRC7 is not set |
| 961 | # CONFIG_LIBCRC32C is not set | 1089 | # CONFIG_LIBCRC32C is not set |
| 1090 | CONFIG_ZLIB_INFLATE=y | ||
| 1091 | CONFIG_ZLIB_DEFLATE=m | ||
| 1092 | CONFIG_DECOMPRESS_GZIP=y | ||
| 962 | CONFIG_HAS_IOMEM=y | 1093 | CONFIG_HAS_IOMEM=y |
| 963 | CONFIG_HAS_IOPORT=y | 1094 | CONFIG_HAS_IOPORT=y |
| 964 | CONFIG_HAS_DMA=y | 1095 | CONFIG_HAS_DMA=y |
| 1096 | CONFIG_NLATTR=y | ||
diff --git a/arch/mips/include/asm/bug.h b/arch/mips/include/asm/bug.h index 6cf29c26e873..540c98a810d1 100644 --- a/arch/mips/include/asm/bug.h +++ b/arch/mips/include/asm/bug.h | |||
| @@ -11,9 +11,7 @@ | |||
| 11 | static inline void __noreturn BUG(void) | 11 | static inline void __noreturn BUG(void) |
| 12 | { | 12 | { |
| 13 | __asm__ __volatile__("break %0" : : "i" (BRK_BUG)); | 13 | __asm__ __volatile__("break %0" : : "i" (BRK_BUG)); |
| 14 | /* Fool GCC into thinking the function doesn't return. */ | 14 | unreachable(); |
| 15 | while (1) | ||
| 16 | ; | ||
| 17 | } | 15 | } |
| 18 | 16 | ||
| 19 | #define HAVE_ARCH_BUG | 17 | #define HAVE_ARCH_BUG |
diff --git a/arch/mips/include/asm/cacheflush.h b/arch/mips/include/asm/cacheflush.h index 03b1d69b142f..40bb9fde205f 100644 --- a/arch/mips/include/asm/cacheflush.h +++ b/arch/mips/include/asm/cacheflush.h | |||
| @@ -38,6 +38,7 @@ extern void (*flush_cache_range)(struct vm_area_struct *vma, | |||
| 38 | extern void (*flush_cache_page)(struct vm_area_struct *vma, unsigned long page, unsigned long pfn); | 38 | extern void (*flush_cache_page)(struct vm_area_struct *vma, unsigned long page, unsigned long pfn); |
| 39 | extern void __flush_dcache_page(struct page *page); | 39 | extern void __flush_dcache_page(struct page *page); |
| 40 | 40 | ||
| 41 | #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1 | ||
| 41 | static inline void flush_dcache_page(struct page *page) | 42 | static inline void flush_dcache_page(struct page *page) |
| 42 | { | 43 | { |
| 43 | if (cpu_has_dc_aliases || !cpu_has_ic_fills_f_dc) | 44 | if (cpu_has_dc_aliases || !cpu_has_ic_fills_f_dc) |
diff --git a/arch/mips/include/asm/dma-mapping.h b/arch/mips/include/asm/dma-mapping.h index d16afddb09a9..664ba53dc32a 100644 --- a/arch/mips/include/asm/dma-mapping.h +++ b/arch/mips/include/asm/dma-mapping.h | |||
| @@ -3,6 +3,7 @@ | |||
| 3 | 3 | ||
| 4 | #include <asm/scatterlist.h> | 4 | #include <asm/scatterlist.h> |
| 5 | #include <asm/cache.h> | 5 | #include <asm/cache.h> |
| 6 | #include <asm-generic/dma-coherent.h> | ||
| 6 | 7 | ||
| 7 | void *dma_alloc_noncoherent(struct device *dev, size_t size, | 8 | void *dma_alloc_noncoherent(struct device *dev, size_t size, |
| 8 | dma_addr_t *dma_handle, gfp_t flag); | 9 | dma_addr_t *dma_handle, gfp_t flag); |
| @@ -73,14 +74,4 @@ extern int dma_is_consistent(struct device *dev, dma_addr_t dma_addr); | |||
| 73 | extern void dma_cache_sync(struct device *dev, void *vaddr, size_t size, | 74 | extern void dma_cache_sync(struct device *dev, void *vaddr, size_t size, |
| 74 | enum dma_data_direction direction); | 75 | enum dma_data_direction direction); |
| 75 | 76 | ||
| 76 | #if 0 | ||
| 77 | #define ARCH_HAS_DMA_DECLARE_COHERENT_MEMORY | ||
| 78 | |||
| 79 | extern int dma_declare_coherent_memory(struct device *dev, dma_addr_t bus_addr, | ||
| 80 | dma_addr_t device_addr, size_t size, int flags); | ||
| 81 | extern void dma_release_declared_memory(struct device *dev); | ||
| 82 | extern void * dma_mark_declared_memory_occupied(struct device *dev, | ||
| 83 | dma_addr_t device_addr, size_t size); | ||
| 84 | #endif | ||
| 85 | |||
| 86 | #endif /* _ASM_DMA_MAPPING_H */ | 77 | #endif /* _ASM_DMA_MAPPING_H */ |
diff --git a/arch/mips/include/asm/fcntl.h b/arch/mips/include/asm/fcntl.h index 2a52333a062d..7c6681aa2ab8 100644 --- a/arch/mips/include/asm/fcntl.h +++ b/arch/mips/include/asm/fcntl.h | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | 10 | ||
| 11 | 11 | ||
| 12 | #define O_APPEND 0x0008 | 12 | #define O_APPEND 0x0008 |
| 13 | #define O_SYNC 0x0010 | 13 | #define O_DSYNC 0x0010 /* used to be O_SYNC, see below */ |
| 14 | #define O_NONBLOCK 0x0080 | 14 | #define O_NONBLOCK 0x0080 |
| 15 | #define O_CREAT 0x0100 /* not fcntl */ | 15 | #define O_CREAT 0x0100 /* not fcntl */ |
| 16 | #define O_TRUNC 0x0200 /* not fcntl */ | 16 | #define O_TRUNC 0x0200 /* not fcntl */ |
| @@ -18,6 +18,21 @@ | |||
| 18 | #define O_NOCTTY 0x0800 /* not fcntl */ | 18 | #define O_NOCTTY 0x0800 /* not fcntl */ |
| 19 | #define FASYNC 0x1000 /* fcntl, for BSD compatibility */ | 19 | #define FASYNC 0x1000 /* fcntl, for BSD compatibility */ |
| 20 | #define O_LARGEFILE 0x2000 /* allow large file opens */ | 20 | #define O_LARGEFILE 0x2000 /* allow large file opens */ |
| 21 | /* | ||
| 22 | * Before Linux 2.6.32 only O_DSYNC semantics were implemented, but using | ||
| 23 | * the O_SYNC flag. We continue to use the existing numerical value | ||
| 24 | * for O_DSYNC semantics now, but using the correct symbolic name for it. | ||
| 25 | * This new value is used to request true Posix O_SYNC semantics. It is | ||
| 26 | * defined in this strange way to make sure applications compiled against | ||
| 27 | * new headers get at least O_DSYNC semantics on older kernels. | ||
| 28 | * | ||
| 29 | * This has the nice side-effect that we can simply test for O_DSYNC | ||
| 30 | * wherever we do not care if O_DSYNC or O_SYNC is used. | ||
| 31 | * | ||
| 32 | * Note: __O_SYNC must never be used directly. | ||
| 33 | */ | ||
| 34 | #define __O_SYNC 0x4000 | ||
| 35 | #define O_SYNC (__O_SYNC|O_DSYNC) | ||
| 21 | #define O_DIRECT 0x8000 /* direct disk access hint */ | 36 | #define O_DIRECT 0x8000 /* direct disk access hint */ |
| 22 | 37 | ||
| 23 | #define F_GETLK 14 | 38 | #define F_GETLK 14 |
diff --git a/arch/mips/include/asm/fixmap.h b/arch/mips/include/asm/fixmap.h index efeddc8db8b1..0b89b83e2055 100644 --- a/arch/mips/include/asm/fixmap.h +++ b/arch/mips/include/asm/fixmap.h | |||
| @@ -48,9 +48,9 @@ enum fixed_addresses { | |||
| 48 | #define FIX_N_COLOURS 8 | 48 | #define FIX_N_COLOURS 8 |
| 49 | FIX_CMAP_BEGIN, | 49 | FIX_CMAP_BEGIN, |
| 50 | #ifdef CONFIG_MIPS_MT_SMTC | 50 | #ifdef CONFIG_MIPS_MT_SMTC |
| 51 | FIX_CMAP_END = FIX_CMAP_BEGIN + (FIX_N_COLOURS * NR_CPUS), | 51 | FIX_CMAP_END = FIX_CMAP_BEGIN + (FIX_N_COLOURS * NR_CPUS * 2), |
| 52 | #else | 52 | #else |
| 53 | FIX_CMAP_END = FIX_CMAP_BEGIN + FIX_N_COLOURS, | 53 | FIX_CMAP_END = FIX_CMAP_BEGIN + (FIX_N_COLOURS * 2), |
| 54 | #endif | 54 | #endif |
| 55 | #ifdef CONFIG_HIGHMEM | 55 | #ifdef CONFIG_HIGHMEM |
| 56 | /* reserved pte's for temporary kernel mappings */ | 56 | /* reserved pte's for temporary kernel mappings */ |
diff --git a/arch/mips/include/asm/gcmpregs.h b/arch/mips/include/asm/gcmpregs.h index 36fd969d64d6..c0cf76a2ca89 100644 --- a/arch/mips/include/asm/gcmpregs.h +++ b/arch/mips/include/asm/gcmpregs.h | |||
| @@ -19,15 +19,20 @@ | |||
| 19 | #define GCMP_GDB_OFS 0x8000 /* Global Debug Block */ | 19 | #define GCMP_GDB_OFS 0x8000 /* Global Debug Block */ |
| 20 | 20 | ||
| 21 | /* Offsets to individual GCMP registers from GCMP base */ | 21 | /* Offsets to individual GCMP registers from GCMP base */ |
| 22 | #define GCMPOFS(block, tag, reg) (GCMP_##block##_OFS + GCMP_##tag##_##reg##_OFS) | 22 | #define GCMPOFS(block, tag, reg) \ |
| 23 | (GCMP_##block##_OFS + GCMP_##tag##_##reg##_OFS) | ||
| 24 | #define GCMPOFSn(block, tag, reg, n) \ | ||
| 25 | (GCMP_##block##_OFS + GCMP_##tag##_##reg##_OFS(n)) | ||
| 23 | 26 | ||
| 24 | #define GCMPGCBOFS(reg) GCMPOFS(GCB, GCB, reg) | 27 | #define GCMPGCBOFS(reg) GCMPOFS(GCB, GCB, reg) |
| 28 | #define GCMPGCBOFSn(reg, n) GCMPOFSn(GCB, GCB, reg, n) | ||
| 25 | #define GCMPCLCBOFS(reg) GCMPOFS(CLCB, CCB, reg) | 29 | #define GCMPCLCBOFS(reg) GCMPOFS(CLCB, CCB, reg) |
| 26 | #define GCMPCOCBOFS(reg) GCMPOFS(COCB, CCB, reg) | 30 | #define GCMPCOCBOFS(reg) GCMPOFS(COCB, CCB, reg) |
| 27 | #define GCMPGDBOFS(reg) GCMPOFS(GDB, GDB, reg) | 31 | #define GCMPGDBOFS(reg) GCMPOFS(GDB, GDB, reg) |
| 28 | 32 | ||
| 29 | /* GCMP register access */ | 33 | /* GCMP register access */ |
| 30 | #define GCMPGCB(reg) REGP(_gcmp_base, GCMPGCBOFS(reg)) | 34 | #define GCMPGCB(reg) REGP(_gcmp_base, GCMPGCBOFS(reg)) |
| 35 | #define GCMPGCBn(reg, n) REGP(_gcmp_base, GCMPGCBOFSn(reg, n)) | ||
| 31 | #define GCMPCLCB(reg) REGP(_gcmp_base, GCMPCLCBOFS(reg)) | 36 | #define GCMPCLCB(reg) REGP(_gcmp_base, GCMPCLCBOFS(reg)) |
| 32 | #define GCMPCOCB(reg) REGP(_gcmp_base, GCMPCOCBOFS(reg)) | 37 | #define GCMPCOCB(reg) REGP(_gcmp_base, GCMPCOCBOFS(reg)) |
| 33 | #define GCMPGDB(reg) REGP(_gcmp_base, GCMPGDBOFS(reg)) | 38 | #define GCMPGDB(reg) REGP(_gcmp_base, GCMPGDBOFS(reg)) |
| @@ -49,10 +54,10 @@ | |||
| 49 | #define GCMP_GCB_GCMPB_GCMPBASE_MSK GCMPGCBMSK(GCMPB_GCMPBASE, 17) | 54 | #define GCMP_GCB_GCMPB_GCMPBASE_MSK GCMPGCBMSK(GCMPB_GCMPBASE, 17) |
| 50 | #define GCMP_GCB_GCMPB_CMDEFTGT_SHF 0 | 55 | #define GCMP_GCB_GCMPB_CMDEFTGT_SHF 0 |
| 51 | #define GCMP_GCB_GCMPB_CMDEFTGT_MSK GCMPGCBMSK(GCMPB_CMDEFTGT, 2) | 56 | #define GCMP_GCB_GCMPB_CMDEFTGT_MSK GCMPGCBMSK(GCMPB_CMDEFTGT, 2) |
| 52 | #define GCMP_GCB_GCMPB_CMDEFTGT_MEM 0 | 57 | #define GCMP_GCB_GCMPB_CMDEFTGT_DISABLED 0 |
| 53 | #define GCMP_GCB_GCMPB_CMDEFTGT_MEM1 1 | 58 | #define GCMP_GCB_GCMPB_CMDEFTGT_MEM 1 |
| 54 | #define GCMP_GCB_GCMPB_CMDEFTGT_IOCU1 2 | 59 | #define GCMP_GCB_GCMPB_CMDEFTGT_IOCU1 2 |
| 55 | #define GCMP_GCB_GCMPB_CMDEFTGT_IOCU2 3 | 60 | #define GCMP_GCB_GCMPB_CMDEFTGT_IOCU2 3 |
| 56 | #define GCMP_GCB_CCMC_OFS 0x0010 /* Global CM Control */ | 61 | #define GCMP_GCB_CCMC_OFS 0x0010 /* Global CM Control */ |
| 57 | #define GCMP_GCB_GCSRAP_OFS 0x0020 /* Global CSR Access Privilege */ | 62 | #define GCMP_GCB_GCSRAP_OFS 0x0020 /* Global CSR Access Privilege */ |
| 58 | #define GCMP_GCB_GCSRAP_CMACCESS_SHF 0 | 63 | #define GCMP_GCB_GCSRAP_CMACCESS_SHF 0 |
| @@ -115,5 +120,6 @@ | |||
| 115 | #define GCMP_CCB_DBGGROUP_OFS 0x0100 /* DebugBreak Group */ | 120 | #define GCMP_CCB_DBGGROUP_OFS 0x0100 /* DebugBreak Group */ |
| 116 | 121 | ||
| 117 | extern int __init gcmp_probe(unsigned long, unsigned long); | 122 | extern int __init gcmp_probe(unsigned long, unsigned long); |
| 118 | 123 | extern int __init gcmp_niocu(void); | |
| 124 | extern void __init gcmp_setregion(int, unsigned long, unsigned long, int); | ||
| 119 | #endif /* _ASM_GCMPREGS_H */ | 125 | #endif /* _ASM_GCMPREGS_H */ |
diff --git a/arch/mips/include/asm/gic.h b/arch/mips/include/asm/gic.h index a8f57341f123..9b9436a4d816 100644 --- a/arch/mips/include/asm/gic.h +++ b/arch/mips/include/asm/gic.h | |||
| @@ -12,7 +12,6 @@ | |||
| 12 | #define _ASM_GICREGS_H | 12 | #define _ASM_GICREGS_H |
| 13 | 13 | ||
| 14 | #undef GICISBYTELITTLEENDIAN | 14 | #undef GICISBYTELITTLEENDIAN |
| 15 | #define GICISWORDLITTLEENDIAN | ||
| 16 | 15 | ||
| 17 | /* Constants */ | 16 | /* Constants */ |
| 18 | #define GIC_POL_POS 1 | 17 | #define GIC_POL_POS 1 |
| @@ -20,11 +19,7 @@ | |||
| 20 | #define GIC_TRIG_EDGE 1 | 19 | #define GIC_TRIG_EDGE 1 |
| 21 | #define GIC_TRIG_LEVEL 0 | 20 | #define GIC_TRIG_LEVEL 0 |
| 22 | 21 | ||
| 23 | #ifdef CONFIG_SMP | ||
| 24 | #define GIC_NUM_INTRS (24 + NR_CPUS * 2) | 22 | #define GIC_NUM_INTRS (24 + NR_CPUS * 2) |
| 25 | #else | ||
| 26 | #define GIC_NUM_INTRS 32 | ||
| 27 | #endif | ||
| 28 | 23 | ||
| 29 | #define MSK(n) ((1 << (n)) - 1) | 24 | #define MSK(n) ((1 << (n)) - 1) |
| 30 | #define REG32(addr) (*(volatile unsigned int *) (addr)) | 25 | #define REG32(addr) (*(volatile unsigned int *) (addr)) |
| @@ -70,13 +65,13 @@ | |||
| 70 | #define USM_VISIBLE_SECTION_SIZE 0x10000 | 65 | #define USM_VISIBLE_SECTION_SIZE 0x10000 |
| 71 | 66 | ||
| 72 | /* Register Map for Shared Section */ | 67 | /* Register Map for Shared Section */ |
| 73 | #if defined(CONFIG_CPU_LITTLE_ENDIAN) || defined(GICISWORDLITTLEENDIAN) | ||
| 74 | 68 | ||
| 75 | #define GIC_SH_CONFIG_OFS 0x0000 | 69 | #define GIC_SH_CONFIG_OFS 0x0000 |
| 76 | 70 | ||
| 77 | /* Shared Global Counter */ | 71 | /* Shared Global Counter */ |
| 78 | #define GIC_SH_COUNTER_31_00_OFS 0x0010 | 72 | #define GIC_SH_COUNTER_31_00_OFS 0x0010 |
| 79 | #define GIC_SH_COUNTER_63_32_OFS 0x0014 | 73 | #define GIC_SH_COUNTER_63_32_OFS 0x0014 |
| 74 | #define GIC_SH_REVISIONID_OFS 0x0020 | ||
| 80 | 75 | ||
| 81 | /* Interrupt Polarity */ | 76 | /* Interrupt Polarity */ |
| 82 | #define GIC_SH_POL_31_0_OFS 0x0100 | 77 | #define GIC_SH_POL_31_0_OFS 0x0100 |
| @@ -164,24 +159,31 @@ | |||
| 164 | (GIC_SH_INTR_MAP_TO_VPE_BASE_OFS + (32 * (intr)) + (((vpe) / 32) * 4)) | 159 | (GIC_SH_INTR_MAP_TO_VPE_BASE_OFS + (32 * (intr)) + (((vpe) / 32) * 4)) |
| 165 | #define GIC_SH_MAP_TO_VPE_REG_BIT(vpe) (1 << ((vpe) % 32)) | 160 | #define GIC_SH_MAP_TO_VPE_REG_BIT(vpe) (1 << ((vpe) % 32)) |
| 166 | 161 | ||
| 162 | /* Convert an interrupt number to a byte offset/bit for multi-word registers */ | ||
| 163 | #define GIC_INTR_OFS(intr) (((intr) / 32)*4) | ||
| 164 | #define GIC_INTR_BIT(intr) ((intr) % 32) | ||
| 165 | |||
| 167 | /* Polarity : Reset Value is always 0 */ | 166 | /* Polarity : Reset Value is always 0 */ |
| 168 | #define GIC_SH_SET_POLARITY_OFS 0x0100 | 167 | #define GIC_SH_SET_POLARITY_OFS 0x0100 |
| 169 | #define GIC_SET_POLARITY(intr, pol) \ | 168 | #define GIC_SET_POLARITY(intr, pol) \ |
| 170 | GICBIS(GIC_REG_ADDR(SHARED, GIC_SH_SET_POLARITY_OFS + (((intr) / 32) * 4)), (pol) << ((intr) % 32)) | 169 | GICBIS(GIC_REG_ADDR(SHARED, GIC_SH_SET_POLARITY_OFS + \ |
| 170 | GIC_INTR_OFS(intr)), (pol) << GIC_INTR_BIT(intr)) | ||
| 171 | 171 | ||
| 172 | /* Triggering : Reset Value is always 0 */ | 172 | /* Triggering : Reset Value is always 0 */ |
| 173 | #define GIC_SH_SET_TRIGGER_OFS 0x0180 | 173 | #define GIC_SH_SET_TRIGGER_OFS 0x0180 |
| 174 | #define GIC_SET_TRIGGER(intr, trig) \ | 174 | #define GIC_SET_TRIGGER(intr, trig) \ |
| 175 | GICBIS(GIC_REG_ADDR(SHARED, GIC_SH_SET_TRIGGER_OFS + (((intr) / 32) * 4)), (trig) << ((intr) % 32)) | 175 | GICBIS(GIC_REG_ADDR(SHARED, GIC_SH_SET_TRIGGER_OFS + \ |
| 176 | GIC_INTR_OFS(intr)), (trig) << GIC_INTR_BIT(intr)) | ||
| 176 | 177 | ||
| 177 | /* Mask manipulation */ | 178 | /* Mask manipulation */ |
| 178 | #define GIC_SH_SMASK_OFS 0x0380 | 179 | #define GIC_SH_SMASK_OFS 0x0380 |
| 179 | #define GIC_SET_INTR_MASK(intr, val) \ | 180 | #define GIC_SET_INTR_MASK(intr) \ |
| 180 | GICWRITE(GIC_REG_ADDR(SHARED, GIC_SH_SMASK_OFS + (((intr) / 32) * 4)), ((val) << ((intr) % 32))) | 181 | GICWRITE(GIC_REG_ADDR(SHARED, GIC_SH_SMASK_OFS + \ |
| 181 | 182 | GIC_INTR_OFS(intr)), 1 << GIC_INTR_BIT(intr)) | |
| 182 | #define GIC_SH_RMASK_OFS 0x0300 | 183 | #define GIC_SH_RMASK_OFS 0x0300 |
| 183 | #define GIC_CLR_INTR_MASK(intr, val) \ | 184 | #define GIC_CLR_INTR_MASK(intr) \ |
| 184 | GICWRITE(GIC_REG_ADDR(SHARED, GIC_SH_RMASK_OFS + (((intr) / 32) * 4)), ((val) << ((intr) % 32))) | 185 | GICWRITE(GIC_REG_ADDR(SHARED, GIC_SH_RMASK_OFS + \ |
| 186 | GIC_INTR_OFS(intr)), 1 << GIC_INTR_BIT(intr)) | ||
| 185 | 187 | ||
| 186 | /* Register Map for Local Section */ | 188 | /* Register Map for Local Section */ |
| 187 | #define GIC_VPE_CTL_OFS 0x0000 | 189 | #define GIC_VPE_CTL_OFS 0x0000 |
| @@ -219,161 +221,6 @@ | |||
| 219 | #define GIC_UMV_SH_COUNTER_31_00_OFS 0x0000 | 221 | #define GIC_UMV_SH_COUNTER_31_00_OFS 0x0000 |
| 220 | #define GIC_UMV_SH_COUNTER_63_32_OFS 0x0004 | 222 | #define GIC_UMV_SH_COUNTER_63_32_OFS 0x0004 |
| 221 | 223 | ||
| 222 | #else /* CONFIG_CPU_BIG_ENDIAN */ | ||
| 223 | |||
| 224 | #define GIC_SH_CONFIG_OFS 0x0000 | ||
| 225 | |||
| 226 | /* Shared Global Counter */ | ||
| 227 | #define GIC_SH_COUNTER_31_00_OFS 0x0014 | ||
| 228 | #define GIC_SH_COUNTER_63_32_OFS 0x0010 | ||
| 229 | |||
| 230 | /* Interrupt Polarity */ | ||
| 231 | #define GIC_SH_POL_31_0_OFS 0x0104 | ||
| 232 | #define GIC_SH_POL_63_32_OFS 0x0100 | ||
| 233 | #define GIC_SH_POL_95_64_OFS 0x010c | ||
| 234 | #define GIC_SH_POL_127_96_OFS 0x0108 | ||
| 235 | #define GIC_SH_POL_159_128_OFS 0x0114 | ||
| 236 | #define GIC_SH_POL_191_160_OFS 0x0110 | ||
| 237 | #define GIC_SH_POL_223_192_OFS 0x011c | ||
| 238 | #define GIC_SH_POL_255_224_OFS 0x0118 | ||
| 239 | |||
| 240 | /* Edge/Level Triggering */ | ||
| 241 | #define GIC_SH_TRIG_31_0_OFS 0x0184 | ||
| 242 | #define GIC_SH_TRIG_63_32_OFS 0x0180 | ||
| 243 | #define GIC_SH_TRIG_95_64_OFS 0x018c | ||
| 244 | #define GIC_SH_TRIG_127_96_OFS 0x0188 | ||
| 245 | #define GIC_SH_TRIG_159_128_OFS 0x0194 | ||
| 246 | #define GIC_SH_TRIG_191_160_OFS 0x0190 | ||
| 247 | #define GIC_SH_TRIG_223_192_OFS 0x019c | ||
| 248 | #define GIC_SH_TRIG_255_224_OFS 0x0198 | ||
| 249 | |||
| 250 | /* Dual Edge Triggering */ | ||
| 251 | #define GIC_SH_DUAL_31_0_OFS 0x0204 | ||
| 252 | #define GIC_SH_DUAL_63_32_OFS 0x0200 | ||
| 253 | #define GIC_SH_DUAL_95_64_OFS 0x020c | ||
| 254 | #define GIC_SH_DUAL_127_96_OFS 0x0208 | ||
| 255 | #define GIC_SH_DUAL_159_128_OFS 0x0214 | ||
| 256 | #define GIC_SH_DUAL_191_160_OFS 0x0210 | ||
| 257 | #define GIC_SH_DUAL_223_192_OFS 0x021c | ||
| 258 | #define GIC_SH_DUAL_255_224_OFS 0x0218 | ||
| 259 | |||
| 260 | /* Set/Clear corresponding bit in Edge Detect Register */ | ||
| 261 | #define GIC_SH_WEDGE_OFS 0x0280 | ||
| 262 | |||
| 263 | /* Reset Mask - Disables Interrupt */ | ||
| 264 | #define GIC_SH_RMASK_31_0_OFS 0x0304 | ||
| 265 | #define GIC_SH_RMASK_63_32_OFS 0x0300 | ||
| 266 | #define GIC_SH_RMASK_95_64_OFS 0x030c | ||
| 267 | #define GIC_SH_RMASK_127_96_OFS 0x0308 | ||
| 268 | #define GIC_SH_RMASK_159_128_OFS 0x0314 | ||
| 269 | #define GIC_SH_RMASK_191_160_OFS 0x0310 | ||
| 270 | #define GIC_SH_RMASK_223_192_OFS 0x031c | ||
| 271 | #define GIC_SH_RMASK_255_224_OFS 0x0318 | ||
| 272 | |||
| 273 | /* Set Mask (WO) - Enables Interrupt */ | ||
| 274 | #define GIC_SH_SMASK_31_0_OFS 0x0384 | ||
| 275 | #define GIC_SH_SMASK_63_32_OFS 0x0380 | ||
| 276 | #define GIC_SH_SMASK_95_64_OFS 0x038c | ||
| 277 | #define GIC_SH_SMASK_127_96_OFS 0x0388 | ||
| 278 | #define GIC_SH_SMASK_159_128_OFS 0x0394 | ||
| 279 | #define GIC_SH_SMASK_191_160_OFS 0x0390 | ||
| 280 | #define GIC_SH_SMASK_223_192_OFS 0x039c | ||
| 281 | #define GIC_SH_SMASK_255_224_OFS 0x0398 | ||
| 282 | |||
| 283 | /* Global Interrupt Mask Register (RO) - Bit Set == Interrupt enabled */ | ||
| 284 | #define GIC_SH_MASK_31_0_OFS 0x0404 | ||
| 285 | #define GIC_SH_MASK_63_32_OFS 0x0400 | ||
| 286 | #define GIC_SH_MASK_95_64_OFS 0x040c | ||
| 287 | #define GIC_SH_MASK_127_96_OFS 0x0408 | ||
| 288 | #define GIC_SH_MASK_159_128_OFS 0x0414 | ||
| 289 | #define GIC_SH_MASK_191_160_OFS 0x0410 | ||
| 290 | #define GIC_SH_MASK_223_192_OFS 0x041c | ||
| 291 | #define GIC_SH_MASK_255_224_OFS 0x0418 | ||
| 292 | |||
| 293 | /* Pending Global Interrupts (RO) */ | ||
| 294 | #define GIC_SH_PEND_31_0_OFS 0x0484 | ||
| 295 | #define GIC_SH_PEND_63_32_OFS 0x0480 | ||
| 296 | #define GIC_SH_PEND_95_64_OFS 0x048c | ||
| 297 | #define GIC_SH_PEND_127_96_OFS 0x0488 | ||
| 298 | #define GIC_SH_PEND_159_128_OFS 0x0494 | ||
| 299 | #define GIC_SH_PEND_191_160_OFS 0x0490 | ||
| 300 | #define GIC_SH_PEND_223_192_OFS 0x049c | ||
| 301 | #define GIC_SH_PEND_255_224_OFS 0x0498 | ||
| 302 | |||
| 303 | #define GIC_SH_INTR_MAP_TO_PIN_BASE_OFS 0x0500 | ||
| 304 | |||
| 305 | /* Maps Interrupt X to a Pin */ | ||
| 306 | #define GIC_SH_MAP_TO_PIN(intr) \ | ||
| 307 | (GIC_SH_INTR_MAP_TO_PIN_BASE_OFS + (4 * intr)) | ||
| 308 | |||
| 309 | #define GIC_SH_INTR_MAP_TO_VPE_BASE_OFS 0x2004 | ||
| 310 | |||
| 311 | /* | ||
| 312 | * Maps Interrupt X to a VPE. This is more complex than the LE case, as | ||
| 313 | * odd and even registers need to be transposed. It does work - trust me! | ||
| 314 | */ | ||
| 315 | #define GIC_SH_MAP_TO_VPE_REG_OFF(intr, vpe) \ | ||
| 316 | (GIC_SH_INTR_MAP_TO_VPE_BASE_OFS + (32 * (intr)) + \ | ||
| 317 | (((((vpe) / 32) ^ 1) - 1) * 4)) | ||
| 318 | #define GIC_SH_MAP_TO_VPE_REG_BIT(vpe) (1 << ((vpe) % 32)) | ||
| 319 | |||
| 320 | /* Polarity */ | ||
| 321 | #define GIC_SH_SET_POLARITY_OFS 0x0100 | ||
| 322 | #define GIC_SET_POLARITY(intr, pol) \ | ||
| 323 | GICBIS(GIC_REG_ADDR(SHARED, GIC_SH_SET_POLARITY_OFS + 4 + (((((intr) / 32) ^ 1) - 1) * 4)), (pol) << ((intr) % 32)) | ||
| 324 | |||
| 325 | /* Triggering */ | ||
| 326 | #define GIC_SH_SET_TRIGGER_OFS 0x0180 | ||
| 327 | #define GIC_SET_TRIGGER(intr, trig) \ | ||
| 328 | GICBIS(GIC_REG_ADDR(SHARED, GIC_SH_SET_TRIGGER_OFS + 4 + (((((intr) / 32) ^ 1) - 1) * 4)), (trig) << ((intr) % 32)) | ||
| 329 | |||
| 330 | /* Mask manipulation */ | ||
| 331 | #define GIC_SH_SMASK_OFS 0x0380 | ||
| 332 | #define GIC_SET_INTR_MASK(intr, val) \ | ||
| 333 | GICWRITE(GIC_REG_ADDR(SHARED, GIC_SH_SMASK_OFS + 4 + (((((intr) / 32) ^ 1) - 1) * 4)), ((val) << ((intr) % 32))) | ||
| 334 | |||
| 335 | #define GIC_SH_RMASK_OFS 0x0300 | ||
| 336 | #define GIC_CLR_INTR_MASK(intr, val) \ | ||
| 337 | GICWRITE(GIC_REG_ADDR(SHARED, GIC_SH_RMASK_OFS + 4 + (((((intr) / 32) ^ 1) - 1) * 4)), ((val) << ((intr) % 32))) | ||
| 338 | |||
| 339 | /* Register Map for Local Section */ | ||
| 340 | #define GIC_VPE_CTL_OFS 0x0000 | ||
| 341 | #define GIC_VPE_PEND_OFS 0x0004 | ||
| 342 | #define GIC_VPE_MASK_OFS 0x0008 | ||
| 343 | #define GIC_VPE_RMASK_OFS 0x000c | ||
| 344 | #define GIC_VPE_SMASK_OFS 0x0010 | ||
| 345 | #define GIC_VPE_WD_MAP_OFS 0x0040 | ||
| 346 | #define GIC_VPE_COMPARE_MAP_OFS 0x0044 | ||
| 347 | #define GIC_VPE_TIMER_MAP_OFS 0x0048 | ||
| 348 | #define GIC_VPE_PERFCTR_MAP_OFS 0x0050 | ||
| 349 | #define GIC_VPE_SWINT0_MAP_OFS 0x0054 | ||
| 350 | #define GIC_VPE_SWINT1_MAP_OFS 0x0058 | ||
| 351 | #define GIC_VPE_OTHER_ADDR_OFS 0x0080 | ||
| 352 | #define GIC_VPE_WD_CONFIG0_OFS 0x0090 | ||
| 353 | #define GIC_VPE_WD_COUNT0_OFS 0x0094 | ||
| 354 | #define GIC_VPE_WD_INITIAL0_OFS 0x0098 | ||
| 355 | #define GIC_VPE_COMPARE_LO_OFS 0x00a4 | ||
| 356 | #define GIC_VPE_COMPARE_HI_OFS 0x00a0 | ||
| 357 | |||
| 358 | #define GIC_VPE_EIC_SHADOW_SET_BASE 0x0100 | ||
| 359 | #define GIC_VPE_EIC_SS(intr) \ | ||
| 360 | (GIC_EIC_SHADOW_SET_BASE + (4 * intr)) | ||
| 361 | |||
| 362 | #define GIC_VPE_EIC_VEC_BASE 0x0800 | ||
| 363 | #define GIC_VPE_EIC_VEC(intr) \ | ||
| 364 | (GIC_VPE_EIC_VEC_BASE + (4 * intr)) | ||
| 365 | |||
| 366 | #define GIC_VPE_TENABLE_NMI_OFS 0x1000 | ||
| 367 | #define GIC_VPE_TENABLE_YQ_OFS 0x1004 | ||
| 368 | #define GIC_VPE_TENABLE_INT_31_0_OFS 0x1080 | ||
| 369 | #define GIC_VPE_TENABLE_INT_63_32_OFS 0x1084 | ||
| 370 | |||
| 371 | /* User Mode Visible Section Register Map */ | ||
| 372 | #define GIC_UMV_SH_COUNTER_31_00_OFS 0x0004 | ||
| 373 | #define GIC_UMV_SH_COUNTER_63_32_OFS 0x0000 | ||
| 374 | |||
| 375 | #endif /* !LE */ | ||
| 376 | |||
| 377 | /* Masks */ | 224 | /* Masks */ |
| 378 | #define GIC_SH_CONFIG_COUNTSTOP_SHF 28 | 225 | #define GIC_SH_CONFIG_COUNTSTOP_SHF 28 |
| 379 | #define GIC_SH_CONFIG_COUNTSTOP_MSK (MSK(1) << GIC_SH_CONFIG_COUNTSTOP_SHF) | 226 | #define GIC_SH_CONFIG_COUNTSTOP_MSK (MSK(1) << GIC_SH_CONFIG_COUNTSTOP_SHF) |
| @@ -473,12 +320,13 @@ struct gic_intrmask_regs { | |||
| 473 | * in building ipi_map. | 320 | * in building ipi_map. |
| 474 | */ | 321 | */ |
| 475 | struct gic_intr_map { | 322 | struct gic_intr_map { |
| 476 | unsigned int intrnum; /* Ext Intr Num */ | ||
| 477 | unsigned int cpunum; /* Directed to this CPU */ | 323 | unsigned int cpunum; /* Directed to this CPU */ |
| 478 | unsigned int pin; /* Directed to this Pin */ | 324 | unsigned int pin; /* Directed to this Pin */ |
| 479 | unsigned int polarity; /* Polarity : +/- */ | 325 | unsigned int polarity; /* Polarity : +/- */ |
| 480 | unsigned int trigtype; /* Trigger : Edge/Levl */ | 326 | unsigned int trigtype; /* Trigger : Edge/Levl */ |
| 481 | unsigned int ipiflag; /* Is used for IPI ? */ | 327 | unsigned int flags; /* Misc flags */ |
| 328 | #define GIC_FLAG_IPI 0x01 | ||
| 329 | #define GIC_FLAG_TRANSPARENT 0x02 | ||
| 482 | }; | 330 | }; |
| 483 | 331 | ||
| 484 | extern void gic_init(unsigned long gic_base_addr, | 332 | extern void gic_init(unsigned long gic_base_addr, |
diff --git a/arch/mips/include/asm/mach-ar7/ar7.h b/arch/mips/include/asm/mach-ar7/ar7.h index de71694614de..21cbbc706448 100644 --- a/arch/mips/include/asm/mach-ar7/ar7.h +++ b/arch/mips/include/asm/mach-ar7/ar7.h | |||
| @@ -78,6 +78,9 @@ | |||
| 78 | #define AR7_REF_CLOCK 25000000 | 78 | #define AR7_REF_CLOCK 25000000 |
| 79 | #define AR7_XTAL_CLOCK 24000000 | 79 | #define AR7_XTAL_CLOCK 24000000 |
| 80 | 80 | ||
| 81 | /* DCL */ | ||
| 82 | #define AR7_WDT_HW_ENA 0x10 | ||
| 83 | |||
| 81 | struct plat_cpmac_data { | 84 | struct plat_cpmac_data { |
| 82 | int reset_bit; | 85 | int reset_bit; |
| 83 | int power_bit; | 86 | int power_bit; |
diff --git a/arch/mips/include/asm/mach-au1x00/gpio-au1000.h b/arch/mips/include/asm/mach-au1x00/gpio-au1000.h index feea00148b5d..91595fa89034 100644 --- a/arch/mips/include/asm/mach-au1x00/gpio-au1000.h +++ b/arch/mips/include/asm/mach-au1x00/gpio-au1000.h | |||
| @@ -104,6 +104,8 @@ static inline int au1100_gpio2_to_irq(int gpio) | |||
| 104 | 104 | ||
| 105 | if ((gpio >= 8) && (gpio <= 15)) | 105 | if ((gpio >= 8) && (gpio <= 15)) |
| 106 | return MAKE_IRQ(0, 29); /* shared GPIO208_215 */ | 106 | return MAKE_IRQ(0, 29); /* shared GPIO208_215 */ |
| 107 | |||
| 108 | return -ENXIO; | ||
| 107 | } | 109 | } |
| 108 | 110 | ||
| 109 | #ifdef CONFIG_SOC_AU1100 | 111 | #ifdef CONFIG_SOC_AU1100 |
diff --git a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_uart.h b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_uart.h deleted file mode 100644 index bf348f573bbc..000000000000 --- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_uart.h +++ /dev/null | |||
| @@ -1,6 +0,0 @@ | |||
| 1 | #ifndef BCM63XX_DEV_UART_H_ | ||
| 2 | #define BCM63XX_DEV_UART_H_ | ||
| 3 | |||
| 4 | int bcm63xx_uart_register(void); | ||
| 5 | |||
| 6 | #endif /* BCM63XX_DEV_UART_H_ */ | ||
diff --git a/arch/mips/include/asm/mach-ip27/topology.h b/arch/mips/include/asm/mach-ip27/topology.h index f6837422fe65..09a59bcc1b07 100644 --- a/arch/mips/include/asm/mach-ip27/topology.h +++ b/arch/mips/include/asm/mach-ip27/topology.h | |||
| @@ -44,8 +44,8 @@ extern unsigned char __node_distances[MAX_COMPACT_NODES][MAX_COMPACT_NODES]; | |||
| 44 | .busy_factor = 32, \ | 44 | .busy_factor = 32, \ |
| 45 | .imbalance_pct = 125, \ | 45 | .imbalance_pct = 125, \ |
| 46 | .cache_nice_tries = 1, \ | 46 | .cache_nice_tries = 1, \ |
| 47 | .flags = SD_LOAD_BALANCE \ | 47 | .flags = SD_LOAD_BALANCE | \ |
| 48 | | SD_BALANCE_EXEC \ | 48 | SD_BALANCE_EXEC, \ |
| 49 | .last_balance = jiffies, \ | 49 | .last_balance = jiffies, \ |
| 50 | .balance_interval = 1, \ | 50 | .balance_interval = 1, \ |
| 51 | .nr_balance_failed = 0, \ | 51 | .nr_balance_failed = 0, \ |
diff --git a/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h b/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h index ce5b6e270e3f..9947e57c91de 100644 --- a/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h +++ b/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h | |||
| @@ -29,7 +29,7 @@ | |||
| 29 | #define cpu_has_cache_cdex_p 0 | 29 | #define cpu_has_cache_cdex_p 0 |
| 30 | #define cpu_has_cache_cdex_s 0 | 30 | #define cpu_has_cache_cdex_s 0 |
| 31 | #define cpu_has_counter 1 | 31 | #define cpu_has_counter 1 |
| 32 | #define cpu_has_dc_aliases 1 | 32 | #define cpu_has_dc_aliases (PAGE_SIZE < 0x4000) |
| 33 | #define cpu_has_divec 0 | 33 | #define cpu_has_divec 0 |
| 34 | #define cpu_has_dsp 0 | 34 | #define cpu_has_dsp 0 |
| 35 | #define cpu_has_ejtag 0 | 35 | #define cpu_has_ejtag 0 |
| @@ -54,6 +54,5 @@ | |||
| 54 | #define cpu_has_vce 0 | 54 | #define cpu_has_vce 0 |
| 55 | #define cpu_has_vtag_icache 0 | 55 | #define cpu_has_vtag_icache 0 |
| 56 | #define cpu_has_watch 1 | 56 | #define cpu_has_watch 1 |
| 57 | #define cpu_icache_snoops_remote_store 1 | ||
| 58 | 57 | ||
| 59 | #endif /* __ASM_MACH_LOONGSON_CPU_FEATURE_OVERRIDES_H */ | 58 | #endif /* __ASM_MACH_LOONGSON_CPU_FEATURE_OVERRIDES_H */ |
diff --git a/arch/mips/include/asm/mach-pnx833x/gpio.h b/arch/mips/include/asm/mach-pnx833x/gpio.h index 8de0eb9c98a3..ed3a88da70f6 100644 --- a/arch/mips/include/asm/mach-pnx833x/gpio.h +++ b/arch/mips/include/asm/mach-pnx833x/gpio.h | |||
| @@ -24,7 +24,7 @@ | |||
| 24 | 24 | ||
| 25 | /* BIG FAT WARNING: races danger! | 25 | /* BIG FAT WARNING: races danger! |
| 26 | No protections exist here. Current users are only early init code, | 26 | No protections exist here. Current users are only early init code, |
| 27 | when locking is not needed because no cuncurency yet exists there, | 27 | when locking is not needed because no concurrency yet exists there, |
| 28 | and GPIO IRQ dispatcher, which does locking. | 28 | and GPIO IRQ dispatcher, which does locking. |
| 29 | However, if many uses will ever happen, proper locking will be needed | 29 | However, if many uses will ever happen, proper locking will be needed |
| 30 | - including locking between different uses | 30 | - including locking between different uses |
diff --git a/arch/mips/include/asm/mman.h b/arch/mips/include/asm/mman.h index a2250f390a29..c892bfb3e2c1 100644 --- a/arch/mips/include/asm/mman.h +++ b/arch/mips/include/asm/mman.h | |||
| @@ -75,6 +75,7 @@ | |||
| 75 | 75 | ||
| 76 | #define MADV_MERGEABLE 12 /* KSM may merge identical pages */ | 76 | #define MADV_MERGEABLE 12 /* KSM may merge identical pages */ |
| 77 | #define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages */ | 77 | #define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages */ |
| 78 | #define MADV_HWPOISON 100 /* poison a page for testing */ | ||
| 78 | 79 | ||
| 79 | /* compatibility flags */ | 80 | /* compatibility flags */ |
| 80 | #define MAP_FILE 0 | 81 | #define MAP_FILE 0 |
diff --git a/arch/mips/include/asm/mmu_context.h b/arch/mips/include/asm/mmu_context.h index d9743536a621..6083db586500 100644 --- a/arch/mips/include/asm/mmu_context.h +++ b/arch/mips/include/asm/mmu_context.h | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | #include <linux/smp.h> | 16 | #include <linux/smp.h> |
| 17 | #include <linux/slab.h> | 17 | #include <linux/slab.h> |
| 18 | #include <asm/cacheflush.h> | 18 | #include <asm/cacheflush.h> |
| 19 | #include <asm/hazards.h> | ||
| 19 | #include <asm/tlbflush.h> | 20 | #include <asm/tlbflush.h> |
| 20 | #ifdef CONFIG_MIPS_MT_SMTC | 21 | #ifdef CONFIG_MIPS_MT_SMTC |
| 21 | #include <asm/mipsmtregs.h> | 22 | #include <asm/mipsmtregs.h> |
| @@ -36,11 +37,13 @@ extern unsigned long pgd_current[]; | |||
| 36 | #ifdef CONFIG_32BIT | 37 | #ifdef CONFIG_32BIT |
| 37 | #define TLBMISS_HANDLER_SETUP() \ | 38 | #define TLBMISS_HANDLER_SETUP() \ |
| 38 | write_c0_context((unsigned long) smp_processor_id() << 25); \ | 39 | write_c0_context((unsigned long) smp_processor_id() << 25); \ |
| 40 | back_to_back_c0_hazard(); \ | ||
| 39 | TLBMISS_HANDLER_SETUP_PGD(swapper_pg_dir) | 41 | TLBMISS_HANDLER_SETUP_PGD(swapper_pg_dir) |
| 40 | #endif | 42 | #endif |
| 41 | #ifdef CONFIG_64BIT | 43 | #ifdef CONFIG_64BIT |
| 42 | #define TLBMISS_HANDLER_SETUP() \ | 44 | #define TLBMISS_HANDLER_SETUP() \ |
| 43 | write_c0_context((unsigned long) smp_processor_id() << 26); \ | 45 | write_c0_context((unsigned long) smp_processor_id() << 26); \ |
| 46 | back_to_back_c0_hazard(); \ | ||
| 44 | TLBMISS_HANDLER_SETUP_PGD(swapper_pg_dir) | 47 | TLBMISS_HANDLER_SETUP_PGD(swapper_pg_dir) |
| 45 | #endif | 48 | #endif |
| 46 | 49 | ||
| @@ -165,12 +168,12 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, | |||
| 165 | * having ASID_MASK smaller than the hardware maximum, | 168 | * having ASID_MASK smaller than the hardware maximum, |
| 166 | * make sure no "soft" bits become "hard"... | 169 | * make sure no "soft" bits become "hard"... |
| 167 | */ | 170 | */ |
| 168 | write_c0_entryhi((read_c0_entryhi() & ~HW_ASID_MASK) | 171 | write_c0_entryhi((read_c0_entryhi() & ~HW_ASID_MASK) | |
| 169 | | (cpu_context(cpu, next) & ASID_MASK)); | 172 | cpu_asid(cpu, next)); |
| 170 | ehb(); /* Make sure it propagates to TCStatus */ | 173 | ehb(); /* Make sure it propagates to TCStatus */ |
| 171 | evpe(mtflags); | 174 | evpe(mtflags); |
| 172 | #else | 175 | #else |
| 173 | write_c0_entryhi(cpu_context(cpu, next)); | 176 | write_c0_entryhi(cpu_asid(cpu, next)); |
| 174 | #endif /* CONFIG_MIPS_MT_SMTC */ | 177 | #endif /* CONFIG_MIPS_MT_SMTC */ |
| 175 | TLBMISS_HANDLER_SETUP_PGD(next->pgd); | 178 | TLBMISS_HANDLER_SETUP_PGD(next->pgd); |
| 176 | 179 | ||
| @@ -226,11 +229,11 @@ activate_mm(struct mm_struct *prev, struct mm_struct *next) | |||
| 226 | } | 229 | } |
| 227 | /* See comments for similar code above */ | 230 | /* See comments for similar code above */ |
| 228 | write_c0_entryhi((read_c0_entryhi() & ~HW_ASID_MASK) | | 231 | write_c0_entryhi((read_c0_entryhi() & ~HW_ASID_MASK) | |
| 229 | (cpu_context(cpu, next) & ASID_MASK)); | 232 | cpu_asid(cpu, next)); |
| 230 | ehb(); /* Make sure it propagates to TCStatus */ | 233 | ehb(); /* Make sure it propagates to TCStatus */ |
| 231 | evpe(mtflags); | 234 | evpe(mtflags); |
| 232 | #else | 235 | #else |
| 233 | write_c0_entryhi(cpu_context(cpu, next)); | 236 | write_c0_entryhi(cpu_asid(cpu, next)); |
| 234 | #endif /* CONFIG_MIPS_MT_SMTC */ | 237 | #endif /* CONFIG_MIPS_MT_SMTC */ |
| 235 | TLBMISS_HANDLER_SETUP_PGD(next->pgd); | 238 | TLBMISS_HANDLER_SETUP_PGD(next->pgd); |
| 236 | 239 | ||
diff --git a/arch/mips/include/asm/setup.h b/arch/mips/include/asm/setup.h index e600cedda976..50511aac04e9 100644 --- a/arch/mips/include/asm/setup.h +++ b/arch/mips/include/asm/setup.h | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | #ifndef _MIPS_SETUP_H | 1 | #ifndef _MIPS_SETUP_H |
| 2 | #define _MIPS_SETUP_H | 2 | #define _MIPS_SETUP_H |
| 3 | 3 | ||
| 4 | #define COMMAND_LINE_SIZE 256 | 4 | #define COMMAND_LINE_SIZE 4096 |
| 5 | 5 | ||
| 6 | #ifdef __KERNEL__ | 6 | #ifdef __KERNEL__ |
| 7 | extern void setup_early_printk(void); | 7 | extern void setup_early_printk(void); |
diff --git a/arch/mips/include/asm/sgi/ioc.h b/arch/mips/include/asm/sgi/ioc.h index 343ed15f8dc4..57a971904cfe 100644 --- a/arch/mips/include/asm/sgi/ioc.h +++ b/arch/mips/include/asm/sgi/ioc.h | |||
| @@ -164,7 +164,7 @@ struct sgioc_regs { | |||
| 164 | u32 _unused5; | 164 | u32 _unused5; |
| 165 | u8 _write[3]; | 165 | u8 _write[3]; |
| 166 | volatile u8 write; | 166 | volatile u8 write; |
| 167 | #define SGIOC_WRITE_NTHRESH 0x01 /* use 4.5db threshhold */ | 167 | #define SGIOC_WRITE_NTHRESH 0x01 /* use 4.5db threshold */ |
| 168 | #define SGIOC_WRITE_TPSPEED 0x02 /* use 100ohm TP speed */ | 168 | #define SGIOC_WRITE_TPSPEED 0x02 /* use 100ohm TP speed */ |
| 169 | #define SGIOC_WRITE_EPSEL 0x04 /* force cable mode: 1=AUI 0=TP */ | 169 | #define SGIOC_WRITE_EPSEL 0x04 /* force cable mode: 1=AUI 0=TP */ |
| 170 | #define SGIOC_WRITE_EASEL 0x08 /* 1=autoselect 0=manual cable selection */ | 170 | #define SGIOC_WRITE_EASEL 0x08 /* 1=autoselect 0=manual cable selection */ |
diff --git a/arch/mips/include/asm/sibyte/sb1250_mac.h b/arch/mips/include/asm/sibyte/sb1250_mac.h index b6faf08ca81d..591b9061fd8e 100644 --- a/arch/mips/include/asm/sibyte/sb1250_mac.h +++ b/arch/mips/include/asm/sibyte/sb1250_mac.h | |||
| @@ -212,7 +212,7 @@ | |||
| 212 | #define G_MAC_TXD_WEIGHT1(x) _SB_GETVALUE(x, S_MAC_TXD_WEIGHT1, M_MAC_TXD_WEIGHT1) | 212 | #define G_MAC_TXD_WEIGHT1(x) _SB_GETVALUE(x, S_MAC_TXD_WEIGHT1, M_MAC_TXD_WEIGHT1) |
| 213 | 213 | ||
| 214 | /* | 214 | /* |
| 215 | * MAC Fifo Threshhold registers (Table 9-14) | 215 | * MAC Fifo Threshold registers (Table 9-14) |
| 216 | * Register: MAC_THRSH_CFG_0 | 216 | * Register: MAC_THRSH_CFG_0 |
| 217 | * Register: MAC_THRSH_CFG_1 | 217 | * Register: MAC_THRSH_CFG_1 |
| 218 | * Register: MAC_THRSH_CFG_2 | 218 | * Register: MAC_THRSH_CFG_2 |
diff --git a/arch/mips/include/asm/smtc_ipi.h b/arch/mips/include/asm/smtc_ipi.h index 8ce517574340..15278dbd7e79 100644 --- a/arch/mips/include/asm/smtc_ipi.h +++ b/arch/mips/include/asm/smtc_ipi.h | |||
| @@ -45,6 +45,7 @@ struct smtc_ipi_q { | |||
| 45 | spinlock_t lock; | 45 | spinlock_t lock; |
| 46 | struct smtc_ipi *tail; | 46 | struct smtc_ipi *tail; |
| 47 | int depth; | 47 | int depth; |
| 48 | int resched_flag; /* reschedule already queued */ | ||
| 48 | }; | 49 | }; |
| 49 | 50 | ||
| 50 | static inline void smtc_ipi_nq(struct smtc_ipi_q *q, struct smtc_ipi *p) | 51 | static inline void smtc_ipi_nq(struct smtc_ipi_q *q, struct smtc_ipi *p) |
diff --git a/arch/mips/include/asm/sn/sn0/hubio.h b/arch/mips/include/asm/sn/sn0/hubio.h index d0c29d4de084..31c76c021bb6 100644 --- a/arch/mips/include/asm/sn/sn0/hubio.h +++ b/arch/mips/include/asm/sn/sn0/hubio.h | |||
| @@ -825,7 +825,7 @@ typedef union iprb_u { | |||
| 825 | struct { | 825 | struct { |
| 826 | u64 rsvd1: 15, | 826 | u64 rsvd1: 15, |
| 827 | error: 1, /* Widget rcvd wr resp pkt w/ error */ | 827 | error: 1, /* Widget rcvd wr resp pkt w/ error */ |
| 828 | ovflow: 5, /* Over flow count. perf measurement */ | 828 | ovflow: 5, /* Overflow count. perf measurement */ |
| 829 | fire_and_forget: 1, /* Launch Write without response */ | 829 | fire_and_forget: 1, /* Launch Write without response */ |
| 830 | mode: 2, /* Widget operation Mode */ | 830 | mode: 2, /* Widget operation Mode */ |
| 831 | rsvd2: 2, | 831 | rsvd2: 2, |
diff --git a/arch/mips/include/asm/socket.h b/arch/mips/include/asm/socket.h index ae05accd9fe4..9de5190f2487 100644 --- a/arch/mips/include/asm/socket.h +++ b/arch/mips/include/asm/socket.h | |||
| @@ -80,6 +80,8 @@ To add: #define SO_REUSEPORT 0x0200 /* Allow local address and port reuse. */ | |||
| 80 | #define SO_TIMESTAMPING 37 | 80 | #define SO_TIMESTAMPING 37 |
| 81 | #define SCM_TIMESTAMPING SO_TIMESTAMPING | 81 | #define SCM_TIMESTAMPING SO_TIMESTAMPING |
| 82 | 82 | ||
| 83 | #define SO_RXQ_OVFL 40 | ||
| 84 | |||
| 83 | #ifdef __KERNEL__ | 85 | #ifdef __KERNEL__ |
| 84 | 86 | ||
| 85 | /** sock_type - Socket types | 87 | /** sock_type - Socket types |
diff --git a/arch/mips/include/asm/spram.h b/arch/mips/include/asm/spram.h new file mode 100644 index 000000000000..0b89006e4907 --- /dev/null +++ b/arch/mips/include/asm/spram.h | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | #ifndef _MIPS_SPRAM_H | ||
| 2 | #define _MIPS_SPRAM_H | ||
| 3 | |||
| 4 | #ifdef CONFIG_CPU_MIPSR2 | ||
| 5 | extern __init void spram_config(void); | ||
| 6 | #else | ||
| 7 | static inline void spram_config(void) { }; | ||
| 8 | #endif /* CONFIG_CPU_MIPSR2 */ | ||
| 9 | |||
| 10 | #endif /* _MIPS_SPRAM_H */ | ||
diff --git a/arch/mips/include/asm/system.h b/arch/mips/include/asm/system.h index fcf5f98d90cc..83b5509e09e8 100644 --- a/arch/mips/include/asm/system.h +++ b/arch/mips/include/asm/system.h | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | #ifndef _ASM_SYSTEM_H | 12 | #ifndef _ASM_SYSTEM_H |
| 13 | #define _ASM_SYSTEM_H | 13 | #define _ASM_SYSTEM_H |
| 14 | 14 | ||
| 15 | #include <linux/kernel.h> | ||
| 15 | #include <linux/types.h> | 16 | #include <linux/types.h> |
| 16 | #include <linux/irqflags.h> | 17 | #include <linux/irqflags.h> |
| 17 | 18 | ||
| @@ -193,10 +194,6 @@ extern __u64 __xchg_u64_unsupported_on_32bit_kernels(volatile __u64 * m, __u64 v | |||
| 193 | #define __xchg_u64 __xchg_u64_unsupported_on_32bit_kernels | 194 | #define __xchg_u64 __xchg_u64_unsupported_on_32bit_kernels |
| 194 | #endif | 195 | #endif |
| 195 | 196 | ||
| 196 | /* This function doesn't exist, so you'll get a linker error | ||
| 197 | if something tries to do an invalid xchg(). */ | ||
| 198 | extern void __xchg_called_with_bad_pointer(void); | ||
| 199 | |||
| 200 | static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size) | 197 | static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size) |
| 201 | { | 198 | { |
| 202 | switch (size) { | 199 | switch (size) { |
| @@ -205,11 +202,17 @@ static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int siz | |||
| 205 | case 8: | 202 | case 8: |
| 206 | return __xchg_u64(ptr, x); | 203 | return __xchg_u64(ptr, x); |
| 207 | } | 204 | } |
| 208 | __xchg_called_with_bad_pointer(); | 205 | |
| 209 | return x; | 206 | return x; |
| 210 | } | 207 | } |
| 211 | 208 | ||
| 212 | #define xchg(ptr, x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x), (ptr), sizeof(*(ptr)))) | 209 | #define xchg(ptr, x) \ |
| 210 | ({ \ | ||
| 211 | BUILD_BUG_ON(sizeof(*(ptr)) & ~0xc); \ | ||
| 212 | \ | ||
| 213 | ((__typeof__(*(ptr))) \ | ||
| 214 | __xchg((unsigned long)(x), (ptr), sizeof(*(ptr)))); \ | ||
| 215 | }) | ||
| 213 | 216 | ||
| 214 | extern void set_handler(unsigned long offset, void *addr, unsigned long len); | 217 | extern void set_handler(unsigned long offset, void *addr, unsigned long len); |
| 215 | extern void set_uncached_handler(unsigned long offset, void *addr, unsigned long len); | 218 | extern void set_uncached_handler(unsigned long offset, void *addr, unsigned long len); |
diff --git a/arch/mips/include/asm/thread_info.h b/arch/mips/include/asm/thread_info.h index 01cc1630b66c..845da2107ed1 100644 --- a/arch/mips/include/asm/thread_info.h +++ b/arch/mips/include/asm/thread_info.h | |||
| @@ -86,14 +86,7 @@ register struct thread_info *__current_thread_info __asm__("$28"); | |||
| 86 | #define __HAVE_ARCH_THREAD_INFO_ALLOCATOR | 86 | #define __HAVE_ARCH_THREAD_INFO_ALLOCATOR |
| 87 | 87 | ||
| 88 | #ifdef CONFIG_DEBUG_STACK_USAGE | 88 | #ifdef CONFIG_DEBUG_STACK_USAGE |
| 89 | #define alloc_thread_info(tsk) \ | 89 | #define alloc_thread_info(tsk) kzalloc(THREAD_SIZE, GFP_KERNEL) |
| 90 | ({ \ | ||
| 91 | struct thread_info *ret; \ | ||
| 92 | \ | ||
| 93 | ret = kzalloc(THREAD_SIZE, GFP_KERNEL); \ | ||
| 94 | \ | ||
| 95 | ret; \ | ||
| 96 | }) | ||
| 97 | #else | 90 | #else |
| 98 | #define alloc_thread_info(tsk) kmalloc(THREAD_SIZE, GFP_KERNEL) | 91 | #define alloc_thread_info(tsk) kmalloc(THREAD_SIZE, GFP_KERNEL) |
| 99 | #endif | 92 | #endif |
diff --git a/arch/mips/include/asm/time.h b/arch/mips/include/asm/time.h index df6a430de5eb..c7f1bfef1574 100644 --- a/arch/mips/include/asm/time.h +++ b/arch/mips/include/asm/time.h | |||
| @@ -84,8 +84,16 @@ static inline int init_mips_clocksource(void) | |||
| 84 | #endif | 84 | #endif |
| 85 | } | 85 | } |
| 86 | 86 | ||
| 87 | extern void clocksource_set_clock(struct clocksource *cs, unsigned int clock); | 87 | static inline void clocksource_set_clock(struct clocksource *cs, |
| 88 | extern void clockevent_set_clock(struct clock_event_device *cd, | 88 | unsigned int clock) |
| 89 | unsigned int clock); | 89 | { |
| 90 | clocksource_calc_mult_shift(cs, clock, 4); | ||
| 91 | } | ||
| 92 | |||
| 93 | static inline void clockevent_set_clock(struct clock_event_device *cd, | ||
| 94 | unsigned int clock) | ||
| 95 | { | ||
| 96 | clockevents_calc_mult_shift(cd, clock, 4); | ||
| 97 | } | ||
| 90 | 98 | ||
| 91 | #endif /* _ASM_TIME_H */ | 99 | #endif /* _ASM_TIME_H */ |
diff --git a/arch/mips/include/asm/unistd.h b/arch/mips/include/asm/unistd.h index 8c9dfa9e9018..65c679ecbe6b 100644 --- a/arch/mips/include/asm/unistd.h +++ b/arch/mips/include/asm/unistd.h | |||
| @@ -355,16 +355,17 @@ | |||
| 355 | #define __NR_rt_tgsigqueueinfo (__NR_Linux + 332) | 355 | #define __NR_rt_tgsigqueueinfo (__NR_Linux + 332) |
| 356 | #define __NR_perf_event_open (__NR_Linux + 333) | 356 | #define __NR_perf_event_open (__NR_Linux + 333) |
| 357 | #define __NR_accept4 (__NR_Linux + 334) | 357 | #define __NR_accept4 (__NR_Linux + 334) |
| 358 | #define __NR_recvmmsg (__NR_Linux + 335) | ||
| 358 | 359 | ||
| 359 | /* | 360 | /* |
| 360 | * Offset of the last Linux o32 flavoured syscall | 361 | * Offset of the last Linux o32 flavoured syscall |
| 361 | */ | 362 | */ |
| 362 | #define __NR_Linux_syscalls 334 | 363 | #define __NR_Linux_syscalls 335 |
| 363 | 364 | ||
| 364 | #endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */ | 365 | #endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */ |
| 365 | 366 | ||
| 366 | #define __NR_O32_Linux 4000 | 367 | #define __NR_O32_Linux 4000 |
| 367 | #define __NR_O32_Linux_syscalls 334 | 368 | #define __NR_O32_Linux_syscalls 335 |
| 368 | 369 | ||
| 369 | #if _MIPS_SIM == _MIPS_SIM_ABI64 | 370 | #if _MIPS_SIM == _MIPS_SIM_ABI64 |
| 370 | 371 | ||
| @@ -666,16 +667,17 @@ | |||
| 666 | #define __NR_rt_tgsigqueueinfo (__NR_Linux + 291) | 667 | #define __NR_rt_tgsigqueueinfo (__NR_Linux + 291) |
| 667 | #define __NR_perf_event_open (__NR_Linux + 292) | 668 | #define __NR_perf_event_open (__NR_Linux + 292) |
| 668 | #define __NR_accept4 (__NR_Linux + 293) | 669 | #define __NR_accept4 (__NR_Linux + 293) |
| 670 | #define __NR_recvmmsg (__NR_Linux + 294) | ||
| 669 | 671 | ||
| 670 | /* | 672 | /* |
| 671 | * Offset of the last Linux 64-bit flavoured syscall | 673 | * Offset of the last Linux 64-bit flavoured syscall |
| 672 | */ | 674 | */ |
| 673 | #define __NR_Linux_syscalls 293 | 675 | #define __NR_Linux_syscalls 294 |
| 674 | 676 | ||
| 675 | #endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */ | 677 | #endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */ |
| 676 | 678 | ||
| 677 | #define __NR_64_Linux 5000 | 679 | #define __NR_64_Linux 5000 |
| 678 | #define __NR_64_Linux_syscalls 293 | 680 | #define __NR_64_Linux_syscalls 294 |
| 679 | 681 | ||
| 680 | #if _MIPS_SIM == _MIPS_SIM_NABI32 | 682 | #if _MIPS_SIM == _MIPS_SIM_NABI32 |
| 681 | 683 | ||
| @@ -981,16 +983,17 @@ | |||
| 981 | #define __NR_rt_tgsigqueueinfo (__NR_Linux + 295) | 983 | #define __NR_rt_tgsigqueueinfo (__NR_Linux + 295) |
| 982 | #define __NR_perf_event_open (__NR_Linux + 296) | 984 | #define __NR_perf_event_open (__NR_Linux + 296) |
| 983 | #define __NR_accept4 (__NR_Linux + 297) | 985 | #define __NR_accept4 (__NR_Linux + 297) |
| 986 | #define __NR_recvmmsg (__NR_Linux + 298) | ||
| 984 | 987 | ||
| 985 | /* | 988 | /* |
| 986 | * Offset of the last N32 flavoured syscall | 989 | * Offset of the last N32 flavoured syscall |
| 987 | */ | 990 | */ |
| 988 | #define __NR_Linux_syscalls 297 | 991 | #define __NR_Linux_syscalls 298 |
| 989 | 992 | ||
| 990 | #endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */ | 993 | #endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */ |
| 991 | 994 | ||
| 992 | #define __NR_N32_Linux 6000 | 995 | #define __NR_N32_Linux 6000 |
| 993 | #define __NR_N32_Linux_syscalls 297 | 996 | #define __NR_N32_Linux_syscalls 298 |
| 994 | 997 | ||
| 995 | #ifdef __KERNEL__ | 998 | #ifdef __KERNEL__ |
| 996 | 999 | ||
diff --git a/arch/mips/jazz/irq.c b/arch/mips/jazz/irq.c index 7fd170d007e7..7bd32d04c2cc 100644 --- a/arch/mips/jazz/irq.c +++ b/arch/mips/jazz/irq.c | |||
| @@ -134,7 +134,7 @@ static irqreturn_t r4030_timer_interrupt(int irq, void *dev_id) | |||
| 134 | 134 | ||
| 135 | static struct irqaction r4030_timer_irqaction = { | 135 | static struct irqaction r4030_timer_irqaction = { |
| 136 | .handler = r4030_timer_interrupt, | 136 | .handler = r4030_timer_interrupt, |
| 137 | .flags = IRQF_DISABLED, | 137 | .flags = IRQF_DISABLED | IRQF_TIMER, |
| 138 | .name = "R4030 timer", | 138 | .name = "R4030 timer", |
| 139 | }; | 139 | }; |
| 140 | 140 | ||
diff --git a/arch/mips/kernel/cevt-bcm1480.c b/arch/mips/kernel/cevt-bcm1480.c index e02f79b1eb51..bfea327c636c 100644 --- a/arch/mips/kernel/cevt-bcm1480.c +++ b/arch/mips/kernel/cevt-bcm1480.c | |||
| @@ -144,7 +144,7 @@ void __cpuinit sb1480_clockevent_init(void) | |||
| 144 | bcm1480_unmask_irq(cpu, irq); | 144 | bcm1480_unmask_irq(cpu, irq); |
| 145 | 145 | ||
| 146 | action->handler = sibyte_counter_handler; | 146 | action->handler = sibyte_counter_handler; |
| 147 | action->flags = IRQF_DISABLED | IRQF_PERCPU; | 147 | action->flags = IRQF_DISABLED | IRQF_PERCPU | IRQF_TIMER; |
| 148 | action->name = name; | 148 | action->name = name; |
| 149 | action->dev_id = cd; | 149 | action->dev_id = cd; |
| 150 | 150 | ||
diff --git a/arch/mips/kernel/cevt-ds1287.c b/arch/mips/kernel/cevt-ds1287.c index 6996da4d74a2..00a4da277cbb 100644 --- a/arch/mips/kernel/cevt-ds1287.c +++ b/arch/mips/kernel/cevt-ds1287.c | |||
| @@ -107,7 +107,7 @@ static irqreturn_t ds1287_interrupt(int irq, void *dev_id) | |||
| 107 | 107 | ||
| 108 | static struct irqaction ds1287_irqaction = { | 108 | static struct irqaction ds1287_irqaction = { |
| 109 | .handler = ds1287_interrupt, | 109 | .handler = ds1287_interrupt, |
| 110 | .flags = IRQF_DISABLED | IRQF_PERCPU, | 110 | .flags = IRQF_DISABLED | IRQF_PERCPU | IRQF_TIMER, |
| 111 | .name = "ds1287", | 111 | .name = "ds1287", |
| 112 | }; | 112 | }; |
| 113 | 113 | ||
diff --git a/arch/mips/kernel/cevt-gt641xx.c b/arch/mips/kernel/cevt-gt641xx.c index 92351e00ae0e..f5d265eb6eae 100644 --- a/arch/mips/kernel/cevt-gt641xx.c +++ b/arch/mips/kernel/cevt-gt641xx.c | |||
| @@ -113,7 +113,7 @@ static irqreturn_t gt641xx_timer0_interrupt(int irq, void *dev_id) | |||
| 113 | 113 | ||
| 114 | static struct irqaction gt641xx_timer0_irqaction = { | 114 | static struct irqaction gt641xx_timer0_irqaction = { |
| 115 | .handler = gt641xx_timer0_interrupt, | 115 | .handler = gt641xx_timer0_interrupt, |
| 116 | .flags = IRQF_DISABLED | IRQF_PERCPU, | 116 | .flags = IRQF_DISABLED | IRQF_PERCPU | IRQF_TIMER, |
| 117 | .name = "gt641xx_timer0", | 117 | .name = "gt641xx_timer0", |
| 118 | }; | 118 | }; |
| 119 | 119 | ||
diff --git a/arch/mips/kernel/cevt-r4k.c b/arch/mips/kernel/cevt-r4k.c index 2652362ce047..b469ad05d520 100644 --- a/arch/mips/kernel/cevt-r4k.c +++ b/arch/mips/kernel/cevt-r4k.c | |||
| @@ -83,7 +83,7 @@ out: | |||
| 83 | 83 | ||
| 84 | struct irqaction c0_compare_irqaction = { | 84 | struct irqaction c0_compare_irqaction = { |
| 85 | .handler = c0_compare_interrupt, | 85 | .handler = c0_compare_interrupt, |
| 86 | .flags = IRQF_DISABLED | IRQF_PERCPU, | 86 | .flags = IRQF_DISABLED | IRQF_PERCPU | IRQF_TIMER, |
| 87 | .name = "timer", | 87 | .name = "timer", |
| 88 | }; | 88 | }; |
| 89 | 89 | ||
diff --git a/arch/mips/kernel/cevt-sb1250.c b/arch/mips/kernel/cevt-sb1250.c index ac5903d1b20e..da78eeaea6e8 100644 --- a/arch/mips/kernel/cevt-sb1250.c +++ b/arch/mips/kernel/cevt-sb1250.c | |||
| @@ -143,7 +143,7 @@ void __cpuinit sb1250_clockevent_init(void) | |||
| 143 | sb1250_unmask_irq(cpu, irq); | 143 | sb1250_unmask_irq(cpu, irq); |
| 144 | 144 | ||
| 145 | action->handler = sibyte_counter_handler; | 145 | action->handler = sibyte_counter_handler; |
| 146 | action->flags = IRQF_DISABLED | IRQF_PERCPU; | 146 | action->flags = IRQF_DISABLED | IRQF_PERCPU | IRQF_TIMER; |
| 147 | action->name = name; | 147 | action->name = name; |
| 148 | action->dev_id = cd; | 148 | action->dev_id = cd; |
| 149 | 149 | ||
diff --git a/arch/mips/kernel/cevt-smtc.c b/arch/mips/kernel/cevt-smtc.c index 98bd7de75778..b102e4f1630e 100644 --- a/arch/mips/kernel/cevt-smtc.c +++ b/arch/mips/kernel/cevt-smtc.c | |||
| @@ -173,11 +173,12 @@ void smtc_distribute_timer(int vpe) | |||
| 173 | unsigned int mtflags; | 173 | unsigned int mtflags; |
| 174 | int cpu; | 174 | int cpu; |
| 175 | struct clock_event_device *cd; | 175 | struct clock_event_device *cd; |
| 176 | unsigned long nextstamp = 0L; | 176 | unsigned long nextstamp; |
| 177 | unsigned long reference; | 177 | unsigned long reference; |
| 178 | 178 | ||
| 179 | 179 | ||
| 180 | repeat: | 180 | repeat: |
| 181 | nextstamp = 0L; | ||
| 181 | for_each_online_cpu(cpu) { | 182 | for_each_online_cpu(cpu) { |
| 182 | /* | 183 | /* |
| 183 | * Find virtual CPUs within the current VPE who have | 184 | * Find virtual CPUs within the current VPE who have |
diff --git a/arch/mips/kernel/cevt-txx9.c b/arch/mips/kernel/cevt-txx9.c index 0037f21baf0d..218ee6bda935 100644 --- a/arch/mips/kernel/cevt-txx9.c +++ b/arch/mips/kernel/cevt-txx9.c | |||
| @@ -146,7 +146,7 @@ static irqreturn_t txx9tmr_interrupt(int irq, void *dev_id) | |||
| 146 | 146 | ||
| 147 | static struct irqaction txx9tmr_irq = { | 147 | static struct irqaction txx9tmr_irq = { |
| 148 | .handler = txx9tmr_interrupt, | 148 | .handler = txx9tmr_interrupt, |
| 149 | .flags = IRQF_DISABLED | IRQF_PERCPU, | 149 | .flags = IRQF_DISABLED | IRQF_PERCPU | IRQF_TIMER, |
| 150 | .name = "txx9tmr", | 150 | .name = "txx9tmr", |
| 151 | .dev_id = &txx9_clock_event_device, | 151 | .dev_id = &txx9_clock_event_device, |
| 152 | }; | 152 | }; |
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c index f709657e4dcd..7a51866068a4 100644 --- a/arch/mips/kernel/cpu-probe.c +++ b/arch/mips/kernel/cpu-probe.c | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | #include <asm/mipsregs.h> | 23 | #include <asm/mipsregs.h> |
| 24 | #include <asm/system.h> | 24 | #include <asm/system.h> |
| 25 | #include <asm/watch.h> | 25 | #include <asm/watch.h> |
| 26 | 26 | #include <asm/spram.h> | |
| 27 | /* | 27 | /* |
| 28 | * Not all of the MIPS CPUs have the "wait" instruction available. Moreover, | 28 | * Not all of the MIPS CPUs have the "wait" instruction available. Moreover, |
| 29 | * the implementation of the "wait" feature differs between CPU families. This | 29 | * the implementation of the "wait" feature differs between CPU families. This |
| @@ -711,12 +711,6 @@ static void __cpuinit decode_configs(struct cpuinfo_mips *c) | |||
| 711 | mips_probe_watch_registers(c); | 711 | mips_probe_watch_registers(c); |
| 712 | } | 712 | } |
| 713 | 713 | ||
| 714 | #ifdef CONFIG_CPU_MIPSR2 | ||
| 715 | extern void spram_config(void); | ||
| 716 | #else | ||
| 717 | static inline void spram_config(void) {} | ||
| 718 | #endif | ||
| 719 | |||
| 720 | static inline void cpu_probe_mips(struct cpuinfo_mips *c, unsigned int cpu) | 714 | static inline void cpu_probe_mips(struct cpuinfo_mips *c, unsigned int cpu) |
| 721 | { | 715 | { |
| 722 | decode_configs(c); | 716 | decode_configs(c); |
diff --git a/arch/mips/kernel/head.S b/arch/mips/kernel/head.S index 531ce7b16124..ea695d9605e9 100644 --- a/arch/mips/kernel/head.S +++ b/arch/mips/kernel/head.S | |||
| @@ -191,6 +191,7 @@ NESTED(kernel_entry, 16, sp) # kernel entry point | |||
| 191 | /* Set the SP after an empty pt_regs. */ | 191 | /* Set the SP after an empty pt_regs. */ |
| 192 | PTR_LI sp, _THREAD_SIZE - 32 - PT_SIZE | 192 | PTR_LI sp, _THREAD_SIZE - 32 - PT_SIZE |
| 193 | PTR_ADDU sp, $28 | 193 | PTR_ADDU sp, $28 |
| 194 | back_to_back_c0_hazard | ||
| 194 | set_saved_sp sp, t0, t1 | 195 | set_saved_sp sp, t0, t1 |
| 195 | PTR_SUBU sp, 4 * SZREG # init stack pointer | 196 | PTR_SUBU sp, 4 * SZREG # init stack pointer |
| 196 | 197 | ||
diff --git a/arch/mips/kernel/i8253.c b/arch/mips/kernel/i8253.c index f7d8d5d0ddbf..ed5c441615e4 100644 --- a/arch/mips/kernel/i8253.c +++ b/arch/mips/kernel/i8253.c | |||
| @@ -98,7 +98,7 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id) | |||
| 98 | 98 | ||
| 99 | static struct irqaction irq0 = { | 99 | static struct irqaction irq0 = { |
| 100 | .handler = timer_interrupt, | 100 | .handler = timer_interrupt, |
| 101 | .flags = IRQF_DISABLED | IRQF_NOBALANCING, | 101 | .flags = IRQF_DISABLED | IRQF_NOBALANCING | IRQF_TIMER, |
| 102 | .name = "timer" | 102 | .name = "timer" |
| 103 | }; | 103 | }; |
| 104 | 104 | ||
diff --git a/arch/mips/kernel/irq-gic.c b/arch/mips/kernel/irq-gic.c index d2072cd38592..b181f2f0ea8e 100644 --- a/arch/mips/kernel/irq-gic.c +++ b/arch/mips/kernel/irq-gic.c | |||
| @@ -14,38 +14,23 @@ | |||
| 14 | 14 | ||
| 15 | 15 | ||
| 16 | static unsigned long _gic_base; | 16 | static unsigned long _gic_base; |
| 17 | static unsigned int _irqbase, _mapsize, numvpes, numintrs; | 17 | static unsigned int _irqbase; |
| 18 | static struct gic_intr_map *_intrmap; | 18 | static unsigned int gic_irq_flags[GIC_NUM_INTRS]; |
| 19 | #define GIC_IRQ_FLAG_EDGE 0x0001 | ||
| 19 | 20 | ||
| 20 | static struct gic_pcpu_mask pcpu_masks[NR_CPUS]; | 21 | struct gic_pcpu_mask pcpu_masks[NR_CPUS]; |
| 21 | static struct gic_pending_regs pending_regs[NR_CPUS]; | 22 | static struct gic_pending_regs pending_regs[NR_CPUS]; |
| 22 | static struct gic_intrmask_regs intrmask_regs[NR_CPUS]; | 23 | static struct gic_intrmask_regs intrmask_regs[NR_CPUS]; |
| 23 | 24 | ||
| 24 | #define gic_wedgeb2bok 0 /* | ||
| 25 | * Can GIC handle b2b writes to wedge register? | ||
| 26 | */ | ||
| 27 | #if gic_wedgeb2bok == 0 | ||
| 28 | static DEFINE_SPINLOCK(gic_wedgeb2b_lock); | ||
| 29 | #endif | ||
| 30 | |||
| 31 | void gic_send_ipi(unsigned int intr) | 25 | void gic_send_ipi(unsigned int intr) |
| 32 | { | 26 | { |
| 33 | #if gic_wedgeb2bok == 0 | ||
| 34 | unsigned long flags; | ||
| 35 | #endif | ||
| 36 | pr_debug("CPU%d: %s status %08x\n", smp_processor_id(), __func__, | 27 | pr_debug("CPU%d: %s status %08x\n", smp_processor_id(), __func__, |
| 37 | read_c0_status()); | 28 | read_c0_status()); |
| 38 | if (!gic_wedgeb2bok) | ||
| 39 | spin_lock_irqsave(&gic_wedgeb2b_lock, flags); | ||
| 40 | GICWRITE(GIC_REG(SHARED, GIC_SH_WEDGE), 0x80000000 | intr); | 29 | GICWRITE(GIC_REG(SHARED, GIC_SH_WEDGE), 0x80000000 | intr); |
| 41 | if (!gic_wedgeb2bok) { | ||
| 42 | (void) GIC_REG(SHARED, GIC_SH_CONFIG); | ||
| 43 | spin_unlock_irqrestore(&gic_wedgeb2b_lock, flags); | ||
| 44 | } | ||
| 45 | } | 30 | } |
| 46 | 31 | ||
| 47 | /* This is Malta specific and needs to be exported */ | 32 | /* This is Malta specific and needs to be exported */ |
| 48 | static void vpe_local_setup(unsigned int numvpes) | 33 | static void __init vpe_local_setup(unsigned int numvpes) |
| 49 | { | 34 | { |
| 50 | int i; | 35 | int i; |
| 51 | unsigned long timer_interrupt = 5, perf_interrupt = 5; | 36 | unsigned long timer_interrupt = 5, perf_interrupt = 5; |
| @@ -105,44 +90,34 @@ unsigned int gic_get_int(void) | |||
| 105 | 90 | ||
| 106 | static unsigned int gic_irq_startup(unsigned int irq) | 91 | static unsigned int gic_irq_startup(unsigned int irq) |
| 107 | { | 92 | { |
| 108 | pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); | ||
| 109 | irq -= _irqbase; | 93 | irq -= _irqbase; |
| 110 | GIC_SET_INTR_MASK(irq, 1); | 94 | pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); |
| 95 | GIC_SET_INTR_MASK(irq); | ||
| 111 | return 0; | 96 | return 0; |
| 112 | } | 97 | } |
| 113 | 98 | ||
| 114 | static void gic_irq_ack(unsigned int irq) | 99 | static void gic_irq_ack(unsigned int irq) |
| 115 | { | 100 | { |
| 116 | #if gic_wedgeb2bok == 0 | ||
| 117 | unsigned long flags; | ||
| 118 | #endif | ||
| 119 | pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); | ||
| 120 | irq -= _irqbase; | 101 | irq -= _irqbase; |
| 121 | GIC_CLR_INTR_MASK(irq, 1); | 102 | pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); |
| 103 | GIC_CLR_INTR_MASK(irq); | ||
| 122 | 104 | ||
| 123 | if (_intrmap[irq].trigtype == GIC_TRIG_EDGE) { | 105 | if (gic_irq_flags[irq] & GIC_IRQ_FLAG_EDGE) |
| 124 | if (!gic_wedgeb2bok) | ||
| 125 | spin_lock_irqsave(&gic_wedgeb2b_lock, flags); | ||
| 126 | GICWRITE(GIC_REG(SHARED, GIC_SH_WEDGE), irq); | 106 | GICWRITE(GIC_REG(SHARED, GIC_SH_WEDGE), irq); |
| 127 | if (!gic_wedgeb2bok) { | ||
| 128 | (void) GIC_REG(SHARED, GIC_SH_CONFIG); | ||
| 129 | spin_unlock_irqrestore(&gic_wedgeb2b_lock, flags); | ||
| 130 | } | ||
| 131 | } | ||
| 132 | } | 107 | } |
| 133 | 108 | ||
| 134 | static void gic_mask_irq(unsigned int irq) | 109 | static void gic_mask_irq(unsigned int irq) |
| 135 | { | 110 | { |
| 136 | pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); | ||
| 137 | irq -= _irqbase; | 111 | irq -= _irqbase; |
| 138 | GIC_CLR_INTR_MASK(irq, 1); | 112 | pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); |
| 113 | GIC_CLR_INTR_MASK(irq); | ||
| 139 | } | 114 | } |
| 140 | 115 | ||
| 141 | static void gic_unmask_irq(unsigned int irq) | 116 | static void gic_unmask_irq(unsigned int irq) |
| 142 | { | 117 | { |
| 143 | pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); | ||
| 144 | irq -= _irqbase; | 118 | irq -= _irqbase; |
| 145 | GIC_SET_INTR_MASK(irq, 1); | 119 | pr_debug("CPU%d: %s: irq%d\n", smp_processor_id(), __func__, irq); |
| 120 | GIC_SET_INTR_MASK(irq); | ||
| 146 | } | 121 | } |
| 147 | 122 | ||
| 148 | #ifdef CONFIG_SMP | 123 | #ifdef CONFIG_SMP |
| @@ -155,9 +130,8 @@ static int gic_set_affinity(unsigned int irq, const struct cpumask *cpumask) | |||
| 155 | unsigned long flags; | 130 | unsigned long flags; |
| 156 | int i; | 131 | int i; |
| 157 | 132 | ||
| 158 | pr_debug(KERN_DEBUG "%s called\n", __func__); | ||
| 159 | irq -= _irqbase; | 133 | irq -= _irqbase; |
| 160 | 134 | pr_debug(KERN_DEBUG "%s(%d) called\n", __func__, irq); | |
| 161 | cpumask_and(&tmp, cpumask, cpu_online_mask); | 135 | cpumask_and(&tmp, cpumask, cpu_online_mask); |
| 162 | if (cpus_empty(tmp)) | 136 | if (cpus_empty(tmp)) |
| 163 | return -1; | 137 | return -1; |
| @@ -168,13 +142,6 @@ static int gic_set_affinity(unsigned int irq, const struct cpumask *cpumask) | |||
| 168 | /* Re-route this IRQ */ | 142 | /* Re-route this IRQ */ |
| 169 | GIC_SH_MAP_TO_VPE_SMASK(irq, first_cpu(tmp)); | 143 | GIC_SH_MAP_TO_VPE_SMASK(irq, first_cpu(tmp)); |
| 170 | 144 | ||
| 171 | /* | ||
| 172 | * FIXME: assumption that _intrmap is ordered and has no holes | ||
| 173 | */ | ||
| 174 | |||
| 175 | /* Update the intr_map */ | ||
| 176 | _intrmap[irq].cpunum = first_cpu(tmp); | ||
| 177 | |||
| 178 | /* Update the pcpu_masks */ | 145 | /* Update the pcpu_masks */ |
| 179 | for (i = 0; i < NR_CPUS; i++) | 146 | for (i = 0; i < NR_CPUS; i++) |
| 180 | clear_bit(irq, pcpu_masks[i].pcpu_mask); | 147 | clear_bit(irq, pcpu_masks[i].pcpu_mask); |
| @@ -201,8 +168,9 @@ static struct irq_chip gic_irq_controller = { | |||
| 201 | #endif | 168 | #endif |
| 202 | }; | 169 | }; |
| 203 | 170 | ||
| 204 | static void __init setup_intr(unsigned int intr, unsigned int cpu, | 171 | static void __init gic_setup_intr(unsigned int intr, unsigned int cpu, |
| 205 | unsigned int pin, unsigned int polarity, unsigned int trigtype) | 172 | unsigned int pin, unsigned int polarity, unsigned int trigtype, |
| 173 | unsigned int flags) | ||
| 206 | { | 174 | { |
| 207 | /* Setup Intr to Pin mapping */ | 175 | /* Setup Intr to Pin mapping */ |
| 208 | if (pin & GIC_MAP_TO_NMI_MSK) { | 176 | if (pin & GIC_MAP_TO_NMI_MSK) { |
| @@ -227,38 +195,43 @@ static void __init setup_intr(unsigned int intr, unsigned int cpu, | |||
| 227 | GIC_SET_TRIGGER(intr, trigtype); | 195 | GIC_SET_TRIGGER(intr, trigtype); |
| 228 | 196 | ||
| 229 | /* Init Intr Masks */ | 197 | /* Init Intr Masks */ |
| 230 | GIC_SET_INTR_MASK(intr, 0); | 198 | GIC_CLR_INTR_MASK(intr); |
| 199 | /* Initialise per-cpu Interrupt software masks */ | ||
| 200 | if (flags & GIC_FLAG_IPI) | ||
| 201 | set_bit(intr, pcpu_masks[cpu].pcpu_mask); | ||
| 202 | if (flags & GIC_FLAG_TRANSPARENT) | ||
| 203 | GIC_SET_INTR_MASK(intr); | ||
| 204 | if (trigtype == GIC_TRIG_EDGE) | ||
| 205 | gic_irq_flags[intr] |= GIC_IRQ_FLAG_EDGE; | ||
| 231 | } | 206 | } |
| 232 | 207 | ||
| 233 | static void __init gic_basic_init(void) | 208 | static void __init gic_basic_init(int numintrs, int numvpes, |
| 209 | struct gic_intr_map *intrmap, int mapsize) | ||
| 234 | { | 210 | { |
| 235 | unsigned int i, cpu; | 211 | unsigned int i, cpu; |
| 236 | 212 | ||
| 237 | /* Setup defaults */ | 213 | /* Setup defaults */ |
| 238 | for (i = 0; i < GIC_NUM_INTRS; i++) { | 214 | for (i = 0; i < numintrs; i++) { |
| 239 | GIC_SET_POLARITY(i, GIC_POL_POS); | 215 | GIC_SET_POLARITY(i, GIC_POL_POS); |
| 240 | GIC_SET_TRIGGER(i, GIC_TRIG_LEVEL); | 216 | GIC_SET_TRIGGER(i, GIC_TRIG_LEVEL); |
| 241 | GIC_SET_INTR_MASK(i, 0); | 217 | GIC_CLR_INTR_MASK(i); |
| 218 | if (i < GIC_NUM_INTRS) | ||
| 219 | gic_irq_flags[i] = 0; | ||
| 242 | } | 220 | } |
| 243 | 221 | ||
| 244 | /* Setup specifics */ | 222 | /* Setup specifics */ |
| 245 | for (i = 0; i < _mapsize; i++) { | 223 | for (i = 0; i < mapsize; i++) { |
| 246 | cpu = _intrmap[i].cpunum; | 224 | cpu = intrmap[i].cpunum; |
| 247 | if (cpu == X) | 225 | if (cpu == X) |
| 248 | continue; | 226 | continue; |
| 249 | 227 | if (cpu == 0 && i != 0 && intrmap[i].flags == 0) | |
| 250 | if (cpu == 0 && i != 0 && _intrmap[i].intrnum == 0 && | ||
| 251 | _intrmap[i].ipiflag == 0) | ||
| 252 | continue; | 228 | continue; |
| 253 | 229 | gic_setup_intr(i, | |
| 254 | setup_intr(_intrmap[i].intrnum, | 230 | intrmap[i].cpunum, |
| 255 | _intrmap[i].cpunum, | 231 | intrmap[i].pin, |
| 256 | _intrmap[i].pin, | 232 | intrmap[i].polarity, |
| 257 | _intrmap[i].polarity, | 233 | intrmap[i].trigtype, |
| 258 | _intrmap[i].trigtype); | 234 | intrmap[i].flags); |
| 259 | /* Initialise per-cpu Interrupt software masks */ | ||
| 260 | if (_intrmap[i].ipiflag) | ||
| 261 | set_bit(_intrmap[i].intrnum, pcpu_masks[cpu].pcpu_mask); | ||
| 262 | } | 235 | } |
| 263 | 236 | ||
| 264 | vpe_local_setup(numvpes); | 237 | vpe_local_setup(numvpes); |
| @@ -273,12 +246,11 @@ void __init gic_init(unsigned long gic_base_addr, | |||
| 273 | unsigned int irqbase) | 246 | unsigned int irqbase) |
| 274 | { | 247 | { |
| 275 | unsigned int gicconfig; | 248 | unsigned int gicconfig; |
| 249 | int numvpes, numintrs; | ||
| 276 | 250 | ||
| 277 | _gic_base = (unsigned long) ioremap_nocache(gic_base_addr, | 251 | _gic_base = (unsigned long) ioremap_nocache(gic_base_addr, |
| 278 | gic_addrspace_size); | 252 | gic_addrspace_size); |
| 279 | _irqbase = irqbase; | 253 | _irqbase = irqbase; |
| 280 | _intrmap = intr_map; | ||
| 281 | _mapsize = intr_map_size; | ||
| 282 | 254 | ||
| 283 | GICREAD(GIC_REG(SHARED, GIC_SH_CONFIG), gicconfig); | 255 | GICREAD(GIC_REG(SHARED, GIC_SH_CONFIG), gicconfig); |
| 284 | numintrs = (gicconfig & GIC_SH_CONFIG_NUMINTRS_MSK) >> | 256 | numintrs = (gicconfig & GIC_SH_CONFIG_NUMINTRS_MSK) >> |
| @@ -290,5 +262,5 @@ void __init gic_init(unsigned long gic_base_addr, | |||
| 290 | 262 | ||
| 291 | pr_debug("%s called\n", __func__); | 263 | pr_debug("%s called\n", __func__); |
| 292 | 264 | ||
| 293 | gic_basic_init(); | 265 | gic_basic_init(numintrs, numvpes, intr_map, intr_map_size); |
| 294 | } | 266 | } |
diff --git a/arch/mips/kernel/kspd.c b/arch/mips/kernel/kspd.c index ad4e017ed2f3..80e2ba694bab 100644 --- a/arch/mips/kernel/kspd.c +++ b/arch/mips/kernel/kspd.c | |||
| @@ -82,6 +82,7 @@ static int sp_stopping; | |||
| 82 | #define MTSP_O_SHLOCK 0x0010 | 82 | #define MTSP_O_SHLOCK 0x0010 |
| 83 | #define MTSP_O_EXLOCK 0x0020 | 83 | #define MTSP_O_EXLOCK 0x0020 |
| 84 | #define MTSP_O_ASYNC 0x0040 | 84 | #define MTSP_O_ASYNC 0x0040 |
| 85 | /* XXX: check which of these is actually O_SYNC vs O_DSYNC */ | ||
| 85 | #define MTSP_O_FSYNC O_SYNC | 86 | #define MTSP_O_FSYNC O_SYNC |
| 86 | #define MTSP_O_NOFOLLOW 0x0100 | 87 | #define MTSP_O_NOFOLLOW 0x0100 |
| 87 | #define MTSP_O_SYNC 0x0080 | 88 | #define MTSP_O_SYNC 0x0080 |
diff --git a/arch/mips/kernel/linux32.c b/arch/mips/kernel/linux32.c index 6242bc68add7..f042563c924f 100644 --- a/arch/mips/kernel/linux32.c +++ b/arch/mips/kernel/linux32.c | |||
| @@ -67,28 +67,13 @@ SYSCALL_DEFINE6(32_mmap2, unsigned long, addr, unsigned long, len, | |||
| 67 | unsigned long, prot, unsigned long, flags, unsigned long, fd, | 67 | unsigned long, prot, unsigned long, flags, unsigned long, fd, |
| 68 | unsigned long, pgoff) | 68 | unsigned long, pgoff) |
| 69 | { | 69 | { |
| 70 | struct file * file = NULL; | ||
| 71 | unsigned long error; | 70 | unsigned long error; |
| 72 | 71 | ||
| 73 | error = -EINVAL; | 72 | error = -EINVAL; |
| 74 | if (pgoff & (~PAGE_MASK >> 12)) | 73 | if (pgoff & (~PAGE_MASK >> 12)) |
| 75 | goto out; | 74 | goto out; |
| 76 | pgoff >>= PAGE_SHIFT-12; | 75 | error = sys_mmap_pgoff(addr, len, prot, flags, fd, |
| 77 | 76 | pgoff >> (PAGE_SHIFT-12)); | |
| 78 | if (!(flags & MAP_ANONYMOUS)) { | ||
| 79 | error = -EBADF; | ||
| 80 | file = fget(fd); | ||
| 81 | if (!file) | ||
| 82 | goto out; | ||
| 83 | } | ||
| 84 | flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); | ||
| 85 | |||
| 86 | down_write(¤t->mm->mmap_sem); | ||
| 87 | error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); | ||
| 88 | up_write(¤t->mm->mmap_sem); | ||
| 89 | if (file) | ||
| 90 | fput(file); | ||
| 91 | |||
| 92 | out: | 77 | out: |
| 93 | return error; | 78 | return error; |
| 94 | } | 79 | } |
| @@ -265,67 +250,6 @@ SYSCALL_DEFINE5(n32_msgrcv, int, msqid, u32, msgp, size_t, msgsz, | |||
| 265 | } | 250 | } |
| 266 | #endif | 251 | #endif |
| 267 | 252 | ||
| 268 | struct sysctl_args32 | ||
| 269 | { | ||
| 270 | compat_caddr_t name; | ||
| 271 | int nlen; | ||
| 272 | compat_caddr_t oldval; | ||
| 273 | compat_caddr_t oldlenp; | ||
| 274 | compat_caddr_t newval; | ||
| 275 | compat_size_t newlen; | ||
| 276 | unsigned int __unused[4]; | ||
| 277 | }; | ||
| 278 | |||
| 279 | #ifdef CONFIG_SYSCTL_SYSCALL | ||
| 280 | |||
| 281 | SYSCALL_DEFINE1(32_sysctl, struct sysctl_args32 __user *, args) | ||
| 282 | { | ||
| 283 | struct sysctl_args32 tmp; | ||
| 284 | int error; | ||
| 285 | size_t oldlen; | ||
| 286 | size_t __user *oldlenp = NULL; | ||
| 287 | unsigned long addr = (((unsigned long)&args->__unused[0]) + 7) & ~7; | ||
| 288 | |||
| 289 | if (copy_from_user(&tmp, args, sizeof(tmp))) | ||
| 290 | return -EFAULT; | ||
| 291 | |||
| 292 | if (tmp.oldval && tmp.oldlenp) { | ||
| 293 | /* Duh, this is ugly and might not work if sysctl_args | ||
| 294 | is in read-only memory, but do_sysctl does indirectly | ||
| 295 | a lot of uaccess in both directions and we'd have to | ||
| 296 | basically copy the whole sysctl.c here, and | ||
| 297 | glibc's __sysctl uses rw memory for the structure | ||
| 298 | anyway. */ | ||
| 299 | if (get_user(oldlen, (u32 __user *)A(tmp.oldlenp)) || | ||
| 300 | put_user(oldlen, (size_t __user *)addr)) | ||
| 301 | return -EFAULT; | ||
| 302 | oldlenp = (size_t __user *)addr; | ||
| 303 | } | ||
| 304 | |||
| 305 | lock_kernel(); | ||
| 306 | error = do_sysctl((int __user *)A(tmp.name), tmp.nlen, (void __user *)A(tmp.oldval), | ||
| 307 | oldlenp, (void __user *)A(tmp.newval), tmp.newlen); | ||
| 308 | unlock_kernel(); | ||
| 309 | if (oldlenp) { | ||
| 310 | if (!error) { | ||
| 311 | if (get_user(oldlen, (size_t __user *)addr) || | ||
| 312 | put_user(oldlen, (u32 __user *)A(tmp.oldlenp))) | ||
| 313 | error = -EFAULT; | ||
| 314 | } | ||
| 315 | copy_to_user(args->__unused, tmp.__unused, sizeof(tmp.__unused)); | ||
| 316 | } | ||
| 317 | return error; | ||
| 318 | } | ||
| 319 | |||
| 320 | #else | ||
| 321 | |||
| 322 | SYSCALL_DEFINE1(32_sysctl, struct sysctl_args32 __user *, args) | ||
| 323 | { | ||
| 324 | return -ENOSYS; | ||
| 325 | } | ||
| 326 | |||
| 327 | #endif /* CONFIG_SYSCTL_SYSCALL */ | ||
| 328 | |||
| 329 | SYSCALL_DEFINE1(32_newuname, struct new_utsname __user *, name) | 253 | SYSCALL_DEFINE1(32_newuname, struct new_utsname __user *, name) |
| 330 | { | 254 | { |
| 331 | int ret = 0; | 255 | int ret = 0; |
| @@ -428,3 +352,9 @@ _sys32_clone(nabi_no_regargs struct pt_regs regs) | |||
| 428 | return do_fork(clone_flags, newsp, ®s, 0, | 352 | return do_fork(clone_flags, newsp, ®s, 0, |
| 429 | parent_tidptr, child_tidptr); | 353 | parent_tidptr, child_tidptr); |
| 430 | } | 354 | } |
| 355 | |||
| 356 | asmlinkage long sys32_lookup_dcookie(u32 a0, u32 a1, char __user *buf, | ||
| 357 | size_t len) | ||
| 358 | { | ||
| 359 | return sys_lookup_dcookie(merge_64(a0, a1), buf, len); | ||
| 360 | } | ||
diff --git a/arch/mips/kernel/scall32-o32.S b/arch/mips/kernel/scall32-o32.S index fd2a9bb620d6..17202bbe843f 100644 --- a/arch/mips/kernel/scall32-o32.S +++ b/arch/mips/kernel/scall32-o32.S | |||
| @@ -583,6 +583,7 @@ einval: li v0, -ENOSYS | |||
| 583 | sys sys_rt_tgsigqueueinfo 4 | 583 | sys sys_rt_tgsigqueueinfo 4 |
| 584 | sys sys_perf_event_open 5 | 584 | sys sys_perf_event_open 5 |
| 585 | sys sys_accept4 4 | 585 | sys sys_accept4 4 |
| 586 | sys sys_recvmmsg 5 | ||
| 586 | .endm | 587 | .endm |
| 587 | 588 | ||
| 588 | /* We pre-compute the number of _instruction_ bytes needed to | 589 | /* We pre-compute the number of _instruction_ bytes needed to |
diff --git a/arch/mips/kernel/scall64-64.S b/arch/mips/kernel/scall64-64.S index 18bf7f32c5e4..a8a6c596eb04 100644 --- a/arch/mips/kernel/scall64-64.S +++ b/arch/mips/kernel/scall64-64.S | |||
| @@ -420,4 +420,5 @@ sys_call_table: | |||
| 420 | PTR sys_rt_tgsigqueueinfo | 420 | PTR sys_rt_tgsigqueueinfo |
| 421 | PTR sys_perf_event_open | 421 | PTR sys_perf_event_open |
| 422 | PTR sys_accept4 | 422 | PTR sys_accept4 |
| 423 | PTR sys_recvmmsg | ||
| 423 | .size sys_call_table,.-sys_call_table | 424 | .size sys_call_table,.-sys_call_table |
diff --git a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S index 6ebc07976694..66b5a48676dd 100644 --- a/arch/mips/kernel/scall64-n32.S +++ b/arch/mips/kernel/scall64-n32.S | |||
| @@ -272,7 +272,7 @@ EXPORT(sysn32_call_table) | |||
| 272 | PTR sys_munlockall | 272 | PTR sys_munlockall |
| 273 | PTR sys_vhangup /* 6150 */ | 273 | PTR sys_vhangup /* 6150 */ |
| 274 | PTR sys_pivot_root | 274 | PTR sys_pivot_root |
| 275 | PTR sys_32_sysctl | 275 | PTR compat_sys_sysctl |
| 276 | PTR sys_prctl | 276 | PTR sys_prctl |
| 277 | PTR compat_sys_adjtimex | 277 | PTR compat_sys_adjtimex |
| 278 | PTR compat_sys_setrlimit /* 6155 */ | 278 | PTR compat_sys_setrlimit /* 6155 */ |
| @@ -418,4 +418,5 @@ EXPORT(sysn32_call_table) | |||
| 418 | PTR compat_sys_rt_tgsigqueueinfo /* 5295 */ | 418 | PTR compat_sys_rt_tgsigqueueinfo /* 5295 */ |
| 419 | PTR sys_perf_event_open | 419 | PTR sys_perf_event_open |
| 420 | PTR sys_accept4 | 420 | PTR sys_accept4 |
| 421 | PTR compat_sys_recvmmsg | ||
| 421 | .size sysn32_call_table,.-sysn32_call_table | 422 | .size sysn32_call_table,.-sysn32_call_table |
diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S index 9bbf9775e0bd..515f9eab2b28 100644 --- a/arch/mips/kernel/scall64-o32.S +++ b/arch/mips/kernel/scall64-o32.S | |||
| @@ -356,7 +356,7 @@ sys_call_table: | |||
| 356 | PTR sys_ni_syscall /* 4150 */ | 356 | PTR sys_ni_syscall /* 4150 */ |
| 357 | PTR sys_getsid | 357 | PTR sys_getsid |
| 358 | PTR sys_fdatasync | 358 | PTR sys_fdatasync |
| 359 | PTR sys_32_sysctl | 359 | PTR compat_sys_sysctl |
| 360 | PTR sys_mlock | 360 | PTR sys_mlock |
| 361 | PTR sys_munlock /* 4155 */ | 361 | PTR sys_munlock /* 4155 */ |
| 362 | PTR sys_mlockall | 362 | PTR sys_mlockall |
| @@ -450,7 +450,7 @@ sys_call_table: | |||
| 450 | PTR sys_io_submit | 450 | PTR sys_io_submit |
| 451 | PTR sys_io_cancel /* 4245 */ | 451 | PTR sys_io_cancel /* 4245 */ |
| 452 | PTR sys_exit_group | 452 | PTR sys_exit_group |
| 453 | PTR sys_lookup_dcookie | 453 | PTR sys32_lookup_dcookie |
| 454 | PTR sys_epoll_create | 454 | PTR sys_epoll_create |
| 455 | PTR sys_epoll_ctl | 455 | PTR sys_epoll_ctl |
| 456 | PTR sys_epoll_wait /* 4250 */ | 456 | PTR sys_epoll_wait /* 4250 */ |
| @@ -505,7 +505,7 @@ sys_call_table: | |||
| 505 | PTR sys_fchmodat | 505 | PTR sys_fchmodat |
| 506 | PTR sys_faccessat /* 4300 */ | 506 | PTR sys_faccessat /* 4300 */ |
| 507 | PTR compat_sys_pselect6 | 507 | PTR compat_sys_pselect6 |
| 508 | PTR sys_ppoll | 508 | PTR compat_sys_ppoll |
| 509 | PTR sys_unshare | 509 | PTR sys_unshare |
| 510 | PTR sys_splice | 510 | PTR sys_splice |
| 511 | PTR sys32_sync_file_range /* 4305 */ | 511 | PTR sys32_sync_file_range /* 4305 */ |
| @@ -538,4 +538,5 @@ sys_call_table: | |||
| 538 | PTR compat_sys_rt_tgsigqueueinfo | 538 | PTR compat_sys_rt_tgsigqueueinfo |
| 539 | PTR sys_perf_event_open | 539 | PTR sys_perf_event_open |
| 540 | PTR sys_accept4 | 540 | PTR sys_accept4 |
| 541 | PTR compat_sys_recvmmsg | ||
| 541 | .size sys_call_table,.-sys_call_table | 542 | .size sys_call_table,.-sys_call_table |
diff --git a/arch/mips/kernel/smtc.c b/arch/mips/kernel/smtc.c index 4d181df44a40..a38e3ee95515 100644 --- a/arch/mips/kernel/smtc.c +++ b/arch/mips/kernel/smtc.c | |||
| @@ -75,7 +75,6 @@ unsigned long irq_hwmask[NR_IRQS]; | |||
| 75 | 75 | ||
| 76 | asiduse smtc_live_asid[MAX_SMTC_TLBS][MAX_SMTC_ASIDS]; | 76 | asiduse smtc_live_asid[MAX_SMTC_TLBS][MAX_SMTC_ASIDS]; |
| 77 | 77 | ||
| 78 | |||
| 79 | /* | 78 | /* |
| 80 | * Number of InterProcessor Interrupt (IPI) message buffers to allocate | 79 | * Number of InterProcessor Interrupt (IPI) message buffers to allocate |
| 81 | */ | 80 | */ |
| @@ -388,6 +387,7 @@ void smtc_prepare_cpus(int cpus) | |||
| 388 | IPIQ[i].head = IPIQ[i].tail = NULL; | 387 | IPIQ[i].head = IPIQ[i].tail = NULL; |
| 389 | spin_lock_init(&IPIQ[i].lock); | 388 | spin_lock_init(&IPIQ[i].lock); |
| 390 | IPIQ[i].depth = 0; | 389 | IPIQ[i].depth = 0; |
| 390 | IPIQ[i].resched_flag = 0; /* No reschedules queued initially */ | ||
| 391 | } | 391 | } |
| 392 | 392 | ||
| 393 | /* cpu_data index starts at zero */ | 393 | /* cpu_data index starts at zero */ |
| @@ -741,11 +741,24 @@ void smtc_forward_irq(unsigned int irq) | |||
| 741 | static void smtc_ipi_qdump(void) | 741 | static void smtc_ipi_qdump(void) |
| 742 | { | 742 | { |
| 743 | int i; | 743 | int i; |
| 744 | struct smtc_ipi *temp; | ||
| 744 | 745 | ||
| 745 | for (i = 0; i < NR_CPUS ;i++) { | 746 | for (i = 0; i < NR_CPUS ;i++) { |
| 746 | printk("IPIQ[%d]: head = 0x%x, tail = 0x%x, depth = %d\n", | 747 | pr_info("IPIQ[%d]: head = 0x%x, tail = 0x%x, depth = %d\n", |
| 747 | i, (unsigned)IPIQ[i].head, (unsigned)IPIQ[i].tail, | 748 | i, (unsigned)IPIQ[i].head, (unsigned)IPIQ[i].tail, |
| 748 | IPIQ[i].depth); | 749 | IPIQ[i].depth); |
| 750 | temp = IPIQ[i].head; | ||
| 751 | |||
| 752 | while (temp != IPIQ[i].tail) { | ||
| 753 | pr_debug("%d %d %d: ", temp->type, temp->dest, | ||
| 754 | (int)temp->arg); | ||
| 755 | #ifdef SMTC_IPI_DEBUG | ||
| 756 | pr_debug("%u %lu\n", temp->sender, temp->stamp); | ||
| 757 | #else | ||
| 758 | pr_debug("\n"); | ||
| 759 | #endif | ||
| 760 | temp = temp->flink; | ||
| 761 | } | ||
| 749 | } | 762 | } |
| 750 | } | 763 | } |
| 751 | 764 | ||
| @@ -784,11 +797,16 @@ void smtc_send_ipi(int cpu, int type, unsigned int action) | |||
| 784 | int mtflags; | 797 | int mtflags; |
| 785 | unsigned long tcrestart; | 798 | unsigned long tcrestart; |
| 786 | extern void r4k_wait_irqoff(void), __pastwait(void); | 799 | extern void r4k_wait_irqoff(void), __pastwait(void); |
| 800 | int set_resched_flag = (type == LINUX_SMP_IPI && | ||
| 801 | action == SMP_RESCHEDULE_YOURSELF); | ||
| 787 | 802 | ||
| 788 | if (cpu == smp_processor_id()) { | 803 | if (cpu == smp_processor_id()) { |
| 789 | printk("Cannot Send IPI to self!\n"); | 804 | printk("Cannot Send IPI to self!\n"); |
| 790 | return; | 805 | return; |
| 791 | } | 806 | } |
| 807 | if (set_resched_flag && IPIQ[cpu].resched_flag != 0) | ||
| 808 | return; /* There is a reschedule queued already */ | ||
| 809 | |||
| 792 | /* Set up a descriptor, to be delivered either promptly or queued */ | 810 | /* Set up a descriptor, to be delivered either promptly or queued */ |
| 793 | pipi = smtc_ipi_dq(&freeIPIq); | 811 | pipi = smtc_ipi_dq(&freeIPIq); |
| 794 | if (pipi == NULL) { | 812 | if (pipi == NULL) { |
| @@ -801,6 +819,7 @@ void smtc_send_ipi(int cpu, int type, unsigned int action) | |||
| 801 | pipi->dest = cpu; | 819 | pipi->dest = cpu; |
| 802 | if (cpu_data[cpu].vpe_id != cpu_data[smp_processor_id()].vpe_id) { | 820 | if (cpu_data[cpu].vpe_id != cpu_data[smp_processor_id()].vpe_id) { |
| 803 | /* If not on same VPE, enqueue and send cross-VPE interrupt */ | 821 | /* If not on same VPE, enqueue and send cross-VPE interrupt */ |
| 822 | IPIQ[cpu].resched_flag |= set_resched_flag; | ||
| 804 | smtc_ipi_nq(&IPIQ[cpu], pipi); | 823 | smtc_ipi_nq(&IPIQ[cpu], pipi); |
| 805 | LOCK_CORE_PRA(); | 824 | LOCK_CORE_PRA(); |
| 806 | settc(cpu_data[cpu].tc_id); | 825 | settc(cpu_data[cpu].tc_id); |
| @@ -847,6 +866,7 @@ void smtc_send_ipi(int cpu, int type, unsigned int action) | |||
| 847 | */ | 866 | */ |
| 848 | write_tc_c0_tchalt(0); | 867 | write_tc_c0_tchalt(0); |
| 849 | UNLOCK_CORE_PRA(); | 868 | UNLOCK_CORE_PRA(); |
| 869 | IPIQ[cpu].resched_flag |= set_resched_flag; | ||
| 850 | smtc_ipi_nq(&IPIQ[cpu], pipi); | 870 | smtc_ipi_nq(&IPIQ[cpu], pipi); |
| 851 | } else { | 871 | } else { |
| 852 | postdirect: | 872 | postdirect: |
| @@ -996,12 +1016,15 @@ void deferred_smtc_ipi(void) | |||
| 996 | * already enabled. | 1016 | * already enabled. |
| 997 | */ | 1017 | */ |
| 998 | local_irq_save(flags); | 1018 | local_irq_save(flags); |
| 999 | |||
| 1000 | spin_lock(&q->lock); | 1019 | spin_lock(&q->lock); |
| 1001 | pipi = __smtc_ipi_dq(q); | 1020 | pipi = __smtc_ipi_dq(q); |
| 1002 | spin_unlock(&q->lock); | 1021 | spin_unlock(&q->lock); |
| 1003 | if (pipi != NULL) | 1022 | if (pipi != NULL) { |
| 1023 | if (pipi->type == LINUX_SMP_IPI && | ||
| 1024 | (int)pipi->arg == SMP_RESCHEDULE_YOURSELF) | ||
| 1025 | IPIQ[cpu].resched_flag = 0; | ||
| 1004 | ipi_decode(pipi); | 1026 | ipi_decode(pipi); |
| 1027 | } | ||
| 1005 | /* | 1028 | /* |
| 1006 | * The use of the __raw_local restore isn't | 1029 | * The use of the __raw_local restore isn't |
| 1007 | * as obviously necessary here as in smtc_ipi_replay(), | 1030 | * as obviously necessary here as in smtc_ipi_replay(), |
| @@ -1082,6 +1105,9 @@ static irqreturn_t ipi_interrupt(int irq, void *dev_idm) | |||
| 1082 | * with interrupts off | 1105 | * with interrupts off |
| 1083 | */ | 1106 | */ |
| 1084 | local_irq_save(flags); | 1107 | local_irq_save(flags); |
| 1108 | if (pipi->type == LINUX_SMP_IPI && | ||
| 1109 | (int)pipi->arg == SMP_RESCHEDULE_YOURSELF) | ||
| 1110 | IPIQ[cpu].resched_flag = 0; | ||
| 1085 | ipi_decode(pipi); | 1111 | ipi_decode(pipi); |
| 1086 | local_irq_restore(flags); | 1112 | local_irq_restore(flags); |
| 1087 | } | 1113 | } |
| @@ -1305,7 +1331,7 @@ void smtc_get_new_mmu_context(struct mm_struct *mm, unsigned long cpu) | |||
| 1305 | if (!((asid += ASID_INC) & ASID_MASK) ) { | 1331 | if (!((asid += ASID_INC) & ASID_MASK) ) { |
| 1306 | if (cpu_has_vtag_icache) | 1332 | if (cpu_has_vtag_icache) |
| 1307 | flush_icache_all(); | 1333 | flush_icache_all(); |
| 1308 | /* Traverse all online CPUs (hack requires contigous range) */ | 1334 | /* Traverse all online CPUs (hack requires contiguous range) */ |
| 1309 | for_each_online_cpu(i) { | 1335 | for_each_online_cpu(i) { |
| 1310 | /* | 1336 | /* |
| 1311 | * We don't need to worry about our own CPU, nor those of | 1337 | * We don't need to worry about our own CPU, nor those of |
diff --git a/arch/mips/kernel/spram.c b/arch/mips/kernel/spram.c index 6ddb507a87ef..1821d12a6410 100644 --- a/arch/mips/kernel/spram.c +++ b/arch/mips/kernel/spram.c | |||
| @@ -13,7 +13,6 @@ | |||
| 13 | #include <linux/ptrace.h> | 13 | #include <linux/ptrace.h> |
| 14 | #include <linux/stddef.h> | 14 | #include <linux/stddef.h> |
| 15 | 15 | ||
| 16 | #include <asm/cpu.h> | ||
| 17 | #include <asm/fpu.h> | 16 | #include <asm/fpu.h> |
| 18 | #include <asm/mipsregs.h> | 17 | #include <asm/mipsregs.h> |
| 19 | #include <asm/system.h> | 18 | #include <asm/system.h> |
| @@ -198,8 +197,7 @@ static __cpuinit void probe_spram(char *type, | |||
| 198 | offset += 2 * SPRAM_TAG_STRIDE; | 197 | offset += 2 * SPRAM_TAG_STRIDE; |
| 199 | } | 198 | } |
| 200 | } | 199 | } |
| 201 | 200 | void __cpuinit spram_config(void) | |
| 202 | __cpuinit void spram_config(void) | ||
| 203 | { | 201 | { |
| 204 | struct cpuinfo_mips *c = ¤t_cpu_data; | 202 | struct cpuinfo_mips *c = ¤t_cpu_data; |
| 205 | unsigned int config0; | 203 | unsigned int config0; |
| @@ -208,6 +206,7 @@ __cpuinit void spram_config(void) | |||
| 208 | case CPU_24K: | 206 | case CPU_24K: |
| 209 | case CPU_34K: | 207 | case CPU_34K: |
| 210 | case CPU_74K: | 208 | case CPU_74K: |
| 209 | case CPU_1004K: | ||
| 211 | config0 = read_c0_config(); | 210 | config0 = read_c0_config(); |
| 212 | /* FIXME: addresses are Malta specific */ | 211 | /* FIXME: addresses are Malta specific */ |
| 213 | if (config0 & (1<<24)) { | 212 | if (config0 & (1<<24)) { |
diff --git a/arch/mips/kernel/syscall.c b/arch/mips/kernel/syscall.c index 3fe1fcfa2e73..3f7f466190b4 100644 --- a/arch/mips/kernel/syscall.c +++ b/arch/mips/kernel/syscall.c | |||
| @@ -93,7 +93,8 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, | |||
| 93 | * We do not accept a shared mapping if it would violate | 93 | * We do not accept a shared mapping if it would violate |
| 94 | * cache aliasing constraints. | 94 | * cache aliasing constraints. |
| 95 | */ | 95 | */ |
| 96 | if ((flags & MAP_SHARED) && (addr & shm_align_mask)) | 96 | if ((flags & MAP_SHARED) && |
| 97 | ((addr - (pgoff << PAGE_SHIFT)) & shm_align_mask)) | ||
| 97 | return -EINVAL; | 98 | return -EINVAL; |
| 98 | return addr; | 99 | return addr; |
| 99 | } | 100 | } |
| @@ -129,31 +130,6 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, | |||
| 129 | } | 130 | } |
| 130 | } | 131 | } |
| 131 | 132 | ||
| 132 | /* common code for old and new mmaps */ | ||
| 133 | static inline unsigned long | ||
| 134 | do_mmap2(unsigned long addr, unsigned long len, unsigned long prot, | ||
| 135 | unsigned long flags, unsigned long fd, unsigned long pgoff) | ||
| 136 | { | ||
| 137 | unsigned long error = -EBADF; | ||
| 138 | struct file * file = NULL; | ||
| 139 | |||
| 140 | flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); | ||
| 141 | if (!(flags & MAP_ANONYMOUS)) { | ||
| 142 | file = fget(fd); | ||
| 143 | if (!file) | ||
| 144 | goto out; | ||
| 145 | } | ||
| 146 | |||
| 147 | down_write(¤t->mm->mmap_sem); | ||
| 148 | error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); | ||
| 149 | up_write(¤t->mm->mmap_sem); | ||
| 150 | |||
| 151 | if (file) | ||
| 152 | fput(file); | ||
| 153 | out: | ||
| 154 | return error; | ||
| 155 | } | ||
| 156 | |||
| 157 | SYSCALL_DEFINE6(mips_mmap, unsigned long, addr, unsigned long, len, | 133 | SYSCALL_DEFINE6(mips_mmap, unsigned long, addr, unsigned long, len, |
| 158 | unsigned long, prot, unsigned long, flags, unsigned long, | 134 | unsigned long, prot, unsigned long, flags, unsigned long, |
| 159 | fd, off_t, offset) | 135 | fd, off_t, offset) |
| @@ -164,7 +140,7 @@ SYSCALL_DEFINE6(mips_mmap, unsigned long, addr, unsigned long, len, | |||
| 164 | if (offset & ~PAGE_MASK) | 140 | if (offset & ~PAGE_MASK) |
| 165 | goto out; | 141 | goto out; |
| 166 | 142 | ||
| 167 | result = do_mmap2(addr, len, prot, flags, fd, offset >> PAGE_SHIFT); | 143 | result = sys_mmap_pgoff(addr, len, prot, flags, fd, offset >> PAGE_SHIFT); |
| 168 | 144 | ||
| 169 | out: | 145 | out: |
| 170 | return result; | 146 | return result; |
| @@ -177,7 +153,7 @@ SYSCALL_DEFINE6(mips_mmap2, unsigned long, addr, unsigned long, len, | |||
| 177 | if (pgoff & (~PAGE_MASK >> 12)) | 153 | if (pgoff & (~PAGE_MASK >> 12)) |
| 178 | return -EINVAL; | 154 | return -EINVAL; |
| 179 | 155 | ||
| 180 | return do_mmap2(addr, len, prot, flags, fd, pgoff >> (PAGE_SHIFT-12)); | 156 | return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff >> (PAGE_SHIFT-12)); |
| 181 | } | 157 | } |
| 182 | 158 | ||
| 183 | save_static_function(sys_fork); | 159 | save_static_function(sys_fork); |
| @@ -306,6 +282,7 @@ static inline int mips_atomic_set(struct pt_regs *regs, | |||
| 306 | 282 | ||
| 307 | if (cpu_has_llsc && R10000_LLSC_WAR) { | 283 | if (cpu_has_llsc && R10000_LLSC_WAR) { |
| 308 | __asm__ __volatile__ ( | 284 | __asm__ __volatile__ ( |
| 285 | " .set mips3 \n" | ||
| 309 | " li %[err], 0 \n" | 286 | " li %[err], 0 \n" |
| 310 | "1: ll %[old], (%[addr]) \n" | 287 | "1: ll %[old], (%[addr]) \n" |
| 311 | " move %[tmp], %[new] \n" | 288 | " move %[tmp], %[new] \n" |
| @@ -320,6 +297,7 @@ static inline int mips_atomic_set(struct pt_regs *regs, | |||
| 320 | " "STR(PTR)" 1b, 4b \n" | 297 | " "STR(PTR)" 1b, 4b \n" |
| 321 | " "STR(PTR)" 2b, 4b \n" | 298 | " "STR(PTR)" 2b, 4b \n" |
| 322 | " .previous \n" | 299 | " .previous \n" |
| 300 | " .set mips0 \n" | ||
| 323 | : [old] "=&r" (old), | 301 | : [old] "=&r" (old), |
| 324 | [err] "=&r" (err), | 302 | [err] "=&r" (err), |
| 325 | [tmp] "=&r" (tmp) | 303 | [tmp] "=&r" (tmp) |
| @@ -329,6 +307,7 @@ static inline int mips_atomic_set(struct pt_regs *regs, | |||
| 329 | : "memory"); | 307 | : "memory"); |
| 330 | } else if (cpu_has_llsc) { | 308 | } else if (cpu_has_llsc) { |
| 331 | __asm__ __volatile__ ( | 309 | __asm__ __volatile__ ( |
| 310 | " .set mips3 \n" | ||
| 332 | " li %[err], 0 \n" | 311 | " li %[err], 0 \n" |
| 333 | "1: ll %[old], (%[addr]) \n" | 312 | "1: ll %[old], (%[addr]) \n" |
| 334 | " move %[tmp], %[new] \n" | 313 | " move %[tmp], %[new] \n" |
| @@ -347,6 +326,7 @@ static inline int mips_atomic_set(struct pt_regs *regs, | |||
| 347 | " "STR(PTR)" 1b, 5b \n" | 326 | " "STR(PTR)" 1b, 5b \n" |
| 348 | " "STR(PTR)" 2b, 5b \n" | 327 | " "STR(PTR)" 2b, 5b \n" |
| 349 | " .previous \n" | 328 | " .previous \n" |
| 329 | " .set mips0 \n" | ||
| 350 | : [old] "=&r" (old), | 330 | : [old] "=&r" (old), |
| 351 | [err] "=&r" (err), | 331 | [err] "=&r" (err), |
| 352 | [tmp] "=&r" (tmp) | 332 | [tmp] "=&r" (tmp) |
diff --git a/arch/mips/kernel/time.c b/arch/mips/kernel/time.c index 1f467d534642..fb7497405510 100644 --- a/arch/mips/kernel/time.c +++ b/arch/mips/kernel/time.c | |||
| @@ -71,39 +71,6 @@ EXPORT_SYMBOL(perf_irq); | |||
| 71 | 71 | ||
| 72 | unsigned int mips_hpt_frequency; | 72 | unsigned int mips_hpt_frequency; |
| 73 | 73 | ||
| 74 | void __init clocksource_set_clock(struct clocksource *cs, unsigned int clock) | ||
| 75 | { | ||
| 76 | u64 temp; | ||
| 77 | u32 shift; | ||
| 78 | |||
| 79 | /* Find a shift value */ | ||
| 80 | for (shift = 32; shift > 0; shift--) { | ||
| 81 | temp = (u64) NSEC_PER_SEC << shift; | ||
| 82 | do_div(temp, clock); | ||
| 83 | if ((temp >> 32) == 0) | ||
| 84 | break; | ||
| 85 | } | ||
| 86 | cs->shift = shift; | ||
| 87 | cs->mult = (u32) temp; | ||
| 88 | } | ||
| 89 | |||
| 90 | void __cpuinit clockevent_set_clock(struct clock_event_device *cd, | ||
| 91 | unsigned int clock) | ||
| 92 | { | ||
| 93 | u64 temp; | ||
| 94 | u32 shift; | ||
| 95 | |||
| 96 | /* Find a shift value */ | ||
| 97 | for (shift = 32; shift > 0; shift--) { | ||
| 98 | temp = (u64) clock << shift; | ||
| 99 | do_div(temp, NSEC_PER_SEC); | ||
| 100 | if ((temp >> 32) == 0) | ||
| 101 | break; | ||
| 102 | } | ||
| 103 | cd->shift = shift; | ||
| 104 | cd->mult = (u32) temp; | ||
| 105 | } | ||
| 106 | |||
| 107 | /* | 74 | /* |
| 108 | * This function exists in order to cause an error due to a duplicate | 75 | * This function exists in order to cause an error due to a duplicate |
| 109 | * definition if platform code should have its own implementation. The hook | 76 | * definition if platform code should have its own implementation. The hook |
diff --git a/arch/mips/kernel/vpe.c b/arch/mips/kernel/vpe.c index 03092ab2a296..60477529362e 100644 --- a/arch/mips/kernel/vpe.c +++ b/arch/mips/kernel/vpe.c | |||
| @@ -1116,8 +1116,6 @@ static int vpe_open(struct inode *inode, struct file *filp) | |||
| 1116 | v->shared_ptr = NULL; | 1116 | v->shared_ptr = NULL; |
| 1117 | v->__start = 0; | 1117 | v->__start = 0; |
| 1118 | 1118 | ||
| 1119 | unlock_kernel(); | ||
| 1120 | |||
| 1121 | return 0; | 1119 | return 0; |
| 1122 | } | 1120 | } |
| 1123 | 1121 | ||
diff --git a/arch/mips/lasat/sysctl.c b/arch/mips/lasat/sysctl.c index b3deed8db619..14b9a28a4aec 100644 --- a/arch/mips/lasat/sysctl.c +++ b/arch/mips/lasat/sysctl.c | |||
| @@ -37,23 +37,6 @@ | |||
| 37 | #include "ds1603.h" | 37 | #include "ds1603.h" |
| 38 | #endif | 38 | #endif |
| 39 | 39 | ||
| 40 | /* Strategy function to write EEPROM after changing string entry */ | ||
| 41 | int sysctl_lasatstring(ctl_table *table, | ||
| 42 | void *oldval, size_t *oldlenp, | ||
| 43 | void *newval, size_t newlen) | ||
| 44 | { | ||
| 45 | int r; | ||
| 46 | |||
| 47 | r = sysctl_string(table, oldval, oldlenp, newval, newlen); | ||
| 48 | if (r < 0) | ||
| 49 | return r; | ||
| 50 | |||
| 51 | if (newval && newlen) | ||
| 52 | lasat_write_eeprom_info(); | ||
| 53 | |||
| 54 | return 0; | ||
| 55 | } | ||
| 56 | |||
| 57 | 40 | ||
| 58 | /* And the same for proc */ | 41 | /* And the same for proc */ |
| 59 | int proc_dolasatstring(ctl_table *table, int write, | 42 | int proc_dolasatstring(ctl_table *table, int write, |
| @@ -113,46 +96,6 @@ int proc_dolasatrtc(ctl_table *table, int write, | |||
| 113 | } | 96 | } |
| 114 | #endif | 97 | #endif |
| 115 | 98 | ||
| 116 | /* Sysctl for setting the IP addresses */ | ||
| 117 | int sysctl_lasat_intvec(ctl_table *table, | ||
| 118 | void *oldval, size_t *oldlenp, | ||
| 119 | void *newval, size_t newlen) | ||
| 120 | { | ||
| 121 | int r; | ||
| 122 | |||
| 123 | r = sysctl_intvec(table, oldval, oldlenp, newval, newlen); | ||
| 124 | if (r < 0) | ||
| 125 | return r; | ||
| 126 | |||
| 127 | if (newval && newlen) | ||
| 128 | lasat_write_eeprom_info(); | ||
| 129 | |||
| 130 | return 0; | ||
| 131 | } | ||
| 132 | |||
| 133 | #ifdef CONFIG_DS1603 | ||
| 134 | /* Same for RTC */ | ||
| 135 | int sysctl_lasat_rtc(ctl_table *table, | ||
| 136 | void *oldval, size_t *oldlenp, | ||
| 137 | void *newval, size_t newlen) | ||
| 138 | { | ||
| 139 | struct timespec ts; | ||
| 140 | int r; | ||
| 141 | |||
| 142 | read_persistent_clock(&ts); | ||
| 143 | rtctmp = ts.tv_sec; | ||
| 144 | if (rtctmp < 0) | ||
| 145 | rtctmp = 0; | ||
| 146 | r = sysctl_intvec(table, oldval, oldlenp, newval, newlen); | ||
| 147 | if (r < 0) | ||
| 148 | return r; | ||
| 149 | if (newval && newlen) | ||
| 150 | rtc_mips_set_mmss(rtctmp); | ||
| 151 | |||
| 152 | return r; | ||
| 153 | } | ||
| 154 | #endif | ||
| 155 | |||
| 156 | #ifdef CONFIG_INET | 99 | #ifdef CONFIG_INET |
| 157 | int proc_lasat_ip(ctl_table *table, int write, | 100 | int proc_lasat_ip(ctl_table *table, int write, |
| 158 | void *buffer, size_t *lenp, loff_t *ppos) | 101 | void *buffer, size_t *lenp, loff_t *ppos) |
| @@ -214,23 +157,6 @@ int proc_lasat_ip(ctl_table *table, int write, | |||
| 214 | } | 157 | } |
| 215 | #endif | 158 | #endif |
| 216 | 159 | ||
| 217 | static int sysctl_lasat_prid(ctl_table *table, | ||
| 218 | void *oldval, size_t *oldlenp, | ||
| 219 | void *newval, size_t newlen) | ||
| 220 | { | ||
| 221 | int r; | ||
| 222 | |||
| 223 | r = sysctl_intvec(table, oldval, oldlenp, newval, newlen); | ||
| 224 | if (r < 0) | ||
| 225 | return r; | ||
| 226 | if (newval && newlen) { | ||
| 227 | lasat_board_info.li_eeprom_info.prid = *(int *)newval; | ||
| 228 | lasat_write_eeprom_info(); | ||
| 229 | lasat_init_board_info(); | ||
| 230 | } | ||
| 231 | return 0; | ||
| 232 | } | ||
| 233 | |||
| 234 | int proc_lasat_prid(ctl_table *table, int write, | 160 | int proc_lasat_prid(ctl_table *table, int write, |
| 235 | void *buffer, size_t *lenp, loff_t *ppos) | 161 | void *buffer, size_t *lenp, loff_t *ppos) |
| 236 | { | 162 | { |
| @@ -252,115 +178,92 @@ extern int lasat_boot_to_service; | |||
| 252 | 178 | ||
| 253 | static ctl_table lasat_table[] = { | 179 | static ctl_table lasat_table[] = { |
| 254 | { | 180 | { |
| 255 | .ctl_name = CTL_UNNUMBERED, | ||
| 256 | .procname = "cpu-hz", | 181 | .procname = "cpu-hz", |
| 257 | .data = &lasat_board_info.li_cpu_hz, | 182 | .data = &lasat_board_info.li_cpu_hz, |
| 258 | .maxlen = sizeof(int), | 183 | .maxlen = sizeof(int), |
| 259 | .mode = 0444, | 184 | .mode = 0444, |
| 260 | .proc_handler = &proc_dointvec, | 185 | .proc_handler = proc_dointvec, |
| 261 | .strategy = &sysctl_intvec | ||
| 262 | }, | 186 | }, |
| 263 | { | 187 | { |
| 264 | .ctl_name = CTL_UNNUMBERED, | ||
| 265 | .procname = "bus-hz", | 188 | .procname = "bus-hz", |
| 266 | .data = &lasat_board_info.li_bus_hz, | 189 | .data = &lasat_board_info.li_bus_hz, |
| 267 | .maxlen = sizeof(int), | 190 | .maxlen = sizeof(int), |
| 268 | .mode = 0444, | 191 | .mode = 0444, |
| 269 | .proc_handler = &proc_dointvec, | 192 | .proc_handler = proc_dointvec, |
| 270 | .strategy = &sysctl_intvec | ||
| 271 | }, | 193 | }, |
| 272 | { | 194 | { |
| 273 | .ctl_name = CTL_UNNUMBERED, | ||
| 274 | .procname = "bmid", | 195 | .procname = "bmid", |
| 275 | .data = &lasat_board_info.li_bmid, | 196 | .data = &lasat_board_info.li_bmid, |
| 276 | .maxlen = sizeof(int), | 197 | .maxlen = sizeof(int), |
| 277 | .mode = 0444, | 198 | .mode = 0444, |
| 278 | .proc_handler = &proc_dointvec, | 199 | .proc_handler = proc_dointvec, |
| 279 | .strategy = &sysctl_intvec | ||
| 280 | }, | 200 | }, |
| 281 | { | 201 | { |
| 282 | .ctl_name = CTL_UNNUMBERED, | ||
| 283 | .procname = "prid", | 202 | .procname = "prid", |
| 284 | .data = &lasat_board_info.li_prid, | 203 | .data = &lasat_board_info.li_prid, |
| 285 | .maxlen = sizeof(int), | 204 | .maxlen = sizeof(int), |
| 286 | .mode = 0644, | 205 | .mode = 0644, |
| 287 | .proc_handler = &proc_lasat_prid, | 206 | .proc_handler = proc_lasat_prid, |
| 288 | .strategy = &sysctl_lasat_prid | 207 | . }, |
| 289 | }, | ||
| 290 | #ifdef CONFIG_INET | 208 | #ifdef CONFIG_INET |
| 291 | { | 209 | { |
| 292 | .ctl_name = CTL_UNNUMBERED, | ||
| 293 | .procname = "ipaddr", | 210 | .procname = "ipaddr", |
| 294 | .data = &lasat_board_info.li_eeprom_info.ipaddr, | 211 | .data = &lasat_board_info.li_eeprom_info.ipaddr, |
| 295 | .maxlen = sizeof(int), | 212 | .maxlen = sizeof(int), |
| 296 | .mode = 0644, | 213 | .mode = 0644, |
| 297 | .proc_handler = &proc_lasat_ip, | 214 | .proc_handler = proc_lasat_ip, |
| 298 | .strategy = &sysctl_lasat_intvec | ||
| 299 | }, | 215 | }, |
| 300 | { | 216 | { |
| 301 | .ctl_name = CTL_UNNUMBERED, | ||
| 302 | .procname = "netmask", | 217 | .procname = "netmask", |
| 303 | .data = &lasat_board_info.li_eeprom_info.netmask, | 218 | .data = &lasat_board_info.li_eeprom_info.netmask, |
| 304 | .maxlen = sizeof(int), | 219 | .maxlen = sizeof(int), |
| 305 | .mode = 0644, | 220 | .mode = 0644, |
| 306 | .proc_handler = &proc_lasat_ip, | 221 | .proc_handler = proc_lasat_ip, |
| 307 | .strategy = &sysctl_lasat_intvec | ||
| 308 | }, | 222 | }, |
| 309 | #endif | 223 | #endif |
| 310 | { | 224 | { |
| 311 | .ctl_name = CTL_UNNUMBERED, | ||
| 312 | .procname = "passwd_hash", | 225 | .procname = "passwd_hash", |
| 313 | .data = &lasat_board_info.li_eeprom_info.passwd_hash, | 226 | .data = &lasat_board_info.li_eeprom_info.passwd_hash, |
| 314 | .maxlen = | 227 | .maxlen = |
| 315 | sizeof(lasat_board_info.li_eeprom_info.passwd_hash), | 228 | sizeof(lasat_board_info.li_eeprom_info.passwd_hash), |
| 316 | .mode = 0600, | 229 | .mode = 0600, |
| 317 | .proc_handler = &proc_dolasatstring, | 230 | .proc_handler = proc_dolasatstring, |
| 318 | .strategy = &sysctl_lasatstring | ||
| 319 | }, | 231 | }, |
| 320 | { | 232 | { |
| 321 | .ctl_name = CTL_UNNUMBERED, | ||
| 322 | .procname = "boot-service", | 233 | .procname = "boot-service", |
| 323 | .data = &lasat_boot_to_service, | 234 | .data = &lasat_boot_to_service, |
| 324 | .maxlen = sizeof(int), | 235 | .maxlen = sizeof(int), |
| 325 | .mode = 0644, | 236 | .mode = 0644, |
| 326 | .proc_handler = &proc_dointvec, | 237 | .proc_handler = proc_dointvec, |
| 327 | .strategy = &sysctl_intvec | ||
| 328 | }, | 238 | }, |
| 329 | #ifdef CONFIG_DS1603 | 239 | #ifdef CONFIG_DS1603 |
| 330 | { | 240 | { |
| 331 | .ctl_name = CTL_UNNUMBERED, | ||
| 332 | .procname = "rtc", | 241 | .procname = "rtc", |
| 333 | .data = &rtctmp, | 242 | .data = &rtctmp, |
| 334 | .maxlen = sizeof(int), | 243 | .maxlen = sizeof(int), |
| 335 | .mode = 0644, | 244 | .mode = 0644, |
| 336 | .proc_handler = &proc_dolasatrtc, | 245 | .proc_handler = proc_dolasatrtc, |
| 337 | .strategy = &sysctl_lasat_rtc | ||
| 338 | }, | 246 | }, |
| 339 | #endif | 247 | #endif |
| 340 | { | 248 | { |
| 341 | .ctl_name = CTL_UNNUMBERED, | ||
| 342 | .procname = "namestr", | 249 | .procname = "namestr", |
| 343 | .data = &lasat_board_info.li_namestr, | 250 | .data = &lasat_board_info.li_namestr, |
| 344 | .maxlen = sizeof(lasat_board_info.li_namestr), | 251 | .maxlen = sizeof(lasat_board_info.li_namestr), |
| 345 | .mode = 0444, | 252 | .mode = 0444, |
| 346 | .proc_handler = &proc_dostring, | 253 | .proc_handler = proc_dostring, |
| 347 | .strategy = &sysctl_string | ||
| 348 | }, | 254 | }, |
| 349 | { | 255 | { |
| 350 | .ctl_name = CTL_UNNUMBERED, | ||
| 351 | .procname = "typestr", | 256 | .procname = "typestr", |
| 352 | .data = &lasat_board_info.li_typestr, | 257 | .data = &lasat_board_info.li_typestr, |
| 353 | .maxlen = sizeof(lasat_board_info.li_typestr), | 258 | .maxlen = sizeof(lasat_board_info.li_typestr), |
| 354 | .mode = 0444, | 259 | .mode = 0444, |
| 355 | .proc_handler = &proc_dostring, | 260 | .proc_handler = proc_dostring, |
| 356 | .strategy = &sysctl_string | ||
| 357 | }, | 261 | }, |
| 358 | {} | 262 | {} |
| 359 | }; | 263 | }; |
| 360 | 264 | ||
| 361 | static ctl_table lasat_root_table[] = { | 265 | static ctl_table lasat_root_table[] = { |
| 362 | { | 266 | { |
| 363 | .ctl_name = CTL_UNNUMBERED, | ||
| 364 | .procname = "lasat", | 267 | .procname = "lasat", |
| 365 | .mode = 0555, | 268 | .mode = 0555, |
| 366 | .child = lasat_table | 269 | .child = lasat_table |
diff --git a/arch/mips/loongson/common/irq.c b/arch/mips/loongson/common/irq.c index f368c735cbd3..b32b4a3e5137 100644 --- a/arch/mips/loongson/common/irq.c +++ b/arch/mips/loongson/common/irq.c | |||
| @@ -55,7 +55,6 @@ void __init arch_init_irq(void) | |||
| 55 | * int-handler is not on bootstrap | 55 | * int-handler is not on bootstrap |
| 56 | */ | 56 | */ |
| 57 | clear_c0_status(ST0_IM | ST0_BEV); | 57 | clear_c0_status(ST0_IM | ST0_BEV); |
| 58 | local_irq_disable(); | ||
| 59 | 58 | ||
| 60 | /* setting irq trigger mode */ | 59 | /* setting irq trigger mode */ |
| 61 | set_irq_trigger_mode(); | 60 | set_irq_trigger_mode(); |
diff --git a/arch/mips/loongson/common/mem.c b/arch/mips/loongson/common/mem.c index 7c92f79b6480..e94ef158f980 100644 --- a/arch/mips/loongson/common/mem.c +++ b/arch/mips/loongson/common/mem.c | |||
| @@ -26,7 +26,7 @@ void __init prom_init_memory(void) | |||
| 26 | /* override of arch/mips/mm/cache.c: __uncached_access */ | 26 | /* override of arch/mips/mm/cache.c: __uncached_access */ |
| 27 | int __uncached_access(struct file *file, unsigned long addr) | 27 | int __uncached_access(struct file *file, unsigned long addr) |
| 28 | { | 28 | { |
| 29 | if (file->f_flags & O_SYNC) | 29 | if (file->f_flags & O_DSYNC) |
| 30 | return 1; | 30 | return 1; |
| 31 | 31 | ||
| 32 | return addr >= __pa(high_memory) || | 32 | return addr >= __pa(high_memory) || |
diff --git a/arch/mips/math-emu/cp1emu.c b/arch/mips/math-emu/cp1emu.c index 890f77927d62..454b53924490 100644 --- a/arch/mips/math-emu/cp1emu.c +++ b/arch/mips/math-emu/cp1emu.c | |||
| @@ -163,33 +163,34 @@ static int isBranchInstr(mips_instruction * i) | |||
| 163 | 163 | ||
| 164 | /* | 164 | /* |
| 165 | * In the Linux kernel, we support selection of FPR format on the | 165 | * In the Linux kernel, we support selection of FPR format on the |
| 166 | * basis of the Status.FR bit. This does imply that, if a full 32 | 166 | * basis of the Status.FR bit. If an FPU is not present, the FR bit |
| 167 | * FPRs are desired, there needs to be a flip-flop that can be written | 167 | * is hardwired to zero, which would imply a 32-bit FPU even for |
| 168 | * to one at that bit position. In any case, O32 MIPS ABI uses | 168 | * 64-bit CPUs. For 64-bit kernels with no FPU we use TIF_32BIT_REGS |
| 169 | * only the even FPRs (Status.FR = 0). | 169 | * as a proxy for the FR bit so that a 64-bit FPU is emulated. In any |
| 170 | * case, for a 32-bit kernel which uses the O32 MIPS ABI, only the | ||
| 171 | * even FPRs are used (Status.FR = 0). | ||
| 170 | */ | 172 | */ |
| 171 | 173 | static inline int cop1_64bit(struct pt_regs *xcp) | |
| 172 | #define CP0_STATUS_FR_SUPPORT | 174 | { |
| 173 | 175 | if (cpu_has_fpu) | |
| 174 | #ifdef CP0_STATUS_FR_SUPPORT | 176 | return xcp->cp0_status & ST0_FR; |
| 175 | #define FR_BIT ST0_FR | 177 | #ifdef CONFIG_64BIT |
| 178 | return !test_thread_flag(TIF_32BIT_REGS); | ||
| 176 | #else | 179 | #else |
| 177 | #define FR_BIT 0 | 180 | return 0; |
| 178 | #endif | 181 | #endif |
| 182 | } | ||
| 183 | |||
| 184 | #define SIFROMREG(si, x) ((si) = cop1_64bit(xcp) || !(x & 1) ? \ | ||
| 185 | (int)ctx->fpr[x] : (int)(ctx->fpr[x & ~1] >> 32)) | ||
| 179 | 186 | ||
| 180 | #define SIFROMREG(si, x) ((si) = \ | 187 | #define SITOREG(si, x) (ctx->fpr[x & ~(cop1_64bit(xcp) == 0)] = \ |
| 181 | (xcp->cp0_status & FR_BIT) || !(x & 1) ? \ | 188 | cop1_64bit(xcp) || !(x & 1) ? \ |
| 182 | (int)ctx->fpr[x] : \ | ||
| 183 | (int)(ctx->fpr[x & ~1] >> 32 )) | ||
| 184 | #define SITOREG(si, x) (ctx->fpr[x & ~((xcp->cp0_status & FR_BIT) == 0)] = \ | ||
| 185 | (xcp->cp0_status & FR_BIT) || !(x & 1) ? \ | ||
| 186 | ctx->fpr[x & ~1] >> 32 << 32 | (u32)(si) : \ | 189 | ctx->fpr[x & ~1] >> 32 << 32 | (u32)(si) : \ |
| 187 | ctx->fpr[x & ~1] << 32 >> 32 | (u64)(si) << 32) | 190 | ctx->fpr[x & ~1] << 32 >> 32 | (u64)(si) << 32) |
| 188 | 191 | ||
| 189 | #define DIFROMREG(di, x) ((di) = \ | 192 | #define DIFROMREG(di, x) ((di) = ctx->fpr[x & ~(cop1_64bit(xcp) == 0)]) |
| 190 | ctx->fpr[x & ~((xcp->cp0_status & FR_BIT) == 0)]) | 193 | #define DITOREG(di, x) (ctx->fpr[x & ~(cop1_64bit(xcp) == 0)] = (di)) |
| 191 | #define DITOREG(di, x) (ctx->fpr[x & ~((xcp->cp0_status & FR_BIT) == 0)] \ | ||
| 192 | = (di)) | ||
| 193 | 194 | ||
| 194 | #define SPFROMREG(sp, x) SIFROMREG((sp).bits, x) | 195 | #define SPFROMREG(sp, x) SIFROMREG((sp).bits, x) |
| 195 | #define SPTOREG(sp, x) SITOREG((sp).bits, x) | 196 | #define SPTOREG(sp, x) SITOREG((sp).bits, x) |
diff --git a/arch/mips/math-emu/dp_simple.c b/arch/mips/math-emu/dp_simple.c index 1c555e6c6a9f..d9ae1dbabda7 100644 --- a/arch/mips/math-emu/dp_simple.c +++ b/arch/mips/math-emu/dp_simple.c | |||
| @@ -62,8 +62,6 @@ ieee754dp ieee754dp_neg(ieee754dp x) | |||
| 62 | return ieee754dp_nanxcpt(y, "neg"); | 62 | return ieee754dp_nanxcpt(y, "neg"); |
| 63 | } | 63 | } |
| 64 | 64 | ||
| 65 | if (ieee754dp_isnan(x)) /* but not infinity */ | ||
| 66 | return ieee754dp_nanxcpt(x, "neg", x); | ||
| 67 | return x; | 65 | return x; |
| 68 | } | 66 | } |
| 69 | 67 | ||
| @@ -76,15 +74,12 @@ ieee754dp ieee754dp_abs(ieee754dp x) | |||
| 76 | CLEARCX; | 74 | CLEARCX; |
| 77 | FLUSHXDP; | 75 | FLUSHXDP; |
| 78 | 76 | ||
| 77 | /* Clear sign ALWAYS, irrespective of NaN */ | ||
| 78 | DPSIGN(x) = 0; | ||
| 79 | |||
| 79 | if (xc == IEEE754_CLASS_SNAN) { | 80 | if (xc == IEEE754_CLASS_SNAN) { |
| 80 | SETCX(IEEE754_INVALID_OPERATION); | 81 | return ieee754dp_nanxcpt(ieee754dp_indef(), "abs"); |
| 81 | return ieee754dp_nanxcpt(ieee754dp_indef(), "neg"); | ||
| 82 | } | 82 | } |
| 83 | 83 | ||
| 84 | if (ieee754dp_isnan(x)) /* but not infinity */ | ||
| 85 | return ieee754dp_nanxcpt(x, "abs", x); | ||
| 86 | |||
| 87 | /* quick fix up */ | ||
| 88 | DPSIGN(x) = 0; | ||
| 89 | return x; | 84 | return x; |
| 90 | } | 85 | } |
diff --git a/arch/mips/math-emu/dp_sub.c b/arch/mips/math-emu/dp_sub.c index b30c5b1f1a2c..a2127d685a0d 100644 --- a/arch/mips/math-emu/dp_sub.c +++ b/arch/mips/math-emu/dp_sub.c | |||
| @@ -110,7 +110,7 @@ ieee754dp ieee754dp_sub(ieee754dp x, ieee754dp y) | |||
| 110 | 110 | ||
| 111 | case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_DNORM): | 111 | case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_DNORM): |
| 112 | DPDNORMX; | 112 | DPDNORMX; |
| 113 | /* FAAL THOROUGH */ | 113 | /* FALL THROUGH */ |
| 114 | 114 | ||
| 115 | case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_DNORM): | 115 | case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_DNORM): |
| 116 | /* normalize ym,ye */ | 116 | /* normalize ym,ye */ |
diff --git a/arch/mips/math-emu/sp_simple.c b/arch/mips/math-emu/sp_simple.c index 770f0f4677cd..3175477d36f6 100644 --- a/arch/mips/math-emu/sp_simple.c +++ b/arch/mips/math-emu/sp_simple.c | |||
| @@ -62,8 +62,6 @@ ieee754sp ieee754sp_neg(ieee754sp x) | |||
| 62 | return ieee754sp_nanxcpt(y, "neg"); | 62 | return ieee754sp_nanxcpt(y, "neg"); |
| 63 | } | 63 | } |
| 64 | 64 | ||
| 65 | if (ieee754sp_isnan(x)) /* but not infinity */ | ||
| 66 | return ieee754sp_nanxcpt(x, "neg", x); | ||
| 67 | return x; | 65 | return x; |
| 68 | } | 66 | } |
| 69 | 67 | ||
| @@ -76,15 +74,12 @@ ieee754sp ieee754sp_abs(ieee754sp x) | |||
| 76 | CLEARCX; | 74 | CLEARCX; |
| 77 | FLUSHXSP; | 75 | FLUSHXSP; |
| 78 | 76 | ||
| 77 | /* Clear sign ALWAYS, irrespective of NaN */ | ||
| 78 | SPSIGN(x) = 0; | ||
| 79 | |||
| 79 | if (xc == IEEE754_CLASS_SNAN) { | 80 | if (xc == IEEE754_CLASS_SNAN) { |
| 80 | SETCX(IEEE754_INVALID_OPERATION); | ||
| 81 | return ieee754sp_nanxcpt(ieee754sp_indef(), "abs"); | 81 | return ieee754sp_nanxcpt(ieee754sp_indef(), "abs"); |
| 82 | } | 82 | } |
| 83 | 83 | ||
| 84 | if (ieee754sp_isnan(x)) /* but not infinity */ | ||
| 85 | return ieee754sp_nanxcpt(x, "abs", x); | ||
| 86 | |||
| 87 | /* quick fix up */ | ||
| 88 | SPSIGN(x) = 0; | ||
| 89 | return x; | 84 | return x; |
| 90 | } | 85 | } |
diff --git a/arch/mips/mm/cache.c b/arch/mips/mm/cache.c index 694d51f523d1..102b2dfa542a 100644 --- a/arch/mips/mm/cache.c +++ b/arch/mips/mm/cache.c | |||
| @@ -194,7 +194,7 @@ void __devinit cpu_cache_init(void) | |||
| 194 | 194 | ||
| 195 | int __weak __uncached_access(struct file *file, unsigned long addr) | 195 | int __weak __uncached_access(struct file *file, unsigned long addr) |
| 196 | { | 196 | { |
| 197 | if (file->f_flags & O_SYNC) | 197 | if (file->f_flags & O_DSYNC) |
| 198 | return 1; | 198 | return 1; |
| 199 | 199 | ||
| 200 | return addr >= __pa(high_memory); | 200 | return addr >= __pa(high_memory); |
diff --git a/arch/mips/mm/dma-default.c b/arch/mips/mm/dma-default.c index 7e48e76148aa..9367e33fbd18 100644 --- a/arch/mips/mm/dma-default.c +++ b/arch/mips/mm/dma-default.c | |||
| @@ -90,6 +90,9 @@ void *dma_alloc_coherent(struct device *dev, size_t size, | |||
| 90 | { | 90 | { |
| 91 | void *ret; | 91 | void *ret; |
| 92 | 92 | ||
| 93 | if (dma_alloc_from_coherent(dev, size, dma_handle, &ret)) | ||
| 94 | return ret; | ||
| 95 | |||
| 93 | gfp = massage_gfp_flags(dev, gfp); | 96 | gfp = massage_gfp_flags(dev, gfp); |
| 94 | 97 | ||
| 95 | ret = (void *) __get_free_pages(gfp, get_order(size)); | 98 | ret = (void *) __get_free_pages(gfp, get_order(size)); |
| @@ -122,6 +125,10 @@ void dma_free_coherent(struct device *dev, size_t size, void *vaddr, | |||
| 122 | dma_addr_t dma_handle) | 125 | dma_addr_t dma_handle) |
| 123 | { | 126 | { |
| 124 | unsigned long addr = (unsigned long) vaddr; | 127 | unsigned long addr = (unsigned long) vaddr; |
| 128 | int order = get_order(size); | ||
| 129 | |||
| 130 | if (dma_release_from_coherent(dev, order, vaddr)) | ||
| 131 | return; | ||
| 125 | 132 | ||
| 126 | plat_unmap_dma_mem(dev, dma_handle, size, DMA_BIDIRECTIONAL); | 133 | plat_unmap_dma_mem(dev, dma_handle, size, DMA_BIDIRECTIONAL); |
| 127 | 134 | ||
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c index 15aa1902a788..8d1f4f363049 100644 --- a/arch/mips/mm/init.c +++ b/arch/mips/mm/init.c | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | #include <linux/swap.h> | 27 | #include <linux/swap.h> |
| 28 | #include <linux/proc_fs.h> | 28 | #include <linux/proc_fs.h> |
| 29 | #include <linux/pfn.h> | 29 | #include <linux/pfn.h> |
| 30 | #include <linux/hardirq.h> | ||
| 30 | 31 | ||
| 31 | #include <asm/asm-offsets.h> | 32 | #include <asm/asm-offsets.h> |
| 32 | #include <asm/bootinfo.h> | 33 | #include <asm/bootinfo.h> |
| @@ -132,7 +133,10 @@ void *kmap_coherent(struct page *page, unsigned long addr) | |||
| 132 | inc_preempt_count(); | 133 | inc_preempt_count(); |
| 133 | idx = (addr >> PAGE_SHIFT) & (FIX_N_COLOURS - 1); | 134 | idx = (addr >> PAGE_SHIFT) & (FIX_N_COLOURS - 1); |
| 134 | #ifdef CONFIG_MIPS_MT_SMTC | 135 | #ifdef CONFIG_MIPS_MT_SMTC |
| 135 | idx += FIX_N_COLOURS * smp_processor_id(); | 136 | idx += FIX_N_COLOURS * smp_processor_id() + |
| 137 | (in_interrupt() ? (FIX_N_COLOURS * NR_CPUS) : 0); | ||
| 138 | #else | ||
| 139 | idx += in_interrupt() ? FIX_N_COLOURS : 0; | ||
| 136 | #endif | 140 | #endif |
| 137 | vaddr = __fix_to_virt(FIX_CMAP_END - idx); | 141 | vaddr = __fix_to_virt(FIX_CMAP_END - idx); |
| 138 | pte = mk_pte(page, PAGE_KERNEL); | 142 | pte = mk_pte(page, PAGE_KERNEL); |
diff --git a/arch/mips/mti-malta/malta-amon.c b/arch/mips/mti-malta/malta-amon.c index df9e526312a2..469d9b0cee6d 100644 --- a/arch/mips/mti-malta/malta-amon.c +++ b/arch/mips/mti-malta/malta-amon.c | |||
| @@ -70,11 +70,12 @@ void amon_cpu_start(int cpu, | |||
| 70 | launch->sp = sp; | 70 | launch->sp = sp; |
| 71 | launch->a0 = a0; | 71 | launch->a0 = a0; |
| 72 | 72 | ||
| 73 | /* Make sure target sees parameters before the go bit */ | 73 | smp_wmb(); /* Target must see parameters before go */ |
| 74 | smp_mb(); | ||
| 75 | |||
| 76 | launch->flags |= LAUNCH_FGO; | 74 | launch->flags |= LAUNCH_FGO; |
| 75 | smp_wmb(); /* Target must see go before we poll */ | ||
| 76 | |||
| 77 | while ((launch->flags & LAUNCH_FGONE) == 0) | 77 | while ((launch->flags & LAUNCH_FGONE) == 0) |
| 78 | ; | 78 | ; |
| 79 | smp_rmb(); /* Target will be updating flags soon */ | ||
| 79 | pr_debug("launch: cpu%d gone!\n", cpu); | 80 | pr_debug("launch: cpu%d gone!\n", cpu); |
| 80 | } | 81 | } |
diff --git a/arch/mips/mti-malta/malta-int.c b/arch/mips/mti-malta/malta-int.c index 3e0a9b35ba5c..4c3fca18a171 100644 --- a/arch/mips/mti-malta/malta-int.c +++ b/arch/mips/mti-malta/malta-int.c | |||
| @@ -87,7 +87,7 @@ static inline int mips_pcibios_iack(void) | |||
| 87 | dummy = BONITO_PCIMAP_CFG; | 87 | dummy = BONITO_PCIMAP_CFG; |
| 88 | iob(); /* sync */ | 88 | iob(); /* sync */ |
| 89 | 89 | ||
| 90 | irq = readl((u32 *)_pcictrl_bonito_pcicfg); | 90 | irq = __raw_readl((u32 *)_pcictrl_bonito_pcicfg); |
| 91 | iob(); /* sync */ | 91 | iob(); /* sync */ |
| 92 | irq &= 0xff; | 92 | irq &= 0xff; |
| 93 | BONITO_PCIMAP_CFG = 0; | 93 | BONITO_PCIMAP_CFG = 0; |
| @@ -379,38 +379,43 @@ static msc_irqmap_t __initdata msc_eicirqmap[] = { | |||
| 379 | 379 | ||
| 380 | static int __initdata msc_nr_eicirqs = ARRAY_SIZE(msc_eicirqmap); | 380 | static int __initdata msc_nr_eicirqs = ARRAY_SIZE(msc_eicirqmap); |
| 381 | 381 | ||
| 382 | #if defined(CONFIG_MIPS_MT_SMP) | ||
| 383 | /* | 382 | /* |
| 384 | * This GIC specific tabular array defines the association between External | 383 | * This GIC specific tabular array defines the association between External |
| 385 | * Interrupts and CPUs/Core Interrupts. The nature of the External | 384 | * Interrupts and CPUs/Core Interrupts. The nature of the External |
| 386 | * Interrupts is also defined here - polarity/trigger. | 385 | * Interrupts is also defined here - polarity/trigger. |
| 387 | */ | 386 | */ |
| 387 | |||
| 388 | #define GIC_CPU_NMI GIC_MAP_TO_NMI_MSK | ||
| 388 | static struct gic_intr_map gic_intr_map[GIC_NUM_INTRS] = { | 389 | static struct gic_intr_map gic_intr_map[GIC_NUM_INTRS] = { |
| 389 | { GIC_EXT_INTR(0), X, X, X, X, 0 }, | 390 | { X, X, X, X, 0 }, |
| 390 | { GIC_EXT_INTR(1), X, X, X, X, 0 }, | 391 | { X, X, X, X, 0 }, |
| 391 | { GIC_EXT_INTR(2), X, X, X, X, 0 }, | 392 | { X, X, X, X, 0 }, |
| 392 | { GIC_EXT_INTR(3), 0, GIC_CPU_INT0, GIC_POL_POS, GIC_TRIG_LEVEL, 0 }, | 393 | { 0, GIC_CPU_INT0, GIC_POL_POS, GIC_TRIG_LEVEL, GIC_FLAG_TRANSPARENT }, |
| 393 | { GIC_EXT_INTR(4), 0, GIC_CPU_INT1, GIC_POL_POS, GIC_TRIG_LEVEL, 0 }, | 394 | { 0, GIC_CPU_INT1, GIC_POL_POS, GIC_TRIG_LEVEL, GIC_FLAG_TRANSPARENT }, |
| 394 | { GIC_EXT_INTR(5), 0, GIC_CPU_INT2, GIC_POL_POS, GIC_TRIG_LEVEL, 0 }, | 395 | { 0, GIC_CPU_INT2, GIC_POL_POS, GIC_TRIG_LEVEL, GIC_FLAG_TRANSPARENT }, |
| 395 | { GIC_EXT_INTR(6), 0, GIC_CPU_INT3, GIC_POL_POS, GIC_TRIG_LEVEL, 0 }, | 396 | { 0, GIC_CPU_INT3, GIC_POL_POS, GIC_TRIG_LEVEL, GIC_FLAG_TRANSPARENT }, |
| 396 | { GIC_EXT_INTR(7), 0, GIC_CPU_INT4, GIC_POL_POS, GIC_TRIG_LEVEL, 0 }, | 397 | { 0, GIC_CPU_INT4, GIC_POL_POS, GIC_TRIG_LEVEL, GIC_FLAG_TRANSPARENT }, |
| 397 | { GIC_EXT_INTR(8), 0, GIC_CPU_INT3, GIC_POL_POS, GIC_TRIG_LEVEL, 0 }, | 398 | { 0, GIC_CPU_INT3, GIC_POL_POS, GIC_TRIG_LEVEL, GIC_FLAG_TRANSPARENT }, |
| 398 | { GIC_EXT_INTR(9), 0, GIC_CPU_INT3, GIC_POL_POS, GIC_TRIG_LEVEL, 0 }, | 399 | { 0, GIC_CPU_INT3, GIC_POL_POS, GIC_TRIG_LEVEL, GIC_FLAG_TRANSPARENT }, |
| 399 | { GIC_EXT_INTR(10), X, X, X, X, 0 }, | 400 | { X, X, X, X, 0 }, |
| 400 | { GIC_EXT_INTR(11), X, X, X, X, 0 }, | 401 | { X, X, X, X, 0 }, |
| 401 | { GIC_EXT_INTR(12), 0, GIC_CPU_INT3, GIC_POL_POS, GIC_TRIG_LEVEL, 0 }, | 402 | { 0, GIC_CPU_INT3, GIC_POL_POS, GIC_TRIG_LEVEL, GIC_FLAG_TRANSPARENT }, |
| 402 | { GIC_EXT_INTR(13), 0, GIC_MAP_TO_NMI_MSK, GIC_POL_POS, GIC_TRIG_LEVEL, 0 }, | 403 | { 0, GIC_CPU_NMI, GIC_POL_POS, GIC_TRIG_LEVEL, GIC_FLAG_TRANSPARENT }, |
| 403 | { GIC_EXT_INTR(14), 0, GIC_MAP_TO_NMI_MSK, GIC_POL_POS, GIC_TRIG_LEVEL, 0 }, | 404 | { 0, GIC_CPU_NMI, GIC_POL_POS, GIC_TRIG_LEVEL, GIC_FLAG_TRANSPARENT }, |
| 404 | { GIC_EXT_INTR(15), X, X, X, X, 0 }, | 405 | { X, X, X, X, 0 }, |
| 405 | /* This is the end of the general interrupts now we do IPI ones */ | 406 | /* The remainder of this table is initialised by fill_ipi_map */ |
| 406 | }; | 407 | }; |
| 407 | #endif | ||
| 408 | 408 | ||
| 409 | /* | 409 | /* |
| 410 | * GCMP needs to be detected before any SMP initialisation | 410 | * GCMP needs to be detected before any SMP initialisation |
| 411 | */ | 411 | */ |
| 412 | int __init gcmp_probe(unsigned long addr, unsigned long size) | 412 | int __init gcmp_probe(unsigned long addr, unsigned long size) |
| 413 | { | 413 | { |
| 414 | if (mips_revision_sconid != MIPS_REVISION_SCON_ROCIT) { | ||
| 415 | gcmp_present = 0; | ||
| 416 | return gcmp_present; | ||
| 417 | } | ||
| 418 | |||
| 414 | if (gcmp_present >= 0) | 419 | if (gcmp_present >= 0) |
| 415 | return gcmp_present; | 420 | return gcmp_present; |
| 416 | 421 | ||
| @@ -419,20 +424,35 @@ int __init gcmp_probe(unsigned long addr, unsigned long size) | |||
| 419 | gcmp_present = (GCMPGCB(GCMPB) & GCMP_GCB_GCMPB_GCMPBASE_MSK) == GCMP_BASE_ADDR; | 424 | gcmp_present = (GCMPGCB(GCMPB) & GCMP_GCB_GCMPB_GCMPBASE_MSK) == GCMP_BASE_ADDR; |
| 420 | 425 | ||
| 421 | if (gcmp_present) | 426 | if (gcmp_present) |
| 422 | printk(KERN_DEBUG "GCMP present\n"); | 427 | pr_debug("GCMP present\n"); |
| 423 | return gcmp_present; | 428 | return gcmp_present; |
| 424 | } | 429 | } |
| 425 | 430 | ||
| 431 | /* Return the number of IOCU's present */ | ||
| 432 | int __init gcmp_niocu(void) | ||
| 433 | { | ||
| 434 | return gcmp_present ? | ||
| 435 | (GCMPGCB(GC) & GCMP_GCB_GC_NUMIOCU_MSK) >> GCMP_GCB_GC_NUMIOCU_SHF : | ||
| 436 | 0; | ||
| 437 | } | ||
| 438 | |||
| 439 | /* Set GCMP region attributes */ | ||
| 440 | void __init gcmp_setregion(int region, unsigned long base, | ||
| 441 | unsigned long mask, int type) | ||
| 442 | { | ||
| 443 | GCMPGCBn(CMxBASE, region) = base; | ||
| 444 | GCMPGCBn(CMxMASK, region) = mask | type; | ||
| 445 | } | ||
| 446 | |||
| 426 | #if defined(CONFIG_MIPS_MT_SMP) | 447 | #if defined(CONFIG_MIPS_MT_SMP) |
| 427 | static void __init fill_ipi_map1(int baseintr, int cpu, int cpupin) | 448 | static void __init fill_ipi_map1(int baseintr, int cpu, int cpupin) |
| 428 | { | 449 | { |
| 429 | int intr = baseintr + cpu; | 450 | int intr = baseintr + cpu; |
| 430 | gic_intr_map[intr].intrnum = GIC_EXT_INTR(intr); | ||
| 431 | gic_intr_map[intr].cpunum = cpu; | 451 | gic_intr_map[intr].cpunum = cpu; |
| 432 | gic_intr_map[intr].pin = cpupin; | 452 | gic_intr_map[intr].pin = cpupin; |
| 433 | gic_intr_map[intr].polarity = GIC_POL_POS; | 453 | gic_intr_map[intr].polarity = GIC_POL_POS; |
| 434 | gic_intr_map[intr].trigtype = GIC_TRIG_EDGE; | 454 | gic_intr_map[intr].trigtype = GIC_TRIG_EDGE; |
| 435 | gic_intr_map[intr].ipiflag = 1; | 455 | gic_intr_map[intr].flags = GIC_FLAG_IPI; |
| 436 | ipi_map[cpu] |= (1 << (cpupin + 2)); | 456 | ipi_map[cpu] |= (1 << (cpupin + 2)); |
| 437 | } | 457 | } |
| 438 | 458 | ||
| @@ -447,6 +467,12 @@ static void __init fill_ipi_map(void) | |||
| 447 | } | 467 | } |
| 448 | #endif | 468 | #endif |
| 449 | 469 | ||
| 470 | void __init arch_init_ipiirq(int irq, struct irqaction *action) | ||
| 471 | { | ||
| 472 | setup_irq(irq, action); | ||
| 473 | set_irq_handler(irq, handle_percpu_irq); | ||
| 474 | } | ||
| 475 | |||
| 450 | void __init arch_init_irq(void) | 476 | void __init arch_init_irq(void) |
| 451 | { | 477 | { |
| 452 | init_i8259_irqs(); | 478 | init_i8259_irqs(); |
| @@ -458,12 +484,17 @@ void __init arch_init_irq(void) | |||
| 458 | GCMPGCB(GICBA) = GIC_BASE_ADDR | GCMP_GCB_GICBA_EN_MSK; | 484 | GCMPGCB(GICBA) = GIC_BASE_ADDR | GCMP_GCB_GICBA_EN_MSK; |
| 459 | gic_present = 1; | 485 | gic_present = 1; |
| 460 | } else { | 486 | } else { |
| 461 | _msc01_biu_base = (unsigned long) ioremap_nocache(MSC01_BIU_REG_BASE, MSC01_BIU_ADDRSPACE_SZ); | 487 | if (mips_revision_sconid == MIPS_REVISION_SCON_ROCIT) { |
| 462 | gic_present = (REG(_msc01_biu_base, MSC01_SC_CFG) & | 488 | _msc01_biu_base = (unsigned long) |
| 463 | MSC01_SC_CFG_GICPRES_MSK) >> MSC01_SC_CFG_GICPRES_SHF; | 489 | ioremap_nocache(MSC01_BIU_REG_BASE, |
| 490 | MSC01_BIU_ADDRSPACE_SZ); | ||
| 491 | gic_present = (REG(_msc01_biu_base, MSC01_SC_CFG) & | ||
| 492 | MSC01_SC_CFG_GICPRES_MSK) >> | ||
| 493 | MSC01_SC_CFG_GICPRES_SHF; | ||
| 494 | } | ||
| 464 | } | 495 | } |
| 465 | if (gic_present) | 496 | if (gic_present) |
| 466 | printk(KERN_DEBUG "GIC present\n"); | 497 | pr_debug("GIC present\n"); |
| 467 | 498 | ||
| 468 | switch (mips_revision_sconid) { | 499 | switch (mips_revision_sconid) { |
| 469 | case MIPS_REVISION_SCON_SOCIT: | 500 | case MIPS_REVISION_SCON_SOCIT: |
| @@ -526,16 +557,16 @@ void __init arch_init_irq(void) | |||
| 526 | &corehi_irqaction); | 557 | &corehi_irqaction); |
| 527 | } | 558 | } |
| 528 | 559 | ||
| 529 | #if defined(CONFIG_MIPS_MT_SMP) | ||
| 530 | if (gic_present) { | 560 | if (gic_present) { |
| 531 | /* FIXME */ | 561 | /* FIXME */ |
| 532 | int i; | 562 | int i; |
| 533 | 563 | #if defined(CONFIG_MIPS_MT_SMP) | |
| 534 | gic_call_int_base = GIC_NUM_INTRS - NR_CPUS; | 564 | gic_call_int_base = GIC_NUM_INTRS - NR_CPUS; |
| 535 | gic_resched_int_base = gic_call_int_base - NR_CPUS; | 565 | gic_resched_int_base = gic_call_int_base - NR_CPUS; |
| 536 | |||
| 537 | fill_ipi_map(); | 566 | fill_ipi_map(); |
| 538 | gic_init(GIC_BASE_ADDR, GIC_ADDRSPACE_SZ, gic_intr_map, ARRAY_SIZE(gic_intr_map), MIPS_GIC_IRQ_BASE); | 567 | #endif |
| 568 | gic_init(GIC_BASE_ADDR, GIC_ADDRSPACE_SZ, gic_intr_map, | ||
| 569 | ARRAY_SIZE(gic_intr_map), MIPS_GIC_IRQ_BASE); | ||
| 539 | if (!gcmp_present) { | 570 | if (!gcmp_present) { |
| 540 | /* Enable the GIC */ | 571 | /* Enable the GIC */ |
| 541 | i = REG(_msc01_biu_base, MSC01_SC_CFG); | 572 | i = REG(_msc01_biu_base, MSC01_SC_CFG); |
| @@ -543,7 +574,7 @@ void __init arch_init_irq(void) | |||
| 543 | (i | (0x1 << MSC01_SC_CFG_GICENA_SHF)); | 574 | (i | (0x1 << MSC01_SC_CFG_GICENA_SHF)); |
| 544 | pr_debug("GIC Enabled\n"); | 575 | pr_debug("GIC Enabled\n"); |
| 545 | } | 576 | } |
| 546 | 577 | #if defined(CONFIG_MIPS_MT_SMP) | |
| 547 | /* set up ipi interrupts */ | 578 | /* set up ipi interrupts */ |
| 548 | if (cpu_has_vint) { | 579 | if (cpu_has_vint) { |
| 549 | set_vi_handler(MIPSCPU_INT_IPI0, malta_ipi_irqdispatch); | 580 | set_vi_handler(MIPSCPU_INT_IPI0, malta_ipi_irqdispatch); |
| @@ -556,16 +587,14 @@ void __init arch_init_irq(void) | |||
| 556 | write_c0_status(0x1100dc00); | 587 | write_c0_status(0x1100dc00); |
| 557 | printk("CPU%d: status register frc %08x\n", smp_processor_id(), read_c0_status()); | 588 | printk("CPU%d: status register frc %08x\n", smp_processor_id(), read_c0_status()); |
| 558 | for (i = 0; i < NR_CPUS; i++) { | 589 | for (i = 0; i < NR_CPUS; i++) { |
| 559 | setup_irq(MIPS_GIC_IRQ_BASE + | 590 | arch_init_ipiirq(MIPS_GIC_IRQ_BASE + |
| 560 | GIC_RESCHED_INT(i), &irq_resched); | 591 | GIC_RESCHED_INT(i), &irq_resched); |
| 561 | setup_irq(MIPS_GIC_IRQ_BASE + | 592 | arch_init_ipiirq(MIPS_GIC_IRQ_BASE + |
| 562 | GIC_CALL_INT(i), &irq_call); | 593 | GIC_CALL_INT(i), &irq_call); |
| 563 | set_irq_handler(MIPS_GIC_IRQ_BASE + | ||
| 564 | GIC_RESCHED_INT(i), handle_percpu_irq); | ||
| 565 | set_irq_handler(MIPS_GIC_IRQ_BASE + | ||
| 566 | GIC_CALL_INT(i), handle_percpu_irq); | ||
| 567 | } | 594 | } |
| 595 | #endif | ||
| 568 | } else { | 596 | } else { |
| 597 | #if defined(CONFIG_MIPS_MT_SMP) | ||
| 569 | /* set up ipi interrupts */ | 598 | /* set up ipi interrupts */ |
| 570 | if (cpu_has_veic) { | 599 | if (cpu_has_veic) { |
| 571 | set_vi_handler (MSC01E_INT_SW0, ipi_resched_dispatch); | 600 | set_vi_handler (MSC01E_INT_SW0, ipi_resched_dispatch); |
| @@ -580,14 +609,10 @@ void __init arch_init_irq(void) | |||
| 580 | cpu_ipi_resched_irq = MIPS_CPU_IRQ_BASE + MIPS_CPU_IPI_RESCHED_IRQ; | 609 | cpu_ipi_resched_irq = MIPS_CPU_IRQ_BASE + MIPS_CPU_IPI_RESCHED_IRQ; |
| 581 | cpu_ipi_call_irq = MIPS_CPU_IRQ_BASE + MIPS_CPU_IPI_CALL_IRQ; | 610 | cpu_ipi_call_irq = MIPS_CPU_IRQ_BASE + MIPS_CPU_IPI_CALL_IRQ; |
| 582 | } | 611 | } |
| 583 | 612 | arch_init_ipiirq(cpu_ipi_resched_irq, &irq_resched); | |
| 584 | setup_irq(cpu_ipi_resched_irq, &irq_resched); | 613 | arch_init_ipiirq(cpu_ipi_call_irq, &irq_call); |
| 585 | setup_irq(cpu_ipi_call_irq, &irq_call); | ||
| 586 | |||
| 587 | set_irq_handler(cpu_ipi_resched_irq, handle_percpu_irq); | ||
| 588 | set_irq_handler(cpu_ipi_call_irq, handle_percpu_irq); | ||
| 589 | } | ||
| 590 | #endif | 614 | #endif |
| 615 | } | ||
| 591 | } | 616 | } |
| 592 | 617 | ||
| 593 | void malta_be_init(void) | 618 | void malta_be_init(void) |
diff --git a/arch/mips/mti-malta/malta-memory.c b/arch/mips/mti-malta/malta-memory.c index 61888ff72c87..9035c64bc5ed 100644 --- a/arch/mips/mti-malta/malta-memory.c +++ b/arch/mips/mti-malta/malta-memory.c | |||
| @@ -54,7 +54,8 @@ static struct prom_pmemblock * __init prom_getmdesc(void) | |||
| 54 | { | 54 | { |
| 55 | char *memsize_str; | 55 | char *memsize_str; |
| 56 | unsigned int memsize; | 56 | unsigned int memsize; |
| 57 | char cmdline[CL_SIZE], *ptr; | 57 | char *ptr; |
| 58 | static char cmdline[CL_SIZE] __initdata; | ||
| 58 | 59 | ||
| 59 | /* otherwise look in the environment */ | 60 | /* otherwise look in the environment */ |
| 60 | memsize_str = prom_getenv("memsize"); | 61 | memsize_str = prom_getenv("memsize"); |
diff --git a/arch/mips/mti-malta/malta-pci.c b/arch/mips/mti-malta/malta-pci.c index b9743190609a..2fbfa1a8c3a9 100644 --- a/arch/mips/mti-malta/malta-pci.c +++ b/arch/mips/mti-malta/malta-pci.c | |||
| @@ -27,7 +27,7 @@ | |||
| 27 | #include <linux/init.h> | 27 | #include <linux/init.h> |
| 28 | 28 | ||
| 29 | #include <asm/gt64120.h> | 29 | #include <asm/gt64120.h> |
| 30 | 30 | #include <asm/gcmpregs.h> | |
| 31 | #include <asm/mips-boards/generic.h> | 31 | #include <asm/mips-boards/generic.h> |
| 32 | #include <asm/mips-boards/bonito64.h> | 32 | #include <asm/mips-boards/bonito64.h> |
| 33 | #include <asm/mips-boards/msc01_pci.h> | 33 | #include <asm/mips-boards/msc01_pci.h> |
| @@ -201,7 +201,11 @@ void __init mips_pcibios_init(void) | |||
| 201 | msc_mem_resource.start = start & mask; | 201 | msc_mem_resource.start = start & mask; |
| 202 | msc_mem_resource.end = (start & mask) | ~mask; | 202 | msc_mem_resource.end = (start & mask) | ~mask; |
| 203 | msc_controller.mem_offset = (start & mask) - (map & mask); | 203 | msc_controller.mem_offset = (start & mask) - (map & mask); |
| 204 | 204 | #ifdef CONFIG_MIPS_CMP | |
| 205 | if (gcmp_niocu()) | ||
| 206 | gcmp_setregion(0, start, mask, | ||
| 207 | GCMP_GCB_GCMPB_CMDEFTGT_IOCU1); | ||
| 208 | #endif | ||
| 205 | MSC_READ(MSC01_PCI_SC2PIOBASL, start); | 209 | MSC_READ(MSC01_PCI_SC2PIOBASL, start); |
| 206 | MSC_READ(MSC01_PCI_SC2PIOMSKL, mask); | 210 | MSC_READ(MSC01_PCI_SC2PIOMSKL, mask); |
| 207 | MSC_READ(MSC01_PCI_SC2PIOMAPL, map); | 211 | MSC_READ(MSC01_PCI_SC2PIOMAPL, map); |
| @@ -209,7 +213,11 @@ void __init mips_pcibios_init(void) | |||
| 209 | msc_io_resource.end = (map & mask) | ~mask; | 213 | msc_io_resource.end = (map & mask) | ~mask; |
| 210 | msc_controller.io_offset = 0; | 214 | msc_controller.io_offset = 0; |
| 211 | ioport_resource.end = ~mask; | 215 | ioport_resource.end = ~mask; |
| 212 | 216 | #ifdef CONFIG_MIPS_CMP | |
| 217 | if (gcmp_niocu()) | ||
| 218 | gcmp_setregion(1, start, mask, | ||
| 219 | GCMP_GCB_GCMPB_CMDEFTGT_IOCU1); | ||
| 220 | #endif | ||
| 213 | /* If ranges overlap I/O takes precedence. */ | 221 | /* If ranges overlap I/O takes precedence. */ |
| 214 | start = start & mask; | 222 | start = start & mask; |
| 215 | end = start | ~mask; | 223 | end = start | ~mask; |
| @@ -241,3 +249,16 @@ void __init mips_pcibios_init(void) | |||
| 241 | 249 | ||
| 242 | register_pci_controller(controller); | 250 | register_pci_controller(controller); |
| 243 | } | 251 | } |
| 252 | |||
| 253 | /* Enable PCI 2.1 compatibility in PIIX4 */ | ||
| 254 | static void __init quirk_dlcsetup(struct pci_dev *dev) | ||
| 255 | { | ||
| 256 | u8 odlc, ndlc; | ||
| 257 | (void) pci_read_config_byte(dev, 0x82, &odlc); | ||
| 258 | /* Enable passive releases and delayed transaction */ | ||
| 259 | ndlc = odlc | 7; | ||
| 260 | (void) pci_write_config_byte(dev, 0x82, ndlc); | ||
| 261 | } | ||
| 262 | |||
| 263 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_0, | ||
| 264 | quirk_dlcsetup); | ||
diff --git a/arch/mips/nxp/pnx8550/common/int.c b/arch/mips/nxp/pnx8550/common/int.c index f080f114a1bf..7aca7d5375e5 100644 --- a/arch/mips/nxp/pnx8550/common/int.c +++ b/arch/mips/nxp/pnx8550/common/int.c | |||
| @@ -172,7 +172,7 @@ static struct irqaction gic_action = { | |||
| 172 | 172 | ||
| 173 | static struct irqaction timer_action = { | 173 | static struct irqaction timer_action = { |
| 174 | .handler = no_action, | 174 | .handler = no_action, |
| 175 | .flags = IRQF_DISABLED, | 175 | .flags = IRQF_DISABLED | IRQF_TIMER, |
| 176 | .name = "Timer", | 176 | .name = "Timer", |
| 177 | }; | 177 | }; |
| 178 | 178 | ||
diff --git a/arch/mips/nxp/pnx8550/common/time.c b/arch/mips/nxp/pnx8550/common/time.c index 18b192784877..8836c6203df0 100644 --- a/arch/mips/nxp/pnx8550/common/time.c +++ b/arch/mips/nxp/pnx8550/common/time.c | |||
| @@ -59,7 +59,7 @@ static irqreturn_t pnx8xxx_timer_interrupt(int irq, void *dev_id) | |||
| 59 | 59 | ||
| 60 | static struct irqaction pnx8xxx_timer_irq = { | 60 | static struct irqaction pnx8xxx_timer_irq = { |
| 61 | .handler = pnx8xxx_timer_interrupt, | 61 | .handler = pnx8xxx_timer_interrupt, |
| 62 | .flags = IRQF_DISABLED | IRQF_PERCPU, | 62 | .flags = IRQF_DISABLED | IRQF_PERCPU | IRQF_TIMER, |
| 63 | .name = "pnx8xxx_timer", | 63 | .name = "pnx8xxx_timer", |
| 64 | }; | 64 | }; |
| 65 | 65 | ||
| @@ -72,7 +72,7 @@ static irqreturn_t monotonic_interrupt(int irq, void *dev_id) | |||
| 72 | 72 | ||
| 73 | static struct irqaction monotonic_irqaction = { | 73 | static struct irqaction monotonic_irqaction = { |
| 74 | .handler = monotonic_interrupt, | 74 | .handler = monotonic_interrupt, |
| 75 | .flags = IRQF_DISABLED, | 75 | .flags = IRQF_DISABLED | IRQF_TIMER, |
| 76 | .name = "Monotonic timer", | 76 | .name = "Monotonic timer", |
| 77 | }; | 77 | }; |
| 78 | 78 | ||
diff --git a/arch/mips/oprofile/op_model_loongson2.c b/arch/mips/oprofile/op_model_loongson2.c index deed1d5d4982..575cd1473475 100644 --- a/arch/mips/oprofile/op_model_loongson2.c +++ b/arch/mips/oprofile/op_model_loongson2.c | |||
| @@ -22,7 +22,7 @@ | |||
| 22 | * otherwise, the oprofile tool will not recognize this and complain about | 22 | * otherwise, the oprofile tool will not recognize this and complain about |
| 23 | * "cpu_type 'unset' is not valid". | 23 | * "cpu_type 'unset' is not valid". |
| 24 | */ | 24 | */ |
| 25 | #define LOONGSON2_CPU_TYPE "mips/godson2" | 25 | #define LOONGSON2_CPU_TYPE "mips/loongson2" |
| 26 | 26 | ||
| 27 | #define LOONGSON2_COUNTER1_EVENT(event) ((event & 0x0f) << 5) | 27 | #define LOONGSON2_COUNTER1_EVENT(event) ((event & 0x0f) << 5) |
| 28 | #define LOONGSON2_COUNTER2_EVENT(event) ((event & 0x0f) << 9) | 28 | #define LOONGSON2_COUNTER2_EVENT(event) ((event & 0x0f) << 9) |
diff --git a/arch/mips/rb532/devices.c b/arch/mips/rb532/devices.c index 9f40e1ff9b4f..041fc1afc3f4 100644 --- a/arch/mips/rb532/devices.c +++ b/arch/mips/rb532/devices.c | |||
| @@ -110,7 +110,6 @@ static struct korina_device korina_dev0_data = { | |||
| 110 | static struct platform_device korina_dev0 = { | 110 | static struct platform_device korina_dev0 = { |
| 111 | .id = -1, | 111 | .id = -1, |
| 112 | .name = "korina", | 112 | .name = "korina", |
| 113 | .dev.driver_data = &korina_dev0_data, | ||
| 114 | .resource = korina_dev0_res, | 113 | .resource = korina_dev0_res, |
| 115 | .num_resources = ARRAY_SIZE(korina_dev0_res), | 114 | .num_resources = ARRAY_SIZE(korina_dev0_res), |
| 116 | }; | 115 | }; |
| @@ -332,6 +331,8 @@ static int __init plat_setup_devices(void) | |||
| 332 | /* set the uart clock to the current cpu frequency */ | 331 | /* set the uart clock to the current cpu frequency */ |
| 333 | rb532_uart_res[0].uartclk = idt_cpu_freq; | 332 | rb532_uart_res[0].uartclk = idt_cpu_freq; |
| 334 | 333 | ||
| 334 | dev_set_drvdata(&korina_dev0.dev, &korina_dev0_data); | ||
| 335 | |||
| 335 | return platform_add_devices(rb532_devs, ARRAY_SIZE(rb532_devs)); | 336 | return platform_add_devices(rb532_devs, ARRAY_SIZE(rb532_devs)); |
| 336 | } | 337 | } |
| 337 | 338 | ||
diff --git a/arch/mips/rb532/prom.c b/arch/mips/rb532/prom.c index 46ca24dbcc2d..ad5bd1097974 100644 --- a/arch/mips/rb532/prom.c +++ b/arch/mips/rb532/prom.c | |||
| @@ -69,7 +69,7 @@ static inline unsigned long tag2ul(char *arg, const char *tag) | |||
| 69 | 69 | ||
| 70 | void __init prom_setup_cmdline(void) | 70 | void __init prom_setup_cmdline(void) |
| 71 | { | 71 | { |
| 72 | char cmd_line[CL_SIZE]; | 72 | static char cmd_line[CL_SIZE] __initdata; |
| 73 | char *cp, *board; | 73 | char *cp, *board; |
| 74 | int prom_argc; | 74 | int prom_argc; |
| 75 | char **prom_argv, **prom_envp; | 75 | char **prom_argv, **prom_envp; |
diff --git a/arch/mips/sgi-ip27/ip27-timer.c b/arch/mips/sgi-ip27/ip27-timer.c index 6d0e59ffba2e..d6802d6d1f82 100644 --- a/arch/mips/sgi-ip27/ip27-timer.c +++ b/arch/mips/sgi-ip27/ip27-timer.c | |||
| @@ -105,7 +105,7 @@ static irqreturn_t hub_rt_counter_handler(int irq, void *dev_id) | |||
| 105 | 105 | ||
| 106 | struct irqaction hub_rt_irqaction = { | 106 | struct irqaction hub_rt_irqaction = { |
| 107 | .handler = hub_rt_counter_handler, | 107 | .handler = hub_rt_counter_handler, |
| 108 | .flags = IRQF_DISABLED | IRQF_PERCPU, | 108 | .flags = IRQF_DISABLED | IRQF_PERCPU | IRQF_TIMER, |
| 109 | .name = "hub-rt", | 109 | .name = "hub-rt", |
| 110 | }; | 110 | }; |
| 111 | 111 | ||
diff --git a/arch/mips/sni/time.c b/arch/mips/sni/time.c index 62df6a598e0a..f3b60e671207 100644 --- a/arch/mips/sni/time.c +++ b/arch/mips/sni/time.c | |||
| @@ -67,7 +67,7 @@ static irqreturn_t a20r_interrupt(int irq, void *dev_id) | |||
| 67 | 67 | ||
| 68 | static struct irqaction a20r_irqaction = { | 68 | static struct irqaction a20r_irqaction = { |
| 69 | .handler = a20r_interrupt, | 69 | .handler = a20r_interrupt, |
| 70 | .flags = IRQF_DISABLED | IRQF_PERCPU, | 70 | .flags = IRQF_DISABLED | IRQF_PERCPU | IRQF_TIMER, |
| 71 | .name = "a20r-timer", | 71 | .name = "a20r-timer", |
| 72 | }; | 72 | }; |
| 73 | 73 | ||
diff --git a/arch/mips/txx9/generic/setup.c b/arch/mips/txx9/generic/setup.c index c860810722c0..d66802edebb2 100644 --- a/arch/mips/txx9/generic/setup.c +++ b/arch/mips/txx9/generic/setup.c | |||
| @@ -85,7 +85,7 @@ int txx9_ccfg_toeon __initdata = 1; | |||
| 85 | struct clk *clk_get(struct device *dev, const char *id) | 85 | struct clk *clk_get(struct device *dev, const char *id) |
| 86 | { | 86 | { |
| 87 | if (!strcmp(id, "spi-baseclk")) | 87 | if (!strcmp(id, "spi-baseclk")) |
| 88 | return (struct clk *)((unsigned long)txx9_gbus_clock / 2 / 4); | 88 | return (struct clk *)((unsigned long)txx9_gbus_clock / 2 / 2); |
| 89 | if (!strcmp(id, "imbus_clk")) | 89 | if (!strcmp(id, "imbus_clk")) |
| 90 | return (struct clk *)((unsigned long)txx9_gbus_clock / 2); | 90 | return (struct clk *)((unsigned long)txx9_gbus_clock / 2); |
| 91 | return ERR_PTR(-ENOENT); | 91 | return ERR_PTR(-ENOENT); |
| @@ -160,7 +160,7 @@ static void __init prom_init_cmdline(void) | |||
| 160 | int argc; | 160 | int argc; |
| 161 | int *argv32; | 161 | int *argv32; |
| 162 | int i; /* Always ignore the "-c" at argv[0] */ | 162 | int i; /* Always ignore the "-c" at argv[0] */ |
| 163 | char builtin[CL_SIZE]; | 163 | static char builtin[CL_SIZE] __initdata; |
| 164 | 164 | ||
| 165 | if (fw_arg0 >= CKSEG0 || fw_arg1 < CKSEG0) { | 165 | if (fw_arg0 >= CKSEG0 || fw_arg1 < CKSEG0) { |
| 166 | /* | 166 | /* |
| @@ -315,7 +315,7 @@ static inline void txx9_cache_fixup(void) | |||
| 315 | 315 | ||
| 316 | static void __init preprocess_cmdline(void) | 316 | static void __init preprocess_cmdline(void) |
| 317 | { | 317 | { |
| 318 | char cmdline[CL_SIZE]; | 318 | static char cmdline[CL_SIZE] __initdata; |
| 319 | char *s; | 319 | char *s; |
| 320 | 320 | ||
| 321 | strcpy(cmdline, arcs_cmdline); | 321 | strcpy(cmdline, arcs_cmdline); |
| @@ -817,7 +817,8 @@ void __init txx9_iocled_init(unsigned long baseaddr, | |||
| 817 | out_pdev: | 817 | out_pdev: |
| 818 | platform_device_put(pdev); | 818 | platform_device_put(pdev); |
| 819 | out_gpio: | 819 | out_gpio: |
| 820 | gpio_remove(&iocled->chip); | 820 | if (gpiochip_remove(&iocled->chip)) |
| 821 | return; | ||
| 821 | out_unmap: | 822 | out_unmap: |
| 822 | iounmap(iocled->mmioaddr); | 823 | iounmap(iocled->mmioaddr); |
| 823 | out_free: | 824 | out_free: |
diff --git a/arch/mips/txx9/generic/smsc_fdc37m81x.c b/arch/mips/txx9/generic/smsc_fdc37m81x.c index a2b2d62d88e3..8ebc3848f3ac 100644 --- a/arch/mips/txx9/generic/smsc_fdc37m81x.c +++ b/arch/mips/txx9/generic/smsc_fdc37m81x.c | |||
| @@ -117,7 +117,7 @@ unsigned long __init smsc_fdc37m81x_init(unsigned long port) | |||
| 117 | if (chip_id == SMSC_FDC37M81X_CHIP_ID) | 117 | if (chip_id == SMSC_FDC37M81X_CHIP_ID) |
| 118 | smsc_fdc37m81x_config_end(); | 118 | smsc_fdc37m81x_config_end(); |
| 119 | else { | 119 | else { |
| 120 | printk(KERN_WARNING "%s: unknow chip id 0x%02x\n", __func__, | 120 | printk(KERN_WARNING "%s: unknown chip id 0x%02x\n", __func__, |
| 121 | chip_id); | 121 | chip_id); |
| 122 | g_smsc_fdc37m81x_base = 0; | 122 | g_smsc_fdc37m81x_base = 0; |
| 123 | } | 123 | } |
