mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-11-26 03:24:10 +08:00
powerpc updates for 4.3
- Support "hybrid" iommu/direct DMA ops for coherent_mask < dma_mask from Benjamin Herrenschmidt - EEH fixes for SRIOV from Gavin - Introduce rtas_get_sensor_fast() for IRQ handlers from Thomas Huth - Use hardware RNG for arch_get_random_seed_* not arch_get_random_* from Paul Mackerras - Seccomp filter support from Michael Ellerman - opal_cec_reboot2() handling for HMIs & machine checks from Mahesh Salgaonkar - Add powerpc timebase as a trace clock source from Naveen N. Rao - Misc cleanups in the xmon, signal & SLB code from Anshuman Khandual - Add an inline function to update POWER8 HID0 from Gautham R. Shenoy - Fix pte_pagesize_index() crash on 4K w/64K hash from Michael Ellerman - Drop support for 64K local store on 4K kernels from Michael Ellerman - move dma_get_required_mask() from pnv_phb to pci_controller_ops from Andrew Donnellan - Initialize distance lookup table from drconf path from Nikunj A Dadhania - Enable RTC class support from Vaibhav Jain - Disable automatically blocked PCI config from Gavin Shan - Add LEDs driver for PowerNV platform from Vasant Hegde - Fix endianness issues in the HVSI driver from Laurent Dufour - Kexec endian fixes from Samuel Mendoza-Jonas - Fix corrupted pdn list from Gavin Shan - Fix fenced PHB caused by eeh_slot_error_detail() from Gavin Shan - Freescale updates from Scott: Highlights include 32-bit memcpy/memset optimizations, checksum optimizations, 85xx config fragments and updates, device tree updates, e6500 fixes for non-SMP, and misc cleanup and minor fixes. - A ton of cxl updates & fixes: - Add explicit precision specifiers from Rasmus Villemoes - use more common format specifier from Rasmus Villemoes - Destroy cxl_adapter_idr on module_exit from Johannes Thumshirn - Destroy afu->contexts_idr on release of an afu from Johannes Thumshirn - Compile with -Werror from Daniel Axtens - EEH support from Daniel Axtens - Plug irq_bitmap getting leaked in cxl_context from Vaibhav Jain - Add alternate MMIO error handling from Ian Munsie - Allow release of contexts which have been OPENED but not STARTED from Andrew Donnellan - Remove use of macro DEFINE_PCI_DEVICE_TABLE from Vaishali Thakkar - Release irqs if memory allocation fails from Vaibhav Jain - Remove racy attempt to force EEH invocation in reset from Daniel Axtens - Fix + cleanup error paths in cxl_dev_context_init from Ian Munsie - Fix force unmapping mmaps of contexts allocated through the kernel api from Ian Munsie - Set up and enable PSL Timebase from Philippe Bergheaud -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJV5+GzAAoJEFHr6jzI4aWA0iAP/jcd0kNaNBzLgcDKKygKdgz4 xn4EWu81vfMfZYWesb0ATrjlH0hLsRxSXoFUqUMhtJTa5kNAoCIaz/M8WBALS50h aT+i7br4WEU2j2FcaMyP3iAZx/2hl+2utODJSHPRWPkec1fUDBfEyBf++e520RWM HUQGIGZXh8yq7KMA96Pwhsvls9vOB8hS2UdU/NS8ff3J5jFvXC1/WmF2qfzJBS1V 8iHyz26Jl8+dJ+et7iC2oD5XQAjIH1oJgOyPVPBzAQttfi8RjuVzRA30TfPBAUwI lC9nlmPy6bCe4kiQYWVB1z7GegHyW/9vkeuMj/u8mZbqpaayMEMZmd2C3iNDXNHx i2NSvdln539t4qWYsV2v6lVCfa/ayDHD73Wackj5Dk394tzXnpCPhxNzc2yKEd5v h7vwYc9jBhsbfSCSogaM+gSHJ1APgCidggHJMYYNA2nN2u6V62RpsMB7zp/1+Q2v yqYdD8oYF4Dm21x/ujaNFrlizROD46WS0UqdJ3yP6HAqRYIpRXtibmpECJgt1n5h HjADEci4hQ2UQxdMdp/Q5KZnPTJebBtrZrmkW5r6cZBUaTB5TVkFaEWN44CT/Loh tMNeA3qOBN06CaQS2WL3UUUWpbZq9fSbWuUZ5lWZDb5AOyRxe5eWVYNLkiyIXozY L24l1bYdBhXahnjoS/kc =n9+X -----END PGP SIGNATURE----- Merge tag 'powerpc-4.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux Pull powerpc updates from Michael Ellerman: - support "hybrid" iommu/direct DMA ops for coherent_mask < dma_mask from Benjamin Herrenschmidt - EEH fixes for SRIOV from Gavin - introduce rtas_get_sensor_fast() for IRQ handlers from Thomas Huth - use hardware RNG for arch_get_random_seed_* not arch_get_random_* from Paul Mackerras - seccomp filter support from Michael Ellerman - opal_cec_reboot2() handling for HMIs & machine checks from Mahesh Salgaonkar - add powerpc timebase as a trace clock source from Naveen N. Rao - misc cleanups in the xmon, signal & SLB code from Anshuman Khandual - add an inline function to update POWER8 HID0 from Gautham R. Shenoy - fix pte_pagesize_index() crash on 4K w/64K hash from Michael Ellerman - drop support for 64K local store on 4K kernels from Michael Ellerman - move dma_get_required_mask() from pnv_phb to pci_controller_ops from Andrew Donnellan - initialize distance lookup table from drconf path from Nikunj A Dadhania - enable RTC class support from Vaibhav Jain - disable automatically blocked PCI config from Gavin Shan - add LEDs driver for PowerNV platform from Vasant Hegde - fix endianness issues in the HVSI driver from Laurent Dufour - kexec endian fixes from Samuel Mendoza-Jonas - fix corrupted pdn list from Gavin Shan - fix fenced PHB caused by eeh_slot_error_detail() from Gavin Shan - Freescale updates from Scott: Highlights include 32-bit memcpy/memset optimizations, checksum optimizations, 85xx config fragments and updates, device tree updates, e6500 fixes for non-SMP, and misc cleanup and minor fixes. - a ton of cxl updates & fixes: - add explicit precision specifiers from Rasmus Villemoes - use more common format specifier from Rasmus Villemoes - destroy cxl_adapter_idr on module_exit from Johannes Thumshirn - destroy afu->contexts_idr on release of an afu from Johannes Thumshirn - compile with -Werror from Daniel Axtens - EEH support from Daniel Axtens - plug irq_bitmap getting leaked in cxl_context from Vaibhav Jain - add alternate MMIO error handling from Ian Munsie - allow release of contexts which have been OPENED but not STARTED from Andrew Donnellan - remove use of macro DEFINE_PCI_DEVICE_TABLE from Vaishali Thakkar - release irqs if memory allocation fails from Vaibhav Jain - remove racy attempt to force EEH invocation in reset from Daniel Axtens - fix + cleanup error paths in cxl_dev_context_init from Ian Munsie - fix force unmapping mmaps of contexts allocated through the kernel api from Ian Munsie - set up and enable PSL Timebase from Philippe Bergheaud * tag 'powerpc-4.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: (140 commits) cxl: Set up and enable PSL Timebase cxl: Fix force unmapping mmaps of contexts allocated through the kernel api cxl: Fix + cleanup error paths in cxl_dev_context_init powerpc/eeh: Fix fenced PHB caused by eeh_slot_error_detail() powerpc/pseries: Cleanup on pci_dn_reconfig_notifier() powerpc/pseries: Fix corrupted pdn list powerpc/powernv: Enable LEDS support powerpc/iommu: Set default DMA offset in dma_dev_setup cxl: Remove racy attempt to force EEH invocation in reset cxl: Release irqs if memory allocation fails cxl: Remove use of macro DEFINE_PCI_DEVICE_TABLE powerpc/powernv: Fix mis-merge of OPAL support for LEDS driver powerpc/powernv: Reset HILE before kexec_sequence() powerpc/kexec: Reset secondary cpu endianness before kexec powerpc/hvsi: Fix endianness issues in the HVSI driver leds/powernv: Add driver for PowerNV platform powerpc/powernv: Create LED platform device powerpc/powernv: Add OPAL interfaces for accessing and modifying system LED states powerpc/powernv: Fix the log message when disabling VF cxl: Allow release of contexts which have been OPENED but not STARTED ...
This commit is contained in:
commit
ff474e8ca8
@ -223,3 +223,13 @@ Description: write only
|
||||
Writing 1 will issue a PERST to card which may cause the card
|
||||
to reload the FPGA depending on load_image_on_perst.
|
||||
Users: https://github.com/ibm-capi/libcxl
|
||||
|
||||
What: /sys/class/cxl/<card>/perst_reloads_same_image
|
||||
Date: July 2015
|
||||
Contact: linuxppc-dev@lists.ozlabs.org
|
||||
Description: read/write
|
||||
Trust that when an image is reloaded via PERST, it will not
|
||||
have changed.
|
||||
0 = don't trust, the image may be different (default)
|
||||
1 = trust that the image will not change.
|
||||
Users: https://github.com/ibm-capi/libcxl
|
||||
|
26
Documentation/devicetree/bindings/leds/leds-powernv.txt
Normal file
26
Documentation/devicetree/bindings/leds/leds-powernv.txt
Normal file
@ -0,0 +1,26 @@
|
||||
Device Tree binding for LEDs on IBM Power Systems
|
||||
-------------------------------------------------
|
||||
|
||||
Required properties:
|
||||
- compatible : Should be "ibm,opal-v3-led".
|
||||
- led-mode : Should be "lightpath" or "guidinglight".
|
||||
|
||||
Each location code of FRU/Enclosure must be expressed in the
|
||||
form of a sub-node.
|
||||
|
||||
Required properties for the sub nodes:
|
||||
- led-types : Supported LED types (attention/identify/fault) provided
|
||||
in the form of string array.
|
||||
|
||||
Example:
|
||||
|
||||
leds {
|
||||
compatible = "ibm,opal-v3-led";
|
||||
led-mode = "lightpath";
|
||||
|
||||
U78C9.001.RST0027-P1-C1 {
|
||||
led-types = "identify", "fault";
|
||||
};
|
||||
...
|
||||
...
|
||||
};
|
@ -18,6 +18,8 @@ Properties:
|
||||
interrupt (NAND_EVTER_STAT). If there is only one,
|
||||
that interrupt reports both types of event.
|
||||
|
||||
- little-endian : If this property is absent, the big-endian mode will
|
||||
be in use as default for registers.
|
||||
|
||||
- ranges : Each range corresponds to a single chipselect, and covers
|
||||
the entire access window as configured.
|
||||
@ -34,6 +36,7 @@ Example:
|
||||
#size-cells = <1>;
|
||||
reg = <0x0 0xffe1e000 0 0x2000>;
|
||||
interrupts = <16 2 19 2>;
|
||||
little-endian;
|
||||
|
||||
/* NOR, NAND Flashes and CPLD on board */
|
||||
ranges = <0x0 0x0 0x0 0xee000000 0x02000000
|
||||
|
18
Documentation/devicetree/bindings/powerpc/fsl/scfg.txt
Normal file
18
Documentation/devicetree/bindings/powerpc/fsl/scfg.txt
Normal file
@ -0,0 +1,18 @@
|
||||
Freescale Supplement configuration unit (SCFG)
|
||||
|
||||
SCFG is the supplemental configuration unit, that provides SoC specific
|
||||
configuration and status registers for the chip. Such as getting PEX port
|
||||
status.
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible: should be "fsl,<chip>-scfg"
|
||||
- reg: should contain base address and length of SCFG memory-mapped
|
||||
registers
|
||||
|
||||
Example:
|
||||
|
||||
scfg: global-utilities@fc000 {
|
||||
compatible = "fsl,t1040-scfg";
|
||||
reg = <0xfc000 0x1000>;
|
||||
};
|
@ -346,6 +346,11 @@ of ftrace. Here is a list of some of the key files:
|
||||
x86-tsc: Architectures may define their own clocks. For
|
||||
example, x86 uses its own TSC cycle clock here.
|
||||
|
||||
ppc-tb: This uses the powerpc timebase register value.
|
||||
This is in sync across CPUs and can also be used
|
||||
to correlate events across hypervisor/guest if
|
||||
tb_offset is known.
|
||||
|
||||
To set a clock, simply echo the clock name into this file.
|
||||
|
||||
echo global > trace_clock
|
||||
|
@ -82,6 +82,9 @@ config GENERIC_HWEIGHT
|
||||
bool
|
||||
default y
|
||||
|
||||
config ARCH_HAS_DMA_SET_COHERENT_MASK
|
||||
bool
|
||||
|
||||
config PPC
|
||||
bool
|
||||
default y
|
||||
@ -155,6 +158,8 @@ config PPC
|
||||
select HAVE_PERF_EVENTS_NMI if PPC64
|
||||
select EDAC_SUPPORT
|
||||
select EDAC_ATOMIC_SCRUB
|
||||
select ARCH_HAS_DMA_SET_COHERENT_MASK
|
||||
select HAVE_ARCH_SECCOMP_FILTER
|
||||
|
||||
config GENERIC_CSUM
|
||||
def_bool CPU_LITTLE_ENDIAN
|
||||
@ -514,11 +519,6 @@ config NODES_SPAN_OTHER_NODES
|
||||
def_bool y
|
||||
depends on NEED_MULTIPLE_NODES
|
||||
|
||||
config PPC_HAS_HASH_64K
|
||||
bool
|
||||
depends on PPC64
|
||||
default n
|
||||
|
||||
config STDBINUTILS
|
||||
bool "Using standard binutils settings"
|
||||
depends on 44x
|
||||
@ -560,16 +560,16 @@ config PPC_4K_PAGES
|
||||
bool "4k page size"
|
||||
|
||||
config PPC_16K_PAGES
|
||||
bool "16k page size" if 44x || PPC_8xx
|
||||
bool "16k page size"
|
||||
depends on 44x || PPC_8xx
|
||||
|
||||
config PPC_64K_PAGES
|
||||
bool "64k page size" if 44x || PPC_STD_MMU_64 || PPC_BOOK3E_64
|
||||
depends on !PPC_FSL_BOOK3E
|
||||
select PPC_HAS_HASH_64K if PPC_STD_MMU_64
|
||||
bool "64k page size"
|
||||
depends on !PPC_FSL_BOOK3E && (44x || PPC_STD_MMU_64 || PPC_BOOK3E_64)
|
||||
|
||||
config PPC_256K_PAGES
|
||||
bool "256k page size" if 44x
|
||||
depends on !STDBINUTILS
|
||||
bool "256k page size"
|
||||
depends on 44x && !STDBINUTILS
|
||||
help
|
||||
Make the page size 256k.
|
||||
|
||||
|
@ -288,6 +288,26 @@ PHONY += pseries_le_defconfig
|
||||
pseries_le_defconfig:
|
||||
$(call merge_into_defconfig,pseries_defconfig,le)
|
||||
|
||||
PHONY += mpc85xx_defconfig
|
||||
mpc85xx_defconfig:
|
||||
$(call merge_into_defconfig,mpc85xx_basic_defconfig,\
|
||||
85xx-32bit 85xx-hw fsl-emb-nonhw)
|
||||
|
||||
PHONY += mpc85xx_smp_defconfig
|
||||
mpc85xx_smp_defconfig:
|
||||
$(call merge_into_defconfig,mpc85xx_basic_defconfig,\
|
||||
85xx-32bit 85xx-smp 85xx-hw fsl-emb-nonhw)
|
||||
|
||||
PHONY += corenet32_smp_defconfig
|
||||
corenet32_smp_defconfig:
|
||||
$(call merge_into_defconfig,corenet_basic_defconfig,\
|
||||
85xx-32bit 85xx-smp 85xx-hw fsl-emb-nonhw)
|
||||
|
||||
PHONY += corenet64_smp_defconfig
|
||||
corenet64_smp_defconfig:
|
||||
$(call merge_into_defconfig,corenet_basic_defconfig,\
|
||||
85xx-64bit 85xx-smp altivec 85xx-hw fsl-emb-nonhw)
|
||||
|
||||
define archhelp
|
||||
@echo '* zImage - Build default images selected by kernel config'
|
||||
@echo ' zImage.* - Compressed kernel image (arch/$(ARCH)/boot/zImage.*)'
|
||||
|
@ -175,7 +175,7 @@
|
||||
|
||||
/include/ "pq3-gpio-0.dtsi"
|
||||
|
||||
display@10000 {
|
||||
display: display@10000 {
|
||||
compatible = "fsl,diu", "fsl,p1022-diu";
|
||||
reg = <0x10000 1000>;
|
||||
interrupts = <64 2 0 0>;
|
||||
|
@ -50,6 +50,8 @@
|
||||
pci0 = &pci0;
|
||||
pci1 = &pci1;
|
||||
pci2 = &pci2;
|
||||
vga = &display;
|
||||
display = &display;
|
||||
};
|
||||
|
||||
cpus {
|
||||
|
@ -484,6 +484,11 @@
|
||||
reg = <0xea000 0x4000>;
|
||||
};
|
||||
|
||||
scfg: global-utilities@fc000 {
|
||||
compatible = "fsl,t1040-scfg";
|
||||
reg = <0xfc000 0x1000>;
|
||||
};
|
||||
|
||||
/include/ "elo3-dma-0.dtsi"
|
||||
/include/ "elo3-dma-1.dtsi"
|
||||
/include/ "qoriq-espi-0.dtsi"
|
||||
|
@ -60,7 +60,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "fsl,ifc-nand";
|
||||
reg = <0x2 0x0 0x10000>;
|
||||
reg = <0x1 0x0 0x10000>;
|
||||
};
|
||||
};
|
||||
|
||||
@ -99,6 +99,17 @@
|
||||
};
|
||||
|
||||
i2c@118100 {
|
||||
current-sensor@40 {
|
||||
compatible = "ti,ina220";
|
||||
reg = <0x40>;
|
||||
shunt-resistor = <1000>;
|
||||
};
|
||||
|
||||
current-sensor@41 {
|
||||
compatible = "ti,ina220";
|
||||
reg = <0x41>;
|
||||
shunt-resistor = <1000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -114,6 +114,12 @@
|
||||
reg = <0x4c>;
|
||||
};
|
||||
|
||||
current-sensor@40 {
|
||||
compatible = "ti,ina220";
|
||||
reg = <0x40>;
|
||||
shunt-resistor = <1000>;
|
||||
};
|
||||
|
||||
eeprom@50 {
|
||||
compatible = "atmel,24c256";
|
||||
reg = <0x50>;
|
||||
|
46
arch/powerpc/boot/dts/t1040d4rdb.dts
Normal file
46
arch/powerpc/boot/dts/t1040d4rdb.dts
Normal file
@ -0,0 +1,46 @@
|
||||
/*
|
||||
* T1040D4RDB Device Tree Source
|
||||
*
|
||||
* Copyright 2015 Freescale Semiconductor Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Freescale Semiconductor nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
*
|
||||
* ALTERNATIVELY, this software may be distributed under the terms of the
|
||||
* GNU General Public License ("GPL") as published by the Free Software
|
||||
* Foundation, either version 2 of that License or (at your option) any
|
||||
* later version.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor "AS IS" AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/include/ "fsl/t104xsi-pre.dtsi"
|
||||
/include/ "t104xd4rdb.dtsi"
|
||||
|
||||
/ {
|
||||
model = "fsl,T1040D4RDB";
|
||||
compatible = "fsl,T1040D4RDB";
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
interrupt-parent = <&mpic>;
|
||||
};
|
||||
|
||||
/include/ "fsl/t1040si-post.dtsi"
|
53
arch/powerpc/boot/dts/t1042d4rdb.dts
Normal file
53
arch/powerpc/boot/dts/t1042d4rdb.dts
Normal file
@ -0,0 +1,53 @@
|
||||
/*
|
||||
* T1042D4RDB Device Tree Source
|
||||
*
|
||||
* Copyright 2015 Freescale Semiconductor Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Freescale Semiconductor nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
*
|
||||
* ALTERNATIVELY, this software may be distributed under the terms of the
|
||||
* GNU General Public License ("GPL") as published by the Free Software
|
||||
* Foundation, either version 2 of that License or (at your option) any
|
||||
* later version.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor "AS IS" AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/include/ "fsl/t104xsi-pre.dtsi"
|
||||
/include/ "t104xd4rdb.dtsi"
|
||||
|
||||
/ {
|
||||
model = "fsl,T1042D4RDB";
|
||||
compatible = "fsl,T1042D4RDB";
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
interrupt-parent = <&mpic>;
|
||||
|
||||
ifc: localbus@ffe124000 {
|
||||
cpld@3,0 {
|
||||
compatible = "fsl,t1040d4rdb-cpld",
|
||||
"fsl,deepsleep-cpld";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
/include/ "fsl/t1040si-post.dtsi"
|
205
arch/powerpc/boot/dts/t104xd4rdb.dtsi
Normal file
205
arch/powerpc/boot/dts/t104xd4rdb.dtsi
Normal file
@ -0,0 +1,205 @@
|
||||
/*
|
||||
* T1040D4RDB/T1042D4RDB Device Tree Source
|
||||
*
|
||||
* Copyright 2015 Freescale Semiconductor Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Freescale Semiconductor nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
*
|
||||
* ALTERNATIVELY, this software may be distributed under the terms of the
|
||||
* GNU General Public License ("GPL") as published by the Free Software
|
||||
* Foundation, either version 2 of that License or (at your option) any
|
||||
* later version.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor "AS IS" AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/ {
|
||||
reserved-memory {
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
ranges;
|
||||
|
||||
bman_fbpr: bman-fbpr {
|
||||
size = <0 0x1000000>;
|
||||
alignment = <0 0x1000000>;
|
||||
};
|
||||
qman_fqd: qman-fqd {
|
||||
size = <0 0x400000>;
|
||||
alignment = <0 0x400000>;
|
||||
};
|
||||
qman_pfdr: qman-pfdr {
|
||||
size = <0 0x2000000>;
|
||||
alignment = <0 0x2000000>;
|
||||
};
|
||||
};
|
||||
|
||||
ifc: localbus@ffe124000 {
|
||||
reg = <0xf 0xfe124000 0 0x2000>;
|
||||
ranges = <0 0 0xf 0xe8000000 0x08000000
|
||||
2 0 0xf 0xff800000 0x00010000
|
||||
3 0 0xf 0xffdf0000 0x00008000>;
|
||||
|
||||
nor@0,0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "cfi-flash";
|
||||
reg = <0x0 0x0 0x8000000>;
|
||||
bank-width = <2>;
|
||||
device-width = <1>;
|
||||
};
|
||||
|
||||
nand@2,0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "fsl,ifc-nand";
|
||||
reg = <0x2 0x0 0x10000>;
|
||||
};
|
||||
|
||||
cpld@3,0 {
|
||||
compatible = "fsl,t1040d4rdb-cpld";
|
||||
reg = <3 0 0x300>;
|
||||
};
|
||||
};
|
||||
|
||||
memory {
|
||||
device_type = "memory";
|
||||
};
|
||||
|
||||
dcsr: dcsr@f00000000 {
|
||||
ranges = <0x00000000 0xf 0x00000000 0x01072000>;
|
||||
};
|
||||
|
||||
bportals: bman-portals@ff4000000 {
|
||||
ranges = <0x0 0xf 0xf4000000 0x2000000>;
|
||||
};
|
||||
|
||||
qportals: qman-portals@ff6000000 {
|
||||
ranges = <0x0 0xf 0xf6000000 0x2000000>;
|
||||
};
|
||||
|
||||
soc: soc@ffe000000 {
|
||||
ranges = <0x00000000 0xf 0xfe000000 0x1000000>;
|
||||
reg = <0xf 0xfe000000 0 0x00001000>;
|
||||
|
||||
spi@110000 {
|
||||
flash@0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "micron,n25q512ax3";
|
||||
reg = <0>;
|
||||
/* input clock */
|
||||
spi-max-frequency = <10000000>;
|
||||
};
|
||||
};
|
||||
i2c@118000 {
|
||||
hwmon@4c {
|
||||
compatible = "adi,adt7461";
|
||||
reg = <0x4c>;
|
||||
};
|
||||
|
||||
rtc@68 {
|
||||
compatible = "dallas,ds1337";
|
||||
reg = <0x68>;
|
||||
interrupts = <0x2 0x1 0 0>;
|
||||
};
|
||||
};
|
||||
|
||||
i2c@118100 {
|
||||
mux@77 {
|
||||
/*
|
||||
* Child nodes of mux depend on which i2c
|
||||
* devices are connected via the mini PCI
|
||||
* connector slot1, the mini PCI connector
|
||||
* slot2, the HDMI connector, and the PEX
|
||||
* slot. Systems with such devices attached
|
||||
* should provide a wrapper .dts file that
|
||||
* includes this one, and adds those nodes
|
||||
*/
|
||||
compatible = "nxp,pca9546";
|
||||
reg = <0x77>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
pci0: pcie@ffe240000 {
|
||||
reg = <0xf 0xfe240000 0 0x10000>;
|
||||
ranges = <0x02000000 0 0xe0000000 0xc 0x0 0x0 0x10000000
|
||||
0x01000000 0 0x0 0xf 0xf8000000 0x0 0x00010000>;
|
||||
pcie@0 {
|
||||
ranges = <0x02000000 0 0xe0000000
|
||||
0x02000000 0 0xe0000000
|
||||
0 0x10000000
|
||||
|
||||
0x01000000 0 0x00000000
|
||||
0x01000000 0 0x00000000
|
||||
0 0x00010000>;
|
||||
};
|
||||
};
|
||||
|
||||
pci1: pcie@ffe250000 {
|
||||
reg = <0xf 0xfe250000 0 0x10000>;
|
||||
ranges = <0x02000000 0 0xe0000000 0xc 0x10000000 0 0x10000000
|
||||
0x01000000 0 0 0xf 0xf8010000 0 0x00010000>;
|
||||
pcie@0 {
|
||||
ranges = <0x02000000 0 0xe0000000
|
||||
0x02000000 0 0xe0000000
|
||||
0 0x10000000
|
||||
|
||||
0x01000000 0 0x00000000
|
||||
0x01000000 0 0x00000000
|
||||
0 0x00010000>;
|
||||
};
|
||||
};
|
||||
|
||||
pci2: pcie@ffe260000 {
|
||||
reg = <0xf 0xfe260000 0 0x10000>;
|
||||
ranges = <0x02000000 0 0xe0000000 0xc 0x20000000 0 0x10000000
|
||||
0x01000000 0 0x00000000 0xf 0xf8020000 0 0x00010000>;
|
||||
pcie@0 {
|
||||
ranges = <0x02000000 0 0xe0000000
|
||||
0x02000000 0 0xe0000000
|
||||
0 0x10000000
|
||||
|
||||
0x01000000 0 0x00000000
|
||||
0x01000000 0 0x00000000
|
||||
0 0x00010000>;
|
||||
};
|
||||
};
|
||||
|
||||
pci3: pcie@ffe270000 {
|
||||
reg = <0xf 0xfe270000 0 0x10000>;
|
||||
ranges = <0x02000000 0 0xe0000000 0xc 0x30000000 0 0x10000000
|
||||
0x01000000 0 0x00000000 0xf 0xf8030000 0 0x00010000>;
|
||||
pcie@0 {
|
||||
ranges = <0x02000000 0 0xe0000000
|
||||
0x02000000 0 0xe0000000
|
||||
0 0x10000000
|
||||
|
||||
0x01000000 0 0x00000000
|
||||
0x01000000 0 0x00000000
|
||||
0 0x00010000>;
|
||||
};
|
||||
};
|
||||
};
|
5
arch/powerpc/configs/85xx-32bit.config
Normal file
5
arch/powerpc/configs/85xx-32bit.config
Normal file
@ -0,0 +1,5 @@
|
||||
CONFIG_HIGHMEM=y
|
||||
CONFIG_KEXEC=y
|
||||
CONFIG_PPC_85xx=y
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_PHYS_64BIT=y
|
4
arch/powerpc/configs/85xx-64bit.config
Normal file
4
arch/powerpc/configs/85xx-64bit.config
Normal file
@ -0,0 +1,4 @@
|
||||
CONFIG_MATH_EMULATION=y
|
||||
CONFIG_MATH_EMULATION_HW_UNIMPLEMENTED=y
|
||||
CONFIG_PPC64=y
|
||||
CONFIG_PPC_BOOK3E_64=y
|
142
arch/powerpc/configs/85xx-hw.config
Normal file
142
arch/powerpc/configs/85xx-hw.config
Normal file
@ -0,0 +1,142 @@
|
||||
CONFIG_AQUANTIA_PHY=y
|
||||
CONFIG_AT803X_PHY=y
|
||||
CONFIG_ATA=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_BLK_DEV_SR_VENDOR=y
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
CONFIG_BROADCOM_PHY=y
|
||||
CONFIG_C293_PCIE=y
|
||||
CONFIG_CHR_DEV_SG=y
|
||||
CONFIG_CHR_DEV_ST=y
|
||||
CONFIG_CICADA_PHY=y
|
||||
CONFIG_CLK_QORIQ=y
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM=y
|
||||
CONFIG_CRYPTO_DEV_TALITOS=y
|
||||
CONFIG_DAVICOM_PHY=y
|
||||
CONFIG_DMADEVICES=y
|
||||
CONFIG_E1000E=y
|
||||
CONFIG_E1000=y
|
||||
CONFIG_EDAC_MM_EDAC=y
|
||||
CONFIG_EDAC_MPC85XX=y
|
||||
CONFIG_EDAC=y
|
||||
CONFIG_EEPROM_AT24=y
|
||||
CONFIG_EEPROM_LEGACY=y
|
||||
CONFIG_FB_FSL_DIU=y
|
||||
CONFIG_FS_ENET=y
|
||||
CONFIG_FSL_CORENET_CF=y
|
||||
CONFIG_FSL_DMA=y
|
||||
CONFIG_FSL_HV_MANAGER=y
|
||||
CONFIG_FSL_PQ_MDIO=y
|
||||
CONFIG_FSL_RIO=y
|
||||
CONFIG_FSL_XGMAC_MDIO=y
|
||||
CONFIG_GIANFAR=y
|
||||
CONFIG_GPIO_MPC8XXX=y
|
||||
CONFIG_HID_A4TECH=y
|
||||
CONFIG_HID_APPLE=y
|
||||
CONFIG_HID_BELKIN=y
|
||||
CONFIG_HID_CHERRY=y
|
||||
CONFIG_HID_CHICONY=y
|
||||
CONFIG_HID_CYPRESS=y
|
||||
CONFIG_HID_EZKEY=y
|
||||
CONFIG_HID_GYRATION=y
|
||||
CONFIG_HID_LOGITECH=y
|
||||
CONFIG_HID_MICROSOFT=y
|
||||
CONFIG_HID_MONTEREY=y
|
||||
CONFIG_HID_PANTHERLORD=y
|
||||
CONFIG_HID_PETALYNX=y
|
||||
CONFIG_HID_SAMSUNG=y
|
||||
CONFIG_HID_SUNPLUS=y
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_I2C_CPM=m
|
||||
CONFIG_I2C_MPC=y
|
||||
CONFIG_I2C_MUX_PCA954x=y
|
||||
CONFIG_I2C_MUX=y
|
||||
CONFIG_I2C=y
|
||||
CONFIG_IGB=y
|
||||
CONFIG_INPUT_FF_MEMLESS=m
|
||||
# CONFIG_INPUT_KEYBOARD is not set
|
||||
# CONFIG_INPUT_MOUSEDEV is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_MARVELL_PHY=y
|
||||
CONFIG_MDIO_BUS_MUX_GPIO=y
|
||||
CONFIG_MDIO_BUS_MUX_MMIOREG=y
|
||||
CONFIG_MMC_SDHCI_OF_ESDHC=y
|
||||
CONFIG_MMC_SDHCI_PLTFM=y
|
||||
CONFIG_MMC_SDHCI=y
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_CFI_AMDSTD=y
|
||||
CONFIG_MTD_CFI_INTELEXT=y
|
||||
CONFIG_MTD_CFI=y
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
CONFIG_MTD_M25P80=y
|
||||
CONFIG_MTD_NAND_FSL_ELBC=y
|
||||
CONFIG_MTD_NAND_FSL_IFC=y
|
||||
CONFIG_MTD_NAND=y
|
||||
CONFIG_MTD_PHYSMAP_OF=y
|
||||
CONFIG_MTD_PHYSMAP=y
|
||||
CONFIG_MTD_PLATRAM=y
|
||||
CONFIG_MTD_SPI_NOR=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NVRAM=y
|
||||
CONFIG_PATA_ALI=y
|
||||
CONFIG_PATA_SIL680=y
|
||||
CONFIG_PATA_VIA=y
|
||||
# CONFIG_PCIEASPM is not set
|
||||
CONFIG_PCIEPORTBUS=y
|
||||
CONFIG_PCI_MSI=y
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PPC_EPAPR_HV_BYTECHAN=y
|
||||
# CONFIG_PPC_OF_BOOT_TRAMPOLINE is not set
|
||||
CONFIG_QE_GPIO=y
|
||||
CONFIG_QUICC_ENGINE=y
|
||||
CONFIG_RAPIDIO=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_CMOS=y
|
||||
CONFIG_RTC_DRV_DS1307=y
|
||||
CONFIG_RTC_DRV_DS1374=y
|
||||
CONFIG_RTC_DRV_DS3232=y
|
||||
CONFIG_SATA_AHCI=y
|
||||
CONFIG_SATA_FSL=y
|
||||
CONFIG_SATA_SIL24=y
|
||||
CONFIG_SATA_SIL=y
|
||||
CONFIG_SCSI_LOGGING=y
|
||||
CONFIG_SCSI_SYM53C8XX_2=y
|
||||
CONFIG_SENSORS_INA2XX=y
|
||||
CONFIG_SENSORS_LM90=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_DETECT_IRQ=y
|
||||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=6
|
||||
CONFIG_SERIAL_8250_RSA=y
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=6
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_QE=m
|
||||
CONFIG_SERIO_LIBPS2=y
|
||||
# CONFIG_SND_DRIVERS is not set
|
||||
CONFIG_SND_INTEL8X0=y
|
||||
CONFIG_SND_POWERPC_SOC=y
|
||||
# CONFIG_SND_PPC is not set
|
||||
CONFIG_SND_SOC=y
|
||||
# CONFIG_SND_SUPPORT_OLD_API is not set
|
||||
# CONFIG_SND_USB is not set
|
||||
CONFIG_SND=y
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SPI_FSL_ESPI=y
|
||||
CONFIG_SPI_FSL_SPI=y
|
||||
CONFIG_SPI_GPIO=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_TERANETICS_PHY=y
|
||||
CONFIG_UCC_GETH=y
|
||||
CONFIG_USB_EHCI_FSL=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_HID=m
|
||||
CONFIG_USB_MON=y
|
||||
CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
|
||||
CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB=y
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_VIRT_DRIVERS=y
|
||||
CONFIG_VITESSE_PHY=y
|
2
arch/powerpc/configs/85xx-smp.config
Normal file
2
arch/powerpc/configs/85xx-smp.config
Normal file
@ -0,0 +1,2 @@
|
||||
CONFIG_NR_CPUS=24
|
||||
CONFIG_SMP=y
|
1
arch/powerpc/configs/altivec.config
Normal file
1
arch/powerpc/configs/altivec.config
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_ALTIVEC=y
|
@ -1,185 +0,0 @@
|
||||
CONFIG_PPC_85xx=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_AUDIT=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
CONFIG_EMBEDDED=y
|
||||
CONFIG_PERF_EVENTS=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
CONFIG_MODVERSIONS=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_MAC_PARTITION=y
|
||||
CONFIG_CORENET_GENERIC=y
|
||||
CONFIG_HIGHMEM=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
CONFIG_BINFMT_MISC=m
|
||||
CONFIG_KEXEC=y
|
||||
CONFIG_FORCE_MAX_ZONEORDER=13
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCIEPORTBUS=y
|
||||
# CONFIG_PCIEASPM is not set
|
||||
CONFIG_PCI_MSI=y
|
||||
CONFIG_RAPIDIO=y
|
||||
CONFIG_FSL_RIO=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_XFRM_USER=y
|
||||
CONFIG_XFRM_SUB_POLICY=y
|
||||
CONFIG_XFRM_STATISTICS=y
|
||||
CONFIG_NET_KEY=y
|
||||
CONFIG_NET_KEY_MIGRATE=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_ADVANCED_ROUTER=y
|
||||
CONFIG_IP_MULTIPLE_TABLES=y
|
||||
CONFIG_IP_ROUTE_MULTIPATH=y
|
||||
CONFIG_IP_ROUTE_VERBOSE=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
CONFIG_IP_PNP_RARP=y
|
||||
CONFIG_NET_IPIP=y
|
||||
CONFIG_IP_MROUTE=y
|
||||
CONFIG_IP_PIMSM_V1=y
|
||||
CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_INET_AH=y
|
||||
CONFIG_INET_ESP=y
|
||||
CONFIG_INET_IPCOMP=y
|
||||
# CONFIG_INET_LRO is not set
|
||||
CONFIG_IPV6=y
|
||||
CONFIG_IP_SCTP=m
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_DEVTMPFS_MOUNT=y
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_CFI=y
|
||||
CONFIG_MTD_CFI_INTELEXT=y
|
||||
CONFIG_MTD_CFI_AMDSTD=y
|
||||
CONFIG_MTD_PHYSMAP_OF=y
|
||||
CONFIG_MTD_NAND=y
|
||||
CONFIG_MTD_NAND_FSL_ELBC=y
|
||||
CONFIG_MTD_NAND_FSL_IFC=y
|
||||
CONFIG_MTD_SPI_NOR=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=131072
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_CHR_DEV_ST=y
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
CONFIG_CHR_DEV_SG=y
|
||||
CONFIG_SCSI_LOGGING=y
|
||||
CONFIG_SCSI_SYM53C8XX_2=y
|
||||
CONFIG_ATA=y
|
||||
CONFIG_SATA_AHCI=y
|
||||
CONFIG_SATA_FSL=y
|
||||
CONFIG_SATA_SIL24=y
|
||||
CONFIG_SATA_SIL=y
|
||||
CONFIG_PATA_SIL680=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_FSL_PQ_MDIO=y
|
||||
CONFIG_FSL_XGMAC_MDIO=y
|
||||
CONFIG_E1000=y
|
||||
CONFIG_E1000E=y
|
||||
CONFIG_AT803X_PHY=y
|
||||
CONFIG_VITESSE_PHY=y
|
||||
CONFIG_FIXED_PHY=y
|
||||
CONFIG_MDIO_BUS_MUX_GPIO=y
|
||||
CONFIG_MDIO_BUS_MUX_MMIOREG=y
|
||||
# CONFIG_INPUT_MOUSEDEV is not set
|
||||
# CONFIG_INPUT_KEYBOARD is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_SERIO_LIBPS2=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_PPC_EPAPR_HV_BYTECHAN=y
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||
CONFIG_SERIAL_8250_DETECT_IRQ=y
|
||||
CONFIG_SERIAL_8250_RSA=y
|
||||
CONFIG_NVRAM=y
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_I2C_MPC=y
|
||||
CONFIG_I2C_MUX=y
|
||||
CONFIG_I2C_MUX_PCA954x=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_GPIO=y
|
||||
CONFIG_SPI_FSL_SPI=y
|
||||
CONFIG_SPI_FSL_ESPI=y
|
||||
CONFIG_SENSORS_LM90=y
|
||||
CONFIG_SENSORS_INA2XX=y
|
||||
CONFIG_USB_HID=m
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_MON=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_EHCI_FSL=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
|
||||
CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_SDHCI=y
|
||||
CONFIG_EDAC=y
|
||||
CONFIG_EDAC_MM_EDAC=y
|
||||
CONFIG_EDAC_MPC85XX=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_DS1307=y
|
||||
CONFIG_RTC_DRV_DS1374=y
|
||||
CONFIG_RTC_DRV_DS3232=y
|
||||
CONFIG_UIO=y
|
||||
CONFIG_VIRT_DRIVERS=y
|
||||
CONFIG_FSL_HV_MANAGER=y
|
||||
CONFIG_STAGING=y
|
||||
CONFIG_FSL_CORENET_CF=y
|
||||
CONFIG_CLK_QORIQ=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT3_FS=y
|
||||
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
|
||||
CONFIG_ISO9660_FS=m
|
||||
CONFIG_JOLIET=y
|
||||
CONFIG_ZISOFS=y
|
||||
CONFIG_UDF_FS=m
|
||||
CONFIG_MSDOS_FS=m
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_NTFS_FS=y
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_HUGETLBFS=y
|
||||
CONFIG_JFFS2_FS=y
|
||||
CONFIG_CRAMFS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V4=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_NFSD=m
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_CODEPAGE_850=y
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_NLS_UTF8=m
|
||||
CONFIG_DEBUG_INFO=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_SHIRQ=y
|
||||
CONFIG_DETECT_HUNG_TASK=y
|
||||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_CRYPTO_NULL=y
|
||||
CONFIG_CRYPTO_PCBC=m
|
||||
CONFIG_CRYPTO_MD4=y
|
||||
CONFIG_CRYPTO_SHA256=y
|
||||
CONFIG_CRYPTO_SHA512=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM=y
|
1
arch/powerpc/configs/corenet_basic_defconfig
Normal file
1
arch/powerpc/configs/corenet_basic_defconfig
Normal file
@ -0,0 +1 @@
|
||||
CONFIG_CORENET_GENERIC=y
|
@ -1,176 +1,126 @@
|
||||
CONFIG_PPC64=y
|
||||
CONFIG_PPC_BOOK3E_64=y
|
||||
CONFIG_ALTIVEC=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=24
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_FHANDLE=y
|
||||
CONFIG_IRQ_DOMAIN_DEBUG=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_ADFS_FS=m
|
||||
CONFIG_AFFS_FS=m
|
||||
CONFIG_AUDIT=y
|
||||
CONFIG_BEFS_FS=m
|
||||
CONFIG_BFS_FS=m
|
||||
CONFIG_BINFMT_MISC=m
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_NBD=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=131072
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_CGROUPS=y
|
||||
CONFIG_CPUSETS=y
|
||||
CONFIG_CGROUP_CPUACCT=y
|
||||
CONFIG_CGROUP_SCHED=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_CGROUPS=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
CONFIG_CRC_T10DIF=y
|
||||
CONFIG_CPUSETS=y
|
||||
CONFIG_CRAMFS=y
|
||||
CONFIG_CRYPTO_MD4=y
|
||||
CONFIG_CRYPTO_NULL=y
|
||||
CONFIG_CRYPTO_PCBC=m
|
||||
CONFIG_CRYPTO_SHA256=y
|
||||
CONFIG_CRYPTO_SHA512=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
CONFIG_DEBUG_SHIRQ=y
|
||||
CONFIG_DETECT_HUNG_TASK=y
|
||||
CONFIG_DEVTMPFS_MOUNT=y
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_DUMMY=y
|
||||
CONFIG_EFS_FS=m
|
||||
CONFIG_EXPERT=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
CONFIG_MODVERSIONS=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_MAC_PARTITION=y
|
||||
CONFIG_CORENET_GENERIC=y
|
||||
# CONFIG_PPC_OF_BOOT_TRAMPOLINE is not set
|
||||
CONFIG_BINFMT_MISC=m
|
||||
CONFIG_MATH_EMULATION=y
|
||||
CONFIG_MATH_EMULATION_HW_UNIMPLEMENTED=y
|
||||
CONFIG_PCIEPORTBUS=y
|
||||
CONFIG_PCI_MSI=y
|
||||
CONFIG_RAPIDIO=y
|
||||
CONFIG_FSL_RIO=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_XFRM_USER=y
|
||||
CONFIG_NET_KEY=y
|
||||
CONFIG_EXT2_FS=y
|
||||
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
|
||||
CONFIG_EXT3_FS=y
|
||||
CONFIG_FB=y
|
||||
CONFIG_FHANDLE=y
|
||||
CONFIG_FIXED_PHY=y
|
||||
CONFIG_FONT_8x16=y
|
||||
CONFIG_FONT_8x8=y
|
||||
CONFIG_FONTS=y
|
||||
CONFIG_FORCE_MAX_ZONEORDER=13
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_FRAME_WARN=1024
|
||||
CONFIG_FTL=y
|
||||
CONFIG_HFS_FS=m
|
||||
CONFIG_HFSPLUS_FS=m
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_HPFS_FS=m
|
||||
CONFIG_HUGETLBFS=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_INET_AH=y
|
||||
CONFIG_INET_ESP=y
|
||||
CONFIG_INET_IPCOMP=y
|
||||
# CONFIG_INET_LRO is not set
|
||||
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_ADVANCED_ROUTER=y
|
||||
CONFIG_IP_MULTIPLE_TABLES=y
|
||||
CONFIG_IP_ROUTE_MULTIPATH=y
|
||||
CONFIG_IP_ROUTE_VERBOSE=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
CONFIG_IP_PNP_RARP=y
|
||||
CONFIG_NET_IPIP=y
|
||||
CONFIG_IP_MROUTE=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_MULTIPLE_TABLES=y
|
||||
CONFIG_IP_PIMSM_V1=y
|
||||
CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_INET_ESP=y
|
||||
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||
# CONFIG_INET_LRO is not set
|
||||
CONFIG_IPV6=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_RARP=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_ROUTE_MULTIPATH=y
|
||||
CONFIG_IP_ROUTE_VERBOSE=y
|
||||
CONFIG_IP_SCTP=m
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_DEVTMPFS_MOUNT=y
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_FTL=y
|
||||
CONFIG_MTD_CFI=y
|
||||
CONFIG_MTD_CFI_INTELEXT=y
|
||||
CONFIG_MTD_CFI_AMDSTD=y
|
||||
CONFIG_MTD_PHYSMAP_OF=y
|
||||
CONFIG_MTD_NAND=y
|
||||
CONFIG_MTD_NAND_FSL_ELBC=y
|
||||
CONFIG_MTD_NAND_FSL_IFC=y
|
||||
CONFIG_MTD_SPI_NOR=y
|
||||
CONFIG_MTD_UBI=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=131072
|
||||
CONFIG_EEPROM_LEGACY=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
CONFIG_BLK_DEV_SR_VENDOR=y
|
||||
CONFIG_CHR_DEV_SG=y
|
||||
CONFIG_ATA=y
|
||||
CONFIG_SATA_FSL=y
|
||||
CONFIG_SATA_SIL24=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_DUMMY=y
|
||||
CONFIG_FSL_PQ_MDIO=y
|
||||
CONFIG_FSL_XGMAC_MDIO=y
|
||||
CONFIG_E1000E=y
|
||||
CONFIG_VITESSE_PHY=y
|
||||
CONFIG_FIXED_PHY=y
|
||||
CONFIG_MDIO_BUS_MUX_GPIO=y
|
||||
CONFIG_MDIO_BUS_MUX_MMIOREG=y
|
||||
CONFIG_INPUT_FF_MEMLESS=m
|
||||
# CONFIG_INPUT_MOUSEDEV is not set
|
||||
# CONFIG_INPUT_KEYBOARD is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_SERIO_LIBPS2=y
|
||||
CONFIG_PPC_EPAPR_HV_BYTECHAN=y
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||
CONFIG_SERIAL_8250_DETECT_IRQ=y
|
||||
CONFIG_SERIAL_8250_RSA=y
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_I2C_MPC=y
|
||||
CONFIG_I2C_MUX=y
|
||||
CONFIG_I2C_MUX_PCA954x=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_GPIO=y
|
||||
CONFIG_SPI_FSL_SPI=y
|
||||
CONFIG_SPI_FSL_ESPI=y
|
||||
CONFIG_SENSORS_LM90=y
|
||||
CONFIG_SENSORS_INA2XX=y
|
||||
CONFIG_USB_HID=m
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_MON=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_EHCI_FSL=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_SDHCI=y
|
||||
CONFIG_EDAC=y
|
||||
CONFIG_EDAC_MM_EDAC=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_DS1307=y
|
||||
CONFIG_RTC_DRV_DS1374=y
|
||||
CONFIG_RTC_DRV_DS3232=y
|
||||
CONFIG_DMADEVICES=y
|
||||
CONFIG_FSL_DMA=y
|
||||
CONFIG_VIRT_DRIVERS=y
|
||||
CONFIG_FSL_HV_MANAGER=y
|
||||
CONFIG_CLK_QORIQ=y
|
||||
CONFIG_FSL_CORENET_CF=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT3_FS=y
|
||||
CONFIG_IPV6=y
|
||||
CONFIG_IRQ_DOMAIN_DEBUG=y
|
||||
CONFIG_ISO9660_FS=m
|
||||
CONFIG_JOLIET=y
|
||||
CONFIG_ZISOFS=y
|
||||
CONFIG_UDF_FS=m
|
||||
CONFIG_MSDOS_FS=m
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_NTFS_FS=y
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_HUGETLBFS=y
|
||||
CONFIG_JFFS2_FS=y
|
||||
CONFIG_JFFS2_FS_DEBUG=1
|
||||
CONFIG_UBIFS_FS=y
|
||||
CONFIG_JFFS2_FS=y
|
||||
CONFIG_JOLIET=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_MAC_PARTITION=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODVERSIONS=y
|
||||
CONFIG_MSDOS_FS=m
|
||||
CONFIG_MTD_UBI=y
|
||||
CONFIG_MTD=y
|
||||
CONFIG_NET_IPIP=y
|
||||
CONFIG_NET_KEY_MIGRATE=y
|
||||
CONFIG_NET_KEY=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_NFSD=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V4=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_NFSD=m
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_CODEPAGE_850=y
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_NLS_UTF8=m
|
||||
CONFIG_CRC_T10DIF=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
CONFIG_FRAME_WARN=1024
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_SHIRQ=y
|
||||
CONFIG_DETECT_HUNG_TASK=y
|
||||
CONFIG_CRYPTO_NULL=y
|
||||
CONFIG_CRYPTO_PCBC=m
|
||||
CONFIG_CRYPTO_MD4=y
|
||||
CONFIG_CRYPTO_SHA256=y
|
||||
CONFIG_CRYPTO_SHA512=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_NTFS_FS=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_PERF_EVENTS=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_QNX4FS_FS=m
|
||||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_SYSV_FS=m
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_UBIFS_FS=y
|
||||
CONFIG_UDF_FS=m
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
CONFIG_UFS_FS=m
|
||||
CONFIG_UIO=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_VXFS_FS=m
|
||||
CONFIG_XFRM_STATISTICS=y
|
||||
CONFIG_XFRM_SUB_POLICY=y
|
||||
CONFIG_XFRM_USER=y
|
||||
CONFIG_ZISOFS=y
|
23
arch/powerpc/configs/mpc85xx_basic_defconfig
Normal file
23
arch/powerpc/configs/mpc85xx_basic_defconfig
Normal file
@ -0,0 +1,23 @@
|
||||
CONFIG_MATH_EMULATION=y
|
||||
CONFIG_MPC8536_DS=y
|
||||
CONFIG_MPC8540_ADS=y
|
||||
CONFIG_MPC8560_ADS=y
|
||||
CONFIG_MPC85xx_CDS=y
|
||||
CONFIG_MPC85xx_DS=y
|
||||
CONFIG_MPC85xx_MDS=y
|
||||
CONFIG_MPC85xx_RDB=y
|
||||
CONFIG_KSI8560=y
|
||||
CONFIG_MVME2500=y
|
||||
CONFIG_P1010_RDB=y
|
||||
CONFIG_P1022_DS=y
|
||||
CONFIG_P1022_RDK=y
|
||||
CONFIG_P1023_RDB=y
|
||||
CONFIG_SBC8548=y
|
||||
CONFIG_SOCRATES=y
|
||||
CONFIG_STX_GP3=y
|
||||
CONFIG_TQM8540=y
|
||||
CONFIG_TQM8541=y
|
||||
CONFIG_TQM8548=y
|
||||
CONFIG_TQM8555=y
|
||||
CONFIG_TQM8560=y
|
||||
CONFIG_XES_MPC85xx=y
|
@ -1,252 +0,0 @@
|
||||
CONFIG_PPC_85xx=y
|
||||
CONFIG_PHYS_64BIT=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_AUDIT=y
|
||||
CONFIG_IRQ_DOMAIN_DEBUG=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_EXPERT=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
CONFIG_MODVERSIONS=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_MAC_PARTITION=y
|
||||
CONFIG_C293_PCIE=y
|
||||
CONFIG_MPC8540_ADS=y
|
||||
CONFIG_MPC8560_ADS=y
|
||||
CONFIG_MPC85xx_CDS=y
|
||||
CONFIG_MPC85xx_MDS=y
|
||||
CONFIG_MPC8536_DS=y
|
||||
CONFIG_MPC85xx_DS=y
|
||||
CONFIG_MPC85xx_RDB=y
|
||||
CONFIG_P1010_RDB=y
|
||||
CONFIG_P1022_DS=y
|
||||
CONFIG_P1022_RDK=y
|
||||
CONFIG_P1023_RDB=y
|
||||
CONFIG_SOCRATES=y
|
||||
CONFIG_KSI8560=y
|
||||
CONFIG_XES_MPC85xx=y
|
||||
CONFIG_STX_GP3=y
|
||||
CONFIG_TQM8540=y
|
||||
CONFIG_TQM8541=y
|
||||
CONFIG_TQM8548=y
|
||||
CONFIG_TQM8555=y
|
||||
CONFIG_TQM8560=y
|
||||
CONFIG_SBC8548=y
|
||||
CONFIG_MVME2500=y
|
||||
CONFIG_QUICC_ENGINE=y
|
||||
CONFIG_QE_GPIO=y
|
||||
CONFIG_HIGHMEM=y
|
||||
CONFIG_BINFMT_MISC=m
|
||||
CONFIG_MATH_EMULATION=y
|
||||
CONFIG_FORCE_MAX_ZONEORDER=12
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCIEPORTBUS=y
|
||||
# CONFIG_PCIEASPM is not set
|
||||
CONFIG_PCI_MSI=y
|
||||
CONFIG_RAPIDIO=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_XFRM_USER=y
|
||||
CONFIG_NET_KEY=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_ADVANCED_ROUTER=y
|
||||
CONFIG_IP_MULTIPLE_TABLES=y
|
||||
CONFIG_IP_ROUTE_MULTIPATH=y
|
||||
CONFIG_IP_ROUTE_VERBOSE=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
CONFIG_IP_PNP_RARP=y
|
||||
CONFIG_NET_IPIP=y
|
||||
CONFIG_IP_MROUTE=y
|
||||
CONFIG_IP_PIMSM_V1=y
|
||||
CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_INET_ESP=y
|
||||
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||
# CONFIG_INET_LRO is not set
|
||||
CONFIG_IPV6=y
|
||||
CONFIG_IP_SCTP=m
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_DEVTMPFS_MOUNT=y
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_FTL=y
|
||||
CONFIG_MTD_CFI=y
|
||||
CONFIG_MTD_CFI_INTELEXT=y
|
||||
CONFIG_MTD_CFI_AMDSTD=y
|
||||
CONFIG_MTD_PHYSMAP=y
|
||||
CONFIG_MTD_PHYSMAP_OF=y
|
||||
CONFIG_MTD_PLATRAM=y
|
||||
CONFIG_MTD_M25P80=y
|
||||
CONFIG_MTD_NAND=y
|
||||
CONFIG_MTD_NAND_FSL_ELBC=y
|
||||
CONFIG_MTD_NAND_FSL_IFC=y
|
||||
CONFIG_MTD_SPI_NOR=y
|
||||
CONFIG_MTD_UBI=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_NBD=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=131072
|
||||
CONFIG_EEPROM_AT24=y
|
||||
CONFIG_EEPROM_LEGACY=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_CHR_DEV_ST=y
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
CONFIG_CHR_DEV_SG=y
|
||||
CONFIG_SCSI_LOGGING=y
|
||||
CONFIG_ATA=y
|
||||
CONFIG_SATA_AHCI=y
|
||||
CONFIG_SATA_FSL=y
|
||||
CONFIG_SATA_SIL24=y
|
||||
CONFIG_PATA_ALI=y
|
||||
CONFIG_PATA_VIA=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_DUMMY=y
|
||||
CONFIG_FS_ENET=y
|
||||
CONFIG_UCC_GETH=y
|
||||
CONFIG_GIANFAR=y
|
||||
CONFIG_E1000=y
|
||||
CONFIG_E1000E=y
|
||||
CONFIG_IGB=y
|
||||
CONFIG_AT803X_PHY=y
|
||||
CONFIG_MARVELL_PHY=y
|
||||
CONFIG_DAVICOM_PHY=y
|
||||
CONFIG_CICADA_PHY=y
|
||||
CONFIG_VITESSE_PHY=y
|
||||
CONFIG_BROADCOM_PHY=y
|
||||
CONFIG_FIXED_PHY=y
|
||||
CONFIG_INPUT_FF_MEMLESS=m
|
||||
# CONFIG_INPUT_MOUSEDEV is not set
|
||||
# CONFIG_INPUT_KEYBOARD is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_SERIO_LIBPS2=y
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=6
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=6
|
||||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||
CONFIG_SERIAL_8250_DETECT_IRQ=y
|
||||
CONFIG_SERIAL_8250_RSA=y
|
||||
CONFIG_SERIAL_QE=m
|
||||
CONFIG_NVRAM=y
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_I2C_CPM=m
|
||||
CONFIG_I2C_MPC=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_FSL_SPI=y
|
||||
CONFIG_SPI_FSL_ESPI=y
|
||||
CONFIG_GPIO_MPC8XXX=y
|
||||
CONFIG_SENSORS_LM90=y
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_FSL_DIU=y
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SND=y
|
||||
# CONFIG_SND_SUPPORT_OLD_API is not set
|
||||
# CONFIG_SND_DRIVERS is not set
|
||||
CONFIG_SND_INTEL8X0=y
|
||||
# CONFIG_SND_PPC is not set
|
||||
# CONFIG_SND_USB is not set
|
||||
CONFIG_SND_SOC=y
|
||||
CONFIG_SND_POWERPC_SOC=y
|
||||
CONFIG_HID_A4TECH=y
|
||||
CONFIG_HID_APPLE=y
|
||||
CONFIG_HID_BELKIN=y
|
||||
CONFIG_HID_CHERRY=y
|
||||
CONFIG_HID_CHICONY=y
|
||||
CONFIG_HID_CYPRESS=y
|
||||
CONFIG_HID_EZKEY=y
|
||||
CONFIG_HID_GYRATION=y
|
||||
CONFIG_HID_LOGITECH=y
|
||||
CONFIG_HID_MICROSOFT=y
|
||||
CONFIG_HID_MONTEREY=y
|
||||
CONFIG_HID_PANTHERLORD=y
|
||||
CONFIG_HID_PETALYNX=y
|
||||
CONFIG_HID_SAMSUNG=y
|
||||
CONFIG_HID_SUNPLUS=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_MON=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_EHCI_FSL=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
|
||||
CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_SDHCI=y
|
||||
CONFIG_MMC_SDHCI_PLTFM=y
|
||||
CONFIG_MMC_SDHCI_OF_ESDHC=y
|
||||
CONFIG_EDAC=y
|
||||
CONFIG_EDAC_MM_EDAC=y
|
||||
CONFIG_EDAC_MPC85XX=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_DS1307=y
|
||||
CONFIG_RTC_DRV_DS1374=y
|
||||
CONFIG_RTC_DRV_DS3232=y
|
||||
CONFIG_RTC_DRV_CMOS=y
|
||||
CONFIG_DMADEVICES=y
|
||||
CONFIG_FSL_DMA=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT3_FS=y
|
||||
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
|
||||
CONFIG_ISO9660_FS=m
|
||||
CONFIG_JOLIET=y
|
||||
CONFIG_ZISOFS=y
|
||||
CONFIG_UDF_FS=m
|
||||
CONFIG_MSDOS_FS=m
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_NTFS_FS=y
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_HUGETLBFS=y
|
||||
CONFIG_ADFS_FS=m
|
||||
CONFIG_AFFS_FS=m
|
||||
CONFIG_HFS_FS=m
|
||||
CONFIG_HFSPLUS_FS=m
|
||||
CONFIG_BEFS_FS=m
|
||||
CONFIG_BFS_FS=m
|
||||
CONFIG_EFS_FS=m
|
||||
CONFIG_JFFS2_FS=y
|
||||
CONFIG_JFFS2_FS_DEBUG=1
|
||||
CONFIG_UBIFS_FS=y
|
||||
CONFIG_CRAMFS=y
|
||||
CONFIG_VXFS_FS=m
|
||||
CONFIG_HPFS_FS=m
|
||||
CONFIG_QNX4FS_FS=m
|
||||
CONFIG_SYSV_FS=m
|
||||
CONFIG_UFS_FS=m
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V4=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_NFSD=y
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_CODEPAGE_850=y
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_CRC_T10DIF=y
|
||||
CONFIG_FONTS=y
|
||||
CONFIG_FONT_8x8=y
|
||||
CONFIG_FONT_8x16=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_DETECT_HUNG_TASK=y
|
||||
CONFIG_CRYPTO_PCBC=m
|
||||
CONFIG_CRYPTO_SHA256=y
|
||||
CONFIG_CRYPTO_SHA512=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM=y
|
||||
CONFIG_CRYPTO_DEV_TALITOS=y
|
@ -1,244 +0,0 @@
|
||||
CONFIG_PPC_85xx=y
|
||||
CONFIG_PHYS_64BIT=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_AUDIT=y
|
||||
CONFIG_IRQ_DOMAIN_DEBUG=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_EXPERT=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
CONFIG_MODVERSIONS=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_MAC_PARTITION=y
|
||||
CONFIG_C293_PCIE=y
|
||||
CONFIG_MPC8540_ADS=y
|
||||
CONFIG_MPC8560_ADS=y
|
||||
CONFIG_MPC85xx_CDS=y
|
||||
CONFIG_MPC85xx_MDS=y
|
||||
CONFIG_MPC8536_DS=y
|
||||
CONFIG_MPC85xx_DS=y
|
||||
CONFIG_MPC85xx_RDB=y
|
||||
CONFIG_P1010_RDB=y
|
||||
CONFIG_P1022_DS=y
|
||||
CONFIG_P1022_RDK=y
|
||||
CONFIG_P1023_RDB=y
|
||||
CONFIG_SOCRATES=y
|
||||
CONFIG_KSI8560=y
|
||||
CONFIG_XES_MPC85xx=y
|
||||
CONFIG_STX_GP3=y
|
||||
CONFIG_TQM8540=y
|
||||
CONFIG_TQM8541=y
|
||||
CONFIG_TQM8548=y
|
||||
CONFIG_TQM8555=y
|
||||
CONFIG_TQM8560=y
|
||||
CONFIG_SBC8548=y
|
||||
CONFIG_QUICC_ENGINE=y
|
||||
CONFIG_QE_GPIO=y
|
||||
CONFIG_HIGHMEM=y
|
||||
CONFIG_BINFMT_MISC=m
|
||||
CONFIG_MATH_EMULATION=y
|
||||
CONFIG_FORCE_MAX_ZONEORDER=12
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCI_MSI=y
|
||||
CONFIG_RAPIDIO=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_XFRM_USER=y
|
||||
CONFIG_NET_KEY=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_ADVANCED_ROUTER=y
|
||||
CONFIG_IP_MULTIPLE_TABLES=y
|
||||
CONFIG_IP_ROUTE_MULTIPATH=y
|
||||
CONFIG_IP_ROUTE_VERBOSE=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
CONFIG_IP_PNP_RARP=y
|
||||
CONFIG_NET_IPIP=y
|
||||
CONFIG_IP_MROUTE=y
|
||||
CONFIG_IP_PIMSM_V1=y
|
||||
CONFIG_IP_PIMSM_V2=y
|
||||
CONFIG_INET_ESP=y
|
||||
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||
# CONFIG_INET_LRO is not set
|
||||
CONFIG_IPV6=y
|
||||
CONFIG_IP_SCTP=m
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_DEVTMPFS_MOUNT=y
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_FTL=y
|
||||
CONFIG_MTD_CFI=y
|
||||
CONFIG_MTD_CFI_INTELEXT=y
|
||||
CONFIG_MTD_CFI_AMDSTD=y
|
||||
CONFIG_MTD_PHYSMAP_OF=y
|
||||
CONFIG_MTD_NAND=y
|
||||
CONFIG_MTD_NAND_FSL_ELBC=y
|
||||
CONFIG_MTD_NAND_FSL_IFC=y
|
||||
CONFIG_MTD_SPI_NOR=y
|
||||
CONFIG_MTD_UBI=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_NBD=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=131072
|
||||
CONFIG_EEPROM_AT24=y
|
||||
CONFIG_EEPROM_LEGACY=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_CHR_DEV_ST=y
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
CONFIG_CHR_DEV_SG=y
|
||||
CONFIG_SCSI_LOGGING=y
|
||||
CONFIG_ATA=y
|
||||
CONFIG_SATA_AHCI=y
|
||||
CONFIG_SATA_FSL=y
|
||||
CONFIG_SATA_SIL24=y
|
||||
CONFIG_PATA_ALI=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_DUMMY=y
|
||||
CONFIG_FS_ENET=y
|
||||
CONFIG_UCC_GETH=y
|
||||
CONFIG_GIANFAR=y
|
||||
CONFIG_E1000E=y
|
||||
CONFIG_AT803X_PHY=y
|
||||
CONFIG_MARVELL_PHY=y
|
||||
CONFIG_DAVICOM_PHY=y
|
||||
CONFIG_CICADA_PHY=y
|
||||
CONFIG_VITESSE_PHY=y
|
||||
CONFIG_FIXED_PHY=y
|
||||
CONFIG_INPUT_FF_MEMLESS=m
|
||||
# CONFIG_INPUT_MOUSEDEV is not set
|
||||
# CONFIG_INPUT_KEYBOARD is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_SERIO_LIBPS2=y
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=2
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=2
|
||||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||
CONFIG_SERIAL_8250_DETECT_IRQ=y
|
||||
CONFIG_SERIAL_8250_RSA=y
|
||||
CONFIG_SERIAL_QE=m
|
||||
CONFIG_NVRAM=y
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_I2C_CPM=m
|
||||
CONFIG_I2C_MPC=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_SPI_FSL_SPI=y
|
||||
CONFIG_SPI_FSL_ESPI=y
|
||||
CONFIG_GPIO_MPC8XXX=y
|
||||
CONFIG_SENSORS_LM90=y
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_FSL_DIU=y
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SND=y
|
||||
# CONFIG_SND_SUPPORT_OLD_API is not set
|
||||
# CONFIG_SND_DRIVERS is not set
|
||||
CONFIG_SND_INTEL8X0=y
|
||||
# CONFIG_SND_PPC is not set
|
||||
# CONFIG_SND_USB is not set
|
||||
CONFIG_SND_SOC=y
|
||||
CONFIG_SND_POWERPC_SOC=y
|
||||
CONFIG_HID_A4TECH=y
|
||||
CONFIG_HID_APPLE=y
|
||||
CONFIG_HID_BELKIN=y
|
||||
CONFIG_HID_CHERRY=y
|
||||
CONFIG_HID_CHICONY=y
|
||||
CONFIG_HID_CYPRESS=y
|
||||
CONFIG_HID_EZKEY=y
|
||||
CONFIG_HID_GYRATION=y
|
||||
CONFIG_HID_LOGITECH=y
|
||||
CONFIG_HID_MICROSOFT=y
|
||||
CONFIG_HID_MONTEREY=y
|
||||
CONFIG_HID_PANTHERLORD=y
|
||||
CONFIG_HID_PETALYNX=y
|
||||
CONFIG_HID_SAMSUNG=y
|
||||
CONFIG_HID_SUNPLUS=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_MON=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_EHCI_FSL=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
|
||||
CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_SDHCI=y
|
||||
CONFIG_MMC_SDHCI_PLTFM=y
|
||||
CONFIG_MMC_SDHCI_OF_ESDHC=y
|
||||
CONFIG_EDAC=y
|
||||
CONFIG_EDAC_MM_EDAC=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_DS1307=y
|
||||
CONFIG_RTC_DRV_DS1374=y
|
||||
CONFIG_RTC_DRV_DS3232=y
|
||||
CONFIG_RTC_DRV_CMOS=y
|
||||
CONFIG_DMADEVICES=y
|
||||
CONFIG_FSL_DMA=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT3_FS=y
|
||||
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
|
||||
CONFIG_ISO9660_FS=m
|
||||
CONFIG_JOLIET=y
|
||||
CONFIG_ZISOFS=y
|
||||
CONFIG_UDF_FS=m
|
||||
CONFIG_MSDOS_FS=m
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_NTFS_FS=y
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_HUGETLBFS=y
|
||||
CONFIG_ADFS_FS=m
|
||||
CONFIG_AFFS_FS=m
|
||||
CONFIG_HFS_FS=m
|
||||
CONFIG_HFSPLUS_FS=m
|
||||
CONFIG_BEFS_FS=m
|
||||
CONFIG_BFS_FS=m
|
||||
CONFIG_EFS_FS=m
|
||||
CONFIG_JFFS2_FS=y
|
||||
CONFIG_JFFS2_FS_DEBUG=1
|
||||
CONFIG_UBIFS_FS=y
|
||||
CONFIG_CRAMFS=y
|
||||
CONFIG_VXFS_FS=m
|
||||
CONFIG_HPFS_FS=m
|
||||
CONFIG_QNX4FS_FS=m
|
||||
CONFIG_SYSV_FS=m
|
||||
CONFIG_UFS_FS=m
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V4=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_NFSD=y
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_CODEPAGE_850=y
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_CRC_T10DIF=y
|
||||
CONFIG_FONTS=y
|
||||
CONFIG_FONT_8x8=y
|
||||
CONFIG_FONT_8x16=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_DETECT_HUNG_TASK=y
|
||||
CONFIG_CRYPTO_PCBC=m
|
||||
CONFIG_CRYPTO_SHA256=y
|
||||
CONFIG_CRYPTO_SHA512=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
CONFIG_CRYPTO_DEV_FSL_CAAM=y
|
||||
CONFIG_CRYPTO_DEV_TALITOS=y
|
@ -355,3 +355,6 @@ CONFIG_CRYPTO_DEV_NX_ENCRYPT=m
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
CONFIG_KVM_BOOK3S_64=m
|
||||
CONFIG_KVM_BOOK3S_64_HV=m
|
||||
CONFIG_NEW_LEDS=y
|
||||
CONFIG_LEDS_CLASS=m
|
||||
CONFIG_LEDS_POWERNV=m
|
||||
|
@ -190,7 +190,8 @@ CONFIG_HVC_RTAS=y
|
||||
CONFIG_HVCS=m
|
||||
CONFIG_VIRTIO_CONSOLE=m
|
||||
CONFIG_IBM_BSR=m
|
||||
CONFIG_GEN_RTC=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_GENERIC=y
|
||||
CONFIG_RAW_DRIVER=y
|
||||
CONFIG_MAX_RAW_DEVS=1024
|
||||
CONFIG_FB=y
|
||||
@ -319,3 +320,6 @@ CONFIG_CRYPTO_DEV_NX_ENCRYPT=m
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
CONFIG_KVM_BOOK3S_64=m
|
||||
CONFIG_KVM_BOOK3S_64_HV=m
|
||||
CONFIG_NEW_LEDS=y
|
||||
CONFIG_LEDS_CLASS=m
|
||||
CONFIG_LEDS_POWERNV=m
|
||||
|
@ -6,5 +6,4 @@ generic-y += local64.h
|
||||
generic-y += mcs_spinlock.h
|
||||
generic-y += preempt.h
|
||||
generic-y += rwsem.h
|
||||
generic-y += trace_clock.h
|
||||
generic-y += vtime.h
|
||||
|
@ -7,13 +7,22 @@
|
||||
|
||||
static inline int arch_get_random_long(unsigned long *v)
|
||||
{
|
||||
if (ppc_md.get_random_long)
|
||||
return ppc_md.get_random_long(v);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int arch_get_random_int(unsigned int *v)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int arch_get_random_seed_long(unsigned long *v)
|
||||
{
|
||||
if (ppc_md.get_random_seed)
|
||||
return ppc_md.get_random_seed(v);
|
||||
|
||||
return 0;
|
||||
}
|
||||
static inline int arch_get_random_seed_int(unsigned int *v)
|
||||
{
|
||||
unsigned long val;
|
||||
int rc;
|
||||
@ -27,22 +36,13 @@ static inline int arch_get_random_int(unsigned int *v)
|
||||
|
||||
static inline int arch_has_random(void)
|
||||
{
|
||||
return !!ppc_md.get_random_long;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int arch_get_random_seed_long(unsigned long *v)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int arch_get_random_seed_int(unsigned int *v)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int arch_has_random_seed(void)
|
||||
{
|
||||
return 0;
|
||||
return !!ppc_md.get_random_seed;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_ARCH_RANDOM */
|
||||
|
||||
#ifdef CONFIG_PPC_POWERNV
|
||||
|
@ -40,7 +40,12 @@ extern void __flush_dcache_icache(void *page_va);
|
||||
extern void flush_dcache_icache_page(struct page *page);
|
||||
#if defined(CONFIG_PPC32) && !defined(CONFIG_BOOKE)
|
||||
extern void __flush_dcache_icache_phys(unsigned long physaddr);
|
||||
#endif /* CONFIG_PPC32 && !CONFIG_BOOKE */
|
||||
#else
|
||||
static inline void __flush_dcache_icache_phys(unsigned long physaddr)
|
||||
{
|
||||
BUG();
|
||||
}
|
||||
#endif
|
||||
|
||||
extern void flush_dcache_range(unsigned long start, unsigned long stop);
|
||||
#ifdef CONFIG_PPC32
|
||||
|
@ -19,15 +19,6 @@
|
||||
#else
|
||||
extern __sum16 ip_fast_csum(const void *iph, unsigned int ihl);
|
||||
|
||||
/*
|
||||
* computes the checksum of the TCP/UDP pseudo-header
|
||||
* returns a 16-bit checksum, already complemented
|
||||
*/
|
||||
extern __sum16 csum_tcpudp_magic(__be32 saddr, __be32 daddr,
|
||||
unsigned short len,
|
||||
unsigned short proto,
|
||||
__wsum sum);
|
||||
|
||||
/*
|
||||
* computes the checksum of a memory block at buff, length len,
|
||||
* and adds in "sum" (32-bit)
|
||||
@ -127,6 +118,34 @@ static inline __wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr,
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* computes the checksum of the TCP/UDP pseudo-header
|
||||
* returns a 16-bit checksum, already complemented
|
||||
*/
|
||||
static inline __sum16 csum_tcpudp_magic(__be32 saddr, __be32 daddr,
|
||||
unsigned short len,
|
||||
unsigned short proto,
|
||||
__wsum sum)
|
||||
{
|
||||
return csum_fold(csum_tcpudp_nofold(saddr, daddr, len, proto, sum));
|
||||
}
|
||||
|
||||
#define HAVE_ARCH_CSUM_ADD
|
||||
static inline __wsum csum_add(__wsum csum, __wsum addend)
|
||||
{
|
||||
#ifdef __powerpc64__
|
||||
u64 res = (__force u64)csum;
|
||||
|
||||
res += (__force u64)addend;
|
||||
return (__force __wsum)((u32)res + (res >> 32));
|
||||
#else
|
||||
asm("addc %0,%0,%1;"
|
||||
"addze %0,%0;"
|
||||
: "+r" (csum) : "r" (addend));
|
||||
return csum;
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif /* __KERNEL__ */
|
||||
#endif
|
||||
|
@ -174,6 +174,13 @@ typedef struct compat_siginfo {
|
||||
int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
|
||||
int _fd;
|
||||
} _sigpoll;
|
||||
|
||||
/* SIGSYS */
|
||||
struct {
|
||||
unsigned int _call_addr; /* calling insn */
|
||||
int _syscall; /* triggering system call number */
|
||||
unsigned int _arch; /* AUDIT_ARCH_* of syscall */
|
||||
} _sigsys;
|
||||
} _sifields;
|
||||
} compat_siginfo_t;
|
||||
|
||||
|
@ -10,6 +10,7 @@ struct dma_map_ops;
|
||||
struct device_node;
|
||||
#ifdef CONFIG_PPC64
|
||||
struct pci_dn;
|
||||
struct iommu_table;
|
||||
#endif
|
||||
|
||||
/*
|
||||
@ -23,13 +24,15 @@ struct dev_archdata {
|
||||
struct dma_map_ops *dma_ops;
|
||||
|
||||
/*
|
||||
* When an iommu is in use, dma_data is used as a ptr to the base of the
|
||||
* iommu_table. Otherwise, it is a simple numerical offset.
|
||||
* These two used to be a union. However, with the hybrid ops we need
|
||||
* both so here we store both a DMA offset for direct mappings and
|
||||
* an iommu_table for remapped DMA.
|
||||
*/
|
||||
union {
|
||||
dma_addr_t dma_offset;
|
||||
void *iommu_table_base;
|
||||
} dma_data;
|
||||
dma_addr_t dma_offset;
|
||||
|
||||
#ifdef CONFIG_PPC64
|
||||
struct iommu_table *iommu_table_base;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_IOMMU_API
|
||||
void *iommu_domain;
|
||||
|
@ -21,12 +21,12 @@
|
||||
#define DMA_ERROR_CODE (~(dma_addr_t)0x0)
|
||||
|
||||
/* Some dma direct funcs must be visible for use in other dma_ops */
|
||||
extern void *dma_direct_alloc_coherent(struct device *dev, size_t size,
|
||||
dma_addr_t *dma_handle, gfp_t flag,
|
||||
extern void *__dma_direct_alloc_coherent(struct device *dev, size_t size,
|
||||
dma_addr_t *dma_handle, gfp_t flag,
|
||||
struct dma_attrs *attrs);
|
||||
extern void __dma_direct_free_coherent(struct device *dev, size_t size,
|
||||
void *vaddr, dma_addr_t dma_handle,
|
||||
struct dma_attrs *attrs);
|
||||
extern void dma_direct_free_coherent(struct device *dev, size_t size,
|
||||
void *vaddr, dma_addr_t dma_handle,
|
||||
struct dma_attrs *attrs);
|
||||
extern int dma_direct_mmap_coherent(struct device *dev,
|
||||
struct vm_area_struct *vma,
|
||||
void *cpu_addr, dma_addr_t handle,
|
||||
@ -106,7 +106,7 @@ static inline void set_dma_ops(struct device *dev, struct dma_map_ops *ops)
|
||||
static inline dma_addr_t get_dma_offset(struct device *dev)
|
||||
{
|
||||
if (dev)
|
||||
return dev->archdata.dma_data.dma_offset;
|
||||
return dev->archdata.dma_offset;
|
||||
|
||||
return PCI_DRAM_OFFSET;
|
||||
}
|
||||
@ -114,7 +114,7 @@ static inline dma_addr_t get_dma_offset(struct device *dev)
|
||||
static inline void set_dma_offset(struct device *dev, dma_addr_t off)
|
||||
{
|
||||
if (dev)
|
||||
dev->archdata.dma_data.dma_offset = off;
|
||||
dev->archdata.dma_offset = off;
|
||||
}
|
||||
|
||||
/* this will be removed soon */
|
||||
|
@ -2,17 +2,17 @@
|
||||
* Copyright (C) 2001 Mike Corrigan & Dave Engebretsen, IBM Corporation
|
||||
* Rewrite, cleanup:
|
||||
* Copyright (C) 2004 Olof Johansson <olof@lixom.net>, IBM Corporation
|
||||
*
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
@ -131,16 +131,21 @@ int get_iommu_order(unsigned long size, struct iommu_table *tbl)
|
||||
|
||||
struct scatterlist;
|
||||
|
||||
static inline void set_iommu_table_base(struct device *dev, void *base)
|
||||
#ifdef CONFIG_PPC64
|
||||
|
||||
static inline void set_iommu_table_base(struct device *dev,
|
||||
struct iommu_table *base)
|
||||
{
|
||||
dev->archdata.dma_data.iommu_table_base = base;
|
||||
dev->archdata.iommu_table_base = base;
|
||||
}
|
||||
|
||||
static inline void *get_iommu_table_base(struct device *dev)
|
||||
{
|
||||
return dev->archdata.dma_data.iommu_table_base;
|
||||
return dev->archdata.iommu_table_base;
|
||||
}
|
||||
|
||||
extern int dma_iommu_dma_supported(struct device *dev, u64 mask);
|
||||
|
||||
/* Frees table for an individual device node */
|
||||
extern void iommu_free_table(struct iommu_table *tbl, const char *node_name);
|
||||
|
||||
@ -225,6 +230,20 @@ static inline int __init tce_iommu_bus_notifier_init(void)
|
||||
}
|
||||
#endif /* !CONFIG_IOMMU_API */
|
||||
|
||||
#else
|
||||
|
||||
static inline void *get_iommu_table_base(struct device *dev)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline int dma_iommu_dma_supported(struct device *dev, u64 mask)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_PPC64 */
|
||||
|
||||
extern int ppc_iommu_map_sg(struct device *dev, struct iommu_table *tbl,
|
||||
struct scatterlist *sglist, int nelems,
|
||||
unsigned long mask,
|
||||
|
@ -249,7 +249,7 @@ struct machdep_calls {
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_RANDOM
|
||||
int (*get_random_long)(unsigned long *v);
|
||||
int (*get_random_seed)(unsigned long *v);
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@ -154,7 +154,10 @@
|
||||
#define OPAL_FLASH_WRITE 111
|
||||
#define OPAL_FLASH_ERASE 112
|
||||
#define OPAL_PRD_MSG 113
|
||||
#define OPAL_LAST 113
|
||||
#define OPAL_LEDS_GET_INDICATOR 114
|
||||
#define OPAL_LEDS_SET_INDICATOR 115
|
||||
#define OPAL_CEC_REBOOT2 116
|
||||
#define OPAL_LAST 116
|
||||
|
||||
/* Device tree flags */
|
||||
|
||||
@ -340,6 +343,18 @@ enum OpalPciResetState {
|
||||
OPAL_ASSERT_RESET = 1
|
||||
};
|
||||
|
||||
enum OpalSlotLedType {
|
||||
OPAL_SLOT_LED_TYPE_ID = 0, /* IDENTIFY LED */
|
||||
OPAL_SLOT_LED_TYPE_FAULT = 1, /* FAULT LED */
|
||||
OPAL_SLOT_LED_TYPE_ATTN = 2, /* System Attention LED */
|
||||
OPAL_SLOT_LED_TYPE_MAX = 3
|
||||
};
|
||||
|
||||
enum OpalSlotLedState {
|
||||
OPAL_SLOT_LED_STATE_OFF = 0, /* LED is OFF */
|
||||
OPAL_SLOT_LED_STATE_ON = 1 /* LED is ON */
|
||||
};
|
||||
|
||||
/*
|
||||
* Address cycle types for LPC accesses. These also correspond
|
||||
* to the content of the first cell of the "reg" property for
|
||||
@ -438,6 +453,7 @@ struct OpalMemoryErrorData {
|
||||
/* HMI interrupt event */
|
||||
enum OpalHMI_Version {
|
||||
OpalHMIEvt_V1 = 1,
|
||||
OpalHMIEvt_V2 = 2,
|
||||
};
|
||||
|
||||
enum OpalHMI_Severity {
|
||||
@ -468,6 +484,49 @@ enum OpalHMI_ErrType {
|
||||
OpalHMI_ERROR_CAPP_RECOVERY,
|
||||
};
|
||||
|
||||
enum OpalHMI_XstopType {
|
||||
CHECKSTOP_TYPE_UNKNOWN = 0,
|
||||
CHECKSTOP_TYPE_CORE = 1,
|
||||
CHECKSTOP_TYPE_NX = 2,
|
||||
};
|
||||
|
||||
enum OpalHMI_CoreXstopReason {
|
||||
CORE_CHECKSTOP_IFU_REGFILE = 0x00000001,
|
||||
CORE_CHECKSTOP_IFU_LOGIC = 0x00000002,
|
||||
CORE_CHECKSTOP_PC_DURING_RECOV = 0x00000004,
|
||||
CORE_CHECKSTOP_ISU_REGFILE = 0x00000008,
|
||||
CORE_CHECKSTOP_ISU_LOGIC = 0x00000010,
|
||||
CORE_CHECKSTOP_FXU_LOGIC = 0x00000020,
|
||||
CORE_CHECKSTOP_VSU_LOGIC = 0x00000040,
|
||||
CORE_CHECKSTOP_PC_RECOV_IN_MAINT_MODE = 0x00000080,
|
||||
CORE_CHECKSTOP_LSU_REGFILE = 0x00000100,
|
||||
CORE_CHECKSTOP_PC_FWD_PROGRESS = 0x00000200,
|
||||
CORE_CHECKSTOP_LSU_LOGIC = 0x00000400,
|
||||
CORE_CHECKSTOP_PC_LOGIC = 0x00000800,
|
||||
CORE_CHECKSTOP_PC_HYP_RESOURCE = 0x00001000,
|
||||
CORE_CHECKSTOP_PC_HANG_RECOV_FAILED = 0x00002000,
|
||||
CORE_CHECKSTOP_PC_AMBI_HANG_DETECTED = 0x00004000,
|
||||
CORE_CHECKSTOP_PC_DEBUG_TRIG_ERR_INJ = 0x00008000,
|
||||
CORE_CHECKSTOP_PC_SPRD_HYP_ERR_INJ = 0x00010000,
|
||||
};
|
||||
|
||||
enum OpalHMI_NestAccelXstopReason {
|
||||
NX_CHECKSTOP_SHM_INVAL_STATE_ERR = 0x00000001,
|
||||
NX_CHECKSTOP_DMA_INVAL_STATE_ERR_1 = 0x00000002,
|
||||
NX_CHECKSTOP_DMA_INVAL_STATE_ERR_2 = 0x00000004,
|
||||
NX_CHECKSTOP_DMA_CH0_INVAL_STATE_ERR = 0x00000008,
|
||||
NX_CHECKSTOP_DMA_CH1_INVAL_STATE_ERR = 0x00000010,
|
||||
NX_CHECKSTOP_DMA_CH2_INVAL_STATE_ERR = 0x00000020,
|
||||
NX_CHECKSTOP_DMA_CH3_INVAL_STATE_ERR = 0x00000040,
|
||||
NX_CHECKSTOP_DMA_CH4_INVAL_STATE_ERR = 0x00000080,
|
||||
NX_CHECKSTOP_DMA_CH5_INVAL_STATE_ERR = 0x00000100,
|
||||
NX_CHECKSTOP_DMA_CH6_INVAL_STATE_ERR = 0x00000200,
|
||||
NX_CHECKSTOP_DMA_CH7_INVAL_STATE_ERR = 0x00000400,
|
||||
NX_CHECKSTOP_DMA_CRB_UE = 0x00000800,
|
||||
NX_CHECKSTOP_DMA_CRB_SUE = 0x00001000,
|
||||
NX_CHECKSTOP_PBI_ISN_UE = 0x00002000,
|
||||
};
|
||||
|
||||
struct OpalHMIEvent {
|
||||
uint8_t version; /* 0x00 */
|
||||
uint8_t severity; /* 0x01 */
|
||||
@ -478,6 +537,23 @@ struct OpalHMIEvent {
|
||||
__be64 hmer;
|
||||
/* TFMR register. Valid only for TFAC and TFMR_PARITY error type. */
|
||||
__be64 tfmr;
|
||||
|
||||
/* version 2 and later */
|
||||
union {
|
||||
/*
|
||||
* checkstop info (Core/NX).
|
||||
* Valid for OpalHMI_ERROR_MALFUNC_ALERT.
|
||||
*/
|
||||
struct {
|
||||
uint8_t xstop_type; /* enum OpalHMI_XstopType */
|
||||
uint8_t reserved_1[3];
|
||||
__be32 xstop_reason;
|
||||
union {
|
||||
__be32 pir; /* for CHECKSTOP_TYPE_CORE */
|
||||
__be32 chip_id; /* for CHECKSTOP_TYPE_NX */
|
||||
} u;
|
||||
} xstop_error;
|
||||
} u;
|
||||
};
|
||||
|
||||
enum {
|
||||
@ -768,6 +844,52 @@ struct opal_i2c_request {
|
||||
__be64 buffer_ra; /* Buffer real address */
|
||||
};
|
||||
|
||||
/*
|
||||
* EPOW status sharing (OPAL and the host)
|
||||
*
|
||||
* The host will pass on OPAL, a buffer of length OPAL_SYSEPOW_MAX
|
||||
* with individual elements being 16 bits wide to fetch the system
|
||||
* wide EPOW status. Each element in the buffer will contain the
|
||||
* EPOW status in it's bit representation for a particular EPOW sub
|
||||
* class as defiend here. So multiple detailed EPOW status bits
|
||||
* specific for any sub class can be represented in a single buffer
|
||||
* element as it's bit representation.
|
||||
*/
|
||||
|
||||
/* System EPOW type */
|
||||
enum OpalSysEpow {
|
||||
OPAL_SYSEPOW_POWER = 0, /* Power EPOW */
|
||||
OPAL_SYSEPOW_TEMP = 1, /* Temperature EPOW */
|
||||
OPAL_SYSEPOW_COOLING = 2, /* Cooling EPOW */
|
||||
OPAL_SYSEPOW_MAX = 3, /* Max EPOW categories */
|
||||
};
|
||||
|
||||
/* Power EPOW */
|
||||
enum OpalSysPower {
|
||||
OPAL_SYSPOWER_UPS = 0x0001, /* System on UPS power */
|
||||
OPAL_SYSPOWER_CHNG = 0x0002, /* System power config change */
|
||||
OPAL_SYSPOWER_FAIL = 0x0004, /* System impending power failure */
|
||||
OPAL_SYSPOWER_INCL = 0x0008, /* System incomplete power */
|
||||
};
|
||||
|
||||
/* Temperature EPOW */
|
||||
enum OpalSysTemp {
|
||||
OPAL_SYSTEMP_AMB = 0x0001, /* System over ambient temperature */
|
||||
OPAL_SYSTEMP_INT = 0x0002, /* System over internal temperature */
|
||||
OPAL_SYSTEMP_HMD = 0x0004, /* System over ambient humidity */
|
||||
};
|
||||
|
||||
/* Cooling EPOW */
|
||||
enum OpalSysCooling {
|
||||
OPAL_SYSCOOL_INSF = 0x0001, /* System insufficient cooling */
|
||||
};
|
||||
|
||||
/* Argument to OPAL_CEC_REBOOT2() */
|
||||
enum {
|
||||
OPAL_REBOOT_NORMAL = 0,
|
||||
OPAL_REBOOT_PLATFORM_ERROR = 1,
|
||||
};
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#endif /* __OPAL_API_H */
|
||||
|
@ -44,6 +44,7 @@ int64_t opal_tpo_write(uint64_t token, uint32_t year_mon_day,
|
||||
uint32_t hour_min);
|
||||
int64_t opal_cec_power_down(uint64_t request);
|
||||
int64_t opal_cec_reboot(void);
|
||||
int64_t opal_cec_reboot2(uint32_t reboot_type, char *diag);
|
||||
int64_t opal_read_nvram(uint64_t buffer, uint64_t size, uint64_t offset);
|
||||
int64_t opal_write_nvram(uint64_t buffer, uint64_t size, uint64_t offset);
|
||||
int64_t opal_handle_interrupt(uint64_t isn, __be64 *outstanding_event_mask);
|
||||
@ -141,7 +142,8 @@ int64_t opal_pci_fence_phb(uint64_t phb_id);
|
||||
int64_t opal_pci_reinit(uint64_t phb_id, uint64_t reinit_scope, uint64_t data);
|
||||
int64_t opal_pci_mask_pe_error(uint64_t phb_id, uint16_t pe_number, uint8_t error_type, uint8_t mask_action);
|
||||
int64_t opal_set_slot_led_status(uint64_t phb_id, uint64_t slot_id, uint8_t led_type, uint8_t led_action);
|
||||
int64_t opal_get_epow_status(__be64 *status);
|
||||
int64_t opal_get_epow_status(__be16 *epow_status, __be16 *num_epow_classes);
|
||||
int64_t opal_get_dpo_status(__be64 *dpo_timeout);
|
||||
int64_t opal_set_system_attention_led(uint8_t led_action);
|
||||
int64_t opal_pci_next_error(uint64_t phb_id, __be64 *first_frozen_pe,
|
||||
__be16 *pci_error_type, __be16 *severity);
|
||||
@ -195,6 +197,10 @@ int64_t opal_ipmi_recv(uint64_t interface, struct opal_ipmi_msg *msg,
|
||||
int64_t opal_i2c_request(uint64_t async_token, uint32_t bus_id,
|
||||
struct opal_i2c_request *oreq);
|
||||
int64_t opal_prd_msg(struct opal_prd_msg *msg);
|
||||
int64_t opal_leds_get_ind(char *loc_code, __be64 *led_mask,
|
||||
__be64 *led_value, __be64 *max_led_type);
|
||||
int64_t opal_leds_set_ind(uint64_t token, char *loc_code, const u64 led_mask,
|
||||
const u64 led_value, __be64 *max_led_type);
|
||||
|
||||
int64_t opal_flash_read(uint64_t id, uint64_t offset, uint64_t buf,
|
||||
uint64_t size, uint64_t token);
|
||||
|
@ -42,6 +42,7 @@ struct pci_controller_ops {
|
||||
#endif
|
||||
|
||||
int (*dma_set_mask)(struct pci_dev *dev, u64 dma_mask);
|
||||
u64 (*dma_get_required_mask)(struct pci_dev *dev);
|
||||
|
||||
void (*shutdown)(struct pci_controller *);
|
||||
};
|
||||
|
@ -134,11 +134,11 @@
|
||||
|
||||
#define pte_iterate_hashed_end() } while(0)
|
||||
|
||||
#ifdef CONFIG_PPC_HAS_HASH_64K
|
||||
#define pte_pagesize_index(mm, addr, pte) get_slice_psize(mm, addr)
|
||||
#else
|
||||
/*
|
||||
* We expect this to be called only for user addresses or kernel virtual
|
||||
* addresses other than the linear mapping.
|
||||
*/
|
||||
#define pte_pagesize_index(mm, addr, pte) MMU_PAGE_4K
|
||||
#endif
|
||||
|
||||
#endif /* __real_pte */
|
||||
|
||||
|
@ -169,6 +169,17 @@ static inline void __set_pte_at(struct mm_struct *mm, unsigned long addr,
|
||||
* cases, and 32-bit non-hash with 32-bit PTEs.
|
||||
*/
|
||||
*ptep = pte;
|
||||
|
||||
#ifdef CONFIG_PPC_BOOK3E_64
|
||||
/*
|
||||
* With hardware tablewalk, a sync is needed to ensure that
|
||||
* subsequent accesses see the PTE we just wrote. Unlike userspace
|
||||
* mappings, we can't tolerate spurious faults, so make sure
|
||||
* the new PTE will be seen the first time.
|
||||
*/
|
||||
if (is_kernel_addr(addr))
|
||||
mb();
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -61,6 +61,7 @@ int rtas_write_config(struct pci_dn *, int where, int size, u32 val);
|
||||
int rtas_read_config(struct pci_dn *, int where, int size, u32 *val);
|
||||
void eeh_pe_state_mark(struct eeh_pe *pe, int state);
|
||||
void eeh_pe_state_clear(struct eeh_pe *pe, int state);
|
||||
void eeh_pe_state_mark_with_cfg(struct eeh_pe *pe, int state);
|
||||
void eeh_pe_dev_mode_mark(struct eeh_pe *pe, int mode);
|
||||
|
||||
void eeh_sysfs_add_device(struct pci_dev *pdev);
|
||||
|
@ -264,7 +264,6 @@ struct thread_struct {
|
||||
u64 tm_tfhar; /* Transaction fail handler addr */
|
||||
u64 tm_texasr; /* Transaction exception & summary */
|
||||
u64 tm_tfiar; /* Transaction fail instr address reg */
|
||||
unsigned long tm_orig_msr; /* Thread's MSR on ctx switch */
|
||||
struct pt_regs ckpt_regs; /* Checkpointed registers */
|
||||
|
||||
unsigned long tm_tar;
|
||||
|
@ -109,7 +109,8 @@ extern unsigned long bad_call_to_PMD_PAGE_SIZE(void);
|
||||
* the processor might need it for DMA coherency.
|
||||
*/
|
||||
#define _PAGE_BASE_NC (_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_PSIZE)
|
||||
#if defined(CONFIG_SMP) || defined(CONFIG_PPC_STD_MMU)
|
||||
#if defined(CONFIG_SMP) || defined(CONFIG_PPC_STD_MMU) || \
|
||||
defined(CONFIG_PPC_E500MC)
|
||||
#define _PAGE_BASE (_PAGE_BASE_NC | _PAGE_COHERENT)
|
||||
#else
|
||||
#define _PAGE_BASE (_PAGE_BASE_NC)
|
||||
|
@ -1193,8 +1193,7 @@
|
||||
#ifdef CONFIG_PPC_BOOK3S_64
|
||||
#define __mtmsrd(v, l) asm volatile("mtmsrd %0," __stringify(l) \
|
||||
: : "r" (v) : "memory")
|
||||
#define mtmsrd(v) __mtmsrd((v), 0)
|
||||
#define mtmsr(v) mtmsrd(v)
|
||||
#define mtmsr(v) __mtmsrd((v), 0)
|
||||
#else
|
||||
#define mtmsr(v) asm volatile("mtmsr %0" : \
|
||||
: "r" ((unsigned long)(v)) \
|
||||
@ -1281,6 +1280,15 @@ struct pt_regs;
|
||||
|
||||
extern void ppc_save_regs(struct pt_regs *regs);
|
||||
|
||||
static inline void update_power8_hid0(unsigned long hid0)
|
||||
{
|
||||
/*
|
||||
* The HID0 update on Power8 should at the very least be
|
||||
* preceded by a a SYNC instruction followed by an ISYNC
|
||||
* instruction
|
||||
*/
|
||||
asm volatile("sync; mtspr %0,%1; isync":: "i"(SPRN_HID0), "r"(hid0));
|
||||
}
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _ASM_POWERPC_REG_H */
|
||||
|
@ -343,6 +343,7 @@ extern void rtas_power_off(void);
|
||||
extern void rtas_halt(void);
|
||||
extern void rtas_os_term(char *str);
|
||||
extern int rtas_get_sensor(int sensor, int index, int *state);
|
||||
extern int rtas_get_sensor_fast(int sensor, int index, int *state);
|
||||
extern int rtas_get_power_level(int powerdomain, int *level);
|
||||
extern int rtas_set_power_level(int powerdomain, int level, int *setlevel);
|
||||
extern bool rtas_indicator_present(int token, int *maxindex);
|
||||
|
@ -241,12 +241,6 @@ struct spu_priv2_collapsed {
|
||||
*/
|
||||
struct spu_state {
|
||||
struct spu_lscsa *lscsa;
|
||||
#ifdef CONFIG_SPU_FS_64K_LS
|
||||
int use_big_pages;
|
||||
/* One struct page per 64k page */
|
||||
#define SPU_LSCSA_NUM_BIG_PAGES (sizeof(struct spu_lscsa) / 0x10000)
|
||||
struct page *lscsa_pages[SPU_LSCSA_NUM_BIG_PAGES];
|
||||
#endif
|
||||
struct spu_problem_collapsed prob;
|
||||
struct spu_priv1_collapsed priv1;
|
||||
struct spu_priv2_collapsed priv2;
|
||||
|
@ -22,10 +22,15 @@
|
||||
extern const unsigned long sys_call_table[];
|
||||
#endif /* CONFIG_FTRACE_SYSCALLS */
|
||||
|
||||
static inline long syscall_get_nr(struct task_struct *task,
|
||||
struct pt_regs *regs)
|
||||
static inline int syscall_get_nr(struct task_struct *task, struct pt_regs *regs)
|
||||
{
|
||||
return TRAP(regs) == 0xc00 ? regs->gpr[0] : -1L;
|
||||
/*
|
||||
* Note that we are returning an int here. That means 0xffffffff, ie.
|
||||
* 32-bit negative 1, will be interpreted as -1 on a 64-bit kernel.
|
||||
* This is important for seccomp so that compat tasks can set r0 = -1
|
||||
* to reject the syscall.
|
||||
*/
|
||||
return TRAP(regs) == 0xc00 ? regs->gpr[0] : -1;
|
||||
}
|
||||
|
||||
static inline void syscall_rollback(struct task_struct *task,
|
||||
@ -34,12 +39,6 @@ static inline void syscall_rollback(struct task_struct *task,
|
||||
regs->gpr[3] = regs->orig_gpr3;
|
||||
}
|
||||
|
||||
static inline long syscall_get_error(struct task_struct *task,
|
||||
struct pt_regs *regs)
|
||||
{
|
||||
return (regs->ccr & 0x10000000) ? -regs->gpr[3] : 0;
|
||||
}
|
||||
|
||||
static inline long syscall_get_return_value(struct task_struct *task,
|
||||
struct pt_regs *regs)
|
||||
{
|
||||
@ -50,9 +49,15 @@ static inline void syscall_set_return_value(struct task_struct *task,
|
||||
struct pt_regs *regs,
|
||||
int error, long val)
|
||||
{
|
||||
/*
|
||||
* In the general case it's not obvious that we must deal with CCR
|
||||
* here, as the syscall exit path will also do that for us. However
|
||||
* there are some places, eg. the signal code, which check ccr to
|
||||
* decide if the value in r3 is actually an error.
|
||||
*/
|
||||
if (error) {
|
||||
regs->ccr |= 0x10000000L;
|
||||
regs->gpr[3] = -error;
|
||||
regs->gpr[3] = error;
|
||||
} else {
|
||||
regs->ccr &= ~0x10000000L;
|
||||
regs->gpr[3] = val;
|
||||
@ -64,19 +69,22 @@ static inline void syscall_get_arguments(struct task_struct *task,
|
||||
unsigned int i, unsigned int n,
|
||||
unsigned long *args)
|
||||
{
|
||||
unsigned long val, mask = -1UL;
|
||||
|
||||
BUG_ON(i + n > 6);
|
||||
#ifdef CONFIG_PPC64
|
||||
if (test_tsk_thread_flag(task, TIF_32BIT)) {
|
||||
/*
|
||||
* Zero-extend 32-bit argument values. The high bits are
|
||||
* garbage ignored by the actual syscall dispatch.
|
||||
*/
|
||||
while (n-- > 0)
|
||||
args[n] = (u32) regs->gpr[3 + i + n];
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_COMPAT
|
||||
if (test_tsk_thread_flag(task, TIF_32BIT))
|
||||
mask = 0xffffffff;
|
||||
#endif
|
||||
memcpy(args, ®s->gpr[3 + i], n * sizeof(args[0]));
|
||||
while (n--) {
|
||||
if (n == 0 && i == 0)
|
||||
val = regs->orig_gpr3;
|
||||
else
|
||||
val = regs->gpr[3 + i + n];
|
||||
|
||||
args[n] = val & mask;
|
||||
}
|
||||
}
|
||||
|
||||
static inline void syscall_set_arguments(struct task_struct *task,
|
||||
@ -86,6 +94,10 @@ static inline void syscall_set_arguments(struct task_struct *task,
|
||||
{
|
||||
BUG_ON(i + n > 6);
|
||||
memcpy(®s->gpr[3 + i], args, n * sizeof(args[0]));
|
||||
|
||||
/* Also copy the first argument into orig_gpr3 */
|
||||
if (i == 0 && n > 0)
|
||||
regs->orig_gpr3 = args[0];
|
||||
}
|
||||
|
||||
static inline int syscall_get_arch(void)
|
||||
|
19
arch/powerpc/include/asm/trace_clock.h
Normal file
19
arch/powerpc/include/asm/trace_clock.h
Normal file
@ -0,0 +1,19 @@
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* Copyright (C) 2015 Naveen N. Rao, IBM Corporation
|
||||
*/
|
||||
|
||||
#ifndef _ASM_PPC_TRACE_CLOCK_H
|
||||
#define _ASM_PPC_TRACE_CLOCK_H
|
||||
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
extern u64 notrace trace_clock_ppc_tb(void);
|
||||
|
||||
#define ARCH_TRACE_CLOCKS { trace_clock_ppc_tb, "ppc-tb", 0 },
|
||||
|
||||
#endif /* _ASM_PPC_TRACE_CLOCK_H */
|
@ -6,6 +6,7 @@ header-y += bitsperlong.h
|
||||
header-y += bootx.h
|
||||
header-y += byteorder.h
|
||||
header-y += cputable.h
|
||||
header-y += eeh.h
|
||||
header-y += elf.h
|
||||
header-y += epapr_hcalls.h
|
||||
header-y += errno.h
|
||||
|
@ -6,6 +6,4 @@
|
||||
#undef EDEADLOCK
|
||||
#define EDEADLOCK 58 /* File locking deadlock error */
|
||||
|
||||
#define _LAST_ERRNO 516
|
||||
|
||||
#endif /* _ASM_POWERPC_ERRNO_H */
|
||||
|
@ -28,7 +28,7 @@ struct sigcontext {
|
||||
/*
|
||||
* To maintain compatibility with current implementations the sigcontext is
|
||||
* extended by appending a pointer (v_regs) to a quadword type (elf_vrreg_t)
|
||||
* followed by an unstructured (vmx_reserve) field of 69 doublewords. This
|
||||
* followed by an unstructured (vmx_reserve) field of 101 doublewords. This
|
||||
* allows the array of vector registers to be quadword aligned independent of
|
||||
* the alignment of the containing sigcontext or ucontext. It is the
|
||||
* responsibility of the code setting the sigcontext to set this pointer to
|
||||
@ -80,7 +80,7 @@ struct sigcontext {
|
||||
* registers and vscr/vrsave.
|
||||
*/
|
||||
elf_vrreg_t __user *v_regs;
|
||||
long vmx_reserve[ELF_NVRREG+ELF_NVRREG+32+1];
|
||||
long vmx_reserve[ELF_NVRREG + ELF_NVRREG + 1 + 32];
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@ -118,6 +118,7 @@ obj-$(CONFIG_PPC_IO_WORKAROUNDS) += io-workarounds.o
|
||||
obj-$(CONFIG_DYNAMIC_FTRACE) += ftrace.o
|
||||
obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += ftrace.o
|
||||
obj-$(CONFIG_FTRACE_SYSCALLS) += ftrace.o
|
||||
obj-$(CONFIG_TRACING) += trace_clock.o
|
||||
|
||||
ifneq ($(CONFIG_PPC_INDIRECT_PIO),y)
|
||||
obj-y += iomap.o
|
||||
|
@ -213,7 +213,6 @@ int main(void)
|
||||
offsetof(struct tlb_core_data, esel_max));
|
||||
DEFINE(TCD_ESEL_FIRST,
|
||||
offsetof(struct tlb_core_data, esel_first));
|
||||
DEFINE(TCD_LOCK, offsetof(struct tlb_core_data, lock));
|
||||
#endif /* CONFIG_PPC_BOOK3E */
|
||||
|
||||
#ifdef CONFIG_PPC_STD_MMU_64
|
||||
|
@ -73,7 +73,7 @@ static void dma_iommu_unmap_sg(struct device *dev, struct scatterlist *sglist,
|
||||
}
|
||||
|
||||
/* We support DMA to/from any memory page via the iommu */
|
||||
static int dma_iommu_dma_supported(struct device *dev, u64 mask)
|
||||
int dma_iommu_dma_supported(struct device *dev, u64 mask)
|
||||
{
|
||||
struct iommu_table *tbl = get_iommu_table_base(dev);
|
||||
|
||||
|
@ -47,8 +47,8 @@ static u64 swiotlb_powerpc_get_required(struct device *dev)
|
||||
* for everything else.
|
||||
*/
|
||||
struct dma_map_ops swiotlb_dma_ops = {
|
||||
.alloc = dma_direct_alloc_coherent,
|
||||
.free = dma_direct_free_coherent,
|
||||
.alloc = __dma_direct_alloc_coherent,
|
||||
.free = __dma_direct_free_coherent,
|
||||
.mmap = dma_direct_mmap_coherent,
|
||||
.map_sg = swiotlb_map_sg_attrs,
|
||||
.unmap_sg = swiotlb_unmap_sg_attrs,
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include <asm/bug.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/swiotlb.h>
|
||||
#include <asm/iommu.h>
|
||||
|
||||
/*
|
||||
* Generic direct DMA implementation
|
||||
@ -39,9 +40,31 @@ static u64 __maybe_unused get_pfn_limit(struct device *dev)
|
||||
return pfn;
|
||||
}
|
||||
|
||||
void *dma_direct_alloc_coherent(struct device *dev, size_t size,
|
||||
dma_addr_t *dma_handle, gfp_t flag,
|
||||
struct dma_attrs *attrs)
|
||||
static int dma_direct_dma_supported(struct device *dev, u64 mask)
|
||||
{
|
||||
#ifdef CONFIG_PPC64
|
||||
u64 limit = get_dma_offset(dev) + (memblock_end_of_DRAM() - 1);
|
||||
|
||||
/* Limit fits in the mask, we are good */
|
||||
if (mask >= limit)
|
||||
return 1;
|
||||
|
||||
#ifdef CONFIG_FSL_SOC
|
||||
/* Freescale gets another chance via ZONE_DMA/ZONE_DMA32, however
|
||||
* that will have to be refined if/when they support iommus
|
||||
*/
|
||||
return 1;
|
||||
#endif
|
||||
/* Sorry ... */
|
||||
return 0;
|
||||
#else
|
||||
return 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
void *__dma_direct_alloc_coherent(struct device *dev, size_t size,
|
||||
dma_addr_t *dma_handle, gfp_t flag,
|
||||
struct dma_attrs *attrs)
|
||||
{
|
||||
void *ret;
|
||||
#ifdef CONFIG_NOT_COHERENT_CACHE
|
||||
@ -96,9 +119,9 @@ void *dma_direct_alloc_coherent(struct device *dev, size_t size,
|
||||
#endif
|
||||
}
|
||||
|
||||
void dma_direct_free_coherent(struct device *dev, size_t size,
|
||||
void *vaddr, dma_addr_t dma_handle,
|
||||
struct dma_attrs *attrs)
|
||||
void __dma_direct_free_coherent(struct device *dev, size_t size,
|
||||
void *vaddr, dma_addr_t dma_handle,
|
||||
struct dma_attrs *attrs)
|
||||
{
|
||||
#ifdef CONFIG_NOT_COHERENT_CACHE
|
||||
__dma_free_coherent(size, vaddr);
|
||||
@ -107,6 +130,51 @@ void dma_direct_free_coherent(struct device *dev, size_t size,
|
||||
#endif
|
||||
}
|
||||
|
||||
static void *dma_direct_alloc_coherent(struct device *dev, size_t size,
|
||||
dma_addr_t *dma_handle, gfp_t flag,
|
||||
struct dma_attrs *attrs)
|
||||
{
|
||||
struct iommu_table *iommu;
|
||||
|
||||
/* The coherent mask may be smaller than the real mask, check if
|
||||
* we can really use the direct ops
|
||||
*/
|
||||
if (dma_direct_dma_supported(dev, dev->coherent_dma_mask))
|
||||
return __dma_direct_alloc_coherent(dev, size, dma_handle,
|
||||
flag, attrs);
|
||||
|
||||
/* Ok we can't ... do we have an iommu ? If not, fail */
|
||||
iommu = get_iommu_table_base(dev);
|
||||
if (!iommu)
|
||||
return NULL;
|
||||
|
||||
/* Try to use the iommu */
|
||||
return iommu_alloc_coherent(dev, iommu, size, dma_handle,
|
||||
dev->coherent_dma_mask, flag,
|
||||
dev_to_node(dev));
|
||||
}
|
||||
|
||||
static void dma_direct_free_coherent(struct device *dev, size_t size,
|
||||
void *vaddr, dma_addr_t dma_handle,
|
||||
struct dma_attrs *attrs)
|
||||
{
|
||||
struct iommu_table *iommu;
|
||||
|
||||
/* See comments in dma_direct_alloc_coherent() */
|
||||
if (dma_direct_dma_supported(dev, dev->coherent_dma_mask))
|
||||
return __dma_direct_free_coherent(dev, size, vaddr, dma_handle,
|
||||
attrs);
|
||||
/* Maybe we used an iommu ... */
|
||||
iommu = get_iommu_table_base(dev);
|
||||
|
||||
/* If we hit that we should have never allocated in the first
|
||||
* place so how come we are freeing ?
|
||||
*/
|
||||
if (WARN_ON(!iommu))
|
||||
return;
|
||||
iommu_free_coherent(iommu, size, vaddr, dma_handle);
|
||||
}
|
||||
|
||||
int dma_direct_mmap_coherent(struct device *dev, struct vm_area_struct *vma,
|
||||
void *cpu_addr, dma_addr_t handle, size_t size,
|
||||
struct dma_attrs *attrs)
|
||||
@ -147,18 +215,6 @@ static void dma_direct_unmap_sg(struct device *dev, struct scatterlist *sg,
|
||||
{
|
||||
}
|
||||
|
||||
static int dma_direct_dma_supported(struct device *dev, u64 mask)
|
||||
{
|
||||
#ifdef CONFIG_PPC64
|
||||
/* Could be improved so platforms can set the limit in case
|
||||
* they have limited DMA windows
|
||||
*/
|
||||
return mask >= get_dma_offset(dev) + (memblock_end_of_DRAM() - 1);
|
||||
#else
|
||||
return 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
static u64 dma_direct_get_required_mask(struct device *dev)
|
||||
{
|
||||
u64 end, mask;
|
||||
@ -230,6 +286,25 @@ struct dma_map_ops dma_direct_ops = {
|
||||
};
|
||||
EXPORT_SYMBOL(dma_direct_ops);
|
||||
|
||||
int dma_set_coherent_mask(struct device *dev, u64 mask)
|
||||
{
|
||||
if (!dma_supported(dev, mask)) {
|
||||
/*
|
||||
* We need to special case the direct DMA ops which can
|
||||
* support a fallback for coherent allocations. There
|
||||
* is no dma_op->set_coherent_mask() so we have to do
|
||||
* things the hard way:
|
||||
*/
|
||||
if (get_dma_ops(dev) != &dma_direct_ops ||
|
||||
get_iommu_table_base(dev) == NULL ||
|
||||
!dma_iommu_dma_supported(dev, mask))
|
||||
return -EIO;
|
||||
}
|
||||
dev->coherent_dma_mask = mask;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dma_set_coherent_mask);
|
||||
|
||||
#define PREALLOC_DMA_DEBUG_ENTRIES (1 << 16)
|
||||
|
||||
int __dma_set_mask(struct device *dev, u64 dma_mask)
|
||||
@ -278,6 +353,13 @@ u64 dma_get_required_mask(struct device *dev)
|
||||
if (ppc_md.dma_get_required_mask)
|
||||
return ppc_md.dma_get_required_mask(dev);
|
||||
|
||||
if (dev_is_pci(dev)) {
|
||||
struct pci_dev *pdev = to_pci_dev(dev);
|
||||
struct pci_controller *phb = pci_bus_to_host(pdev->bus);
|
||||
if (phb->controller_ops.dma_get_required_mask)
|
||||
return phb->controller_ops.dma_get_required_mask(pdev);
|
||||
}
|
||||
|
||||
return __dma_get_required_mask(dev);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dma_get_required_mask);
|
||||
|
@ -308,11 +308,26 @@ void eeh_slot_error_detail(struct eeh_pe *pe, int severity)
|
||||
if (!(pe->type & EEH_PE_PHB)) {
|
||||
if (eeh_has_flag(EEH_ENABLE_IO_FOR_LOG))
|
||||
eeh_pci_enable(pe, EEH_OPT_THAW_MMIO);
|
||||
eeh_ops->configure_bridge(pe);
|
||||
eeh_pe_restore_bars(pe);
|
||||
|
||||
pci_regs_buf[0] = 0;
|
||||
eeh_pe_traverse(pe, eeh_dump_pe_log, &loglen);
|
||||
/*
|
||||
* The config space of some PCI devices can't be accessed
|
||||
* when their PEs are in frozen state. Otherwise, fenced
|
||||
* PHB might be seen. Those PEs are identified with flag
|
||||
* EEH_PE_CFG_RESTRICTED, indicating EEH_PE_CFG_BLOCKED
|
||||
* is set automatically when the PE is put to EEH_PE_ISOLATED.
|
||||
*
|
||||
* Restoring BARs possibly triggers PCI config access in
|
||||
* (OPAL) firmware and then causes fenced PHB. If the
|
||||
* PCI config is blocked with flag EEH_PE_CFG_BLOCKED, it's
|
||||
* pointless to restore BARs and dump config space.
|
||||
*/
|
||||
eeh_ops->configure_bridge(pe);
|
||||
if (!(pe->state & EEH_PE_CFG_BLOCKED)) {
|
||||
eeh_pe_restore_bars(pe);
|
||||
|
||||
pci_regs_buf[0] = 0;
|
||||
eeh_pe_traverse(pe, eeh_dump_pe_log, &loglen);
|
||||
}
|
||||
}
|
||||
|
||||
eeh_ops->get_log(pe, severity, pci_regs_buf, loglen);
|
||||
@ -750,14 +765,14 @@ int pcibios_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state stat
|
||||
eeh_pe_state_clear(pe, EEH_PE_ISOLATED);
|
||||
break;
|
||||
case pcie_hot_reset:
|
||||
eeh_pe_state_mark(pe, EEH_PE_ISOLATED);
|
||||
eeh_pe_state_mark_with_cfg(pe, EEH_PE_ISOLATED);
|
||||
eeh_ops->set_option(pe, EEH_OPT_FREEZE_PE);
|
||||
eeh_pe_dev_traverse(pe, eeh_disable_and_save_dev_state, dev);
|
||||
eeh_pe_state_mark(pe, EEH_PE_CFG_BLOCKED);
|
||||
eeh_ops->reset(pe, EEH_RESET_HOT);
|
||||
break;
|
||||
case pcie_warm_reset:
|
||||
eeh_pe_state_mark(pe, EEH_PE_ISOLATED);
|
||||
eeh_pe_state_mark_with_cfg(pe, EEH_PE_ISOLATED);
|
||||
eeh_ops->set_option(pe, EEH_OPT_FREEZE_PE);
|
||||
eeh_pe_dev_traverse(pe, eeh_disable_and_save_dev_state, dev);
|
||||
eeh_pe_state_mark(pe, EEH_PE_CFG_BLOCKED);
|
||||
@ -1116,9 +1131,6 @@ void eeh_add_device_late(struct pci_dev *dev)
|
||||
return;
|
||||
}
|
||||
|
||||
if (eeh_has_flag(EEH_PROBE_MODE_DEV))
|
||||
eeh_ops->probe(pdn, NULL);
|
||||
|
||||
/*
|
||||
* The EEH cache might not be removed correctly because of
|
||||
* unbalanced kref to the device during unplug time, which
|
||||
@ -1142,6 +1154,9 @@ void eeh_add_device_late(struct pci_dev *dev)
|
||||
dev->dev.archdata.edev = NULL;
|
||||
}
|
||||
|
||||
if (eeh_has_flag(EEH_PROBE_MODE_DEV))
|
||||
eeh_ops->probe(pdn, NULL);
|
||||
|
||||
edev->pdev = dev;
|
||||
dev->dev.archdata.edev = edev;
|
||||
|
||||
|
@ -657,6 +657,28 @@ void eeh_pe_state_clear(struct eeh_pe *pe, int state)
|
||||
eeh_pe_traverse(pe, __eeh_pe_state_clear, &state);
|
||||
}
|
||||
|
||||
/**
|
||||
* eeh_pe_state_mark_with_cfg - Mark PE state with unblocked config space
|
||||
* @pe: PE
|
||||
* @state: PE state to be set
|
||||
*
|
||||
* Set specified flag to PE and its child PEs. The PCI config space
|
||||
* of some PEs is blocked automatically when EEH_PE_ISOLATED is set,
|
||||
* which isn't needed in some situations. The function allows to set
|
||||
* the specified flag to indicated PEs without blocking their PCI
|
||||
* config space.
|
||||
*/
|
||||
void eeh_pe_state_mark_with_cfg(struct eeh_pe *pe, int state)
|
||||
{
|
||||
eeh_pe_traverse(pe, __eeh_pe_state_mark, &state);
|
||||
if (!(state & EEH_PE_ISOLATED))
|
||||
return;
|
||||
|
||||
/* Clear EEH_PE_CFG_BLOCKED, which might be set just now */
|
||||
state = EEH_PE_CFG_BLOCKED;
|
||||
eeh_pe_traverse(pe, __eeh_pe_state_clear, &state);
|
||||
}
|
||||
|
||||
/*
|
||||
* Some PCI bridges (e.g. PLX bridges) have primary/secondary
|
||||
* buses assigned explicitly by firmware, and we probably have
|
||||
|
@ -20,6 +20,7 @@
|
||||
*/
|
||||
|
||||
#include <linux/errno.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/sys.h>
|
||||
#include <linux/threads.h>
|
||||
#include <asm/reg.h>
|
||||
@ -354,7 +355,7 @@ ret_from_syscall:
|
||||
SYNC
|
||||
MTMSRD(r10)
|
||||
lwz r9,TI_FLAGS(r12)
|
||||
li r8,-_LAST_ERRNO
|
||||
li r8,-MAX_ERRNO
|
||||
andi. r0,r9,(_TIF_SYSCALL_DOTRACE|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK)
|
||||
bne- syscall_exit_work
|
||||
cmplw 0,r3,r8
|
||||
@ -457,6 +458,10 @@ syscall_dotrace:
|
||||
lwz r7,GPR7(r1)
|
||||
lwz r8,GPR8(r1)
|
||||
REST_NVGPRS(r1)
|
||||
|
||||
cmplwi r0,NR_syscalls
|
||||
/* Return code is already in r3 thanks to do_syscall_trace_enter() */
|
||||
bge- ret_from_syscall
|
||||
b syscall_dotrace_cont
|
||||
|
||||
syscall_exit_work:
|
||||
|
@ -19,6 +19,7 @@
|
||||
*/
|
||||
|
||||
#include <linux/errno.h>
|
||||
#include <linux/err.h>
|
||||
#include <asm/unistd.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/page.h>
|
||||
@ -150,8 +151,7 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_SPLPAR)
|
||||
CURRENT_THREAD_INFO(r11, r1)
|
||||
ld r10,TI_FLAGS(r11)
|
||||
andi. r11,r10,_TIF_SYSCALL_DOTRACE
|
||||
bne syscall_dotrace
|
||||
.Lsyscall_dotrace_cont:
|
||||
bne syscall_dotrace /* does not return */
|
||||
cmpldi 0,r0,NR_syscalls
|
||||
bge- syscall_enosys
|
||||
|
||||
@ -207,7 +207,7 @@ system_call: /* label this so stack traces look sane */
|
||||
#endif /* CONFIG_PPC_BOOK3E */
|
||||
|
||||
ld r9,TI_FLAGS(r12)
|
||||
li r11,-_LAST_ERRNO
|
||||
li r11,-MAX_ERRNO
|
||||
andi. r0,r9,(_TIF_SYSCALL_DOTRACE|_TIF_SINGLESTEP|_TIF_USER_WORK_MASK|_TIF_PERSYSCALL_MASK)
|
||||
bne- syscall_exit_work
|
||||
cmpld r3,r11
|
||||
@ -245,22 +245,34 @@ syscall_dotrace:
|
||||
bl save_nvgprs
|
||||
addi r3,r1,STACK_FRAME_OVERHEAD
|
||||
bl do_syscall_trace_enter
|
||||
|
||||
/*
|
||||
* Restore argument registers possibly just changed.
|
||||
* We use the return value of do_syscall_trace_enter
|
||||
* for the call number to look up in the table (r0).
|
||||
* We use the return value of do_syscall_trace_enter() as the syscall
|
||||
* number. If the syscall was rejected for any reason do_syscall_trace_enter()
|
||||
* returns an invalid syscall number and the test below against
|
||||
* NR_syscalls will fail.
|
||||
*/
|
||||
mr r0,r3
|
||||
|
||||
/* Restore argument registers just clobbered and/or possibly changed. */
|
||||
ld r3,GPR3(r1)
|
||||
ld r4,GPR4(r1)
|
||||
ld r5,GPR5(r1)
|
||||
ld r6,GPR6(r1)
|
||||
ld r7,GPR7(r1)
|
||||
ld r8,GPR8(r1)
|
||||
|
||||
/* Repopulate r9 and r10 for the system_call path */
|
||||
addi r9,r1,STACK_FRAME_OVERHEAD
|
||||
CURRENT_THREAD_INFO(r10, r1)
|
||||
ld r10,TI_FLAGS(r10)
|
||||
b .Lsyscall_dotrace_cont
|
||||
|
||||
cmpldi r0,NR_syscalls
|
||||
blt+ system_call
|
||||
|
||||
/* Return code is already in r3 thanks to do_syscall_trace_enter() */
|
||||
b .Lsyscall_exit
|
||||
|
||||
|
||||
syscall_enosys:
|
||||
li r3,-ENOSYS
|
||||
@ -277,7 +289,7 @@ syscall_exit_work:
|
||||
beq+ 0f
|
||||
REST_NVGPRS(r1)
|
||||
b 2f
|
||||
0: cmpld r3,r11 /* r10 is -LAST_ERRNO */
|
||||
0: cmpld r3,r11 /* r11 is -MAX_ERRNO */
|
||||
blt+ 1f
|
||||
andi. r0,r9,_TIF_NOERROR
|
||||
bne- 1f
|
||||
|
@ -1313,11 +1313,14 @@ skpinv: addi r6,r6,1 /* Increment */
|
||||
sync
|
||||
isync
|
||||
|
||||
/* The mapping only needs to be cache-coherent on SMP */
|
||||
#ifdef CONFIG_SMP
|
||||
#define M_IF_SMP MAS2_M
|
||||
/*
|
||||
* The mapping only needs to be cache-coherent on SMP, except on
|
||||
* Freescale e500mc derivatives where it's also needed for coherent DMA.
|
||||
*/
|
||||
#if defined(CONFIG_SMP) || defined(CONFIG_PPC_E500MC)
|
||||
#define M_IF_NEEDED MAS2_M
|
||||
#else
|
||||
#define M_IF_SMP 0
|
||||
#define M_IF_NEEDED 0
|
||||
#endif
|
||||
|
||||
/* 6. Setup KERNELBASE mapping in TLB[0]
|
||||
@ -1332,7 +1335,7 @@ skpinv: addi r6,r6,1 /* Increment */
|
||||
ori r6,r6,(MAS1_TSIZE(BOOK3E_PAGESZ_1GB))@l
|
||||
mtspr SPRN_MAS1,r6
|
||||
|
||||
LOAD_REG_IMMEDIATE(r6, PAGE_OFFSET | M_IF_SMP)
|
||||
LOAD_REG_IMMEDIATE(r6, PAGE_OFFSET | M_IF_NEEDED)
|
||||
mtspr SPRN_MAS2,r6
|
||||
|
||||
rlwinm r5,r5,0,0,25
|
||||
|
@ -152,11 +152,14 @@ skpinv: addi r6,r6,1 /* Increment */
|
||||
tlbivax 0,r9
|
||||
TLBSYNC
|
||||
|
||||
/* The mapping only needs to be cache-coherent on SMP */
|
||||
#ifdef CONFIG_SMP
|
||||
#define M_IF_SMP MAS2_M
|
||||
/*
|
||||
* The mapping only needs to be cache-coherent on SMP, except on
|
||||
* Freescale e500mc derivatives where it's also needed for coherent DMA.
|
||||
*/
|
||||
#if defined(CONFIG_SMP) || defined(CONFIG_PPC_E500MC)
|
||||
#define M_IF_NEEDED MAS2_M
|
||||
#else
|
||||
#define M_IF_SMP 0
|
||||
#define M_IF_NEEDED 0
|
||||
#endif
|
||||
|
||||
#if defined(ENTRY_MAPPING_BOOT_SETUP)
|
||||
@ -167,8 +170,8 @@ skpinv: addi r6,r6,1 /* Increment */
|
||||
lis r6,(MAS1_VALID|MAS1_IPROT)@h
|
||||
ori r6,r6,(MAS1_TSIZE(BOOK3E_PAGESZ_64M))@l
|
||||
mtspr SPRN_MAS1,r6
|
||||
lis r6,MAS2_VAL(PAGE_OFFSET, BOOK3E_PAGESZ_64M, M_IF_SMP)@h
|
||||
ori r6,r6,MAS2_VAL(PAGE_OFFSET, BOOK3E_PAGESZ_64M, M_IF_SMP)@l
|
||||
lis r6,MAS2_VAL(PAGE_OFFSET, BOOK3E_PAGESZ_64M, M_IF_NEEDED)@h
|
||||
ori r6,r6,MAS2_VAL(PAGE_OFFSET, BOOK3E_PAGESZ_64M, M_IF_NEEDED)@l
|
||||
mtspr SPRN_MAS2,r6
|
||||
mtspr SPRN_MAS3,r8
|
||||
tlbwe
|
||||
|
@ -649,7 +649,6 @@ static void kvm_check_ins(u32 *inst, u32 features)
|
||||
kvm_patch_ins_mtsrin(inst, inst_rt, inst_rb);
|
||||
}
|
||||
break;
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -475,9 +475,18 @@ _GLOBAL(kexec_wait)
|
||||
#ifdef CONFIG_KEXEC /* use no memory without kexec */
|
||||
lwz r4,0(r5)
|
||||
cmpwi 0,r4,0
|
||||
bnea 0x60
|
||||
beq 99b
|
||||
#ifdef CONFIG_PPC_BOOK3S_64
|
||||
li r10,0x60
|
||||
mfmsr r11
|
||||
clrrdi r11,r11,1 /* Clear MSR_LE */
|
||||
mtsrr0 r10
|
||||
mtsrr1 r11
|
||||
rfid
|
||||
#else
|
||||
ba 0x60
|
||||
#endif
|
||||
#endif
|
||||
b 99b
|
||||
|
||||
/* this can be in text because we won't change it until we are
|
||||
* running in real anyways
|
||||
|
@ -541,10 +541,9 @@ static ssize_t nvram_pstore_read(u64 *id, enum pstore_type_id *type,
|
||||
time->tv_sec = be64_to_cpu(oops_hdr->timestamp);
|
||||
time->tv_nsec = 0;
|
||||
}
|
||||
*buf = kmalloc(length, GFP_KERNEL);
|
||||
*buf = kmemdup(buff + hdr_size, length, GFP_KERNEL);
|
||||
if (*buf == NULL)
|
||||
return -ENOMEM;
|
||||
memcpy(*buf, buff + hdr_size, length);
|
||||
kfree(buff);
|
||||
|
||||
if (err_type == ERR_TYPE_KERNEL_PANIC_GZ)
|
||||
@ -582,9 +581,10 @@ static int nvram_pstore_init(void)
|
||||
spin_lock_init(&nvram_pstore_info.buf_lock);
|
||||
|
||||
rc = pstore_register(&nvram_pstore_info);
|
||||
if (rc != 0)
|
||||
pr_err("nvram: pstore_register() failed, defaults to "
|
||||
"kmsg_dump; returned %d\n", rc);
|
||||
if (rc && (rc != -EPERM))
|
||||
/* Print error only when pstore.backend == nvram */
|
||||
pr_err("nvram: pstore_register() failed, returned %d. "
|
||||
"Defaults to kmsg_dump\n", rc);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
@ -823,23 +823,15 @@ static void pcibios_fixup_resources(struct pci_dev *dev)
|
||||
(reg.start == 0 && !pci_has_flag(PCI_PROBE_ONLY))) {
|
||||
/* Only print message if not re-assigning */
|
||||
if (!pci_has_flag(PCI_REASSIGN_ALL_RSRC))
|
||||
pr_debug("PCI:%s Resource %d %016llx-%016llx [%x] "
|
||||
"is unassigned\n",
|
||||
pci_name(dev), i,
|
||||
(unsigned long long)res->start,
|
||||
(unsigned long long)res->end,
|
||||
(unsigned int)res->flags);
|
||||
pr_debug("PCI:%s Resource %d %pR is unassigned\n",
|
||||
pci_name(dev), i, res);
|
||||
res->end -= res->start;
|
||||
res->start = 0;
|
||||
res->flags |= IORESOURCE_UNSET;
|
||||
continue;
|
||||
}
|
||||
|
||||
pr_debug("PCI:%s Resource %d %016llx-%016llx [%x]\n",
|
||||
pci_name(dev), i,
|
||||
(unsigned long long)res->start,\
|
||||
(unsigned long long)res->end,
|
||||
(unsigned int)res->flags);
|
||||
pr_debug("PCI:%s Resource %d %pR\n", pci_name(dev), i, res);
|
||||
}
|
||||
|
||||
/* Call machine specific resource fixup */
|
||||
@ -943,11 +935,7 @@ static void pcibios_fixup_bridge(struct pci_bus *bus)
|
||||
continue;
|
||||
}
|
||||
|
||||
pr_debug("PCI:%s Bus rsrc %d %016llx-%016llx [%x]\n",
|
||||
pci_name(dev), i,
|
||||
(unsigned long long)res->start,\
|
||||
(unsigned long long)res->end,
|
||||
(unsigned int)res->flags);
|
||||
pr_debug("PCI:%s Bus rsrc %d %pR\n", pci_name(dev), i, res);
|
||||
|
||||
/* Try to detect uninitialized P2P bridge resources,
|
||||
* and clear them out so they get re-assigned later
|
||||
@ -1126,10 +1114,8 @@ static int reparent_resources(struct resource *parent,
|
||||
*pp = NULL;
|
||||
for (p = res->child; p != NULL; p = p->sibling) {
|
||||
p->parent = res;
|
||||
pr_debug("PCI: Reparented %s [%llx..%llx] under %s\n",
|
||||
p->name,
|
||||
(unsigned long long)p->start,
|
||||
(unsigned long long)p->end, res->name);
|
||||
pr_debug("PCI: Reparented %s %pR under %s\n",
|
||||
p->name, p, res->name);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -1198,14 +1184,9 @@ static void pcibios_allocate_bus_resources(struct pci_bus *bus)
|
||||
}
|
||||
}
|
||||
|
||||
pr_debug("PCI: %s (bus %d) bridge rsrc %d: %016llx-%016llx "
|
||||
"[0x%x], parent %p (%s)\n",
|
||||
bus->self ? pci_name(bus->self) : "PHB",
|
||||
bus->number, i,
|
||||
(unsigned long long)res->start,
|
||||
(unsigned long long)res->end,
|
||||
(unsigned int)res->flags,
|
||||
pr, (pr && pr->name) ? pr->name : "nil");
|
||||
pr_debug("PCI: %s (bus %d) bridge rsrc %d: %pR, parent %p (%s)\n",
|
||||
bus->self ? pci_name(bus->self) : "PHB", bus->number,
|
||||
i, res, pr, (pr && pr->name) ? pr->name : "nil");
|
||||
|
||||
if (pr && !(pr->flags & IORESOURCE_UNSET)) {
|
||||
struct pci_dev *dev = bus->self;
|
||||
@ -1247,11 +1228,8 @@ static inline void alloc_resource(struct pci_dev *dev, int idx)
|
||||
{
|
||||
struct resource *pr, *r = &dev->resource[idx];
|
||||
|
||||
pr_debug("PCI: Allocating %s: Resource %d: %016llx..%016llx [%x]\n",
|
||||
pci_name(dev), idx,
|
||||
(unsigned long long)r->start,
|
||||
(unsigned long long)r->end,
|
||||
(unsigned int)r->flags);
|
||||
pr_debug("PCI: Allocating %s: Resource %d: %pR\n",
|
||||
pci_name(dev), idx, r);
|
||||
|
||||
pr = pci_find_parent_resource(dev, r);
|
||||
if (!pr || (pr->flags & IORESOURCE_UNSET) ||
|
||||
@ -1259,11 +1237,7 @@ static inline void alloc_resource(struct pci_dev *dev, int idx)
|
||||
printk(KERN_WARNING "PCI: Cannot allocate resource region %d"
|
||||
" of device %s, will remap\n", idx, pci_name(dev));
|
||||
if (pr)
|
||||
pr_debug("PCI: parent is %p: %016llx-%016llx [%x]\n",
|
||||
pr,
|
||||
(unsigned long long)pr->start,
|
||||
(unsigned long long)pr->end,
|
||||
(unsigned int)pr->flags);
|
||||
pr_debug("PCI: parent is %p: %pR\n", pr, pr);
|
||||
/* We'll assign a new address later */
|
||||
r->flags |= IORESOURCE_UNSET;
|
||||
r->end -= r->start;
|
||||
@ -1425,12 +1399,8 @@ void pcibios_claim_one_bus(struct pci_bus *bus)
|
||||
if (r->parent || !r->start || !r->flags)
|
||||
continue;
|
||||
|
||||
pr_debug("PCI: Claiming %s: "
|
||||
"Resource %d: %016llx..%016llx [%x]\n",
|
||||
pci_name(dev), i,
|
||||
(unsigned long long)r->start,
|
||||
(unsigned long long)r->end,
|
||||
(unsigned int)r->flags);
|
||||
pr_debug("PCI: Claiming %s: Resource %d: %pR\n",
|
||||
pci_name(dev), i, r);
|
||||
|
||||
if (pci_claim_resource(dev, i) == 0)
|
||||
continue;
|
||||
@ -1514,11 +1484,8 @@ static void pcibios_setup_phb_resources(struct pci_controller *hose,
|
||||
} else {
|
||||
offset = pcibios_io_space_offset(hose);
|
||||
|
||||
pr_debug("PCI: PHB IO resource = %08llx-%08llx [%lx] off 0x%08llx\n",
|
||||
(unsigned long long)res->start,
|
||||
(unsigned long long)res->end,
|
||||
(unsigned long)res->flags,
|
||||
(unsigned long long)offset);
|
||||
pr_debug("PCI: PHB IO resource = %pR off 0x%08llx\n",
|
||||
res, (unsigned long long)offset);
|
||||
pci_add_resource_offset(resources, res, offset);
|
||||
}
|
||||
|
||||
@ -1535,11 +1502,8 @@ static void pcibios_setup_phb_resources(struct pci_controller *hose,
|
||||
offset = hose->mem_offset[i];
|
||||
|
||||
|
||||
pr_debug("PCI: PHB MEM resource %d = %08llx-%08llx [%lx] off 0x%08llx\n", i,
|
||||
(unsigned long long)res->start,
|
||||
(unsigned long long)res->end,
|
||||
(unsigned long)res->flags,
|
||||
(unsigned long long)offset);
|
||||
pr_debug("PCI: PHB MEM resource %d = %pR off 0x%08llx\n", i,
|
||||
res, (unsigned long long)offset);
|
||||
|
||||
pci_add_resource_offset(resources, res, offset);
|
||||
}
|
||||
|
@ -86,7 +86,7 @@ void giveup_fpu_maybe_transactional(struct task_struct *tsk)
|
||||
if (tsk == current && tsk->thread.regs &&
|
||||
MSR_TM_ACTIVE(tsk->thread.regs->msr) &&
|
||||
!test_thread_flag(TIF_RESTORE_TM)) {
|
||||
tsk->thread.tm_orig_msr = tsk->thread.regs->msr;
|
||||
tsk->thread.ckpt_regs.msr = tsk->thread.regs->msr;
|
||||
set_thread_flag(TIF_RESTORE_TM);
|
||||
}
|
||||
|
||||
@ -104,7 +104,7 @@ void giveup_altivec_maybe_transactional(struct task_struct *tsk)
|
||||
if (tsk == current && tsk->thread.regs &&
|
||||
MSR_TM_ACTIVE(tsk->thread.regs->msr) &&
|
||||
!test_thread_flag(TIF_RESTORE_TM)) {
|
||||
tsk->thread.tm_orig_msr = tsk->thread.regs->msr;
|
||||
tsk->thread.ckpt_regs.msr = tsk->thread.regs->msr;
|
||||
set_thread_flag(TIF_RESTORE_TM);
|
||||
}
|
||||
|
||||
@ -540,7 +540,7 @@ static void tm_reclaim_thread(struct thread_struct *thr,
|
||||
* the thread will no longer be transactional.
|
||||
*/
|
||||
if (test_ti_thread_flag(ti, TIF_RESTORE_TM)) {
|
||||
msr_diff = thr->tm_orig_msr & ~thr->regs->msr;
|
||||
msr_diff = thr->ckpt_regs.msr & ~thr->regs->msr;
|
||||
if (msr_diff & MSR_FP)
|
||||
memcpy(&thr->transact_fp, &thr->fp_state,
|
||||
sizeof(struct thread_fp_state));
|
||||
@ -591,10 +591,10 @@ static inline void tm_reclaim_task(struct task_struct *tsk)
|
||||
/* Stash the original thread MSR, as giveup_fpu et al will
|
||||
* modify it. We hold onto it to see whether the task used
|
||||
* FP & vector regs. If the TIF_RESTORE_TM flag is set,
|
||||
* tm_orig_msr is already set.
|
||||
* ckpt_regs.msr is already set.
|
||||
*/
|
||||
if (!test_ti_thread_flag(task_thread_info(tsk), TIF_RESTORE_TM))
|
||||
thr->tm_orig_msr = thr->regs->msr;
|
||||
thr->ckpt_regs.msr = thr->regs->msr;
|
||||
|
||||
TM_DEBUG("--- tm_reclaim on pid %d (NIP=%lx, "
|
||||
"ccr=%lx, msr=%lx, trap=%lx)\n",
|
||||
@ -663,7 +663,7 @@ static inline void tm_recheckpoint_new_task(struct task_struct *new)
|
||||
tm_restore_sprs(&new->thread);
|
||||
return;
|
||||
}
|
||||
msr = new->thread.tm_orig_msr;
|
||||
msr = new->thread.ckpt_regs.msr;
|
||||
/* Recheckpoint to restore original checkpointed register state. */
|
||||
TM_DEBUG("*** tm_recheckpoint of pid %d "
|
||||
"(new->msr 0x%lx, new->origmsr 0x%lx)\n",
|
||||
@ -723,7 +723,7 @@ void restore_tm_state(struct pt_regs *regs)
|
||||
if (!MSR_TM_ACTIVE(regs->msr))
|
||||
return;
|
||||
|
||||
msr_diff = current->thread.tm_orig_msr & ~regs->msr;
|
||||
msr_diff = current->thread.ckpt_regs.msr & ~regs->msr;
|
||||
msr_diff &= MSR_FP | MSR_VEC | MSR_VSX;
|
||||
if (msr_diff & MSR_FP) {
|
||||
fp_enable();
|
||||
|
@ -218,22 +218,18 @@ static void __init check_cpu_pa_features(unsigned long node)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PPC_STD_MMU_64
|
||||
static void __init check_cpu_slb_size(unsigned long node)
|
||||
static void __init init_mmu_slb_size(unsigned long node)
|
||||
{
|
||||
const __be32 *slb_size_ptr;
|
||||
|
||||
slb_size_ptr = of_get_flat_dt_prop(node, "slb-size", NULL);
|
||||
if (slb_size_ptr != NULL) {
|
||||
slb_size_ptr = of_get_flat_dt_prop(node, "slb-size", NULL) ? :
|
||||
of_get_flat_dt_prop(node, "ibm,slb-size", NULL);
|
||||
|
||||
if (slb_size_ptr)
|
||||
mmu_slb_size = be32_to_cpup(slb_size_ptr);
|
||||
return;
|
||||
}
|
||||
slb_size_ptr = of_get_flat_dt_prop(node, "ibm,slb-size", NULL);
|
||||
if (slb_size_ptr != NULL) {
|
||||
mmu_slb_size = be32_to_cpup(slb_size_ptr);
|
||||
}
|
||||
}
|
||||
#else
|
||||
#define check_cpu_slb_size(node) do { } while(0)
|
||||
#define init_mmu_slb_size(node) do { } while(0)
|
||||
#endif
|
||||
|
||||
static struct feature_property {
|
||||
@ -380,7 +376,7 @@ static int __init early_init_dt_scan_cpus(unsigned long node,
|
||||
|
||||
check_cpu_feature_properties(node);
|
||||
check_cpu_pa_features(node);
|
||||
check_cpu_slb_size(node);
|
||||
init_mmu_slb_size(node);
|
||||
|
||||
#ifdef CONFIG_PPC64
|
||||
if (nthreads > 1)
|
||||
@ -476,9 +472,10 @@ static int __init early_init_dt_scan_drconf_memory(unsigned long node)
|
||||
flags = of_read_number(&dm[3], 1);
|
||||
/* skip DRC index, pad, assoc. list index, flags */
|
||||
dm += 4;
|
||||
/* skip this block if the reserved bit is set in flags (0x80)
|
||||
or if the block is not assigned to this partition (0x8) */
|
||||
if ((flags & 0x80) || !(flags & 0x8))
|
||||
/* skip this block if the reserved bit is set in flags
|
||||
or if the block is not assigned to this partition */
|
||||
if ((flags & DRCONF_MEM_RESERVED) ||
|
||||
!(flags & DRCONF_MEM_ASSIGNED))
|
||||
continue;
|
||||
size = memblock_size;
|
||||
rngs = 1;
|
||||
|
@ -641,6 +641,15 @@ static void __init early_cmdline_parse(void)
|
||||
#define W(x) ((x) >> 24) & 0xff, ((x) >> 16) & 0xff, \
|
||||
((x) >> 8) & 0xff, (x) & 0xff
|
||||
|
||||
/* Firmware expects the value to be n - 1, where n is the # of vectors */
|
||||
#define NUM_VECTORS(n) ((n) - 1)
|
||||
|
||||
/*
|
||||
* Firmware expects 1 + n - 2, where n is the length of the option vector in
|
||||
* bytes. The 1 accounts for the length byte itself, the - 2 .. ?
|
||||
*/
|
||||
#define VECTOR_LENGTH(n) (1 + (n) - 2)
|
||||
|
||||
unsigned char ibm_architecture_vec[] = {
|
||||
W(0xfffe0000), W(0x003a0000), /* POWER5/POWER5+ */
|
||||
W(0xffff0000), W(0x003e0000), /* POWER6 */
|
||||
@ -651,16 +660,16 @@ unsigned char ibm_architecture_vec[] = {
|
||||
W(0xffffffff), W(0x0f000003), /* all 2.06-compliant */
|
||||
W(0xffffffff), W(0x0f000002), /* all 2.05-compliant */
|
||||
W(0xfffffffe), W(0x0f000001), /* all 2.04-compliant and earlier */
|
||||
6 - 1, /* 6 option vectors */
|
||||
NUM_VECTORS(6), /* 6 option vectors */
|
||||
|
||||
/* option vector 1: processor architectures supported */
|
||||
3 - 2, /* length */
|
||||
VECTOR_LENGTH(2), /* length */
|
||||
0, /* don't ignore, don't halt */
|
||||
OV1_PPC_2_00 | OV1_PPC_2_01 | OV1_PPC_2_02 | OV1_PPC_2_03 |
|
||||
OV1_PPC_2_04 | OV1_PPC_2_05 | OV1_PPC_2_06 | OV1_PPC_2_07,
|
||||
|
||||
/* option vector 2: Open Firmware options supported */
|
||||
34 - 2, /* length */
|
||||
VECTOR_LENGTH(33), /* length */
|
||||
OV2_REAL_MODE,
|
||||
0, 0,
|
||||
W(0xffffffff), /* real_base */
|
||||
@ -674,17 +683,17 @@ unsigned char ibm_architecture_vec[] = {
|
||||
48, /* max log_2(hash table size) */
|
||||
|
||||
/* option vector 3: processor options supported */
|
||||
3 - 2, /* length */
|
||||
VECTOR_LENGTH(2), /* length */
|
||||
0, /* don't ignore, don't halt */
|
||||
OV3_FP | OV3_VMX | OV3_DFP,
|
||||
|
||||
/* option vector 4: IBM PAPR implementation */
|
||||
3 - 2, /* length */
|
||||
VECTOR_LENGTH(2), /* length */
|
||||
0, /* don't halt */
|
||||
OV4_MIN_ENT_CAP, /* minimum VP entitled capacity */
|
||||
|
||||
/* option vector 5: PAPR/OF options */
|
||||
19 - 2, /* length */
|
||||
VECTOR_LENGTH(18), /* length */
|
||||
0, /* don't ignore, don't halt */
|
||||
OV5_FEAT(OV5_LPAR) | OV5_FEAT(OV5_SPLPAR) | OV5_FEAT(OV5_LARGE_PAGES) |
|
||||
OV5_FEAT(OV5_DRCONF_MEMORY) | OV5_FEAT(OV5_DONATE_DEDICATE_CPU) |
|
||||
@ -717,12 +726,12 @@ unsigned char ibm_architecture_vec[] = {
|
||||
OV5_FEAT(OV5_PFO_HW_RNG) | OV5_FEAT(OV5_PFO_HW_ENCR) |
|
||||
OV5_FEAT(OV5_PFO_HW_842),
|
||||
OV5_FEAT(OV5_SUB_PROCESSORS),
|
||||
|
||||
/* option vector 6: IBM PAPR hints */
|
||||
4 - 2, /* length */
|
||||
VECTOR_LENGTH(3), /* length */
|
||||
0,
|
||||
0,
|
||||
OV6_LINUX,
|
||||
|
||||
};
|
||||
|
||||
/* Old method - ELF header with PT_NOTE sections only works on BE */
|
||||
|
@ -1762,26 +1762,81 @@ long arch_ptrace(struct task_struct *child, long request,
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* We must return the syscall number to actually look up in the table.
|
||||
* This can be -1L to skip running any syscall at all.
|
||||
#ifdef CONFIG_SECCOMP
|
||||
static int do_seccomp(struct pt_regs *regs)
|
||||
{
|
||||
if (!test_thread_flag(TIF_SECCOMP))
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* The ABI we present to seccomp tracers is that r3 contains
|
||||
* the syscall return value and orig_gpr3 contains the first
|
||||
* syscall parameter. This is different to the ptrace ABI where
|
||||
* both r3 and orig_gpr3 contain the first syscall parameter.
|
||||
*/
|
||||
regs->gpr[3] = -ENOSYS;
|
||||
|
||||
/*
|
||||
* We use the __ version here because we have already checked
|
||||
* TIF_SECCOMP. If this fails, there is nothing left to do, we
|
||||
* have already loaded -ENOSYS into r3, or seccomp has put
|
||||
* something else in r3 (via SECCOMP_RET_ERRNO/TRACE).
|
||||
*/
|
||||
if (__secure_computing())
|
||||
return -1;
|
||||
|
||||
/*
|
||||
* The syscall was allowed by seccomp, restore the register
|
||||
* state to what ptrace and audit expect.
|
||||
* Note that we use orig_gpr3, which means a seccomp tracer can
|
||||
* modify the first syscall parameter (in orig_gpr3) and also
|
||||
* allow the syscall to proceed.
|
||||
*/
|
||||
regs->gpr[3] = regs->orig_gpr3;
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
static inline int do_seccomp(struct pt_regs *regs) { return 0; }
|
||||
#endif /* CONFIG_SECCOMP */
|
||||
|
||||
/**
|
||||
* do_syscall_trace_enter() - Do syscall tracing on kernel entry.
|
||||
* @regs: the pt_regs of the task to trace (current)
|
||||
*
|
||||
* Performs various types of tracing on syscall entry. This includes seccomp,
|
||||
* ptrace, syscall tracepoints and audit.
|
||||
*
|
||||
* The pt_regs are potentially visible to userspace via ptrace, so their
|
||||
* contents is ABI.
|
||||
*
|
||||
* One or more of the tracers may modify the contents of pt_regs, in particular
|
||||
* to modify arguments or even the syscall number itself.
|
||||
*
|
||||
* It's also possible that a tracer can choose to reject the system call. In
|
||||
* that case this function will return an illegal syscall number, and will put
|
||||
* an appropriate return value in regs->r3.
|
||||
*
|
||||
* Return: the (possibly changed) syscall number.
|
||||
*/
|
||||
long do_syscall_trace_enter(struct pt_regs *regs)
|
||||
{
|
||||
long ret = 0;
|
||||
bool abort = false;
|
||||
|
||||
user_exit();
|
||||
|
||||
secure_computing_strict(regs->gpr[0]);
|
||||
if (do_seccomp(regs))
|
||||
return -1;
|
||||
|
||||
if (test_thread_flag(TIF_SYSCALL_TRACE) &&
|
||||
tracehook_report_syscall_entry(regs))
|
||||
if (test_thread_flag(TIF_SYSCALL_TRACE)) {
|
||||
/*
|
||||
* Tracing decided this syscall should not happen.
|
||||
* We'll return a bogus call number to get an ENOSYS
|
||||
* error, but leave the original number in regs->gpr[0].
|
||||
* The tracer may decide to abort the syscall, if so tracehook
|
||||
* will return !0. Note that the tracer may also just change
|
||||
* regs->gpr[0] to an invalid syscall number, that is handled
|
||||
* below on the exit path.
|
||||
*/
|
||||
ret = -1L;
|
||||
abort = tracehook_report_syscall_entry(regs) != 0;
|
||||
}
|
||||
|
||||
if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
|
||||
trace_sys_enter(regs, regs->gpr[0]);
|
||||
@ -1798,7 +1853,17 @@ long do_syscall_trace_enter(struct pt_regs *regs)
|
||||
regs->gpr[5] & 0xffffffff,
|
||||
regs->gpr[6] & 0xffffffff);
|
||||
|
||||
return ret ?: regs->gpr[0];
|
||||
if (abort || regs->gpr[0] >= NR_syscalls) {
|
||||
/*
|
||||
* If we are aborting explicitly, or if the syscall number is
|
||||
* now invalid, set the return value to -ENOSYS.
|
||||
*/
|
||||
regs->gpr[3] = -ENOSYS;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Return the possibly modified but valid syscall number */
|
||||
return regs->gpr[0];
|
||||
}
|
||||
|
||||
void do_syscall_trace_leave(struct pt_regs *regs)
|
||||
|
@ -478,8 +478,9 @@ unsigned int rtas_busy_delay_time(int status)
|
||||
|
||||
if (status == RTAS_BUSY) {
|
||||
ms = 1;
|
||||
} else if (status >= 9900 && status <= 9905) {
|
||||
order = status - 9900;
|
||||
} else if (status >= RTAS_EXTENDED_DELAY_MIN &&
|
||||
status <= RTAS_EXTENDED_DELAY_MAX) {
|
||||
order = status - RTAS_EXTENDED_DELAY_MIN;
|
||||
for (ms = 1; order > 0; order--)
|
||||
ms *= 10;
|
||||
}
|
||||
@ -584,6 +585,23 @@ int rtas_get_sensor(int sensor, int index, int *state)
|
||||
}
|
||||
EXPORT_SYMBOL(rtas_get_sensor);
|
||||
|
||||
int rtas_get_sensor_fast(int sensor, int index, int *state)
|
||||
{
|
||||
int token = rtas_token("get-sensor-state");
|
||||
int rc;
|
||||
|
||||
if (token == RTAS_UNKNOWN_SERVICE)
|
||||
return -ENOENT;
|
||||
|
||||
rc = rtas_call(token, 2, 2, state, sensor, index);
|
||||
WARN_ON(rc == RTAS_BUSY || (rc >= RTAS_EXTENDED_DELAY_MIN &&
|
||||
rc <= RTAS_EXTENDED_DELAY_MAX));
|
||||
|
||||
if (rc < 0)
|
||||
return rtas_error_rc(rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
bool rtas_indicator_present(int token, int *maxindex)
|
||||
{
|
||||
int proplen, count, i;
|
||||
@ -641,7 +659,8 @@ int rtas_set_indicator_fast(int indicator, int index, int new_value)
|
||||
|
||||
rc = rtas_call(token, 3, 1, NULL, indicator, index, new_value);
|
||||
|
||||
WARN_ON(rc == -2 || (rc >= 9900 && rc <= 9905));
|
||||
WARN_ON(rc == RTAS_BUSY || (rc >= RTAS_EXTENDED_DELAY_MIN &&
|
||||
rc <= RTAS_EXTENDED_DELAY_MAX));
|
||||
|
||||
if (rc < 0)
|
||||
return rtas_error_rc(rc);
|
||||
|
@ -949,6 +949,11 @@ int copy_siginfo_to_user32(struct compat_siginfo __user *d, const siginfo_t *s)
|
||||
err |= __put_user(s->si_overrun, &d->si_overrun);
|
||||
err |= __put_user(s->si_int, &d->si_int);
|
||||
break;
|
||||
case __SI_SYS >> 16:
|
||||
err |= __put_user(ptr_to_compat(s->si_call_addr), &d->si_call_addr);
|
||||
err |= __put_user(s->si_syscall, &d->si_syscall);
|
||||
err |= __put_user(s->si_arch, &d->si_arch);
|
||||
break;
|
||||
case __SI_RT >> 16: /* This is not generated by the kernel as of now. */
|
||||
case __SI_MESGQ >> 16:
|
||||
err |= __put_user(s->si_int, &d->si_int);
|
||||
|
@ -73,6 +73,19 @@ static const char fmt32[] = KERN_INFO \
|
||||
static const char fmt64[] = KERN_INFO \
|
||||
"%s[%d]: bad frame in %s: %016lx nip %016lx lr %016lx\n";
|
||||
|
||||
/*
|
||||
* This computes a quad word aligned pointer inside the vmx_reserve array
|
||||
* element. For historical reasons sigcontext might not be quad word aligned,
|
||||
* but the location we write the VMX regs to must be. See the comment in
|
||||
* sigcontext for more detail.
|
||||
*/
|
||||
#ifdef CONFIG_ALTIVEC
|
||||
static elf_vrreg_t __user *sigcontext_vmx_regs(struct sigcontext __user *sc)
|
||||
{
|
||||
return (elf_vrreg_t __user *) (((unsigned long)sc->vmx_reserve + 15) & ~0xful);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Set up the sigcontext for the signal frame.
|
||||
*/
|
||||
@ -90,7 +103,7 @@ static long setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs,
|
||||
* v_regs pointer or not
|
||||
*/
|
||||
#ifdef CONFIG_ALTIVEC
|
||||
elf_vrreg_t __user *v_regs = (elf_vrreg_t __user *)(((unsigned long)sc->vmx_reserve + 15) & ~0xful);
|
||||
elf_vrreg_t __user *v_regs = sigcontext_vmx_regs(sc);
|
||||
#endif
|
||||
unsigned long msr = regs->msr;
|
||||
long err = 0;
|
||||
@ -181,10 +194,8 @@ static long setup_tm_sigcontexts(struct sigcontext __user *sc,
|
||||
* v_regs pointer or not.
|
||||
*/
|
||||
#ifdef CONFIG_ALTIVEC
|
||||
elf_vrreg_t __user *v_regs = (elf_vrreg_t __user *)
|
||||
(((unsigned long)sc->vmx_reserve + 15) & ~0xful);
|
||||
elf_vrreg_t __user *tm_v_regs = (elf_vrreg_t __user *)
|
||||
(((unsigned long)tm_sc->vmx_reserve + 15) & ~0xful);
|
||||
elf_vrreg_t __user *v_regs = sigcontext_vmx_regs(sc);
|
||||
elf_vrreg_t __user *tm_v_regs = sigcontext_vmx_regs(tm_sc);
|
||||
#endif
|
||||
unsigned long msr = regs->msr;
|
||||
long err = 0;
|
||||
|
15
arch/powerpc/kernel/trace_clock.c
Normal file
15
arch/powerpc/kernel/trace_clock.c
Normal file
@ -0,0 +1,15 @@
|
||||
/*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License, version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* Copyright (C) 2015 Naveen N. Rao, IBM Corporation
|
||||
*/
|
||||
|
||||
#include <asm/trace_clock.h>
|
||||
#include <asm/time.h>
|
||||
|
||||
u64 notrace trace_clock_ppc_tb(void)
|
||||
{
|
||||
return get_tb();
|
||||
}
|
@ -40,22 +40,6 @@ _GLOBAL(ip_fast_csum)
|
||||
srwi r3,r3,16
|
||||
blr
|
||||
|
||||
/*
|
||||
* Compute checksum of TCP or UDP pseudo-header:
|
||||
* csum_tcpudp_magic(saddr, daddr, len, proto, sum)
|
||||
*/
|
||||
_GLOBAL(csum_tcpudp_magic)
|
||||
rlwimi r5,r6,16,0,15 /* put proto in upper half of len */
|
||||
addc r0,r3,r4 /* add 4 32-bit words together */
|
||||
adde r0,r0,r5
|
||||
adde r0,r0,r7
|
||||
addze r0,r0 /* add in final carry */
|
||||
rlwinm r3,r0,16,0,31 /* fold two halves together */
|
||||
add r3,r0,r3
|
||||
not r3,r3
|
||||
srwi r3,r3,16
|
||||
blr
|
||||
|
||||
/*
|
||||
* computes the checksum of a memory block at buff, length len,
|
||||
* and adds in "sum" (32-bit)
|
||||
|
@ -44,27 +44,6 @@ _GLOBAL(ip_fast_csum)
|
||||
srwi r3,r3,16
|
||||
blr
|
||||
|
||||
/*
|
||||
* Compute checksum of TCP or UDP pseudo-header:
|
||||
* csum_tcpudp_magic(r3=saddr, r4=daddr, r5=len, r6=proto, r7=sum)
|
||||
* No real gain trying to do this specially for 64 bit, but
|
||||
* the 32 bit addition may spill into the upper bits of
|
||||
* the doubleword so we still must fold it down from 64.
|
||||
*/
|
||||
_GLOBAL(csum_tcpudp_magic)
|
||||
rlwimi r5,r6,16,0,15 /* put proto in upper half of len */
|
||||
addc r0,r3,r4 /* add 4 32-bit words together */
|
||||
adde r0,r0,r5
|
||||
adde r0,r0,r7
|
||||
rldicl r4,r0,32,0 /* fold 64 bit value */
|
||||
add r0,r4,r0
|
||||
srdi r0,r0,32
|
||||
rlwinm r3,r0,16,0,31 /* fold two halves together */
|
||||
add r3,r0,r3
|
||||
not r3,r3
|
||||
srwi r3,r3,16
|
||||
blr
|
||||
|
||||
/*
|
||||
* Computes the checksum of a memory block at buff, length len,
|
||||
* and adds in "sum" (32-bit).
|
||||
|
@ -69,9 +69,15 @@ CACHELINE_BYTES = L1_CACHE_BYTES
|
||||
LG_CACHELINE_BYTES = L1_CACHE_SHIFT
|
||||
CACHELINE_MASK = (L1_CACHE_BYTES-1)
|
||||
|
||||
/*
|
||||
* Use dcbz on the complete cache lines in the destination
|
||||
* to set them to zero. This requires that the destination
|
||||
* area is cacheable. -- paulus
|
||||
*/
|
||||
_GLOBAL(memset)
|
||||
rlwimi r4,r4,8,16,23
|
||||
rlwimi r4,r4,16,0,15
|
||||
|
||||
addi r6,r3,-4
|
||||
cmplwi 0,r5,4
|
||||
blt 7f
|
||||
@ -80,7 +86,29 @@ _GLOBAL(memset)
|
||||
andi. r0,r6,3
|
||||
add r5,r0,r5
|
||||
subf r6,r0,r6
|
||||
srwi r0,r5,2
|
||||
cmplwi 0,r4,0
|
||||
bne 2f /* Use normal procedure if r4 is not zero */
|
||||
|
||||
clrlwi r7,r6,32-LG_CACHELINE_BYTES
|
||||
add r8,r7,r5
|
||||
srwi r9,r8,LG_CACHELINE_BYTES
|
||||
addic. r9,r9,-1 /* total number of complete cachelines */
|
||||
ble 2f
|
||||
xori r0,r7,CACHELINE_MASK & ~3
|
||||
srwi. r0,r0,2
|
||||
beq 3f
|
||||
mtctr r0
|
||||
4: stwu r4,4(r6)
|
||||
bdnz 4b
|
||||
3: mtctr r9
|
||||
li r7,4
|
||||
10: dcbz r7,r6
|
||||
addi r6,r6,CACHELINE_BYTES
|
||||
bdnz 10b
|
||||
clrlwi r5,r8,32-LG_CACHELINE_BYTES
|
||||
addi r5,r5,4
|
||||
|
||||
2: srwi r0,r5,2
|
||||
mtctr r0
|
||||
bdz 6f
|
||||
1: stwu r4,4(r6)
|
||||
@ -94,12 +122,91 @@ _GLOBAL(memset)
|
||||
bdnz 8b
|
||||
blr
|
||||
|
||||
/*
|
||||
* This version uses dcbz on the complete cache lines in the
|
||||
* destination area to reduce memory traffic. This requires that
|
||||
* the destination area is cacheable.
|
||||
* We only use this version if the source and dest don't overlap.
|
||||
* -- paulus.
|
||||
*/
|
||||
_GLOBAL(memmove)
|
||||
cmplw 0,r3,r4
|
||||
bgt backwards_memcpy
|
||||
/* fall through */
|
||||
|
||||
_GLOBAL(memcpy)
|
||||
add r7,r3,r5 /* test if the src & dst overlap */
|
||||
add r8,r4,r5
|
||||
cmplw 0,r4,r7
|
||||
cmplw 1,r3,r8
|
||||
crand 0,0,4 /* cr0.lt &= cr1.lt */
|
||||
blt generic_memcpy /* if regions overlap */
|
||||
|
||||
addi r4,r4,-4
|
||||
addi r6,r3,-4
|
||||
neg r0,r3
|
||||
andi. r0,r0,CACHELINE_MASK /* # bytes to start of cache line */
|
||||
beq 58f
|
||||
|
||||
cmplw 0,r5,r0 /* is this more than total to do? */
|
||||
blt 63f /* if not much to do */
|
||||
andi. r8,r0,3 /* get it word-aligned first */
|
||||
subf r5,r0,r5
|
||||
mtctr r8
|
||||
beq+ 61f
|
||||
70: lbz r9,4(r4) /* do some bytes */
|
||||
addi r4,r4,1
|
||||
addi r6,r6,1
|
||||
stb r9,3(r6)
|
||||
bdnz 70b
|
||||
61: srwi. r0,r0,2
|
||||
mtctr r0
|
||||
beq 58f
|
||||
72: lwzu r9,4(r4) /* do some words */
|
||||
stwu r9,4(r6)
|
||||
bdnz 72b
|
||||
|
||||
58: srwi. r0,r5,LG_CACHELINE_BYTES /* # complete cachelines */
|
||||
clrlwi r5,r5,32-LG_CACHELINE_BYTES
|
||||
li r11,4
|
||||
mtctr r0
|
||||
beq 63f
|
||||
53:
|
||||
dcbz r11,r6
|
||||
COPY_16_BYTES
|
||||
#if L1_CACHE_BYTES >= 32
|
||||
COPY_16_BYTES
|
||||
#if L1_CACHE_BYTES >= 64
|
||||
COPY_16_BYTES
|
||||
COPY_16_BYTES
|
||||
#if L1_CACHE_BYTES >= 128
|
||||
COPY_16_BYTES
|
||||
COPY_16_BYTES
|
||||
COPY_16_BYTES
|
||||
COPY_16_BYTES
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
bdnz 53b
|
||||
|
||||
63: srwi. r0,r5,2
|
||||
mtctr r0
|
||||
beq 64f
|
||||
30: lwzu r0,4(r4)
|
||||
stwu r0,4(r6)
|
||||
bdnz 30b
|
||||
|
||||
64: andi. r0,r5,3
|
||||
mtctr r0
|
||||
beq+ 65f
|
||||
addi r4,r4,3
|
||||
addi r6,r6,3
|
||||
40: lbzu r0,1(r4)
|
||||
stbu r0,1(r6)
|
||||
bdnz 40b
|
||||
65: blr
|
||||
|
||||
_GLOBAL(generic_memcpy)
|
||||
srwi. r7,r5,3
|
||||
addi r6,r3,-4
|
||||
addi r4,r4,-4
|
||||
|
@ -112,7 +112,7 @@ static void settlbcam(int index, unsigned long virt, phys_addr_t phys,
|
||||
|
||||
tsize = __ilog2(size) - 10;
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
#if defined(CONFIG_SMP) || defined(CONFIG_PPC_E500MC)
|
||||
if ((flags & _PAGE_NO_CACHE) == 0)
|
||||
flags |= _PAGE_COHERENT;
|
||||
#endif
|
||||
|
@ -701,7 +701,7 @@ htab_pte_insert_failure:
|
||||
|
||||
#endif /* CONFIG_PPC_64K_PAGES */
|
||||
|
||||
#ifdef CONFIG_PPC_HAS_HASH_64K
|
||||
#ifdef CONFIG_PPC_64K_PAGES
|
||||
|
||||
/*****************************************************************************
|
||||
* *
|
||||
@ -993,7 +993,7 @@ ht64_pte_insert_failure:
|
||||
b ht64_bail
|
||||
|
||||
|
||||
#endif /* CONFIG_PPC_HAS_HASH_64K */
|
||||
#endif /* CONFIG_PPC_64K_PAGES */
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
|
@ -640,7 +640,7 @@ extern u32 ht64_call_hpte_updatepp[];
|
||||
|
||||
static void __init htab_finish_init(void)
|
||||
{
|
||||
#ifdef CONFIG_PPC_HAS_HASH_64K
|
||||
#ifdef CONFIG_PPC_64K_PAGES
|
||||
patch_branch(ht64_call_hpte_insert1,
|
||||
ppc_function_entry(ppc_md.hpte_insert),
|
||||
BRANCH_SET_LINK);
|
||||
@ -653,7 +653,7 @@ static void __init htab_finish_init(void)
|
||||
patch_branch(ht64_call_hpte_updatepp,
|
||||
ppc_function_entry(ppc_md.hpte_updatepp),
|
||||
BRANCH_SET_LINK);
|
||||
#endif /* CONFIG_PPC_HAS_HASH_64K */
|
||||
#endif /* CONFIG_PPC_64K_PAGES */
|
||||
|
||||
patch_branch(htab_call_hpte_insert1,
|
||||
ppc_function_entry(ppc_md.hpte_insert),
|
||||
@ -1151,12 +1151,12 @@ int hash_page_mm(struct mm_struct *mm, unsigned long ea,
|
||||
check_paca_psize(ea, mm, psize, user_region);
|
||||
#endif /* CONFIG_PPC_64K_PAGES */
|
||||
|
||||
#ifdef CONFIG_PPC_HAS_HASH_64K
|
||||
#ifdef CONFIG_PPC_64K_PAGES
|
||||
if (psize == MMU_PAGE_64K)
|
||||
rc = __hash_page_64K(ea, access, vsid, ptep, trap,
|
||||
flags, ssize);
|
||||
else
|
||||
#endif /* CONFIG_PPC_HAS_HASH_64K */
|
||||
#endif /* CONFIG_PPC_64K_PAGES */
|
||||
{
|
||||
int spp = subpage_protection(mm, ea);
|
||||
if (access & spp)
|
||||
@ -1264,12 +1264,12 @@ void hash_preload(struct mm_struct *mm, unsigned long ea,
|
||||
update_flags |= HPTE_LOCAL_UPDATE;
|
||||
|
||||
/* Hash it in */
|
||||
#ifdef CONFIG_PPC_HAS_HASH_64K
|
||||
#ifdef CONFIG_PPC_64K_PAGES
|
||||
if (mm->context.user_psize == MMU_PAGE_64K)
|
||||
rc = __hash_page_64K(ea, access, vsid, ptep, trap,
|
||||
update_flags, ssize);
|
||||
else
|
||||
#endif /* CONFIG_PPC_HAS_HASH_64K */
|
||||
#endif /* CONFIG_PPC_64K_PAGES */
|
||||
rc = __hash_page_4K(ea, access, vsid, ptep, trap, update_flags,
|
||||
ssize, subpage_protection(mm, ea));
|
||||
|
||||
|
@ -808,14 +808,6 @@ static int __init add_huge_page_size(unsigned long long size)
|
||||
if ((mmu_psize = shift_to_mmu_psize(shift)) < 0)
|
||||
return -EINVAL;
|
||||
|
||||
#ifdef CONFIG_SPU_FS_64K_LS
|
||||
/* Disable support for 64K huge pages when 64K SPU local store
|
||||
* support is enabled as the current implementation conflicts.
|
||||
*/
|
||||
if (shift == PAGE_SHIFT_64K)
|
||||
return -EINVAL;
|
||||
#endif /* CONFIG_SPU_FS_64K_LS */
|
||||
|
||||
BUG_ON(mmu_psize_defs[mmu_psize].shift != shift);
|
||||
|
||||
/* Return if huge page size has already been setup */
|
||||
|
@ -414,17 +414,17 @@ void flush_dcache_icache_page(struct page *page)
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_BOOKE
|
||||
{
|
||||
#if defined(CONFIG_8xx) || defined(CONFIG_PPC64)
|
||||
/* On 8xx there is no need to kmap since highmem is not supported */
|
||||
__flush_dcache_icache(page_address(page));
|
||||
#else
|
||||
if (IS_ENABLED(CONFIG_BOOKE) || sizeof(phys_addr_t) > sizeof(void *)) {
|
||||
void *start = kmap_atomic(page);
|
||||
__flush_dcache_icache(start);
|
||||
kunmap_atomic(start);
|
||||
} else {
|
||||
__flush_dcache_icache_phys(page_to_pfn(page) << PAGE_SHIFT);
|
||||
}
|
||||
#elif defined(CONFIG_8xx) || defined(CONFIG_PPC64)
|
||||
/* On 8xx there is no need to kmap since highmem is not supported */
|
||||
__flush_dcache_icache(page_address(page));
|
||||
#else
|
||||
__flush_dcache_icache_phys(page_to_pfn(page) << PAGE_SHIFT);
|
||||
#endif
|
||||
}
|
||||
EXPORT_SYMBOL(flush_dcache_icache_page);
|
||||
|
@ -225,7 +225,7 @@ static void initialize_distance_lookup_table(int nid,
|
||||
for (i = 0; i < distance_ref_points_depth; i++) {
|
||||
const __be32 *entry;
|
||||
|
||||
entry = &associativity[be32_to_cpu(distance_ref_points[i])];
|
||||
entry = &associativity[be32_to_cpu(distance_ref_points[i]) - 1];
|
||||
distance_lookup_table[nid][i] = of_read_number(entry, 1);
|
||||
}
|
||||
}
|
||||
@ -248,8 +248,12 @@ static int associativity_to_nid(const __be32 *associativity)
|
||||
nid = -1;
|
||||
|
||||
if (nid > 0 &&
|
||||
of_read_number(associativity, 1) >= distance_ref_points_depth)
|
||||
initialize_distance_lookup_table(nid, associativity);
|
||||
of_read_number(associativity, 1) >= distance_ref_points_depth) {
|
||||
/*
|
||||
* Skip the length field and send start of associativity array
|
||||
*/
|
||||
initialize_distance_lookup_table(nid, associativity + 1);
|
||||
}
|
||||
|
||||
out:
|
||||
return nid;
|
||||
@ -507,6 +511,12 @@ static int of_drconf_to_nid_single(struct of_drconf_cell *drmem,
|
||||
|
||||
if (nid == 0xffff || nid >= MAX_NUMNODES)
|
||||
nid = default_nid;
|
||||
|
||||
if (nid > 0) {
|
||||
index = drmem->aa_index * aa->array_sz;
|
||||
initialize_distance_lookup_table(nid,
|
||||
&aa->arrays[index]);
|
||||
}
|
||||
}
|
||||
|
||||
return nid;
|
||||
|
@ -149,17 +149,7 @@ int map_kernel_page(unsigned long ea, unsigned long pa, int flags)
|
||||
#endif /* !CONFIG_PPC_MMU_NOHASH */
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PPC_BOOK3E_64
|
||||
/*
|
||||
* With hardware tablewalk, a sync is needed to ensure that
|
||||
* subsequent accesses see the PTE we just wrote. Unlike userspace
|
||||
* mappings, we can't tolerate spurious faults, so make sure
|
||||
* the new PTE will be seen the first time.
|
||||
*/
|
||||
mb();
|
||||
#else
|
||||
smp_wmb();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -41,9 +41,9 @@ static void slb_allocate(unsigned long ea)
|
||||
(((ssize) == MMU_SEGSIZE_256M)? ESID_MASK: ESID_MASK_1T)
|
||||
|
||||
static inline unsigned long mk_esid_data(unsigned long ea, int ssize,
|
||||
unsigned long slot)
|
||||
unsigned long entry)
|
||||
{
|
||||
return (ea & slb_esid_mask(ssize)) | SLB_ESID_V | slot;
|
||||
return (ea & slb_esid_mask(ssize)) | SLB_ESID_V | entry;
|
||||
}
|
||||
|
||||
static inline unsigned long mk_vsid_data(unsigned long ea, int ssize,
|
||||
@ -249,11 +249,24 @@ void switch_slb(struct task_struct *tsk, struct mm_struct *mm)
|
||||
static inline void patch_slb_encoding(unsigned int *insn_addr,
|
||||
unsigned int immed)
|
||||
{
|
||||
int insn = (*insn_addr & 0xffff0000) | immed;
|
||||
|
||||
/*
|
||||
* This function patches either an li or a cmpldi instruction with
|
||||
* a new immediate value. This relies on the fact that both li
|
||||
* (which is actually addi) and cmpldi both take a 16-bit immediate
|
||||
* value, and it is situated in the same location in the instruction,
|
||||
* ie. bits 16-31 (Big endian bit order) or the lower 16 bits.
|
||||
* The signedness of the immediate operand differs between the two
|
||||
* instructions however this code is only ever patching a small value,
|
||||
* much less than 1 << 15, so we can get away with it.
|
||||
* To patch the value we read the existing instruction, clear the
|
||||
* immediate value, and or in our new value, then write the instruction
|
||||
* back.
|
||||
*/
|
||||
unsigned int insn = (*insn_addr & 0xffff0000) | immed;
|
||||
patch_instruction(insn_addr, insn);
|
||||
}
|
||||
|
||||
extern u32 slb_compare_rr_to_size[];
|
||||
extern u32 slb_miss_kernel_load_linear[];
|
||||
extern u32 slb_miss_kernel_load_io[];
|
||||
extern u32 slb_compare_rr_to_size[];
|
||||
@ -309,12 +322,11 @@ void slb_initialize(void)
|
||||
lflags = SLB_VSID_KERNEL | linear_llp;
|
||||
vflags = SLB_VSID_KERNEL | vmalloc_llp;
|
||||
|
||||
/* Invalidate the entire SLB (even slot 0) & all the ERATS */
|
||||
/* Invalidate the entire SLB (even entry 0) & all the ERATS */
|
||||
asm volatile("isync":::"memory");
|
||||
asm volatile("slbmte %0,%0"::"r" (0) : "memory");
|
||||
asm volatile("isync; slbia; isync":::"memory");
|
||||
create_shadowed_slbe(PAGE_OFFSET, mmu_kernel_ssize, lflags, 0);
|
||||
|
||||
create_shadowed_slbe(VMALLOC_START, mmu_kernel_ssize, vflags, 1);
|
||||
|
||||
/* For the boot cpu, we're running on the stack in init_thread_union,
|
||||
|
@ -308,11 +308,11 @@ BEGIN_FTR_SECTION /* CPU_FTR_SMT */
|
||||
*
|
||||
* MAS6:IND should be already set based on MAS4
|
||||
*/
|
||||
1: lbarx r15,0,r11
|
||||
lhz r10,PACAPACAINDEX(r13)
|
||||
cmpdi r15,0
|
||||
cmpdi cr1,r15,1 /* set cr1.eq = 0 for non-recursive */
|
||||
addi r10,r10,1
|
||||
crclr cr1*4+eq /* set cr1.eq = 0 for non-recursive */
|
||||
1: lbarx r15,0,r11
|
||||
cmpdi r15,0
|
||||
bne 2f
|
||||
stbcx. r10,0,r11
|
||||
bne 1b
|
||||
@ -320,9 +320,9 @@ BEGIN_FTR_SECTION /* CPU_FTR_SMT */
|
||||
.subsection 1
|
||||
2: cmpd cr1,r15,r10 /* recursive lock due to mcheck/crit/etc? */
|
||||
beq cr1,3b /* unlock will happen if cr1.eq = 0 */
|
||||
lbz r15,0(r11)
|
||||
10: lbz r15,0(r11)
|
||||
cmpdi r15,0
|
||||
bne 2b
|
||||
bne 10b
|
||||
b 1b
|
||||
.previous
|
||||
|
||||
|
@ -207,7 +207,7 @@ static int power4_start(struct op_counter_config *ctr)
|
||||
unsigned int mmcr0;
|
||||
|
||||
/* set the PMM bit (see comment below) */
|
||||
mtmsrd(mfmsr() | MSR_PMM);
|
||||
mtmsr(mfmsr() | MSR_PMM);
|
||||
|
||||
for (i = 0; i < cur_cpu_spec->num_pmcs; ++i) {
|
||||
if (ctr[i].enabled) {
|
||||
@ -377,7 +377,7 @@ static void power4_handle_interrupt(struct pt_regs *regs,
|
||||
is_kernel = get_kernel(pc, mmcra);
|
||||
|
||||
/* set the PMM bit (see comment below) */
|
||||
mtmsrd(mfmsr() | MSR_PMM);
|
||||
mtmsr(mfmsr() | MSR_PMM);
|
||||
|
||||
/* Check that the SIAR valid bit in MMCRA is set to 1. */
|
||||
if ((mmcra & MMCRA_SIAR_VALID_MASK) == MMCRA_SIAR_VALID_MASK)
|
||||
|
@ -53,7 +53,7 @@ struct cpu_hw_events {
|
||||
|
||||
/* BHRB bits */
|
||||
u64 bhrb_filter; /* BHRB HW branch filter */
|
||||
int bhrb_users;
|
||||
unsigned int bhrb_users;
|
||||
void *bhrb_context;
|
||||
struct perf_branch_stack bhrb_stack;
|
||||
struct perf_branch_entry bhrb_entries[BHRB_MAX_ENTRIES];
|
||||
@ -369,8 +369,8 @@ static void power_pmu_bhrb_disable(struct perf_event *event)
|
||||
if (!ppmu->bhrb_nr)
|
||||
return;
|
||||
|
||||
WARN_ON_ONCE(!cpuhw->bhrb_users);
|
||||
cpuhw->bhrb_users--;
|
||||
WARN_ON_ONCE(cpuhw->bhrb_users < 0);
|
||||
perf_sched_cb_dec(event->ctx->pmu);
|
||||
|
||||
if (!cpuhw->disabled && !cpuhw->bhrb_users) {
|
||||
|
@ -416,7 +416,7 @@ out_val:
|
||||
}
|
||||
|
||||
static struct attribute *event_to_desc_attr(struct hv_24x7_event_data *event,
|
||||
int nonce)
|
||||
int nonce)
|
||||
{
|
||||
int nl, dl;
|
||||
char *name = event_name(event, &nl);
|
||||
@ -444,7 +444,7 @@ event_to_long_desc_attr(struct hv_24x7_event_data *event, int nonce)
|
||||
}
|
||||
|
||||
static ssize_t event_data_to_attrs(unsigned ix, struct attribute **attrs,
|
||||
struct hv_24x7_event_data *event, int nonce)
|
||||
struct hv_24x7_event_data *event, int nonce)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
@ -512,7 +512,7 @@ static int memord(const void *d1, size_t s1, const void *d2, size_t s2)
|
||||
}
|
||||
|
||||
static int ev_uniq_ord(const void *v1, size_t s1, unsigned d1, const void *v2,
|
||||
size_t s2, unsigned d2)
|
||||
size_t s2, unsigned d2)
|
||||
{
|
||||
int r = memord(v1, s1, v2, s2);
|
||||
|
||||
@ -526,7 +526,7 @@ static int ev_uniq_ord(const void *v1, size_t s1, unsigned d1, const void *v2,
|
||||
}
|
||||
|
||||
static int event_uniq_add(struct rb_root *root, const char *name, int nl,
|
||||
unsigned domain)
|
||||
unsigned domain)
|
||||
{
|
||||
struct rb_node **new = &(root->rb_node), *parent = NULL;
|
||||
struct event_uniq *data;
|
||||
@ -650,8 +650,8 @@ static ssize_t catalog_event_len_validate(struct hv_24x7_event_data *event,
|
||||
#define MAX_4K (SIZE_MAX / 4096)
|
||||
|
||||
static int create_events_from_catalog(struct attribute ***events_,
|
||||
struct attribute ***event_descs_,
|
||||
struct attribute ***event_long_descs_)
|
||||
struct attribute ***event_descs_,
|
||||
struct attribute ***event_long_descs_)
|
||||
{
|
||||
unsigned long hret;
|
||||
size_t catalog_len, catalog_page_len, event_entry_count,
|
||||
@ -1008,8 +1008,8 @@ static const struct attribute_group *attr_groups[] = {
|
||||
};
|
||||
|
||||
static void log_24x7_hcall(struct hv_24x7_request_buffer *request_buffer,
|
||||
struct hv_24x7_data_result_buffer *result_buffer,
|
||||
unsigned long ret)
|
||||
struct hv_24x7_data_result_buffer *result_buffer,
|
||||
unsigned long ret)
|
||||
{
|
||||
struct hv_24x7_request *req;
|
||||
|
||||
@ -1026,7 +1026,7 @@ static void log_24x7_hcall(struct hv_24x7_request_buffer *request_buffer,
|
||||
* Start the process for a new H_GET_24x7_DATA hcall.
|
||||
*/
|
||||
static void init_24x7_request(struct hv_24x7_request_buffer *request_buffer,
|
||||
struct hv_24x7_data_result_buffer *result_buffer)
|
||||
struct hv_24x7_data_result_buffer *result_buffer)
|
||||
{
|
||||
|
||||
memset(request_buffer, 0, 4096);
|
||||
@ -1041,7 +1041,7 @@ static void init_24x7_request(struct hv_24x7_request_buffer *request_buffer,
|
||||
* by 'init_24x7_request()' and 'add_event_to_24x7_request()'.
|
||||
*/
|
||||
static int make_24x7_request(struct hv_24x7_request_buffer *request_buffer,
|
||||
struct hv_24x7_data_result_buffer *result_buffer)
|
||||
struct hv_24x7_data_result_buffer *result_buffer)
|
||||
{
|
||||
unsigned long ret;
|
||||
|
||||
@ -1104,7 +1104,6 @@ static unsigned long single_24x7_request(struct perf_event *event, u64 *count)
|
||||
unsigned long ret;
|
||||
struct hv_24x7_request_buffer *request_buffer;
|
||||
struct hv_24x7_data_result_buffer *result_buffer;
|
||||
struct hv_24x7_result *resb;
|
||||
|
||||
BUILD_BUG_ON(sizeof(*request_buffer) > 4096);
|
||||
BUILD_BUG_ON(sizeof(*result_buffer) > 4096);
|
||||
@ -1125,8 +1124,7 @@ static unsigned long single_24x7_request(struct perf_event *event, u64 *count)
|
||||
}
|
||||
|
||||
/* process result from hcall */
|
||||
resb = &result_buffer->results[0];
|
||||
*count = be64_to_cpu(resb->elements[0].element_data[0]);
|
||||
*count = be64_to_cpu(result_buffer->results[0].elements[0].element_data[0]);
|
||||
|
||||
out:
|
||||
put_cpu_var(hv_24x7_reqb);
|
||||
|
@ -7,8 +7,8 @@ config PPC_MPC512x
|
||||
select PPC_PCI_CHOICE
|
||||
select FSL_PCI if PCI
|
||||
select ARCH_WANT_OPTIONAL_GPIOLIB
|
||||
select USB_EHCI_BIG_ENDIAN_MMIO
|
||||
select USB_EHCI_BIG_ENDIAN_DESC
|
||||
select USB_EHCI_BIG_ENDIAN_MMIO if USB_EHCI_HCD
|
||||
select USB_EHCI_BIG_ENDIAN_DESC if USB_EHCI_HCD
|
||||
|
||||
config MPC5121_ADS
|
||||
bool "Freescale MPC5121E ADS"
|
||||
|
@ -66,10 +66,6 @@ define_machine(c293_pcie) {
|
||||
.probe = c293_pcie_probe,
|
||||
.setup_arch = c293_pcie_setup_arch,
|
||||
.init_IRQ = c293_pcie_pic_init,
|
||||
#ifdef CONFIG_PCI
|
||||
.pcibios_fixup_bus = fsl_pcibios_fixup_bus,
|
||||
.pcibios_fixup_phb = fsl_pcibios_fixup_phb,
|
||||
#endif
|
||||
.get_irq = mpic_get_irq,
|
||||
.restart = fsl_rstcr_restart,
|
||||
.calibrate_decr = generic_calibrate_decr,
|
||||
|
@ -153,6 +153,8 @@ static const char * const boards[] __initconst = {
|
||||
"fsl,T1023RDB",
|
||||
"fsl,T1024QDS",
|
||||
"fsl,T1024RDB",
|
||||
"fsl,T1040D4RDB",
|
||||
"fsl,T1042D4RDB",
|
||||
"fsl,T1040QDS",
|
||||
"fsl,T1042QDS",
|
||||
"fsl,T1040RDB",
|
||||
|
@ -57,21 +57,6 @@ config SPU_FS
|
||||
Units on machines implementing the Broadband Processor
|
||||
Architecture.
|
||||
|
||||
config SPU_FS_64K_LS
|
||||
bool "Use 64K pages to map SPE local store"
|
||||
# we depend on PPC_MM_SLICES for now rather than selecting
|
||||
# it because we depend on hugetlbfs hooks being present. We
|
||||
# will fix that when the generic code has been improved to
|
||||
# not require hijacking hugetlbfs hooks.
|
||||
depends on SPU_FS && PPC_MM_SLICES && !PPC_64K_PAGES
|
||||
default y
|
||||
select PPC_HAS_HASH_64K
|
||||
help
|
||||
This option causes SPE local stores to be mapped in process
|
||||
address spaces using 64K pages while the rest of the kernel
|
||||
uses 4K pages. This can improve performances of applications
|
||||
using multiple SPEs by lowering the TLB pressure on them.
|
||||
|
||||
config SPU_BASE
|
||||
bool
|
||||
default n
|
||||
|
@ -239,23 +239,6 @@ spufs_mem_mmap_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
|
||||
unsigned long address = (unsigned long)vmf->virtual_address;
|
||||
unsigned long pfn, offset;
|
||||
|
||||
#ifdef CONFIG_SPU_FS_64K_LS
|
||||
struct spu_state *csa = &ctx->csa;
|
||||
int psize;
|
||||
|
||||
/* Check what page size we are using */
|
||||
psize = get_slice_psize(vma->vm_mm, address);
|
||||
|
||||
/* Some sanity checking */
|
||||
BUG_ON(csa->use_big_pages != (psize == MMU_PAGE_64K));
|
||||
|
||||
/* Wow, 64K, cool, we need to align the address though */
|
||||
if (csa->use_big_pages) {
|
||||
BUG_ON(vma->vm_start & 0xffff);
|
||||
address &= ~0xfffful;
|
||||
}
|
||||
#endif /* CONFIG_SPU_FS_64K_LS */
|
||||
|
||||
offset = vmf->pgoff << PAGE_SHIFT;
|
||||
if (offset >= LS_SIZE)
|
||||
return VM_FAULT_SIGBUS;
|
||||
@ -310,22 +293,6 @@ static const struct vm_operations_struct spufs_mem_mmap_vmops = {
|
||||
|
||||
static int spufs_mem_mmap(struct file *file, struct vm_area_struct *vma)
|
||||
{
|
||||
#ifdef CONFIG_SPU_FS_64K_LS
|
||||
struct spu_context *ctx = file->private_data;
|
||||
struct spu_state *csa = &ctx->csa;
|
||||
|
||||
/* Sanity check VMA alignment */
|
||||
if (csa->use_big_pages) {
|
||||
pr_debug("spufs_mem_mmap 64K, start=0x%lx, end=0x%lx,"
|
||||
" pgoff=0x%lx\n", vma->vm_start, vma->vm_end,
|
||||
vma->vm_pgoff);
|
||||
if (vma->vm_start & 0xffff)
|
||||
return -EINVAL;
|
||||
if (vma->vm_pgoff & 0xf)
|
||||
return -EINVAL;
|
||||
}
|
||||
#endif /* CONFIG_SPU_FS_64K_LS */
|
||||
|
||||
if (!(vma->vm_flags & VM_SHARED))
|
||||
return -EINVAL;
|
||||
|
||||
@ -336,25 +303,6 @@ static int spufs_mem_mmap(struct file *file, struct vm_area_struct *vma)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SPU_FS_64K_LS
|
||||
static unsigned long spufs_get_unmapped_area(struct file *file,
|
||||
unsigned long addr, unsigned long len, unsigned long pgoff,
|
||||
unsigned long flags)
|
||||
{
|
||||
struct spu_context *ctx = file->private_data;
|
||||
struct spu_state *csa = &ctx->csa;
|
||||
|
||||
/* If not using big pages, fallback to normal MM g_u_a */
|
||||
if (!csa->use_big_pages)
|
||||
return current->mm->get_unmapped_area(file, addr, len,
|
||||
pgoff, flags);
|
||||
|
||||
/* Else, try to obtain a 64K pages slice */
|
||||
return slice_get_unmapped_area(addr, len, flags,
|
||||
MMU_PAGE_64K, 1);
|
||||
}
|
||||
#endif /* CONFIG_SPU_FS_64K_LS */
|
||||
|
||||
static const struct file_operations spufs_mem_fops = {
|
||||
.open = spufs_mem_open,
|
||||
.release = spufs_mem_release,
|
||||
@ -362,9 +310,6 @@ static const struct file_operations spufs_mem_fops = {
|
||||
.write = spufs_mem_write,
|
||||
.llseek = generic_file_llseek,
|
||||
.mmap = spufs_mem_mmap,
|
||||
#ifdef CONFIG_SPU_FS_64K_LS
|
||||
.get_unmapped_area = spufs_get_unmapped_area,
|
||||
#endif
|
||||
};
|
||||
|
||||
static int spufs_ps_fault(struct vm_area_struct *vma,
|
||||
|
@ -31,7 +31,7 @@
|
||||
|
||||
#include "spufs.h"
|
||||
|
||||
static int spu_alloc_lscsa_std(struct spu_state *csa)
|
||||
int spu_alloc_lscsa(struct spu_state *csa)
|
||||
{
|
||||
struct spu_lscsa *lscsa;
|
||||
unsigned char *p;
|
||||
@ -48,7 +48,7 @@ static int spu_alloc_lscsa_std(struct spu_state *csa)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void spu_free_lscsa_std(struct spu_state *csa)
|
||||
void spu_free_lscsa(struct spu_state *csa)
|
||||
{
|
||||
/* Clear reserved bit before vfree. */
|
||||
unsigned char *p;
|
||||
@ -61,123 +61,3 @@ static void spu_free_lscsa_std(struct spu_state *csa)
|
||||
|
||||
vfree(csa->lscsa);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SPU_FS_64K_LS
|
||||
|
||||
#define SPU_64K_PAGE_SHIFT 16
|
||||
#define SPU_64K_PAGE_ORDER (SPU_64K_PAGE_SHIFT - PAGE_SHIFT)
|
||||
#define SPU_64K_PAGE_COUNT (1ul << SPU_64K_PAGE_ORDER)
|
||||
|
||||
int spu_alloc_lscsa(struct spu_state *csa)
|
||||
{
|
||||
struct page **pgarray;
|
||||
unsigned char *p;
|
||||
int i, j, n_4k;
|
||||
|
||||
/* Check availability of 64K pages */
|
||||
if (!spu_64k_pages_available())
|
||||
goto fail;
|
||||
|
||||
csa->use_big_pages = 1;
|
||||
|
||||
pr_debug("spu_alloc_lscsa(csa=0x%p), trying to allocate 64K pages\n",
|
||||
csa);
|
||||
|
||||
/* First try to allocate our 64K pages. We need 5 of them
|
||||
* with the current implementation. In the future, we should try
|
||||
* to separate the lscsa with the actual local store image, thus
|
||||
* allowing us to require only 4 64K pages per context
|
||||
*/
|
||||
for (i = 0; i < SPU_LSCSA_NUM_BIG_PAGES; i++) {
|
||||
/* XXX This is likely to fail, we should use a special pool
|
||||
* similar to what hugetlbfs does.
|
||||
*/
|
||||
csa->lscsa_pages[i] = alloc_pages(GFP_KERNEL,
|
||||
SPU_64K_PAGE_ORDER);
|
||||
if (csa->lscsa_pages[i] == NULL)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
pr_debug(" success ! creating vmap...\n");
|
||||
|
||||
/* Now we need to create a vmalloc mapping of these for the kernel
|
||||
* and SPU context switch code to use. Currently, we stick to a
|
||||
* normal kernel vmalloc mapping, which in our case will be 4K
|
||||
*/
|
||||
n_4k = SPU_64K_PAGE_COUNT * SPU_LSCSA_NUM_BIG_PAGES;
|
||||
pgarray = kmalloc(sizeof(struct page *) * n_4k, GFP_KERNEL);
|
||||
if (pgarray == NULL)
|
||||
goto fail;
|
||||
for (i = 0; i < SPU_LSCSA_NUM_BIG_PAGES; i++)
|
||||
for (j = 0; j < SPU_64K_PAGE_COUNT; j++)
|
||||
/* We assume all the struct page's are contiguous
|
||||
* which should be hopefully the case for an order 4
|
||||
* allocation..
|
||||
*/
|
||||
pgarray[i * SPU_64K_PAGE_COUNT + j] =
|
||||
csa->lscsa_pages[i] + j;
|
||||
csa->lscsa = vmap(pgarray, n_4k, VM_USERMAP, PAGE_KERNEL);
|
||||
kfree(pgarray);
|
||||
if (csa->lscsa == NULL)
|
||||
goto fail;
|
||||
|
||||
memset(csa->lscsa, 0, sizeof(struct spu_lscsa));
|
||||
|
||||
/* Set LS pages reserved to allow for user-space mapping.
|
||||
*
|
||||
* XXX isn't that a bit obsolete ? I think we should just
|
||||
* make sure the page count is high enough. Anyway, won't harm
|
||||
* for now
|
||||
*/
|
||||
for (p = csa->lscsa->ls; p < csa->lscsa->ls + LS_SIZE; p += PAGE_SIZE)
|
||||
SetPageReserved(vmalloc_to_page(p));
|
||||
|
||||
pr_debug(" all good !\n");
|
||||
|
||||
return 0;
|
||||
fail:
|
||||
pr_debug("spufs: failed to allocate lscsa 64K pages, falling back\n");
|
||||
spu_free_lscsa(csa);
|
||||
return spu_alloc_lscsa_std(csa);
|
||||
}
|
||||
|
||||
void spu_free_lscsa(struct spu_state *csa)
|
||||
{
|
||||
unsigned char *p;
|
||||
int i;
|
||||
|
||||
if (!csa->use_big_pages) {
|
||||
spu_free_lscsa_std(csa);
|
||||
return;
|
||||
}
|
||||
csa->use_big_pages = 0;
|
||||
|
||||
if (csa->lscsa == NULL)
|
||||
goto free_pages;
|
||||
|
||||
for (p = csa->lscsa->ls; p < csa->lscsa->ls + LS_SIZE; p += PAGE_SIZE)
|
||||
ClearPageReserved(vmalloc_to_page(p));
|
||||
|
||||
vunmap(csa->lscsa);
|
||||
csa->lscsa = NULL;
|
||||
|
||||
free_pages:
|
||||
|
||||
for (i = 0; i < SPU_LSCSA_NUM_BIG_PAGES; i++)
|
||||
if (csa->lscsa_pages[i])
|
||||
__free_pages(csa->lscsa_pages[i], SPU_64K_PAGE_ORDER);
|
||||
}
|
||||
|
||||
#else /* CONFIG_SPU_FS_64K_LS */
|
||||
|
||||
int spu_alloc_lscsa(struct spu_state *csa)
|
||||
{
|
||||
return spu_alloc_lscsa_std(csa);
|
||||
}
|
||||
|
||||
void spu_free_lscsa(struct spu_state *csa)
|
||||
{
|
||||
spu_free_lscsa_std(csa);
|
||||
}
|
||||
|
||||
#endif /* !defined(CONFIG_SPU_FS_64K_LS) */
|
||||
|
@ -1394,11 +1394,19 @@ static int pnv_eeh_next_error(struct eeh_pe **pe)
|
||||
*/
|
||||
if (pnv_eeh_get_pe(hose,
|
||||
be64_to_cpu(frozen_pe_no), pe)) {
|
||||
/* Try best to clear it */
|
||||
pr_info("EEH: Clear non-existing PHB#%x-PE#%llx\n",
|
||||
hose->global_number, frozen_pe_no);
|
||||
hose->global_number, be64_to_cpu(frozen_pe_no));
|
||||
pr_info("EEH: PHB location: %s\n",
|
||||
eeh_pe_loc_get(phb_pe));
|
||||
|
||||
/* Dump PHB diag-data */
|
||||
rc = opal_pci_get_phb_diag_data2(phb->opal_id,
|
||||
phb->diag.blob, PNV_PCI_DIAG_BUF_SIZE);
|
||||
if (rc == OPAL_SUCCESS)
|
||||
pnv_pci_dump_phb_diag_data(hose,
|
||||
phb->diag.blob);
|
||||
|
||||
/* Try best to clear it */
|
||||
opal_pci_eeh_freeze_clear(phb->opal_id,
|
||||
frozen_pe_no,
|
||||
OPAL_EEH_ACTION_CLEAR_FREEZE_ALL);
|
||||
|
@ -35,9 +35,134 @@ struct OpalHmiEvtNode {
|
||||
struct list_head list;
|
||||
struct OpalHMIEvent hmi_evt;
|
||||
};
|
||||
|
||||
struct xstop_reason {
|
||||
uint32_t xstop_reason;
|
||||
const char *unit_failed;
|
||||
const char *description;
|
||||
};
|
||||
|
||||
static LIST_HEAD(opal_hmi_evt_list);
|
||||
static DEFINE_SPINLOCK(opal_hmi_evt_lock);
|
||||
|
||||
static void print_core_checkstop_reason(const char *level,
|
||||
struct OpalHMIEvent *hmi_evt)
|
||||
{
|
||||
int i;
|
||||
static const struct xstop_reason xstop_reason[] = {
|
||||
{ CORE_CHECKSTOP_IFU_REGFILE, "IFU",
|
||||
"RegFile core check stop" },
|
||||
{ CORE_CHECKSTOP_IFU_LOGIC, "IFU", "Logic core check stop" },
|
||||
{ CORE_CHECKSTOP_PC_DURING_RECOV, "PC",
|
||||
"Core checkstop during recovery" },
|
||||
{ CORE_CHECKSTOP_ISU_REGFILE, "ISU",
|
||||
"RegFile core check stop (mapper error)" },
|
||||
{ CORE_CHECKSTOP_ISU_LOGIC, "ISU", "Logic core check stop" },
|
||||
{ CORE_CHECKSTOP_FXU_LOGIC, "FXU", "Logic core check stop" },
|
||||
{ CORE_CHECKSTOP_VSU_LOGIC, "VSU", "Logic core check stop" },
|
||||
{ CORE_CHECKSTOP_PC_RECOV_IN_MAINT_MODE, "PC",
|
||||
"Recovery in maintenance mode" },
|
||||
{ CORE_CHECKSTOP_LSU_REGFILE, "LSU",
|
||||
"RegFile core check stop" },
|
||||
{ CORE_CHECKSTOP_PC_FWD_PROGRESS, "PC",
|
||||
"Forward Progress Error" },
|
||||
{ CORE_CHECKSTOP_LSU_LOGIC, "LSU", "Logic core check stop" },
|
||||
{ CORE_CHECKSTOP_PC_LOGIC, "PC", "Logic core check stop" },
|
||||
{ CORE_CHECKSTOP_PC_HYP_RESOURCE, "PC",
|
||||
"Hypervisor Resource error - core check stop" },
|
||||
{ CORE_CHECKSTOP_PC_HANG_RECOV_FAILED, "PC",
|
||||
"Hang Recovery Failed (core check stop)" },
|
||||
{ CORE_CHECKSTOP_PC_AMBI_HANG_DETECTED, "PC",
|
||||
"Ambiguous Hang Detected (unknown source)" },
|
||||
{ CORE_CHECKSTOP_PC_DEBUG_TRIG_ERR_INJ, "PC",
|
||||
"Debug Trigger Error inject" },
|
||||
{ CORE_CHECKSTOP_PC_SPRD_HYP_ERR_INJ, "PC",
|
||||
"Hypervisor check stop via SPRC/SPRD" },
|
||||
};
|
||||
|
||||
/* Validity check */
|
||||
if (!hmi_evt->u.xstop_error.xstop_reason) {
|
||||
printk("%s Unknown Core check stop.\n", level);
|
||||
return;
|
||||
}
|
||||
|
||||
printk("%s CPU PIR: %08x\n", level,
|
||||
be32_to_cpu(hmi_evt->u.xstop_error.u.pir));
|
||||
for (i = 0; i < ARRAY_SIZE(xstop_reason); i++)
|
||||
if (be32_to_cpu(hmi_evt->u.xstop_error.xstop_reason) &
|
||||
xstop_reason[i].xstop_reason)
|
||||
printk("%s [Unit: %-3s] %s\n", level,
|
||||
xstop_reason[i].unit_failed,
|
||||
xstop_reason[i].description);
|
||||
}
|
||||
|
||||
static void print_nx_checkstop_reason(const char *level,
|
||||
struct OpalHMIEvent *hmi_evt)
|
||||
{
|
||||
int i;
|
||||
static const struct xstop_reason xstop_reason[] = {
|
||||
{ NX_CHECKSTOP_SHM_INVAL_STATE_ERR, "DMA & Engine",
|
||||
"SHM invalid state error" },
|
||||
{ NX_CHECKSTOP_DMA_INVAL_STATE_ERR_1, "DMA & Engine",
|
||||
"DMA invalid state error bit 15" },
|
||||
{ NX_CHECKSTOP_DMA_INVAL_STATE_ERR_2, "DMA & Engine",
|
||||
"DMA invalid state error bit 16" },
|
||||
{ NX_CHECKSTOP_DMA_CH0_INVAL_STATE_ERR, "DMA & Engine",
|
||||
"Channel 0 invalid state error" },
|
||||
{ NX_CHECKSTOP_DMA_CH1_INVAL_STATE_ERR, "DMA & Engine",
|
||||
"Channel 1 invalid state error" },
|
||||
{ NX_CHECKSTOP_DMA_CH2_INVAL_STATE_ERR, "DMA & Engine",
|
||||
"Channel 2 invalid state error" },
|
||||
{ NX_CHECKSTOP_DMA_CH3_INVAL_STATE_ERR, "DMA & Engine",
|
||||
"Channel 3 invalid state error" },
|
||||
{ NX_CHECKSTOP_DMA_CH4_INVAL_STATE_ERR, "DMA & Engine",
|
||||
"Channel 4 invalid state error" },
|
||||
{ NX_CHECKSTOP_DMA_CH5_INVAL_STATE_ERR, "DMA & Engine",
|
||||
"Channel 5 invalid state error" },
|
||||
{ NX_CHECKSTOP_DMA_CH6_INVAL_STATE_ERR, "DMA & Engine",
|
||||
"Channel 6 invalid state error" },
|
||||
{ NX_CHECKSTOP_DMA_CH7_INVAL_STATE_ERR, "DMA & Engine",
|
||||
"Channel 7 invalid state error" },
|
||||
{ NX_CHECKSTOP_DMA_CRB_UE, "DMA & Engine",
|
||||
"UE error on CRB(CSB address, CCB)" },
|
||||
{ NX_CHECKSTOP_DMA_CRB_SUE, "DMA & Engine",
|
||||
"SUE error on CRB(CSB address, CCB)" },
|
||||
{ NX_CHECKSTOP_PBI_ISN_UE, "PowerBus Interface",
|
||||
"CRB Kill ISN received while holding ISN with UE error" },
|
||||
};
|
||||
|
||||
/* Validity check */
|
||||
if (!hmi_evt->u.xstop_error.xstop_reason) {
|
||||
printk("%s Unknown NX check stop.\n", level);
|
||||
return;
|
||||
}
|
||||
|
||||
printk("%s NX checkstop on CHIP ID: %x\n", level,
|
||||
be32_to_cpu(hmi_evt->u.xstop_error.u.chip_id));
|
||||
for (i = 0; i < ARRAY_SIZE(xstop_reason); i++)
|
||||
if (be32_to_cpu(hmi_evt->u.xstop_error.xstop_reason) &
|
||||
xstop_reason[i].xstop_reason)
|
||||
printk("%s [Unit: %-3s] %s\n", level,
|
||||
xstop_reason[i].unit_failed,
|
||||
xstop_reason[i].description);
|
||||
}
|
||||
|
||||
static void print_checkstop_reason(const char *level,
|
||||
struct OpalHMIEvent *hmi_evt)
|
||||
{
|
||||
switch (hmi_evt->u.xstop_error.xstop_type) {
|
||||
case CHECKSTOP_TYPE_CORE:
|
||||
print_core_checkstop_reason(level, hmi_evt);
|
||||
break;
|
||||
case CHECKSTOP_TYPE_NX:
|
||||
print_nx_checkstop_reason(level, hmi_evt);
|
||||
break;
|
||||
case CHECKSTOP_TYPE_UNKNOWN:
|
||||
printk("%s Unknown Malfunction Alert.\n", level);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void print_hmi_event_info(struct OpalHMIEvent *hmi_evt)
|
||||
{
|
||||
const char *level, *sevstr, *error_info;
|
||||
@ -95,6 +220,13 @@ static void print_hmi_event_info(struct OpalHMIEvent *hmi_evt)
|
||||
(hmi_evt->type == OpalHMI_ERROR_TFMR_PARITY))
|
||||
printk("%s TFMR: %016llx\n", level,
|
||||
be64_to_cpu(hmi_evt->tfmr));
|
||||
|
||||
if (hmi_evt->version < OpalHMIEvt_V2)
|
||||
return;
|
||||
|
||||
/* OpalHMIEvt_V2 and above provides reason for malfunction alert. */
|
||||
if (hmi_evt->type == OpalHMI_ERROR_MALFUNC_ALERT)
|
||||
print_checkstop_reason(level, hmi_evt);
|
||||
}
|
||||
|
||||
static void hmi_event_handler(struct work_struct *work)
|
||||
@ -103,6 +235,8 @@ static void hmi_event_handler(struct work_struct *work)
|
||||
struct OpalHMIEvent *hmi_evt;
|
||||
struct OpalHmiEvtNode *msg_node;
|
||||
uint8_t disposition;
|
||||
struct opal_msg msg;
|
||||
int unrecoverable = 0;
|
||||
|
||||
spin_lock_irqsave(&opal_hmi_evt_lock, flags);
|
||||
while (!list_empty(&opal_hmi_evt_list)) {
|
||||
@ -118,14 +252,53 @@ static void hmi_event_handler(struct work_struct *work)
|
||||
|
||||
/*
|
||||
* Check if HMI event has been recovered or not. If not
|
||||
* then we can't continue, invoke panic.
|
||||
* then kernel can't continue, we need to panic.
|
||||
* But before we do that, display all the HMI event
|
||||
* available on the list and set unrecoverable flag to 1.
|
||||
*/
|
||||
if (disposition != OpalHMI_DISPOSITION_RECOVERED)
|
||||
panic("Unrecoverable HMI exception");
|
||||
unrecoverable = 1;
|
||||
|
||||
spin_lock_irqsave(&opal_hmi_evt_lock, flags);
|
||||
}
|
||||
spin_unlock_irqrestore(&opal_hmi_evt_lock, flags);
|
||||
|
||||
if (unrecoverable) {
|
||||
int ret;
|
||||
|
||||
/* Pull all HMI events from OPAL before we panic. */
|
||||
while (opal_get_msg(__pa(&msg), sizeof(msg)) == OPAL_SUCCESS) {
|
||||
u32 type;
|
||||
|
||||
type = be32_to_cpu(msg.msg_type);
|
||||
|
||||
/* skip if not HMI event */
|
||||
if (type != OPAL_MSG_HMI_EVT)
|
||||
continue;
|
||||
|
||||
/* HMI event info starts from param[0] */
|
||||
hmi_evt = (struct OpalHMIEvent *)&msg.params[0];
|
||||
print_hmi_event_info(hmi_evt);
|
||||
}
|
||||
|
||||
/*
|
||||
* Unrecoverable HMI exception. We need to inform BMC/OCC
|
||||
* about this error so that it can collect relevant data
|
||||
* for error analysis before rebooting.
|
||||
*/
|
||||
ret = opal_cec_reboot2(OPAL_REBOOT_PLATFORM_ERROR,
|
||||
"Unrecoverable HMI exception");
|
||||
if (ret == OPAL_UNSUPPORTED) {
|
||||
pr_emerg("Reboot type %d not supported\n",
|
||||
OPAL_REBOOT_PLATFORM_ERROR);
|
||||
}
|
||||
|
||||
/*
|
||||
* Fall through and panic if opal_cec_reboot2() returns
|
||||
* OPAL_UNSUPPORTED.
|
||||
*/
|
||||
panic("Unrecoverable HMI exception");
|
||||
}
|
||||
}
|
||||
|
||||
static DECLARE_WORK(hmi_event_work, hmi_event_handler);
|
||||
|
@ -9,9 +9,12 @@
|
||||
* 2 of the License, or (at your option) any later version.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "opal-power: " fmt
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/reboot.h>
|
||||
#include <linux/notifier.h>
|
||||
#include <linux/of.h>
|
||||
|
||||
#include <asm/opal.h>
|
||||
#include <asm/machdep.h>
|
||||
@ -19,30 +22,116 @@
|
||||
#define SOFT_OFF 0x00
|
||||
#define SOFT_REBOOT 0x01
|
||||
|
||||
static int opal_power_control_event(struct notifier_block *nb,
|
||||
unsigned long msg_type, void *msg)
|
||||
/* Detect EPOW event */
|
||||
static bool detect_epow(void)
|
||||
{
|
||||
u16 epow;
|
||||
int i, rc;
|
||||
__be16 epow_classes;
|
||||
__be16 opal_epow_status[OPAL_SYSEPOW_MAX] = {0};
|
||||
|
||||
/*
|
||||
* Check for EPOW event. Kernel sends supported EPOW classes info
|
||||
* to OPAL. OPAL returns EPOW info along with classes present.
|
||||
*/
|
||||
epow_classes = cpu_to_be16(OPAL_SYSEPOW_MAX);
|
||||
rc = opal_get_epow_status(opal_epow_status, &epow_classes);
|
||||
if (rc != OPAL_SUCCESS) {
|
||||
pr_err("Failed to get EPOW event information\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Look for EPOW events present */
|
||||
for (i = 0; i < be16_to_cpu(epow_classes); i++) {
|
||||
epow = be16_to_cpu(opal_epow_status[i]);
|
||||
|
||||
/* Filter events which do not need shutdown. */
|
||||
if (i == OPAL_SYSEPOW_POWER)
|
||||
epow &= ~(OPAL_SYSPOWER_CHNG | OPAL_SYSPOWER_FAIL |
|
||||
OPAL_SYSPOWER_INCL);
|
||||
if (epow)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Check for existing EPOW, DPO events */
|
||||
static bool poweroff_pending(void)
|
||||
{
|
||||
int rc;
|
||||
__be64 opal_dpo_timeout;
|
||||
|
||||
/* Check for DPO event */
|
||||
rc = opal_get_dpo_status(&opal_dpo_timeout);
|
||||
if (rc == OPAL_SUCCESS) {
|
||||
pr_info("Existing DPO event detected.\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Check for EPOW event */
|
||||
if (detect_epow()) {
|
||||
pr_info("Existing EPOW event detected.\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/* OPAL power-control events notifier */
|
||||
static int opal_power_control_event(struct notifier_block *nb,
|
||||
unsigned long msg_type, void *msg)
|
||||
{
|
||||
struct opal_msg *power_msg = msg;
|
||||
uint64_t type;
|
||||
|
||||
type = be64_to_cpu(power_msg->params[0]);
|
||||
|
||||
switch (type) {
|
||||
case SOFT_REBOOT:
|
||||
pr_info("OPAL: reboot requested\n");
|
||||
orderly_reboot();
|
||||
switch (msg_type) {
|
||||
case OPAL_MSG_EPOW:
|
||||
if (detect_epow()) {
|
||||
pr_info("EPOW msg received. Powering off system\n");
|
||||
orderly_poweroff(true);
|
||||
}
|
||||
break;
|
||||
case SOFT_OFF:
|
||||
pr_info("OPAL: poweroff requested\n");
|
||||
case OPAL_MSG_DPO:
|
||||
pr_info("DPO msg received. Powering off system\n");
|
||||
orderly_poweroff(true);
|
||||
break;
|
||||
case OPAL_MSG_SHUTDOWN:
|
||||
type = be64_to_cpu(((struct opal_msg *)msg)->params[0]);
|
||||
switch (type) {
|
||||
case SOFT_REBOOT:
|
||||
pr_info("Reboot requested\n");
|
||||
orderly_reboot();
|
||||
break;
|
||||
case SOFT_OFF:
|
||||
pr_info("Poweroff requested\n");
|
||||
orderly_poweroff(true);
|
||||
break;
|
||||
default:
|
||||
pr_err("Unknown power-control type %llu\n", type);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
pr_err("OPAL: power control type unexpected %016llx\n", type);
|
||||
pr_err("Unknown OPAL message type %lu\n", msg_type);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* OPAL EPOW event notifier block */
|
||||
static struct notifier_block opal_epow_nb = {
|
||||
.notifier_call = opal_power_control_event,
|
||||
.next = NULL,
|
||||
.priority = 0,
|
||||
};
|
||||
|
||||
/* OPAL DPO event notifier block */
|
||||
static struct notifier_block opal_dpo_nb = {
|
||||
.notifier_call = opal_power_control_event,
|
||||
.next = NULL,
|
||||
.priority = 0,
|
||||
};
|
||||
|
||||
/* OPAL power-control event notifier block */
|
||||
static struct notifier_block opal_power_control_nb = {
|
||||
.notifier_call = opal_power_control_event,
|
||||
.next = NULL,
|
||||
@ -51,16 +140,40 @@ static struct notifier_block opal_power_control_nb = {
|
||||
|
||||
static int __init opal_power_control_init(void)
|
||||
{
|
||||
int ret;
|
||||
int ret, supported = 0;
|
||||
struct device_node *np;
|
||||
|
||||
/* Register OPAL power-control events notifier */
|
||||
ret = opal_message_notifier_register(OPAL_MSG_SHUTDOWN,
|
||||
&opal_power_control_nb);
|
||||
if (ret) {
|
||||
pr_err("%s: Can't register OPAL event notifier (%d)\n",
|
||||
__func__, ret);
|
||||
return ret;
|
||||
&opal_power_control_nb);
|
||||
if (ret)
|
||||
pr_err("Failed to register SHUTDOWN notifier, ret = %d\n", ret);
|
||||
|
||||
/* Determine OPAL EPOW, DPO support */
|
||||
np = of_find_node_by_path("/ibm,opal/epow");
|
||||
if (np) {
|
||||
supported = of_device_is_compatible(np, "ibm,opal-v3-epow");
|
||||
of_node_put(np);
|
||||
}
|
||||
|
||||
if (!supported)
|
||||
return 0;
|
||||
pr_info("OPAL EPOW, DPO support detected.\n");
|
||||
|
||||
/* Register EPOW event notifier */
|
||||
ret = opal_message_notifier_register(OPAL_MSG_EPOW, &opal_epow_nb);
|
||||
if (ret)
|
||||
pr_err("Failed to register EPOW notifier, ret = %d\n", ret);
|
||||
|
||||
/* Register DPO event notifier */
|
||||
ret = opal_message_notifier_register(OPAL_MSG_DPO, &opal_dpo_nb);
|
||||
if (ret)
|
||||
pr_err("Failed to register DPO notifier, ret = %d\n", ret);
|
||||
|
||||
/* Check for any pending EPOW or DPO events. */
|
||||
if (poweroff_pending())
|
||||
orderly_poweroff(true);
|
||||
|
||||
return 0;
|
||||
}
|
||||
machine_subsys_initcall(powernv, opal_power_control_init);
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user