Commit 82aff107 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc

* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc: (152 commits)
  powerpc: Fix hard CPU IDs detection
  powerpc/pmac: Update via-pmu to new syscore_ops
  powerpc/kvm: Fix the build for 32-bit Book 3S (classic) processors
  powerpc/kvm: Fix kvmppc_core_pending_dec
  powerpc: Remove last piece of GEMINI
  powerpc: Fix for Pegasos keyboard and mouse
  powerpc: Make early memory scan more resilient to out of order nodes
  powerpc/pseries/iommu: Cleanup ddw naming
  powerpc/pseries/iommu: Find windows after kexec during boot
  powerpc/pseries/iommu: Remove ddw property when destroying window
  powerpc/pseries/iommu: Add additional checks when changing iommu mask
  powerpc/pseries/iommu: Use correct return type in dupe_ddw_if_already_created
  powerpc: Remove unused/obsolete CONFIG_XICS
  misc: Add CARMA DATA-FPGA Programmer support
  misc: Add CARMA DATA-FPGA Access Driver
  powerpc: Make IRQ_NOREQUEST last to clear, first to set
  powerpc: Integrated Flash controller device tree bindings
  powerpc/85xx: Create dts of each core in CAMP mode for P1020RDB
  powerpc/85xx: Fix PCIe IDSEL for Px020RDB
  powerpc/85xx: P2020 DTS: re-organize dts files
  ...
