diff options
| author | Ingo Molnar <mingo@kernel.org> | 2013-12-17 09:27:08 -0500 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2013-12-17 09:27:08 -0500 |
| commit | bb799d3b980eb803ca2da4a4eefbd9308f8d988a (patch) | |
| tree | 69fbe0cd6d47b23a50f5e1d87bf7489532fae149 /arch/powerpc | |
| parent | 919fc6e34831d1c2b58bfb5ae261dc3facc9b269 (diff) | |
| parent | 319e2e3f63c348a9b66db4667efa73178e18b17d (diff) | |
Merge tag 'v3.13-rc4' into core/locking
Merge Linux 3.13-rc4, to refresh this rather old tree with the latest fixes.
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/powerpc')
62 files changed, 896 insertions, 107 deletions
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile index 607acf54a425..0f4344e6fbca 100644 --- a/arch/powerpc/Makefile +++ b/arch/powerpc/Makefile | |||
| @@ -75,8 +75,10 @@ LDEMULATION := lppc | |||
| 75 | GNUTARGET := powerpcle | 75 | GNUTARGET := powerpcle |
| 76 | MULTIPLEWORD := -mno-multiple | 76 | MULTIPLEWORD := -mno-multiple |
| 77 | else | 77 | else |
| 78 | ifeq ($(call cc-option-yn,-mbig-endian),y) | ||
| 78 | override CC += -mbig-endian | 79 | override CC += -mbig-endian |
| 79 | override AS += -mbig-endian | 80 | override AS += -mbig-endian |
| 81 | endif | ||
| 80 | override LD += -EB | 82 | override LD += -EB |
| 81 | LDEMULATION := ppc | 83 | LDEMULATION := ppc |
| 82 | GNUTARGET := powerpc | 84 | GNUTARGET := powerpc |
| @@ -111,6 +113,7 @@ endif | |||
| 111 | endif | 113 | endif |
| 112 | 114 | ||
| 113 | CFLAGS-$(CONFIG_PPC64) := -mtraceback=no -mcall-aixdesc | 115 | CFLAGS-$(CONFIG_PPC64) := -mtraceback=no -mcall-aixdesc |
| 116 | CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mabi=elfv1) | ||
| 114 | CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mcmodel=medium,-mminimal-toc) | 117 | CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mcmodel=medium,-mminimal-toc) |
| 115 | CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mno-pointers-to-nested-functions) | 118 | CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mno-pointers-to-nested-functions) |
| 116 | CFLAGS-$(CONFIG_PPC32) := -ffixed-r2 $(MULTIPLEWORD) | 119 | CFLAGS-$(CONFIG_PPC32) := -ffixed-r2 $(MULTIPLEWORD) |
| @@ -127,7 +130,12 @@ CFLAGS-$(CONFIG_POWER5_CPU) += $(call cc-option,-mcpu=power5) | |||
| 127 | CFLAGS-$(CONFIG_POWER6_CPU) += $(call cc-option,-mcpu=power6) | 130 | CFLAGS-$(CONFIG_POWER6_CPU) += $(call cc-option,-mcpu=power6) |
| 128 | CFLAGS-$(CONFIG_POWER7_CPU) += $(call cc-option,-mcpu=power7) | 131 | CFLAGS-$(CONFIG_POWER7_CPU) += $(call cc-option,-mcpu=power7) |
| 129 | 132 | ||
| 133 | # Altivec option not allowed with e500mc64 in GCC. | ||
| 134 | ifeq ($(CONFIG_ALTIVEC),y) | ||
| 135 | E5500_CPU := -mcpu=powerpc64 | ||
| 136 | else | ||
| 130 | E5500_CPU := $(call cc-option,-mcpu=e500mc64,-mcpu=powerpc64) | 137 | E5500_CPU := $(call cc-option,-mcpu=e500mc64,-mcpu=powerpc64) |
| 138 | endif | ||
| 131 | CFLAGS-$(CONFIG_E5500_CPU) += $(E5500_CPU) | 139 | CFLAGS-$(CONFIG_E5500_CPU) += $(E5500_CPU) |
| 132 | CFLAGS-$(CONFIG_E6500_CPU) += $(call cc-option,-mcpu=e6500,$(E5500_CPU)) | 140 | CFLAGS-$(CONFIG_E6500_CPU) += $(call cc-option,-mcpu=e6500,$(E5500_CPU)) |
| 133 | 141 | ||
diff --git a/arch/powerpc/boot/dts/fsl/b4si-post.dtsi b/arch/powerpc/boot/dts/fsl/b4si-post.dtsi index 4c617bf8cdb2..4f6e48277c46 100644 --- a/arch/powerpc/boot/dts/fsl/b4si-post.dtsi +++ b/arch/powerpc/boot/dts/fsl/b4si-post.dtsi | |||
| @@ -223,13 +223,13 @@ | |||
| 223 | reg = <0xe2000 0x1000>; | 223 | reg = <0xe2000 0x1000>; |
| 224 | }; | 224 | }; |
| 225 | 225 | ||
| 226 | /include/ "qoriq-dma-0.dtsi" | 226 | /include/ "elo3-dma-0.dtsi" |
| 227 | dma@100300 { | 227 | dma@100300 { |
| 228 | fsl,iommu-parent = <&pamu0>; | 228 | fsl,iommu-parent = <&pamu0>; |
| 229 | fsl,liodn-reg = <&guts 0x580>; /* DMA1LIODNR */ | 229 | fsl,liodn-reg = <&guts 0x580>; /* DMA1LIODNR */ |
| 230 | }; | 230 | }; |
| 231 | 231 | ||
| 232 | /include/ "qoriq-dma-1.dtsi" | 232 | /include/ "elo3-dma-1.dtsi" |
| 233 | dma@101300 { | 233 | dma@101300 { |
| 234 | fsl,iommu-parent = <&pamu0>; | 234 | fsl,iommu-parent = <&pamu0>; |
| 235 | fsl,liodn-reg = <&guts 0x584>; /* DMA2LIODNR */ | 235 | fsl,liodn-reg = <&guts 0x584>; /* DMA2LIODNR */ |
diff --git a/arch/powerpc/boot/dts/fsl/elo3-dma-0.dtsi b/arch/powerpc/boot/dts/fsl/elo3-dma-0.dtsi new file mode 100644 index 000000000000..3c210e0d5201 --- /dev/null +++ b/arch/powerpc/boot/dts/fsl/elo3-dma-0.dtsi | |||
| @@ -0,0 +1,82 @@ | |||
| 1 | /* | ||
| 2 | * QorIQ Elo3 DMA device tree stub [ controller @ offset 0x100000 ] | ||
| 3 | * | ||
| 4 | * Copyright 2013 Freescale Semiconductor Inc. | ||
| 5 | * | ||
| 6 | * Redistribution and use in source and binary forms, with or without | ||
| 7 | * modification, are permitted provided that the following conditions are met: | ||
| 8 | * * Redistributions of source code must retain the above copyright | ||
| 9 | * notice, this list of conditions and the following disclaimer. | ||
| 10 | * * Redistributions in binary form must reproduce the above copyright | ||
| 11 | * notice, this list of conditions and the following disclaimer in the | ||
| 12 | * documentation and/or other materials provided with the distribution. | ||
| 13 | * * Neither the name of Freescale Semiconductor nor the | ||
| 14 | * names of its contributors may be used to endorse or promote products | ||
| 15 | * derived from this software without specific prior written permission. | ||
| 16 | * | ||
| 17 | * | ||
| 18 | * ALTERNATIVELY, this software may be distributed under the terms of the | ||
| 19 | * GNU General Public License ("GPL") as published by the Free Software | ||
| 20 | * Foundation, either version 2 of that License or (at your option) any | ||
| 21 | * later version. | ||
| 22 | * | ||
| 23 | * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY | ||
| 24 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
| 25 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
| 26 | * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY | ||
| 27 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
| 28 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
| 29 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
| 30 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
| 31 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
| 32 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| 33 | */ | ||
| 34 | |||
| 35 | dma0: dma@100300 { | ||
| 36 | #address-cells = <1>; | ||
| 37 | #size-cells = <1>; | ||
| 38 | compatible = "fsl,elo3-dma"; | ||
| 39 | reg = <0x100300 0x4>, | ||
| 40 | <0x100600 0x4>; | ||
| 41 | ranges = <0x0 0x100100 0x500>; | ||
| 42 | dma-channel@0 { | ||
| 43 | compatible = "fsl,eloplus-dma-channel"; | ||
| 44 | reg = <0x0 0x80>; | ||
| 45 | interrupts = <28 2 0 0>; | ||
| 46 | }; | ||
| 47 | dma-channel@80 { | ||
| 48 | compatible = "fsl,eloplus-dma-channel"; | ||
| 49 | reg = <0x80 0x80>; | ||
| 50 | interrupts = <29 2 0 0>; | ||
| 51 | }; | ||
| 52 | dma-channel@100 { | ||
| 53 | compatible = "fsl,eloplus-dma-channel"; | ||
| 54 | reg = <0x100 0x80>; | ||
| 55 | interrupts = <30 2 0 0>; | ||
| 56 | }; | ||
| 57 | dma-channel@180 { | ||
| 58 | compatible = "fsl,eloplus-dma-channel"; | ||
| 59 | reg = <0x180 0x80>; | ||
| 60 | interrupts = <31 2 0 0>; | ||
| 61 | }; | ||
| 62 | dma-channel@300 { | ||
| 63 | compatible = "fsl,eloplus-dma-channel"; | ||
| 64 | reg = <0x300 0x80>; | ||
| 65 | interrupts = <76 2 0 0>; | ||
| 66 | }; | ||
| 67 | dma-channel@380 { | ||
| 68 | compatible = "fsl,eloplus-dma-channel"; | ||
| 69 | reg = <0x380 0x80>; | ||
| 70 | interrupts = <77 2 0 0>; | ||
| 71 | }; | ||
| 72 | dma-channel@400 { | ||
| 73 | compatible = "fsl,eloplus-dma-channel"; | ||
| 74 | reg = <0x400 0x80>; | ||
| 75 | interrupts = <78 2 0 0>; | ||
| 76 | }; | ||
| 77 | dma-channel@480 { | ||
| 78 | compatible = "fsl,eloplus-dma-channel"; | ||
| 79 | reg = <0x480 0x80>; | ||
| 80 | interrupts = <79 2 0 0>; | ||
| 81 | }; | ||
| 82 | }; | ||
diff --git a/arch/powerpc/boot/dts/fsl/elo3-dma-1.dtsi b/arch/powerpc/boot/dts/fsl/elo3-dma-1.dtsi new file mode 100644 index 000000000000..cccf3bb38224 --- /dev/null +++ b/arch/powerpc/boot/dts/fsl/elo3-dma-1.dtsi | |||
| @@ -0,0 +1,82 @@ | |||
| 1 | /* | ||
| 2 | * QorIQ Elo3 DMA device tree stub [ controller @ offset 0x101000 ] | ||
| 3 | * | ||
| 4 | * Copyright 2013 Freescale Semiconductor Inc. | ||
| 5 | * | ||
| 6 | * Redistribution and use in source and binary forms, with or without | ||
| 7 | * modification, are permitted provided that the following conditions are met: | ||
| 8 | * * Redistributions of source code must retain the above copyright | ||
| 9 | * notice, this list of conditions and the following disclaimer. | ||
| 10 | * * Redistributions in binary form must reproduce the above copyright | ||
| 11 | * notice, this list of conditions and the following disclaimer in the | ||
| 12 | * documentation and/or other materials provided with the distribution. | ||
| 13 | * * Neither the name of Freescale Semiconductor nor the | ||
| 14 | * names of its contributors may be used to endorse or promote products | ||
| 15 | * derived from this software without specific prior written permission. | ||
| 16 | * | ||
| 17 | * | ||
| 18 | * ALTERNATIVELY, this software may be distributed under the terms of the | ||
| 19 | * GNU General Public License ("GPL") as published by the Free Software | ||
| 20 | * Foundation, either version 2 of that License or (at your option) any | ||
| 21 | * later version. | ||
| 22 | * | ||
| 23 | * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY | ||
| 24 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
| 25 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
| 26 | * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY | ||
| 27 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
| 28 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
| 29 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
| 30 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
| 31 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
| 32 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| 33 | */ | ||
| 34 | |||
| 35 | dma1: dma@101300 { | ||
| 36 | #address-cells = <1>; | ||
| 37 | #size-cells = <1>; | ||
| 38 | compatible = "fsl,elo3-dma"; | ||
| 39 | reg = <0x101300 0x4>, | ||
| 40 | <0x101600 0x4>; | ||
| 41 | ranges = <0x0 0x101100 0x500>; | ||
| 42 | dma-channel@0 { | ||
| 43 | compatible = "fsl,eloplus-dma-channel"; | ||
| 44 | reg = <0x0 0x80>; | ||
| 45 | interrupts = <32 2 0 0>; | ||
| 46 | }; | ||
| 47 | dma-channel@80 { | ||
| 48 | compatible = "fsl,eloplus-dma-channel"; | ||
| 49 | reg = <0x80 0x80>; | ||
| 50 | interrupts = <33 2 0 0>; | ||
| 51 | }; | ||
| 52 | dma-channel@100 { | ||
| 53 | compatible = "fsl,eloplus-dma-channel"; | ||
| 54 | reg = <0x100 0x80>; | ||
| 55 | interrupts = <34 2 0 0>; | ||
| 56 | }; | ||
| 57 | dma-channel@180 { | ||
| 58 | compatible = "fsl,eloplus-dma-channel"; | ||
| 59 | reg = <0x180 0x80>; | ||
| 60 | interrupts = <35 2 0 0>; | ||
| 61 | }; | ||
| 62 | dma-channel@300 { | ||
| 63 | compatible = "fsl,eloplus-dma-channel"; | ||
| 64 | reg = <0x300 0x80>; | ||
| 65 | interrupts = <80 2 0 0>; | ||
| 66 | }; | ||
| 67 | dma-channel@380 { | ||
| 68 | compatible = "fsl,eloplus-dma-channel"; | ||
| 69 | reg = <0x380 0x80>; | ||
| 70 | interrupts = <81 2 0 0>; | ||
| 71 | }; | ||
| 72 | dma-channel@400 { | ||
| 73 | compatible = "fsl,eloplus-dma-channel"; | ||
| 74 | reg = <0x400 0x80>; | ||
| 75 | interrupts = <82 2 0 0>; | ||
| 76 | }; | ||
| 77 | dma-channel@480 { | ||
| 78 | compatible = "fsl,eloplus-dma-channel"; | ||
| 79 | reg = <0x480 0x80>; | ||
| 80 | interrupts = <83 2 0 0>; | ||
| 81 | }; | ||
| 82 | }; | ||
diff --git a/arch/powerpc/boot/dts/fsl/t4240si-post.dtsi b/arch/powerpc/boot/dts/fsl/t4240si-post.dtsi index 510afa362de1..4143a9733cd0 100644 --- a/arch/powerpc/boot/dts/fsl/t4240si-post.dtsi +++ b/arch/powerpc/boot/dts/fsl/t4240si-post.dtsi | |||
| @@ -387,8 +387,8 @@ | |||
| 387 | reg = <0xea000 0x4000>; | 387 | reg = <0xea000 0x4000>; |
| 388 | }; | 388 | }; |
| 389 | 389 | ||
| 390 | /include/ "qoriq-dma-0.dtsi" | 390 | /include/ "elo3-dma-0.dtsi" |
| 391 | /include/ "qoriq-dma-1.dtsi" | 391 | /include/ "elo3-dma-1.dtsi" |
| 392 | 392 | ||
| 393 | /include/ "qoriq-espi-0.dtsi" | 393 | /include/ "qoriq-espi-0.dtsi" |
| 394 | spi@110000 { | 394 | spi@110000 { |
diff --git a/arch/powerpc/boot/dts/mpc5121.dtsi b/arch/powerpc/boot/dts/mpc5121.dtsi index bd14c00e5146..2d7cb04ac962 100644 --- a/arch/powerpc/boot/dts/mpc5121.dtsi +++ b/arch/powerpc/boot/dts/mpc5121.dtsi | |||
| @@ -77,7 +77,6 @@ | |||
| 77 | compatible = "fsl,mpc5121-immr"; | 77 | compatible = "fsl,mpc5121-immr"; |
| 78 | #address-cells = <1>; | 78 | #address-cells = <1>; |
| 79 | #size-cells = <1>; | 79 | #size-cells = <1>; |
| 80 | #interrupt-cells = <2>; | ||
| 81 | ranges = <0x0 0x80000000 0x400000>; | 80 | ranges = <0x0 0x80000000 0x400000>; |
| 82 | reg = <0x80000000 0x400000>; | 81 | reg = <0x80000000 0x400000>; |
| 83 | bus-frequency = <66000000>; /* 66 MHz ips bus */ | 82 | bus-frequency = <66000000>; /* 66 MHz ips bus */ |
diff --git a/arch/powerpc/boot/dts/xcalibur1501.dts b/arch/powerpc/boot/dts/xcalibur1501.dts index cc00f4ddd9a7..c409cbafb126 100644 --- a/arch/powerpc/boot/dts/xcalibur1501.dts +++ b/arch/powerpc/boot/dts/xcalibur1501.dts | |||
| @@ -637,14 +637,14 @@ | |||
| 637 | tlu@2f000 { | 637 | tlu@2f000 { |
| 638 | compatible = "fsl,mpc8572-tlu", "fsl_tlu"; | 638 | compatible = "fsl,mpc8572-tlu", "fsl_tlu"; |
| 639 | reg = <0x2f000 0x1000>; | 639 | reg = <0x2f000 0x1000>; |
| 640 | interupts = <61 2 >; | 640 | interrupts = <61 2>; |
| 641 | interrupt-parent = <&mpic>; | 641 | interrupt-parent = <&mpic>; |
| 642 | }; | 642 | }; |
| 643 | 643 | ||
| 644 | tlu@15000 { | 644 | tlu@15000 { |
| 645 | compatible = "fsl,mpc8572-tlu", "fsl_tlu"; | 645 | compatible = "fsl,mpc8572-tlu", "fsl_tlu"; |
| 646 | reg = <0x15000 0x1000>; | 646 | reg = <0x15000 0x1000>; |
| 647 | interupts = <75 2>; | 647 | interrupts = <75 2>; |
| 648 | interrupt-parent = <&mpic>; | 648 | interrupt-parent = <&mpic>; |
| 649 | }; | 649 | }; |
| 650 | }; | 650 | }; |
diff --git a/arch/powerpc/boot/dts/xpedite5301.dts b/arch/powerpc/boot/dts/xpedite5301.dts index 53c1c6a9752f..04cb410da48b 100644 --- a/arch/powerpc/boot/dts/xpedite5301.dts +++ b/arch/powerpc/boot/dts/xpedite5301.dts | |||
| @@ -547,14 +547,14 @@ | |||
| 547 | tlu@2f000 { | 547 | tlu@2f000 { |
| 548 | compatible = "fsl,mpc8572-tlu", "fsl_tlu"; | 548 | compatible = "fsl,mpc8572-tlu", "fsl_tlu"; |
| 549 | reg = <0x2f000 0x1000>; | 549 | reg = <0x2f000 0x1000>; |
| 550 | interupts = <61 2 >; | 550 | interrupts = <61 2>; |
| 551 | interrupt-parent = <&mpic>; | 551 | interrupt-parent = <&mpic>; |
| 552 | }; | 552 | }; |
| 553 | 553 | ||
| 554 | tlu@15000 { | 554 | tlu@15000 { |
| 555 | compatible = "fsl,mpc8572-tlu", "fsl_tlu"; | 555 | compatible = "fsl,mpc8572-tlu", "fsl_tlu"; |
| 556 | reg = <0x15000 0x1000>; | 556 | reg = <0x15000 0x1000>; |
| 557 | interupts = <75 2>; | 557 | interrupts = <75 2>; |
| 558 | interrupt-parent = <&mpic>; | 558 | interrupt-parent = <&mpic>; |
| 559 | }; | 559 | }; |
| 560 | }; | 560 | }; |
diff --git a/arch/powerpc/boot/dts/xpedite5330.dts b/arch/powerpc/boot/dts/xpedite5330.dts index 215225983150..73f8620f1ce7 100644 --- a/arch/powerpc/boot/dts/xpedite5330.dts +++ b/arch/powerpc/boot/dts/xpedite5330.dts | |||
| @@ -583,14 +583,14 @@ | |||
| 583 | tlu@2f000 { | 583 | tlu@2f000 { |
| 584 | compatible = "fsl,mpc8572-tlu", "fsl_tlu"; | 584 | compatible = "fsl,mpc8572-tlu", "fsl_tlu"; |
| 585 | reg = <0x2f000 0x1000>; | 585 | reg = <0x2f000 0x1000>; |
| 586 | interupts = <61 2 >; | 586 | interrupts = <61 2>; |
| 587 | interrupt-parent = <&mpic>; | 587 | interrupt-parent = <&mpic>; |
| 588 | }; | 588 | }; |
| 589 | 589 | ||
| 590 | tlu@15000 { | 590 | tlu@15000 { |
| 591 | compatible = "fsl,mpc8572-tlu", "fsl_tlu"; | 591 | compatible = "fsl,mpc8572-tlu", "fsl_tlu"; |
| 592 | reg = <0x15000 0x1000>; | 592 | reg = <0x15000 0x1000>; |
| 593 | interupts = <75 2>; | 593 | interrupts = <75 2>; |
| 594 | interrupt-parent = <&mpic>; | 594 | interrupt-parent = <&mpic>; |
| 595 | }; | 595 | }; |
| 596 | }; | 596 | }; |
diff --git a/arch/powerpc/boot/dts/xpedite5370.dts b/arch/powerpc/boot/dts/xpedite5370.dts index 11dbda10d756..cd0ea2b99362 100644 --- a/arch/powerpc/boot/dts/xpedite5370.dts +++ b/arch/powerpc/boot/dts/xpedite5370.dts | |||
| @@ -545,14 +545,14 @@ | |||
| 545 | tlu@2f000 { | 545 | tlu@2f000 { |
| 546 | compatible = "fsl,mpc8572-tlu", "fsl_tlu"; | 546 | compatible = "fsl,mpc8572-tlu", "fsl_tlu"; |
| 547 | reg = <0x2f000 0x1000>; | 547 | reg = <0x2f000 0x1000>; |
| 548 | interupts = <61 2 >; | 548 | interrupts = <61 2>; |
| 549 | interrupt-parent = <&mpic>; | 549 | interrupt-parent = <&mpic>; |
| 550 | }; | 550 | }; |
| 551 | 551 | ||
| 552 | tlu@15000 { | 552 | tlu@15000 { |
| 553 | compatible = "fsl,mpc8572-tlu", "fsl_tlu"; | 553 | compatible = "fsl,mpc8572-tlu", "fsl_tlu"; |
| 554 | reg = <0x15000 0x1000>; | 554 | reg = <0x15000 0x1000>; |
| 555 | interupts = <75 2>; | 555 | interrupts = <75 2>; |
| 556 | interrupt-parent = <&mpic>; | 556 | interrupt-parent = <&mpic>; |
| 557 | }; | 557 | }; |
| 558 | }; | 558 | }; |
diff --git a/arch/powerpc/boot/util.S b/arch/powerpc/boot/util.S index 5143228e3e5f..6636b1d7821b 100644 --- a/arch/powerpc/boot/util.S +++ b/arch/powerpc/boot/util.S | |||
| @@ -71,18 +71,32 @@ udelay: | |||
| 71 | add r4,r4,r5 | 71 | add r4,r4,r5 |
| 72 | addi r4,r4,-1 | 72 | addi r4,r4,-1 |
| 73 | divw r4,r4,r5 /* BUS ticks */ | 73 | divw r4,r4,r5 /* BUS ticks */ |
| 74 | #ifdef CONFIG_8xx | ||
| 75 | 1: mftbu r5 | ||
| 76 | mftb r6 | ||
| 77 | mftbu r7 | ||
| 78 | #else | ||
| 74 | 1: mfspr r5, SPRN_TBRU | 79 | 1: mfspr r5, SPRN_TBRU |
| 75 | mfspr r6, SPRN_TBRL | 80 | mfspr r6, SPRN_TBRL |
| 76 | mfspr r7, SPRN_TBRU | 81 | mfspr r7, SPRN_TBRU |
| 82 | #endif | ||
| 77 | cmpw 0,r5,r7 | 83 | cmpw 0,r5,r7 |
| 78 | bne 1b /* Get [synced] base time */ | 84 | bne 1b /* Get [synced] base time */ |
| 79 | addc r9,r6,r4 /* Compute end time */ | 85 | addc r9,r6,r4 /* Compute end time */ |
| 80 | addze r8,r5 | 86 | addze r8,r5 |
| 87 | #ifdef CONFIG_8xx | ||
| 88 | 2: mftbu r5 | ||
| 89 | #else | ||
| 81 | 2: mfspr r5, SPRN_TBRU | 90 | 2: mfspr r5, SPRN_TBRU |
| 91 | #endif | ||
| 82 | cmpw 0,r5,r8 | 92 | cmpw 0,r5,r8 |
| 83 | blt 2b | 93 | blt 2b |
| 84 | bgt 3f | 94 | bgt 3f |
| 95 | #ifdef CONFIG_8xx | ||
| 96 | mftb r6 | ||
| 97 | #else | ||
| 85 | mfspr r6, SPRN_TBRL | 98 | mfspr r6, SPRN_TBRL |
| 99 | #endif | ||
| 86 | cmpw 0,r6,r9 | 100 | cmpw 0,r6,r9 |
| 87 | blt 2b | 101 | blt 2b |
| 88 | 3: blr | 102 | 3: blr |
diff --git a/arch/powerpc/configs/52xx/cm5200_defconfig b/arch/powerpc/configs/52xx/cm5200_defconfig index 69b57daf402e..0b88c7b30bb9 100644 --- a/arch/powerpc/configs/52xx/cm5200_defconfig +++ b/arch/powerpc/configs/52xx/cm5200_defconfig | |||
| @@ -12,7 +12,6 @@ CONFIG_EXPERT=y | |||
| 12 | CONFIG_PPC_MPC52xx=y | 12 | CONFIG_PPC_MPC52xx=y |
| 13 | CONFIG_PPC_MPC5200_SIMPLE=y | 13 | CONFIG_PPC_MPC5200_SIMPLE=y |
| 14 | # CONFIG_PPC_PMAC is not set | 14 | # CONFIG_PPC_PMAC is not set |
| 15 | CONFIG_PPC_BESTCOMM=y | ||
| 16 | CONFIG_SPARSE_IRQ=y | 15 | CONFIG_SPARSE_IRQ=y |
| 17 | CONFIG_PM=y | 16 | CONFIG_PM=y |
| 18 | # CONFIG_PCI is not set | 17 | # CONFIG_PCI is not set |
| @@ -71,6 +70,8 @@ CONFIG_USB_DEVICEFS=y | |||
| 71 | CONFIG_USB_OHCI_HCD=y | 70 | CONFIG_USB_OHCI_HCD=y |
| 72 | CONFIG_USB_OHCI_HCD_PPC_OF_BE=y | 71 | CONFIG_USB_OHCI_HCD_PPC_OF_BE=y |
| 73 | CONFIG_USB_STORAGE=y | 72 | CONFIG_USB_STORAGE=y |
| 73 | CONFIG_DMADEVICES=y | ||
| 74 | CONFIG_PPC_BESTCOMM=y | ||
| 74 | CONFIG_EXT2_FS=y | 75 | CONFIG_EXT2_FS=y |
| 75 | CONFIG_EXT3_FS=y | 76 | CONFIG_EXT3_FS=y |
| 76 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | 77 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set |
diff --git a/arch/powerpc/configs/52xx/lite5200b_defconfig b/arch/powerpc/configs/52xx/lite5200b_defconfig index f3638ae0a627..104a332e79ab 100644 --- a/arch/powerpc/configs/52xx/lite5200b_defconfig +++ b/arch/powerpc/configs/52xx/lite5200b_defconfig | |||
| @@ -15,7 +15,6 @@ CONFIG_PPC_MPC52xx=y | |||
| 15 | CONFIG_PPC_MPC5200_SIMPLE=y | 15 | CONFIG_PPC_MPC5200_SIMPLE=y |
| 16 | CONFIG_PPC_LITE5200=y | 16 | CONFIG_PPC_LITE5200=y |
| 17 | # CONFIG_PPC_PMAC is not set | 17 | # CONFIG_PPC_PMAC is not set |
| 18 | CONFIG_PPC_BESTCOMM=y | ||
| 19 | CONFIG_NO_HZ=y | 18 | CONFIG_NO_HZ=y |
| 20 | CONFIG_HIGH_RES_TIMERS=y | 19 | CONFIG_HIGH_RES_TIMERS=y |
| 21 | CONFIG_SPARSE_IRQ=y | 20 | CONFIG_SPARSE_IRQ=y |
| @@ -59,6 +58,8 @@ CONFIG_I2C_CHARDEV=y | |||
| 59 | CONFIG_I2C_MPC=y | 58 | CONFIG_I2C_MPC=y |
| 60 | # CONFIG_HWMON is not set | 59 | # CONFIG_HWMON is not set |
| 61 | CONFIG_VIDEO_OUTPUT_CONTROL=m | 60 | CONFIG_VIDEO_OUTPUT_CONTROL=m |
| 61 | CONFIG_DMADEVICES=y | ||
| 62 | CONFIG_PPC_BESTCOMM=y | ||
| 62 | CONFIG_EXT2_FS=y | 63 | CONFIG_EXT2_FS=y |
| 63 | CONFIG_EXT3_FS=y | 64 | CONFIG_EXT3_FS=y |
| 64 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | 65 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set |
diff --git a/arch/powerpc/configs/52xx/motionpro_defconfig b/arch/powerpc/configs/52xx/motionpro_defconfig index 0c7de9620ea6..0d13ad7e4478 100644 --- a/arch/powerpc/configs/52xx/motionpro_defconfig +++ b/arch/powerpc/configs/52xx/motionpro_defconfig | |||
| @@ -12,7 +12,6 @@ CONFIG_EXPERT=y | |||
| 12 | CONFIG_PPC_MPC52xx=y | 12 | CONFIG_PPC_MPC52xx=y |
| 13 | CONFIG_PPC_MPC5200_SIMPLE=y | 13 | CONFIG_PPC_MPC5200_SIMPLE=y |
| 14 | # CONFIG_PPC_PMAC is not set | 14 | # CONFIG_PPC_PMAC is not set |
| 15 | CONFIG_PPC_BESTCOMM=y | ||
| 16 | CONFIG_SPARSE_IRQ=y | 15 | CONFIG_SPARSE_IRQ=y |
| 17 | CONFIG_PM=y | 16 | CONFIG_PM=y |
| 18 | # CONFIG_PCI is not set | 17 | # CONFIG_PCI is not set |
| @@ -84,6 +83,8 @@ CONFIG_LEDS_TRIGGERS=y | |||
| 84 | CONFIG_LEDS_TRIGGER_TIMER=y | 83 | CONFIG_LEDS_TRIGGER_TIMER=y |
| 85 | CONFIG_RTC_CLASS=y | 84 | CONFIG_RTC_CLASS=y |
| 86 | CONFIG_RTC_DRV_DS1307=y | 85 | CONFIG_RTC_DRV_DS1307=y |
| 86 | CONFIG_DMADEVICES=y | ||
| 87 | CONFIG_PPC_BESTCOMM=y | ||
| 87 | CONFIG_EXT2_FS=y | 88 | CONFIG_EXT2_FS=y |
| 88 | CONFIG_EXT3_FS=y | 89 | CONFIG_EXT3_FS=y |
| 89 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | 90 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set |
diff --git a/arch/powerpc/configs/52xx/pcm030_defconfig b/arch/powerpc/configs/52xx/pcm030_defconfig index 22e719575c60..430aa182fa1c 100644 --- a/arch/powerpc/configs/52xx/pcm030_defconfig +++ b/arch/powerpc/configs/52xx/pcm030_defconfig | |||
| @@ -21,7 +21,6 @@ CONFIG_MODULE_UNLOAD=y | |||
| 21 | CONFIG_PPC_MPC52xx=y | 21 | CONFIG_PPC_MPC52xx=y |
| 22 | CONFIG_PPC_MPC5200_SIMPLE=y | 22 | CONFIG_PPC_MPC5200_SIMPLE=y |
| 23 | # CONFIG_PPC_PMAC is not set | 23 | # CONFIG_PPC_PMAC is not set |
| 24 | CONFIG_PPC_BESTCOMM=y | ||
| 25 | CONFIG_NO_HZ=y | 24 | CONFIG_NO_HZ=y |
| 26 | CONFIG_HIGH_RES_TIMERS=y | 25 | CONFIG_HIGH_RES_TIMERS=y |
| 27 | CONFIG_HZ_100=y | 26 | CONFIG_HZ_100=y |
| @@ -87,6 +86,8 @@ CONFIG_USB_OHCI_HCD_PPC_OF_BE=y | |||
| 87 | CONFIG_USB_STORAGE=m | 86 | CONFIG_USB_STORAGE=m |
| 88 | CONFIG_RTC_CLASS=y | 87 | CONFIG_RTC_CLASS=y |
| 89 | CONFIG_RTC_DRV_PCF8563=m | 88 | CONFIG_RTC_DRV_PCF8563=m |
| 89 | CONFIG_DMADEVICES=y | ||
| 90 | CONFIG_PPC_BESTCOMM=y | ||
| 90 | CONFIG_EXT2_FS=m | 91 | CONFIG_EXT2_FS=m |
| 91 | CONFIG_EXT3_FS=m | 92 | CONFIG_EXT3_FS=m |
| 92 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | 93 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set |
diff --git a/arch/powerpc/configs/52xx/tqm5200_defconfig b/arch/powerpc/configs/52xx/tqm5200_defconfig index 716a37be16e3..7af4c5bb7c63 100644 --- a/arch/powerpc/configs/52xx/tqm5200_defconfig +++ b/arch/powerpc/configs/52xx/tqm5200_defconfig | |||
| @@ -17,7 +17,6 @@ CONFIG_PPC_MPC52xx=y | |||
| 17 | CONFIG_PPC_MPC5200_SIMPLE=y | 17 | CONFIG_PPC_MPC5200_SIMPLE=y |
| 18 | CONFIG_PPC_MPC5200_BUGFIX=y | 18 | CONFIG_PPC_MPC5200_BUGFIX=y |
| 19 | # CONFIG_PPC_PMAC is not set | 19 | # CONFIG_PPC_PMAC is not set |
| 20 | CONFIG_PPC_BESTCOMM=y | ||
| 21 | CONFIG_PM=y | 20 | CONFIG_PM=y |
| 22 | # CONFIG_PCI is not set | 21 | # CONFIG_PCI is not set |
| 23 | CONFIG_NET=y | 22 | CONFIG_NET=y |
| @@ -86,6 +85,8 @@ CONFIG_USB_STORAGE=y | |||
| 86 | CONFIG_RTC_CLASS=y | 85 | CONFIG_RTC_CLASS=y |
| 87 | CONFIG_RTC_DRV_DS1307=y | 86 | CONFIG_RTC_DRV_DS1307=y |
| 88 | CONFIG_RTC_DRV_DS1374=y | 87 | CONFIG_RTC_DRV_DS1374=y |
| 88 | CONFIG_DMADEVICES=y | ||
| 89 | CONFIG_PPC_BESTCOMM=y | ||
| 89 | CONFIG_EXT2_FS=y | 90 | CONFIG_EXT2_FS=y |
| 90 | CONFIG_EXT3_FS=y | 91 | CONFIG_EXT3_FS=y |
| 91 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | 92 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set |
diff --git a/arch/powerpc/configs/mpc5200_defconfig b/arch/powerpc/configs/mpc5200_defconfig index 6640a35bebb7..8b682d1cf4d6 100644 --- a/arch/powerpc/configs/mpc5200_defconfig +++ b/arch/powerpc/configs/mpc5200_defconfig | |||
| @@ -15,7 +15,6 @@ CONFIG_PPC_MEDIA5200=y | |||
| 15 | CONFIG_PPC_MPC5200_BUGFIX=y | 15 | CONFIG_PPC_MPC5200_BUGFIX=y |
| 16 | CONFIG_PPC_MPC5200_LPBFIFO=m | 16 | CONFIG_PPC_MPC5200_LPBFIFO=m |
| 17 | # CONFIG_PPC_PMAC is not set | 17 | # CONFIG_PPC_PMAC is not set |
| 18 | CONFIG_PPC_BESTCOMM=y | ||
| 19 | CONFIG_SIMPLE_GPIO=y | 18 | CONFIG_SIMPLE_GPIO=y |
| 20 | CONFIG_NO_HZ=y | 19 | CONFIG_NO_HZ=y |
| 21 | CONFIG_HIGH_RES_TIMERS=y | 20 | CONFIG_HIGH_RES_TIMERS=y |
| @@ -125,6 +124,8 @@ CONFIG_RTC_CLASS=y | |||
| 125 | CONFIG_RTC_DRV_DS1307=y | 124 | CONFIG_RTC_DRV_DS1307=y |
| 126 | CONFIG_RTC_DRV_DS1374=y | 125 | CONFIG_RTC_DRV_DS1374=y |
| 127 | CONFIG_RTC_DRV_PCF8563=m | 126 | CONFIG_RTC_DRV_PCF8563=m |
| 127 | CONFIG_DMADEVICES=y | ||
| 128 | CONFIG_PPC_BESTCOMM=y | ||
| 128 | CONFIG_EXT2_FS=y | 129 | CONFIG_EXT2_FS=y |
| 129 | CONFIG_EXT3_FS=y | 130 | CONFIG_EXT3_FS=y |
| 130 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | 131 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set |
diff --git a/arch/powerpc/configs/pasemi_defconfig b/arch/powerpc/configs/pasemi_defconfig index bd8a6f71944f..cec044a3ff69 100644 --- a/arch/powerpc/configs/pasemi_defconfig +++ b/arch/powerpc/configs/pasemi_defconfig | |||
| @@ -2,7 +2,6 @@ CONFIG_PPC64=y | |||
| 2 | CONFIG_ALTIVEC=y | 2 | CONFIG_ALTIVEC=y |
| 3 | CONFIG_SMP=y | 3 | CONFIG_SMP=y |
| 4 | CONFIG_NR_CPUS=2 | 4 | CONFIG_NR_CPUS=2 |
| 5 | CONFIG_EXPERIMENTAL=y | ||
| 6 | CONFIG_SYSVIPC=y | 5 | CONFIG_SYSVIPC=y |
| 7 | CONFIG_NO_HZ=y | 6 | CONFIG_NO_HZ=y |
| 8 | CONFIG_HIGH_RES_TIMERS=y | 7 | CONFIG_HIGH_RES_TIMERS=y |
| @@ -45,8 +44,9 @@ CONFIG_INET_AH=y | |||
| 45 | CONFIG_INET_ESP=y | 44 | CONFIG_INET_ESP=y |
| 46 | # CONFIG_IPV6 is not set | 45 | # CONFIG_IPV6 is not set |
| 47 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | 46 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" |
| 47 | CONFIG_DEVTMPFS=y | ||
| 48 | CONFIG_DEVTMPFS_MOUNT=y | ||
| 48 | CONFIG_MTD=y | 49 | CONFIG_MTD=y |
| 49 | CONFIG_MTD_CHAR=y | ||
| 50 | CONFIG_MTD_BLOCK=y | 50 | CONFIG_MTD_BLOCK=y |
| 51 | CONFIG_MTD_SLRAM=y | 51 | CONFIG_MTD_SLRAM=y |
| 52 | CONFIG_MTD_PHRAM=y | 52 | CONFIG_MTD_PHRAM=y |
| @@ -88,7 +88,6 @@ CONFIG_BLK_DEV_DM=y | |||
| 88 | CONFIG_DM_CRYPT=y | 88 | CONFIG_DM_CRYPT=y |
| 89 | CONFIG_NETDEVICES=y | 89 | CONFIG_NETDEVICES=y |
| 90 | CONFIG_DUMMY=y | 90 | CONFIG_DUMMY=y |
| 91 | CONFIG_MII=y | ||
| 92 | CONFIG_TIGON3=y | 91 | CONFIG_TIGON3=y |
| 93 | CONFIG_E1000=y | 92 | CONFIG_E1000=y |
| 94 | CONFIG_PASEMI_MAC=y | 93 | CONFIG_PASEMI_MAC=y |
| @@ -174,8 +173,8 @@ CONFIG_NLS_CODEPAGE_437=y | |||
| 174 | CONFIG_NLS_ISO8859_1=y | 173 | CONFIG_NLS_ISO8859_1=y |
| 175 | CONFIG_CRC_CCITT=y | 174 | CONFIG_CRC_CCITT=y |
| 176 | CONFIG_PRINTK_TIME=y | 175 | CONFIG_PRINTK_TIME=y |
| 177 | CONFIG_MAGIC_SYSRQ=y | ||
| 178 | CONFIG_DEBUG_FS=y | 176 | CONFIG_DEBUG_FS=y |
| 177 | CONFIG_MAGIC_SYSRQ=y | ||
| 179 | CONFIG_DEBUG_KERNEL=y | 178 | CONFIG_DEBUG_KERNEL=y |
| 180 | CONFIG_DETECT_HUNG_TASK=y | 179 | CONFIG_DETECT_HUNG_TASK=y |
| 181 | # CONFIG_SCHED_DEBUG is not set | 180 | # CONFIG_SCHED_DEBUG is not set |
diff --git a/arch/powerpc/configs/pseries_le_defconfig b/arch/powerpc/configs/pseries_le_defconfig new file mode 100644 index 000000000000..62771e0adb7c --- /dev/null +++ b/arch/powerpc/configs/pseries_le_defconfig | |||
| @@ -0,0 +1,352 @@ | |||
| 1 | CONFIG_PPC64=y | ||
| 2 | CONFIG_ALTIVEC=y | ||
| 3 | CONFIG_VSX=y | ||
| 4 | CONFIG_SMP=y | ||
| 5 | CONFIG_NR_CPUS=2048 | ||
| 6 | CONFIG_CPU_LITTLE_ENDIAN=y | ||
| 7 | CONFIG_SYSVIPC=y | ||
| 8 | CONFIG_POSIX_MQUEUE=y | ||
| 9 | CONFIG_AUDIT=y | ||
| 10 | CONFIG_AUDITSYSCALL=y | ||
| 11 | CONFIG_IRQ_DOMAIN_DEBUG=y | ||
| 12 | CONFIG_NO_HZ=y | ||
| 13 | CONFIG_HIGH_RES_TIMERS=y | ||
| 14 | CONFIG_TASKSTATS=y | ||
| 15 | CONFIG_TASK_DELAY_ACCT=y | ||
| 16 | CONFIG_TASK_XACCT=y | ||
| 17 | CONFIG_TASK_IO_ACCOUNTING=y | ||
| 18 | CONFIG_IKCONFIG=y | ||
| 19 | CONFIG_IKCONFIG_PROC=y | ||
| 20 | CONFIG_CGROUPS=y | ||
| 21 | CONFIG_CGROUP_FREEZER=y | ||
| 22 | CONFIG_CGROUP_DEVICE=y | ||
| 23 | CONFIG_CPUSETS=y | ||
| 24 | CONFIG_CGROUP_CPUACCT=y | ||
| 25 | CONFIG_BLK_DEV_INITRD=y | ||
| 26 | # CONFIG_COMPAT_BRK is not set | ||
| 27 | CONFIG_PROFILING=y | ||
| 28 | CONFIG_OPROFILE=y | ||
| 29 | CONFIG_KPROBES=y | ||
| 30 | CONFIG_JUMP_LABEL=y | ||
| 31 | CONFIG_MODULES=y | ||
| 32 | CONFIG_MODULE_UNLOAD=y | ||
| 33 | CONFIG_MODVERSIONS=y | ||
| 34 | CONFIG_MODULE_SRCVERSION_ALL=y | ||
| 35 | CONFIG_PARTITION_ADVANCED=y | ||
| 36 | CONFIG_PPC_SPLPAR=y | ||
| 37 | CONFIG_SCANLOG=m | ||
| 38 | CONFIG_PPC_SMLPAR=y | ||
| 39 | CONFIG_DTL=y | ||
| 40 | # CONFIG_PPC_PMAC is not set | ||
| 41 | CONFIG_RTAS_FLASH=m | ||
| 42 | CONFIG_IBMEBUS=y | ||
| 43 | CONFIG_HZ_100=y | ||
| 44 | CONFIG_BINFMT_MISC=m | ||
| 45 | CONFIG_PPC_TRANSACTIONAL_MEM=y | ||
| 46 | CONFIG_KEXEC=y | ||
| 47 | CONFIG_IRQ_ALL_CPUS=y | ||
| 48 | CONFIG_MEMORY_HOTPLUG=y | ||
| 49 | CONFIG_MEMORY_HOTREMOVE=y | ||
| 50 | CONFIG_CMA=y | ||
| 51 | CONFIG_PPC_64K_PAGES=y | ||
| 52 | CONFIG_PPC_SUBPAGE_PROT=y | ||
| 53 | CONFIG_SCHED_SMT=y | ||
| 54 | CONFIG_HOTPLUG_PCI=y | ||
| 55 | CONFIG_HOTPLUG_PCI_RPA=m | ||
| 56 | CONFIG_HOTPLUG_PCI_RPA_DLPAR=m | ||
| 57 | CONFIG_PACKET=y | ||
| 58 | CONFIG_UNIX=y | ||
| 59 | CONFIG_XFRM_USER=m | ||
| 60 | CONFIG_NET_KEY=m | ||
| 61 | CONFIG_INET=y | ||
| 62 | CONFIG_IP_MULTICAST=y | ||
| 63 | CONFIG_NET_IPIP=y | ||
| 64 | CONFIG_SYN_COOKIES=y | ||
| 65 | CONFIG_INET_AH=m | ||
| 66 | CONFIG_INET_ESP=m | ||
| 67 | CONFIG_INET_IPCOMP=m | ||
| 68 | # CONFIG_IPV6 is not set | ||
| 69 | CONFIG_NETFILTER=y | ||
| 70 | CONFIG_NF_CONNTRACK=m | ||
| 71 | CONFIG_NF_CONNTRACK_EVENTS=y | ||
| 72 | CONFIG_NF_CT_PROTO_UDPLITE=m | ||
| 73 | CONFIG_NF_CONNTRACK_FTP=m | ||
| 74 | CONFIG_NF_CONNTRACK_IRC=m | ||
| 75 | CONFIG_NF_CONNTRACK_TFTP=m | ||
| 76 | CONFIG_NF_CT_NETLINK=m | ||
| 77 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | ||
| 78 | CONFIG_NETFILTER_XT_TARGET_CONNMARK=m | ||
| 79 | CONFIG_NETFILTER_XT_TARGET_MARK=m | ||
| 80 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | ||
| 81 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
| 82 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m | ||
| 83 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m | ||
| 84 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m | ||
| 85 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m | ||
| 86 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m | ||
| 87 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | ||
| 88 | CONFIG_NETFILTER_XT_MATCH_DCCP=m | ||
| 89 | CONFIG_NETFILTER_XT_MATCH_DSCP=m | ||
| 90 | CONFIG_NETFILTER_XT_MATCH_ESP=m | ||
| 91 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | ||
| 92 | CONFIG_NETFILTER_XT_MATCH_HELPER=m | ||
| 93 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m | ||
| 94 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m | ||
| 95 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m | ||
| 96 | CONFIG_NETFILTER_XT_MATCH_MAC=m | ||
| 97 | CONFIG_NETFILTER_XT_MATCH_MARK=m | ||
| 98 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
| 99 | CONFIG_NETFILTER_XT_MATCH_OWNER=m | ||
| 100 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | ||
| 101 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | ||
| 102 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m | ||
| 103 | CONFIG_NETFILTER_XT_MATCH_RATEEST=m | ||
| 104 | CONFIG_NETFILTER_XT_MATCH_REALM=m | ||
| 105 | CONFIG_NETFILTER_XT_MATCH_RECENT=m | ||
| 106 | CONFIG_NETFILTER_XT_MATCH_SCTP=m | ||
| 107 | CONFIG_NETFILTER_XT_MATCH_STATE=m | ||
| 108 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m | ||
| 109 | CONFIG_NETFILTER_XT_MATCH_STRING=m | ||
| 110 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | ||
| 111 | CONFIG_NETFILTER_XT_MATCH_TIME=m | ||
| 112 | CONFIG_NETFILTER_XT_MATCH_U32=m | ||
| 113 | CONFIG_NF_CONNTRACK_IPV4=m | ||
| 114 | CONFIG_IP_NF_IPTABLES=m | ||
| 115 | CONFIG_IP_NF_MATCH_AH=m | ||
| 116 | CONFIG_IP_NF_MATCH_ECN=m | ||
| 117 | CONFIG_IP_NF_MATCH_TTL=m | ||
| 118 | CONFIG_IP_NF_FILTER=m | ||
| 119 | CONFIG_IP_NF_TARGET_REJECT=m | ||
| 120 | CONFIG_IP_NF_TARGET_ULOG=m | ||
| 121 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
| 122 | CONFIG_DEVTMPFS=y | ||
| 123 | CONFIG_DEVTMPFS_MOUNT=y | ||
| 124 | CONFIG_PROC_DEVICETREE=y | ||
| 125 | CONFIG_PARPORT=m | ||
| 126 | CONFIG_PARPORT_PC=m | ||
| 127 | CONFIG_BLK_DEV_FD=m | ||
| 128 | CONFIG_BLK_DEV_LOOP=y | ||
| 129 | CONFIG_BLK_DEV_NBD=m | ||
| 130 | CONFIG_BLK_DEV_RAM=y | ||
| 131 | CONFIG_BLK_DEV_RAM_SIZE=65536 | ||
| 132 | CONFIG_VIRTIO_BLK=m | ||
| 133 | CONFIG_IDE=y | ||
| 134 | CONFIG_BLK_DEV_IDECD=y | ||
| 135 | CONFIG_BLK_DEV_GENERIC=y | ||
| 136 | CONFIG_BLK_DEV_AMD74XX=y | ||
| 137 | CONFIG_BLK_DEV_SD=y | ||
| 138 | CONFIG_CHR_DEV_ST=y | ||
| 139 | CONFIG_BLK_DEV_SR=y | ||
| 140 | CONFIG_BLK_DEV_SR_VENDOR=y | ||
| 141 | CONFIG_CHR_DEV_SG=y | ||
| 142 | CONFIG_SCSI_MULTI_LUN=y | ||
| 143 | CONFIG_SCSI_CONSTANTS=y | ||
| 144 | CONFIG_SCSI_FC_ATTRS=y | ||
| 145 | CONFIG_SCSI_CXGB3_ISCSI=m | ||
| 146 | CONFIG_SCSI_CXGB4_ISCSI=m | ||
| 147 | CONFIG_SCSI_BNX2_ISCSI=m | ||
| 148 | CONFIG_BE2ISCSI=m | ||
| 149 | CONFIG_SCSI_MPT2SAS=m | ||
| 150 | CONFIG_SCSI_IBMVSCSI=y | ||
| 151 | CONFIG_SCSI_IBMVFC=m | ||
| 152 | CONFIG_SCSI_SYM53C8XX_2=y | ||
| 153 | CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0 | ||
| 154 | CONFIG_SCSI_IPR=y | ||
| 155 | CONFIG_SCSI_QLA_FC=m | ||
| 156 | CONFIG_SCSI_QLA_ISCSI=m | ||
| 157 | CONFIG_SCSI_LPFC=m | ||
| 158 | CONFIG_SCSI_VIRTIO=m | ||
| 159 | CONFIG_SCSI_DH=m | ||
| 160 | CONFIG_SCSI_DH_RDAC=m | ||
| 161 | CONFIG_SCSI_DH_ALUA=m | ||
| 162 | CONFIG_ATA=y | ||
| 163 | # CONFIG_ATA_SFF is not set | ||
| 164 | CONFIG_MD=y | ||
| 165 | CONFIG_BLK_DEV_MD=y | ||
| 166 | CONFIG_MD_LINEAR=y | ||
| 167 | CONFIG_MD_RAID0=y | ||
| 168 | CONFIG_MD_RAID1=y | ||
| 169 | CONFIG_MD_RAID10=m | ||
| 170 | CONFIG_MD_RAID456=m | ||
| 171 | CONFIG_MD_MULTIPATH=m | ||
| 172 | CONFIG_MD_FAULTY=m | ||
| 173 | CONFIG_BLK_DEV_DM=y | ||
| 174 | CONFIG_DM_CRYPT=m | ||
| 175 | CONFIG_DM_SNAPSHOT=m | ||
| 176 | CONFIG_DM_MIRROR=m | ||
| 177 | CONFIG_DM_ZERO=m | ||
| 178 | CONFIG_DM_MULTIPATH=m | ||
| 179 | CONFIG_DM_MULTIPATH_QL=m | ||
| 180 | CONFIG_DM_MULTIPATH_ST=m | ||
| 181 | CONFIG_DM_UEVENT=y | ||
| 182 | CONFIG_BONDING=m | ||
| 183 | CONFIG_DUMMY=m | ||
| 184 | CONFIG_NETCONSOLE=y | ||
| 185 | CONFIG_NETPOLL_TRAP=y | ||
| 186 | CONFIG_TUN=m | ||
| 187 | CONFIG_VIRTIO_NET=m | ||
| 188 | CONFIG_VORTEX=y | ||
| 189 | CONFIG_ACENIC=m | ||
| 190 | CONFIG_ACENIC_OMIT_TIGON_I=y | ||
| 191 | CONFIG_PCNET32=y | ||
| 192 | CONFIG_TIGON3=y | ||
| 193 | CONFIG_CHELSIO_T1=m | ||
| 194 | CONFIG_BE2NET=m | ||
| 195 | CONFIG_S2IO=m | ||
| 196 | CONFIG_IBMVETH=y | ||
| 197 | CONFIG_EHEA=y | ||
| 198 | CONFIG_E100=y | ||
| 199 | CONFIG_E1000=y | ||
| 200 | CONFIG_E1000E=y | ||
| 201 | CONFIG_IXGB=m | ||
| 202 | CONFIG_IXGBE=m | ||
| 203 | CONFIG_MLX4_EN=m | ||
| 204 | CONFIG_MYRI10GE=m | ||
| 205 | CONFIG_QLGE=m | ||
| 206 | CONFIG_NETXEN_NIC=m | ||
| 207 | CONFIG_PPP=m | ||
| 208 | CONFIG_PPP_BSDCOMP=m | ||
| 209 | CONFIG_PPP_DEFLATE=m | ||
| 210 | CONFIG_PPPOE=m | ||
| 211 | CONFIG_PPP_ASYNC=m | ||
| 212 | CONFIG_PPP_SYNC_TTY=m | ||
| 213 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
| 214 | CONFIG_INPUT_EVDEV=m | ||
| 215 | CONFIG_INPUT_MISC=y | ||
| 216 | CONFIG_INPUT_PCSPKR=m | ||
| 217 | # CONFIG_SERIO_SERPORT is not set | ||
| 218 | CONFIG_SERIAL_8250=y | ||
| 219 | CONFIG_SERIAL_8250_CONSOLE=y | ||
| 220 | CONFIG_SERIAL_ICOM=m | ||
| 221 | CONFIG_SERIAL_JSM=m | ||
| 222 | CONFIG_HVC_CONSOLE=y | ||
| 223 | CONFIG_HVC_RTAS=y | ||
| 224 | CONFIG_HVCS=m | ||
| 225 | CONFIG_VIRTIO_CONSOLE=m | ||
| 226 | CONFIG_IBM_BSR=m | ||
| 227 | CONFIG_GEN_RTC=y | ||
| 228 | CONFIG_RAW_DRIVER=y | ||
| 229 | CONFIG_MAX_RAW_DEVS=1024 | ||
| 230 | CONFIG_FB=y | ||
| 231 | CONFIG_FIRMWARE_EDID=y | ||
| 232 | CONFIG_FB_OF=y | ||
| 233 | CONFIG_FB_MATROX=y | ||
| 234 | CONFIG_FB_MATROX_MILLENIUM=y | ||
| 235 | CONFIG_FB_MATROX_MYSTIQUE=y | ||
| 236 | CONFIG_FB_MATROX_G=y | ||
| 237 | CONFIG_FB_RADEON=y | ||
| 238 | CONFIG_FB_IBM_GXT4500=y | ||
| 239 | CONFIG_LCD_PLATFORM=m | ||
| 240 | # CONFIG_VGA_CONSOLE is not set | ||
| 241 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
| 242 | CONFIG_LOGO=y | ||
| 243 | CONFIG_HID_GYRATION=y | ||
| 244 | CONFIG_HID_PANTHERLORD=y | ||
| 245 | CONFIG_HID_PETALYNX=y | ||
| 246 | CONFIG_HID_SAMSUNG=y | ||
| 247 | CONFIG_HID_SUNPLUS=y | ||
| 248 | CONFIG_USB_HIDDEV=y | ||
| 249 | CONFIG_USB=y | ||
| 250 | CONFIG_USB_MON=m | ||
| 251 | CONFIG_USB_EHCI_HCD=y | ||
| 252 | # CONFIG_USB_EHCI_HCD_PPC_OF is not set | ||
| 253 | CONFIG_USB_OHCI_HCD=y | ||
| 254 | CONFIG_USB_STORAGE=m | ||
| 255 | CONFIG_INFINIBAND=m | ||
| 256 | CONFIG_INFINIBAND_USER_MAD=m | ||
| 257 | CONFIG_INFINIBAND_USER_ACCESS=m | ||
| 258 | CONFIG_INFINIBAND_MTHCA=m | ||
| 259 | CONFIG_INFINIBAND_EHCA=m | ||
| 260 | CONFIG_INFINIBAND_CXGB3=m | ||
| 261 | CONFIG_INFINIBAND_CXGB4=m | ||
| 262 | CONFIG_MLX4_INFINIBAND=m | ||
| 263 | CONFIG_INFINIBAND_IPOIB=m | ||
| 264 | CONFIG_INFINIBAND_IPOIB_CM=y | ||
| 265 | CONFIG_INFINIBAND_SRP=m | ||
| 266 | CONFIG_INFINIBAND_ISER=m | ||
| 267 | CONFIG_VIRTIO_PCI=m | ||
| 268 | CONFIG_VIRTIO_BALLOON=m | ||
| 269 | CONFIG_EXT2_FS=y | ||
| 270 | CONFIG_EXT2_FS_XATTR=y | ||
| 271 | CONFIG_EXT2_FS_POSIX_ACL=y | ||
| 272 | CONFIG_EXT2_FS_SECURITY=y | ||
| 273 | CONFIG_EXT2_FS_XIP=y | ||
| 274 | CONFIG_EXT3_FS=y | ||
| 275 | CONFIG_EXT3_FS_POSIX_ACL=y | ||
| 276 | CONFIG_EXT3_FS_SECURITY=y | ||
| 277 | CONFIG_EXT4_FS=y | ||
| 278 | CONFIG_EXT4_FS_POSIX_ACL=y | ||
| 279 | CONFIG_EXT4_FS_SECURITY=y | ||
| 280 | CONFIG_REISERFS_FS=y | ||
| 281 | CONFIG_REISERFS_FS_XATTR=y | ||
| 282 | CONFIG_REISERFS_FS_POSIX_ACL=y | ||
| 283 | CONFIG_REISERFS_FS_SECURITY=y | ||
| 284 | CONFIG_JFS_FS=m | ||
| 285 | CONFIG_JFS_POSIX_ACL=y | ||
| 286 | CONFIG_JFS_SECURITY=y | ||
| 287 | CONFIG_XFS_FS=m | ||
| 288 | CONFIG_XFS_POSIX_ACL=y | ||
| 289 | CONFIG_BTRFS_FS=m | ||
| 290 | CONFIG_BTRFS_FS_POSIX_ACL=y | ||
| 291 | CONFIG_NILFS2_FS=m | ||
| 292 | CONFIG_AUTOFS4_FS=m | ||
| 293 | CONFIG_FUSE_FS=m | ||
| 294 | CONFIG_ISO9660_FS=y | ||
| 295 | CONFIG_UDF_FS=m | ||
| 296 | CONFIG_MSDOS_FS=y | ||
| 297 | CONFIG_VFAT_FS=y | ||
| 298 | CONFIG_PROC_KCORE=y | ||
| 299 | CONFIG_TMPFS=y | ||
| 300 | CONFIG_TMPFS_POSIX_ACL=y | ||
| 301 | CONFIG_HUGETLBFS=y | ||
| 302 | CONFIG_CRAMFS=m | ||
| 303 | CONFIG_SQUASHFS=m | ||
| 304 | CONFIG_SQUASHFS_XATTR=y | ||
| 305 | CONFIG_SQUASHFS_LZO=y | ||
| 306 | CONFIG_SQUASHFS_XZ=y | ||
| 307 | CONFIG_PSTORE=y | ||
| 308 | CONFIG_NFS_FS=y | ||
| 309 | CONFIG_NFS_V3_ACL=y | ||
| 310 | CONFIG_NFS_V4=y | ||
| 311 | CONFIG_NFSD=m | ||
| 312 | CONFIG_NFSD_V3_ACL=y | ||
| 313 | CONFIG_NFSD_V4=y | ||
| 314 | CONFIG_CIFS=m | ||
| 315 | CONFIG_CIFS_XATTR=y | ||
| 316 | CONFIG_CIFS_POSIX=y | ||
| 317 | CONFIG_NLS_DEFAULT="utf8" | ||
| 318 | CONFIG_NLS_CODEPAGE_437=y | ||
| 319 | CONFIG_NLS_ASCII=y | ||
| 320 | CONFIG_NLS_ISO8859_1=y | ||
| 321 | CONFIG_NLS_UTF8=y | ||
| 322 | CONFIG_CRC_T10DIF=y | ||
| 323 | CONFIG_MAGIC_SYSRQ=y | ||
| 324 | CONFIG_DEBUG_KERNEL=y | ||
| 325 | CONFIG_DEBUG_STACK_USAGE=y | ||
| 326 | CONFIG_DEBUG_STACKOVERFLOW=y | ||
| 327 | CONFIG_LOCKUP_DETECTOR=y | ||
| 328 | CONFIG_LATENCYTOP=y | ||
| 329 | CONFIG_SCHED_TRACER=y | ||
| 330 | CONFIG_BLK_DEV_IO_TRACE=y | ||
| 331 | CONFIG_CODE_PATCHING_SELFTEST=y | ||
| 332 | CONFIG_FTR_FIXUP_SELFTEST=y | ||
| 333 | CONFIG_MSI_BITMAP_SELFTEST=y | ||
| 334 | CONFIG_XMON=y | ||
| 335 | CONFIG_CRYPTO_TEST=m | ||
| 336 | CONFIG_CRYPTO_PCBC=m | ||
| 337 | CONFIG_CRYPTO_HMAC=y | ||
| 338 | CONFIG_CRYPTO_MICHAEL_MIC=m | ||
| 339 | CONFIG_CRYPTO_TGR192=m | ||
| 340 | CONFIG_CRYPTO_WP512=m | ||
| 341 | CONFIG_CRYPTO_ANUBIS=m | ||
| 342 | CONFIG_CRYPTO_BLOWFISH=m | ||
| 343 | CONFIG_CRYPTO_CAST6=m | ||
| 344 | CONFIG_CRYPTO_KHAZAD=m | ||
| 345 | CONFIG_CRYPTO_SALSA20=m | ||
| 346 | CONFIG_CRYPTO_SERPENT=m | ||
| 347 | CONFIG_CRYPTO_TEA=m | ||
| 348 | CONFIG_CRYPTO_TWOFISH=m | ||
| 349 | CONFIG_CRYPTO_LZO=m | ||
| 350 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | ||
| 351 | CONFIG_CRYPTO_DEV_NX=y | ||
| 352 | CONFIG_CRYPTO_DEV_NX_ENCRYPT=m | ||
diff --git a/arch/powerpc/include/asm/elf.h b/arch/powerpc/include/asm/elf.h index cc0655a702a7..935b5e7a1436 100644 --- a/arch/powerpc/include/asm/elf.h +++ b/arch/powerpc/include/asm/elf.h | |||
| @@ -31,6 +31,8 @@ | |||
| 31 | extern unsigned long randomize_et_dyn(unsigned long base); | 31 | extern unsigned long randomize_et_dyn(unsigned long base); |
| 32 | #define ELF_ET_DYN_BASE (randomize_et_dyn(0x20000000)) | 32 | #define ELF_ET_DYN_BASE (randomize_et_dyn(0x20000000)) |
| 33 | 33 | ||
| 34 | #define ELF_CORE_EFLAGS (is_elf2_task() ? 2 : 0) | ||
| 35 | |||
| 34 | /* | 36 | /* |
| 35 | * Our registers are always unsigned longs, whether we're a 32 bit | 37 | * Our registers are always unsigned longs, whether we're a 32 bit |
| 36 | * process or 64 bit, on either a 64 bit or 32 bit kernel. | 38 | * process or 64 bit, on either a 64 bit or 32 bit kernel. |
| @@ -86,6 +88,8 @@ typedef elf_vrregset_t elf_fpxregset_t; | |||
| 86 | #ifdef __powerpc64__ | 88 | #ifdef __powerpc64__ |
| 87 | # define SET_PERSONALITY(ex) \ | 89 | # define SET_PERSONALITY(ex) \ |
| 88 | do { \ | 90 | do { \ |
| 91 | if (((ex).e_flags & 0x3) == 2) \ | ||
| 92 | set_thread_flag(TIF_ELF2ABI); \ | ||
| 89 | if ((ex).e_ident[EI_CLASS] == ELFCLASS32) \ | 93 | if ((ex).e_ident[EI_CLASS] == ELFCLASS32) \ |
| 90 | set_thread_flag(TIF_32BIT); \ | 94 | set_thread_flag(TIF_32BIT); \ |
| 91 | else \ | 95 | else \ |
diff --git a/arch/powerpc/include/asm/hvcall.h b/arch/powerpc/include/asm/hvcall.h index 0c7f2bfcf134..d8b600b3f058 100644 --- a/arch/powerpc/include/asm/hvcall.h +++ b/arch/powerpc/include/asm/hvcall.h | |||
| @@ -403,6 +403,8 @@ static inline unsigned long cmo_get_page_size(void) | |||
| 403 | extern long pSeries_enable_reloc_on_exc(void); | 403 | extern long pSeries_enable_reloc_on_exc(void); |
| 404 | extern long pSeries_disable_reloc_on_exc(void); | 404 | extern long pSeries_disable_reloc_on_exc(void); |
| 405 | 405 | ||
| 406 | extern long pseries_big_endian_exceptions(void); | ||
| 407 | |||
| 406 | #else | 408 | #else |
| 407 | 409 | ||
| 408 | #define pSeries_enable_reloc_on_exc() do {} while (0) | 410 | #define pSeries_enable_reloc_on_exc() do {} while (0) |
diff --git a/arch/powerpc/include/asm/pgalloc-32.h b/arch/powerpc/include/asm/pgalloc-32.h index 27b2386f738a..842846c1b711 100644 --- a/arch/powerpc/include/asm/pgalloc-32.h +++ b/arch/powerpc/include/asm/pgalloc-32.h | |||
| @@ -84,10 +84,8 @@ static inline void pgtable_free_tlb(struct mmu_gather *tlb, | |||
| 84 | static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t table, | 84 | static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t table, |
| 85 | unsigned long address) | 85 | unsigned long address) |
| 86 | { | 86 | { |
| 87 | struct page *page = page_address(table); | ||
| 88 | |||
| 89 | tlb_flush_pgtable(tlb, address); | 87 | tlb_flush_pgtable(tlb, address); |
| 90 | pgtable_page_dtor(page); | 88 | pgtable_page_dtor(table); |
| 91 | pgtable_free_tlb(tlb, page, 0); | 89 | pgtable_free_tlb(tlb, page_address(table), 0); |
| 92 | } | 90 | } |
| 93 | #endif /* _ASM_POWERPC_PGALLOC_32_H */ | 91 | #endif /* _ASM_POWERPC_PGALLOC_32_H */ |
diff --git a/arch/powerpc/include/asm/pgalloc-64.h b/arch/powerpc/include/asm/pgalloc-64.h index 16cb92d215d2..4b0be20fcbfd 100644 --- a/arch/powerpc/include/asm/pgalloc-64.h +++ b/arch/powerpc/include/asm/pgalloc-64.h | |||
| @@ -16,6 +16,7 @@ struct vmemmap_backing { | |||
| 16 | unsigned long phys; | 16 | unsigned long phys; |
| 17 | unsigned long virt_addr; | 17 | unsigned long virt_addr; |
| 18 | }; | 18 | }; |
| 19 | extern struct vmemmap_backing *vmemmap_list; | ||
| 19 | 20 | ||
| 20 | /* | 21 | /* |
| 21 | * Functions that deal with pagetables that could be at any level of | 22 | * Functions that deal with pagetables that could be at any level of |
| @@ -147,11 +148,9 @@ static inline void pgtable_free_tlb(struct mmu_gather *tlb, | |||
| 147 | static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t table, | 148 | static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t table, |
| 148 | unsigned long address) | 149 | unsigned long address) |
| 149 | { | 150 | { |
| 150 | struct page *page = page_address(table); | ||
| 151 | |||
| 152 | tlb_flush_pgtable(tlb, address); | 151 | tlb_flush_pgtable(tlb, address); |
| 153 | pgtable_page_dtor(page); | 152 | pgtable_page_dtor(table); |
| 154 | pgtable_free_tlb(tlb, page, 0); | 153 | pgtable_free_tlb(tlb, page_address(table), 0); |
| 155 | } | 154 | } |
| 156 | 155 | ||
| 157 | #else /* if CONFIG_PPC_64K_PAGES */ | 156 | #else /* if CONFIG_PPC_64K_PAGES */ |
diff --git a/arch/powerpc/include/asm/plpar_wrappers.h b/arch/powerpc/include/asm/plpar_wrappers.h index a63b045e707c..12c32c5f533d 100644 --- a/arch/powerpc/include/asm/plpar_wrappers.h +++ b/arch/powerpc/include/asm/plpar_wrappers.h | |||
| @@ -287,6 +287,32 @@ static inline long disable_reloc_on_exceptions(void) { | |||
| 287 | return plpar_set_mode(0, 3, 0, 0); | 287 | return plpar_set_mode(0, 3, 0, 0); |
| 288 | } | 288 | } |
| 289 | 289 | ||
| 290 | /* | ||
| 291 | * Take exceptions in big endian mode on this partition | ||
| 292 | * | ||
| 293 | * Note: this call has a partition wide scope and can take a while to complete. | ||
| 294 | * If it returns H_LONG_BUSY_* it should be retried periodically until it | ||
| 295 | * returns H_SUCCESS. | ||
| 296 | */ | ||
| 297 | static inline long enable_big_endian_exceptions(void) | ||
| 298 | { | ||
| 299 | /* mflags = 0: big endian exceptions */ | ||
| 300 | return plpar_set_mode(0, 4, 0, 0); | ||
| 301 | } | ||
| 302 | |||
| 303 | /* | ||
| 304 | * Take exceptions in little endian mode on this partition | ||
| 305 | * | ||
| 306 | * Note: this call has a partition wide scope and can take a while to complete. | ||
| 307 | * If it returns H_LONG_BUSY_* it should be retried periodically until it | ||
| 308 | * returns H_SUCCESS. | ||
| 309 | */ | ||
| 310 | static inline long enable_little_endian_exceptions(void) | ||
| 311 | { | ||
| 312 | /* mflags = 1: little endian exceptions */ | ||
| 313 | return plpar_set_mode(1, 4, 0, 0); | ||
| 314 | } | ||
| 315 | |||
| 290 | static inline long plapr_set_ciabr(unsigned long ciabr) | 316 | static inline long plapr_set_ciabr(unsigned long ciabr) |
| 291 | { | 317 | { |
| 292 | return plpar_set_mode(0, 1, ciabr, 0); | 318 | return plpar_set_mode(0, 1, ciabr, 0); |
diff --git a/arch/powerpc/include/asm/ppc_asm.h b/arch/powerpc/include/asm/ppc_asm.h index 3c1acc31a092..f595b98079ee 100644 --- a/arch/powerpc/include/asm/ppc_asm.h +++ b/arch/powerpc/include/asm/ppc_asm.h | |||
| @@ -366,6 +366,8 @@ BEGIN_FTR_SECTION_NESTED(96); \ | |||
| 366 | cmpwi dest,0; \ | 366 | cmpwi dest,0; \ |
| 367 | beq- 90b; \ | 367 | beq- 90b; \ |
| 368 | END_FTR_SECTION_NESTED(CPU_FTR_CELL_TB_BUG, CPU_FTR_CELL_TB_BUG, 96) | 368 | END_FTR_SECTION_NESTED(CPU_FTR_CELL_TB_BUG, CPU_FTR_CELL_TB_BUG, 96) |
| 369 | #elif defined(CONFIG_8xx) | ||
| 370 | #define MFTB(dest) mftb dest | ||
| 369 | #else | 371 | #else |
| 370 | #define MFTB(dest) mfspr dest, SPRN_TBRL | 372 | #define MFTB(dest) mfspr dest, SPRN_TBRL |
| 371 | #endif | 373 | #endif |
diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h index 5c45787d551e..fa8388ed94c5 100644 --- a/arch/powerpc/include/asm/reg.h +++ b/arch/powerpc/include/asm/reg.h | |||
| @@ -1174,12 +1174,19 @@ | |||
| 1174 | 1174 | ||
| 1175 | #else /* __powerpc64__ */ | 1175 | #else /* __powerpc64__ */ |
| 1176 | 1176 | ||
| 1177 | #if defined(CONFIG_8xx) | ||
| 1178 | #define mftbl() ({unsigned long rval; \ | ||
| 1179 | asm volatile("mftbl %0" : "=r" (rval)); rval;}) | ||
| 1180 | #define mftbu() ({unsigned long rval; \ | ||
| 1181 | asm volatile("mftbu %0" : "=r" (rval)); rval;}) | ||
| 1182 | #else | ||
| 1177 | #define mftbl() ({unsigned long rval; \ | 1183 | #define mftbl() ({unsigned long rval; \ |
| 1178 | asm volatile("mfspr %0, %1" : "=r" (rval) : \ | 1184 | asm volatile("mfspr %0, %1" : "=r" (rval) : \ |
| 1179 | "i" (SPRN_TBRL)); rval;}) | 1185 | "i" (SPRN_TBRL)); rval;}) |
| 1180 | #define mftbu() ({unsigned long rval; \ | 1186 | #define mftbu() ({unsigned long rval; \ |
| 1181 | asm volatile("mfspr %0, %1" : "=r" (rval) : \ | 1187 | asm volatile("mfspr %0, %1" : "=r" (rval) : \ |
| 1182 | "i" (SPRN_TBRU)); rval;}) | 1188 | "i" (SPRN_TBRU)); rval;}) |
| 1189 | #endif | ||
| 1183 | #endif /* !__powerpc64__ */ | 1190 | #endif /* !__powerpc64__ */ |
| 1184 | 1191 | ||
| 1185 | #define mttbl(v) asm volatile("mttbl %0":: "r"(v)) | 1192 | #define mttbl(v) asm volatile("mttbl %0":: "r"(v)) |
diff --git a/arch/powerpc/include/asm/smp.h b/arch/powerpc/include/asm/smp.h index 98da78e0c2c0..084e0807db98 100644 --- a/arch/powerpc/include/asm/smp.h +++ b/arch/powerpc/include/asm/smp.h | |||
| @@ -33,6 +33,7 @@ extern int boot_cpuid; | |||
| 33 | extern int spinning_secondaries; | 33 | extern int spinning_secondaries; |
| 34 | 34 | ||
| 35 | extern void cpu_die(void); | 35 | extern void cpu_die(void); |
| 36 | extern int cpu_to_chip_id(int cpu); | ||
| 36 | 37 | ||
| 37 | #ifdef CONFIG_SMP | 38 | #ifdef CONFIG_SMP |
| 38 | 39 | ||
| @@ -112,7 +113,6 @@ static inline struct cpumask *cpu_core_mask(int cpu) | |||
| 112 | } | 113 | } |
| 113 | 114 | ||
| 114 | extern int cpu_to_core_id(int cpu); | 115 | extern int cpu_to_core_id(int cpu); |
| 115 | extern int cpu_to_chip_id(int cpu); | ||
| 116 | 116 | ||
| 117 | /* Since OpenPIC has only 4 IPIs, we use slightly different message numbers. | 117 | /* Since OpenPIC has only 4 IPIs, we use slightly different message numbers. |
| 118 | * | 118 | * |
diff --git a/arch/powerpc/include/asm/thread_info.h b/arch/powerpc/include/asm/thread_info.h index 8fd6cf6dcee8..9854c564ac52 100644 --- a/arch/powerpc/include/asm/thread_info.h +++ b/arch/powerpc/include/asm/thread_info.h | |||
| @@ -105,6 +105,9 @@ static inline struct thread_info *current_thread_info(void) | |||
| 105 | #define TIF_EMULATE_STACK_STORE 16 /* Is an instruction emulation | 105 | #define TIF_EMULATE_STACK_STORE 16 /* Is an instruction emulation |
| 106 | for stack store? */ | 106 | for stack store? */ |
| 107 | #define TIF_MEMDIE 17 /* is terminating due to OOM killer */ | 107 | #define TIF_MEMDIE 17 /* is terminating due to OOM killer */ |
| 108 | #if defined(CONFIG_PPC64) | ||
| 109 | #define TIF_ELF2ABI 18 /* function descriptors must die! */ | ||
| 110 | #endif | ||
| 108 | 111 | ||
| 109 | /* as above, but as bit values */ | 112 | /* as above, but as bit values */ |
| 110 | #define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) | 113 | #define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) |
| @@ -183,6 +186,12 @@ static inline bool test_thread_local_flags(unsigned int flags) | |||
| 183 | #define is_32bit_task() (1) | 186 | #define is_32bit_task() (1) |
| 184 | #endif | 187 | #endif |
| 185 | 188 | ||
| 189 | #if defined(CONFIG_PPC64) | ||
| 190 | #define is_elf2_task() (test_thread_flag(TIF_ELF2ABI)) | ||
| 191 | #else | ||
| 192 | #define is_elf2_task() (0) | ||
| 193 | #endif | ||
| 194 | |||
| 186 | #endif /* !__ASSEMBLY__ */ | 195 | #endif /* !__ASSEMBLY__ */ |
| 187 | 196 | ||
| 188 | #endif /* __KERNEL__ */ | 197 | #endif /* __KERNEL__ */ |
diff --git a/arch/powerpc/include/asm/timex.h b/arch/powerpc/include/asm/timex.h index 18908caa1f3b..2cf846edb3fc 100644 --- a/arch/powerpc/include/asm/timex.h +++ b/arch/powerpc/include/asm/timex.h | |||
| @@ -29,7 +29,11 @@ static inline cycles_t get_cycles(void) | |||
| 29 | ret = 0; | 29 | ret = 0; |
| 30 | 30 | ||
| 31 | __asm__ __volatile__( | 31 | __asm__ __volatile__( |
| 32 | #ifdef CONFIG_8xx | ||
| 33 | "97: mftb %0\n" | ||
| 34 | #else | ||
| 32 | "97: mfspr %0, %2\n" | 35 | "97: mfspr %0, %2\n" |
| 36 | #endif | ||
| 33 | "99:\n" | 37 | "99:\n" |
| 34 | ".section __ftr_fixup,\"a\"\n" | 38 | ".section __ftr_fixup,\"a\"\n" |
| 35 | ".align 2\n" | 39 | ".align 2\n" |
| @@ -41,7 +45,11 @@ static inline cycles_t get_cycles(void) | |||
| 41 | " .long 0\n" | 45 | " .long 0\n" |
| 42 | " .long 0\n" | 46 | " .long 0\n" |
| 43 | ".previous" | 47 | ".previous" |
| 48 | #ifdef CONFIG_8xx | ||
| 49 | : "=r" (ret) : "i" (CPU_FTR_601)); | ||
| 50 | #else | ||
| 44 | : "=r" (ret) : "i" (CPU_FTR_601), "i" (SPRN_TBRL)); | 51 | : "=r" (ret) : "i" (CPU_FTR_601), "i" (SPRN_TBRL)); |
| 52 | #endif | ||
| 45 | return ret; | 53 | return ret; |
| 46 | #endif | 54 | #endif |
| 47 | } | 55 | } |
diff --git a/arch/powerpc/kernel/eeh.c b/arch/powerpc/kernel/eeh.c index 671302065347..4bd687d5e7aa 100644 --- a/arch/powerpc/kernel/eeh.c +++ b/arch/powerpc/kernel/eeh.c | |||
| @@ -686,6 +686,15 @@ void eeh_save_bars(struct eeh_dev *edev) | |||
| 686 | 686 | ||
| 687 | for (i = 0; i < 16; i++) | 687 | for (i = 0; i < 16; i++) |
| 688 | eeh_ops->read_config(dn, i * 4, 4, &edev->config_space[i]); | 688 | eeh_ops->read_config(dn, i * 4, 4, &edev->config_space[i]); |
| 689 | |||
| 690 | /* | ||
| 691 | * For PCI bridges including root port, we need enable bus | ||
| 692 | * master explicitly. Otherwise, it can't fetch IODA table | ||
| 693 | * entries correctly. So we cache the bit in advance so that | ||
| 694 | * we can restore it after reset, either PHB range or PE range. | ||
| 695 | */ | ||
| 696 | if (edev->mode & EEH_DEV_BRIDGE) | ||
| 697 | edev->config_space[1] |= PCI_COMMAND_MASTER; | ||
| 689 | } | 698 | } |
| 690 | 699 | ||
| 691 | /** | 700 | /** |
diff --git a/arch/powerpc/kernel/eeh_event.c b/arch/powerpc/kernel/eeh_event.c index d27c5afc90ae..72d748b56c86 100644 --- a/arch/powerpc/kernel/eeh_event.c +++ b/arch/powerpc/kernel/eeh_event.c | |||
| @@ -74,8 +74,13 @@ static int eeh_event_handler(void * dummy) | |||
| 74 | pe = event->pe; | 74 | pe = event->pe; |
| 75 | if (pe) { | 75 | if (pe) { |
| 76 | eeh_pe_state_mark(pe, EEH_PE_RECOVERING); | 76 | eeh_pe_state_mark(pe, EEH_PE_RECOVERING); |
| 77 | pr_info("EEH: Detected PCI bus error on PHB#%d-PE#%x\n", | 77 | if (pe->type & EEH_PE_PHB) |
| 78 | pe->phb->global_number, pe->addr); | 78 | pr_info("EEH: Detected error on PHB#%d\n", |
| 79 | pe->phb->global_number); | ||
| 80 | else | ||
| 81 | pr_info("EEH: Detected PCI bus error on " | ||
| 82 | "PHB#%d-PE#%x\n", | ||
| 83 | pe->phb->global_number, pe->addr); | ||
| 79 | eeh_handle_event(pe); | 84 | eeh_handle_event(pe); |
| 80 | eeh_pe_state_clear(pe, EEH_PE_RECOVERING); | 85 | eeh_pe_state_clear(pe, EEH_PE_RECOVERING); |
| 81 | } else { | 86 | } else { |
diff --git a/arch/powerpc/kernel/machine_kexec.c b/arch/powerpc/kernel/machine_kexec.c index e1ec57e87b3b..75d4f7340da8 100644 --- a/arch/powerpc/kernel/machine_kexec.c +++ b/arch/powerpc/kernel/machine_kexec.c | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #include <linux/ftrace.h> | 18 | #include <linux/ftrace.h> |
| 19 | 19 | ||
| 20 | #include <asm/machdep.h> | 20 | #include <asm/machdep.h> |
| 21 | #include <asm/pgalloc.h> | ||
| 21 | #include <asm/prom.h> | 22 | #include <asm/prom.h> |
| 22 | #include <asm/sections.h> | 23 | #include <asm/sections.h> |
| 23 | 24 | ||
| @@ -75,6 +76,17 @@ void arch_crash_save_vmcoreinfo(void) | |||
| 75 | #ifndef CONFIG_NEED_MULTIPLE_NODES | 76 | #ifndef CONFIG_NEED_MULTIPLE_NODES |
| 76 | VMCOREINFO_SYMBOL(contig_page_data); | 77 | VMCOREINFO_SYMBOL(contig_page_data); |
| 77 | #endif | 78 | #endif |
| 79 | #if defined(CONFIG_PPC64) && defined(CONFIG_SPARSEMEM_VMEMMAP) | ||
| 80 | VMCOREINFO_SYMBOL(vmemmap_list); | ||
| 81 | VMCOREINFO_SYMBOL(mmu_vmemmap_psize); | ||
| 82 | VMCOREINFO_SYMBOL(mmu_psize_defs); | ||
| 83 | VMCOREINFO_STRUCT_SIZE(vmemmap_backing); | ||
| 84 | VMCOREINFO_OFFSET(vmemmap_backing, list); | ||
| 85 | VMCOREINFO_OFFSET(vmemmap_backing, phys); | ||
| 86 | VMCOREINFO_OFFSET(vmemmap_backing, virt_addr); | ||
| 87 | VMCOREINFO_STRUCT_SIZE(mmu_psize_def); | ||
| 88 | VMCOREINFO_OFFSET(mmu_psize_def, shift); | ||
| 89 | #endif | ||
| 78 | } | 90 | } |
| 79 | 91 | ||
| 80 | /* | 92 | /* |
| @@ -136,7 +148,7 @@ void __init reserve_crashkernel(void) | |||
| 136 | * a small SLB (128MB) since the crash kernel needs to place | 148 | * a small SLB (128MB) since the crash kernel needs to place |
| 137 | * itself and some stacks to be in the first segment. | 149 | * itself and some stacks to be in the first segment. |
| 138 | */ | 150 | */ |
| 139 | crashk_res.start = min(0x80000000ULL, (ppc64_rma_size / 2)); | 151 | crashk_res.start = min(0x8000000ULL, (ppc64_rma_size / 2)); |
| 140 | #else | 152 | #else |
| 141 | crashk_res.start = KDUMP_KERNELBASE; | 153 | crashk_res.start = KDUMP_KERNELBASE; |
| 142 | #endif | 154 | #endif |
diff --git a/arch/powerpc/kernel/misc_64.S b/arch/powerpc/kernel/misc_64.S index e59caf874d05..64bf8db12b15 100644 --- a/arch/powerpc/kernel/misc_64.S +++ b/arch/powerpc/kernel/misc_64.S | |||
| @@ -246,8 +246,8 @@ _GLOBAL(__bswapdi2) | |||
| 246 | or r3,r7,r9 | 246 | or r3,r7,r9 |
| 247 | blr | 247 | blr |
| 248 | 248 | ||
| 249 | #if defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_MAPLE) | ||
| 250 | 249 | ||
| 250 | #ifdef CONFIG_PPC_EARLY_DEBUG_BOOTX | ||
| 251 | _GLOBAL(rmci_on) | 251 | _GLOBAL(rmci_on) |
| 252 | sync | 252 | sync |
| 253 | isync | 253 | isync |
| @@ -277,6 +277,9 @@ _GLOBAL(rmci_off) | |||
| 277 | isync | 277 | isync |
| 278 | sync | 278 | sync |
| 279 | blr | 279 | blr |
| 280 | #endif /* CONFIG_PPC_EARLY_DEBUG_BOOTX */ | ||
| 281 | |||
| 282 | #if defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_MAPLE) | ||
| 280 | 283 | ||
| 281 | /* | 284 | /* |
| 282 | * Do an IO access in real mode | 285 | * Do an IO access in real mode |
diff --git a/arch/powerpc/kernel/nvram_64.c b/arch/powerpc/kernel/nvram_64.c index fd82c289ab1c..28b898e68185 100644 --- a/arch/powerpc/kernel/nvram_64.c +++ b/arch/powerpc/kernel/nvram_64.c | |||
| @@ -210,7 +210,7 @@ static void __init nvram_print_partitions(char * label) | |||
| 210 | printk(KERN_WARNING "--------%s---------\n", label); | 210 | printk(KERN_WARNING "--------%s---------\n", label); |
| 211 | printk(KERN_WARNING "indx\t\tsig\tchks\tlen\tname\n"); | 211 | printk(KERN_WARNING "indx\t\tsig\tchks\tlen\tname\n"); |
| 212 | list_for_each_entry(tmp_part, &nvram_partitions, partition) { | 212 | list_for_each_entry(tmp_part, &nvram_partitions, partition) { |
| 213 | printk(KERN_WARNING "%4d \t%02x\t%02x\t%d\t%12s\n", | 213 | printk(KERN_WARNING "%4d \t%02x\t%02x\t%d\t%12.12s\n", |
| 214 | tmp_part->index, tmp_part->header.signature, | 214 | tmp_part->index, tmp_part->header.signature, |
| 215 | tmp_part->header.checksum, tmp_part->header.length, | 215 | tmp_part->header.checksum, tmp_part->header.length, |
| 216 | tmp_part->header.name); | 216 | tmp_part->header.name); |
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index 75c2d1009985..3386d8ab7eb0 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c | |||
| @@ -858,17 +858,21 @@ void show_regs(struct pt_regs * regs) | |||
| 858 | printk("MSR: "REG" ", regs->msr); | 858 | printk("MSR: "REG" ", regs->msr); |
| 859 | printbits(regs->msr, msr_bits); | 859 | printbits(regs->msr, msr_bits); |
| 860 | printk(" CR: %08lx XER: %08lx\n", regs->ccr, regs->xer); | 860 | printk(" CR: %08lx XER: %08lx\n", regs->ccr, regs->xer); |
| 861 | #ifdef CONFIG_PPC64 | ||
| 862 | printk("SOFTE: %ld\n", regs->softe); | ||
| 863 | #endif | ||
| 864 | trap = TRAP(regs); | 861 | trap = TRAP(regs); |
| 865 | if ((regs->trap != 0xc00) && cpu_has_feature(CPU_FTR_CFAR)) | 862 | if ((regs->trap != 0xc00) && cpu_has_feature(CPU_FTR_CFAR)) |
| 866 | printk("CFAR: "REG"\n", regs->orig_gpr3); | 863 | printk("CFAR: "REG" ", regs->orig_gpr3); |
| 867 | if (trap == 0x300 || trap == 0x600) | 864 | if (trap == 0x200 || trap == 0x300 || trap == 0x600) |
| 868 | #if defined(CONFIG_4xx) || defined(CONFIG_BOOKE) | 865 | #if defined(CONFIG_4xx) || defined(CONFIG_BOOKE) |
| 869 | printk("DEAR: "REG", ESR: "REG"\n", regs->dar, regs->dsisr); | 866 | printk("DEAR: "REG" ESR: "REG" ", regs->dar, regs->dsisr); |
| 870 | #else | 867 | #else |
| 871 | printk("DAR: "REG", DSISR: %08lx\n", regs->dar, regs->dsisr); | 868 | printk("DAR: "REG" DSISR: %08lx ", regs->dar, regs->dsisr); |
| 869 | #endif | ||
| 870 | #ifdef CONFIG_PPC64 | ||
| 871 | printk("SOFTE: %ld ", regs->softe); | ||
| 872 | #endif | ||
| 873 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM | ||
| 874 | if (MSR_TM_ACTIVE(regs->msr)) | ||
| 875 | printk("\nPACATMSCRATCH: %016llx ", get_paca()->tm_scratch); | ||
| 872 | #endif | 876 | #endif |
| 873 | 877 | ||
| 874 | for (i = 0; i < 32; i++) { | 878 | for (i = 0; i < 32; i++) { |
| @@ -887,9 +891,6 @@ void show_regs(struct pt_regs * regs) | |||
| 887 | printk("NIP ["REG"] %pS\n", regs->nip, (void *)regs->nip); | 891 | printk("NIP ["REG"] %pS\n", regs->nip, (void *)regs->nip); |
| 888 | printk("LR ["REG"] %pS\n", regs->link, (void *)regs->link); | 892 | printk("LR ["REG"] %pS\n", regs->link, (void *)regs->link); |
| 889 | #endif | 893 | #endif |
| 890 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM | ||
| 891 | printk("PACATMSCRATCH [%llx]\n", get_paca()->tm_scratch); | ||
| 892 | #endif | ||
| 893 | show_stack(current, (unsigned long *) regs->gpr[1]); | 894 | show_stack(current, (unsigned long *) regs->gpr[1]); |
| 894 | if (!user_mode(regs)) | 895 | if (!user_mode(regs)) |
| 895 | show_instructions(regs); | 896 | show_instructions(regs); |
| @@ -1086,25 +1087,45 @@ void start_thread(struct pt_regs *regs, unsigned long start, unsigned long sp) | |||
| 1086 | regs->msr = MSR_USER; | 1087 | regs->msr = MSR_USER; |
| 1087 | #else | 1088 | #else |
| 1088 | if (!is_32bit_task()) { | 1089 | if (!is_32bit_task()) { |
| 1089 | unsigned long entry, toc; | 1090 | unsigned long entry; |
| 1090 | 1091 | ||
| 1091 | /* start is a relocated pointer to the function descriptor for | 1092 | if (is_elf2_task()) { |
| 1092 | * the elf _start routine. The first entry in the function | 1093 | /* Look ma, no function descriptors! */ |
| 1093 | * descriptor is the entry address of _start and the second | 1094 | entry = start; |
| 1094 | * entry is the TOC value we need to use. | ||
| 1095 | */ | ||
| 1096 | __get_user(entry, (unsigned long __user *)start); | ||
| 1097 | __get_user(toc, (unsigned long __user *)start+1); | ||
| 1098 | 1095 | ||
| 1099 | /* Check whether the e_entry function descriptor entries | 1096 | /* |
| 1100 | * need to be relocated before we can use them. | 1097 | * Ulrich says: |
| 1101 | */ | 1098 | * The latest iteration of the ABI requires that when |
| 1102 | if (load_addr != 0) { | 1099 | * calling a function (at its global entry point), |
| 1103 | entry += load_addr; | 1100 | * the caller must ensure r12 holds the entry point |
| 1104 | toc += load_addr; | 1101 | * address (so that the function can quickly |
| 1102 | * establish addressability). | ||
| 1103 | */ | ||
| 1104 | regs->gpr[12] = start; | ||
| 1105 | /* Make sure that's restored on entry to userspace. */ | ||
| 1106 | set_thread_flag(TIF_RESTOREALL); | ||
| 1107 | } else { | ||
| 1108 | unsigned long toc; | ||
| 1109 | |||
| 1110 | /* start is a relocated pointer to the function | ||
| 1111 | * descriptor for the elf _start routine. The first | ||
| 1112 | * entry in the function descriptor is the entry | ||
| 1113 | * address of _start and the second entry is the TOC | ||
| 1114 | * value we need to use. | ||
| 1115 | */ | ||
| 1116 | __get_user(entry, (unsigned long __user *)start); | ||
| 1117 | __get_user(toc, (unsigned long __user *)start+1); | ||
| 1118 | |||
| 1119 | /* Check whether the e_entry function descriptor entries | ||
| 1120 | * need to be relocated before we can use them. | ||
| 1121 | */ | ||
| 1122 | if (load_addr != 0) { | ||
| 1123 | entry += load_addr; | ||
| 1124 | toc += load_addr; | ||
| 1125 | } | ||
| 1126 | regs->gpr[2] = toc; | ||
| 1105 | } | 1127 | } |
| 1106 | regs->nip = entry; | 1128 | regs->nip = entry; |
| 1107 | regs->gpr[2] = toc; | ||
| 1108 | regs->msr = MSR_USER64; | 1129 | regs->msr = MSR_USER64; |
| 1109 | } else { | 1130 | } else { |
| 1110 | regs->nip = start; | 1131 | regs->nip = start; |
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c index f3a47098fb8e..fa0ad8aafbcc 100644 --- a/arch/powerpc/kernel/prom.c +++ b/arch/powerpc/kernel/prom.c | |||
| @@ -777,6 +777,26 @@ int of_get_ibm_chip_id(struct device_node *np) | |||
| 777 | return -1; | 777 | return -1; |
| 778 | } | 778 | } |
| 779 | 779 | ||
| 780 | /** | ||
| 781 | * cpu_to_chip_id - Return the cpus chip-id | ||
| 782 | * @cpu: The logical cpu number. | ||
| 783 | * | ||
| 784 | * Return the value of the ibm,chip-id property corresponding to the given | ||
| 785 | * logical cpu number. If the chip-id can not be found, returns -1. | ||
| 786 | */ | ||
| 787 | int cpu_to_chip_id(int cpu) | ||
| 788 | { | ||
| 789 | struct device_node *np; | ||
| 790 | |||
| 791 | np = of_get_cpu_node(cpu, NULL); | ||
| 792 | if (!np) | ||
| 793 | return -1; | ||
| 794 | |||
| 795 | of_node_put(np); | ||
| 796 | return of_get_ibm_chip_id(np); | ||
| 797 | } | ||
| 798 | EXPORT_SYMBOL(cpu_to_chip_id); | ||
| 799 | |||
| 780 | #ifdef CONFIG_PPC_PSERIES | 800 | #ifdef CONFIG_PPC_PSERIES |
| 781 | /* | 801 | /* |
| 782 | * Fix up the uninitialized fields in a new device node: | 802 | * Fix up the uninitialized fields in a new device node: |
diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c index 749778e0a69d..68027bfa5f8e 100644 --- a/arch/powerpc/kernel/signal_32.c +++ b/arch/powerpc/kernel/signal_32.c | |||
| @@ -445,6 +445,12 @@ static int save_user_regs(struct pt_regs *regs, struct mcontext __user *frame, | |||
| 445 | #endif /* CONFIG_ALTIVEC */ | 445 | #endif /* CONFIG_ALTIVEC */ |
| 446 | if (copy_fpr_to_user(&frame->mc_fregs, current)) | 446 | if (copy_fpr_to_user(&frame->mc_fregs, current)) |
| 447 | return 1; | 447 | return 1; |
| 448 | |||
| 449 | /* | ||
| 450 | * Clear the MSR VSX bit to indicate there is no valid state attached | ||
| 451 | * to this context, except in the specific case below where we set it. | ||
| 452 | */ | ||
| 453 | msr &= ~MSR_VSX; | ||
| 448 | #ifdef CONFIG_VSX | 454 | #ifdef CONFIG_VSX |
| 449 | /* | 455 | /* |
| 450 | * Copy VSR 0-31 upper half from thread_struct to local | 456 | * Copy VSR 0-31 upper half from thread_struct to local |
diff --git a/arch/powerpc/kernel/signal_64.c b/arch/powerpc/kernel/signal_64.c index b3c615764c9b..42991045349f 100644 --- a/arch/powerpc/kernel/signal_64.c +++ b/arch/powerpc/kernel/signal_64.c | |||
| @@ -122,6 +122,12 @@ static long setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs, | |||
| 122 | flush_fp_to_thread(current); | 122 | flush_fp_to_thread(current); |
| 123 | /* copy fpr regs and fpscr */ | 123 | /* copy fpr regs and fpscr */ |
| 124 | err |= copy_fpr_to_user(&sc->fp_regs, current); | 124 | err |= copy_fpr_to_user(&sc->fp_regs, current); |
| 125 | |||
| 126 | /* | ||
| 127 | * Clear the MSR VSX bit to indicate there is no valid state attached | ||
| 128 | * to this context, except in the specific case below where we set it. | ||
| 129 | */ | ||
| 130 | msr &= ~MSR_VSX; | ||
| 125 | #ifdef CONFIG_VSX | 131 | #ifdef CONFIG_VSX |
| 126 | /* | 132 | /* |
| 127 | * Copy VSX low doubleword to local buffer for formatting, | 133 | * Copy VSX low doubleword to local buffer for formatting, |
| @@ -701,12 +707,6 @@ badframe: | |||
| 701 | int handle_rt_signal64(int signr, struct k_sigaction *ka, siginfo_t *info, | 707 | int handle_rt_signal64(int signr, struct k_sigaction *ka, siginfo_t *info, |
| 702 | sigset_t *set, struct pt_regs *regs) | 708 | sigset_t *set, struct pt_regs *regs) |
| 703 | { | 709 | { |
| 704 | /* Handler is *really* a pointer to the function descriptor for | ||
| 705 | * the signal routine. The first entry in the function | ||
| 706 | * descriptor is the entry address of signal and the second | ||
| 707 | * entry is the TOC value we need to use. | ||
| 708 | */ | ||
| 709 | func_descr_t __user *funct_desc_ptr; | ||
| 710 | struct rt_sigframe __user *frame; | 710 | struct rt_sigframe __user *frame; |
| 711 | unsigned long newsp = 0; | 711 | unsigned long newsp = 0; |
| 712 | long err = 0; | 712 | long err = 0; |
| @@ -766,19 +766,32 @@ int handle_rt_signal64(int signr, struct k_sigaction *ka, siginfo_t *info, | |||
| 766 | goto badframe; | 766 | goto badframe; |
| 767 | regs->link = (unsigned long) &frame->tramp[0]; | 767 | regs->link = (unsigned long) &frame->tramp[0]; |
| 768 | } | 768 | } |
| 769 | funct_desc_ptr = (func_descr_t __user *) ka->sa.sa_handler; | ||
| 770 | 769 | ||
| 771 | /* Allocate a dummy caller frame for the signal handler. */ | 770 | /* Allocate a dummy caller frame for the signal handler. */ |
| 772 | newsp = ((unsigned long)frame) - __SIGNAL_FRAMESIZE; | 771 | newsp = ((unsigned long)frame) - __SIGNAL_FRAMESIZE; |
| 773 | err |= put_user(regs->gpr[1], (unsigned long __user *)newsp); | 772 | err |= put_user(regs->gpr[1], (unsigned long __user *)newsp); |
| 774 | 773 | ||
| 775 | /* Set up "regs" so we "return" to the signal handler. */ | 774 | /* Set up "regs" so we "return" to the signal handler. */ |
| 776 | err |= get_user(regs->nip, &funct_desc_ptr->entry); | 775 | if (is_elf2_task()) { |
| 776 | regs->nip = (unsigned long) ka->sa.sa_handler; | ||
| 777 | regs->gpr[12] = regs->nip; | ||
| 778 | } else { | ||
| 779 | /* Handler is *really* a pointer to the function descriptor for | ||
| 780 | * the signal routine. The first entry in the function | ||
| 781 | * descriptor is the entry address of signal and the second | ||
| 782 | * entry is the TOC value we need to use. | ||
| 783 | */ | ||
| 784 | func_descr_t __user *funct_desc_ptr = | ||
| 785 | (func_descr_t __user *) ka->sa.sa_handler; | ||
| 786 | |||
| 787 | err |= get_user(regs->nip, &funct_desc_ptr->entry); | ||
| 788 | err |= get_user(regs->gpr[2], &funct_desc_ptr->toc); | ||
| 789 | } | ||
| 790 | |||
| 777 | /* enter the signal handler in native-endian mode */ | 791 | /* enter the signal handler in native-endian mode */ |
| 778 | regs->msr &= ~MSR_LE; | 792 | regs->msr &= ~MSR_LE; |
| 779 | regs->msr |= (MSR_KERNEL & MSR_LE); | 793 | regs->msr |= (MSR_KERNEL & MSR_LE); |
| 780 | regs->gpr[1] = newsp; | 794 | regs->gpr[1] = newsp; |
| 781 | err |= get_user(regs->gpr[2], &funct_desc_ptr->toc); | ||
| 782 | regs->gpr[3] = signr; | 795 | regs->gpr[3] = signr; |
| 783 | regs->result = 0; | 796 | regs->result = 0; |
| 784 | if (ka->sa.sa_flags & SA_SIGINFO) { | 797 | if (ka->sa.sa_flags & SA_SIGINFO) { |
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index 930cd8af3503..a3b64f3bf9a2 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c | |||
| @@ -597,22 +597,6 @@ out: | |||
| 597 | return id; | 597 | return id; |
| 598 | } | 598 | } |
| 599 | 599 | ||
| 600 | /* Return the value of the chip-id property corresponding | ||
| 601 | * to the given logical cpu. | ||
| 602 | */ | ||
| 603 | int cpu_to_chip_id(int cpu) | ||
| 604 | { | ||
| 605 | struct device_node *np; | ||
| 606 | |||
| 607 | np = of_get_cpu_node(cpu, NULL); | ||
| 608 | if (!np) | ||
| 609 | return -1; | ||
| 610 | |||
| 611 | of_node_put(np); | ||
| 612 | return of_get_ibm_chip_id(np); | ||
| 613 | } | ||
| 614 | EXPORT_SYMBOL(cpu_to_chip_id); | ||
| 615 | |||
| 616 | /* Helper routines for cpu to core mapping */ | 600 | /* Helper routines for cpu to core mapping */ |
| 617 | int cpu_core_index_of_thread(int cpu) | 601 | int cpu_core_index_of_thread(int cpu) |
| 618 | { | 602 | { |
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c index 192b051df97e..b3b144121cc9 100644 --- a/arch/powerpc/kernel/time.c +++ b/arch/powerpc/kernel/time.c | |||
| @@ -213,8 +213,6 @@ static u64 scan_dispatch_log(u64 stop_tb) | |||
| 213 | if (i == be64_to_cpu(vpa->dtl_idx)) | 213 | if (i == be64_to_cpu(vpa->dtl_idx)) |
| 214 | return 0; | 214 | return 0; |
| 215 | while (i < be64_to_cpu(vpa->dtl_idx)) { | 215 | while (i < be64_to_cpu(vpa->dtl_idx)) { |
| 216 | if (dtl_consumer) | ||
| 217 | dtl_consumer(dtl, i); | ||
| 218 | dtb = be64_to_cpu(dtl->timebase); | 216 | dtb = be64_to_cpu(dtl->timebase); |
| 219 | tb_delta = be32_to_cpu(dtl->enqueue_to_dispatch_time) + | 217 | tb_delta = be32_to_cpu(dtl->enqueue_to_dispatch_time) + |
| 220 | be32_to_cpu(dtl->ready_to_enqueue_time); | 218 | be32_to_cpu(dtl->ready_to_enqueue_time); |
| @@ -227,6 +225,8 @@ static u64 scan_dispatch_log(u64 stop_tb) | |||
| 227 | } | 225 | } |
| 228 | if (dtb > stop_tb) | 226 | if (dtb > stop_tb) |
| 229 | break; | 227 | break; |
| 228 | if (dtl_consumer) | ||
| 229 | dtl_consumer(dtl, i); | ||
| 230 | stolen += tb_delta; | 230 | stolen += tb_delta; |
| 231 | ++i; | 231 | ++i; |
| 232 | ++dtl; | 232 | ++dtl; |
diff --git a/arch/powerpc/kernel/vdso32/gettimeofday.S b/arch/powerpc/kernel/vdso32/gettimeofday.S index 6b1f2a6d5517..6b2b69616e77 100644 --- a/arch/powerpc/kernel/vdso32/gettimeofday.S +++ b/arch/powerpc/kernel/vdso32/gettimeofday.S | |||
| @@ -232,9 +232,15 @@ __do_get_tspec: | |||
| 232 | lwz r6,(CFG_TB_ORIG_STAMP+4)(r9) | 232 | lwz r6,(CFG_TB_ORIG_STAMP+4)(r9) |
| 233 | 233 | ||
| 234 | /* Get a stable TB value */ | 234 | /* Get a stable TB value */ |
| 235 | #ifdef CONFIG_8xx | ||
| 236 | 2: mftbu r3 | ||
| 237 | mftbl r4 | ||
| 238 | mftbu r0 | ||
| 239 | #else | ||
| 235 | 2: mfspr r3, SPRN_TBRU | 240 | 2: mfspr r3, SPRN_TBRU |
| 236 | mfspr r4, SPRN_TBRL | 241 | mfspr r4, SPRN_TBRL |
| 237 | mfspr r0, SPRN_TBRU | 242 | mfspr r0, SPRN_TBRU |
| 243 | #endif | ||
| 238 | cmplw cr0,r3,r0 | 244 | cmplw cr0,r3,r0 |
| 239 | bne- 2b | 245 | bne- 2b |
| 240 | 246 | ||
diff --git a/arch/powerpc/kernel/vdso64/sigtramp.S b/arch/powerpc/kernel/vdso64/sigtramp.S index 45ea281e9a21..542c6f422e4d 100644 --- a/arch/powerpc/kernel/vdso64/sigtramp.S +++ b/arch/powerpc/kernel/vdso64/sigtramp.S | |||
| @@ -142,6 +142,13 @@ V_FUNCTION_END(__kernel_sigtramp_rt64) | |||
| 142 | /* Size of CR reg in DWARF unwind info. */ | 142 | /* Size of CR reg in DWARF unwind info. */ |
| 143 | #define CRSIZE 4 | 143 | #define CRSIZE 4 |
| 144 | 144 | ||
| 145 | /* Offset of CR reg within a full word. */ | ||
| 146 | #ifdef __LITTLE_ENDIAN__ | ||
| 147 | #define CROFF 0 | ||
| 148 | #else | ||
| 149 | #define CROFF (RSIZE - CRSIZE) | ||
| 150 | #endif | ||
| 151 | |||
| 145 | /* This is the offset of the VMX reg pointer. */ | 152 | /* This is the offset of the VMX reg pointer. */ |
| 146 | #define VREGS 48*RSIZE+33*8 | 153 | #define VREGS 48*RSIZE+33*8 |
| 147 | 154 | ||
| @@ -181,7 +188,14 @@ V_FUNCTION_END(__kernel_sigtramp_rt64) | |||
| 181 | rsave (31, 31*RSIZE); \ | 188 | rsave (31, 31*RSIZE); \ |
| 182 | rsave (67, 32*RSIZE); /* ap, used as temp for nip */ \ | 189 | rsave (67, 32*RSIZE); /* ap, used as temp for nip */ \ |
| 183 | rsave (65, 36*RSIZE); /* lr */ \ | 190 | rsave (65, 36*RSIZE); /* lr */ \ |
| 184 | rsave (70, 38*RSIZE + (RSIZE - CRSIZE)) /* cr */ | 191 | rsave (68, 38*RSIZE + CROFF); /* cr fields */ \ |
| 192 | rsave (69, 38*RSIZE + CROFF); \ | ||
| 193 | rsave (70, 38*RSIZE + CROFF); \ | ||
| 194 | rsave (71, 38*RSIZE + CROFF); \ | ||
| 195 | rsave (72, 38*RSIZE + CROFF); \ | ||
| 196 | rsave (73, 38*RSIZE + CROFF); \ | ||
| 197 | rsave (74, 38*RSIZE + CROFF); \ | ||
| 198 | rsave (75, 38*RSIZE + CROFF) | ||
| 185 | 199 | ||
| 186 | /* Describe where the FP regs are saved. */ | 200 | /* Describe where the FP regs are saved. */ |
| 187 | #define EH_FRAME_FP \ | 201 | #define EH_FRAME_FP \ |
diff --git a/arch/powerpc/kernel/vio.c b/arch/powerpc/kernel/vio.c index e7d0c88f621a..76a64821f4a2 100644 --- a/arch/powerpc/kernel/vio.c +++ b/arch/powerpc/kernel/vio.c | |||
| @@ -1419,7 +1419,7 @@ struct vio_dev *vio_register_device_node(struct device_node *of_node) | |||
| 1419 | 1419 | ||
| 1420 | /* needed to ensure proper operation of coherent allocations | 1420 | /* needed to ensure proper operation of coherent allocations |
| 1421 | * later, in case driver doesn't set it explicitly */ | 1421 | * later, in case driver doesn't set it explicitly */ |
| 1422 | dma_set_mask_and_coherent(&viodev->dev, DMA_BIT_MASK(64)); | 1422 | dma_coerce_mask_and_coherent(&viodev->dev, DMA_BIT_MASK(64)); |
| 1423 | } | 1423 | } |
| 1424 | 1424 | ||
| 1425 | /* register with generic device framework */ | 1425 | /* register with generic device framework */ |
diff --git a/arch/powerpc/mm/gup.c b/arch/powerpc/mm/gup.c index 6936547018b8..c5f734e20b0f 100644 --- a/arch/powerpc/mm/gup.c +++ b/arch/powerpc/mm/gup.c | |||
| @@ -123,6 +123,7 @@ int __get_user_pages_fast(unsigned long start, int nr_pages, int write, | |||
| 123 | struct mm_struct *mm = current->mm; | 123 | struct mm_struct *mm = current->mm; |
| 124 | unsigned long addr, len, end; | 124 | unsigned long addr, len, end; |
| 125 | unsigned long next; | 125 | unsigned long next; |
| 126 | unsigned long flags; | ||
| 126 | pgd_t *pgdp; | 127 | pgd_t *pgdp; |
| 127 | int nr = 0; | 128 | int nr = 0; |
| 128 | 129 | ||
| @@ -156,7 +157,7 @@ int __get_user_pages_fast(unsigned long start, int nr_pages, int write, | |||
| 156 | * So long as we atomically load page table pointers versus teardown, | 157 | * So long as we atomically load page table pointers versus teardown, |
| 157 | * we can follow the address down to the the page and take a ref on it. | 158 | * we can follow the address down to the the page and take a ref on it. |
| 158 | */ | 159 | */ |
| 159 | local_irq_disable(); | 160 | local_irq_save(flags); |
| 160 | 161 | ||
| 161 | pgdp = pgd_offset(mm, addr); | 162 | pgdp = pgd_offset(mm, addr); |
| 162 | do { | 163 | do { |
| @@ -179,7 +180,7 @@ int __get_user_pages_fast(unsigned long start, int nr_pages, int write, | |||
| 179 | break; | 180 | break; |
| 180 | } while (pgdp++, addr = next, addr != end); | 181 | } while (pgdp++, addr = next, addr != end); |
| 181 | 182 | ||
| 182 | local_irq_enable(); | 183 | local_irq_restore(flags); |
| 183 | 184 | ||
| 184 | return nr; | 185 | return nr; |
| 185 | } | 186 | } |
diff --git a/arch/powerpc/mm/hugetlbpage-book3e.c b/arch/powerpc/mm/hugetlbpage-book3e.c index 3bc700655fc8..74551b5e41e5 100644 --- a/arch/powerpc/mm/hugetlbpage-book3e.c +++ b/arch/powerpc/mm/hugetlbpage-book3e.c | |||
| @@ -117,6 +117,5 @@ void flush_hugetlb_page(struct vm_area_struct *vma, unsigned long vmaddr) | |||
| 117 | struct hstate *hstate = hstate_file(vma->vm_file); | 117 | struct hstate *hstate = hstate_file(vma->vm_file); |
| 118 | unsigned long tsize = huge_page_shift(hstate) - 10; | 118 | unsigned long tsize = huge_page_shift(hstate) - 10; |
| 119 | 119 | ||
| 120 | __flush_tlb_page(vma ? vma->vm_mm : NULL, vmaddr, tsize, 0); | 120 | __flush_tlb_page(vma->vm_mm, vmaddr, tsize, 0); |
| 121 | |||
| 122 | } | 121 | } |
diff --git a/arch/powerpc/mm/slice.c b/arch/powerpc/mm/slice.c index 3e99c149271a..7ce9cf3b6988 100644 --- a/arch/powerpc/mm/slice.c +++ b/arch/powerpc/mm/slice.c | |||
| @@ -258,7 +258,7 @@ static bool slice_scan_available(unsigned long addr, | |||
| 258 | slice = GET_HIGH_SLICE_INDEX(addr); | 258 | slice = GET_HIGH_SLICE_INDEX(addr); |
| 259 | *boundary_addr = (slice + end) ? | 259 | *boundary_addr = (slice + end) ? |
| 260 | ((slice + end) << SLICE_HIGH_SHIFT) : SLICE_LOW_TOP; | 260 | ((slice + end) << SLICE_HIGH_SHIFT) : SLICE_LOW_TOP; |
| 261 | return !!(available.high_slices & (1u << slice)); | 261 | return !!(available.high_slices & (1ul << slice)); |
| 262 | } | 262 | } |
| 263 | } | 263 | } |
| 264 | 264 | ||
diff --git a/arch/powerpc/mm/tlb_nohash.c b/arch/powerpc/mm/tlb_nohash.c index 41cd68dee681..358d74303138 100644 --- a/arch/powerpc/mm/tlb_nohash.c +++ b/arch/powerpc/mm/tlb_nohash.c | |||
| @@ -305,7 +305,7 @@ void __flush_tlb_page(struct mm_struct *mm, unsigned long vmaddr, | |||
| 305 | void flush_tlb_page(struct vm_area_struct *vma, unsigned long vmaddr) | 305 | void flush_tlb_page(struct vm_area_struct *vma, unsigned long vmaddr) |
| 306 | { | 306 | { |
| 307 | #ifdef CONFIG_HUGETLB_PAGE | 307 | #ifdef CONFIG_HUGETLB_PAGE |
| 308 | if (is_vm_hugetlb_page(vma)) | 308 | if (vma && is_vm_hugetlb_page(vma)) |
| 309 | flush_hugetlb_page(vma, vmaddr); | 309 | flush_hugetlb_page(vma, vmaddr); |
| 310 | #endif | 310 | #endif |
| 311 | 311 | ||
diff --git a/arch/powerpc/platforms/Kconfig.cputype b/arch/powerpc/platforms/Kconfig.cputype index c2a566fb8bb8..bca2465a9c34 100644 --- a/arch/powerpc/platforms/Kconfig.cputype +++ b/arch/powerpc/platforms/Kconfig.cputype | |||
| @@ -403,3 +403,28 @@ config PPC_DOORBELL | |||
| 403 | default n | 403 | default n |
| 404 | 404 | ||
| 405 | endmenu | 405 | endmenu |
| 406 | |||
| 407 | choice | ||
| 408 | prompt "Endianness selection" | ||
| 409 | default CPU_BIG_ENDIAN | ||
| 410 | help | ||
| 411 | This option selects whether a big endian or little endian kernel will | ||
| 412 | be built. | ||
| 413 | |||
| 414 | config CPU_BIG_ENDIAN | ||
| 415 | bool "Build big endian kernel" | ||
| 416 | help | ||
| 417 | Build a big endian kernel. | ||
| 418 | |||
| 419 | If unsure, select this option. | ||
| 420 | |||
| 421 | config CPU_LITTLE_ENDIAN | ||
| 422 | bool "Build little endian kernel" | ||
| 423 | help | ||
| 424 | Build a little endian kernel. | ||
| 425 | |||
| 426 | Note that if cross compiling a little endian kernel, | ||
| 427 | CROSS_COMPILE must point to a toolchain capable of targeting | ||
| 428 | little endian powerpc. | ||
| 429 | |||
| 430 | endchoice | ||
diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c index 084cdfa40682..2c6d173842b2 100644 --- a/arch/powerpc/platforms/powernv/pci-ioda.c +++ b/arch/powerpc/platforms/powernv/pci-ioda.c | |||
| @@ -720,6 +720,7 @@ static void pnv_pci_ioda2_setup_dma_pe(struct pnv_phb *phb, | |||
| 720 | tbl->it_type = TCE_PCI_SWINV_CREATE | TCE_PCI_SWINV_FREE; | 720 | tbl->it_type = TCE_PCI_SWINV_CREATE | TCE_PCI_SWINV_FREE; |
| 721 | } | 721 | } |
| 722 | iommu_init_table(tbl, phb->hose->node); | 722 | iommu_init_table(tbl, phb->hose->node); |
| 723 | iommu_register_group(tbl, pci_domain_nr(pe->pbus), pe->pe_number); | ||
| 723 | 724 | ||
| 724 | if (pe->pdev) | 725 | if (pe->pdev) |
| 725 | set_iommu_table_base(&pe->pdev->dev, tbl); | 726 | set_iommu_table_base(&pe->pdev->dev, tbl); |
diff --git a/arch/powerpc/platforms/powernv/rng.c b/arch/powerpc/platforms/powernv/rng.c index 8844628915dc..1cb160dc1609 100644 --- a/arch/powerpc/platforms/powernv/rng.c +++ b/arch/powerpc/platforms/powernv/rng.c | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | #include <asm/io.h> | 19 | #include <asm/io.h> |
| 20 | #include <asm/prom.h> | 20 | #include <asm/prom.h> |
| 21 | #include <asm/machdep.h> | 21 | #include <asm/machdep.h> |
| 22 | #include <asm/smp.h> | ||
| 22 | 23 | ||
| 23 | 24 | ||
| 24 | struct powernv_rng { | 25 | struct powernv_rng { |
diff --git a/arch/powerpc/platforms/pseries/eeh_pseries.c b/arch/powerpc/platforms/pseries/eeh_pseries.c index 7fbc25b1813f..ccb633e077b1 100644 --- a/arch/powerpc/platforms/pseries/eeh_pseries.c +++ b/arch/powerpc/platforms/pseries/eeh_pseries.c | |||
| @@ -189,8 +189,9 @@ static void *pseries_eeh_of_probe(struct device_node *dn, void *flag) | |||
| 189 | struct eeh_dev *edev; | 189 | struct eeh_dev *edev; |
| 190 | struct eeh_pe pe; | 190 | struct eeh_pe pe; |
| 191 | struct pci_dn *pdn = PCI_DN(dn); | 191 | struct pci_dn *pdn = PCI_DN(dn); |
| 192 | const u32 *class_code, *vendor_id, *device_id; | 192 | const __be32 *classp, *vendorp, *devicep; |
| 193 | const u32 *regs; | 193 | u32 class_code; |
| 194 | const __be32 *regs; | ||
| 194 | u32 pcie_flags; | 195 | u32 pcie_flags; |
| 195 | int enable = 0; | 196 | int enable = 0; |
| 196 | int ret; | 197 | int ret; |
| @@ -201,22 +202,24 @@ static void *pseries_eeh_of_probe(struct device_node *dn, void *flag) | |||
| 201 | return NULL; | 202 | return NULL; |
| 202 | 203 | ||
| 203 | /* Retrieve class/vendor/device IDs */ | 204 | /* Retrieve class/vendor/device IDs */ |
| 204 | class_code = of_get_property(dn, "class-code", NULL); | 205 | classp = of_get_property(dn, "class-code", NULL); |
| 205 | vendor_id = of_get_property(dn, "vendor-id", NULL); | 206 | vendorp = of_get_property(dn, "vendor-id", NULL); |
| 206 | device_id = of_get_property(dn, "device-id", NULL); | 207 | devicep = of_get_property(dn, "device-id", NULL); |
| 207 | 208 | ||
| 208 | /* Skip for bad OF node or PCI-ISA bridge */ | 209 | /* Skip for bad OF node or PCI-ISA bridge */ |
| 209 | if (!class_code || !vendor_id || !device_id) | 210 | if (!classp || !vendorp || !devicep) |
| 210 | return NULL; | 211 | return NULL; |
| 211 | if (dn->type && !strcmp(dn->type, "isa")) | 212 | if (dn->type && !strcmp(dn->type, "isa")) |
| 212 | return NULL; | 213 | return NULL; |
| 213 | 214 | ||
| 215 | class_code = of_read_number(classp, 1); | ||
| 216 | |||
| 214 | /* | 217 | /* |
| 215 | * Update class code and mode of eeh device. We need | 218 | * Update class code and mode of eeh device. We need |
| 216 | * correctly reflects that current device is root port | 219 | * correctly reflects that current device is root port |
| 217 | * or PCIe switch downstream port. | 220 | * or PCIe switch downstream port. |
| 218 | */ | 221 | */ |
| 219 | edev->class_code = *class_code; | 222 | edev->class_code = class_code; |
| 220 | edev->pcie_cap = pseries_eeh_find_cap(dn, PCI_CAP_ID_EXP); | 223 | edev->pcie_cap = pseries_eeh_find_cap(dn, PCI_CAP_ID_EXP); |
| 221 | edev->mode &= 0xFFFFFF00; | 224 | edev->mode &= 0xFFFFFF00; |
| 222 | if ((edev->class_code >> 8) == PCI_CLASS_BRIDGE_PCI) { | 225 | if ((edev->class_code >> 8) == PCI_CLASS_BRIDGE_PCI) { |
| @@ -243,12 +246,12 @@ static void *pseries_eeh_of_probe(struct device_node *dn, void *flag) | |||
| 243 | /* Initialize the fake PE */ | 246 | /* Initialize the fake PE */ |
| 244 | memset(&pe, 0, sizeof(struct eeh_pe)); | 247 | memset(&pe, 0, sizeof(struct eeh_pe)); |
| 245 | pe.phb = edev->phb; | 248 | pe.phb = edev->phb; |
| 246 | pe.config_addr = regs[0]; | 249 | pe.config_addr = of_read_number(regs, 1); |
| 247 | 250 | ||
| 248 | /* Enable EEH on the device */ | 251 | /* Enable EEH on the device */ |
| 249 | ret = eeh_ops->set_option(&pe, EEH_OPT_ENABLE); | 252 | ret = eeh_ops->set_option(&pe, EEH_OPT_ENABLE); |
| 250 | if (!ret) { | 253 | if (!ret) { |
| 251 | edev->config_addr = regs[0]; | 254 | edev->config_addr = of_read_number(regs, 1); |
| 252 | /* Retrieve PE address */ | 255 | /* Retrieve PE address */ |
| 253 | edev->pe_config_addr = eeh_ops->get_pe_addr(&pe); | 256 | edev->pe_config_addr = eeh_ops->get_pe_addr(&pe); |
| 254 | pe.addr = edev->pe_config_addr; | 257 | pe.addr = edev->pe_config_addr; |
diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c index 356bc75ca74f..4fca3def9db9 100644 --- a/arch/powerpc/platforms/pseries/lpar.c +++ b/arch/powerpc/platforms/pseries/lpar.c | |||
| @@ -245,6 +245,23 @@ static void pSeries_lpar_hptab_clear(void) | |||
| 245 | &(ptes[j].pteh), &(ptes[j].ptel)); | 245 | &(ptes[j].pteh), &(ptes[j].ptel)); |
| 246 | } | 246 | } |
| 247 | } | 247 | } |
| 248 | |||
| 249 | #ifdef __LITTLE_ENDIAN__ | ||
| 250 | /* Reset exceptions to big endian */ | ||
| 251 | if (firmware_has_feature(FW_FEATURE_SET_MODE)) { | ||
| 252 | long rc; | ||
| 253 | |||
| 254 | rc = pseries_big_endian_exceptions(); | ||
| 255 | /* | ||
| 256 | * At this point it is unlikely panic() will get anything | ||
| 257 | * out to the user, but at least this will stop us from | ||
| 258 | * continuing on further and creating an even more | ||
| 259 | * difficult to debug situation. | ||
| 260 | */ | ||
| 261 | if (rc) | ||
| 262 | panic("Could not enable big endian exceptions"); | ||
| 263 | } | ||
| 264 | #endif | ||
| 248 | } | 265 | } |
| 249 | 266 | ||
| 250 | /* | 267 | /* |
diff --git a/arch/powerpc/platforms/pseries/rng.c b/arch/powerpc/platforms/pseries/rng.c index a702f1c08242..72a102758d4e 100644 --- a/arch/powerpc/platforms/pseries/rng.c +++ b/arch/powerpc/platforms/pseries/rng.c | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #include <linux/of.h> | 13 | #include <linux/of.h> |
| 14 | #include <asm/archrandom.h> | 14 | #include <asm/archrandom.h> |
| 15 | #include <asm/machdep.h> | 15 | #include <asm/machdep.h> |
| 16 | #include <asm/plpar_wrappers.h> | ||
| 16 | 17 | ||
| 17 | 18 | ||
| 18 | static int pseries_get_random_long(unsigned long *v) | 19 | static int pseries_get_random_long(unsigned long *v) |
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c index 1f97e2b87a62..c1f190858701 100644 --- a/arch/powerpc/platforms/pseries/setup.c +++ b/arch/powerpc/platforms/pseries/setup.c | |||
| @@ -442,6 +442,32 @@ static void pSeries_machine_kexec(struct kimage *image) | |||
| 442 | } | 442 | } |
| 443 | #endif | 443 | #endif |
| 444 | 444 | ||
| 445 | #ifdef __LITTLE_ENDIAN__ | ||
| 446 | long pseries_big_endian_exceptions(void) | ||
| 447 | { | ||
| 448 | long rc; | ||
| 449 | |||
| 450 | while (1) { | ||
| 451 | rc = enable_big_endian_exceptions(); | ||
| 452 | if (!H_IS_LONG_BUSY(rc)) | ||
| 453 | return rc; | ||
| 454 | mdelay(get_longbusy_msecs(rc)); | ||
| 455 | } | ||
| 456 | } | ||
| 457 | |||
| 458 | static long pseries_little_endian_exceptions(void) | ||
| 459 | { | ||
| 460 | long rc; | ||
| 461 | |||
| 462 | while (1) { | ||
| 463 | rc = enable_little_endian_exceptions(); | ||
| 464 | if (!H_IS_LONG_BUSY(rc)) | ||
| 465 | return rc; | ||
| 466 | mdelay(get_longbusy_msecs(rc)); | ||
| 467 | } | ||
| 468 | } | ||
| 469 | #endif | ||
| 470 | |||
| 445 | static void __init pSeries_setup_arch(void) | 471 | static void __init pSeries_setup_arch(void) |
| 446 | { | 472 | { |
| 447 | panic_timeout = 10; | 473 | panic_timeout = 10; |
| @@ -698,6 +724,22 @@ static int __init pSeries_probe(void) | |||
| 698 | /* Now try to figure out if we are running on LPAR */ | 724 | /* Now try to figure out if we are running on LPAR */ |
| 699 | of_scan_flat_dt(pseries_probe_fw_features, NULL); | 725 | of_scan_flat_dt(pseries_probe_fw_features, NULL); |
| 700 | 726 | ||
| 727 | #ifdef __LITTLE_ENDIAN__ | ||
| 728 | if (firmware_has_feature(FW_FEATURE_SET_MODE)) { | ||
| 729 | long rc; | ||
| 730 | /* | ||
| 731 | * Tell the hypervisor that we want our exceptions to | ||
| 732 | * be taken in little endian mode. If this fails we don't | ||
| 733 | * want to use BUG() because it will trigger an exception. | ||
| 734 | */ | ||
| 735 | rc = pseries_little_endian_exceptions(); | ||
| 736 | if (rc) { | ||
| 737 | ppc_md.progress("H_SET_MODE LE exception fail", 0); | ||
| 738 | panic("Could not enable little endian exceptions"); | ||
| 739 | } | ||
| 740 | } | ||
| 741 | #endif | ||
| 742 | |||
| 701 | if (firmware_has_feature(FW_FEATURE_LPAR)) | 743 | if (firmware_has_feature(FW_FEATURE_LPAR)) |
| 702 | hpte_init_lpar(); | 744 | hpte_init_lpar(); |
| 703 | else | 745 | else |
diff --git a/arch/powerpc/platforms/wsp/chroma.c b/arch/powerpc/platforms/wsp/chroma.c index 8ef53bc2e70e..aaa46b353715 100644 --- a/arch/powerpc/platforms/wsp/chroma.c +++ b/arch/powerpc/platforms/wsp/chroma.c | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include <linux/of.h> | 15 | #include <linux/of.h> |
| 16 | #include <linux/smp.h> | 16 | #include <linux/smp.h> |
| 17 | #include <linux/time.h> | 17 | #include <linux/time.h> |
| 18 | #include <linux/of_fdt.h> | ||
| 18 | 19 | ||
| 19 | #include <asm/machdep.h> | 20 | #include <asm/machdep.h> |
| 20 | #include <asm/udbg.h> | 21 | #include <asm/udbg.h> |
diff --git a/arch/powerpc/platforms/wsp/h8.c b/arch/powerpc/platforms/wsp/h8.c index d18e6cc19df3..a3c87f395750 100644 --- a/arch/powerpc/platforms/wsp/h8.c +++ b/arch/powerpc/platforms/wsp/h8.c | |||
| @@ -10,6 +10,7 @@ | |||
| 10 | #include <linux/kernel.h> | 10 | #include <linux/kernel.h> |
| 11 | #include <linux/of.h> | 11 | #include <linux/of.h> |
| 12 | #include <linux/io.h> | 12 | #include <linux/io.h> |
| 13 | #include <linux/of_address.h> | ||
| 13 | 14 | ||
| 14 | #include "wsp.h" | 15 | #include "wsp.h" |
| 15 | 16 | ||
diff --git a/arch/powerpc/platforms/wsp/ics.c b/arch/powerpc/platforms/wsp/ics.c index 2d3b1dd9571d..9cd92e645028 100644 --- a/arch/powerpc/platforms/wsp/ics.c +++ b/arch/powerpc/platforms/wsp/ics.c | |||
| @@ -18,6 +18,8 @@ | |||
| 18 | #include <linux/smp.h> | 18 | #include <linux/smp.h> |
| 19 | #include <linux/spinlock.h> | 19 | #include <linux/spinlock.h> |
| 20 | #include <linux/types.h> | 20 | #include <linux/types.h> |
| 21 | #include <linux/of_address.h> | ||
| 22 | #include <linux/of_irq.h> | ||
| 21 | 23 | ||
| 22 | #include <asm/io.h> | 24 | #include <asm/io.h> |
| 23 | #include <asm/irq.h> | 25 | #include <asm/irq.h> |
diff --git a/arch/powerpc/platforms/wsp/opb_pic.c b/arch/powerpc/platforms/wsp/opb_pic.c index cb565bf93650..3f6729807938 100644 --- a/arch/powerpc/platforms/wsp/opb_pic.c +++ b/arch/powerpc/platforms/wsp/opb_pic.c | |||
| @@ -15,6 +15,8 @@ | |||
| 15 | #include <linux/of.h> | 15 | #include <linux/of.h> |
| 16 | #include <linux/slab.h> | 16 | #include <linux/slab.h> |
| 17 | #include <linux/time.h> | 17 | #include <linux/time.h> |
| 18 | #include <linux/of_address.h> | ||
| 19 | #include <linux/of_irq.h> | ||
| 18 | 20 | ||
| 19 | #include <asm/reg_a2.h> | 21 | #include <asm/reg_a2.h> |
| 20 | #include <asm/irq.h> | 22 | #include <asm/irq.h> |
diff --git a/arch/powerpc/platforms/wsp/psr2.c b/arch/powerpc/platforms/wsp/psr2.c index 508ec8282b96..a87b414c766a 100644 --- a/arch/powerpc/platforms/wsp/psr2.c +++ b/arch/powerpc/platforms/wsp/psr2.c | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include <linux/of.h> | 15 | #include <linux/of.h> |
| 16 | #include <linux/smp.h> | 16 | #include <linux/smp.h> |
| 17 | #include <linux/time.h> | 17 | #include <linux/time.h> |
| 18 | #include <linux/of_fdt.h> | ||
| 18 | 19 | ||
| 19 | #include <asm/machdep.h> | 20 | #include <asm/machdep.h> |
| 20 | #include <asm/udbg.h> | 21 | #include <asm/udbg.h> |
diff --git a/arch/powerpc/platforms/wsp/scom_wsp.c b/arch/powerpc/platforms/wsp/scom_wsp.c index 8928507affea..6538b4de34fc 100644 --- a/arch/powerpc/platforms/wsp/scom_wsp.c +++ b/arch/powerpc/platforms/wsp/scom_wsp.c | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include <linux/of.h> | 14 | #include <linux/of.h> |
| 15 | #include <linux/spinlock.h> | 15 | #include <linux/spinlock.h> |
| 16 | #include <linux/types.h> | 16 | #include <linux/types.h> |
| 17 | #include <linux/of_address.h> | ||
| 17 | 18 | ||
| 18 | #include <asm/cputhreads.h> | 19 | #include <asm/cputhreads.h> |
| 19 | #include <asm/reg_a2.h> | 20 | #include <asm/reg_a2.h> |
diff --git a/arch/powerpc/platforms/wsp/wsp.c b/arch/powerpc/platforms/wsp/wsp.c index ddb6efe88914..58cd1f00e1ef 100644 --- a/arch/powerpc/platforms/wsp/wsp.c +++ b/arch/powerpc/platforms/wsp/wsp.c | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #include <linux/smp.h> | 13 | #include <linux/smp.h> |
| 14 | #include <linux/delay.h> | 14 | #include <linux/delay.h> |
| 15 | #include <linux/time.h> | 15 | #include <linux/time.h> |
| 16 | #include <linux/of_address.h> | ||
| 16 | 17 | ||
| 17 | #include <asm/scom.h> | 18 | #include <asm/scom.h> |
| 18 | 19 | ||
diff --git a/arch/powerpc/sysdev/ppc4xx_ocm.c b/arch/powerpc/sysdev/ppc4xx_ocm.c index b7c43453236d..85d9e37f5ccb 100644 --- a/arch/powerpc/sysdev/ppc4xx_ocm.c +++ b/arch/powerpc/sysdev/ppc4xx_ocm.c | |||
| @@ -339,7 +339,7 @@ void *ppc4xx_ocm_alloc(phys_addr_t *phys, int size, int align, | |||
| 339 | if (IS_ERR_VALUE(offset)) | 339 | if (IS_ERR_VALUE(offset)) |
| 340 | continue; | 340 | continue; |
| 341 | 341 | ||
| 342 | ocm_blk = kzalloc(sizeof(struct ocm_block *), GFP_KERNEL); | 342 | ocm_blk = kzalloc(sizeof(struct ocm_block), GFP_KERNEL); |
| 343 | if (!ocm_blk) { | 343 | if (!ocm_blk) { |
| 344 | printk(KERN_ERR "PPC4XX OCM: could not allocate ocm block"); | 344 | printk(KERN_ERR "PPC4XX OCM: could not allocate ocm block"); |
| 345 | rh_free(ocm_reg->rh, offset); | 345 | rh_free(ocm_reg->rh, offset); |
