diff options
author | Kukjin Kim <kgene.kim@samsung.com> | 2014-05-30 13:36:49 -0400 |
---|---|---|
committer | Kukjin Kim <kgene.kim@samsung.com> | 2014-05-30 13:36:49 -0400 |
commit | fced6dee29f6fb143fe16ea90331176ff77e6120 (patch) | |
tree | 5b6e57e7a757adc2a6518ce291a4d2914397b917 /arch | |
parent | bfed1074f213051e94648bfad0d0611a16d81366 (diff) | |
parent | be1f7c8d7e2bc8b8c76846aa6f276e8d2ef8975a (diff) |
Merge branch 'v3.16-next/cleanup-samsung' into v3.16-next/platform-exynos
Diffstat (limited to 'arch')
217 files changed, 1765 insertions, 1419 deletions
diff --git a/arch/arc/include/asm/barrier.h b/arch/arc/include/asm/barrier.h deleted file mode 100644 index c32245c3d1e9..000000000000 --- a/arch/arc/include/asm/barrier.h +++ /dev/null | |||
@@ -1,37 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com) | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | |||
9 | #ifndef __ASM_BARRIER_H | ||
10 | #define __ASM_BARRIER_H | ||
11 | |||
12 | #ifndef __ASSEMBLY__ | ||
13 | |||
14 | /* TODO-vineetg: Need to see what this does, don't we need sync anywhere */ | ||
15 | #define mb() __asm__ __volatile__ ("" : : : "memory") | ||
16 | #define rmb() mb() | ||
17 | #define wmb() mb() | ||
18 | #define set_mb(var, value) do { var = value; mb(); } while (0) | ||
19 | #define set_wmb(var, value) do { var = value; wmb(); } while (0) | ||
20 | #define read_barrier_depends() mb() | ||
21 | |||
22 | /* TODO-vineetg verify the correctness of macros here */ | ||
23 | #ifdef CONFIG_SMP | ||
24 | #define smp_mb() mb() | ||
25 | #define smp_rmb() rmb() | ||
26 | #define smp_wmb() wmb() | ||
27 | #else | ||
28 | #define smp_mb() barrier() | ||
29 | #define smp_rmb() barrier() | ||
30 | #define smp_wmb() barrier() | ||
31 | #endif | ||
32 | |||
33 | #define smp_read_barrier_depends() do { } while (0) | ||
34 | |||
35 | #endif | ||
36 | |||
37 | #endif | ||
diff --git a/arch/arc/kernel/entry.S b/arch/arc/kernel/entry.S index 819dd5f7eb05..29b82adbf0b4 100644 --- a/arch/arc/kernel/entry.S +++ b/arch/arc/kernel/entry.S | |||
@@ -614,11 +614,13 @@ resume_user_mode_begin: | |||
614 | 614 | ||
615 | resume_kernel_mode: | 615 | resume_kernel_mode: |
616 | 616 | ||
617 | #ifdef CONFIG_PREEMPT | 617 | ; Disable Interrupts from this point on |
618 | 618 | ; CONFIG_PREEMPT: This is a must for preempt_schedule_irq() | |
619 | ; This is a must for preempt_schedule_irq() | 619 | ; !CONFIG_PREEMPT: To ensure restore_regs is intr safe |
620 | IRQ_DISABLE r9 | 620 | IRQ_DISABLE r9 |
621 | 621 | ||
622 | #ifdef CONFIG_PREEMPT | ||
623 | |||
622 | ; Can't preempt if preemption disabled | 624 | ; Can't preempt if preemption disabled |
623 | GET_CURR_THR_INFO_FROM_SP r10 | 625 | GET_CURR_THR_INFO_FROM_SP r10 |
624 | ld r8, [r10, THREAD_INFO_PREEMPT_COUNT] | 626 | ld r8, [r10, THREAD_INFO_PREEMPT_COUNT] |
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 0edb868d6c0b..044e32be02b5 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -30,9 +30,9 @@ config ARM | |||
30 | select HAVE_ARCH_SECCOMP_FILTER if (AEABI && !OABI_COMPAT) | 30 | select HAVE_ARCH_SECCOMP_FILTER if (AEABI && !OABI_COMPAT) |
31 | select HAVE_ARCH_TRACEHOOK | 31 | select HAVE_ARCH_TRACEHOOK |
32 | select HAVE_BPF_JIT | 32 | select HAVE_BPF_JIT |
33 | select HAVE_CC_STACKPROTECTOR | ||
33 | select HAVE_CONTEXT_TRACKING | 34 | select HAVE_CONTEXT_TRACKING |
34 | select HAVE_C_RECORDMCOUNT | 35 | select HAVE_C_RECORDMCOUNT |
35 | select HAVE_CC_STACKPROTECTOR | ||
36 | select HAVE_DEBUG_KMEMLEAK | 36 | select HAVE_DEBUG_KMEMLEAK |
37 | select HAVE_DMA_API_DEBUG | 37 | select HAVE_DMA_API_DEBUG |
38 | select HAVE_DMA_ATTRS | 38 | select HAVE_DMA_ATTRS |
@@ -311,6 +311,7 @@ config ARCH_MULTIPLATFORM | |||
311 | select ARM_HAS_SG_CHAIN | 311 | select ARM_HAS_SG_CHAIN |
312 | select ARM_PATCH_PHYS_VIRT | 312 | select ARM_PATCH_PHYS_VIRT |
313 | select AUTO_ZRELADDR | 313 | select AUTO_ZRELADDR |
314 | select CLKSRC_OF | ||
314 | select COMMON_CLK | 315 | select COMMON_CLK |
315 | select GENERIC_CLOCKEVENTS | 316 | select GENERIC_CLOCKEVENTS |
316 | select MULTI_IRQ_HANDLER | 317 | select MULTI_IRQ_HANDLER |
@@ -422,8 +423,8 @@ config ARCH_EFM32 | |||
422 | bool "Energy Micro efm32" | 423 | bool "Energy Micro efm32" |
423 | depends on !MMU | 424 | depends on !MMU |
424 | select ARCH_REQUIRE_GPIOLIB | 425 | select ARCH_REQUIRE_GPIOLIB |
425 | select AUTO_ZRELADDR | ||
426 | select ARM_NVIC | 426 | select ARM_NVIC |
427 | select AUTO_ZRELADDR | ||
427 | select CLKSRC_OF | 428 | select CLKSRC_OF |
428 | select COMMON_CLK | 429 | select COMMON_CLK |
429 | select CPU_V7M | 430 | select CPU_V7M |
@@ -511,8 +512,8 @@ config ARCH_IXP4XX | |||
511 | bool "IXP4xx-based" | 512 | bool "IXP4xx-based" |
512 | depends on MMU | 513 | depends on MMU |
513 | select ARCH_HAS_DMA_SET_COHERENT_MASK | 514 | select ARCH_HAS_DMA_SET_COHERENT_MASK |
514 | select ARCH_SUPPORTS_BIG_ENDIAN | ||
515 | select ARCH_REQUIRE_GPIOLIB | 515 | select ARCH_REQUIRE_GPIOLIB |
516 | select ARCH_SUPPORTS_BIG_ENDIAN | ||
516 | select CLKSRC_MMIO | 517 | select CLKSRC_MMIO |
517 | select CPU_XSCALE | 518 | select CPU_XSCALE |
518 | select DMABOUNCE if PCI | 519 | select DMABOUNCE if PCI |
@@ -1110,9 +1111,9 @@ config ARM_NR_BANKS | |||
1110 | default 8 | 1111 | default 8 |
1111 | 1112 | ||
1112 | config IWMMXT | 1113 | config IWMMXT |
1113 | bool "Enable iWMMXt support" if !CPU_PJ4 | 1114 | bool "Enable iWMMXt support" |
1114 | depends on CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK || CPU_PJ4 | 1115 | depends on CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK || CPU_PJ4 || CPU_PJ4B |
1115 | default y if PXA27x || PXA3xx || ARCH_MMP || CPU_PJ4 | 1116 | default y if PXA27x || PXA3xx || ARCH_MMP || CPU_PJ4 || CPU_PJ4B |
1116 | help | 1117 | help |
1117 | Enable support for iWMMXt context switching at run time if | 1118 | Enable support for iWMMXt context switching at run time if |
1118 | running on a CPU that supports it. | 1119 | running on a CPU that supports it. |
@@ -1575,8 +1576,8 @@ config BIG_LITTLE | |||
1575 | config BL_SWITCHER | 1576 | config BL_SWITCHER |
1576 | bool "big.LITTLE switcher support" | 1577 | bool "big.LITTLE switcher support" |
1577 | depends on BIG_LITTLE && MCPM && HOTPLUG_CPU | 1578 | depends on BIG_LITTLE && MCPM && HOTPLUG_CPU |
1578 | select CPU_PM | ||
1579 | select ARM_CPU_SUSPEND | 1579 | select ARM_CPU_SUSPEND |
1580 | select CPU_PM | ||
1580 | help | 1581 | help |
1581 | The big.LITTLE "switcher" provides the core functionality to | 1582 | The big.LITTLE "switcher" provides the core functionality to |
1582 | transparently handle transition between a cluster of A15's | 1583 | transparently handle transition between a cluster of A15's |
@@ -1920,9 +1921,9 @@ config XEN | |||
1920 | depends on CPU_V7 && !CPU_V6 | 1921 | depends on CPU_V7 && !CPU_V6 |
1921 | depends on !GENERIC_ATOMIC64 | 1922 | depends on !GENERIC_ATOMIC64 |
1922 | depends on MMU | 1923 | depends on MMU |
1924 | select ARCH_DMA_ADDR_T_64BIT | ||
1923 | select ARM_PSCI | 1925 | select ARM_PSCI |
1924 | select SWIOTLB_XEN | 1926 | select SWIOTLB_XEN |
1925 | select ARCH_DMA_ADDR_T_64BIT | ||
1926 | help | 1927 | help |
1927 | Say Y if you want to run Linux in a Virtual Machine on Xen on ARM. | 1928 | Say Y if you want to run Linux in a Virtual Machine on Xen on ARM. |
1928 | 1929 | ||
diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug index 4a2fc0bf6fc9..4678870f8ee8 100644 --- a/arch/arm/Kconfig.debug +++ b/arch/arm/Kconfig.debug | |||
@@ -625,6 +625,7 @@ choice | |||
625 | config DEBUG_S3C_UART0 | 625 | config DEBUG_S3C_UART0 |
626 | depends on PLAT_SAMSUNG | 626 | depends on PLAT_SAMSUNG |
627 | select DEBUG_EXYNOS_UART if ARCH_EXYNOS | 627 | select DEBUG_EXYNOS_UART if ARCH_EXYNOS |
628 | select DEBUG_S3C24XX_UART if ARCH_S3C24XX | ||
628 | bool "Use S3C UART 0 for low-level debug" | 629 | bool "Use S3C UART 0 for low-level debug" |
629 | help | 630 | help |
630 | Say Y here if you want the debug print routines to direct | 631 | Say Y here if you want the debug print routines to direct |
@@ -637,6 +638,7 @@ choice | |||
637 | config DEBUG_S3C_UART1 | 638 | config DEBUG_S3C_UART1 |
638 | depends on PLAT_SAMSUNG | 639 | depends on PLAT_SAMSUNG |
639 | select DEBUG_EXYNOS_UART if ARCH_EXYNOS | 640 | select DEBUG_EXYNOS_UART if ARCH_EXYNOS |
641 | select DEBUG_S3C24XX_UART if ARCH_S3C24XX | ||
640 | bool "Use S3C UART 1 for low-level debug" | 642 | bool "Use S3C UART 1 for low-level debug" |
641 | help | 643 | help |
642 | Say Y here if you want the debug print routines to direct | 644 | Say Y here if you want the debug print routines to direct |
@@ -649,6 +651,7 @@ choice | |||
649 | config DEBUG_S3C_UART2 | 651 | config DEBUG_S3C_UART2 |
650 | depends on PLAT_SAMSUNG | 652 | depends on PLAT_SAMSUNG |
651 | select DEBUG_EXYNOS_UART if ARCH_EXYNOS | 653 | select DEBUG_EXYNOS_UART if ARCH_EXYNOS |
654 | select DEBUG_S3C24XX_UART if ARCH_S3C24XX | ||
652 | bool "Use S3C UART 2 for low-level debug" | 655 | bool "Use S3C UART 2 for low-level debug" |
653 | help | 656 | help |
654 | Say Y here if you want the debug print routines to direct | 657 | Say Y here if you want the debug print routines to direct |
@@ -670,6 +673,33 @@ choice | |||
670 | The uncompressor code port configuration is now handled | 673 | The uncompressor code port configuration is now handled |
671 | by CONFIG_S3C_LOWLEVEL_UART_PORT. | 674 | by CONFIG_S3C_LOWLEVEL_UART_PORT. |
672 | 675 | ||
676 | config DEBUG_S3C2410_UART0 | ||
677 | depends on ARCH_S3C24XX | ||
678 | select DEBUG_S3C2410_UART | ||
679 | bool "Use S3C2410/S3C2412 UART 0 for low-level debug" | ||
680 | help | ||
681 | Say Y here if you want the debug print routines to direct | ||
682 | their output to UART 0. The port must have been initialised | ||
683 | by the boot-loader before use. | ||
684 | |||
685 | config DEBUG_S3C2410_UART1 | ||
686 | depends on ARCH_S3C24XX | ||
687 | select DEBUG_S3C2410_UART | ||
688 | bool "Use S3C2410/S3C2412 UART 1 for low-level debug" | ||
689 | help | ||
690 | Say Y here if you want the debug print routines to direct | ||
691 | their output to UART 1. The port must have been initialised | ||
692 | by the boot-loader before use. | ||
693 | |||
694 | config DEBUG_S3C2410_UART2 | ||
695 | depends on ARCH_S3C24XX | ||
696 | select DEBUG_S3C2410_UART | ||
697 | bool "Use S3C2410/S3C2412 UART 2 for low-level debug" | ||
698 | help | ||
699 | Say Y here if you want the debug print routines to direct | ||
700 | their output to UART 2. The port must have been initialised | ||
701 | by the boot-loader before use. | ||
702 | |||
673 | config DEBUG_SOCFPGA_UART | 703 | config DEBUG_SOCFPGA_UART |
674 | depends on ARCH_SOCFPGA | 704 | depends on ARCH_SOCFPGA |
675 | bool "Use SOCFPGA UART for low-level debug" | 705 | bool "Use SOCFPGA UART for low-level debug" |
@@ -921,6 +951,13 @@ endchoice | |||
921 | config DEBUG_EXYNOS_UART | 951 | config DEBUG_EXYNOS_UART |
922 | bool | 952 | bool |
923 | 953 | ||
954 | config DEBUG_S3C2410_UART | ||
955 | bool | ||
956 | select DEBUG_S3C24XX_UART | ||
957 | |||
958 | config DEBUG_S3C24XX_UART | ||
959 | bool | ||
960 | |||
924 | config DEBUG_OMAP2PLUS_UART | 961 | config DEBUG_OMAP2PLUS_UART |
925 | bool | 962 | bool |
926 | depends on ARCH_OMAP2PLUS | 963 | depends on ARCH_OMAP2PLUS |
@@ -973,6 +1010,7 @@ config DEBUG_LL_INCLUDE | |||
973 | DEBUG_IMX6SL_UART | 1010 | DEBUG_IMX6SL_UART |
974 | default "debug/msm.S" if DEBUG_MSM_UART | 1011 | default "debug/msm.S" if DEBUG_MSM_UART |
975 | default "debug/omap2plus.S" if DEBUG_OMAP2PLUS_UART | 1012 | default "debug/omap2plus.S" if DEBUG_OMAP2PLUS_UART |
1013 | default "debug/s3c24xx.S" if DEBUG_S3C24XX_UART | ||
976 | default "debug/sirf.S" if DEBUG_SIRFPRIMA2_UART1 || DEBUG_SIRFMARCO_UART1 | 1014 | default "debug/sirf.S" if DEBUG_SIRFPRIMA2_UART1 || DEBUG_SIRFMARCO_UART1 |
977 | default "debug/sti.S" if DEBUG_STI_UART | 1015 | default "debug/sti.S" if DEBUG_STI_UART |
978 | default "debug/tegra.S" if DEBUG_TEGRA_UART | 1016 | default "debug/tegra.S" if DEBUG_TEGRA_UART |
@@ -1029,10 +1067,16 @@ config DEBUG_UART_PHYS | |||
1029 | default 0x40090000 if ARCH_LPC32XX | 1067 | default 0x40090000 if ARCH_LPC32XX |
1030 | default 0x40100000 if DEBUG_PXA_UART1 | 1068 | default 0x40100000 if DEBUG_PXA_UART1 |
1031 | default 0x42000000 if ARCH_GEMINI | 1069 | default 0x42000000 if ARCH_GEMINI |
1070 | default 0x50000000 if DEBUG_S3C24XX_UART && (DEBUG_S3C_UART0 || \ | ||
1071 | DEBUG_S3C2410_UART0) | ||
1072 | default 0x50004000 if DEBUG_S3C24XX_UART && (DEBUG_S3C_UART1 || \ | ||
1073 | DEBUG_S3C2410_UART1) | ||
1074 | default 0x50008000 if DEBUG_S3C24XX_UART && (DEBUG_S3C_UART2 || \ | ||
1075 | DEBUG_S3C2410_UART2) | ||
1032 | default 0x7c0003f8 if FOOTBRIDGE | 1076 | default 0x7c0003f8 if FOOTBRIDGE |
1033 | default 0x80230000 if DEBUG_PICOXCELL_UART | ||
1034 | default 0x80070000 if DEBUG_IMX23_UART | 1077 | default 0x80070000 if DEBUG_IMX23_UART |
1035 | default 0x80074000 if DEBUG_IMX28_UART | 1078 | default 0x80074000 if DEBUG_IMX28_UART |
1079 | default 0x80230000 if DEBUG_PICOXCELL_UART | ||
1036 | default 0x808c0000 if ARCH_EP93XX | 1080 | default 0x808c0000 if ARCH_EP93XX |
1037 | default 0x90020000 if DEBUG_NSPIRE_CLASSIC_UART || DEBUG_NSPIRE_CX_UART | 1081 | default 0x90020000 if DEBUG_NSPIRE_CLASSIC_UART || DEBUG_NSPIRE_CX_UART |
1038 | default 0xb0090000 if DEBUG_VEXPRESS_UART0_CRX | 1082 | default 0xb0090000 if DEBUG_VEXPRESS_UART0_CRX |
@@ -1058,7 +1102,7 @@ config DEBUG_UART_PHYS | |||
1058 | default 0xfffff700 if ARCH_IOP33X | 1102 | default 0xfffff700 if ARCH_IOP33X |
1059 | depends on DEBUG_LL_UART_8250 || DEBUG_LL_UART_PL01X || \ | 1103 | depends on DEBUG_LL_UART_8250 || DEBUG_LL_UART_PL01X || \ |
1060 | DEBUG_LL_UART_EFM32 || \ | 1104 | DEBUG_LL_UART_EFM32 || \ |
1061 | DEBUG_UART_8250 || DEBUG_UART_PL01X | 1105 | DEBUG_UART_8250 || DEBUG_UART_PL01X || DEBUG_S3C24XX_UART |
1062 | 1106 | ||
1063 | config DEBUG_UART_VIRT | 1107 | config DEBUG_UART_VIRT |
1064 | hex "Virtual base address of debug UART" | 1108 | hex "Virtual base address of debug UART" |
@@ -1075,6 +1119,12 @@ config DEBUG_UART_VIRT | |||
1075 | default 0xf2100000 if DEBUG_PXA_UART1 | 1119 | default 0xf2100000 if DEBUG_PXA_UART1 |
1076 | default 0xf4090000 if ARCH_LPC32XX | 1120 | default 0xf4090000 if ARCH_LPC32XX |
1077 | default 0xf4200000 if ARCH_GEMINI | 1121 | default 0xf4200000 if ARCH_GEMINI |
1122 | default 0xf7000000 if DEBUG_S3C24XX_UART && (DEBUG_S3C_UART0 || \ | ||
1123 | DEBUG_S3C2410_UART0) | ||
1124 | default 0xf7004000 if DEBUG_S3C24XX_UART && (DEBUG_S3C_UART1 || \ | ||
1125 | DEBUG_S3C2410_UART1) | ||
1126 | default 0xf7008000 if DEBUG_S3C24XX_UART && (DEBUG_S3C_UART2 || \ | ||
1127 | DEBUG_S3C2410_UART2) | ||
1078 | default 0xf7fc9000 if DEBUG_BERLIN_UART | 1128 | default 0xf7fc9000 if DEBUG_BERLIN_UART |
1079 | default 0xf8009000 if DEBUG_VEXPRESS_UART0_CA9 | 1129 | default 0xf8009000 if DEBUG_VEXPRESS_UART0_CA9 |
1080 | default 0xf8090000 if DEBUG_VEXPRESS_UART0_RS1 | 1130 | default 0xf8090000 if DEBUG_VEXPRESS_UART0_RS1 |
@@ -1096,27 +1146,27 @@ config DEBUG_UART_VIRT | |||
1096 | default 0xfeb26000 if DEBUG_RK3X_UART1 | 1146 | default 0xfeb26000 if DEBUG_RK3X_UART1 |
1097 | default 0xfeb30c00 if DEBUG_KEYSTONE_UART0 | 1147 | default 0xfeb30c00 if DEBUG_KEYSTONE_UART0 |
1098 | default 0xfeb31000 if DEBUG_KEYSTONE_UART1 | 1148 | default 0xfeb31000 if DEBUG_KEYSTONE_UART1 |
1099 | default 0xfec12000 if DEBUG_MVEBU_UART || DEBUG_MVEBU_UART_ALTERNATE | ||
1100 | default 0xfed60000 if DEBUG_RK29_UART0 | ||
1101 | default 0xfed64000 if DEBUG_RK29_UART1 || DEBUG_RK3X_UART2 | ||
1102 | default 0xfed68000 if DEBUG_RK29_UART2 || DEBUG_RK3X_UART3 | ||
1103 | default 0xfec02000 if DEBUG_SOCFPGA_UART | 1149 | default 0xfec02000 if DEBUG_SOCFPGA_UART |
1150 | default 0xfec12000 if DEBUG_MVEBU_UART || DEBUG_MVEBU_UART_ALTERNATE | ||
1104 | default 0xfec20000 if DEBUG_DAVINCI_DMx_UART0 | 1151 | default 0xfec20000 if DEBUG_DAVINCI_DMx_UART0 |
1105 | default 0xfed0c000 if DEBUG_DAVINCI_DA8XX_UART1 | 1152 | default 0xfed0c000 if DEBUG_DAVINCI_DA8XX_UART1 |
1106 | default 0xfed0d000 if DEBUG_DAVINCI_DA8XX_UART2 | 1153 | default 0xfed0d000 if DEBUG_DAVINCI_DA8XX_UART2 |
1107 | default 0xfed12000 if ARCH_KIRKWOOD | 1154 | default 0xfed12000 if ARCH_KIRKWOOD |
1155 | default 0xfed60000 if DEBUG_RK29_UART0 | ||
1156 | default 0xfed64000 if DEBUG_RK29_UART1 || DEBUG_RK3X_UART2 | ||
1157 | default 0xfed68000 if DEBUG_RK29_UART2 || DEBUG_RK3X_UART3 | ||
1108 | default 0xfedc0000 if ARCH_EP93XX | 1158 | default 0xfedc0000 if ARCH_EP93XX |
1109 | default 0xfee003f8 if FOOTBRIDGE | 1159 | default 0xfee003f8 if FOOTBRIDGE |
1110 | default 0xfee20000 if DEBUG_NSPIRE_CLASSIC_UART || DEBUG_NSPIRE_CX_UART | 1160 | default 0xfee20000 if DEBUG_NSPIRE_CLASSIC_UART || DEBUG_NSPIRE_CX_UART |
1111 | default 0xfef36000 if DEBUG_HIGHBANK_UART | ||
1112 | default 0xfee82340 if ARCH_IOP13XX | 1161 | default 0xfee82340 if ARCH_IOP13XX |
1113 | default 0xfef00000 if ARCH_IXP4XX && !CPU_BIG_ENDIAN | 1162 | default 0xfef00000 if ARCH_IXP4XX && !CPU_BIG_ENDIAN |
1114 | default 0xfef00003 if ARCH_IXP4XX && CPU_BIG_ENDIAN | 1163 | default 0xfef00003 if ARCH_IXP4XX && CPU_BIG_ENDIAN |
1164 | default 0xfef36000 if DEBUG_HIGHBANK_UART | ||
1115 | default 0xfefff700 if ARCH_IOP33X | 1165 | default 0xfefff700 if ARCH_IOP33X |
1116 | default 0xff003000 if DEBUG_U300_UART | 1166 | default 0xff003000 if DEBUG_U300_UART |
1117 | default DEBUG_UART_PHYS if !MMU | 1167 | default DEBUG_UART_PHYS if !MMU |
1118 | depends on DEBUG_LL_UART_8250 || DEBUG_LL_UART_PL01X || \ | 1168 | depends on DEBUG_LL_UART_8250 || DEBUG_LL_UART_PL01X || \ |
1119 | DEBUG_UART_8250 || DEBUG_UART_PL01X | 1169 | DEBUG_UART_8250 || DEBUG_UART_PL01X || DEBUG_S3C24XX_UART |
1120 | 1170 | ||
1121 | config DEBUG_UART_8250_SHIFT | 1171 | config DEBUG_UART_8250_SHIFT |
1122 | int "Register offset shift for the 8250 debug UART" | 1172 | int "Register offset shift for the 8250 debug UART" |
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index 066b03480b63..3a8b32df6b31 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S | |||
@@ -60,11 +60,6 @@ | |||
60 | add \rb, \rb, #0x00010000 @ Ser1 | 60 | add \rb, \rb, #0x00010000 @ Ser1 |
61 | #endif | 61 | #endif |
62 | .endm | 62 | .endm |
63 | #elif defined(CONFIG_ARCH_S3C24XX) | ||
64 | .macro loadsp, rb, tmp | ||
65 | mov \rb, #0x50000000 | ||
66 | add \rb, \rb, #0x4000 * CONFIG_S3C_LOWLEVEL_UART_PORT | ||
67 | .endm | ||
68 | #else | 63 | #else |
69 | .macro loadsp, rb, tmp | 64 | .macro loadsp, rb, tmp |
70 | addruart \rb, \tmp | 65 | addruart \rb, \tmp |
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index 35c146f31e46..377b7c364033 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile | |||
@@ -51,10 +51,9 @@ dtb-$(CONFIG_ARCH_AT91) += sama5d36ek.dtb | |||
51 | 51 | ||
52 | dtb-$(CONFIG_ARCH_ATLAS6) += atlas6-evb.dtb | 52 | dtb-$(CONFIG_ARCH_ATLAS6) += atlas6-evb.dtb |
53 | dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb | 53 | dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb |
54 | dtb-$(CONFIG_ARCH_BCM_5301X) += bcm4708-netgear-r6250.dtb | ||
54 | dtb-$(CONFIG_ARCH_BCM_MOBILE) += bcm28155-ap.dtb \ | 55 | dtb-$(CONFIG_ARCH_BCM_MOBILE) += bcm28155-ap.dtb \ |
55 | bcm21664-garnet.dtb | 56 | bcm21664-garnet.dtb |
56 | dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb | ||
57 | dtb-$(CONFIG_ARCH_BCM_5301X) += bcm4708-netgear-r6250.dtb | ||
58 | dtb-$(CONFIG_ARCH_BERLIN) += \ | 57 | dtb-$(CONFIG_ARCH_BERLIN) += \ |
59 | berlin2-sony-nsz-gs7.dtb \ | 58 | berlin2-sony-nsz-gs7.dtb \ |
60 | berlin2cd-google-chromecast.dtb | 59 | berlin2cd-google-chromecast.dtb |
@@ -246,6 +245,7 @@ dtb-$(CONFIG_ARCH_OMAP2PLUS) += omap2420-h4.dtb \ | |||
246 | omap3-sbc-t3730.dtb \ | 245 | omap3-sbc-t3730.dtb \ |
247 | omap3-devkit8000.dtb \ | 246 | omap3-devkit8000.dtb \ |
248 | omap3-beagle-xm.dtb \ | 247 | omap3-beagle-xm.dtb \ |
248 | omap3-beagle-xm-ab.dtb \ | ||
249 | omap3-evm.dtb \ | 249 | omap3-evm.dtb \ |
250 | omap3-evm-37xx.dtb \ | 250 | omap3-evm-37xx.dtb \ |
251 | omap3-ldp.dtb \ | 251 | omap3-ldp.dtb \ |
@@ -294,13 +294,6 @@ dtb-$(CONFIG_ARCH_PRIMA2) += prima2-evb.dtb | |||
294 | dtb-$(CONFIG_ARCH_QCOM) += qcom-msm8660-surf.dtb \ | 294 | dtb-$(CONFIG_ARCH_QCOM) += qcom-msm8660-surf.dtb \ |
295 | qcom-msm8960-cdp.dtb \ | 295 | qcom-msm8960-cdp.dtb \ |
296 | qcom-apq8074-dragonboard.dtb | 296 | qcom-apq8074-dragonboard.dtb |
297 | dtb-$(CONFIG_ARCH_U8500) += ste-snowball.dtb \ | ||
298 | ste-hrefprev60-stuib.dtb \ | ||
299 | ste-hrefprev60-tvk.dtb \ | ||
300 | ste-hrefv60plus-stuib.dtb \ | ||
301 | ste-hrefv60plus-tvk.dtb \ | ||
302 | ste-ccu8540.dtb \ | ||
303 | ste-ccu9540.dtb | ||
304 | dtb-$(CONFIG_ARCH_S3C24XX) += s3c2416-smdk2416.dtb | 297 | dtb-$(CONFIG_ARCH_S3C24XX) += s3c2416-smdk2416.dtb |
305 | dtb-$(CONFIG_ARCH_S3C64XX) += s3c6410-mini6410.dtb \ | 298 | dtb-$(CONFIG_ARCH_S3C64XX) += s3c6410-mini6410.dtb \ |
306 | s3c6410-smdk6410.dtb | 299 | s3c6410-smdk6410.dtb |
@@ -369,9 +362,16 @@ dtb-$(CONFIG_ARCH_TEGRA) += tegra20-harmony.dtb \ | |||
369 | tegra30-cardhu-a04.dtb \ | 362 | tegra30-cardhu-a04.dtb \ |
370 | tegra114-dalmore.dtb \ | 363 | tegra114-dalmore.dtb \ |
371 | tegra124-venice2.dtb | 364 | tegra124-venice2.dtb |
365 | dtb-$(CONFIG_ARCH_U300) += ste-u300.dtb | ||
366 | dtb-$(CONFIG_ARCH_U8500) += ste-snowball.dtb \ | ||
367 | ste-hrefprev60-stuib.dtb \ | ||
368 | ste-hrefprev60-tvk.dtb \ | ||
369 | ste-hrefv60plus-stuib.dtb \ | ||
370 | ste-hrefv60plus-tvk.dtb \ | ||
371 | ste-ccu8540.dtb \ | ||
372 | ste-ccu9540.dtb | ||
372 | dtb-$(CONFIG_ARCH_VERSATILE) += versatile-ab.dtb \ | 373 | dtb-$(CONFIG_ARCH_VERSATILE) += versatile-ab.dtb \ |
373 | versatile-pb.dtb | 374 | versatile-pb.dtb |
374 | dtb-$(CONFIG_ARCH_U300) += ste-u300.dtb | ||
375 | dtb-$(CONFIG_ARCH_VEXPRESS) += vexpress-v2p-ca5s.dtb \ | 375 | dtb-$(CONFIG_ARCH_VEXPRESS) += vexpress-v2p-ca5s.dtb \ |
376 | vexpress-v2p-ca9.dtb \ | 376 | vexpress-v2p-ca9.dtb \ |
377 | vexpress-v2p-ca15-tc1.dtb \ | 377 | vexpress-v2p-ca15-tc1.dtb \ |
diff --git a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/arm/boot/dts/am335x-bone-common.dtsi index e3f27ec31718..2e7d932887b5 100644 --- a/arch/arm/boot/dts/am335x-bone-common.dtsi +++ b/arch/arm/boot/dts/am335x-bone-common.dtsi | |||
@@ -183,7 +183,7 @@ | |||
183 | &usb { | 183 | &usb { |
184 | status = "okay"; | 184 | status = "okay"; |
185 | 185 | ||
186 | control@44e10000 { | 186 | control@44e10620 { |
187 | status = "okay"; | 187 | status = "okay"; |
188 | }; | 188 | }; |
189 | 189 | ||
@@ -204,7 +204,7 @@ | |||
204 | dr_mode = "host"; | 204 | dr_mode = "host"; |
205 | }; | 205 | }; |
206 | 206 | ||
207 | dma-controller@07402000 { | 207 | dma-controller@47402000 { |
208 | status = "okay"; | 208 | status = "okay"; |
209 | }; | 209 | }; |
210 | }; | 210 | }; |
diff --git a/arch/arm/boot/dts/am335x-evm.dts b/arch/arm/boot/dts/am335x-evm.dts index 28ae040e7c3d..6028217ace0f 100644 --- a/arch/arm/boot/dts/am335x-evm.dts +++ b/arch/arm/boot/dts/am335x-evm.dts | |||
@@ -301,8 +301,8 @@ | |||
301 | 301 | ||
302 | am335x_evm_audio_pins: am335x_evm_audio_pins { | 302 | am335x_evm_audio_pins: am335x_evm_audio_pins { |
303 | pinctrl-single,pins = < | 303 | pinctrl-single,pins = < |
304 | 0x10c (PIN_INPUT_PULLDOWN | MUX_MODE4) /* mii1_rx_dv.mcasp1_aclkx */ | 304 | 0x10c (PIN_INPUT_PULLDOWN | MUX_MODE4) /* mii1_crs.mcasp1_aclkx */ |
305 | 0x110 (PIN_INPUT_PULLDOWN | MUX_MODE4) /* mii1_txd3.mcasp1_fsx */ | 305 | 0x110 (PIN_INPUT_PULLDOWN | MUX_MODE4) /* mii1_rxerr.mcasp1_fsx */ |
306 | 0x108 (PIN_OUTPUT_PULLDOWN | MUX_MODE4) /* mii1_col.mcasp1_axr2 */ | 306 | 0x108 (PIN_OUTPUT_PULLDOWN | MUX_MODE4) /* mii1_col.mcasp1_axr2 */ |
307 | 0x144 (PIN_INPUT_PULLDOWN | MUX_MODE4) /* rmii1_ref_clk.mcasp1_axr3 */ | 307 | 0x144 (PIN_INPUT_PULLDOWN | MUX_MODE4) /* rmii1_ref_clk.mcasp1_axr3 */ |
308 | >; | 308 | >; |
@@ -331,7 +331,7 @@ | |||
331 | &usb { | 331 | &usb { |
332 | status = "okay"; | 332 | status = "okay"; |
333 | 333 | ||
334 | control@44e10000 { | 334 | control@44e10620 { |
335 | status = "okay"; | 335 | status = "okay"; |
336 | }; | 336 | }; |
337 | 337 | ||
@@ -352,7 +352,7 @@ | |||
352 | dr_mode = "host"; | 352 | dr_mode = "host"; |
353 | }; | 353 | }; |
354 | 354 | ||
355 | dma-controller@07402000 { | 355 | dma-controller@47402000 { |
356 | status = "okay"; | 356 | status = "okay"; |
357 | }; | 357 | }; |
358 | }; | 358 | }; |
diff --git a/arch/arm/boot/dts/am335x-evmsk.dts b/arch/arm/boot/dts/am335x-evmsk.dts index ec08f6f677c3..ab238850a7b2 100644 --- a/arch/arm/boot/dts/am335x-evmsk.dts +++ b/arch/arm/boot/dts/am335x-evmsk.dts | |||
@@ -364,7 +364,7 @@ | |||
364 | &usb { | 364 | &usb { |
365 | status = "okay"; | 365 | status = "okay"; |
366 | 366 | ||
367 | control@44e10000 { | 367 | control@44e10620 { |
368 | status = "okay"; | 368 | status = "okay"; |
369 | }; | 369 | }; |
370 | 370 | ||
@@ -385,7 +385,7 @@ | |||
385 | dr_mode = "host"; | 385 | dr_mode = "host"; |
386 | }; | 386 | }; |
387 | 387 | ||
388 | dma-controller@07402000 { | 388 | dma-controller@47402000 { |
389 | status = "okay"; | 389 | status = "okay"; |
390 | }; | 390 | }; |
391 | }; | 391 | }; |
diff --git a/arch/arm/boot/dts/am335x-igep0033.dtsi b/arch/arm/boot/dts/am335x-igep0033.dtsi index 7063311a58d9..9f22c189f636 100644 --- a/arch/arm/boot/dts/am335x-igep0033.dtsi +++ b/arch/arm/boot/dts/am335x-igep0033.dtsi | |||
@@ -118,7 +118,6 @@ | |||
118 | reg = <0 0 0>; /* CS0, offset 0 */ | 118 | reg = <0 0 0>; /* CS0, offset 0 */ |
119 | nand-bus-width = <8>; | 119 | nand-bus-width = <8>; |
120 | ti,nand-ecc-opt = "bch8"; | 120 | ti,nand-ecc-opt = "bch8"; |
121 | gpmc,device-nand = "true"; | ||
122 | gpmc,device-width = <1>; | 121 | gpmc,device-width = <1>; |
123 | gpmc,sync-clk-ps = <0>; | 122 | gpmc,sync-clk-ps = <0>; |
124 | gpmc,cs-on-ns = <0>; | 123 | gpmc,cs-on-ns = <0>; |
@@ -202,7 +201,7 @@ | |||
202 | &usb { | 201 | &usb { |
203 | status = "okay"; | 202 | status = "okay"; |
204 | 203 | ||
205 | control@44e10000 { | 204 | control@44e10620 { |
206 | status = "okay"; | 205 | status = "okay"; |
207 | }; | 206 | }; |
208 | 207 | ||
@@ -223,7 +222,7 @@ | |||
223 | dr_mode = "host"; | 222 | dr_mode = "host"; |
224 | }; | 223 | }; |
225 | 224 | ||
226 | dma-controller@07402000 { | 225 | dma-controller@47402000 { |
227 | status = "okay"; | 226 | status = "okay"; |
228 | }; | 227 | }; |
229 | }; | 228 | }; |
diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi index 9770e35f2536..cb6811e5ae5a 100644 --- a/arch/arm/boot/dts/am33xx.dtsi +++ b/arch/arm/boot/dts/am33xx.dtsi | |||
@@ -72,7 +72,7 @@ | |||
72 | }; | 72 | }; |
73 | 73 | ||
74 | /* | 74 | /* |
75 | * The soc node represents the soc top level view. It is uses for IPs | 75 | * The soc node represents the soc top level view. It is used for IPs |
76 | * that are not memory mapped in the MPU view or for the MPU itself. | 76 | * that are not memory mapped in the MPU view or for the MPU itself. |
77 | */ | 77 | */ |
78 | soc { | 78 | soc { |
@@ -94,8 +94,8 @@ | |||
94 | 94 | ||
95 | /* | 95 | /* |
96 | * XXX: Use a flat representation of the AM33XX interconnect. | 96 | * XXX: Use a flat representation of the AM33XX interconnect. |
97 | * The real AM33XX interconnect network is quite complex.Since | 97 | * The real AM33XX interconnect network is quite complex. Since |
98 | * that will not bring real advantage to represent that in DT | 98 | * it will not bring real advantage to represent that in DT |
99 | * for the moment, just use a fake OCP bus entry to represent | 99 | * for the moment, just use a fake OCP bus entry to represent |
100 | * the whole bus hierarchy. | 100 | * the whole bus hierarchy. |
101 | */ | 101 | */ |
@@ -802,7 +802,7 @@ | |||
802 | <0x46000000 0x400000>; | 802 | <0x46000000 0x400000>; |
803 | reg-names = "mpu", "dat"; | 803 | reg-names = "mpu", "dat"; |
804 | interrupts = <80>, <81>; | 804 | interrupts = <80>, <81>; |
805 | interrupts-names = "tx", "rx"; | 805 | interrupt-names = "tx", "rx"; |
806 | status = "disabled"; | 806 | status = "disabled"; |
807 | dmas = <&edma 8>, | 807 | dmas = <&edma 8>, |
808 | <&edma 9>; | 808 | <&edma 9>; |
@@ -816,7 +816,7 @@ | |||
816 | <0x46400000 0x400000>; | 816 | <0x46400000 0x400000>; |
817 | reg-names = "mpu", "dat"; | 817 | reg-names = "mpu", "dat"; |
818 | interrupts = <82>, <83>; | 818 | interrupts = <82>, <83>; |
819 | interrupts-names = "tx", "rx"; | 819 | interrupt-names = "tx", "rx"; |
820 | status = "disabled"; | 820 | status = "disabled"; |
821 | dmas = <&edma 10>, | 821 | dmas = <&edma 10>, |
822 | <&edma 11>; | 822 | <&edma 11>; |
diff --git a/arch/arm/boot/dts/am4372.dtsi b/arch/arm/boot/dts/am4372.dtsi index 36d523a26831..d1f8707ff1df 100644 --- a/arch/arm/boot/dts/am4372.dtsi +++ b/arch/arm/boot/dts/am4372.dtsi | |||
@@ -691,7 +691,7 @@ | |||
691 | <0x46000000 0x400000>; | 691 | <0x46000000 0x400000>; |
692 | reg-names = "mpu", "dat"; | 692 | reg-names = "mpu", "dat"; |
693 | interrupts = <80>, <81>; | 693 | interrupts = <80>, <81>; |
694 | interrupts-names = "tx", "rx"; | 694 | interrupt-names = "tx", "rx"; |
695 | status = "disabled"; | 695 | status = "disabled"; |
696 | dmas = <&edma 8>, | 696 | dmas = <&edma 8>, |
697 | <&edma 9>; | 697 | <&edma 9>; |
@@ -705,7 +705,7 @@ | |||
705 | <0x46400000 0x400000>; | 705 | <0x46400000 0x400000>; |
706 | reg-names = "mpu", "dat"; | 706 | reg-names = "mpu", "dat"; |
707 | interrupts = <82>, <83>; | 707 | interrupts = <82>, <83>; |
708 | interrupts-names = "tx", "rx"; | 708 | interrupt-names = "tx", "rx"; |
709 | status = "disabled"; | 709 | status = "disabled"; |
710 | dmas = <&edma 10>, | 710 | dmas = <&edma 10>, |
711 | <&edma 11>; | 711 | <&edma 11>; |
diff --git a/arch/arm/boot/dts/armada-370-xp.dtsi b/arch/arm/boot/dts/armada-370-xp.dtsi index bbb40f62037d..bb77970c0b12 100644 --- a/arch/arm/boot/dts/armada-370-xp.dtsi +++ b/arch/arm/boot/dts/armada-370-xp.dtsi | |||
@@ -230,6 +230,7 @@ | |||
230 | #size-cells = <0>; | 230 | #size-cells = <0>; |
231 | compatible = "marvell,orion-mdio"; | 231 | compatible = "marvell,orion-mdio"; |
232 | reg = <0x72004 0x4>; | 232 | reg = <0x72004 0x4>; |
233 | clocks = <&gateclk 4>; | ||
233 | }; | 234 | }; |
234 | 235 | ||
235 | eth1: ethernet@74000 { | 236 | eth1: ethernet@74000 { |
diff --git a/arch/arm/boot/dts/armada-38x.dtsi b/arch/arm/boot/dts/armada-38x.dtsi index a064f59da02d..ca8813bb99ba 100644 --- a/arch/arm/boot/dts/armada-38x.dtsi +++ b/arch/arm/boot/dts/armada-38x.dtsi | |||
@@ -336,6 +336,7 @@ | |||
336 | #size-cells = <0>; | 336 | #size-cells = <0>; |
337 | compatible = "marvell,orion-mdio"; | 337 | compatible = "marvell,orion-mdio"; |
338 | reg = <0x72004 0x4>; | 338 | reg = <0x72004 0x4>; |
339 | clocks = <&gateclk 4>; | ||
339 | }; | 340 | }; |
340 | 341 | ||
341 | coredivclk: clock@e4250 { | 342 | coredivclk: clock@e4250 { |
diff --git a/arch/arm/boot/dts/dra7.dtsi b/arch/arm/boot/dts/dra7.dtsi index 1c0f8e1893ae..149b55099935 100644 --- a/arch/arm/boot/dts/dra7.dtsi +++ b/arch/arm/boot/dts/dra7.dtsi | |||
@@ -80,7 +80,7 @@ | |||
80 | }; | 80 | }; |
81 | 81 | ||
82 | /* | 82 | /* |
83 | * The soc node represents the soc top level view. It is uses for IPs | 83 | * The soc node represents the soc top level view. It is used for IPs |
84 | * that are not memory mapped in the MPU view or for the MPU itself. | 84 | * that are not memory mapped in the MPU view or for the MPU itself. |
85 | */ | 85 | */ |
86 | soc { | 86 | soc { |
@@ -94,7 +94,7 @@ | |||
94 | /* | 94 | /* |
95 | * XXX: Use a flat representation of the SOC interconnect. | 95 | * XXX: Use a flat representation of the SOC interconnect. |
96 | * The real OMAP interconnect network is quite complex. | 96 | * The real OMAP interconnect network is quite complex. |
97 | * Since that will not bring real advantage to represent that in DT for | 97 | * Since it will not bring real advantage to represent that in DT for |
98 | * the moment, just use a fake OCP bus entry to represent the whole bus | 98 | * the moment, just use a fake OCP bus entry to represent the whole bus |
99 | * hierarchy. | 99 | * hierarchy. |
100 | */ | 100 | */ |
diff --git a/arch/arm/boot/dts/dra7xx-clocks.dtsi b/arch/arm/boot/dts/dra7xx-clocks.dtsi index e96da9a898ad..cfb8fc753f50 100644 --- a/arch/arm/boot/dts/dra7xx-clocks.dtsi +++ b/arch/arm/boot/dts/dra7xx-clocks.dtsi | |||
@@ -1640,7 +1640,7 @@ | |||
1640 | #clock-cells = <0>; | 1640 | #clock-cells = <0>; |
1641 | compatible = "ti,mux-clock"; | 1641 | compatible = "ti,mux-clock"; |
1642 | clocks = <&abe_24m_fclk>, <&abe_sys_clk_div>, <&func_24m_clk>, <&atlclkin3_ck>, <&atl_clkin2_ck>, <&atl_clkin1_ck>, <&atl_clkin0_ck>, <&sys_clkin2>, <&ref_clkin0_ck>, <&ref_clkin1_ck>, <&ref_clkin2_ck>, <&ref_clkin3_ck>, <&mlb_clk>, <&mlbp_clk>; | 1642 | clocks = <&abe_24m_fclk>, <&abe_sys_clk_div>, <&func_24m_clk>, <&atlclkin3_ck>, <&atl_clkin2_ck>, <&atl_clkin1_ck>, <&atl_clkin0_ck>, <&sys_clkin2>, <&ref_clkin0_ck>, <&ref_clkin1_ck>, <&ref_clkin2_ck>, <&ref_clkin3_ck>, <&mlb_clk>, <&mlbp_clk>; |
1643 | ti,bit-shift = <28>; | 1643 | ti,bit-shift = <24>; |
1644 | reg = <0x1860>; | 1644 | reg = <0x1860>; |
1645 | }; | 1645 | }; |
1646 | 1646 | ||
diff --git a/arch/arm/boot/dts/exynos5420-arndale-octa.dts b/arch/arm/boot/dts/exynos5420-arndale-octa.dts index 80a3bf4c5986..896a2a6619e0 100644 --- a/arch/arm/boot/dts/exynos5420-arndale-octa.dts +++ b/arch/arm/boot/dts/exynos5420-arndale-octa.dts | |||
@@ -364,16 +364,4 @@ | |||
364 | gpio-key,wakeup; | 364 | gpio-key,wakeup; |
365 | }; | 365 | }; |
366 | }; | 366 | }; |
367 | |||
368 | amba { | ||
369 | mdma1: mdma@11C10000 { | ||
370 | /* | ||
371 | * MDMA1 can support both secure and non-secure | ||
372 | * AXI transactions. When this is enabled in the kernel | ||
373 | * for boards that run in secure mode, we are getting | ||
374 | * imprecise external aborts causing the kernel to oops. | ||
375 | */ | ||
376 | status = "disabled"; | ||
377 | }; | ||
378 | }; | ||
379 | }; | 367 | }; |
diff --git a/arch/arm/boot/dts/exynos5420.dtsi b/arch/arm/boot/dts/exynos5420.dtsi index 67ba2c56fa8e..d433fe4d00f0 100644 --- a/arch/arm/boot/dts/exynos5420.dtsi +++ b/arch/arm/boot/dts/exynos5420.dtsi | |||
@@ -219,16 +219,6 @@ | |||
219 | reg = <0x100440C0 0x20>; | 219 | reg = <0x100440C0 0x20>; |
220 | }; | 220 | }; |
221 | 221 | ||
222 | mau_pd: power-domain@100440E0 { | ||
223 | compatible = "samsung,exynos4210-pd"; | ||
224 | reg = <0x100440E0 0x20>; | ||
225 | }; | ||
226 | |||
227 | g2d_pd: power-domain@10044100 { | ||
228 | compatible = "samsung,exynos4210-pd"; | ||
229 | reg = <0x10044100 0x20>; | ||
230 | }; | ||
231 | |||
232 | msc_pd: power-domain@10044120 { | 222 | msc_pd: power-domain@10044120 { |
233 | compatible = "samsung,exynos4210-pd"; | 223 | compatible = "samsung,exynos4210-pd"; |
234 | reg = <0x10044120 0x20>; | 224 | reg = <0x10044120 0x20>; |
@@ -336,6 +326,13 @@ | |||
336 | #dma-cells = <1>; | 326 | #dma-cells = <1>; |
337 | #dma-channels = <8>; | 327 | #dma-channels = <8>; |
338 | #dma-requests = <1>; | 328 | #dma-requests = <1>; |
329 | /* | ||
330 | * MDMA1 can support both secure and non-secure | ||
331 | * AXI transactions. When this is enabled in the kernel | ||
332 | * for boards that run in secure mode, we are getting | ||
333 | * imprecise external aborts causing the kernel to oops. | ||
334 | */ | ||
335 | status = "disabled"; | ||
339 | }; | 336 | }; |
340 | }; | 337 | }; |
341 | 338 | ||
@@ -730,6 +727,5 @@ | |||
730 | interrupts = <0 112 0>; | 727 | interrupts = <0 112 0>; |
731 | clocks = <&clock 471>; | 728 | clocks = <&clock 471>; |
732 | clock-names = "secss"; | 729 | clock-names = "secss"; |
733 | samsung,power-domain = <&g2d_pd>; | ||
734 | }; | 730 | }; |
735 | }; | 731 | }; |
diff --git a/arch/arm/boot/dts/imx25.dtsi b/arch/arm/boot/dts/imx25.dtsi index 32f760e24898..ea323f09dc78 100644 --- a/arch/arm/boot/dts/imx25.dtsi +++ b/arch/arm/boot/dts/imx25.dtsi | |||
@@ -56,6 +56,7 @@ | |||
56 | 56 | ||
57 | osc { | 57 | osc { |
58 | compatible = "fsl,imx-osc", "fixed-clock"; | 58 | compatible = "fsl,imx-osc", "fixed-clock"; |
59 | #clock-cells = <0>; | ||
59 | clock-frequency = <24000000>; | 60 | clock-frequency = <24000000>; |
60 | }; | 61 | }; |
61 | }; | 62 | }; |
diff --git a/arch/arm/boot/dts/imx27-apf27.dts b/arch/arm/boot/dts/imx27-apf27.dts index 09f57b39e3ef..73aae4f5e539 100644 --- a/arch/arm/boot/dts/imx27-apf27.dts +++ b/arch/arm/boot/dts/imx27-apf27.dts | |||
@@ -29,6 +29,7 @@ | |||
29 | 29 | ||
30 | osc26m { | 30 | osc26m { |
31 | compatible = "fsl,imx-osc26m", "fixed-clock"; | 31 | compatible = "fsl,imx-osc26m", "fixed-clock"; |
32 | #clock-cells = <0>; | ||
32 | clock-frequency = <0>; | 33 | clock-frequency = <0>; |
33 | }; | 34 | }; |
34 | }; | 35 | }; |
diff --git a/arch/arm/boot/dts/imx27.dtsi b/arch/arm/boot/dts/imx27.dtsi index 6279e0b4f768..137e010eab35 100644 --- a/arch/arm/boot/dts/imx27.dtsi +++ b/arch/arm/boot/dts/imx27.dtsi | |||
@@ -48,6 +48,7 @@ | |||
48 | 48 | ||
49 | osc26m { | 49 | osc26m { |
50 | compatible = "fsl,imx-osc26m", "fixed-clock"; | 50 | compatible = "fsl,imx-osc26m", "fixed-clock"; |
51 | #clock-cells = <0>; | ||
51 | clock-frequency = <26000000>; | 52 | clock-frequency = <26000000>; |
52 | }; | 53 | }; |
53 | }; | 54 | }; |
diff --git a/arch/arm/boot/dts/imx50.dtsi b/arch/arm/boot/dts/imx50.dtsi index 0c75fe3deb35..9c89d1ca97c2 100644 --- a/arch/arm/boot/dts/imx50.dtsi +++ b/arch/arm/boot/dts/imx50.dtsi | |||
@@ -53,21 +53,25 @@ | |||
53 | 53 | ||
54 | ckil { | 54 | ckil { |
55 | compatible = "fsl,imx-ckil", "fixed-clock"; | 55 | compatible = "fsl,imx-ckil", "fixed-clock"; |
56 | #clock-cells = <0>; | ||
56 | clock-frequency = <32768>; | 57 | clock-frequency = <32768>; |
57 | }; | 58 | }; |
58 | 59 | ||
59 | ckih1 { | 60 | ckih1 { |
60 | compatible = "fsl,imx-ckih1", "fixed-clock"; | 61 | compatible = "fsl,imx-ckih1", "fixed-clock"; |
62 | #clock-cells = <0>; | ||
61 | clock-frequency = <22579200>; | 63 | clock-frequency = <22579200>; |
62 | }; | 64 | }; |
63 | 65 | ||
64 | ckih2 { | 66 | ckih2 { |
65 | compatible = "fsl,imx-ckih2", "fixed-clock"; | 67 | compatible = "fsl,imx-ckih2", "fixed-clock"; |
68 | #clock-cells = <0>; | ||
66 | clock-frequency = <0>; | 69 | clock-frequency = <0>; |
67 | }; | 70 | }; |
68 | 71 | ||
69 | osc { | 72 | osc { |
70 | compatible = "fsl,imx-osc", "fixed-clock"; | 73 | compatible = "fsl,imx-osc", "fixed-clock"; |
74 | #clock-cells = <0>; | ||
71 | clock-frequency = <24000000>; | 75 | clock-frequency = <24000000>; |
72 | }; | 76 | }; |
73 | }; | 77 | }; |
diff --git a/arch/arm/boot/dts/imx51.dtsi b/arch/arm/boot/dts/imx51.dtsi index 5f8216d08f6b..150bb4e2f744 100644 --- a/arch/arm/boot/dts/imx51.dtsi +++ b/arch/arm/boot/dts/imx51.dtsi | |||
@@ -50,21 +50,25 @@ | |||
50 | 50 | ||
51 | ckil { | 51 | ckil { |
52 | compatible = "fsl,imx-ckil", "fixed-clock"; | 52 | compatible = "fsl,imx-ckil", "fixed-clock"; |
53 | #clock-cells = <0>; | ||
53 | clock-frequency = <32768>; | 54 | clock-frequency = <32768>; |
54 | }; | 55 | }; |
55 | 56 | ||
56 | ckih1 { | 57 | ckih1 { |
57 | compatible = "fsl,imx-ckih1", "fixed-clock"; | 58 | compatible = "fsl,imx-ckih1", "fixed-clock"; |
59 | #clock-cells = <0>; | ||
58 | clock-frequency = <0>; | 60 | clock-frequency = <0>; |
59 | }; | 61 | }; |
60 | 62 | ||
61 | ckih2 { | 63 | ckih2 { |
62 | compatible = "fsl,imx-ckih2", "fixed-clock"; | 64 | compatible = "fsl,imx-ckih2", "fixed-clock"; |
65 | #clock-cells = <0>; | ||
63 | clock-frequency = <0>; | 66 | clock-frequency = <0>; |
64 | }; | 67 | }; |
65 | 68 | ||
66 | osc { | 69 | osc { |
67 | compatible = "fsl,imx-osc", "fixed-clock"; | 70 | compatible = "fsl,imx-osc", "fixed-clock"; |
71 | #clock-cells = <0>; | ||
68 | clock-frequency = <24000000>; | 72 | clock-frequency = <24000000>; |
69 | }; | 73 | }; |
70 | }; | 74 | }; |
diff --git a/arch/arm/boot/dts/imx53-m53evk.dts b/arch/arm/boot/dts/imx53-m53evk.dts index f6d3ac3e5587..d5d146a8b149 100644 --- a/arch/arm/boot/dts/imx53-m53evk.dts +++ b/arch/arm/boot/dts/imx53-m53evk.dts | |||
@@ -17,7 +17,8 @@ | |||
17 | compatible = "denx,imx53-m53evk", "fsl,imx53"; | 17 | compatible = "denx,imx53-m53evk", "fsl,imx53"; |
18 | 18 | ||
19 | memory { | 19 | memory { |
20 | reg = <0x70000000 0x20000000>; | 20 | reg = <0x70000000 0x20000000>, |
21 | <0xb0000000 0x20000000>; | ||
21 | }; | 22 | }; |
22 | 23 | ||
23 | soc { | 24 | soc { |
@@ -193,17 +194,17 @@ | |||
193 | irq-trigger = <0x1>; | 194 | irq-trigger = <0x1>; |
194 | 195 | ||
195 | stmpe_touchscreen { | 196 | stmpe_touchscreen { |
196 | compatible = "stmpe,ts"; | 197 | compatible = "st,stmpe-ts"; |
197 | reg = <0>; | 198 | reg = <0>; |
198 | ts,sample-time = <4>; | 199 | st,sample-time = <4>; |
199 | ts,mod-12b = <1>; | 200 | st,mod-12b = <1>; |
200 | ts,ref-sel = <0>; | 201 | st,ref-sel = <0>; |
201 | ts,adc-freq = <1>; | 202 | st,adc-freq = <1>; |
202 | ts,ave-ctrl = <3>; | 203 | st,ave-ctrl = <3>; |
203 | ts,touch-det-delay = <3>; | 204 | st,touch-det-delay = <3>; |
204 | ts,settling = <4>; | 205 | st,settling = <4>; |
205 | ts,fraction-z = <7>; | 206 | st,fraction-z = <7>; |
206 | ts,i-drive = <1>; | 207 | st,i-drive = <1>; |
207 | }; | 208 | }; |
208 | }; | 209 | }; |
209 | 210 | ||
diff --git a/arch/arm/boot/dts/imx53-qsb-common.dtsi b/arch/arm/boot/dts/imx53-qsb-common.dtsi index 3f825a6813da..ede04fa4161f 100644 --- a/arch/arm/boot/dts/imx53-qsb-common.dtsi +++ b/arch/arm/boot/dts/imx53-qsb-common.dtsi | |||
@@ -14,7 +14,8 @@ | |||
14 | 14 | ||
15 | / { | 15 | / { |
16 | memory { | 16 | memory { |
17 | reg = <0x70000000 0x40000000>; | 17 | reg = <0x70000000 0x20000000>, |
18 | <0xb0000000 0x20000000>; | ||
18 | }; | 19 | }; |
19 | 20 | ||
20 | display0: display@di0 { | 21 | display0: display@di0 { |
diff --git a/arch/arm/boot/dts/imx53-tx53-x03x.dts b/arch/arm/boot/dts/imx53-tx53-x03x.dts index 0217dde3b36b..3b73e81dc3f0 100644 --- a/arch/arm/boot/dts/imx53-tx53-x03x.dts +++ b/arch/arm/boot/dts/imx53-tx53-x03x.dts | |||
@@ -25,12 +25,17 @@ | |||
25 | soc { | 25 | soc { |
26 | display: display@di0 { | 26 | display: display@di0 { |
27 | compatible = "fsl,imx-parallel-display"; | 27 | compatible = "fsl,imx-parallel-display"; |
28 | crtcs = <&ipu 0>; | ||
29 | interface-pix-fmt = "rgb24"; | 28 | interface-pix-fmt = "rgb24"; |
30 | pinctrl-names = "default"; | 29 | pinctrl-names = "default"; |
31 | pinctrl-0 = <&pinctrl_rgb24_vga1>; | 30 | pinctrl-0 = <&pinctrl_rgb24_vga1>; |
32 | status = "okay"; | 31 | status = "okay"; |
33 | 32 | ||
33 | port { | ||
34 | display0_in: endpoint { | ||
35 | remote-endpoint = <&ipu_di0_disp0>; | ||
36 | }; | ||
37 | }; | ||
38 | |||
34 | display-timings { | 39 | display-timings { |
35 | VGA { | 40 | VGA { |
36 | clock-frequency = <25200000>; | 41 | clock-frequency = <25200000>; |
@@ -293,6 +298,10 @@ | |||
293 | }; | 298 | }; |
294 | }; | 299 | }; |
295 | 300 | ||
301 | &ipu_di0_disp0 { | ||
302 | remote-endpoint = <&display0_in>; | ||
303 | }; | ||
304 | |||
296 | &kpp { | 305 | &kpp { |
297 | pinctrl-names = "default"; | 306 | pinctrl-names = "default"; |
298 | pinctrl-0 = <&pinctrl_kpp>; | 307 | pinctrl-0 = <&pinctrl_kpp>; |
diff --git a/arch/arm/boot/dts/imx53.dtsi b/arch/arm/boot/dts/imx53.dtsi index b57ab57740f6..9c2bff2252d0 100644 --- a/arch/arm/boot/dts/imx53.dtsi +++ b/arch/arm/boot/dts/imx53.dtsi | |||
@@ -70,21 +70,25 @@ | |||
70 | 70 | ||
71 | ckil { | 71 | ckil { |
72 | compatible = "fsl,imx-ckil", "fixed-clock"; | 72 | compatible = "fsl,imx-ckil", "fixed-clock"; |
73 | #clock-cells = <0>; | ||
73 | clock-frequency = <32768>; | 74 | clock-frequency = <32768>; |
74 | }; | 75 | }; |
75 | 76 | ||
76 | ckih1 { | 77 | ckih1 { |
77 | compatible = "fsl,imx-ckih1", "fixed-clock"; | 78 | compatible = "fsl,imx-ckih1", "fixed-clock"; |
79 | #clock-cells = <0>; | ||
78 | clock-frequency = <22579200>; | 80 | clock-frequency = <22579200>; |
79 | }; | 81 | }; |
80 | 82 | ||
81 | ckih2 { | 83 | ckih2 { |
82 | compatible = "fsl,imx-ckih2", "fixed-clock"; | 84 | compatible = "fsl,imx-ckih2", "fixed-clock"; |
85 | #clock-cells = <0>; | ||
83 | clock-frequency = <0>; | 86 | clock-frequency = <0>; |
84 | }; | 87 | }; |
85 | 88 | ||
86 | osc { | 89 | osc { |
87 | compatible = "fsl,imx-osc", "fixed-clock"; | 90 | compatible = "fsl,imx-osc", "fixed-clock"; |
91 | #clock-cells = <0>; | ||
88 | clock-frequency = <24000000>; | 92 | clock-frequency = <24000000>; |
89 | }; | 93 | }; |
90 | }; | 94 | }; |
@@ -430,7 +434,7 @@ | |||
430 | 434 | ||
431 | port { | 435 | port { |
432 | lvds1_in: endpoint { | 436 | lvds1_in: endpoint { |
433 | remote-endpoint = <&ipu_di0_lvds0>; | 437 | remote-endpoint = <&ipu_di1_lvds1>; |
434 | }; | 438 | }; |
435 | }; | 439 | }; |
436 | }; | 440 | }; |
diff --git a/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts b/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts index a63bbb3d46bb..e4ae38fd0269 100644 --- a/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts +++ b/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts | |||
@@ -19,7 +19,10 @@ | |||
19 | compatible = "dmo,imx6q-edmqmx6", "fsl,imx6q"; | 19 | compatible = "dmo,imx6q-edmqmx6", "fsl,imx6q"; |
20 | 20 | ||
21 | aliases { | 21 | aliases { |
22 | gpio7 = &stmpe_gpio; | 22 | gpio7 = &stmpe_gpio1; |
23 | gpio8 = &stmpe_gpio2; | ||
24 | stmpe-i2c0 = &stmpe1; | ||
25 | stmpe-i2c1 = &stmpe2; | ||
23 | }; | 26 | }; |
24 | 27 | ||
25 | memory { | 28 | memory { |
@@ -40,13 +43,15 @@ | |||
40 | regulator-always-on; | 43 | regulator-always-on; |
41 | }; | 44 | }; |
42 | 45 | ||
43 | reg_usb_otg_vbus: regulator@1 { | 46 | reg_usb_otg_switch: regulator@1 { |
44 | compatible = "regulator-fixed"; | 47 | compatible = "regulator-fixed"; |
45 | reg = <1>; | 48 | reg = <1>; |
46 | regulator-name = "usb_otg_vbus"; | 49 | regulator-name = "usb_otg_switch"; |
47 | regulator-min-microvolt = <5000000>; | 50 | regulator-min-microvolt = <5000000>; |
48 | regulator-max-microvolt = <5000000>; | 51 | regulator-max-microvolt = <5000000>; |
49 | gpio = <&gpio7 12 0>; | 52 | gpio = <&gpio7 12 0>; |
53 | regulator-boot-on; | ||
54 | regulator-always-on; | ||
50 | }; | 55 | }; |
51 | 56 | ||
52 | reg_usb_host1: regulator@2 { | 57 | reg_usb_host1: regulator@2 { |
@@ -65,23 +70,23 @@ | |||
65 | 70 | ||
66 | led-blue { | 71 | led-blue { |
67 | label = "blue"; | 72 | label = "blue"; |
68 | gpios = <&stmpe_gpio 8 GPIO_ACTIVE_HIGH>; | 73 | gpios = <&stmpe_gpio1 8 GPIO_ACTIVE_HIGH>; |
69 | linux,default-trigger = "heartbeat"; | 74 | linux,default-trigger = "heartbeat"; |
70 | }; | 75 | }; |
71 | 76 | ||
72 | led-green { | 77 | led-green { |
73 | label = "green"; | 78 | label = "green"; |
74 | gpios = <&stmpe_gpio 9 GPIO_ACTIVE_HIGH>; | 79 | gpios = <&stmpe_gpio1 9 GPIO_ACTIVE_HIGH>; |
75 | }; | 80 | }; |
76 | 81 | ||
77 | led-pink { | 82 | led-pink { |
78 | label = "pink"; | 83 | label = "pink"; |
79 | gpios = <&stmpe_gpio 10 GPIO_ACTIVE_HIGH>; | 84 | gpios = <&stmpe_gpio1 10 GPIO_ACTIVE_HIGH>; |
80 | }; | 85 | }; |
81 | 86 | ||
82 | led-red { | 87 | led-red { |
83 | label = "red"; | 88 | label = "red"; |
84 | gpios = <&stmpe_gpio 11 GPIO_ACTIVE_HIGH>; | 89 | gpios = <&stmpe_gpio1 11 GPIO_ACTIVE_HIGH>; |
85 | }; | 90 | }; |
86 | }; | 91 | }; |
87 | }; | 92 | }; |
@@ -99,7 +104,8 @@ | |||
99 | clock-frequency = <100000>; | 104 | clock-frequency = <100000>; |
100 | pinctrl-names = "default"; | 105 | pinctrl-names = "default"; |
101 | pinctrl-0 = <&pinctrl_i2c2 | 106 | pinctrl-0 = <&pinctrl_i2c2 |
102 | &pinctrl_stmpe>; | 107 | &pinctrl_stmpe1 |
108 | &pinctrl_stmpe2>; | ||
103 | status = "okay"; | 109 | status = "okay"; |
104 | 110 | ||
105 | pmic: pfuze100@08 { | 111 | pmic: pfuze100@08 { |
@@ -205,13 +211,25 @@ | |||
205 | }; | 211 | }; |
206 | }; | 212 | }; |
207 | 213 | ||
208 | stmpe: stmpe1601@40 { | 214 | stmpe1: stmpe1601@40 { |
209 | compatible = "st,stmpe1601"; | 215 | compatible = "st,stmpe1601"; |
210 | reg = <0x40>; | 216 | reg = <0x40>; |
211 | interrupts = <30 0>; | 217 | interrupts = <30 0>; |
212 | interrupt-parent = <&gpio3>; | 218 | interrupt-parent = <&gpio3>; |
213 | 219 | ||
214 | stmpe_gpio: stmpe_gpio { | 220 | stmpe_gpio1: stmpe_gpio { |
221 | #gpio-cells = <2>; | ||
222 | compatible = "st,stmpe-gpio"; | ||
223 | }; | ||
224 | }; | ||
225 | |||
226 | stmpe2: stmpe1601@44 { | ||
227 | compatible = "st,stmpe1601"; | ||
228 | reg = <0x44>; | ||
229 | interrupts = <2 0>; | ||
230 | interrupt-parent = <&gpio5>; | ||
231 | |||
232 | stmpe_gpio2: stmpe_gpio { | ||
215 | #gpio-cells = <2>; | 233 | #gpio-cells = <2>; |
216 | compatible = "st,stmpe-gpio"; | 234 | compatible = "st,stmpe-gpio"; |
217 | }; | 235 | }; |
@@ -273,10 +291,14 @@ | |||
273 | >; | 291 | >; |
274 | }; | 292 | }; |
275 | 293 | ||
276 | pinctrl_stmpe: stmpegrp { | 294 | pinctrl_stmpe1: stmpe1grp { |
277 | fsl,pins = <MX6QDL_PAD_EIM_D30__GPIO3_IO30 0x80000000>; | 295 | fsl,pins = <MX6QDL_PAD_EIM_D30__GPIO3_IO30 0x80000000>; |
278 | }; | 296 | }; |
279 | 297 | ||
298 | pinctrl_stmpe2: stmpe2grp { | ||
299 | fsl,pins = <MX6QDL_PAD_EIM_A25__GPIO5_IO02 0x80000000>; | ||
300 | }; | ||
301 | |||
280 | pinctrl_uart1: uart1grp { | 302 | pinctrl_uart1: uart1grp { |
281 | fsl,pins = < | 303 | fsl,pins = < |
282 | MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA 0x1b0b1 | 304 | MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA 0x1b0b1 |
@@ -293,7 +315,7 @@ | |||
293 | 315 | ||
294 | pinctrl_usbotg: usbotggrp { | 316 | pinctrl_usbotg: usbotggrp { |
295 | fsl,pins = < | 317 | fsl,pins = < |
296 | MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x17059 | 318 | MX6QDL_PAD_ENET_RX_ER__USB_OTG_ID 0x17059 |
297 | >; | 319 | >; |
298 | }; | 320 | }; |
299 | 321 | ||
@@ -344,11 +366,11 @@ | |||
344 | &usbh1 { | 366 | &usbh1 { |
345 | vbus-supply = <®_usb_host1>; | 367 | vbus-supply = <®_usb_host1>; |
346 | disable-over-current; | 368 | disable-over-current; |
369 | dr_mode = "host"; | ||
347 | status = "okay"; | 370 | status = "okay"; |
348 | }; | 371 | }; |
349 | 372 | ||
350 | &usbotg { | 373 | &usbotg { |
351 | vbus-supply = <®_usb_otg_vbus>; | ||
352 | pinctrl-names = "default"; | 374 | pinctrl-names = "default"; |
353 | pinctrl-0 = <&pinctrl_usbotg>; | 375 | pinctrl-0 = <&pinctrl_usbotg>; |
354 | disable-over-current; | 376 | disable-over-current; |
diff --git a/arch/arm/boot/dts/imx6q-gw5400-a.dts b/arch/arm/boot/dts/imx6q-gw5400-a.dts index 902f98310481..e51bb3f0fd56 100644 --- a/arch/arm/boot/dts/imx6q-gw5400-a.dts +++ b/arch/arm/boot/dts/imx6q-gw5400-a.dts | |||
@@ -487,9 +487,6 @@ | |||
487 | 487 | ||
488 | &ldb { | 488 | &ldb { |
489 | status = "okay"; | 489 | status = "okay"; |
490 | lvds-channel@0 { | ||
491 | crtcs = <&ipu1 0>, <&ipu1 1>, <&ipu2 0>, <&ipu2 1>; | ||
492 | }; | ||
493 | }; | 490 | }; |
494 | 491 | ||
495 | &pcie { | 492 | &pcie { |
diff --git a/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi b/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi index 8e99c9a9bc76..035d3a85c318 100644 --- a/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi +++ b/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi | |||
@@ -436,9 +436,6 @@ | |||
436 | 436 | ||
437 | &ldb { | 437 | &ldb { |
438 | status = "okay"; | 438 | status = "okay"; |
439 | lvds-channel@0 { | ||
440 | crtcs = <&ipu1 0>, <&ipu1 1>; | ||
441 | }; | ||
442 | }; | 439 | }; |
443 | 440 | ||
444 | &pcie { | 441 | &pcie { |
diff --git a/arch/arm/boot/dts/imx6qdl-microsom-ar8035.dtsi b/arch/arm/boot/dts/imx6qdl-microsom-ar8035.dtsi index a3cb2fff8f61..d16066608e21 100644 --- a/arch/arm/boot/dts/imx6qdl-microsom-ar8035.dtsi +++ b/arch/arm/boot/dts/imx6qdl-microsom-ar8035.dtsi | |||
@@ -26,25 +26,25 @@ | |||
26 | /* GPIO16 -> AR8035 25MHz */ | 26 | /* GPIO16 -> AR8035 25MHz */ |
27 | MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0xc0000000 | 27 | MX6QDL_PAD_GPIO_16__ENET_REF_CLK 0xc0000000 |
28 | MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x80000000 | 28 | MX6QDL_PAD_RGMII_TXC__RGMII_TXC 0x80000000 |
29 | MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b0b0 | 29 | MX6QDL_PAD_RGMII_TD0__RGMII_TD0 0x1b030 |
30 | MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b0b0 | 30 | MX6QDL_PAD_RGMII_TD1__RGMII_TD1 0x1b030 |
31 | MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b0b0 | 31 | MX6QDL_PAD_RGMII_TD2__RGMII_TD2 0x1b030 |
32 | MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b0b0 | 32 | MX6QDL_PAD_RGMII_TD3__RGMII_TD3 0x1b030 |
33 | MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0 | 33 | MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b030 |
34 | /* AR8035 CLK_25M --> ENET_REF_CLK (V22) */ | 34 | /* AR8035 CLK_25M --> ENET_REF_CLK (V22) */ |
35 | MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x0a0b1 | 35 | MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK 0x0a0b1 |
36 | /* AR8035 pin strapping: IO voltage: pull up */ | 36 | /* AR8035 pin strapping: IO voltage: pull up */ |
37 | MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b0b0 | 37 | MX6QDL_PAD_RGMII_RXC__RGMII_RXC 0x1b030 |
38 | /* AR8035 pin strapping: PHYADDR#0: pull down */ | 38 | /* AR8035 pin strapping: PHYADDR#0: pull down */ |
39 | MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x130b0 | 39 | MX6QDL_PAD_RGMII_RD0__RGMII_RD0 0x13030 |
40 | /* AR8035 pin strapping: PHYADDR#1: pull down */ | 40 | /* AR8035 pin strapping: PHYADDR#1: pull down */ |
41 | MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x130b0 | 41 | MX6QDL_PAD_RGMII_RD1__RGMII_RD1 0x13030 |
42 | /* AR8035 pin strapping: MODE#1: pull up */ | 42 | /* AR8035 pin strapping: MODE#1: pull up */ |
43 | MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b0b0 | 43 | MX6QDL_PAD_RGMII_RD2__RGMII_RD2 0x1b030 |
44 | /* AR8035 pin strapping: MODE#3: pull up */ | 44 | /* AR8035 pin strapping: MODE#3: pull up */ |
45 | MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b0b0 | 45 | MX6QDL_PAD_RGMII_RD3__RGMII_RD3 0x1b030 |
46 | /* AR8035 pin strapping: MODE#0: pull down */ | 46 | /* AR8035 pin strapping: MODE#0: pull down */ |
47 | MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x130b0 | 47 | MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x13030 |
48 | 48 | ||
49 | /* | 49 | /* |
50 | * As the RMII pins are also connected to RGMII | 50 | * As the RMII pins are also connected to RGMII |
diff --git a/arch/arm/boot/dts/imx6qdl.dtsi b/arch/arm/boot/dts/imx6qdl.dtsi index 55cb926fa3f7..eca0971d4db1 100644 --- a/arch/arm/boot/dts/imx6qdl.dtsi +++ b/arch/arm/boot/dts/imx6qdl.dtsi | |||
@@ -10,6 +10,8 @@ | |||
10 | * http://www.gnu.org/copyleft/gpl.html | 10 | * http://www.gnu.org/copyleft/gpl.html |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <dt-bindings/interrupt-controller/arm-gic.h> | ||
14 | |||
13 | #include "skeleton.dtsi" | 15 | #include "skeleton.dtsi" |
14 | 16 | ||
15 | / { | 17 | / { |
@@ -46,8 +48,6 @@ | |||
46 | intc: interrupt-controller@00a01000 { | 48 | intc: interrupt-controller@00a01000 { |
47 | compatible = "arm,cortex-a9-gic"; | 49 | compatible = "arm,cortex-a9-gic"; |
48 | #interrupt-cells = <3>; | 50 | #interrupt-cells = <3>; |
49 | #address-cells = <1>; | ||
50 | #size-cells = <1>; | ||
51 | interrupt-controller; | 51 | interrupt-controller; |
52 | reg = <0x00a01000 0x1000>, | 52 | reg = <0x00a01000 0x1000>, |
53 | <0x00a00100 0x100>; | 53 | <0x00a00100 0x100>; |
@@ -59,16 +59,19 @@ | |||
59 | 59 | ||
60 | ckil { | 60 | ckil { |
61 | compatible = "fsl,imx-ckil", "fixed-clock"; | 61 | compatible = "fsl,imx-ckil", "fixed-clock"; |
62 | #clock-cells = <0>; | ||
62 | clock-frequency = <32768>; | 63 | clock-frequency = <32768>; |
63 | }; | 64 | }; |
64 | 65 | ||
65 | ckih1 { | 66 | ckih1 { |
66 | compatible = "fsl,imx-ckih1", "fixed-clock"; | 67 | compatible = "fsl,imx-ckih1", "fixed-clock"; |
68 | #clock-cells = <0>; | ||
67 | clock-frequency = <0>; | 69 | clock-frequency = <0>; |
68 | }; | 70 | }; |
69 | 71 | ||
70 | osc { | 72 | osc { |
71 | compatible = "fsl,imx-osc", "fixed-clock"; | 73 | compatible = "fsl,imx-osc", "fixed-clock"; |
74 | #clock-cells = <0>; | ||
72 | clock-frequency = <24000000>; | 75 | clock-frequency = <24000000>; |
73 | }; | 76 | }; |
74 | }; | 77 | }; |
@@ -138,6 +141,12 @@ | |||
138 | 0x82000000 0 0x01000000 0x01000000 0 0x00f00000>; /* non-prefetchable memory */ | 141 | 0x82000000 0 0x01000000 0x01000000 0 0x00f00000>; /* non-prefetchable memory */ |
139 | num-lanes = <1>; | 142 | num-lanes = <1>; |
140 | interrupts = <0 123 IRQ_TYPE_LEVEL_HIGH>; | 143 | interrupts = <0 123 IRQ_TYPE_LEVEL_HIGH>; |
144 | #interrupt-cells = <1>; | ||
145 | interrupt-map-mask = <0 0 0 0x7>; | ||
146 | interrupt-map = <0 0 0 1 &intc GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>, | ||
147 | <0 0 0 2 &intc GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>, | ||
148 | <0 0 0 3 &intc GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>, | ||
149 | <0 0 0 4 &intc GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>; | ||
141 | clocks = <&clks 189>, <&clks 187>, <&clks 206>, <&clks 144>; | 150 | clocks = <&clks 189>, <&clks 187>, <&clks 206>, <&clks 144>; |
142 | clock-names = "pcie_ref_125m", "sata_ref_100m", "lvds_gate", "pcie_axi"; | 151 | clock-names = "pcie_ref_125m", "sata_ref_100m", "lvds_gate", "pcie_axi"; |
143 | status = "disabled"; | 152 | status = "disabled"; |
diff --git a/arch/arm/boot/dts/imx6sl-evk.dts b/arch/arm/boot/dts/imx6sl-evk.dts index 864d8dfb51ca..a8d9a93fab85 100644 --- a/arch/arm/boot/dts/imx6sl-evk.dts +++ b/arch/arm/boot/dts/imx6sl-evk.dts | |||
@@ -282,6 +282,7 @@ | |||
282 | MX6SL_PAD_ECSPI1_MISO__ECSPI1_MISO 0x100b1 | 282 | MX6SL_PAD_ECSPI1_MISO__ECSPI1_MISO 0x100b1 |
283 | MX6SL_PAD_ECSPI1_MOSI__ECSPI1_MOSI 0x100b1 | 283 | MX6SL_PAD_ECSPI1_MOSI__ECSPI1_MOSI 0x100b1 |
284 | MX6SL_PAD_ECSPI1_SCLK__ECSPI1_SCLK 0x100b1 | 284 | MX6SL_PAD_ECSPI1_SCLK__ECSPI1_SCLK 0x100b1 |
285 | MX6SL_PAD_ECSPI1_SS0__GPIO4_IO11 0x80000000 | ||
285 | >; | 286 | >; |
286 | }; | 287 | }; |
287 | 288 | ||
diff --git a/arch/arm/boot/dts/imx6sl.dtsi b/arch/arm/boot/dts/imx6sl.dtsi index 3cb4941afeef..d26b099260a3 100644 --- a/arch/arm/boot/dts/imx6sl.dtsi +++ b/arch/arm/boot/dts/imx6sl.dtsi | |||
@@ -68,8 +68,6 @@ | |||
68 | intc: interrupt-controller@00a01000 { | 68 | intc: interrupt-controller@00a01000 { |
69 | compatible = "arm,cortex-a9-gic"; | 69 | compatible = "arm,cortex-a9-gic"; |
70 | #interrupt-cells = <3>; | 70 | #interrupt-cells = <3>; |
71 | #address-cells = <1>; | ||
72 | #size-cells = <1>; | ||
73 | interrupt-controller; | 71 | interrupt-controller; |
74 | reg = <0x00a01000 0x1000>, | 72 | reg = <0x00a01000 0x1000>, |
75 | <0x00a00100 0x100>; | 73 | <0x00a00100 0x100>; |
@@ -81,11 +79,13 @@ | |||
81 | 79 | ||
82 | ckil { | 80 | ckil { |
83 | compatible = "fixed-clock"; | 81 | compatible = "fixed-clock"; |
82 | #clock-cells = <0>; | ||
84 | clock-frequency = <32768>; | 83 | clock-frequency = <32768>; |
85 | }; | 84 | }; |
86 | 85 | ||
87 | osc { | 86 | osc { |
88 | compatible = "fixed-clock"; | 87 | compatible = "fixed-clock"; |
88 | #clock-cells = <0>; | ||
89 | clock-frequency = <24000000>; | 89 | clock-frequency = <24000000>; |
90 | }; | 90 | }; |
91 | }; | 91 | }; |
diff --git a/arch/arm/boot/dts/kirkwood-b3.dts b/arch/arm/boot/dts/kirkwood-b3.dts index 40791053106b..6becedebaa4e 100644 --- a/arch/arm/boot/dts/kirkwood-b3.dts +++ b/arch/arm/boot/dts/kirkwood-b3.dts | |||
@@ -75,7 +75,7 @@ | |||
75 | m25p16@0 { | 75 | m25p16@0 { |
76 | #address-cells = <1>; | 76 | #address-cells = <1>; |
77 | #size-cells = <1>; | 77 | #size-cells = <1>; |
78 | compatible = "m25p16"; | 78 | compatible = "st,m25p16"; |
79 | reg = <0>; | 79 | reg = <0>; |
80 | spi-max-frequency = <40000000>; | 80 | spi-max-frequency = <40000000>; |
81 | mode = <0>; | 81 | mode = <0>; |
diff --git a/arch/arm/boot/dts/kirkwood-cloudbox.dts b/arch/arm/boot/dts/kirkwood-cloudbox.dts index 0e06fd3cee4d..3b62aeeaa3a2 100644 --- a/arch/arm/boot/dts/kirkwood-cloudbox.dts +++ b/arch/arm/boot/dts/kirkwood-cloudbox.dts | |||
@@ -46,7 +46,7 @@ | |||
46 | flash@0 { | 46 | flash@0 { |
47 | #address-cells = <1>; | 47 | #address-cells = <1>; |
48 | #size-cells = <1>; | 48 | #size-cells = <1>; |
49 | compatible = "mx25l4005a"; | 49 | compatible = "mxicy,mx25l4005a"; |
50 | reg = <0>; | 50 | reg = <0>; |
51 | spi-max-frequency = <20000000>; | 51 | spi-max-frequency = <20000000>; |
52 | mode = <0>; | 52 | mode = <0>; |
diff --git a/arch/arm/boot/dts/kirkwood-dreamplug.dts b/arch/arm/boot/dts/kirkwood-dreamplug.dts index ef3463e0ae19..28b3ee369778 100644 --- a/arch/arm/boot/dts/kirkwood-dreamplug.dts +++ b/arch/arm/boot/dts/kirkwood-dreamplug.dts | |||
@@ -43,7 +43,7 @@ | |||
43 | m25p40@0 { | 43 | m25p40@0 { |
44 | #address-cells = <1>; | 44 | #address-cells = <1>; |
45 | #size-cells = <1>; | 45 | #size-cells = <1>; |
46 | compatible = "mx25l1606e"; | 46 | compatible = "mxicy,mx25l1606e"; |
47 | reg = <0>; | 47 | reg = <0>; |
48 | spi-max-frequency = <50000000>; | 48 | spi-max-frequency = <50000000>; |
49 | mode = <0>; | 49 | mode = <0>; |
diff --git a/arch/arm/boot/dts/kirkwood-laplug.dts b/arch/arm/boot/dts/kirkwood-laplug.dts index c9e82eff9bf2..6761ffa2c4ab 100644 --- a/arch/arm/boot/dts/kirkwood-laplug.dts +++ b/arch/arm/boot/dts/kirkwood-laplug.dts | |||
@@ -48,7 +48,7 @@ | |||
48 | status = "okay"; | 48 | status = "okay"; |
49 | 49 | ||
50 | eeprom@50 { | 50 | eeprom@50 { |
51 | compatible = "at,24c04"; | 51 | compatible = "atmel,24c04"; |
52 | pagesize = <16>; | 52 | pagesize = <16>; |
53 | reg = <0x50>; | 53 | reg = <0x50>; |
54 | }; | 54 | }; |
diff --git a/arch/arm/boot/dts/kirkwood-mv88f6281gtw-ge.dts b/arch/arm/boot/dts/kirkwood-mv88f6281gtw-ge.dts index 2cb0dc529165..32c6fb4a1162 100644 --- a/arch/arm/boot/dts/kirkwood-mv88f6281gtw-ge.dts +++ b/arch/arm/boot/dts/kirkwood-mv88f6281gtw-ge.dts | |||
@@ -56,7 +56,7 @@ | |||
56 | flash@0 { | 56 | flash@0 { |
57 | #address-cells = <1>; | 57 | #address-cells = <1>; |
58 | #size-cells = <1>; | 58 | #size-cells = <1>; |
59 | compatible = "mx25l12805d"; | 59 | compatible = "mxicy,mx25l12805d"; |
60 | reg = <0>; | 60 | reg = <0>; |
61 | spi-max-frequency = <50000000>; | 61 | spi-max-frequency = <50000000>; |
62 | mode = <0>; | 62 | mode = <0>; |
diff --git a/arch/arm/boot/dts/kirkwood-ns2-common.dtsi b/arch/arm/boot/dts/kirkwood-ns2-common.dtsi index 743152f31a81..e6e5ec4fe6b9 100644 --- a/arch/arm/boot/dts/kirkwood-ns2-common.dtsi +++ b/arch/arm/boot/dts/kirkwood-ns2-common.dtsi | |||
@@ -32,7 +32,7 @@ | |||
32 | flash@0 { | 32 | flash@0 { |
33 | #address-cells = <1>; | 33 | #address-cells = <1>; |
34 | #size-cells = <1>; | 34 | #size-cells = <1>; |
35 | compatible = "mx25l4005a"; | 35 | compatible = "mxicy,mx25l4005a"; |
36 | reg = <0>; | 36 | reg = <0>; |
37 | spi-max-frequency = <20000000>; | 37 | spi-max-frequency = <20000000>; |
38 | mode = <0>; | 38 | mode = <0>; |
@@ -50,7 +50,7 @@ | |||
50 | status = "okay"; | 50 | status = "okay"; |
51 | 51 | ||
52 | eeprom@50 { | 52 | eeprom@50 { |
53 | compatible = "at,24c04"; | 53 | compatible = "atmel,24c04"; |
54 | pagesize = <16>; | 54 | pagesize = <16>; |
55 | reg = <0x50>; | 55 | reg = <0x50>; |
56 | }; | 56 | }; |
diff --git a/arch/arm/boot/dts/kirkwood-nsa310.dts b/arch/arm/boot/dts/kirkwood-nsa310.dts index 03fa24cf3344..0a07af9d8e58 100644 --- a/arch/arm/boot/dts/kirkwood-nsa310.dts +++ b/arch/arm/boot/dts/kirkwood-nsa310.dts | |||
@@ -104,7 +104,7 @@ | |||
104 | status = "okay"; | 104 | status = "okay"; |
105 | 105 | ||
106 | adt7476: adt7476a@2e { | 106 | adt7476: adt7476a@2e { |
107 | compatible = "adt7476"; | 107 | compatible = "adi,adt7476"; |
108 | reg = <0x2e>; | 108 | reg = <0x2e>; |
109 | }; | 109 | }; |
110 | }; | 110 | }; |
diff --git a/arch/arm/boot/dts/kirkwood-nsa310a.dts b/arch/arm/boot/dts/kirkwood-nsa310a.dts index a5e779452867..27ca6a79c48a 100644 --- a/arch/arm/boot/dts/kirkwood-nsa310a.dts +++ b/arch/arm/boot/dts/kirkwood-nsa310a.dts | |||
@@ -94,7 +94,7 @@ | |||
94 | status = "okay"; | 94 | status = "okay"; |
95 | 95 | ||
96 | lm85: lm85@2e { | 96 | lm85: lm85@2e { |
97 | compatible = "lm85"; | 97 | compatible = "national,lm85"; |
98 | reg = <0x2e>; | 98 | reg = <0x2e>; |
99 | }; | 99 | }; |
100 | }; | 100 | }; |
diff --git a/arch/arm/boot/dts/kirkwood-openblocks_a6.dts b/arch/arm/boot/dts/kirkwood-openblocks_a6.dts index b88da9392c32..0650beafc1de 100644 --- a/arch/arm/boot/dts/kirkwood-openblocks_a6.dts +++ b/arch/arm/boot/dts/kirkwood-openblocks_a6.dts | |||
@@ -40,7 +40,7 @@ | |||
40 | pinctrl-names = "default"; | 40 | pinctrl-names = "default"; |
41 | 41 | ||
42 | s35390a: s35390a@30 { | 42 | s35390a: s35390a@30 { |
43 | compatible = "s35390a"; | 43 | compatible = "sii,s35390a"; |
44 | reg = <0x30>; | 44 | reg = <0x30>; |
45 | }; | 45 | }; |
46 | }; | 46 | }; |
diff --git a/arch/arm/boot/dts/kirkwood-openblocks_a7.dts b/arch/arm/boot/dts/kirkwood-openblocks_a7.dts index b2f7cae06839..38520a287514 100644 --- a/arch/arm/boot/dts/kirkwood-openblocks_a7.dts +++ b/arch/arm/boot/dts/kirkwood-openblocks_a7.dts | |||
@@ -52,7 +52,7 @@ | |||
52 | pinctrl-names = "default"; | 52 | pinctrl-names = "default"; |
53 | 53 | ||
54 | s24c02: s24c02@50 { | 54 | s24c02: s24c02@50 { |
55 | compatible = "24c02"; | 55 | compatible = "atmel,24c02"; |
56 | reg = <0x50>; | 56 | reg = <0x50>; |
57 | }; | 57 | }; |
58 | }; | 58 | }; |
diff --git a/arch/arm/boot/dts/omap3-beagle-xm-ab.dts b/arch/arm/boot/dts/omap3-beagle-xm-ab.dts new file mode 100644 index 000000000000..7ac3bcf59d59 --- /dev/null +++ b/arch/arm/boot/dts/omap3-beagle-xm-ab.dts | |||
@@ -0,0 +1,16 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | |||
9 | #include "omap3-beagle-xm.dts" | ||
10 | |||
11 | / { | ||
12 | /* HS USB Port 2 Power enable was inverted with the xM C */ | ||
13 | hsusb2_power: hsusb2_power_reg { | ||
14 | enable-active-high; | ||
15 | }; | ||
16 | }; | ||
diff --git a/arch/arm/boot/dts/omap3-devkit8000.dts b/arch/arm/boot/dts/omap3-devkit8000.dts index bf5a515a3247..da402f0fdab4 100644 --- a/arch/arm/boot/dts/omap3-devkit8000.dts +++ b/arch/arm/boot/dts/omap3-devkit8000.dts | |||
@@ -112,7 +112,6 @@ | |||
112 | reg = <0 0 0>; /* CS0, offset 0 */ | 112 | reg = <0 0 0>; /* CS0, offset 0 */ |
113 | nand-bus-width = <16>; | 113 | nand-bus-width = <16>; |
114 | 114 | ||
115 | gpmc,device-nand; | ||
116 | gpmc,sync-clk-ps = <0>; | 115 | gpmc,sync-clk-ps = <0>; |
117 | gpmc,cs-on-ns = <0>; | 116 | gpmc,cs-on-ns = <0>; |
118 | gpmc,cs-rd-off-ns = <44>; | 117 | gpmc,cs-rd-off-ns = <44>; |
diff --git a/arch/arm/boot/dts/omap3-lilly-a83x.dtsi b/arch/arm/boot/dts/omap3-lilly-a83x.dtsi index 6369d9f43ca2..cc1dce6978f5 100644 --- a/arch/arm/boot/dts/omap3-lilly-a83x.dtsi +++ b/arch/arm/boot/dts/omap3-lilly-a83x.dtsi | |||
@@ -368,7 +368,6 @@ | |||
368 | /* no elm on omap3 */ | 368 | /* no elm on omap3 */ |
369 | 369 | ||
370 | gpmc,mux-add-data = <0>; | 370 | gpmc,mux-add-data = <0>; |
371 | gpmc,device-nand; | ||
372 | gpmc,device-width = <2>; | 371 | gpmc,device-width = <2>; |
373 | gpmc,wait-pin = <0>; | 372 | gpmc,wait-pin = <0>; |
374 | gpmc,wait-monitoring-ns = <0>; | 373 | gpmc,wait-monitoring-ns = <0>; |
diff --git a/arch/arm/boot/dts/omap3.dtsi b/arch/arm/boot/dts/omap3.dtsi index 5e5790f631eb..acb9019dc437 100644 --- a/arch/arm/boot/dts/omap3.dtsi +++ b/arch/arm/boot/dts/omap3.dtsi | |||
@@ -74,7 +74,7 @@ | |||
74 | /* | 74 | /* |
75 | * XXX: Use a flat representation of the OMAP3 interconnect. | 75 | * XXX: Use a flat representation of the OMAP3 interconnect. |
76 | * The real OMAP interconnect network is quite complex. | 76 | * The real OMAP interconnect network is quite complex. |
77 | * Since that will not bring real advantage to represent that in DT for | 77 | * Since it will not bring real advantage to represent that in DT for |
78 | * the moment, just use a fake OCP bus entry to represent the whole bus | 78 | * the moment, just use a fake OCP bus entry to represent the whole bus |
79 | * hierarchy. | 79 | * hierarchy. |
80 | */ | 80 | */ |
diff --git a/arch/arm/boot/dts/omap4.dtsi b/arch/arm/boot/dts/omap4.dtsi index 27fcac874742..649b5cd38b40 100644 --- a/arch/arm/boot/dts/omap4.dtsi +++ b/arch/arm/boot/dts/omap4.dtsi | |||
@@ -72,7 +72,7 @@ | |||
72 | }; | 72 | }; |
73 | 73 | ||
74 | /* | 74 | /* |
75 | * The soc node represents the soc top level view. It is uses for IPs | 75 | * The soc node represents the soc top level view. It is used for IPs |
76 | * that are not memory mapped in the MPU view or for the MPU itself. | 76 | * that are not memory mapped in the MPU view or for the MPU itself. |
77 | */ | 77 | */ |
78 | soc { | 78 | soc { |
@@ -96,7 +96,7 @@ | |||
96 | /* | 96 | /* |
97 | * XXX: Use a flat representation of the OMAP4 interconnect. | 97 | * XXX: Use a flat representation of the OMAP4 interconnect. |
98 | * The real OMAP interconnect network is quite complex. | 98 | * The real OMAP interconnect network is quite complex. |
99 | * Since that will not bring real advantage to represent that in DT for | 99 | * Since it will not bring real advantage to represent that in DT for |
100 | * the moment, just use a fake OCP bus entry to represent the whole bus | 100 | * the moment, just use a fake OCP bus entry to represent the whole bus |
101 | * hierarchy. | 101 | * hierarchy. |
102 | */ | 102 | */ |
diff --git a/arch/arm/boot/dts/omap5.dtsi b/arch/arm/boot/dts/omap5.dtsi index 6f3de22fb266..f8c9855ce587 100644 --- a/arch/arm/boot/dts/omap5.dtsi +++ b/arch/arm/boot/dts/omap5.dtsi | |||
@@ -93,7 +93,7 @@ | |||
93 | }; | 93 | }; |
94 | 94 | ||
95 | /* | 95 | /* |
96 | * The soc node represents the soc top level view. It is uses for IPs | 96 | * The soc node represents the soc top level view. It is used for IPs |
97 | * that are not memory mapped in the MPU view or for the MPU itself. | 97 | * that are not memory mapped in the MPU view or for the MPU itself. |
98 | */ | 98 | */ |
99 | soc { | 99 | soc { |
@@ -107,7 +107,7 @@ | |||
107 | /* | 107 | /* |
108 | * XXX: Use a flat representation of the OMAP3 interconnect. | 108 | * XXX: Use a flat representation of the OMAP3 interconnect. |
109 | * The real OMAP interconnect network is quite complex. | 109 | * The real OMAP interconnect network is quite complex. |
110 | * Since that will not bring real advantage to represent that in DT for | 110 | * Since it will not bring real advantage to represent that in DT for |
111 | * the moment, just use a fake OCP bus entry to represent the whole bus | 111 | * the moment, just use a fake OCP bus entry to represent the whole bus |
112 | * hierarchy. | 112 | * hierarchy. |
113 | */ | 113 | */ |
@@ -813,6 +813,12 @@ | |||
813 | <0x4a084c00 0x40>; | 813 | <0x4a084c00 0x40>; |
814 | reg-names = "phy_rx", "phy_tx", "pll_ctrl"; | 814 | reg-names = "phy_rx", "phy_tx", "pll_ctrl"; |
815 | ctrl-module = <&omap_control_usb3phy>; | 815 | ctrl-module = <&omap_control_usb3phy>; |
816 | clocks = <&usb_phy_cm_clk32k>, | ||
817 | <&sys_clkin>, | ||
818 | <&usb_otg_ss_refclk960m>; | ||
819 | clock-names = "wkupclk", | ||
820 | "sysclk", | ||
821 | "refclk"; | ||
816 | #phy-cells = <0>; | 822 | #phy-cells = <0>; |
817 | }; | 823 | }; |
818 | }; | 824 | }; |
diff --git a/arch/arm/boot/dts/r8a7740.dtsi b/arch/arm/boot/dts/r8a7740.dtsi index 8280884bfa59..2551e9438d35 100644 --- a/arch/arm/boot/dts/r8a7740.dtsi +++ b/arch/arm/boot/dts/r8a7740.dtsi | |||
@@ -28,7 +28,6 @@ | |||
28 | gic: interrupt-controller@c2800000 { | 28 | gic: interrupt-controller@c2800000 { |
29 | compatible = "arm,cortex-a9-gic"; | 29 | compatible = "arm,cortex-a9-gic"; |
30 | #interrupt-cells = <3>; | 30 | #interrupt-cells = <3>; |
31 | #address-cells = <1>; | ||
32 | interrupt-controller; | 31 | interrupt-controller; |
33 | reg = <0xc2800000 0x1000>, | 32 | reg = <0xc2800000 0x1000>, |
34 | <0xc2000000 0x1000>; | 33 | <0xc2000000 0x1000>; |
diff --git a/arch/arm/boot/dts/r8a7790-lager.dts b/arch/arm/boot/dts/r8a7790-lager.dts index 6e99eb2df076..d01048ab3e77 100644 --- a/arch/arm/boot/dts/r8a7790-lager.dts +++ b/arch/arm/boot/dts/r8a7790-lager.dts | |||
@@ -141,12 +141,12 @@ | |||
141 | }; | 141 | }; |
142 | 142 | ||
143 | sdhi0_pins: sd0 { | 143 | sdhi0_pins: sd0 { |
144 | renesas,gpios = "sdhi0_data4", "sdhi0_ctrl"; | 144 | renesas,groups = "sdhi0_data4", "sdhi0_ctrl"; |
145 | renesas,function = "sdhi0"; | 145 | renesas,function = "sdhi0"; |
146 | }; | 146 | }; |
147 | 147 | ||
148 | sdhi2_pins: sd2 { | 148 | sdhi2_pins: sd2 { |
149 | renesas,gpios = "sdhi2_data4", "sdhi2_ctrl"; | 149 | renesas,groups = "sdhi2_data4", "sdhi2_ctrl"; |
150 | renesas,function = "sdhi2"; | 150 | renesas,function = "sdhi2"; |
151 | }; | 151 | }; |
152 | 152 | ||
diff --git a/arch/arm/boot/dts/r8a7791-koelsch.dts b/arch/arm/boot/dts/r8a7791-koelsch.dts index bdd73e6657b2..de1b6977c69a 100644 --- a/arch/arm/boot/dts/r8a7791-koelsch.dts +++ b/arch/arm/boot/dts/r8a7791-koelsch.dts | |||
@@ -230,17 +230,17 @@ | |||
230 | }; | 230 | }; |
231 | 231 | ||
232 | sdhi0_pins: sd0 { | 232 | sdhi0_pins: sd0 { |
233 | renesas,gpios = "sdhi0_data4", "sdhi0_ctrl"; | 233 | renesas,groups = "sdhi0_data4", "sdhi0_ctrl"; |
234 | renesas,function = "sdhi0"; | 234 | renesas,function = "sdhi0"; |
235 | }; | 235 | }; |
236 | 236 | ||
237 | sdhi1_pins: sd1 { | 237 | sdhi1_pins: sd1 { |
238 | renesas,gpios = "sdhi1_data4", "sdhi1_ctrl"; | 238 | renesas,groups = "sdhi1_data4", "sdhi1_ctrl"; |
239 | renesas,function = "sdhi1"; | 239 | renesas,function = "sdhi1"; |
240 | }; | 240 | }; |
241 | 241 | ||
242 | sdhi2_pins: sd2 { | 242 | sdhi2_pins: sd2 { |
243 | renesas,gpios = "sdhi2_data4", "sdhi2_ctrl"; | 243 | renesas,groups = "sdhi2_data4", "sdhi2_ctrl"; |
244 | renesas,function = "sdhi2"; | 244 | renesas,function = "sdhi2"; |
245 | }; | 245 | }; |
246 | 246 | ||
diff --git a/arch/arm/boot/dts/rk3188.dtsi b/arch/arm/boot/dts/rk3188.dtsi index bb36596ea205..ed9a70af3e3f 100644 --- a/arch/arm/boot/dts/rk3188.dtsi +++ b/arch/arm/boot/dts/rk3188.dtsi | |||
@@ -149,7 +149,7 @@ | |||
149 | 149 | ||
150 | uart0 { | 150 | uart0 { |
151 | uart0_xfer: uart0-xfer { | 151 | uart0_xfer: uart0-xfer { |
152 | rockchip,pins = <RK_GPIO1 0 RK_FUNC_1 &pcfg_pull_none>, | 152 | rockchip,pins = <RK_GPIO1 0 RK_FUNC_1 &pcfg_pull_up>, |
153 | <RK_GPIO1 1 RK_FUNC_1 &pcfg_pull_none>; | 153 | <RK_GPIO1 1 RK_FUNC_1 &pcfg_pull_none>; |
154 | }; | 154 | }; |
155 | 155 | ||
@@ -164,7 +164,7 @@ | |||
164 | 164 | ||
165 | uart1 { | 165 | uart1 { |
166 | uart1_xfer: uart1-xfer { | 166 | uart1_xfer: uart1-xfer { |
167 | rockchip,pins = <RK_GPIO1 4 RK_FUNC_1 &pcfg_pull_none>, | 167 | rockchip,pins = <RK_GPIO1 4 RK_FUNC_1 &pcfg_pull_up>, |
168 | <RK_GPIO1 5 RK_FUNC_1 &pcfg_pull_none>; | 168 | <RK_GPIO1 5 RK_FUNC_1 &pcfg_pull_none>; |
169 | }; | 169 | }; |
170 | 170 | ||
@@ -179,7 +179,7 @@ | |||
179 | 179 | ||
180 | uart2 { | 180 | uart2 { |
181 | uart2_xfer: uart2-xfer { | 181 | uart2_xfer: uart2-xfer { |
182 | rockchip,pins = <RK_GPIO1 8 RK_FUNC_1 &pcfg_pull_none>, | 182 | rockchip,pins = <RK_GPIO1 8 RK_FUNC_1 &pcfg_pull_up>, |
183 | <RK_GPIO1 9 RK_FUNC_1 &pcfg_pull_none>; | 183 | <RK_GPIO1 9 RK_FUNC_1 &pcfg_pull_none>; |
184 | }; | 184 | }; |
185 | /* no rts / cts for uart2 */ | 185 | /* no rts / cts for uart2 */ |
@@ -187,7 +187,7 @@ | |||
187 | 187 | ||
188 | uart3 { | 188 | uart3 { |
189 | uart3_xfer: uart3-xfer { | 189 | uart3_xfer: uart3-xfer { |
190 | rockchip,pins = <RK_GPIO1 10 RK_FUNC_1 &pcfg_pull_none>, | 190 | rockchip,pins = <RK_GPIO1 10 RK_FUNC_1 &pcfg_pull_up>, |
191 | <RK_GPIO1 11 RK_FUNC_1 &pcfg_pull_none>; | 191 | <RK_GPIO1 11 RK_FUNC_1 &pcfg_pull_none>; |
192 | }; | 192 | }; |
193 | 193 | ||
diff --git a/arch/arm/boot/dts/sh73a0.dtsi b/arch/arm/boot/dts/sh73a0.dtsi index b7bd3b9a6753..5ecf552e1c00 100644 --- a/arch/arm/boot/dts/sh73a0.dtsi +++ b/arch/arm/boot/dts/sh73a0.dtsi | |||
@@ -34,7 +34,6 @@ | |||
34 | gic: interrupt-controller@f0001000 { | 34 | gic: interrupt-controller@f0001000 { |
35 | compatible = "arm,cortex-a9-gic"; | 35 | compatible = "arm,cortex-a9-gic"; |
36 | #interrupt-cells = <3>; | 36 | #interrupt-cells = <3>; |
37 | #address-cells = <1>; | ||
38 | interrupt-controller; | 37 | interrupt-controller; |
39 | reg = <0xf0001000 0x1000>, | 38 | reg = <0xf0001000 0x1000>, |
40 | <0xf0000100 0x100>; | 39 | <0xf0000100 0x100>; |
diff --git a/arch/arm/boot/dts/spear320-hmi.dts b/arch/arm/boot/dts/spear320-hmi.dts index 3075d2d3a8be..0aa6fef5ce22 100644 --- a/arch/arm/boot/dts/spear320-hmi.dts +++ b/arch/arm/boot/dts/spear320-hmi.dts | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * DTS file for SPEAr320 Evaluation Baord | 2 | * DTS file for SPEAr320 Evaluation Baord |
3 | * | 3 | * |
4 | * Copyright 2012 Shiraz Hashim <shiraz.hashim@st.com> | 4 | * Copyright 2012 Shiraz Hashim <shiraz.linux.kernel@gmail.com> |
5 | * | 5 | * |
6 | * The code contained herein is licensed under the GNU General Public | 6 | * The code contained herein is licensed under the GNU General Public |
7 | * License. You may obtain a copy of the GNU General Public License | 7 | * License. You may obtain a copy of the GNU General Public License |
diff --git a/arch/arm/boot/dts/stih415-pinctrl.dtsi b/arch/arm/boot/dts/stih415-pinctrl.dtsi index f09fb10a3791..81df870e5ee6 100644 --- a/arch/arm/boot/dts/stih415-pinctrl.dtsi +++ b/arch/arm/boot/dts/stih415-pinctrl.dtsi | |||
@@ -49,7 +49,7 @@ | |||
49 | reg = <0xfe61f080 0x4>; | 49 | reg = <0xfe61f080 0x4>; |
50 | reg-names = "irqmux"; | 50 | reg-names = "irqmux"; |
51 | interrupts = <GIC_SPI 180 IRQ_TYPE_LEVEL_HIGH>; | 51 | interrupts = <GIC_SPI 180 IRQ_TYPE_LEVEL_HIGH>; |
52 | interrupts-names = "irqmux"; | 52 | interrupt-names = "irqmux"; |
53 | ranges = <0 0xfe610000 0x5000>; | 53 | ranges = <0 0xfe610000 0x5000>; |
54 | 54 | ||
55 | PIO0: gpio@fe610000 { | 55 | PIO0: gpio@fe610000 { |
@@ -187,7 +187,7 @@ | |||
187 | reg = <0xfee0f080 0x4>; | 187 | reg = <0xfee0f080 0x4>; |
188 | reg-names = "irqmux"; | 188 | reg-names = "irqmux"; |
189 | interrupts = <GIC_SPI 181 IRQ_TYPE_LEVEL_HIGH>; | 189 | interrupts = <GIC_SPI 181 IRQ_TYPE_LEVEL_HIGH>; |
190 | interrupts-names = "irqmux"; | 190 | interrupt-names = "irqmux"; |
191 | ranges = <0 0xfee00000 0x8000>; | 191 | ranges = <0 0xfee00000 0x8000>; |
192 | 192 | ||
193 | PIO5: gpio@fee00000 { | 193 | PIO5: gpio@fee00000 { |
@@ -282,7 +282,7 @@ | |||
282 | reg = <0xfe82f080 0x4>; | 282 | reg = <0xfe82f080 0x4>; |
283 | reg-names = "irqmux"; | 283 | reg-names = "irqmux"; |
284 | interrupts = <GIC_SPI 182 IRQ_TYPE_LEVEL_HIGH>; | 284 | interrupts = <GIC_SPI 182 IRQ_TYPE_LEVEL_HIGH>; |
285 | interrupts-names = "irqmux"; | 285 | interrupt-names = "irqmux"; |
286 | ranges = <0 0xfe820000 0x8000>; | 286 | ranges = <0 0xfe820000 0x8000>; |
287 | 287 | ||
288 | PIO13: gpio@fe820000 { | 288 | PIO13: gpio@fe820000 { |
@@ -423,7 +423,7 @@ | |||
423 | reg = <0xfd6bf080 0x4>; | 423 | reg = <0xfd6bf080 0x4>; |
424 | reg-names = "irqmux"; | 424 | reg-names = "irqmux"; |
425 | interrupts = <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>; | 425 | interrupts = <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>; |
426 | interrupts-names = "irqmux"; | 426 | interrupt-names = "irqmux"; |
427 | ranges = <0 0xfd6b0000 0x3000>; | 427 | ranges = <0 0xfd6b0000 0x3000>; |
428 | 428 | ||
429 | PIO100: gpio@fd6b0000 { | 429 | PIO100: gpio@fd6b0000 { |
@@ -460,7 +460,7 @@ | |||
460 | reg = <0xfd33f080 0x4>; | 460 | reg = <0xfd33f080 0x4>; |
461 | reg-names = "irqmux"; | 461 | reg-names = "irqmux"; |
462 | interrupts = <GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH>; | 462 | interrupts = <GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH>; |
463 | interrupts-names = "irqmux"; | 463 | interrupt-names = "irqmux"; |
464 | ranges = <0 0xfd330000 0x5000>; | 464 | ranges = <0 0xfd330000 0x5000>; |
465 | 465 | ||
466 | PIO103: gpio@fd330000 { | 466 | PIO103: gpio@fd330000 { |
diff --git a/arch/arm/boot/dts/stih416-pinctrl.dtsi b/arch/arm/boot/dts/stih416-pinctrl.dtsi index aeea304086eb..250d5ecc951e 100644 --- a/arch/arm/boot/dts/stih416-pinctrl.dtsi +++ b/arch/arm/boot/dts/stih416-pinctrl.dtsi | |||
@@ -53,7 +53,7 @@ | |||
53 | reg = <0xfe61f080 0x4>; | 53 | reg = <0xfe61f080 0x4>; |
54 | reg-names = "irqmux"; | 54 | reg-names = "irqmux"; |
55 | interrupts = <GIC_SPI 182 IRQ_TYPE_LEVEL_HIGH>; | 55 | interrupts = <GIC_SPI 182 IRQ_TYPE_LEVEL_HIGH>; |
56 | interrupts-names = "irqmux"; | 56 | interrupt-names = "irqmux"; |
57 | ranges = <0 0xfe610000 0x6000>; | 57 | ranges = <0 0xfe610000 0x6000>; |
58 | 58 | ||
59 | PIO0: gpio@fe610000 { | 59 | PIO0: gpio@fe610000 { |
@@ -201,7 +201,7 @@ | |||
201 | reg = <0xfee0f080 0x4>; | 201 | reg = <0xfee0f080 0x4>; |
202 | reg-names = "irqmux"; | 202 | reg-names = "irqmux"; |
203 | interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; | 203 | interrupts = <GIC_SPI 183 IRQ_TYPE_LEVEL_HIGH>; |
204 | interrupts-names = "irqmux"; | 204 | interrupt-names = "irqmux"; |
205 | ranges = <0 0xfee00000 0x10000>; | 205 | ranges = <0 0xfee00000 0x10000>; |
206 | 206 | ||
207 | PIO5: gpio@fee00000 { | 207 | PIO5: gpio@fee00000 { |
@@ -333,7 +333,7 @@ | |||
333 | reg = <0xfe82f080 0x4>; | 333 | reg = <0xfe82f080 0x4>; |
334 | reg-names = "irqmux"; | 334 | reg-names = "irqmux"; |
335 | interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; | 335 | interrupts = <GIC_SPI 184 IRQ_TYPE_LEVEL_HIGH>; |
336 | interrupts-names = "irqmux"; | 336 | interrupt-names = "irqmux"; |
337 | ranges = <0 0xfe820000 0x6000>; | 337 | ranges = <0 0xfe820000 0x6000>; |
338 | 338 | ||
339 | PIO13: gpio@fe820000 { | 339 | PIO13: gpio@fe820000 { |
@@ -461,7 +461,7 @@ | |||
461 | reg = <0xfd6bf080 0x4>; | 461 | reg = <0xfd6bf080 0x4>; |
462 | reg-names = "irqmux"; | 462 | reg-names = "irqmux"; |
463 | interrupts = <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>; | 463 | interrupts = <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>; |
464 | interrupts-names = "irqmux"; | 464 | interrupt-names = "irqmux"; |
465 | ranges = <0 0xfd6b0000 0x3000>; | 465 | ranges = <0 0xfd6b0000 0x3000>; |
466 | 466 | ||
467 | PIO100: gpio@fd6b0000 { | 467 | PIO100: gpio@fd6b0000 { |
@@ -498,7 +498,7 @@ | |||
498 | reg = <0xfd33f080 0x4>; | 498 | reg = <0xfd33f080 0x4>; |
499 | reg-names = "irqmux"; | 499 | reg-names = "irqmux"; |
500 | interrupts = <GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH>; | 500 | interrupts = <GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH>; |
501 | interrupts-names = "irqmux"; | 501 | interrupt-names = "irqmux"; |
502 | ranges = <0 0xfd330000 0x5000>; | 502 | ranges = <0 0xfd330000 0x5000>; |
503 | 503 | ||
504 | PIO103: gpio@fd330000 { | 504 | PIO103: gpio@fd330000 { |
diff --git a/arch/arm/boot/dts/tegra124.dtsi b/arch/arm/boot/dts/tegra124.dtsi index cf45a1a39483..6d540a025148 100644 --- a/arch/arm/boot/dts/tegra124.dtsi +++ b/arch/arm/boot/dts/tegra124.dtsi | |||
@@ -233,19 +233,6 @@ | |||
233 | status = "disabled"; | 233 | status = "disabled"; |
234 | }; | 234 | }; |
235 | 235 | ||
236 | serial@0,70006400 { | ||
237 | compatible = "nvidia,tegra124-uart", "nvidia,tegra20-uart"; | ||
238 | reg = <0x0 0x70006400 0x0 0x40>; | ||
239 | reg-shift = <2>; | ||
240 | interrupts = <GIC_SPI 91 IRQ_TYPE_LEVEL_HIGH>; | ||
241 | clocks = <&tegra_car TEGRA124_CLK_UARTE>; | ||
242 | resets = <&tegra_car 66>; | ||
243 | reset-names = "serial"; | ||
244 | dmas = <&apbdma 20>, <&apbdma 20>; | ||
245 | dma-names = "rx", "tx"; | ||
246 | status = "disabled"; | ||
247 | }; | ||
248 | |||
249 | pwm@0,7000a000 { | 236 | pwm@0,7000a000 { |
250 | compatible = "nvidia,tegra124-pwm", "nvidia,tegra20-pwm"; | 237 | compatible = "nvidia,tegra124-pwm", "nvidia,tegra20-pwm"; |
251 | reg = <0x0 0x7000a000 0x0 0x100>; | 238 | reg = <0x0 0x7000a000 0x0 0x100>; |
diff --git a/arch/arm/boot/dts/vf610-twr.dts b/arch/arm/boot/dts/vf610-twr.dts index 7dd1d6ede525..ded361075aab 100644 --- a/arch/arm/boot/dts/vf610-twr.dts +++ b/arch/arm/boot/dts/vf610-twr.dts | |||
@@ -25,11 +25,13 @@ | |||
25 | clocks { | 25 | clocks { |
26 | audio_ext { | 26 | audio_ext { |
27 | compatible = "fixed-clock"; | 27 | compatible = "fixed-clock"; |
28 | #clock-cells = <0>; | ||
28 | clock-frequency = <24576000>; | 29 | clock-frequency = <24576000>; |
29 | }; | 30 | }; |
30 | 31 | ||
31 | enet_ext { | 32 | enet_ext { |
32 | compatible = "fixed-clock"; | 33 | compatible = "fixed-clock"; |
34 | #clock-cells = <0>; | ||
33 | clock-frequency = <50000000>; | 35 | clock-frequency = <50000000>; |
34 | }; | 36 | }; |
35 | }; | 37 | }; |
diff --git a/arch/arm/boot/dts/vf610.dtsi b/arch/arm/boot/dts/vf610.dtsi index 804873367669..b8ce0aa7b157 100644 --- a/arch/arm/boot/dts/vf610.dtsi +++ b/arch/arm/boot/dts/vf610.dtsi | |||
@@ -45,11 +45,13 @@ | |||
45 | 45 | ||
46 | sxosc { | 46 | sxosc { |
47 | compatible = "fixed-clock"; | 47 | compatible = "fixed-clock"; |
48 | #clock-cells = <0>; | ||
48 | clock-frequency = <32768>; | 49 | clock-frequency = <32768>; |
49 | }; | 50 | }; |
50 | 51 | ||
51 | fxosc { | 52 | fxosc { |
52 | compatible = "fixed-clock"; | 53 | compatible = "fixed-clock"; |
54 | #clock-cells = <0>; | ||
53 | clock-frequency = <24000000>; | 55 | clock-frequency = <24000000>; |
54 | }; | 56 | }; |
55 | }; | 57 | }; |
@@ -72,8 +74,6 @@ | |||
72 | intc: interrupt-controller@40002000 { | 74 | intc: interrupt-controller@40002000 { |
73 | compatible = "arm,cortex-a9-gic"; | 75 | compatible = "arm,cortex-a9-gic"; |
74 | #interrupt-cells = <3>; | 76 | #interrupt-cells = <3>; |
75 | #address-cells = <1>; | ||
76 | #size-cells = <1>; | ||
77 | interrupt-controller; | 77 | interrupt-controller; |
78 | reg = <0x40003000 0x1000>, | 78 | reg = <0x40003000 0x1000>, |
79 | <0x40002100 0x100>; | 79 | <0x40002100 0x100>; |
diff --git a/arch/arm/boot/dts/zynq-7000.dtsi b/arch/arm/boot/dts/zynq-7000.dtsi index 511180769af5..c1176abc34d9 100644 --- a/arch/arm/boot/dts/zynq-7000.dtsi +++ b/arch/arm/boot/dts/zynq-7000.dtsi | |||
@@ -24,6 +24,7 @@ | |||
24 | device_type = "cpu"; | 24 | device_type = "cpu"; |
25 | reg = <0>; | 25 | reg = <0>; |
26 | clocks = <&clkc 3>; | 26 | clocks = <&clkc 3>; |
27 | clock-latency = <1000>; | ||
27 | operating-points = < | 28 | operating-points = < |
28 | /* kHz uV */ | 29 | /* kHz uV */ |
29 | 666667 1000000 | 30 | 666667 1000000 |
@@ -54,6 +55,28 @@ | |||
54 | interrupt-parent = <&intc>; | 55 | interrupt-parent = <&intc>; |
55 | ranges; | 56 | ranges; |
56 | 57 | ||
58 | i2c0: zynq-i2c@e0004000 { | ||
59 | compatible = "cdns,i2c-r1p10"; | ||
60 | status = "disabled"; | ||
61 | clocks = <&clkc 38>; | ||
62 | interrupt-parent = <&intc>; | ||
63 | interrupts = <0 25 4>; | ||
64 | reg = <0xe0004000 0x1000>; | ||
65 | #address-cells = <1>; | ||
66 | #size-cells = <0>; | ||
67 | }; | ||
68 | |||
69 | i2c1: zynq-i2c@e0005000 { | ||
70 | compatible = "cdns,i2c-r1p10"; | ||
71 | status = "disabled"; | ||
72 | clocks = <&clkc 39>; | ||
73 | interrupt-parent = <&intc>; | ||
74 | interrupts = <0 48 4>; | ||
75 | reg = <0xe0005000 0x1000>; | ||
76 | #address-cells = <1>; | ||
77 | #size-cells = <0>; | ||
78 | }; | ||
79 | |||
57 | intc: interrupt-controller@f8f01000 { | 80 | intc: interrupt-controller@f8f01000 { |
58 | compatible = "arm,cortex-a9-gic"; | 81 | compatible = "arm,cortex-a9-gic"; |
59 | #interrupt-cells = <3>; | 82 | #interrupt-cells = <3>; |
diff --git a/arch/arm/boot/dts/zynq-zc702.dts b/arch/arm/boot/dts/zynq-zc702.dts index c913f77a21eb..5e09cee33d42 100644 --- a/arch/arm/boot/dts/zynq-zc702.dts +++ b/arch/arm/boot/dts/zynq-zc702.dts | |||
@@ -34,6 +34,82 @@ | |||
34 | phy-mode = "rgmii"; | 34 | phy-mode = "rgmii"; |
35 | }; | 35 | }; |
36 | 36 | ||
37 | &i2c0 { | ||
38 | status = "okay"; | ||
39 | clock-frequency = <400000>; | ||
40 | |||
41 | i2cswitch@74 { | ||
42 | compatible = "nxp,pca9548"; | ||
43 | #address-cells = <1>; | ||
44 | #size-cells = <0>; | ||
45 | reg = <0x74>; | ||
46 | |||
47 | i2c@0 { | ||
48 | #address-cells = <1>; | ||
49 | #size-cells = <0>; | ||
50 | reg = <0>; | ||
51 | si570: clock-generator@5d { | ||
52 | #clock-cells = <0>; | ||
53 | compatible = "silabs,si570"; | ||
54 | temperature-stability = <50>; | ||
55 | reg = <0x5d>; | ||
56 | factory-fout = <156250000>; | ||
57 | clock-frequency = <148500000>; | ||
58 | }; | ||
59 | }; | ||
60 | |||
61 | i2c@2 { | ||
62 | #address-cells = <1>; | ||
63 | #size-cells = <0>; | ||
64 | reg = <2>; | ||
65 | eeprom@54 { | ||
66 | compatible = "at,24c08"; | ||
67 | reg = <0x54>; | ||
68 | }; | ||
69 | }; | ||
70 | |||
71 | i2c@3 { | ||
72 | #address-cells = <1>; | ||
73 | #size-cells = <0>; | ||
74 | reg = <3>; | ||
75 | gpio@21 { | ||
76 | compatible = "ti,tca6416"; | ||
77 | reg = <0x21>; | ||
78 | gpio-controller; | ||
79 | #gpio-cells = <2>; | ||
80 | }; | ||
81 | }; | ||
82 | |||
83 | i2c@4 { | ||
84 | #address-cells = <1>; | ||
85 | #size-cells = <0>; | ||
86 | reg = <4>; | ||
87 | rtc@51 { | ||
88 | compatible = "nxp,pcf8563"; | ||
89 | reg = <0x51>; | ||
90 | }; | ||
91 | }; | ||
92 | |||
93 | i2c@7 { | ||
94 | #address-cells = <1>; | ||
95 | #size-cells = <0>; | ||
96 | reg = <7>; | ||
97 | hwmon@52 { | ||
98 | compatible = "ti,ucd9248"; | ||
99 | reg = <52>; | ||
100 | }; | ||
101 | hwmon@53 { | ||
102 | compatible = "ti,ucd9248"; | ||
103 | reg = <53>; | ||
104 | }; | ||
105 | hwmon@54 { | ||
106 | compatible = "ti,ucd9248"; | ||
107 | reg = <54>; | ||
108 | }; | ||
109 | }; | ||
110 | }; | ||
111 | }; | ||
112 | |||
37 | &sdhci0 { | 113 | &sdhci0 { |
38 | status = "okay"; | 114 | status = "okay"; |
39 | }; | 115 | }; |
diff --git a/arch/arm/boot/dts/zynq-zc706.dts b/arch/arm/boot/dts/zynq-zc706.dts index 88f62c50382e..4cc9913078cd 100644 --- a/arch/arm/boot/dts/zynq-zc706.dts +++ b/arch/arm/boot/dts/zynq-zc706.dts | |||
@@ -35,6 +35,74 @@ | |||
35 | phy-mode = "rgmii"; | 35 | phy-mode = "rgmii"; |
36 | }; | 36 | }; |
37 | 37 | ||
38 | &i2c0 { | ||
39 | status = "okay"; | ||
40 | clock-frequency = <400000>; | ||
41 | |||
42 | i2cswitch@74 { | ||
43 | compatible = "nxp,pca9548"; | ||
44 | #address-cells = <1>; | ||
45 | #size-cells = <0>; | ||
46 | reg = <0x74>; | ||
47 | |||
48 | i2c@0 { | ||
49 | #address-cells = <1>; | ||
50 | #size-cells = <0>; | ||
51 | reg = <0>; | ||
52 | si570: clock-generator@5d { | ||
53 | #clock-cells = <0>; | ||
54 | compatible = "silabs,si570"; | ||
55 | temperature-stability = <50>; | ||
56 | reg = <0x5d>; | ||
57 | factory-fout = <156250000>; | ||
58 | clock-frequency = <148500000>; | ||
59 | }; | ||
60 | }; | ||
61 | |||
62 | i2c@2 { | ||
63 | #address-cells = <1>; | ||
64 | #size-cells = <0>; | ||
65 | reg = <2>; | ||
66 | eeprom@54 { | ||
67 | compatible = "at,24c08"; | ||
68 | reg = <0x54>; | ||
69 | }; | ||
70 | }; | ||
71 | |||
72 | i2c@3 { | ||
73 | #address-cells = <1>; | ||
74 | #size-cells = <0>; | ||
75 | reg = <3>; | ||
76 | gpio@21 { | ||
77 | compatible = "ti,tca6416"; | ||
78 | reg = <0x21>; | ||
79 | gpio-controller; | ||
80 | #gpio-cells = <2>; | ||
81 | }; | ||
82 | }; | ||
83 | |||
84 | i2c@4 { | ||
85 | #address-cells = <1>; | ||
86 | #size-cells = <0>; | ||
87 | reg = <4>; | ||
88 | rtc@51 { | ||
89 | compatible = "nxp,pcf8563"; | ||
90 | reg = <0x51>; | ||
91 | }; | ||
92 | }; | ||
93 | |||
94 | i2c@7 { | ||
95 | #address-cells = <1>; | ||
96 | #size-cells = <0>; | ||
97 | reg = <7>; | ||
98 | ucd90120@65 { | ||
99 | compatible = "ti,ucd90120"; | ||
100 | reg = <0x65>; | ||
101 | }; | ||
102 | }; | ||
103 | }; | ||
104 | }; | ||
105 | |||
38 | &sdhci0 { | 106 | &sdhci0 { |
39 | status = "okay"; | 107 | status = "okay"; |
40 | }; | 108 | }; |
diff --git a/arch/arm/common/bL_switcher.c b/arch/arm/common/bL_switcher.c index 5774b6ea7ad5..f01c0ee0c87e 100644 --- a/arch/arm/common/bL_switcher.c +++ b/arch/arm/common/bL_switcher.c | |||
@@ -797,10 +797,8 @@ static int __init bL_switcher_init(void) | |||
797 | { | 797 | { |
798 | int ret; | 798 | int ret; |
799 | 799 | ||
800 | if (MAX_NR_CLUSTERS != 2) { | 800 | if (!mcpm_is_available()) |
801 | pr_err("%s: only dual cluster systems are supported\n", __func__); | 801 | return -ENODEV; |
802 | return -EINVAL; | ||
803 | } | ||
804 | 802 | ||
805 | cpu_notifier(bL_switcher_hotplug_callback, 0); | 803 | cpu_notifier(bL_switcher_hotplug_callback, 0); |
806 | 804 | ||
diff --git a/arch/arm/common/mcpm_entry.c b/arch/arm/common/mcpm_entry.c index 1e361abc29eb..86fd60fefbc9 100644 --- a/arch/arm/common/mcpm_entry.c +++ b/arch/arm/common/mcpm_entry.c | |||
@@ -48,6 +48,11 @@ int __init mcpm_platform_register(const struct mcpm_platform_ops *ops) | |||
48 | return 0; | 48 | return 0; |
49 | } | 49 | } |
50 | 50 | ||
51 | bool mcpm_is_available(void) | ||
52 | { | ||
53 | return (platform_ops) ? true : false; | ||
54 | } | ||
55 | |||
51 | int mcpm_cpu_power_up(unsigned int cpu, unsigned int cluster) | 56 | int mcpm_cpu_power_up(unsigned int cpu, unsigned int cluster) |
52 | { | 57 | { |
53 | if (!platform_ops) | 58 | if (!platform_ops) |
diff --git a/arch/arm/configs/bcm_defconfig b/arch/arm/configs/bcm_defconfig index 01004640ee4d..3df3f3a79ef4 100644 --- a/arch/arm/configs/bcm_defconfig +++ b/arch/arm/configs/bcm_defconfig | |||
@@ -132,7 +132,7 @@ CONFIG_CRC_ITU_T=y | |||
132 | CONFIG_CRC7=y | 132 | CONFIG_CRC7=y |
133 | CONFIG_XZ_DEC=y | 133 | CONFIG_XZ_DEC=y |
134 | CONFIG_AVERAGE=y | 134 | CONFIG_AVERAGE=y |
135 | CONFIG_PINCTRL_CAPRI=y | 135 | CONFIG_PINCTRL_BCM281XX=y |
136 | CONFIG_WATCHDOG=y | 136 | CONFIG_WATCHDOG=y |
137 | CONFIG_BCM_KONA_WDT=y | 137 | CONFIG_BCM_KONA_WDT=y |
138 | CONFIG_BCM_KONA_WDT_DEBUG=y | 138 | CONFIG_BCM_KONA_WDT_DEBUG=y |
diff --git a/arch/arm/configs/exynos_defconfig b/arch/arm/configs/exynos_defconfig index 4ce7b70ea901..e07a227ec0db 100644 --- a/arch/arm/configs/exynos_defconfig +++ b/arch/arm/configs/exynos_defconfig | |||
@@ -65,6 +65,7 @@ CONFIG_TCG_TIS_I2C_INFINEON=y | |||
65 | CONFIG_I2C=y | 65 | CONFIG_I2C=y |
66 | CONFIG_I2C_MUX=y | 66 | CONFIG_I2C_MUX=y |
67 | CONFIG_I2C_ARB_GPIO_CHALLENGE=y | 67 | CONFIG_I2C_ARB_GPIO_CHALLENGE=y |
68 | CONFIG_I2C_EXYNOS5=y | ||
68 | CONFIG_I2C_S3C2410=y | 69 | CONFIG_I2C_S3C2410=y |
69 | CONFIG_DEBUG_GPIO=y | 70 | CONFIG_DEBUG_GPIO=y |
70 | # CONFIG_HWMON is not set | 71 | # CONFIG_HWMON is not set |
diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig index a9667957b757..a4e8d017f25b 100644 --- a/arch/arm/configs/omap2plus_defconfig +++ b/arch/arm/configs/omap2plus_defconfig | |||
@@ -226,7 +226,7 @@ CONFIG_USB_DWC3=m | |||
226 | CONFIG_USB_TEST=y | 226 | CONFIG_USB_TEST=y |
227 | CONFIG_NOP_USB_XCEIV=y | 227 | CONFIG_NOP_USB_XCEIV=y |
228 | CONFIG_OMAP_USB2=y | 228 | CONFIG_OMAP_USB2=y |
229 | CONFIG_OMAP_USB3=y | 229 | CONFIG_TI_PIPE3=y |
230 | CONFIG_AM335X_PHY_USB=y | 230 | CONFIG_AM335X_PHY_USB=y |
231 | CONFIG_USB_GADGET=y | 231 | CONFIG_USB_GADGET=y |
232 | CONFIG_USB_GADGET_DEBUG=y | 232 | CONFIG_USB_GADGET_DEBUG=y |
diff --git a/arch/arm/configs/u300_defconfig b/arch/arm/configs/u300_defconfig index fd81a1b99cce..aaa95ab606a8 100644 --- a/arch/arm/configs/u300_defconfig +++ b/arch/arm/configs/u300_defconfig | |||
@@ -11,6 +11,7 @@ CONFIG_MODULES=y | |||
11 | CONFIG_MODULE_UNLOAD=y | 11 | CONFIG_MODULE_UNLOAD=y |
12 | # CONFIG_LBDAF is not set | 12 | # CONFIG_LBDAF is not set |
13 | # CONFIG_BLK_DEV_BSG is not set | 13 | # CONFIG_BLK_DEV_BSG is not set |
14 | CONFIG_PARTITION_ADVANCED=y | ||
14 | # CONFIG_IOSCHED_CFQ is not set | 15 | # CONFIG_IOSCHED_CFQ is not set |
15 | # CONFIG_ARCH_MULTI_V7 is not set | 16 | # CONFIG_ARCH_MULTI_V7 is not set |
16 | CONFIG_ARCH_U300=y | 17 | CONFIG_ARCH_U300=y |
@@ -21,7 +22,6 @@ CONFIG_ZBOOT_ROM_TEXT=0x0 | |||
21 | CONFIG_ZBOOT_ROM_BSS=0x0 | 22 | CONFIG_ZBOOT_ROM_BSS=0x0 |
22 | CONFIG_CMDLINE="root=/dev/ram0 rw rootfstype=rootfs console=ttyAMA0,115200n8 lpj=515072" | 23 | CONFIG_CMDLINE="root=/dev/ram0 rw rootfstype=rootfs console=ttyAMA0,115200n8 lpj=515072" |
23 | CONFIG_CPU_IDLE=y | 24 | CONFIG_CPU_IDLE=y |
24 | CONFIG_FPE_NWFPE=y | ||
25 | # CONFIG_SUSPEND is not set | 25 | # CONFIG_SUSPEND is not set |
26 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 26 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
27 | # CONFIG_PREVENT_FIRMWARE_BUILD is not set | 27 | # CONFIG_PREVENT_FIRMWARE_BUILD is not set |
@@ -64,8 +64,8 @@ CONFIG_TMPFS=y | |||
64 | CONFIG_NLS_CODEPAGE_437=y | 64 | CONFIG_NLS_CODEPAGE_437=y |
65 | CONFIG_NLS_ISO8859_1=y | 65 | CONFIG_NLS_ISO8859_1=y |
66 | CONFIG_PRINTK_TIME=y | 66 | CONFIG_PRINTK_TIME=y |
67 | CONFIG_DEBUG_INFO=y | ||
67 | CONFIG_DEBUG_FS=y | 68 | CONFIG_DEBUG_FS=y |
68 | # CONFIG_SCHED_DEBUG is not set | 69 | # CONFIG_SCHED_DEBUG is not set |
69 | CONFIG_TIMER_STATS=y | 70 | CONFIG_TIMER_STATS=y |
70 | # CONFIG_DEBUG_PREEMPT is not set | 71 | # CONFIG_DEBUG_PREEMPT is not set |
71 | CONFIG_DEBUG_INFO=y | ||
diff --git a/arch/arm/configs/u8500_defconfig b/arch/arm/configs/u8500_defconfig index 65f77885c167..d219d6a43238 100644 --- a/arch/arm/configs/u8500_defconfig +++ b/arch/arm/configs/u8500_defconfig | |||
@@ -1,16 +1,16 @@ | |||
1 | # CONFIG_SWAP is not set | 1 | # CONFIG_SWAP is not set |
2 | CONFIG_SYSVIPC=y | 2 | CONFIG_SYSVIPC=y |
3 | CONFIG_NO_HZ=y | 3 | CONFIG_NO_HZ_IDLE=y |
4 | CONFIG_HIGH_RES_TIMERS=y | 4 | CONFIG_HIGH_RES_TIMERS=y |
5 | CONFIG_BLK_DEV_INITRD=y | 5 | CONFIG_BLK_DEV_INITRD=y |
6 | CONFIG_KALLSYMS_ALL=y | 6 | CONFIG_KALLSYMS_ALL=y |
7 | CONFIG_MODULES=y | 7 | CONFIG_MODULES=y |
8 | CONFIG_MODULE_UNLOAD=y | 8 | CONFIG_MODULE_UNLOAD=y |
9 | # CONFIG_BLK_DEV_BSG is not set | 9 | # CONFIG_BLK_DEV_BSG is not set |
10 | CONFIG_PARTITION_ADVANCED=y | ||
10 | CONFIG_ARCH_U8500=y | 11 | CONFIG_ARCH_U8500=y |
11 | CONFIG_MACH_HREFV60=y | 12 | CONFIG_MACH_HREFV60=y |
12 | CONFIG_MACH_SNOWBALL=y | 13 | CONFIG_MACH_SNOWBALL=y |
13 | CONFIG_MACH_UX500_DT=y | ||
14 | CONFIG_SMP=y | 14 | CONFIG_SMP=y |
15 | CONFIG_NR_CPUS=2 | 15 | CONFIG_NR_CPUS=2 |
16 | CONFIG_PREEMPT=y | 16 | CONFIG_PREEMPT=y |
@@ -34,16 +34,22 @@ CONFIG_IP_PNP=y | |||
34 | CONFIG_IP_PNP_DHCP=y | 34 | CONFIG_IP_PNP_DHCP=y |
35 | CONFIG_NETFILTER=y | 35 | CONFIG_NETFILTER=y |
36 | CONFIG_PHONET=y | 36 | CONFIG_PHONET=y |
37 | # CONFIG_WIRELESS is not set | 37 | CONFIG_CFG80211=y |
38 | CONFIG_CFG80211_DEBUGFS=y | ||
39 | CONFIG_MAC80211=y | ||
40 | CONFIG_MAC80211_LEDS=y | ||
38 | CONFIG_CAIF=y | 41 | CONFIG_CAIF=y |
39 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 42 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
43 | CONFIG_DEVTMPFS=y | ||
44 | CONFIG_DEVTMPFS_MOUNT=y | ||
40 | CONFIG_BLK_DEV_RAM=y | 45 | CONFIG_BLK_DEV_RAM=y |
41 | CONFIG_BLK_DEV_RAM_SIZE=65536 | 46 | CONFIG_BLK_DEV_RAM_SIZE=65536 |
42 | CONFIG_SENSORS_BH1780=y | 47 | CONFIG_SENSORS_BH1780=y |
43 | CONFIG_NETDEVICES=y | 48 | CONFIG_NETDEVICES=y |
44 | CONFIG_SMSC911X=y | 49 | CONFIG_SMSC911X=y |
45 | CONFIG_SMSC_PHY=y | 50 | CONFIG_SMSC_PHY=y |
46 | # CONFIG_WLAN is not set | 51 | CONFIG_CW1200=y |
52 | CONFIG_CW1200_WLAN_SDIO=y | ||
47 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | 53 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set |
48 | CONFIG_INPUT_EVDEV=y | 54 | CONFIG_INPUT_EVDEV=y |
49 | # CONFIG_KEYBOARD_ATKBD is not set | 55 | # CONFIG_KEYBOARD_ATKBD is not set |
@@ -85,15 +91,12 @@ CONFIG_AB8500_USB=y | |||
85 | CONFIG_USB_GADGET=y | 91 | CONFIG_USB_GADGET=y |
86 | CONFIG_USB_ETH=m | 92 | CONFIG_USB_ETH=m |
87 | CONFIG_MMC=y | 93 | CONFIG_MMC=y |
88 | CONFIG_MMC_UNSAFE_RESUME=y | ||
89 | # CONFIG_MMC_BLOCK_BOUNCE is not set | ||
90 | CONFIG_MMC_ARMMMCI=y | 94 | CONFIG_MMC_ARMMMCI=y |
91 | CONFIG_NEW_LEDS=y | 95 | CONFIG_NEW_LEDS=y |
92 | CONFIG_LEDS_CLASS=y | 96 | CONFIG_LEDS_CLASS=y |
93 | CONFIG_LEDS_LM3530=y | 97 | CONFIG_LEDS_LM3530=y |
94 | CONFIG_LEDS_GPIO=y | 98 | CONFIG_LEDS_GPIO=y |
95 | CONFIG_LEDS_LP5521=y | 99 | CONFIG_LEDS_LP5521=y |
96 | CONFIG_LEDS_TRIGGERS=y | ||
97 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | 100 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y |
98 | CONFIG_RTC_CLASS=y | 101 | CONFIG_RTC_CLASS=y |
99 | CONFIG_RTC_DRV_AB8500=y | 102 | CONFIG_RTC_DRV_AB8500=y |
@@ -103,6 +106,11 @@ CONFIG_STE_DMA40=y | |||
103 | CONFIG_STAGING=y | 106 | CONFIG_STAGING=y |
104 | CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4=y | 107 | CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4=y |
105 | CONFIG_HSEM_U8500=y | 108 | CONFIG_HSEM_U8500=y |
109 | CONFIG_IIO=y | ||
110 | CONFIG_IIO_ST_ACCEL_3AXIS=y | ||
111 | CONFIG_IIO_ST_GYRO_3AXIS=y | ||
112 | CONFIG_IIO_ST_MAGN_3AXIS=y | ||
113 | CONFIG_IIO_ST_PRESS=y | ||
106 | CONFIG_EXT2_FS=y | 114 | CONFIG_EXT2_FS=y |
107 | CONFIG_EXT2_FS_XATTR=y | 115 | CONFIG_EXT2_FS_XATTR=y |
108 | CONFIG_EXT2_FS_POSIX_ACL=y | 116 | CONFIG_EXT2_FS_POSIX_ACL=y |
@@ -110,8 +118,6 @@ CONFIG_EXT2_FS_SECURITY=y | |||
110 | CONFIG_EXT3_FS=y | 118 | CONFIG_EXT3_FS=y |
111 | CONFIG_EXT4_FS=y | 119 | CONFIG_EXT4_FS=y |
112 | CONFIG_VFAT_FS=y | 120 | CONFIG_VFAT_FS=y |
113 | CONFIG_DEVTMPFS=y | ||
114 | CONFIG_DEVTMPFS_MOUNT=y | ||
115 | CONFIG_TMPFS=y | 121 | CONFIG_TMPFS=y |
116 | CONFIG_TMPFS_POSIX_ACL=y | 122 | CONFIG_TMPFS_POSIX_ACL=y |
117 | # CONFIG_MISC_FILESYSTEMS is not set | 123 | # CONFIG_MISC_FILESYSTEMS is not set |
diff --git a/arch/arm/include/asm/cputype.h b/arch/arm/include/asm/cputype.h index c651e3b26ec7..4764344367d4 100644 --- a/arch/arm/include/asm/cputype.h +++ b/arch/arm/include/asm/cputype.h | |||
@@ -222,22 +222,22 @@ static inline int cpu_is_xsc3(void) | |||
222 | #endif | 222 | #endif |
223 | 223 | ||
224 | /* | 224 | /* |
225 | * Marvell's PJ4 core is based on V7 version. It has some modification | 225 | * Marvell's PJ4 and PJ4B cores are based on V7 version, |
226 | * for coprocessor setting. For this reason, we need a way to distinguish | 226 | * but require a specical sequence for enabling coprocessors. |
227 | * it. | 227 | * For this reason, we need a way to distinguish them. |
228 | */ | 228 | */ |
229 | #ifndef CONFIG_CPU_PJ4 | 229 | #if defined(CONFIG_CPU_PJ4) || defined(CONFIG_CPU_PJ4B) |
230 | #define cpu_is_pj4() 0 | ||
231 | #else | ||
232 | static inline int cpu_is_pj4(void) | 230 | static inline int cpu_is_pj4(void) |
233 | { | 231 | { |
234 | unsigned int id; | 232 | unsigned int id; |
235 | 233 | ||
236 | id = read_cpuid_id(); | 234 | id = read_cpuid_id(); |
237 | if ((id & 0xfffffff0) == 0x562f5840) | 235 | if ((id & 0xff0fff00) == 0x560f5800) |
238 | return 1; | 236 | return 1; |
239 | 237 | ||
240 | return 0; | 238 | return 0; |
241 | } | 239 | } |
240 | #else | ||
241 | #define cpu_is_pj4() 0 | ||
242 | #endif | 242 | #endif |
243 | #endif | 243 | #endif |
diff --git a/arch/arm/include/asm/div64.h b/arch/arm/include/asm/div64.h index 191ada6e4d2d..662c7bd06108 100644 --- a/arch/arm/include/asm/div64.h +++ b/arch/arm/include/asm/div64.h | |||
@@ -156,7 +156,7 @@ | |||
156 | /* Select the best insn combination to perform the */ \ | 156 | /* Select the best insn combination to perform the */ \ |
157 | /* actual __m * __n / (__p << 64) operation. */ \ | 157 | /* actual __m * __n / (__p << 64) operation. */ \ |
158 | if (!__c) { \ | 158 | if (!__c) { \ |
159 | asm ( "umull %Q0, %R0, %1, %Q2\n\t" \ | 159 | asm ( "umull %Q0, %R0, %Q1, %Q2\n\t" \ |
160 | "mov %Q0, #0" \ | 160 | "mov %Q0, #0" \ |
161 | : "=&r" (__res) \ | 161 | : "=&r" (__res) \ |
162 | : "r" (__m), "r" (__n) \ | 162 | : "r" (__m), "r" (__n) \ |
diff --git a/arch/arm/include/asm/mcpm.h b/arch/arm/include/asm/mcpm.h index 608516ebabfe..a5ff410dcdb6 100644 --- a/arch/arm/include/asm/mcpm.h +++ b/arch/arm/include/asm/mcpm.h | |||
@@ -54,6 +54,13 @@ void mcpm_set_early_poke(unsigned cpu, unsigned cluster, | |||
54 | */ | 54 | */ |
55 | 55 | ||
56 | /** | 56 | /** |
57 | * mcpm_is_available - returns whether MCPM is initialized and available | ||
58 | * | ||
59 | * This returns true or false accordingly. | ||
60 | */ | ||
61 | bool mcpm_is_available(void); | ||
62 | |||
63 | /** | ||
57 | * mcpm_cpu_power_up - make given CPU in given cluster runable | 64 | * mcpm_cpu_power_up - make given CPU in given cluster runable |
58 | * | 65 | * |
59 | * @cpu: CPU number within given cluster | 66 | * @cpu: CPU number within given cluster |
diff --git a/arch/arm/include/asm/tlb.h b/arch/arm/include/asm/tlb.h index 0baf7f0d9394..f1a0dace3efe 100644 --- a/arch/arm/include/asm/tlb.h +++ b/arch/arm/include/asm/tlb.h | |||
@@ -98,15 +98,25 @@ static inline void __tlb_alloc_page(struct mmu_gather *tlb) | |||
98 | } | 98 | } |
99 | } | 99 | } |
100 | 100 | ||
101 | static inline void tlb_flush_mmu(struct mmu_gather *tlb) | 101 | static inline void tlb_flush_mmu_tlbonly(struct mmu_gather *tlb) |
102 | { | 102 | { |
103 | tlb_flush(tlb); | 103 | tlb_flush(tlb); |
104 | } | ||
105 | |||
106 | static inline void tlb_flush_mmu_free(struct mmu_gather *tlb) | ||
107 | { | ||
104 | free_pages_and_swap_cache(tlb->pages, tlb->nr); | 108 | free_pages_and_swap_cache(tlb->pages, tlb->nr); |
105 | tlb->nr = 0; | 109 | tlb->nr = 0; |
106 | if (tlb->pages == tlb->local) | 110 | if (tlb->pages == tlb->local) |
107 | __tlb_alloc_page(tlb); | 111 | __tlb_alloc_page(tlb); |
108 | } | 112 | } |
109 | 113 | ||
114 | static inline void tlb_flush_mmu(struct mmu_gather *tlb) | ||
115 | { | ||
116 | tlb_flush_mmu_tlbonly(tlb); | ||
117 | tlb_flush_mmu_free(tlb); | ||
118 | } | ||
119 | |||
110 | static inline void | 120 | static inline void |
111 | tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, unsigned long start, unsigned long end) | 121 | tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, unsigned long start, unsigned long end) |
112 | { | 122 | { |
diff --git a/arch/arm/include/debug/s3c24xx.S b/arch/arm/include/debug/s3c24xx.S new file mode 100644 index 000000000000..b1f54dc4888c --- /dev/null +++ b/arch/arm/include/debug/s3c24xx.S | |||
@@ -0,0 +1,46 @@ | |||
1 | /* arch/arm/mach-s3c2410/include/mach/debug-macro.S | ||
2 | * | ||
3 | * Debugging macro include header | ||
4 | * | ||
5 | * Copyright (C) 1994-1999 Russell King | ||
6 | * Copyright (C) 2005 Simtec Electronics | ||
7 | * | ||
8 | * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | */ | ||
14 | |||
15 | #include <linux/serial_s3c.h> | ||
16 | |||
17 | #define S3C2410_UART1_OFF (0x4000) | ||
18 | |||
19 | .macro addruart, rp, rv, tmp | ||
20 | ldr \rp, = CONFIG_DEBUG_UART_PHYS | ||
21 | ldr \rv, = CONFIG_DEBUG_UART_VIRT | ||
22 | .endm | ||
23 | |||
24 | .macro fifo_full_s3c2410 rd, rx | ||
25 | ldr \rd, [\rx, # S3C2410_UFSTAT] | ||
26 | tst \rd, #S3C2410_UFSTAT_TXFULL | ||
27 | .endm | ||
28 | |||
29 | .macro fifo_level_s3c2410 rd, rx | ||
30 | ldr \rd, [\rx, # S3C2410_UFSTAT] | ||
31 | and \rd, \rd, #S3C2410_UFSTAT_TXMASK | ||
32 | .endm | ||
33 | |||
34 | /* Select the correct implementation depending on the configuration. The | ||
35 | * S3C2440 will get selected by default, as these are the most widely | ||
36 | * used variants of these | ||
37 | */ | ||
38 | |||
39 | #if defined(CONFIG_DEBUG_S3C2410_UART) | ||
40 | #define fifo_full fifo_full_s3c2410 | ||
41 | #define fifo_level fifo_level_s3c2410 | ||
42 | #endif | ||
43 | |||
44 | /* include the reset of the code which will do the work */ | ||
45 | |||
46 | #include <debug/samsung.S> | ||
diff --git a/arch/arm/include/uapi/asm/unistd.h b/arch/arm/include/uapi/asm/unistd.h index fb5584d0cc05..ba94446c72d9 100644 --- a/arch/arm/include/uapi/asm/unistd.h +++ b/arch/arm/include/uapi/asm/unistd.h | |||
@@ -408,6 +408,7 @@ | |||
408 | #define __NR_finit_module (__NR_SYSCALL_BASE+379) | 408 | #define __NR_finit_module (__NR_SYSCALL_BASE+379) |
409 | #define __NR_sched_setattr (__NR_SYSCALL_BASE+380) | 409 | #define __NR_sched_setattr (__NR_SYSCALL_BASE+380) |
410 | #define __NR_sched_getattr (__NR_SYSCALL_BASE+381) | 410 | #define __NR_sched_getattr (__NR_SYSCALL_BASE+381) |
411 | #define __NR_renameat2 (__NR_SYSCALL_BASE+382) | ||
411 | 412 | ||
412 | /* | 413 | /* |
413 | * This may need to be greater than __NR_last_syscall+1 in order to | 414 | * This may need to be greater than __NR_last_syscall+1 in order to |
diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile index a766bcbaf8ad..040619c32d68 100644 --- a/arch/arm/kernel/Makefile +++ b/arch/arm/kernel/Makefile | |||
@@ -79,6 +79,7 @@ obj-$(CONFIG_CPU_XSCALE) += xscale-cp0.o | |||
79 | obj-$(CONFIG_CPU_XSC3) += xscale-cp0.o | 79 | obj-$(CONFIG_CPU_XSC3) += xscale-cp0.o |
80 | obj-$(CONFIG_CPU_MOHAWK) += xscale-cp0.o | 80 | obj-$(CONFIG_CPU_MOHAWK) += xscale-cp0.o |
81 | obj-$(CONFIG_CPU_PJ4) += pj4-cp0.o | 81 | obj-$(CONFIG_CPU_PJ4) += pj4-cp0.o |
82 | obj-$(CONFIG_CPU_PJ4B) += pj4-cp0.o | ||
82 | obj-$(CONFIG_IWMMXT) += iwmmxt.o | 83 | obj-$(CONFIG_IWMMXT) += iwmmxt.o |
83 | obj-$(CONFIG_PERF_EVENTS) += perf_regs.o | 84 | obj-$(CONFIG_PERF_EVENTS) += perf_regs.o |
84 | obj-$(CONFIG_HW_PERF_EVENTS) += perf_event.o perf_event_cpu.o | 85 | obj-$(CONFIG_HW_PERF_EVENTS) += perf_event.o perf_event_cpu.o |
diff --git a/arch/arm/kernel/calls.S b/arch/arm/kernel/calls.S index 166e945de832..8f51bdcdacbb 100644 --- a/arch/arm/kernel/calls.S +++ b/arch/arm/kernel/calls.S | |||
@@ -391,6 +391,7 @@ | |||
391 | CALL(sys_finit_module) | 391 | CALL(sys_finit_module) |
392 | /* 380 */ CALL(sys_sched_setattr) | 392 | /* 380 */ CALL(sys_sched_setattr) |
393 | CALL(sys_sched_getattr) | 393 | CALL(sys_sched_getattr) |
394 | CALL(sys_renameat2) | ||
394 | #ifndef syscalls_counted | 395 | #ifndef syscalls_counted |
395 | .equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls | 396 | .equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls |
396 | #define syscalls_counted | 397 | #define syscalls_counted |
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S index f8c08839edf3..591d6e4a6492 100644 --- a/arch/arm/kernel/head.S +++ b/arch/arm/kernel/head.S | |||
@@ -587,7 +587,7 @@ __fixup_pv_table: | |||
587 | add r6, r6, r3 @ adjust __pv_phys_pfn_offset address | 587 | add r6, r6, r3 @ adjust __pv_phys_pfn_offset address |
588 | add r7, r7, r3 @ adjust __pv_offset address | 588 | add r7, r7, r3 @ adjust __pv_offset address |
589 | mov r0, r8, lsr #12 @ convert to PFN | 589 | mov r0, r8, lsr #12 @ convert to PFN |
590 | str r0, [r6, #LOW_OFFSET] @ save computed PHYS_OFFSET to __pv_phys_pfn_offset | 590 | str r0, [r6] @ save computed PHYS_OFFSET to __pv_phys_pfn_offset |
591 | strcc ip, [r7, #HIGH_OFFSET] @ save to __pv_offset high bits | 591 | strcc ip, [r7, #HIGH_OFFSET] @ save to __pv_offset high bits |
592 | mov r6, r3, lsr #24 @ constant for add/sub instructions | 592 | mov r6, r3, lsr #24 @ constant for add/sub instructions |
593 | teq r3, r6, lsl #24 @ must be 16MiB aligned | 593 | teq r3, r6, lsl #24 @ must be 16MiB aligned |
diff --git a/arch/arm/kernel/iwmmxt.S b/arch/arm/kernel/iwmmxt.S index a08783823b32..2452dd1bef53 100644 --- a/arch/arm/kernel/iwmmxt.S +++ b/arch/arm/kernel/iwmmxt.S | |||
@@ -19,12 +19,16 @@ | |||
19 | #include <asm/thread_info.h> | 19 | #include <asm/thread_info.h> |
20 | #include <asm/asm-offsets.h> | 20 | #include <asm/asm-offsets.h> |
21 | 21 | ||
22 | #if defined(CONFIG_CPU_PJ4) | 22 | #if defined(CONFIG_CPU_PJ4) || defined(CONFIG_CPU_PJ4B) |
23 | #define PJ4(code...) code | 23 | #define PJ4(code...) code |
24 | #define XSC(code...) | 24 | #define XSC(code...) |
25 | #else | 25 | #elif defined(CONFIG_CPU_MOHAWK) || \ |
26 | defined(CONFIG_CPU_XSC3) || \ | ||
27 | defined(CONFIG_CPU_XSCALE) | ||
26 | #define PJ4(code...) | 28 | #define PJ4(code...) |
27 | #define XSC(code...) code | 29 | #define XSC(code...) code |
30 | #else | ||
31 | #error "Unsupported iWMMXt architecture" | ||
28 | #endif | 32 | #endif |
29 | 33 | ||
30 | #define MMX_WR0 (0x00) | 34 | #define MMX_WR0 (0x00) |
diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c index f0d180d8b29f..8cf0996aa1a8 100644 --- a/arch/arm/kernel/machine_kexec.c +++ b/arch/arm/kernel/machine_kexec.c | |||
@@ -184,3 +184,10 @@ void machine_kexec(struct kimage *image) | |||
184 | 184 | ||
185 | soft_restart(reboot_entry_phys); | 185 | soft_restart(reboot_entry_phys); |
186 | } | 186 | } |
187 | |||
188 | void arch_crash_save_vmcoreinfo(void) | ||
189 | { | ||
190 | #ifdef CONFIG_ARM_LPAE | ||
191 | VMCOREINFO_CONFIG(ARM_LPAE); | ||
192 | #endif | ||
193 | } | ||
diff --git a/arch/arm/kernel/pj4-cp0.c b/arch/arm/kernel/pj4-cp0.c index fc7208636284..8153e36b2491 100644 --- a/arch/arm/kernel/pj4-cp0.c +++ b/arch/arm/kernel/pj4-cp0.c | |||
@@ -45,7 +45,7 @@ static int iwmmxt_do(struct notifier_block *self, unsigned long cmd, void *t) | |||
45 | return NOTIFY_DONE; | 45 | return NOTIFY_DONE; |
46 | } | 46 | } |
47 | 47 | ||
48 | static struct notifier_block iwmmxt_notifier_block = { | 48 | static struct notifier_block __maybe_unused iwmmxt_notifier_block = { |
49 | .notifier_call = iwmmxt_do, | 49 | .notifier_call = iwmmxt_do, |
50 | }; | 50 | }; |
51 | 51 | ||
@@ -72,6 +72,33 @@ static void __init pj4_cp_access_write(u32 value) | |||
72 | : "=r" (temp) : "r" (value)); | 72 | : "=r" (temp) : "r" (value)); |
73 | } | 73 | } |
74 | 74 | ||
75 | static int __init pj4_get_iwmmxt_version(void) | ||
76 | { | ||
77 | u32 cp_access, wcid; | ||
78 | |||
79 | cp_access = pj4_cp_access_read(); | ||
80 | pj4_cp_access_write(cp_access | 0xf); | ||
81 | |||
82 | /* check if coprocessor 0 and 1 are available */ | ||
83 | if ((pj4_cp_access_read() & 0xf) != 0xf) { | ||
84 | pj4_cp_access_write(cp_access); | ||
85 | return -ENODEV; | ||
86 | } | ||
87 | |||
88 | /* read iWMMXt coprocessor id register p1, c0 */ | ||
89 | __asm__ __volatile__ ("mrc p1, 0, %0, c0, c0, 0\n" : "=r" (wcid)); | ||
90 | |||
91 | pj4_cp_access_write(cp_access); | ||
92 | |||
93 | /* iWMMXt v1 */ | ||
94 | if ((wcid & 0xffffff00) == 0x56051000) | ||
95 | return 1; | ||
96 | /* iWMMXt v2 */ | ||
97 | if ((wcid & 0xffffff00) == 0x56052000) | ||
98 | return 2; | ||
99 | |||
100 | return -EINVAL; | ||
101 | } | ||
75 | 102 | ||
76 | /* | 103 | /* |
77 | * Disable CP0/CP1 on boot, and let call_fpe() and the iWMMXt lazy | 104 | * Disable CP0/CP1 on boot, and let call_fpe() and the iWMMXt lazy |
@@ -79,17 +106,26 @@ static void __init pj4_cp_access_write(u32 value) | |||
79 | */ | 106 | */ |
80 | static int __init pj4_cp0_init(void) | 107 | static int __init pj4_cp0_init(void) |
81 | { | 108 | { |
82 | u32 cp_access; | 109 | u32 __maybe_unused cp_access; |
110 | int vers; | ||
83 | 111 | ||
84 | if (!cpu_is_pj4()) | 112 | if (!cpu_is_pj4()) |
85 | return 0; | 113 | return 0; |
86 | 114 | ||
115 | vers = pj4_get_iwmmxt_version(); | ||
116 | if (vers < 0) | ||
117 | return 0; | ||
118 | |||
119 | #ifndef CONFIG_IWMMXT | ||
120 | pr_info("PJ4 iWMMXt coprocessor detected, but kernel support is missing.\n"); | ||
121 | #else | ||
87 | cp_access = pj4_cp_access_read() & ~0xf; | 122 | cp_access = pj4_cp_access_read() & ~0xf; |
88 | pj4_cp_access_write(cp_access); | 123 | pj4_cp_access_write(cp_access); |
89 | 124 | ||
90 | printk(KERN_INFO "PJ4 iWMMXt coprocessor enabled.\n"); | 125 | pr_info("PJ4 iWMMXt v%d coprocessor enabled.\n", vers); |
91 | elf_hwcap |= HWCAP_IWMMXT; | 126 | elf_hwcap |= HWCAP_IWMMXT; |
92 | thread_register_notifier(&iwmmxt_notifier_block); | 127 | thread_register_notifier(&iwmmxt_notifier_block); |
128 | #endif | ||
93 | 129 | ||
94 | return 0; | 130 | return 0; |
95 | } | 131 | } |
diff --git a/arch/arm/kernel/sys_oabi-compat.c b/arch/arm/kernel/sys_oabi-compat.c index 702bd329d9d0..e90a3148f385 100644 --- a/arch/arm/kernel/sys_oabi-compat.c +++ b/arch/arm/kernel/sys_oabi-compat.c | |||
@@ -203,9 +203,9 @@ asmlinkage long sys_oabi_fcntl64(unsigned int fd, unsigned int cmd, | |||
203 | int ret; | 203 | int ret; |
204 | 204 | ||
205 | switch (cmd) { | 205 | switch (cmd) { |
206 | case F_GETLKP: | 206 | case F_OFD_GETLK: |
207 | case F_SETLKP: | 207 | case F_OFD_SETLK: |
208 | case F_SETLKPW: | 208 | case F_OFD_SETLKW: |
209 | case F_GETLK64: | 209 | case F_GETLK64: |
210 | case F_SETLK64: | 210 | case F_SETLK64: |
211 | case F_SETLKW64: | 211 | case F_SETLKW64: |
diff --git a/arch/arm/kvm/Kconfig b/arch/arm/kvm/Kconfig index 466bd299b1a8..4be5bb150bdd 100644 --- a/arch/arm/kvm/Kconfig +++ b/arch/arm/kvm/Kconfig | |||
@@ -23,7 +23,7 @@ config KVM | |||
23 | select HAVE_KVM_CPU_RELAX_INTERCEPT | 23 | select HAVE_KVM_CPU_RELAX_INTERCEPT |
24 | select KVM_MMIO | 24 | select KVM_MMIO |
25 | select KVM_ARM_HOST | 25 | select KVM_ARM_HOST |
26 | depends on ARM_VIRT_EXT && ARM_LPAE | 26 | depends on ARM_VIRT_EXT && ARM_LPAE && !CPU_BIG_ENDIAN |
27 | ---help--- | 27 | ---help--- |
28 | Support hosting virtualized guest machines. You will also | 28 | Support hosting virtualized guest machines. You will also |
29 | need to select one or more of the processor modules below. | 29 | need to select one or more of the processor modules below. |
diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c index 80bb1e6c2c29..16f804938b8f 100644 --- a/arch/arm/kvm/mmu.c +++ b/arch/arm/kvm/mmu.c | |||
@@ -42,6 +42,8 @@ static unsigned long hyp_idmap_start; | |||
42 | static unsigned long hyp_idmap_end; | 42 | static unsigned long hyp_idmap_end; |
43 | static phys_addr_t hyp_idmap_vector; | 43 | static phys_addr_t hyp_idmap_vector; |
44 | 44 | ||
45 | #define pgd_order get_order(PTRS_PER_PGD * sizeof(pgd_t)) | ||
46 | |||
45 | #define kvm_pmd_huge(_x) (pmd_huge(_x) || pmd_trans_huge(_x)) | 47 | #define kvm_pmd_huge(_x) (pmd_huge(_x) || pmd_trans_huge(_x)) |
46 | 48 | ||
47 | static void kvm_tlb_flush_vmid_ipa(struct kvm *kvm, phys_addr_t ipa) | 49 | static void kvm_tlb_flush_vmid_ipa(struct kvm *kvm, phys_addr_t ipa) |
@@ -293,14 +295,14 @@ void free_boot_hyp_pgd(void) | |||
293 | if (boot_hyp_pgd) { | 295 | if (boot_hyp_pgd) { |
294 | unmap_range(NULL, boot_hyp_pgd, hyp_idmap_start, PAGE_SIZE); | 296 | unmap_range(NULL, boot_hyp_pgd, hyp_idmap_start, PAGE_SIZE); |
295 | unmap_range(NULL, boot_hyp_pgd, TRAMPOLINE_VA, PAGE_SIZE); | 297 | unmap_range(NULL, boot_hyp_pgd, TRAMPOLINE_VA, PAGE_SIZE); |
296 | kfree(boot_hyp_pgd); | 298 | free_pages((unsigned long)boot_hyp_pgd, pgd_order); |
297 | boot_hyp_pgd = NULL; | 299 | boot_hyp_pgd = NULL; |
298 | } | 300 | } |
299 | 301 | ||
300 | if (hyp_pgd) | 302 | if (hyp_pgd) |
301 | unmap_range(NULL, hyp_pgd, TRAMPOLINE_VA, PAGE_SIZE); | 303 | unmap_range(NULL, hyp_pgd, TRAMPOLINE_VA, PAGE_SIZE); |
302 | 304 | ||
303 | kfree(init_bounce_page); | 305 | free_page((unsigned long)init_bounce_page); |
304 | init_bounce_page = NULL; | 306 | init_bounce_page = NULL; |
305 | 307 | ||
306 | mutex_unlock(&kvm_hyp_pgd_mutex); | 308 | mutex_unlock(&kvm_hyp_pgd_mutex); |
@@ -330,7 +332,7 @@ void free_hyp_pgds(void) | |||
330 | for (addr = VMALLOC_START; is_vmalloc_addr((void*)addr); addr += PGDIR_SIZE) | 332 | for (addr = VMALLOC_START; is_vmalloc_addr((void*)addr); addr += PGDIR_SIZE) |
331 | unmap_range(NULL, hyp_pgd, KERN_TO_HYP(addr), PGDIR_SIZE); | 333 | unmap_range(NULL, hyp_pgd, KERN_TO_HYP(addr), PGDIR_SIZE); |
332 | 334 | ||
333 | kfree(hyp_pgd); | 335 | free_pages((unsigned long)hyp_pgd, pgd_order); |
334 | hyp_pgd = NULL; | 336 | hyp_pgd = NULL; |
335 | } | 337 | } |
336 | 338 | ||
@@ -1024,7 +1026,7 @@ int kvm_mmu_init(void) | |||
1024 | size_t len = __hyp_idmap_text_end - __hyp_idmap_text_start; | 1026 | size_t len = __hyp_idmap_text_end - __hyp_idmap_text_start; |
1025 | phys_addr_t phys_base; | 1027 | phys_addr_t phys_base; |
1026 | 1028 | ||
1027 | init_bounce_page = kmalloc(PAGE_SIZE, GFP_KERNEL); | 1029 | init_bounce_page = (void *)__get_free_page(GFP_KERNEL); |
1028 | if (!init_bounce_page) { | 1030 | if (!init_bounce_page) { |
1029 | kvm_err("Couldn't allocate HYP init bounce page\n"); | 1031 | kvm_err("Couldn't allocate HYP init bounce page\n"); |
1030 | err = -ENOMEM; | 1032 | err = -ENOMEM; |
@@ -1050,8 +1052,9 @@ int kvm_mmu_init(void) | |||
1050 | (unsigned long)phys_base); | 1052 | (unsigned long)phys_base); |
1051 | } | 1053 | } |
1052 | 1054 | ||
1053 | hyp_pgd = kzalloc(PTRS_PER_PGD * sizeof(pgd_t), GFP_KERNEL); | 1055 | hyp_pgd = (pgd_t *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, pgd_order); |
1054 | boot_hyp_pgd = kzalloc(PTRS_PER_PGD * sizeof(pgd_t), GFP_KERNEL); | 1056 | boot_hyp_pgd = (pgd_t *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, pgd_order); |
1057 | |||
1055 | if (!hyp_pgd || !boot_hyp_pgd) { | 1058 | if (!hyp_pgd || !boot_hyp_pgd) { |
1056 | kvm_err("Hyp mode PGD not allocated\n"); | 1059 | kvm_err("Hyp mode PGD not allocated\n"); |
1057 | err = -ENOMEM; | 1060 | err = -ENOMEM; |
diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c index 8b1b0a870025..a0282928e9c1 100644 --- a/arch/arm/mach-at91/at91sam9260_devices.c +++ b/arch/arm/mach-at91/at91sam9260_devices.c | |||
@@ -1296,7 +1296,7 @@ static struct resource adc_resources[] = { | |||
1296 | }; | 1296 | }; |
1297 | 1297 | ||
1298 | static struct platform_device at91_adc_device = { | 1298 | static struct platform_device at91_adc_device = { |
1299 | .name = "at91_adc", | 1299 | .name = "at91sam9260-adc", |
1300 | .id = -1, | 1300 | .id = -1, |
1301 | .dev = { | 1301 | .dev = { |
1302 | .platform_data = &adc_data, | 1302 | .platform_data = &adc_data, |
diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c index 77b04c2edd78..dab362c06487 100644 --- a/arch/arm/mach-at91/at91sam9g45_devices.c +++ b/arch/arm/mach-at91/at91sam9g45_devices.c | |||
@@ -1204,7 +1204,7 @@ static struct resource adc_resources[] = { | |||
1204 | }; | 1204 | }; |
1205 | 1205 | ||
1206 | static struct platform_device at91_adc_device = { | 1206 | static struct platform_device at91_adc_device = { |
1207 | .name = "at91_adc", | 1207 | .name = "at91sam9g45-adc", |
1208 | .id = -1, | 1208 | .id = -1, |
1209 | .dev = { | 1209 | .dev = { |
1210 | .platform_data = &adc_data, | 1210 | .platform_data = &adc_data, |
diff --git a/arch/arm/mach-exynos/Makefile b/arch/arm/mach-exynos/Makefile index a656dbe3b78c..f6dcc256db56 100644 --- a/arch/arm/mach-exynos/Makefile +++ b/arch/arm/mach-exynos/Makefile | |||
@@ -12,20 +12,15 @@ obj- := | |||
12 | 12 | ||
13 | # Core | 13 | # Core |
14 | 14 | ||
15 | obj-$(CONFIG_ARCH_EXYNOS) += exynos.o | 15 | obj-$(CONFIG_ARCH_EXYNOS) += exynos.o pmu.o exynos-smc.o firmware.o |
16 | 16 | ||
17 | obj-$(CONFIG_PM_SLEEP) += pm.o sleep.o | 17 | obj-$(CONFIG_PM_SLEEP) += pm.o sleep.o |
18 | obj-$(CONFIG_PM_GENERIC_DOMAINS) += pm_domains.o | 18 | obj-$(CONFIG_PM_GENERIC_DOMAINS) += pm_domains.o |
19 | obj-$(CONFIG_CPU_IDLE) += cpuidle.o | 19 | obj-$(CONFIG_CPU_IDLE) += cpuidle.o |
20 | 20 | ||
21 | obj-$(CONFIG_ARCH_EXYNOS) += pmu.o | ||
22 | |||
23 | obj-$(CONFIG_SMP) += platsmp.o headsmp.o | 21 | obj-$(CONFIG_SMP) += platsmp.o headsmp.o |
24 | 22 | ||
25 | obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o | 23 | obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o |
26 | 24 | ||
27 | obj-$(CONFIG_ARCH_EXYNOS) += exynos-smc.o | ||
28 | obj-$(CONFIG_ARCH_EXYNOS) += firmware.o | ||
29 | |||
30 | plus_sec := $(call as-instr,.arch_extension sec,+sec) | 25 | plus_sec := $(call as-instr,.arch_extension sec,+sec) |
31 | AFLAGS_exynos-smc.o :=-Wa,-march=armv7-a$(plus_sec) | 26 | AFLAGS_exynos-smc.o :=-Wa,-march=armv7-a$(plus_sec) |
diff --git a/arch/arm/mach-exynos/common.h b/arch/arm/mach-exynos/common.h index 9ef3f83efaff..c1a2f2207af0 100644 --- a/arch/arm/mach-exynos/common.h +++ b/arch/arm/mach-exynos/common.h | |||
@@ -15,6 +15,75 @@ | |||
15 | #include <linux/reboot.h> | 15 | #include <linux/reboot.h> |
16 | #include <linux/of.h> | 16 | #include <linux/of.h> |
17 | 17 | ||
18 | #define EXYNOS4210_CPU_ID 0x43210000 | ||
19 | #define EXYNOS4212_CPU_ID 0x43220000 | ||
20 | #define EXYNOS4412_CPU_ID 0xE4412200 | ||
21 | #define EXYNOS4_CPU_MASK 0xFFFE0000 | ||
22 | |||
23 | #define EXYNOS5250_SOC_ID 0x43520000 | ||
24 | #define EXYNOS5420_SOC_ID 0xE5420000 | ||
25 | #define EXYNOS5440_SOC_ID 0xE5440000 | ||
26 | #define EXYNOS5_SOC_MASK 0xFFFFF000 | ||
27 | |||
28 | extern unsigned long samsung_cpu_id; | ||
29 | |||
30 | #define IS_SAMSUNG_CPU(name, id, mask) \ | ||
31 | static inline int is_samsung_##name(void) \ | ||
32 | { \ | ||
33 | return ((samsung_cpu_id & mask) == (id & mask)); \ | ||
34 | } | ||
35 | |||
36 | IS_SAMSUNG_CPU(exynos4210, EXYNOS4210_CPU_ID, EXYNOS4_CPU_MASK) | ||
37 | IS_SAMSUNG_CPU(exynos4212, EXYNOS4212_CPU_ID, EXYNOS4_CPU_MASK) | ||
38 | IS_SAMSUNG_CPU(exynos4412, EXYNOS4412_CPU_ID, EXYNOS4_CPU_MASK) | ||
39 | IS_SAMSUNG_CPU(exynos5250, EXYNOS5250_SOC_ID, EXYNOS5_SOC_MASK) | ||
40 | IS_SAMSUNG_CPU(exynos5420, EXYNOS5420_SOC_ID, EXYNOS5_SOC_MASK) | ||
41 | IS_SAMSUNG_CPU(exynos5440, EXYNOS5440_SOC_ID, EXYNOS5_SOC_MASK) | ||
42 | |||
43 | #if defined(CONFIG_CPU_EXYNOS4210) | ||
44 | # define soc_is_exynos4210() is_samsung_exynos4210() | ||
45 | #else | ||
46 | # define soc_is_exynos4210() 0 | ||
47 | #endif | ||
48 | |||
49 | #if defined(CONFIG_SOC_EXYNOS4212) | ||
50 | # define soc_is_exynos4212() is_samsung_exynos4212() | ||
51 | #else | ||
52 | # define soc_is_exynos4212() 0 | ||
53 | #endif | ||
54 | |||
55 | #if defined(CONFIG_SOC_EXYNOS4412) | ||
56 | # define soc_is_exynos4412() is_samsung_exynos4412() | ||
57 | #else | ||
58 | # define soc_is_exynos4412() 0 | ||
59 | #endif | ||
60 | |||
61 | #define EXYNOS4210_REV_0 (0x0) | ||
62 | #define EXYNOS4210_REV_1_0 (0x10) | ||
63 | #define EXYNOS4210_REV_1_1 (0x11) | ||
64 | |||
65 | #if defined(CONFIG_SOC_EXYNOS5250) | ||
66 | # define soc_is_exynos5250() is_samsung_exynos5250() | ||
67 | #else | ||
68 | # define soc_is_exynos5250() 0 | ||
69 | #endif | ||
70 | |||
71 | #if defined(CONFIG_SOC_EXYNOS5420) | ||
72 | # define soc_is_exynos5420() is_samsung_exynos5420() | ||
73 | #else | ||
74 | # define soc_is_exynos5420() 0 | ||
75 | #endif | ||
76 | |||
77 | #if defined(CONFIG_SOC_EXYNOS5440) | ||
78 | # define soc_is_exynos5440() is_samsung_exynos5440() | ||
79 | #else | ||
80 | # define soc_is_exynos5440() 0 | ||
81 | #endif | ||
82 | |||
83 | #define soc_is_exynos4() (soc_is_exynos4210() || soc_is_exynos4212() || \ | ||
84 | soc_is_exynos4412()) | ||
85 | #define soc_is_exynos5() (soc_is_exynos5250() || soc_is_exynos5420()) | ||
86 | |||
18 | void mct_init(void __iomem *base, int irq_g0, int irq_l0, int irq_l1); | 87 | void mct_init(void __iomem *base, int irq_g0, int irq_l0, int irq_l1); |
19 | 88 | ||
20 | struct map_desc; | 89 | struct map_desc; |
@@ -63,4 +132,7 @@ struct exynos_pmu_conf { | |||
63 | 132 | ||
64 | extern void exynos_sys_powerdown_conf(enum sys_powerdown mode); | 133 | extern void exynos_sys_powerdown_conf(enum sys_powerdown mode); |
65 | 134 | ||
135 | extern void s5p_init_cpu(void __iomem *cpuid_addr); | ||
136 | extern unsigned int samsung_rev(void); | ||
137 | |||
66 | #endif /* __ARCH_ARM_MACH_EXYNOS_COMMON_H */ | 138 | #endif /* __ARCH_ARM_MACH_EXYNOS_COMMON_H */ |
diff --git a/arch/arm/mach-exynos/cpuidle.c b/arch/arm/mach-exynos/cpuidle.c index c57cae0e8779..3dd385ebf195 100644 --- a/arch/arm/mach-exynos/cpuidle.c +++ b/arch/arm/mach-exynos/cpuidle.c | |||
@@ -24,7 +24,6 @@ | |||
24 | #include <asm/unified.h> | 24 | #include <asm/unified.h> |
25 | #include <asm/cpuidle.h> | 25 | #include <asm/cpuidle.h> |
26 | 26 | ||
27 | #include <plat/cpu.h> | ||
28 | #include <plat/pm.h> | 27 | #include <plat/pm.h> |
29 | 28 | ||
30 | #include <mach/map.h> | 29 | #include <mach/map.h> |
diff --git a/arch/arm/mach-exynos/exynos.c b/arch/arm/mach-exynos/exynos.c index b32a907d021d..59aab756702e 100644 --- a/arch/arm/mach-exynos/exynos.c +++ b/arch/arm/mach-exynos/exynos.c | |||
@@ -26,8 +26,6 @@ | |||
26 | #include <asm/mach/map.h> | 26 | #include <asm/mach/map.h> |
27 | #include <asm/memory.h> | 27 | #include <asm/memory.h> |
28 | 28 | ||
29 | #include <plat/cpu.h> | ||
30 | |||
31 | #include "common.h" | 29 | #include "common.h" |
32 | #include "mfc.h" | 30 | #include "mfc.h" |
33 | #include "regs-pmu.h" | 31 | #include "regs-pmu.h" |
@@ -308,17 +306,6 @@ void __init exynos_init_io(void) | |||
308 | exynos_map_io(); | 306 | exynos_map_io(); |
309 | } | 307 | } |
310 | 308 | ||
311 | struct bus_type exynos_subsys = { | ||
312 | .name = "exynos-core", | ||
313 | .dev_name = "exynos-core", | ||
314 | }; | ||
315 | |||
316 | static int __init exynos_core_init(void) | ||
317 | { | ||
318 | return subsys_system_register(&exynos_subsys, NULL); | ||
319 | } | ||
320 | core_initcall(exynos_core_init); | ||
321 | |||
322 | static int __init exynos4_l2x0_cache_init(void) | 309 | static int __init exynos4_l2x0_cache_init(void) |
323 | { | 310 | { |
324 | int ret; | 311 | int ret; |
diff --git a/arch/arm/mach-exynos/firmware.c b/arch/arm/mach-exynos/firmware.c index 932129ef26c6..f6cb510aee85 100644 --- a/arch/arm/mach-exynos/firmware.c +++ b/arch/arm/mach-exynos/firmware.c | |||
@@ -18,6 +18,7 @@ | |||
18 | 18 | ||
19 | #include <mach/map.h> | 19 | #include <mach/map.h> |
20 | 20 | ||
21 | #include "common.h" | ||
21 | #include "smc.h" | 22 | #include "smc.h" |
22 | 23 | ||
23 | static int exynos_do_idle(void) | 24 | static int exynos_do_idle(void) |
@@ -28,13 +29,24 @@ static int exynos_do_idle(void) | |||
28 | 29 | ||
29 | static int exynos_cpu_boot(int cpu) | 30 | static int exynos_cpu_boot(int cpu) |
30 | { | 31 | { |
32 | /* | ||
33 | * The second parameter of SMC_CMD_CPU1BOOT command means CPU id. | ||
34 | * But, Exynos4212 has only one secondary CPU so second parameter | ||
35 | * isn't used for informing secure firmware about CPU id. | ||
36 | */ | ||
37 | if (soc_is_exynos4212()) | ||
38 | cpu = 0; | ||
39 | |||
31 | exynos_smc(SMC_CMD_CPU1BOOT, cpu, 0, 0); | 40 | exynos_smc(SMC_CMD_CPU1BOOT, cpu, 0, 0); |
32 | return 0; | 41 | return 0; |
33 | } | 42 | } |
34 | 43 | ||
35 | static int exynos_set_cpu_boot_addr(int cpu, unsigned long boot_addr) | 44 | static int exynos_set_cpu_boot_addr(int cpu, unsigned long boot_addr) |
36 | { | 45 | { |
37 | void __iomem *boot_reg = S5P_VA_SYSRAM_NS + 0x1c + 4*cpu; | 46 | void __iomem *boot_reg = S5P_VA_SYSRAM_NS + 0x1c; |
47 | |||
48 | if (!soc_is_exynos4212()) | ||
49 | boot_reg += 4*cpu; | ||
38 | 50 | ||
39 | __raw_writel(boot_addr, boot_reg); | 51 | __raw_writel(boot_addr, boot_reg); |
40 | return 0; | 52 | return 0; |
diff --git a/arch/arm/mach-exynos/hotplug.c b/arch/arm/mach-exynos/hotplug.c index 5eead530c6f8..3cab3f506689 100644 --- a/arch/arm/mach-exynos/hotplug.c +++ b/arch/arm/mach-exynos/hotplug.c | |||
@@ -19,61 +19,9 @@ | |||
19 | #include <asm/cp15.h> | 19 | #include <asm/cp15.h> |
20 | #include <asm/smp_plat.h> | 20 | #include <asm/smp_plat.h> |
21 | 21 | ||
22 | #include <plat/cpu.h> | ||
23 | |||
24 | #include "common.h" | 22 | #include "common.h" |
25 | #include "regs-pmu.h" | 23 | #include "regs-pmu.h" |
26 | 24 | ||
27 | static inline void cpu_enter_lowpower_a9(void) | ||
28 | { | ||
29 | unsigned int v; | ||
30 | |||
31 | asm volatile( | ||
32 | " mcr p15, 0, %1, c7, c5, 0\n" | ||
33 | " mcr p15, 0, %1, c7, c10, 4\n" | ||
34 | /* | ||
35 | * Turn off coherency | ||
36 | */ | ||
37 | " mrc p15, 0, %0, c1, c0, 1\n" | ||
38 | " bic %0, %0, %3\n" | ||
39 | " mcr p15, 0, %0, c1, c0, 1\n" | ||
40 | " mrc p15, 0, %0, c1, c0, 0\n" | ||
41 | " bic %0, %0, %2\n" | ||
42 | " mcr p15, 0, %0, c1, c0, 0\n" | ||
43 | : "=&r" (v) | ||
44 | : "r" (0), "Ir" (CR_C), "Ir" (0x40) | ||
45 | : "cc"); | ||
46 | } | ||
47 | |||
48 | static inline void cpu_enter_lowpower_a15(void) | ||
49 | { | ||
50 | unsigned int v; | ||
51 | |||
52 | asm volatile( | ||
53 | " mrc p15, 0, %0, c1, c0, 0\n" | ||
54 | " bic %0, %0, %1\n" | ||
55 | " mcr p15, 0, %0, c1, c0, 0\n" | ||
56 | : "=&r" (v) | ||
57 | : "Ir" (CR_C) | ||
58 | : "cc"); | ||
59 | |||
60 | flush_cache_louis(); | ||
61 | |||
62 | asm volatile( | ||
63 | /* | ||
64 | * Turn off coherency | ||
65 | */ | ||
66 | " mrc p15, 0, %0, c1, c0, 1\n" | ||
67 | " bic %0, %0, %1\n" | ||
68 | " mcr p15, 0, %0, c1, c0, 1\n" | ||
69 | : "=&r" (v) | ||
70 | : "Ir" (0x40) | ||
71 | : "cc"); | ||
72 | |||
73 | isb(); | ||
74 | dsb(); | ||
75 | } | ||
76 | |||
77 | static inline void cpu_leave_lowpower(void) | 25 | static inline void cpu_leave_lowpower(void) |
78 | { | 26 | { |
79 | unsigned int v; | 27 | unsigned int v; |
@@ -132,19 +80,8 @@ static inline void platform_do_lowpower(unsigned int cpu, int *spurious) | |||
132 | void __ref exynos_cpu_die(unsigned int cpu) | 80 | void __ref exynos_cpu_die(unsigned int cpu) |
133 | { | 81 | { |
134 | int spurious = 0; | 82 | int spurious = 0; |
135 | int primary_part = 0; | ||
136 | 83 | ||
137 | /* | 84 | v7_exit_coherency_flush(louis); |
138 | * we're ready for shutdown now, so do it. | ||
139 | * Exynos4 is A9 based while Exynos5 is A15; check the CPU part | ||
140 | * number by reading the Main ID register and then perform the | ||
141 | * appropriate sequence for entering low power. | ||
142 | */ | ||
143 | asm("mrc p15, 0, %0, c0, c0, 0" : "=r"(primary_part) : : "cc"); | ||
144 | if ((primary_part & 0xfff0) == 0xc0f0) | ||
145 | cpu_enter_lowpower_a15(); | ||
146 | else | ||
147 | cpu_enter_lowpower_a9(); | ||
148 | 85 | ||
149 | platform_do_lowpower(cpu, &spurious); | 86 | platform_do_lowpower(cpu, &spurious); |
150 | 87 | ||
diff --git a/arch/arm/mach-exynos/platsmp.c b/arch/arm/mach-exynos/platsmp.c index 03e5e9f94705..c28cdb1c82cd 100644 --- a/arch/arm/mach-exynos/platsmp.c +++ b/arch/arm/mach-exynos/platsmp.c | |||
@@ -26,8 +26,6 @@ | |||
26 | #include <asm/smp_scu.h> | 26 | #include <asm/smp_scu.h> |
27 | #include <asm/firmware.h> | 27 | #include <asm/firmware.h> |
28 | 28 | ||
29 | #include <plat/cpu.h> | ||
30 | |||
31 | #include "common.h" | 29 | #include "common.h" |
32 | #include "regs-pmu.h" | 30 | #include "regs-pmu.h" |
33 | 31 | ||
diff --git a/arch/arm/mach-exynos/pm.c b/arch/arm/mach-exynos/pm.c index 15af0ceb0a66..ca672e24b5cd 100644 --- a/arch/arm/mach-exynos/pm.c +++ b/arch/arm/mach-exynos/pm.c | |||
@@ -26,7 +26,6 @@ | |||
26 | #include <asm/smp_scu.h> | 26 | #include <asm/smp_scu.h> |
27 | #include <asm/suspend.h> | 27 | #include <asm/suspend.h> |
28 | 28 | ||
29 | #include <plat/cpu.h> | ||
30 | #include <plat/pm-common.h> | 29 | #include <plat/pm-common.h> |
31 | #include <plat/pll.h> | 30 | #include <plat/pll.h> |
32 | #include <plat/regs-srom.h> | 31 | #include <plat/regs-srom.h> |
diff --git a/arch/arm/mach-exynos/pmu.c b/arch/arm/mach-exynos/pmu.c index 05c7ce15322a..fb0deda3b3a4 100644 --- a/arch/arm/mach-exynos/pmu.c +++ b/arch/arm/mach-exynos/pmu.c | |||
@@ -13,8 +13,6 @@ | |||
13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
14 | #include <linux/bug.h> | 14 | #include <linux/bug.h> |
15 | 15 | ||
16 | #include <plat/cpu.h> | ||
17 | |||
18 | #include "common.h" | 16 | #include "common.h" |
19 | #include "regs-pmu.h" | 17 | #include "regs-pmu.h" |
20 | 18 | ||
diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c index b0e7f9d2c245..2b4d6acfa34a 100644 --- a/arch/arm/mach-imx/clk-imx6q.c +++ b/arch/arm/mach-imx/clk-imx6q.c | |||
@@ -208,8 +208,8 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node) | |||
208 | * the "output_enable" bit as a gate, even though it's really just | 208 | * the "output_enable" bit as a gate, even though it's really just |
209 | * enabling clock output. | 209 | * enabling clock output. |
210 | */ | 210 | */ |
211 | clk[lvds1_gate] = imx_clk_gate("lvds1_gate", "dummy", base + 0x160, 10); | 211 | clk[lvds1_gate] = imx_clk_gate("lvds1_gate", "lvds1_sel", base + 0x160, 10); |
212 | clk[lvds2_gate] = imx_clk_gate("lvds2_gate", "dummy", base + 0x160, 11); | 212 | clk[lvds2_gate] = imx_clk_gate("lvds2_gate", "lvds2_sel", base + 0x160, 11); |
213 | 213 | ||
214 | /* name parent_name reg idx */ | 214 | /* name parent_name reg idx */ |
215 | clk[pll2_pfd0_352m] = imx_clk_pfd("pll2_pfd0_352m", "pll2_bus", base + 0x100, 0); | 215 | clk[pll2_pfd0_352m] = imx_clk_pfd("pll2_pfd0_352m", "pll2_bus", base + 0x100, 0); |
@@ -258,14 +258,14 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node) | |||
258 | clk[ipu2_sel] = imx_clk_mux("ipu2_sel", base + 0x3c, 14, 2, ipu_sels, ARRAY_SIZE(ipu_sels)); | 258 | clk[ipu2_sel] = imx_clk_mux("ipu2_sel", base + 0x3c, 14, 2, ipu_sels, ARRAY_SIZE(ipu_sels)); |
259 | clk[ldb_di0_sel] = imx_clk_mux_flags("ldb_di0_sel", base + 0x2c, 9, 3, ldb_di_sels, ARRAY_SIZE(ldb_di_sels), CLK_SET_RATE_PARENT); | 259 | clk[ldb_di0_sel] = imx_clk_mux_flags("ldb_di0_sel", base + 0x2c, 9, 3, ldb_di_sels, ARRAY_SIZE(ldb_di_sels), CLK_SET_RATE_PARENT); |
260 | clk[ldb_di1_sel] = imx_clk_mux_flags("ldb_di1_sel", base + 0x2c, 12, 3, ldb_di_sels, ARRAY_SIZE(ldb_di_sels), CLK_SET_RATE_PARENT); | 260 | clk[ldb_di1_sel] = imx_clk_mux_flags("ldb_di1_sel", base + 0x2c, 12, 3, ldb_di_sels, ARRAY_SIZE(ldb_di_sels), CLK_SET_RATE_PARENT); |
261 | clk[ipu1_di0_pre_sel] = imx_clk_mux("ipu1_di0_pre_sel", base + 0x34, 6, 3, ipu_di_pre_sels, ARRAY_SIZE(ipu_di_pre_sels)); | 261 | clk[ipu1_di0_pre_sel] = imx_clk_mux_flags("ipu1_di0_pre_sel", base + 0x34, 6, 3, ipu_di_pre_sels, ARRAY_SIZE(ipu_di_pre_sels), CLK_SET_RATE_PARENT); |
262 | clk[ipu1_di1_pre_sel] = imx_clk_mux("ipu1_di1_pre_sel", base + 0x34, 15, 3, ipu_di_pre_sels, ARRAY_SIZE(ipu_di_pre_sels)); | 262 | clk[ipu1_di1_pre_sel] = imx_clk_mux_flags("ipu1_di1_pre_sel", base + 0x34, 15, 3, ipu_di_pre_sels, ARRAY_SIZE(ipu_di_pre_sels), CLK_SET_RATE_PARENT); |
263 | clk[ipu2_di0_pre_sel] = imx_clk_mux("ipu2_di0_pre_sel", base + 0x38, 6, 3, ipu_di_pre_sels, ARRAY_SIZE(ipu_di_pre_sels)); | 263 | clk[ipu2_di0_pre_sel] = imx_clk_mux_flags("ipu2_di0_pre_sel", base + 0x38, 6, 3, ipu_di_pre_sels, ARRAY_SIZE(ipu_di_pre_sels), CLK_SET_RATE_PARENT); |
264 | clk[ipu2_di1_pre_sel] = imx_clk_mux("ipu2_di1_pre_sel", base + 0x38, 15, 3, ipu_di_pre_sels, ARRAY_SIZE(ipu_di_pre_sels)); | 264 | clk[ipu2_di1_pre_sel] = imx_clk_mux_flags("ipu2_di1_pre_sel", base + 0x38, 15, 3, ipu_di_pre_sels, ARRAY_SIZE(ipu_di_pre_sels), CLK_SET_RATE_PARENT); |
265 | clk[ipu1_di0_sel] = imx_clk_mux("ipu1_di0_sel", base + 0x34, 0, 3, ipu1_di0_sels, ARRAY_SIZE(ipu1_di0_sels)); | 265 | clk[ipu1_di0_sel] = imx_clk_mux_flags("ipu1_di0_sel", base + 0x34, 0, 3, ipu1_di0_sels, ARRAY_SIZE(ipu1_di0_sels), CLK_SET_RATE_PARENT); |
266 | clk[ipu1_di1_sel] = imx_clk_mux("ipu1_di1_sel", base + 0x34, 9, 3, ipu1_di1_sels, ARRAY_SIZE(ipu1_di1_sels)); | 266 | clk[ipu1_di1_sel] = imx_clk_mux_flags("ipu1_di1_sel", base + 0x34, 9, 3, ipu1_di1_sels, ARRAY_SIZE(ipu1_di1_sels), CLK_SET_RATE_PARENT); |
267 | clk[ipu2_di0_sel] = imx_clk_mux("ipu2_di0_sel", base + 0x38, 0, 3, ipu2_di0_sels, ARRAY_SIZE(ipu2_di0_sels)); | 267 | clk[ipu2_di0_sel] = imx_clk_mux_flags("ipu2_di0_sel", base + 0x38, 0, 3, ipu2_di0_sels, ARRAY_SIZE(ipu2_di0_sels), CLK_SET_RATE_PARENT); |
268 | clk[ipu2_di1_sel] = imx_clk_mux("ipu2_di1_sel", base + 0x38, 9, 3, ipu2_di1_sels, ARRAY_SIZE(ipu2_di1_sels)); | 268 | clk[ipu2_di1_sel] = imx_clk_mux_flags("ipu2_di1_sel", base + 0x38, 9, 3, ipu2_di1_sels, ARRAY_SIZE(ipu2_di1_sels), CLK_SET_RATE_PARENT); |
269 | clk[hsi_tx_sel] = imx_clk_mux("hsi_tx_sel", base + 0x30, 28, 1, hsi_tx_sels, ARRAY_SIZE(hsi_tx_sels)); | 269 | clk[hsi_tx_sel] = imx_clk_mux("hsi_tx_sel", base + 0x30, 28, 1, hsi_tx_sels, ARRAY_SIZE(hsi_tx_sels)); |
270 | clk[pcie_axi_sel] = imx_clk_mux("pcie_axi_sel", base + 0x18, 10, 1, pcie_axi_sels, ARRAY_SIZE(pcie_axi_sels)); | 270 | clk[pcie_axi_sel] = imx_clk_mux("pcie_axi_sel", base + 0x18, 10, 1, pcie_axi_sels, ARRAY_SIZE(pcie_axi_sels)); |
271 | clk[ssi1_sel] = imx_clk_fixup_mux("ssi1_sel", base + 0x1c, 10, 2, ssi_sels, ARRAY_SIZE(ssi_sels), imx_cscmr1_fixup); | 271 | clk[ssi1_sel] = imx_clk_fixup_mux("ssi1_sel", base + 0x1c, 10, 2, ssi_sels, ARRAY_SIZE(ssi_sels), imx_cscmr1_fixup); |
@@ -445,6 +445,15 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node) | |||
445 | clk_set_parent(clk[ldb_di1_sel], clk[pll5_video_div]); | 445 | clk_set_parent(clk[ldb_di1_sel], clk[pll5_video_div]); |
446 | } | 446 | } |
447 | 447 | ||
448 | clk_set_parent(clk[ipu1_di0_pre_sel], clk[pll5_video_div]); | ||
449 | clk_set_parent(clk[ipu1_di1_pre_sel], clk[pll5_video_div]); | ||
450 | clk_set_parent(clk[ipu2_di0_pre_sel], clk[pll5_video_div]); | ||
451 | clk_set_parent(clk[ipu2_di1_pre_sel], clk[pll5_video_div]); | ||
452 | clk_set_parent(clk[ipu1_di0_sel], clk[ipu1_di0_pre]); | ||
453 | clk_set_parent(clk[ipu1_di1_sel], clk[ipu1_di1_pre]); | ||
454 | clk_set_parent(clk[ipu2_di0_sel], clk[ipu2_di0_pre]); | ||
455 | clk_set_parent(clk[ipu2_di1_sel], clk[ipu2_di1_pre]); | ||
456 | |||
448 | /* | 457 | /* |
449 | * The gpmi needs 100MHz frequency in the EDO/Sync mode, | 458 | * The gpmi needs 100MHz frequency in the EDO/Sync mode, |
450 | * We can not get the 100MHz from the pll2_pfd0_352m. | 459 | * We can not get the 100MHz from the pll2_pfd0_352m. |
diff --git a/arch/arm/mach-omap2/board-rx51-video.c b/arch/arm/mach-omap2/board-rx51-video.c index 43a90c8d6837..9cfebc5c7455 100644 --- a/arch/arm/mach-omap2/board-rx51-video.c +++ b/arch/arm/mach-omap2/board-rx51-video.c | |||
@@ -48,7 +48,7 @@ static struct omap_dss_board_info rx51_dss_board_info = { | |||
48 | 48 | ||
49 | static int __init rx51_video_init(void) | 49 | static int __init rx51_video_init(void) |
50 | { | 50 | { |
51 | if (!machine_is_nokia_rx51() && !of_machine_is_compatible("nokia,omap3-n900")) | 51 | if (!machine_is_nokia_rx51()) |
52 | return 0; | 52 | return 0; |
53 | 53 | ||
54 | if (omap_mux_init_gpio(RX51_LCD_RESET_GPIO, OMAP_PIN_OUTPUT)) { | 54 | if (omap_mux_init_gpio(RX51_LCD_RESET_GPIO, OMAP_PIN_OUTPUT)) { |
diff --git a/arch/arm/mach-omap2/clkt_dpll.c b/arch/arm/mach-omap2/clkt_dpll.c index 2649ce445845..332af927f4d3 100644 --- a/arch/arm/mach-omap2/clkt_dpll.c +++ b/arch/arm/mach-omap2/clkt_dpll.c | |||
@@ -209,7 +209,7 @@ u8 omap2_init_dpll_parent(struct clk_hw *hw) | |||
209 | if (v == OMAP3XXX_EN_DPLL_LPBYPASS || | 209 | if (v == OMAP3XXX_EN_DPLL_LPBYPASS || |
210 | v == OMAP3XXX_EN_DPLL_FRBYPASS) | 210 | v == OMAP3XXX_EN_DPLL_FRBYPASS) |
211 | return 1; | 211 | return 1; |
212 | } else if (soc_is_am33xx() || cpu_is_omap44xx()) { | 212 | } else if (soc_is_am33xx() || cpu_is_omap44xx() || soc_is_am43xx()) { |
213 | if (v == OMAP4XXX_EN_DPLL_LPBYPASS || | 213 | if (v == OMAP4XXX_EN_DPLL_LPBYPASS || |
214 | v == OMAP4XXX_EN_DPLL_FRBYPASS || | 214 | v == OMAP4XXX_EN_DPLL_FRBYPASS || |
215 | v == OMAP4XXX_EN_DPLL_MNBYPASS) | 215 | v == OMAP4XXX_EN_DPLL_MNBYPASS) |
@@ -255,7 +255,7 @@ unsigned long omap2_get_dpll_rate(struct clk_hw_omap *clk) | |||
255 | if (v == OMAP3XXX_EN_DPLL_LPBYPASS || | 255 | if (v == OMAP3XXX_EN_DPLL_LPBYPASS || |
256 | v == OMAP3XXX_EN_DPLL_FRBYPASS) | 256 | v == OMAP3XXX_EN_DPLL_FRBYPASS) |
257 | return __clk_get_rate(dd->clk_bypass); | 257 | return __clk_get_rate(dd->clk_bypass); |
258 | } else if (soc_is_am33xx() || cpu_is_omap44xx()) { | 258 | } else if (soc_is_am33xx() || cpu_is_omap44xx() || soc_is_am43xx()) { |
259 | if (v == OMAP4XXX_EN_DPLL_LPBYPASS || | 259 | if (v == OMAP4XXX_EN_DPLL_LPBYPASS || |
260 | v == OMAP4XXX_EN_DPLL_FRBYPASS || | 260 | v == OMAP4XXX_EN_DPLL_FRBYPASS || |
261 | v == OMAP4XXX_EN_DPLL_MNBYPASS) | 261 | v == OMAP4XXX_EN_DPLL_MNBYPASS) |
diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c index ab43755364f5..9fe8c949305c 100644 --- a/arch/arm/mach-omap2/gpmc.c +++ b/arch/arm/mach-omap2/gpmc.c | |||
@@ -501,7 +501,7 @@ static int gpmc_cs_delete_mem(int cs) | |||
501 | int r; | 501 | int r; |
502 | 502 | ||
503 | spin_lock(&gpmc_mem_lock); | 503 | spin_lock(&gpmc_mem_lock); |
504 | r = release_resource(&gpmc_cs_mem[cs]); | 504 | r = release_resource(res); |
505 | res->start = 0; | 505 | res->start = 0; |
506 | res->end = 0; | 506 | res->end = 0; |
507 | spin_unlock(&gpmc_mem_lock); | 507 | spin_unlock(&gpmc_mem_lock); |
@@ -527,6 +527,14 @@ static int gpmc_cs_remap(int cs, u32 base) | |||
527 | pr_err("%s: requested chip-select is disabled\n", __func__); | 527 | pr_err("%s: requested chip-select is disabled\n", __func__); |
528 | return -ENODEV; | 528 | return -ENODEV; |
529 | } | 529 | } |
530 | |||
531 | /* | ||
532 | * Make sure we ignore any device offsets from the GPMC partition | ||
533 | * allocated for the chip select and that the new base confirms | ||
534 | * to the GPMC 16MB minimum granularity. | ||
535 | */ | ||
536 | base &= ~(SZ_16M - 1); | ||
537 | |||
530 | gpmc_cs_get_memconf(cs, &old_base, &size); | 538 | gpmc_cs_get_memconf(cs, &old_base, &size); |
531 | if (base == old_base) | 539 | if (base == old_base) |
532 | return 0; | 540 | return 0; |
@@ -586,6 +594,8 @@ EXPORT_SYMBOL(gpmc_cs_request); | |||
586 | 594 | ||
587 | void gpmc_cs_free(int cs) | 595 | void gpmc_cs_free(int cs) |
588 | { | 596 | { |
597 | struct resource *res = &gpmc_cs_mem[cs]; | ||
598 | |||
589 | spin_lock(&gpmc_mem_lock); | 599 | spin_lock(&gpmc_mem_lock); |
590 | if (cs >= gpmc_cs_num || cs < 0 || !gpmc_cs_reserved(cs)) { | 600 | if (cs >= gpmc_cs_num || cs < 0 || !gpmc_cs_reserved(cs)) { |
591 | printk(KERN_ERR "Trying to free non-reserved GPMC CS%d\n", cs); | 601 | printk(KERN_ERR "Trying to free non-reserved GPMC CS%d\n", cs); |
@@ -594,7 +604,8 @@ void gpmc_cs_free(int cs) | |||
594 | return; | 604 | return; |
595 | } | 605 | } |
596 | gpmc_cs_disable_mem(cs); | 606 | gpmc_cs_disable_mem(cs); |
597 | release_resource(&gpmc_cs_mem[cs]); | 607 | if (res->flags) |
608 | release_resource(res); | ||
598 | gpmc_cs_set_reserved(cs, 0); | 609 | gpmc_cs_set_reserved(cs, 0); |
599 | spin_unlock(&gpmc_mem_lock); | 610 | spin_unlock(&gpmc_mem_lock); |
600 | } | 611 | } |
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index 1f33f5db10d5..66c60fe1104c 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c | |||
@@ -2546,11 +2546,12 @@ static int __init _init(struct omap_hwmod *oh, void *data) | |||
2546 | return -EINVAL; | 2546 | return -EINVAL; |
2547 | } | 2547 | } |
2548 | 2548 | ||
2549 | if (np) | 2549 | if (np) { |
2550 | if (of_find_property(np, "ti,no-reset-on-init", NULL)) | 2550 | if (of_find_property(np, "ti,no-reset-on-init", NULL)) |
2551 | oh->flags |= HWMOD_INIT_NO_RESET; | 2551 | oh->flags |= HWMOD_INIT_NO_RESET; |
2552 | if (of_find_property(np, "ti,no-idle-on-init", NULL)) | 2552 | if (of_find_property(np, "ti,no-idle-on-init", NULL)) |
2553 | oh->flags |= HWMOD_INIT_NO_IDLE; | 2553 | oh->flags |= HWMOD_INIT_NO_IDLE; |
2554 | } | ||
2554 | 2555 | ||
2555 | oh->_state = _HWMOD_STATE_INITIALIZED; | 2556 | oh->_state = _HWMOD_STATE_INITIALIZED; |
2556 | 2557 | ||
diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c index a123ff0070bd..71ac7d5f3385 100644 --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | |||
@@ -1964,7 +1964,7 @@ static struct omap_hwmod_irq_info omap3xxx_usb_host_hs_irqs[] = { | |||
1964 | static struct omap_hwmod omap3xxx_usb_host_hs_hwmod = { | 1964 | static struct omap_hwmod omap3xxx_usb_host_hs_hwmod = { |
1965 | .name = "usb_host_hs", | 1965 | .name = "usb_host_hs", |
1966 | .class = &omap3xxx_usb_host_hs_hwmod_class, | 1966 | .class = &omap3xxx_usb_host_hs_hwmod_class, |
1967 | .clkdm_name = "l3_init_clkdm", | 1967 | .clkdm_name = "usbhost_clkdm", |
1968 | .mpu_irqs = omap3xxx_usb_host_hs_irqs, | 1968 | .mpu_irqs = omap3xxx_usb_host_hs_irqs, |
1969 | .main_clk = "usbhost_48m_fck", | 1969 | .main_clk = "usbhost_48m_fck", |
1970 | .prcm = { | 1970 | .prcm = { |
@@ -2047,7 +2047,7 @@ static struct omap_hwmod_irq_info omap3xxx_usb_tll_hs_irqs[] = { | |||
2047 | static struct omap_hwmod omap3xxx_usb_tll_hs_hwmod = { | 2047 | static struct omap_hwmod omap3xxx_usb_tll_hs_hwmod = { |
2048 | .name = "usb_tll_hs", | 2048 | .name = "usb_tll_hs", |
2049 | .class = &omap3xxx_usb_tll_hs_hwmod_class, | 2049 | .class = &omap3xxx_usb_tll_hs_hwmod_class, |
2050 | .clkdm_name = "l3_init_clkdm", | 2050 | .clkdm_name = "core_l4_clkdm", |
2051 | .mpu_irqs = omap3xxx_usb_tll_hs_irqs, | 2051 | .mpu_irqs = omap3xxx_usb_tll_hs_irqs, |
2052 | .main_clk = "usbtll_fck", | 2052 | .main_clk = "usbtll_fck", |
2053 | .prcm = { | 2053 | .prcm = { |
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index 1f3770a8a728..87099bb6de69 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c | |||
@@ -330,10 +330,6 @@ void omap_sram_idle(void) | |||
330 | omap3_sram_restore_context(); | 330 | omap3_sram_restore_context(); |
331 | omap2_sms_restore_context(); | 331 | omap2_sms_restore_context(); |
332 | } | 332 | } |
333 | if (core_next_state == PWRDM_POWER_OFF) | ||
334 | omap2_prm_clear_mod_reg_bits(OMAP3430_AUTO_OFF_MASK, | ||
335 | OMAP3430_GR_MOD, | ||
336 | OMAP3_PRM_VOLTCTRL_OFFSET); | ||
337 | } | 333 | } |
338 | omap3_intc_resume_idle(); | 334 | omap3_intc_resume_idle(); |
339 | 335 | ||
diff --git a/arch/arm/mach-pxa/include/mach/hx4700.h b/arch/arm/mach-pxa/include/mach/hx4700.h index 8bc02913517c..0e1bb46264f9 100644 --- a/arch/arm/mach-pxa/include/mach/hx4700.h +++ b/arch/arm/mach-pxa/include/mach/hx4700.h | |||
@@ -14,6 +14,7 @@ | |||
14 | 14 | ||
15 | #include <linux/gpio.h> | 15 | #include <linux/gpio.h> |
16 | #include <linux/mfd/asic3.h> | 16 | #include <linux/mfd/asic3.h> |
17 | #include "irqs.h" /* PXA_NR_BUILTIN_GPIO */ | ||
17 | 18 | ||
18 | #define HX4700_ASIC3_GPIO_BASE PXA_NR_BUILTIN_GPIO | 19 | #define HX4700_ASIC3_GPIO_BASE PXA_NR_BUILTIN_GPIO |
19 | #define HX4700_EGPIO_BASE (HX4700_ASIC3_GPIO_BASE + ASIC3_NUM_GPIOS) | 20 | #define HX4700_EGPIO_BASE (HX4700_ASIC3_GPIO_BASE + ASIC3_NUM_GPIOS) |
diff --git a/arch/arm/mach-rockchip/platsmp.c b/arch/arm/mach-rockchip/platsmp.c index dbfa5a26cfff..072842f6491b 100644 --- a/arch/arm/mach-rockchip/platsmp.c +++ b/arch/arm/mach-rockchip/platsmp.c | |||
@@ -152,7 +152,7 @@ static void __init rockchip_smp_prepare_cpus(unsigned int max_cpus) | |||
152 | 152 | ||
153 | node = of_find_compatible_node(NULL, NULL, "rockchip,rk3066-pmu"); | 153 | node = of_find_compatible_node(NULL, NULL, "rockchip,rk3066-pmu"); |
154 | if (!node) { | 154 | if (!node) { |
155 | pr_err("%s: could not find sram dt node\n", __func__); | 155 | pr_err("%s: could not find pmu dt node\n", __func__); |
156 | return; | 156 | return; |
157 | } | 157 | } |
158 | 158 | ||
diff --git a/arch/arm/mach-s3c24xx/Kconfig b/arch/arm/mach-s3c24xx/Kconfig index 1e52b6926374..04284de7aca5 100644 --- a/arch/arm/mach-s3c24xx/Kconfig +++ b/arch/arm/mach-s3c24xx/Kconfig | |||
@@ -28,7 +28,6 @@ config CPU_S3C2410 | |||
28 | bool "SAMSUNG S3C2410" | 28 | bool "SAMSUNG S3C2410" |
29 | default y | 29 | default y |
30 | select CPU_ARM920T | 30 | select CPU_ARM920T |
31 | select CPU_LLSERIAL_S3C2410 | ||
32 | select S3C2410_COMMON_CLK | 31 | select S3C2410_COMMON_CLK |
33 | select S3C2410_DMA if S3C24XX_DMA | 32 | select S3C2410_DMA if S3C24XX_DMA |
34 | select ARM_S3C2410_CPUFREQ if ARM_S3C24XX_CPUFREQ | 33 | select ARM_S3C2410_CPUFREQ if ARM_S3C24XX_CPUFREQ |
@@ -41,7 +40,6 @@ config CPU_S3C2410 | |||
41 | config CPU_S3C2412 | 40 | config CPU_S3C2412 |
42 | bool "SAMSUNG S3C2412" | 41 | bool "SAMSUNG S3C2412" |
43 | select CPU_ARM926T | 42 | select CPU_ARM926T |
44 | select CPU_LLSERIAL_S3C2440 | ||
45 | select S3C2412_COMMON_CLK | 43 | select S3C2412_COMMON_CLK |
46 | select S3C2412_DMA if S3C24XX_DMA | 44 | select S3C2412_DMA if S3C24XX_DMA |
47 | select S3C2412_PM if PM | 45 | select S3C2412_PM if PM |
@@ -51,7 +49,6 @@ config CPU_S3C2412 | |||
51 | config CPU_S3C2416 | 49 | config CPU_S3C2416 |
52 | bool "SAMSUNG S3C2416/S3C2450" | 50 | bool "SAMSUNG S3C2416/S3C2450" |
53 | select CPU_ARM926T | 51 | select CPU_ARM926T |
54 | select CPU_LLSERIAL_S3C2440 | ||
55 | select S3C2416_PM if PM | 52 | select S3C2416_PM if PM |
56 | select S3C2443_COMMON_CLK | 53 | select S3C2443_COMMON_CLK |
57 | select S3C2443_DMA if S3C24XX_DMA | 54 | select S3C2443_DMA if S3C24XX_DMA |
@@ -61,7 +58,6 @@ config CPU_S3C2416 | |||
61 | config CPU_S3C2440 | 58 | config CPU_S3C2440 |
62 | bool "SAMSUNG S3C2440" | 59 | bool "SAMSUNG S3C2440" |
63 | select CPU_ARM920T | 60 | select CPU_ARM920T |
64 | select CPU_LLSERIAL_S3C2440 | ||
65 | select S3C2410_COMMON_CLK | 61 | select S3C2410_COMMON_CLK |
66 | select S3C2410_PM if PM | 62 | select S3C2410_PM if PM |
67 | select S3C2440_DMA if S3C24XX_DMA | 63 | select S3C2440_DMA if S3C24XX_DMA |
@@ -71,7 +67,6 @@ config CPU_S3C2440 | |||
71 | config CPU_S3C2442 | 67 | config CPU_S3C2442 |
72 | bool "SAMSUNG S3C2442" | 68 | bool "SAMSUNG S3C2442" |
73 | select CPU_ARM920T | 69 | select CPU_ARM920T |
74 | select CPU_LLSERIAL_S3C2440 | ||
75 | select S3C2410_COMMON_CLK | 70 | select S3C2410_COMMON_CLK |
76 | select S3C2410_DMA if S3C24XX_DMA | 71 | select S3C2410_DMA if S3C24XX_DMA |
77 | select S3C2410_PM if PM | 72 | select S3C2410_PM if PM |
@@ -86,7 +81,6 @@ config CPU_S3C244X | |||
86 | config CPU_S3C2443 | 81 | config CPU_S3C2443 |
87 | bool "SAMSUNG S3C2443" | 82 | bool "SAMSUNG S3C2443" |
88 | select CPU_ARM920T | 83 | select CPU_ARM920T |
89 | select CPU_LLSERIAL_S3C2440 | ||
90 | select S3C2443_COMMON_CLK | 84 | select S3C2443_COMMON_CLK |
91 | select S3C2443_DMA if S3C24XX_DMA | 85 | select S3C2443_DMA if S3C24XX_DMA |
92 | help | 86 | help |
@@ -148,28 +142,6 @@ config S3C2410_PM | |||
148 | help | 142 | help |
149 | Power Management code common to S3C2410 and better | 143 | Power Management code common to S3C2410 and better |
150 | 144 | ||
151 | # low-level serial option nodes | ||
152 | |||
153 | config CPU_LLSERIAL_S3C2410_ONLY | ||
154 | bool | ||
155 | default y if CPU_LLSERIAL_S3C2410 && !CPU_LLSERIAL_S3C2440 | ||
156 | |||
157 | config CPU_LLSERIAL_S3C2440_ONLY | ||
158 | bool | ||
159 | default y if CPU_LLSERIAL_S3C2440 && !CPU_LLSERIAL_S3C2410 | ||
160 | |||
161 | config CPU_LLSERIAL_S3C2410 | ||
162 | bool | ||
163 | help | ||
164 | Selected if there is an S3C2410 (or register compatible) serial | ||
165 | low-level implementation needed | ||
166 | |||
167 | config CPU_LLSERIAL_S3C2440 | ||
168 | bool | ||
169 | help | ||
170 | Selected if there is an S3C2440 (or register compatible) serial | ||
171 | low-level implementation needed | ||
172 | |||
173 | config S3C24XX_PLL | 145 | config S3C24XX_PLL |
174 | bool "Support CPUfreq changing of PLL frequency (EXPERIMENTAL)" | 146 | bool "Support CPUfreq changing of PLL frequency (EXPERIMENTAL)" |
175 | depends on ARM_S3C24XX_CPUFREQ | 147 | depends on ARM_S3C24XX_CPUFREQ |
diff --git a/arch/arm/mach-s3c24xx/include/mach/debug-macro.S b/arch/arm/mach-s3c24xx/include/mach/debug-macro.S deleted file mode 100644 index 2f39737544c0..000000000000 --- a/arch/arm/mach-s3c24xx/include/mach/debug-macro.S +++ /dev/null | |||
@@ -1,101 +0,0 @@ | |||
1 | /* arch/arm/mach-s3c2410/include/mach/debug-macro.S | ||
2 | * | ||
3 | * Debugging macro include header | ||
4 | * | ||
5 | * Copyright (C) 1994-1999 Russell King | ||
6 | * Copyright (C) 2005 Simtec Electronics | ||
7 | * | ||
8 | * Moved from linux/arch/arm/kernel/debug.S by Ben Dooks | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | */ | ||
14 | |||
15 | #include <mach/map.h> | ||
16 | #include <mach/regs-gpio.h> | ||
17 | #include <linux/serial_s3c.h> | ||
18 | |||
19 | #define S3C2410_UART1_OFF (0x4000) | ||
20 | #define SHIFT_2440TXF (14-9) | ||
21 | |||
22 | .macro addruart, rp, rv, tmp | ||
23 | ldr \rp, = S3C24XX_PA_UART | ||
24 | ldr \rv, = S3C24XX_VA_UART | ||
25 | #if CONFIG_DEBUG_S3C_UART != 0 | ||
26 | add \rp, \rp, #(S3C2410_UART1_OFF * CONFIG_DEBUG_S3C_UART) | ||
27 | add \rv, \rv, #(S3C2410_UART1_OFF * CONFIG_DEBUG_S3C_UART) | ||
28 | #endif | ||
29 | .endm | ||
30 | |||
31 | .macro fifo_full_s3c24xx rd, rx | ||
32 | @ check for arm920 vs arm926. currently assume all arm926 | ||
33 | @ devices have an 64 byte FIFO identical to the s3c2440 | ||
34 | mrc p15, 0, \rd, c0, c0 | ||
35 | and \rd, \rd, #0xff0 | ||
36 | teq \rd, #0x260 | ||
37 | beq 1004f | ||
38 | mrc p15, 0, \rd, c1, c0 | ||
39 | tst \rd, #1 | ||
40 | addeq \rd, \rx, #(S3C24XX_PA_GPIO - S3C24XX_PA_UART) | ||
41 | addne \rd, \rx, #(S3C24XX_VA_GPIO - S3C24XX_VA_UART) | ||
42 | bic \rd, \rd, #0xff000 | ||
43 | ldr \rd, [\rd, # S3C2410_GSTATUS1 - S3C2410_GPIOREG(0)] | ||
44 | and \rd, \rd, #0x00ff0000 | ||
45 | teq \rd, #0x00440000 @ is it 2440? | ||
46 | 1004: | ||
47 | ldr \rd, [\rx, # S3C2410_UFSTAT] | ||
48 | moveq \rd, \rd, lsr #SHIFT_2440TXF | ||
49 | tst \rd, #S3C2410_UFSTAT_TXFULL | ||
50 | .endm | ||
51 | |||
52 | .macro fifo_full_s3c2410 rd, rx | ||
53 | ldr \rd, [\rx, # S3C2410_UFSTAT] | ||
54 | tst \rd, #S3C2410_UFSTAT_TXFULL | ||
55 | .endm | ||
56 | |||
57 | /* fifo level reading */ | ||
58 | |||
59 | .macro fifo_level_s3c24xx rd, rx | ||
60 | @ check for arm920 vs arm926. currently assume all arm926 | ||
61 | @ devices have an 64 byte FIFO identical to the s3c2440 | ||
62 | mrc p15, 0, \rd, c0, c0 | ||
63 | and \rd, \rd, #0xff0 | ||
64 | teq \rd, #0x260 | ||
65 | beq 10000f | ||
66 | mrc p15, 0, \rd, c1, c0 | ||
67 | tst \rd, #1 | ||
68 | addeq \rd, \rx, #(S3C24XX_PA_GPIO - S3C24XX_PA_UART) | ||
69 | addne \rd, \rx, #(S3C24XX_VA_GPIO - S3C24XX_VA_UART) | ||
70 | bic \rd, \rd, #0xff000 | ||
71 | ldr \rd, [\rd, # S3C2410_GSTATUS1 - S3C2410_GPIOREG(0)] | ||
72 | and \rd, \rd, #0x00ff0000 | ||
73 | teq \rd, #0x00440000 @ is it 2440? | ||
74 | |||
75 | 10000: | ||
76 | ldr \rd, [\rx, # S3C2410_UFSTAT] | ||
77 | andne \rd, \rd, #S3C2410_UFSTAT_TXMASK | ||
78 | andeq \rd, \rd, #S3C2440_UFSTAT_TXMASK | ||
79 | .endm | ||
80 | |||
81 | .macro fifo_level_s3c2410 rd, rx | ||
82 | ldr \rd, [\rx, # S3C2410_UFSTAT] | ||
83 | and \rd, \rd, #S3C2410_UFSTAT_TXMASK | ||
84 | .endm | ||
85 | |||
86 | /* Select the correct implementation depending on the configuration. The | ||
87 | * S3C2440 will get selected by default, as these are the most widely | ||
88 | * used variants of these | ||
89 | */ | ||
90 | |||
91 | #if defined(CONFIG_CPU_LLSERIAL_S3C2410_ONLY) | ||
92 | #define fifo_full fifo_full_s3c2410 | ||
93 | #define fifo_level fifo_level_s3c2410 | ||
94 | #elif !defined(CONFIG_CPU_LLSERIAL_S3C2440_ONLY) | ||
95 | #define fifo_full fifo_full_s3c24xx | ||
96 | #define fifo_level fifo_level_s3c24xx | ||
97 | #endif | ||
98 | |||
99 | /* include the reset of the code which will do the work */ | ||
100 | |||
101 | #include <debug/samsung.S> | ||
diff --git a/arch/arm/mach-shmobile/board-armadillo800eva.c b/arch/arm/mach-shmobile/board-armadillo800eva.c index 2858f380beae..486063db2a2f 100644 --- a/arch/arm/mach-shmobile/board-armadillo800eva.c +++ b/arch/arm/mach-shmobile/board-armadillo800eva.c | |||
@@ -992,6 +992,7 @@ static struct asoc_simple_card_info fsi_wm8978_info = { | |||
992 | .platform = "sh_fsi2", | 992 | .platform = "sh_fsi2", |
993 | .daifmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBM_CFM, | 993 | .daifmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBM_CFM, |
994 | .cpu_dai = { | 994 | .cpu_dai = { |
995 | .fmt = SND_SOC_DAIFMT_IB_NF, | ||
995 | .name = "fsia-dai", | 996 | .name = "fsia-dai", |
996 | }, | 997 | }, |
997 | .codec_dai = { | 998 | .codec_dai = { |
diff --git a/arch/arm/mach-shmobile/board-lager.c b/arch/arm/mach-shmobile/board-lager.c index f0104bfe544e..18c7e0311aa6 100644 --- a/arch/arm/mach-shmobile/board-lager.c +++ b/arch/arm/mach-shmobile/board-lager.c | |||
@@ -588,14 +588,12 @@ static struct asoc_simple_card_info rsnd_card_info = { | |||
588 | .card = "SSI01-AK4643", | 588 | .card = "SSI01-AK4643", |
589 | .codec = "ak4642-codec.2-0012", | 589 | .codec = "ak4642-codec.2-0012", |
590 | .platform = "rcar_sound", | 590 | .platform = "rcar_sound", |
591 | .daifmt = SND_SOC_DAIFMT_LEFT_J, | 591 | .daifmt = SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_CBM_CFM, |
592 | .cpu_dai = { | 592 | .cpu_dai = { |
593 | .name = "rcar_sound", | 593 | .name = "rcar_sound", |
594 | .fmt = SND_SOC_DAIFMT_CBS_CFS, | ||
595 | }, | 594 | }, |
596 | .codec_dai = { | 595 | .codec_dai = { |
597 | .name = "ak4642-hifi", | 596 | .name = "ak4642-hifi", |
598 | .fmt = SND_SOC_DAIFMT_CBM_CFM, | ||
599 | .sysclk = 11289600, | 597 | .sysclk = 11289600, |
600 | }, | 598 | }, |
601 | }; | 599 | }; |
diff --git a/arch/arm/mach-shmobile/clock-r8a7778.c b/arch/arm/mach-shmobile/clock-r8a7778.c index 2009a9bc6356..9989b1b06ffd 100644 --- a/arch/arm/mach-shmobile/clock-r8a7778.c +++ b/arch/arm/mach-shmobile/clock-r8a7778.c | |||
@@ -170,7 +170,7 @@ static struct clk mstp_clks[MSTP_NR] = { | |||
170 | [MSTP010] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 10, 0), /* SSI2 */ | 170 | [MSTP010] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 10, 0), /* SSI2 */ |
171 | [MSTP009] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 9, 0), /* SSI3 */ | 171 | [MSTP009] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 9, 0), /* SSI3 */ |
172 | [MSTP008] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 8, 0), /* SRU */ | 172 | [MSTP008] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 8, 0), /* SRU */ |
173 | [MSTP007] = SH_CLK_MSTP32(&p_clk, MSTPCR0, 7, 0), /* HSPI */ | 173 | [MSTP007] = SH_CLK_MSTP32(&s_clk, MSTPCR0, 7, 0), /* HSPI */ |
174 | }; | 174 | }; |
175 | 175 | ||
176 | static struct clk_lookup lookups[] = { | 176 | static struct clk_lookup lookups[] = { |
diff --git a/arch/arm/mach-spear/headsmp.S b/arch/arm/mach-spear/headsmp.S index ed85473a047f..c52192dc3d9f 100644 --- a/arch/arm/mach-spear/headsmp.S +++ b/arch/arm/mach-spear/headsmp.S | |||
@@ -3,7 +3,7 @@ | |||
3 | * | 3 | * |
4 | * Picked from realview | 4 | * Picked from realview |
5 | * Copyright (c) 2012 ST Microelectronics Limited | 5 | * Copyright (c) 2012 ST Microelectronics Limited |
6 | * Shiraz Hashim <shiraz.hashim@st.com> | 6 | * Shiraz Hashim <shiraz.linux.kernel@gmail.com> |
7 | * | 7 | * |
8 | * This program is free software; you can redistribute it and/or modify | 8 | * This program is free software; you can redistribute it and/or modify |
9 | * it under the terms of the GNU General Public License version 2 as | 9 | * it under the terms of the GNU General Public License version 2 as |
diff --git a/arch/arm/mach-spear/platsmp.c b/arch/arm/mach-spear/platsmp.c index 5c4a19887b2b..c19751fff2c6 100644 --- a/arch/arm/mach-spear/platsmp.c +++ b/arch/arm/mach-spear/platsmp.c | |||
@@ -4,7 +4,7 @@ | |||
4 | * based upon linux/arch/arm/mach-realview/platsmp.c | 4 | * based upon linux/arch/arm/mach-realview/platsmp.c |
5 | * | 5 | * |
6 | * Copyright (C) 2012 ST Microelectronics Ltd. | 6 | * Copyright (C) 2012 ST Microelectronics Ltd. |
7 | * Shiraz Hashim <shiraz.hashim@st.com> | 7 | * Shiraz Hashim <shiraz.linux.kernel@gmail.com> |
8 | * | 8 | * |
9 | * This program is free software; you can redistribute it and/or modify | 9 | * This program is free software; you can redistribute it and/or modify |
10 | * it under the terms of the GNU General Public License version 2 as | 10 | * it under the terms of the GNU General Public License version 2 as |
diff --git a/arch/arm/mach-spear/time.c b/arch/arm/mach-spear/time.c index 218ba5b67d92..26fda4ed4d51 100644 --- a/arch/arm/mach-spear/time.c +++ b/arch/arm/mach-spear/time.c | |||
@@ -2,7 +2,7 @@ | |||
2 | * arch/arm/plat-spear/time.c | 2 | * arch/arm/plat-spear/time.c |
3 | * | 3 | * |
4 | * Copyright (C) 2010 ST Microelectronics | 4 | * Copyright (C) 2010 ST Microelectronics |
5 | * Shiraz Hashim<shiraz.hashim@st.com> | 5 | * Shiraz Hashim<shiraz.linux.kernel@gmail.com> |
6 | * | 6 | * |
7 | * This file is licensed under the terms of the GNU General Public | 7 | * This file is licensed under the terms of the GNU General Public |
8 | * License version 2. This program is licensed "as is" without any | 8 | * License version 2. This program is licensed "as is" without any |
@@ -71,7 +71,7 @@ static void clockevent_set_mode(enum clock_event_mode mode, | |||
71 | static int clockevent_next_event(unsigned long evt, | 71 | static int clockevent_next_event(unsigned long evt, |
72 | struct clock_event_device *clk_event_dev); | 72 | struct clock_event_device *clk_event_dev); |
73 | 73 | ||
74 | static void spear_clocksource_init(void) | 74 | static void __init spear_clocksource_init(void) |
75 | { | 75 | { |
76 | u32 tick_rate; | 76 | u32 tick_rate; |
77 | u16 val; | 77 | u16 val; |
diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig index 92d660f9610f..55b305d51669 100644 --- a/arch/arm/mach-tegra/Kconfig +++ b/arch/arm/mach-tegra/Kconfig | |||
@@ -70,7 +70,4 @@ config TEGRA_AHB | |||
70 | which controls AHB bus master arbitration and some | 70 | which controls AHB bus master arbitration and some |
71 | performance parameters(priority, prefech size). | 71 | performance parameters(priority, prefech size). |
72 | 72 | ||
73 | config TEGRA_EMC_SCALING_ENABLE | ||
74 | bool "Enable scaling the memory frequency" | ||
75 | |||
76 | endmenu | 73 | endmenu |
diff --git a/arch/arm/mach-vexpress/dcscb.c b/arch/arm/mach-vexpress/dcscb.c index 788495d35cf9..30b993399ed7 100644 --- a/arch/arm/mach-vexpress/dcscb.c +++ b/arch/arm/mach-vexpress/dcscb.c | |||
@@ -51,12 +51,14 @@ static int dcscb_allcpus_mask[2]; | |||
51 | static int dcscb_power_up(unsigned int cpu, unsigned int cluster) | 51 | static int dcscb_power_up(unsigned int cpu, unsigned int cluster) |
52 | { | 52 | { |
53 | unsigned int rst_hold, cpumask = (1 << cpu); | 53 | unsigned int rst_hold, cpumask = (1 << cpu); |
54 | unsigned int all_mask = dcscb_allcpus_mask[cluster]; | 54 | unsigned int all_mask; |
55 | 55 | ||
56 | pr_debug("%s: cpu %u cluster %u\n", __func__, cpu, cluster); | 56 | pr_debug("%s: cpu %u cluster %u\n", __func__, cpu, cluster); |
57 | if (cpu >= 4 || cluster >= 2) | 57 | if (cpu >= 4 || cluster >= 2) |
58 | return -EINVAL; | 58 | return -EINVAL; |
59 | 59 | ||
60 | all_mask = dcscb_allcpus_mask[cluster]; | ||
61 | |||
60 | /* | 62 | /* |
61 | * Since this is called with IRQs enabled, and no arch_spin_lock_irq | 63 | * Since this is called with IRQs enabled, and no arch_spin_lock_irq |
62 | * variant exists, we need to disable IRQs manually here. | 64 | * variant exists, we need to disable IRQs manually here. |
@@ -101,11 +103,12 @@ static void dcscb_power_down(void) | |||
101 | cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0); | 103 | cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0); |
102 | cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1); | 104 | cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1); |
103 | cpumask = (1 << cpu); | 105 | cpumask = (1 << cpu); |
104 | all_mask = dcscb_allcpus_mask[cluster]; | ||
105 | 106 | ||
106 | pr_debug("%s: cpu %u cluster %u\n", __func__, cpu, cluster); | 107 | pr_debug("%s: cpu %u cluster %u\n", __func__, cpu, cluster); |
107 | BUG_ON(cpu >= 4 || cluster >= 2); | 108 | BUG_ON(cpu >= 4 || cluster >= 2); |
108 | 109 | ||
110 | all_mask = dcscb_allcpus_mask[cluster]; | ||
111 | |||
109 | __mcpm_cpu_going_down(cpu, cluster); | 112 | __mcpm_cpu_going_down(cpu, cluster); |
110 | 113 | ||
111 | arch_spin_lock(&dcscb_lock); | 114 | arch_spin_lock(&dcscb_lock); |
diff --git a/arch/arm/mach-vexpress/spc.c b/arch/arm/mach-vexpress/spc.c index c26ef5b92ca7..2c2754e79cb3 100644 --- a/arch/arm/mach-vexpress/spc.c +++ b/arch/arm/mach-vexpress/spc.c | |||
@@ -392,7 +392,7 @@ static irqreturn_t ve_spc_irq_handler(int irq, void *data) | |||
392 | * +--------------------------+ | 392 | * +--------------------------+ |
393 | * | 31 20 | 19 0 | | 393 | * | 31 20 | 19 0 | |
394 | * +--------------------------+ | 394 | * +--------------------------+ |
395 | * | u_volt | freq(kHz) | | 395 | * | m_volt | freq(kHz) | |
396 | * +--------------------------+ | 396 | * +--------------------------+ |
397 | */ | 397 | */ |
398 | #define MULT_FACTOR 20 | 398 | #define MULT_FACTOR 20 |
@@ -414,7 +414,7 @@ static int ve_spc_populate_opps(uint32_t cluster) | |||
414 | ret = ve_spc_read_sys_cfg(SYSCFG_SCC, off, &data); | 414 | ret = ve_spc_read_sys_cfg(SYSCFG_SCC, off, &data); |
415 | if (!ret) { | 415 | if (!ret) { |
416 | opps->freq = (data & FREQ_MASK) * MULT_FACTOR; | 416 | opps->freq = (data & FREQ_MASK) * MULT_FACTOR; |
417 | opps->u_volt = data >> VOLT_SHIFT; | 417 | opps->u_volt = (data >> VOLT_SHIFT) * 1000; |
418 | } else { | 418 | } else { |
419 | break; | 419 | break; |
420 | } | 420 | } |
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig index f5ad9ee70426..5bf7c3c3b301 100644 --- a/arch/arm/mm/Kconfig +++ b/arch/arm/mm/Kconfig | |||
@@ -420,29 +420,29 @@ config CPU_32v3 | |||
420 | bool | 420 | bool |
421 | select CPU_USE_DOMAINS if MMU | 421 | select CPU_USE_DOMAINS if MMU |
422 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP | 422 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP |
423 | select TLS_REG_EMUL if SMP || !MMU | ||
424 | select NEED_KUSER_HELPERS | 423 | select NEED_KUSER_HELPERS |
424 | select TLS_REG_EMUL if SMP || !MMU | ||
425 | 425 | ||
426 | config CPU_32v4 | 426 | config CPU_32v4 |
427 | bool | 427 | bool |
428 | select CPU_USE_DOMAINS if MMU | 428 | select CPU_USE_DOMAINS if MMU |
429 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP | 429 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP |
430 | select TLS_REG_EMUL if SMP || !MMU | ||
431 | select NEED_KUSER_HELPERS | 430 | select NEED_KUSER_HELPERS |
431 | select TLS_REG_EMUL if SMP || !MMU | ||
432 | 432 | ||
433 | config CPU_32v4T | 433 | config CPU_32v4T |
434 | bool | 434 | bool |
435 | select CPU_USE_DOMAINS if MMU | 435 | select CPU_USE_DOMAINS if MMU |
436 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP | 436 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP |
437 | select TLS_REG_EMUL if SMP || !MMU | ||
438 | select NEED_KUSER_HELPERS | 437 | select NEED_KUSER_HELPERS |
438 | select TLS_REG_EMUL if SMP || !MMU | ||
439 | 439 | ||
440 | config CPU_32v5 | 440 | config CPU_32v5 |
441 | bool | 441 | bool |
442 | select CPU_USE_DOMAINS if MMU | 442 | select CPU_USE_DOMAINS if MMU |
443 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP | 443 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP |
444 | select TLS_REG_EMUL if SMP || !MMU | ||
445 | select NEED_KUSER_HELPERS | 444 | select NEED_KUSER_HELPERS |
445 | select TLS_REG_EMUL if SMP || !MMU | ||
446 | 446 | ||
447 | config CPU_32v6 | 447 | config CPU_32v6 |
448 | bool | 448 | bool |
diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index f62aa0677e5c..6b00be1f971e 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c | |||
@@ -1963,8 +1963,8 @@ arm_iommu_create_mapping(struct bus_type *bus, dma_addr_t base, size_t size) | |||
1963 | mapping->nr_bitmaps = 1; | 1963 | mapping->nr_bitmaps = 1; |
1964 | mapping->extensions = extensions; | 1964 | mapping->extensions = extensions; |
1965 | mapping->base = base; | 1965 | mapping->base = base; |
1966 | mapping->size = bitmap_size << PAGE_SHIFT; | ||
1967 | mapping->bits = BITS_PER_BYTE * bitmap_size; | 1966 | mapping->bits = BITS_PER_BYTE * bitmap_size; |
1967 | mapping->size = mapping->bits << PAGE_SHIFT; | ||
1968 | 1968 | ||
1969 | spin_lock_init(&mapping->lock); | 1969 | spin_lock_init(&mapping->lock); |
1970 | 1970 | ||
diff --git a/arch/arm/plat-samsung/include/plat/cpu.h b/arch/arm/plat-samsung/include/plat/cpu.h index 5992b8dd9b89..5a237db9f9eb 100644 --- a/arch/arm/plat-samsung/include/plat/cpu.h +++ b/arch/arm/plat-samsung/include/plat/cpu.h | |||
@@ -43,16 +43,6 @@ extern unsigned long samsung_cpu_id; | |||
43 | #define S5PV210_CPU_ID 0x43110000 | 43 | #define S5PV210_CPU_ID 0x43110000 |
44 | #define S5PV210_CPU_MASK 0xFFFFF000 | 44 | #define S5PV210_CPU_MASK 0xFFFFF000 |
45 | 45 | ||
46 | #define EXYNOS4210_CPU_ID 0x43210000 | ||
47 | #define EXYNOS4212_CPU_ID 0x43220000 | ||
48 | #define EXYNOS4412_CPU_ID 0xE4412200 | ||
49 | #define EXYNOS4_CPU_MASK 0xFFFE0000 | ||
50 | |||
51 | #define EXYNOS5250_SOC_ID 0x43520000 | ||
52 | #define EXYNOS5420_SOC_ID 0xE5420000 | ||
53 | #define EXYNOS5440_SOC_ID 0xE5440000 | ||
54 | #define EXYNOS5_SOC_MASK 0xFFFFF000 | ||
55 | |||
56 | #define IS_SAMSUNG_CPU(name, id, mask) \ | 46 | #define IS_SAMSUNG_CPU(name, id, mask) \ |
57 | static inline int is_samsung_##name(void) \ | 47 | static inline int is_samsung_##name(void) \ |
58 | { \ | 48 | { \ |
@@ -68,12 +58,6 @@ IS_SAMSUNG_CPU(s5p6440, S5P6440_CPU_ID, S5P64XX_CPU_MASK) | |||
68 | IS_SAMSUNG_CPU(s5p6450, S5P6450_CPU_ID, S5P64XX_CPU_MASK) | 58 | IS_SAMSUNG_CPU(s5p6450, S5P6450_CPU_ID, S5P64XX_CPU_MASK) |
69 | IS_SAMSUNG_CPU(s5pc100, S5PC100_CPU_ID, S5PC100_CPU_MASK) | 59 | IS_SAMSUNG_CPU(s5pc100, S5PC100_CPU_ID, S5PC100_CPU_MASK) |
70 | IS_SAMSUNG_CPU(s5pv210, S5PV210_CPU_ID, S5PV210_CPU_MASK) | 60 | IS_SAMSUNG_CPU(s5pv210, S5PV210_CPU_ID, S5PV210_CPU_MASK) |
71 | IS_SAMSUNG_CPU(exynos4210, EXYNOS4210_CPU_ID, EXYNOS4_CPU_MASK) | ||
72 | IS_SAMSUNG_CPU(exynos4212, EXYNOS4212_CPU_ID, EXYNOS4_CPU_MASK) | ||
73 | IS_SAMSUNG_CPU(exynos4412, EXYNOS4412_CPU_ID, EXYNOS4_CPU_MASK) | ||
74 | IS_SAMSUNG_CPU(exynos5250, EXYNOS5250_SOC_ID, EXYNOS5_SOC_MASK) | ||
75 | IS_SAMSUNG_CPU(exynos5420, EXYNOS5420_SOC_ID, EXYNOS5_SOC_MASK) | ||
76 | IS_SAMSUNG_CPU(exynos5440, EXYNOS5440_SOC_ID, EXYNOS5_SOC_MASK) | ||
77 | 61 | ||
78 | #if defined(CONFIG_CPU_S3C2410) || defined(CONFIG_CPU_S3C2412) || \ | 62 | #if defined(CONFIG_CPU_S3C2410) || defined(CONFIG_CPU_S3C2412) || \ |
79 | defined(CONFIG_CPU_S3C2416) || defined(CONFIG_CPU_S3C2440) || \ | 63 | defined(CONFIG_CPU_S3C2416) || defined(CONFIG_CPU_S3C2440) || \ |
@@ -126,50 +110,6 @@ IS_SAMSUNG_CPU(exynos5440, EXYNOS5440_SOC_ID, EXYNOS5_SOC_MASK) | |||
126 | # define soc_is_s5pv210() 0 | 110 | # define soc_is_s5pv210() 0 |
127 | #endif | 111 | #endif |
128 | 112 | ||
129 | #if defined(CONFIG_CPU_EXYNOS4210) | ||
130 | # define soc_is_exynos4210() is_samsung_exynos4210() | ||
131 | #else | ||
132 | # define soc_is_exynos4210() 0 | ||
133 | #endif | ||
134 | |||
135 | #if defined(CONFIG_SOC_EXYNOS4212) | ||
136 | # define soc_is_exynos4212() is_samsung_exynos4212() | ||
137 | #else | ||
138 | # define soc_is_exynos4212() 0 | ||
139 | #endif | ||
140 | |||
141 | #if defined(CONFIG_SOC_EXYNOS4412) | ||
142 | # define soc_is_exynos4412() is_samsung_exynos4412() | ||
143 | #else | ||
144 | # define soc_is_exynos4412() 0 | ||
145 | #endif | ||
146 | |||
147 | #define EXYNOS4210_REV_0 (0x0) | ||
148 | #define EXYNOS4210_REV_1_0 (0x10) | ||
149 | #define EXYNOS4210_REV_1_1 (0x11) | ||
150 | |||
151 | #if defined(CONFIG_SOC_EXYNOS5250) | ||
152 | # define soc_is_exynos5250() is_samsung_exynos5250() | ||
153 | #else | ||
154 | # define soc_is_exynos5250() 0 | ||
155 | #endif | ||
156 | |||
157 | #if defined(CONFIG_SOC_EXYNOS5420) | ||
158 | # define soc_is_exynos5420() is_samsung_exynos5420() | ||
159 | #else | ||
160 | # define soc_is_exynos5420() 0 | ||
161 | #endif | ||
162 | |||
163 | #if defined(CONFIG_SOC_EXYNOS5440) | ||
164 | # define soc_is_exynos5440() is_samsung_exynos5440() | ||
165 | #else | ||
166 | # define soc_is_exynos5440() 0 | ||
167 | #endif | ||
168 | |||
169 | #define soc_is_exynos4() (soc_is_exynos4210() || soc_is_exynos4212() || \ | ||
170 | soc_is_exynos4412()) | ||
171 | #define soc_is_exynos5() (soc_is_exynos5250() || soc_is_exynos5420()) | ||
172 | |||
173 | #define IODESC_ENT(x) { (unsigned long)S3C24XX_VA_##x, __phys_to_pfn(S3C24XX_PA_##x), S3C24XX_SZ_##x, MT_DEVICE } | 113 | #define IODESC_ENT(x) { (unsigned long)S3C24XX_VA_##x, __phys_to_pfn(S3C24XX_PA_##x), S3C24XX_SZ_##x, MT_DEVICE } |
174 | 114 | ||
175 | #ifndef KHZ | 115 | #ifndef KHZ |
@@ -239,7 +179,6 @@ extern struct bus_type s3c2443_subsys; | |||
239 | extern struct bus_type s3c6410_subsys; | 179 | extern struct bus_type s3c6410_subsys; |
240 | extern struct bus_type s5p64x0_subsys; | 180 | extern struct bus_type s5p64x0_subsys; |
241 | extern struct bus_type s5pv210_subsys; | 181 | extern struct bus_type s5pv210_subsys; |
242 | extern struct bus_type exynos_subsys; | ||
243 | 182 | ||
244 | extern void (*s5pc1xx_idle)(void); | 183 | extern void (*s5pc1xx_idle)(void); |
245 | 184 | ||
diff --git a/arch/arm/vfp/vfpdouble.c b/arch/arm/vfp/vfpdouble.c index 6cac43bd1d86..423f56dd4028 100644 --- a/arch/arm/vfp/vfpdouble.c +++ b/arch/arm/vfp/vfpdouble.c | |||
@@ -866,6 +866,8 @@ vfp_double_multiply_accumulate(int dd, int dn, int dm, u32 fpscr, u32 negate, ch | |||
866 | vdp.sign = vfp_sign_negate(vdp.sign); | 866 | vdp.sign = vfp_sign_negate(vdp.sign); |
867 | 867 | ||
868 | vfp_double_unpack(&vdn, vfp_get_double(dd)); | 868 | vfp_double_unpack(&vdn, vfp_get_double(dd)); |
869 | if (vdn.exponent == 0 && vdn.significand) | ||
870 | vfp_double_normalise_denormal(&vdn); | ||
869 | if (negate & NEG_SUBTRACT) | 871 | if (negate & NEG_SUBTRACT) |
870 | vdn.sign = vfp_sign_negate(vdn.sign); | 872 | vdn.sign = vfp_sign_negate(vdn.sign); |
871 | 873 | ||
diff --git a/arch/arm/vfp/vfpsingle.c b/arch/arm/vfp/vfpsingle.c index b252631b406b..4f96c1617aae 100644 --- a/arch/arm/vfp/vfpsingle.c +++ b/arch/arm/vfp/vfpsingle.c | |||
@@ -915,6 +915,8 @@ vfp_single_multiply_accumulate(int sd, int sn, s32 m, u32 fpscr, u32 negate, cha | |||
915 | v = vfp_get_float(sd); | 915 | v = vfp_get_float(sd); |
916 | pr_debug("VFP: s%u = %08x\n", sd, v); | 916 | pr_debug("VFP: s%u = %08x\n", sd, v); |
917 | vfp_single_unpack(&vsn, v); | 917 | vfp_single_unpack(&vsn, v); |
918 | if (vsn.exponent == 0 && vsn.significand) | ||
919 | vfp_single_normalise_denormal(&vsn); | ||
918 | if (negate & NEG_SUBTRACT) | 920 | if (negate & NEG_SUBTRACT) |
919 | vsn.sign = vfp_sign_negate(vsn.sign); | 921 | vsn.sign = vfp_sign_negate(vsn.sign); |
920 | 922 | ||
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index e6e4d3749a6e..e759af5d7098 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig | |||
@@ -323,8 +323,6 @@ menu "CPU Power Management" | |||
323 | 323 | ||
324 | source "drivers/cpuidle/Kconfig" | 324 | source "drivers/cpuidle/Kconfig" |
325 | 325 | ||
326 | source "kernel/power/Kconfig" | ||
327 | |||
328 | source "drivers/cpufreq/Kconfig" | 326 | source "drivers/cpufreq/Kconfig" |
329 | 327 | ||
330 | endmenu | 328 | endmenu |
diff --git a/arch/arm64/boot/dts/apm-storm.dtsi b/arch/arm64/boot/dts/apm-storm.dtsi index 93f4b2dd9248..f8c40a66e65d 100644 --- a/arch/arm64/boot/dts/apm-storm.dtsi +++ b/arch/arm64/boot/dts/apm-storm.dtsi | |||
@@ -307,6 +307,7 @@ | |||
307 | <0x0 0x1f21e000 0x0 0x1000>, | 307 | <0x0 0x1f21e000 0x0 0x1000>, |
308 | <0x0 0x1f217000 0x0 0x1000>; | 308 | <0x0 0x1f217000 0x0 0x1000>; |
309 | interrupts = <0x0 0x86 0x4>; | 309 | interrupts = <0x0 0x86 0x4>; |
310 | dma-coherent; | ||
310 | status = "disabled"; | 311 | status = "disabled"; |
311 | clocks = <&sata01clk 0>; | 312 | clocks = <&sata01clk 0>; |
312 | phys = <&phy1 0>; | 313 | phys = <&phy1 0>; |
@@ -321,6 +322,7 @@ | |||
321 | <0x0 0x1f22e000 0x0 0x1000>, | 322 | <0x0 0x1f22e000 0x0 0x1000>, |
322 | <0x0 0x1f227000 0x0 0x1000>; | 323 | <0x0 0x1f227000 0x0 0x1000>; |
323 | interrupts = <0x0 0x87 0x4>; | 324 | interrupts = <0x0 0x87 0x4>; |
325 | dma-coherent; | ||
324 | status = "ok"; | 326 | status = "ok"; |
325 | clocks = <&sata23clk 0>; | 327 | clocks = <&sata23clk 0>; |
326 | phys = <&phy2 0>; | 328 | phys = <&phy2 0>; |
@@ -334,6 +336,7 @@ | |||
334 | <0x0 0x1f23d000 0x0 0x1000>, | 336 | <0x0 0x1f23d000 0x0 0x1000>, |
335 | <0x0 0x1f23e000 0x0 0x1000>; | 337 | <0x0 0x1f23e000 0x0 0x1000>; |
336 | interrupts = <0x0 0x88 0x4>; | 338 | interrupts = <0x0 0x88 0x4>; |
339 | dma-coherent; | ||
337 | status = "ok"; | 340 | status = "ok"; |
338 | clocks = <&sata45clk 0>; | 341 | clocks = <&sata45clk 0>; |
339 | phys = <&phy3 0>; | 342 | phys = <&phy3 0>; |
diff --git a/arch/arm64/include/asm/mmu.h b/arch/arm64/include/asm/mmu.h index f600d400c07d..aff0292c8f4d 100644 --- a/arch/arm64/include/asm/mmu.h +++ b/arch/arm64/include/asm/mmu.h | |||
@@ -22,6 +22,9 @@ typedef struct { | |||
22 | void *vdso; | 22 | void *vdso; |
23 | } mm_context_t; | 23 | } mm_context_t; |
24 | 24 | ||
25 | #define INIT_MM_CONTEXT(name) \ | ||
26 | .context.id_lock = __RAW_SPIN_LOCK_UNLOCKED(name.context.id_lock), | ||
27 | |||
25 | #define ASID(mm) ((mm)->context.id & 0xffff) | 28 | #define ASID(mm) ((mm)->context.id & 0xffff) |
26 | 29 | ||
27 | extern void paging_init(void); | 30 | extern void paging_init(void); |
diff --git a/arch/arm64/include/asm/tlb.h b/arch/arm64/include/asm/tlb.h index 72cadf52ca80..80e2c08900d6 100644 --- a/arch/arm64/include/asm/tlb.h +++ b/arch/arm64/include/asm/tlb.h | |||
@@ -19,6 +19,7 @@ | |||
19 | #ifndef __ASM_TLB_H | 19 | #ifndef __ASM_TLB_H |
20 | #define __ASM_TLB_H | 20 | #define __ASM_TLB_H |
21 | 21 | ||
22 | #define __tlb_remove_pmd_tlb_entry __tlb_remove_pmd_tlb_entry | ||
22 | 23 | ||
23 | #include <asm-generic/tlb.h> | 24 | #include <asm-generic/tlb.h> |
24 | 25 | ||
@@ -99,5 +100,10 @@ static inline void __pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmdp, | |||
99 | } | 100 | } |
100 | #endif | 101 | #endif |
101 | 102 | ||
103 | static inline void __tlb_remove_pmd_tlb_entry(struct mmu_gather *tlb, pmd_t *pmdp, | ||
104 | unsigned long address) | ||
105 | { | ||
106 | tlb_add_flush(tlb, address); | ||
107 | } | ||
102 | 108 | ||
103 | #endif | 109 | #endif |
diff --git a/arch/arm64/include/asm/unistd32.h b/arch/arm64/include/asm/unistd32.h index bb8eb8a78e67..c8d8fc17bd5a 100644 --- a/arch/arm64/include/asm/unistd32.h +++ b/arch/arm64/include/asm/unistd32.h | |||
@@ -403,8 +403,9 @@ __SYSCALL(378, sys_kcmp) | |||
403 | __SYSCALL(379, sys_finit_module) | 403 | __SYSCALL(379, sys_finit_module) |
404 | __SYSCALL(380, sys_sched_setattr) | 404 | __SYSCALL(380, sys_sched_setattr) |
405 | __SYSCALL(381, sys_sched_getattr) | 405 | __SYSCALL(381, sys_sched_getattr) |
406 | __SYSCALL(382, sys_renameat2) | ||
406 | 407 | ||
407 | #define __NR_compat_syscalls 379 | 408 | #define __NR_compat_syscalls 383 |
408 | 409 | ||
409 | /* | 410 | /* |
410 | * Compat syscall numbers used by the AArch64 kernel. | 411 | * Compat syscall numbers used by the AArch64 kernel. |
diff --git a/arch/arm64/kernel/debug-monitors.c b/arch/arm64/kernel/debug-monitors.c index ed3955a95747..a7fb874b595e 100644 --- a/arch/arm64/kernel/debug-monitors.c +++ b/arch/arm64/kernel/debug-monitors.c | |||
@@ -318,9 +318,6 @@ static int brk_handler(unsigned long addr, unsigned int esr, | |||
318 | if (call_break_hook(regs, esr) == DBG_HOOK_HANDLED) | 318 | if (call_break_hook(regs, esr) == DBG_HOOK_HANDLED) |
319 | return 0; | 319 | return 0; |
320 | 320 | ||
321 | pr_warn("unexpected brk exception at %lx, esr=0x%x\n", | ||
322 | (long)instruction_pointer(regs), esr); | ||
323 | |||
324 | if (!user_mode(regs)) | 321 | if (!user_mode(regs)) |
325 | return -EFAULT; | 322 | return -EFAULT; |
326 | 323 | ||
diff --git a/arch/arm64/kernel/early_printk.c b/arch/arm64/kernel/early_printk.c index ffbbdde7aba1..2dc36d00addf 100644 --- a/arch/arm64/kernel/early_printk.c +++ b/arch/arm64/kernel/early_printk.c | |||
@@ -143,10 +143,8 @@ static int __init setup_early_printk(char *buf) | |||
143 | } | 143 | } |
144 | /* no options parsing yet */ | 144 | /* no options parsing yet */ |
145 | 145 | ||
146 | if (paddr) { | 146 | if (paddr) |
147 | set_fixmap_io(FIX_EARLYCON_MEM_BASE, paddr); | 147 | early_base = (void __iomem *)set_fixmap_offset_io(FIX_EARLYCON_MEM_BASE, paddr); |
148 | early_base = (void __iomem *)fix_to_virt(FIX_EARLYCON_MEM_BASE); | ||
149 | } | ||
150 | 148 | ||
151 | printch = match->printch; | 149 | printch = match->printch; |
152 | early_console = &early_console_dev; | 150 | early_console = &early_console_dev; |
diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c index 720853f70b6b..7ec784653b29 100644 --- a/arch/arm64/kernel/setup.c +++ b/arch/arm64/kernel/setup.c | |||
@@ -393,11 +393,10 @@ void __init setup_arch(char **cmdline_p) | |||
393 | 393 | ||
394 | static int __init arm64_device_init(void) | 394 | static int __init arm64_device_init(void) |
395 | { | 395 | { |
396 | of_clk_init(NULL); | ||
397 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | 396 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); |
398 | return 0; | 397 | return 0; |
399 | } | 398 | } |
400 | arch_initcall(arm64_device_init); | 399 | arch_initcall_sync(arm64_device_init); |
401 | 400 | ||
402 | static DEFINE_PER_CPU(struct cpu, cpu_data); | 401 | static DEFINE_PER_CPU(struct cpu, cpu_data); |
403 | 402 | ||
diff --git a/arch/arm64/kernel/time.c b/arch/arm64/kernel/time.c index 29c39d5d77e3..6815987b50f8 100644 --- a/arch/arm64/kernel/time.c +++ b/arch/arm64/kernel/time.c | |||
@@ -33,6 +33,7 @@ | |||
33 | #include <linux/irq.h> | 33 | #include <linux/irq.h> |
34 | #include <linux/delay.h> | 34 | #include <linux/delay.h> |
35 | #include <linux/clocksource.h> | 35 | #include <linux/clocksource.h> |
36 | #include <linux/clk-provider.h> | ||
36 | 37 | ||
37 | #include <clocksource/arm_arch_timer.h> | 38 | #include <clocksource/arm_arch_timer.h> |
38 | 39 | ||
@@ -65,6 +66,7 @@ void __init time_init(void) | |||
65 | { | 66 | { |
66 | u32 arch_timer_rate; | 67 | u32 arch_timer_rate; |
67 | 68 | ||
69 | of_clk_init(NULL); | ||
68 | clocksource_of_init(); | 70 | clocksource_of_init(); |
69 | 71 | ||
70 | arch_timer_rate = arch_timer_get_rate(); | 72 | arch_timer_rate = arch_timer_get_rate(); |
diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c index 0ba347e59f06..c851eb44dc50 100644 --- a/arch/arm64/mm/dma-mapping.c +++ b/arch/arm64/mm/dma-mapping.c | |||
@@ -22,8 +22,11 @@ | |||
22 | #include <linux/slab.h> | 22 | #include <linux/slab.h> |
23 | #include <linux/dma-mapping.h> | 23 | #include <linux/dma-mapping.h> |
24 | #include <linux/dma-contiguous.h> | 24 | #include <linux/dma-contiguous.h> |
25 | #include <linux/of.h> | ||
26 | #include <linux/platform_device.h> | ||
25 | #include <linux/vmalloc.h> | 27 | #include <linux/vmalloc.h> |
26 | #include <linux/swiotlb.h> | 28 | #include <linux/swiotlb.h> |
29 | #include <linux/amba/bus.h> | ||
27 | 30 | ||
28 | #include <asm/cacheflush.h> | 31 | #include <asm/cacheflush.h> |
29 | 32 | ||
@@ -305,17 +308,45 @@ struct dma_map_ops coherent_swiotlb_dma_ops = { | |||
305 | }; | 308 | }; |
306 | EXPORT_SYMBOL(coherent_swiotlb_dma_ops); | 309 | EXPORT_SYMBOL(coherent_swiotlb_dma_ops); |
307 | 310 | ||
311 | static int dma_bus_notifier(struct notifier_block *nb, | ||
312 | unsigned long event, void *_dev) | ||
313 | { | ||
314 | struct device *dev = _dev; | ||
315 | |||
316 | if (event != BUS_NOTIFY_ADD_DEVICE) | ||
317 | return NOTIFY_DONE; | ||
318 | |||
319 | if (of_property_read_bool(dev->of_node, "dma-coherent")) | ||
320 | set_dma_ops(dev, &coherent_swiotlb_dma_ops); | ||
321 | |||
322 | return NOTIFY_OK; | ||
323 | } | ||
324 | |||
325 | static struct notifier_block platform_bus_nb = { | ||
326 | .notifier_call = dma_bus_notifier, | ||
327 | }; | ||
328 | |||
329 | static struct notifier_block amba_bus_nb = { | ||
330 | .notifier_call = dma_bus_notifier, | ||
331 | }; | ||
332 | |||
308 | extern int swiotlb_late_init_with_default_size(size_t default_size); | 333 | extern int swiotlb_late_init_with_default_size(size_t default_size); |
309 | 334 | ||
310 | static int __init swiotlb_late_init(void) | 335 | static int __init swiotlb_late_init(void) |
311 | { | 336 | { |
312 | size_t swiotlb_size = min(SZ_64M, MAX_ORDER_NR_PAGES << PAGE_SHIFT); | 337 | size_t swiotlb_size = min(SZ_64M, MAX_ORDER_NR_PAGES << PAGE_SHIFT); |
313 | 338 | ||
314 | dma_ops = &coherent_swiotlb_dma_ops; | 339 | /* |
340 | * These must be registered before of_platform_populate(). | ||
341 | */ | ||
342 | bus_register_notifier(&platform_bus_type, &platform_bus_nb); | ||
343 | bus_register_notifier(&amba_bustype, &amba_bus_nb); | ||
344 | |||
345 | dma_ops = &noncoherent_swiotlb_dma_ops; | ||
315 | 346 | ||
316 | return swiotlb_late_init_with_default_size(swiotlb_size); | 347 | return swiotlb_late_init_with_default_size(swiotlb_size); |
317 | } | 348 | } |
318 | subsys_initcall(swiotlb_late_init); | 349 | arch_initcall(swiotlb_late_init); |
319 | 350 | ||
320 | #define PREALLOC_DMA_DEBUG_ENTRIES 4096 | 351 | #define PREALLOC_DMA_DEBUG_ENTRIES 4096 |
321 | 352 | ||
diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c index 6b7e89569a3a..0a472c41a67f 100644 --- a/arch/arm64/mm/mmu.c +++ b/arch/arm64/mm/mmu.c | |||
@@ -374,6 +374,9 @@ int kern_addr_valid(unsigned long addr) | |||
374 | if (pmd_none(*pmd)) | 374 | if (pmd_none(*pmd)) |
375 | return 0; | 375 | return 0; |
376 | 376 | ||
377 | if (pmd_sect(*pmd)) | ||
378 | return pfn_valid(pmd_pfn(*pmd)); | ||
379 | |||
377 | pte = pte_offset_kernel(pmd, addr); | 380 | pte = pte_offset_kernel(pmd, addr); |
378 | if (pte_none(*pte)) | 381 | if (pte_none(*pte)) |
379 | return 0; | 382 | return 0; |
diff --git a/arch/hexagon/include/asm/barrier.h b/arch/hexagon/include/asm/barrier.h deleted file mode 100644 index 4e863daea25b..000000000000 --- a/arch/hexagon/include/asm/barrier.h +++ /dev/null | |||
@@ -1,37 +0,0 @@ | |||
1 | /* | ||
2 | * Memory barrier definitions for the Hexagon architecture | ||
3 | * | ||
4 | * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 and | ||
8 | * only version 2 as published by the Free Software Foundation. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA | ||
18 | * 02110-1301, USA. | ||
19 | */ | ||
20 | |||
21 | #ifndef _ASM_BARRIER_H | ||
22 | #define _ASM_BARRIER_H | ||
23 | |||
24 | #define rmb() barrier() | ||
25 | #define read_barrier_depends() barrier() | ||
26 | #define wmb() barrier() | ||
27 | #define mb() barrier() | ||
28 | #define smp_rmb() barrier() | ||
29 | #define smp_read_barrier_depends() barrier() | ||
30 | #define smp_wmb() barrier() | ||
31 | #define smp_mb() barrier() | ||
32 | |||
33 | /* Set a value and use a memory barrier. Used by the scheduler somewhere. */ | ||
34 | #define set_mb(var, value) \ | ||
35 | do { var = value; mb(); } while (0) | ||
36 | |||
37 | #endif /* _ASM_BARRIER_H */ | ||
diff --git a/arch/ia64/include/asm/tlb.h b/arch/ia64/include/asm/tlb.h index bc5efc7c3f3f..39d64e0df1de 100644 --- a/arch/ia64/include/asm/tlb.h +++ b/arch/ia64/include/asm/tlb.h | |||
@@ -91,18 +91,9 @@ extern struct ia64_tr_entry *ia64_idtrs[NR_CPUS]; | |||
91 | #define RR_RID_MASK 0x00000000ffffff00L | 91 | #define RR_RID_MASK 0x00000000ffffff00L |
92 | #define RR_TO_RID(val) ((val >> 8) & 0xffffff) | 92 | #define RR_TO_RID(val) ((val >> 8) & 0xffffff) |
93 | 93 | ||
94 | /* | ||
95 | * Flush the TLB for address range START to END and, if not in fast mode, release the | ||
96 | * freed pages that where gathered up to this point. | ||
97 | */ | ||
98 | static inline void | 94 | static inline void |
99 | ia64_tlb_flush_mmu (struct mmu_gather *tlb, unsigned long start, unsigned long end) | 95 | ia64_tlb_flush_mmu_tlbonly(struct mmu_gather *tlb, unsigned long start, unsigned long end) |
100 | { | 96 | { |
101 | unsigned long i; | ||
102 | unsigned int nr; | ||
103 | |||
104 | if (!tlb->need_flush) | ||
105 | return; | ||
106 | tlb->need_flush = 0; | 97 | tlb->need_flush = 0; |
107 | 98 | ||
108 | if (tlb->fullmm) { | 99 | if (tlb->fullmm) { |
@@ -135,6 +126,14 @@ ia64_tlb_flush_mmu (struct mmu_gather *tlb, unsigned long start, unsigned long e | |||
135 | flush_tlb_range(&vma, ia64_thash(start), ia64_thash(end)); | 126 | flush_tlb_range(&vma, ia64_thash(start), ia64_thash(end)); |
136 | } | 127 | } |
137 | 128 | ||
129 | } | ||
130 | |||
131 | static inline void | ||
132 | ia64_tlb_flush_mmu_free(struct mmu_gather *tlb) | ||
133 | { | ||
134 | unsigned long i; | ||
135 | unsigned int nr; | ||
136 | |||
138 | /* lastly, release the freed pages */ | 137 | /* lastly, release the freed pages */ |
139 | nr = tlb->nr; | 138 | nr = tlb->nr; |
140 | 139 | ||
@@ -144,6 +143,19 @@ ia64_tlb_flush_mmu (struct mmu_gather *tlb, unsigned long start, unsigned long e | |||
144 | free_page_and_swap_cache(tlb->pages[i]); | 143 | free_page_and_swap_cache(tlb->pages[i]); |
145 | } | 144 | } |
146 | 145 | ||
146 | /* | ||
147 | * Flush the TLB for address range START to END and, if not in fast mode, release the | ||
148 | * freed pages that where gathered up to this point. | ||
149 | */ | ||
150 | static inline void | ||
151 | ia64_tlb_flush_mmu (struct mmu_gather *tlb, unsigned long start, unsigned long end) | ||
152 | { | ||
153 | if (!tlb->need_flush) | ||
154 | return; | ||
155 | ia64_tlb_flush_mmu_tlbonly(tlb, start, end); | ||
156 | ia64_tlb_flush_mmu_free(tlb); | ||
157 | } | ||
158 | |||
147 | static inline void __tlb_alloc_page(struct mmu_gather *tlb) | 159 | static inline void __tlb_alloc_page(struct mmu_gather *tlb) |
148 | { | 160 | { |
149 | unsigned long addr = __get_free_pages(GFP_NOWAIT | __GFP_NOWARN, 0); | 161 | unsigned long addr = __get_free_pages(GFP_NOWAIT | __GFP_NOWARN, 0); |
@@ -206,6 +218,16 @@ static inline int __tlb_remove_page(struct mmu_gather *tlb, struct page *page) | |||
206 | return tlb->max - tlb->nr; | 218 | return tlb->max - tlb->nr; |
207 | } | 219 | } |
208 | 220 | ||
221 | static inline void tlb_flush_mmu_tlbonly(struct mmu_gather *tlb) | ||
222 | { | ||
223 | ia64_tlb_flush_mmu_tlbonly(tlb, tlb->start_addr, tlb->end_addr); | ||
224 | } | ||
225 | |||
226 | static inline void tlb_flush_mmu_free(struct mmu_gather *tlb) | ||
227 | { | ||
228 | ia64_tlb_flush_mmu_free(tlb); | ||
229 | } | ||
230 | |||
209 | static inline void tlb_flush_mmu(struct mmu_gather *tlb) | 231 | static inline void tlb_flush_mmu(struct mmu_gather *tlb) |
210 | { | 232 | { |
211 | ia64_tlb_flush_mmu(tlb, tlb->start_addr, tlb->end_addr); | 233 | ia64_tlb_flush_mmu(tlb, tlb->start_addr, tlb->end_addr); |
diff --git a/arch/ia64/kernel/head.S b/arch/ia64/kernel/head.S index e6f80fcf013b..a4acddad0c78 100644 --- a/arch/ia64/kernel/head.S +++ b/arch/ia64/kernel/head.S | |||
@@ -259,7 +259,7 @@ start_ap: | |||
259 | * Switch into virtual mode: | 259 | * Switch into virtual mode: |
260 | */ | 260 | */ |
261 | movl r16=(IA64_PSR_IT|IA64_PSR_IC|IA64_PSR_DT|IA64_PSR_RT|IA64_PSR_DFH|IA64_PSR_BN \ | 261 | movl r16=(IA64_PSR_IT|IA64_PSR_IC|IA64_PSR_DT|IA64_PSR_RT|IA64_PSR_DFH|IA64_PSR_BN \ |
262 | |IA64_PSR_DI|IA64_PSR_AC) | 262 | |IA64_PSR_DI) |
263 | ;; | 263 | ;; |
264 | mov cr.ipsr=r16 | 264 | mov cr.ipsr=r16 |
265 | movl r17=1f | 265 | movl r17=1f |
diff --git a/arch/ia64/kernel/ivt.S b/arch/ia64/kernel/ivt.S index 689ffcaa284e..18e794a57248 100644 --- a/arch/ia64/kernel/ivt.S +++ b/arch/ia64/kernel/ivt.S | |||
@@ -58,7 +58,7 @@ | |||
58 | #include <asm/unistd.h> | 58 | #include <asm/unistd.h> |
59 | #include <asm/errno.h> | 59 | #include <asm/errno.h> |
60 | 60 | ||
61 | #if 1 | 61 | #if 0 |
62 | # define PSR_DEFAULT_BITS psr.ac | 62 | # define PSR_DEFAULT_BITS psr.ac |
63 | #else | 63 | #else |
64 | # define PSR_DEFAULT_BITS 0 | 64 | # define PSR_DEFAULT_BITS 0 |
diff --git a/arch/ia64/kvm/vmm_ivt.S b/arch/ia64/kvm/vmm_ivt.S index 24018484c6e9..397e34a63e18 100644 --- a/arch/ia64/kvm/vmm_ivt.S +++ b/arch/ia64/kvm/vmm_ivt.S | |||
@@ -64,7 +64,7 @@ | |||
64 | #include "kvm_minstate.h" | 64 | #include "kvm_minstate.h" |
65 | #include "vti.h" | 65 | #include "vti.h" |
66 | 66 | ||
67 | #if 1 | 67 | #if 0 |
68 | # define PSR_DEFAULT_BITS psr.ac | 68 | # define PSR_DEFAULT_BITS psr.ac |
69 | #else | 69 | #else |
70 | # define PSR_DEFAULT_BITS 0 | 70 | # define PSR_DEFAULT_BITS 0 |
diff --git a/arch/mips/cavium-octeon/octeon-irq.c b/arch/mips/cavium-octeon/octeon-irq.c index c2bb4f896ce7..3aa5b46b2d40 100644 --- a/arch/mips/cavium-octeon/octeon-irq.c +++ b/arch/mips/cavium-octeon/octeon-irq.c | |||
@@ -635,7 +635,7 @@ static void octeon_irq_cpu_offline_ciu(struct irq_data *data) | |||
635 | cpumask_clear(&new_affinity); | 635 | cpumask_clear(&new_affinity); |
636 | cpumask_set_cpu(cpumask_first(cpu_online_mask), &new_affinity); | 636 | cpumask_set_cpu(cpumask_first(cpu_online_mask), &new_affinity); |
637 | } | 637 | } |
638 | __irq_set_affinity_locked(data, &new_affinity); | 638 | irq_set_affinity_locked(data, &new_affinity, false); |
639 | } | 639 | } |
640 | 640 | ||
641 | static int octeon_irq_ciu_set_affinity(struct irq_data *data, | 641 | static int octeon_irq_ciu_set_affinity(struct irq_data *data, |
diff --git a/arch/mips/mm/cache.c b/arch/mips/mm/cache.c index e422b38d3113..9e67cdea3c74 100644 --- a/arch/mips/mm/cache.c +++ b/arch/mips/mm/cache.c | |||
@@ -29,15 +29,15 @@ void (*flush_cache_range)(struct vm_area_struct *vma, unsigned long start, | |||
29 | void (*flush_cache_page)(struct vm_area_struct *vma, unsigned long page, | 29 | void (*flush_cache_page)(struct vm_area_struct *vma, unsigned long page, |
30 | unsigned long pfn); | 30 | unsigned long pfn); |
31 | void (*flush_icache_range)(unsigned long start, unsigned long end); | 31 | void (*flush_icache_range)(unsigned long start, unsigned long end); |
32 | EXPORT_SYMBOL_GPL(flush_icache_range); | ||
32 | void (*local_flush_icache_range)(unsigned long start, unsigned long end); | 33 | void (*local_flush_icache_range)(unsigned long start, unsigned long end); |
33 | 34 | ||
34 | void (*__flush_cache_vmap)(void); | 35 | void (*__flush_cache_vmap)(void); |
35 | void (*__flush_cache_vunmap)(void); | 36 | void (*__flush_cache_vunmap)(void); |
36 | 37 | ||
37 | void (*__flush_kernel_vmap_range)(unsigned long vaddr, int size); | 38 | void (*__flush_kernel_vmap_range)(unsigned long vaddr, int size); |
38 | void (*__invalidate_kernel_vmap_range)(unsigned long vaddr, int size); | ||
39 | |||
40 | EXPORT_SYMBOL_GPL(__flush_kernel_vmap_range); | 39 | EXPORT_SYMBOL_GPL(__flush_kernel_vmap_range); |
40 | void (*__invalidate_kernel_vmap_range)(unsigned long vaddr, int size); | ||
41 | 41 | ||
42 | /* MIPS specific cache operations */ | 42 | /* MIPS specific cache operations */ |
43 | void (*flush_cache_sigtramp)(unsigned long addr); | 43 | void (*flush_cache_sigtramp)(unsigned long addr); |
diff --git a/arch/parisc/include/asm/shmparam.h b/arch/parisc/include/asm/shmparam.h index 628ddc22faa8..afe1300ab667 100644 --- a/arch/parisc/include/asm/shmparam.h +++ b/arch/parisc/include/asm/shmparam.h | |||
@@ -1,8 +1,7 @@ | |||
1 | #ifndef _ASMPARISC_SHMPARAM_H | 1 | #ifndef _ASMPARISC_SHMPARAM_H |
2 | #define _ASMPARISC_SHMPARAM_H | 2 | #define _ASMPARISC_SHMPARAM_H |
3 | 3 | ||
4 | #define __ARCH_FORCE_SHMLBA 1 | 4 | #define SHMLBA PAGE_SIZE /* attach addr a multiple of this */ |
5 | 5 | #define SHM_COLOUR 0x00400000 /* shared mappings colouring */ | |
6 | #define SHMLBA 0x00400000 /* attach addr needs to be 4 Mb aligned */ | ||
7 | 6 | ||
8 | #endif /* _ASMPARISC_SHMPARAM_H */ | 7 | #endif /* _ASMPARISC_SHMPARAM_H */ |
diff --git a/arch/parisc/include/uapi/asm/Kbuild b/arch/parisc/include/uapi/asm/Kbuild index a580642555b6..348356c99514 100644 --- a/arch/parisc/include/uapi/asm/Kbuild +++ b/arch/parisc/include/uapi/asm/Kbuild | |||
@@ -1,6 +1,8 @@ | |||
1 | # UAPI Header export list | 1 | # UAPI Header export list |
2 | include include/uapi/asm-generic/Kbuild.asm | 2 | include include/uapi/asm-generic/Kbuild.asm |
3 | 3 | ||
4 | generic-y += resource.h | ||
5 | |||
4 | header-y += bitsperlong.h | 6 | header-y += bitsperlong.h |
5 | header-y += byteorder.h | 7 | header-y += byteorder.h |
6 | header-y += errno.h | 8 | header-y += errno.h |
@@ -13,7 +15,6 @@ header-y += msgbuf.h | |||
13 | header-y += pdc.h | 15 | header-y += pdc.h |
14 | header-y += posix_types.h | 16 | header-y += posix_types.h |
15 | header-y += ptrace.h | 17 | header-y += ptrace.h |
16 | header-y += resource.h | ||
17 | header-y += sembuf.h | 18 | header-y += sembuf.h |
18 | header-y += setup.h | 19 | header-y += setup.h |
19 | header-y += shmbuf.h | 20 | header-y += shmbuf.h |
diff --git a/arch/parisc/include/uapi/asm/resource.h b/arch/parisc/include/uapi/asm/resource.h deleted file mode 100644 index 8b06343b62ed..000000000000 --- a/arch/parisc/include/uapi/asm/resource.h +++ /dev/null | |||
@@ -1,7 +0,0 @@ | |||
1 | #ifndef _ASM_PARISC_RESOURCE_H | ||
2 | #define _ASM_PARISC_RESOURCE_H | ||
3 | |||
4 | #define _STK_LIM_MAX 10 * _STK_LIM | ||
5 | #include <asm-generic/resource.h> | ||
6 | |||
7 | #endif | ||
diff --git a/arch/parisc/kernel/cache.c b/arch/parisc/kernel/cache.c index a6ffc775a9f8..f6448c7c62b5 100644 --- a/arch/parisc/kernel/cache.c +++ b/arch/parisc/kernel/cache.c | |||
@@ -323,7 +323,8 @@ void flush_dcache_page(struct page *page) | |||
323 | * specifically accesses it, of course) */ | 323 | * specifically accesses it, of course) */ |
324 | 324 | ||
325 | flush_tlb_page(mpnt, addr); | 325 | flush_tlb_page(mpnt, addr); |
326 | if (old_addr == 0 || (old_addr & (SHMLBA - 1)) != (addr & (SHMLBA - 1))) { | 326 | if (old_addr == 0 || (old_addr & (SHM_COLOUR - 1)) |
327 | != (addr & (SHM_COLOUR - 1))) { | ||
327 | __flush_cache_page(mpnt, addr, page_to_phys(page)); | 328 | __flush_cache_page(mpnt, addr, page_to_phys(page)); |
328 | if (old_addr) | 329 | if (old_addr) |
329 | printk(KERN_ERR "INEQUIVALENT ALIASES 0x%lx and 0x%lx in file %s\n", old_addr, addr, mpnt->vm_file ? (char *)mpnt->vm_file->f_path.dentry->d_name.name : "(null)"); | 330 | printk(KERN_ERR "INEQUIVALENT ALIASES 0x%lx and 0x%lx in file %s\n", old_addr, addr, mpnt->vm_file ? (char *)mpnt->vm_file->f_path.dentry->d_name.name : "(null)"); |
diff --git a/arch/parisc/kernel/sys_parisc.c b/arch/parisc/kernel/sys_parisc.c index b7cadc4a06cd..31ffa9b55322 100644 --- a/arch/parisc/kernel/sys_parisc.c +++ b/arch/parisc/kernel/sys_parisc.c | |||
@@ -45,7 +45,7 @@ | |||
45 | 45 | ||
46 | static int get_offset(unsigned int last_mmap) | 46 | static int get_offset(unsigned int last_mmap) |
47 | { | 47 | { |
48 | return (last_mmap & (SHMLBA-1)) >> PAGE_SHIFT; | 48 | return (last_mmap & (SHM_COLOUR-1)) >> PAGE_SHIFT; |
49 | } | 49 | } |
50 | 50 | ||
51 | static unsigned long shared_align_offset(unsigned int last_mmap, | 51 | static unsigned long shared_align_offset(unsigned int last_mmap, |
@@ -57,8 +57,8 @@ static unsigned long shared_align_offset(unsigned int last_mmap, | |||
57 | static inline unsigned long COLOR_ALIGN(unsigned long addr, | 57 | static inline unsigned long COLOR_ALIGN(unsigned long addr, |
58 | unsigned int last_mmap, unsigned long pgoff) | 58 | unsigned int last_mmap, unsigned long pgoff) |
59 | { | 59 | { |
60 | unsigned long base = (addr+SHMLBA-1) & ~(SHMLBA-1); | 60 | unsigned long base = (addr+SHM_COLOUR-1) & ~(SHM_COLOUR-1); |
61 | unsigned long off = (SHMLBA-1) & | 61 | unsigned long off = (SHM_COLOUR-1) & |
62 | (shared_align_offset(last_mmap, pgoff) << PAGE_SHIFT); | 62 | (shared_align_offset(last_mmap, pgoff) << PAGE_SHIFT); |
63 | 63 | ||
64 | return base + off; | 64 | return base + off; |
@@ -101,7 +101,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, | |||
101 | if (flags & MAP_FIXED) { | 101 | if (flags & MAP_FIXED) { |
102 | if ((flags & MAP_SHARED) && last_mmap && | 102 | if ((flags & MAP_SHARED) && last_mmap && |
103 | (addr - shared_align_offset(last_mmap, pgoff)) | 103 | (addr - shared_align_offset(last_mmap, pgoff)) |
104 | & (SHMLBA - 1)) | 104 | & (SHM_COLOUR - 1)) |
105 | return -EINVAL; | 105 | return -EINVAL; |
106 | goto found_addr; | 106 | goto found_addr; |
107 | } | 107 | } |
@@ -122,7 +122,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, | |||
122 | info.length = len; | 122 | info.length = len; |
123 | info.low_limit = mm->mmap_legacy_base; | 123 | info.low_limit = mm->mmap_legacy_base; |
124 | info.high_limit = mmap_upper_limit(); | 124 | info.high_limit = mmap_upper_limit(); |
125 | info.align_mask = last_mmap ? (PAGE_MASK & (SHMLBA - 1)) : 0; | 125 | info.align_mask = last_mmap ? (PAGE_MASK & (SHM_COLOUR - 1)) : 0; |
126 | info.align_offset = shared_align_offset(last_mmap, pgoff); | 126 | info.align_offset = shared_align_offset(last_mmap, pgoff); |
127 | addr = vm_unmapped_area(&info); | 127 | addr = vm_unmapped_area(&info); |
128 | 128 | ||
@@ -161,7 +161,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, | |||
161 | if (flags & MAP_FIXED) { | 161 | if (flags & MAP_FIXED) { |
162 | if ((flags & MAP_SHARED) && last_mmap && | 162 | if ((flags & MAP_SHARED) && last_mmap && |
163 | (addr - shared_align_offset(last_mmap, pgoff)) | 163 | (addr - shared_align_offset(last_mmap, pgoff)) |
164 | & (SHMLBA - 1)) | 164 | & (SHM_COLOUR - 1)) |
165 | return -EINVAL; | 165 | return -EINVAL; |
166 | goto found_addr; | 166 | goto found_addr; |
167 | } | 167 | } |
@@ -182,7 +182,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, | |||
182 | info.length = len; | 182 | info.length = len; |
183 | info.low_limit = PAGE_SIZE; | 183 | info.low_limit = PAGE_SIZE; |
184 | info.high_limit = mm->mmap_base; | 184 | info.high_limit = mm->mmap_base; |
185 | info.align_mask = last_mmap ? (PAGE_MASK & (SHMLBA - 1)) : 0; | 185 | info.align_mask = last_mmap ? (PAGE_MASK & (SHM_COLOUR - 1)) : 0; |
186 | info.align_offset = shared_align_offset(last_mmap, pgoff); | 186 | info.align_offset = shared_align_offset(last_mmap, pgoff); |
187 | addr = vm_unmapped_area(&info); | 187 | addr = vm_unmapped_area(&info); |
188 | if (!(addr & ~PAGE_MASK)) | 188 | if (!(addr & ~PAGE_MASK)) |
diff --git a/arch/parisc/kernel/syscall_table.S b/arch/parisc/kernel/syscall_table.S index 80e5dd248934..83ead0ea127d 100644 --- a/arch/parisc/kernel/syscall_table.S +++ b/arch/parisc/kernel/syscall_table.S | |||
@@ -392,7 +392,7 @@ | |||
392 | ENTRY_COMP(vmsplice) | 392 | ENTRY_COMP(vmsplice) |
393 | ENTRY_COMP(move_pages) /* 295 */ | 393 | ENTRY_COMP(move_pages) /* 295 */ |
394 | ENTRY_SAME(getcpu) | 394 | ENTRY_SAME(getcpu) |
395 | ENTRY_SAME(epoll_pwait) | 395 | ENTRY_COMP(epoll_pwait) |
396 | ENTRY_COMP(statfs64) | 396 | ENTRY_COMP(statfs64) |
397 | ENTRY_COMP(fstatfs64) | 397 | ENTRY_COMP(fstatfs64) |
398 | ENTRY_COMP(kexec_load) /* 300 */ | 398 | ENTRY_COMP(kexec_load) /* 300 */ |
diff --git a/arch/parisc/lib/memcpy.c b/arch/parisc/lib/memcpy.c index 413dc1769299..b2b441b32341 100644 --- a/arch/parisc/lib/memcpy.c +++ b/arch/parisc/lib/memcpy.c | |||
@@ -470,7 +470,7 @@ static unsigned long pa_memcpy(void *dstp, const void *srcp, unsigned long len) | |||
470 | return 0; | 470 | return 0; |
471 | 471 | ||
472 | /* if a load or store fault occured we can get the faulty addr */ | 472 | /* if a load or store fault occured we can get the faulty addr */ |
473 | d = &__get_cpu_var(exception_data); | 473 | d = this_cpu_ptr(&exception_data); |
474 | fault_addr = d->fault_addr; | 474 | fault_addr = d->fault_addr; |
475 | 475 | ||
476 | /* error in load or store? */ | 476 | /* error in load or store? */ |
diff --git a/arch/parisc/mm/fault.c b/arch/parisc/mm/fault.c index 9d08c71a967e..747550762f3c 100644 --- a/arch/parisc/mm/fault.c +++ b/arch/parisc/mm/fault.c | |||
@@ -151,7 +151,7 @@ int fixup_exception(struct pt_regs *regs) | |||
151 | fix = search_exception_tables(regs->iaoq[0]); | 151 | fix = search_exception_tables(regs->iaoq[0]); |
152 | if (fix) { | 152 | if (fix) { |
153 | struct exception_data *d; | 153 | struct exception_data *d; |
154 | d = &__get_cpu_var(exception_data); | 154 | d = this_cpu_ptr(&exception_data); |
155 | d->fault_ip = regs->iaoq[0]; | 155 | d->fault_ip = regs->iaoq[0]; |
156 | d->fault_space = regs->isr; | 156 | d->fault_space = regs->isr; |
157 | d->fault_addr = regs->ior; | 157 | d->fault_addr = regs->ior; |
diff --git a/arch/powerpc/boot/main.c b/arch/powerpc/boot/main.c index a28f02165e97..d367a0aece2a 100644 --- a/arch/powerpc/boot/main.c +++ b/arch/powerpc/boot/main.c | |||
@@ -139,18 +139,18 @@ static struct addr_range prep_initrd(struct addr_range vmlinux, void *chosen, | |||
139 | * edit the command line passed to vmlinux (by setting /chosen/bootargs). | 139 | * edit the command line passed to vmlinux (by setting /chosen/bootargs). |
140 | * The buffer is put in it's own section so that tools may locate it easier. | 140 | * The buffer is put in it's own section so that tools may locate it easier. |
141 | */ | 141 | */ |
142 | static char cmdline[COMMAND_LINE_SIZE] | 142 | static char cmdline[BOOT_COMMAND_LINE_SIZE] |
143 | __attribute__((__section__("__builtin_cmdline"))); | 143 | __attribute__((__section__("__builtin_cmdline"))); |
144 | 144 | ||
145 | static void prep_cmdline(void *chosen) | 145 | static void prep_cmdline(void *chosen) |
146 | { | 146 | { |
147 | if (cmdline[0] == '\0') | 147 | if (cmdline[0] == '\0') |
148 | getprop(chosen, "bootargs", cmdline, COMMAND_LINE_SIZE-1); | 148 | getprop(chosen, "bootargs", cmdline, BOOT_COMMAND_LINE_SIZE-1); |
149 | 149 | ||
150 | printf("\n\rLinux/PowerPC load: %s", cmdline); | 150 | printf("\n\rLinux/PowerPC load: %s", cmdline); |
151 | /* If possible, edit the command line */ | 151 | /* If possible, edit the command line */ |
152 | if (console_ops.edit_cmdline) | 152 | if (console_ops.edit_cmdline) |
153 | console_ops.edit_cmdline(cmdline, COMMAND_LINE_SIZE); | 153 | console_ops.edit_cmdline(cmdline, BOOT_COMMAND_LINE_SIZE); |
154 | printf("\n\r"); | 154 | printf("\n\r"); |
155 | 155 | ||
156 | /* Put the command line back into the devtree for the kernel */ | 156 | /* Put the command line back into the devtree for the kernel */ |
@@ -174,7 +174,7 @@ void start(void) | |||
174 | * built-in command line wasn't set by an external tool */ | 174 | * built-in command line wasn't set by an external tool */ |
175 | if ((loader_info.cmdline_len > 0) && (cmdline[0] == '\0')) | 175 | if ((loader_info.cmdline_len > 0) && (cmdline[0] == '\0')) |
176 | memmove(cmdline, loader_info.cmdline, | 176 | memmove(cmdline, loader_info.cmdline, |
177 | min(loader_info.cmdline_len, COMMAND_LINE_SIZE-1)); | 177 | min(loader_info.cmdline_len, BOOT_COMMAND_LINE_SIZE-1)); |
178 | 178 | ||
179 | if (console_ops.open && (console_ops.open() < 0)) | 179 | if (console_ops.open && (console_ops.open() < 0)) |
180 | exit(); | 180 | exit(); |
diff --git a/arch/powerpc/boot/ops.h b/arch/powerpc/boot/ops.h index b3218ce451bb..8aad3c55aeda 100644 --- a/arch/powerpc/boot/ops.h +++ b/arch/powerpc/boot/ops.h | |||
@@ -15,7 +15,7 @@ | |||
15 | #include "types.h" | 15 | #include "types.h" |
16 | #include "string.h" | 16 | #include "string.h" |
17 | 17 | ||
18 | #define COMMAND_LINE_SIZE 512 | 18 | #define BOOT_COMMAND_LINE_SIZE 2048 |
19 | #define MAX_PATH_LEN 256 | 19 | #define MAX_PATH_LEN 256 |
20 | #define MAX_PROP_LEN 256 /* What should this be? */ | 20 | #define MAX_PROP_LEN 256 /* What should this be? */ |
21 | 21 | ||
diff --git a/arch/powerpc/boot/ps3.c b/arch/powerpc/boot/ps3.c index 9954d98871d0..4ec2d86d3c50 100644 --- a/arch/powerpc/boot/ps3.c +++ b/arch/powerpc/boot/ps3.c | |||
@@ -47,13 +47,13 @@ BSS_STACK(4096); | |||
47 | * The buffer is put in it's own section so that tools may locate it easier. | 47 | * The buffer is put in it's own section so that tools may locate it easier. |
48 | */ | 48 | */ |
49 | 49 | ||
50 | static char cmdline[COMMAND_LINE_SIZE] | 50 | static char cmdline[BOOT_COMMAND_LINE_SIZE] |
51 | __attribute__((__section__("__builtin_cmdline"))); | 51 | __attribute__((__section__("__builtin_cmdline"))); |
52 | 52 | ||
53 | static void prep_cmdline(void *chosen) | 53 | static void prep_cmdline(void *chosen) |
54 | { | 54 | { |
55 | if (cmdline[0] == '\0') | 55 | if (cmdline[0] == '\0') |
56 | getprop(chosen, "bootargs", cmdline, COMMAND_LINE_SIZE-1); | 56 | getprop(chosen, "bootargs", cmdline, BOOT_COMMAND_LINE_SIZE-1); |
57 | else | 57 | else |
58 | setprop_str(chosen, "bootargs", cmdline); | 58 | setprop_str(chosen, "bootargs", cmdline); |
59 | 59 | ||
diff --git a/arch/powerpc/include/asm/opal.h b/arch/powerpc/include/asm/opal.h index a2efdaa020b0..66ad7a74116f 100644 --- a/arch/powerpc/include/asm/opal.h +++ b/arch/powerpc/include/asm/opal.h | |||
@@ -41,14 +41,14 @@ struct opal_takeover_args { | |||
41 | * size except the last one in the list to be as well. | 41 | * size except the last one in the list to be as well. |
42 | */ | 42 | */ |
43 | struct opal_sg_entry { | 43 | struct opal_sg_entry { |
44 | void *data; | 44 | __be64 data; |
45 | long length; | 45 | __be64 length; |
46 | }; | 46 | }; |
47 | 47 | ||
48 | /* sg list */ | 48 | /* SG list */ |
49 | struct opal_sg_list { | 49 | struct opal_sg_list { |
50 | unsigned long num_entries; | 50 | __be64 length; |
51 | struct opal_sg_list *next; | 51 | __be64 next; |
52 | struct opal_sg_entry entry[]; | 52 | struct opal_sg_entry entry[]; |
53 | }; | 53 | }; |
54 | 54 | ||
@@ -858,8 +858,8 @@ int64_t opal_lpc_write(uint32_t chip_id, enum OpalLPCAddressType addr_type, | |||
858 | int64_t opal_lpc_read(uint32_t chip_id, enum OpalLPCAddressType addr_type, | 858 | int64_t opal_lpc_read(uint32_t chip_id, enum OpalLPCAddressType addr_type, |
859 | uint32_t addr, __be32 *data, uint32_t sz); | 859 | uint32_t addr, __be32 *data, uint32_t sz); |
860 | 860 | ||
861 | int64_t opal_read_elog(uint64_t buffer, size_t size, uint64_t log_id); | 861 | int64_t opal_read_elog(uint64_t buffer, uint64_t size, uint64_t log_id); |
862 | int64_t opal_get_elog_size(uint64_t *log_id, size_t *size, uint64_t *elog_type); | 862 | int64_t opal_get_elog_size(__be64 *log_id, __be64 *size, __be64 *elog_type); |
863 | int64_t opal_write_elog(uint64_t buffer, uint64_t size, uint64_t offset); | 863 | int64_t opal_write_elog(uint64_t buffer, uint64_t size, uint64_t offset); |
864 | int64_t opal_send_ack_elog(uint64_t log_id); | 864 | int64_t opal_send_ack_elog(uint64_t log_id); |
865 | void opal_resend_pending_logs(void); | 865 | void opal_resend_pending_logs(void); |
@@ -868,23 +868,24 @@ int64_t opal_validate_flash(uint64_t buffer, uint32_t *size, uint32_t *result); | |||
868 | int64_t opal_manage_flash(uint8_t op); | 868 | int64_t opal_manage_flash(uint8_t op); |
869 | int64_t opal_update_flash(uint64_t blk_list); | 869 | int64_t opal_update_flash(uint64_t blk_list); |
870 | int64_t opal_dump_init(uint8_t dump_type); | 870 | int64_t opal_dump_init(uint8_t dump_type); |
871 | int64_t opal_dump_info(uint32_t *dump_id, uint32_t *dump_size); | 871 | int64_t opal_dump_info(__be32 *dump_id, __be32 *dump_size); |
872 | int64_t opal_dump_info2(uint32_t *dump_id, uint32_t *dump_size, uint32_t *dump_type); | 872 | int64_t opal_dump_info2(__be32 *dump_id, __be32 *dump_size, __be32 *dump_type); |
873 | int64_t opal_dump_read(uint32_t dump_id, uint64_t buffer); | 873 | int64_t opal_dump_read(uint32_t dump_id, uint64_t buffer); |
874 | int64_t opal_dump_ack(uint32_t dump_id); | 874 | int64_t opal_dump_ack(uint32_t dump_id); |
875 | int64_t opal_dump_resend_notification(void); | 875 | int64_t opal_dump_resend_notification(void); |
876 | 876 | ||
877 | int64_t opal_get_msg(uint64_t buffer, size_t size); | 877 | int64_t opal_get_msg(uint64_t buffer, uint64_t size); |
878 | int64_t opal_check_completion(uint64_t buffer, size_t size, uint64_t token); | 878 | int64_t opal_check_completion(uint64_t buffer, uint64_t size, uint64_t token); |
879 | int64_t opal_sync_host_reboot(void); | 879 | int64_t opal_sync_host_reboot(void); |
880 | int64_t opal_get_param(uint64_t token, uint32_t param_id, uint64_t buffer, | 880 | int64_t opal_get_param(uint64_t token, uint32_t param_id, uint64_t buffer, |
881 | size_t length); | 881 | uint64_t length); |
882 | int64_t opal_set_param(uint64_t token, uint32_t param_id, uint64_t buffer, | 882 | int64_t opal_set_param(uint64_t token, uint32_t param_id, uint64_t buffer, |
883 | size_t length); | 883 | uint64_t length); |
884 | int64_t opal_sensor_read(uint32_t sensor_hndl, int token, __be32 *sensor_data); | 884 | int64_t opal_sensor_read(uint32_t sensor_hndl, int token, __be32 *sensor_data); |
885 | 885 | ||
886 | /* Internal functions */ | 886 | /* Internal functions */ |
887 | extern int early_init_dt_scan_opal(unsigned long node, const char *uname, int depth, void *data); | 887 | extern int early_init_dt_scan_opal(unsigned long node, const char *uname, |
888 | int depth, void *data); | ||
888 | extern int early_init_dt_scan_recoverable_ranges(unsigned long node, | 889 | extern int early_init_dt_scan_recoverable_ranges(unsigned long node, |
889 | const char *uname, int depth, void *data); | 890 | const char *uname, int depth, void *data); |
890 | 891 | ||
@@ -893,10 +894,6 @@ extern int opal_put_chars(uint32_t vtermno, const char *buf, int total_len); | |||
893 | 894 | ||
894 | extern void hvc_opal_init_early(void); | 895 | extern void hvc_opal_init_early(void); |
895 | 896 | ||
896 | /* Internal functions */ | ||
897 | extern int early_init_dt_scan_opal(unsigned long node, const char *uname, | ||
898 | int depth, void *data); | ||
899 | |||
900 | extern int opal_notifier_register(struct notifier_block *nb); | 897 | extern int opal_notifier_register(struct notifier_block *nb); |
901 | extern int opal_notifier_unregister(struct notifier_block *nb); | 898 | extern int opal_notifier_unregister(struct notifier_block *nb); |
902 | 899 | ||
@@ -906,9 +903,6 @@ extern void opal_notifier_enable(void); | |||
906 | extern void opal_notifier_disable(void); | 903 | extern void opal_notifier_disable(void); |
907 | extern void opal_notifier_update_evt(uint64_t evt_mask, uint64_t evt_val); | 904 | extern void opal_notifier_update_evt(uint64_t evt_mask, uint64_t evt_val); |
908 | 905 | ||
909 | extern int opal_get_chars(uint32_t vtermno, char *buf, int count); | ||
910 | extern int opal_put_chars(uint32_t vtermno, const char *buf, int total_len); | ||
911 | |||
912 | extern int __opal_async_get_token(void); | 906 | extern int __opal_async_get_token(void); |
913 | extern int opal_async_get_token_interruptible(void); | 907 | extern int opal_async_get_token_interruptible(void); |
914 | extern int __opal_async_release_token(int token); | 908 | extern int __opal_async_release_token(int token); |
@@ -916,8 +910,6 @@ extern int opal_async_release_token(int token); | |||
916 | extern int opal_async_wait_response(uint64_t token, struct opal_msg *msg); | 910 | extern int opal_async_wait_response(uint64_t token, struct opal_msg *msg); |
917 | extern int opal_get_sensor_data(u32 sensor_hndl, u32 *sensor_data); | 911 | extern int opal_get_sensor_data(u32 sensor_hndl, u32 *sensor_data); |
918 | 912 | ||
919 | extern void hvc_opal_init_early(void); | ||
920 | |||
921 | struct rtc_time; | 913 | struct rtc_time; |
922 | extern int opal_set_rtc_time(struct rtc_time *tm); | 914 | extern int opal_set_rtc_time(struct rtc_time *tm); |
923 | extern void opal_get_rtc_time(struct rtc_time *tm); | 915 | extern void opal_get_rtc_time(struct rtc_time *tm); |
@@ -937,6 +929,10 @@ extern int opal_resync_timebase(void); | |||
937 | 929 | ||
938 | extern void opal_lpc_init(void); | 930 | extern void opal_lpc_init(void); |
939 | 931 | ||
932 | struct opal_sg_list *opal_vmalloc_to_sg_list(void *vmalloc_addr, | ||
933 | unsigned long vmalloc_size); | ||
934 | void opal_free_sg_list(struct opal_sg_list *sg); | ||
935 | |||
940 | #endif /* __ASSEMBLY__ */ | 936 | #endif /* __ASSEMBLY__ */ |
941 | 937 | ||
942 | #endif /* __OPAL_H */ | 938 | #endif /* __OPAL_H */ |
diff --git a/arch/powerpc/include/uapi/asm/setup.h b/arch/powerpc/include/uapi/asm/setup.h index 552df83f1a49..ae3fb68cb28e 100644 --- a/arch/powerpc/include/uapi/asm/setup.h +++ b/arch/powerpc/include/uapi/asm/setup.h | |||
@@ -1 +1,6 @@ | |||
1 | #include <asm-generic/setup.h> | 1 | #ifndef _UAPI_ASM_POWERPC_SETUP_H |
2 | #define _UAPI_ASM_POWERPC_SETUP_H | ||
3 | |||
4 | #define COMMAND_LINE_SIZE 2048 | ||
5 | |||
6 | #endif /* _UAPI_ASM_POWERPC_SETUP_H */ | ||
diff --git a/arch/powerpc/kernel/pci_64.c b/arch/powerpc/kernel/pci_64.c index 2a4779091a58..155013da27e0 100644 --- a/arch/powerpc/kernel/pci_64.c +++ b/arch/powerpc/kernel/pci_64.c | |||
@@ -208,7 +208,7 @@ long sys_pciconfig_iobase(long which, unsigned long in_bus, | |||
208 | unsigned long in_devfn) | 208 | unsigned long in_devfn) |
209 | { | 209 | { |
210 | struct pci_controller* hose; | 210 | struct pci_controller* hose; |
211 | struct pci_bus *bus = NULL; | 211 | struct pci_bus *tmp_bus, *bus = NULL; |
212 | struct device_node *hose_node; | 212 | struct device_node *hose_node; |
213 | 213 | ||
214 | /* Argh ! Please forgive me for that hack, but that's the | 214 | /* Argh ! Please forgive me for that hack, but that's the |
@@ -229,10 +229,12 @@ long sys_pciconfig_iobase(long which, unsigned long in_bus, | |||
229 | * used on pre-domains setup. We return the first match | 229 | * used on pre-domains setup. We return the first match |
230 | */ | 230 | */ |
231 | 231 | ||
232 | list_for_each_entry(bus, &pci_root_buses, node) { | 232 | list_for_each_entry(tmp_bus, &pci_root_buses, node) { |
233 | if (in_bus >= bus->number && in_bus <= bus->busn_res.end) | 233 | if (in_bus >= tmp_bus->number && |
234 | in_bus <= tmp_bus->busn_res.end) { | ||
235 | bus = tmp_bus; | ||
234 | break; | 236 | break; |
235 | bus = NULL; | 237 | } |
236 | } | 238 | } |
237 | if (bus == NULL || bus->dev.of_node == NULL) | 239 | if (bus == NULL || bus->dev.of_node == NULL) |
238 | return -ENODEV; | 240 | return -ENODEV; |
diff --git a/arch/powerpc/kernel/ppc_ksyms.c b/arch/powerpc/kernel/ppc_ksyms.c index 3bd77edd7610..450850a49dce 100644 --- a/arch/powerpc/kernel/ppc_ksyms.c +++ b/arch/powerpc/kernel/ppc_ksyms.c | |||
@@ -120,6 +120,7 @@ EXPORT_SYMBOL(giveup_spe); | |||
120 | EXPORT_SYMBOL(flush_instruction_cache); | 120 | EXPORT_SYMBOL(flush_instruction_cache); |
121 | #endif | 121 | #endif |
122 | EXPORT_SYMBOL(flush_dcache_range); | 122 | EXPORT_SYMBOL(flush_dcache_range); |
123 | EXPORT_SYMBOL(flush_icache_range); | ||
123 | 124 | ||
124 | #ifdef CONFIG_SMP | 125 | #ifdef CONFIG_SMP |
125 | #ifdef CONFIG_PPC32 | 126 | #ifdef CONFIG_PPC32 |
diff --git a/arch/powerpc/kernel/rtas_flash.c b/arch/powerpc/kernel/rtas_flash.c index 2f3cdb01506d..658e89d2025b 100644 --- a/arch/powerpc/kernel/rtas_flash.c +++ b/arch/powerpc/kernel/rtas_flash.c | |||
@@ -705,7 +705,7 @@ static int __init rtas_flash_init(void) | |||
705 | if (rtas_token("ibm,update-flash-64-and-reboot") == | 705 | if (rtas_token("ibm,update-flash-64-and-reboot") == |
706 | RTAS_UNKNOWN_SERVICE) { | 706 | RTAS_UNKNOWN_SERVICE) { |
707 | pr_info("rtas_flash: no firmware flash support\n"); | 707 | pr_info("rtas_flash: no firmware flash support\n"); |
708 | return 1; | 708 | return -EINVAL; |
709 | } | 709 | } |
710 | 710 | ||
711 | rtas_validate_flash_data.buf = kzalloc(VALIDATE_BUF_SIZE, GFP_KERNEL); | 711 | rtas_validate_flash_data.buf = kzalloc(VALIDATE_BUF_SIZE, GFP_KERNEL); |
diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S index ffbb871c2bd8..b031f932c0cc 100644 --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S | |||
@@ -242,6 +242,12 @@ kvm_novcpu_exit: | |||
242 | */ | 242 | */ |
243 | .globl kvm_start_guest | 243 | .globl kvm_start_guest |
244 | kvm_start_guest: | 244 | kvm_start_guest: |
245 | |||
246 | /* Set runlatch bit the minute you wake up from nap */ | ||
247 | mfspr r1, SPRN_CTRLF | ||
248 | ori r1, r1, 1 | ||
249 | mtspr SPRN_CTRLT, r1 | ||
250 | |||
245 | ld r2,PACATOC(r13) | 251 | ld r2,PACATOC(r13) |
246 | 252 | ||
247 | li r0,KVM_HWTHREAD_IN_KVM | 253 | li r0,KVM_HWTHREAD_IN_KVM |
@@ -309,6 +315,11 @@ kvm_no_guest: | |||
309 | li r0, KVM_HWTHREAD_IN_NAP | 315 | li r0, KVM_HWTHREAD_IN_NAP |
310 | stb r0, HSTATE_HWTHREAD_STATE(r13) | 316 | stb r0, HSTATE_HWTHREAD_STATE(r13) |
311 | kvm_do_nap: | 317 | kvm_do_nap: |
318 | /* Clear the runlatch bit before napping */ | ||
319 | mfspr r2, SPRN_CTRLF | ||
320 | clrrdi r2, r2, 1 | ||
321 | mtspr SPRN_CTRLT, r2 | ||
322 | |||
312 | li r3, LPCR_PECE0 | 323 | li r3, LPCR_PECE0 |
313 | mfspr r4, SPRN_LPCR | 324 | mfspr r4, SPRN_LPCR |
314 | rlwimi r4, r3, 0, LPCR_PECE0 | LPCR_PECE1 | 325 | rlwimi r4, r3, 0, LPCR_PECE0 | LPCR_PECE1 |
@@ -1999,8 +2010,13 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_206) | |||
1999 | 2010 | ||
2000 | /* | 2011 | /* |
2001 | * Take a nap until a decrementer or external or doobell interrupt | 2012 | * Take a nap until a decrementer or external or doobell interrupt |
2002 | * occurs, with PECE1, PECE0 and PECEDP set in LPCR | 2013 | * occurs, with PECE1, PECE0 and PECEDP set in LPCR. Also clear the |
2014 | * runlatch bit before napping. | ||
2003 | */ | 2015 | */ |
2016 | mfspr r2, SPRN_CTRLF | ||
2017 | clrrdi r2, r2, 1 | ||
2018 | mtspr SPRN_CTRLT, r2 | ||
2019 | |||
2004 | li r0,1 | 2020 | li r0,1 |
2005 | stb r0,HSTATE_HWTHREAD_REQ(r13) | 2021 | stb r0,HSTATE_HWTHREAD_REQ(r13) |
2006 | mfspr r5,SPRN_LPCR | 2022 | mfspr r5,SPRN_LPCR |
diff --git a/arch/powerpc/mm/hash_native_64.c b/arch/powerpc/mm/hash_native_64.c index 3ea26c25590b..cf1d325eae8b 100644 --- a/arch/powerpc/mm/hash_native_64.c +++ b/arch/powerpc/mm/hash_native_64.c | |||
@@ -82,17 +82,14 @@ static inline void __tlbie(unsigned long vpn, int psize, int apsize, int ssize) | |||
82 | va &= ~((1ul << mmu_psize_defs[apsize].shift) - 1); | 82 | va &= ~((1ul << mmu_psize_defs[apsize].shift) - 1); |
83 | va |= penc << 12; | 83 | va |= penc << 12; |
84 | va |= ssize << 8; | 84 | va |= ssize << 8; |
85 | /* Add AVAL part */ | 85 | /* |
86 | if (psize != apsize) { | 86 | * AVAL bits: |
87 | /* | 87 | * We don't need all the bits, but rest of the bits |
88 | * MPSS, 64K base page size and 16MB parge page size | 88 | * must be ignored by the processor. |
89 | * We don't need all the bits, but rest of the bits | 89 | * vpn cover upto 65 bits of va. (0...65) and we need |
90 | * must be ignored by the processor. | 90 | * 58..64 bits of va. |
91 | * vpn cover upto 65 bits of va. (0...65) and we need | 91 | */ |
92 | * 58..64 bits of va. | 92 | va |= (vpn & 0xfe); /* AVAL */ |
93 | */ | ||
94 | va |= (vpn & 0xfe); | ||
95 | } | ||
96 | va |= 1; /* L */ | 93 | va |= 1; /* L */ |
97 | asm volatile(ASM_FTR_IFCLR("tlbie %0,1", PPC_TLBIE(%1,%0), %2) | 94 | asm volatile(ASM_FTR_IFCLR("tlbie %0,1", PPC_TLBIE(%1,%0), %2) |
98 | : : "r" (va), "r"(0), "i" (CPU_FTR_ARCH_206) | 95 | : : "r" (va), "r"(0), "i" (CPU_FTR_ARCH_206) |
@@ -133,17 +130,14 @@ static inline void __tlbiel(unsigned long vpn, int psize, int apsize, int ssize) | |||
133 | va &= ~((1ul << mmu_psize_defs[apsize].shift) - 1); | 130 | va &= ~((1ul << mmu_psize_defs[apsize].shift) - 1); |
134 | va |= penc << 12; | 131 | va |= penc << 12; |
135 | va |= ssize << 8; | 132 | va |= ssize << 8; |
136 | /* Add AVAL part */ | 133 | /* |
137 | if (psize != apsize) { | 134 | * AVAL bits: |
138 | /* | 135 | * We don't need all the bits, but rest of the bits |
139 | * MPSS, 64K base page size and 16MB parge page size | 136 | * must be ignored by the processor. |
140 | * We don't need all the bits, but rest of the bits | 137 | * vpn cover upto 65 bits of va. (0...65) and we need |
141 | * must be ignored by the processor. | 138 | * 58..64 bits of va. |
142 | * vpn cover upto 65 bits of va. (0...65) and we need | 139 | */ |
143 | * 58..64 bits of va. | 140 | va |= (vpn & 0xfe); |
144 | */ | ||
145 | va |= (vpn & 0xfe); | ||
146 | } | ||
147 | va |= 1; /* L */ | 141 | va |= 1; /* L */ |
148 | asm volatile(".long 0x7c000224 | (%0 << 11) | (1 << 21)" | 142 | asm volatile(".long 0x7c000224 | (%0 << 11) | (1 << 21)" |
149 | : : "r"(va) : "memory"); | 143 | : : "r"(va) : "memory"); |
diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c index 4ebbb9e99286..3b181b22cd46 100644 --- a/arch/powerpc/mm/numa.c +++ b/arch/powerpc/mm/numa.c | |||
@@ -232,6 +232,7 @@ int __node_distance(int a, int b) | |||
232 | 232 | ||
233 | return distance; | 233 | return distance; |
234 | } | 234 | } |
235 | EXPORT_SYMBOL(__node_distance); | ||
235 | 236 | ||
236 | static void initialize_distance_lookup_table(int nid, | 237 | static void initialize_distance_lookup_table(int nid, |
237 | const __be32 *associativity) | 238 | const __be32 *associativity) |
diff --git a/arch/powerpc/perf/hv-24x7.c b/arch/powerpc/perf/hv-24x7.c index 297c91051413..e0766b82e165 100644 --- a/arch/powerpc/perf/hv-24x7.c +++ b/arch/powerpc/perf/hv-24x7.c | |||
@@ -155,16 +155,28 @@ static ssize_t read_offset_data(void *dest, size_t dest_len, | |||
155 | return copy_len; | 155 | return copy_len; |
156 | } | 156 | } |
157 | 157 | ||
158 | static unsigned long h_get_24x7_catalog_page(char page[static 4096], | 158 | static unsigned long h_get_24x7_catalog_page_(unsigned long phys_4096, |
159 | u32 version, u32 index) | 159 | unsigned long version, |
160 | unsigned long index) | ||
160 | { | 161 | { |
161 | WARN_ON(!IS_ALIGNED((unsigned long)page, 4096)); | 162 | pr_devel("h_get_24x7_catalog_page(0x%lx, %lu, %lu)", |
163 | phys_4096, | ||
164 | version, | ||
165 | index); | ||
166 | WARN_ON(!IS_ALIGNED(phys_4096, 4096)); | ||
162 | return plpar_hcall_norets(H_GET_24X7_CATALOG_PAGE, | 167 | return plpar_hcall_norets(H_GET_24X7_CATALOG_PAGE, |
163 | virt_to_phys(page), | 168 | phys_4096, |
164 | version, | 169 | version, |
165 | index); | 170 | index); |
166 | } | 171 | } |
167 | 172 | ||
173 | static unsigned long h_get_24x7_catalog_page(char page[], | ||
174 | u64 version, u32 index) | ||
175 | { | ||
176 | return h_get_24x7_catalog_page_(virt_to_phys(page), | ||
177 | version, index); | ||
178 | } | ||
179 | |||
168 | static ssize_t catalog_read(struct file *filp, struct kobject *kobj, | 180 | static ssize_t catalog_read(struct file *filp, struct kobject *kobj, |
169 | struct bin_attribute *bin_attr, char *buf, | 181 | struct bin_attribute *bin_attr, char *buf, |
170 | loff_t offset, size_t count) | 182 | loff_t offset, size_t count) |
@@ -173,7 +185,7 @@ static ssize_t catalog_read(struct file *filp, struct kobject *kobj, | |||
173 | ssize_t ret = 0; | 185 | ssize_t ret = 0; |
174 | size_t catalog_len = 0, catalog_page_len = 0, page_count = 0; | 186 | size_t catalog_len = 0, catalog_page_len = 0, page_count = 0; |
175 | loff_t page_offset = 0; | 187 | loff_t page_offset = 0; |
176 | uint32_t catalog_version_num = 0; | 188 | uint64_t catalog_version_num = 0; |
177 | void *page = kmem_cache_alloc(hv_page_cache, GFP_USER); | 189 | void *page = kmem_cache_alloc(hv_page_cache, GFP_USER); |
178 | struct hv_24x7_catalog_page_0 *page_0 = page; | 190 | struct hv_24x7_catalog_page_0 *page_0 = page; |
179 | if (!page) | 191 | if (!page) |
@@ -185,7 +197,7 @@ static ssize_t catalog_read(struct file *filp, struct kobject *kobj, | |||
185 | goto e_free; | 197 | goto e_free; |
186 | } | 198 | } |
187 | 199 | ||
188 | catalog_version_num = be32_to_cpu(page_0->version); | 200 | catalog_version_num = be64_to_cpu(page_0->version); |
189 | catalog_page_len = be32_to_cpu(page_0->length); | 201 | catalog_page_len = be32_to_cpu(page_0->length); |
190 | catalog_len = catalog_page_len * 4096; | 202 | catalog_len = catalog_page_len * 4096; |
191 | 203 | ||
@@ -208,8 +220,9 @@ static ssize_t catalog_read(struct file *filp, struct kobject *kobj, | |||
208 | page, 4096, page_offset * 4096); | 220 | page, 4096, page_offset * 4096); |
209 | e_free: | 221 | e_free: |
210 | if (hret) | 222 | if (hret) |
211 | pr_err("h_get_24x7_catalog_page(ver=%d, page=%lld) failed: rc=%ld\n", | 223 | pr_err("h_get_24x7_catalog_page(ver=%lld, page=%lld) failed:" |
212 | catalog_version_num, page_offset, hret); | 224 | " rc=%ld\n", |
225 | catalog_version_num, page_offset, hret); | ||
213 | kfree(page); | 226 | kfree(page); |
214 | 227 | ||
215 | pr_devel("catalog_read: offset=%lld(%lld) count=%zu(%zu) catalog_len=%zu(%zu) => %zd\n", | 228 | pr_devel("catalog_read: offset=%lld(%lld) count=%zu(%zu) catalog_len=%zu(%zu) => %zd\n", |
@@ -243,7 +256,7 @@ e_free: \ | |||
243 | static DEVICE_ATTR_RO(_name) | 256 | static DEVICE_ATTR_RO(_name) |
244 | 257 | ||
245 | PAGE_0_ATTR(catalog_version, "%lld\n", | 258 | PAGE_0_ATTR(catalog_version, "%lld\n", |
246 | (unsigned long long)be32_to_cpu(page_0->version)); | 259 | (unsigned long long)be64_to_cpu(page_0->version)); |
247 | PAGE_0_ATTR(catalog_len, "%lld\n", | 260 | PAGE_0_ATTR(catalog_len, "%lld\n", |
248 | (unsigned long long)be32_to_cpu(page_0->length) * 4096); | 261 | (unsigned long long)be32_to_cpu(page_0->length) * 4096); |
249 | static BIN_ATTR_RO(catalog, 0/* real length varies */); | 262 | static BIN_ATTR_RO(catalog, 0/* real length varies */); |
@@ -485,13 +498,13 @@ static int hv_24x7_init(void) | |||
485 | struct hv_perf_caps caps; | 498 | struct hv_perf_caps caps; |
486 | 499 | ||
487 | if (!firmware_has_feature(FW_FEATURE_LPAR)) { | 500 | if (!firmware_has_feature(FW_FEATURE_LPAR)) { |
488 | pr_info("not a virtualized system, not enabling\n"); | 501 | pr_debug("not a virtualized system, not enabling\n"); |
489 | return -ENODEV; | 502 | return -ENODEV; |
490 | } | 503 | } |
491 | 504 | ||
492 | hret = hv_perf_caps_get(&caps); | 505 | hret = hv_perf_caps_get(&caps); |
493 | if (hret) { | 506 | if (hret) { |
494 | pr_info("could not obtain capabilities, error 0x%80lx, not enabling\n", | 507 | pr_debug("could not obtain capabilities, not enabling, rc=%ld\n", |
495 | hret); | 508 | hret); |
496 | return -ENODEV; | 509 | return -ENODEV; |
497 | } | 510 | } |
diff --git a/arch/powerpc/perf/hv-gpci.c b/arch/powerpc/perf/hv-gpci.c index 278ba7b9c2b5..c9d399a2df82 100644 --- a/arch/powerpc/perf/hv-gpci.c +++ b/arch/powerpc/perf/hv-gpci.c | |||
@@ -78,7 +78,7 @@ static ssize_t kernel_version_show(struct device *dev, | |||
78 | return sprintf(page, "0x%x\n", COUNTER_INFO_VERSION_CURRENT); | 78 | return sprintf(page, "0x%x\n", COUNTER_INFO_VERSION_CURRENT); |
79 | } | 79 | } |
80 | 80 | ||
81 | DEVICE_ATTR_RO(kernel_version); | 81 | static DEVICE_ATTR_RO(kernel_version); |
82 | HV_CAPS_ATTR(version, "0x%x\n"); | 82 | HV_CAPS_ATTR(version, "0x%x\n"); |
83 | HV_CAPS_ATTR(ga, "%d\n"); | 83 | HV_CAPS_ATTR(ga, "%d\n"); |
84 | HV_CAPS_ATTR(expanded, "%d\n"); | 84 | HV_CAPS_ATTR(expanded, "%d\n"); |
@@ -273,13 +273,13 @@ static int hv_gpci_init(void) | |||
273 | struct hv_perf_caps caps; | 273 | struct hv_perf_caps caps; |
274 | 274 | ||
275 | if (!firmware_has_feature(FW_FEATURE_LPAR)) { | 275 | if (!firmware_has_feature(FW_FEATURE_LPAR)) { |
276 | pr_info("not a virtualized system, not enabling\n"); | 276 | pr_debug("not a virtualized system, not enabling\n"); |
277 | return -ENODEV; | 277 | return -ENODEV; |
278 | } | 278 | } |
279 | 279 | ||
280 | hret = hv_perf_caps_get(&caps); | 280 | hret = hv_perf_caps_get(&caps); |
281 | if (hret) { | 281 | if (hret) { |
282 | pr_info("could not obtain capabilities, error 0x%80lx, not enabling\n", | 282 | pr_debug("could not obtain capabilities, not enabling, rc=%ld\n", |
283 | hret); | 283 | hret); |
284 | return -ENODEV; | 284 | return -ENODEV; |
285 | } | 285 | } |
diff --git a/arch/powerpc/platforms/powernv/opal-dump.c b/arch/powerpc/platforms/powernv/opal-dump.c index b9827b0d87e4..788a1977b9a5 100644 --- a/arch/powerpc/platforms/powernv/opal-dump.c +++ b/arch/powerpc/platforms/powernv/opal-dump.c | |||
@@ -209,89 +209,20 @@ static struct kobj_type dump_ktype = { | |||
209 | .default_attrs = dump_default_attrs, | 209 | .default_attrs = dump_default_attrs, |
210 | }; | 210 | }; |
211 | 211 | ||
212 | static void free_dump_sg_list(struct opal_sg_list *list) | 212 | static int64_t dump_read_info(uint32_t *dump_id, uint32_t *dump_size, uint32_t *dump_type) |
213 | { | ||
214 | struct opal_sg_list *sg1; | ||
215 | while (list) { | ||
216 | sg1 = list->next; | ||
217 | kfree(list); | ||
218 | list = sg1; | ||
219 | } | ||
220 | list = NULL; | ||
221 | } | ||
222 | |||
223 | static struct opal_sg_list *dump_data_to_sglist(struct dump_obj *dump) | ||
224 | { | ||
225 | struct opal_sg_list *sg1, *list = NULL; | ||
226 | void *addr; | ||
227 | int64_t size; | ||
228 | |||
229 | addr = dump->buffer; | ||
230 | size = dump->size; | ||
231 | |||
232 | sg1 = kzalloc(PAGE_SIZE, GFP_KERNEL); | ||
233 | if (!sg1) | ||
234 | goto nomem; | ||
235 | |||
236 | list = sg1; | ||
237 | sg1->num_entries = 0; | ||
238 | while (size > 0) { | ||
239 | /* Translate virtual address to physical address */ | ||
240 | sg1->entry[sg1->num_entries].data = | ||
241 | (void *)(vmalloc_to_pfn(addr) << PAGE_SHIFT); | ||
242 | |||
243 | if (size > PAGE_SIZE) | ||
244 | sg1->entry[sg1->num_entries].length = PAGE_SIZE; | ||
245 | else | ||
246 | sg1->entry[sg1->num_entries].length = size; | ||
247 | |||
248 | sg1->num_entries++; | ||
249 | if (sg1->num_entries >= SG_ENTRIES_PER_NODE) { | ||
250 | sg1->next = kzalloc(PAGE_SIZE, GFP_KERNEL); | ||
251 | if (!sg1->next) | ||
252 | goto nomem; | ||
253 | |||
254 | sg1 = sg1->next; | ||
255 | sg1->num_entries = 0; | ||
256 | } | ||
257 | addr += PAGE_SIZE; | ||
258 | size -= PAGE_SIZE; | ||
259 | } | ||
260 | return list; | ||
261 | |||
262 | nomem: | ||
263 | pr_err("%s : Failed to allocate memory\n", __func__); | ||
264 | free_dump_sg_list(list); | ||
265 | return NULL; | ||
266 | } | ||
267 | |||
268 | static void sglist_to_phy_addr(struct opal_sg_list *list) | ||
269 | { | ||
270 | struct opal_sg_list *sg, *next; | ||
271 | |||
272 | for (sg = list; sg; sg = next) { | ||
273 | next = sg->next; | ||
274 | /* Don't translate NULL pointer for last entry */ | ||
275 | if (sg->next) | ||
276 | sg->next = (struct opal_sg_list *)__pa(sg->next); | ||
277 | else | ||
278 | sg->next = NULL; | ||
279 | |||
280 | /* Convert num_entries to length */ | ||
281 | sg->num_entries = | ||
282 | sg->num_entries * sizeof(struct opal_sg_entry) + 16; | ||
283 | } | ||
284 | } | ||
285 | |||
286 | static int64_t dump_read_info(uint32_t *id, uint32_t *size, uint32_t *type) | ||
287 | { | 213 | { |
214 | __be32 id, size, type; | ||
288 | int rc; | 215 | int rc; |
289 | *type = 0xffffffff; | ||
290 | 216 | ||
291 | rc = opal_dump_info2(id, size, type); | 217 | type = cpu_to_be32(0xffffffff); |
292 | 218 | ||
219 | rc = opal_dump_info2(&id, &size, &type); | ||
293 | if (rc == OPAL_PARAMETER) | 220 | if (rc == OPAL_PARAMETER) |
294 | rc = opal_dump_info(id, size); | 221 | rc = opal_dump_info(&id, &size); |
222 | |||
223 | *dump_id = be32_to_cpu(id); | ||
224 | *dump_size = be32_to_cpu(size); | ||
225 | *dump_type = be32_to_cpu(type); | ||
295 | 226 | ||
296 | if (rc) | 227 | if (rc) |
297 | pr_warn("%s: Failed to get dump info (%d)\n", | 228 | pr_warn("%s: Failed to get dump info (%d)\n", |
@@ -314,15 +245,12 @@ static int64_t dump_read_data(struct dump_obj *dump) | |||
314 | } | 245 | } |
315 | 246 | ||
316 | /* Generate SG list */ | 247 | /* Generate SG list */ |
317 | list = dump_data_to_sglist(dump); | 248 | list = opal_vmalloc_to_sg_list(dump->buffer, dump->size); |
318 | if (!list) { | 249 | if (!list) { |
319 | rc = -ENOMEM; | 250 | rc = -ENOMEM; |
320 | goto out; | 251 | goto out; |
321 | } | 252 | } |
322 | 253 | ||
323 | /* Translate sg list addr to real address */ | ||
324 | sglist_to_phy_addr(list); | ||
325 | |||
326 | /* First entry address */ | 254 | /* First entry address */ |
327 | addr = __pa(list); | 255 | addr = __pa(list); |
328 | 256 | ||
@@ -341,7 +269,7 @@ static int64_t dump_read_data(struct dump_obj *dump) | |||
341 | __func__, dump->id); | 269 | __func__, dump->id); |
342 | 270 | ||
343 | /* Free SG list */ | 271 | /* Free SG list */ |
344 | free_dump_sg_list(list); | 272 | opal_free_sg_list(list); |
345 | 273 | ||
346 | out: | 274 | out: |
347 | return rc; | 275 | return rc; |
diff --git a/arch/powerpc/platforms/powernv/opal-elog.c b/arch/powerpc/platforms/powernv/opal-elog.c index ef7bc2a97862..10268c41d830 100644 --- a/arch/powerpc/platforms/powernv/opal-elog.c +++ b/arch/powerpc/platforms/powernv/opal-elog.c | |||
@@ -238,18 +238,25 @@ static struct elog_obj *create_elog_obj(uint64_t id, size_t size, uint64_t type) | |||
238 | 238 | ||
239 | static void elog_work_fn(struct work_struct *work) | 239 | static void elog_work_fn(struct work_struct *work) |
240 | { | 240 | { |
241 | size_t elog_size; | 241 | __be64 size; |
242 | __be64 id; | ||
243 | __be64 type; | ||
244 | uint64_t elog_size; | ||
242 | uint64_t log_id; | 245 | uint64_t log_id; |
243 | uint64_t elog_type; | 246 | uint64_t elog_type; |
244 | int rc; | 247 | int rc; |
245 | char name[2+16+1]; | 248 | char name[2+16+1]; |
246 | 249 | ||
247 | rc = opal_get_elog_size(&log_id, &elog_size, &elog_type); | 250 | rc = opal_get_elog_size(&id, &size, &type); |
248 | if (rc != OPAL_SUCCESS) { | 251 | if (rc != OPAL_SUCCESS) { |
249 | pr_err("ELOG: Opal log read failed\n"); | 252 | pr_err("ELOG: Opal log read failed\n"); |
250 | return; | 253 | return; |
251 | } | 254 | } |
252 | 255 | ||
256 | elog_size = be64_to_cpu(size); | ||
257 | log_id = be64_to_cpu(id); | ||
258 | elog_type = be64_to_cpu(type); | ||
259 | |||
253 | BUG_ON(elog_size > OPAL_MAX_ERRLOG_SIZE); | 260 | BUG_ON(elog_size > OPAL_MAX_ERRLOG_SIZE); |
254 | 261 | ||
255 | if (elog_size >= OPAL_MAX_ERRLOG_SIZE) | 262 | if (elog_size >= OPAL_MAX_ERRLOG_SIZE) |
diff --git a/arch/powerpc/platforms/powernv/opal-flash.c b/arch/powerpc/platforms/powernv/opal-flash.c index 714ef972406b..dc487ff04704 100644 --- a/arch/powerpc/platforms/powernv/opal-flash.c +++ b/arch/powerpc/platforms/powernv/opal-flash.c | |||
@@ -79,9 +79,6 @@ | |||
79 | /* XXX: Assume candidate image size is <= 1GB */ | 79 | /* XXX: Assume candidate image size is <= 1GB */ |
80 | #define MAX_IMAGE_SIZE 0x40000000 | 80 | #define MAX_IMAGE_SIZE 0x40000000 |
81 | 81 | ||
82 | /* Flash sg list version */ | ||
83 | #define SG_LIST_VERSION (1UL) | ||
84 | |||
85 | /* Image status */ | 82 | /* Image status */ |
86 | enum { | 83 | enum { |
87 | IMAGE_INVALID, | 84 | IMAGE_INVALID, |
@@ -131,11 +128,15 @@ static DEFINE_MUTEX(image_data_mutex); | |||
131 | */ | 128 | */ |
132 | static inline void opal_flash_validate(void) | 129 | static inline void opal_flash_validate(void) |
133 | { | 130 | { |
134 | struct validate_flash_t *args_buf = &validate_flash_data; | 131 | long ret; |
132 | void *buf = validate_flash_data.buf; | ||
133 | __be32 size, result; | ||
135 | 134 | ||
136 | args_buf->status = opal_validate_flash(__pa(args_buf->buf), | 135 | ret = opal_validate_flash(__pa(buf), &size, &result); |
137 | &(args_buf->buf_size), | 136 | |
138 | &(args_buf->result)); | 137 | validate_flash_data.status = ret; |
138 | validate_flash_data.buf_size = be32_to_cpu(size); | ||
139 | validate_flash_data.result = be32_to_cpu(result); | ||
139 | } | 140 | } |
140 | 141 | ||
141 | /* | 142 | /* |
@@ -268,93 +269,11 @@ static ssize_t manage_store(struct kobject *kobj, | |||
268 | } | 269 | } |
269 | 270 | ||
270 | /* | 271 | /* |
271 | * Free sg list | ||
272 | */ | ||
273 | static void free_sg_list(struct opal_sg_list *list) | ||
274 | { | ||
275 | struct opal_sg_list *sg1; | ||
276 | while (list) { | ||
277 | sg1 = list->next; | ||
278 | kfree(list); | ||
279 | list = sg1; | ||
280 | } | ||
281 | list = NULL; | ||
282 | } | ||
283 | |||
284 | /* | ||
285 | * Build candidate image scatter gather list | ||
286 | * | ||
287 | * list format: | ||
288 | * ----------------------------------- | ||
289 | * | VER (8) | Entry length in bytes | | ||
290 | * ----------------------------------- | ||
291 | * | Pointer to next entry | | ||
292 | * ----------------------------------- | ||
293 | * | Address of memory area 1 | | ||
294 | * ----------------------------------- | ||
295 | * | Length of memory area 1 | | ||
296 | * ----------------------------------- | ||
297 | * | ......... | | ||
298 | * ----------------------------------- | ||
299 | * | ......... | | ||
300 | * ----------------------------------- | ||
301 | * | Address of memory area N | | ||
302 | * ----------------------------------- | ||
303 | * | Length of memory area N | | ||
304 | * ----------------------------------- | ||
305 | */ | ||
306 | static struct opal_sg_list *image_data_to_sglist(void) | ||
307 | { | ||
308 | struct opal_sg_list *sg1, *list = NULL; | ||
309 | void *addr; | ||
310 | int size; | ||
311 | |||
312 | addr = image_data.data; | ||
313 | size = image_data.size; | ||
314 | |||
315 | sg1 = kzalloc(PAGE_SIZE, GFP_KERNEL); | ||
316 | if (!sg1) | ||
317 | return NULL; | ||
318 | |||
319 | list = sg1; | ||
320 | sg1->num_entries = 0; | ||
321 | while (size > 0) { | ||
322 | /* Translate virtual address to physical address */ | ||
323 | sg1->entry[sg1->num_entries].data = | ||
324 | (void *)(vmalloc_to_pfn(addr) << PAGE_SHIFT); | ||
325 | |||
326 | if (size > PAGE_SIZE) | ||
327 | sg1->entry[sg1->num_entries].length = PAGE_SIZE; | ||
328 | else | ||
329 | sg1->entry[sg1->num_entries].length = size; | ||
330 | |||
331 | sg1->num_entries++; | ||
332 | if (sg1->num_entries >= SG_ENTRIES_PER_NODE) { | ||
333 | sg1->next = kzalloc(PAGE_SIZE, GFP_KERNEL); | ||
334 | if (!sg1->next) { | ||
335 | pr_err("%s : Failed to allocate memory\n", | ||
336 | __func__); | ||
337 | goto nomem; | ||
338 | } | ||
339 | |||
340 | sg1 = sg1->next; | ||
341 | sg1->num_entries = 0; | ||
342 | } | ||
343 | addr += PAGE_SIZE; | ||
344 | size -= PAGE_SIZE; | ||
345 | } | ||
346 | return list; | ||
347 | nomem: | ||
348 | free_sg_list(list); | ||
349 | return NULL; | ||
350 | } | ||
351 | |||
352 | /* | ||
353 | * OPAL update flash | 272 | * OPAL update flash |
354 | */ | 273 | */ |
355 | static int opal_flash_update(int op) | 274 | static int opal_flash_update(int op) |
356 | { | 275 | { |
357 | struct opal_sg_list *sg, *list, *next; | 276 | struct opal_sg_list *list; |
358 | unsigned long addr; | 277 | unsigned long addr; |
359 | int64_t rc = OPAL_PARAMETER; | 278 | int64_t rc = OPAL_PARAMETER; |
360 | 279 | ||
@@ -364,30 +283,13 @@ static int opal_flash_update(int op) | |||
364 | goto flash; | 283 | goto flash; |
365 | } | 284 | } |
366 | 285 | ||
367 | list = image_data_to_sglist(); | 286 | list = opal_vmalloc_to_sg_list(image_data.data, image_data.size); |
368 | if (!list) | 287 | if (!list) |
369 | goto invalid_img; | 288 | goto invalid_img; |
370 | 289 | ||
371 | /* First entry address */ | 290 | /* First entry address */ |
372 | addr = __pa(list); | 291 | addr = __pa(list); |
373 | 292 | ||
374 | /* Translate sg list address to absolute */ | ||
375 | for (sg = list; sg; sg = next) { | ||
376 | next = sg->next; | ||
377 | /* Don't translate NULL pointer for last entry */ | ||
378 | if (sg->next) | ||
379 | sg->next = (struct opal_sg_list *)__pa(sg->next); | ||
380 | else | ||
381 | sg->next = NULL; | ||
382 | |||
383 | /* | ||
384 | * Convert num_entries to version/length format | ||
385 | * to satisfy OPAL. | ||
386 | */ | ||
387 | sg->num_entries = (SG_LIST_VERSION << 56) | | ||
388 | (sg->num_entries * sizeof(struct opal_sg_entry) + 16); | ||
389 | } | ||
390 | |||
391 | pr_alert("FLASH: Image is %u bytes\n", image_data.size); | 293 | pr_alert("FLASH: Image is %u bytes\n", image_data.size); |
392 | pr_alert("FLASH: Image update requested\n"); | 294 | pr_alert("FLASH: Image update requested\n"); |
393 | pr_alert("FLASH: Image will be updated during system reboot\n"); | 295 | pr_alert("FLASH: Image will be updated during system reboot\n"); |
diff --git a/arch/powerpc/platforms/powernv/opal-sysparam.c b/arch/powerpc/platforms/powernv/opal-sysparam.c index 6b614726baf2..d202f9bc3683 100644 --- a/arch/powerpc/platforms/powernv/opal-sysparam.c +++ b/arch/powerpc/platforms/powernv/opal-sysparam.c | |||
@@ -39,10 +39,11 @@ struct param_attr { | |||
39 | struct kobj_attribute kobj_attr; | 39 | struct kobj_attribute kobj_attr; |
40 | }; | 40 | }; |
41 | 41 | ||
42 | static int opal_get_sys_param(u32 param_id, u32 length, void *buffer) | 42 | static ssize_t opal_get_sys_param(u32 param_id, u32 length, void *buffer) |
43 | { | 43 | { |
44 | struct opal_msg msg; | 44 | struct opal_msg msg; |
45 | int ret, token; | 45 | ssize_t ret; |
46 | int token; | ||
46 | 47 | ||
47 | token = opal_async_get_token_interruptible(); | 48 | token = opal_async_get_token_interruptible(); |
48 | if (token < 0) { | 49 | if (token < 0) { |
@@ -59,7 +60,7 @@ static int opal_get_sys_param(u32 param_id, u32 length, void *buffer) | |||
59 | 60 | ||
60 | ret = opal_async_wait_response(token, &msg); | 61 | ret = opal_async_wait_response(token, &msg); |
61 | if (ret) { | 62 | if (ret) { |
62 | pr_err("%s: Failed to wait for the async response, %d\n", | 63 | pr_err("%s: Failed to wait for the async response, %zd\n", |
63 | __func__, ret); | 64 | __func__, ret); |
64 | goto out_token; | 65 | goto out_token; |
65 | } | 66 | } |
@@ -111,7 +112,7 @@ static ssize_t sys_param_show(struct kobject *kobj, | |||
111 | { | 112 | { |
112 | struct param_attr *attr = container_of(kobj_attr, struct param_attr, | 113 | struct param_attr *attr = container_of(kobj_attr, struct param_attr, |
113 | kobj_attr); | 114 | kobj_attr); |
114 | int ret; | 115 | ssize_t ret; |
115 | 116 | ||
116 | mutex_lock(&opal_sysparam_mutex); | 117 | mutex_lock(&opal_sysparam_mutex); |
117 | ret = opal_get_sys_param(attr->param_id, attr->param_size, | 118 | ret = opal_get_sys_param(attr->param_id, attr->param_size, |
@@ -121,9 +122,10 @@ static ssize_t sys_param_show(struct kobject *kobj, | |||
121 | 122 | ||
122 | memcpy(buf, param_data_buf, attr->param_size); | 123 | memcpy(buf, param_data_buf, attr->param_size); |
123 | 124 | ||
125 | ret = attr->param_size; | ||
124 | out: | 126 | out: |
125 | mutex_unlock(&opal_sysparam_mutex); | 127 | mutex_unlock(&opal_sysparam_mutex); |
126 | return ret ? ret : attr->param_size; | 128 | return ret; |
127 | } | 129 | } |
128 | 130 | ||
129 | static ssize_t sys_param_store(struct kobject *kobj, | 131 | static ssize_t sys_param_store(struct kobject *kobj, |
@@ -131,14 +133,20 @@ static ssize_t sys_param_store(struct kobject *kobj, | |||
131 | { | 133 | { |
132 | struct param_attr *attr = container_of(kobj_attr, struct param_attr, | 134 | struct param_attr *attr = container_of(kobj_attr, struct param_attr, |
133 | kobj_attr); | 135 | kobj_attr); |
134 | int ret; | 136 | ssize_t ret; |
137 | |||
138 | /* MAX_PARAM_DATA_LEN is sizeof(param_data_buf) */ | ||
139 | if (count > MAX_PARAM_DATA_LEN) | ||
140 | count = MAX_PARAM_DATA_LEN; | ||
135 | 141 | ||
136 | mutex_lock(&opal_sysparam_mutex); | 142 | mutex_lock(&opal_sysparam_mutex); |
137 | memcpy(param_data_buf, buf, count); | 143 | memcpy(param_data_buf, buf, count); |
138 | ret = opal_set_sys_param(attr->param_id, attr->param_size, | 144 | ret = opal_set_sys_param(attr->param_id, attr->param_size, |
139 | param_data_buf); | 145 | param_data_buf); |
140 | mutex_unlock(&opal_sysparam_mutex); | 146 | mutex_unlock(&opal_sysparam_mutex); |
141 | return ret ? ret : count; | 147 | if (!ret) |
148 | ret = count; | ||
149 | return ret; | ||
142 | } | 150 | } |
143 | 151 | ||
144 | void __init opal_sys_param_init(void) | 152 | void __init opal_sys_param_init(void) |
@@ -214,13 +222,13 @@ void __init opal_sys_param_init(void) | |||
214 | } | 222 | } |
215 | 223 | ||
216 | if (of_property_read_u32_array(sysparam, "param-len", size, count)) { | 224 | if (of_property_read_u32_array(sysparam, "param-len", size, count)) { |
217 | pr_err("SYSPARAM: Missing propery param-len in the DT\n"); | 225 | pr_err("SYSPARAM: Missing property param-len in the DT\n"); |
218 | goto out_free_perm; | 226 | goto out_free_perm; |
219 | } | 227 | } |
220 | 228 | ||
221 | 229 | ||
222 | if (of_property_read_u8_array(sysparam, "param-perm", perm, count)) { | 230 | if (of_property_read_u8_array(sysparam, "param-perm", perm, count)) { |
223 | pr_err("SYSPARAM: Missing propery param-perm in the DT\n"); | 231 | pr_err("SYSPARAM: Missing property param-perm in the DT\n"); |
224 | goto out_free_perm; | 232 | goto out_free_perm; |
225 | } | 233 | } |
226 | 234 | ||
@@ -233,6 +241,12 @@ void __init opal_sys_param_init(void) | |||
233 | 241 | ||
234 | /* For each of the parameters, populate the parameter attributes */ | 242 | /* For each of the parameters, populate the parameter attributes */ |
235 | for (i = 0; i < count; i++) { | 243 | for (i = 0; i < count; i++) { |
244 | if (size[i] > MAX_PARAM_DATA_LEN) { | ||
245 | pr_warn("SYSPARAM: Not creating parameter %d as size " | ||
246 | "exceeds buffer length\n", i); | ||
247 | continue; | ||
248 | } | ||
249 | |||
236 | sysfs_attr_init(&attr[i].kobj_attr.attr); | 250 | sysfs_attr_init(&attr[i].kobj_attr.attr); |
237 | attr[i].param_id = id[i]; | 251 | attr[i].param_id = id[i]; |
238 | attr[i].param_size = size[i]; | 252 | attr[i].param_size = size[i]; |
diff --git a/arch/powerpc/platforms/powernv/opal.c b/arch/powerpc/platforms/powernv/opal.c index 49d2f00019e5..360ad80c754c 100644 --- a/arch/powerpc/platforms/powernv/opal.c +++ b/arch/powerpc/platforms/powernv/opal.c | |||
@@ -242,14 +242,14 @@ void opal_notifier_update_evt(uint64_t evt_mask, | |||
242 | void opal_notifier_enable(void) | 242 | void opal_notifier_enable(void) |
243 | { | 243 | { |
244 | int64_t rc; | 244 | int64_t rc; |
245 | uint64_t evt = 0; | 245 | __be64 evt = 0; |
246 | 246 | ||
247 | atomic_set(&opal_notifier_hold, 0); | 247 | atomic_set(&opal_notifier_hold, 0); |
248 | 248 | ||
249 | /* Process pending events */ | 249 | /* Process pending events */ |
250 | rc = opal_poll_events(&evt); | 250 | rc = opal_poll_events(&evt); |
251 | if (rc == OPAL_SUCCESS && evt) | 251 | if (rc == OPAL_SUCCESS && evt) |
252 | opal_do_notifier(evt); | 252 | opal_do_notifier(be64_to_cpu(evt)); |
253 | } | 253 | } |
254 | 254 | ||
255 | void opal_notifier_disable(void) | 255 | void opal_notifier_disable(void) |
@@ -529,7 +529,7 @@ static irqreturn_t opal_interrupt(int irq, void *data) | |||
529 | 529 | ||
530 | opal_handle_interrupt(virq_to_hw(irq), &events); | 530 | opal_handle_interrupt(virq_to_hw(irq), &events); |
531 | 531 | ||
532 | opal_do_notifier(events); | 532 | opal_do_notifier(be64_to_cpu(events)); |
533 | 533 | ||
534 | return IRQ_HANDLED; | 534 | return IRQ_HANDLED; |
535 | } | 535 | } |
@@ -638,3 +638,66 @@ void opal_shutdown(void) | |||
638 | 638 | ||
639 | /* Export this so that test modules can use it */ | 639 | /* Export this so that test modules can use it */ |
640 | EXPORT_SYMBOL_GPL(opal_invalid_call); | 640 | EXPORT_SYMBOL_GPL(opal_invalid_call); |
641 | |||
642 | /* Convert a region of vmalloc memory to an opal sg list */ | ||
643 | struct opal_sg_list *opal_vmalloc_to_sg_list(void *vmalloc_addr, | ||
644 | unsigned long vmalloc_size) | ||
645 | { | ||
646 | struct opal_sg_list *sg, *first = NULL; | ||
647 | unsigned long i = 0; | ||
648 | |||
649 | sg = kzalloc(PAGE_SIZE, GFP_KERNEL); | ||
650 | if (!sg) | ||
651 | goto nomem; | ||
652 | |||
653 | first = sg; | ||
654 | |||
655 | while (vmalloc_size > 0) { | ||
656 | uint64_t data = vmalloc_to_pfn(vmalloc_addr) << PAGE_SHIFT; | ||
657 | uint64_t length = min(vmalloc_size, PAGE_SIZE); | ||
658 | |||
659 | sg->entry[i].data = cpu_to_be64(data); | ||
660 | sg->entry[i].length = cpu_to_be64(length); | ||
661 | i++; | ||
662 | |||
663 | if (i >= SG_ENTRIES_PER_NODE) { | ||
664 | struct opal_sg_list *next; | ||
665 | |||
666 | next = kzalloc(PAGE_SIZE, GFP_KERNEL); | ||
667 | if (!next) | ||
668 | goto nomem; | ||
669 | |||
670 | sg->length = cpu_to_be64( | ||
671 | i * sizeof(struct opal_sg_entry) + 16); | ||
672 | i = 0; | ||
673 | sg->next = cpu_to_be64(__pa(next)); | ||
674 | sg = next; | ||
675 | } | ||
676 | |||
677 | vmalloc_addr += length; | ||
678 | vmalloc_size -= length; | ||
679 | } | ||
680 | |||
681 | sg->length = cpu_to_be64(i * sizeof(struct opal_sg_entry) + 16); | ||
682 | |||
683 | return first; | ||
684 | |||
685 | nomem: | ||
686 | pr_err("%s : Failed to allocate memory\n", __func__); | ||
687 | opal_free_sg_list(first); | ||
688 | return NULL; | ||
689 | } | ||
690 | |||
691 | void opal_free_sg_list(struct opal_sg_list *sg) | ||
692 | { | ||
693 | while (sg) { | ||
694 | uint64_t next = be64_to_cpu(sg->next); | ||
695 | |||
696 | kfree(sg); | ||
697 | |||
698 | if (next) | ||
699 | sg = __va(next); | ||
700 | else | ||
701 | sg = NULL; | ||
702 | } | ||
703 | } | ||
diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c index 3b2b4fb3585b..98824aa99173 100644 --- a/arch/powerpc/platforms/powernv/pci-ioda.c +++ b/arch/powerpc/platforms/powernv/pci-ioda.c | |||
@@ -343,7 +343,6 @@ static void pnv_ioda_setup_same_PE(struct pci_bus *bus, struct pnv_ioda_pe *pe) | |||
343 | pci_name(dev)); | 343 | pci_name(dev)); |
344 | continue; | 344 | continue; |
345 | } | 345 | } |
346 | pci_dev_get(dev); | ||
347 | pdn->pcidev = dev; | 346 | pdn->pcidev = dev; |
348 | pdn->pe_number = pe->pe_number; | 347 | pdn->pe_number = pe->pe_number; |
349 | pe->dma_weight += pnv_ioda_dma_weight(dev); | 348 | pe->dma_weight += pnv_ioda_dma_weight(dev); |
@@ -462,7 +461,7 @@ static void pnv_pci_ioda_dma_dev_setup(struct pnv_phb *phb, struct pci_dev *pdev | |||
462 | 461 | ||
463 | pe = &phb->ioda.pe_array[pdn->pe_number]; | 462 | pe = &phb->ioda.pe_array[pdn->pe_number]; |
464 | WARN_ON(get_dma_ops(&pdev->dev) != &dma_iommu_ops); | 463 | WARN_ON(get_dma_ops(&pdev->dev) != &dma_iommu_ops); |
465 | set_iommu_table_base_and_group(&pdev->dev, &pe->tce32_table); | 464 | set_iommu_table_base(&pdev->dev, &pe->tce32_table); |
466 | } | 465 | } |
467 | 466 | ||
468 | static int pnv_pci_ioda_dma_set_mask(struct pnv_phb *phb, | 467 | static int pnv_pci_ioda_dma_set_mask(struct pnv_phb *phb, |
diff --git a/arch/powerpc/platforms/powernv/setup.c b/arch/powerpc/platforms/powernv/setup.c index 61cf8fa9c61b..8723d32632f5 100644 --- a/arch/powerpc/platforms/powernv/setup.c +++ b/arch/powerpc/platforms/powernv/setup.c | |||
@@ -162,18 +162,62 @@ static void pnv_shutdown(void) | |||
162 | } | 162 | } |
163 | 163 | ||
164 | #ifdef CONFIG_KEXEC | 164 | #ifdef CONFIG_KEXEC |
165 | static void pnv_kexec_wait_secondaries_down(void) | ||
166 | { | ||
167 | int my_cpu, i, notified = -1; | ||
168 | |||
169 | my_cpu = get_cpu(); | ||
170 | |||
171 | for_each_online_cpu(i) { | ||
172 | uint8_t status; | ||
173 | int64_t rc; | ||
174 | |||
175 | if (i == my_cpu) | ||
176 | continue; | ||
177 | |||
178 | for (;;) { | ||
179 | rc = opal_query_cpu_status(get_hard_smp_processor_id(i), | ||
180 | &status); | ||
181 | if (rc != OPAL_SUCCESS || status != OPAL_THREAD_STARTED) | ||
182 | break; | ||
183 | barrier(); | ||
184 | if (i != notified) { | ||
185 | printk(KERN_INFO "kexec: waiting for cpu %d " | ||
186 | "(physical %d) to enter OPAL\n", | ||
187 | i, paca[i].hw_cpu_id); | ||
188 | notified = i; | ||
189 | } | ||
190 | } | ||
191 | } | ||
192 | } | ||
193 | |||
165 | static void pnv_kexec_cpu_down(int crash_shutdown, int secondary) | 194 | static void pnv_kexec_cpu_down(int crash_shutdown, int secondary) |
166 | { | 195 | { |
167 | xics_kexec_teardown_cpu(secondary); | 196 | xics_kexec_teardown_cpu(secondary); |
168 | 197 | ||
169 | /* Return secondary CPUs to firmware on OPAL v3 */ | 198 | /* On OPAL v3, we return all CPUs to firmware */ |
170 | if (firmware_has_feature(FW_FEATURE_OPALv3) && secondary) { | 199 | |
200 | if (!firmware_has_feature(FW_FEATURE_OPALv3)) | ||
201 | return; | ||
202 | |||
203 | if (secondary) { | ||
204 | /* Return secondary CPUs to firmware on OPAL v3 */ | ||
171 | mb(); | 205 | mb(); |
172 | get_paca()->kexec_state = KEXEC_STATE_REAL_MODE; | 206 | get_paca()->kexec_state = KEXEC_STATE_REAL_MODE; |
173 | mb(); | 207 | mb(); |
174 | 208 | ||
175 | /* Return the CPU to OPAL */ | 209 | /* Return the CPU to OPAL */ |
176 | opal_return_cpu(); | 210 | opal_return_cpu(); |
211 | } else if (crash_shutdown) { | ||
212 | /* | ||
213 | * On crash, we don't wait for secondaries to go | ||
214 | * down as they might be unreachable or hung, so | ||
215 | * instead we just wait a bit and move on. | ||
216 | */ | ||
217 | mdelay(1); | ||
218 | } else { | ||
219 | /* Primary waits for the secondaries to have reached OPAL */ | ||
220 | pnv_kexec_wait_secondaries_down(); | ||
177 | } | 221 | } |
178 | } | 222 | } |
179 | #endif /* CONFIG_KEXEC */ | 223 | #endif /* CONFIG_KEXEC */ |
diff --git a/arch/powerpc/platforms/powernv/smp.c b/arch/powerpc/platforms/powernv/smp.c index 908672bdcea6..bf5fcd452168 100644 --- a/arch/powerpc/platforms/powernv/smp.c +++ b/arch/powerpc/platforms/powernv/smp.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <asm/cputhreads.h> | 30 | #include <asm/cputhreads.h> |
31 | #include <asm/xics.h> | 31 | #include <asm/xics.h> |
32 | #include <asm/opal.h> | 32 | #include <asm/opal.h> |
33 | #include <asm/runlatch.h> | ||
33 | 34 | ||
34 | #include "powernv.h" | 35 | #include "powernv.h" |
35 | 36 | ||
@@ -156,7 +157,9 @@ static void pnv_smp_cpu_kill_self(void) | |||
156 | */ | 157 | */ |
157 | mtspr(SPRN_LPCR, mfspr(SPRN_LPCR) & ~(u64)LPCR_PECE1); | 158 | mtspr(SPRN_LPCR, mfspr(SPRN_LPCR) & ~(u64)LPCR_PECE1); |
158 | while (!generic_check_cpu_restart(cpu)) { | 159 | while (!generic_check_cpu_restart(cpu)) { |
160 | ppc64_runlatch_off(); | ||
159 | power7_nap(); | 161 | power7_nap(); |
162 | ppc64_runlatch_on(); | ||
160 | if (!generic_check_cpu_restart(cpu)) { | 163 | if (!generic_check_cpu_restart(cpu)) { |
161 | DBG("CPU%d Unexpected exit while offline !\n", cpu); | 164 | DBG("CPU%d Unexpected exit while offline !\n", cpu); |
162 | /* We may be getting an IPI, so we re-enable | 165 | /* We may be getting an IPI, so we re-enable |
diff --git a/arch/powerpc/platforms/pseries/hotplug-cpu.c b/arch/powerpc/platforms/pseries/hotplug-cpu.c index 9b8e05078a63..20d62975856f 100644 --- a/arch/powerpc/platforms/pseries/hotplug-cpu.c +++ b/arch/powerpc/platforms/pseries/hotplug-cpu.c | |||
@@ -88,13 +88,14 @@ void set_default_offline_state(int cpu) | |||
88 | 88 | ||
89 | static void rtas_stop_self(void) | 89 | static void rtas_stop_self(void) |
90 | { | 90 | { |
91 | struct rtas_args args = { | 91 | static struct rtas_args args = { |
92 | .token = cpu_to_be32(rtas_stop_self_token), | ||
93 | .nargs = 0, | 92 | .nargs = 0, |
94 | .nret = 1, | 93 | .nret = 1, |
95 | .rets = &args.args[0], | 94 | .rets = &args.args[0], |
96 | }; | 95 | }; |
97 | 96 | ||
97 | args.token = cpu_to_be32(rtas_stop_self_token); | ||
98 | |||
98 | local_irq_disable(); | 99 | local_irq_disable(); |
99 | 100 | ||
100 | BUG_ON(rtas_stop_self_token == RTAS_UNKNOWN_SERVICE); | 101 | BUG_ON(rtas_stop_self_token == RTAS_UNKNOWN_SERVICE); |
diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c index 573b488fc48b..7f75c94af822 100644 --- a/arch/powerpc/platforms/pseries/hotplug-memory.c +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c | |||
@@ -100,10 +100,10 @@ static int pseries_remove_memblock(unsigned long base, unsigned int memblock_siz | |||
100 | 100 | ||
101 | start_pfn = base >> PAGE_SHIFT; | 101 | start_pfn = base >> PAGE_SHIFT; |
102 | 102 | ||
103 | if (!pfn_valid(start_pfn)) { | 103 | lock_device_hotplug(); |
104 | memblock_remove(base, memblock_size); | 104 | |
105 | return 0; | 105 | if (!pfn_valid(start_pfn)) |
106 | } | 106 | goto out; |
107 | 107 | ||
108 | block_sz = memory_block_size_bytes(); | 108 | block_sz = memory_block_size_bytes(); |
109 | sections_per_block = block_sz / MIN_MEMORY_BLOCK_SIZE; | 109 | sections_per_block = block_sz / MIN_MEMORY_BLOCK_SIZE; |
@@ -114,8 +114,10 @@ static int pseries_remove_memblock(unsigned long base, unsigned int memblock_siz | |||
114 | base += MIN_MEMORY_BLOCK_SIZE; | 114 | base += MIN_MEMORY_BLOCK_SIZE; |
115 | } | 115 | } |
116 | 116 | ||
117 | out: | ||
117 | /* Update memory regions for memory remove */ | 118 | /* Update memory regions for memory remove */ |
118 | memblock_remove(base, memblock_size); | 119 | memblock_remove(base, memblock_size); |
120 | unlock_device_hotplug(); | ||
119 | return 0; | 121 | return 0; |
120 | } | 122 | } |
121 | 123 | ||
diff --git a/arch/powerpc/sysdev/ppc4xx_pci.c b/arch/powerpc/sysdev/ppc4xx_pci.c index 64603a10b863..4914fd3f41ec 100644 --- a/arch/powerpc/sysdev/ppc4xx_pci.c +++ b/arch/powerpc/sysdev/ppc4xx_pci.c | |||
@@ -1058,7 +1058,7 @@ static int __init apm821xx_pciex_core_init(struct device_node *np) | |||
1058 | return 1; | 1058 | return 1; |
1059 | } | 1059 | } |
1060 | 1060 | ||
1061 | static int apm821xx_pciex_init_port_hw(struct ppc4xx_pciex_port *port) | 1061 | static int __init apm821xx_pciex_init_port_hw(struct ppc4xx_pciex_port *port) |
1062 | { | 1062 | { |
1063 | u32 val; | 1063 | u32 val; |
1064 | 1064 | ||
diff --git a/arch/s390/include/asm/ccwgroup.h b/arch/s390/include/asm/ccwgroup.h index 6e670f88d125..ebc2913f9ee0 100644 --- a/arch/s390/include/asm/ccwgroup.h +++ b/arch/s390/include/asm/ccwgroup.h | |||
@@ -22,8 +22,8 @@ struct ccwgroup_device { | |||
22 | /* public: */ | 22 | /* public: */ |
23 | unsigned int count; | 23 | unsigned int count; |
24 | struct device dev; | 24 | struct device dev; |
25 | struct ccw_device *cdev[0]; | ||
26 | struct work_struct ungroup_work; | 25 | struct work_struct ungroup_work; |
26 | struct ccw_device *cdev[0]; | ||
27 | }; | 27 | }; |
28 | 28 | ||
29 | /** | 29 | /** |
diff --git a/arch/s390/include/asm/sigp.h b/arch/s390/include/asm/sigp.h index d091aa1aaf11..bf9c823d4020 100644 --- a/arch/s390/include/asm/sigp.h +++ b/arch/s390/include/asm/sigp.h | |||
@@ -31,4 +31,23 @@ | |||
31 | #define SIGP_STATUS_INCORRECT_STATE 0x00000200UL | 31 | #define SIGP_STATUS_INCORRECT_STATE 0x00000200UL |
32 | #define SIGP_STATUS_NOT_RUNNING 0x00000400UL | 32 | #define SIGP_STATUS_NOT_RUNNING 0x00000400UL |
33 | 33 | ||
34 | #ifndef __ASSEMBLY__ | ||
35 | |||
36 | static inline int __pcpu_sigp(u16 addr, u8 order, u32 parm, u32 *status) | ||
37 | { | ||
38 | register unsigned int reg1 asm ("1") = parm; | ||
39 | int cc; | ||
40 | |||
41 | asm volatile( | ||
42 | " sigp %1,%2,0(%3)\n" | ||
43 | " ipm %0\n" | ||
44 | " srl %0,28\n" | ||
45 | : "=d" (cc), "+d" (reg1) : "d" (addr), "a" (order) : "cc"); | ||
46 | if (status && cc == 1) | ||
47 | *status = reg1; | ||
48 | return cc; | ||
49 | } | ||
50 | |||
51 | #endif /* __ASSEMBLY__ */ | ||
52 | |||
34 | #endif /* __S390_ASM_SIGP_H */ | 53 | #endif /* __S390_ASM_SIGP_H */ |
diff --git a/arch/s390/include/asm/smp.h b/arch/s390/include/asm/smp.h index 160779394096..21703f85b48d 100644 --- a/arch/s390/include/asm/smp.h +++ b/arch/s390/include/asm/smp.h | |||
@@ -7,6 +7,8 @@ | |||
7 | #ifndef __ASM_SMP_H | 7 | #ifndef __ASM_SMP_H |
8 | #define __ASM_SMP_H | 8 | #define __ASM_SMP_H |
9 | 9 | ||
10 | #include <asm/sigp.h> | ||
11 | |||
10 | #ifdef CONFIG_SMP | 12 | #ifdef CONFIG_SMP |
11 | 13 | ||
12 | #include <asm/lowcore.h> | 14 | #include <asm/lowcore.h> |
@@ -50,9 +52,18 @@ static inline int smp_store_status(int cpu) { return 0; } | |||
50 | static inline int smp_vcpu_scheduled(int cpu) { return 1; } | 52 | static inline int smp_vcpu_scheduled(int cpu) { return 1; } |
51 | static inline void smp_yield_cpu(int cpu) { } | 53 | static inline void smp_yield_cpu(int cpu) { } |
52 | static inline void smp_yield(void) { } | 54 | static inline void smp_yield(void) { } |
53 | static inline void smp_stop_cpu(void) { } | ||
54 | static inline void smp_fill_possible_mask(void) { } | 55 | static inline void smp_fill_possible_mask(void) { } |
55 | 56 | ||
57 | static inline void smp_stop_cpu(void) | ||
58 | { | ||
59 | u16 pcpu = stap(); | ||
60 | |||
61 | for (;;) { | ||
62 | __pcpu_sigp(pcpu, SIGP_STOP, 0, NULL); | ||
63 | cpu_relax(); | ||
64 | } | ||
65 | } | ||
66 | |||
56 | #endif /* CONFIG_SMP */ | 67 | #endif /* CONFIG_SMP */ |
57 | 68 | ||
58 | #ifdef CONFIG_HOTPLUG_CPU | 69 | #ifdef CONFIG_HOTPLUG_CPU |
diff --git a/arch/s390/include/asm/tlb.h b/arch/s390/include/asm/tlb.h index c544b6f05d95..a25f09fbaf36 100644 --- a/arch/s390/include/asm/tlb.h +++ b/arch/s390/include/asm/tlb.h | |||
@@ -59,12 +59,23 @@ static inline void tlb_gather_mmu(struct mmu_gather *tlb, | |||
59 | tlb->batch = NULL; | 59 | tlb->batch = NULL; |
60 | } | 60 | } |
61 | 61 | ||
62 | static inline void tlb_flush_mmu(struct mmu_gather *tlb) | 62 | static inline void tlb_flush_mmu_tlbonly(struct mmu_gather *tlb) |
63 | { | 63 | { |
64 | __tlb_flush_mm_lazy(tlb->mm); | 64 | __tlb_flush_mm_lazy(tlb->mm); |
65 | } | ||
66 | |||
67 | static inline void tlb_flush_mmu_free(struct mmu_gather *tlb) | ||
68 | { | ||
65 | tlb_table_flush(tlb); | 69 | tlb_table_flush(tlb); |
66 | } | 70 | } |
67 | 71 | ||
72 | |||
73 | static inline void tlb_flush_mmu(struct mmu_gather *tlb) | ||
74 | { | ||
75 | tlb_flush_mmu_tlbonly(tlb); | ||
76 | tlb_flush_mmu_free(tlb); | ||
77 | } | ||
78 | |||
68 | static inline void tlb_finish_mmu(struct mmu_gather *tlb, | 79 | static inline void tlb_finish_mmu(struct mmu_gather *tlb, |
69 | unsigned long start, unsigned long end) | 80 | unsigned long start, unsigned long end) |
70 | { | 81 | { |
diff --git a/arch/s390/include/uapi/asm/unistd.h b/arch/s390/include/uapi/asm/unistd.h index 5eb5c9ddb120..3802d2d3a18d 100644 --- a/arch/s390/include/uapi/asm/unistd.h +++ b/arch/s390/include/uapi/asm/unistd.h | |||
@@ -282,7 +282,8 @@ | |||
282 | #define __NR_finit_module 344 | 282 | #define __NR_finit_module 344 |
283 | #define __NR_sched_setattr 345 | 283 | #define __NR_sched_setattr 345 |
284 | #define __NR_sched_getattr 346 | 284 | #define __NR_sched_getattr 346 |
285 | #define NR_syscalls 345 | 285 | #define __NR_renameat2 347 |
286 | #define NR_syscalls 348 | ||
286 | 287 | ||
287 | /* | 288 | /* |
288 | * There are some system calls that are not present on 64 bit, some | 289 | * There are some system calls that are not present on 64 bit, some |
diff --git a/arch/s390/kernel/compat_wrapper.c b/arch/s390/kernel/compat_wrapper.c index 824c39dfddfc..45cdb37aa6f8 100644 --- a/arch/s390/kernel/compat_wrapper.c +++ b/arch/s390/kernel/compat_wrapper.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Compat sytem call wrappers. | 2 | * Compat system call wrappers. |
3 | * | 3 | * |
4 | * Copyright IBM Corp. 2014 | 4 | * Copyright IBM Corp. 2014 |
5 | */ | 5 | */ |
@@ -213,3 +213,4 @@ COMPAT_SYSCALL_WRAP5(kcmp, pid_t, pid1, pid_t, pid2, int, type, unsigned long, i | |||
213 | COMPAT_SYSCALL_WRAP3(finit_module, int, fd, const char __user *, uargs, int, flags); | 213 | COMPAT_SYSCALL_WRAP3(finit_module, int, fd, const char __user *, uargs, int, flags); |
214 | COMPAT_SYSCALL_WRAP3(sched_setattr, pid_t, pid, struct sched_attr __user *, attr, unsigned int, flags); | 214 | COMPAT_SYSCALL_WRAP3(sched_setattr, pid_t, pid, struct sched_attr __user *, attr, unsigned int, flags); |
215 | COMPAT_SYSCALL_WRAP4(sched_getattr, pid_t, pid, struct sched_attr __user *, attr, unsigned int, size, unsigned int, flags); | 215 | COMPAT_SYSCALL_WRAP4(sched_getattr, pid_t, pid, struct sched_attr __user *, attr, unsigned int, size, unsigned int, flags); |
216 | COMPAT_SYSCALL_WRAP5(renameat2, int, olddfd, const char __user *, oldname, int, newdfd, const char __user *, newname, unsigned int, flags); | ||
diff --git a/arch/s390/kernel/dumpstack.c b/arch/s390/kernel/dumpstack.c index e6af9406987c..acb412442e5e 100644 --- a/arch/s390/kernel/dumpstack.c +++ b/arch/s390/kernel/dumpstack.c | |||
@@ -144,10 +144,10 @@ void show_registers(struct pt_regs *regs) | |||
144 | char *mode; | 144 | char *mode; |
145 | 145 | ||
146 | mode = user_mode(regs) ? "User" : "Krnl"; | 146 | mode = user_mode(regs) ? "User" : "Krnl"; |
147 | printk("%s PSW : %p %p (%pSR)\n", | 147 | printk("%s PSW : %p %p", mode, (void *)regs->psw.mask, (void *)regs->psw.addr); |
148 | mode, (void *) regs->psw.mask, | 148 | if (!user_mode(regs)) |
149 | (void *) regs->psw.addr, | 149 | printk(" (%pSR)", (void *)regs->psw.addr); |
150 | (void *) regs->psw.addr); | 150 | printk("\n"); |
151 | printk(" R:%x T:%x IO:%x EX:%x Key:%x M:%x W:%x " | 151 | printk(" R:%x T:%x IO:%x EX:%x Key:%x M:%x W:%x " |
152 | "P:%x AS:%x CC:%x PM:%x", mask_bits(regs, PSW_MASK_PER), | 152 | "P:%x AS:%x CC:%x PM:%x", mask_bits(regs, PSW_MASK_PER), |
153 | mask_bits(regs, PSW_MASK_DAT), mask_bits(regs, PSW_MASK_IO), | 153 | mask_bits(regs, PSW_MASK_DAT), mask_bits(regs, PSW_MASK_IO), |
diff --git a/arch/s390/kernel/ptrace.c b/arch/s390/kernel/ptrace.c index 4ac8fafec95f..1c82619eb4f7 100644 --- a/arch/s390/kernel/ptrace.c +++ b/arch/s390/kernel/ptrace.c | |||
@@ -64,7 +64,7 @@ void update_cr_regs(struct task_struct *task) | |||
64 | if (task->thread.per_flags & PER_FLAG_NO_TE) | 64 | if (task->thread.per_flags & PER_FLAG_NO_TE) |
65 | cr_new &= ~(1UL << 55); | 65 | cr_new &= ~(1UL << 55); |
66 | if (cr_new != cr) | 66 | if (cr_new != cr) |
67 | __ctl_load(cr, 0, 0); | 67 | __ctl_load(cr_new, 0, 0); |
68 | /* Set or clear transaction execution TDC bits 62 and 63. */ | 68 | /* Set or clear transaction execution TDC bits 62 and 63. */ |
69 | __ctl_store(cr, 2, 2); | 69 | __ctl_store(cr, 2, 2); |
70 | cr_new = cr & ~3UL; | 70 | cr_new = cr & ~3UL; |
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c index f70f2489fa5f..88d1ca81e2dd 100644 --- a/arch/s390/kernel/setup.c +++ b/arch/s390/kernel/setup.c | |||
@@ -1027,3 +1027,35 @@ void __init setup_arch(char **cmdline_p) | |||
1027 | /* Setup zfcpdump support */ | 1027 | /* Setup zfcpdump support */ |
1028 | setup_zfcpdump(); | 1028 | setup_zfcpdump(); |
1029 | } | 1029 | } |
1030 | |||
1031 | #ifdef CONFIG_32BIT | ||
1032 | static int no_removal_warning __initdata; | ||
1033 | |||
1034 | static int __init parse_no_removal_warning(char *str) | ||
1035 | { | ||
1036 | no_removal_warning = 1; | ||
1037 | return 0; | ||
1038 | } | ||
1039 | __setup("no_removal_warning", parse_no_removal_warning); | ||
1040 | |||
1041 | static int __init removal_warning(void) | ||
1042 | { | ||
1043 | if (no_removal_warning) | ||
1044 | return 0; | ||
1045 | printk(KERN_ALERT "\n\n"); | ||
1046 | printk(KERN_CONT "Warning - you are using a 31 bit kernel!\n\n"); | ||
1047 | printk(KERN_CONT "We plan to remove 31 bit kernel support from the kernel sources in March 2015.\n"); | ||
1048 | printk(KERN_CONT "Currently we assume that nobody is using the 31 bit kernel on old 31 bit\n"); | ||
1049 | printk(KERN_CONT "hardware anymore. If you think that the code should not be removed and also\n"); | ||
1050 | printk(KERN_CONT "future versions of the Linux kernel should be able to run in 31 bit mode\n"); | ||
1051 | printk(KERN_CONT "please let us know. Please write to:\n"); | ||
1052 | printk(KERN_CONT "linux390@de.ibm.com (mail address) and/or\n"); | ||
1053 | printk(KERN_CONT "linux-s390@vger.kernel.org (mailing list).\n\n"); | ||
1054 | printk(KERN_CONT "Thank you!\n\n"); | ||
1055 | printk(KERN_CONT "If this kernel runs on a 64 bit machine you may consider using a 64 bit kernel.\n"); | ||
1056 | printk(KERN_CONT "This message can be disabled with the \"no_removal_warning\" kernel parameter.\n"); | ||
1057 | schedule_timeout_uninterruptible(300 * HZ); | ||
1058 | return 0; | ||
1059 | } | ||
1060 | early_initcall(removal_warning); | ||
1061 | #endif | ||
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index 512ce1cde2a4..86e65ec3422b 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c | |||
@@ -82,21 +82,6 @@ DEFINE_MUTEX(smp_cpu_state_mutex); | |||
82 | /* | 82 | /* |
83 | * Signal processor helper functions. | 83 | * Signal processor helper functions. |
84 | */ | 84 | */ |
85 | static inline int __pcpu_sigp(u16 addr, u8 order, u32 parm, u32 *status) | ||
86 | { | ||
87 | register unsigned int reg1 asm ("1") = parm; | ||
88 | int cc; | ||
89 | |||
90 | asm volatile( | ||
91 | " sigp %1,%2,0(%3)\n" | ||
92 | " ipm %0\n" | ||
93 | " srl %0,28\n" | ||
94 | : "=d" (cc), "+d" (reg1) : "d" (addr), "a" (order) : "cc"); | ||
95 | if (status && cc == 1) | ||
96 | *status = reg1; | ||
97 | return cc; | ||
98 | } | ||
99 | |||
100 | static inline int __pcpu_sigp_relax(u16 addr, u8 order, u32 parm, u32 *status) | 85 | static inline int __pcpu_sigp_relax(u16 addr, u8 order, u32 parm, u32 *status) |
101 | { | 86 | { |
102 | int cc; | 87 | int cc; |
diff --git a/arch/s390/kernel/syscalls.S b/arch/s390/kernel/syscalls.S index 542ef488bac1..fe5cdf29a001 100644 --- a/arch/s390/kernel/syscalls.S +++ b/arch/s390/kernel/syscalls.S | |||
@@ -355,3 +355,4 @@ SYSCALL(sys_kcmp,sys_kcmp,compat_sys_kcmp) | |||
355 | SYSCALL(sys_finit_module,sys_finit_module,compat_sys_finit_module) | 355 | SYSCALL(sys_finit_module,sys_finit_module,compat_sys_finit_module) |
356 | SYSCALL(sys_sched_setattr,sys_sched_setattr,compat_sys_sched_setattr) /* 345 */ | 356 | SYSCALL(sys_sched_setattr,sys_sched_setattr,compat_sys_sched_setattr) /* 345 */ |
357 | SYSCALL(sys_sched_getattr,sys_sched_getattr,compat_sys_sched_getattr) | 357 | SYSCALL(sys_sched_getattr,sys_sched_getattr,compat_sys_sched_getattr) |
358 | SYSCALL(sys_renameat2,sys_renameat2,compat_sys_renameat2) | ||
diff --git a/arch/s390/lib/uaccess.c b/arch/s390/lib/uaccess.c index 23f866b4c7f1..7416efe8eae4 100644 --- a/arch/s390/lib/uaccess.c +++ b/arch/s390/lib/uaccess.c | |||
@@ -338,9 +338,6 @@ static inline unsigned long strnlen_user_srst(const char __user *src, | |||
338 | register unsigned long reg0 asm("0") = 0; | 338 | register unsigned long reg0 asm("0") = 0; |
339 | unsigned long tmp1, tmp2; | 339 | unsigned long tmp1, tmp2; |
340 | 340 | ||
341 | if (unlikely(!size)) | ||
342 | return 0; | ||
343 | update_primary_asce(current); | ||
344 | asm volatile( | 341 | asm volatile( |
345 | " la %2,0(%1)\n" | 342 | " la %2,0(%1)\n" |
346 | " la %3,0(%0,%1)\n" | 343 | " la %3,0(%0,%1)\n" |
@@ -359,6 +356,8 @@ static inline unsigned long strnlen_user_srst(const char __user *src, | |||
359 | 356 | ||
360 | unsigned long __strnlen_user(const char __user *src, unsigned long size) | 357 | unsigned long __strnlen_user(const char __user *src, unsigned long size) |
361 | { | 358 | { |
359 | if (unlikely(!size)) | ||
360 | return 0; | ||
362 | update_primary_asce(current); | 361 | update_primary_asce(current); |
363 | return strnlen_user_srst(src, size); | 362 | return strnlen_user_srst(src, size); |
364 | } | 363 | } |
diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c index 19f623f1f21c..2f51a998a67e 100644 --- a/arch/s390/mm/fault.c +++ b/arch/s390/mm/fault.c | |||
@@ -126,6 +126,133 @@ static inline int user_space_fault(struct pt_regs *regs) | |||
126 | return 0; | 126 | return 0; |
127 | } | 127 | } |
128 | 128 | ||
129 | static int bad_address(void *p) | ||
130 | { | ||
131 | unsigned long dummy; | ||
132 | |||
133 | return probe_kernel_address((unsigned long *)p, dummy); | ||
134 | } | ||
135 | |||
136 | #ifdef CONFIG_64BIT | ||
137 | static void dump_pagetable(unsigned long asce, unsigned long address) | ||
138 | { | ||
139 | unsigned long *table = __va(asce & PAGE_MASK); | ||
140 | |||
141 | pr_alert("AS:%016lx ", asce); | ||
142 | switch (asce & _ASCE_TYPE_MASK) { | ||
143 | case _ASCE_TYPE_REGION1: | ||
144 | table = table + ((address >> 53) & 0x7ff); | ||
145 | if (bad_address(table)) | ||
146 | goto bad; | ||
147 | pr_cont("R1:%016lx ", *table); | ||
148 | if (*table & _REGION_ENTRY_INVALID) | ||
149 | goto out; | ||
150 | table = (unsigned long *)(*table & _REGION_ENTRY_ORIGIN); | ||
151 | /* fallthrough */ | ||
152 | case _ASCE_TYPE_REGION2: | ||
153 | table = table + ((address >> 42) & 0x7ff); | ||
154 | if (bad_address(table)) | ||
155 | goto bad; | ||
156 | pr_cont("R2:%016lx ", *table); | ||
157 | if (*table & _REGION_ENTRY_INVALID) | ||
158 | goto out; | ||
159 | table = (unsigned long *)(*table & _REGION_ENTRY_ORIGIN); | ||
160 | /* fallthrough */ | ||
161 | case _ASCE_TYPE_REGION3: | ||
162 | table = table + ((address >> 31) & 0x7ff); | ||
163 | if (bad_address(table)) | ||
164 | goto bad; | ||
165 | pr_cont("R3:%016lx ", *table); | ||
166 | if (*table & (_REGION_ENTRY_INVALID | _REGION3_ENTRY_LARGE)) | ||
167 | goto out; | ||
168 | table = (unsigned long *)(*table & _REGION_ENTRY_ORIGIN); | ||
169 | /* fallthrough */ | ||
170 | case _ASCE_TYPE_SEGMENT: | ||
171 | table = table + ((address >> 20) & 0x7ff); | ||
172 | if (bad_address(table)) | ||
173 | goto bad; | ||
174 | pr_cont(KERN_CONT "S:%016lx ", *table); | ||
175 | if (*table & (_SEGMENT_ENTRY_INVALID | _SEGMENT_ENTRY_LARGE)) | ||
176 | goto out; | ||
177 | table = (unsigned long *)(*table & _SEGMENT_ENTRY_ORIGIN); | ||
178 | } | ||
179 | table = table + ((address >> 12) & 0xff); | ||
180 | if (bad_address(table)) | ||
181 | goto bad; | ||
182 | pr_cont("P:%016lx ", *table); | ||
183 | out: | ||
184 | pr_cont("\n"); | ||
185 | return; | ||
186 | bad: | ||
187 | pr_cont("BAD\n"); | ||
188 | } | ||
189 | |||
190 | #else /* CONFIG_64BIT */ | ||
191 | |||
192 | static void dump_pagetable(unsigned long asce, unsigned long address) | ||
193 | { | ||
194 | unsigned long *table = __va(asce & PAGE_MASK); | ||
195 | |||
196 | pr_alert("AS:%08lx ", asce); | ||
197 | table = table + ((address >> 20) & 0x7ff); | ||
198 | if (bad_address(table)) | ||
199 | goto bad; | ||
200 | pr_cont("S:%08lx ", *table); | ||
201 | if (*table & _SEGMENT_ENTRY_INVALID) | ||
202 | goto out; | ||
203 | table = (unsigned long *)(*table & _SEGMENT_ENTRY_ORIGIN); | ||
204 | table = table + ((address >> 12) & 0xff); | ||
205 | if (bad_address(table)) | ||
206 | goto bad; | ||
207 | pr_cont("P:%08lx ", *table); | ||
208 | out: | ||
209 | pr_cont("\n"); | ||
210 | return; | ||
211 | bad: | ||
212 | pr_cont("BAD\n"); | ||
213 | } | ||
214 | |||
215 | #endif /* CONFIG_64BIT */ | ||
216 | |||
217 | static void dump_fault_info(struct pt_regs *regs) | ||
218 | { | ||
219 | unsigned long asce; | ||
220 | |||
221 | pr_alert("Fault in "); | ||
222 | switch (regs->int_parm_long & 3) { | ||
223 | case 3: | ||
224 | pr_cont("home space "); | ||
225 | break; | ||
226 | case 2: | ||
227 | pr_cont("secondary space "); | ||
228 | break; | ||
229 | case 1: | ||
230 | pr_cont("access register "); | ||
231 | break; | ||
232 | case 0: | ||
233 | pr_cont("primary space "); | ||
234 | break; | ||
235 | } | ||
236 | pr_cont("mode while using "); | ||
237 | if (!user_space_fault(regs)) { | ||
238 | asce = S390_lowcore.kernel_asce; | ||
239 | pr_cont("kernel "); | ||
240 | } | ||
241 | #ifdef CONFIG_PGSTE | ||
242 | else if ((current->flags & PF_VCPU) && S390_lowcore.gmap) { | ||
243 | struct gmap *gmap = (struct gmap *)S390_lowcore.gmap; | ||
244 | asce = gmap->asce; | ||
245 | pr_cont("gmap "); | ||
246 | } | ||
247 | #endif | ||
248 | else { | ||
249 | asce = S390_lowcore.user_asce; | ||
250 | pr_cont("user "); | ||
251 | } | ||
252 | pr_cont("ASCE.\n"); | ||
253 | dump_pagetable(asce, regs->int_parm_long & __FAIL_ADDR_MASK); | ||
254 | } | ||
255 | |||
129 | static inline void report_user_fault(struct pt_regs *regs, long signr) | 256 | static inline void report_user_fault(struct pt_regs *regs, long signr) |
130 | { | 257 | { |
131 | if ((task_pid_nr(current) > 1) && !show_unhandled_signals) | 258 | if ((task_pid_nr(current) > 1) && !show_unhandled_signals) |
@@ -138,8 +265,9 @@ static inline void report_user_fault(struct pt_regs *regs, long signr) | |||
138 | regs->int_code); | 265 | regs->int_code); |
139 | print_vma_addr(KERN_CONT "in ", regs->psw.addr & PSW_ADDR_INSN); | 266 | print_vma_addr(KERN_CONT "in ", regs->psw.addr & PSW_ADDR_INSN); |
140 | printk(KERN_CONT "\n"); | 267 | printk(KERN_CONT "\n"); |
141 | printk(KERN_ALERT "failing address: %lX\n", | 268 | printk(KERN_ALERT "failing address: %016lx TEID: %016lx\n", |
142 | regs->int_parm_long & __FAIL_ADDR_MASK); | 269 | regs->int_parm_long & __FAIL_ADDR_MASK, regs->int_parm_long); |
270 | dump_fault_info(regs); | ||
143 | show_regs(regs); | 271 | show_regs(regs); |
144 | } | 272 | } |
145 | 273 | ||
@@ -177,11 +305,13 @@ static noinline void do_no_context(struct pt_regs *regs) | |||
177 | address = regs->int_parm_long & __FAIL_ADDR_MASK; | 305 | address = regs->int_parm_long & __FAIL_ADDR_MASK; |
178 | if (!user_space_fault(regs)) | 306 | if (!user_space_fault(regs)) |
179 | printk(KERN_ALERT "Unable to handle kernel pointer dereference" | 307 | printk(KERN_ALERT "Unable to handle kernel pointer dereference" |
180 | " at virtual kernel address %p\n", (void *)address); | 308 | " in virtual kernel address space\n"); |
181 | else | 309 | else |
182 | printk(KERN_ALERT "Unable to handle kernel paging request" | 310 | printk(KERN_ALERT "Unable to handle kernel paging request" |
183 | " at virtual user address %p\n", (void *)address); | 311 | " in virtual user address space\n"); |
184 | 312 | printk(KERN_ALERT "failing address: %016lx TEID: %016lx\n", | |
313 | regs->int_parm_long & __FAIL_ADDR_MASK, regs->int_parm_long); | ||
314 | dump_fault_info(regs); | ||
185 | die(regs, "Oops"); | 315 | die(regs, "Oops"); |
186 | do_exit(SIGKILL); | 316 | do_exit(SIGKILL); |
187 | } | 317 | } |
diff --git a/arch/s390/net/bpf_jit_comp.c b/arch/s390/net/bpf_jit_comp.c index 9c36dc398f90..452d3ebd9d0f 100644 --- a/arch/s390/net/bpf_jit_comp.c +++ b/arch/s390/net/bpf_jit_comp.c | |||
@@ -276,7 +276,6 @@ static void bpf_jit_noleaks(struct bpf_jit *jit, struct sock_filter *filter) | |||
276 | case BPF_S_LD_W_IND: | 276 | case BPF_S_LD_W_IND: |
277 | case BPF_S_LD_H_IND: | 277 | case BPF_S_LD_H_IND: |
278 | case BPF_S_LD_B_IND: | 278 | case BPF_S_LD_B_IND: |
279 | case BPF_S_LDX_B_MSH: | ||
280 | case BPF_S_LD_IMM: | 279 | case BPF_S_LD_IMM: |
281 | case BPF_S_LD_MEM: | 280 | case BPF_S_LD_MEM: |
282 | case BPF_S_MISC_TXA: | 281 | case BPF_S_MISC_TXA: |
diff --git a/arch/sh/include/asm/tlb.h b/arch/sh/include/asm/tlb.h index 362192ed12fe..62f80d2a9df9 100644 --- a/arch/sh/include/asm/tlb.h +++ b/arch/sh/include/asm/tlb.h | |||
@@ -86,6 +86,14 @@ tlb_end_vma(struct mmu_gather *tlb, struct vm_area_struct *vma) | |||
86 | } | 86 | } |
87 | } | 87 | } |
88 | 88 | ||
89 | static inline void tlb_flush_mmu_tlbonly(struct mmu_gather *tlb) | ||
90 | { | ||
91 | } | ||
92 | |||
93 | static inline void tlb_flush_mmu_free(struct mmu_gather *tlb) | ||
94 | { | ||
95 | } | ||
96 | |||
89 | static inline void tlb_flush_mmu(struct mmu_gather *tlb) | 97 | static inline void tlb_flush_mmu(struct mmu_gather *tlb) |
90 | { | 98 | { |
91 | } | 99 | } |
diff --git a/arch/um/include/asm/tlb.h b/arch/um/include/asm/tlb.h index 29b0301c18aa..16eb63fac57d 100644 --- a/arch/um/include/asm/tlb.h +++ b/arch/um/include/asm/tlb.h | |||
@@ -59,13 +59,25 @@ extern void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start, | |||
59 | unsigned long end); | 59 | unsigned long end); |
60 | 60 | ||
61 | static inline void | 61 | static inline void |
62 | tlb_flush_mmu_tlbonly(struct mmu_gather *tlb) | ||
63 | { | ||
64 | flush_tlb_mm_range(tlb->mm, tlb->start, tlb->end); | ||
65 | } | ||
66 | |||
67 | static inline void | ||
68 | tlb_flush_mmu_free(struct mmu_gather *tlb) | ||
69 | { | ||
70 | init_tlb_gather(tlb); | ||
71 | } | ||
72 | |||
73 | static inline void | ||
62 | tlb_flush_mmu(struct mmu_gather *tlb) | 74 | tlb_flush_mmu(struct mmu_gather *tlb) |
63 | { | 75 | { |
64 | if (!tlb->need_flush) | 76 | if (!tlb->need_flush) |
65 | return; | 77 | return; |
66 | 78 | ||
67 | flush_tlb_mm_range(tlb->mm, tlb->start, tlb->end); | 79 | tlb_flush_mmu_tlbonly(tlb); |
68 | init_tlb_gather(tlb); | 80 | tlb_flush_mmu_free(tlb); |
69 | } | 81 | } |
70 | 82 | ||
71 | /* tlb_finish_mmu | 83 | /* tlb_finish_mmu |
diff --git a/arch/um/include/shared/os.h b/arch/um/include/shared/os.h index 75298d3358e7..08eec0b691b0 100644 --- a/arch/um/include/shared/os.h +++ b/arch/um/include/shared/os.h | |||
@@ -136,6 +136,7 @@ extern int os_ioctl_generic(int fd, unsigned int cmd, unsigned long arg); | |||
136 | extern int os_get_ifname(int fd, char *namebuf); | 136 | extern int os_get_ifname(int fd, char *namebuf); |
137 | extern int os_set_slip(int fd); | 137 | extern int os_set_slip(int fd); |
138 | extern int os_mode_fd(int fd, int mode); | 138 | extern int os_mode_fd(int fd, int mode); |
139 | extern int os_fsync_file(int fd); | ||
139 | 140 | ||
140 | extern int os_seek_file(int fd, unsigned long long offset); | 141 | extern int os_seek_file(int fd, unsigned long long offset); |
141 | extern int os_open_file(const char *file, struct openflags flags, int mode); | 142 | extern int os_open_file(const char *file, struct openflags flags, int mode); |
diff --git a/arch/um/kernel/physmem.c b/arch/um/kernel/physmem.c index f116db15d402..30fdd5d0067b 100644 --- a/arch/um/kernel/physmem.c +++ b/arch/um/kernel/physmem.c | |||
@@ -103,6 +103,7 @@ void __init setup_physmem(unsigned long start, unsigned long reserve_end, | |||
103 | */ | 103 | */ |
104 | os_seek_file(physmem_fd, __pa(&__syscall_stub_start)); | 104 | os_seek_file(physmem_fd, __pa(&__syscall_stub_start)); |
105 | os_write_file(physmem_fd, &__syscall_stub_start, PAGE_SIZE); | 105 | os_write_file(physmem_fd, &__syscall_stub_start, PAGE_SIZE); |
106 | os_fsync_file(physmem_fd); | ||
106 | 107 | ||
107 | bootmap_size = init_bootmem(pfn, pfn + delta); | 108 | bootmap_size = init_bootmem(pfn, pfn + delta); |
108 | free_bootmem(__pa(reserve_end) + bootmap_size, | 109 | free_bootmem(__pa(reserve_end) + bootmap_size, |
diff --git a/arch/um/os-Linux/file.c b/arch/um/os-Linux/file.c index 07a750197bb0..08d90fba952c 100644 --- a/arch/um/os-Linux/file.c +++ b/arch/um/os-Linux/file.c | |||
@@ -237,6 +237,12 @@ void os_close_file(int fd) | |||
237 | { | 237 | { |
238 | close(fd); | 238 | close(fd); |
239 | } | 239 | } |
240 | int os_fsync_file(int fd) | ||
241 | { | ||
242 | if (fsync(fd) < 0) | ||
243 | return -errno; | ||
244 | return 0; | ||
245 | } | ||
240 | 246 | ||
241 | int os_seek_file(int fd, unsigned long long offset) | 247 | int os_seek_file(int fd, unsigned long long offset) |
242 | { | 248 | { |
diff --git a/arch/um/os-Linux/main.c b/arch/um/os-Linux/main.c index e1704ff600ff..df9191acd926 100644 --- a/arch/um/os-Linux/main.c +++ b/arch/um/os-Linux/main.c | |||
@@ -151,6 +151,7 @@ int __init main(int argc, char **argv, char **envp) | |||
151 | #endif | 151 | #endif |
152 | 152 | ||
153 | do_uml_initcalls(); | 153 | do_uml_initcalls(); |
154 | change_sig(SIGPIPE, 0); | ||
154 | ret = linux_main(argc, argv); | 155 | ret = linux_main(argc, argv); |
155 | 156 | ||
156 | /* | 157 | /* |
diff --git a/arch/um/os-Linux/mem.c b/arch/um/os-Linux/mem.c index 3c4af77e51a2..897e9ad0c108 100644 --- a/arch/um/os-Linux/mem.c +++ b/arch/um/os-Linux/mem.c | |||
@@ -12,337 +12,117 @@ | |||
12 | #include <string.h> | 12 | #include <string.h> |
13 | #include <sys/stat.h> | 13 | #include <sys/stat.h> |
14 | #include <sys/mman.h> | 14 | #include <sys/mman.h> |
15 | #include <sys/param.h> | 15 | #include <sys/vfs.h> |
16 | #include <linux/magic.h> | ||
16 | #include <init.h> | 17 | #include <init.h> |
17 | #include <os.h> | 18 | #include <os.h> |
18 | 19 | ||
19 | /* Modified by which_tmpdir, which is called during early boot */ | 20 | /* Set by make_tempfile() during early boot. */ |
20 | static char *default_tmpdir = "/tmp"; | ||
21 | |||
22 | /* | ||
23 | * Modified when creating the physical memory file and when checking | ||
24 | * the tmp filesystem for usability, both happening during early boot. | ||
25 | */ | ||
26 | static char *tempdir = NULL; | 21 | static char *tempdir = NULL; |
27 | 22 | ||
28 | static void __init find_tempdir(void) | 23 | /* Check if dir is on tmpfs. Return 0 if yes, -1 if no or error. */ |
24 | static int __init check_tmpfs(const char *dir) | ||
29 | { | 25 | { |
30 | const char *dirs[] = { "TMP", "TEMP", "TMPDIR", NULL }; | 26 | struct statfs st; |
31 | int i; | ||
32 | char *dir = NULL; | ||
33 | |||
34 | if (tempdir != NULL) | ||
35 | /* We've already been called */ | ||
36 | return; | ||
37 | for (i = 0; dirs[i]; i++) { | ||
38 | dir = getenv(dirs[i]); | ||
39 | if ((dir != NULL) && (*dir != '\0')) | ||
40 | break; | ||
41 | } | ||
42 | if ((dir == NULL) || (*dir == '\0')) | ||
43 | dir = default_tmpdir; | ||
44 | 27 | ||
45 | tempdir = malloc(strlen(dir) + 2); | 28 | printf("Checking if %s is on tmpfs...", dir); |
46 | if (tempdir == NULL) { | 29 | if (statfs(dir, &st) < 0) { |
47 | fprintf(stderr, "Failed to malloc tempdir, " | 30 | printf("%s\n", strerror(errno)); |
48 | "errno = %d\n", errno); | 31 | } else if (st.f_type != TMPFS_MAGIC) { |
49 | return; | 32 | printf("no\n"); |
50 | } | 33 | } else { |
51 | strcpy(tempdir, dir); | 34 | printf("OK\n"); |
52 | strcat(tempdir, "/"); | 35 | return 0; |
53 | } | ||
54 | |||
55 | /* | ||
56 | * Remove bytes from the front of the buffer and refill it so that if there's a | ||
57 | * partial string that we care about, it will be completed, and we can recognize | ||
58 | * it. | ||
59 | */ | ||
60 | static int pop(int fd, char *buf, size_t size, size_t npop) | ||
61 | { | ||
62 | ssize_t n; | ||
63 | size_t len = strlen(&buf[npop]); | ||
64 | |||
65 | memmove(buf, &buf[npop], len + 1); | ||
66 | n = read(fd, &buf[len], size - len - 1); | ||
67 | if (n < 0) | ||
68 | return -errno; | ||
69 | |||
70 | buf[len + n] = '\0'; | ||
71 | return 1; | ||
72 | } | ||
73 | |||
74 | /* | ||
75 | * This will return 1, with the first character in buf being the | ||
76 | * character following the next instance of c in the file. This will | ||
77 | * read the file as needed. If there's an error, -errno is returned; | ||
78 | * if the end of the file is reached, 0 is returned. | ||
79 | */ | ||
80 | static int next(int fd, char *buf, size_t size, char c) | ||
81 | { | ||
82 | ssize_t n; | ||
83 | char *ptr; | ||
84 | |||
85 | while ((ptr = strchr(buf, c)) == NULL) { | ||
86 | n = read(fd, buf, size - 1); | ||
87 | if (n == 0) | ||
88 | return 0; | ||
89 | else if (n < 0) | ||
90 | return -errno; | ||
91 | |||
92 | buf[n] = '\0'; | ||
93 | } | 36 | } |
94 | 37 | return -1; | |
95 | return pop(fd, buf, size, ptr - buf + 1); | ||
96 | } | 38 | } |
97 | 39 | ||
98 | /* | 40 | /* |
99 | * Decode an octal-escaped and space-terminated path of the form used by | 41 | * Choose the tempdir to use. We want something on tmpfs so that our memory is |
100 | * /proc/mounts. May be used to decode a path in-place. "out" must be at least | 42 | * not subject to the host's vm.dirty_ratio. If a tempdir is specified in the |
101 | * as large as the input. The output is always null-terminated. "len" gets the | 43 | * environment, we use that even if it's not on tmpfs, but we warn the user. |
102 | * length of the output, excluding the trailing null. Returns 0 if a full path | 44 | * Otherwise, we try common tmpfs locations, and if no tmpfs directory is found |
103 | * was successfully decoded, otherwise an error. | 45 | * then we fall back to /tmp. |
104 | */ | 46 | */ |
105 | static int decode_path(const char *in, char *out, size_t *len) | 47 | static char * __init choose_tempdir(void) |
106 | { | 48 | { |
107 | char *first = out; | 49 | static const char * const vars[] = { |
108 | int c; | 50 | "TMPDIR", |
51 | "TMP", | ||
52 | "TEMP", | ||
53 | NULL | ||
54 | }; | ||
55 | static const char fallback_dir[] = "/tmp"; | ||
56 | static const char * const tmpfs_dirs[] = { | ||
57 | "/dev/shm", | ||
58 | fallback_dir, | ||
59 | NULL | ||
60 | }; | ||
109 | int i; | 61 | int i; |
110 | int ret = -EINVAL; | 62 | const char *dir; |
111 | while (1) { | 63 | |
112 | switch (*in) { | 64 | printf("Checking environment variables for a tempdir..."); |
113 | case '\0': | 65 | for (i = 0; vars[i]; i++) { |
114 | goto out; | 66 | dir = getenv(vars[i]); |
115 | 67 | if ((dir != NULL) && (*dir != '\0')) { | |
116 | case ' ': | 68 | printf("%s\n", dir); |
117 | ret = 0; | 69 | if (check_tmpfs(dir) >= 0) |
118 | goto out; | 70 | goto done; |
119 | 71 | else | |
120 | case '\\': | 72 | goto warn; |
121 | in++; | ||
122 | c = 0; | ||
123 | for (i = 0; i < 3; i++) { | ||
124 | if (*in < '0' || *in > '7') | ||
125 | goto out; | ||
126 | c = (c << 3) | (*in++ - '0'); | ||
127 | } | ||
128 | *(unsigned char *)out++ = (unsigned char) c; | ||
129 | break; | ||
130 | |||
131 | default: | ||
132 | *out++ = *in++; | ||
133 | break; | ||
134 | } | 73 | } |
135 | } | 74 | } |
75 | printf("none found\n"); | ||
136 | 76 | ||
137 | out: | 77 | for (i = 0; tmpfs_dirs[i]; i++) { |
138 | *out = '\0'; | 78 | dir = tmpfs_dirs[i]; |
139 | *len = out - first; | 79 | if (check_tmpfs(dir) >= 0) |
140 | return ret; | 80 | goto done; |
141 | } | ||
142 | |||
143 | /* | ||
144 | * Computes the length of s when encoded with three-digit octal escape sequences | ||
145 | * for the characters in chars. | ||
146 | */ | ||
147 | static size_t octal_encoded_length(const char *s, const char *chars) | ||
148 | { | ||
149 | size_t len = strlen(s); | ||
150 | while ((s = strpbrk(s, chars)) != NULL) { | ||
151 | len += 3; | ||
152 | s++; | ||
153 | } | ||
154 | |||
155 | return len; | ||
156 | } | ||
157 | |||
158 | enum { | ||
159 | OUTCOME_NOTHING_MOUNTED, | ||
160 | OUTCOME_TMPFS_MOUNT, | ||
161 | OUTCOME_NON_TMPFS_MOUNT, | ||
162 | }; | ||
163 | |||
164 | /* Read a line of /proc/mounts data looking for a tmpfs mount at "path". */ | ||
165 | static int read_mount(int fd, char *buf, size_t bufsize, const char *path, | ||
166 | int *outcome) | ||
167 | { | ||
168 | int found; | ||
169 | int match; | ||
170 | char *space; | ||
171 | size_t len; | ||
172 | |||
173 | enum { | ||
174 | MATCH_NONE, | ||
175 | MATCH_EXACT, | ||
176 | MATCH_PARENT, | ||
177 | }; | ||
178 | |||
179 | found = next(fd, buf, bufsize, ' '); | ||
180 | if (found != 1) | ||
181 | return found; | ||
182 | |||
183 | /* | ||
184 | * If there's no following space in the buffer, then this path is | ||
185 | * truncated, so it can't be the one we're looking for. | ||
186 | */ | ||
187 | space = strchr(buf, ' '); | ||
188 | if (space) { | ||
189 | match = MATCH_NONE; | ||
190 | if (!decode_path(buf, buf, &len)) { | ||
191 | if (!strcmp(buf, path)) | ||
192 | match = MATCH_EXACT; | ||
193 | else if (!strncmp(buf, path, len) | ||
194 | && (path[len] == '/' || !strcmp(buf, "/"))) | ||
195 | match = MATCH_PARENT; | ||
196 | } | ||
197 | |||
198 | found = pop(fd, buf, bufsize, space - buf + 1); | ||
199 | if (found != 1) | ||
200 | return found; | ||
201 | |||
202 | switch (match) { | ||
203 | case MATCH_EXACT: | ||
204 | if (!strncmp(buf, "tmpfs", strlen("tmpfs"))) | ||
205 | *outcome = OUTCOME_TMPFS_MOUNT; | ||
206 | else | ||
207 | *outcome = OUTCOME_NON_TMPFS_MOUNT; | ||
208 | break; | ||
209 | |||
210 | case MATCH_PARENT: | ||
211 | /* This mount obscures any previous ones. */ | ||
212 | *outcome = OUTCOME_NOTHING_MOUNTED; | ||
213 | break; | ||
214 | } | ||
215 | } | 81 | } |
216 | 82 | ||
217 | return next(fd, buf, bufsize, '\n'); | 83 | dir = fallback_dir; |
84 | warn: | ||
85 | printf("Warning: tempdir %s is not on tmpfs\n", dir); | ||
86 | done: | ||
87 | /* Make a copy since getenv results may not remain valid forever. */ | ||
88 | return strdup(dir); | ||
218 | } | 89 | } |
219 | 90 | ||
220 | /* which_tmpdir is called only during early boot */ | ||
221 | static int checked_tmpdir = 0; | ||
222 | |||
223 | /* | 91 | /* |
224 | * Look for a tmpfs mounted at /dev/shm. I couldn't find a cleaner | 92 | * Create an unlinked tempfile in a suitable tempdir. template must be the |
225 | * way to do this than to parse /proc/mounts. statfs will return the | 93 | * basename part of the template with a leading '/'. |
226 | * same filesystem magic number and fs id for both /dev and /dev/shm | ||
227 | * when they are both tmpfs, so you can't tell if they are different | ||
228 | * filesystems. Also, there seems to be no other way of finding the | ||
229 | * mount point of a filesystem from within it. | ||
230 | * | ||
231 | * If a /dev/shm tmpfs entry is found, then we switch to using it. | ||
232 | * Otherwise, we stay with the default /tmp. | ||
233 | */ | 94 | */ |
234 | static void which_tmpdir(void) | 95 | static int __init make_tempfile(const char *template) |
235 | { | 96 | { |
97 | char *tempname; | ||
236 | int fd; | 98 | int fd; |
237 | int found; | ||
238 | int outcome; | ||
239 | char *path; | ||
240 | char *buf; | ||
241 | size_t bufsize; | ||
242 | 99 | ||
243 | if (checked_tmpdir) | 100 | if (tempdir == NULL) { |
244 | return; | 101 | tempdir = choose_tempdir(); |
245 | 102 | if (tempdir == NULL) { | |
246 | checked_tmpdir = 1; | 103 | fprintf(stderr, "Failed to choose tempdir: %s\n", |
247 | 104 | strerror(errno)); | |
248 | printf("Checking for tmpfs mount on /dev/shm..."); | 105 | return -1; |
249 | |||
250 | path = realpath("/dev/shm", NULL); | ||
251 | if (!path) { | ||
252 | printf("failed to check real path, errno = %d\n", errno); | ||
253 | return; | ||
254 | } | ||
255 | printf("%s...", path); | ||
256 | |||
257 | /* | ||
258 | * The buffer needs to be able to fit the full octal-escaped path, a | ||
259 | * space, and a trailing null in order to successfully decode it. | ||
260 | */ | ||
261 | bufsize = octal_encoded_length(path, " \t\n\\") + 2; | ||
262 | |||
263 | if (bufsize < 128) | ||
264 | bufsize = 128; | ||
265 | |||
266 | buf = malloc(bufsize); | ||
267 | if (!buf) { | ||
268 | printf("malloc failed, errno = %d\n", errno); | ||
269 | goto out; | ||
270 | } | ||
271 | buf[0] = '\0'; | ||
272 | |||
273 | fd = open("/proc/mounts", O_RDONLY); | ||
274 | if (fd < 0) { | ||
275 | printf("failed to open /proc/mounts, errno = %d\n", errno); | ||
276 | goto out1; | ||
277 | } | ||
278 | |||
279 | outcome = OUTCOME_NOTHING_MOUNTED; | ||
280 | while (1) { | ||
281 | found = read_mount(fd, buf, bufsize, path, &outcome); | ||
282 | if (found != 1) | ||
283 | break; | ||
284 | } | ||
285 | |||
286 | if (found < 0) { | ||
287 | printf("read returned errno %d\n", -found); | ||
288 | } else { | ||
289 | switch (outcome) { | ||
290 | case OUTCOME_TMPFS_MOUNT: | ||
291 | printf("OK\n"); | ||
292 | default_tmpdir = "/dev/shm"; | ||
293 | break; | ||
294 | |||
295 | case OUTCOME_NON_TMPFS_MOUNT: | ||
296 | printf("not tmpfs\n"); | ||
297 | break; | ||
298 | |||
299 | default: | ||
300 | printf("nothing mounted on /dev/shm\n"); | ||
301 | break; | ||
302 | } | 106 | } |
303 | } | 107 | } |
304 | 108 | ||
305 | close(fd); | 109 | tempname = malloc(strlen(tempdir) + strlen(template) + 1); |
306 | out1: | ||
307 | free(buf); | ||
308 | out: | ||
309 | free(path); | ||
310 | } | ||
311 | |||
312 | static int __init make_tempfile(const char *template, char **out_tempname, | ||
313 | int do_unlink) | ||
314 | { | ||
315 | char *tempname; | ||
316 | int fd; | ||
317 | |||
318 | which_tmpdir(); | ||
319 | tempname = malloc(MAXPATHLEN); | ||
320 | if (tempname == NULL) | 110 | if (tempname == NULL) |
321 | return -1; | 111 | return -1; |
322 | 112 | ||
323 | find_tempdir(); | 113 | strcpy(tempname, tempdir); |
324 | if ((tempdir == NULL) || (strlen(tempdir) >= MAXPATHLEN)) | 114 | strcat(tempname, template); |
325 | goto out; | ||
326 | |||
327 | if (template[0] != '/') | ||
328 | strcpy(tempname, tempdir); | ||
329 | else | ||
330 | tempname[0] = '\0'; | ||
331 | strncat(tempname, template, MAXPATHLEN-1-strlen(tempname)); | ||
332 | fd = mkstemp(tempname); | 115 | fd = mkstemp(tempname); |
333 | if (fd < 0) { | 116 | if (fd < 0) { |
334 | fprintf(stderr, "open - cannot create %s: %s\n", tempname, | 117 | fprintf(stderr, "open - cannot create %s: %s\n", tempname, |
335 | strerror(errno)); | 118 | strerror(errno)); |
336 | goto out; | 119 | goto out; |
337 | } | 120 | } |
338 | if (do_unlink && (unlink(tempname) < 0)) { | 121 | if (unlink(tempname) < 0) { |
339 | perror("unlink"); | 122 | perror("unlink"); |
340 | goto close; | 123 | goto close; |
341 | } | 124 | } |
342 | if (out_tempname) { | 125 | free(tempname); |
343 | *out_tempname = tempname; | ||
344 | } else | ||
345 | free(tempname); | ||
346 | return fd; | 126 | return fd; |
347 | close: | 127 | close: |
348 | close(fd); | 128 | close(fd); |
@@ -351,14 +131,14 @@ out: | |||
351 | return -1; | 131 | return -1; |
352 | } | 132 | } |
353 | 133 | ||
354 | #define TEMPNAME_TEMPLATE "vm_file-XXXXXX" | 134 | #define TEMPNAME_TEMPLATE "/vm_file-XXXXXX" |
355 | 135 | ||
356 | static int __init create_tmp_file(unsigned long long len) | 136 | static int __init create_tmp_file(unsigned long long len) |
357 | { | 137 | { |
358 | int fd, err; | 138 | int fd, err; |
359 | char zero; | 139 | char zero; |
360 | 140 | ||
361 | fd = make_tempfile(TEMPNAME_TEMPLATE, NULL, 1); | 141 | fd = make_tempfile(TEMPNAME_TEMPLATE); |
362 | if (fd < 0) | 142 | if (fd < 0) |
363 | exit(1); | 143 | exit(1); |
364 | 144 | ||
@@ -402,7 +182,6 @@ int __init create_mem_file(unsigned long long len) | |||
402 | return fd; | 182 | return fd; |
403 | } | 183 | } |
404 | 184 | ||
405 | |||
406 | void __init check_tmpexec(void) | 185 | void __init check_tmpexec(void) |
407 | { | 186 | { |
408 | void *addr; | 187 | void *addr; |
@@ -410,14 +189,13 @@ void __init check_tmpexec(void) | |||
410 | 189 | ||
411 | addr = mmap(NULL, UM_KERN_PAGE_SIZE, | 190 | addr = mmap(NULL, UM_KERN_PAGE_SIZE, |
412 | PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE, fd, 0); | 191 | PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE, fd, 0); |
413 | printf("Checking PROT_EXEC mmap in %s...",tempdir); | 192 | printf("Checking PROT_EXEC mmap in %s...", tempdir); |
414 | fflush(stdout); | ||
415 | if (addr == MAP_FAILED) { | 193 | if (addr == MAP_FAILED) { |
416 | err = errno; | 194 | err = errno; |
417 | perror("failed"); | 195 | printf("%s\n", strerror(err)); |
418 | close(fd); | 196 | close(fd); |
419 | if (err == EPERM) | 197 | if (err == EPERM) |
420 | printf("%s must be not mounted noexec\n",tempdir); | 198 | printf("%s must be not mounted noexec\n", tempdir); |
421 | exit(1); | 199 | exit(1); |
422 | } | 200 | } |
423 | printf("OK\n"); | 201 | printf("OK\n"); |
diff --git a/arch/x86/Makefile b/arch/x86/Makefile index 602f57e590b5..ce6ad7e6a7d7 100644 --- a/arch/x86/Makefile +++ b/arch/x86/Makefile | |||
@@ -83,7 +83,9 @@ else | |||
83 | KBUILD_CFLAGS += -m64 | 83 | KBUILD_CFLAGS += -m64 |
84 | 84 | ||
85 | # Don't autogenerate traditional x87, MMX or SSE instructions | 85 | # Don't autogenerate traditional x87, MMX or SSE instructions |
86 | KBUILD_CFLAGS += -mno-mmx -mno-sse -mno-80387 -mno-fp-ret-in-387 | 86 | KBUILD_CFLAGS += -mno-mmx -mno-sse |
87 | KBUILD_CFLAGS += $(call cc-option,-mno-80387) | ||
88 | KBUILD_CFLAGS += $(call cc-option,-mno-fp-ret-in-387) | ||
87 | 89 | ||
88 | # Use -mpreferred-stack-boundary=3 if supported. | 90 | # Use -mpreferred-stack-boundary=3 if supported. |
89 | KBUILD_CFLAGS += $(call cc-option,-mpreferred-stack-boundary=3) | 91 | KBUILD_CFLAGS += $(call cc-option,-mpreferred-stack-boundary=3) |
@@ -250,8 +252,8 @@ archclean: | |||
250 | PHONY += kvmconfig | 252 | PHONY += kvmconfig |
251 | kvmconfig: | 253 | kvmconfig: |
252 | $(if $(wildcard $(objtree)/.config),, $(error You need an existing .config for this target)) | 254 | $(if $(wildcard $(objtree)/.config),, $(error You need an existing .config for this target)) |
253 | $(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m -O $(objtree) $(objtree)/.config arch/x86/configs/kvm_guest.config | 255 | $(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m -O $(objtree) $(objtree)/.config $(srctree)/arch/x86/configs/kvm_guest.config |
254 | $(Q)yes "" | $(MAKE) oldconfig | 256 | $(Q)yes "" | $(MAKE) -f $(srctree)/Makefile oldconfig |
255 | 257 | ||
256 | define archhelp | 258 | define archhelp |
257 | echo '* bzImage - Compressed kernel image (arch/x86/boot/bzImage)' | 259 | echo '* bzImage - Compressed kernel image (arch/x86/boot/bzImage)' |
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index fcaf9c961265..7de069afb382 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h | |||
@@ -60,7 +60,7 @@ | |||
60 | | X86_CR4_PSE | X86_CR4_PAE | X86_CR4_MCE \ | 60 | | X86_CR4_PSE | X86_CR4_PAE | X86_CR4_MCE \ |
61 | | X86_CR4_PGE | X86_CR4_PCE | X86_CR4_OSFXSR | X86_CR4_PCIDE \ | 61 | | X86_CR4_PGE | X86_CR4_PCE | X86_CR4_OSFXSR | X86_CR4_PCIDE \ |
62 | | X86_CR4_OSXSAVE | X86_CR4_SMEP | X86_CR4_FSGSBASE \ | 62 | | X86_CR4_OSXSAVE | X86_CR4_SMEP | X86_CR4_FSGSBASE \ |
63 | | X86_CR4_OSXMMEXCPT | X86_CR4_VMXE)) | 63 | | X86_CR4_OSXMMEXCPT | X86_CR4_VMXE | X86_CR4_SMAP)) |
64 | 64 | ||
65 | #define CR8_RESERVED_BITS (~(unsigned long)X86_CR8_TPR) | 65 | #define CR8_RESERVED_BITS (~(unsigned long)X86_CR8_TPR) |
66 | 66 | ||
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c index 6ad4658de705..d23aa82e7a7b 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c | |||
@@ -3425,6 +3425,11 @@ int get_nr_irqs_gsi(void) | |||
3425 | return nr_irqs_gsi; | 3425 | return nr_irqs_gsi; |
3426 | } | 3426 | } |
3427 | 3427 | ||
3428 | unsigned int arch_dynirq_lower_bound(unsigned int from) | ||
3429 | { | ||
3430 | return from < nr_irqs_gsi ? nr_irqs_gsi : from; | ||
3431 | } | ||
3432 | |||
3428 | int __init arch_probe_nr_irqs(void) | 3433 | int __init arch_probe_nr_irqs(void) |
3429 | { | 3434 | { |
3430 | int nr; | 3435 | int nr; |
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c index eeee23ff75ef..68317c80de7f 100644 --- a/arch/x86/kernel/cpu/mcheck/mce.c +++ b/arch/x86/kernel/cpu/mcheck/mce.c | |||
@@ -598,7 +598,6 @@ void machine_check_poll(enum mcp_flags flags, mce_banks_t *b) | |||
598 | { | 598 | { |
599 | struct mce m; | 599 | struct mce m; |
600 | int i; | 600 | int i; |
601 | unsigned long *v; | ||
602 | 601 | ||
603 | this_cpu_inc(mce_poll_count); | 602 | this_cpu_inc(mce_poll_count); |
604 | 603 | ||
@@ -618,8 +617,7 @@ void machine_check_poll(enum mcp_flags flags, mce_banks_t *b) | |||
618 | if (!(m.status & MCI_STATUS_VAL)) | 617 | if (!(m.status & MCI_STATUS_VAL)) |
619 | continue; | 618 | continue; |
620 | 619 | ||
621 | v = &get_cpu_var(mce_polled_error); | 620 | this_cpu_write(mce_polled_error, 1); |
622 | set_bit(0, v); | ||
623 | /* | 621 | /* |
624 | * Uncorrected or signalled events are handled by the exception | 622 | * Uncorrected or signalled events are handled by the exception |
625 | * handler when it is enabled, so don't process those here. | 623 | * handler when it is enabled, so don't process those here. |
diff --git a/arch/x86/kernel/cpu/mcheck/mce_intel.c b/arch/x86/kernel/cpu/mcheck/mce_intel.c index 3bdb95ae8c43..9a316b21df8b 100644 --- a/arch/x86/kernel/cpu/mcheck/mce_intel.c +++ b/arch/x86/kernel/cpu/mcheck/mce_intel.c | |||
@@ -42,7 +42,7 @@ static DEFINE_PER_CPU(mce_banks_t, mce_banks_owned); | |||
42 | * cmci_discover_lock protects against parallel discovery attempts | 42 | * cmci_discover_lock protects against parallel discovery attempts |
43 | * which could race against each other. | 43 | * which could race against each other. |
44 | */ | 44 | */ |
45 | static DEFINE_RAW_SPINLOCK(cmci_discover_lock); | 45 | static DEFINE_SPINLOCK(cmci_discover_lock); |
46 | 46 | ||
47 | #define CMCI_THRESHOLD 1 | 47 | #define CMCI_THRESHOLD 1 |
48 | #define CMCI_POLL_INTERVAL (30 * HZ) | 48 | #define CMCI_POLL_INTERVAL (30 * HZ) |
@@ -144,14 +144,14 @@ static void cmci_storm_disable_banks(void) | |||
144 | int bank; | 144 | int bank; |
145 | u64 val; | 145 | u64 val; |
146 | 146 | ||
147 | raw_spin_lock_irqsave(&cmci_discover_lock, flags); | 147 | spin_lock_irqsave(&cmci_discover_lock, flags); |
148 | owned = __get_cpu_var(mce_banks_owned); | 148 | owned = __get_cpu_var(mce_banks_owned); |
149 | for_each_set_bit(bank, owned, MAX_NR_BANKS) { | 149 | for_each_set_bit(bank, owned, MAX_NR_BANKS) { |
150 | rdmsrl(MSR_IA32_MCx_CTL2(bank), val); | 150 | rdmsrl(MSR_IA32_MCx_CTL2(bank), val); |
151 | val &= ~MCI_CTL2_CMCI_EN; | 151 | val &= ~MCI_CTL2_CMCI_EN; |
152 | wrmsrl(MSR_IA32_MCx_CTL2(bank), val); | 152 | wrmsrl(MSR_IA32_MCx_CTL2(bank), val); |
153 | } | 153 | } |
154 | raw_spin_unlock_irqrestore(&cmci_discover_lock, flags); | 154 | spin_unlock_irqrestore(&cmci_discover_lock, flags); |
155 | } | 155 | } |
156 | 156 | ||
157 | static bool cmci_storm_detect(void) | 157 | static bool cmci_storm_detect(void) |
@@ -211,7 +211,7 @@ static void cmci_discover(int banks) | |||
211 | int i; | 211 | int i; |
212 | int bios_wrong_thresh = 0; | 212 | int bios_wrong_thresh = 0; |
213 | 213 | ||
214 | raw_spin_lock_irqsave(&cmci_discover_lock, flags); | 214 | spin_lock_irqsave(&cmci_discover_lock, flags); |
215 | for (i = 0; i < banks; i++) { | 215 | for (i = 0; i < banks; i++) { |
216 | u64 val; | 216 | u64 val; |
217 | int bios_zero_thresh = 0; | 217 | int bios_zero_thresh = 0; |
@@ -266,7 +266,7 @@ static void cmci_discover(int banks) | |||
266 | WARN_ON(!test_bit(i, __get_cpu_var(mce_poll_banks))); | 266 | WARN_ON(!test_bit(i, __get_cpu_var(mce_poll_banks))); |
267 | } | 267 | } |
268 | } | 268 | } |
269 | raw_spin_unlock_irqrestore(&cmci_discover_lock, flags); | 269 | spin_unlock_irqrestore(&cmci_discover_lock, flags); |
270 | if (mca_cfg.bios_cmci_threshold && bios_wrong_thresh) { | 270 | if (mca_cfg.bios_cmci_threshold && bios_wrong_thresh) { |
271 | pr_info_once( | 271 | pr_info_once( |
272 | "bios_cmci_threshold: Some banks do not have valid thresholds set\n"); | 272 | "bios_cmci_threshold: Some banks do not have valid thresholds set\n"); |
@@ -316,10 +316,10 @@ void cmci_clear(void) | |||
316 | 316 | ||
317 | if (!cmci_supported(&banks)) | 317 | if (!cmci_supported(&banks)) |
318 | return; | 318 | return; |
319 | raw_spin_lock_irqsave(&cmci_discover_lock, flags); | 319 | spin_lock_irqsave(&cmci_discover_lock, flags); |
320 | for (i = 0; i < banks; i++) | 320 | for (i = 0; i < banks; i++) |
321 | __cmci_disable_bank(i); | 321 | __cmci_disable_bank(i); |
322 | raw_spin_unlock_irqrestore(&cmci_discover_lock, flags); | 322 | spin_unlock_irqrestore(&cmci_discover_lock, flags); |
323 | } | 323 | } |
324 | 324 | ||
325 | static void cmci_rediscover_work_func(void *arg) | 325 | static void cmci_rediscover_work_func(void *arg) |
@@ -360,9 +360,9 @@ void cmci_disable_bank(int bank) | |||
360 | if (!cmci_supported(&banks)) | 360 | if (!cmci_supported(&banks)) |
361 | return; | 361 | return; |
362 | 362 | ||
363 | raw_spin_lock_irqsave(&cmci_discover_lock, flags); | 363 | spin_lock_irqsave(&cmci_discover_lock, flags); |
364 | __cmci_disable_bank(bank); | 364 | __cmci_disable_bank(bank); |
365 | raw_spin_unlock_irqrestore(&cmci_discover_lock, flags); | 365 | spin_unlock_irqrestore(&cmci_discover_lock, flags); |
366 | } | 366 | } |
367 | 367 | ||
368 | static void intel_init_cmci(void) | 368 | static void intel_init_cmci(void) |
diff --git a/arch/x86/kernel/cpu/perf_event_intel_rapl.c b/arch/x86/kernel/cpu/perf_event_intel_rapl.c index 059218ed5208..619f7699487a 100644 --- a/arch/x86/kernel/cpu/perf_event_intel_rapl.c +++ b/arch/x86/kernel/cpu/perf_event_intel_rapl.c | |||
@@ -59,7 +59,7 @@ | |||
59 | #define INTEL_RAPL_PKG 0x2 /* pseudo-encoding */ | 59 | #define INTEL_RAPL_PKG 0x2 /* pseudo-encoding */ |
60 | #define RAPL_IDX_RAM_NRG_STAT 2 /* DRAM */ | 60 | #define RAPL_IDX_RAM_NRG_STAT 2 /* DRAM */ |
61 | #define INTEL_RAPL_RAM 0x3 /* pseudo-encoding */ | 61 | #define INTEL_RAPL_RAM 0x3 /* pseudo-encoding */ |
62 | #define RAPL_IDX_PP1_NRG_STAT 3 /* DRAM */ | 62 | #define RAPL_IDX_PP1_NRG_STAT 3 /* gpu */ |
63 | #define INTEL_RAPL_PP1 0x4 /* pseudo-encoding */ | 63 | #define INTEL_RAPL_PP1 0x4 /* pseudo-encoding */ |
64 | 64 | ||
65 | /* Clients have PP0, PKG */ | 65 | /* Clients have PP0, PKG */ |
@@ -72,6 +72,12 @@ | |||
72 | 1<<RAPL_IDX_PKG_NRG_STAT|\ | 72 | 1<<RAPL_IDX_PKG_NRG_STAT|\ |
73 | 1<<RAPL_IDX_RAM_NRG_STAT) | 73 | 1<<RAPL_IDX_RAM_NRG_STAT) |
74 | 74 | ||
75 | /* Servers have PP0, PKG, RAM, PP1 */ | ||
76 | #define RAPL_IDX_HSW (1<<RAPL_IDX_PP0_NRG_STAT|\ | ||
77 | 1<<RAPL_IDX_PKG_NRG_STAT|\ | ||
78 | 1<<RAPL_IDX_RAM_NRG_STAT|\ | ||
79 | 1<<RAPL_IDX_PP1_NRG_STAT) | ||
80 | |||
75 | /* | 81 | /* |
76 | * event code: LSB 8 bits, passed in attr->config | 82 | * event code: LSB 8 bits, passed in attr->config |
77 | * any other bit is reserved | 83 | * any other bit is reserved |
@@ -425,6 +431,24 @@ static struct attribute *rapl_events_cln_attr[] = { | |||
425 | NULL, | 431 | NULL, |
426 | }; | 432 | }; |
427 | 433 | ||
434 | static struct attribute *rapl_events_hsw_attr[] = { | ||
435 | EVENT_PTR(rapl_cores), | ||
436 | EVENT_PTR(rapl_pkg), | ||
437 | EVENT_PTR(rapl_gpu), | ||
438 | EVENT_PTR(rapl_ram), | ||
439 | |||
440 | EVENT_PTR(rapl_cores_unit), | ||
441 | EVENT_PTR(rapl_pkg_unit), | ||
442 | EVENT_PTR(rapl_gpu_unit), | ||
443 | EVENT_PTR(rapl_ram_unit), | ||
444 | |||
445 | EVENT_PTR(rapl_cores_scale), | ||
446 | EVENT_PTR(rapl_pkg_scale), | ||
447 | EVENT_PTR(rapl_gpu_scale), | ||
448 | EVENT_PTR(rapl_ram_scale), | ||
449 | NULL, | ||
450 | }; | ||
451 | |||
428 | static struct attribute_group rapl_pmu_events_group = { | 452 | static struct attribute_group rapl_pmu_events_group = { |
429 | .name = "events", | 453 | .name = "events", |
430 | .attrs = NULL, /* patched at runtime */ | 454 | .attrs = NULL, /* patched at runtime */ |
@@ -511,6 +535,7 @@ static int rapl_cpu_prepare(int cpu) | |||
511 | struct rapl_pmu *pmu = per_cpu(rapl_pmu, cpu); | 535 | struct rapl_pmu *pmu = per_cpu(rapl_pmu, cpu); |
512 | int phys_id = topology_physical_package_id(cpu); | 536 | int phys_id = topology_physical_package_id(cpu); |
513 | u64 ms; | 537 | u64 ms; |
538 | u64 msr_rapl_power_unit_bits; | ||
514 | 539 | ||
515 | if (pmu) | 540 | if (pmu) |
516 | return 0; | 541 | return 0; |
@@ -518,6 +543,10 @@ static int rapl_cpu_prepare(int cpu) | |||
518 | if (phys_id < 0) | 543 | if (phys_id < 0) |
519 | return -1; | 544 | return -1; |
520 | 545 | ||
546 | /* protect rdmsrl() to handle virtualization */ | ||
547 | if (rdmsrl_safe(MSR_RAPL_POWER_UNIT, &msr_rapl_power_unit_bits)) | ||
548 | return -1; | ||
549 | |||
521 | pmu = kzalloc_node(sizeof(*pmu), GFP_KERNEL, cpu_to_node(cpu)); | 550 | pmu = kzalloc_node(sizeof(*pmu), GFP_KERNEL, cpu_to_node(cpu)); |
522 | if (!pmu) | 551 | if (!pmu) |
523 | return -1; | 552 | return -1; |
@@ -531,8 +560,7 @@ static int rapl_cpu_prepare(int cpu) | |||
531 | * | 560 | * |
532 | * we cache in local PMU instance | 561 | * we cache in local PMU instance |
533 | */ | 562 | */ |
534 | rdmsrl(MSR_RAPL_POWER_UNIT, pmu->hw_unit); | 563 | pmu->hw_unit = (msr_rapl_power_unit_bits >> 8) & 0x1FULL; |
535 | pmu->hw_unit = (pmu->hw_unit >> 8) & 0x1FULL; | ||
536 | pmu->pmu = &rapl_pmu_class; | 564 | pmu->pmu = &rapl_pmu_class; |
537 | 565 | ||
538 | /* | 566 | /* |
@@ -631,11 +659,14 @@ static int __init rapl_pmu_init(void) | |||
631 | switch (boot_cpu_data.x86_model) { | 659 | switch (boot_cpu_data.x86_model) { |
632 | case 42: /* Sandy Bridge */ | 660 | case 42: /* Sandy Bridge */ |
633 | case 58: /* Ivy Bridge */ | 661 | case 58: /* Ivy Bridge */ |
634 | case 60: /* Haswell */ | ||
635 | case 69: /* Haswell-Celeron */ | ||
636 | rapl_cntr_mask = RAPL_IDX_CLN; | 662 | rapl_cntr_mask = RAPL_IDX_CLN; |
637 | rapl_pmu_events_group.attrs = rapl_events_cln_attr; | 663 | rapl_pmu_events_group.attrs = rapl_events_cln_attr; |
638 | break; | 664 | break; |
665 | case 60: /* Haswell */ | ||
666 | case 69: /* Haswell-Celeron */ | ||
667 | rapl_cntr_mask = RAPL_IDX_HSW; | ||
668 | rapl_pmu_events_group.attrs = rapl_events_hsw_attr; | ||
669 | break; | ||
639 | case 45: /* Sandy Bridge-EP */ | 670 | case 45: /* Sandy Bridge-EP */ |
640 | case 62: /* IvyTown */ | 671 | case 62: /* IvyTown */ |
641 | rapl_cntr_mask = RAPL_IDX_SRV; | 672 | rapl_cntr_mask = RAPL_IDX_SRV; |
@@ -650,7 +681,9 @@ static int __init rapl_pmu_init(void) | |||
650 | cpu_notifier_register_begin(); | 681 | cpu_notifier_register_begin(); |
651 | 682 | ||
652 | for_each_online_cpu(cpu) { | 683 | for_each_online_cpu(cpu) { |
653 | rapl_cpu_prepare(cpu); | 684 | ret = rapl_cpu_prepare(cpu); |
685 | if (ret) | ||
686 | goto out; | ||
654 | rapl_cpu_init(cpu); | 687 | rapl_cpu_init(cpu); |
655 | } | 688 | } |
656 | 689 | ||
@@ -673,6 +706,7 @@ static int __init rapl_pmu_init(void) | |||
673 | hweight32(rapl_cntr_mask), | 706 | hweight32(rapl_cntr_mask), |
674 | ktime_to_ms(pmu->timer_interval)); | 707 | ktime_to_ms(pmu->timer_interval)); |
675 | 708 | ||
709 | out: | ||
676 | cpu_notifier_register_done(); | 710 | cpu_notifier_register_done(); |
677 | 711 | ||
678 | return 0; | 712 | return 0; |
diff --git a/arch/x86/kernel/early-quirks.c b/arch/x86/kernel/early-quirks.c index b0cc3809723d..6e2537c32190 100644 --- a/arch/x86/kernel/early-quirks.c +++ b/arch/x86/kernel/early-quirks.c | |||
@@ -240,7 +240,7 @@ static u32 __init intel_stolen_base(int num, int slot, int func, size_t stolen_s | |||
240 | return base; | 240 | return base; |
241 | } | 241 | } |
242 | 242 | ||
243 | #define KB(x) ((x) * 1024) | 243 | #define KB(x) ((x) * 1024UL) |
244 | #define MB(x) (KB (KB (x))) | 244 | #define MB(x) (KB (KB (x))) |
245 | #define GB(x) (MB (KB (x))) | 245 | #define GB(x) (MB (KB (x))) |
246 | 246 | ||
diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c index 79a3f9682871..61b17dc2c277 100644 --- a/arch/x86/kernel/kprobes/core.c +++ b/arch/x86/kernel/kprobes/core.c | |||
@@ -897,9 +897,10 @@ int __kprobes kprobe_fault_handler(struct pt_regs *regs, int trapnr) | |||
897 | struct kprobe *cur = kprobe_running(); | 897 | struct kprobe *cur = kprobe_running(); |
898 | struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); | 898 | struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); |
899 | 899 | ||
900 | switch (kcb->kprobe_status) { | 900 | if (unlikely(regs->ip == (unsigned long)cur->ainsn.insn)) { |
901 | case KPROBE_HIT_SS: | 901 | /* This must happen on single-stepping */ |
902 | case KPROBE_REENTER: | 902 | WARN_ON(kcb->kprobe_status != KPROBE_HIT_SS && |
903 | kcb->kprobe_status != KPROBE_REENTER); | ||
903 | /* | 904 | /* |
904 | * We are here because the instruction being single | 905 | * We are here because the instruction being single |
905 | * stepped caused a page fault. We reset the current | 906 | * stepped caused a page fault. We reset the current |
@@ -914,9 +915,8 @@ int __kprobes kprobe_fault_handler(struct pt_regs *regs, int trapnr) | |||
914 | else | 915 | else |
915 | reset_current_kprobe(); | 916 | reset_current_kprobe(); |
916 | preempt_enable_no_resched(); | 917 | preempt_enable_no_resched(); |
917 | break; | 918 | } else if (kcb->kprobe_status == KPROBE_HIT_ACTIVE || |
918 | case KPROBE_HIT_ACTIVE: | 919 | kcb->kprobe_status == KPROBE_HIT_SSDONE) { |
919 | case KPROBE_HIT_SSDONE: | ||
920 | /* | 920 | /* |
921 | * We increment the nmissed count for accounting, | 921 | * We increment the nmissed count for accounting, |
922 | * we can also use npre/npostfault count for accounting | 922 | * we can also use npre/npostfault count for accounting |
@@ -945,10 +945,8 @@ int __kprobes kprobe_fault_handler(struct pt_regs *regs, int trapnr) | |||
945 | * fixup routine could not handle it, | 945 | * fixup routine could not handle it, |
946 | * Let do_page_fault() fix it. | 946 | * Let do_page_fault() fix it. |
947 | */ | 947 | */ |
948 | break; | ||
949 | default: | ||
950 | break; | ||
951 | } | 948 | } |
949 | |||
952 | return 0; | 950 | return 0; |
953 | } | 951 | } |
954 | 952 | ||
diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c index 654b46574b91..3399d3a99730 100644 --- a/arch/x86/kernel/reboot.c +++ b/arch/x86/kernel/reboot.c | |||
@@ -114,8 +114,8 @@ EXPORT_SYMBOL(machine_real_restart); | |||
114 | */ | 114 | */ |
115 | static int __init set_pci_reboot(const struct dmi_system_id *d) | 115 | static int __init set_pci_reboot(const struct dmi_system_id *d) |
116 | { | 116 | { |
117 | if (reboot_type != BOOT_CF9) { | 117 | if (reboot_type != BOOT_CF9_FORCE) { |
118 | reboot_type = BOOT_CF9; | 118 | reboot_type = BOOT_CF9_FORCE; |
119 | pr_info("%s series board detected. Selecting %s-method for reboots.\n", | 119 | pr_info("%s series board detected. Selecting %s-method for reboots.\n", |
120 | d->ident, "PCI"); | 120 | d->ident, "PCI"); |
121 | } | 121 | } |
@@ -458,20 +458,23 @@ void __attribute__((weak)) mach_reboot_fixups(void) | |||
458 | } | 458 | } |
459 | 459 | ||
460 | /* | 460 | /* |
461 | * Windows compatible x86 hardware expects the following on reboot: | 461 | * To the best of our knowledge Windows compatible x86 hardware expects |
462 | * the following on reboot: | ||
462 | * | 463 | * |
463 | * 1) If the FADT has the ACPI reboot register flag set, try it | 464 | * 1) If the FADT has the ACPI reboot register flag set, try it |
464 | * 2) If still alive, write to the keyboard controller | 465 | * 2) If still alive, write to the keyboard controller |
465 | * 3) If still alive, write to the ACPI reboot register again | 466 | * 3) If still alive, write to the ACPI reboot register again |
466 | * 4) If still alive, write to the keyboard controller again | 467 | * 4) If still alive, write to the keyboard controller again |
467 | * 5) If still alive, call the EFI runtime service to reboot | 468 | * 5) If still alive, call the EFI runtime service to reboot |
468 | * 6) If still alive, write to the PCI IO port 0xCF9 to reboot | 469 | * 6) If no EFI runtime service, call the BIOS to do a reboot |
469 | * 7) If still alive, inform BIOS to do a proper reboot | ||
470 | * | 470 | * |
471 | * If the machine is still alive at this stage, it gives up. We default to | 471 | * We default to following the same pattern. We also have |
472 | * following the same pattern, except that if we're still alive after (7) we'll | 472 | * two other reboot methods: 'triple fault' and 'PCI', which |
473 | * try to force a triple fault and then cycle between hitting the keyboard | 473 | * can be triggered via the reboot= kernel boot option or |
474 | * controller and doing that | 474 | * via quirks. |
475 | * | ||
476 | * This means that this function can never return, it can misbehave | ||
477 | * by not rebooting properly and hanging. | ||
475 | */ | 478 | */ |
476 | static void native_machine_emergency_restart(void) | 479 | static void native_machine_emergency_restart(void) |
477 | { | 480 | { |
@@ -492,6 +495,11 @@ static void native_machine_emergency_restart(void) | |||
492 | for (;;) { | 495 | for (;;) { |
493 | /* Could also try the reset bit in the Hammer NB */ | 496 | /* Could also try the reset bit in the Hammer NB */ |
494 | switch (reboot_type) { | 497 | switch (reboot_type) { |
498 | case BOOT_ACPI: | ||
499 | acpi_reboot(); | ||
500 | reboot_type = BOOT_KBD; | ||
501 | break; | ||
502 | |||
495 | case BOOT_KBD: | 503 | case BOOT_KBD: |
496 | mach_reboot_fixups(); /* For board specific fixups */ | 504 | mach_reboot_fixups(); /* For board specific fixups */ |
497 | 505 | ||
@@ -509,43 +517,29 @@ static void native_machine_emergency_restart(void) | |||
509 | } | 517 | } |
510 | break; | 518 | break; |
511 | 519 | ||
512 | case BOOT_TRIPLE: | ||
513 | load_idt(&no_idt); | ||
514 | __asm__ __volatile__("int3"); | ||
515 | |||
516 | /* We're probably dead after this, but... */ | ||
517 | reboot_type = BOOT_KBD; | ||
518 | break; | ||
519 | |||
520 | case BOOT_BIOS: | ||
521 | machine_real_restart(MRR_BIOS); | ||
522 | |||
523 | /* We're probably dead after this, but... */ | ||
524 | reboot_type = BOOT_TRIPLE; | ||
525 | break; | ||
526 | |||
527 | case BOOT_ACPI: | ||
528 | acpi_reboot(); | ||
529 | reboot_type = BOOT_KBD; | ||
530 | break; | ||
531 | |||
532 | case BOOT_EFI: | 520 | case BOOT_EFI: |
533 | if (efi_enabled(EFI_RUNTIME_SERVICES)) | 521 | if (efi_enabled(EFI_RUNTIME_SERVICES)) |
534 | efi.reset_system(reboot_mode == REBOOT_WARM ? | 522 | efi.reset_system(reboot_mode == REBOOT_WARM ? |
535 | EFI_RESET_WARM : | 523 | EFI_RESET_WARM : |
536 | EFI_RESET_COLD, | 524 | EFI_RESET_COLD, |
537 | EFI_SUCCESS, 0, NULL); | 525 | EFI_SUCCESS, 0, NULL); |
538 | reboot_type = BOOT_CF9_COND; | 526 | reboot_type = BOOT_BIOS; |
527 | break; | ||
528 | |||
529 | case BOOT_BIOS: | ||
530 | machine_real_restart(MRR_BIOS); | ||
531 | |||
532 | /* We're probably dead after this, but... */ | ||
533 | reboot_type = BOOT_CF9_SAFE; | ||
539 | break; | 534 | break; |
540 | 535 | ||
541 | case BOOT_CF9: | 536 | case BOOT_CF9_FORCE: |
542 | port_cf9_safe = true; | 537 | port_cf9_safe = true; |
543 | /* Fall through */ | 538 | /* Fall through */ |
544 | 539 | ||
545 | case BOOT_CF9_COND: | 540 | case BOOT_CF9_SAFE: |
546 | if (port_cf9_safe) { | 541 | if (port_cf9_safe) { |
547 | u8 reboot_code = reboot_mode == REBOOT_WARM ? | 542 | u8 reboot_code = reboot_mode == REBOOT_WARM ? 0x06 : 0x0E; |
548 | 0x06 : 0x0E; | ||
549 | u8 cf9 = inb(0xcf9) & ~reboot_code; | 543 | u8 cf9 = inb(0xcf9) & ~reboot_code; |
550 | outb(cf9|2, 0xcf9); /* Request hard reset */ | 544 | outb(cf9|2, 0xcf9); /* Request hard reset */ |
551 | udelay(50); | 545 | udelay(50); |
@@ -553,7 +547,15 @@ static void native_machine_emergency_restart(void) | |||
553 | outb(cf9|reboot_code, 0xcf9); | 547 | outb(cf9|reboot_code, 0xcf9); |
554 | udelay(50); | 548 | udelay(50); |
555 | } | 549 | } |
556 | reboot_type = BOOT_BIOS; | 550 | reboot_type = BOOT_TRIPLE; |
551 | break; | ||
552 | |||
553 | case BOOT_TRIPLE: | ||
554 | load_idt(&no_idt); | ||
555 | __asm__ __volatile__("int3"); | ||
556 | |||
557 | /* We're probably dead after this, but... */ | ||
558 | reboot_type = BOOT_KBD; | ||
557 | break; | 559 | break; |
558 | } | 560 | } |
559 | } | 561 | } |
diff --git a/arch/x86/kernel/vsmp_64.c b/arch/x86/kernel/vsmp_64.c index f6584a90aba3..5edc34b5b951 100644 --- a/arch/x86/kernel/vsmp_64.c +++ b/arch/x86/kernel/vsmp_64.c | |||
@@ -26,6 +26,9 @@ | |||
26 | 26 | ||
27 | #define TOPOLOGY_REGISTER_OFFSET 0x10 | 27 | #define TOPOLOGY_REGISTER_OFFSET 0x10 |
28 | 28 | ||
29 | /* Flag below is initialized once during vSMP PCI initialization. */ | ||
30 | static int irq_routing_comply = 1; | ||
31 | |||
29 | #if defined CONFIG_PCI && defined CONFIG_PARAVIRT | 32 | #if defined CONFIG_PCI && defined CONFIG_PARAVIRT |
30 | /* | 33 | /* |
31 | * Interrupt control on vSMPowered systems: | 34 | * Interrupt control on vSMPowered systems: |
@@ -101,6 +104,10 @@ static void __init set_vsmp_pv_ops(void) | |||
101 | #ifdef CONFIG_SMP | 104 | #ifdef CONFIG_SMP |
102 | if (cap & ctl & BIT(8)) { | 105 | if (cap & ctl & BIT(8)) { |
103 | ctl &= ~BIT(8); | 106 | ctl &= ~BIT(8); |
107 | |||
108 | /* Interrupt routing set to ignore */ | ||
109 | irq_routing_comply = 0; | ||
110 | |||
104 | #ifdef CONFIG_PROC_FS | 111 | #ifdef CONFIG_PROC_FS |
105 | /* Don't let users change irq affinity via procfs */ | 112 | /* Don't let users change irq affinity via procfs */ |
106 | no_irq_affinity = 1; | 113 | no_irq_affinity = 1; |
@@ -218,7 +225,9 @@ static void vsmp_apic_post_init(void) | |||
218 | { | 225 | { |
219 | /* need to update phys_pkg_id */ | 226 | /* need to update phys_pkg_id */ |
220 | apic->phys_pkg_id = apicid_phys_pkg_id; | 227 | apic->phys_pkg_id = apicid_phys_pkg_id; |
221 | apic->vector_allocation_domain = fill_vector_allocation_domain; | 228 | |
229 | if (!irq_routing_comply) | ||
230 | apic->vector_allocation_domain = fill_vector_allocation_domain; | ||
222 | } | 231 | } |
223 | 232 | ||
224 | void __init vsmp_init(void) | 233 | void __init vsmp_init(void) |
diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c index bea60671ef8a..f47a104a749c 100644 --- a/arch/x86/kvm/cpuid.c +++ b/arch/x86/kvm/cpuid.c | |||
@@ -308,7 +308,7 @@ static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function, | |||
308 | const u32 kvm_supported_word9_x86_features = | 308 | const u32 kvm_supported_word9_x86_features = |
309 | F(FSGSBASE) | F(BMI1) | F(HLE) | F(AVX2) | F(SMEP) | | 309 | F(FSGSBASE) | F(BMI1) | F(HLE) | F(AVX2) | F(SMEP) | |
310 | F(BMI2) | F(ERMS) | f_invpcid | F(RTM) | f_mpx | F(RDSEED) | | 310 | F(BMI2) | F(ERMS) | f_invpcid | F(RTM) | f_mpx | F(RDSEED) | |
311 | F(ADX); | 311 | F(ADX) | F(SMAP); |
312 | 312 | ||
313 | /* all calls to cpuid_count() should be made on the same cpu */ | 313 | /* all calls to cpuid_count() should be made on the same cpu */ |
314 | get_cpu(); | 314 | get_cpu(); |
diff --git a/arch/x86/kvm/cpuid.h b/arch/x86/kvm/cpuid.h index a2a1bb7ed8c1..eeecbed26ac7 100644 --- a/arch/x86/kvm/cpuid.h +++ b/arch/x86/kvm/cpuid.h | |||
@@ -48,6 +48,14 @@ static inline bool guest_cpuid_has_smep(struct kvm_vcpu *vcpu) | |||
48 | return best && (best->ebx & bit(X86_FEATURE_SMEP)); | 48 | return best && (best->ebx & bit(X86_FEATURE_SMEP)); |
49 | } | 49 | } |
50 | 50 | ||
51 | static inline bool guest_cpuid_has_smap(struct kvm_vcpu *vcpu) | ||
52 | { | ||
53 | struct kvm_cpuid_entry2 *best; | ||
54 | |||
55 | best = kvm_find_cpuid_entry(vcpu, 7, 0); | ||
56 | return best && (best->ebx & bit(X86_FEATURE_SMAP)); | ||
57 | } | ||
58 | |||
51 | static inline bool guest_cpuid_has_fsgsbase(struct kvm_vcpu *vcpu) | 59 | static inline bool guest_cpuid_has_fsgsbase(struct kvm_vcpu *vcpu) |
52 | { | 60 | { |
53 | struct kvm_cpuid_entry2 *best; | 61 | struct kvm_cpuid_entry2 *best; |
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index f5704d9e5ddc..813d31038b93 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c | |||
@@ -3601,20 +3601,27 @@ static void reset_rsvds_bits_mask_ept(struct kvm_vcpu *vcpu, | |||
3601 | } | 3601 | } |
3602 | } | 3602 | } |
3603 | 3603 | ||
3604 | static void update_permission_bitmask(struct kvm_vcpu *vcpu, | 3604 | void update_permission_bitmask(struct kvm_vcpu *vcpu, |
3605 | struct kvm_mmu *mmu, bool ept) | 3605 | struct kvm_mmu *mmu, bool ept) |
3606 | { | 3606 | { |
3607 | unsigned bit, byte, pfec; | 3607 | unsigned bit, byte, pfec; |
3608 | u8 map; | 3608 | u8 map; |
3609 | bool fault, x, w, u, wf, uf, ff, smep; | 3609 | bool fault, x, w, u, wf, uf, ff, smapf, cr4_smap, cr4_smep, smap = 0; |
3610 | 3610 | ||
3611 | smep = kvm_read_cr4_bits(vcpu, X86_CR4_SMEP); | 3611 | cr4_smep = kvm_read_cr4_bits(vcpu, X86_CR4_SMEP); |
3612 | cr4_smap = kvm_read_cr4_bits(vcpu, X86_CR4_SMAP); | ||
3612 | for (byte = 0; byte < ARRAY_SIZE(mmu->permissions); ++byte) { | 3613 | for (byte = 0; byte < ARRAY_SIZE(mmu->permissions); ++byte) { |
3613 | pfec = byte << 1; | 3614 | pfec = byte << 1; |
3614 | map = 0; | 3615 | map = 0; |
3615 | wf = pfec & PFERR_WRITE_MASK; | 3616 | wf = pfec & PFERR_WRITE_MASK; |
3616 | uf = pfec & PFERR_USER_MASK; | 3617 | uf = pfec & PFERR_USER_MASK; |
3617 | ff = pfec & PFERR_FETCH_MASK; | 3618 | ff = pfec & PFERR_FETCH_MASK; |
3619 | /* | ||
3620 | * PFERR_RSVD_MASK bit is set in PFEC if the access is not | ||
3621 | * subject to SMAP restrictions, and cleared otherwise. The | ||
3622 | * bit is only meaningful if the SMAP bit is set in CR4. | ||
3623 | */ | ||
3624 | smapf = !(pfec & PFERR_RSVD_MASK); | ||
3618 | for (bit = 0; bit < 8; ++bit) { | 3625 | for (bit = 0; bit < 8; ++bit) { |
3619 | x = bit & ACC_EXEC_MASK; | 3626 | x = bit & ACC_EXEC_MASK; |
3620 | w = bit & ACC_WRITE_MASK; | 3627 | w = bit & ACC_WRITE_MASK; |
@@ -3626,12 +3633,33 @@ static void update_permission_bitmask(struct kvm_vcpu *vcpu, | |||
3626 | /* Allow supervisor writes if !cr0.wp */ | 3633 | /* Allow supervisor writes if !cr0.wp */ |
3627 | w |= !is_write_protection(vcpu) && !uf; | 3634 | w |= !is_write_protection(vcpu) && !uf; |
3628 | /* Disallow supervisor fetches of user code if cr4.smep */ | 3635 | /* Disallow supervisor fetches of user code if cr4.smep */ |
3629 | x &= !(smep && u && !uf); | 3636 | x &= !(cr4_smep && u && !uf); |
3637 | |||
3638 | /* | ||
3639 | * SMAP:kernel-mode data accesses from user-mode | ||
3640 | * mappings should fault. A fault is considered | ||
3641 | * as a SMAP violation if all of the following | ||
3642 | * conditions are ture: | ||
3643 | * - X86_CR4_SMAP is set in CR4 | ||
3644 | * - An user page is accessed | ||
3645 | * - Page fault in kernel mode | ||
3646 | * - if CPL = 3 or X86_EFLAGS_AC is clear | ||
3647 | * | ||
3648 | * Here, we cover the first three conditions. | ||
3649 | * The fourth is computed dynamically in | ||
3650 | * permission_fault() and is in smapf. | ||
3651 | * | ||
3652 | * Also, SMAP does not affect instruction | ||
3653 | * fetches, add the !ff check here to make it | ||
3654 | * clearer. | ||
3655 | */ | ||
3656 | smap = cr4_smap && u && !uf && !ff; | ||
3630 | } else | 3657 | } else |
3631 | /* Not really needed: no U/S accesses on ept */ | 3658 | /* Not really needed: no U/S accesses on ept */ |
3632 | u = 1; | 3659 | u = 1; |
3633 | 3660 | ||
3634 | fault = (ff && !x) || (uf && !u) || (wf && !w); | 3661 | fault = (ff && !x) || (uf && !u) || (wf && !w) || |
3662 | (smapf && smap); | ||
3635 | map |= fault << bit; | 3663 | map |= fault << bit; |
3636 | } | 3664 | } |
3637 | mmu->permissions[byte] = map; | 3665 | mmu->permissions[byte] = map; |
diff --git a/arch/x86/kvm/mmu.h b/arch/x86/kvm/mmu.h index 292615274358..3842e70bdb7c 100644 --- a/arch/x86/kvm/mmu.h +++ b/arch/x86/kvm/mmu.h | |||
@@ -44,11 +44,17 @@ | |||
44 | #define PT_DIRECTORY_LEVEL 2 | 44 | #define PT_DIRECTORY_LEVEL 2 |
45 | #define PT_PAGE_TABLE_LEVEL 1 | 45 | #define PT_PAGE_TABLE_LEVEL 1 |
46 | 46 | ||
47 | #define PFERR_PRESENT_MASK (1U << 0) | 47 | #define PFERR_PRESENT_BIT 0 |
48 | #define PFERR_WRITE_MASK (1U << 1) | 48 | #define PFERR_WRITE_BIT 1 |
49 | #define PFERR_USER_MASK (1U << 2) | 49 | #define PFERR_USER_BIT 2 |
50 | #define PFERR_RSVD_MASK (1U << 3) | 50 | #define PFERR_RSVD_BIT 3 |
51 | #define PFERR_FETCH_MASK (1U << 4) | 51 | #define PFERR_FETCH_BIT 4 |
52 | |||
53 | #define PFERR_PRESENT_MASK (1U << PFERR_PRESENT_BIT) | ||
54 | #define PFERR_WRITE_MASK (1U << PFERR_WRITE_BIT) | ||
55 | #define PFERR_USER_MASK (1U << PFERR_USER_BIT) | ||
56 | #define PFERR_RSVD_MASK (1U << PFERR_RSVD_BIT) | ||
57 | #define PFERR_FETCH_MASK (1U << PFERR_FETCH_BIT) | ||
52 | 58 | ||
53 | int kvm_mmu_get_spte_hierarchy(struct kvm_vcpu *vcpu, u64 addr, u64 sptes[4]); | 59 | int kvm_mmu_get_spte_hierarchy(struct kvm_vcpu *vcpu, u64 addr, u64 sptes[4]); |
54 | void kvm_mmu_set_mmio_spte_mask(u64 mmio_mask); | 60 | void kvm_mmu_set_mmio_spte_mask(u64 mmio_mask); |
@@ -73,6 +79,8 @@ int handle_mmio_page_fault_common(struct kvm_vcpu *vcpu, u64 addr, bool direct); | |||
73 | void kvm_init_shadow_mmu(struct kvm_vcpu *vcpu, struct kvm_mmu *context); | 79 | void kvm_init_shadow_mmu(struct kvm_vcpu *vcpu, struct kvm_mmu *context); |
74 | void kvm_init_shadow_ept_mmu(struct kvm_vcpu *vcpu, struct kvm_mmu *context, | 80 | void kvm_init_shadow_ept_mmu(struct kvm_vcpu *vcpu, struct kvm_mmu *context, |
75 | bool execonly); | 81 | bool execonly); |
82 | void update_permission_bitmask(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu, | ||
83 | bool ept); | ||
76 | 84 | ||
77 | static inline unsigned int kvm_mmu_available_pages(struct kvm *kvm) | 85 | static inline unsigned int kvm_mmu_available_pages(struct kvm *kvm) |
78 | { | 86 | { |
@@ -110,10 +118,30 @@ static inline bool is_write_protection(struct kvm_vcpu *vcpu) | |||
110 | * Will a fault with a given page-fault error code (pfec) cause a permission | 118 | * Will a fault with a given page-fault error code (pfec) cause a permission |
111 | * fault with the given access (in ACC_* format)? | 119 | * fault with the given access (in ACC_* format)? |
112 | */ | 120 | */ |
113 | static inline bool permission_fault(struct kvm_mmu *mmu, unsigned pte_access, | 121 | static inline bool permission_fault(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu, |
114 | unsigned pfec) | 122 | unsigned pte_access, unsigned pfec) |
115 | { | 123 | { |
116 | return (mmu->permissions[pfec >> 1] >> pte_access) & 1; | 124 | int cpl = kvm_x86_ops->get_cpl(vcpu); |
125 | unsigned long rflags = kvm_x86_ops->get_rflags(vcpu); | ||
126 | |||
127 | /* | ||
128 | * If CPL < 3, SMAP prevention are disabled if EFLAGS.AC = 1. | ||
129 | * | ||
130 | * If CPL = 3, SMAP applies to all supervisor-mode data accesses | ||
131 | * (these are implicit supervisor accesses) regardless of the value | ||
132 | * of EFLAGS.AC. | ||
133 | * | ||
134 | * This computes (cpl < 3) && (rflags & X86_EFLAGS_AC), leaving | ||
135 | * the result in X86_EFLAGS_AC. We then insert it in place of | ||
136 | * the PFERR_RSVD_MASK bit; this bit will always be zero in pfec, | ||
137 | * but it will be one in index if SMAP checks are being overridden. | ||
138 | * It is important to keep this branchless. | ||
139 | */ | ||
140 | unsigned long smap = (cpl - 3) & (rflags & X86_EFLAGS_AC); | ||
141 | int index = (pfec >> 1) + | ||
142 | (smap >> (X86_EFLAGS_AC_BIT - PFERR_RSVD_BIT + 1)); | ||
143 | |||
144 | return (mmu->permissions[index] >> pte_access) & 1; | ||
117 | } | 145 | } |
118 | 146 | ||
119 | void kvm_mmu_invalidate_zap_all_pages(struct kvm *kvm); | 147 | void kvm_mmu_invalidate_zap_all_pages(struct kvm *kvm); |
diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h index b1e6c1bf68d3..123efd3ec29f 100644 --- a/arch/x86/kvm/paging_tmpl.h +++ b/arch/x86/kvm/paging_tmpl.h | |||
@@ -353,7 +353,7 @@ retry_walk: | |||
353 | walker->ptes[walker->level - 1] = pte; | 353 | walker->ptes[walker->level - 1] = pte; |
354 | } while (!is_last_gpte(mmu, walker->level, pte)); | 354 | } while (!is_last_gpte(mmu, walker->level, pte)); |
355 | 355 | ||
356 | if (unlikely(permission_fault(mmu, pte_access, access))) { | 356 | if (unlikely(permission_fault(vcpu, mmu, pte_access, access))) { |
357 | errcode |= PFERR_PRESENT_MASK; | 357 | errcode |= PFERR_PRESENT_MASK; |
358 | goto error; | 358 | goto error; |
359 | } | 359 | } |
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 1320e0f8e611..33e8c028842f 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c | |||
@@ -503,7 +503,7 @@ static inline struct vcpu_vmx *to_vmx(struct kvm_vcpu *vcpu) | |||
503 | [number##_HIGH] = VMCS12_OFFSET(name)+4 | 503 | [number##_HIGH] = VMCS12_OFFSET(name)+4 |
504 | 504 | ||
505 | 505 | ||
506 | static const unsigned long shadow_read_only_fields[] = { | 506 | static unsigned long shadow_read_only_fields[] = { |
507 | /* | 507 | /* |
508 | * We do NOT shadow fields that are modified when L0 | 508 | * We do NOT shadow fields that are modified when L0 |
509 | * traps and emulates any vmx instruction (e.g. VMPTRLD, | 509 | * traps and emulates any vmx instruction (e.g. VMPTRLD, |
@@ -526,10 +526,10 @@ static const unsigned long shadow_read_only_fields[] = { | |||
526 | GUEST_LINEAR_ADDRESS, | 526 | GUEST_LINEAR_ADDRESS, |
527 | GUEST_PHYSICAL_ADDRESS | 527 | GUEST_PHYSICAL_ADDRESS |
528 | }; | 528 | }; |
529 | static const int max_shadow_read_only_fields = | 529 | static int max_shadow_read_only_fields = |
530 | ARRAY_SIZE(shadow_read_only_fields); | 530 | ARRAY_SIZE(shadow_read_only_fields); |
531 | 531 | ||
532 | static const unsigned long shadow_read_write_fields[] = { | 532 | static unsigned long shadow_read_write_fields[] = { |
533 | GUEST_RIP, | 533 | GUEST_RIP, |
534 | GUEST_RSP, | 534 | GUEST_RSP, |
535 | GUEST_CR0, | 535 | GUEST_CR0, |
@@ -558,7 +558,7 @@ static const unsigned long shadow_read_write_fields[] = { | |||
558 | HOST_FS_SELECTOR, | 558 | HOST_FS_SELECTOR, |
559 | HOST_GS_SELECTOR | 559 | HOST_GS_SELECTOR |
560 | }; | 560 | }; |
561 | static const int max_shadow_read_write_fields = | 561 | static int max_shadow_read_write_fields = |
562 | ARRAY_SIZE(shadow_read_write_fields); | 562 | ARRAY_SIZE(shadow_read_write_fields); |
563 | 563 | ||
564 | static const unsigned short vmcs_field_to_offset_table[] = { | 564 | static const unsigned short vmcs_field_to_offset_table[] = { |
@@ -3009,6 +3009,41 @@ static void free_kvm_area(void) | |||
3009 | } | 3009 | } |
3010 | } | 3010 | } |
3011 | 3011 | ||
3012 | static void init_vmcs_shadow_fields(void) | ||
3013 | { | ||
3014 | int i, j; | ||
3015 | |||
3016 | /* No checks for read only fields yet */ | ||
3017 | |||
3018 | for (i = j = 0; i < max_shadow_read_write_fields; i++) { | ||
3019 | switch (shadow_read_write_fields[i]) { | ||
3020 | case GUEST_BNDCFGS: | ||
3021 | if (!vmx_mpx_supported()) | ||
3022 | continue; | ||
3023 | break; | ||
3024 | default: | ||
3025 | break; | ||
3026 | } | ||
3027 | |||
3028 | if (j < i) | ||
3029 | shadow_read_write_fields[j] = | ||
3030 | shadow_read_write_fields[i]; | ||
3031 | j++; | ||
3032 | } | ||
3033 | max_shadow_read_write_fields = j; | ||
3034 | |||
3035 | /* shadowed fields guest access without vmexit */ | ||
3036 | for (i = 0; i < max_shadow_read_write_fields; i++) { | ||
3037 | clear_bit(shadow_read_write_fields[i], | ||
3038 | vmx_vmwrite_bitmap); | ||
3039 | clear_bit(shadow_read_write_fields[i], | ||
3040 | vmx_vmread_bitmap); | ||
3041 | } | ||
3042 | for (i = 0; i < max_shadow_read_only_fields; i++) | ||
3043 | clear_bit(shadow_read_only_fields[i], | ||
3044 | vmx_vmread_bitmap); | ||
3045 | } | ||
3046 | |||
3012 | static __init int alloc_kvm_area(void) | 3047 | static __init int alloc_kvm_area(void) |
3013 | { | 3048 | { |
3014 | int cpu; | 3049 | int cpu; |
@@ -3039,6 +3074,8 @@ static __init int hardware_setup(void) | |||
3039 | enable_vpid = 0; | 3074 | enable_vpid = 0; |
3040 | if (!cpu_has_vmx_shadow_vmcs()) | 3075 | if (!cpu_has_vmx_shadow_vmcs()) |
3041 | enable_shadow_vmcs = 0; | 3076 | enable_shadow_vmcs = 0; |
3077 | if (enable_shadow_vmcs) | ||
3078 | init_vmcs_shadow_fields(); | ||
3042 | 3079 | ||
3043 | if (!cpu_has_vmx_ept() || | 3080 | if (!cpu_has_vmx_ept() || |
3044 | !cpu_has_vmx_ept_4levels()) { | 3081 | !cpu_has_vmx_ept_4levels()) { |
@@ -3484,13 +3521,14 @@ static int vmx_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4) | |||
3484 | hw_cr4 &= ~X86_CR4_PAE; | 3521 | hw_cr4 &= ~X86_CR4_PAE; |
3485 | hw_cr4 |= X86_CR4_PSE; | 3522 | hw_cr4 |= X86_CR4_PSE; |
3486 | /* | 3523 | /* |
3487 | * SMEP is disabled if CPU is in non-paging mode in | 3524 | * SMEP/SMAP is disabled if CPU is in non-paging mode |
3488 | * hardware. However KVM always uses paging mode to | 3525 | * in hardware. However KVM always uses paging mode to |
3489 | * emulate guest non-paging mode with TDP. | 3526 | * emulate guest non-paging mode with TDP. |
3490 | * To emulate this behavior, SMEP needs to be manually | 3527 | * To emulate this behavior, SMEP/SMAP needs to be |
3491 | * disabled when guest switches to non-paging mode. | 3528 | * manually disabled when guest switches to non-paging |
3529 | * mode. | ||
3492 | */ | 3530 | */ |
3493 | hw_cr4 &= ~X86_CR4_SMEP; | 3531 | hw_cr4 &= ~(X86_CR4_SMEP | X86_CR4_SMAP); |
3494 | } else if (!(cr4 & X86_CR4_PAE)) { | 3532 | } else if (!(cr4 & X86_CR4_PAE)) { |
3495 | hw_cr4 &= ~X86_CR4_PAE; | 3533 | hw_cr4 &= ~X86_CR4_PAE; |
3496 | } | 3534 | } |
@@ -8802,14 +8840,6 @@ static int __init vmx_init(void) | |||
8802 | 8840 | ||
8803 | memset(vmx_vmread_bitmap, 0xff, PAGE_SIZE); | 8841 | memset(vmx_vmread_bitmap, 0xff, PAGE_SIZE); |
8804 | memset(vmx_vmwrite_bitmap, 0xff, PAGE_SIZE); | 8842 | memset(vmx_vmwrite_bitmap, 0xff, PAGE_SIZE); |
8805 | /* shadowed read/write fields */ | ||
8806 | for (i = 0; i < max_shadow_read_write_fields; i++) { | ||
8807 | clear_bit(shadow_read_write_fields[i], vmx_vmwrite_bitmap); | ||
8808 | clear_bit(shadow_read_write_fields[i], vmx_vmread_bitmap); | ||
8809 | } | ||
8810 | /* shadowed read only fields */ | ||
8811 | for (i = 0; i < max_shadow_read_only_fields; i++) | ||
8812 | clear_bit(shadow_read_only_fields[i], vmx_vmread_bitmap); | ||
8813 | 8843 | ||
8814 | /* | 8844 | /* |
8815 | * Allow direct access to the PC debug port (it is often used for I/O | 8845 | * Allow direct access to the PC debug port (it is often used for I/O |
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 9d1b5cd4d34c..8b8fc0b792ba 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
@@ -652,6 +652,9 @@ int kvm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4) | |||
652 | if (!guest_cpuid_has_smep(vcpu) && (cr4 & X86_CR4_SMEP)) | 652 | if (!guest_cpuid_has_smep(vcpu) && (cr4 & X86_CR4_SMEP)) |
653 | return 1; | 653 | return 1; |
654 | 654 | ||
655 | if (!guest_cpuid_has_smap(vcpu) && (cr4 & X86_CR4_SMAP)) | ||
656 | return 1; | ||
657 | |||
655 | if (!guest_cpuid_has_fsgsbase(vcpu) && (cr4 & X86_CR4_FSGSBASE)) | 658 | if (!guest_cpuid_has_fsgsbase(vcpu) && (cr4 & X86_CR4_FSGSBASE)) |
656 | return 1; | 659 | return 1; |
657 | 660 | ||
@@ -680,6 +683,9 @@ int kvm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4) | |||
680 | (!(cr4 & X86_CR4_PCIDE) && (old_cr4 & X86_CR4_PCIDE))) | 683 | (!(cr4 & X86_CR4_PCIDE) && (old_cr4 & X86_CR4_PCIDE))) |
681 | kvm_mmu_reset_context(vcpu); | 684 | kvm_mmu_reset_context(vcpu); |
682 | 685 | ||
686 | if ((cr4 ^ old_cr4) & X86_CR4_SMAP) | ||
687 | update_permission_bitmask(vcpu, vcpu->arch.walk_mmu, false); | ||
688 | |||
683 | if ((cr4 ^ old_cr4) & X86_CR4_OSXSAVE) | 689 | if ((cr4 ^ old_cr4) & X86_CR4_OSXSAVE) |
684 | kvm_update_cpuid(vcpu); | 690 | kvm_update_cpuid(vcpu); |
685 | 691 | ||
@@ -1117,7 +1123,6 @@ static inline u64 get_kernel_ns(void) | |||
1117 | { | 1123 | { |
1118 | struct timespec ts; | 1124 | struct timespec ts; |
1119 | 1125 | ||
1120 | WARN_ON(preemptible()); | ||
1121 | ktime_get_ts(&ts); | 1126 | ktime_get_ts(&ts); |
1122 | monotonic_to_bootbased(&ts); | 1127 | monotonic_to_bootbased(&ts); |
1123 | return timespec_to_ns(&ts); | 1128 | return timespec_to_ns(&ts); |
@@ -4164,7 +4169,8 @@ static int vcpu_mmio_gva_to_gpa(struct kvm_vcpu *vcpu, unsigned long gva, | |||
4164 | | (write ? PFERR_WRITE_MASK : 0); | 4169 | | (write ? PFERR_WRITE_MASK : 0); |
4165 | 4170 | ||
4166 | if (vcpu_match_mmio_gva(vcpu, gva) | 4171 | if (vcpu_match_mmio_gva(vcpu, gva) |
4167 | && !permission_fault(vcpu->arch.walk_mmu, vcpu->arch.access, access)) { | 4172 | && !permission_fault(vcpu, vcpu->arch.walk_mmu, |
4173 | vcpu->arch.access, access)) { | ||
4168 | *gpa = vcpu->arch.mmio_gfn << PAGE_SHIFT | | 4174 | *gpa = vcpu->arch.mmio_gfn << PAGE_SHIFT | |
4169 | (gva & (PAGE_SIZE - 1)); | 4175 | (gva & (PAGE_SIZE - 1)); |
4170 | trace_vcpu_match_mmio(gva, *gpa, write, false); | 4176 | trace_vcpu_match_mmio(gva, *gpa, write, false); |
diff --git a/arch/x86/syscalls/Makefile b/arch/x86/syscalls/Makefile index f325af26107c..3323c2745248 100644 --- a/arch/x86/syscalls/Makefile +++ b/arch/x86/syscalls/Makefile | |||
@@ -54,5 +54,7 @@ syshdr-$(CONFIG_X86_64) += syscalls_64.h | |||
54 | 54 | ||
55 | targets += $(uapisyshdr-y) $(syshdr-y) | 55 | targets += $(uapisyshdr-y) $(syshdr-y) |
56 | 56 | ||
57 | PHONY += all | ||
57 | all: $(addprefix $(uapi)/,$(uapisyshdr-y)) | 58 | all: $(addprefix $(uapi)/,$(uapisyshdr-y)) |
58 | all: $(addprefix $(out)/,$(syshdr-y)) | 59 | all: $(addprefix $(out)/,$(syshdr-y)) |
60 | @: | ||
diff --git a/arch/x86/syscalls/syscall_32.tbl b/arch/x86/syscalls/syscall_32.tbl index 96bc506ac6de..d6b867921612 100644 --- a/arch/x86/syscalls/syscall_32.tbl +++ b/arch/x86/syscalls/syscall_32.tbl | |||
@@ -359,3 +359,4 @@ | |||
359 | 350 i386 finit_module sys_finit_module | 359 | 350 i386 finit_module sys_finit_module |
360 | 351 i386 sched_setattr sys_sched_setattr | 360 | 351 i386 sched_setattr sys_sched_setattr |
361 | 352 i386 sched_getattr sys_sched_getattr | 361 | 352 i386 sched_getattr sys_sched_getattr |
362 | 353 i386 renameat2 sys_renameat2 | ||
diff --git a/arch/x86/tools/Makefile b/arch/x86/tools/Makefile index e8120346903b..604a37efd4d5 100644 --- a/arch/x86/tools/Makefile +++ b/arch/x86/tools/Makefile | |||
@@ -40,4 +40,6 @@ $(obj)/insn_sanity.o: $(srctree)/arch/x86/lib/insn.c $(srctree)/arch/x86/lib/ina | |||
40 | HOST_EXTRACFLAGS += -I$(srctree)/tools/include | 40 | HOST_EXTRACFLAGS += -I$(srctree)/tools/include |
41 | hostprogs-y += relocs | 41 | hostprogs-y += relocs |
42 | relocs-objs := relocs_32.o relocs_64.o relocs_common.o | 42 | relocs-objs := relocs_32.o relocs_64.o relocs_common.o |
43 | PHONY += relocs | ||
43 | relocs: $(obj)/relocs | 44 | relocs: $(obj)/relocs |
45 | @: | ||
diff --git a/arch/x86/vdso/vdso-layout.lds.S b/arch/x86/vdso/vdso-layout.lds.S index 2e263f367b13..9df017ab2285 100644 --- a/arch/x86/vdso/vdso-layout.lds.S +++ b/arch/x86/vdso/vdso-layout.lds.S | |||
@@ -9,12 +9,9 @@ SECTIONS | |||
9 | #ifdef BUILD_VDSO32 | 9 | #ifdef BUILD_VDSO32 |
10 | #include <asm/vdso32.h> | 10 | #include <asm/vdso32.h> |
11 | 11 | ||
12 | .hpet_sect : { | 12 | hpet_page = . - VDSO_OFFSET(VDSO_HPET_PAGE); |
13 | hpet_page = . - VDSO_OFFSET(VDSO_HPET_PAGE); | ||
14 | } :text :hpet_sect | ||
15 | 13 | ||
16 | .vvar_sect : { | 14 | vvar = . - VDSO_OFFSET(VDSO_VVAR_PAGE); |
17 | vvar = . - VDSO_OFFSET(VDSO_VVAR_PAGE); | ||
18 | 15 | ||
19 | /* Place all vvars at the offsets in asm/vvar.h. */ | 16 | /* Place all vvars at the offsets in asm/vvar.h. */ |
20 | #define EMIT_VVAR(name, offset) vvar_ ## name = vvar + offset; | 17 | #define EMIT_VVAR(name, offset) vvar_ ## name = vvar + offset; |
@@ -22,7 +19,6 @@ SECTIONS | |||
22 | #include <asm/vvar.h> | 19 | #include <asm/vvar.h> |
23 | #undef __VVAR_KERNEL_LDS | 20 | #undef __VVAR_KERNEL_LDS |
24 | #undef EMIT_VVAR | 21 | #undef EMIT_VVAR |
25 | } :text :vvar_sect | ||
26 | #endif | 22 | #endif |
27 | . = SIZEOF_HEADERS; | 23 | . = SIZEOF_HEADERS; |
28 | 24 | ||
@@ -61,7 +57,12 @@ SECTIONS | |||
61 | */ | 57 | */ |
62 | . = ALIGN(0x100); | 58 | . = ALIGN(0x100); |
63 | 59 | ||
64 | .text : { *(.text*) } :text =0x90909090 | 60 | .text : { *(.text*) } :text =0x90909090, |
61 | |||
62 | /* | ||
63 | * The comma above works around a bug in gold: | ||
64 | * https://sourceware.org/bugzilla/show_bug.cgi?id=16804 | ||
65 | */ | ||
65 | 66 | ||
66 | /DISCARD/ : { | 67 | /DISCARD/ : { |
67 | *(.discard) | 68 | *(.discard) |
@@ -84,8 +85,4 @@ PHDRS | |||
84 | dynamic PT_DYNAMIC FLAGS(4); /* PF_R */ | 85 | dynamic PT_DYNAMIC FLAGS(4); /* PF_R */ |
85 | note PT_NOTE FLAGS(4); /* PF_R */ | 86 | note PT_NOTE FLAGS(4); /* PF_R */ |
86 | eh_frame_hdr PT_GNU_EH_FRAME; | 87 | eh_frame_hdr PT_GNU_EH_FRAME; |
87 | #ifdef BUILD_VDSO32 | ||
88 | vvar_sect PT_NULL FLAGS(4); /* PF_R */ | ||
89 | hpet_sect PT_NULL FLAGS(4); /* PF_R */ | ||
90 | #endif | ||
91 | } | 88 | } |
diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c index a18eadd8bb40..7005974c3ff3 100644 --- a/arch/x86/xen/smp.c +++ b/arch/x86/xen/smp.c | |||
@@ -441,10 +441,11 @@ static int xen_cpu_up(unsigned int cpu, struct task_struct *idle) | |||
441 | irq_ctx_init(cpu); | 441 | irq_ctx_init(cpu); |
442 | #else | 442 | #else |
443 | clear_tsk_thread_flag(idle, TIF_FORK); | 443 | clear_tsk_thread_flag(idle, TIF_FORK); |
444 | #endif | ||
444 | per_cpu(kernel_stack, cpu) = | 445 | per_cpu(kernel_stack, cpu) = |
445 | (unsigned long)task_stack_page(idle) - | 446 | (unsigned long)task_stack_page(idle) - |
446 | KERNEL_STACK_OFFSET + THREAD_SIZE; | 447 | KERNEL_STACK_OFFSET + THREAD_SIZE; |
447 | #endif | 448 | |
448 | xen_setup_runstate_info(cpu); | 449 | xen_setup_runstate_info(cpu); |
449 | xen_setup_timer(cpu); | 450 | xen_setup_timer(cpu); |
450 | xen_init_lock_cpu(cpu); | 451 | xen_init_lock_cpu(cpu); |
diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c index 4d3acc34a998..0ba5f3b967f0 100644 --- a/arch/x86/xen/spinlock.c +++ b/arch/x86/xen/spinlock.c | |||
@@ -274,7 +274,7 @@ void __init xen_init_spinlocks(void) | |||
274 | printk(KERN_DEBUG "xen: PV spinlocks disabled\n"); | 274 | printk(KERN_DEBUG "xen: PV spinlocks disabled\n"); |
275 | return; | 275 | return; |
276 | } | 276 | } |
277 | 277 | printk(KERN_DEBUG "xen: PV spinlocks enabled\n"); | |
278 | pv_lock_ops.lock_spinning = PV_CALLEE_SAVE(xen_lock_spinning); | 278 | pv_lock_ops.lock_spinning = PV_CALLEE_SAVE(xen_lock_spinning); |
279 | pv_lock_ops.unlock_kick = xen_unlock_kick; | 279 | pv_lock_ops.unlock_kick = xen_unlock_kick; |
280 | } | 280 | } |
@@ -290,6 +290,9 @@ static __init int xen_init_spinlocks_jump(void) | |||
290 | if (!xen_pvspin) | 290 | if (!xen_pvspin) |
291 | return 0; | 291 | return 0; |
292 | 292 | ||
293 | if (!xen_domain()) | ||
294 | return 0; | ||
295 | |||
293 | static_key_slow_inc(¶virt_ticketlocks_enabled); | 296 | static_key_slow_inc(¶virt_ticketlocks_enabled); |
294 | return 0; | 297 | return 0; |
295 | } | 298 | } |
diff --git a/arch/x86/xen/xen-asm_32.S b/arch/x86/xen/xen-asm_32.S index 33ca6e42a4ca..fd92a64d748e 100644 --- a/arch/x86/xen/xen-asm_32.S +++ b/arch/x86/xen/xen-asm_32.S | |||
@@ -75,6 +75,17 @@ ENDPROC(xen_sysexit) | |||
75 | * stack state in whatever form its in, we keep things simple by only | 75 | * stack state in whatever form its in, we keep things simple by only |
76 | * using a single register which is pushed/popped on the stack. | 76 | * using a single register which is pushed/popped on the stack. |
77 | */ | 77 | */ |
78 | |||
79 | .macro POP_FS | ||
80 | 1: | ||
81 | popw %fs | ||
82 | .pushsection .fixup, "ax" | ||
83 | 2: movw $0, (%esp) | ||
84 | jmp 1b | ||
85 | .popsection | ||
86 | _ASM_EXTABLE(1b,2b) | ||
87 | .endm | ||
88 | |||
78 | ENTRY(xen_iret) | 89 | ENTRY(xen_iret) |
79 | /* test eflags for special cases */ | 90 | /* test eflags for special cases */ |
80 | testl $(X86_EFLAGS_VM | XEN_EFLAGS_NMI), 8(%esp) | 91 | testl $(X86_EFLAGS_VM | XEN_EFLAGS_NMI), 8(%esp) |
@@ -83,15 +94,13 @@ ENTRY(xen_iret) | |||
83 | push %eax | 94 | push %eax |
84 | ESP_OFFSET=4 # bytes pushed onto stack | 95 | ESP_OFFSET=4 # bytes pushed onto stack |
85 | 96 | ||
86 | /* | 97 | /* Store vcpu_info pointer for easy access */ |
87 | * Store vcpu_info pointer for easy access. Do it this way to | ||
88 | * avoid having to reload %fs | ||
89 | */ | ||
90 | #ifdef CONFIG_SMP | 98 | #ifdef CONFIG_SMP |
91 | GET_THREAD_INFO(%eax) | 99 | pushw %fs |
92 | movl %ss:TI_cpu(%eax), %eax | 100 | movl $(__KERNEL_PERCPU), %eax |
93 | movl %ss:__per_cpu_offset(,%eax,4), %eax | 101 | movl %eax, %fs |
94 | mov %ss:xen_vcpu(%eax), %eax | 102 | movl %fs:xen_vcpu, %eax |
103 | POP_FS | ||
95 | #else | 104 | #else |
96 | movl %ss:xen_vcpu, %eax | 105 | movl %ss:xen_vcpu, %eax |
97 | #endif | 106 | #endif |