parents d974d905 208b3a4c
CAN Device Tree Bindings
------------------------
2011 Freescale Semiconductor, Inc.
fsl,flexcan-v1.0 nodes
-----------------------
In addition to the required compatible-, reg- and interrupt-properties, you can
also specify which clock source shall be used for the controller.
CPI Clock- Can Protocol Interface Clock
This CLK_SRC bit of CTRL(control register) selects the clock source to
the CAN Protocol Interface(CPI) to be either the peripheral clock
(driven by the PLL) or the crystal oscillator clock. The selected clock
is the one fed to the prescaler to generate the Serial Clock (Sclock).
The PRESDIV field of CTRL(control register) controls a prescaler that
generates the Serial Clock (Sclock), whose period defines the
time quantum used to compose the CAN waveform.
Can Engine Clock Source
There are two sources for CAN clock
- Platform Clock It represents the bus clock
- Oscillator Clock
Peripheral Clock (PLL)
--------------
|
--------- -------------
| |CPI Clock | Prescaler | Sclock
| |---------------->| (1.. 256) |------------>
--------- -------------
| |
-------------- ---------------------CLK_SRC
Oscillator Clock
- fsl,flexcan-clock-source : CAN Engine Clock Source.This property selects
the peripheral clock. PLL clock is fed to the
prescaler to generate the Serial Clock (Sclock).
Valid values are "oscillator" and "platform"
"oscillator": CAN engine clock source is oscillator clock.
"platform" The CAN engine clock source is the bus clock
(platform clock).
- fsl,flexcan-clock-divider : for the reference and system clock, an additional
clock divider can be specified.
- clock-frequency: frequency required to calculate the bitrate for FlexCAN.
Note:
- v1.0 of flexcan-v1.0 represent the IP block version for P1010 SOC.
- P1010 does not have oscillator as the Clock Source.So the default
Clock Source is platform clock.
Examples:
can0@1c000 {
compatible = "fsl,flexcan-v1.0";
reg = <0x1c000 0x1000>;
interrupts = <48 0x2>;
interrupt-parent = <&mpic>;
fsl,flexcan-clock-source = "platform";
fsl,flexcan-clock-divider = <2>;
clock-frequency = <fixed by u-boot>;
};
Integrated Flash Controller
Properties:
- name : Should be ifc
- compatible : should contain "fsl,ifc". The version of the integrated
flash controller can be found in the IFC_REV register at
offset zero.
- #address-cells : Should be either two or three. The first cell is the
chipselect number, and the remaining cells are the
offset into the chipselect.
- #size-cells : Either one or two, depending on how large each chipselect
can be.
- reg : Offset and length of the register set for the device
- interrupts : IFC has two interrupts. The first one is the "common"
interrupt(CM_EVTER_STAT), and second is the NAND interrupt
(NAND_EVTER_STAT).
- ranges : Each range corresponds to a single chipselect, and covers
the entire access window as configured.
Child device nodes describe the devices connected to IFC such as NOR (e.g.
cfi-flash) and NAND (fsl,ifc-nand). There might be board specific devices
like FPGAs, CPLDs, etc.
Example:
ifc@ffe1e000 {
compatible = "fsl,ifc", "simple-bus";
#address-cells = <2>;
#size-cells = <1>;
reg = <0x0 0xffe1e000 0 0x2000>;
interrupts = <16 2 19 2>;
/* NOR, NAND Flashes and CPLD on board */
ranges = <0x0 0x0 0x0 0xee000000 0x02000000
0x1 0x0 0x0 0xffa00000 0x00010000
0x3 0x0 0x0 0xffb00000 0x00020000>;
flash@0,0 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "cfi-flash";
reg = <0x0 0x0 0x2000000>;
bank-width = <2>;
device-width = <1>;
partition@0 {
/* 32MB for user data */
reg = <0x0 0x02000000>;
label = "NOR Data";
};
};
flash@1,0 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "fsl,ifc-nand";
reg = <0x1 0x0 0x10000>;
partition@0 {
/* This location must not be altered */
/* 1MB for u-boot Bootloader Image */
reg = <0x0 0x00100000>;
label = "NAND U-Boot Image";
read-only;
};
};
cpld@3,0 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "fsl,p1010rdb-cpld";
reg = <0x3 0x0 0x000001f>;
};
};
* Freescale MPIC timers
Required properties:
- compatible: "fsl,mpic-global-timer"
- reg : Contains two regions. The first is the main timer register bank
(GTCCRxx, GTBCRxx, GTVPRxx, GTDRxx). The second is the timer control
register (TCRx) for the group.
- fsl,available-ranges: use <start count> style section to define which
timer interrupts can be used. This property is optional; without this,
all timers within the group can be used.
- interrupts: one interrupt per timer in the group, in order, starting
with timer zero. If timer-available-ranges is present, only the
interrupts that correspond to available timers shall be present.
Example:
/* Note that this requires #interrupt-cells to be 4 */
timer0: timer@41100 {
compatible = "fsl,mpic-global-timer";
reg = <0x41100 0x100 0x41300 4>;
/* Another AMP partition is using timers 0 and 1 */
fsl,available-ranges = <2 2>;
interrupts = <2 0 3 0
3 0 3 0>;
};
timer1: timer@42100 {
compatible = "fsl,mpic-global-timer";
reg = <0x42100 0x100 0x42300 4>;
interrupts = <4 0 3 0
5 0 3 0
6 0 3 0
7 0 3 0>;
};
...@@ -190,7 +190,7 @@ EXAMPLE 4 ...@@ -190,7 +190,7 @@ EXAMPLE 4
*/ */
timer0: timer@41100 { timer0: timer@41100 {
compatible = "fsl,mpic-global-timer"; compatible = "fsl,mpic-global-timer";
reg = <0x41100 0x100>; reg = <0x41100 0x100 0x41300 4>;
interrupts = <0 0 3 0 interrupts = <0 0 3 0
1 0 3 0 1 0 3 0
2 0 3 0 2 0 3 0
......
...@@ -193,6 +193,12 @@ config SYS_SUPPORTS_APM_EMULATION ...@@ -193,6 +193,12 @@ config SYS_SUPPORTS_APM_EMULATION
default y if PMAC_APM_EMU default y if PMAC_APM_EMU
bool bool
config EPAPR_BOOT
bool
help
Used to allow a board to specify it wants an ePAPR compliant wrapper.
default n
config DEFAULT_UIMAGE config DEFAULT_UIMAGE
bool bool
help help
......
...@@ -267,6 +267,11 @@ config PPC_EARLY_DEBUG_USBGECKO ...@@ -267,6 +267,11 @@ config PPC_EARLY_DEBUG_USBGECKO
Select this to enable early debugging for Nintendo GameCube/Wii Select this to enable early debugging for Nintendo GameCube/Wii
consoles via an external USB Gecko adapter. consoles via an external USB Gecko adapter.
config PPC_EARLY_DEBUG_WSP
bool "Early debugging via WSP's internal UART"
depends on PPC_WSP
select PPC_UDBG_16550
endchoice endchoice
config PPC_EARLY_DEBUG_44x_PHYSLOW config PPC_EARLY_DEBUG_44x_PHYSLOW
......
...@@ -69,7 +69,8 @@ src-wlib := string.S crt0.S crtsavres.S stdio.c main.c \ ...@@ -69,7 +69,8 @@ src-wlib := string.S crt0.S crtsavres.S stdio.c main.c \
cpm-serial.c stdlib.c mpc52xx-psc.c planetcore.c uartlite.c \ cpm-serial.c stdlib.c mpc52xx-psc.c planetcore.c uartlite.c \
fsl-soc.c mpc8xx.c pq2.c ugecon.c fsl-soc.c mpc8xx.c pq2.c ugecon.c
src-plat := of.c cuboot-52xx.c cuboot-824x.c cuboot-83xx.c cuboot-85xx.c holly.c \ src-plat := of.c cuboot-52xx.c cuboot-824x.c cuboot-83xx.c cuboot-85xx.c holly.c \
cuboot-ebony.c cuboot-hotfoot.c treeboot-ebony.c prpmc2800.c \ cuboot-ebony.c cuboot-hotfoot.c epapr.c treeboot-ebony.c \
prpmc2800.c \
ps3-head.S ps3-hvcall.S ps3.c treeboot-bamboo.c cuboot-8xx.c \ ps3-head.S ps3-hvcall.S ps3.c treeboot-bamboo.c cuboot-8xx.c \
cuboot-pq2.c cuboot-sequoia.c treeboot-walnut.c \ cuboot-pq2.c cuboot-sequoia.c treeboot-walnut.c \
cuboot-bamboo.c cuboot-mpc7448hpc2.c cuboot-taishan.c \ cuboot-bamboo.c cuboot-mpc7448hpc2.c cuboot-taishan.c \
...@@ -127,7 +128,7 @@ quiet_cmd_bootas = BOOTAS $@ ...@@ -127,7 +128,7 @@ quiet_cmd_bootas = BOOTAS $@
cmd_bootas = $(CROSS32CC) -Wp,-MD,$(depfile) $(BOOTAFLAGS) -c -o $@ $< cmd_bootas = $(CROSS32CC) -Wp,-MD,$(depfile) $(BOOTAFLAGS) -c -o $@ $<
quiet_cmd_bootar = BOOTAR $@ quiet_cmd_bootar = BOOTAR $@
cmd_bootar = $(CROSS32AR) -cr $@.$$$$ $(filter-out FORCE,$^); mv $@.$$$$ $@ cmd_bootar = $(CROSS32AR) -cr$(KBUILD_ARFLAGS) $@.$$$$ $(filter-out FORCE,$^); mv $@.$$$$ $@
$(obj-libfdt): $(obj)/%.o: $(srctree)/scripts/dtc/libfdt/%.c FORCE $(obj-libfdt): $(obj)/%.o: $(srctree)/scripts/dtc/libfdt/%.c FORCE
$(call if_changed_dep,bootcc) $(call if_changed_dep,bootcc)
...@@ -182,6 +183,7 @@ image-$(CONFIG_PPC_HOLLY) += dtbImage.holly ...@@ -182,6 +183,7 @@ image-$(CONFIG_PPC_HOLLY) += dtbImage.holly
image-$(CONFIG_PPC_PRPMC2800) += dtbImage.prpmc2800 image-$(CONFIG_PPC_PRPMC2800) += dtbImage.prpmc2800
image-$(CONFIG_PPC_ISERIES) += zImage.iseries image-$(CONFIG_PPC_ISERIES) += zImage.iseries
image-$(CONFIG_DEFAULT_UIMAGE) += uImage image-$(CONFIG_DEFAULT_UIMAGE) += uImage
image-$(CONFIG_EPAPR_BOOT) += zImage.epapr
# #
# Targets which embed a device tree blob # Targets which embed a device tree blob
......
...@@ -6,16 +6,28 @@ ...@@ -6,16 +6,28 @@
* as published by the Free Software Foundation; either version * as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version. * 2 of the License, or (at your option) any later version.
* *
* NOTE: this code runs in 32 bit mode and is packaged as ELF32. * NOTE: this code runs in 32 bit mode, is position-independent,
* and is packaged as ELF32.
*/ */
#include "ppc_asm.h" #include "ppc_asm.h"
.text .text
/* a procedure descriptor used when booting this as a COFF file */ /* A procedure descriptor used when booting this as a COFF file.
* When making COFF, this comes first in the link and we're
* linked at 0x500000.
*/
.globl _zimage_start_opd .globl _zimage_start_opd
_zimage_start_opd: _zimage_start_opd:
.long _zimage_start, 0, 0, 0 .long 0x500000, 0, 0, 0
p_start: .long _start
p_etext: .long _etext
p_bss_start: .long __bss_start
p_end: .long _end
.weak _platform_stack_top
p_pstack: .long _platform_stack_top
.weak _zimage_start .weak _zimage_start
.globl _zimage_start .globl _zimage_start
...@@ -24,37 +36,65 @@ _zimage_start: ...@@ -24,37 +36,65 @@ _zimage_start:
_zimage_start_lib: _zimage_start_lib:
/* Work out the offset between the address we were linked at /* Work out the offset between the address we were linked at
and the address where we're running. */ and the address where we're running. */
bl 1f bl .+4
1: mflr r0 p_base: mflr r10 /* r10 now points to runtime addr of p_base */
lis r9,1b@ha /* grab the link address of the dynamic section in r11 */
addi r9,r9,1b@l addis r11,r10,(_GLOBAL_OFFSET_TABLE_-p_base)@ha
subf. r0,r9,r0 lwz r11,(_GLOBAL_OFFSET_TABLE_-p_base)@l(r11)
beq 3f /* if running at same address as linked */ cmpwi r11,0
beq 3f /* if not linked -pie */
/* get the runtime address of the dynamic section in r12 */
.weak __dynamic_start
addis r12,r10,(__dynamic_start-p_base)@ha
addi r12,r12,(__dynamic_start-p_base)@l
subf r11,r11,r12 /* runtime - linktime offset */
/* The dynamic section contains a series of tagged entries.
* We need the RELA and RELACOUNT entries. */
RELA = 7
RELACOUNT = 0x6ffffff9
li r9,0
li r0,0
9: lwz r8,0(r12) /* get tag */
cmpwi r8,0
beq 10f /* end of list */
cmpwi r8,RELA
bne 11f
lwz r9,4(r12) /* get RELA pointer in r9 */
b 12f
11: addis r8,r8,(-RELACOUNT)@ha
cmpwi r8,RELACOUNT@l
bne 12f
lwz r0,4(r12) /* get RELACOUNT value in r0 */
12: addi r12,r12,8
b 9b
/* The .got2 section contains a list of addresses, so add /* The relocation section contains a list of relocations.
the address offset onto each entry. */ * We now do the R_PPC_RELATIVE ones, which point to words
lis r9,__got2_start@ha * which need to be initialized with addend + offset.
addi r9,r9,__got2_start@l * The R_PPC_RELATIVE ones come first and there are RELACOUNT
lis r8,__got2_end@ha * of them. */
addi r8,r8,__got2_end@l 10: /* skip relocation if we don't have both */
subf. r8,r9,r8 cmpwi r0,0
beq 3f beq 3f
srwi. r8,r8,2 cmpwi r9,0
mtctr r8 beq 3f
add r9,r0,r9
2: lwz r8,0(r9) add r9,r9,r11 /* Relocate RELA pointer */
add r8,r8,r0 mtctr r0
stw r8,0(r9) 2: lbz r0,4+3(r9) /* ELF32_R_INFO(reloc->r_info) */
addi r9,r9,4 cmpwi r0,22 /* R_PPC_RELATIVE */
bne 3f
lwz r12,0(r9) /* reloc->r_offset */
lwz r0,8(r9) /* reloc->r_addend */
add r0,r0,r11
stwx r0,r11,r12
addi r9,r9,12
bdnz 2b bdnz 2b
/* Do a cache flush for our text, in case the loader didn't */ /* Do a cache flush for our text, in case the loader didn't */
3: lis r9,_start@ha 3: lwz r9,p_start-p_base(r10) /* note: these are relocated now */
addi r9,r9,_start@l lwz r8,p_etext-p_base(r10)
add r9,r0,r9
lis r8,_etext@ha
addi r8,r8,_etext@l
add r8,r0,r8
4: dcbf r0,r9 4: dcbf r0,r9
icbi r0,r9 icbi r0,r9
addi r9,r9,0x20 addi r9,r9,0x20
...@@ -64,27 +104,19 @@ _zimage_start_lib: ...@@ -64,27 +104,19 @@ _zimage_start_lib:
isync isync
/* Clear the BSS */ /* Clear the BSS */
lis r9,__bss_start@ha lwz r9,p_bss_start-p_base(r10)
addi r9,r9,__bss_start@l lwz r8,p_end-p_base(r10)
add r9,r0,r9 li r0,0
lis r8,_end@ha 5: stw r0,0(r9)
addi r8,r8,_end@l
add r8,r0,r8
li r10,0
5: stw r10,0(r9)
addi r9,r9,4 addi r9,r9,4
cmplw cr0,r9,r8 cmplw cr0,r9,r8
blt 5b blt 5b
/* Possibly set up a custom stack */ /* Possibly set up a custom stack */
.weak _platform_stack_top lwz r8,p_pstack-p_base(r10)
lis r8,_platform_stack_top@ha
addi r8,r8,_platform_stack_top@l
cmpwi r8,0 cmpwi r8,0
beq 6f beq 6f
add r8,r0,r8
lwz r1,0(r8) lwz r1,0(r8)
add r1,r0,r1
li r0,0 li r0,0
stwu r0,-16(r1) /* establish a stack frame */ stwu r0,-16(r1) /* establish a stack frame */
6: 6:
......
...@@ -9,12 +9,11 @@ ...@@ -9,12 +9,11 @@
* option) any later version. * option) any later version.
*/ */
/dts-v1/; /include/ "p1020si.dtsi"
/ { / {
model = "fsl,P1020"; model = "fsl,P1020RDB";
compatible = "fsl,P1020RDB"; compatible = "fsl,P1020RDB";
#address-cells = <2>;
#size-cells = <2>;
aliases { aliases {
serial0 = &serial0; serial0 = &serial0;
...@@ -26,34 +25,11 @@ aliases { ...@@ -26,34 +25,11 @@ aliases {
pci1 = &pci1; pci1 = &pci1;
}; };
cpus {
#address-cells = <1>;
#size-cells = <0>;
PowerPC,P1020@0 {
device_type = "cpu";
reg = <0x0>;
next-level-cache = <&L2>;
};
PowerPC,P1020@1 {
device_type = "cpu";
reg = <0x1>;
next-level-cache = <&L2>;
};
};
memory { memory {
device_type = "memory"; device_type = "memory";
}; };
localbus@ffe05000 { localbus@ffe05000 {
#address-cells = <2>;
#size-cells = <1>;
compatible = "fsl,p1020-elbc", "fsl,elbc", "simple-bus";
reg = <0 0xffe05000 0 0x1000>;
interrupts = <19 2>;
interrupt-parent = <&mpic>;
/* NOR, NAND Flashes and Vitesse 5 port L2 switch */ /* NOR, NAND Flashes and Vitesse 5 port L2 switch */
ranges = <0x0 0x0 0x0 0xef000000 0x01000000 ranges = <0x0 0x0 0x0 0xef000000 0x01000000
...@@ -165,88 +141,14 @@ L2switch@2,0 { ...@@ -165,88 +141,14 @@ L2switch@2,0 {
}; };
soc@ffe00000 { soc@ffe00000 {
#address-cells = <1>;
#size-cells = <1>;
device_type = "soc";
compatible = "fsl,p1020-immr", "simple-bus";
ranges = <0x0 0x0 0xffe00000 0x100000>;
bus-frequency = <0>; // Filled out by uboot.
ecm-law@0 {
compatible = "fsl,ecm-law";
reg = <0x0 0x1000>;
fsl,num-laws = <12>;
};
ecm@1000 {
compatible = "fsl,p1020-ecm", "fsl,ecm";
reg = <0x1000 0x1000>;
interrupts = <16 2>;
interrupt-parent = <&mpic>;
};
memory-controller@2000 {
compatible = "fsl,p1020-memory-controller";
reg = <0x2000 0x1000>;
interrupt-parent = <&mpic>;
interrupts = <16 2>;
};
i2c@3000 { i2c@3000 {
#address-cells = <1>;
#size-cells = <0>;
cell-index = <0>;
compatible = "fsl-i2c";
reg = <0x3000 0x100>;
interrupts = <43 2>;
interrupt-parent = <&mpic>;
dfsrr;
rtc@68 { rtc@68 {
compatible = "dallas,ds1339"; compatible = "dallas,ds1339";
reg = <0x68>; reg = <0x68>;
}; };
}; };
i2c@3100 {
#address-cells = <1>;
#size-cells = <0>;
cell-index = <1>;
compatible = "fsl-i2c";
reg = <0x3100 0x100>;
interrupts = <43 2>;
interrupt-parent = <&mpic>;
dfsrr;
};
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
compatible = "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
interrupt-parent = <&mpic>;
};
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
compatible = "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
interrupt-parent = <&mpic>;
};
spi@7000 { spi@7000 {
cell-index = <0>;
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,espi";
reg = <0x7000 0x1000>;
interrupts = <59 0x2>;
interrupt-parent = <&mpic>;
mode = "cpu";
fsl_m25p80@0 { fsl_m25p80@0 {
#address-cells = <1>; #address-cells = <1>;
...@@ -294,66 +196,7 @@ partition@900000 { ...@@ -294,66 +196,7 @@ partition@900000 {
}; };
}; };
gpio: gpio-controller@f000 {
#gpio-cells = <2>;
compatible = "fsl,mpc8572-gpio";
reg = <0xf000 0x100>;
interrupts = <47 0x2>;
interrupt-parent = <&mpic>;
gpio-controller;
};
L2: l2-cache-controller@20000 {
compatible = "fsl,p1020-l2-cache-controller";
reg = <0x20000 0x1000>;
cache-line-size = <32>; // 32 bytes
cache-size = <0x40000>; // L2,256K
interrupt-parent = <&mpic>;
interrupts = <16 2>;
};
dma@21300 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "fsl,eloplus-dma";
reg = <0x21300 0x4>;
ranges = <0x0 0x21100 0x200>;
cell-index = <0>;
dma-channel@0 {
compatible = "fsl,eloplus-dma-channel";
reg = <0x0 0x80>;
cell-index = <0>;
interrupt-parent = <&mpic>;
interrupts = <20 2>;
};
dma-channel@80 {
compatible = "fsl,eloplus-dma-channel";
reg = <0x80 0x80>;
cell-index = <1>;
interrupt-parent = <&mpic>;
interrupts = <21 2>;
};
dma-channel@100 {
compatible = "fsl,eloplus-dma-channel";
reg = <0x100 0x80>;
cell-index = <2>;
interrupt-parent = <&mpic>;
interrupts = <22 2>;
};
dma-channel@180 {
compatible = "fsl,eloplus-dma-channel";
reg = <0x180 0x80>;
cell-index = <3>;
interrupt-parent = <&mpic>;
interrupts = <23 2>;
};
};
mdio@24000 { mdio@24000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,etsec2-mdio";
reg = <0x24000 0x1000 0xb0030 0x4>;
phy0: ethernet-phy@0 { phy0: ethernet-phy@0 {
interrupt-parent = <&mpic>; interrupt-parent = <&mpic>;
...@@ -369,10 +212,6 @@ phy1: ethernet-phy@1 { ...@@ -369,10 +212,6 @@ phy1: ethernet-phy@1 {
}; };
mdio@25000 { mdio@25000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,etsec2-tbi";
reg = <0x25000 0x1000 0xb1030 0x4>;
tbi0: tbi-phy@11 { tbi0: tbi-phy@11 {
reg = <0x11>; reg = <0x11>;
...@@ -381,97 +220,25 @@ tbi0: tbi-phy@11 { ...@@ -381,97 +220,25 @@ tbi0: tbi-phy@11 {
}; };
enet0: ethernet@b0000 { enet0: ethernet@b0000 {
#address-cells = <1>;
#size-cells = <1>;
device_type = "network";
model = "eTSEC";
compatible = "fsl,etsec2";
fsl,num_rx_queues = <0x8>;
fsl,num_tx_queues = <0x8>;
local-mac-address = [ 00 00 00 00 00 00 ];
interrupt-parent = <&mpic>;
fixed-link = <1 1 1000 0 0>; fixed-link = <1 1 1000 0 0>;
phy-connection-type = "rgmii-id"; phy-connection-type = "rgmii-id";
queue-group@0 {
#address-cells = <1>;
#size-cells = <1>;
reg = <0xb0000 0x1000>;
interrupts = <29 2 30 2 34 2>;
};
queue-group@1 {
#address-cells = <1>;
#size-cells = <1>;
reg = <0xb4000 0x1000>;
interrupts = <17 2 18 2 24 2>;
};
}; };
enet1: ethernet@b1000 { enet1: ethernet@b1000 {
#address-cells = <1>;
#size-cells = <1>;
device_type = "network";
model = "eTSEC";
compatible = "fsl,etsec2";
fsl,num_rx_queues = <0x8>;
fsl,num_tx_queues = <0x8>;
local-mac-address = [ 00 00 00 00 00 00 ];
interrupt-parent = <&mpic>;
phy-handle = <&phy0>; phy-handle = <&phy0>;
tbi-handle = <&tbi0>; tbi-handle = <&tbi0>;
phy-connection-type = "sgmii"; phy-connection-type = "sgmii";
queue-group@0 {
#address-cells = <1>;
#size-cells = <1>;
reg = <0xb1000 0x1000>;
interrupts = <35 2 36 2 40 2>;
};
queue-group@1 {
#address-cells = <1>;
#size-cells = <1>;
reg = <0xb5000 0x1000>;
interrupts = <51 2 52 2 67 2>;
};
}; };
enet2: ethernet@b2000 { enet2: ethernet@b2000 {
#address-cells = <1>;
#size-cells = <1>;
device_type = "network";
model = "eTSEC";
compatible = "fsl,etsec2";
fsl,num_rx_queues = <0x8>;
fsl,num_tx_queues = <0x8>;
local-mac-address = [ 00 00 00 00 00 00 ];
interrupt-parent = <&mpic>;
phy-handle = <&phy1>; phy-handle = <&phy1>;
phy-connection-type = "rgmii-id"; phy-connection-type = "rgmii-id";
queue-group@0 {
#address-cells = <1>;
#size-cells = <1>;
reg = <0xb2000 0x1000>;
interrupts = <31 2 32 2 33 2>;
};
queue-group@1 {
#address-cells = <1>;
#size-cells = <1>;
reg = <0xb6000 0x1000>;
interrupts = <25 2 26 2 27 2>;
};
}; };
usb@22000 { usb@22000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl-usb2-dr";
reg = <0x22000 0x1000>;
interrupt-parent = <&mpic>;
interrupts = <28 0x2>;
phy_type = "ulpi"; phy_type = "ulpi";
}; };
...@@ -481,82 +248,23 @@ since U-Boot doesn't clear the status property when ...@@ -481,82 +248,23 @@ since U-Boot doesn't clear the status property when
it enables USB2. OTOH, U-Boot does create a new node it enables USB2. OTOH, U-Boot does create a new node
when there isn't any. So, just comment it out. when there isn't any. So, just comment it out.
usb@23000 { usb@23000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl-usb2-dr";
reg = <0x23000 0x1000>;
interrupt-parent = <&mpic>;
interrupts = <46 0x2>;
phy_type = "ulpi"; phy_type = "ulpi";
}; };
*/ */
sdhci@2e000 {
compatible = "fsl,p1020-esdhc", "fsl,esdhc";
reg = <0x2e000 0x1000>;
interrupts = <72 0x2>;
interrupt-parent = <&mpic>;
/* Filled in by U-Boot */
clock-frequency = <0>;
};
crypto@30000 {
compatible = "fsl,sec3.1", "fsl,sec3.0", "fsl,sec2.4",
"fsl,sec2.2", "fsl,sec2.1", "fsl,sec2.0";
reg = <0x30000 0x10000>;
interrupts = <45 2 58 2>;
interrupt-parent = <&mpic>;
fsl,num-channels = <4>;
fsl,channel-fifo-len = <24>;
fsl,exec-units-mask = <0xbfe>;
fsl,descriptor-types-mask = <0x3ab0ebf>;
};
mpic: pic@40000 {
interrupt-controller;
#address-cells = <0>;
#interrupt-cells = <2>;
reg = <0x40000 0x40000>;
compatible = "chrp,open-pic";
device_type = "open-pic";
};
msi@41600 {
compatible = "fsl,p1020-msi", "fsl,mpic-msi";
reg = <0x41600 0x80>;
msi-available-ranges = <0 0x100>;
interrupts = <
0xe0 0
0xe1 0
0xe2 0
0xe3 0
0xe4 0
0xe5 0
0xe6 0
0xe7 0>;
interrupt-parent = <&mpic>;
};
global-utilities@e0000 { //global utilities block
compatible = "fsl,p1020-guts";
reg = <0xe0000 0x1000>;
fsl,has-rstcr;
};
}; };
pci0: pcie@ffe09000 { pci0: pcie@ffe09000 {
compatible = "fsl,mpc8548-pcie";
device_type = "pci";
#interrupt-cells = <1>;
#size-cells = <2>;
#address-cells = <3>;
reg = <0 0xffe09000 0 0x1000>;
bus-range = <0 255>;
ranges = <0x2000000 0x0 0xa0000000 0 0xa0000000 0x0 0x20000000 ranges = <0x2000000 0x0 0xa0000000 0 0xa0000000 0x0 0x20000000
0x1000000 0x0 0x00000000 0 0xffc10000 0x0 0x10000>; 0x1000000 0x0 0x00000000 0 0xffc10000 0x0 0x10000>;
clock-frequency = <33333333>; interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
interrupt-parent = <&mpic>; interrupt-map = <
interrupts = <16 2>; /* IDSEL 0x0 */
0000 0x0 0x0 0x1 &mpic 0x4 0x1
0000 0x0 0x0 0x2 &mpic 0x5 0x1
0000 0x0 0x0 0x3 &mpic 0x6 0x1
0000 0x0 0x0 0x4 &mpic 0x7 0x1
>;
pcie@0 { pcie@0 {
reg = <0x0 0x0 0x0 0x0 0x0>; reg = <0x0 0x0 0x0 0x0 0x0>;
#size-cells = <2>; #size-cells = <2>;
...@@ -573,18 +281,16 @@ pcie@0 { ...@@ -573,18 +281,16 @@ pcie@0 {
}; };
pci1: pcie@ffe0a000 { pci1: pcie@ffe0a000 {
compatible = "fsl,mpc8548-pcie";
device_type = "pci";
#interrupt-cells = <1>;
#size-cells = <2>;
#address-cells = <3>;
reg = <0 0xffe0a000 0 0x1000>;
bus-range = <0 255>;
ranges = <0x2000000 0x0 0x80000000 0 0x80000000 0x0 0x20000000 ranges = <0x2000000 0x0 0x80000000 0 0x80000000 0x0 0x20000000
0x1000000 0x0 0x00000000 0 0xffc00000 0x0 0x10000>; 0x1000000 0x0 0x00000000 0 0xffc00000 0x0 0x10000>;
clock-frequency = <33333333>; interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
interrupt-parent = <&mpic>; interrupt-map = <
interrupts = <16 2>; /* IDSEL 0x0 */
0000 0x0 0x0 0x1 &mpic 0x0 0x1
0000 0x0 0x0 0x2 &mpic 0x1 0x1
0000 0x0 0x0 0x3 &mpic 0x2 0x1
0000 0x0 0x0 0x4 &mpic 0x3 0x1
>;
pcie@0 { pcie@0 {
reg = <0x0 0x0 0x0 0x0 0x0>; reg = <0x0 0x0 0x0 0x0 0x0>;
#size-cells = <2>; #size-cells = <2>;
......
/*
* P1020 RDB Core0 Device Tree Source in CAMP mode.
*
* In CAMP mode, each core needs to have its own dts. Only mpic and L2 cache
* can be shared, all the other devices must be assigned to one core only.
* This dts file allows core0 to have memory, l2, i2c, spi, gpio, tdm, dma, usb,
* eth1, eth2, sdhc, crypto, global-util, message, pci0, pci1, msi.
*
* Please note to add "-b 0" for core0's dts compiling.
*
* Copyright 2011 Freescale Semiconductor Inc.
*
* 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.
*/
/include/ "p1020si.dtsi"
/ {
model = "fsl,P1020RDB";
compatible = "fsl,P1020RDB", "fsl,MPC85XXRDB-CAMP";
aliases {
ethernet1 = &enet1;
ethernet2 = &enet2;
serial0 = &serial0;
pci0 = &pci0;
pci1 = &pci1;
};
cpus {
PowerPC,P1020@1 {
status = "disabled";
};
};
memory {
device_type = "memory";
};
localbus@ffe05000 {
status = "disabled";
};
soc@ffe00000 {
i2c@3000 {
rtc@68 {
compatible = "dallas,ds1339";
reg = <0x68>;
};
};
serial1: serial@4600 {
status = "disabled";
};
spi@7000 {
fsl_m25p80@0 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "fsl,espi-flash";
reg = <0>;
linux,modalias = "fsl_m25p80";
spi-max-frequency = <40000000>;
partition@0 {
/* 512KB for u-boot Bootloader Image */
reg = <0x0 0x00080000>;
label = "SPI (RO) U-Boot Image";
read-only;
};
partition@80000 {
/* 512KB for DTB Image */
reg = <0x00080000 0x00080000>;
label = "SPI (RO) DTB Image";
read-only;
};
partition@100000 {
/* 4MB for Linux Kernel Image */
reg = <0x00100000 0x00400000>;
label = "SPI (RO) Linux Kernel Image";
read-only;
};
partition@500000 {
/* 4MB for Compressed RFS Image */
reg = <0x00500000 0x00400000>;
label = "SPI (RO) Compressed RFS Image";
read-only;
};
partition@900000 {
/* 7MB for JFFS2 based RFS */
reg = <0x00900000 0x00700000>;
label = "SPI (RW) JFFS2 RFS";
};
};
};
mdio@24000 {
phy0: ethernet-phy@0 {
interrupt-parent = <&mpic>;
interrupts = <3 1>;
reg = <0x0>;
};
phy1: ethernet-phy@1 {
interrupt-parent = <&mpic>;
interrupts = <2 1>;
reg = <0x1>;
};
};
mdio@25000 {
tbi0: tbi-phy@11 {
reg = <0x11>;
device_type = "tbi-phy";
};
};
enet0: ethernet@b0000 {
status = "disabled";
};
enet1: ethernet@b1000 {
phy-handle = <&phy0>;
tbi-handle = <&tbi0>;
phy-connection-type = "sgmii";
};
enet2: ethernet@b2000 {
phy-handle = <&phy1>;
phy-connection-type = "rgmii-id";
};
usb@22000 {
phy_type = "ulpi";
};
/* USB2 is shared with localbus, so it must be disabled
by default. We can't put 'status = "disabled";' here
since U-Boot doesn't clear the status property when
it enables USB2. OTOH, U-Boot does create a new node
when there isn't any. So, just comment it out.
usb@23000 {
phy_type = "ulpi";
};
*/
mpic: pic@40000 {
protected-sources = <
42 29 30 34 /* serial1, enet0-queue-group0 */
17 18 24 45 /* enet0-queue-group1, crypto */
>;
};
};
pci0: pcie@ffe09000 {
ranges = <0x2000000 0x0 0xa0000000 0 0xa0000000 0x0 0x20000000
0x1000000 0x0 0x00000000 0 0xffc10000 0x0 0x10000>;
interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
interrupt-map = <
/* IDSEL 0x0 */
0000 0x0 0x0 0x1 &mpic 0x4 0x1
0000 0x0 0x0 0x2 &mpic 0x5 0x1
0000 0x0 0x0 0x3 &mpic 0x6 0x1
0000 0x0 0x0 0x4 &mpic 0x7 0x1
>;
pcie@0 {
reg = <0x0 0x0 0x0 0x0 0x0>;
#size-cells = <2>;
#address-cells = <3>;
device_type = "pci";
ranges = <0x2000000 0x0 0xa0000000
0x2000000 0x0 0xa0000000
0x0 0x20000000
0x1000000 0x0 0x0
0x1000000 0x0 0x0
0x0 0x100000>;
};
};
pci1: pcie@ffe0a000 {
ranges = <0x2000000 0x0 0x80000000 0 0x80000000 0x0 0x20000000
0x1000000 0x0 0x00000000 0 0xffc00000 0x0 0x10000>;
interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
interrupt-map = <
/* IDSEL 0x0 */
0000 0x0 0x0 0x1 &mpic 0x0 0x1
0000 0x0 0x0 0x2 &mpic 0x1 0x1
0000 0x0 0x0 0x3 &mpic 0x2 0x1
0000 0x0 0x0 0x4 &mpic 0x3 0x1
>;
pcie@0 {
reg = <0x0 0x0 0x0 0x0 0x0>;
#size-cells = <2>;
#address-cells = <3>;
device_type = "pci";
ranges = <0x2000000 0x0 0x80000000
0x2000000 0x0 0x80000000
0x0 0x20000000
0x1000000 0x0 0x0
0x1000000 0x0 0x0
0x0 0x100000>;
};
};
};
/*
* P1020 RDB Core1 Device Tree Source in CAMP mode.
*
* In CAMP mode, each core needs to have its own dts. Only mpic and L2 cache
* can be shared, all the other devices must be assigned to one core only.
* This dts allows core1 to have l2, eth0, crypto.
*
* Please note to add "-b 1" for core1's dts compiling.
*
* Copyright 2011 Freescale Semiconductor Inc.
*
* 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.
*/
/include/ "p1020si.dtsi"
/ {
model = "fsl,P1020RDB";
compatible = "fsl,P1020RDB", "fsl,MPC85XXRDB-CAMP";
aliases {
ethernet0 = &enet0;
serial0 = &serial1;
};
cpus {
PowerPC,P1020@0 {
status = "disabled";
};
};
memory {
device_type = "memory";
};
localbus@ffe05000 {
status = "disabled";
};
soc@ffe00000 {
ecm-law@0 {
status = "disabled";
};
ecm@1000 {
status = "disabled";
};
memory-controller@2000 {
status = "disabled";
};
i2c@3000 {
status = "disabled";
};
i2c@3100 {
status = "disabled";
};
serial0: serial@4500 {
status = "disabled";
};
spi@7000 {
status = "disabled";
};
gpio: gpio-controller@f000 {
status = "disabled";
};
dma@21300 {
status = "disabled";
};
mdio@24000 {
status = "disabled";
};
mdio@25000 {
status = "disabled";
};
enet0: ethernet@b0000 {
fixed-link = <1 1 1000 0 0>;
phy-connection-type = "rgmii-id";
};
enet1: ethernet@b1000 {
status = "disabled";
};
enet2: ethernet@b2000 {
status = "disabled";
};
usb@22000 {
status = "disabled";
};
sdhci@2e000 {
status = "disabled";
};
mpic: pic@40000 {
protected-sources = <
16 /* ecm, mem, L2, pci0, pci1 */
43 42 59 /* i2c, serial0, spi */
47 63 62 /* gpio, tdm */
20 21 22 23 /* dma */
03 02 /* mdio */
35 36 40 /* enet1-queue-group0 */
51 52 67 /* enet1-queue-group1 */
31 32 33 /* enet2-queue-group0 */
25 26 27 /* enet2-queue-group1 */
28 72 58 /* usb, sdhci, crypto */
0xb0 0xb1 0xb2 /* message */
0xb3 0xb4 0xb5
0xb6 0xb7
0xe0 0xe1 0xe2 /* msi */
0xe3 0xe4 0xe5
0xe6 0xe7 /* sdhci, crypto , pci */
>;
};
msi@41600 {
status = "disabled";
};
global-utilities@e0000 { //global utilities block
status = "disabled";
};
};
pci0: pcie@ffe09000 {
status = "disabled";
};
pci1: pcie@ffe0a000 {
status = "disabled";
};
};
/*
* P1020si Device Tree Source
*
* Copyright 2011 Freescale Semiconductor Inc.
*
* 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.
*/
/dts-v1/;
/ {
compatible = "fsl,P1020";
#address-cells = <2>;
#size-cells = <2>;
cpus {
#address-cells = <1>;
#size-cells = <0>;
PowerPC,P1020@0 {
device_type = "cpu";
reg = <0x0>;
next-level-cache = <&L2>;
};
PowerPC,P1020@1 {
device_type = "cpu";
reg = <0x1>;
next-level-cache = <&L2>;
};
};
localbus@ffe05000 {
#address-cells = <2>;
#size-cells = <1>;
compatible = "fsl,p1020-elbc", "fsl,elbc", "simple-bus";
reg = <0 0xffe05000 0 0x1000>;
interrupts = <19 2>;
interrupt-parent = <&mpic>;
};
soc@ffe00000 {
#address-cells = <1>;
#size-cells = <1>;
device_type = "soc";
compatible = "fsl,p1020-immr", "simple-bus";
ranges = <0x0 0x0 0xffe00000 0x100000>;
bus-frequency = <0>; // Filled out by uboot.
ecm-law@0 {
compatible = "fsl,ecm-law";
reg = <0x0 0x1000>;
fsl,num-laws = <12>;
};
ecm@1000 {
compatible = "fsl,p1020-ecm", "fsl,ecm";
reg = <0x1000 0x1000>;
interrupts = <16 2>;
interrupt-parent = <&mpic>;
};
memory-controller@2000 {
compatible = "fsl,p1020-memory-controller";
reg = <0x2000 0x1000>;
interrupt-parent = <&mpic>;
interrupts = <16 2>;
};
i2c@3000 {
#address-cells = <1>;
#size-cells = <0>;
cell-index = <0>;
compatible = "fsl-i2c";
reg = <0x3000 0x100>;
interrupts = <43 2>;
interrupt-parent = <&mpic>;
dfsrr;
};
i2c@3100 {
#address-cells = <1>;
#size-cells = <0>;
cell-index = <1>;
compatible = "fsl-i2c";
reg = <0x3100 0x100>;
interrupts = <43 2>;
interrupt-parent = <&mpic>;
dfsrr;
};
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
compatible = "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
interrupt-parent = <&mpic>;
};
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
compatible = "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
interrupt-parent = <&mpic>;
};
spi@7000 {
cell-index = <0>;
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,espi";
reg = <0x7000 0x1000>;
interrupts = <59 0x2>;
interrupt-parent = <&mpic>;
mode = "cpu";
};
gpio: gpio-controller@f000 {
#gpio-cells = <2>;
compatible = "fsl,mpc8572-gpio";
reg = <0xf000 0x100>;
interrupts = <47 0x2>;
interrupt-parent = <&mpic>;
gpio-controller;
};
L2: l2-cache-controller@20000 {
compatible = "fsl,p1020-l2-cache-controller";
reg = <0x20000 0x1000>;
cache-line-size = <32>; // 32 bytes
cache-size = <0x40000>; // L2,256K
interrupt-parent = <&mpic>;
interrupts = <16 2>;
};
dma@21300 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "fsl,eloplus-dma";
reg = <0x21300 0x4>;
ranges = <0x0 0x21100 0x200>;
cell-index = <0>;
dma-channel@0 {
compatible = "fsl,eloplus-dma-channel";
reg = <0x0 0x80>;
cell-index = <0>;
interrupt-parent = <&mpic>;
interrupts = <20 2>;
};
dma-channel@80 {
compatible = "fsl,eloplus-dma-channel";
reg = <0x80 0x80>;
cell-index = <1>;
interrupt-parent = <&mpic>;
interrupts = <21 2>;
};
dma-channel@100 {
compatible = "fsl,eloplus-dma-channel";
reg = <0x100 0x80>;
cell-index = <2>;
interrupt-parent = <&mpic>;
interrupts = <22 2>;
};
dma-channel@180 {
compatible = "fsl,eloplus-dma-channel";
reg = <0x180 0x80>;
cell-index = <3>;
interrupt-parent = <&mpic>;
interrupts = <23 2>;
};
};
mdio@24000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,etsec2-mdio";
reg = <0x24000 0x1000 0xb0030 0x4>;
};
mdio@25000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,etsec2-tbi";
reg = <0x25000 0x1000 0xb1030 0x4>;
};
enet0: ethernet@b0000 {
#address-cells = <1>;
#size-cells = <1>;
device_type = "network";
model = "eTSEC";
compatible = "fsl,etsec2";
fsl,num_rx_queues = <0x8>;
fsl,num_tx_queues = <0x8>;
local-mac-address = [ 00 00 00 00 00 00 ];
interrupt-parent = <&mpic>;
queue-group@0 {
#address-cells = <1>;
#size-cells = <1>;
reg = <0xb0000 0x1000>;
interrupts = <29 2 30 2 34 2>;
};
queue-group@1 {
#address-cells = <1>;
#size-cells = <1>;
reg = <0xb4000 0x1000>;
interrupts = <17 2 18 2 24 2>;
};
};
enet1: ethernet@b1000 {
#address-cells = <1>;
#size-cells = <1>;
device_type = "network";
model = "eTSEC";
compatible = "fsl,etsec2";
fsl,num_rx_queues = <0x8>;
fsl,num_tx_queues = <0x8>;
local-mac-address = [ 00 00 00 00 00 00 ];
interrupt-parent = <&mpic>;
queue-group@0 {
#address-cells = <1>;
#size-cells = <1>;
reg = <0xb1000 0x1000>;
interrupts = <35 2 36 2 40 2>;
};
queue-group@1 {
#address-cells = <1>;
#size-cells = <1>;
reg = <0xb5000 0x1000>;
interrupts = <51 2 52 2 67 2>;
};
};
enet2: ethernet@b2000 {
#address-cells = <1>;
#size-cells = <1>;
device_type = "network";
model = "eTSEC";
compatible = "fsl,etsec2";
fsl,num_rx_queues = <0x8>;
fsl,num_tx_queues = <0x8>;
local-mac-address = [ 00 00 00 00 00 00 ];
interrupt-parent = <&mpic>;
queue-group@0 {
#address-cells = <1>;
#size-cells = <1>;
reg = <0xb2000 0x1000>;
interrupts = <31 2 32 2 33 2>;
};
queue-group@1 {
#address-cells = <1>;
#size-cells = <1>;
reg = <0xb6000 0x1000>;
interrupts = <25 2 26 2 27 2>;
};
};
usb@22000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl-usb2-dr";
reg = <0x22000 0x1000>;
interrupt-parent = <&mpic>;
interrupts = <28 0x2>;
};
/* USB2 is shared with localbus, so it must be disabled
by default. We can't put 'status = "disabled";' here
since U-Boot doesn't clear the status property when
it enables USB2. OTOH, U-Boot does create a new node
when there isn't any. So, just comment it out.
usb@23000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl-usb2-dr";
reg = <0x23000 0x1000>;
interrupt-parent = <&mpic>;
interrupts = <46 0x2>;
phy_type = "ulpi";
};
*/
sdhci@2e000 {
compatible = "fsl,p1020-esdhc", "fsl,esdhc";
reg = <0x2e000 0x1000>;
interrupts = <72 0x2>;
interrupt-parent = <&mpic>;
/* Filled in by U-Boot */
clock-frequency = <0>;
};
crypto@30000 {
compatible = "fsl,sec3.1", "fsl,sec3.0", "fsl,sec2.4",
"fsl,sec2.2", "fsl,sec2.1", "fsl,sec2.0";
reg = <0x30000 0x10000>;
interrupts = <45 2 58 2>;
interrupt-parent = <&mpic>;
fsl,num-channels = <4>;
fsl,channel-fifo-len = <24>;
fsl,exec-units-mask = <0xbfe>;
fsl,descriptor-types-mask = <0x3ab0ebf>;
};
mpic: pic@40000 {
interrupt-controller;
#address-cells = <0>;
#interrupt-cells = <2>;
reg = <0x40000 0x40000>;
compatible = "chrp,open-pic";
device_type = "open-pic";
};
msi@41600 {
compatible = "fsl,p1020-msi", "fsl,mpic-msi";
reg = <0x41600 0x80>;
msi-available-ranges = <0 0x100>;
interrupts = <
0xe0 0
0xe1 0
0xe2 0
0xe3 0
0xe4 0
0xe5 0
0xe6 0
0xe7 0>;
interrupt-parent = <&mpic>;
};
global-utilities@e0000 { //global utilities block
compatible = "fsl,p1020-guts","fsl,p2020-guts";
reg = <0xe0000 0x1000>;
fsl,has-rstcr;
};
};
pci0: pcie@ffe09000 {
compatible = "fsl,mpc8548-pcie";
device_type = "pci";
#interrupt-cells = <1>;
#size-cells = <2>;
#address-cells = <3>;
reg = <0 0xffe09000 0 0x1000>;
bus-range = <0 255>;
clock-frequency = <33333333>;
interrupt-parent = <&mpic>;
interrupts = <16 2>;
};
pci1: pcie@ffe0a000 {
compatible = "fsl,mpc8548-pcie";
device_type = "pci";
#interrupt-cells = <1>;
#size-cells = <2>;
#address-cells = <3>;
reg = <0 0xffe0a000 0 0x1000>;
bus-range = <0 255>;
clock-frequency = <33333333>;
interrupt-parent = <&mpic>;
interrupts = <16 2>;
};
};
...@@ -52,7 +52,7 @@ localbus@fffe05000 { ...@@ -52,7 +52,7 @@ localbus@fffe05000 {
#size-cells = <1>; #size-cells = <1>;
compatible = "fsl,p1022-elbc", "fsl,elbc", "simple-bus"; compatible = "fsl,p1022-elbc", "fsl,elbc", "simple-bus";
reg = <0 0xffe05000 0 0x1000>; reg = <0 0xffe05000 0 0x1000>;
interrupts = <19 2>; interrupts = <19 2 0 0>;
ranges = <0x0 0x0 0xf 0xe8000000 0x08000000 ranges = <0x0 0x0 0xf 0xe8000000 0x08000000
0x1 0x0 0xf 0xe0000000 0x08000000 0x1 0x0 0xf 0xe0000000 0x08000000
...@@ -157,7 +157,7 @@ board-control@3,0 { ...@@ -157,7 +157,7 @@ board-control@3,0 {
* IRQ8 is generated if the "EVENT" switch is pressed * IRQ8 is generated if the "EVENT" switch is pressed
* and PX_CTL[EVESEL] is set to 00. * and PX_CTL[EVESEL] is set to 00.
*/ */
interrupts = <8 8>; interrupts = <8 8 0 0>;
}; };
}; };
...@@ -178,13 +178,13 @@ ecm-law@0 { ...@@ -178,13 +178,13 @@ ecm-law@0 {
ecm@1000 { ecm@1000 {
compatible = "fsl,p1022-ecm", "fsl,ecm"; compatible = "fsl,p1022-ecm", "fsl,ecm";
reg = <0x1000 0x1000>; reg = <0x1000 0x1000>;
interrupts = <16 2>; interrupts = <16 2 0 0>;
}; };
memory-controller@2000 { memory-controller@2000 {
compatible = "fsl,p1022-memory-controller"; compatible = "fsl,p1022-memory-controller";
reg = <0x2000 0x1000>; reg = <0x2000 0x1000>;
interrupts = <16 2>; interrupts = <16 2 0 0>;
}; };
i2c@3000 { i2c@3000 {
...@@ -193,7 +193,7 @@ i2c@3000 { ...@@ -193,7 +193,7 @@ i2c@3000 {
cell-index = <0>; cell-index = <0>;
compatible = "fsl-i2c"; compatible = "fsl-i2c";
reg = <0x3000 0x100>; reg = <0x3000 0x100>;
interrupts = <43 2>; interrupts = <43 2 0 0>;
dfsrr; dfsrr;
}; };
...@@ -203,7 +203,7 @@ i2c@3100 { ...@@ -203,7 +203,7 @@ i2c@3100 {
cell-index = <1>; cell-index = <1>;
compatible = "fsl-i2c"; compatible = "fsl-i2c";
reg = <0x3100 0x100>; reg = <0x3100 0x100>;
interrupts = <43 2>; interrupts = <43 2 0 0>;
dfsrr; dfsrr;
wm8776:codec@1a { wm8776:codec@1a {
...@@ -220,7 +220,7 @@ serial0: serial@4500 { ...@@ -220,7 +220,7 @@ serial0: serial@4500 {
compatible = "ns16550"; compatible = "ns16550";
reg = <0x4500 0x100>; reg = <0x4500 0x100>;
clock-frequency = <0>; clock-frequency = <0>;
interrupts = <42 2>; interrupts = <42 2 0 0>;
}; };
serial1: serial@4600 { serial1: serial@4600 {
...@@ -229,7 +229,7 @@ serial1: serial@4600 { ...@@ -229,7 +229,7 @@ serial1: serial@4600 {
compatible = "ns16550"; compatible = "ns16550";
reg = <0x4600 0x100>; reg = <0x4600 0x100>;
clock-frequency = <0>; clock-frequency = <0>;
interrupts = <42 2>; interrupts = <42 2 0 0>;
}; };
spi@7000 { spi@7000 {
...@@ -238,7 +238,7 @@ spi@7000 { ...@@ -238,7 +238,7 @@ spi@7000 {
#size-cells = <0>; #size-cells = <0>;
compatible = "fsl,espi"; compatible = "fsl,espi";
reg = <0x7000 0x1000>; reg = <0x7000 0x1000>;
interrupts = <59 0x2>; interrupts = <59 0x2 0 0>;
espi,num-ss-bits = <4>; espi,num-ss-bits = <4>;
mode = "cpu"; mode = "cpu";
...@@ -275,7 +275,7 @@ ssi@15000 { ...@@ -275,7 +275,7 @@ ssi@15000 {
compatible = "fsl,mpc8610-ssi"; compatible = "fsl,mpc8610-ssi";
cell-index = <0>; cell-index = <0>;
reg = <0x15000 0x100>; reg = <0x15000 0x100>;
interrupts = <75 2>; interrupts = <75 2 0 0>;
fsl,mode = "i2s-slave"; fsl,mode = "i2s-slave";
codec-handle = <&wm8776>; codec-handle = <&wm8776>;
fsl,playback-dma = <&dma00>; fsl,playback-dma = <&dma00>;
...@@ -294,25 +294,25 @@ dma00: dma-channel@0 { ...@@ -294,25 +294,25 @@ dma00: dma-channel@0 {
compatible = "fsl,ssi-dma-channel"; compatible = "fsl,ssi-dma-channel";
reg = <0x0 0x80>; reg = <0x0 0x80>;
cell-index = <0>; cell-index = <0>;
interrupts = <76 2>; interrupts = <76 2 0 0>;
}; };
dma01: dma-channel@80 { dma01: dma-channel@80 {
compatible = "fsl,ssi-dma-channel"; compatible = "fsl,ssi-dma-channel";
reg = <0x80 0x80>; reg = <0x80 0x80>;
cell-index = <1>; cell-index = <1>;
interrupts = <77 2>; interrupts = <77 2 0 0>;
}; };
dma-channel@100 { dma-channel@100 {
compatible = "fsl,eloplus-dma-channel"; compatible = "fsl,eloplus-dma-channel";
reg = <0x100 0x80>; reg = <0x100 0x80>;
cell-index = <2>; cell-index = <2>;
interrupts = <78 2>; interrupts = <78 2 0 0>;
}; };
dma-channel@180 { dma-channel@180 {
compatible = "fsl,eloplus-dma-channel"; compatible = "fsl,eloplus-dma-channel";
reg = <0x180 0x80>; reg = <0x180 0x80>;
cell-index = <3>; cell-index = <3>;
interrupts = <79 2>; interrupts = <79 2 0 0>;
}; };
}; };
...@@ -320,7 +320,7 @@ gpio: gpio-controller@f000 { ...@@ -320,7 +320,7 @@ gpio: gpio-controller@f000 {
#gpio-cells = <2>; #gpio-cells = <2>;
compatible = "fsl,mpc8572-gpio"; compatible = "fsl,mpc8572-gpio";
reg = <0xf000 0x100>; reg = <0xf000 0x100>;
interrupts = <47 0x2>; interrupts = <47 0x2 0 0>;
gpio-controller; gpio-controller;
}; };
...@@ -329,7 +329,7 @@ L2: l2-cache-controller@20000 { ...@@ -329,7 +329,7 @@ L2: l2-cache-controller@20000 {
reg = <0x20000 0x1000>; reg = <0x20000 0x1000>;
cache-line-size = <32>; // 32 bytes cache-line-size = <32>; // 32 bytes
cache-size = <0x40000>; // L2, 256K cache-size = <0x40000>; // L2, 256K
interrupts = <16 2>; interrupts = <16 2 0 0>;
}; };
dma@21300 { dma@21300 {
...@@ -343,25 +343,25 @@ dma-channel@0 { ...@@ -343,25 +343,25 @@ dma-channel@0 {
compatible = "fsl,eloplus-dma-channel"; compatible = "fsl,eloplus-dma-channel";
reg = <0x0 0x80>; reg = <0x0 0x80>;
cell-index = <0>; cell-index = <0>;
interrupts = <20 2>; interrupts = <20 2 0 0>;
}; };
dma-channel@80 { dma-channel@80 {
compatible = "fsl,eloplus-dma-channel"; compatible = "fsl,eloplus-dma-channel";
reg = <0x80 0x80>; reg = <0x80 0x80>;
cell-index = <1>; cell-index = <1>;
interrupts = <21 2>; interrupts = <21 2 0 0>;
}; };
dma-channel@100 { dma-channel@100 {
compatible = "fsl,eloplus-dma-channel"; compatible = "fsl,eloplus-dma-channel";
reg = <0x100 0x80>; reg = <0x100 0x80>;
cell-index = <2>; cell-index = <2>;
interrupts = <22 2>; interrupts = <22 2 0 0>;
}; };
dma-channel@180 { dma-channel@180 {
compatible = "fsl,eloplus-dma-channel"; compatible = "fsl,eloplus-dma-channel";
reg = <0x180 0x80>; reg = <0x180 0x80>;
cell-index = <3>; cell-index = <3>;
interrupts = <23 2>; interrupts = <23 2 0 0>;
}; };
}; };
...@@ -370,7 +370,7 @@ usb@22000 { ...@@ -370,7 +370,7 @@ usb@22000 {
#size-cells = <0>; #size-cells = <0>;
compatible = "fsl-usb2-dr"; compatible = "fsl-usb2-dr";
reg = <0x22000 0x1000>; reg = <0x22000 0x1000>;
interrupts = <28 0x2>; interrupts = <28 0x2 0 0>;
phy_type = "ulpi"; phy_type = "ulpi";
}; };
...@@ -381,11 +381,11 @@ mdio@24000 { ...@@ -381,11 +381,11 @@ mdio@24000 {
reg = <0x24000 0x1000 0xb0030 0x4>; reg = <0x24000 0x1000 0xb0030 0x4>;
phy0: ethernet-phy@0 { phy0: ethernet-phy@0 {
interrupts = <3 1>; interrupts = <3 1 0 0>;
reg = <0x1>; reg = <0x1>;
}; };
phy1: ethernet-phy@1 { phy1: ethernet-phy@1 {
interrupts = <9 1>; interrupts = <9 1 0 0>;
reg = <0x2>; reg = <0x2>;
}; };
}; };
...@@ -416,13 +416,13 @@ queue-group@0{ ...@@ -416,13 +416,13 @@ queue-group@0{
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
reg = <0xB0000 0x1000>; reg = <0xB0000 0x1000>;
interrupts = <29 2 30 2 34 2>; interrupts = <29 2 0 0 30 2 0 0 34 2 0 0>;
}; };
queue-group@1{ queue-group@1{
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
reg = <0xB4000 0x1000>; reg = <0xB4000 0x1000>;
interrupts = <17 2 18 2 24 2>; interrupts = <17 2 0 0 18 2 0 0 24 2 0 0>;
}; };
}; };
...@@ -443,20 +443,20 @@ queue-group@0{ ...@@ -443,20 +443,20 @@ queue-group@0{
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
reg = <0xB1000 0x1000>; reg = <0xB1000 0x1000>;
interrupts = <35 2 36 2 40 2>; interrupts = <35 2 0 0 36 2 0 0 40 2 0 0>;
}; };
queue-group@1{ queue-group@1{
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
reg = <0xB5000 0x1000>; reg = <0xB5000 0x1000>;
interrupts = <51 2 52 2 67 2>; interrupts = <51 2 0 0 52 2 0 0 67 2 0 0>;
}; };
}; };
sdhci@2e000 { sdhci@2e000 {
compatible = "fsl,p1022-esdhc", "fsl,esdhc"; compatible = "fsl,p1022-esdhc", "fsl,esdhc";
reg = <0x2e000 0x1000>; reg = <0x2e000 0x1000>;
interrupts = <72 0x2>; interrupts = <72 0x2 0 0>;
fsl,sdhci-auto-cmd12; fsl,sdhci-auto-cmd12;
/* Filled in by U-Boot */ /* Filled in by U-Boot */
clock-frequency = <0>; clock-frequency = <0>;
...@@ -467,7 +467,7 @@ crypto@30000 { ...@@ -467,7 +467,7 @@ crypto@30000 {
"fsl,sec2.4", "fsl,sec2.2", "fsl,sec2.1", "fsl,sec2.4", "fsl,sec2.2", "fsl,sec2.1",
"fsl,sec2.0"; "fsl,sec2.0";
reg = <0x30000 0x10000>; reg = <0x30000 0x10000>;
interrupts = <45 2 58 2>; interrupts = <45 2 0 0 58 2 0 0>;
fsl,num-channels = <4>; fsl,num-channels = <4>;
fsl,channel-fifo-len = <24>; fsl,channel-fifo-len = <24>;
fsl,exec-units-mask = <0x97c>; fsl,exec-units-mask = <0x97c>;
...@@ -478,14 +478,14 @@ sata@18000 { ...@@ -478,14 +478,14 @@ sata@18000 {
compatible = "fsl,p1022-sata", "fsl,pq-sata-v2"; compatible = "fsl,p1022-sata", "fsl,pq-sata-v2";
reg = <0x18000 0x1000>; reg = <0x18000 0x1000>;
cell-index = <1>; cell-index = <1>;
interrupts = <74 0x2>; interrupts = <74 0x2 0 0>;
}; };
sata@19000 { sata@19000 {
compatible = "fsl,p1022-sata", "fsl,pq-sata-v2"; compatible = "fsl,p1022-sata", "fsl,pq-sata-v2";
reg = <0x19000 0x1000>; reg = <0x19000 0x1000>;
cell-index = <2>; cell-index = <2>;
interrupts = <41 0x2>; interrupts = <41 0x2 0 0>;
}; };
power@e0070{ power@e0070{
...@@ -496,21 +496,33 @@ power@e0070{ ...@@ -496,21 +496,33 @@ power@e0070{
display@10000 { display@10000 {
compatible = "fsl,diu", "fsl,p1022-diu"; compatible = "fsl,diu", "fsl,p1022-diu";
reg = <0x10000 1000>; reg = <0x10000 1000>;
interrupts = <64 2>; interrupts = <64 2 0 0>;
}; };
timer@41100 { timer@41100 {
compatible = "fsl,mpic-global-timer"; compatible = "fsl,mpic-global-timer";
reg = <0x41100 0x204>; reg = <0x41100 0x100 0x41300 4>;
interrupts = <0xf7 0x2>; interrupts = <0 0 3 0
1 0 3 0
2 0 3 0
3 0 3 0>;
};
timer@42100 {
compatible = "fsl,mpic-global-timer";
reg = <0x42100 0x100 0x42300 4>;
interrupts = <4 0 3 0
5 0 3 0
6 0 3 0
7 0 3 0>;
}; };
mpic: pic@40000 { mpic: pic@40000 {
interrupt-controller; interrupt-controller;
#address-cells = <0>; #address-cells = <0>;
#interrupt-cells = <2>; #interrupt-cells = <4>;
reg = <0x40000 0x40000>; reg = <0x40000 0x40000>;
compatible = "chrp,open-pic"; compatible = "fsl,mpic";
device_type = "open-pic"; device_type = "open-pic";
}; };
...@@ -519,14 +531,14 @@ msi@41600 { ...@@ -519,14 +531,14 @@ msi@41600 {
reg = <0x41600 0x80>; reg = <0x41600 0x80>;
msi-available-ranges = <0 0x100>; msi-available-ranges = <0 0x100>;
interrupts = < interrupts = <
0xe0 0 0xe0 0 0 0
0xe1 0 0xe1 0 0 0
0xe2 0 0xe2 0 0 0
0xe3 0 0xe3 0 0 0
0xe4 0 0xe4 0 0 0
0xe5 0 0xe5 0 0 0
0xe6 0 0xe6 0 0 0
0xe7 0>; 0xe7 0 0 0>;
}; };
global-utilities@e0000 { //global utilities block global-utilities@e0000 { //global utilities block
...@@ -547,7 +559,7 @@ pci0: pcie@fffe09000 { ...@@ -547,7 +559,7 @@ pci0: pcie@fffe09000 {
ranges = <0x2000000 0x0 0xa0000000 0xc 0x20000000 0x0 0x20000000 ranges = <0x2000000 0x0 0xa0000000 0xc 0x20000000 0x0 0x20000000
0x1000000 0x0 0x00000000 0xf 0xffc10000 0x0 0x10000>; 0x1000000 0x0 0x00000000 0xf 0xffc10000 0x0 0x10000>;
clock-frequency = <33333333>; clock-frequency = <33333333>;
interrupts = <16 2>; interrupts = <16 2 0 0>;
interrupt-map-mask = <0xf800 0 0 7>; interrupt-map-mask = <0xf800 0 0 7>;
interrupt-map = < interrupt-map = <
/* IDSEL 0x0 */ /* IDSEL 0x0 */
...@@ -582,7 +594,7 @@ pci1: pcie@fffe0a000 { ...@@ -582,7 +594,7 @@ pci1: pcie@fffe0a000 {
ranges = <0x2000000 0x0 0xc0000000 0xc 0x40000000 0x0 0x20000000 ranges = <0x2000000 0x0 0xc0000000 0xc 0x40000000 0x0 0x20000000
0x1000000 0x0 0x00000000 0xf 0xffc20000 0x0 0x10000>; 0x1000000 0x0 0x00000000 0xf 0xffc20000 0x0 0x10000>;
clock-frequency = <33333333>; clock-frequency = <33333333>;
interrupts = <16 2>; interrupts = <16 2 0 0>;
interrupt-map-mask = <0xf800 0 0 7>; interrupt-map-mask = <0xf800 0 0 7>;
interrupt-map = < interrupt-map = <
/* IDSEL 0x0 */ /* IDSEL 0x0 */
...@@ -618,7 +630,7 @@ pci2: pcie@fffe0b000 { ...@@ -618,7 +630,7 @@ pci2: pcie@fffe0b000 {
ranges = <0x2000000 0x0 0x80000000 0xc 0x00000000 0x0 0x20000000 ranges = <0x2000000 0x0 0x80000000 0xc 0x00000000 0x0 0x20000000
0x1000000 0x0 0x00000000 0xf 0xffc00000 0x0 0x10000>; 0x1000000 0x0 0x00000000 0xf 0xffc00000 0x0 0x10000>;
clock-frequency = <33333333>; clock-frequency = <33333333>;
interrupts = <16 2>; interrupts = <16 2 0 0>;
interrupt-map-mask = <0xf800 0 0 7>; interrupt-map-mask = <0xf800 0 0 7>;
interrupt-map = < interrupt-map = <
/* IDSEL 0x0 */ /* IDSEL 0x0 */
......
This diff is collapsed.
This diff is collapsed.
...@@ -14,12 +14,11 @@ ...@@ -14,12 +14,11 @@
* option) any later version. * option) any later version.
*/ */
/dts-v1/; /include/ "p2020si.dtsi"
/ { / {
model = "fsl,P2020"; model = "fsl,P2020RDB";
compatible = "fsl,P2020RDB", "fsl,MPC85XXRDB-CAMP"; compatible = "fsl,P2020RDB", "fsl,MPC85XXRDB-CAMP";
#address-cells = <2>;
#size-cells = <2>;
aliases { aliases {
ethernet1 = &enet1; ethernet1 = &enet1;
...@@ -29,91 +28,33 @@ aliases { ...@@ -29,91 +28,33 @@ aliases {
}; };
cpus { cpus {
#address-cells = <1>; PowerPC,P2020@1 {
#size-cells = <0>; status = "disabled";
PowerPC,P2020@0 {
device_type = "cpu";
reg = <0x0>;
next-level-cache = <&L2>;
}; };
}; };
memory { memory {
device_type = "memory"; device_type = "memory";
}; };
soc@ffe00000 { localbus@ffe05000 {
#address-cells = <1>; status = "disabled";
#size-cells = <1>;
device_type = "soc";
compatible = "fsl,p2020-immr", "simple-bus";
ranges = <0x0 0x0 0xffe00000 0x100000>;
bus-frequency = <0>; // Filled out by uboot.
ecm-law@0 {
compatible = "fsl,ecm-law";
reg = <0x0 0x1000>;
fsl,num-laws = <12>;
};
ecm@1000 {
compatible = "fsl,p2020-ecm", "fsl,ecm";
reg = <0x1000 0x1000>;
interrupts = <17 2>;
interrupt-parent = <&mpic>;
};
memory-controller@2000 {
compatible = "fsl,p2020-memory-controller";
reg = <0x2000 0x1000>;
interrupt-parent = <&mpic>;
interrupts = <18 2>;
}; };
soc@ffe00000 {
i2c@3000 { i2c@3000 {
#address-cells = <1>;
#size-cells = <0>;
cell-index = <0>;
compatible = "fsl-i2c";
reg = <0x3000 0x100>;
interrupts = <43 2>;
interrupt-parent = <&mpic>;
dfsrr;
rtc@68 { rtc@68 {
compatible = "dallas,ds1339"; compatible = "dallas,ds1339";
reg = <0x68>; reg = <0x68>;
}; };
}; };
i2c@3100 { serial1: serial@4600 {
#address-cells = <1>; status = "disabled";
#size-cells = <0>;
cell-index = <1>;
compatible = "fsl-i2c";
reg = <0x3100 0x100>;
interrupts = <43 2>;
interrupt-parent = <&mpic>;
dfsrr;
};
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
compatible = "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
}; };
spi@7000 { spi@7000 {
cell-index = <0>;
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,espi";
reg = <0x7000 0x1000>;
interrupts = <59 0x2>;
interrupt-parent = <&mpic>;
mode = "cpu";
fsl_m25p80@0 { fsl_m25p80@0 {
#address-cells = <1>; #address-cells = <1>;
...@@ -161,76 +102,15 @@ partition@900000 { ...@@ -161,76 +102,15 @@ partition@900000 {
}; };
}; };
gpio: gpio-controller@f000 { dma@c300 {
#gpio-cells = <2>; status = "disabled";
compatible = "fsl,mpc8572-gpio";
reg = <0xf000 0x100>;
interrupts = <47 0x2>;
interrupt-parent = <&mpic>;
gpio-controller;
};
L2: l2-cache-controller@20000 {
compatible = "fsl,p2020-l2-cache-controller";
reg = <0x20000 0x1000>;
cache-line-size = <32>; // 32 bytes
cache-size = <0x80000>; // L2,512K
interrupt-parent = <&mpic>;
interrupts = <16 2>;
};
dma@21300 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "fsl,eloplus-dma";
reg = <0x21300 0x4>;
ranges = <0x0 0x21100 0x200>;
cell-index = <0>;
dma-channel@0 {
compatible = "fsl,eloplus-dma-channel";
reg = <0x0 0x80>;
cell-index = <0>;
interrupt-parent = <&mpic>;
interrupts = <20 2>;
};
dma-channel@80 {
compatible = "fsl,eloplus-dma-channel";
reg = <0x80 0x80>;
cell-index = <1>;
interrupt-parent = <&mpic>;
interrupts = <21 2>;
};
dma-channel@100 {
compatible = "fsl,eloplus-dma-channel";
reg = <0x100 0x80>;
cell-index = <2>;
interrupt-parent = <&mpic>;
interrupts = <22 2>;
};
dma-channel@180 {
compatible = "fsl,eloplus-dma-channel";
reg = <0x180 0x80>;
cell-index = <3>;
interrupt-parent = <&mpic>;
interrupts = <23 2>;
};
}; };
usb@22000 { usb@22000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl-usb2-dr";
reg = <0x22000 0x1000>;
interrupt-parent = <&mpic>;
interrupts = <28 0x2>;
phy_type = "ulpi"; phy_type = "ulpi";
}; };
mdio@24520 { mdio@24520 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,gianfar-mdio";
reg = <0x24520 0x20>;
phy0: ethernet-phy@0 { phy0: ethernet-phy@0 {
interrupt-parent = <&mpic>; interrupt-parent = <&mpic>;
...@@ -245,29 +125,21 @@ phy1: ethernet-phy@1 { ...@@ -245,29 +125,21 @@ phy1: ethernet-phy@1 {
}; };
mdio@25520 { mdio@25520 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,gianfar-tbi";
reg = <0x26520 0x20>;
tbi0: tbi-phy@11 { tbi0: tbi-phy@11 {
reg = <0x11>; reg = <0x11>;
device_type = "tbi-phy"; device_type = "tbi-phy";
}; };
}; };
mdio@26520 {
status = "disabled";
};
enet0: ethernet@24000 {
status = "disabled";
};
enet1: ethernet@25000 { enet1: ethernet@25000 {
#address-cells = <1>;
#size-cells = <1>;
cell-index = <1>;
device_type = "network";
model = "eTSEC";
compatible = "gianfar";
reg = <0x25000 0x1000>;
ranges = <0x0 0x25000 0x1000>;
local-mac-address = [ 00 00 00 00 00 00 ];
interrupts = <35 2 36 2 40 2>;
interrupt-parent = <&mpic>;
tbi-handle = <&tbi0>; tbi-handle = <&tbi0>;
phy-handle = <&phy0>; phy-handle = <&phy0>;
phy-connection-type = "sgmii"; phy-connection-type = "sgmii";
...@@ -275,49 +147,12 @@ enet1: ethernet@25000 { ...@@ -275,49 +147,12 @@ enet1: ethernet@25000 {
}; };
enet2: ethernet@26000 { enet2: ethernet@26000 {
#address-cells = <1>;
#size-cells = <1>;
cell-index = <2>;
device_type = "network";
model = "eTSEC";
compatible = "gianfar";
reg = <0x26000 0x1000>;
ranges = <0x0 0x26000 0x1000>;
local-mac-address = [ 00 00 00 00 00 00 ];
interrupts = <31 2 32 2 33 2>;
interrupt-parent = <&mpic>;
phy-handle = <&phy1>; phy-handle = <&phy1>;
phy-connection-type = "rgmii-id"; phy-connection-type = "rgmii-id";
}; };
sdhci@2e000 {
compatible = "fsl,p2020-esdhc", "fsl,esdhc";
reg = <0x2e000 0x1000>;
interrupts = <72 0x2>;
interrupt-parent = <&mpic>;
/* Filled in by U-Boot */
clock-frequency = <0>;
};
crypto@30000 {
compatible = "fsl,sec3.1", "fsl,sec3.0", "fsl,sec2.4",
"fsl,sec2.2", "fsl,sec2.1", "fsl,sec2.0";
reg = <0x30000 0x10000>;
interrupts = <45 2 58 2>;
interrupt-parent = <&mpic>;
fsl,num-channels = <4>;
fsl,channel-fifo-len = <24>;
fsl,exec-units-mask = <0xbfe>;
fsl,descriptor-types-mask = <0x3ab0ebf>;
};
mpic: pic@40000 { mpic: pic@40000 {
interrupt-controller;
#address-cells = <0>;
#interrupt-cells = <2>;
reg = <0x40000 0x40000>;
compatible = "chrp,open-pic";
device_type = "open-pic";
protected-sources = < protected-sources = <
42 76 77 78 79 /* serial1 , dma2 */ 42 76 77 78 79 /* serial1 , dma2 */
29 30 34 26 /* enet0, pci1 */ 29 30 34 26 /* enet0, pci1 */
...@@ -326,26 +161,28 @@ mpic: pic@40000 { ...@@ -326,26 +161,28 @@ mpic: pic@40000 {
>; >;
}; };
global-utilities@e0000 { msi@41600 {
compatible = "fsl,p2020-guts"; status = "disabled";
reg = <0xe0000 0x1000>; };
fsl,has-rstcr;
}; };
pci0: pcie@ffe08000 {
status = "disabled";
}; };
pci0: pcie@ffe09000 { pci1: pcie@ffe09000 {
compatible = "fsl,mpc8548-pcie";
device_type = "pci";
#interrupt-cells = <1>;
#size-cells = <2>;
#address-cells = <3>;
reg = <0 0xffe09000 0 0x1000>;
bus-range = <0 255>;
ranges = <0x2000000 0x0 0xa0000000 0 0xa0000000 0x0 0x20000000 ranges = <0x2000000 0x0 0xa0000000 0 0xa0000000 0x0 0x20000000
0x1000000 0x0 0x00000000 0 0xffc10000 0x0 0x10000>; 0x1000000 0x0 0x00000000 0 0xffc10000 0x0 0x10000>;
clock-frequency = <33333333>; interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
interrupt-parent = <&mpic>; interrupt-map = <
interrupts = <25 2>; /* IDSEL 0x0 */
0000 0x0 0x0 0x1 &mpic 0x4 0x1
0000 0x0 0x0 0x2 &mpic 0x5 0x1
0000 0x0 0x0 0x3 &mpic 0x6 0x1
0000 0x0 0x0 0x4 &mpic 0x7 0x1
>;
pcie@0 { pcie@0 {
reg = <0x0 0x0 0x0 0x0 0x0>; reg = <0x0 0x0 0x0 0x0 0x0>;
#size-cells = <2>; #size-cells = <2>;
...@@ -360,4 +197,8 @@ pcie@0 { ...@@ -360,4 +197,8 @@ pcie@0 {
0x0 0x100000>; 0x0 0x100000>;
}; };
}; };
pci2: pcie@ffe0a000 {
status = "disabled";
};
}; };
...@@ -15,27 +15,21 @@ ...@@ -15,27 +15,21 @@
* option) any later version. * option) any later version.
*/ */
/dts-v1/; /include/ "p2020si.dtsi"
/ { / {
model = "fsl,P2020"; model = "fsl,P2020RDB";
compatible = "fsl,P2020RDB", "fsl,MPC85XXRDB-CAMP"; compatible = "fsl,P2020RDB", "fsl,MPC85XXRDB-CAMP";
#address-cells = <2>;
#size-cells = <2>;
aliases { aliases {
ethernet0 = &enet0; ethernet0 = &enet0;
serial0 = &serial0; serial0 = &serial1;
pci1 = &pci1; pci1 = &pci1;
}; };
cpus { cpus {
#address-cells = <1>; PowerPC,P2020@0 {
#size-cells = <0>; status = "disabled";
PowerPC,P2020@1 {
device_type = "cpu";
reg = <0x1>;
next-level-cache = <&L2>;
}; };
}; };
...@@ -43,20 +37,37 @@ memory { ...@@ -43,20 +37,37 @@ memory {
device_type = "memory"; device_type = "memory";
}; };
localbus@ffe05000 {
status = "disabled";
};
soc@ffe00000 { soc@ffe00000 {
#address-cells = <1>; ecm-law@0 {
#size-cells = <1>; status = "disabled";
device_type = "soc"; };
compatible = "fsl,p2020-immr", "simple-bus";
ranges = <0x0 0x0 0xffe00000 0x100000>;
bus-frequency = <0>; // Filled out by uboot.
serial0: serial@4600 { ecm@1000 {
cell-index = <1>; status = "disabled";
device_type = "serial"; };
compatible = "ns16550";
reg = <0x4600 0x100>; memory-controller@2000 {
clock-frequency = <0>; status = "disabled";
};
i2c@3000 {
status = "disabled";
};
i2c@3100 {
status = "disabled";
};
serial0: serial@4500 {
status = "disabled";
};
spi@7000 {
status = "disabled";
}; };
dma@c300 { dma@c300 {
...@@ -96,6 +107,10 @@ dma-channel@180 { ...@@ -96,6 +107,10 @@ dma-channel@180 {
}; };
}; };
gpio: gpio-controller@f000 {
status = "disabled";
};
L2: l2-cache-controller@20000 { L2: l2-cache-controller@20000 {
compatible = "fsl,p2020-l2-cache-controller"; compatible = "fsl,p2020-l2-cache-controller";
reg = <0x20000 0x1000>; reg = <0x20000 0x1000>;
...@@ -104,31 +119,49 @@ L2: l2-cache-controller@20000 { ...@@ -104,31 +119,49 @@ L2: l2-cache-controller@20000 {
interrupt-parent = <&mpic>; interrupt-parent = <&mpic>;
}; };
dma@21300 {
status = "disabled";
};
usb@22000 {
status = "disabled";
};
mdio@24520 {
status = "disabled";
};
mdio@25520 {
status = "disabled";
};
mdio@26520 {
status = "disabled";
};
enet0: ethernet@24000 { enet0: ethernet@24000 {
#address-cells = <1>;
#size-cells = <1>;
cell-index = <0>;
device_type = "network";
model = "eTSEC";
compatible = "gianfar";
reg = <0x24000 0x1000>;
ranges = <0x0 0x24000 0x1000>;
local-mac-address = [ 00 00 00 00 00 00 ];
interrupts = <29 2 30 2 34 2>;
interrupt-parent = <&mpic>;
fixed-link = <1 1 1000 0 0>; fixed-link = <1 1 1000 0 0>;
phy-connection-type = "rgmii-id"; phy-connection-type = "rgmii-id";
}; };
enet1: ethernet@25000 {
status = "disabled";
};
enet2: ethernet@26000 {
status = "disabled";
};
sdhci@2e000 {
status = "disabled";
};
crypto@30000 {
status = "disabled";
};
mpic: pic@40000 { mpic: pic@40000 {
interrupt-controller;
#address-cells = <0>;
#interrupt-cells = <2>;
reg = <0x40000 0x40000>;
compatible = "chrp,open-pic";
device_type = "open-pic";
protected-sources = < protected-sources = <
17 18 43 42 59 47 /*ecm, mem, i2c, serial0, spi,gpio */ 17 18 43 42 59 47 /*ecm, mem, i2c, serial0, spi,gpio */
16 20 21 22 23 28 /* L2, dma1, USB */ 16 20 21 22 23 28 /* L2, dma1, USB */
...@@ -152,21 +185,32 @@ msi@41600 { ...@@ -152,21 +185,32 @@ msi@41600 {
0xe7 0>; 0xe7 0>;
interrupt-parent = <&mpic>; interrupt-parent = <&mpic>;
}; };
global-utilities@e0000 { //global utilities block
status = "disabled";
}; };
pci1: pcie@ffe0a000 { };
compatible = "fsl,mpc8548-pcie";
device_type = "pci"; pci0: pcie@ffe08000 {
#interrupt-cells = <1>; status = "disabled";
#size-cells = <2>; };
#address-cells = <3>;
reg = <0 0xffe0a000 0 0x1000>; pci1: pcie@ffe09000 {
bus-range = <0 255>; status = "disabled";
};
pci2: pcie@ffe0a000 {
ranges = <0x2000000 0x0 0x80000000 0 0x80000000 0x0 0x20000000 ranges = <0x2000000 0x0 0x80000000 0 0x80000000 0x0 0x20000000
0x1000000 0x0 0x00000000 0 0xffc00000 0x0 0x10000>; 0x1000000 0x0 0x00000000 0 0xffc00000 0x0 0x10000>;
clock-frequency = <33333333>; interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
interrupt-parent = <&mpic>; interrupt-map = <
interrupts = <26 2>; /* IDSEL 0x0 */
0000 0x0 0x0 0x1 &mpic 0x0 0x1
0000 0x0 0x0 0x2 &mpic 0x1 0x1
0000 0x0 0x0 0x3 &mpic 0x2 0x1
0000 0x0 0x0 0x4 &mpic 0x3 0x1
>;
pcie@0 { pcie@0 {
reg = <0x0 0x0 0x0 0x0 0x0>; reg = <0x0 0x0 0x0 0x0 0x0>;
#size-cells = <2>; #size-cells = <2>;
......
/*
* P2020 Device Tree Source
*
* Copyright 2011 Freescale Semiconductor Inc.
*
* 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.
*/
/dts-v1/;
/ {
compatible = "fsl,P2020";
#address-cells = <2>;
#size-cells = <2>;
cpus {
#address-cells = <1>;
#size-cells = <0>;
PowerPC,P2020@0 {
device_type = "cpu";
reg = <0x0>;
next-level-cache = <&L2>;
};
PowerPC,P2020@1 {
device_type = "cpu";
reg = <0x1>;
next-level-cache = <&L2>;
};
};
localbus@ffe05000 {
#address-cells = <2>;
#size-cells = <1>;
compatible = "fsl,p2020-elbc", "fsl,elbc", "simple-bus";
reg = <0 0xffe05000 0 0x1000>;
interrupts = <19 2>;
interrupt-parent = <&mpic>;
};
soc@ffe00000 {
#address-cells = <1>;
#size-cells = <1>;
device_type = "soc";
compatible = "fsl,p2020-immr", "simple-bus";
ranges = <0x0 0x0 0xffe00000 0x100000>;
bus-frequency = <0>; // Filled out by uboot.
ecm-law@0 {
compatible = "fsl,ecm-law";
reg = <0x0 0x1000>;
fsl,num-laws = <12>;
};
ecm@1000 {
compatible = "fsl,p2020-ecm", "fsl,ecm";
reg = <0x1000 0x1000>;
interrupts = <17 2>;
interrupt-parent = <&mpic>;
};
memory-controller@2000 {
compatible = "fsl,p2020-memory-controller";
reg = <0x2000 0x1000>;
interrupt-parent = <&mpic>;
interrupts = <18 2>;
};
i2c@3000 {
#address-cells = <1>;
#size-cells = <0>;
cell-index = <0>;
compatible = "fsl-i2c";
reg = <0x3000 0x100>;
interrupts = <43 2>;
interrupt-parent = <&mpic>;
dfsrr;
};
i2c@3100 {
#address-cells = <1>;
#size-cells = <0>;
cell-index = <1>;
compatible = "fsl-i2c";
reg = <0x3100 0x100>;
interrupts = <43 2>;
interrupt-parent = <&mpic>;
dfsrr;
};
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
compatible = "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
interrupt-parent = <&mpic>;
};
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
compatible = "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
interrupt-parent = <&mpic>;
};
spi@7000 {
cell-index = <0>;
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,espi";
reg = <0x7000 0x1000>;
interrupts = <59 0x2>;
interrupt-parent = <&mpic>;
mode = "cpu";
};
dma@c300 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "fsl,eloplus-dma";
reg = <0xc300 0x4>;
ranges = <0x0 0xc100 0x200>;
cell-index = <1>;
dma-channel@0 {
compatible = "fsl,eloplus-dma-channel";
reg = <0x0 0x80>;
cell-index = <0>;
interrupt-parent = <&mpic>;
interrupts = <76 2>;
};
dma-channel@80 {
compatible = "fsl,eloplus-dma-channel";
reg = <0x80 0x80>;
cell-index = <1>;
interrupt-parent = <&mpic>;
interrupts = <77 2>;
};
dma-channel@100 {
compatible = "fsl,eloplus-dma-channel";
reg = <0x100 0x80>;
cell-index = <2>;
interrupt-parent = <&mpic>;
interrupts = <78 2>;
};
dma-channel@180 {
compatible = "fsl,eloplus-dma-channel";
reg = <0x180 0x80>;
cell-index = <3>;
interrupt-parent = <&mpic>;
interrupts = <79 2>;
};
};
gpio: gpio-controller@f000 {
#gpio-cells = <2>;
compatible = "fsl,mpc8572-gpio";
reg = <0xf000 0x100>;
interrupts = <47 0x2>;
interrupt-parent = <&mpic>;
gpio-controller;
};
L2: l2-cache-controller@20000 {
compatible = "fsl,p2020-l2-cache-controller";
reg = <0x20000 0x1000>;
cache-line-size = <32>; // 32 bytes
cache-size = <0x80000>; // L2,512K
interrupt-parent = <&mpic>;
interrupts = <16 2>;
};
dma@21300 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "fsl,eloplus-dma";
reg = <0x21300 0x4>;
ranges = <0x0 0x21100 0x200>;
cell-index = <0>;
dma-channel@0 {
compatible = "fsl,eloplus-dma-channel";
reg = <0x0 0x80>;
cell-index = <0>;
interrupt-parent = <&mpic>;
interrupts = <20 2>;
};
dma-channel@80 {
compatible = "fsl,eloplus-dma-channel";
reg = <0x80 0x80>;
cell-index = <1>;
interrupt-parent = <&mpic>;
interrupts = <21 2>;
};
dma-channel@100 {
compatible = "fsl,eloplus-dma-channel";
reg = <0x100 0x80>;
cell-index = <2>;
interrupt-parent = <&mpic>;
interrupts = <22 2>;
};
dma-channel@180 {
compatible = "fsl,eloplus-dma-channel";
reg = <0x180 0x80>;
cell-index = <3>;
interrupt-parent = <&mpic>;
interrupts = <23 2>;
};
};
usb@22000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl-usb2-dr";
reg = <0x22000 0x1000>;
interrupt-parent = <&mpic>;
interrupts = <28 0x2>;
};
mdio@24520 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,gianfar-mdio";
reg = <0x24520 0x20>;
};
mdio@25520 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,gianfar-tbi";
reg = <0x26520 0x20>;
};
mdio@26520 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,gianfar-tbi";
reg = <0x520 0x20>;
};
enet0: ethernet@24000 {
#address-cells = <1>;
#size-cells = <1>;
cell-index = <0>;
device_type = "network";
model = "eTSEC";
compatible = "gianfar";
reg = <0x24000 0x1000>;
ranges = <0x0 0x24000 0x1000>;
local-mac-address = [ 00 00 00 00 00 00 ];
interrupts = <29 2 30 2 34 2>;
interrupt-parent = <&mpic>;
};
enet1: ethernet@25000 {
#address-cells = <1>;
#size-cells = <1>;
cell-index = <1>;
device_type = "network";
model = "eTSEC";
compatible = "gianfar";
reg = <0x25000 0x1000>;
ranges = <0x0 0x25000 0x1000>;
local-mac-address = [ 00 00 00 00 00 00 ];
interrupts = <35 2 36 2 40 2>;
interrupt-parent = <&mpic>;
};
enet2: ethernet@26000 {
#address-cells = <1>;
#size-cells = <1>;
cell-index = <2>;
device_type = "network";
model = "eTSEC";
compatible = "gianfar";
reg = <0x26000 0x1000>;
ranges = <0x0 0x26000 0x1000>;
local-mac-address = [ 00 00 00 00 00 00 ];
interrupts = <31 2 32 2 33 2>;
interrupt-parent = <&mpic>;
};
sdhci@2e000 {
compatible = "fsl,p2020-esdhc", "fsl,esdhc";
reg = <0x2e000 0x1000>;
interrupts = <72 0x2>;
interrupt-parent = <&mpic>;
/* Filled in by U-Boot */
clock-frequency = <0>;
};
crypto@30000 {
compatible = "fsl,sec3.1", "fsl,sec3.0", "fsl,sec2.4",
"fsl,sec2.2", "fsl,sec2.1", "fsl,sec2.0";
reg = <0x30000 0x10000>;
interrupts = <45 2 58 2>;
interrupt-parent = <&mpic>;
fsl,num-channels = <4>;
fsl,channel-fifo-len = <24>;
fsl,exec-units-mask = <0xbfe>;
fsl,descriptor-types-mask = <0x3ab0ebf>;
};
mpic: pic@40000 {
interrupt-controller;
#address-cells = <0>;
#interrupt-cells = <2>;
reg = <0x40000 0x40000>;
compatible = "chrp,open-pic";
device_type = "open-pic";
};
msi@41600 {
compatible = "fsl,p2020-msi", "fsl,mpic-msi";
reg = <0x41600 0x80>;
msi-available-ranges = <0 0x100>;
interrupts = <
0xe0 0
0xe1 0
0xe2 0
0xe3 0
0xe4 0
0xe5 0
0xe6 0
0xe7 0>;
interrupt-parent = <&mpic>;
};
global-utilities@e0000 { //global utilities block
compatible = "fsl,p2020-guts";
reg = <0xe0000 0x1000>;
fsl,has-rstcr;
};
};
pci0: pcie@ffe08000 {
compatible = "fsl,mpc8548-pcie";
device_type = "pci";
#interrupt-cells = <1>;
#size-cells = <2>;
#address-cells = <3>;
reg = <0 0xffe08000 0 0x1000>;
bus-range = <0 255>;
clock-frequency = <33333333>;
interrupt-parent = <&mpic>;
interrupts = <24 2>;
};
pci1: pcie@ffe09000 {
compatible = "fsl,mpc8548-pcie";
device_type = "pci";
#interrupt-cells = <1>;
#size-cells = <2>;
#address-cells = <3>;
reg = <0 0xffe09000 0 0x1000>;
bus-range = <0 255>;
clock-frequency = <33333333>;
interrupt-parent = <&mpic>;
interrupts = <25 2>;
};
pci2: pcie@ffe0a000 {
compatible = "fsl,mpc8548-pcie";
device_type = "pci";
#interrupt-cells = <1>;
#size-cells = <2>;
#address-cells = <3>;
reg = <0 0xffe0a000 0 0x1000>;
bus-range = <0 255>;
clock-frequency = <33333333>;
interrupt-parent = <&mpic>;
interrupts = <26 2>;
};
};
/*
* Bootwrapper for ePAPR compliant firmwares
*
* Copyright 2010 David Gibson <david@gibson.dropbear.id.au>, IBM Corporation.
*
* Based on earlier bootwrappers by:
* (c) Benjamin Herrenschmidt <benh@kernel.crashing.org>, IBM Corp,\
* and
* Scott Wood <scottwood@freescale.com>
* Copyright (c) 2007 Freescale Semiconductor, Inc.
*
* 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.
*/
#include "ops.h"
#include "stdio.h"
#include "io.h"
#include <libfdt.h>
BSS_STACK(4096);
#define EPAPR_SMAGIC 0x65504150
#define EPAPR_EMAGIC 0x45504150
static unsigned epapr_magic;
static unsigned long ima_size;
static unsigned long fdt_addr;
static void platform_fixups(void)
{
if ((epapr_magic != EPAPR_EMAGIC)
&& (epapr_magic != EPAPR_SMAGIC))
fatal("r6 contained 0x%08x instead of ePAPR magic number\n",
epapr_magic);
if (ima_size < (unsigned long)_end)
printf("WARNING: Image loaded outside IMA!"
" (_end=%p, ima_size=0x%lx)\n", _end, ima_size);
if (ima_size < fdt_addr)
printf("WARNING: Device tree address is outside IMA!"
"(fdt_addr=0x%lx, ima_size=0x%lx)\n", fdt_addr,
ima_size);
if (ima_size < fdt_addr + fdt_totalsize((void *)fdt_addr))
printf("WARNING: Device tree extends outside IMA!"
" (fdt_addr=0x%lx, size=0x%x, ima_size=0x%lx\n",
fdt_addr, fdt_totalsize((void *)fdt_addr), ima_size);
}
void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
unsigned long r6, unsigned long r7)
{
epapr_magic = r6;
ima_size = r7;
fdt_addr = r3;
/* FIXME: we should process reserve entries */
simple_alloc_init(_end, ima_size - (unsigned long)_end, 32, 64);
fdt_init((void *)fdt_addr);
serial_console_init();
platform_ops.fixups = platform_fixups;
}
...@@ -39,6 +39,7 @@ dts= ...@@ -39,6 +39,7 @@ dts=
cacheit= cacheit=
binary= binary=
gzip=.gz gzip=.gz
pie=
# cross-compilation prefix # cross-compilation prefix
CROSS= CROSS=
...@@ -157,9 +158,10 @@ pmac|chrp) ...@@ -157,9 +158,10 @@ pmac|chrp)
platformo=$object/of.o platformo=$object/of.o
;; ;;
coff) coff)
platformo=$object/of.o platformo="$object/crt0.o $object/of.o"
lds=$object/zImage.coff.lds lds=$object/zImage.coff.lds
link_address='0x500000' link_address='0x500000'
pie=
;; ;;
miboot|uboot) miboot|uboot)
# miboot and U-boot want just the bare bits, not an ELF binary # miboot and U-boot want just the bare bits, not an ELF binary
...@@ -208,6 +210,7 @@ ps3) ...@@ -208,6 +210,7 @@ ps3)
ksection=.kernel:vmlinux.bin ksection=.kernel:vmlinux.bin
isection=.kernel:initrd isection=.kernel:initrd
link_address='' link_address=''
pie=
;; ;;
ep88xc|ep405|ep8248e) ep88xc|ep405|ep8248e)
platformo="$object/fixed-head.o $object/$platform.o" platformo="$object/fixed-head.o $object/$platform.o"
...@@ -244,6 +247,10 @@ gamecube|wii) ...@@ -244,6 +247,10 @@ gamecube|wii)
treeboot-iss4xx-mpic) treeboot-iss4xx-mpic)
platformo="$object/treeboot-iss4xx.o" platformo="$object/treeboot-iss4xx.o"
;; ;;
epapr)
link_address='0x20000000'
pie=-pie
;;
esac esac
vmz="$tmpdir/`basename \"$kernel\"`.$ext" vmz="$tmpdir/`basename \"$kernel\"`.$ext"
...@@ -251,7 +258,7 @@ if [ -z "$cacheit" -o ! -f "$vmz$gzip" -o "$vmz$gzip" -ot "$kernel" ]; then ...@@ -251,7 +258,7 @@ if [ -z "$cacheit" -o ! -f "$vmz$gzip" -o "$vmz$gzip" -ot "$kernel" ]; then
${CROSS}objcopy $objflags "$kernel" "$vmz.$$" ${CROSS}objcopy $objflags "$kernel" "$vmz.$$"
if [ -n "$gzip" ]; then if [ -n "$gzip" ]; then
gzip -f -9 "$vmz.$$" gzip -n -f -9 "$vmz.$$"
fi fi
if [ -n "$cacheit" ]; then if [ -n "$cacheit" ]; then
...@@ -310,9 +317,9 @@ fi ...@@ -310,9 +317,9 @@ fi
if [ "$platform" != "miboot" ]; then if [ "$platform" != "miboot" ]; then
if [ -n "$link_address" ] ; then if [ -n "$link_address" ] ; then
text_start="-Ttext $link_address --defsym _start=$link_address" text_start="-Ttext $link_address"
fi fi
${CROSS}ld -m elf32ppc -T $lds $text_start -o "$ofile" \ ${CROSS}ld -m elf32ppc -T $lds $text_start $pie -o "$ofile" \
$platformo $tmp $object/wrapper.a $platformo $tmp $object/wrapper.a
rm $tmp rm $tmp
fi fi
...@@ -336,7 +343,7 @@ coff) ...@@ -336,7 +343,7 @@ coff)
$objbin/hack-coff "$ofile" $objbin/hack-coff "$ofile"
;; ;;
cuboot*) cuboot*)
gzip -f -9 "$ofile" gzip -n -f -9 "$ofile"
${MKIMAGE} -A ppc -O linux -T kernel -C gzip -a "$base" -e "$entry" \ ${MKIMAGE} -A ppc -O linux -T kernel -C gzip -a "$base" -e "$entry" \
$uboot_version -d "$ofile".gz "$ofile" $uboot_version -d "$ofile".gz "$ofile"
;; ;;
...@@ -383,6 +390,6 @@ ps3) ...@@ -383,6 +390,6 @@ ps3)
odir="$(dirname "$ofile.bin")" odir="$(dirname "$ofile.bin")"
rm -f "$odir/otheros.bld" rm -f "$odir/otheros.bld"
gzip --force -9 --stdout "$ofile.bin" > "$odir/otheros.bld" gzip -n --force -9 --stdout "$ofile.bin" > "$odir/otheros.bld"
;; ;;
esac esac
...@@ -3,13 +3,13 @@ ENTRY(_zimage_start_opd) ...@@ -3,13 +3,13 @@ ENTRY(_zimage_start_opd)
EXTERN(_zimage_start_opd) EXTERN(_zimage_start_opd)
SECTIONS SECTIONS
{ {
_start = .;
.text : .text :
{ {
_start = .;
*(.text) *(.text)
*(.fixup) *(.fixup)
}
_etext = .; _etext = .;
}
. = ALIGN(4096); . = ALIGN(4096);
.data : .data :
{ {
...@@ -17,9 +17,7 @@ SECTIONS ...@@ -17,9 +17,7 @@ SECTIONS
*(.data*) *(.data*)
*(__builtin_*) *(__builtin_*)
*(.sdata*) *(.sdata*)
__got2_start = .;
*(.got2) *(.got2)
__got2_end = .;
_dtb_start = .; _dtb_start = .;
*(.kernel:dtb) *(.kernel:dtb)
......
...@@ -3,49 +3,64 @@ ENTRY(_zimage_start) ...@@ -3,49 +3,64 @@ ENTRY(_zimage_start)
EXTERN(_zimage_start) EXTERN(_zimage_start)
SECTIONS SECTIONS
{ {
_start = .;
.text : .text :
{ {
_start = .;
*(.text) *(.text)
*(.fixup) *(.fixup)
}
_etext = .; _etext = .;
}
. = ALIGN(4096); . = ALIGN(4096);
.data : .data :
{ {
*(.rodata*) *(.rodata*)
*(.data*) *(.data*)
*(.sdata*) *(.sdata*)
__got2_start = .;
*(.got2) *(.got2)
__got2_end = .;
} }
.dynsym : { *(.dynsym) }
.dynstr : { *(.dynstr) }
.dynamic :
{
__dynamic_start = .;
*(.dynamic)
}
.hash : { *(.hash) }
.interp : { *(.interp) }
.rela.dyn : { *(.rela*) }
. = ALIGN(8); . = ALIGN(8);
.kernel:dtb :
{
_dtb_start = .; _dtb_start = .;
.kernel:dtb : { *(.kernel:dtb) } *(.kernel:dtb)
_dtb_end = .; _dtb_end = .;
}
. = ALIGN(4096); . = ALIGN(4096);
.kernel:vmlinux.strip :
{
_vmlinux_start = .; _vmlinux_start = .;
.kernel:vmlinux.strip : { *(.kernel:vmlinux.strip) } *(.kernel:vmlinux.strip)
_vmlinux_end = .; _vmlinux_end = .;
}
. = ALIGN(4096); . = ALIGN(4096);
.kernel:initrd :
{
_initrd_start = .; _initrd_start = .;
.kernel:initrd : { *(.kernel:initrd) } *(.kernel:initrd)
_initrd_end = .; _initrd_end = .;
}
. = ALIGN(4096); . = ALIGN(4096);
_edata = .;
. = ALIGN(4096);
__bss_start = .;
.bss : .bss :
{ {
_edata = .;
__bss_start = .;
*(.sbss) *(.sbss)
*(.bss) *(.bss)
} *(COMMON)
. = ALIGN(4096);
_end = . ; _end = . ;
}
} }
...@@ -104,7 +104,6 @@ CONFIG_ROOT_NFS=y ...@@ -104,7 +104,6 @@ CONFIG_ROOT_NFS=y
CONFIG_PARTITION_ADVANCED=y CONFIG_PARTITION_ADVANCED=y
CONFIG_DEBUG_KERNEL=y CONFIG_DEBUG_KERNEL=y
CONFIG_DETECT_HUNG_TASK=y CONFIG_DETECT_HUNG_TASK=y
# CONFIG_DEBUG_BUGVERBOSE is not set
# CONFIG_RCU_CPU_STALL_DETECTOR is not set # CONFIG_RCU_CPU_STALL_DETECTOR is not set
CONFIG_SYSCTL_SYSCALL_CHECK=y CONFIG_SYSCTL_SYSCALL_CHECK=y
CONFIG_CRYPTO_PCBC=m CONFIG_CRYPTO_PCBC=m
......
...@@ -101,7 +101,6 @@ CONFIG_ROOT_NFS=y ...@@ -101,7 +101,6 @@ CONFIG_ROOT_NFS=y
CONFIG_PARTITION_ADVANCED=y CONFIG_PARTITION_ADVANCED=y
CONFIG_DEBUG_KERNEL=y CONFIG_DEBUG_KERNEL=y
CONFIG_DETECT_HUNG_TASK=y CONFIG_DETECT_HUNG_TASK=y
# CONFIG_DEBUG_BUGVERBOSE is not set
# CONFIG_RCU_CPU_STALL_DETECTOR is not set # CONFIG_RCU_CPU_STALL_DETECTOR is not set
CONFIG_SYSCTL_SYSCALL_CHECK=y CONFIG_SYSCTL_SYSCALL_CHECK=y
CONFIG_CRYPTO_PCBC=m CONFIG_CRYPTO_PCBC=m
......
...@@ -58,7 +58,6 @@ CONFIG_PARTITION_ADVANCED=y ...@@ -58,7 +58,6 @@ CONFIG_PARTITION_ADVANCED=y
CONFIG_DEBUG_KERNEL=y CONFIG_DEBUG_KERNEL=y
CONFIG_DETECT_HUNG_TASK=y CONFIG_DETECT_HUNG_TASK=y
CONFIG_DEBUG_MUTEXES=y CONFIG_DEBUG_MUTEXES=y
# CONFIG_DEBUG_BUGVERBOSE is not set
# CONFIG_RCU_CPU_STALL_DETECTOR is not set # CONFIG_RCU_CPU_STALL_DETECTOR is not set
CONFIG_SYSCTL_SYSCALL_CHECK=y CONFIG_SYSCTL_SYSCALL_CHECK=y
# CONFIG_CRYPTO_ANSI_CPRNG is not set # CONFIG_CRYPTO_ANSI_CPRNG is not set
...@@ -59,7 +59,6 @@ CONFIG_PARTITION_ADVANCED=y ...@@ -59,7 +59,6 @@ CONFIG_PARTITION_ADVANCED=y
CONFIG_DEBUG_KERNEL=y CONFIG_DEBUG_KERNEL=y
CONFIG_DETECT_HUNG_TASK=y CONFIG_DETECT_HUNG_TASK=y
CONFIG_DEBUG_MUTEXES=y CONFIG_DEBUG_MUTEXES=y
# CONFIG_DEBUG_BUGVERBOSE is not set
# CONFIG_RCU_CPU_STALL_DETECTOR is not set # CONFIG_RCU_CPU_STALL_DETECTOR is not set
CONFIG_SYSCTL_SYSCALL_CHECK=y CONFIG_SYSCTL_SYSCALL_CHECK=y
# CONFIG_CRYPTO_ANSI_CPRNG is not set # CONFIG_CRYPTO_ANSI_CPRNG is not set
...@@ -63,7 +63,6 @@ CONFIG_PARTITION_ADVANCED=y ...@@ -63,7 +63,6 @@ CONFIG_PARTITION_ADVANCED=y
CONFIG_DEBUG_KERNEL=y CONFIG_DEBUG_KERNEL=y
CONFIG_DETECT_HUNG_TASK=y CONFIG_DETECT_HUNG_TASK=y
CONFIG_DEBUG_MUTEXES=y CONFIG_DEBUG_MUTEXES=y
# CONFIG_DEBUG_BUGVERBOSE is not set
# CONFIG_RCU_CPU_STALL_DETECTOR is not set # CONFIG_RCU_CPU_STALL_DETECTOR is not set
CONFIG_SYSCTL_SYSCALL_CHECK=y CONFIG_SYSCTL_SYSCALL_CHECK=y
# CONFIG_CRYPTO_ANSI_CPRNG is not set # CONFIG_CRYPTO_ANSI_CPRNG is not set
...@@ -168,7 +168,6 @@ CONFIG_MAC_PARTITION=y ...@@ -168,7 +168,6 @@ CONFIG_MAC_PARTITION=y
CONFIG_CRC_T10DIF=y CONFIG_CRC_T10DIF=y
CONFIG_DEBUG_KERNEL=y CONFIG_DEBUG_KERNEL=y
CONFIG_DETECT_HUNG_TASK=y CONFIG_DETECT_HUNG_TASK=y
# CONFIG_DEBUG_BUGVERBOSE is not set
CONFIG_DEBUG_INFO=y CONFIG_DEBUG_INFO=y
# CONFIG_RCU_CPU_STALL_DETECTOR is not set # CONFIG_RCU_CPU_STALL_DETECTOR is not set
CONFIG_SYSCTL_SYSCALL_CHECK=y CONFIG_SYSCTL_SYSCALL_CHECK=y
......
...@@ -132,8 +132,8 @@ CONFIG_NET_CLS_RSVP=m ...@@ -132,8 +132,8 @@ CONFIG_NET_CLS_RSVP=m
CONFIG_NET_CLS_RSVP6=m CONFIG_NET_CLS_RSVP6=m
CONFIG_NET_CLS_IND=y CONFIG_NET_CLS_IND=y
CONFIG_BT=m CONFIG_BT=m
CONFIG_BT_L2CAP=m CONFIG_BT_L2CAP=y
CONFIG_BT_SCO=m CONFIG_BT_SCO=y
CONFIG_BT_RFCOMM=m CONFIG_BT_RFCOMM=m
CONFIG_BT_RFCOMM_TTY=y CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=m CONFIG_BT_BNEP=m
......
...@@ -6,10 +6,10 @@ CONFIG_NR_CPUS=2 ...@@ -6,10 +6,10 @@ CONFIG_NR_CPUS=2
CONFIG_EXPERIMENTAL=y CONFIG_EXPERIMENTAL=y
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
CONFIG_BSD_PROCESS_ACCT=y CONFIG_BSD_PROCESS_ACCT=y
CONFIG_SPARSE_IRQ=y
CONFIG_IKCONFIG=y CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=14 CONFIG_LOG_BUF_SHIFT=14
CONFIG_SYSFS_DEPRECATED_V2=y
CONFIG_BLK_DEV_INITRD=y CONFIG_BLK_DEV_INITRD=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_EXPERT=y CONFIG_EXPERT=y
...@@ -25,8 +25,32 @@ CONFIG_P5020_DS=y ...@@ -25,8 +25,32 @@ CONFIG_P5020_DS=y
CONFIG_NO_HZ=y CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y CONFIG_HIGH_RES_TIMERS=y
CONFIG_BINFMT_MISC=m CONFIG_BINFMT_MISC=m
CONFIG_SPARSE_IRQ=y
# CONFIG_PCI is not set # CONFIG_PCI is not set
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_ARPD=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_UEVENT_HELPER_PATH="/sbin/hotplug"
CONFIG_PROC_DEVICETREE=y CONFIG_PROC_DEVICETREE=y
CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_LOOP=y
...@@ -34,6 +58,9 @@ CONFIG_BLK_DEV_RAM=y ...@@ -34,6 +58,9 @@ CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=131072 CONFIG_BLK_DEV_RAM_SIZE=131072
CONFIG_MISC_DEVICES=y CONFIG_MISC_DEVICES=y
CONFIG_EEPROM_LEGACY=y CONFIG_EEPROM_LEGACY=y
CONFIG_NETDEVICES=y
CONFIG_DUMMY=y
CONFIG_NET_ETHERNET=y
CONFIG_INPUT_FF_MEMLESS=m CONFIG_INPUT_FF_MEMLESS=m
# CONFIG_INPUT_MOUSEDEV is not set # CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_KEYBOARD is not set # CONFIG_INPUT_KEYBOARD is not set
...@@ -64,22 +91,14 @@ CONFIG_NLS=y ...@@ -64,22 +91,14 @@ CONFIG_NLS=y
CONFIG_NLS_UTF8=m CONFIG_NLS_UTF8=m
CONFIG_CRC_T10DIF=y CONFIG_CRC_T10DIF=y
CONFIG_CRC_ITU_T=m CONFIG_CRC_ITU_T=m
CONFIG_LIBCRC32C=m
CONFIG_FRAME_WARN=1024 CONFIG_FRAME_WARN=1024
CONFIG_DEBUG_FS=y CONFIG_DEBUG_FS=y
CONFIG_DEBUG_KERNEL=y CONFIG_DEBUG_KERNEL=y
CONFIG_DETECT_HUNG_TASK=y CONFIG_DETECT_HUNG_TASK=y
# CONFIG_DEBUG_BUGVERBOSE is not set
CONFIG_DEBUG_INFO=y CONFIG_DEBUG_INFO=y
# CONFIG_RCU_CPU_STALL_DETECTOR is not set # CONFIG_RCU_CPU_STALL_DETECTOR is not set
CONFIG_SYSCTL_SYSCALL_CHECK=y CONFIG_SYSCTL_SYSCALL_CHECK=y
CONFIG_VIRQ_DEBUG=y CONFIG_VIRQ_DEBUG=y
CONFIG_CRYPTO=y
CONFIG_CRYPTO_CBC=y
CONFIG_CRYPTO_PCBC=m CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_HMAC=y
CONFIG_CRYPTO_MD5=y
CONFIG_CRYPTO_SHA1=m
CONFIG_CRYPTO_DES=y
# CONFIG_CRYPTO_ANSI_CPRNG is not set # CONFIG_CRYPTO_ANSI_CPRNG is not set
CONFIG_CRYPTO_DEV_TALITOS=y CONFIG_CRYPTO_DEV_TALITOS=y
...@@ -204,7 +204,6 @@ CONFIG_CRC_T10DIF=y ...@@ -204,7 +204,6 @@ CONFIG_CRC_T10DIF=y
CONFIG_DEBUG_FS=y CONFIG_DEBUG_FS=y
CONFIG_DEBUG_KERNEL=y CONFIG_DEBUG_KERNEL=y
CONFIG_DETECT_HUNG_TASK=y CONFIG_DETECT_HUNG_TASK=y
# CONFIG_DEBUG_BUGVERBOSE is not set
CONFIG_DEBUG_INFO=y CONFIG_DEBUG_INFO=y
# CONFIG_RCU_CPU_STALL_DETECTOR is not set # CONFIG_RCU_CPU_STALL_DETECTOR is not set
CONFIG_SYSCTL_SYSCALL_CHECK=y CONFIG_SYSCTL_SYSCALL_CHECK=y
......
...@@ -206,7 +206,6 @@ CONFIG_CRC_T10DIF=y ...@@ -206,7 +206,6 @@ CONFIG_CRC_T10DIF=y
CONFIG_DEBUG_FS=y CONFIG_DEBUG_FS=y
CONFIG_DEBUG_KERNEL=y CONFIG_DEBUG_KERNEL=y
CONFIG_DETECT_HUNG_TASK=y CONFIG_DETECT_HUNG_TASK=y
# CONFIG_DEBUG_BUGVERBOSE is not set
CONFIG_DEBUG_INFO=y CONFIG_DEBUG_INFO=y
# CONFIG_RCU_CPU_STALL_DETECTOR is not set # CONFIG_RCU_CPU_STALL_DETECTOR is not set
CONFIG_SYSCTL_SYSCALL_CHECK=y CONFIG_SYSCTL_SYSCALL_CHECK=y
......
...@@ -171,7 +171,6 @@ CONFIG_MAC_PARTITION=y ...@@ -171,7 +171,6 @@ CONFIG_MAC_PARTITION=y
CONFIG_CRC_T10DIF=y CONFIG_CRC_T10DIF=y
CONFIG_DEBUG_KERNEL=y CONFIG_DEBUG_KERNEL=y
CONFIG_DETECT_HUNG_TASK=y CONFIG_DETECT_HUNG_TASK=y
# CONFIG_DEBUG_BUGVERBOSE is not set
CONFIG_DEBUG_INFO=y CONFIG_DEBUG_INFO=y
# CONFIG_RCU_CPU_STALL_DETECTOR is not set # CONFIG_RCU_CPU_STALL_DETECTOR is not set
CONFIG_SYSCTL_SYSCALL_CHECK=y CONFIG_SYSCTL_SYSCALL_CHECK=y
......
...@@ -112,8 +112,8 @@ CONFIG_IRDA_CACHE_LAST_LSAP=y ...@@ -112,8 +112,8 @@ CONFIG_IRDA_CACHE_LAST_LSAP=y
CONFIG_IRDA_FAST_RR=y CONFIG_IRDA_FAST_RR=y
CONFIG_IRTTY_SIR=m CONFIG_IRTTY_SIR=m
CONFIG_BT=m CONFIG_BT=m
CONFIG_BT_L2CAP=m CONFIG_BT_L2CAP=y
CONFIG_BT_SCO=m CONFIG_BT_SCO=y
CONFIG_BT_RFCOMM=m CONFIG_BT_RFCOMM=m
CONFIG_BT_RFCOMM_TTY=y CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=m CONFIG_BT_BNEP=m
......
...@@ -351,8 +351,8 @@ CONFIG_VLSI_FIR=m ...@@ -351,8 +351,8 @@ CONFIG_VLSI_FIR=m
CONFIG_VIA_FIR=m CONFIG_VIA_FIR=m
CONFIG_MCS_FIR=m CONFIG_MCS_FIR=m
CONFIG_BT=m CONFIG_BT=m
CONFIG_BT_L2CAP=m CONFIG_BT_L2CAP=y
CONFIG_BT_SCO=m CONFIG_BT_SCO=y
CONFIG_BT_RFCOMM=m CONFIG_BT_RFCOMM=m
CONFIG_BT_RFCOMM_TTY=y CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=m CONFIG_BT_BNEP=m
......
...@@ -52,8 +52,8 @@ CONFIG_IP_PNP_DHCP=y ...@@ -52,8 +52,8 @@ CONFIG_IP_PNP_DHCP=y
# CONFIG_INET_DIAG is not set # CONFIG_INET_DIAG is not set
CONFIG_IPV6=y CONFIG_IPV6=y
CONFIG_BT=m CONFIG_BT=m
CONFIG_BT_L2CAP=m CONFIG_BT_L2CAP=y
CONFIG_BT_SCO=m CONFIG_BT_SCO=y
CONFIG_BT_RFCOMM=m CONFIG_BT_RFCOMM=m
CONFIG_BT_RFCOMM_TTY=y CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=m CONFIG_BT_BNEP=m
......
...@@ -146,12 +146,18 @@ CONFIG_SCSI_MULTI_LUN=y ...@@ -146,12 +146,18 @@ CONFIG_SCSI_MULTI_LUN=y
CONFIG_SCSI_CONSTANTS=y CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_FC_ATTRS=y CONFIG_SCSI_FC_ATTRS=y
CONFIG_SCSI_SAS_ATTRS=m CONFIG_SCSI_SAS_ATTRS=m
CONFIG_SCSI_CXGB3_ISCSI=m
CONFIG_SCSI_CXGB4_ISCSI=m
CONFIG_SCSI_BNX2_ISCSI=m
CONFIG_SCSI_BNX2_ISCSI=m
CONFIG_BE2ISCSI=m
CONFIG_SCSI_IBMVSCSI=y CONFIG_SCSI_IBMVSCSI=y
CONFIG_SCSI_IBMVFC=m CONFIG_SCSI_IBMVFC=m
CONFIG_SCSI_SYM53C8XX_2=y CONFIG_SCSI_SYM53C8XX_2=y
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0 CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0
CONFIG_SCSI_IPR=y CONFIG_SCSI_IPR=y
CONFIG_SCSI_QLA_FC=m CONFIG_SCSI_QLA_FC=m
CONFIG_SCSI_QLA_ISCSI=m
CONFIG_SCSI_LPFC=m CONFIG_SCSI_LPFC=m
CONFIG_ATA=y CONFIG_ATA=y
# CONFIG_ATA_SFF is not set # CONFIG_ATA_SFF is not set
...@@ -197,6 +203,8 @@ CONFIG_S2IO=m ...@@ -197,6 +203,8 @@ CONFIG_S2IO=m
CONFIG_MYRI10GE=m CONFIG_MYRI10GE=m
CONFIG_NETXEN_NIC=m CONFIG_NETXEN_NIC=m
CONFIG_MLX4_EN=m CONFIG_MLX4_EN=m
CONFIG_QLGE=m
CONFIG_BE2NET=m
CONFIG_PPP=m CONFIG_PPP=m
CONFIG_PPP_ASYNC=m CONFIG_PPP_ASYNC=m
CONFIG_PPP_SYNC_TTY=m CONFIG_PPP_SYNC_TTY=m
......
...@@ -157,6 +157,7 @@ extern const char *powerpc_base_platform; ...@@ -157,6 +157,7 @@ extern const char *powerpc_base_platform;
#define CPU_FTR_476_DD2 ASM_CONST(0x0000000000010000) #define CPU_FTR_476_DD2 ASM_CONST(0x0000000000010000)
#define CPU_FTR_NEED_COHERENT ASM_CONST(0x0000000000020000) #define CPU_FTR_NEED_COHERENT ASM_CONST(0x0000000000020000)
#define CPU_FTR_NO_BTIC ASM_CONST(0x0000000000040000) #define CPU_FTR_NO_BTIC ASM_CONST(0x0000000000040000)
#define CPU_FTR_DEBUG_LVL_EXC ASM_CONST(0x0000000000080000)
#define CPU_FTR_NODSISRALIGN ASM_CONST(0x0000000000100000) #define CPU_FTR_NODSISRALIGN ASM_CONST(0x0000000000100000)
#define CPU_FTR_PPC_LE ASM_CONST(0x0000000000200000) #define CPU_FTR_PPC_LE ASM_CONST(0x0000000000200000)
#define CPU_FTR_REAL_LE ASM_CONST(0x0000000000400000) #define CPU_FTR_REAL_LE ASM_CONST(0x0000000000400000)
...@@ -178,22 +179,18 @@ extern const char *powerpc_base_platform; ...@@ -178,22 +179,18 @@ extern const char *powerpc_base_platform;
#define LONG_ASM_CONST(x) 0 #define LONG_ASM_CONST(x) 0
#endif #endif
#define CPU_FTR_SLB LONG_ASM_CONST(0x0000000100000000)
#define CPU_FTR_16M_PAGE LONG_ASM_CONST(0x0000000200000000) #define CPU_FTR_HVMODE_206 LONG_ASM_CONST(0x0000000800000000)
#define CPU_FTR_TLBIEL LONG_ASM_CONST(0x0000000400000000) #define CPU_FTR_CFAR LONG_ASM_CONST(0x0000001000000000)
#define CPU_FTR_IABR LONG_ASM_CONST(0x0000002000000000) #define CPU_FTR_IABR LONG_ASM_CONST(0x0000002000000000)
#define CPU_FTR_MMCRA LONG_ASM_CONST(0x0000004000000000) #define CPU_FTR_MMCRA LONG_ASM_CONST(0x0000004000000000)
#define CPU_FTR_CTRL LONG_ASM_CONST(0x0000008000000000) #define CPU_FTR_CTRL LONG_ASM_CONST(0x0000008000000000)
#define CPU_FTR_SMT LONG_ASM_CONST(0x0000010000000000) #define CPU_FTR_SMT LONG_ASM_CONST(0x0000010000000000)
#define CPU_FTR_LOCKLESS_TLBIE LONG_ASM_CONST(0x0000040000000000)
#define CPU_FTR_CI_LARGE_PAGE LONG_ASM_CONST(0x0000100000000000)
#define CPU_FTR_PAUSE_ZERO LONG_ASM_CONST(0x0000200000000000) #define CPU_FTR_PAUSE_ZERO LONG_ASM_CONST(0x0000200000000000)
#define CPU_FTR_PURR LONG_ASM_CONST(0x0000400000000000) #define CPU_FTR_PURR LONG_ASM_CONST(0x0000400000000000)
#define CPU_FTR_CELL_TB_BUG LONG_ASM_CONST(0x0000800000000000) #define CPU_FTR_CELL_TB_BUG LONG_ASM_CONST(0x0000800000000000)
#define CPU_FTR_SPURR LONG_ASM_CONST(0x0001000000000000) #define CPU_FTR_SPURR LONG_ASM_CONST(0x0001000000000000)
#define CPU_FTR_DSCR LONG_ASM_CONST(0x0002000000000000) #define CPU_FTR_DSCR LONG_ASM_CONST(0x0002000000000000)
#define CPU_FTR_1T_SEGMENT LONG_ASM_CONST(0x0004000000000000)
#define CPU_FTR_NO_SLBIE_B LONG_ASM_CONST(0x0008000000000000)
#define CPU_FTR_VSX LONG_ASM_CONST(0x0010000000000000) #define CPU_FTR_VSX LONG_ASM_CONST(0x0010000000000000)
#define CPU_FTR_SAO LONG_ASM_CONST(0x0020000000000000) #define CPU_FTR_SAO LONG_ASM_CONST(0x0020000000000000)
#define CPU_FTR_CP_USE_DCBTZ LONG_ASM_CONST(0x0040000000000000) #define CPU_FTR_CP_USE_DCBTZ LONG_ASM_CONST(0x0040000000000000)
...@@ -202,12 +199,14 @@ extern const char *powerpc_base_platform; ...@@ -202,12 +199,14 @@ extern const char *powerpc_base_platform;
#define CPU_FTR_STCX_CHECKS_ADDRESS LONG_ASM_CONST(0x0200000000000000) #define CPU_FTR_STCX_CHECKS_ADDRESS LONG_ASM_CONST(0x0200000000000000)
#define CPU_FTR_POPCNTB LONG_ASM_CONST(0x0400000000000000) #define CPU_FTR_POPCNTB LONG_ASM_CONST(0x0400000000000000)
#define CPU_FTR_POPCNTD LONG_ASM_CONST(0x0800000000000000) #define CPU_FTR_POPCNTD LONG_ASM_CONST(0x0800000000000000)
#define CPU_FTR_ICSWX LONG_ASM_CONST(0x1000000000000000)
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
#define CPU_FTR_PPCAS_ARCH_V2 (CPU_FTR_SLB | \ #define CPU_FTR_PPCAS_ARCH_V2 (CPU_FTR_NOEXECUTE | CPU_FTR_NODSISRALIGN)
CPU_FTR_TLBIEL | CPU_FTR_NOEXECUTE | \
CPU_FTR_NODSISRALIGN | CPU_FTR_16M_PAGE) #define MMU_FTR_PPCAS_ARCH_V2 (MMU_FTR_SLB | MMU_FTR_TLBIEL | \
MMU_FTR_16M_PAGE)
/* We only set the altivec features if the kernel was compiled with altivec /* We only set the altivec features if the kernel was compiled with altivec
* support * support
...@@ -387,7 +386,8 @@ extern const char *powerpc_base_platform; ...@@ -387,7 +386,8 @@ extern const char *powerpc_base_platform;
CPU_FTR_DBELL) CPU_FTR_DBELL)
#define CPU_FTRS_E5500 (CPU_FTR_USE_TB | CPU_FTR_NODSISRALIGN | \ #define CPU_FTRS_E5500 (CPU_FTR_USE_TB | CPU_FTR_NODSISRALIGN | \
CPU_FTR_L2CSR | CPU_FTR_LWSYNC | CPU_FTR_NOEXECUTE | \ CPU_FTR_L2CSR | CPU_FTR_LWSYNC | CPU_FTR_NOEXECUTE | \
CPU_FTR_DBELL | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD) CPU_FTR_DBELL | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \
CPU_FTR_DEBUG_LVL_EXC)
#define CPU_FTRS_GENERIC_32 (CPU_FTR_COMMON | CPU_FTR_NODSISRALIGN) #define CPU_FTRS_GENERIC_32 (CPU_FTR_COMMON | CPU_FTR_NODSISRALIGN)
/* 64-bit CPUs */ /* 64-bit CPUs */
...@@ -407,44 +407,45 @@ extern const char *powerpc_base_platform; ...@@ -407,44 +407,45 @@ extern const char *powerpc_base_platform;
#define CPU_FTRS_POWER5 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ #define CPU_FTRS_POWER5 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \
CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \
CPU_FTR_MMCRA | CPU_FTR_SMT | \ CPU_FTR_MMCRA | CPU_FTR_SMT | \
CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \ CPU_FTR_COHERENT_ICACHE | CPU_FTR_PURR | \
CPU_FTR_PURR | CPU_FTR_STCX_CHECKS_ADDRESS | \ CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB)
CPU_FTR_POPCNTB)
#define CPU_FTRS_POWER6 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ #define CPU_FTRS_POWER6 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \
CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \
CPU_FTR_MMCRA | CPU_FTR_SMT | \ CPU_FTR_MMCRA | CPU_FTR_SMT | \
CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \ CPU_FTR_COHERENT_ICACHE | \
CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \ CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \
CPU_FTR_DSCR | CPU_FTR_UNALIGNED_LD_STD | \ CPU_FTR_DSCR | CPU_FTR_UNALIGNED_LD_STD | \
CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB) CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_CFAR)
#define CPU_FTRS_POWER7 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ #define CPU_FTRS_POWER7 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \
CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | CPU_FTR_HVMODE_206 |\
CPU_FTR_MMCRA | CPU_FTR_SMT | \ CPU_FTR_MMCRA | CPU_FTR_SMT | \
CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \ CPU_FTR_COHERENT_ICACHE | \
CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \ CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \
CPU_FTR_DSCR | CPU_FTR_SAO | CPU_FTR_ASYM_SMT | \ CPU_FTR_DSCR | CPU_FTR_SAO | CPU_FTR_ASYM_SMT | \
CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD) CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \
CPU_FTR_ICSWX | CPU_FTR_CFAR)
#define CPU_FTRS_CELL (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ #define CPU_FTRS_CELL (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \
CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \
CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT | \ CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT | \
CPU_FTR_PAUSE_ZERO | CPU_FTR_CI_LARGE_PAGE | \ CPU_FTR_PAUSE_ZERO | CPU_FTR_CELL_TB_BUG | CPU_FTR_CP_USE_DCBTZ | \
CPU_FTR_CELL_TB_BUG | CPU_FTR_CP_USE_DCBTZ | \
CPU_FTR_UNALIGNED_LD_STD) CPU_FTR_UNALIGNED_LD_STD)
#define CPU_FTRS_PA6T (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ #define CPU_FTRS_PA6T (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \
CPU_FTR_PPCAS_ARCH_V2 | \ CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_ALTIVEC_COMP | \
CPU_FTR_ALTIVEC_COMP | CPU_FTR_CI_LARGE_PAGE | \ CPU_FTR_PURR | CPU_FTR_REAL_LE)
CPU_FTR_PURR | CPU_FTR_REAL_LE | CPU_FTR_NO_SLBIE_B)
#define CPU_FTRS_COMPATIBLE (CPU_FTR_USE_TB | CPU_FTR_PPCAS_ARCH_V2) #define CPU_FTRS_COMPATIBLE (CPU_FTR_USE_TB | CPU_FTR_PPCAS_ARCH_V2)
#define CPU_FTRS_A2 (CPU_FTR_USE_TB | CPU_FTR_SMT | CPU_FTR_DBELL | \
CPU_FTR_NOEXECUTE | CPU_FTR_NODSISRALIGN)
#ifdef __powerpc64__ #ifdef __powerpc64__
#ifdef CONFIG_PPC_BOOK3E #ifdef CONFIG_PPC_BOOK3E
#define CPU_FTRS_POSSIBLE (CPU_FTRS_E5500) #define CPU_FTRS_POSSIBLE (CPU_FTRS_E5500 | CPU_FTRS_A2)
#else #else
#define CPU_FTRS_POSSIBLE \ #define CPU_FTRS_POSSIBLE \
(CPU_FTRS_POWER3 | CPU_FTRS_RS64 | CPU_FTRS_POWER4 | \ (CPU_FTRS_POWER3 | CPU_FTRS_RS64 | CPU_FTRS_POWER4 | \
CPU_FTRS_PPC970 | CPU_FTRS_POWER5 | CPU_FTRS_POWER6 | \ CPU_FTRS_PPC970 | CPU_FTRS_POWER5 | CPU_FTRS_POWER6 | \
CPU_FTRS_POWER7 | CPU_FTRS_CELL | CPU_FTRS_PA6T | \ CPU_FTRS_POWER7 | CPU_FTRS_CELL | CPU_FTRS_PA6T | \
CPU_FTR_1T_SEGMENT | CPU_FTR_VSX) CPU_FTR_VSX)
#endif #endif
#else #else
enum { enum {
...@@ -487,7 +488,7 @@ enum { ...@@ -487,7 +488,7 @@ enum {
#ifdef __powerpc64__ #ifdef __powerpc64__
#ifdef CONFIG_PPC_BOOK3E #ifdef CONFIG_PPC_BOOK3E
#define CPU_FTRS_ALWAYS (CPU_FTRS_E5500) #define CPU_FTRS_ALWAYS (CPU_FTRS_E5500 & CPU_FTRS_A2)
#else #else
#define CPU_FTRS_ALWAYS \ #define CPU_FTRS_ALWAYS \
(CPU_FTRS_POWER3 & CPU_FTRS_RS64 & CPU_FTRS_POWER4 & \ (CPU_FTRS_POWER3 & CPU_FTRS_RS64 & CPU_FTRS_POWER4 & \
......
...@@ -37,16 +37,16 @@ extern cpumask_t threads_core_mask; ...@@ -37,16 +37,16 @@ extern cpumask_t threads_core_mask;
* This can typically be used for things like IPI for tlb invalidations * This can typically be used for things like IPI for tlb invalidations
* since those need to be done only once per core/TLB * since those need to be done only once per core/TLB
*/ */
static inline cpumask_t cpu_thread_mask_to_cores(cpumask_t threads) static inline cpumask_t cpu_thread_mask_to_cores(const struct cpumask *threads)
{ {
cpumask_t tmp, res; cpumask_t tmp, res;
int i; int i;
res = CPU_MASK_NONE; cpumask_clear(&res);
for (i = 0; i < NR_CPUS; i += threads_per_core) { for (i = 0; i < NR_CPUS; i += threads_per_core) {
cpus_shift_left(tmp, threads_core_mask, i); cpumask_shift_left(&tmp, &threads_core_mask, i);
if (cpus_intersects(threads, tmp)) if (cpumask_intersects(threads, &tmp))
cpu_set(i, res); cpumask_set_cpu(i, &res);
} }
return res; return res;
} }
...@@ -58,7 +58,7 @@ static inline int cpu_nr_cores(void) ...@@ -58,7 +58,7 @@ static inline int cpu_nr_cores(void)
static inline cpumask_t cpu_online_cores_map(void) static inline cpumask_t cpu_online_cores_map(void)
{ {
return cpu_thread_mask_to_cores(cpu_online_map); return cpu_thread_mask_to_cores(cpu_online_mask);
} }
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
......
...@@ -27,9 +27,8 @@ enum ppc_dbell { ...@@ -27,9 +27,8 @@ enum ppc_dbell {
PPC_G_DBELL_MC = 4, /* guest mcheck doorbell */ PPC_G_DBELL_MC = 4, /* guest mcheck doorbell */
}; };
extern void doorbell_message_pass(int target, int msg); extern void doorbell_cause_ipi(int cpu, unsigned long data);
extern void doorbell_exception(struct pt_regs *regs); extern void doorbell_exception(struct pt_regs *regs);
extern void doorbell_check_self(void);
extern void doorbell_setup_this_cpu(void); extern void doorbell_setup_this_cpu(void);
static inline void ppc_msgsnd(enum ppc_dbell type, u32 flags, u32 tag) static inline void ppc_msgsnd(enum ppc_dbell type, u32 flags, u32 tag)
......
...@@ -52,6 +52,10 @@ extern struct ppc_emulated { ...@@ -52,6 +52,10 @@ extern struct ppc_emulated {
#ifdef CONFIG_VSX #ifdef CONFIG_VSX
struct ppc_emulated_entry vsx; struct ppc_emulated_entry vsx;
#endif #endif
#ifdef CONFIG_PPC64
struct ppc_emulated_entry mfdscr;
struct ppc_emulated_entry mtdscr;
#endif
} ppc_emulated; } ppc_emulated;
extern u32 ppc_warn_emulated; extern u32 ppc_warn_emulated;
......
...@@ -46,6 +46,7 @@ ...@@ -46,6 +46,7 @@
#define EX_CCR 60 #define EX_CCR 60
#define EX_R3 64 #define EX_R3 64
#define EX_LR 72 #define EX_LR 72
#define EX_CFAR 80
/* /*
* We're short on space and time in the exception prolog, so we can't * We're short on space and time in the exception prolog, so we can't
...@@ -56,30 +57,40 @@ ...@@ -56,30 +57,40 @@
#define LOAD_HANDLER(reg, label) \ #define LOAD_HANDLER(reg, label) \
addi reg,reg,(label)-_stext; /* virt addr of handler ... */ addi reg,reg,(label)-_stext; /* virt addr of handler ... */
/* Exception register prefixes */
#define EXC_HV H
#define EXC_STD
#define EXCEPTION_PROLOG_1(area) \ #define EXCEPTION_PROLOG_1(area) \
mfspr r13,SPRN_SPRG_PACA; /* get paca address into r13 */ \ GET_PACA(r13); \
std r9,area+EX_R9(r13); /* save r9 - r12 */ \ std r9,area+EX_R9(r13); /* save r9 - r12 */ \
std r10,area+EX_R10(r13); \ std r10,area+EX_R10(r13); \
std r11,area+EX_R11(r13); \ std r11,area+EX_R11(r13); \
std r12,area+EX_R12(r13); \ std r12,area+EX_R12(r13); \
mfspr r9,SPRN_SPRG_SCRATCH0; \ BEGIN_FTR_SECTION_NESTED(66); \
mfspr r10,SPRN_CFAR; \
std r10,area+EX_CFAR(r13); \
END_FTR_SECTION_NESTED(CPU_FTR_CFAR, CPU_FTR_CFAR, 66); \
GET_SCRATCH0(r9); \
std r9,area+EX_R13(r13); \ std r9,area+EX_R13(r13); \
mfcr r9 mfcr r9
#define EXCEPTION_PROLOG_PSERIES_1(label) \ #define __EXCEPTION_PROLOG_PSERIES_1(label, h) \
ld r12,PACAKBASE(r13); /* get high part of &label */ \ ld r12,PACAKBASE(r13); /* get high part of &label */ \
ld r10,PACAKMSR(r13); /* get MSR value for kernel */ \ ld r10,PACAKMSR(r13); /* get MSR value for kernel */ \
mfspr r11,SPRN_SRR0; /* save SRR0 */ \ mfspr r11,SPRN_##h##SRR0; /* save SRR0 */ \
LOAD_HANDLER(r12,label) \ LOAD_HANDLER(r12,label) \
mtspr SPRN_SRR0,r12; \ mtspr SPRN_##h##SRR0,r12; \
mfspr r12,SPRN_SRR1; /* and SRR1 */ \ mfspr r12,SPRN_##h##SRR1; /* and SRR1 */ \
mtspr SPRN_SRR1,r10; \ mtspr SPRN_##h##SRR1,r10; \
rfid; \ h##rfid; \
b . /* prevent speculative execution */ b . /* prevent speculative execution */
#define EXCEPTION_PROLOG_PSERIES_1(label, h) \
__EXCEPTION_PROLOG_PSERIES_1(label, h)
#define EXCEPTION_PROLOG_PSERIES(area, label) \ #define EXCEPTION_PROLOG_PSERIES(area, label, h) \
EXCEPTION_PROLOG_1(area); \ EXCEPTION_PROLOG_1(area); \
EXCEPTION_PROLOG_PSERIES_1(label); EXCEPTION_PROLOG_PSERIES_1(label, h);
/* /*
* The common exception prolog is used for all except a few exceptions * The common exception prolog is used for all except a few exceptions
...@@ -98,10 +109,11 @@ ...@@ -98,10 +109,11 @@
beq- 1f; \ beq- 1f; \
ld r1,PACAKSAVE(r13); /* kernel stack to use */ \ ld r1,PACAKSAVE(r13); /* kernel stack to use */ \
1: cmpdi cr1,r1,0; /* check if r1 is in userspace */ \ 1: cmpdi cr1,r1,0; /* check if r1 is in userspace */ \
bge- cr1,2f; /* abort if it is */ \ blt+ cr1,3f; /* abort if it is */ \
b 3f; \ li r1,(n); /* will be reloaded later */ \
2: li r1,(n); /* will be reloaded later */ \
sth r1,PACA_TRAP_SAVE(r13); \ sth r1,PACA_TRAP_SAVE(r13); \
std r3,area+EX_R3(r13); \
addi r3,r13,area; /* r3 -> where regs are saved*/ \
b bad_stack; \ b bad_stack; \
3: std r9,_CCR(r1); /* save CR in stackframe */ \ 3: std r9,_CCR(r1); /* save CR in stackframe */ \
std r11,_NIP(r1); /* save SRR0 in stackframe */ \ std r11,_NIP(r1); /* save SRR0 in stackframe */ \
...@@ -123,6 +135,10 @@ ...@@ -123,6 +135,10 @@
std r9,GPR11(r1); \ std r9,GPR11(r1); \
std r10,GPR12(r1); \ std r10,GPR12(r1); \
std r11,GPR13(r1); \ std r11,GPR13(r1); \
BEGIN_FTR_SECTION_NESTED(66); \
ld r10,area+EX_CFAR(r13); \
std r10,ORIG_GPR3(r1); \
END_FTR_SECTION_NESTED(CPU_FTR_CFAR, CPU_FTR_CFAR, 66); \
ld r2,PACATOC(r13); /* get kernel TOC into r2 */ \ ld r2,PACATOC(r13); /* get kernel TOC into r2 */ \
mflr r9; /* save LR in stackframe */ \ mflr r9; /* save LR in stackframe */ \
std r9,_LINK(r1); \ std r9,_LINK(r1); \
...@@ -143,57 +159,62 @@ ...@@ -143,57 +159,62 @@
/* /*
* Exception vectors. * Exception vectors.
*/ */
#define STD_EXCEPTION_PSERIES(n, label) \ #define STD_EXCEPTION_PSERIES(loc, vec, label) \
. = n; \ . = loc; \
.globl label##_pSeries; \ .globl label##_pSeries; \
label##_pSeries: \ label##_pSeries: \
HMT_MEDIUM; \ HMT_MEDIUM; \
DO_KVM n; \ DO_KVM vec; \
mtspr SPRN_SPRG_SCRATCH0,r13; /* save r13 */ \ SET_SCRATCH0(r13); /* save r13 */ \
EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, label##_common) EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, label##_common, EXC_STD)
#define HSTD_EXCEPTION_PSERIES(n, label) \ #define STD_EXCEPTION_HV(loc, vec, label) \
. = n; \ . = loc; \
.globl label##_pSeries; \ .globl label##_hv; \
label##_pSeries: \ label##_hv: \
HMT_MEDIUM; \ HMT_MEDIUM; \
mtspr SPRN_SPRG_SCRATCH0,r20; /* save r20 */ \ DO_KVM vec; \
mfspr r20,SPRN_HSRR0; /* copy HSRR0 to SRR0 */ \ SET_SCRATCH0(r13); /* save r13 */ \
mtspr SPRN_SRR0,r20; \ EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, label##_common, EXC_HV)
mfspr r20,SPRN_HSRR1; /* copy HSRR0 to SRR0 */ \
mtspr SPRN_SRR1,r20; \
mfspr r20,SPRN_SPRG_SCRATCH0; /* restore r20 */ \
mtspr SPRN_SPRG_SCRATCH0,r13; /* save r13 */ \
EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, label##_common)
#define __MASKABLE_EXCEPTION_PSERIES(vec, label, h) \
#define MASKABLE_EXCEPTION_PSERIES(n, label) \
. = n; \
.globl label##_pSeries; \
label##_pSeries: \
HMT_MEDIUM; \ HMT_MEDIUM; \
DO_KVM n; \ DO_KVM vec; \
mtspr SPRN_SPRG_SCRATCH0,r13; /* save r13 */ \ SET_SCRATCH0(r13); /* save r13 */ \
mfspr r13,SPRN_SPRG_PACA; /* get paca address into r13 */ \ GET_PACA(r13); \
std r9,PACA_EXGEN+EX_R9(r13); /* save r9, r10 */ \ std r9,PACA_EXGEN+EX_R9(r13); /* save r9, r10 */ \
std r10,PACA_EXGEN+EX_R10(r13); \ std r10,PACA_EXGEN+EX_R10(r13); \
lbz r10,PACASOFTIRQEN(r13); \ lbz r10,PACASOFTIRQEN(r13); \
mfcr r9; \ mfcr r9; \
cmpwi r10,0; \ cmpwi r10,0; \
beq masked_interrupt; \ beq masked_##h##interrupt; \
mfspr r10,SPRN_SPRG_SCRATCH0; \ GET_SCRATCH0(r10); \
std r10,PACA_EXGEN+EX_R13(r13); \ std r10,PACA_EXGEN+EX_R13(r13); \
std r11,PACA_EXGEN+EX_R11(r13); \ std r11,PACA_EXGEN+EX_R11(r13); \
std r12,PACA_EXGEN+EX_R12(r13); \ std r12,PACA_EXGEN+EX_R12(r13); \
ld r12,PACAKBASE(r13); /* get high part of &label */ \ ld r12,PACAKBASE(r13); /* get high part of &label */ \
ld r10,PACAKMSR(r13); /* get MSR value for kernel */ \ ld r10,PACAKMSR(r13); /* get MSR value for kernel */ \
mfspr r11,SPRN_SRR0; /* save SRR0 */ \ mfspr r11,SPRN_##h##SRR0; /* save SRR0 */ \
LOAD_HANDLER(r12,label##_common) \ LOAD_HANDLER(r12,label##_common) \
mtspr SPRN_SRR0,r12; \ mtspr SPRN_##h##SRR0,r12; \
mfspr r12,SPRN_SRR1; /* and SRR1 */ \ mfspr r12,SPRN_##h##SRR1; /* and SRR1 */ \
mtspr SPRN_SRR1,r10; \ mtspr SPRN_##h##SRR1,r10; \
rfid; \ h##rfid; \
b . /* prevent speculative execution */ b . /* prevent speculative execution */
#define _MASKABLE_EXCEPTION_PSERIES(vec, label, h) \
__MASKABLE_EXCEPTION_PSERIES(vec, label, h)
#define MASKABLE_EXCEPTION_PSERIES(loc, vec, label) \
. = loc; \
.globl label##_pSeries; \
label##_pSeries: \
_MASKABLE_EXCEPTION_PSERIES(vec, label, EXC_STD)
#define MASKABLE_EXCEPTION_HV(loc, vec, label) \
. = loc; \
.globl label##_hv; \
label##_hv: \
_MASKABLE_EXCEPTION_PSERIES(vec, label, EXC_HV)
#ifdef CONFIG_PPC_ISERIES #ifdef CONFIG_PPC_ISERIES
#define DISABLE_INTS \ #define DISABLE_INTS \
......
...@@ -49,7 +49,7 @@ label##5: \ ...@@ -49,7 +49,7 @@ label##5: \
FTR_ENTRY_OFFSET label##2b-label##5b; \ FTR_ENTRY_OFFSET label##2b-label##5b; \
FTR_ENTRY_OFFSET label##3b-label##5b; \ FTR_ENTRY_OFFSET label##3b-label##5b; \
FTR_ENTRY_OFFSET label##4b-label##5b; \ FTR_ENTRY_OFFSET label##4b-label##5b; \
.ifgt (label##4b-label##3b)-(label##2b-label##1b); \ .ifgt (label##4b- label##3b)-(label##2b- label##1b); \
.error "Feature section else case larger than body"; \ .error "Feature section else case larger than body"; \
.endif; \ .endif; \
.popsection; .popsection;
...@@ -146,6 +146,19 @@ label##5: \ ...@@ -146,6 +146,19 @@ label##5: \
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
#define ASM_FTR_IF(section_if, section_else, msk, val) \
stringify_in_c(BEGIN_FTR_SECTION) \
section_if "; " \
stringify_in_c(FTR_SECTION_ELSE) \
section_else "; " \
stringify_in_c(ALT_FTR_SECTION_END((msk), (val)))
#define ASM_FTR_IFSET(section_if, section_else, msk) \
ASM_FTR_IF(section_if, section_else, (msk), (msk))
#define ASM_FTR_IFCLR(section_if, section_else, msk) \
ASM_FTR_IF(section_if, section_else, (msk), 0)
#define ASM_MMU_FTR_IF(section_if, section_else, msk, val) \ #define ASM_MMU_FTR_IF(section_if, section_else, msk, val) \
stringify_in_c(BEGIN_MMU_FTR_SECTION) \ stringify_in_c(BEGIN_MMU_FTR_SECTION) \
section_if "; " \ section_if "; " \
......
...@@ -47,6 +47,7 @@ ...@@ -47,6 +47,7 @@
#define FW_FEATURE_BEAT ASM_CONST(0x0000000001000000) #define FW_FEATURE_BEAT ASM_CONST(0x0000000001000000)
#define FW_FEATURE_CMO ASM_CONST(0x0000000002000000) #define FW_FEATURE_CMO ASM_CONST(0x0000000002000000)
#define FW_FEATURE_VPHN ASM_CONST(0x0000000004000000) #define FW_FEATURE_VPHN ASM_CONST(0x0000000004000000)
#define FW_FEATURE_XCMO ASM_CONST(0x0000000008000000)
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
...@@ -60,7 +61,7 @@ enum { ...@@ -60,7 +61,7 @@ enum {
FW_FEATURE_VIO | FW_FEATURE_RDMA | FW_FEATURE_LLAN | FW_FEATURE_VIO | FW_FEATURE_RDMA | FW_FEATURE_LLAN |
FW_FEATURE_BULK_REMOVE | FW_FEATURE_XDABR | FW_FEATURE_BULK_REMOVE | FW_FEATURE_XDABR |
FW_FEATURE_MULTITCE | FW_FEATURE_SPLPAR | FW_FEATURE_LPAR | FW_FEATURE_MULTITCE | FW_FEATURE_SPLPAR | FW_FEATURE_LPAR |
FW_FEATURE_CMO | FW_FEATURE_VPHN, FW_FEATURE_CMO | FW_FEATURE_VPHN | FW_FEATURE_XCMO,
FW_FEATURE_PSERIES_ALWAYS = 0, FW_FEATURE_PSERIES_ALWAYS = 0,
FW_FEATURE_ISERIES_POSSIBLE = FW_FEATURE_ISERIES | FW_FEATURE_LPAR, FW_FEATURE_ISERIES_POSSIBLE = FW_FEATURE_ISERIES | FW_FEATURE_LPAR,
FW_FEATURE_ISERIES_ALWAYS = FW_FEATURE_ISERIES | FW_FEATURE_LPAR, FW_FEATURE_ISERIES_ALWAYS = FW_FEATURE_ISERIES | FW_FEATURE_LPAR,
......
...@@ -102,6 +102,7 @@ ...@@ -102,6 +102,7 @@
#define H_ANDCOND (1UL<<(63-33)) #define H_ANDCOND (1UL<<(63-33))
#define H_ICACHE_INVALIDATE (1UL<<(63-40)) /* icbi, etc. (ignored for IO pages) */ #define H_ICACHE_INVALIDATE (1UL<<(63-40)) /* icbi, etc. (ignored for IO pages) */
#define H_ICACHE_SYNCHRONIZE (1UL<<(63-41)) /* dcbst, icbi, etc (ignored for IO pages */ #define H_ICACHE_SYNCHRONIZE (1UL<<(63-41)) /* dcbst, icbi, etc (ignored for IO pages */
#define H_COALESCE_CAND (1UL<<(63-42)) /* page is a good candidate for coalescing */
#define H_ZERO_PAGE (1UL<<(63-48)) /* zero the page before mapping (ignored for IO pages) */ #define H_ZERO_PAGE (1UL<<(63-48)) /* zero the page before mapping (ignored for IO pages) */
#define H_COPY_PAGE (1UL<<(63-49)) #define H_COPY_PAGE (1UL<<(63-49))
#define H_N (1UL<<(63-61)) #define H_N (1UL<<(63-61))
...@@ -234,6 +235,7 @@ ...@@ -234,6 +235,7 @@
#define H_GET_MPP 0x2D4 #define H_GET_MPP 0x2D4
#define H_HOME_NODE_ASSOCIATIVITY 0x2EC #define H_HOME_NODE_ASSOCIATIVITY 0x2EC
#define H_BEST_ENERGY 0x2F4 #define H_BEST_ENERGY 0x2F4
#define H_GET_MPP_X 0x314
#define MAX_HCALL_OPCODE H_BEST_ENERGY #define MAX_HCALL_OPCODE H_BEST_ENERGY
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
...@@ -312,6 +314,16 @@ struct hvcall_mpp_data { ...@@ -312,6 +314,16 @@ struct hvcall_mpp_data {
int h_get_mpp(struct hvcall_mpp_data *); int h_get_mpp(struct hvcall_mpp_data *);
struct hvcall_mpp_x_data {
unsigned long coalesced_bytes;
unsigned long pool_coalesced_bytes;
unsigned long pool_purr_cycles;
unsigned long pool_spurr_cycles;
unsigned long reserved[3];
};
int h_get_mpp_x(struct hvcall_mpp_x_data *mpp_x_data);
#ifdef CONFIG_PPC_PSERIES #ifdef CONFIG_PPC_PSERIES
extern int CMO_PrPSP; extern int CMO_PrPSP;
extern int CMO_SecPSP; extern int CMO_SecPSP;
......
...@@ -31,7 +31,6 @@ struct iowa_bus { ...@@ -31,7 +31,6 @@ struct iowa_bus {
void *private; void *private;
}; };
void __devinit io_workaround_init(void);
void __devinit iowa_register_bus(struct pci_controller *, struct ppc_pci_io *, void __devinit iowa_register_bus(struct pci_controller *, struct ppc_pci_io *,
int (*)(struct iowa_bus *, void *), void *); int (*)(struct iowa_bus *, void *), void *);
struct iowa_bus *iowa_mem_find_bus(const PCI_IO_ADDR); struct iowa_bus *iowa_mem_find_bus(const PCI_IO_ADDR);
......
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
#define _ASM_POWERPC_IO_H #define _ASM_POWERPC_IO_H
#ifdef __KERNEL__ #ifdef __KERNEL__
#define ARCH_HAS_IOREMAP_WC
/* /*
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
...@@ -481,10 +483,16 @@ __do_out_asm(_rec_outl, "stwbrx") ...@@ -481,10 +483,16 @@ __do_out_asm(_rec_outl, "stwbrx")
_memcpy_fromio(dst,PCI_FIX_ADDR(src),n) _memcpy_fromio(dst,PCI_FIX_ADDR(src),n)
#endif /* !CONFIG_EEH */ #endif /* !CONFIG_EEH */
#ifdef CONFIG_PPC_INDIRECT_IO #ifdef CONFIG_PPC_INDIRECT_PIO
#define DEF_PCI_HOOK(x) x #define DEF_PCI_HOOK_pio(x) x
#else
#define DEF_PCI_HOOK_pio(x) NULL
#endif
#ifdef CONFIG_PPC_INDIRECT_MMIO
#define DEF_PCI_HOOK_mem(x) x
#else #else
#define DEF_PCI_HOOK(x) NULL #define DEF_PCI_HOOK_mem(x) NULL
#endif #endif
/* Structure containing all the hooks */ /* Structure containing all the hooks */
...@@ -504,7 +512,7 @@ extern struct ppc_pci_io { ...@@ -504,7 +512,7 @@ extern struct ppc_pci_io {
#define DEF_PCI_AC_RET(name, ret, at, al, space, aa) \ #define DEF_PCI_AC_RET(name, ret, at, al, space, aa) \
static inline ret name at \ static inline ret name at \
{ \ { \
if (DEF_PCI_HOOK(ppc_pci_io.name) != NULL) \ if (DEF_PCI_HOOK_##space(ppc_pci_io.name) != NULL) \
return ppc_pci_io.name al; \ return ppc_pci_io.name al; \
return __do_##name al; \ return __do_##name al; \
} }
...@@ -512,7 +520,7 @@ static inline ret name at \ ...@@ -512,7 +520,7 @@ static inline ret name at \
#define DEF_PCI_AC_NORET(name, at, al, space, aa) \ #define DEF_PCI_AC_NORET(name, at, al, space, aa) \
static inline void name at \ static inline void name at \
{ \ { \
if (DEF_PCI_HOOK(ppc_pci_io.name) != NULL) \ if (DEF_PCI_HOOK_##space(ppc_pci_io.name) != NULL) \
ppc_pci_io.name al; \ ppc_pci_io.name al; \
else \ else \
__do_##name al; \ __do_##name al; \
...@@ -616,12 +624,13 @@ static inline void iosync(void) ...@@ -616,12 +624,13 @@ static inline void iosync(void)
* * ioremap is the standard one and provides non-cacheable guarded mappings * * ioremap is the standard one and provides non-cacheable guarded mappings
* and can be hooked by the platform via ppc_md * and can be hooked by the platform via ppc_md
* *
* * ioremap_flags allows to specify the page flags as an argument and can * * ioremap_prot allows to specify the page flags as an argument and can
* also be hooked by the platform via ppc_md. ioremap_prot is the exact * also be hooked by the platform via ppc_md.
* same thing as ioremap_flags.
* *
* * ioremap_nocache is identical to ioremap * * ioremap_nocache is identical to ioremap
* *
* * ioremap_wc enables write combining
*
* * iounmap undoes such a mapping and can be hooked * * iounmap undoes such a mapping and can be hooked
* *
* * __ioremap_at (and the pending __iounmap_at) are low level functions to * * __ioremap_at (and the pending __iounmap_at) are low level functions to
...@@ -629,7 +638,7 @@ static inline void iosync(void) ...@@ -629,7 +638,7 @@ static inline void iosync(void)
* currently be hooked. Must be page aligned. * currently be hooked. Must be page aligned.
* *
* * __ioremap is the low level implementation used by ioremap and * * __ioremap is the low level implementation used by ioremap and
* ioremap_flags and cannot be hooked (but can be used by a hook on one * ioremap_prot and cannot be hooked (but can be used by a hook on one
* of the previous ones) * of the previous ones)
* *
* * __ioremap_caller is the same as above but takes an explicit caller * * __ioremap_caller is the same as above but takes an explicit caller
...@@ -640,10 +649,10 @@ static inline void iosync(void) ...@@ -640,10 +649,10 @@ static inline void iosync(void)
* *
*/ */
extern void __iomem *ioremap(phys_addr_t address, unsigned long size); extern void __iomem *ioremap(phys_addr_t address, unsigned long size);
extern void __iomem *ioremap_flags(phys_addr_t address, unsigned long size, extern void __iomem *ioremap_prot(phys_addr_t address, unsigned long size,
unsigned long flags); unsigned long flags);
extern void __iomem *ioremap_wc(phys_addr_t address, unsigned long size);
#define ioremap_nocache(addr, size) ioremap((addr), (size)) #define ioremap_nocache(addr, size) ioremap((addr), (size))
#define ioremap_prot(addr, size, prot) ioremap_flags((addr), (size), (prot))
extern void iounmap(volatile void __iomem *addr); extern void iounmap(volatile void __iomem *addr);
......
/*
* Copyright 2010, 2011 Mark Nelson and Tseng-Hui (Frank) Lin, 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.
*/
#ifndef _ASM_POWERPC_IO_EVENT_IRQ_H
#define _ASM_POWERPC_IO_EVENT_IRQ_H
#include <linux/types.h>
#include <linux/notifier.h>
#define PSERIES_IOEI_RPC_MAX_LEN 216
#define PSERIES_IOEI_TYPE_ERR_DETECTED 0x01
#define PSERIES_IOEI_TYPE_ERR_RECOVERED 0x02
#define PSERIES_IOEI_TYPE_EVENT 0x03
#define PSERIES_IOEI_TYPE_RPC_PASS_THRU 0x04
#define PSERIES_IOEI_SUBTYPE_NOT_APP 0x00
#define PSERIES_IOEI_SUBTYPE_REBALANCE_REQ 0x01
#define PSERIES_IOEI_SUBTYPE_NODE_ONLINE 0x03
#define PSERIES_IOEI_SUBTYPE_NODE_OFFLINE 0x04
#define PSERIES_IOEI_SUBTYPE_DUMP_SIZE_CHANGE 0x05
#define PSERIES_IOEI_SUBTYPE_TORRENT_IRV_UPDATE 0x06
#define PSERIES_IOEI_SUBTYPE_TORRENT_HFI_CFGED 0x07
#define PSERIES_IOEI_SCOPE_NOT_APP 0x00
#define PSERIES_IOEI_SCOPE_RIO_HUB 0x36
#define PSERIES_IOEI_SCOPE_RIO_BRIDGE 0x37
#define PSERIES_IOEI_SCOPE_PHB 0x38
#define PSERIES_IOEI_SCOPE_EADS_GLOBAL 0x39
#define PSERIES_IOEI_SCOPE_EADS_SLOT 0x3A
#define PSERIES_IOEI_SCOPE_TORRENT_HUB 0x3B
#define PSERIES_IOEI_SCOPE_SERVICE_PROC 0x51
/* Platform Event Log Format, Version 6, data portition of IO event section */
struct pseries_io_event {
uint8_t event_type; /* 0x00 IO-Event Type */
uint8_t rpc_data_len; /* 0x01 RPC data length */
uint8_t scope; /* 0x02 Error/Event Scope */
uint8_t event_subtype; /* 0x03 I/O-Event Sub-Type */
uint32_t drc_index; /* 0x04 DRC Index */
uint8_t rpc_data[PSERIES_IOEI_RPC_MAX_LEN];
/* 0x08 RPC Data (0-216 bytes, */
/* padded to 4 bytes alignment) */
};
extern struct atomic_notifier_head pseries_ioei_notifier_list;
#endif /* _ASM_POWERPC_IO_EVENT_IRQ_H */
...@@ -88,9 +88,6 @@ struct irq_host_ops { ...@@ -88,9 +88,6 @@ struct irq_host_ops {
/* Dispose of such a mapping */ /* Dispose of such a mapping */
void (*unmap)(struct irq_host *h, unsigned int virq); void (*unmap)(struct irq_host *h, unsigned int virq);
/* Update of such a mapping */
void (*remap)(struct irq_host *h, unsigned int virq, irq_hw_number_t hw);
/* Translate device-tree interrupt specifier from raw format coming /* Translate device-tree interrupt specifier from raw format coming
* from the firmware to a irq_hw_number_t (interrupt line number) and * from the firmware to a irq_hw_number_t (interrupt line number) and
* type (sense) that can be passed to set_irq_type(). In the absence * type (sense) that can be passed to set_irq_type(). In the absence
...@@ -128,19 +125,10 @@ struct irq_host { ...@@ -128,19 +125,10 @@ struct irq_host {
struct device_node *of_node; struct device_node *of_node;
}; };
/* The main irq map itself is an array of NR_IRQ entries containing the struct irq_data;
* associate host and irq number. An entry with a host of NULL is free. extern irq_hw_number_t irqd_to_hwirq(struct irq_data *d);
* An entry can be allocated if it's free, the allocator always then sets
* hwirq first to the host's invalid irq number and then fills ops.
*/
struct irq_map_entry {
irq_hw_number_t hwirq;
struct irq_host *host;
};
extern struct irq_map_entry irq_map[NR_IRQS];
extern irq_hw_number_t virq_to_hw(unsigned int virq); extern irq_hw_number_t virq_to_hw(unsigned int virq);
extern bool virq_is_host(unsigned int virq, struct irq_host *host);
/** /**
* irq_alloc_host - Allocate a new irq_host data structure * irq_alloc_host - Allocate a new irq_host data structure
......
...@@ -76,7 +76,7 @@ extern void crash_send_ipi(void (*crash_ipi_callback)(struct pt_regs *)); ...@@ -76,7 +76,7 @@ extern void crash_send_ipi(void (*crash_ipi_callback)(struct pt_regs *));
extern cpumask_t cpus_in_sr; extern cpumask_t cpus_in_sr;
static inline int kexec_sr_activated(int cpu) static inline int kexec_sr_activated(int cpu)
{ {
return cpu_isset(cpu,cpus_in_sr); return cpumask_test_cpu(cpu, &cpus_in_sr);
} }
struct kimage; struct kimage;
......
...@@ -59,6 +59,7 @@ ...@@ -59,6 +59,7 @@
#define BOOK3S_INTERRUPT_INST_SEGMENT 0x480 #define BOOK3S_INTERRUPT_INST_SEGMENT 0x480
#define BOOK3S_INTERRUPT_EXTERNAL 0x500 #define BOOK3S_INTERRUPT_EXTERNAL 0x500
#define BOOK3S_INTERRUPT_EXTERNAL_LEVEL 0x501 #define BOOK3S_INTERRUPT_EXTERNAL_LEVEL 0x501
#define BOOK3S_INTERRUPT_EXTERNAL_HV 0x502
#define BOOK3S_INTERRUPT_ALIGNMENT 0x600 #define BOOK3S_INTERRUPT_ALIGNMENT 0x600
#define BOOK3S_INTERRUPT_PROGRAM 0x700 #define BOOK3S_INTERRUPT_PROGRAM 0x700
#define BOOK3S_INTERRUPT_FP_UNAVAIL 0x800 #define BOOK3S_INTERRUPT_FP_UNAVAIL 0x800
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
(\intno == BOOK3S_INTERRUPT_DATA_SEGMENT) || \ (\intno == BOOK3S_INTERRUPT_DATA_SEGMENT) || \
(\intno == BOOK3S_INTERRUPT_INST_SEGMENT) || \ (\intno == BOOK3S_INTERRUPT_INST_SEGMENT) || \
(\intno == BOOK3S_INTERRUPT_EXTERNAL) || \ (\intno == BOOK3S_INTERRUPT_EXTERNAL) || \
(\intno == BOOK3S_INTERRUPT_EXTERNAL_HV) || \
(\intno == BOOK3S_INTERRUPT_ALIGNMENT) || \ (\intno == BOOK3S_INTERRUPT_ALIGNMENT) || \
(\intno == BOOK3S_INTERRUPT_PROGRAM) || \ (\intno == BOOK3S_INTERRUPT_PROGRAM) || \
(\intno == BOOK3S_INTERRUPT_FP_UNAVAIL) || \ (\intno == BOOK3S_INTERRUPT_FP_UNAVAIL) || \
......
...@@ -210,6 +210,8 @@ struct dtl_entry { ...@@ -210,6 +210,8 @@ struct dtl_entry {
#define DISPATCH_LOG_BYTES 4096 /* bytes per cpu */ #define DISPATCH_LOG_BYTES 4096 /* bytes per cpu */
#define N_DISPATCH_LOG (DISPATCH_LOG_BYTES / sizeof(struct dtl_entry)) #define N_DISPATCH_LOG (DISPATCH_LOG_BYTES / sizeof(struct dtl_entry))
extern struct kmem_cache *dtl_cache;
/* /*
* When CONFIG_VIRT_CPU_ACCOUNTING = y, the cpu accounting code controls * When CONFIG_VIRT_CPU_ACCOUNTING = y, the cpu accounting code controls
* reading from the dispatch trace log. If other code wants to consume * reading from the dispatch trace log. If other code wants to consume
......
...@@ -29,21 +29,6 @@ struct file; ...@@ -29,21 +29,6 @@ struct file;
struct pci_controller; struct pci_controller;
struct kimage; struct kimage;
#ifdef CONFIG_SMP
struct smp_ops_t {
void (*message_pass)(int target, int msg);
int (*probe)(void);
void (*kick_cpu)(int nr);
void (*setup_cpu)(int nr);
void (*bringup_done)(void);
void (*take_timebase)(void);
void (*give_timebase)(void);
int (*cpu_disable)(void);
void (*cpu_die)(unsigned int nr);
int (*cpu_bootable)(unsigned int nr);
};
#endif
struct machdep_calls { struct machdep_calls {
char *name; char *name;
#ifdef CONFIG_PPC64 #ifdef CONFIG_PPC64
...@@ -267,6 +252,7 @@ struct machdep_calls { ...@@ -267,6 +252,7 @@ struct machdep_calls {
extern void e500_idle(void); extern void e500_idle(void);
extern void power4_idle(void); extern void power4_idle(void);
extern void power7_idle(void);
extern void ppc6xx_idle(void); extern void ppc6xx_idle(void);
extern void book3e_idle(void); extern void book3e_idle(void);
...@@ -311,12 +297,6 @@ extern sys_ctrler_t sys_ctrler; ...@@ -311,12 +297,6 @@ extern sys_ctrler_t sys_ctrler;
#endif /* CONFIG_PPC_PMAC */ #endif /* CONFIG_PPC_PMAC */
#ifdef CONFIG_SMP
/* Poor default implementations */
extern void __devinit smp_generic_give_timebase(void);
extern void __devinit smp_generic_take_timebase(void);
#endif /* CONFIG_SMP */
/* Functions to produce codes on the leds. /* Functions to produce codes on the leds.
* The SRC code should be unique for the message category and should * The SRC code should be unique for the message category and should
......
...@@ -43,6 +43,7 @@ ...@@ -43,6 +43,7 @@
#define MAS0_TLBSEL(x) (((x) << 28) & 0x30000000) #define MAS0_TLBSEL(x) (((x) << 28) & 0x30000000)
#define MAS0_ESEL(x) (((x) << 16) & 0x0FFF0000) #define MAS0_ESEL(x) (((x) << 16) & 0x0FFF0000)
#define MAS0_NV(x) ((x) & 0x00000FFF) #define MAS0_NV(x) ((x) & 0x00000FFF)
#define MAS0_ESEL_MASK 0x0FFF0000
#define MAS0_HES 0x00004000 #define MAS0_HES 0x00004000
#define MAS0_WQ_ALLWAYS 0x00000000 #define MAS0_WQ_ALLWAYS 0x00000000
#define MAS0_WQ_COND 0x00001000 #define MAS0_WQ_COND 0x00001000
...@@ -137,6 +138,21 @@ ...@@ -137,6 +138,21 @@
#define MMUCSR0_TLB2PS 0x00078000 /* TLB2 Page Size */ #define MMUCSR0_TLB2PS 0x00078000 /* TLB2 Page Size */
#define MMUCSR0_TLB3PS 0x00780000 /* TLB3 Page Size */ #define MMUCSR0_TLB3PS 0x00780000 /* TLB3 Page Size */
/* MMUCFG bits */
#define MMUCFG_MAVN_NASK 0x00000003
#define MMUCFG_MAVN_V1_0 0x00000000
#define MMUCFG_MAVN_V2_0 0x00000001
#define MMUCFG_NTLB_MASK 0x0000000c
#define MMUCFG_NTLB_SHIFT 2
#define MMUCFG_PIDSIZE_MASK 0x000007c0
#define MMUCFG_PIDSIZE_SHIFT 6
#define MMUCFG_TWC 0x00008000
#define MMUCFG_LRAT 0x00010000
#define MMUCFG_RASIZE_MASK 0x00fe0000
#define MMUCFG_RASIZE_SHIFT 17
#define MMUCFG_LPIDSIZE_MASK 0x0f000000
#define MMUCFG_LPIDSIZE_SHIFT 24
/* TLBnCFG encoding */ /* TLBnCFG encoding */
#define TLBnCFG_N_ENTRY 0x00000fff /* number of entries */ #define TLBnCFG_N_ENTRY 0x00000fff /* number of entries */
#define TLBnCFG_HES 0x00002000 /* HW select supported */ #define TLBnCFG_HES 0x00002000 /* HW select supported */
...@@ -229,6 +245,10 @@ extern struct mmu_psize_def mmu_psize_defs[MMU_PAGE_COUNT]; ...@@ -229,6 +245,10 @@ extern struct mmu_psize_def mmu_psize_defs[MMU_PAGE_COUNT];
extern int mmu_linear_psize; extern int mmu_linear_psize;
extern int mmu_vmemmap_psize; extern int mmu_vmemmap_psize;
#ifdef CONFIG_PPC64
extern unsigned long linear_map_top;
#endif
#endif /* !__ASSEMBLY__ */ #endif /* !__ASSEMBLY__ */
#endif /* _ASM_POWERPC_MMU_BOOK3E_H_ */ #endif /* _ASM_POWERPC_MMU_BOOK3E_H_ */
...@@ -408,6 +408,7 @@ static inline void subpage_prot_init_new_context(struct mm_struct *mm) { } ...@@ -408,6 +408,7 @@ static inline void subpage_prot_init_new_context(struct mm_struct *mm) { }
#endif /* CONFIG_PPC_SUBPAGE_PROT */ #endif /* CONFIG_PPC_SUBPAGE_PROT */
typedef unsigned long mm_context_id_t; typedef unsigned long mm_context_id_t;
struct spinlock;
typedef struct { typedef struct {
mm_context_id_t id; mm_context_id_t id;
...@@ -423,6 +424,11 @@ typedef struct { ...@@ -423,6 +424,11 @@ typedef struct {
#ifdef CONFIG_PPC_SUBPAGE_PROT #ifdef CONFIG_PPC_SUBPAGE_PROT
struct subpage_prot_table spt; struct subpage_prot_table spt;
#endif /* CONFIG_PPC_SUBPAGE_PROT */ #endif /* CONFIG_PPC_SUBPAGE_PROT */
#ifdef CONFIG_PPC_ICSWX
struct spinlock *cop_lockp; /* guard acop and cop_pid */
unsigned long acop; /* mask of enabled coprocessor types */
unsigned int cop_pid; /* pid value used with coprocessors */
#endif /* CONFIG_PPC_ICSWX */
} mm_context_t; } mm_context_t;
......
...@@ -56,11 +56,6 @@ ...@@ -56,11 +56,6 @@
*/ */
#define MMU_FTR_NEED_DTLB_SW_LRU ASM_CONST(0x00200000) #define MMU_FTR_NEED_DTLB_SW_LRU ASM_CONST(0x00200000)
/* This indicates that the processor uses the ISA 2.06 server tlbie
* mnemonics
*/
#define MMU_FTR_TLBIE_206 ASM_CONST(0x00400000)
/* Enable use of TLB reservation. Processor should support tlbsrx. /* Enable use of TLB reservation. Processor should support tlbsrx.
* instruction and MAS0[WQ]. * instruction and MAS0[WQ].
*/ */
...@@ -70,6 +65,53 @@ ...@@ -70,6 +65,53 @@
*/ */
#define MMU_FTR_USE_PAIRED_MAS ASM_CONST(0x01000000) #define MMU_FTR_USE_PAIRED_MAS ASM_CONST(0x01000000)
/* MMU is SLB-based
*/
#define MMU_FTR_SLB ASM_CONST(0x02000000)
/* Support 16M large pages
*/
#define MMU_FTR_16M_PAGE ASM_CONST(0x04000000)
/* Supports TLBIEL variant
*/
#define MMU_FTR_TLBIEL ASM_CONST(0x08000000)
/* Supports tlbies w/o locking
*/
#define MMU_FTR_LOCKLESS_TLBIE ASM_CONST(0x10000000)
/* Large pages can be marked CI
*/
#define MMU_FTR_CI_LARGE_PAGE ASM_CONST(0x20000000)
/* 1T segments available
*/
#define MMU_FTR_1T_SEGMENT ASM_CONST(0x40000000)
/* Doesn't support the B bit (1T segment) in SLBIE
*/
#define MMU_FTR_NO_SLBIE_B ASM_CONST(0x80000000)
/* MMU feature bit sets for various CPUs */
#define MMU_FTRS_DEFAULT_HPTE_ARCH_V2 \
MMU_FTR_HPTE_TABLE | MMU_FTR_PPCAS_ARCH_V2
#define MMU_FTRS_POWER4 MMU_FTRS_DEFAULT_HPTE_ARCH_V2
#define MMU_FTRS_PPC970 MMU_FTRS_POWER4
#define MMU_FTRS_POWER5 MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE
#define MMU_FTRS_POWER6 MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE
#define MMU_FTRS_POWER7 MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE
#define MMU_FTRS_CELL MMU_FTRS_DEFAULT_HPTE_ARCH_V2 | \
MMU_FTR_CI_LARGE_PAGE
#define MMU_FTRS_PA6T MMU_FTRS_DEFAULT_HPTE_ARCH_V2 | \
MMU_FTR_CI_LARGE_PAGE | MMU_FTR_NO_SLBIE_B
#define MMU_FTRS_A2 MMU_FTR_TYPE_3E | MMU_FTR_USE_TLBILX | \
MMU_FTR_USE_TLBIVAX_BCAST | \
MMU_FTR_LOCK_BCAST_INVAL | \
MMU_FTR_USE_TLBRSRV | \
MMU_FTR_USE_PAIRED_MAS | \
MMU_FTR_TLBIEL | \
MMU_FTR_16M_PAGE
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
#include <asm/cputable.h> #include <asm/cputable.h>
......
...@@ -32,6 +32,10 @@ extern void __destroy_context(unsigned long context_id); ...@@ -32,6 +32,10 @@ extern void __destroy_context(unsigned long context_id);
extern void mmu_context_init(void); extern void mmu_context_init(void);
#endif #endif
extern void switch_cop(struct mm_struct *next);
extern int use_cop(unsigned long acop, struct mm_struct *mm);
extern void drop_cop(unsigned long acop, struct mm_struct *mm);
/* /*
* switch_mm is the entry point called from the architecture independent * switch_mm is the entry point called from the architecture independent
* code in kernel/sched.c * code in kernel/sched.c
...@@ -55,6 +59,12 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, ...@@ -55,6 +59,12 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
if (prev == next) if (prev == next)
return; return;
#ifdef CONFIG_PPC_ICSWX
/* Switch coprocessor context only if prev or next uses a coprocessor */
if (prev->context.acop || next->context.acop)
switch_cop(next);
#endif /* CONFIG_PPC_ICSWX */
/* We must stop all altivec streams before changing the HW /* We must stop all altivec streams before changing the HW
* context * context
*/ */
...@@ -67,7 +77,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, ...@@ -67,7 +77,7 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
* sub architectures. * sub architectures.
*/ */
#ifdef CONFIG_PPC_STD_MMU_64 #ifdef CONFIG_PPC_STD_MMU_64
if (cpu_has_feature(CPU_FTR_SLB)) if (mmu_has_feature(MMU_FTR_SLB))
switch_slb(tsk, next); switch_slb(tsk, next);
else else
switch_stab(tsk, next); switch_stab(tsk, next);
......
...@@ -262,6 +262,7 @@ struct mpic ...@@ -262,6 +262,7 @@ struct mpic
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
struct irq_chip hc_ipi; struct irq_chip hc_ipi;
#endif #endif
struct irq_chip hc_tm;
const char *name; const char *name;
/* Flags */ /* Flags */
unsigned int flags; unsigned int flags;
...@@ -280,7 +281,7 @@ struct mpic ...@@ -280,7 +281,7 @@ struct mpic
/* vector numbers used for internal sources (ipi/timers) */ /* vector numbers used for internal sources (ipi/timers) */
unsigned int ipi_vecs[4]; unsigned int ipi_vecs[4];
unsigned int timer_vecs[4]; unsigned int timer_vecs[8];
/* Spurious vector to program into unused sources */ /* Spurious vector to program into unused sources */
unsigned int spurious_vec; unsigned int spurious_vec;
...@@ -368,6 +369,8 @@ struct mpic ...@@ -368,6 +369,8 @@ struct mpic
* NOTE: This flag trumps MPIC_WANTS_RESET. * NOTE: This flag trumps MPIC_WANTS_RESET.
*/ */
#define MPIC_NO_RESET 0x00004000 #define MPIC_NO_RESET 0x00004000
/* Freescale MPIC (compatible includes "fsl,mpic") */
#define MPIC_FSL 0x00008000
/* MPIC HW modification ID */ /* MPIC HW modification ID */
#define MPIC_REGSET_MASK 0xf0000000 #define MPIC_REGSET_MASK 0xf0000000
......
...@@ -18,13 +18,18 @@ ...@@ -18,13 +18,18 @@
extern int pSeries_reconfig_notifier_register(struct notifier_block *); extern int pSeries_reconfig_notifier_register(struct notifier_block *);
extern void pSeries_reconfig_notifier_unregister(struct notifier_block *); extern void pSeries_reconfig_notifier_unregister(struct notifier_block *);
extern struct blocking_notifier_head pSeries_reconfig_chain; extern struct blocking_notifier_head pSeries_reconfig_chain;
/* Not the best place to put this, will be fixed when we move some
* of the rtas suspend-me stuff to pseries */
extern void pSeries_coalesce_init(void);
#else /* !CONFIG_PPC_PSERIES */ #else /* !CONFIG_PPC_PSERIES */
static inline int pSeries_reconfig_notifier_register(struct notifier_block *nb) static inline int pSeries_reconfig_notifier_register(struct notifier_block *nb)
{ {
return 0; return 0;
} }
static inline void pSeries_reconfig_notifier_unregister(struct notifier_block *nb) { } static inline void pSeries_reconfig_notifier_unregister(struct notifier_block *nb) { }
static inline void pSeries_coalesce_init(void) { }
#endif /* CONFIG_PPC_PSERIES */ #endif /* CONFIG_PPC_PSERIES */
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
#endif /* _PPC64_PSERIES_RECONFIG_H */ #endif /* _PPC64_PSERIES_RECONFIG_H */
...@@ -92,9 +92,9 @@ struct paca_struct { ...@@ -92,9 +92,9 @@ struct paca_struct {
* Now, starting in cacheline 2, the exception save areas * Now, starting in cacheline 2, the exception save areas
*/ */
/* used for most interrupts/exceptions */ /* used for most interrupts/exceptions */
u64 exgen[10] __attribute__((aligned(0x80))); u64 exgen[11] __attribute__((aligned(0x80)));
u64 exmc[10]; /* used for machine checks */ u64 exmc[11]; /* used for machine checks */
u64 exslb[10]; /* used for SLB/segment table misses u64 exslb[11]; /* used for SLB/segment table misses
* on the linear mapping */ * on the linear mapping */
/* SLB related definitions */ /* SLB related definitions */
u16 vmalloc_sllp; u16 vmalloc_sllp;
...@@ -106,7 +106,8 @@ struct paca_struct { ...@@ -106,7 +106,8 @@ struct paca_struct {
pgd_t *pgd; /* Current PGD */ pgd_t *pgd; /* Current PGD */
pgd_t *kernel_pgd; /* Kernel PGD */ pgd_t *kernel_pgd; /* Kernel PGD */
u64 exgen[8] __attribute__((aligned(0x80))); u64 exgen[8] __attribute__((aligned(0x80)));
u64 extlb[EX_TLB_SIZE*3] __attribute__((aligned(0x80))); /* We can have up to 3 levels of reentrancy in the TLB miss handler */
u64 extlb[3][EX_TLB_SIZE / sizeof(u64)] __attribute__((aligned(0x80)));
u64 exmc[8]; /* used for machine checks */ u64 exmc[8]; /* used for machine checks */
u64 excrit[8]; /* used for crit interrupts */ u64 excrit[8]; /* used for crit interrupts */
u64 exdbg[8]; /* used for debug interrupts */ u64 exdbg[8]; /* used for debug interrupts */
...@@ -125,7 +126,7 @@ struct paca_struct { ...@@ -125,7 +126,7 @@ struct paca_struct {
struct task_struct *__current; /* Pointer to current */ struct task_struct *__current; /* Pointer to current */
u64 kstack; /* Saved Kernel stack addr */ u64 kstack; /* Saved Kernel stack addr */
u64 stab_rr; /* stab/slb round-robin counter */ u64 stab_rr; /* stab/slb round-robin counter */
u64 saved_r1; /* r1 save for RTAS calls */ u64 saved_r1; /* r1 save for RTAS calls or PM */
u64 saved_msr; /* MSR saved here by enter_rtas */ u64 saved_msr; /* MSR saved here by enter_rtas */
u16 trap_save; /* Used when bad stack is encountered */ u16 trap_save; /* Used when bad stack is encountered */
u8 soft_enabled; /* irq soft-enable flag */ u8 soft_enabled; /* irq soft-enable flag */
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment