aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Ellerman <mpe@ellerman.id.au>2016-03-14 05:05:14 -0400
committerMichael Ellerman <mpe@ellerman.id.au>2016-03-14 05:05:14 -0400
commita1b5344620a3e6291afaf7542714ba9c391ef1c7 (patch)
treeb79b51bc4019ea50efbbac4a7f7717b6e6d749c0
parentd8c0282f4da6d5335fee56141ca92284026f4818 (diff)
parentfba4e9f9898ab181703723b9890ba29345edfe08 (diff)
Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/scottwood/linux into next
Freescale updates from Scott: "Highlights include 8xx optimizations, 32-bit checksum optimizations, 86xx consolidation, e5500/e6500 cpu hotplug, more fman and other dt bits, and minor fixes/cleanup."
-rw-r--r--Documentation/devicetree/bindings/powerpc/fsl/fman.txt40
-rw-r--r--Documentation/devicetree/bindings/soc/fsl/rcpm.txt63
-rw-r--r--Documentation/kernel-parameters.txt2
-rw-r--r--arch/powerpc/Kconfig2
-rw-r--r--arch/powerpc/Makefile10
-rw-r--r--arch/powerpc/boot/dts/fsl/b4860qds.dts60
-rw-r--r--arch/powerpc/boot/dts/fsl/b4qds.dtsi53
-rw-r--r--arch/powerpc/boot/dts/fsl/bsc9131rdb.dtsi2
-rw-r--r--arch/powerpc/boot/dts/fsl/bsc9132qds.dtsi2
-rw-r--r--arch/powerpc/boot/dts/fsl/c293pcie.dts2
-rw-r--r--arch/powerpc/boot/dts/fsl/gef_ppc9a.dts216
-rw-r--r--arch/powerpc/boot/dts/fsl/gef_sbc310.dts260
-rw-r--r--arch/powerpc/boot/dts/fsl/gef_sbc610.dts214
-rw-r--r--arch/powerpc/boot/dts/fsl/kmcoge4.dts4
-rw-r--r--arch/powerpc/boot/dts/fsl/mpc8536ds.dtsi8
-rw-r--r--arch/powerpc/boot/dts/fsl/mpc8641_hpcn.dts (renamed from arch/powerpc/boot/dts/mpc8641_hpcn.dts)347
-rw-r--r--arch/powerpc/boot/dts/fsl/mpc8641_hpcn_36b.dts (renamed from arch/powerpc/boot/dts/mpc8641_hpcn_36b.dts)330
-rw-r--r--arch/powerpc/boot/dts/fsl/mpc8641si-post.dtsi120
-rw-r--r--arch/powerpc/boot/dts/fsl/mpc8641si-pre.dtsi58
-rw-r--r--arch/powerpc/boot/dts/fsl/mvme2500.dts4
-rw-r--r--arch/powerpc/boot/dts/fsl/p1010rdb.dtsi2
-rw-r--r--arch/powerpc/boot/dts/fsl/p1020rdb-pc.dtsi2
-rw-r--r--arch/powerpc/boot/dts/fsl/p1020rdb-pd.dts2
-rw-r--r--arch/powerpc/boot/dts/fsl/p1020rdb.dtsi2
-rw-r--r--arch/powerpc/boot/dts/fsl/p1021mds.dts2
-rw-r--r--arch/powerpc/boot/dts/fsl/p1021rdb-pc.dtsi2
-rw-r--r--arch/powerpc/boot/dts/fsl/p1022ds.dtsi2
-rw-r--r--arch/powerpc/boot/dts/fsl/p1022rdk.dts2
-rw-r--r--arch/powerpc/boot/dts/fsl/p1024rdb.dtsi2
-rw-r--r--arch/powerpc/boot/dts/fsl/p1025rdb.dtsi2
-rw-r--r--arch/powerpc/boot/dts/fsl/p2020rdb-pc.dtsi2
-rw-r--r--arch/powerpc/boot/dts/fsl/p2020rdb.dts2
-rw-r--r--arch/powerpc/boot/dts/fsl/p2041rdb.dts94
-rw-r--r--arch/powerpc/boot/dts/fsl/p3041ds.dts114
-rw-r--r--arch/powerpc/boot/dts/fsl/p4080ds.dts186
-rw-r--r--arch/powerpc/boot/dts/fsl/p5020ds.dts114
-rw-r--r--arch/powerpc/boot/dts/fsl/p5040ds.dts236
-rw-r--r--arch/powerpc/boot/dts/fsl/p5040si-post.dtsi1
-rw-r--r--arch/powerpc/boot/dts/fsl/p5040si-pre.dtsi6
-rw-r--r--arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-0-best-effort.dtsi5
-rw-r--r--arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-0.dtsi5
-rw-r--r--arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-1-best-effort.dtsi5
-rw-r--r--arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-1.dtsi5
-rw-r--r--arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-0.dtsi5
-rw-r--r--arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-1.dtsi5
-rw-r--r--arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-2.dtsi5
-rw-r--r--arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-3.dtsi5
-rw-r--r--arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-4.dtsi5
-rw-r--r--arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-5.dtsi5
-rw-r--r--arch/powerpc/boot/dts/fsl/qoriq-fman3-1-10g-0.dtsi5
-rw-r--r--arch/powerpc/boot/dts/fsl/qoriq-fman3-1-10g-1.dtsi5
-rw-r--r--arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-0.dtsi5
-rw-r--r--arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-1.dtsi5
-rw-r--r--arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-2.dtsi5
-rw-r--r--arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-3.dtsi5
-rw-r--r--arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-4.dtsi5
-rw-r--r--arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-5.dtsi5
-rw-r--r--arch/powerpc/boot/dts/fsl/sbc8641d.dts203
-rw-r--r--arch/powerpc/boot/dts/fsl/t1023rdb.dts43
-rw-r--r--arch/powerpc/boot/dts/fsl/t1024qds.dts6
-rw-r--r--arch/powerpc/boot/dts/fsl/t1024rdb.dts47
-rw-r--r--arch/powerpc/boot/dts/fsl/t1040rdb.dts32
-rw-r--r--arch/powerpc/boot/dts/fsl/t1042rdb.dts30
-rw-r--r--arch/powerpc/boot/dts/fsl/t1042rdb_pi.dts18
-rw-r--r--arch/powerpc/boot/dts/fsl/t104xd4rdb.dtsi2
-rw-r--r--arch/powerpc/boot/dts/fsl/t104xqds.dtsi180
-rw-r--r--arch/powerpc/boot/dts/fsl/t104xrdb.dtsi40
-rw-r--r--arch/powerpc/boot/dts/fsl/t2080qds.dts158
-rw-r--r--arch/powerpc/boot/dts/fsl/t2080rdb.dts67
-rw-r--r--arch/powerpc/boot/dts/fsl/t2081qds.dts221
-rw-r--r--arch/powerpc/boot/dts/fsl/t208xqds.dtsi6
-rw-r--r--arch/powerpc/boot/dts/fsl/t208xrdb.dtsi2
-rw-r--r--arch/powerpc/boot/dts/fsl/t4240qds.dts402
-rw-r--r--arch/powerpc/boot/dts/fsl/t4240rdb.dts151
-rw-r--r--arch/powerpc/boot/dts/gef_ppc9a.dts425
-rw-r--r--arch/powerpc/boot/dts/gef_sbc310.dts459
-rw-r--r--arch/powerpc/boot/dts/gef_sbc610.dts423
-rw-r--r--arch/powerpc/boot/dts/sbc8641d.dts447
-rw-r--r--arch/powerpc/configs/83xx/mpc834x_itx_defconfig1
-rw-r--r--arch/powerpc/configs/85xx/ksi8560_defconfig1
-rw-r--r--arch/powerpc/configs/85xx/stx_gp3_defconfig2
-rw-r--r--arch/powerpc/configs/86xx-hw.config104
-rw-r--r--arch/powerpc/configs/86xx-smp.config2
-rw-r--r--arch/powerpc/configs/86xx/gef_ppc9a_defconfig216
-rw-r--r--arch/powerpc/configs/86xx/gef_sbc310_defconfig214
-rw-r--r--arch/powerpc/configs/86xx/gef_sbc610_defconfig273
-rw-r--r--arch/powerpc/configs/86xx/mpc8610_hpcd_defconfig110
-rw-r--r--arch/powerpc/configs/86xx/mpc8641_hpcn_defconfig156
-rw-r--r--arch/powerpc/configs/86xx/sbc8641d_defconfig246
-rw-r--r--arch/powerpc/configs/mpc86xx_basic_defconfig10
-rw-r--r--arch/powerpc/configs/mpc86xx_defconfig162
-rw-r--r--arch/powerpc/include/asm/cache.h19
-rw-r--r--arch/powerpc/include/asm/cacheflush.h54
-rw-r--r--arch/powerpc/include/asm/checksum.h141
-rw-r--r--arch/powerpc/include/asm/cputable.h8
-rw-r--r--arch/powerpc/include/asm/cputhreads.h15
-rw-r--r--arch/powerpc/include/asm/fsl_pm.h51
-rw-r--r--arch/powerpc/include/asm/mmu-8xx.h4
-rw-r--r--arch/powerpc/include/asm/nohash/32/pgtable.h5
-rw-r--r--arch/powerpc/include/asm/page_32.h17
-rw-r--r--arch/powerpc/include/asm/reg.h2
-rw-r--r--arch/powerpc/include/asm/reg_8xx.h93
-rw-r--r--arch/powerpc/include/asm/smp.h4
-rw-r--r--arch/powerpc/include/asm/time.h6
-rw-r--r--arch/powerpc/kernel/asm-offsets.c1
-rw-r--r--arch/powerpc/kernel/cpu_setup_fsl_booke.S112
-rw-r--r--arch/powerpc/kernel/cputable.c4
-rw-r--r--arch/powerpc/kernel/head_64.S97
-rw-r--r--arch/powerpc/kernel/head_8xx.S108
-rw-r--r--arch/powerpc/kernel/head_fsl_booke.S74
-rw-r--r--arch/powerpc/kernel/misc_32.S107
-rw-r--r--arch/powerpc/kernel/ppc_ksyms.c2
-rw-r--r--arch/powerpc/kernel/ppc_ksyms_32.c1
-rw-r--r--arch/powerpc/kernel/smp.c7
-rw-r--r--arch/powerpc/lib/Makefile3
-rw-r--r--arch/powerpc/lib/checksum_32.S398
-rw-r--r--arch/powerpc/lib/checksum_64.S31
-rw-r--r--arch/powerpc/lib/checksum_wrappers.c (renamed from arch/powerpc/lib/checksum_wrappers_64.c)0
-rw-r--r--arch/powerpc/lib/ppc_ksyms.c4
-rw-r--r--arch/powerpc/mm/8xx_mmu.c141
-rw-r--r--arch/powerpc/mm/Makefile1
-rw-r--r--arch/powerpc/mm/dma-noncoherent.c2
-rw-r--r--arch/powerpc/mm/fsl_booke_mmu.c6
-rw-r--r--arch/powerpc/mm/init_32.c23
-rw-r--r--arch/powerpc/mm/mmu_decl.h26
-rw-r--r--arch/powerpc/mm/pgtable_32.c52
-rw-r--r--arch/powerpc/mm/ppc_mmu_32.c4
-rw-r--r--arch/powerpc/mm/tlb_nohash.c4
-rw-r--r--arch/powerpc/platforms/85xx/Kconfig1
-rw-r--r--arch/powerpc/platforms/85xx/Makefile1
-rw-r--r--arch/powerpc/platforms/85xx/common.c3
-rw-r--r--arch/powerpc/platforms/85xx/mpc85xx_pm_ops.c106
-rw-r--r--arch/powerpc/platforms/85xx/smp.c312
-rw-r--r--arch/powerpc/platforms/85xx/smp.h1
-rw-r--r--arch/powerpc/platforms/86xx/Makefile2
-rw-r--r--arch/powerpc/platforms/86xx/common.c43
-rw-r--r--arch/powerpc/platforms/86xx/gef_ppc9a.c32
-rw-r--r--arch/powerpc/platforms/86xx/gef_sbc310.c32
-rw-r--r--arch/powerpc/platforms/86xx/gef_sbc610.c32
-rw-r--r--arch/powerpc/platforms/86xx/mpc8610_hpcd.c20
-rw-r--r--arch/powerpc/platforms/86xx/mpc86xx.h2
-rw-r--r--arch/powerpc/platforms/86xx/mpc86xx_hpcn.c21
-rw-r--r--arch/powerpc/platforms/86xx/sbc8641d.c32
-rw-r--r--arch/powerpc/platforms/embedded6xx/mpc10x.h10
-rw-r--r--arch/powerpc/sysdev/Kconfig5
-rw-r--r--arch/powerpc/sysdev/Makefile1
-rw-r--r--arch/powerpc/sysdev/cpm1.c5
-rw-r--r--arch/powerpc/sysdev/fsl_lbc.c49
-rw-r--r--arch/powerpc/sysdev/fsl_rcpm.c385
-rw-r--r--drivers/soc/fsl/qe/qe_common.c66
-rw-r--r--drivers/soc/fsl/qe/qe_ic.c11
-rw-r--r--include/linux/fsl/guts.h105
-rw-r--r--include/soc/fsl/qe/qe.h2
153 files changed, 5691 insertions, 4736 deletions
diff --git a/Documentation/devicetree/bindings/powerpc/fsl/fman.txt b/Documentation/devicetree/bindings/powerpc/fsl/fman.txt
index 1fc5328c0651..55c2c03fc81e 100644
--- a/Documentation/devicetree/bindings/powerpc/fsl/fman.txt
+++ b/Documentation/devicetree/bindings/powerpc/fsl/fman.txt
@@ -315,6 +315,16 @@ PROPERTIES
315 Value type: <phandle> 315 Value type: <phandle>
316 Definition: A phandle for 1EEE1588 timer. 316 Definition: A phandle for 1EEE1588 timer.
317 317
318- pcsphy-handle
319 Usage required for "fsl,fman-memac" MACs
320 Value type: <phandle>
321 Definition: A phandle for pcsphy.
322
323- tbi-handle
324 Usage required for "fsl,fman-dtsec" MACs
325 Value type: <phandle>
326 Definition: A phandle for tbiphy.
327
318EXAMPLE 328EXAMPLE
319 329
320fman1_tx28: port@a8000 { 330fman1_tx28: port@a8000 {
@@ -340,6 +350,7 @@ ethernet@e0000 {
340 reg = <0xe0000 0x1000>; 350 reg = <0xe0000 0x1000>;
341 fsl,fman-ports = <&fman1_rx8 &fman1_tx28>; 351 fsl,fman-ports = <&fman1_rx8 &fman1_tx28>;
342 ptp-timer = <&ptp-timer>; 352 ptp-timer = <&ptp-timer>;
353 tbi-handle = <&tbi0>;
343}; 354};
344 355
345============================================================================ 356============================================================================
@@ -415,6 +426,13 @@ PROPERTIES
415 The settings and programming routines for internal/external 426 The settings and programming routines for internal/external
416 MDIO are different. Must be included for internal MDIO. 427 MDIO are different. Must be included for internal MDIO.
417 428
429For internal PHY device on internal mdio bus, a PHY node should be created.
430See the definition of the PHY node in booting-without-of.txt for an
431example of how to define a PHY (Internal PHY has no interrupt line).
432- For "fsl,fman-mdio" compatible internal mdio bus, the PHY is TBI PHY.
433- For "fsl,fman-memac-mdio" compatible internal mdio bus, the PHY is PCS PHY,
434 PCS PHY addr must be '0'.
435
418EXAMPLE 436EXAMPLE
419 437
420Example for FMan v2 external MDIO: 438Example for FMan v2 external MDIO:
@@ -425,12 +443,29 @@ mdio@f1000 {
425 interrupts = <101 2 0 0>; 443 interrupts = <101 2 0 0>;
426}; 444};
427 445
446Example for FMan v2 internal MDIO:
447
448mdio@e3120 {
449 compatible = "fsl,fman-mdio";
450 reg = <0xe3120 0xee0>;
451 fsl,fman-internal-mdio;
452
453 tbi1: tbi-phy@8 {
454 reg = <0x8>;
455 device_type = "tbi-phy";
456 };
457};
458
428Example for FMan v3 internal MDIO: 459Example for FMan v3 internal MDIO:
429 460
430mdio@f1000 { 461mdio@f1000 {
431 compatible = "fsl,fman-memac-mdio"; 462 compatible = "fsl,fman-memac-mdio";
432 reg = <0xf1000 0x1000>; 463 reg = <0xf1000 0x1000>;
433 fsl,fman-internal-mdio; 464 fsl,fman-internal-mdio;
465
466 pcsphy6: ethernet-phy@0 {
467 reg = <0x0>;
468 };
434}; 469};
435 470
436============================================================================= 471=============================================================================
@@ -568,6 +603,7 @@ fman@400000 {
568 cell-index = <0>; 603 cell-index = <0>;
569 reg = <0xe0000 0x1000>; 604 reg = <0xe0000 0x1000>;
570 fsl,fman-ports = <&fman1_rx_0x8 &fman1_tx_0x28>; 605 fsl,fman-ports = <&fman1_rx_0x8 &fman1_tx_0x28>;
606 tbi-handle = <&tbi5>;
571 }; 607 };
572 608
573 ethernet@e2000 { 609 ethernet@e2000 {
@@ -575,6 +611,7 @@ fman@400000 {
575 cell-index = <1>; 611 cell-index = <1>;
576 reg = <0xe2000 0x1000>; 612 reg = <0xe2000 0x1000>;
577 fsl,fman-ports = <&fman1_rx_0x9 &fman1_tx_0x29>; 613 fsl,fman-ports = <&fman1_rx_0x9 &fman1_tx_0x29>;
614 tbi-handle = <&tbi6>;
578 }; 615 };
579 616
580 ethernet@e4000 { 617 ethernet@e4000 {
@@ -582,6 +619,7 @@ fman@400000 {
582 cell-index = <2>; 619 cell-index = <2>;
583 reg = <0xe4000 0x1000>; 620 reg = <0xe4000 0x1000>;
584 fsl,fman-ports = <&fman1_rx_0xa &fman1_tx_0x2a>; 621 fsl,fman-ports = <&fman1_rx_0xa &fman1_tx_0x2a>;
622 tbi-handle = <&tbi7>;
585 }; 623 };
586 624
587 ethernet@e6000 { 625 ethernet@e6000 {
@@ -589,6 +627,7 @@ fman@400000 {
589 cell-index = <3>; 627 cell-index = <3>;
590 reg = <0xe6000 0x1000>; 628 reg = <0xe6000 0x1000>;
591 fsl,fman-ports = <&fman1_rx_0xb &fman1_tx_0x2b>; 629 fsl,fman-ports = <&fman1_rx_0xb &fman1_tx_0x2b>;
630 tbi-handle = <&tbi8>;
592 }; 631 };
593 632
594 ethernet@e8000 { 633 ethernet@e8000 {
@@ -596,6 +635,7 @@ fman@400000 {
596 cell-index = <4>; 635 cell-index = <4>;
597 reg = <0xf0000 0x1000>; 636 reg = <0xf0000 0x1000>;
598 fsl,fman-ports = <&fman1_rx_0xc &fman1_tx_0x2c>; 637 fsl,fman-ports = <&fman1_rx_0xc &fman1_tx_0x2c>;
638 tbi-handle = <&tbi9>;
599 639
600 ethernet@f0000 { 640 ethernet@f0000 {
601 cell-index = <8>; 641 cell-index = <8>;
diff --git a/Documentation/devicetree/bindings/soc/fsl/rcpm.txt b/Documentation/devicetree/bindings/soc/fsl/rcpm.txt
new file mode 100644
index 000000000000..e284e4e1ccd5
--- /dev/null
+++ b/Documentation/devicetree/bindings/soc/fsl/rcpm.txt
@@ -0,0 +1,63 @@
1* Run Control and Power Management
2-------------------------------------------
3The RCPM performs all device-level tasks associated with device run control
4and power management.
5
6Required properites:
7 - reg : Offset and length of the register set of the RCPM block.
8 - fsl,#rcpm-wakeup-cells : The number of IPPDEXPCR register cells in the
9 fsl,rcpm-wakeup property.
10 - compatible : Must contain a chip-specific RCPM block compatible string
11 and (if applicable) may contain a chassis-version RCPM compatible
12 string. Chip-specific strings are of the form "fsl,<chip>-rcpm",
13 such as:
14 * "fsl,p2041-rcpm"
15 * "fsl,p5020-rcpm"
16 * "fsl,t4240-rcpm"
17
18 Chassis-version strings are of the form "fsl,qoriq-rcpm-<version>",
19 such as:
20 * "fsl,qoriq-rcpm-1.0": for chassis 1.0 rcpm
21 * "fsl,qoriq-rcpm-2.0": for chassis 2.0 rcpm
22 * "fsl,qoriq-rcpm-2.1": for chassis 2.1 rcpm
23
24All references to "1.0" and "2.0" refer to the QorIQ chassis version to
25which the chip complies.
26Chassis Version Example Chips
27--------------- -------------------------------
281.0 p4080, p5020, p5040, p2041, p3041
292.0 t4240, b4860, b4420
302.1 t1040, ls1021
31
32Example:
33The RCPM node for T4240:
34 rcpm: global-utilities@e2000 {
35 compatible = "fsl,t4240-rcpm", "fsl,qoriq-rcpm-2.0";
36 reg = <0xe2000 0x1000>;
37 fsl,#rcpm-wakeup-cells = <2>;
38 };
39
40* Freescale RCPM Wakeup Source Device Tree Bindings
41-------------------------------------------
42Required fsl,rcpm-wakeup property should be added to a device node if the device
43can be used as a wakeup source.
44
45 - fsl,rcpm-wakeup: Consists of a phandle to the rcpm node and the IPPDEXPCR
46 register cells. The number of IPPDEXPCR register cells is defined in
47 "fsl,#rcpm-wakeup-cells" in the rcpm node. The first register cell is
48 the bit mask that should be set in IPPDEXPCR0, and the second register
49 cell is for IPPDEXPCR1, and so on.
50
51 Note: IPPDEXPCR(IP Powerdown Exception Control Register) provides a
52 mechanism for keeping certain blocks awake during STANDBY and MEM, in
53 order to use them as wake-up sources.
54
55Example:
56 lpuart0: serial@2950000 {
57 compatible = "fsl,ls1021a-lpuart";
58 reg = <0x0 0x2950000 0x0 0x1000>;
59 interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>;
60 clocks = <&sysclk>;
61 clock-names = "ipg";
62 fsl,rcpm-wakeup = <&rcpm 0x0 0x40000000>;
63 };
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index 551ecf09c8dd..516d4300e313 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -2582,7 +2582,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
2582 nolapic_timer [X86-32,APIC] Do not use the local APIC timer. 2582 nolapic_timer [X86-32,APIC] Do not use the local APIC timer.
2583 2583
2584 noltlbs [PPC] Do not use large page/tlb entries for kernel 2584 noltlbs [PPC] Do not use large page/tlb entries for kernel
2585 lowmem mapping on PPC40x. 2585 lowmem mapping on PPC40x and PPC8xx
2586 2586
2587 nomca [IA-64] Disable machine check abort handling 2587 nomca [IA-64] Disable machine check abort handling
2588 2588
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 5130fa166a93..b580ce0c25a8 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -408,7 +408,7 @@ config SWIOTLB
408config HOTPLUG_CPU 408config HOTPLUG_CPU
409 bool "Support for enabling/disabling CPUs" 409 bool "Support for enabling/disabling CPUs"
410 depends on SMP && (PPC_PSERIES || \ 410 depends on SMP && (PPC_PSERIES || \
411 PPC_PMAC || PPC_POWERNV || (PPC_85xx && !PPC_E500MC)) 411 PPC_PMAC || PPC_POWERNV || FSL_SOC_BOOKE)
412 ---help--- 412 ---help---
413 Say Y here to be able to disable and re-enable individual 413 Say Y here to be able to disable and re-enable individual
414 CPUs at runtime on SMP machines. 414 CPUs at runtime on SMP machines.
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
index f4e49a4153cb..709a22a3e824 100644
--- a/arch/powerpc/Makefile
+++ b/arch/powerpc/Makefile
@@ -325,6 +325,16 @@ corenet64_smp_defconfig:
325 $(call merge_into_defconfig,corenet_basic_defconfig,\ 325 $(call merge_into_defconfig,corenet_basic_defconfig,\
326 85xx-64bit 85xx-smp altivec 85xx-hw fsl-emb-nonhw) 326 85xx-64bit 85xx-smp altivec 85xx-hw fsl-emb-nonhw)
327 327
328PHONY += mpc86xx_defconfig
329mpc86xx_defconfig:
330 $(call merge_into_defconfig,mpc86xx_basic_defconfig,\
331 86xx-hw fsl-emb-nonhw)
332
333PHONY += mpc86xx_smp_defconfig
334mpc86xx_smp_defconfig:
335 $(call merge_into_defconfig,mpc86xx_basic_defconfig,\
336 86xx-smp 86xx-hw fsl-emb-nonhw)
337
328define archhelp 338define archhelp
329 @echo '* zImage - Build default images selected by kernel config' 339 @echo '* zImage - Build default images selected by kernel config'
330 @echo ' zImage.* - Compressed kernel image (arch/$(ARCH)/boot/zImage.*)' 340 @echo ' zImage.* - Compressed kernel image (arch/$(ARCH)/boot/zImage.*)'
diff --git a/arch/powerpc/boot/dts/fsl/b4860qds.dts b/arch/powerpc/boot/dts/fsl/b4860qds.dts
index ba8c9bea33ac..a8bc419959ca 100644
--- a/arch/powerpc/boot/dts/fsl/b4860qds.dts
+++ b/arch/powerpc/boot/dts/fsl/b4860qds.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * B4860DS Device Tree Source 2 * B4860DS Device Tree Source
3 * 3 *
4 * Copyright 2012 Freescale Semiconductor Inc. 4 * Copyright 2012 - 2015 Freescale Semiconductor Inc.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met: 7 * modification, are permitted provided that the following conditions are met:
@@ -39,12 +39,69 @@
39 model = "fsl,B4860QDS"; 39 model = "fsl,B4860QDS";
40 compatible = "fsl,B4860QDS"; 40 compatible = "fsl,B4860QDS";
41 41
42 aliases {
43 phy_sgmii_1e = &phy_sgmii_1e;
44 phy_sgmii_1f = &phy_sgmii_1f;
45 phy_xaui_slot1 = &phy_xaui_slot1;
46 phy_xaui_slot2 = &phy_xaui_slot2;
47 };
48
42 ifc: localbus@ffe124000 { 49 ifc: localbus@ffe124000 {
43 board-control@3,0 { 50 board-control@3,0 {
44 compatible = "fsl,b4860qds-fpga", "fsl,fpga-qixis"; 51 compatible = "fsl,b4860qds-fpga", "fsl,fpga-qixis";
45 }; 52 };
46 }; 53 };
47 54
55 soc@ffe000000 {
56 fman@400000 {
57 ethernet@e8000 {
58 phy-handle = <&phy_sgmii_1e>;
59 phy-connection-type = "sgmii";
60 };
61
62 ethernet@ea000 {
63 phy-handle = <&phy_sgmii_1f>;
64 phy-connection-type = "sgmii";
65 };
66
67 ethernet@f0000 {
68 phy-handle = <&phy_xaui_slot1>;
69 phy-connection-type = "xgmii";
70 };
71
72 ethernet@f2000 {
73 phy-handle = <&phy_xaui_slot2>;
74 phy-connection-type = "xgmii";
75 };
76
77 mdio@fc000 {
78 phy_sgmii_1e: ethernet-phy@1e {
79 reg = <0x1e>;
80 status = "disabled";
81 };
82
83 phy_sgmii_1f: ethernet-phy@1f {
84 reg = <0x1f>;
85 status = "disabled";
86 };
87 };
88
89 mdio@fd000 {
90 phy_xaui_slot1: xaui-phy@slot1 {
91 compatible = "ethernet-phy-ieee802.3-c45";
92 reg = <0x7>;
93 status = "disabled";
94 };
95
96 phy_xaui_slot2: xaui-phy@slot2 {
97 compatible = "ethernet-phy-ieee802.3-c45";
98 reg = <0x6>;
99 status = "disabled";
100 };
101 };
102 };
103 };
104
48 rio: rapidio@ffe0c0000 { 105 rio: rapidio@ffe0c0000 {
49 reg = <0xf 0xfe0c0000 0 0x11000>; 106 reg = <0xf 0xfe0c0000 0 0x11000>;
50 107
@@ -55,7 +112,6 @@
55 ranges = <0 0 0xc 0x30000000 0 0x10000000>; 112 ranges = <0 0 0xc 0x30000000 0 0x10000000>;
56 }; 113 };
57 }; 114 };
58
59}; 115};
60 116
61/include/ "b4860si-post.dtsi" 117/include/ "b4860si-post.dtsi"
diff --git a/arch/powerpc/boot/dts/fsl/b4qds.dtsi b/arch/powerpc/boot/dts/fsl/b4qds.dtsi
index 64557742fb99..3785ef826d07 100644
--- a/arch/powerpc/boot/dts/fsl/b4qds.dtsi
+++ b/arch/powerpc/boot/dts/fsl/b4qds.dtsi
@@ -1,7 +1,7 @@
1/* 1/*
2 * B4420DS Device Tree Source 2 * B4420DS Device Tree Source
3 * 3 *
4 * Copyright 2012 - 2014 Freescale Semiconductor, Inc. 4 * Copyright 2012 - 2015 Freescale Semiconductor, Inc.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met: 7 * modification, are permitted provided that the following conditions are met:
@@ -39,6 +39,13 @@
39 #size-cells = <2>; 39 #size-cells = <2>;
40 interrupt-parent = <&mpic>; 40 interrupt-parent = <&mpic>;
41 41
42 aliases {
43 phy_sgmii_10 = &phy_sgmii_10;
44 phy_sgmii_11 = &phy_sgmii_11;
45 phy_sgmii_1c = &phy_sgmii_1c;
46 phy_sgmii_1d = &phy_sgmii_1d;
47 };
48
42 ifc: localbus@ffe124000 { 49 ifc: localbus@ffe124000 {
43 reg = <0xf 0xfe124000 0 0x2000>; 50 reg = <0xf 0xfe124000 0 0x2000>;
44 ranges = <0 0 0xf 0xe8000000 0x08000000 51 ranges = <0 0 0xf 0xe8000000 0x08000000
@@ -135,7 +142,7 @@
135 flash@0 { 142 flash@0 {
136 #address-cells = <1>; 143 #address-cells = <1>;
137 #size-cells = <1>; 144 #size-cells = <1>;
138 compatible = "sst,sst25wf040"; 145 compatible = "sst,sst25wf040", "jedec,spi-nor";
139 reg = <0>; 146 reg = <0>;
140 spi-max-frequency = <40000000>; /* input clock */ 147 spi-max-frequency = <40000000>; /* input clock */
141 }; 148 };
@@ -210,6 +217,47 @@
210 phy_type = "ulpi"; 217 phy_type = "ulpi";
211 }; 218 };
212 219
220 fman@400000 {
221 ethernet@e0000 {
222 phy-handle = <&phy_sgmii_10>;
223 phy-connection-type = "sgmii";
224 };
225
226 ethernet@e2000 {
227 phy-handle = <&phy_sgmii_11>;
228 phy-connection-type = "sgmii";
229 };
230
231 ethernet@e4000 {
232 phy-handle = <&phy_sgmii_1c>;
233 phy-connection-type = "sgmii";
234 };
235
236 ethernet@e6000 {
237 phy-handle = <&phy_sgmii_1d>;
238 phy-connection-type = "sgmii";
239 };
240
241 mdio@fc000 {
242 phy_sgmii_10: ethernet-phy@10 {
243 reg = <0x10>;
244 };
245
246 phy_sgmii_11: ethernet-phy@11 {
247 reg = <0x11>;
248 };
249
250 phy_sgmii_1c: ethernet-phy@1c {
251 reg = <0x1c>;
252 status = "disabled";
253 };
254
255 phy_sgmii_1d: ethernet-phy@1d {
256 reg = <0x1d>;
257 status = "disabled";
258 };
259 };
260 };
213 }; 261 };
214 262
215 pci0: pcie@ffe200000 { 263 pci0: pcie@ffe200000 {
@@ -226,7 +274,6 @@
226 0 0x00010000>; 274 0 0x00010000>;
227 }; 275 };
228 }; 276 };
229
230}; 277};
231 278
232/include/ "b4si-post.dtsi" 279/include/ "b4si-post.dtsi"
diff --git a/arch/powerpc/boot/dts/fsl/bsc9131rdb.dtsi b/arch/powerpc/boot/dts/fsl/bsc9131rdb.dtsi
index f4d96d277ed5..53f8b956340f 100644
--- a/arch/powerpc/boot/dts/fsl/bsc9131rdb.dtsi
+++ b/arch/powerpc/boot/dts/fsl/bsc9131rdb.dtsi
@@ -53,7 +53,7 @@
53 flash@0 { 53 flash@0 {
54 #address-cells = <1>; 54 #address-cells = <1>;
55 #size-cells = <1>; 55 #size-cells = <1>;
56 compatible = "spansion,s25sl12801"; 56 compatible = "spansion,s25sl12801", "jedec,spi-nor";
57 reg = <0>; 57 reg = <0>;
58 spi-max-frequency = <50000000>; 58 spi-max-frequency = <50000000>;
59 59
diff --git a/arch/powerpc/boot/dts/fsl/bsc9132qds.dtsi b/arch/powerpc/boot/dts/fsl/bsc9132qds.dtsi
index 7a13bf2aa439..fead484a8180 100644
--- a/arch/powerpc/boot/dts/fsl/bsc9132qds.dtsi
+++ b/arch/powerpc/boot/dts/fsl/bsc9132qds.dtsi
@@ -55,7 +55,7 @@
55 flash@0 { 55 flash@0 {
56 #address-cells = <1>; 56 #address-cells = <1>;
57 #size-cells = <1>; 57 #size-cells = <1>;
58 compatible = "spansion,s25sl12801"; 58 compatible = "spansion,s25sl12801", "jedec,spi-nor";
59 reg = <0>; 59 reg = <0>;
60 spi-max-frequency = <30000000>; 60 spi-max-frequency = <30000000>;
61 }; 61 };
diff --git a/arch/powerpc/boot/dts/fsl/c293pcie.dts b/arch/powerpc/boot/dts/fsl/c293pcie.dts
index 53ab4db9e79c..66709788429d 100644
--- a/arch/powerpc/boot/dts/fsl/c293pcie.dts
+++ b/arch/powerpc/boot/dts/fsl/c293pcie.dts
@@ -167,7 +167,7 @@
167 flash@0 { 167 flash@0 {
168 #address-cells = <1>; 168 #address-cells = <1>;
169 #size-cells = <1>; 169 #size-cells = <1>;
170 compatible = "spansion,s25sl12801"; 170 compatible = "spansion,s25sl12801", "jedec,spi-nor";
171 reg = <0>; 171 reg = <0>;
172 spi-max-frequency = <50000000>; 172 spi-max-frequency = <50000000>;
173 173
diff --git a/arch/powerpc/boot/dts/fsl/gef_ppc9a.dts b/arch/powerpc/boot/dts/fsl/gef_ppc9a.dts
new file mode 100644
index 000000000000..0424fc2bd0e0
--- /dev/null
+++ b/arch/powerpc/boot/dts/fsl/gef_ppc9a.dts
@@ -0,0 +1,216 @@
1/*
2 * GE PPC9A Device Tree Source
3 *
4 * Copyright 2008 GE Intelligent Platforms Embedded Systems, Inc.
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your
9 * option) any later version.
10 *
11 * Based on: SBS CM6 Device Tree Source
12 * Copyright 2007 SBS Technologies GmbH & Co. KG
13 * And: mpc8641_hpcn.dts (MPC8641 HPCN Device Tree Source)
14 * Copyright 2006 Freescale Semiconductor Inc.
15 */
16
17/*
18 * Compiled with dtc -I dts -O dtb -o gef_ppc9a.dtb gef_ppc9a.dts
19 */
20
21/include/ "mpc8641si-pre.dtsi"
22
23/ {
24 model = "GEF_PPC9A";
25 compatible = "gef,ppc9a";
26
27 memory {
28 device_type = "memory";
29 reg = <0x0 0x40000000>; // set by uboot
30 };
31
32 lbc: localbus@fef05000 {
33 reg = <0xfef05000 0x1000>;
34
35 ranges = <0 0 0xff000000 0x01000000 // 16MB Boot flash
36 1 0 0xe8000000 0x08000000 // Paged Flash 0
37 2 0 0xe0000000 0x08000000 // Paged Flash 1
38 3 0 0xfc100000 0x00020000 // NVRAM
39 4 0 0xfc000000 0x00008000 // FPGA
40 5 0 0xfc008000 0x00008000 // AFIX FPGA
41 6 0 0xfd000000 0x00800000 // IO FPGA (8-bit)
42 7 0 0xfd800000 0x00800000>; // IO FPGA (32-bit)
43
44 /* flash@0,0 is a mirror of part of the memory in flash@1,0
45 flash@0,0 {
46 compatible = "gef,ppc9a-firmware-mirror", "cfi-flash";
47 reg = <0x0 0x0 0x1000000>;
48 bank-width = <4>;
49 device-width = <2>;
50 #address-cells = <1>;
51 #size-cells = <1>;
52 partition@0 {
53 label = "firmware";
54 reg = <0x0 0x1000000>;
55 read-only;
56 };
57 };
58 */
59
60 flash@1,0 {
61 compatible = "gef,ppc9a-paged-flash", "cfi-flash";
62 reg = <0x1 0x0 0x8000000>;
63 bank-width = <4>;
64 device-width = <2>;
65 #address-cells = <1>;
66 #size-cells = <1>;
67 partition@0 {
68 label = "user";
69 reg = <0x0 0x7800000>;
70 };
71 partition@7800000 {
72 label = "firmware";
73 reg = <0x7800000 0x800000>;
74 read-only;
75 };
76 };
77
78 nvram@3,0 {
79 device_type = "nvram";
80 compatible = "simtek,stk14ca8";
81 reg = <0x3 0x0 0x20000>;
82 };
83
84 fpga@4,0 {
85 compatible = "gef,ppc9a-fpga-regs";
86 reg = <0x4 0x0 0x40>;
87 };
88
89 wdt@4,2000 {
90 compatible = "gef,ppc9a-fpga-wdt", "gef,fpga-wdt-1.00",
91 "gef,fpga-wdt";
92 reg = <0x4 0x2000 0x8>;
93 interrupts = <0x1a 0x4>;
94 interrupt-parent = <&gef_pic>;
95 };
96 /* Second watchdog available, driver currently supports one.
97 wdt@4,2010 {
98 compatible = "gef,ppc9a-fpga-wdt", "gef,fpga-wdt-1.00",
99 "gef,fpga-wdt";
100 reg = <0x4 0x2010 0x8>;
101 interrupts = <0x1b 0x4>;
102 interrupt-parent = <&gef_pic>;
103 };
104 */
105 gef_pic: pic@4,4000 {
106 #interrupt-cells = <1>;
107 interrupt-controller;
108 compatible = "gef,ppc9a-fpga-pic", "gef,fpga-pic-1.00";
109 reg = <0x4 0x4000 0x20>;
110 interrupts = <0x8 0x9 0 0>;
111
112 };
113 gef_gpio: gpio@7,14000 {
114 #gpio-cells = <2>;
115 compatible = "gef,ppc9a-gpio", "gef,sbc610-gpio";
116 reg = <0x7 0x14000 0x24>;
117 gpio-controller;
118 };
119 };
120
121 soc: soc@fef00000 {
122 ranges = <0x0 0xfef00000 0x00100000>;
123
124 i2c@3000 {
125 hwmon@48 {
126 compatible = "national,lm92";
127 reg = <0x48>;
128 };
129
130 hwmon@4c {
131 compatible = "adi,adt7461";
132 reg = <0x4c>;
133 };
134
135 rtc@51 {
136 compatible = "epson,rx8581";
137 reg = <0x00000051>;
138 };
139
140 eti@6b {
141 compatible = "dallas,ds1682";
142 reg = <0x6b>;
143 };
144 };
145
146 enet0: ethernet@24000 {
147 tbi-handle = <&tbi0>;
148 phy-handle = <&phy0>;
149 phy-connection-type = "gmii";
150 };
151
152 mdio@24520 {
153 phy0: ethernet-phy@0 {
154 interrupt-parent = <&gef_pic>;
155 interrupts = <0x9 0x4>;
156 reg = <1>;
157 };
158 phy2: ethernet-phy@2 {
159 interrupt-parent = <&gef_pic>;
160 interrupts = <0x8 0x4>;
161 reg = <3>;
162 };
163 tbi0: tbi-phy@11 {
164 reg = <0x11>;
165 device_type = "tbi-phy";
166 };
167 };
168
169 enet1: ethernet@26000 {
170 tbi-handle = <&tbi2>;
171 phy-handle = <&phy2>;
172 phy-connection-type = "gmii";
173 };
174
175 mdio@26520 {
176 tbi2: tbi-phy@11 {
177 reg = <0x11>;
178 device_type = "tbi-phy";
179 };
180 };
181
182 enet2: ethernet@25000 {
183 status = "disabled";
184 };
185
186 mdio@25520 {
187 status = "disabled";
188 };
189
190 enet3: ethernet@27000 {
191 status = "disabled";
192 };
193
194 mdio@27520 {
195 status = "disabled";
196 };
197 };
198
199 pci0: pcie@fef08000 {
200 reg = <0xfef08000 0x1000>;
201 ranges = <0x02000000 0x0 0x80000000 0x80000000 0x0 0x40000000
202 0x01000000 0x0 0x00000000 0xfe000000 0x0 0x00400000>;
203
204 pcie@0 {
205 ranges = <0x02000000 0x0 0x80000000
206 0x02000000 0x0 0x80000000
207 0x0 0x40000000
208
209 0x01000000 0x0 0x00000000
210 0x01000000 0x0 0x00000000
211 0x0 0x00400000>;
212 };
213 };
214};
215
216/include/ "mpc8641si-post.dtsi"
diff --git a/arch/powerpc/boot/dts/fsl/gef_sbc310.dts b/arch/powerpc/boot/dts/fsl/gef_sbc310.dts
new file mode 100644
index 000000000000..84b3d38f880e
--- /dev/null
+++ b/arch/powerpc/boot/dts/fsl/gef_sbc310.dts
@@ -0,0 +1,260 @@
1/*
2 * GE SBC310 Device Tree Source
3 *
4 * Copyright 2008 GE Intelligent Platforms Embedded Systems, Inc.
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your
9 * option) any later version.
10 *
11 * Based on: SBS CM6 Device Tree Source
12 * Copyright 2007 SBS Technologies GmbH & Co. KG
13 * And: mpc8641_hpcn.dts (MPC8641 HPCN Device Tree Source)
14 * Copyright 2006 Freescale Semiconductor Inc.
15 */
16
17/*
18 * Compiled with dtc -I dts -O dtb -o gef_sbc310.dtb gef_sbc310.dts
19 */
20
21/include/ "mpc8641si-pre.dtsi"
22
23/ {
24 model = "GEF_SBC310";
25 compatible = "gef,sbc310";
26
27 aliases {
28 pci1 = &pci1;
29 };
30
31 memory {
32 device_type = "memory";
33 reg = <0x0 0x40000000>; // set by uboot
34 };
35
36 lbc: localbus@fef05000 {
37 reg = <0xfef05000 0x1000>;
38
39 ranges = <0 0 0xff000000 0x01000000 // 16MB Boot flash
40 1 0 0xe0000000 0x08000000 // Paged Flash 0
41 2 0 0xe8000000 0x08000000 // Paged Flash 1
42 3 0 0xfc100000 0x00020000 // NVRAM
43 4 0 0xfc000000 0x00010000>; // FPGA
44
45 /* flash@0,0 is a mirror of part of the memory in flash@1,0
46 flash@0,0 {
47 compatible = "gef,sbc310-firmware-mirror", "cfi-flash";
48 reg = <0x0 0x0 0x01000000>;
49 bank-width = <2>;
50 device-width = <2>;
51 #address-cells = <1>;
52 #size-cells = <1>;
53 partition@0 {
54 label = "firmware";
55 reg = <0x0 0x01000000>;
56 read-only;
57 };
58 };
59 */
60
61 flash@1,0 {
62 compatible = "gef,sbc310-paged-flash", "cfi-flash";
63 reg = <0x1 0x0 0x8000000>;
64 bank-width = <2>;
65 device-width = <2>;
66 #address-cells = <1>;
67 #size-cells = <1>;
68 partition@0 {
69 label = "user";
70 reg = <0x0 0x7800000>;
71 };
72 partition@7800000 {
73 label = "firmware";
74 reg = <0x7800000 0x800000>;
75 read-only;
76 };
77 };
78
79 nvram@3,0 {
80 device_type = "nvram";
81 compatible = "simtek,stk14ca8";
82 reg = <0x3 0x0 0x20000>;
83 };
84
85 fpga@4,0 {
86 compatible = "gef,fpga-regs";
87 reg = <0x4 0x0 0x40>;
88 };
89
90 wdt@4,2000 {
91 compatible = "gef,sbc310-fpga-wdt", "gef,fpga-wdt-1.00",
92 "gef,fpga-wdt";
93 reg = <0x4 0x2000 0x8>;
94 interrupts = <0x1a 0x4>;
95 interrupt-parent = <&gef_pic>;
96 };
97/*
98 wdt@4,2010 {
99 compatible = "gef,sbc310-fpga-wdt", "gef,fpga-wdt-1.00",
100 "gef,fpga-wdt";
101 reg = <0x4 0x2010 0x8>;
102 interrupts = <0x1b 0x4>;
103 interrupt-parent = <&gef_pic>;
104 };
105*/
106 gef_pic: pic@4,4000 {
107 #interrupt-cells = <1>;
108 interrupt-controller;
109 compatible = "gef,sbc310-fpga-pic", "gef,fpga-pic";
110 reg = <0x4 0x4000 0x20>;
111 interrupts = <0x8 0x9 0 0>;
112
113 };
114 gef_gpio: gpio@4,8000 {
115 #gpio-cells = <2>;
116 compatible = "gef,sbc310-gpio";
117 reg = <0x4 0x8000 0x24>;
118 gpio-controller;
119 };
120 };
121
122 soc: soc@fef00000 {
123 ranges = <0x0 0xfef00000 0x00100000>;
124
125 i2c@3000 {
126 rtc@51 {
127 compatible = "epson,rx8581";
128 reg = <0x00000051>;
129 };
130 };
131
132 i2c@3100 {
133 hwmon@48 {
134 compatible = "national,lm92";
135 reg = <0x48>;
136 };
137
138 hwmon@4c {
139 compatible = "adi,adt7461";
140 reg = <0x4c>;
141 };
142
143 eti@6b {
144 compatible = "dallas,ds1682";
145 reg = <0x6b>;
146 };
147 };
148
149 enet0: ethernet@24000 {
150 tbi-handle = <&tbi0>;
151 phy-handle = <&phy0>;
152 phy-connection-type = "gmii";
153 };
154
155 mdio@24520 {
156 phy0: ethernet-phy@0 {
157 interrupt-parent = <&gef_pic>;
158 interrupts = <0x9 0x4>;
159 reg = <1>;
160 };
161 phy2: ethernet-phy@2 {
162 interrupt-parent = <&gef_pic>;
163 interrupts = <0x8 0x4>;
164 reg = <3>;
165 };
166 tbi0: tbi-phy@11 {
167 reg = <0x11>;
168 device_type = "tbi-phy";
169 };
170 };
171
172 enet1: ethernet@26000 {
173 tbi-handle = <&tbi2>;
174 phy-handle = <&phy2>;
175 phy-connection-type = "gmii";
176 };
177
178 mdio@26520 {
179 tbi2: tbi-phy@11 {
180 reg = <0x11>;
181 device_type = "tbi-phy";
182 };
183 };
184
185 enet2: ethernet@25000 {
186 status = "disabled";
187 };
188
189 mdio@25520 {
190 status = "disabled";
191 };
192
193 enet3: ethernet@27000 {
194 status = "disabled";
195 };
196
197 mdio@27520 {
198 status = "disabled";
199 };
200 };
201
202 pci0: pcie@fef08000 {
203 reg = <0xfef08000 0x1000>;
204 ranges = <0x02000000 0x0 0x80000000 0x80000000 0x0 0x40000000
205 0x01000000 0x0 0x00000000 0xfe000000 0x0 0x00400000>;
206 interrupt-map-mask = <0xff00 0x0 0x0 0x7>;
207 interrupt-map = <
208 0x0000 0x0 0x0 0x1 &mpic 0x0 0x2
209 0x0000 0x0 0x0 0x2 &mpic 0x1 0x2
210 0x0000 0x0 0x0 0x3 &mpic 0x2 0x2
211 0x0000 0x0 0x0 0x4 &mpic 0x3 0x2
212 >;
213
214 pcie@0 {
215 ranges = <0x02000000 0x0 0x80000000
216 0x02000000 0x0 0x80000000
217 0x0 0x40000000
218
219 0x01000000 0x0 0x00000000
220 0x01000000 0x0 0x00000000
221 0x0 0x00400000>;
222 };
223 };
224
225 pci1: pcie@fef09000 {
226 compatible = "fsl,mpc8641-pcie";
227 device_type = "pci";
228 #size-cells = <2>;
229 #address-cells = <3>;
230 reg = <0xfef09000 0x1000>;
231 bus-range = <0x0 0xff>;
232 ranges = <0x02000000 0x0 0xc0000000 0xc0000000 0x0 0x20000000
233 0x01000000 0x0 0x00000000 0xfe400000 0x0 0x00400000>;
234 clock-frequency = <100000000>;
235 interrupts = <0x19 0x2 0 0>;
236 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
237 interrupt-map = <
238 0x0000 0x0 0x0 0x1 &mpic 0x4 0x2
239 0x0000 0x0 0x0 0x2 &mpic 0x5 0x2
240 0x0000 0x0 0x0 0x3 &mpic 0x6 0x2
241 0x0000 0x0 0x0 0x4 &mpic 0x7 0x2
242 >;
243
244 pcie@0 {
245 reg = <0 0 0 0 0>;
246 #size-cells = <2>;
247 #address-cells = <3>;
248 device_type = "pci";
249 ranges = <0x02000000 0x0 0xc0000000
250 0x02000000 0x0 0xc0000000
251 0x0 0x20000000
252
253 0x01000000 0x0 0x00000000
254 0x01000000 0x0 0x00000000
255 0x0 0x00400000>;
256 };
257 };
258};
259
260/include/ "mpc8641si-post.dtsi"
diff --git a/arch/powerpc/boot/dts/fsl/gef_sbc610.dts b/arch/powerpc/boot/dts/fsl/gef_sbc610.dts
new file mode 100644
index 000000000000..974446acce23
--- /dev/null
+++ b/arch/powerpc/boot/dts/fsl/gef_sbc610.dts
@@ -0,0 +1,214 @@
1/*
2 * GE SBC610 Device Tree Source
3 *
4 * Copyright 2008 GE Intelligent Platforms Embedded Systems, Inc.
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your
9 * option) any later version.
10 *
11 * Based on: SBS CM6 Device Tree Source
12 * Copyright 2007 SBS Technologies GmbH & Co. KG
13 * And: mpc8641_hpcn.dts (MPC8641 HPCN Device Tree Source)
14 * Copyright 2006 Freescale Semiconductor Inc.
15 */
16
17/*
18 * Compiled with dtc -I dts -O dtb -o gef_sbc610.dtb gef_sbc610.dts
19 */
20
21/include/ "mpc8641si-pre.dtsi"
22
23/ {
24 model = "GEF_SBC610";
25 compatible = "gef,sbc610";
26
27 memory {
28 device_type = "memory";
29 reg = <0x0 0x40000000>; // set by uboot
30 };
31
32 lbc: localbus@fef05000 {
33 reg = <0xfef05000 0x1000>;
34
35 ranges = <0 0 0xff000000 0x01000000 // 16MB Boot flash
36 1 0 0xe8000000 0x08000000 // Paged Flash 0
37 2 0 0xe0000000 0x08000000 // Paged Flash 1
38 3 0 0xfc100000 0x00020000 // NVRAM
39 4 0 0xfc000000 0x00008000 // FPGA
40 5 0 0xfc008000 0x00008000 // AFIX FPGA
41 6 0 0xfd000000 0x00800000 // IO FPGA (8-bit)
42 7 0 0xfd800000 0x00800000>; // IO FPGA (32-bit)
43
44 /* flash@0,0 is a mirror of part of the memory in flash@1,0
45 flash@0,0 {
46 compatible = "gef,sbc610-firmware-mirror", "cfi-flash";
47 reg = <0x0 0x0 0x1000000>;
48 bank-width = <4>;
49 device-width = <2>;
50 #address-cells = <1>;
51 #size-cells = <1>;
52 partition@0 {
53 label = "firmware";
54 reg = <0x0 0x1000000>;
55 read-only;
56 };
57 };
58 */
59
60 flash@1,0 {
61 compatible = "gef,sbc610-paged-flash", "cfi-flash";
62 reg = <0x1 0x0 0x8000000>;
63 bank-width = <4>;
64 device-width = <2>;
65 #address-cells = <1>;
66 #size-cells = <1>;
67 partition@0 {
68 label = "user";
69 reg = <0x0 0x7800000>;
70 };
71 partition@7800000 {
72 label = "firmware";
73 reg = <0x7800000 0x800000>;
74 read-only;
75 };
76 };
77
78 nvram@3,0 {
79 device_type = "nvram";
80 compatible = "simtek,stk14ca8";
81 reg = <0x3 0x0 0x20000>;
82 };
83
84 fpga@4,0 {
85 compatible = "gef,fpga-regs";
86 reg = <0x4 0x0 0x40>;
87 };
88
89 wdt@4,2000 {
90 compatible = "gef,fpga-wdt";
91 reg = <0x4 0x2000 0x8>;
92 interrupts = <0x1a 0x4>;
93 interrupt-parent = <&gef_pic>;
94 };
95 /* Second watchdog available, driver currently supports one.
96 wdt@4,2010 {
97 compatible = "gef,fpga-wdt";
98 reg = <0x4 0x2010 0x8>;
99 interrupts = <0x1b 0x4>;
100 interrupt-parent = <&gef_pic>;
101 };
102 */
103 gef_pic: pic@4,4000 {
104 #interrupt-cells = <1>;
105 interrupt-controller;
106 compatible = "gef,fpga-pic";
107 reg = <0x4 0x4000 0x20>;
108 interrupts = <0x8 0x9 0 0>;
109
110 };
111 gef_gpio: gpio@7,14000 {
112 #gpio-cells = <2>;
113 compatible = "gef,sbc610-gpio";
114 reg = <0x7 0x14000 0x24>;
115 gpio-controller;
116 };
117 };
118
119 soc: soc@fef00000 {
120 ranges = <0x0 0xfef00000 0x00100000>;
121
122 i2c@3000 {
123 hwmon@48 {
124 compatible = "national,lm92";
125 reg = <0x48>;
126 };
127
128 hwmon@4c {
129 compatible = "adi,adt7461";
130 reg = <0x4c>;
131 };
132
133 rtc@51 {
134 compatible = "epson,rx8581";
135 reg = <0x00000051>;
136 };
137
138 eti@6b {
139 compatible = "dallas,ds1682";
140 reg = <0x6b>;
141 };
142 };
143
144 enet0: ethernet@24000 {
145 tbi-handle = <&tbi0>;
146 phy-handle = <&phy0>;
147 phy-connection-type = "gmii";
148 };
149
150 mdio@24520 {
151 phy0: ethernet-phy@0 {
152 interrupt-parent = <&gef_pic>;
153 interrupts = <0x9 0x4>;
154 reg = <1>;
155 };
156 phy2: ethernet-phy@2 {
157 interrupt-parent = <&gef_pic>;
158 interrupts = <0x8 0x4>;
159 reg = <3>;
160 };
161 tbi0: tbi-phy@11 {
162 reg = <0x11>;
163 device_type = "tbi-phy";
164 };
165 };
166
167 enet1: ethernet@26000 {
168 tbi-handle = <&tbi2>;
169 phy-handle = <&phy2>;
170 phy-connection-type = "gmii";
171 };
172
173 mdio@26520 {
174 tbi2: tbi-phy@11 {
175 reg = <0x11>;
176 device_type = "tbi-phy";
177 };
178 };
179
180 enet2: ethernet@25000 {
181 status = "disabled";
182 };
183
184 mdio@25520 {
185 status = "disabled";
186 };
187
188 enet3: ethernet@27000 {
189 status = "disabled";
190 };
191
192 mdio@27520 {
193 status = "disabled";
194 };
195 };
196
197 pci0: pcie@fef08000 {
198 reg = <0xfef08000 0x1000>;
199 ranges = <0x02000000 0x0 0x80000000 0x80000000 0x0 0x40000000
200 0x01000000 0x0 0x00000000 0xfe000000 0x0 0x00400000>;
201
202 pcie@0 {
203 ranges = <0x02000000 0x0 0x80000000
204 0x02000000 0x0 0x80000000
205 0x0 0x40000000
206
207 0x01000000 0x0 0x00000000
208 0x01000000 0x0 0x00000000
209 0x0 0x00400000>;
210 };
211 };
212};
213
214/include/ "mpc8641si-post.dtsi"
diff --git a/arch/powerpc/boot/dts/fsl/kmcoge4.dts b/arch/powerpc/boot/dts/fsl/kmcoge4.dts
index 6858ec9ef295..2d4b64fcee88 100644
--- a/arch/powerpc/boot/dts/fsl/kmcoge4.dts
+++ b/arch/powerpc/boot/dts/fsl/kmcoge4.dts
@@ -63,7 +63,7 @@
63 flash@0 { 63 flash@0 {
64 #address-cells = <1>; 64 #address-cells = <1>;
65 #size-cells = <1>; 65 #size-cells = <1>;
66 compatible = "spansion,s25fl256s1"; 66 compatible = "spansion,s25fl256s1", "jedec,spi-nor";
67 reg = <0>; 67 reg = <0>;
68 spi-max-frequency = <20000000>; /* input clock */ 68 spi-max-frequency = <20000000>; /* input clock */
69 }; 69 };
@@ -77,7 +77,7 @@
77 flash@2 { 77 flash@2 {
78 #address-cells = <1>; 78 #address-cells = <1>;
79 #size-cells = <1>; 79 #size-cells = <1>;
80 compatible = "micron,m25p32"; 80 compatible = "micron,m25p32", "jedec,spi-nor";
81 reg = <2>; 81 reg = <2>;
82 spi-max-frequency = <15000000>; 82 spi-max-frequency = <15000000>;
83 }; 83 };
diff --git a/arch/powerpc/boot/dts/fsl/mpc8536ds.dtsi b/arch/powerpc/boot/dts/fsl/mpc8536ds.dtsi
index 937ad7e46119..a925fe49a73e 100644
--- a/arch/powerpc/boot/dts/fsl/mpc8536ds.dtsi
+++ b/arch/powerpc/boot/dts/fsl/mpc8536ds.dtsi
@@ -142,7 +142,7 @@
142 flash@0 { 142 flash@0 {
143 #address-cells = <1>; 143 #address-cells = <1>;
144 #size-cells = <1>; 144 #size-cells = <1>;
145 compatible = "spansion,s25sl12801"; 145 compatible = "spansion,s25sl12801", "jedec,spi-nor";
146 reg = <0>; 146 reg = <0>;
147 spi-max-frequency = <40000000>; 147 spi-max-frequency = <40000000>;
148 partition@u-boot { 148 partition@u-boot {
@@ -166,17 +166,17 @@
166 }; 166 };
167 }; 167 };
168 flash@1 { 168 flash@1 {
169 compatible = "spansion,s25sl12801"; 169 compatible = "spansion,s25sl12801", "jedec,spi-nor";
170 reg = <1>; 170 reg = <1>;
171 spi-max-frequency = <40000000>; 171 spi-max-frequency = <40000000>;
172 }; 172 };
173 flash@2 { 173 flash@2 {
174 compatible = "spansion,s25sl12801"; 174 compatible = "spansion,s25sl12801", "jedec,spi-nor";
175 reg = <2>; 175 reg = <2>;
176 spi-max-frequency = <40000000>; 176 spi-max-frequency = <40000000>;
177 }; 177 };
178 flash@3 { 178 flash@3 {
179 compatible = "spansion,s25sl12801"; 179 compatible = "spansion,s25sl12801", "jedec,spi-nor";
180 reg = <3>; 180 reg = <3>;
181 spi-max-frequency = <40000000>; 181 spi-max-frequency = <40000000>;
182 }; 182 };
diff --git a/arch/powerpc/boot/dts/mpc8641_hpcn.dts b/arch/powerpc/boot/dts/fsl/mpc8641_hpcn.dts
index 1c03060dd0b8..554001f2e96a 100644
--- a/arch/powerpc/boot/dts/mpc8641_hpcn.dts
+++ b/arch/powerpc/boot/dts/fsl/mpc8641_hpcn.dts
@@ -9,65 +9,23 @@
9 * option) any later version. 9 * option) any later version.
10 */ 10 */
11 11
12/dts-v1/; 12/include/ "mpc8641si-pre.dtsi"
13 13
14/ { 14/ {
15 model = "MPC8641HPCN"; 15 model = "MPC8641HPCN";
16 compatible = "fsl,mpc8641hpcn"; 16 compatible = "fsl,mpc8641hpcn";
17 #address-cells = <1>;
18 #size-cells = <1>;
19 17
20 aliases { 18 aliases {
21 ethernet0 = &enet0;
22 ethernet1 = &enet1;
23 ethernet2 = &enet2;
24 ethernet3 = &enet3;
25 serial0 = &serial0;
26 serial1 = &serial1;
27 pci0 = &pci0;
28 pci1 = &pci1; 19 pci1 = &pci1;
29 }; 20 };
30 21
31 cpus {
32 #address-cells = <1>;
33 #size-cells = <0>;
34
35 PowerPC,8641@0 {
36 device_type = "cpu";
37 reg = <0>;
38 d-cache-line-size = <32>;
39 i-cache-line-size = <32>;
40 d-cache-size = <32768>; // L1
41 i-cache-size = <32768>; // L1
42 timebase-frequency = <0>; // From uboot
43 bus-frequency = <0>; // From uboot
44 clock-frequency = <0>; // From uboot
45 };
46 PowerPC,8641@1 {
47 device_type = "cpu";
48 reg = <1>;
49 d-cache-line-size = <32>;
50 i-cache-line-size = <32>;
51 d-cache-size = <32768>;
52 i-cache-size = <32768>;
53 timebase-frequency = <0>; // From uboot
54 bus-frequency = <0>; // From uboot
55 clock-frequency = <0>; // From uboot
56 };
57 };
58
59 memory { 22 memory {
60 device_type = "memory"; 23 device_type = "memory";
61 reg = <0x00000000 0x40000000>; // 1G at 0x0 24 reg = <0x00000000 0x40000000>; // 1G at 0x0
62 }; 25 };
63 26
64 localbus@ffe05000 { 27 lbc: localbus@ffe05000 {
65 #address-cells = <2>;
66 #size-cells = <1>;
67 compatible = "fsl,mpc8641-localbus", "simple-bus";
68 reg = <0xffe05000 0x1000>; 28 reg = <0xffe05000 0x1000>;
69 interrupts = <19 2>;
70 interrupt-parent = <&mpic>;
71 29
72 ranges = <0 0 0xef800000 0x00800000 30 ranges = <0 0 0xef800000 0x00800000
73 2 0 0xffdf8000 0x00008000 31 2 0 0xffdf8000 0x00008000
@@ -101,253 +59,75 @@
101 }; 59 };
102 }; 60 };
103 61
104 soc8641@ffe00000 { 62 soc: soc8641@ffe00000 {
105 #address-cells = <1>;
106 #size-cells = <1>;
107 device_type = "soc";
108 compatible = "simple-bus";
109 ranges = <0x00000000 0xffe00000 0x00100000>; 63 ranges = <0x00000000 0xffe00000 0x00100000>;
110 bus-frequency = <0>;
111
112 mcm-law@0 {
113 compatible = "fsl,mcm-law";
114 reg = <0x0 0x1000>;
115 fsl,num-laws = <10>;
116 };
117
118 mcm@1000 {
119 compatible = "fsl,mpc8641-mcm", "fsl,mcm";
120 reg = <0x1000 0x1000>;
121 interrupts = <17 2>;
122 interrupt-parent = <&mpic>;
123 };
124 64
125 i2c@3000 { 65 enet0: ethernet@24000 {
126 #address-cells = <1>; 66 tbi-handle = <&tbi0>;
127 #size-cells = <0>; 67 phy-handle = <&phy0>;
128 cell-index = <0>; 68 phy-connection-type = "rgmii-id";
129 compatible = "fsl-i2c";
130 reg = <0x3000 0x100>;
131 interrupts = <43 2>;
132 interrupt-parent = <&mpic>;
133 dfsrr;
134 };
135
136 i2c@3100 {
137 #address-cells = <1>;
138 #size-cells = <0>;
139 cell-index = <1>;
140 compatible = "fsl-i2c";
141 reg = <0x3100 0x100>;
142 interrupts = <43 2>;
143 interrupt-parent = <&mpic>;
144 dfsrr;
145 }; 69 };
146 70
147 dma@21300 { 71 mdio@24520 {
148 #address-cells = <1>; 72 phy0: ethernet-phy@0 {
149 #size-cells = <1>; 73 interrupts = <10 1 0 0>;
150 compatible = "fsl,mpc8641-dma", "fsl,eloplus-dma"; 74 reg = <0>;
151 reg = <0x21300 0x4>;
152 ranges = <0x0 0x21100 0x200>;
153 cell-index = <0>;
154 dma-channel@0 {
155 compatible = "fsl,mpc8641-dma-channel",
156 "fsl,eloplus-dma-channel";
157 reg = <0x0 0x80>;
158 cell-index = <0>;
159 interrupt-parent = <&mpic>;
160 interrupts = <20 2>;
161 }; 75 };
162 dma-channel@80 { 76 phy1: ethernet-phy@1 {
163 compatible = "fsl,mpc8641-dma-channel", 77 interrupts = <10 1 0 0>;
164 "fsl,eloplus-dma-channel"; 78 reg = <1>;
165 reg = <0x80 0x80>;
166 cell-index = <1>;
167 interrupt-parent = <&mpic>;
168 interrupts = <21 2>;
169 }; 79 };
170 dma-channel@100 { 80 phy2: ethernet-phy@2 {
171 compatible = "fsl,mpc8641-dma-channel", 81 interrupts = <10 1 0 0>;
172 "fsl,eloplus-dma-channel"; 82 reg = <2>;
173 reg = <0x100 0x80>;
174 cell-index = <2>;
175 interrupt-parent = <&mpic>;
176 interrupts = <22 2>;
177 }; 83 };
178 dma-channel@180 { 84 phy3: ethernet-phy@3 {
179 compatible = "fsl,mpc8641-dma-channel", 85 interrupts = <10 1 0 0>;
180 "fsl,eloplus-dma-channel"; 86 reg = <3>;
181 reg = <0x180 0x80>;
182 cell-index = <3>;
183 interrupt-parent = <&mpic>;
184 interrupts = <23 2>;
185 }; 87 };
186 }; 88 tbi0: tbi-phy@11 {
187 89 reg = <0x11>;
188 enet0: ethernet@24000 { 90 device_type = "tbi-phy";
189 #address-cells = <1>;
190 #size-cells = <1>;
191 cell-index = <0>;
192 device_type = "network";
193 model = "TSEC";
194 compatible = "gianfar";
195 reg = <0x24000 0x1000>;
196 ranges = <0x0 0x24000 0x1000>;
197 local-mac-address = [ 00 00 00 00 00 00 ];
198 interrupts = <29 2 30 2 34 2>;
199 interrupt-parent = <&mpic>;
200 tbi-handle = <&tbi0>;
201 phy-handle = <&phy0>;
202 phy-connection-type = "rgmii-id";
203
204 mdio@520 {
205 #address-cells = <1>;
206 #size-cells = <0>;
207 compatible = "fsl,gianfar-mdio";
208 reg = <0x520 0x20>;
209
210 phy0: ethernet-phy@0 {
211 interrupt-parent = <&mpic>;
212 interrupts = <10 1>;
213 reg = <0>;
214 };
215 phy1: ethernet-phy@1 {
216 interrupt-parent = <&mpic>;
217 interrupts = <10 1>;
218 reg = <1>;
219 };
220 phy2: ethernet-phy@2 {
221 interrupt-parent = <&mpic>;
222 interrupts = <10 1>;
223 reg = <2>;
224 };
225 phy3: ethernet-phy@3 {
226 interrupt-parent = <&mpic>;
227 interrupts = <10 1>;
228 reg = <3>;
229 };
230 tbi0: tbi-phy@11 {
231 reg = <0x11>;
232 device_type = "tbi-phy";
233 };
234 }; 91 };
235 }; 92 };
236 93
237 enet1: ethernet@25000 { 94 enet1: ethernet@25000 {
238 #address-cells = <1>;
239 #size-cells = <1>;
240 cell-index = <1>;
241 device_type = "network";
242 model = "TSEC";
243 compatible = "gianfar";
244 reg = <0x25000 0x1000>;
245 ranges = <0x0 0x25000 0x1000>;
246 local-mac-address = [ 00 00 00 00 00 00 ];
247 interrupts = <35 2 36 2 40 2>;
248 interrupt-parent = <&mpic>;
249 tbi-handle = <&tbi1>; 95 tbi-handle = <&tbi1>;
250 phy-handle = <&phy1>; 96 phy-handle = <&phy1>;
251 phy-connection-type = "rgmii-id"; 97 phy-connection-type = "rgmii-id";
98 };
252 99
253 mdio@520 { 100 mdio@25520 {
254 #address-cells = <1>; 101 tbi1: tbi-phy@11 {
255 #size-cells = <0>; 102 reg = <0x11>;
256 compatible = "fsl,gianfar-tbi"; 103 device_type = "tbi-phy";
257 reg = <0x520 0x20>;
258
259 tbi1: tbi-phy@11 {
260 reg = <0x11>;
261 device_type = "tbi-phy";
262 };
263 }; 104 };
264 }; 105 };
265 106
266 enet2: ethernet@26000 { 107 enet2: ethernet@26000 {
267 #address-cells = <1>;
268 #size-cells = <1>;
269 cell-index = <2>;
270 device_type = "network";
271 model = "TSEC";
272 compatible = "gianfar";
273 reg = <0x26000 0x1000>;
274 ranges = <0x0 0x26000 0x1000>;
275 local-mac-address = [ 00 00 00 00 00 00 ];
276 interrupts = <31 2 32 2 33 2>;
277 interrupt-parent = <&mpic>;
278 tbi-handle = <&tbi2>; 108 tbi-handle = <&tbi2>;
279 phy-handle = <&phy2>; 109 phy-handle = <&phy2>;
280 phy-connection-type = "rgmii-id"; 110 phy-connection-type = "rgmii-id";
111 };
281 112
282 mdio@520 { 113 mdio@26520 {
283 #address-cells = <1>; 114 tbi2: tbi-phy@11 {
284 #size-cells = <0>; 115 reg = <0x11>;
285 compatible = "fsl,gianfar-tbi"; 116 device_type = "tbi-phy";
286 reg = <0x520 0x20>;
287
288 tbi2: tbi-phy@11 {
289 reg = <0x11>;
290 device_type = "tbi-phy";
291 };
292 }; 117 };
293 }; 118 };
294 119
295 enet3: ethernet@27000 { 120 enet3: ethernet@27000 {
296 #address-cells = <1>;
297 #size-cells = <1>;
298 cell-index = <3>;
299 device_type = "network";
300 model = "TSEC";
301 compatible = "gianfar";
302 reg = <0x27000 0x1000>;
303 ranges = <0x0 0x27000 0x1000>;
304 local-mac-address = [ 00 00 00 00 00 00 ];
305 interrupts = <37 2 38 2 39 2>;
306 interrupt-parent = <&mpic>;
307 tbi-handle = <&tbi3>; 121 tbi-handle = <&tbi3>;
308 phy-handle = <&phy3>; 122 phy-handle = <&phy3>;
309 phy-connection-type = "rgmii-id"; 123 phy-connection-type = "rgmii-id";
310
311 mdio@520 {
312 #address-cells = <1>;
313 #size-cells = <0>;
314 compatible = "fsl,gianfar-tbi";
315 reg = <0x520 0x20>;
316
317 tbi3: tbi-phy@11 {
318 reg = <0x11>;
319 device_type = "tbi-phy";
320 };
321 };
322 }; 124 };
323 125
324 serial0: serial@4500 { 126 mdio@27520 {
325 cell-index = <0>; 127 tbi3: tbi-phy@11 {
326 device_type = "serial"; 128 reg = <0x11>;
327 compatible = "fsl,ns16550", "ns16550"; 129 device_type = "tbi-phy";
328 reg = <0x4500 0x100>; 130 };
329 clock-frequency = <0>;
330 interrupts = <42 2>;
331 interrupt-parent = <&mpic>;
332 };
333
334 serial1: serial@4600 {
335 cell-index = <1>;
336 device_type = "serial";
337 compatible = "fsl,ns16550", "ns16550";
338 reg = <0x4600 0x100>;
339 clock-frequency = <0>;
340 interrupts = <28 2>;
341 interrupt-parent = <&mpic>;
342 };
343
344 mpic: pic@40000 {
345 interrupt-controller;
346 #address-cells = <0>;
347 #interrupt-cells = <2>;
348 reg = <0x40000 0x40000>;
349 compatible = "chrp,open-pic";
350 device_type = "open-pic";
351 }; 131 };
352 132
353 rmu: rmu@d3000 { 133 rmu: rmu@d3000 {
@@ -361,50 +141,35 @@
361 compatible = "fsl,srio-msg-unit"; 141 compatible = "fsl,srio-msg-unit";
362 reg = <0x0 0x100>; 142 reg = <0x0 0x100>;
363 interrupts = < 143 interrupts = <
364 53 2 /* msg1_tx_irq */ 144 53 2 0 0 /* msg1_tx_irq */
365 54 2>;/* msg1_rx_irq */ 145 54 2 0 0>;/* msg1_rx_irq */
366 }; 146 };
367 message-unit@100 { 147 message-unit@100 {
368 compatible = "fsl,srio-msg-unit"; 148 compatible = "fsl,srio-msg-unit";
369 reg = <0x100 0x100>; 149 reg = <0x100 0x100>;
370 interrupts = < 150 interrupts = <
371 55 2 /* msg2_tx_irq */ 151 55 2 0 0 /* msg2_tx_irq */
372 56 2>;/* msg2_rx_irq */ 152 56 2 0 0>;/* msg2_rx_irq */
373 }; 153 };
374 doorbell-unit@400 { 154 doorbell-unit@400 {
375 compatible = "fsl,srio-dbell-unit"; 155 compatible = "fsl,srio-dbell-unit";
376 reg = <0x400 0x80>; 156 reg = <0x400 0x80>;
377 interrupts = < 157 interrupts = <
378 49 2 /* bell_outb_irq */ 158 49 2 0 0 /* bell_outb_irq */
379 50 2>;/* bell_inb_irq */ 159 50 2 0 0>;/* bell_inb_irq */
380 }; 160 };
381 port-write-unit@4e0 { 161 port-write-unit@4e0 {
382 compatible = "fsl,srio-port-write-unit"; 162 compatible = "fsl,srio-port-write-unit";
383 reg = <0x4e0 0x20>; 163 reg = <0x4e0 0x20>;
384 interrupts = <48 2>; 164 interrupts = <48 2 0 0>;
385 }; 165 };
386 }; 166 };
387
388 global-utilities@e0000 {
389 compatible = "fsl,mpc8641-guts";
390 reg = <0xe0000 0x1000>;
391 fsl,has-rstcr;
392 };
393 }; 167 };
394 168
395 pci0: pcie@ffe08000 { 169 pci0: pcie@ffe08000 {
396 compatible = "fsl,mpc8641-pcie";
397 device_type = "pci";
398 #interrupt-cells = <1>;
399 #size-cells = <2>;
400 #address-cells = <3>;
401 reg = <0xffe08000 0x1000>; 170 reg = <0xffe08000 0x1000>;
402 bus-range = <0x0 0xff>;
403 ranges = <0x02000000 0x0 0x80000000 0x80000000 0x0 0x20000000 171 ranges = <0x02000000 0x0 0x80000000 0x80000000 0x0 0x20000000
404 0x01000000 0x0 0x00000000 0xffc00000 0x0 0x00010000>; 172 0x01000000 0x0 0x00000000 0xffc00000 0x0 0x00010000>;
405 clock-frequency = <33333333>;
406 interrupt-parent = <&mpic>;
407 interrupts = <24 2>;
408 interrupt-map-mask = <0xff00 0 0 7>; 173 interrupt-map-mask = <0xff00 0 0 7>;
409 interrupt-map = < 174 interrupt-map = <
410 /* IDSEL 0x11 func 0 - PCI slot 1 */ 175 /* IDSEL 0x11 func 0 - PCI slot 1 */
@@ -522,10 +287,6 @@
522 >; 287 >;
523 288
524 pcie@0 { 289 pcie@0 {
525 reg = <0 0 0 0 0>;
526 #size-cells = <2>;
527 #address-cells = <3>;
528 device_type = "pci";
529 ranges = <0x02000000 0x0 0x80000000 290 ranges = <0x02000000 0x0 0x80000000
530 0x02000000 0x0 0x80000000 291 0x02000000 0x0 0x80000000
531 0x0 0x20000000 292 0x0 0x20000000
@@ -545,7 +306,6 @@
545 0x0 0x00010000>; 306 0x0 0x00010000>;
546 isa@1e { 307 isa@1e {
547 device_type = "isa"; 308 device_type = "isa";
548 #interrupt-cells = <2>;
549 #size-cells = <1>; 309 #size-cells = <1>;
550 #address-cells = <2>; 310 #address-cells = <2>;
551 reg = <0xf000 0 0 0 0>; 311 reg = <0xf000 0 0 0 0>;
@@ -562,8 +322,7 @@
562 #address-cells = <0>; 322 #address-cells = <0>;
563 #interrupt-cells = <2>; 323 #interrupt-cells = <2>;
564 compatible = "chrp,iic"; 324 compatible = "chrp,iic";
565 interrupts = <9 2>; 325 interrupts = <9 2 0 0>;
566 interrupt-parent = <&mpic>;
567 }; 326 };
568 327
569 i8042@60 { 328 i8042@60 {
@@ -571,8 +330,7 @@
571 #address-cells = <1>; 330 #address-cells = <1>;
572 reg = <1 0x60 1 1 0x64 1>; 331 reg = <1 0x60 1 1 0x64 1>;
573 interrupts = <1 3 12 3>; 332 interrupts = <1 3 12 3>;
574 interrupt-parent = 333 interrupt-parent = <&i8259>;
575 <&i8259>;
576 334
577 keyboard@0 { 335 keyboard@0 {
578 reg = <0>; 336 reg = <0>;
@@ -603,16 +361,14 @@
603 pci1: pcie@ffe09000 { 361 pci1: pcie@ffe09000 {
604 compatible = "fsl,mpc8641-pcie"; 362 compatible = "fsl,mpc8641-pcie";
605 device_type = "pci"; 363 device_type = "pci";
606 #interrupt-cells = <1>;
607 #size-cells = <2>; 364 #size-cells = <2>;
608 #address-cells = <3>; 365 #address-cells = <3>;
609 reg = <0xffe09000 0x1000>; 366 reg = <0xffe09000 0x1000>;
610 bus-range = <0 0xff>; 367 bus-range = <0 0xff>;
611 ranges = <0x02000000 0x0 0xa0000000 0xa0000000 0x0 0x20000000 368 ranges = <0x02000000 0x0 0xa0000000 0xa0000000 0x0 0x20000000
612 0x01000000 0x0 0x00000000 0xffc10000 0x0 0x00010000>; 369 0x01000000 0x0 0x00000000 0xffc10000 0x0 0x00010000>;
613 clock-frequency = <33333333>; 370 clock-frequency = <100000000>;
614 interrupt-parent = <&mpic>; 371 interrupts = <25 2 0 0>;
615 interrupts = <25 2>;
616 interrupt-map-mask = <0xf800 0 0 7>; 372 interrupt-map-mask = <0xf800 0 0 7>;
617 interrupt-map = < 373 interrupt-map = <
618 /* IDSEL 0x0 */ 374 /* IDSEL 0x0 */
@@ -644,8 +400,7 @@
644 rapidio@ffec0000 { 400 rapidio@ffec0000 {
645 reg = <0xffec0000 0x11000>; 401 reg = <0xffec0000 0x11000>;
646 compatible = "fsl,srio"; 402 compatible = "fsl,srio";
647 interrupt-parent = <&mpic>; 403 interrupts = <48 2 0 0>;
648 interrupts = <48 2>;
649 #address-cells = <2>; 404 #address-cells = <2>;
650 #size-cells = <2>; 405 #size-cells = <2>;
651 fsl,srio-rmu-handle = <&rmu>; 406 fsl,srio-rmu-handle = <&rmu>;
@@ -661,3 +416,5 @@
661*/ 416*/
662 417
663}; 418};
419
420/include/ "mpc8641si-post.dtsi"
diff --git a/arch/powerpc/boot/dts/mpc8641_hpcn_36b.dts b/arch/powerpc/boot/dts/fsl/mpc8641_hpcn_36b.dts
index bb575e28042a..fec58671a6d6 100644
--- a/arch/powerpc/boot/dts/mpc8641_hpcn_36b.dts
+++ b/arch/powerpc/boot/dts/fsl/mpc8641_hpcn_36b.dts
@@ -9,7 +9,7 @@
9 * option) any later version. 9 * option) any later version.
10 */ 10 */
11 11
12/dts-v1/; 12/include/ "mpc8641si-pre.dtsi"
13 13
14/ { 14/ {
15 model = "MPC8641HPCN"; 15 model = "MPC8641HPCN";
@@ -18,56 +18,16 @@
18 #size-cells = <2>; 18 #size-cells = <2>;
19 19
20 aliases { 20 aliases {
21 ethernet0 = &enet0;
22 ethernet1 = &enet1;
23 ethernet2 = &enet2;
24 ethernet3 = &enet3;
25 serial0 = &serial0;
26 serial1 = &serial1;
27 pci0 = &pci0;
28 pci1 = &pci1; 21 pci1 = &pci1;
29 }; 22 };
30 23
31 cpus {
32 #address-cells = <1>;
33 #size-cells = <0>;
34
35 PowerPC,8641@0 {
36 device_type = "cpu";
37 reg = <0>;
38 d-cache-line-size = <32>; // 32 bytes
39 i-cache-line-size = <32>; // 32 bytes
40 d-cache-size = <32768>; // L1, 32K
41 i-cache-size = <32768>; // L1, 32K
42 timebase-frequency = <0>; // 33 MHz, from uboot
43 bus-frequency = <0>; // From uboot
44 clock-frequency = <0>; // From uboot
45 };
46 PowerPC,8641@1 {
47 device_type = "cpu";
48 reg = <1>;
49 d-cache-line-size = <32>; // 32 bytes
50 i-cache-line-size = <32>; // 32 bytes
51 d-cache-size = <32768>; // L1, 32K
52 i-cache-size = <32768>; // L1, 32K
53 timebase-frequency = <0>; // 33 MHz, from uboot
54 bus-frequency = <0>; // From uboot
55 clock-frequency = <0>; // From uboot
56 };
57 };
58
59 memory { 24 memory {
60 device_type = "memory"; 25 device_type = "memory";
61 reg = <0x0 0x00000000 0x0 0x40000000>; // 1G at 0x0 26 reg = <0x0 0x00000000 0x0 0x40000000>; // 1G at 0x0
62 }; 27 };
63 28
64 localbus@fffe05000 { 29 lbc: localbus@fffe05000 {
65 #address-cells = <2>;
66 #size-cells = <1>;
67 compatible = "fsl,mpc8641-localbus", "simple-bus";
68 reg = <0x0f 0xffe05000 0x0 0x1000>; 30 reg = <0x0f 0xffe05000 0x0 0x1000>;
69 interrupts = <19 2>;
70 interrupt-parent = <&mpic>;
71 31
72 ranges = <0 0 0xf 0xef800000 0x00800000 32 ranges = <0 0 0xf 0xef800000 0x00800000
73 2 0 0xf 0xffdf8000 0x00008000 33 2 0 0xf 0xffdf8000 0x00008000
@@ -101,276 +61,82 @@
101 }; 61 };
102 }; 62 };
103 63
104 soc8641@fffe00000 { 64 soc: soc8641@fffe00000 {
105 #address-cells = <1>;
106 #size-cells = <1>;
107 device_type = "soc";
108 compatible = "simple-bus";
109 ranges = <0x00000000 0x0f 0xffe00000 0x00100000>; 65 ranges = <0x00000000 0x0f 0xffe00000 0x00100000>;
110 bus-frequency = <0>;
111 66
112 mcm-law@0 { 67 enet0: ethernet@24000 {
113 compatible = "fsl,mcm-law"; 68 tbi-handle = <&tbi0>;
114 reg = <0x0 0x1000>; 69 phy-handle = <&phy0>;
115 fsl,num-laws = <10>; 70 phy-connection-type = "rgmii-id";
116 };
117
118 mcm@1000 {
119 compatible = "fsl,mpc8641-mcm", "fsl,mcm";
120 reg = <0x1000 0x1000>;
121 interrupts = <17 2>;
122 interrupt-parent = <&mpic>;
123 };
124
125 i2c@3000 {
126 #address-cells = <1>;
127 #size-cells = <0>;
128 cell-index = <0>;
129 compatible = "fsl-i2c";
130 reg = <0x3000 0x100>;
131 interrupts = <43 2>;
132 interrupt-parent = <&mpic>;
133 dfsrr;
134 };
135
136 i2c@3100 {
137 #address-cells = <1>;
138 #size-cells = <0>;
139 cell-index = <1>;
140 compatible = "fsl-i2c";
141 reg = <0x3100 0x100>;
142 interrupts = <43 2>;
143 interrupt-parent = <&mpic>;
144 dfsrr;
145 }; 71 };
146 72
147 dma@21300 { 73 mdio@24520 {
148 #address-cells = <1>; 74 phy0: ethernet-phy@0 {
149 #size-cells = <1>; 75 interrupts = <10 1 0 0>;
150 compatible = "fsl,mpc8641-dma", "fsl,eloplus-dma"; 76 reg = <0>;
151 reg = <0x21300 0x4>;
152 ranges = <0x0 0x21100 0x200>;
153 cell-index = <0>;
154 dma-channel@0 {
155 compatible = "fsl,mpc8641-dma-channel",
156 "fsl,eloplus-dma-channel";
157 reg = <0x0 0x80>;
158 cell-index = <0>;
159 interrupt-parent = <&mpic>;
160 interrupts = <20 2>;
161 }; 77 };
162 dma-channel@80 { 78 phy1: ethernet-phy@1 {
163 compatible = "fsl,mpc8641-dma-channel", 79 interrupts = <10 1 0 0>;
164 "fsl,eloplus-dma-channel"; 80 reg = <1>;
165 reg = <0x80 0x80>;
166 cell-index = <1>;
167 interrupt-parent = <&mpic>;
168 interrupts = <21 2>;
169 }; 81 };
170 dma-channel@100 { 82 phy2: ethernet-phy@2 {
171 compatible = "fsl,mpc8641-dma-channel", 83 interrupts = <10 1 0 0>;
172 "fsl,eloplus-dma-channel"; 84 reg = <2>;
173 reg = <0x100 0x80>;
174 cell-index = <2>;
175 interrupt-parent = <&mpic>;
176 interrupts = <22 2>;
177 }; 85 };
178 dma-channel@180 { 86 phy3: ethernet-phy@3 {
179 compatible = "fsl,mpc8641-dma-channel", 87 interrupts = <10 1 0 0>;
180 "fsl,eloplus-dma-channel"; 88 reg = <3>;
181 reg = <0x180 0x80>;
182 cell-index = <3>;
183 interrupt-parent = <&mpic>;
184 interrupts = <23 2>;
185 }; 89 };
186 }; 90 tbi0: tbi-phy@11 {
187 91 reg = <0x11>;
188 enet0: ethernet@24000 { 92 device_type = "tbi-phy";
189 #address-cells = <1>;
190 #size-cells = <1>;
191 cell-index = <0>;
192 device_type = "network";
193 model = "TSEC";
194 compatible = "gianfar";
195 reg = <0x24000 0x1000>;
196 ranges = <0x0 0x24000 0x1000>;
197 local-mac-address = [ 00 00 00 00 00 00 ];
198 interrupts = <29 2 30 2 34 2>;
199 interrupt-parent = <&mpic>;
200 tbi-handle = <&tbi0>;
201 phy-handle = <&phy0>;
202 phy-connection-type = "rgmii-id";
203
204 mdio@520 {
205 #address-cells = <1>;
206 #size-cells = <0>;
207 compatible = "fsl,gianfar-mdio";
208 reg = <0x520 0x20>;
209
210 phy0: ethernet-phy@0 {
211 interrupt-parent = <&mpic>;
212 interrupts = <10 1>;
213 reg = <0>;
214 };
215 phy1: ethernet-phy@1 {
216 interrupt-parent = <&mpic>;
217 interrupts = <10 1>;
218 reg = <1>;
219 };
220 phy2: ethernet-phy@2 {
221 interrupt-parent = <&mpic>;
222 interrupts = <10 1>;
223 reg = <2>;
224 };
225 phy3: ethernet-phy@3 {
226 interrupt-parent = <&mpic>;
227 interrupts = <10 1>;
228 reg = <3>;
229 };
230 tbi0: tbi-phy@11 {
231 reg = <0x11>;
232 device_type = "tbi-phy";
233 };
234 }; 93 };
235 }; 94 };
236 95
237 enet1: ethernet@25000 { 96 enet1: ethernet@25000 {
238 #address-cells = <1>;
239 #size-cells = <1>;
240 cell-index = <1>;
241 device_type = "network";
242 model = "TSEC";
243 compatible = "gianfar";
244 reg = <0x25000 0x1000>;
245 ranges = <0x0 0x25000 0x1000>;
246 local-mac-address = [ 00 00 00 00 00 00 ];
247 interrupts = <35 2 36 2 40 2>;
248 interrupt-parent = <&mpic>;
249 tbi-handle = <&tbi1>; 97 tbi-handle = <&tbi1>;
250 phy-handle = <&phy1>; 98 phy-handle = <&phy1>;
251 phy-connection-type = "rgmii-id"; 99 phy-connection-type = "rgmii-id";
100 };
252 101
253 mdio@520 { 102 mdio@25520 {
254 #address-cells = <1>; 103 tbi1: tbi-phy@11 {
255 #size-cells = <0>; 104 reg = <0x11>;
256 compatible = "fsl,gianfar-tbi"; 105 device_type = "tbi-phy";
257 reg = <0x520 0x20>;
258
259 tbi1: tbi-phy@11 {
260 reg = <0x11>;
261 device_type = "tbi-phy";
262 };
263 }; 106 };
264 }; 107 };
265 108
266 enet2: ethernet@26000 { 109 enet2: ethernet@26000 {
267 #address-cells = <1>;
268 #size-cells = <1>;
269 cell-index = <2>;
270 device_type = "network";
271 model = "TSEC";
272 compatible = "gianfar";
273 reg = <0x26000 0x1000>;
274 ranges = <0x0 0x26000 0x1000>;
275 local-mac-address = [ 00 00 00 00 00 00 ];
276 interrupts = <31 2 32 2 33 2>;
277 interrupt-parent = <&mpic>;
278 tbi-handle = <&tbi2>; 110 tbi-handle = <&tbi2>;
279 phy-handle = <&phy2>; 111 phy-handle = <&phy2>;
280 phy-connection-type = "rgmii-id"; 112 phy-connection-type = "rgmii-id";
113 };
281 114
282 mdio@520 { 115 mdio@26520 {
283 #address-cells = <1>; 116 tbi2: tbi-phy@11 {
284 #size-cells = <0>; 117 reg = <0x11>;
285 compatible = "fsl,gianfar-tbi"; 118 device_type = "tbi-phy";
286 reg = <0x520 0x20>;
287
288 tbi2: tbi-phy@11 {
289 reg = <0x11>;
290 device_type = "tbi-phy";
291 };
292 }; 119 };
293 }; 120 };
294 121
295 enet3: ethernet@27000 { 122 enet3: ethernet@27000 {
296 #address-cells = <1>;
297 #size-cells = <1>;
298 cell-index = <3>;
299 device_type = "network";
300 model = "TSEC";
301 compatible = "gianfar";
302 reg = <0x27000 0x1000>;
303 ranges = <0x0 0x27000 0x1000>;
304 local-mac-address = [ 00 00 00 00 00 00 ];
305 interrupts = <37 2 38 2 39 2>;
306 interrupt-parent = <&mpic>;
307 tbi-handle = <&tbi3>; 123 tbi-handle = <&tbi3>;
308 phy-handle = <&phy3>; 124 phy-handle = <&phy3>;
309 phy-connection-type = "rgmii-id"; 125 phy-connection-type = "rgmii-id";
310
311 mdio@520 {
312 #address-cells = <1>;
313 #size-cells = <0>;
314 compatible = "fsl,gianfar-tbi";
315 reg = <0x520 0x20>;
316
317 tbi3: tbi-phy@11 {
318 reg = <0x11>;
319 device_type = "tbi-phy";
320 };
321 };
322 }; 126 };
323 127
324 serial0: serial@4500 { 128 mdio@27520 {
325 cell-index = <0>; 129 tbi3: tbi-phy@11 {
326 device_type = "serial"; 130 reg = <0x11>;
327 compatible = "fsl,ns16550", "ns16550"; 131 device_type = "tbi-phy";
328 reg = <0x4500 0x100>; 132 };
329 clock-frequency = <0>;
330 interrupts = <42 2>;
331 interrupt-parent = <&mpic>;
332 };
333
334 serial1: serial@4600 {
335 cell-index = <1>;
336 device_type = "serial";
337 compatible = "fsl,ns16550", "ns16550";
338 reg = <0x4600 0x100>;
339 clock-frequency = <0>;
340 interrupts = <28 2>;
341 interrupt-parent = <&mpic>;
342 };
343
344 mpic: pic@40000 {
345 interrupt-controller;
346 #address-cells = <0>;
347 #interrupt-cells = <2>;
348 reg = <0x40000 0x40000>;
349 compatible = "chrp,open-pic";
350 device_type = "open-pic";
351 };
352
353 global-utilities@e0000 {
354 compatible = "fsl,mpc8641-guts";
355 reg = <0xe0000 0x1000>;
356 fsl,has-rstcr;
357 }; 133 };
358 }; 134 };
359 135
360 pci0: pcie@fffe08000 { 136 pci0: pcie@fffe08000 {
361 cell-index = <0>;
362 compatible = "fsl,mpc8641-pcie";
363 device_type = "pci";
364 #interrupt-cells = <1>;
365 #size-cells = <2>;
366 #address-cells = <3>;
367 reg = <0x0f 0xffe08000 0x0 0x1000>; 137 reg = <0x0f 0xffe08000 0x0 0x1000>;
368 bus-range = <0x0 0xff>;
369 ranges = <0x02000000 0x0 0xe0000000 0x0c 0x00000000 0x0 0x20000000 138 ranges = <0x02000000 0x0 0xe0000000 0x0c 0x00000000 0x0 0x20000000
370 0x01000000 0x0 0x00000000 0x0f 0xffc00000 0x0 0x00010000>; 139 0x01000000 0x0 0x00000000 0x0f 0xffc00000 0x0 0x00010000>;
371 clock-frequency = <33333333>;
372 interrupt-parent = <&mpic>;
373 interrupts = <24 2>;
374 interrupt-map-mask = <0xff00 0 0 7>; 140 interrupt-map-mask = <0xff00 0 0 7>;
375 interrupt-map = < 141 interrupt-map = <
376 /* IDSEL 0x11 func 0 - PCI slot 1 */ 142 /* IDSEL 0x11 func 0 - PCI slot 1 */
@@ -488,10 +254,6 @@
488 >; 254 >;
489 255
490 pcie@0 { 256 pcie@0 {
491 reg = <0 0 0 0 0>;
492 #size-cells = <2>;
493 #address-cells = <3>;
494 device_type = "pci";
495 ranges = <0x02000000 0x0 0xe0000000 257 ranges = <0x02000000 0x0 0xe0000000
496 0x02000000 0x0 0xe0000000 258 0x02000000 0x0 0xe0000000
497 0x0 0x20000000 259 0x0 0x20000000
@@ -511,7 +273,6 @@
511 0x0 0x00010000>; 273 0x0 0x00010000>;
512 isa@1e { 274 isa@1e {
513 device_type = "isa"; 275 device_type = "isa";
514 #interrupt-cells = <2>;
515 #size-cells = <1>; 276 #size-cells = <1>;
516 #address-cells = <2>; 277 #address-cells = <2>;
517 reg = <0xf000 0 0 0 0>; 278 reg = <0xf000 0 0 0 0>;
@@ -528,8 +289,7 @@
528 #address-cells = <0>; 289 #address-cells = <0>;
529 #interrupt-cells = <2>; 290 #interrupt-cells = <2>;
530 compatible = "chrp,iic"; 291 compatible = "chrp,iic";
531 interrupts = <9 2>; 292 interrupts = <9 2 0 0>;
532 interrupt-parent = <&mpic>;
533 }; 293 };
534 294
535 i8042@60 { 295 i8042@60 {
@@ -537,8 +297,7 @@
537 #address-cells = <1>; 297 #address-cells = <1>;
538 reg = <1 0x60 1 1 0x64 1>; 298 reg = <1 0x60 1 1 0x64 1>;
539 interrupts = <1 3 12 3>; 299 interrupts = <1 3 12 3>;
540 interrupt-parent = 300 interrupt-parent = <&i8259>;
541 <&i8259>;
542 301
543 keyboard@0 { 302 keyboard@0 {
544 reg = <0>; 303 reg = <0>;
@@ -567,19 +326,16 @@
567 }; 326 };
568 327
569 pci1: pcie@fffe09000 { 328 pci1: pcie@fffe09000 {
570 cell-index = <1>;
571 compatible = "fsl,mpc8641-pcie"; 329 compatible = "fsl,mpc8641-pcie";
572 device_type = "pci"; 330 device_type = "pci";
573 #interrupt-cells = <1>;
574 #size-cells = <2>; 331 #size-cells = <2>;
575 #address-cells = <3>; 332 #address-cells = <3>;
576 reg = <0x0f 0xffe09000 0x0 0x1000>; 333 reg = <0x0f 0xffe09000 0x0 0x1000>;
577 bus-range = <0x0 0xff>; 334 bus-range = <0x0 0xff>;
578 ranges = <0x02000000 0x0 0xe0000000 0x0c 0x20000000 0x0 0x20000000 335 ranges = <0x02000000 0x0 0xe0000000 0x0c 0x20000000 0x0 0x20000000
579 0x01000000 0x0 0x00000000 0x0f 0xffc10000 0x0 0x00010000>; 336 0x01000000 0x0 0x00000000 0x0f 0xffc10000 0x0 0x00010000>;
580 clock-frequency = <33333333>; 337 clock-frequency = <100000000>;
581 interrupt-parent = <&mpic>; 338 interrupts = <25 2 0 0>;
582 interrupts = <25 2>;
583 interrupt-map-mask = <0xf800 0 0 7>; 339 interrupt-map-mask = <0xf800 0 0 7>;
584 interrupt-map = < 340 interrupt-map = <
585 /* IDSEL 0x0 */ 341 /* IDSEL 0x0 */
@@ -603,3 +359,5 @@
603 }; 359 };
604 }; 360 };
605}; 361};
362
363/include/ "mpc8641si-post.dtsi"
diff --git a/arch/powerpc/boot/dts/fsl/mpc8641si-post.dtsi b/arch/powerpc/boot/dts/fsl/mpc8641si-post.dtsi
new file mode 100644
index 000000000000..70889d8e8850
--- /dev/null
+++ b/arch/powerpc/boot/dts/fsl/mpc8641si-post.dtsi
@@ -0,0 +1,120 @@
1/*
2 * MPC8641 Silicon/SoC Device Tree Source (post include)
3 *
4 * Copyright 2016 Elettra-Sincrotrone Trieste S.C.p.A.
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your
9 * option) any later version.
10 *
11 */
12
13&lbc {
14 #address-cells = <2>;
15 #size-cells = <1>;
16 compatible = "fsl,mpc8641-localbus", "simple-bus";
17 interrupts = <19 2 0 0>;
18};
19
20&soc {
21 #address-cells = <1>;
22 #size-cells = <1>;
23 device_type = "soc";
24 compatible = "fsl,mpc8641-soc", "simple-bus";
25 bus-frequency = <0>;
26
27 mcm-law@0 {
28 compatible = "fsl,mcm-law";
29 reg = <0x0 0x1000>;
30 fsl,num-laws = <10>;
31 };
32
33 mcm@1000 {
34 compatible = "fsl,mpc8641-mcm", "fsl,mcm";
35 reg = <0x1000 0x1000>;
36 interrupts = <17 2 0 0>;
37 };
38
39/include/ "pq3-i2c-0.dtsi"
40/include/ "pq3-i2c-1.dtsi"
41/include/ "pq3-duart-0.dtsi"
42 serial@4600 {
43 interrupts = <28 2 0 0>;
44 };
45/include/ "pq3-dma-0.dtsi"
46 dma@21300 {
47 compatible = "fsl,mpc8641-dma", "fsl,eloplus-dma";
48 };
49 dma-channel@0 {
50 compatible = "fsl,mpc8641-dma-channel", "fsl,eloplus-dma-channel";
51 };
52 dma-channel@80 {
53 compatible = "fsl,mpc8641-dma-channel", "fsl,eloplus-dma-channel";
54 };
55 dma-channel@100 {
56 compatible = "fsl,mpc8641-dma-channel", "fsl,eloplus-dma-channel";
57 };
58 dma-channel@180 {
59 compatible = "fsl,mpc8641-dma-channel", "fsl,eloplus-dma-channel";
60 };
61
62/include/ "pq3-etsec1-0.dtsi"
63 ethernet@24000 {
64 model = "TSEC";
65 };
66/include/ "pq3-etsec1-1.dtsi"
67 ethernet@25000 {
68 model = "TSEC";
69 };
70/include/ "pq3-etsec1-2.dtsi"
71 ethernet@26000 {
72 model = "TSEC";
73 };
74/include/ "pq3-etsec1-3.dtsi"
75 ethernet@27000 {
76 model = "TSEC";
77 };
78
79/include/ "qoriq-mpic.dtsi"
80 msi@41600 {
81 compatible = "fsl,mpc8641-msi", "fsl,mpic-msi";
82 };
83 msi@41800 {
84 compatible = "fsl,mpc8641-msi", "fsl,mpic-msi";
85 };
86 msi@41a00 {
87 compatible = "fsl,mpc8641-msi", "fsl,mpic-msi";
88 };
89
90 global-utilities@e0000 {
91 compatible = "fsl,mpc8641-guts";
92 reg = <0xe0000 0x1000>;
93 fsl,has-rstcr;
94 };
95};
96
97&pci0 {
98 compatible = "fsl,mpc8641-pcie";
99 device_type = "pci";
100 #size-cells = <2>;
101 #address-cells = <3>;
102 bus-range = <0x0 0xff>;
103 clock-frequency = <100000000>;
104 interrupts = <24 2 0 0>;
105 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
106
107 interrupt-map = <
108 0x0000 0x0 0x0 0x1 &mpic 0x0 0x1
109 0x0000 0x0 0x0 0x2 &mpic 0x1 0x1
110 0x0000 0x0 0x0 0x3 &mpic 0x2 0x1
111 0x0000 0x0 0x0 0x4 &mpic 0x3 0x1
112 >;
113
114 pcie@0 {
115 reg = <0 0 0 0 0>;
116 #size-cells = <2>;
117 #address-cells = <3>;
118 device_type = "pci";
119 };
120};
diff --git a/arch/powerpc/boot/dts/fsl/mpc8641si-pre.dtsi b/arch/powerpc/boot/dts/fsl/mpc8641si-pre.dtsi
new file mode 100644
index 000000000000..9e03328561d3
--- /dev/null
+++ b/arch/powerpc/boot/dts/fsl/mpc8641si-pre.dtsi
@@ -0,0 +1,58 @@
1/*
2 * MPC8641 Silicon/SoC Device Tree Source (pre include)
3 *
4 * Copyright 2016 Elettra-Sincrotrone Trieste S.C.p.A.
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your
9 * option) any later version.
10 *
11 */
12
13/dts-v1/;
14
15/ {
16 #address-cells = <1>;
17 #size-cells = <1>;
18 interrupt-parent = <&mpic>;
19
20 aliases {
21 ethernet0 = &enet0;
22 ethernet1 = &enet1;
23 ethernet2 = &enet2;
24 ethernet3 = &enet3;
25 serial0 = &serial0;
26 serial1 = &serial1;
27 pci0 = &pci0;
28 };
29
30 cpus {
31 #address-cells = <1>;
32 #size-cells = <0>;
33
34 PowerPC,8641@0 {
35 device_type = "cpu";
36 reg = <0>;
37 d-cache-line-size = <32>;
38 i-cache-line-size = <32>;
39 d-cache-size = <32768>;
40 i-cache-size = <32768>;
41 timebase-frequency = <0>;
42 bus-frequency = <0>;
43 clock-frequency = <0>;
44 };
45
46 PowerPC,8641@1 {
47 device_type = "cpu";
48 reg = <1>;
49 d-cache-line-size = <32>;
50 i-cache-line-size = <32>;
51 d-cache-size = <32768>;
52 i-cache-size = <32768>;
53 timebase-frequency = <0>;
54 bus-frequency = <0>;
55 clock-frequency = <0>;
56 };
57 };
58};
diff --git a/arch/powerpc/boot/dts/fsl/mvme2500.dts b/arch/powerpc/boot/dts/fsl/mvme2500.dts
index c7bc1a0c7194..69559e970e99 100644
--- a/arch/powerpc/boot/dts/fsl/mvme2500.dts
+++ b/arch/powerpc/boot/dts/fsl/mvme2500.dts
@@ -70,12 +70,12 @@
70 fsl,espi-num-chipselects = <2>; 70 fsl,espi-num-chipselects = <2>;
71 71
72 flash@0 { 72 flash@0 {
73 compatible = "atmel,at25df641"; 73 compatible = "atmel,at25df641", "jedec,spi-nor";
74 reg = <0>; 74 reg = <0>;
75 spi-max-frequency = <10000000>; 75 spi-max-frequency = <10000000>;
76 }; 76 };
77 flash@1 { 77 flash@1 {
78 compatible = "atmel,at25df641"; 78 compatible = "atmel,at25df641", "jedec,spi-nor";
79 reg = <1>; 79 reg = <1>;
80 spi-max-frequency = <10000000>; 80 spi-max-frequency = <10000000>;
81 }; 81 };
diff --git a/arch/powerpc/boot/dts/fsl/p1010rdb.dtsi b/arch/powerpc/boot/dts/fsl/p1010rdb.dtsi
index 14b629505038..a8e4ba070104 100644
--- a/arch/powerpc/boot/dts/fsl/p1010rdb.dtsi
+++ b/arch/powerpc/boot/dts/fsl/p1010rdb.dtsi
@@ -110,7 +110,7 @@
110 flash@0 { 110 flash@0 {
111 #address-cells = <1>; 111 #address-cells = <1>;
112 #size-cells = <1>; 112 #size-cells = <1>;
113 compatible = "spansion,s25sl12801"; 113 compatible = "spansion,s25sl12801", "jedec,spi-nor";
114 reg = <0>; 114 reg = <0>;
115 spi-max-frequency = <40000000>; 115 spi-max-frequency = <40000000>;
116 116
diff --git a/arch/powerpc/boot/dts/fsl/p1020rdb-pc.dtsi b/arch/powerpc/boot/dts/fsl/p1020rdb-pc.dtsi
index c952cd37cf6d..25f81eea60e0 100644
--- a/arch/powerpc/boot/dts/fsl/p1020rdb-pc.dtsi
+++ b/arch/powerpc/boot/dts/fsl/p1020rdb-pc.dtsi
@@ -151,7 +151,7 @@
151 flash@0 { 151 flash@0 {
152 #address-cells = <1>; 152 #address-cells = <1>;
153 #size-cells = <1>; 153 #size-cells = <1>;
154 compatible = "spansion,s25sl12801"; 154 compatible = "spansion,s25sl12801", "jedec,spi-nor";
155 reg = <0>; 155 reg = <0>;
156 spi-max-frequency = <40000000>; /* input clock */ 156 spi-max-frequency = <40000000>; /* input clock */
157 157
diff --git a/arch/powerpc/boot/dts/fsl/p1020rdb-pd.dts b/arch/powerpc/boot/dts/fsl/p1020rdb-pd.dts
index 740553c090a3..f2dc6c09be52 100644
--- a/arch/powerpc/boot/dts/fsl/p1020rdb-pd.dts
+++ b/arch/powerpc/boot/dts/fsl/p1020rdb-pd.dts
@@ -155,7 +155,7 @@
155 flash@0 { 155 flash@0 {
156 #address-cells = <1>; 156 #address-cells = <1>;
157 #size-cells = <1>; 157 #size-cells = <1>;
158 compatible = "spansion,s25sl12801"; 158 compatible = "spansion,s25sl12801", "jedec,spi-nor";
159 reg = <0>; 159 reg = <0>;
160 /* input clock */ 160 /* input clock */
161 spi-max-frequency = <40000000>; 161 spi-max-frequency = <40000000>;
diff --git a/arch/powerpc/boot/dts/fsl/p1020rdb.dtsi b/arch/powerpc/boot/dts/fsl/p1020rdb.dtsi
index 1fb7e0e0940f..703142ee6627 100644
--- a/arch/powerpc/boot/dts/fsl/p1020rdb.dtsi
+++ b/arch/powerpc/boot/dts/fsl/p1020rdb.dtsi
@@ -148,7 +148,7 @@
148 flash@0 { 148 flash@0 {
149 #address-cells = <1>; 149 #address-cells = <1>;
150 #size-cells = <1>; 150 #size-cells = <1>;
151 compatible = "spansion,s25sl12801"; 151 compatible = "spansion,s25sl12801", "jedec,spi-nor";
152 reg = <0>; 152 reg = <0>;
153 spi-max-frequency = <40000000>; /* input clock */ 153 spi-max-frequency = <40000000>; /* input clock */
154 154
diff --git a/arch/powerpc/boot/dts/fsl/p1021mds.dts b/arch/powerpc/boot/dts/fsl/p1021mds.dts
index 27fdfd7dc7c7..291454c75dda 100644
--- a/arch/powerpc/boot/dts/fsl/p1021mds.dts
+++ b/arch/powerpc/boot/dts/fsl/p1021mds.dts
@@ -123,7 +123,7 @@
123 flash@0 { 123 flash@0 {
124 #address-cells = <1>; 124 #address-cells = <1>;
125 #size-cells = <1>; 125 #size-cells = <1>;
126 compatible = "spansion,s25sl12801"; 126 compatible = "spansion,s25sl12801", "jedec,spi-nor";
127 reg = <0>; 127 reg = <0>;
128 spi-max-frequency = <40000000>; /* input clock */ 128 spi-max-frequency = <40000000>; /* input clock */
129 129
diff --git a/arch/powerpc/boot/dts/fsl/p1021rdb-pc.dtsi b/arch/powerpc/boot/dts/fsl/p1021rdb-pc.dtsi
index e8a0f95fb24a..18f9b31602d0 100644
--- a/arch/powerpc/boot/dts/fsl/p1021rdb-pc.dtsi
+++ b/arch/powerpc/boot/dts/fsl/p1021rdb-pc.dtsi
@@ -150,7 +150,7 @@
150 flash@0 { 150 flash@0 {
151 #address-cells = <1>; 151 #address-cells = <1>;
152 #size-cells = <1>; 152 #size-cells = <1>;
153 compatible = "spansion,s25sl12801"; 153 compatible = "spansion,s25sl12801", "jedec,spi-nor";
154 reg = <0>; 154 reg = <0>;
155 spi-max-frequency = <40000000>; /* input clock */ 155 spi-max-frequency = <40000000>; /* input clock */
156 156
diff --git a/arch/powerpc/boot/dts/fsl/p1022ds.dtsi b/arch/powerpc/boot/dts/fsl/p1022ds.dtsi
index 149da0f123ee..ddefbf64f7f8 100644
--- a/arch/powerpc/boot/dts/fsl/p1022ds.dtsi
+++ b/arch/powerpc/boot/dts/fsl/p1022ds.dtsi
@@ -160,7 +160,7 @@
160 flash@0 { 160 flash@0 {
161 #address-cells = <1>; 161 #address-cells = <1>;
162 #size-cells = <1>; 162 #size-cells = <1>;
163 compatible = "spansion,s25sl12801"; 163 compatible = "spansion,s25sl12801", "jedec,spi-nor";
164 reg = <0>; 164 reg = <0>;
165 spi-max-frequency = <40000000>; /* input clock */ 165 spi-max-frequency = <40000000>; /* input clock */
166 166
diff --git a/arch/powerpc/boot/dts/fsl/p1022rdk.dts b/arch/powerpc/boot/dts/fsl/p1022rdk.dts
index 04c16337268a..d505d7c51903 100644
--- a/arch/powerpc/boot/dts/fsl/p1022rdk.dts
+++ b/arch/powerpc/boot/dts/fsl/p1022rdk.dts
@@ -86,7 +86,7 @@
86 flash@0 { 86 flash@0 {
87 #address-cells = <1>; 87 #address-cells = <1>;
88 #size-cells = <1>; 88 #size-cells = <1>;
89 compatible = "spansion,m25p80"; 89 compatible = "spansion,m25p80", "jedec,spi-nor";
90 reg = <0>; 90 reg = <0>;
91 spi-max-frequency = <1000000>; 91 spi-max-frequency = <1000000>;
92 partition@0 { 92 partition@0 {
diff --git a/arch/powerpc/boot/dts/fsl/p1024rdb.dtsi b/arch/powerpc/boot/dts/fsl/p1024rdb.dtsi
index b05dcb40f800..b4d05867f707 100644
--- a/arch/powerpc/boot/dts/fsl/p1024rdb.dtsi
+++ b/arch/powerpc/boot/dts/fsl/p1024rdb.dtsi
@@ -129,7 +129,7 @@
129 flash@0 { 129 flash@0 {
130 #address-cells = <1>; 130 #address-cells = <1>;
131 #size-cells = <1>; 131 #size-cells = <1>;
132 compatible = "spansion,m25p80"; 132 compatible = "spansion,m25p80", "jedec,spi-nor";
133 reg = <0>; 133 reg = <0>;
134 spi-max-frequency = <40000000>; 134 spi-max-frequency = <40000000>;
135 135
diff --git a/arch/powerpc/boot/dts/fsl/p1025rdb.dtsi b/arch/powerpc/boot/dts/fsl/p1025rdb.dtsi
index f50256482297..d44bb12debb0 100644
--- a/arch/powerpc/boot/dts/fsl/p1025rdb.dtsi
+++ b/arch/powerpc/boot/dts/fsl/p1025rdb.dtsi
@@ -137,7 +137,7 @@
137 flash@0 { 137 flash@0 {
138 #address-cells = <1>; 138 #address-cells = <1>;
139 #size-cells = <1>; 139 #size-cells = <1>;
140 compatible = "spansion,s25sl12801"; 140 compatible = "spansion,s25sl12801", "jedec,spi-nor";
141 reg = <0>; 141 reg = <0>;
142 spi-max-frequency = <40000000>; /* input clock */ 142 spi-max-frequency = <40000000>; /* input clock */
143 143
diff --git a/arch/powerpc/boot/dts/fsl/p2020rdb-pc.dtsi b/arch/powerpc/boot/dts/fsl/p2020rdb-pc.dtsi
index ad2e242365cc..03c9afc82436 100644
--- a/arch/powerpc/boot/dts/fsl/p2020rdb-pc.dtsi
+++ b/arch/powerpc/boot/dts/fsl/p2020rdb-pc.dtsi
@@ -151,7 +151,7 @@
151 flash@0 { 151 flash@0 {
152 #address-cells = <1>; 152 #address-cells = <1>;
153 #size-cells = <1>; 153 #size-cells = <1>;
154 compatible = "spansion,m25p80"; 154 compatible = "spansion,m25p80", "jedec,spi-nor";
155 reg = <0>; 155 reg = <0>;
156 spi-max-frequency = <40000000>; 156 spi-max-frequency = <40000000>;
157 157
diff --git a/arch/powerpc/boot/dts/fsl/p2020rdb.dts b/arch/powerpc/boot/dts/fsl/p2020rdb.dts
index 70cf09019ce5..435a319958cb 100644
--- a/arch/powerpc/boot/dts/fsl/p2020rdb.dts
+++ b/arch/powerpc/boot/dts/fsl/p2020rdb.dts
@@ -155,7 +155,7 @@
155 flash@0 { 155 flash@0 {
156 #address-cells = <1>; 156 #address-cells = <1>;
157 #size-cells = <1>; 157 #size-cells = <1>;
158 compatible = "spansion,s25sl12801"; 158 compatible = "spansion,s25sl12801", "jedec,spi-nor";
159 reg = <0>; 159 reg = <0>;
160 spi-max-frequency = <40000000>; 160 spi-max-frequency = <40000000>;
161 161
diff --git a/arch/powerpc/boot/dts/fsl/p2041rdb.dts b/arch/powerpc/boot/dts/fsl/p2041rdb.dts
index e9bd89406c4c..e50fea95a853 100644
--- a/arch/powerpc/boot/dts/fsl/p2041rdb.dts
+++ b/arch/powerpc/boot/dts/fsl/p2041rdb.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * P2041RDB Device Tree Source 2 * P2041RDB Device Tree Source
3 * 3 *
4 * Copyright 2011 - 2014 Freescale Semiconductor Inc. 4 * Copyright 2011 - 2015 Freescale Semiconductor Inc.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met: 7 * modification, are permitted provided that the following conditions are met:
@@ -41,6 +41,19 @@
41 #size-cells = <2>; 41 #size-cells = <2>;
42 interrupt-parent = <&mpic>; 42 interrupt-parent = <&mpic>;
43 43
44 aliases {
45 phy_rgmii_0 = &phy_rgmii_0;
46 phy_rgmii_1 = &phy_rgmii_1;
47 phy_sgmii_2 = &phy_sgmii_2;
48 phy_sgmii_3 = &phy_sgmii_3;
49 phy_sgmii_4 = &phy_sgmii_4;
50 phy_sgmii_1c = &phy_sgmii_1c;
51 phy_sgmii_1d = &phy_sgmii_1d;
52 phy_sgmii_1e = &phy_sgmii_1e;
53 phy_sgmii_1f = &phy_sgmii_1f;
54 phy_xgmii_2 = &phy_xgmii_2;
55 };
56
44 memory { 57 memory {
45 device_type = "memory"; 58 device_type = "memory";
46 }; 59 };
@@ -83,7 +96,7 @@
83 flash@0 { 96 flash@0 {
84 #address-cells = <1>; 97 #address-cells = <1>;
85 #size-cells = <1>; 98 #size-cells = <1>;
86 compatible = "spansion,s25sl12801"; 99 compatible = "spansion,s25sl12801", "jedec,spi-nor";
87 reg = <0>; 100 reg = <0>;
88 spi-max-frequency = <40000000>; /* input clock */ 101 spi-max-frequency = <40000000>; /* input clock */
89 partition@u-boot { 102 partition@u-boot {
@@ -137,6 +150,83 @@
137 usb1: usb@211000 { 150 usb1: usb@211000 {
138 dr_mode = "host"; 151 dr_mode = "host";
139 }; 152 };
153
154 fman@400000 {
155 ethernet@e0000 {
156 phy-handle = <&phy_sgmii_2>;
157 phy-connection-type = "sgmii";
158 };
159
160 mdio@e1120 {
161 phy_rgmii_0: ethernet-phy@0 {
162 reg = <0x0>;
163 };
164
165 phy_rgmii_1: ethernet-phy@1 {
166 reg = <0x1>;
167 };
168
169 phy_sgmii_2: ethernet-phy@2 {
170 reg = <0x2>;
171 };
172
173 phy_sgmii_3: ethernet-phy@3 {
174 reg = <0x3>;
175 };
176
177 phy_sgmii_4: ethernet-phy@4 {
178 reg = <0x4>;
179 };
180
181 phy_sgmii_1c: ethernet-phy@1c {
182 reg = <0x1c>;
183 };
184
185 phy_sgmii_1d: ethernet-phy@1d {
186 reg = <0x1d>;
187 };
188
189 phy_sgmii_1e: ethernet-phy@1e {
190 reg = <0x1e>;
191 };
192
193 phy_sgmii_1f: ethernet-phy@1f {
194 reg = <0x1f>;
195 };
196 };
197
198 ethernet@e2000 {
199 phy-handle = <&phy_sgmii_3>;
200 phy-connection-type = "sgmii";
201 };
202
203 ethernet@e4000 {
204 phy-handle = <&phy_sgmii_4>;
205 phy-connection-type = "sgmii";
206 };
207
208 ethernet@e6000 {
209 phy-handle = <&phy_rgmii_1>;
210 phy-connection-type = "rgmii";
211 };
212
213 ethernet@e8000 {
214 phy-handle = <&phy_rgmii_0>;
215 phy-connection-type = "rgmii";
216 };
217
218 ethernet@f0000 {
219 phy-handle = <&phy_xgmii_2>;
220 phy-connection-type = "xgmii";
221 };
222
223 mdio@f1000 {
224 phy_xgmii_2: ethernet-phy@0 {
225 compatible = "ethernet-phy-ieee802.3-c45";
226 reg = <0x0>;
227 };
228 };
229 };
140 }; 230 };
141 231
142 rio: rapidio@ffe0c0000 { 232 rio: rapidio@ffe0c0000 {
diff --git a/arch/powerpc/boot/dts/fsl/p3041ds.dts b/arch/powerpc/boot/dts/fsl/p3041ds.dts
index f2b1d40334d4..40748e415adb 100644
--- a/arch/powerpc/boot/dts/fsl/p3041ds.dts
+++ b/arch/powerpc/boot/dts/fsl/p3041ds.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * P3041DS Device Tree Source 2 * P3041DS Device Tree Source
3 * 3 *
4 * Copyright 2010 - 2014 Freescale Semiconductor Inc. 4 * Copyright 2010 - 2015 Freescale Semiconductor Inc.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met: 7 * modification, are permitted provided that the following conditions are met:
@@ -41,6 +41,20 @@
41 #size-cells = <2>; 41 #size-cells = <2>;
42 interrupt-parent = <&mpic>; 42 interrupt-parent = <&mpic>;
43 43
44 aliases{
45 phy_rgmii_0 = &phy_rgmii_0;
46 phy_rgmii_1 = &phy_rgmii_1;
47 phy_sgmii_1c = &phy_sgmii_1c;
48 phy_sgmii_1d = &phy_sgmii_1d;
49 phy_sgmii_1e = &phy_sgmii_1e;
50 phy_sgmii_1f = &phy_sgmii_1f;
51 phy_xgmii_1 = &phy_xgmii_1;
52 phy_xgmii_2 = &phy_xgmii_2;
53 emi1_rgmii = &hydra_mdio_rgmii;
54 emi1_sgmii = &hydra_mdio_sgmii;
55 emi2_xgmii = &hydra_mdio_xgmii;
56 };
57
44 memory { 58 memory {
45 device_type = "memory"; 59 device_type = "memory";
46 }; 60 };
@@ -83,7 +97,7 @@
83 flash@0 { 97 flash@0 {
84 #address-cells = <1>; 98 #address-cells = <1>;
85 #size-cells = <1>; 99 #size-cells = <1>;
86 compatible = "spansion,s25sl12801"; 100 compatible = "spansion,s25sl12801", "jedec,spi-nor";
87 reg = <0>; 101 reg = <0>;
88 spi-max-frequency = <35000000>; /* input clock */ 102 spi-max-frequency = <35000000>; /* input clock */
89 partition@u-boot { 103 partition@u-boot {
@@ -150,6 +164,52 @@
150 reg = <0x4c>; 164 reg = <0x4c>;
151 }; 165 };
152 }; 166 };
167
168 fman@400000{
169 ethernet@e0000 {
170 phy-handle = <&phy_sgmii_1c>;
171 phy-connection-type = "sgmii";
172 };
173
174 ethernet@e2000 {
175 phy-handle = <&phy_sgmii_1d>;
176 phy-connection-type = "sgmii";
177 };
178
179 ethernet@e4000 {
180 phy-handle = <&phy_sgmii_1e>;
181 phy-connection-type = "sgmii";
182 };
183
184 ethernet@e6000 {
185 phy-handle = <&phy_sgmii_1f>;
186 phy-connection-type = "sgmii";
187 };
188
189 ethernet@e8000 {
190 phy-handle = <&phy_rgmii_1>;
191 phy-connection-type = "rgmii";
192 };
193
194 ethernet@f0000 {
195 phy-handle = <&phy_xgmii_1>;
196 phy-connection-type = "xgmii";
197 };
198
199 hydra_mdio_xgmii: mdio@f1000 {
200 status = "disabled";
201
202 phy_xgmii_1: ethernet-phy@4 {
203 compatible = "ethernet-phy-ieee802.3-c45";
204 reg = <0x4>;
205 };
206
207 phy_xgmii_2: ethernet-phy@0 {
208 compatible = "ethernet-phy-ieee802.3-c45";
209 reg = <0x0>;
210 };
211 };
212 };
153 }; 213 };
154 214
155 rio: rapidio@ffe0c0000 { 215 rio: rapidio@ffe0c0000 {
@@ -215,8 +275,58 @@
215 }; 275 };
216 276
217 board-control@3,0 { 277 board-control@3,0 {
278 #address-cells = <1>;
279 #size-cells = <1>;
218 compatible = "fsl,p3041ds-fpga", "fsl,fpga-ngpixis"; 280 compatible = "fsl,p3041ds-fpga", "fsl,fpga-ngpixis";
219 reg = <3 0 0x30>; 281 reg = <3 0 0x30>;
282 ranges = <0 3 0 0x30>;
283
284 mdio-mux-emi1 {
285 #address-cells = <1>;
286 #size-cells = <0>;
287 compatible = "mdio-mux-mmioreg", "mdio-mux";
288 mdio-parent-bus = <&mdio0>;
289 reg = <9 1>;
290 mux-mask = <0x78>;
291
292 hydra_mdio_rgmii: rgmii-mdio@8 {
293 #address-cells = <1>;
294 #size-cells = <0>;
295 reg = <8>;
296 status = "disabled";
297
298 phy_rgmii_0: ethernet-phy@0 {
299 reg = <0x0>;
300 };
301
302 phy_rgmii_1: ethernet-phy@1 {
303 reg = <0x1>;
304 };
305 };
306
307 hydra_mdio_sgmii: sgmii-mdio@28 {
308 #address-cells = <1>;
309 #size-cells = <0>;
310 reg = <0x28>;
311 status = "disabled";
312
313 phy_sgmii_1c: ethernet-phy@1c {
314 reg = <0x1c>;
315 };
316
317 phy_sgmii_1d: ethernet-phy@1d {
318 reg = <0x1d>;
319 };
320
321 phy_sgmii_1e: ethernet-phy@1e {
322 reg = <0x1e>;
323 };
324
325 phy_sgmii_1f: ethernet-phy@1f {
326 reg = <0x1f>;
327 };
328 };
329 };
220 }; 330 };
221 }; 331 };
222 332
diff --git a/arch/powerpc/boot/dts/fsl/p4080ds.dts b/arch/powerpc/boot/dts/fsl/p4080ds.dts
index 28a55c5e7099..816b9788d5f6 100644
--- a/arch/powerpc/boot/dts/fsl/p4080ds.dts
+++ b/arch/powerpc/boot/dts/fsl/p4080ds.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * P4080DS Device Tree Source 2 * P4080DS Device Tree Source
3 * 3 *
4 * Copyright 2009 - 2014 Freescale Semiconductor Inc. 4 * Copyright 2009 - 2015 Freescale Semiconductor Inc.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met: 7 * modification, are permitted provided that the following conditions are met:
@@ -41,6 +41,20 @@
41 #size-cells = <2>; 41 #size-cells = <2>;
42 interrupt-parent = <&mpic>; 42 interrupt-parent = <&mpic>;
43 43
44 aliases {
45 phy_rgmii = &phyrgmii;
46 phy5_slot3 = &phy5slot3;
47 phy6_slot3 = &phy6slot3;
48 phy7_slot3 = &phy7slot3;
49 phy8_slot3 = &phy8slot3;
50 emi1_slot3 = &p4080mdio2;
51 emi1_slot4 = &p4080mdio1;
52 emi1_slot5 = &p4080mdio3;
53 emi1_rgmii = &p4080mdio0;
54 emi2_slot4 = &p4080xmdio1;
55 emi2_slot5 = &p4080xmdio3;
56 };
57
44 memory { 58 memory {
45 device_type = "memory"; 59 device_type = "memory";
46 }; 60 };
@@ -84,7 +98,7 @@
84 flash@0 { 98 flash@0 {
85 #address-cells = <1>; 99 #address-cells = <1>;
86 #size-cells = <1>; 100 #size-cells = <1>;
87 compatible = "spansion,s25sl12801"; 101 compatible = "spansion,s25sl12801", "jedec,spi-nor";
88 reg = <0>; 102 reg = <0>;
89 spi-max-frequency = <40000000>; /* input clock */ 103 spi-max-frequency = <40000000>; /* input clock */
90 partition@u-boot { 104 partition@u-boot {
@@ -137,6 +151,60 @@
137 dr_mode = "host"; 151 dr_mode = "host";
138 phy_type = "ulpi"; 152 phy_type = "ulpi";
139 }; 153 };
154
155 fman@400000 {
156 ethernet@e0000 {
157 phy-handle = <&phy0>;
158 phy-connection-type = "sgmii";
159 };
160
161 ethernet@e2000 {
162 phy-handle = <&phy1>;
163 phy-connection-type = "sgmii";
164 };
165
166 ethernet@e4000 {
167 phy-handle = <&phy2>;
168 phy-connection-type = "sgmii";
169 };
170
171 ethernet@e6000 {
172 phy-handle = <&phy3>;
173 phy-connection-type = "sgmii";
174 };
175
176 ethernet@f0000 {
177 phy-handle = <&phy10>;
178 phy-connection-type = "xgmii";
179 };
180 };
181
182 fman@500000 {
183 ethernet@e0000 {
184 phy-handle = <&phy5>;
185 phy-connection-type = "sgmii";
186 };
187
188 ethernet@e2000 {
189 phy-handle = <&phy6>;
190 phy-connection-type = "sgmii";
191 };
192
193 ethernet@e4000 {
194 phy-handle = <&phy7>;
195 phy-connection-type = "sgmii";
196 };
197
198 ethernet@e6000 {
199 phy-handle = <&phy8>;
200 phy-connection-type = "sgmii";
201 };
202
203 ethernet@f0000 {
204 phy-handle = <&phy11>;
205 phy-connection-type = "xgmii";
206 };
207 };
140 }; 208 };
141 209
142 rio: rapidio@ffe0c0000 { 210 rio: rapidio@ffe0c0000 {
@@ -213,6 +281,120 @@
213 }; 281 };
214 }; 282 };
215 283
284 mdio-mux-emi1 {
285 #address-cells = <1>;
286 #size-cells = <0>;
287 compatible = "mdio-mux-gpio", "mdio-mux";
288 mdio-parent-bus = <&mdio0>;
289 gpios = <&gpio0 1 0>, <&gpio0 0 0>;
290
291 p4080mdio0: mdio@0 {
292 #address-cells = <1>;
293 #size-cells = <0>;
294 reg = <0>;
295
296 phyrgmii: ethernet-phy@0 {
297 reg = <0x0>;
298 };
299 };
300
301 p4080mdio1: mdio@1 {
302 #address-cells = <1>;
303 #size-cells = <0>;
304 reg = <1>;
305
306 phy5: ethernet-phy@1c {
307 reg = <0x1c>;
308 };
309
310 phy6: ethernet-phy@1d {
311 reg = <0x1d>;
312 };
313
314 phy7: ethernet-phy@1e {
315 reg = <0x1e>;
316 };
317
318 phy8: ethernet-phy@1f {
319 reg = <0x1f>;
320 };
321 };
322
323 p4080mdio2: mdio@2 {
324 #address-cells = <1>;
325 #size-cells = <0>;
326 reg = <2>;
327 status = "disabled";
328
329 phy5slot3: ethernet-phy@1c {
330 reg = <0x1c>;
331 };
332
333 phy6slot3: ethernet-phy@1d {
334 reg = <0x1d>;
335 };
336
337 phy7slot3: ethernet-phy@1e {
338 reg = <0x1e>;
339 };
340
341 phy8slot3: ethernet-phy@1f {
342 reg = <0x1f>;
343 };
344 };
345
346 p4080mdio3: mdio@3 {
347 #address-cells = <1>;
348 #size-cells = <0>;
349 reg = <3>;
350
351 phy0: ethernet-phy@1c {
352 reg = <0x1c>;
353 };
354
355 phy1: ethernet-phy@1d {
356 reg = <0x1d>;
357 };
358
359 phy2: ethernet-phy@1e {
360 reg = <0x1e>;
361 };
362
363 phy3: ethernet-phy@1f {
364 reg = <0x1f>;
365 };
366 };
367 };
368
369 mdio-mux-emi2 {
370 #address-cells = <1>;
371 #size-cells = <0>;
372 compatible = "mdio-mux-gpio", "mdio-mux";
373 mdio-parent-bus = <&xmdio0>;
374 gpios = <&gpio0 3 0>, <&gpio0 2 0>;
375
376 p4080xmdio1: mdio@1 {
377 #address-cells = <1>;
378 #size-cells = <0>;
379 reg = <1>;
380
381 phy11: ethernet-phy@0 {
382 compatible = "ethernet-phy-ieee802.3-c45";
383 reg = <0x0>;
384 };
385 };
386
387 p4080xmdio3: mdio@3 {
388 #address-cells = <1>;
389 #size-cells = <0>;
390 reg = <3>;
391
392 phy10: ethernet-phy@4 {
393 compatible = "ethernet-phy-ieee802.3-c45";
394 reg = <0x4>;
395 };
396 };
397 };
216}; 398};
217 399
218/include/ "p4080si-post.dtsi" 400/include/ "p4080si-post.dtsi"
diff --git a/arch/powerpc/boot/dts/fsl/p5020ds.dts b/arch/powerpc/boot/dts/fsl/p5020ds.dts
index 920dc77b9c43..cd6f37386111 100644
--- a/arch/powerpc/boot/dts/fsl/p5020ds.dts
+++ b/arch/powerpc/boot/dts/fsl/p5020ds.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * P5020DS Device Tree Source 2 * P5020DS Device Tree Source
3 * 3 *
4 * Copyright 2010 - 2014 Freescale Semiconductor Inc. 4 * Copyright 2010 - 2015 Freescale Semiconductor Inc.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met: 7 * modification, are permitted provided that the following conditions are met:
@@ -41,6 +41,20 @@
41 #size-cells = <2>; 41 #size-cells = <2>;
42 interrupt-parent = <&mpic>; 42 interrupt-parent = <&mpic>;
43 43
44 aliases {
45 phy_rgmii_0 = &phy_rgmii_0;
46 phy_rgmii_1 = &phy_rgmii_1;
47 phy_sgmii_1c = &phy_sgmii_1c;
48 phy_sgmii_1d = &phy_sgmii_1d;
49 phy_sgmii_1e = &phy_sgmii_1e;
50 phy_sgmii_1f = &phy_sgmii_1f;
51 phy_xgmii_1 = &phy_xgmii_1;
52 phy_xgmii_2 = &phy_xgmii_2;
53 emi1_rgmii = &hydra_mdio_rgmii;
54 emi1_sgmii = &hydra_mdio_sgmii;
55 emi2_xgmii = &hydra_mdio_xgmii;
56 };
57
44 memory { 58 memory {
45 device_type = "memory"; 59 device_type = "memory";
46 }; 60 };
@@ -83,7 +97,7 @@
83 flash@0 { 97 flash@0 {
84 #address-cells = <1>; 98 #address-cells = <1>;
85 #size-cells = <1>; 99 #size-cells = <1>;
86 compatible = "spansion,s25sl12801"; 100 compatible = "spansion,s25sl12801", "jedec,spi-nor";
87 reg = <0>; 101 reg = <0>;
88 spi-max-frequency = <40000000>; /* input clock */ 102 spi-max-frequency = <40000000>; /* input clock */
89 partition@u-boot { 103 partition@u-boot {
@@ -150,6 +164,52 @@
150 reg = <0x4c>; 164 reg = <0x4c>;
151 }; 165 };
152 }; 166 };
167
168 fman@400000 {
169 ethernet@e0000 {
170 phy-handle = <&phy_sgmii_1c>;
171 phy-connection-type = "sgmii";
172 };
173
174 ethernet@e2000 {
175 phy-handle = <&phy_sgmii_1d>;
176 phy-connection-type = "sgmii";
177 };
178
179 ethernet@e4000 {
180 phy-handle = <&phy_sgmii_1e>;
181 phy-connection-type = "sgmii";
182 };
183
184 ethernet@e6000 {
185 phy-handle = <&phy_sgmii_1f>;
186 phy-connection-type = "sgmii";
187 };
188
189 ethernet@e8000 {
190 phy-handle = <&phy_rgmii_1>;
191 phy-connection-type = "rgmii";
192 };
193
194 ethernet@f0000 {
195 phy-handle = <&phy_xgmii_1>;
196 phy-connection-type = "xgmii";
197 };
198
199 hydra_mdio_xgmii: mdio@f1000 {
200 status = "disabled";
201
202 phy_xgmii_1: ethernet-phy@4 {
203 compatible = "ethernet-phy-ieee802.3-c45";
204 reg = <0x4>;
205 };
206
207 phy_xgmii_2: ethernet-phy@0 {
208 compatible = "ethernet-phy-ieee802.3-c45";
209 reg = <0x0>;
210 };
211 };
212 };
153 }; 213 };
154 214
155 rio: rapidio@ffe0c0000 { 215 rio: rapidio@ffe0c0000 {
@@ -215,8 +275,58 @@
215 }; 275 };
216 276
217 board-control@3,0 { 277 board-control@3,0 {
278 #address-cells = <1>;
279 #size-cells = <1>;
218 compatible = "fsl,p5020ds-fpga", "fsl,fpga-ngpixis"; 280 compatible = "fsl,p5020ds-fpga", "fsl,fpga-ngpixis";
219 reg = <3 0 0x30>; 281 reg = <3 0 0x30>;
282 ranges = <0 3 0 0x30>;
283
284 mdio-mux-emi1 {
285 #address-cells = <1>;
286 #size-cells = <0>;
287 compatible = "mdio-mux-mmioreg", "mdio-mux";
288 mdio-parent-bus = <&mdio0>;
289 reg = <9 1>;
290 mux-mask = <0x78>;
291
292 hydra_mdio_rgmii: rgmii-mdio@8 {
293 #address-cells = <1>;
294 #size-cells = <0>;
295 reg = <8>;
296 status = "disabled";
297
298 phy_rgmii_0: ethernet-phy@0 {
299 reg = <0x0>;
300 };
301
302 phy_rgmii_1: ethernet-phy@1 {
303 reg = <0x1>;
304 };
305 };
306
307 hydra_mdio_sgmii: sgmii-mdio@28 {
308 #address-cells = <1>;
309 #size-cells = <0>;
310 reg = <0x28>;
311 status = "disabled";
312
313 phy_sgmii_1c: ethernet-phy@1c {
314 reg = <0x1c>;
315 };
316
317 phy_sgmii_1d: ethernet-phy@1d {
318 reg = <0x1d>;
319 };
320
321 phy_sgmii_1e: ethernet-phy@1e {
322 reg = <0x1e>;
323 };
324
325 phy_sgmii_1f: ethernet-phy@1f {
326 reg = <0x1f>;
327 };
328 };
329 };
220 }; 330 };
221 }; 331 };
222 332
diff --git a/arch/powerpc/boot/dts/fsl/p5040ds.dts b/arch/powerpc/boot/dts/fsl/p5040ds.dts
index e169cc297ea3..45084738cf4e 100644
--- a/arch/powerpc/boot/dts/fsl/p5040ds.dts
+++ b/arch/powerpc/boot/dts/fsl/p5040ds.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * P5040DS Device Tree Source 2 * P5040DS Device Tree Source
3 * 3 *
4 * Copyright 2012 - 2014 Freescale Semiconductor Inc. 4 * Copyright 2012 - 2015 Freescale Semiconductor Inc.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met: 7 * modification, are permitted provided that the following conditions are met:
@@ -41,6 +41,32 @@
41 #size-cells = <2>; 41 #size-cells = <2>;
42 interrupt-parent = <&mpic>; 42 interrupt-parent = <&mpic>;
43 43
44 aliases{
45 phy_sgmii_slot2_1c = &phy_sgmii_slot2_1c;
46 phy_sgmii_slot2_1d = &phy_sgmii_slot2_1d;
47 phy_sgmii_slot2_1e = &phy_sgmii_slot2_1e;
48 phy_sgmii_slot2_1f = &phy_sgmii_slot2_1f;
49 phy_sgmii_slot3_1c = &phy_sgmii_slot3_1c;
50 phy_sgmii_slot3_1d = &phy_sgmii_slot3_1d;
51 phy_sgmii_slot3_1e = &phy_sgmii_slot3_1e;
52 phy_sgmii_slot3_1f = &phy_sgmii_slot3_1f;
53 phy_sgmii_slot5_1c = &phy_sgmii_slot5_1c;
54 phy_sgmii_slot5_1d = &phy_sgmii_slot5_1d;
55 phy_sgmii_slot5_1e = &phy_sgmii_slot5_1e;
56 phy_sgmii_slot5_1f = &phy_sgmii_slot5_1f;
57 phy_sgmii_slot6_1c = &phy_sgmii_slot6_1c;
58 phy_sgmii_slot6_1d = &phy_sgmii_slot6_1d;
59 phy_sgmii_slot6_1e = &phy_sgmii_slot6_1e;
60 phy_sgmii_slot6_1f = &phy_sgmii_slot6_1f;
61 hydra_rg = &hydra_rg;
62 hydra_sg_slot2 = &hydra_sg_slot2;
63 hydra_sg_slot3 = &hydra_sg_slot3;
64 hydra_sg_slot5 = &hydra_sg_slot5;
65 hydra_sg_slot6 = &hydra_sg_slot6;
66 hydra_xg_slot1 = &hydra_xg_slot1;
67 hydra_xg_slot2 = &hydra_xg_slot2;
68 };
69
44 memory { 70 memory {
45 device_type = "memory"; 71 device_type = "memory";
46 }; 72 };
@@ -83,7 +109,7 @@
83 flash@0 { 109 flash@0 {
84 #address-cells = <1>; 110 #address-cells = <1>;
85 #size-cells = <1>; 111 #size-cells = <1>;
86 compatible = "spansion,s25sl12801"; 112 compatible = "spansion,s25sl12801", "jedec,spi-nor";
87 reg = <0>; 113 reg = <0>;
88 spi-max-frequency = <40000000>; /* input clock */ 114 spi-max-frequency = <40000000>; /* input clock */
89 partition@u-boot { 115 partition@u-boot {
@@ -147,6 +173,62 @@
147 reg = <0x4c>; 173 reg = <0x4c>;
148 }; 174 };
149 }; 175 };
176
177 fman@400000 {
178 ethernet@e0000 {
179 phy-connection-type = "sgmii";
180 };
181
182 ethernet@e2000 {
183 phy-connection-type = "sgmii";
184 };
185
186 ethernet@e4000 {
187 phy-connection-type = "sgmii";
188 };
189
190 ethernet@e6000 {
191 phy-connection-type = "sgmii";
192 };
193
194 ethernet@e8000 {
195 phy-handle = <&phy_rgmii_0>;
196 phy-connection-type = "rgmii";
197 };
198
199 ethernet@f0000 {
200 phy-handle = <&phy_xgmii_slot_2>;
201 phy-connection-type = "xgmii";
202 };
203 };
204
205 fman@500000 {
206 ethernet@e0000 {
207 phy-connection-type = "sgmii";
208 };
209
210 ethernet@e2000 {
211 phy-connection-type = "sgmii";
212 };
213
214 ethernet@e4000 {
215 phy-connection-type = "sgmii";
216 };
217
218 ethernet@e6000 {
219 phy-connection-type = "sgmii";
220 };
221
222 ethernet@e8000 {
223 phy-handle = <&phy_rgmii_1>;
224 phy-connection-type = "rgmii";
225 };
226
227 ethernet@f0000 {
228 phy-handle = <&phy_xgmii_slot_1>;
229 phy-connection-type = "xgmii";
230 };
231 };
150 }; 232 };
151 233
152 lbc: localbus@ffe124000 { 234 lbc: localbus@ffe124000 {
@@ -200,8 +282,158 @@
200 }; 282 };
201 283
202 board-control@3,0 { 284 board-control@3,0 {
285 #address-cells = <1>;
286 #size-cells = <1>;
203 compatible = "fsl,p5040ds-fpga", "fsl,fpga-ngpixis"; 287 compatible = "fsl,p5040ds-fpga", "fsl,fpga-ngpixis";
204 reg = <3 0 0x40>; 288 reg = <3 0 0x40>;
289 ranges = <0 3 0 0x40>;
290
291 mdio-mux-emi1 {
292 #address-cells = <1>;
293 #size-cells = <0>;
294 compatible = "mdio-mux-mmioreg", "mdio-mux";
295 mdio-parent-bus = <&mdio0>;
296 reg = <9 1>;
297 mux-mask = <0x78>;
298
299 hydra_rg:rgmii-mdio@8 {
300 #address-cells = <1>;
301 #size-cells = <0>;
302 reg = <8>;
303 status = "disabled";
304
305 phy_rgmii_0: ethernet-phy@0 {
306 reg = <0x0>;
307 };
308
309 phy_rgmii_1: ethernet-phy@1 {
310 reg = <0x1>;
311 };
312 };
313
314 hydra_sg_slot2: sgmii-mdio@28 {
315 #address-cells = <1>;
316 #size-cells = <0>;
317 reg = <0x28>;
318 status = "disabled";
319
320 phy_sgmii_slot2_1c: ethernet-phy@1c {
321 reg = <0x1c>;
322 };
323
324 phy_sgmii_slot2_1d: ethernet-phy@1d {
325 reg = <0x1d>;
326 };
327
328 phy_sgmii_slot2_1e: ethernet-phy@1e {
329 reg = <0x1e>;
330 };
331
332 phy_sgmii_slot2_1f: ethernet-phy@1f {
333 reg = <0x1f>;
334 };
335 };
336
337 hydra_sg_slot3: sgmii-mdio@68 {
338 #address-cells = <1>;
339 #size-cells = <0>;
340 reg = <0x68>;
341 status = "disabled";
342
343 phy_sgmii_slot3_1c: ethernet-phy@1c {
344 reg = <0x1c>;
345 };
346
347 phy_sgmii_slot3_1d: ethernet-phy@1d {
348 reg = <0x1d>;
349 };
350
351 phy_sgmii_slot3_1e: ethernet-phy@1e {
352 reg = <0x1e>;
353 };
354
355 phy_sgmii_slot3_1f: ethernet-phy@1f {
356 reg = <0x1f>;
357 };
358 };
359
360 hydra_sg_slot5: sgmii-mdio@38 {
361 #address-cells = <1>;
362 #size-cells = <0>;
363 reg = <0x38>;
364 status = "disabled";
365
366 phy_sgmii_slot5_1c: ethernet-phy@1c {
367 reg = <0x1c>;
368 };
369
370 phy_sgmii_slot5_1d: ethernet-phy@1d {
371 reg = <0x1d>;
372 };
373
374 phy_sgmii_slot5_1e: ethernet-phy@1e {
375 reg = <0x1e>;
376 };
377
378 phy_sgmii_slot5_1f: ethernet-phy@1f {
379 reg = <0x1f>;
380 };
381 };
382 hydra_sg_slot6: sgmii-mdio@48 {
383 #address-cells = <1>;
384 #size-cells = <0>;
385 reg = <0x48>;
386 status = "disabled";
387
388 phy_sgmii_slot6_1c: ethernet-phy@1c {
389 reg = <0x1c>;
390 };
391
392 phy_sgmii_slot6_1d: ethernet-phy@1d {
393 reg = <0x1d>;
394 };
395
396 phy_sgmii_slot6_1e: ethernet-phy@1e {
397 reg = <0x1e>;
398 };
399
400 phy_sgmii_slot6_1f: ethernet-phy@1f {
401 reg = <0x1f>;
402 };
403 };
404 };
405
406 mdio-mux-emi2 {
407 #address-cells = <1>;
408 #size-cells = <0>;
409 compatible = "mdio-mux-mmioreg", "mdio-mux";
410 mdio-parent-bus = <&xmdio0>;
411 reg = <9 1>;
412 mux-mask = <0x06>;
413
414 hydra_xg_slot1: hydra-xg-slot1@0 {
415 #address-cells = <1>;
416 #size-cells = <0>;
417 reg = <0>;
418 status = "disabled";
419
420 phy_xgmii_slot_1: ethernet-phy@0 {
421 compatible = "ethernet-phy-ieee802.3-c45";
422 reg = <4>;
423 };
424 };
425
426 hydra_xg_slot2: hydra-xg-slot2@2 {
427 #address-cells = <1>;
428 #size-cells = <0>;
429 reg = <2>;
430
431 phy_xgmii_slot_2: ethernet-phy@4 {
432 compatible = "ethernet-phy-ieee802.3-c45";
433 reg = <0>;
434 };
435 };
436 };
205 }; 437 };
206 }; 438 };
207 439
diff --git a/arch/powerpc/boot/dts/fsl/p5040si-post.dtsi b/arch/powerpc/boot/dts/fsl/p5040si-post.dtsi
index 2f227b1345ad..e2bd9313e632 100644
--- a/arch/powerpc/boot/dts/fsl/p5040si-post.dtsi
+++ b/arch/powerpc/boot/dts/fsl/p5040si-post.dtsi
@@ -420,6 +420,7 @@
420 fsl,iommu-parent = <&pamu4>; 420 fsl,iommu-parent = <&pamu4>;
421 }; 421 };
422 422
423/include/ "qoriq-raid1.0-0.dtsi"
423/include/ "qoriq-qman1.dtsi" 424/include/ "qoriq-qman1.dtsi"
424/include/ "qoriq-bman1.dtsi" 425/include/ "qoriq-bman1.dtsi"
425 426
diff --git a/arch/powerpc/boot/dts/fsl/p5040si-pre.dtsi b/arch/powerpc/boot/dts/fsl/p5040si-pre.dtsi
index 0659d5bb69b8..dbd57750fc02 100644
--- a/arch/powerpc/boot/dts/fsl/p5040si-pre.dtsi
+++ b/arch/powerpc/boot/dts/fsl/p5040si-pre.dtsi
@@ -73,6 +73,12 @@
73 rtic_d = &rtic_d; 73 rtic_d = &rtic_d;
74 sec_mon = &sec_mon; 74 sec_mon = &sec_mon;
75 75
76 raideng = &raideng;
77 raideng_jr0 = &raideng_jr0;
78 raideng_jr1 = &raideng_jr1;
79 raideng_jr2 = &raideng_jr2;
80 raideng_jr3 = &raideng_jr3;
81
76 fman0 = &fman0; 82 fman0 = &fman0;
77 fman1 = &fman1; 83 fman1 = &fman1;
78 ethernet0 = &enet0; 84 ethernet0 = &enet0;
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-0-best-effort.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-0-best-effort.dtsi
index 2e441fab6d8f..e1a961f05dcd 100644
--- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-0-best-effort.dtsi
+++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-0-best-effort.dtsi
@@ -55,6 +55,7 @@ fman@400000 {
55 reg = <0xe0000 0x1000>; 55 reg = <0xe0000 0x1000>;
56 fsl,fman-ports = <&fman0_rx_0x08 &fman0_tx_0x28>; 56 fsl,fman-ports = <&fman0_rx_0x08 &fman0_tx_0x28>;
57 ptp-timer = <&ptp_timer0>; 57 ptp-timer = <&ptp_timer0>;
58 pcsphy-handle = <&pcsphy0>;
58 }; 59 };
59 60
60 mdio@e1000 { 61 mdio@e1000 {
@@ -62,5 +63,9 @@ fman@400000 {
62 #size-cells = <0>; 63 #size-cells = <0>;
63 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; 64 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio";
64 reg = <0xe1000 0x1000>; 65 reg = <0xe1000 0x1000>;
66
67 pcsphy0: ethernet-phy@0 {
68 reg = <0x0>;
69 };
65 }; 70 };
66}; 71};
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-0.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-0.dtsi
index 0b8f87f79d15..c288f3c6c637 100644
--- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-0.dtsi
+++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-0.dtsi
@@ -52,6 +52,7 @@ fman@400000 {
52 compatible = "fsl,fman-memac"; 52 compatible = "fsl,fman-memac";
53 reg = <0xf0000 0x1000>; 53 reg = <0xf0000 0x1000>;
54 fsl,fman-ports = <&fman0_rx_0x10 &fman0_tx_0x30>; 54 fsl,fman-ports = <&fman0_rx_0x10 &fman0_tx_0x30>;
55 pcsphy-handle = <&pcsphy6>;
55 }; 56 };
56 57
57 mdio@f1000 { 58 mdio@f1000 {
@@ -59,5 +60,9 @@ fman@400000 {
59 #size-cells = <0>; 60 #size-cells = <0>;
60 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; 61 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio";
61 reg = <0xf1000 0x1000>; 62 reg = <0xf1000 0x1000>;
63
64 pcsphy6: ethernet-phy@0 {
65 reg = <0x0>;
66 };
62 }; 67 };
63}; 68};
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-1-best-effort.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-1-best-effort.dtsi
index ba6f2275d3f6..94f3e7175012 100644
--- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-1-best-effort.dtsi
+++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-1-best-effort.dtsi
@@ -55,6 +55,7 @@ fman@400000 {
55 reg = <0xe2000 0x1000>; 55 reg = <0xe2000 0x1000>;
56 fsl,fman-ports = <&fman0_rx_0x09 &fman0_tx_0x29>; 56 fsl,fman-ports = <&fman0_rx_0x09 &fman0_tx_0x29>;
57 ptp-timer = <&ptp_timer0>; 57 ptp-timer = <&ptp_timer0>;
58 pcsphy-handle = <&pcsphy1>;
58 }; 59 };
59 60
60 mdio@e3000 { 61 mdio@e3000 {
@@ -62,5 +63,9 @@ fman@400000 {
62 #size-cells = <0>; 63 #size-cells = <0>;
63 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; 64 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio";
64 reg = <0xe3000 0x1000>; 65 reg = <0xe3000 0x1000>;
66
67 pcsphy1: ethernet-phy@0 {
68 reg = <0x0>;
69 };
65 }; 70 };
66}; 71};
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-1.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-1.dtsi
index 886003805592..94a76982d214 100644
--- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-1.dtsi
+++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-1.dtsi
@@ -52,6 +52,7 @@ fman@400000 {
52 compatible = "fsl,fman-memac"; 52 compatible = "fsl,fman-memac";
53 reg = <0xf2000 0x1000>; 53 reg = <0xf2000 0x1000>;
54 fsl,fman-ports = <&fman0_rx_0x11 &fman0_tx_0x31>; 54 fsl,fman-ports = <&fman0_rx_0x11 &fman0_tx_0x31>;
55 pcsphy-handle = <&pcsphy7>;
55 }; 56 };
56 57
57 mdio@f3000 { 58 mdio@f3000 {
@@ -59,5 +60,9 @@ fman@400000 {
59 #size-cells = <0>; 60 #size-cells = <0>;
60 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; 61 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio";
61 reg = <0xf3000 0x1000>; 62 reg = <0xf3000 0x1000>;
63
64 pcsphy7: ethernet-phy@0 {
65 reg = <0x0>;
66 };
62 }; 67 };
63}; 68};
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-0.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-0.dtsi
index ace9c13648ce..b5ff5f71c6b8 100644
--- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-0.dtsi
+++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-0.dtsi
@@ -51,6 +51,7 @@ fman@400000 {
51 reg = <0xe0000 0x1000>; 51 reg = <0xe0000 0x1000>;
52 fsl,fman-ports = <&fman0_rx_0x08 &fman0_tx_0x28>; 52 fsl,fman-ports = <&fman0_rx_0x08 &fman0_tx_0x28>;
53 ptp-timer = <&ptp_timer0>; 53 ptp-timer = <&ptp_timer0>;
54 pcsphy-handle = <&pcsphy0>;
54 }; 55 };
55 56
56 mdio@e1000 { 57 mdio@e1000 {
@@ -58,5 +59,9 @@ fman@400000 {
58 #size-cells = <0>; 59 #size-cells = <0>;
59 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; 60 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio";
60 reg = <0xe1000 0x1000>; 61 reg = <0xe1000 0x1000>;
62
63 pcsphy0: ethernet-phy@0 {
64 reg = <0x0>;
65 };
61 }; 66 };
62}; 67};
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-1.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-1.dtsi
index a4fc28654b31..ee44182c6348 100644
--- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-1.dtsi
+++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-1.dtsi
@@ -51,6 +51,7 @@ fman@400000 {
51 reg = <0xe2000 0x1000>; 51 reg = <0xe2000 0x1000>;
52 fsl,fman-ports = <&fman0_rx_0x09 &fman0_tx_0x29>; 52 fsl,fman-ports = <&fman0_rx_0x09 &fman0_tx_0x29>;
53 ptp-timer = <&ptp_timer0>; 53 ptp-timer = <&ptp_timer0>;
54 pcsphy-handle = <&pcsphy1>;
54 }; 55 };
55 56
56 mdio@e3000 { 57 mdio@e3000 {
@@ -58,5 +59,9 @@ fman@400000 {
58 #size-cells = <0>; 59 #size-cells = <0>;
59 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; 60 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio";
60 reg = <0xe3000 0x1000>; 61 reg = <0xe3000 0x1000>;
62
63 pcsphy1: ethernet-phy@0 {
64 reg = <0x0>;
65 };
61 }; 66 };
62}; 67};
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-2.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-2.dtsi
index 78596faadf99..f05f0d775039 100644
--- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-2.dtsi
+++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-2.dtsi
@@ -51,6 +51,7 @@ fman@400000 {
51 reg = <0xe4000 0x1000>; 51 reg = <0xe4000 0x1000>;
52 fsl,fman-ports = <&fman0_rx_0x0a &fman0_tx_0x2a>; 52 fsl,fman-ports = <&fman0_rx_0x0a &fman0_tx_0x2a>;
53 ptp-timer = <&ptp_timer0>; 53 ptp-timer = <&ptp_timer0>;
54 pcsphy-handle = <&pcsphy2>;
54 }; 55 };
55 56
56 mdio@e5000 { 57 mdio@e5000 {
@@ -58,5 +59,9 @@ fman@400000 {
58 #size-cells = <0>; 59 #size-cells = <0>;
59 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; 60 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio";
60 reg = <0xe5000 0x1000>; 61 reg = <0xe5000 0x1000>;
62
63 pcsphy2: ethernet-phy@0 {
64 reg = <0x0>;
65 };
61 }; 66 };
62}; 67};
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-3.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-3.dtsi
index af93abd86d78..a9114ec51075 100644
--- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-3.dtsi
+++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-3.dtsi
@@ -51,6 +51,7 @@ fman@400000 {
51 reg = <0xe6000 0x1000>; 51 reg = <0xe6000 0x1000>;
52 fsl,fman-ports = <&fman0_rx_0x0b &fman0_tx_0x2b>; 52 fsl,fman-ports = <&fman0_rx_0x0b &fman0_tx_0x2b>;
53 ptp-timer = <&ptp_timer0>; 53 ptp-timer = <&ptp_timer0>;
54 pcsphy-handle = <&pcsphy3>;
54 }; 55 };
55 56
56 mdio@e7000 { 57 mdio@e7000 {
@@ -58,5 +59,9 @@ fman@400000 {
58 #size-cells = <0>; 59 #size-cells = <0>;
59 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; 60 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio";
60 reg = <0xe7000 0x1000>; 61 reg = <0xe7000 0x1000>;
62
63 pcsphy3: ethernet-phy@0 {
64 reg = <0x0>;
65 };
61 }; 66 };
62}; 67};
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-4.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-4.dtsi
index 97cffd74bf3d..44dd00ac7367 100644
--- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-4.dtsi
+++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-4.dtsi
@@ -51,6 +51,7 @@ fman@400000 {
51 reg = <0xe8000 0x1000>; 51 reg = <0xe8000 0x1000>;
52 fsl,fman-ports = <&fman0_rx_0x0c &fman0_tx_0x2c>; 52 fsl,fman-ports = <&fman0_rx_0x0c &fman0_tx_0x2c>;
53 ptp-timer = <&ptp_timer0>; 53 ptp-timer = <&ptp_timer0>;
54 pcsphy-handle = <&pcsphy4>;
54 }; 55 };
55 56
56 mdio@e9000 { 57 mdio@e9000 {
@@ -58,5 +59,9 @@ fman@400000 {
58 #size-cells = <0>; 59 #size-cells = <0>;
59 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; 60 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio";
60 reg = <0xe9000 0x1000>; 61 reg = <0xe9000 0x1000>;
62
63 pcsphy4: ethernet-phy@0 {
64 reg = <0x0>;
65 };
61 }; 66 };
62}; 67};
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-5.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-5.dtsi
index 232c5c277bdb..5b1b84b58602 100644
--- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-5.dtsi
+++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-5.dtsi
@@ -51,6 +51,7 @@ fman@400000 {
51 reg = <0xea000 0x1000>; 51 reg = <0xea000 0x1000>;
52 fsl,fman-ports = <&fman0_rx_0x0d &fman0_tx_0x2d>; 52 fsl,fman-ports = <&fman0_rx_0x0d &fman0_tx_0x2d>;
53 ptp-timer = <&ptp_timer0>; 53 ptp-timer = <&ptp_timer0>;
54 pcsphy-handle = <&pcsphy5>;
54 }; 55 };
55 56
56 mdio@eb000 { 57 mdio@eb000 {
@@ -58,5 +59,9 @@ fman@400000 {
58 #size-cells = <0>; 59 #size-cells = <0>;
59 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; 60 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio";
60 reg = <0xeb000 0x1000>; 61 reg = <0xeb000 0x1000>;
62
63 pcsphy5: ethernet-phy@0 {
64 reg = <0x0>;
65 };
61 }; 66 };
62}; 67};
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-10g-0.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-10g-0.dtsi
index 89d64ee282b0..0e1daaef9e74 100644
--- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-10g-0.dtsi
+++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-10g-0.dtsi
@@ -52,6 +52,7 @@ fman@500000 {
52 compatible = "fsl,fman-memac"; 52 compatible = "fsl,fman-memac";
53 reg = <0xf0000 0x1000>; 53 reg = <0xf0000 0x1000>;
54 fsl,fman-ports = <&fman1_rx_0x10 &fman1_tx_0x30>; 54 fsl,fman-ports = <&fman1_rx_0x10 &fman1_tx_0x30>;
55 pcsphy-handle = <&pcsphy14>;
55 }; 56 };
56 57
57 mdio@f1000 { 58 mdio@f1000 {
@@ -59,5 +60,9 @@ fman@500000 {
59 #size-cells = <0>; 60 #size-cells = <0>;
60 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; 61 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio";
61 reg = <0xf1000 0x1000>; 62 reg = <0xf1000 0x1000>;
63
64 pcsphy14: ethernet-phy@0 {
65 reg = <0x0>;
66 };
62 }; 67 };
63}; 68};
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-10g-1.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-10g-1.dtsi
index 7fa9260889c6..68c5ef779266 100644
--- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-10g-1.dtsi
+++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-10g-1.dtsi
@@ -52,6 +52,7 @@ fman@500000 {
52 compatible = "fsl,fman-memac"; 52 compatible = "fsl,fman-memac";
53 reg = <0xf2000 0x1000>; 53 reg = <0xf2000 0x1000>;
54 fsl,fman-ports = <&fman1_rx_0x11 &fman1_tx_0x31>; 54 fsl,fman-ports = <&fman1_rx_0x11 &fman1_tx_0x31>;
55 pcsphy-handle = <&pcsphy15>;
55 }; 56 };
56 57
57 mdio@f3000 { 58 mdio@f3000 {
@@ -59,5 +60,9 @@ fman@500000 {
59 #size-cells = <0>; 60 #size-cells = <0>;
60 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; 61 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio";
61 reg = <0xf3000 0x1000>; 62 reg = <0xf3000 0x1000>;
63
64 pcsphy15: ethernet-phy@0 {
65 reg = <0x0>;
66 };
62 }; 67 };
63}; 68};
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-0.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-0.dtsi
index 3d236662bf07..605363cc1117 100644
--- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-0.dtsi
+++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-0.dtsi
@@ -51,6 +51,7 @@ fman@500000 {
51 reg = <0xe0000 0x1000>; 51 reg = <0xe0000 0x1000>;
52 fsl,fman-ports = <&fman1_rx_0x08 &fman1_tx_0x28>; 52 fsl,fman-ports = <&fman1_rx_0x08 &fman1_tx_0x28>;
53 ptp-timer = <&ptp_timer1>; 53 ptp-timer = <&ptp_timer1>;
54 pcsphy-handle = <&pcsphy8>;
54 }; 55 };
55 56
56 mdio@e1000 { 57 mdio@e1000 {
@@ -58,5 +59,9 @@ fman@500000 {
58 #size-cells = <0>; 59 #size-cells = <0>;
59 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; 60 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio";
60 reg = <0xe1000 0x1000>; 61 reg = <0xe1000 0x1000>;
62
63 pcsphy8: ethernet-phy@0 {
64 reg = <0x0>;
65 };
61 }; 66 };
62}; 67};
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-1.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-1.dtsi
index 97dc2eedd462..1955dfa13634 100644
--- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-1.dtsi
+++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-1.dtsi
@@ -51,6 +51,7 @@ fman@500000 {
51 reg = <0xe2000 0x1000>; 51 reg = <0xe2000 0x1000>;
52 fsl,fman-ports = <&fman1_rx_0x09 &fman1_tx_0x29>; 52 fsl,fman-ports = <&fman1_rx_0x09 &fman1_tx_0x29>;
53 ptp-timer = <&ptp_timer1>; 53 ptp-timer = <&ptp_timer1>;
54 pcsphy-handle = <&pcsphy9>;
54 }; 55 };
55 56
56 mdio@e3000 { 57 mdio@e3000 {
@@ -58,5 +59,9 @@ fman@500000 {
58 #size-cells = <0>; 59 #size-cells = <0>;
59 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; 60 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio";
60 reg = <0xe3000 0x1000>; 61 reg = <0xe3000 0x1000>;
62
63 pcsphy9: ethernet-phy@0 {
64 reg = <0x0>;
65 };
61 }; 66 };
62}; 67};
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-2.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-2.dtsi
index f084dd2f0bec..2c1476454ee0 100644
--- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-2.dtsi
+++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-2.dtsi
@@ -51,6 +51,7 @@ fman@500000 {
51 reg = <0xe4000 0x1000>; 51 reg = <0xe4000 0x1000>;
52 fsl,fman-ports = <&fman1_rx_0x0a &fman1_tx_0x2a>; 52 fsl,fman-ports = <&fman1_rx_0x0a &fman1_tx_0x2a>;
53 ptp-timer = <&ptp_timer1>; 53 ptp-timer = <&ptp_timer1>;
54 pcsphy-handle = <&pcsphy10>;
54 }; 55 };
55 56
56 mdio@e5000 { 57 mdio@e5000 {
@@ -58,5 +59,9 @@ fman@500000 {
58 #size-cells = <0>; 59 #size-cells = <0>;
59 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; 60 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio";
60 reg = <0xe5000 0x1000>; 61 reg = <0xe5000 0x1000>;
62
63 pcsphy10: ethernet-phy@0 {
64 reg = <0x0>;
65 };
61 }; 66 };
62}; 67};
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-3.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-3.dtsi
index bb627b3bf3db..b8b541ff5fb0 100644
--- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-3.dtsi
+++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-3.dtsi
@@ -51,6 +51,7 @@ fman@500000 {
51 reg = <0xe6000 0x1000>; 51 reg = <0xe6000 0x1000>;
52 fsl,fman-ports = <&fman1_rx_0x0b &fman1_tx_0x2b>; 52 fsl,fman-ports = <&fman1_rx_0x0b &fman1_tx_0x2b>;
53 ptp-timer = <&ptp_timer1>; 53 ptp-timer = <&ptp_timer1>;
54 pcsphy-handle = <&pcsphy11>;
54 }; 55 };
55 56
56 mdio@e7000 { 57 mdio@e7000 {
@@ -58,5 +59,9 @@ fman@500000 {
58 #size-cells = <0>; 59 #size-cells = <0>;
59 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; 60 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio";
60 reg = <0xe7000 0x1000>; 61 reg = <0xe7000 0x1000>;
62
63 pcsphy11: ethernet-phy@0 {
64 reg = <0x0>;
65 };
61 }; 66 };
62}; 67};
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-4.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-4.dtsi
index 821ed12225d4..4b2cfddd1b15 100644
--- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-4.dtsi
+++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-4.dtsi
@@ -51,6 +51,7 @@ fman@500000 {
51 reg = <0xe8000 0x1000>; 51 reg = <0xe8000 0x1000>;
52 fsl,fman-ports = <&fman1_rx_0x0c &fman1_tx_0x2c>; 52 fsl,fman-ports = <&fman1_rx_0x0c &fman1_tx_0x2c>;
53 ptp-timer = <&ptp_timer1>; 53 ptp-timer = <&ptp_timer1>;
54 pcsphy-handle = <&pcsphy12>;
54 }; 55 };
55 56
56 mdio@e9000 { 57 mdio@e9000 {
@@ -58,5 +59,9 @@ fman@500000 {
58 #size-cells = <0>; 59 #size-cells = <0>;
59 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; 60 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio";
60 reg = <0xe9000 0x1000>; 61 reg = <0xe9000 0x1000>;
62
63 pcsphy12: ethernet-phy@0 {
64 reg = <0x0>;
65 };
61 }; 66 };
62}; 67};
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-5.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-5.dtsi
index e245f1a1e42a..0a52ddf7cc17 100644
--- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-5.dtsi
+++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-5.dtsi
@@ -51,6 +51,7 @@ fman@500000 {
51 reg = <0xea000 0x1000>; 51 reg = <0xea000 0x1000>;
52 fsl,fman-ports = <&fman1_rx_0x0d &fman1_tx_0x2d>; 52 fsl,fman-ports = <&fman1_rx_0x0d &fman1_tx_0x2d>;
53 ptp-timer = <&ptp_timer1>; 53 ptp-timer = <&ptp_timer1>;
54 pcsphy-handle = <&pcsphy13>;
54 }; 55 };
55 56
56 mdio@eb000 { 57 mdio@eb000 {
@@ -58,5 +59,9 @@ fman@500000 {
58 #size-cells = <0>; 59 #size-cells = <0>;
59 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; 60 compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio";
60 reg = <0xeb000 0x1000>; 61 reg = <0xeb000 0x1000>;
62
63 pcsphy13: ethernet-phy@0 {
64 reg = <0x0>;
65 };
61 }; 66 };
62}; 67};
diff --git a/arch/powerpc/boot/dts/fsl/sbc8641d.dts b/arch/powerpc/boot/dts/fsl/sbc8641d.dts
new file mode 100644
index 000000000000..0a9733cd418d
--- /dev/null
+++ b/arch/powerpc/boot/dts/fsl/sbc8641d.dts
@@ -0,0 +1,203 @@
1/*
2 * SBC8641D Device Tree Source
3 *
4 * Copyright 2008 Wind River Systems Inc.
5 *
6 * Paul Gortmaker (see MAINTAINERS for contact information)
7 *
8 * Based largely on the mpc8641_hpcn.dts by Freescale Semiconductor Inc.
9 *
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License as published by the
12 * Free Software Foundation; either version 2 of the License, or (at your
13 * option) any later version.
14 */
15
16/include/ "mpc8641si-pre.dtsi"
17
18/ {
19 model = "SBC8641D";
20 compatible = "wind,sbc8641";
21
22 aliases {
23 pci1 = &pci1;
24 };
25
26 memory {
27 device_type = "memory";
28 reg = <0x00000000 0x20000000>; // 512M at 0x0
29 };
30
31 lbc: localbus@f8005000 {
32 reg = <0xf8005000 0x1000>;
33
34 ranges = <0 0 0xff000000 0x01000000 // 16MB Boot flash
35 1 0 0xf0000000 0x00010000 // 64KB EEPROM
36 2 0 0xf1000000 0x00100000 // EPLD (1MB)
37 3 0 0xe0000000 0x04000000 // 64MB LB SDRAM (CS3)
38 4 0 0xe4000000 0x04000000 // 64MB LB SDRAM (CS4)
39 6 0 0xf4000000 0x00100000 // LCD display (1MB)
40 7 0 0xe8000000 0x04000000>; // 64MB OneNAND
41
42 flash@0,0 {
43 compatible = "cfi-flash";
44 reg = <0 0 0x01000000>;
45 bank-width = <2>;
46 device-width = <2>;
47 #address-cells = <1>;
48 #size-cells = <1>;
49 partition@0 {
50 label = "dtb";
51 reg = <0x00000000 0x00100000>;
52 read-only;
53 };
54 partition@300000 {
55 label = "kernel";
56 reg = <0x00100000 0x00400000>;
57 read-only;
58 };
59 partition@400000 {
60 label = "fs";
61 reg = <0x00500000 0x00a00000>;
62 };
63 partition@700000 {
64 label = "firmware";
65 reg = <0x00f00000 0x00100000>;
66 read-only;
67 };
68 };
69
70 epld@2,0 {
71 compatible = "wrs,epld-localbus";
72 #address-cells = <2>;
73 #size-cells = <1>;
74 reg = <2 0 0x100000>;
75 ranges = <0 0 5 0 1 // User switches
76 1 0 5 1 1 // Board ID/Rev
77 3 0 5 3 1>; // LEDs
78 };
79 };
80
81 soc: soc@f8000000 {
82 ranges = <0x00000000 0xf8000000 0x00100000>;
83
84 enet0: ethernet@24000 {
85 tbi-handle = <&tbi0>;
86 phy-handle = <&phy0>;
87 phy-connection-type = "rgmii-id";
88 };
89
90 mdio@24520 {
91 phy0: ethernet-phy@1f {
92 reg = <0x1f>;
93 };
94 phy1: ethernet-phy@0 {
95 reg = <0>;
96 };
97 phy2: ethernet-phy@1 {
98 reg = <1>;
99 };
100 phy3: ethernet-phy@2 {
101 reg = <2>;
102 };
103 tbi0: tbi-phy@11 {
104 reg = <0x11>;
105 device_type = "tbi-phy";
106 };
107 };
108
109 enet1: ethernet@25000 {
110 tbi-handle = <&tbi1>;
111 phy-handle = <&phy1>;
112 phy-connection-type = "rgmii-id";
113 };
114
115 mdio@25520 {
116 tbi1: tbi-phy@11 {
117 reg = <0x11>;
118 device_type = "tbi-phy";
119 };
120 };
121
122 enet2: ethernet@26000 {
123 tbi-handle = <&tbi2>;
124 phy-handle = <&phy2>;
125 phy-connection-type = "rgmii-id";
126 };
127
128 mdio@26520 {
129 tbi2: tbi-phy@11 {
130 reg = <0x11>;
131 device_type = "tbi-phy";
132 };
133 };
134
135 enet3: ethernet@27000 {
136 tbi-handle = <&tbi3>;
137 phy-handle = <&phy3>;
138 phy-connection-type = "rgmii-id";
139 };
140
141 mdio@27520 {
142 tbi3: tbi-phy@11 {
143 reg = <0x11>;
144 device_type = "tbi-phy";
145 };
146 };
147 };
148
149 pci0: pcie@f8008000 {
150 reg = <0xf8008000 0x1000>;
151 ranges = <0x02000000 0x0 0x80000000 0x80000000 0x0 0x20000000
152 0x01000000 0x0 0x00000000 0xe2000000 0x0 0x00100000>;
153 interrupt-map-mask = <0xff00 0 0 7>;
154
155 pcie@0 {
156 ranges = <0x02000000 0x0 0x80000000
157 0x02000000 0x0 0x80000000
158 0x0 0x20000000
159
160 0x01000000 0x0 0x00000000
161 0x01000000 0x0 0x00000000
162 0x0 0x00100000>;
163 };
164
165 };
166
167 pci1: pcie@f8009000 {
168 compatible = "fsl,mpc8641-pcie";
169 device_type = "pci";
170 #size-cells = <2>;
171 #address-cells = <3>;
172 reg = <0xf8009000 0x1000>;
173 bus-range = <0 0xff>;
174 ranges = <0x02000000 0x0 0xa0000000 0xa0000000 0x0 0x20000000
175 0x01000000 0x0 0x00000000 0xe3000000 0x0 0x00100000>;
176 clock-frequency = <100000000>;
177 interrupts = <25 2 0 0>;
178 interrupt-map-mask = <0xf800 0 0 7>;
179 interrupt-map = <
180 /* IDSEL 0x0 */
181 0x0000 0 0 1 &mpic 4 1
182 0x0000 0 0 2 &mpic 5 1
183 0x0000 0 0 3 &mpic 6 1
184 0x0000 0 0 4 &mpic 7 1
185 >;
186
187 pcie@0 {
188 reg = <0 0 0 0 0>;
189 #size-cells = <2>;
190 #address-cells = <3>;
191 device_type = "pci";
192 ranges = <0x02000000 0x0 0xa0000000
193 0x02000000 0x0 0xa0000000
194 0x0 0x20000000
195
196 0x01000000 0x0 0x00000000
197 0x01000000 0x0 0x00000000
198 0x0 0x00100000>;
199 };
200 };
201};
202
203/include/ "mpc8641si-post.dtsi"
diff --git a/arch/powerpc/boot/dts/fsl/t1023rdb.dts b/arch/powerpc/boot/dts/fsl/t1023rdb.dts
index 6bd842beb1dc..29757623e5ba 100644
--- a/arch/powerpc/boot/dts/fsl/t1023rdb.dts
+++ b/arch/powerpc/boot/dts/fsl/t1023rdb.dts
@@ -79,7 +79,7 @@
79 flash@0 { 79 flash@0 {
80 #address-cells = <1>; 80 #address-cells = <1>;
81 #size-cells = <1>; 81 #size-cells = <1>;
82 compatible = "spansion,s25fl512s"; 82 compatible = "spansion,s25fl512s", "jedec,spi-nor";
83 reg = <0>; 83 reg = <0>;
84 spi-max-frequency = <10000000>; /* input clk */ 84 spi-max-frequency = <10000000>; /* input clk */
85 }; 85 };
@@ -111,6 +111,47 @@
111 shunt-resistor = <1000>; 111 shunt-resistor = <1000>;
112 }; 112 };
113 }; 113 };
114
115 fman@400000 {
116 fm1mac1: ethernet@e0000 {
117 phy-handle = <&sgmii_rtk_phy2>;
118 phy-connection-type = "sgmii";
119 sleep = <&rcpm 0x80000000>;
120 };
121
122 fm1mac2: ethernet@e2000 {
123 sleep = <&rcpm 0x40000000>;
124 };
125
126 fm1mac3: ethernet@e4000 {
127 phy-handle = <&sgmii_aqr_phy3>;
128 phy-connection-type = "sgmii-2500";
129 sleep = <&rcpm 0x20000000>;
130 };
131
132 fm1mac4: ethernet@e6000 {
133 phy-handle = <&rgmii_rtk_phy1>;
134 phy-connection-type = "rgmii";
135 sleep = <&rcpm 0x10000000>;
136 };
137
138
139 mdio0: mdio@fc000 {
140 rgmii_rtk_phy1: ethernet-phy@1 {
141 reg = <0x1>;
142 };
143 sgmii_rtk_phy2: ethernet-phy@3 {
144 reg = <0x3>;
145 };
146 };
147
148 xmdio0: mdio@fd000 {
149 sgmii_aqr_phy3: ethernet-phy@2 {
150 compatible = "ethernet-phy-ieee802.3-c45";
151 reg = <0x2>;
152 };
153 };
154 };
114 }; 155 };
115 156
116 pci0: pcie@ffe240000 { 157 pci0: pcie@ffe240000 {
diff --git a/arch/powerpc/boot/dts/fsl/t1024qds.dts b/arch/powerpc/boot/dts/fsl/t1024qds.dts
index 6a3581b8e1f8..772143da367f 100644
--- a/arch/powerpc/boot/dts/fsl/t1024qds.dts
+++ b/arch/powerpc/boot/dts/fsl/t1024qds.dts
@@ -87,7 +87,7 @@
87 flash@0 { 87 flash@0 {
88 #address-cells = <1>; 88 #address-cells = <1>;
89 #size-cells = <1>; 89 #size-cells = <1>;
90 compatible = "micron,n25q128a11"; /* 16MB */ 90 compatible = "micron,n25q128a11", "jedec,spi-nor"; /* 16MB */
91 reg = <0>; 91 reg = <0>;
92 spi-max-frequency = <10000000>; 92 spi-max-frequency = <10000000>;
93 }; 93 };
@@ -95,7 +95,7 @@
95 flash@1 { 95 flash@1 {
96 #address-cells = <1>; 96 #address-cells = <1>;
97 #size-cells = <1>; 97 #size-cells = <1>;
98 compatible = "sst,sst25wf040"; /* 512KB */ 98 compatible = "sst,sst25wf040", "jedec,spi-nor"; /* 512KB */
99 reg = <1>; 99 reg = <1>;
100 spi-max-frequency = <10000000>; 100 spi-max-frequency = <10000000>;
101 }; 101 };
@@ -103,7 +103,7 @@
103 flash@2 { 103 flash@2 {
104 #address-cells = <1>; 104 #address-cells = <1>;
105 #size-cells = <1>; 105 #size-cells = <1>;
106 compatible = "eon,en25s64"; /* 8MB */ 106 compatible = "eon,en25s64", "jedec,spi-nor"; /* 8MB */
107 reg = <2>; 107 reg = <2>;
108 spi-max-frequency = <10000000>; 108 spi-max-frequency = <10000000>;
109 }; 109 };
diff --git a/arch/powerpc/boot/dts/fsl/t1024rdb.dts b/arch/powerpc/boot/dts/fsl/t1024rdb.dts
index 0ccc7d03335e..302cdd22b4bb 100644
--- a/arch/powerpc/boot/dts/fsl/t1024rdb.dts
+++ b/arch/powerpc/boot/dts/fsl/t1024rdb.dts
@@ -89,7 +89,7 @@
89 flash@0 { 89 flash@0 {
90 #address-cells = <1>; 90 #address-cells = <1>;
91 #size-cells = <1>; 91 #size-cells = <1>;
92 compatible = "micron,n25q512ax3"; 92 compatible = "micron,n25q512ax3", "jedec,spi-nor";
93 reg = <0>; 93 reg = <0>;
94 spi-max-frequency = <10000000>; /* input clk */ 94 spi-max-frequency = <10000000>; /* input clk */
95 }; 95 };
@@ -140,6 +140,51 @@
140 #size-cells = <0>; 140 #size-cells = <0>;
141 }; 141 };
142 }; 142 };
143
144 fman@400000 {
145 fm1mac1: ethernet@e0000 {
146 phy-handle = <&xg_aqr105_phy3>;
147 phy-connection-type = "xgmii";
148 sleep = <&rcpm 0x80000000>;
149 };
150
151 fm1mac2: ethernet@e2000 {
152 sleep = <&rcpm 0x40000000>;
153 };
154
155 fm1mac3: ethernet@e4000 {
156 phy-handle = <&rgmii_phy2>;
157 phy-connection-type = "rgmii";
158 sleep = <&rcpm 0x20000000>;
159 };
160
161 fm1mac4: ethernet@e6000 {
162 phy-handle = <&rgmii_phy1>;
163 phy-connection-type = "rgmii";
164 sleep = <&rcpm 0x10000000>;
165 };
166
167
168 mdio0: mdio@fc000 {
169 rgmii_phy1: ethernet-phy@2 {
170 reg = <0x2>;
171 };
172 rgmii_phy2: ethernet-phy@6 {
173 reg = <0x6>;
174 };
175 };
176
177 xmdio0: mdio@fd000 {
178 xg_aqr105_phy3: ethernet-phy@1 {
179 compatible = "ethernet-phy-ieee802.3-c45";
180 reg = <0x1>;
181 };
182 sg_2500_aqr105_phy4: ethernet-phy@2 {
183 compatible = "ethernet-phy-ieee802.3-c45";
184 reg = <0x2>;
185 };
186 };
187 };
143 }; 188 };
144 189
145 pci0: pcie@ffe240000 { 190 pci0: pcie@ffe240000 {
diff --git a/arch/powerpc/boot/dts/fsl/t1040rdb.dts b/arch/powerpc/boot/dts/fsl/t1040rdb.dts
index cf194154bbdc..621f2c6ee6ad 100644
--- a/arch/powerpc/boot/dts/fsl/t1040rdb.dts
+++ b/arch/powerpc/boot/dts/fsl/t1040rdb.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * T1040RDB Device Tree Source 2 * T1040RDB Device Tree Source
3 * 3 *
4 * Copyright 2014 Freescale Semiconductor Inc. 4 * Copyright 2014 - 2015 Freescale Semiconductor Inc.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met: 7 * modification, are permitted provided that the following conditions are met:
@@ -38,6 +38,36 @@
38/ { 38/ {
39 model = "fsl,T1040RDB"; 39 model = "fsl,T1040RDB";
40 compatible = "fsl,T1040RDB"; 40 compatible = "fsl,T1040RDB";
41
42 aliases {
43 phy_sgmii_2 = &phy_sgmii_2;
44 };
45
46 soc@ffe000000 {
47 fman@400000 {
48 ethernet@e0000 {
49 fixed-link = <0 1 1000 0 0>;
50 phy-connection-type = "sgmii";
51 };
52
53 ethernet@e2000 {
54 fixed-link = <1 1 1000 0 0>;
55 phy-connection-type = "sgmii";
56 };
57
58 ethernet@e4000 {
59 phy-handle = <&phy_sgmii_2>;
60 phy-connection-type = "sgmii";
61 };
62
63 mdio@fc000 {
64 phy_sgmii_2: ethernet-phy@03 {
65 reg = <0x03>;
66 };
67 };
68 };
69 };
70
41 ifc: localbus@ffe124000 { 71 ifc: localbus@ffe124000 {
42 cpld@3,0 { 72 cpld@3,0 {
43 compatible = "fsl,t1040rdb-cpld"; 73 compatible = "fsl,t1040rdb-cpld";
diff --git a/arch/powerpc/boot/dts/fsl/t1042rdb.dts b/arch/powerpc/boot/dts/fsl/t1042rdb.dts
index 8d908e795e4d..2c138627b1b4 100644
--- a/arch/powerpc/boot/dts/fsl/t1042rdb.dts
+++ b/arch/powerpc/boot/dts/fsl/t1042rdb.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * T1042RDB Device Tree Source 2 * T1042RDB Device Tree Source
3 * 3 *
4 * Copyright 2014 Freescale Semiconductor Inc. 4 * Copyright 2014 - 2015 Freescale Semiconductor Inc.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met: 7 * modification, are permitted provided that the following conditions are met:
@@ -38,6 +38,34 @@
38/ { 38/ {
39 model = "fsl,T1042RDB"; 39 model = "fsl,T1042RDB";
40 compatible = "fsl,T1042RDB"; 40 compatible = "fsl,T1042RDB";
41
42 aliases {
43 phy_sgmii_2 = &phy_sgmii_2;
44 };
45
46 soc@ffe000000 {
47 fman@400000 {
48 ethernet@e0000 {
49 status = "disabled";
50 };
51
52 ethernet@e2000 {
53 status = "disabled";
54 };
55
56 ethernet@e4000 {
57 phy-handle = <&phy_sgmii_2>;
58 phy-connection-type = "sgmii";
59 };
60
61 mdio@fc000 {
62 phy_sgmii_2: ethernet-phy@03 {
63 reg = <0x03>;
64 };
65 };
66 };
67 };
68
41 ifc: localbus@ffe124000 { 69 ifc: localbus@ffe124000 {
42 cpld@3,0 { 70 cpld@3,0 {
43 compatible = "fsl,t1042rdb-cpld"; 71 compatible = "fsl,t1042rdb-cpld";
diff --git a/arch/powerpc/boot/dts/fsl/t1042rdb_pi.dts b/arch/powerpc/boot/dts/fsl/t1042rdb_pi.dts
index 98c001019d6a..8ec3ff45e6fc 100644
--- a/arch/powerpc/boot/dts/fsl/t1042rdb_pi.dts
+++ b/arch/powerpc/boot/dts/fsl/t1042rdb_pi.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * T1042RDB_PI Device Tree Source 2 * T1042RDB_PI Device Tree Source
3 * 3 *
4 * Copyright 2014 Freescale Semiconductor Inc. 4 * Copyright 2014 - 2015 Freescale Semiconductor Inc.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met: 7 * modification, are permitted provided that the following conditions are met:
@@ -38,11 +38,13 @@
38/ { 38/ {
39 model = "fsl,T1042RDB_PI"; 39 model = "fsl,T1042RDB_PI";
40 compatible = "fsl,T1042RDB_PI"; 40 compatible = "fsl,T1042RDB_PI";
41
41 ifc: localbus@ffe124000 { 42 ifc: localbus@ffe124000 {
42 cpld@3,0 { 43 cpld@3,0 {
43 compatible = "fsl,t1042rdb_pi-cpld"; 44 compatible = "fsl,t1042rdb_pi-cpld";
44 }; 45 };
45 }; 46 };
47
46 soc: soc@ffe000000 { 48 soc: soc@ffe000000 {
47 i2c@118000 { 49 i2c@118000 {
48 rtc@68 { 50 rtc@68 {
@@ -51,6 +53,20 @@
51 interrupts = <0x2 0x1 0 0>; 53 interrupts = <0x2 0x1 0 0>;
52 }; 54 };
53 }; 55 };
56
57 fman@400000 {
58 ethernet@e0000 {
59 status = "disabled";
60 };
61
62 ethernet@e2000 {
63 status = "disabled";
64 };
65
66 ethernet@e4000 {
67 status = "disabled";
68 };
69 };
54 }; 70 };
55}; 71};
56 72
diff --git a/arch/powerpc/boot/dts/fsl/t104xd4rdb.dtsi b/arch/powerpc/boot/dts/fsl/t104xd4rdb.dtsi
index 3f6d7c6a106b..8c7ea6c05de9 100644
--- a/arch/powerpc/boot/dts/fsl/t104xd4rdb.dtsi
+++ b/arch/powerpc/boot/dts/fsl/t104xd4rdb.dtsi
@@ -104,7 +104,7 @@
104 flash@0 { 104 flash@0 {
105 #address-cells = <1>; 105 #address-cells = <1>;
106 #size-cells = <1>; 106 #size-cells = <1>;
107 compatible = "micron,n25q512ax3"; 107 compatible = "micron,n25q512ax3", "jedec,spi-nor";
108 reg = <0>; 108 reg = <0>;
109 /* input clock */ 109 /* input clock */
110 spi-max-frequency = <10000000>; 110 spi-max-frequency = <10000000>;
diff --git a/arch/powerpc/boot/dts/fsl/t104xqds.dtsi b/arch/powerpc/boot/dts/fsl/t104xqds.dtsi
index 1498d1e4aecf..977af355b388 100644
--- a/arch/powerpc/boot/dts/fsl/t104xqds.dtsi
+++ b/arch/powerpc/boot/dts/fsl/t104xqds.dtsi
@@ -1,7 +1,7 @@
1/* 1/*
2 * T104xQDS Device Tree Source 2 * T104xQDS Device Tree Source
3 * 3 *
4 * Copyright 2013 - 2014 Freescale Semiconductor Inc. 4 * Copyright 2013 - 2015 Freescale Semiconductor Inc.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met: 7 * modification, are permitted provided that the following conditions are met:
@@ -38,6 +38,33 @@
38 #size-cells = <2>; 38 #size-cells = <2>;
39 interrupt-parent = <&mpic>; 39 interrupt-parent = <&mpic>;
40 40
41 aliases {
42 emi1_rgmii0 = &t1040mdio0;
43 emi1_rgmii1 = &t1040mdio1;
44 emi1_slot3 = &t1040mdio3;
45 emi1_slot5 = &t1040mdio5;
46 emi1_slot6 = &t1040mdio6;
47 emi1_slot7 = &t1040mdio7;
48 rgmii_phy1 = &rgmii_phy1;
49 rgmii_phy2 = &rgmii_phy2;
50 phy_s3_01 = &phy_s3_01;
51 phy_s3_02 = &phy_s3_02;
52 phy_s3_03 = &phy_s3_03;
53 phy_s3_04 = &phy_s3_04;
54 phy_s5_01 = &phy_s5_01;
55 phy_s5_02 = &phy_s5_02;
56 phy_s5_03 = &phy_s5_03;
57 phy_s5_04 = &phy_s5_04;
58 phy_s6_01 = &phy_s6_01;
59 phy_s6_02 = &phy_s6_02;
60 phy_s6_03 = &phy_s6_03;
61 phy_s6_04 = &phy_s6_04;
62 phy_s7_01 = &phy_s7_01;
63 phy_s7_02 = &phy_s7_02;
64 phy_s7_03 = &phy_s7_03;
65 phy_s7_04 = &phy_s7_04;
66 };
67
41 reserved-memory { 68 reserved-memory {
42 #address-cells = <2>; 69 #address-cells = <2>;
43 #size-cells = <2>; 70 #size-cells = <2>;
@@ -85,6 +112,128 @@
85 #size-cells = <1>; 112 #size-cells = <1>;
86 compatible = "fsl,fpga-qixis"; 113 compatible = "fsl,fpga-qixis";
87 reg = <3 0 0x300>; 114 reg = <3 0 0x300>;
115 ranges = <0 3 0 0x300>;
116
117 mdio-mux-emi1 {
118 #address-cells = <1>;
119 #size-cells = <0>;
120 compatible = "mdio-mux-mmioreg", "mdio-mux";
121 mdio-parent-bus = <&mdio0>;
122 reg = <0x54 1>;
123 mux-mask = <0xe0>;
124
125 t1040mdio0: mdio@0 {
126 #address-cells = <1>;
127 #size-cells = <0>;
128 reg = <0x00>;
129 status = "disabled";
130
131 rgmii_phy1: ethernet-phy@1 {
132 reg = <0x1>;
133 };
134 };
135
136 t1040mdio1: mdio@20 {
137 #address-cells = <1>;
138 #size-cells = <0>;
139 reg = <0x20>;
140 status = "disabled";
141
142 rgmii_phy2: ethernet-phy@2 {
143 reg = <0x2>;
144 };
145 };
146
147 t1040mdio3: mdio@60 {
148 #address-cells = <1>;
149 #size-cells = <0>;
150 reg = <0x60>;
151 status = "disabled";
152
153 phy_s3_01: ethernet-phy@1c {
154 reg = <0x1c>;
155 };
156
157 phy_s3_02: ethernet-phy@1d {
158 reg = <0x1d>;
159 };
160
161 phy_s3_03: ethernet-phy@1e {
162 reg = <0x1e>;
163 };
164
165 phy_s3_04: ethernet-phy@1f {
166 reg = <0x1f>;
167 };
168 };
169
170 t1040mdio5: mdio@a0 {
171 #address-cells = <1>;
172 #size-cells = <0>;
173 reg = <0xa0>;
174
175 phy_s5_01: ethernet-phy@1c {
176 reg = <0x14>;
177 };
178
179 phy_s5_02: ethernet-phy@1d {
180 reg = <0x15>;
181 };
182
183 phy_s5_03: ethernet-phy@1e {
184 reg = <0x16>;
185 };
186
187 phy_s5_04: ethernet-phy@1f {
188 reg = <0x17>;
189 };
190 };
191
192 t1040mdio6: mdio@c0 {
193 #address-cells = <1>;
194 #size-cells = <0>;
195 reg = <0xc0>;
196
197 phy_s6_01: ethernet-phy@1c {
198 reg = <0x18>;
199 };
200
201 phy_s6_02: ethernet-phy@1d {
202 reg = <0x19>;
203 };
204
205 phy_s6_03: ethernet-phy@1e {
206 reg = <0x1a>;
207 };
208
209 phy_s6_04: ethernet-phy@1f {
210 reg = <0x1b>;
211 };
212 };
213
214 t1040mdio7: mdio@e0 {
215 #address-cells = <1>;
216 #size-cells = <0>;
217 reg = <0xe0>;
218 status = "disabled";
219
220 phy_s7_01: ethernet-phy@1c {
221 reg = <0x1c>;
222 };
223
224 phy_s7_02: ethernet-phy@1d {
225 reg = <0x1d>;
226 };
227
228 phy_s7_03: ethernet-phy@1e {
229 reg = <0x1e>;
230 };
231
232 phy_s7_04: ethernet-phy@1f {
233 reg = <0x1f>;
234 };
235 };
236 };
88 }; 237 };
89 }; 238 };
90 239
@@ -112,7 +261,7 @@
112 flash@0 { 261 flash@0 {
113 #address-cells = <1>; 262 #address-cells = <1>;
114 #size-cells = <1>; 263 #size-cells = <1>;
115 compatible = "micron,n25q128a11"; 264 compatible = "micron,n25q128a11", "jedec,spi-nor";
116 reg = <0>; 265 reg = <0>;
117 spi-max-frequency = <10000000>; /* input clock */ 266 spi-max-frequency = <10000000>; /* input clock */
118 }; 267 };
@@ -129,6 +278,33 @@
129 interrupts = <0x1 0x1 0 0>; 278 interrupts = <0x1 0x1 0 0>;
130 }; 279 };
131 }; 280 };
281
282 fman@400000 {
283 ethernet@e0000 {
284 fixed-link = <0 1 1000 0 0>;
285 phy-connection-type = "sgmii";
286 };
287
288 ethernet@e2000 {
289 fixed-link = <1 1 1000 0 0>;
290 phy-connection-type = "sgmii";
291 };
292
293 ethernet@e4000 {
294 phy-handle = <&phy_s7_03>;
295 phy-connection-type = "sgmii";
296 };
297
298 ethernet@e6000 {
299 phy-handle = <&rgmii_phy1>;
300 phy-connection-type = "rgmii";
301 };
302
303 ethernet@e8000 {
304 phy-handle = <&rgmii_phy2>;
305 phy-connection-type = "rgmii";
306 };
307 };
132 }; 308 };
133 309
134 pci0: pcie@ffe240000 { 310 pci0: pcie@ffe240000 {
diff --git a/arch/powerpc/boot/dts/fsl/t104xrdb.dtsi b/arch/powerpc/boot/dts/fsl/t104xrdb.dtsi
index 830ea484295b..72691ef102ee 100644
--- a/arch/powerpc/boot/dts/fsl/t104xrdb.dtsi
+++ b/arch/powerpc/boot/dts/fsl/t104xrdb.dtsi
@@ -1,7 +1,7 @@
1/* 1/*
2 * T1040RDB/T1042RDB Device Tree Source 2 * T1040RDB/T1042RDB Device Tree Source
3 * 3 *
4 * Copyright 2014 Freescale Semiconductor Inc. 4 * Copyright 2014 - 2015 Freescale Semiconductor Inc.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met: 7 * modification, are permitted provided that the following conditions are met:
@@ -33,6 +33,12 @@
33 */ 33 */
34 34
35/ { 35/ {
36 aliases {
37 phy_rgmii_0 = &phy_rgmii_0;
38 phy_rgmii_1 = &phy_rgmii_1;
39 phy_sgmii_2 = &phy_sgmii_2;
40 };
41
36 reserved-memory { 42 reserved-memory {
37 #address-cells = <2>; 43 #address-cells = <2>;
38 #size-cells = <2>; 44 #size-cells = <2>;
@@ -103,10 +109,15 @@
103 flash@0 { 109 flash@0 {
104 #address-cells = <1>; 110 #address-cells = <1>;
105 #size-cells = <1>; 111 #size-cells = <1>;
106 compatible = "micron,n25q512a"; 112 compatible = "micron,n25q512a", "jedec,spi-nor";
107 reg = <0>; 113 reg = <0>;
108 spi-max-frequency = <10000000>; /* input clock */ 114 spi-max-frequency = <10000000>; /* input clock */
109 }; 115 };
116 slic@3 {
117 compatible = "maxim,ds26522";
118 reg = <3>;
119 spi-max-frequency = <2000000>; /* input clock */
120 };
110 }; 121 };
111 122
112 i2c@118000 { 123 i2c@118000 {
@@ -125,6 +136,31 @@
125 }; 136 };
126 }; 137 };
127 138
139 fman@400000 {
140 ethernet@e6000 {
141 phy-handle = <&phy_rgmii_0>;
142 phy-connection-type = "rgmii";
143 };
144
145 ethernet@e8000 {
146 phy-handle = <&phy_rgmii_1>;
147 phy-connection-type = "rgmii";
148 };
149
150 mdio0: mdio@fc000 {
151 phy_sgmii_2: ethernet-phy@03 {
152 reg = <0x03>;
153 };
154
155 phy_rgmii_0: ethernet-phy@01 {
156 reg = <0x01>;
157 };
158
159 phy_rgmii_1: ethernet-phy@02 {
160 reg = <0x02>;
161 };
162 };
163 };
128 }; 164 };
129 165
130 pci0: pcie@ffe240000 { 166 pci0: pcie@ffe240000 {
diff --git a/arch/powerpc/boot/dts/fsl/t2080qds.dts b/arch/powerpc/boot/dts/fsl/t2080qds.dts
index 9c8e10fe04cb..8d190e8c62ce 100644
--- a/arch/powerpc/boot/dts/fsl/t2080qds.dts
+++ b/arch/powerpc/boot/dts/fsl/t2080qds.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * T2080QDS Device Tree Source 2 * T2080QDS Device Tree Source
3 * 3 *
4 * Copyright 2013 Freescale Semiconductor Inc. 4 * Copyright 2013 - 2015 Freescale Semiconductor Inc.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met: 7 * modification, are permitted provided that the following conditions are met:
@@ -42,6 +42,12 @@
42 #size-cells = <2>; 42 #size-cells = <2>;
43 interrupt-parent = <&mpic>; 43 interrupt-parent = <&mpic>;
44 44
45 aliases {
46 emi1_slot1 = &t2080mdio2;
47 emi1_slot2 = &t2080mdio3;
48 emi1_slot3 = &t2080mdio4;
49 };
50
45 rio: rapidio@ffe0c0000 { 51 rio: rapidio@ffe0c0000 {
46 reg = <0xf 0xfe0c0000 0 0x11000>; 52 reg = <0xf 0xfe0c0000 0 0x11000>;
47 53
@@ -54,4 +60,154 @@
54 }; 60 };
55}; 61};
56 62
63&soc {
64 fman@400000 {
65 ethernet@e0000 {
66 phy-handle = <&phy_sgmii_s3_1e>;
67 phy-connection-type = "xgmii";
68 };
69
70 ethernet@e2000 {
71 phy-handle = <&phy_sgmii_s3_1f>;
72 phy-connection-type = "xgmii";
73 };
74
75 ethernet@e4000 {
76 phy-handle = <&rgmii_phy1>;
77 phy-connection-type = "rgmii";
78 };
79
80 ethernet@e6000 {
81 phy-handle = <&rgmii_phy2>;
82 phy-connection-type = "rgmii";
83 };
84
85 ethernet@e8000 {
86 phy-handle = <&phy_sgmii_s2_1e>;
87 phy-connection-type = "sgmii";
88 };
89
90 ethernet@ea000 {
91 phy-handle = <&phy_sgmii_s2_1d>;
92 phy-connection-type = "sgmii";
93 };
94
95 ethernet@f0000 {
96 phy-handle = <&phy_xaui_slot3>;
97 phy-connection-type = "xgmii";
98 };
99
100 ethernet@f2000 {
101 phy-handle = <&phy_sgmii_s3_1f>;
102 phy-connection-type = "xgmii";
103 };
104
105 mdio@fd000 {
106 phy_xaui_slot3: ethernet-phy@3 {
107 compatible = "ethernet-phy-ieee802.3-c45";
108 reg = <0x3>;
109 };
110 };
111 };
112};
113
114&boardctrl {
115 mdio-mux-emi1 {
116 compatible = "mdio-mux-mmioreg", "mdio-mux";
117 mdio-parent-bus = <&mdio0>;
118 #address-cells = <1>;
119 #size-cells = <0>;
120 reg = <0x54 1>;
121 mux-mask = <0xe0>;
122
123 t2080mdio0: mdio@0 {
124 #address-cells = <1>;
125 #size-cells = <0>;
126 reg = <0>;
127
128 rgmii_phy1: ethernet-phy@1 {
129 reg = <0x1>;
130 };
131 };
132
133 t2080mdio1: mdio@20 {
134 #address-cells = <1>;
135 #size-cells = <0>;
136 reg = <0x20>;
137
138 rgmii_phy2: ethernet-phy@2 {
139 reg = <0x2>;
140 };
141 };
142
143 t2080mdio2: mdio@40 {
144 #address-cells = <1>;
145 #size-cells = <0>;
146 reg = <0x40>;
147 status = "disabled";
148
149 phy_sgmii_s1_1c: ethernet-phy@1c {
150 reg = <0x1c>;
151 };
152
153 phy_sgmii_s1_1d: ethernet-phy@1d {
154 reg = <0x1d>;
155 };
156
157 phy_sgmii_s1_1e: ethernet-phy@1e {
158 reg = <0x1e>;
159 };
160
161 phy_sgmii_s1_1f: ethernet-phy@1f {
162 reg = <0x1f>;
163 };
164 };
165
166 t2080mdio3: mdio@c0 {
167 #address-cells = <1>;
168 #size-cells = <0>;
169 reg = <0xc0>;
170
171 phy_sgmii_s2_1c: ethernet-phy@1c {
172 reg = <0x1c>;
173 };
174
175 phy_sgmii_s2_1d: ethernet-phy@1d {
176 reg = <0x1d>;
177 };
178
179 phy_sgmii_s2_1e: ethernet-phy@1e {
180 reg = <0x1e>;
181 };
182
183 phy_sgmii_s2_1f: ethernet-phy@1f {
184 reg = <0x1f>;
185 };
186 };
187
188 t2080mdio4: mdio@60 {
189 #address-cells = <1>;
190 #size-cells = <0>;
191 reg = <0x60>;
192 status = "disabled";
193
194 phy_sgmii_s3_1c: ethernet-phy@1c {
195 reg = <0x1c>;
196 };
197
198 phy_sgmii_s3_1d: ethernet-phy@1d {
199 reg = <0x1d>;
200 };
201
202 phy_sgmii_s3_1e: ethernet-phy@1e {
203 reg = <0x1e>;
204 };
205
206 phy_sgmii_s3_1f: ethernet-phy@1f {
207 reg = <0x1f>;
208 };
209 };
210 };
211};
212
57/include/ "t2080si-post.dtsi" 213/include/ "t2080si-post.dtsi"
diff --git a/arch/powerpc/boot/dts/fsl/t2080rdb.dts b/arch/powerpc/boot/dts/fsl/t2080rdb.dts
index 33205bf08919..836e4c965b22 100644
--- a/arch/powerpc/boot/dts/fsl/t2080rdb.dts
+++ b/arch/powerpc/boot/dts/fsl/t2080rdb.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * T2080PCIe-RDB Board Device Tree Source 2 * T2080PCIe-RDB Board Device Tree Source
3 * 3 *
4 * Copyright 2014 Freescale Semiconductor Inc. 4 * Copyright 2014 - 2015 Freescale Semiconductor Inc.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met: 7 * modification, are permitted provided that the following conditions are met:
@@ -54,4 +54,69 @@
54 }; 54 };
55}; 55};
56 56
57&soc {
58 fman@400000 {
59 ethernet@e0000 {
60 phy-handle = <&xg_aq1202_phy3>;
61 phy-connection-type = "xgmii";
62 };
63
64 ethernet@e2000 {
65 phy-handle = <&xg_aq1202_phy4>;
66 phy-connection-type = "xgmii";
67 };
68
69 ethernet@e4000 {
70 phy-handle = <&rgmii_phy1>;
71 phy-connection-type = "rgmii";
72 };
73
74 ethernet@e6000 {
75 phy-handle = <&rgmii_phy2>;
76 phy-connection-type = "rgmii";
77 };
78
79 ethernet@f0000 {
80 phy-handle = <&xg_cs4315_phy1>;
81 phy-connection-type = "xgmii";
82 };
83
84 ethernet@f2000 {
85 phy-handle = <&xg_cs4315_phy2>;
86 phy-connection-type = "xgmii";
87 };
88
89 mdio@fc000 {
90 rgmii_phy1: ethernet-phy@1 {
91 reg = <0x1>;
92 };
93 rgmii_phy2: ethernet-phy@2 {
94 reg = <0x2>;
95 };
96 };
97
98 mdio@fd000 {
99 xg_cs4315_phy1: ethernet-phy@c {
100 compatible = "ethernet-phy-ieee802.3-c45";
101 reg = <0xc>;
102 };
103
104 xg_cs4315_phy2: ethernet-phy@d {
105 compatible = "ethernet-phy-ieee802.3-c45";
106 reg = <0xd>;
107 };
108
109 xg_aq1202_phy3: ethernet-phy@0 {
110 compatible = "ethernet-phy-ieee802.3-c45";
111 reg = <0x0>;
112 };
113
114 xg_aq1202_phy4: ethernet-phy@1 {
115 compatible = "ethernet-phy-ieee802.3-c45";
116 reg = <0x1>;
117 };
118 };
119 };
120};
121
57/include/ "t2080si-post.dtsi" 122/include/ "t2080si-post.dtsi"
diff --git a/arch/powerpc/boot/dts/fsl/t2081qds.dts b/arch/powerpc/boot/dts/fsl/t2081qds.dts
index b81213596dbf..fc5c4a30f7ad 100644
--- a/arch/powerpc/boot/dts/fsl/t2081qds.dts
+++ b/arch/powerpc/boot/dts/fsl/t2081qds.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * T2081QDS Device Tree Source 2 * T2081QDS Device Tree Source
3 * 3 *
4 * Copyright 2013 Freescale Semiconductor Inc. 4 * Copyright 2013 - 2015 Freescale Semiconductor Inc.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met: 7 * modification, are permitted provided that the following conditions are met:
@@ -41,6 +41,225 @@
41 #address-cells = <2>; 41 #address-cells = <2>;
42 #size-cells = <2>; 42 #size-cells = <2>;
43 interrupt-parent = <&mpic>; 43 interrupt-parent = <&mpic>;
44
45 aliases {
46 emi1_slot1 = &t2081mdio2;
47 emi1_slot2 = &t2081mdio3;
48 emi1_slot3 = &t2081mdio4;
49 emi1_slot5 = &t2081mdio5;
50 emi1_slot6 = &t2081mdio6;
51 emi1_slot7 = &t2081mdio7;
52 };
53};
54
55&soc {
56 fman@400000 {
57 ethernet@e0000 {
58 phy-handle = <&phy_sgmii_s7_1c>;
59 phy-connection-type = "sgmii";
60 };
61
62 ethernet@e2000 {
63 phy-handle = <&phy_sgmii_s7_1d>;
64 phy-connection-type = "sgmii";
65 };
66
67 ethernet@e4000 {
68 phy-handle = <&rgmii_phy1>;
69 phy-connection-type = "rgmii";
70 };
71
72 ethernet@e6000 {
73 phy-handle = <&rgmii_phy2>;
74 phy-connection-type = "rgmii";
75 };
76
77 ethernet@e8000 {
78 phy-handle = <&phy_sgmii_s3_1c>;
79 phy-connection-type = "sgmii";
80 };
81
82 ethernet@ea000 {
83 phy-handle = <&phy_sgmii_s7_1f>;
84 phy-connection-type = "sgmii";
85 };
86
87 ethernet@f0000 {
88 phy-handle = <&phy_sgmii_s2_1c>;
89 phy-connection-type = "xgmii";
90 };
91
92 ethernet@f2000 {
93 phy-handle = <&phy_sgmii_s7_1e>;
94 phy-connection-type = "xgmii";
95 };
96 };
97};
98
99&boardctrl {
100 mdio-mux-emi1 {
101 compatible = "mdio-mux-mmioreg", "mdio-mux";
102 mdio-parent-bus = <&mdio0>;
103 #address-cells = <1>;
104 #size-cells = <0>;
105 reg = <0x54 1>;
106 mux-mask = <0xe0>;
107
108 t2081mdio0: mdio@0 {
109 #address-cells = <1>;
110 #size-cells = <0>;
111 reg = <0>;
112
113 rgmii_phy1: ethernet-phy@1 {
114 reg = <0x1>;
115 };
116 };
117
118 t2081mdio1: mdio@20 {
119 #address-cells = <1>;
120 #size-cells = <0>;
121 reg = <0x20>;
122
123 rgmii_phy2: ethernet-phy@2 {
124 reg = <0x2>;
125 };
126 };
127
128 t2081mdio2: mdio@40 {
129 #address-cells = <1>;
130 #size-cells = <0>;
131 reg = <0x40>;
132
133 phy_sgmii_s1_1c: ethernet-phy@1c {
134 reg = <0x1c>;
135 };
136
137 phy_sgmii_s1_1d: ethernet-phy@1d {
138 reg = <0x1d>;
139 };
140
141 phy_sgmii_s1_1e: ethernet-phy@1e {
142 reg = <0x1e>;
143 };
144
145 phy_sgmii_s1_1f: ethernet-phy@1f {
146 reg = <0x1f>;
147 };
148 };
149
150 t2081mdio3: mdio@60 {
151 #address-cells = <1>;
152 #size-cells = <0>;
153 reg = <0x60>;
154
155 phy_sgmii_s2_1c: ethernet-phy@1c {
156 reg = <0x1c>;
157 };
158
159 phy_sgmii_s2_1d: ethernet-phy@1d {
160 reg = <0x1d>;
161 };
162
163 phy_sgmii_s2_1e: ethernet-phy@1e {
164 reg = <0x1e>;
165 };
166
167 phy_sgmii_s2_1f: ethernet-phy@1f {
168 reg = <0x1f>;
169 };
170 };
171
172 t2081mdio4: mdio@80 {
173 #address-cells = <1>;
174 #size-cells = <0>;
175 reg = <0x80>;
176 status = "disabled";
177
178 phy_sgmii_s3_1c: ethernet-phy@1c {
179 reg = <0x1c>;
180 };
181
182 phy_sgmii_s3_1d: ethernet-phy@1d {
183 reg = <0x1d>;
184 };
185
186 phy_sgmii_s3_1e: ethernet-phy@1e {
187 reg = <0x1e>;
188 };
189
190 phy_sgmii_s3_1f: ethernet-phy@1f {
191 reg = <0x1f>;
192 };
193 };
194
195 t2081mdio5: mdio@a0 {
196 #address-cells = <1>;
197 #size-cells = <0>;
198 reg = <0xa0>;
199 status = "disabled";
200
201 phy_sgmii_s5_1c: ethernet-phy@1c {
202 reg = <0x1c>;
203 };
204
205 phy_sgmii_s5_1d: ethernet-phy@1d {
206 reg = <0x1d>;
207 };
208
209 phy_sgmii_s5_1e: ethernet-phy@1e {
210 reg = <0x1e>;
211 };
212
213 phy_sgmii_s5_1f: ethernet-phy@1f {
214 reg = <0x1f>;
215 };
216 };
217
218 t2081mdio6: mdio@c0 {
219 #address-cells = <1>;
220 #size-cells = <0>;
221 reg = <0xc0>;
222 status = "disabled";
223
224 phy_sgmii_s6_1c: ethernet-phy@1c {
225 reg = <0x1c>;
226 };
227
228 phy_sgmii_s6_1d: ethernet-phy@1d {
229 reg = <0x1d>;
230 };
231
232 phy_sgmii_s6_1e: ethernet-phy@1e {
233 reg = <0x1e>;
234 };
235
236 phy_sgmii_s6_1f: ethernet-phy@1f {
237 reg = <0x1f>;
238 };
239 };
240
241 t2081mdio7: mdio@e0 {
242 #address-cells = <1>;
243 #size-cells = <0>;
244 reg = <0xe0>;
245
246 phy_sgmii_s7_1c: ethernet-phy@1c {
247 reg = <0x1c>;
248 };
249
250 phy_sgmii_s7_1d: ethernet-phy@1d {
251 reg = <0x1d>;
252 };
253
254 phy_sgmii_s7_1e: ethernet-phy@1e {
255 reg = <0x1e>;
256 };
257
258 phy_sgmii_s7_1f: ethernet-phy@1f {
259 reg = <0x1f>;
260 };
261 };
262 };
44}; 263};
45 264
46/include/ "t2081si-post.dtsi" 265/include/ "t2081si-post.dtsi"
diff --git a/arch/powerpc/boot/dts/fsl/t208xqds.dtsi b/arch/powerpc/boot/dts/fsl/t208xqds.dtsi
index 869f9159b4d1..ec080bd01b09 100644
--- a/arch/powerpc/boot/dts/fsl/t208xqds.dtsi
+++ b/arch/powerpc/boot/dts/fsl/t208xqds.dtsi
@@ -112,7 +112,7 @@
112 flash@0 { 112 flash@0 {
113 #address-cells = <1>; 113 #address-cells = <1>;
114 #size-cells = <1>; 114 #size-cells = <1>;
115 compatible = "micron,n25q128a11"; /* 16MB */ 115 compatible = "micron,n25q128a11", "jedec,spi-nor"; /* 16MB */
116 reg = <0>; 116 reg = <0>;
117 spi-max-frequency = <40000000>; /* input clock */ 117 spi-max-frequency = <40000000>; /* input clock */
118 }; 118 };
@@ -120,7 +120,7 @@
120 flash@1 { 120 flash@1 {
121 #address-cells = <1>; 121 #address-cells = <1>;
122 #size-cells = <1>; 122 #size-cells = <1>;
123 compatible = "sst,sst25wf040"; 123 compatible = "sst,sst25wf040", "jedec,spi-nor";
124 reg = <1>; 124 reg = <1>;
125 spi-max-frequency = <35000000>; 125 spi-max-frequency = <35000000>;
126 }; 126 };
@@ -128,7 +128,7 @@
128 flash@2 { 128 flash@2 {
129 #address-cells = <1>; 129 #address-cells = <1>;
130 #size-cells = <1>; 130 #size-cells = <1>;
131 compatible = "eon,en25s64"; 131 compatible = "eon,en25s64", "jedec,spi-nor";
132 reg = <2>; 132 reg = <2>;
133 spi-max-frequency = <35000000>; 133 spi-max-frequency = <35000000>;
134 }; 134 };
diff --git a/arch/powerpc/boot/dts/fsl/t208xrdb.dtsi b/arch/powerpc/boot/dts/fsl/t208xrdb.dtsi
index 693d2a8fa01c..dc9326875778 100644
--- a/arch/powerpc/boot/dts/fsl/t208xrdb.dtsi
+++ b/arch/powerpc/boot/dts/fsl/t208xrdb.dtsi
@@ -113,7 +113,7 @@
113 flash@0 { 113 flash@0 {
114 #address-cells = <1>; 114 #address-cells = <1>;
115 #size-cells = <1>; 115 #size-cells = <1>;
116 compatible = "micron,n25q512a"; 116 compatible = "micron,n25q512a", "jedec,spi-nor";
117 reg = <0>; 117 reg = <0>;
118 spi-max-frequency = <10000000>; /* input clock */ 118 spi-max-frequency = <10000000>; /* input clock */
119 }; 119 };
diff --git a/arch/powerpc/boot/dts/fsl/t4240qds.dts b/arch/powerpc/boot/dts/fsl/t4240qds.dts
index c067a6533809..9573ceada07c 100644
--- a/arch/powerpc/boot/dts/fsl/t4240qds.dts
+++ b/arch/powerpc/boot/dts/fsl/t4240qds.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * T4240QDS Device Tree Source 2 * T4240QDS Device Tree Source
3 * 3 *
4 * Copyright 2012 - 2014 Freescale Semiconductor Inc. 4 * Copyright 2012 - 2015 Freescale Semiconductor Inc.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met: 7 * modification, are permitted provided that the following conditions are met:
@@ -41,6 +41,44 @@
41 #size-cells = <2>; 41 #size-cells = <2>;
42 interrupt-parent = <&mpic>; 42 interrupt-parent = <&mpic>;
43 43
44 aliases{
45 phy_rgmii1 = &phyrgmii1;
46 phy_rgmii2 = &phyrgmii2;
47 phy_sgmii3 = &phy3;
48 phy_sgmii4 = &phy4;
49 phy_sgmii11 = &phy11;
50 phy_sgmii12 = &phy12;
51 sgmii_phy11 = &sgmiiphy11;
52 sgmii_phy12 = &sgmiiphy12;
53 sgmii_phy13 = &sgmiiphy13;
54 sgmii_phy14 = &sgmiiphy14;
55 sgmii_phy21 = &sgmiiphy21;
56 sgmii_phy22 = &sgmiiphy22;
57 sgmii_phy23 = &sgmiiphy23;
58 sgmii_phy24 = &sgmiiphy24;
59 sgmii_phy31 = &sgmiiphy31;
60 sgmii_phy32 = &sgmiiphy32;
61 sgmii_phy33 = &sgmiiphy33;
62 sgmii_phy34 = &sgmiiphy34;
63 sgmii_phy41 = &sgmiiphy41;
64 sgmii_phy42 = &sgmiiphy42;
65 sgmii_phy43 = &sgmiiphy43;
66 sgmii_phy44 = &sgmiiphy44;
67 phy_xfi1 = &xfiphy1;
68 phy_xfi2 = &xfiphy2;
69 phy_xfi3 = &xfiphy3;
70 phy_xfi4 = &xfiphy4;
71 xfi_pcs_mdio1 = &xfimdio0;
72 xfi_pcs_mdio2 = &xfimdio1;
73 xfi_pcs_mdio3 = &xfimdio2;
74 xfi_pcs_mdio4 = &xfimdio3;
75 emi1_rgmii = &t4240mdio0;
76 emi1_slot1 = &t4240mdio1;
77 emi1_slot2 = &t4240mdio2;
78 emi1_slot3 = &t4240mdio3;
79 emi1_slot4 = &t4240mdio4;
80 };
81
44 ifc: localbus@ffe124000 { 82 ifc: localbus@ffe124000 {
45 reg = <0xf 0xfe124000 0 0x2000>; 83 reg = <0xf 0xfe124000 0 0x2000>;
46 ranges = <0 0 0xf 0xe8000000 0x08000000 84 ranges = <0 0 0xf 0xe8000000 0x08000000
@@ -91,8 +129,190 @@
91 }; 129 };
92 130
93 board-control@3,0 { 131 board-control@3,0 {
132 #address-cells = <1>;
133 #size-cells = <1>;
94 compatible = "fsl,t4240qds-fpga", "fsl,fpga-qixis"; 134 compatible = "fsl,t4240qds-fpga", "fsl,fpga-qixis";
95 reg = <3 0 0x300>; 135 reg = <3 0 0x300>;
136 ranges = <0 3 0 0x300>;
137
138 mdio-mux-emi1 {
139 #address-cells = <1>;
140 #size-cells = <0>;
141 compatible = "mdio-mux-mmioreg", "mdio-mux";
142 mdio-parent-bus = <&mdio1>;
143 reg = <0x54 1>;
144 mux-mask = <0xe0>;
145
146 t4240mdio0: mdio@0 {
147 #address-cells = <1>;
148 #size-cells = <0>;
149 reg = <0>;
150
151 phyrgmii1: ethernet-phy@1 {
152 reg = <0x1>;
153 };
154
155 phyrgmii2: ethernet-phy@2 {
156 reg = <0x2>;
157 };
158 };
159
160 t4240mdio1: mdio@20 {
161 #address-cells = <1>;
162 #size-cells = <0>;
163 reg = <0x20>;
164 status = "disabled";
165
166 phy1: ethernet-phy@0 {
167 reg = <0x0>;
168 };
169
170 phy2: ethernet-phy@1 {
171 reg = <0x1>;
172 };
173
174 phy3: ethernet-phy@2 {
175 reg = <0x2>;
176 };
177
178 phy4: ethernet-phy@3 {
179 reg = <0x3>;
180 };
181
182 sgmiiphy11: ethernet-phy@1c {
183 reg = <0x1c>;
184 };
185
186 sgmiiphy12: ethernet-phy@1d {
187 reg = <0x1d>;
188 };
189
190 sgmiiphy13: ethernet-phy@1e {
191 reg = <0x1e>;
192 };
193
194 sgmiiphy14: ethernet-phy@1f {
195 reg = <0x1f>;
196 };
197 };
198
199 t4240mdio2: mdio@40 {
200 #address-cells = <1>;
201 #size-cells = <0>;
202 reg = <0x40>;
203 status = "disabled";
204
205 phy5: ethernet-phy@4 {
206 reg = <0x4>;
207 };
208
209 phy6: ethernet-phy@5 {
210 reg = <0x5>;
211 };
212
213 phy7: ethernet-phy@6 {
214 reg = <0x6>;
215 };
216
217 phy8: ethernet-phy@7 {
218 reg = <0x7>;
219 };
220
221 sgmiiphy21: ethernet-phy@1c {
222 reg = <0x1c>;
223 };
224
225 sgmiiphy22: ethernet-phy@1d {
226 reg = <0x1d>;
227 };
228
229 sgmiiphy23: ethernet-phy@1e {
230 reg = <0x1e>;
231 };
232
233 sgmiiphy24: ethernet-phy@1f {
234 reg = <0x1f>;
235 };
236 };
237
238 t4240mdio3: mdio@60 {
239 #address-cells = <1>;
240 #size-cells = <0>;
241 reg = <0x60>;
242 status = "disabled";
243
244 phy9: ethernet-phy@8 {
245 reg = <0x8>;
246 };
247
248 phy10: ethernet-phy@9 {
249 reg = <0x9>;
250 };
251
252 phy11: ethernet-phy@a {
253 reg = <0xa>;
254 };
255
256 phy12: ethernet-phy@b {
257 reg = <0xb>;
258 };
259
260 sgmiiphy31: ethernet-phy@1c {
261 reg = <0x1c>;
262 };
263
264 sgmiiphy32: ethernet-phy@1d {
265 reg = <0x1d>;
266 };
267
268 sgmiiphy33: ethernet-phy@1e {
269 reg = <0x1e>;
270 };
271
272 sgmiiphy34: ethernet-phy@1f {
273 reg = <0x1f>;
274 };
275 };
276
277 t4240mdio4: mdio@80 {
278 #address-cells = <1>;
279 #size-cells = <0>;
280 reg = <0x80>;
281 status = "disabled";
282
283 phy13: ethernet-phy@c {
284 reg = <0xc>;
285 };
286
287 phy14: ethernet-phy@d {
288 reg = <0xd>;
289 };
290
291 phy15: ethernet-phy@e {
292 reg = <0xe>;
293 };
294
295 phy16: ethernet-phy@f {
296 reg = <0xf>;
297 };
298
299 sgmiiphy41: ethernet-phy@1c {
300 reg = <0x1c>;
301 };
302
303 sgmiiphy42: ethernet-phy@1d {
304 reg = <0x1d>;
305 };
306
307 sgmiiphy43: ethernet-phy@1e {
308 reg = <0x1e>;
309 };
310
311 sgmiiphy44: ethernet-phy@1f {
312 reg = <0x1f>;
313 };
314 };
315 };
96 }; 316 };
97 }; 317 };
98 318
@@ -138,7 +358,7 @@
138 flash@0 { 358 flash@0 {
139 #address-cells = <1>; 359 #address-cells = <1>;
140 #size-cells = <1>; 360 #size-cells = <1>;
141 compatible = "sst,sst25wf040"; 361 compatible = "sst,sst25wf040", "jedec,spi-nor";
142 reg = <0>; 362 reg = <0>;
143 spi-max-frequency = <40000000>; /* input clock */ 363 spi-max-frequency = <40000000>; /* input clock */
144 }; 364 };
@@ -234,6 +454,184 @@
234 sdhc@114000 { 454 sdhc@114000 {
235 voltage-ranges = <1800 1800 3300 3300>; 455 voltage-ranges = <1800 1800 3300 3300>;
236 }; 456 };
457
458 fman@400000 {
459 port@83000 {
460 status = "disabled";
461 };
462
463 port@84000 {
464 status = "disabled";
465 };
466
467 port@85000 {
468 status = "disabled";
469 };
470
471 port@86000 {
472 status = "disabled";
473 };
474
475 port@87000 {
476 status = "disabled";
477 };
478
479 ethernet@e0000 {
480 phy-handle = <&phy5>;
481 phy-connection-type = "sgmii";
482 };
483
484 ethernet@e2000 {
485 phy-handle = <&phy6>;
486 phy-connection-type = "sgmii";
487 };
488
489 ethernet@e4000 {
490 phy-handle = <&phy7>;
491 phy-connection-type = "sgmii";
492 };
493
494 ethernet@e6000 {
495 phy-handle = <&phy8>;
496 phy-connection-type = "sgmii";
497 };
498
499 ethernet@e8000 {
500 phy-handle = <&phyrgmii2>;
501 phy-connection-type = "rgmii";
502 };
503
504 ethernet@ea000 {
505 phy-handle = <&phy2>;
506 phy-connection-type = "sgmii";
507 };
508
509 ethernet@f0000 {
510 phy-handle = <&xauiphy1>;
511 phy-connection-type = "xgmii";
512 };
513
514 ethernet@f2000 {
515 phy-handle = <&xauiphy2>;
516 phy-connection-type = "xgmii";
517 };
518
519 xfimdio0: mdio@f1000 {
520 status = "disabled";
521
522 xfiphy1: ethernet-phy@0 {
523 compatible = "ethernet-phy-ieee802.3-c45";
524 reg = <0x0>;
525 };
526 };
527
528 xfimdio1: mdio@f3000 {
529 status = "disabled";
530
531 xfiphy2: ethernet-phy@0 {
532 compatible = "ethernet-phy-ieee802.3-c45";
533 reg = <0x0>;
534 };
535 };
536 };
537
538 fman@500000 {
539 port@84000 {
540 status = "disabled";
541 };
542
543 port@85000 {
544 status = "disabled";
545 };
546
547 port@86000 {
548 status = "disabled";
549 };
550
551 port@87000 {
552 status = "disabled";
553 };
554
555 ethernet@e0000 {
556 phy-handle = <&phy13>;
557 phy-connection-type = "sgmii";
558 };
559
560 ethernet@e2000 {
561 phy-handle = <&phy14>;
562 phy-connection-type = "sgmii";
563 };
564
565 ethernet@e4000 {
566 phy-handle = <&phy15>;
567 phy-connection-type = "sgmii";
568 };
569
570 ethernet@e6000 {
571 phy-handle = <&phy16>;
572 phy-connection-type = "sgmii";
573 };
574
575 ethernet@e8000 {
576 phy-handle = <&phyrgmii1>;
577 phy-connection-type = "rgmii";
578 };
579
580 ethernet@ea000 {
581 phy-handle = <&phy10>;
582 phy-connection-type = "sgmii";
583 };
584
585 ethernet@f0000 {
586 phy-handle = <&xauiphy3>;
587 phy-connection-type = "xgmii";
588 };
589
590 ethernet@f2000 {
591 phy-handle = <&xauiphy4>;
592 phy-connection-type = "xgmii";
593 };
594
595 xfimdio2: mdio@f1000 {
596 status = "disabled";
597
598 xfiphy3: ethernet-phy@0 {
599 compatible = "ethernet-phy-ieee802.3-c45";
600 reg = <0x0>;
601 };
602 };
603
604 xfimdio3: mdio@f3000 {
605 status = "disabled";
606
607 xfiphy4: ethernet-phy@0 {
608 compatible = "ethernet-phy-ieee802.3-c45";
609 reg = <0x0>;
610 };
611 };
612
613 mdio@fd000 {
614 xauiphy1: ethernet-phy@0 {
615 compatible = "ethernet-phy-ieee802.3-c45";
616 reg = <0x0>;
617 };
618
619 xauiphy2: ethernet-phy@1 {
620 compatible = "ethernet-phy-ieee802.3-c45";
621 reg = <0x1>;
622 };
623
624 xauiphy3: ethernet-phy@2 {
625 compatible = "ethernet-phy-ieee802.3-c45";
626 reg = <0x2>;
627 };
628
629 xauiphy4: ethernet-phy@3 {
630 compatible = "ethernet-phy-ieee802.3-c45";
631 reg = <0x3>;
632 };
633 };
634 };
237 }; 635 };
238 636
239 pci0: pcie@ffe240000 { 637 pci0: pcie@ffe240000 {
diff --git a/arch/powerpc/boot/dts/fsl/t4240rdb.dts b/arch/powerpc/boot/dts/fsl/t4240rdb.dts
index 6e820a875621..cc0a264b8acb 100644
--- a/arch/powerpc/boot/dts/fsl/t4240rdb.dts
+++ b/arch/powerpc/boot/dts/fsl/t4240rdb.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * T4240RDB Device Tree Source 2 * T4240RDB Device Tree Source
3 * 3 *
4 * Copyright 2014 Freescale Semiconductor Inc. 4 * Copyright 2014 - 2015 Freescale Semiconductor Inc.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met: 7 * modification, are permitted provided that the following conditions are met:
@@ -41,6 +41,17 @@
41 #size-cells = <2>; 41 #size-cells = <2>;
42 interrupt-parent = <&mpic>; 42 interrupt-parent = <&mpic>;
43 43
44 aliases {
45 sgmii_phy21 = &sgmiiphy21;
46 sgmii_phy22 = &sgmiiphy22;
47 sgmii_phy23 = &sgmiiphy23;
48 sgmii_phy24 = &sgmiiphy24;
49 sgmii_phy41 = &sgmiiphy41;
50 sgmii_phy42 = &sgmiiphy42;
51 sgmii_phy43 = &sgmiiphy43;
52 sgmii_phy44 = &sgmiiphy44;
53 };
54
44 ifc: localbus@ffe124000 { 55 ifc: localbus@ffe124000 {
45 reg = <0xf 0xfe124000 0 0x2000>; 56 reg = <0xf 0xfe124000 0 0x2000>;
46 ranges = <0 0 0xf 0xe8000000 0x08000000 57 ranges = <0 0 0xf 0xe8000000 0x08000000
@@ -107,7 +118,7 @@
107 flash@0 { 118 flash@0 {
108 #address-cells = <1>; 119 #address-cells = <1>;
109 #size-cells = <1>; 120 #size-cells = <1>;
110 compatible = "sst,sst25wf040"; 121 compatible = "sst,sst25wf040", "jedec,spi-nor";
111 reg = <0>; 122 reg = <0>;
112 spi-max-frequency = <40000000>; /* input clock */ 123 spi-max-frequency = <40000000>; /* input clock */
113 }; 124 };
@@ -136,6 +147,142 @@
136 sdhc@114000 { 147 sdhc@114000 {
137 voltage-ranges = <1800 1800 3300 3300>; 148 voltage-ranges = <1800 1800 3300 3300>;
138 }; 149 };
150
151 fman@400000 {
152 ethernet@e0000 {
153 phy-handle = <&sgmiiphy21>;
154 phy-connection-type = "sgmii";
155 };
156
157 ethernet@e2000 {
158 phy-handle = <&sgmiiphy22>;
159 phy-connection-type = "sgmii";
160 };
161
162 ethernet@e4000 {
163 phy-handle = <&sgmiiphy23>;
164 phy-connection-type = "sgmii";
165 };
166
167 ethernet@e6000 {
168 phy-handle = <&sgmiiphy24>;
169 phy-connection-type = "sgmii";
170 };
171
172 ethernet@e8000 {
173 status = "disabled";
174 };
175
176 ethernet@ea000 {
177 status = "disabled";
178 };
179
180 ethernet@f0000 {
181 phy-handle = <&xfiphy1>;
182 phy-connection-type = "xgmii";
183 };
184
185 ethernet@f2000 {
186 phy-handle = <&xfiphy2>;
187 phy-connection-type = "xgmii";
188 };
189 };
190
191 fman@500000 {
192 ethernet@e0000 {
193 phy-handle = <&sgmiiphy41>;
194 phy-connection-type = "sgmii";
195 };
196
197 ethernet@e2000 {
198 phy-handle = <&sgmiiphy42>;
199 phy-connection-type = "sgmii";
200 };
201
202 ethernet@e4000 {
203 phy-handle = <&sgmiiphy43>;
204 phy-connection-type = "sgmii";
205 };
206
207 ethernet@e6000 {
208 phy-handle = <&sgmiiphy44>;
209 phy-connection-type = "sgmii";
210 };
211
212 ethernet@e8000 {
213 status = "disabled";
214 };
215
216 ethernet@ea000 {
217 status = "disabled";
218 };
219
220 ethernet@f0000 {
221 phy-handle = <&xfiphy3>;
222 phy-connection-type = "xgmii";
223 };
224
225 ethernet@f2000 {
226 phy-handle = <&xfiphy4>;
227 phy-connection-type = "xgmii";
228 };
229
230 mdio@fc000 {
231 sgmiiphy21: ethernet-phy@0 {
232 reg = <0x0>;
233 };
234
235 sgmiiphy22: ethernet-phy@1 {
236 reg = <0x1>;
237 };
238
239 sgmiiphy23: ethernet-phy@2 {
240 reg = <0x2>;
241 };
242
243 sgmiiphy24: ethernet-phy@3 {
244 reg = <0x3>;
245 };
246
247 sgmiiphy41: ethernet-phy@4 {
248 reg = <0x4>;
249 };
250
251 sgmiiphy42: ethernet-phy@5 {
252 reg = <0x5>;
253 };
254
255 sgmiiphy43: ethernet-phy@6 {
256 reg = <0x6>;
257 };
258
259 sgmiiphy44: ethernet-phy@7 {
260 reg = <0x7>;
261 };
262 };
263
264 mdio@fd000 {
265 xfiphy1: ethernet-phy@10 {
266 compatible = "ethernet-phy-ieee802.3-c45";
267 reg = <0x10>;
268 };
269
270 xfiphy2: ethernet-phy@11 {
271 compatible = "ethernet-phy-ieee802.3-c45";
272 reg = <0x11>;
273 };
274
275 xfiphy3: ethernet-phy@13 {
276 compatible = "ethernet-phy-ieee802.3-c45";
277 reg = <0x13>;
278 };
279
280 xfiphy4: ethernet-phy@12 {
281 compatible = "ethernet-phy-ieee802.3-c45";
282 reg = <0x12>;
283 };
284 };
285 };
139 }; 286 };
140 287
141 pci0: pcie@ffe240000 { 288 pci0: pcie@ffe240000 {
diff --git a/arch/powerpc/boot/dts/gef_ppc9a.dts b/arch/powerpc/boot/dts/gef_ppc9a.dts
deleted file mode 100644
index 83eb0fda2666..000000000000
--- a/arch/powerpc/boot/dts/gef_ppc9a.dts
+++ /dev/null
@@ -1,425 +0,0 @@
1/*
2 * GE PPC9A Device Tree Source
3 *
4 * Copyright 2008 GE Intelligent Platforms Embedded Systems, Inc.
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your
9 * option) any later version.
10 *
11 * Based on: SBS CM6 Device Tree Source
12 * Copyright 2007 SBS Technologies GmbH & Co. KG
13 * And: mpc8641_hpcn.dts (MPC8641 HPCN Device Tree Source)
14 * Copyright 2006 Freescale Semiconductor Inc.
15 */
16
17/*
18 * Compiled with dtc -I dts -O dtb -o gef_ppc9a.dtb gef_ppc9a.dts
19 */
20
21/dts-v1/;
22
23/ {
24 model = "GEF_PPC9A";
25 compatible = "gef,ppc9a";
26 #address-cells = <1>;
27 #size-cells = <1>;
28
29 aliases {
30 ethernet0 = &enet0;
31 ethernet1 = &enet1;
32 serial0 = &serial0;
33 serial1 = &serial1;
34 pci0 = &pci0;
35 };
36
37 cpus {
38 #address-cells = <1>;
39 #size-cells = <0>;
40
41 PowerPC,8641@0 {
42 device_type = "cpu";
43 reg = <0>;
44 d-cache-line-size = <32>; // 32 bytes
45 i-cache-line-size = <32>; // 32 bytes
46 d-cache-size = <32768>; // L1, 32K
47 i-cache-size = <32768>; // L1, 32K
48 timebase-frequency = <0>; // From uboot
49 bus-frequency = <0>; // From uboot
50 clock-frequency = <0>; // From uboot
51 };
52 PowerPC,8641@1 {
53 device_type = "cpu";
54 reg = <1>;
55 d-cache-line-size = <32>; // 32 bytes
56 i-cache-line-size = <32>; // 32 bytes
57 d-cache-size = <32768>; // L1, 32K
58 i-cache-size = <32768>; // L1, 32K
59 timebase-frequency = <0>; // From uboot
60 bus-frequency = <0>; // From uboot
61 clock-frequency = <0>; // From uboot
62 };
63 };
64
65 memory {
66 device_type = "memory";
67 reg = <0x0 0x40000000>; // set by uboot
68 };
69
70 localbus@fef05000 {
71 #address-cells = <2>;
72 #size-cells = <1>;
73 compatible = "fsl,mpc8641-localbus", "simple-bus";
74 reg = <0xfef05000 0x1000>;
75 interrupts = <19 2>;
76 interrupt-parent = <&mpic>;
77
78 ranges = <0 0 0xff000000 0x01000000 // 16MB Boot flash
79 1 0 0xe8000000 0x08000000 // Paged Flash 0
80 2 0 0xe0000000 0x08000000 // Paged Flash 1
81 3 0 0xfc100000 0x00020000 // NVRAM
82 4 0 0xfc000000 0x00008000 // FPGA
83 5 0 0xfc008000 0x00008000 // AFIX FPGA
84 6 0 0xfd000000 0x00800000 // IO FPGA (8-bit)
85 7 0 0xfd800000 0x00800000>; // IO FPGA (32-bit)
86
87 /* flash@0,0 is a mirror of part of the memory in flash@1,0
88 flash@0,0 {
89 compatible = "gef,ppc9a-firmware-mirror", "cfi-flash";
90 reg = <0x0 0x0 0x1000000>;
91 bank-width = <4>;
92 device-width = <2>;
93 #address-cells = <1>;
94 #size-cells = <1>;
95 partition@0 {
96 label = "firmware";
97 reg = <0x0 0x1000000>;
98 read-only;
99 };
100 };
101 */
102
103 flash@1,0 {
104 compatible = "gef,ppc9a-paged-flash", "cfi-flash";
105 reg = <0x1 0x0 0x8000000>;
106 bank-width = <4>;
107 device-width = <2>;
108 #address-cells = <1>;
109 #size-cells = <1>;
110 partition@0 {
111 label = "user";
112 reg = <0x0 0x7800000>;
113 };
114 partition@7800000 {
115 label = "firmware";
116 reg = <0x7800000 0x800000>;
117 read-only;
118 };
119 };
120
121 nvram@3,0 {
122 device_type = "nvram";
123 compatible = "simtek,stk14ca8";
124 reg = <0x3 0x0 0x20000>;
125 };
126
127 fpga@4,0 {
128 compatible = "gef,ppc9a-fpga-regs";
129 reg = <0x4 0x0 0x40>;
130 };
131
132 wdt@4,2000 {
133 compatible = "gef,ppc9a-fpga-wdt", "gef,fpga-wdt-1.00",
134 "gef,fpga-wdt";
135 reg = <0x4 0x2000 0x8>;
136 interrupts = <0x1a 0x4>;
137 interrupt-parent = <&gef_pic>;
138 };
139 /* Second watchdog available, driver currently supports one.
140 wdt@4,2010 {
141 compatible = "gef,ppc9a-fpga-wdt", "gef,fpga-wdt-1.00",
142 "gef,fpga-wdt";
143 reg = <0x4 0x2010 0x8>;
144 interrupts = <0x1b 0x4>;
145 interrupt-parent = <&gef_pic>;
146 };
147 */
148 gef_pic: pic@4,4000 {
149 #interrupt-cells = <1>;
150 interrupt-controller;
151 compatible = "gef,ppc9a-fpga-pic", "gef,fpga-pic-1.00";
152 reg = <0x4 0x4000 0x20>;
153 interrupts = <0x8
154 0x9>;
155 interrupt-parent = <&mpic>;
156
157 };
158 gef_gpio: gpio@7,14000 {
159 #gpio-cells = <2>;
160 compatible = "gef,ppc9a-gpio", "gef,sbc610-gpio";
161 reg = <0x7 0x14000 0x24>;
162 gpio-controller;
163 };
164 };
165
166 soc@fef00000 {
167 #address-cells = <1>;
168 #size-cells = <1>;
169 #interrupt-cells = <2>;
170 device_type = "soc";
171 compatible = "fsl,mpc8641-soc", "simple-bus";
172 ranges = <0x0 0xfef00000 0x00100000>;
173 bus-frequency = <33333333>;
174
175 mcm-law@0 {
176 compatible = "fsl,mcm-law";
177 reg = <0x0 0x1000>;
178 fsl,num-laws = <10>;
179 };
180
181 mcm@1000 {
182 compatible = "fsl,mpc8641-mcm", "fsl,mcm";
183 reg = <0x1000 0x1000>;
184 interrupts = <17 2>;
185 interrupt-parent = <&mpic>;
186 };
187
188 i2c1: i2c@3000 {
189 #address-cells = <1>;
190 #size-cells = <0>;
191 compatible = "fsl-i2c";
192 reg = <0x3000 0x100>;
193 interrupts = <0x2b 0x2>;
194 interrupt-parent = <&mpic>;
195 dfsrr;
196
197 hwmon@48 {
198 compatible = "national,lm92";
199 reg = <0x48>;
200 };
201
202 hwmon@4c {
203 compatible = "adi,adt7461";
204 reg = <0x4c>;
205 };
206
207 rtc@51 {
208 compatible = "epson,rx8581";
209 reg = <0x00000051>;
210 };
211
212 eti@6b {
213 compatible = "dallas,ds1682";
214 reg = <0x6b>;
215 };
216 };
217
218 i2c2: i2c@3100 {
219 #address-cells = <1>;
220 #size-cells = <0>;
221 compatible = "fsl-i2c";
222 reg = <0x3100 0x100>;
223 interrupts = <0x2b 0x2>;
224 interrupt-parent = <&mpic>;
225 dfsrr;
226 };
227
228 dma@21300 {
229 #address-cells = <1>;
230 #size-cells = <1>;
231 compatible = "fsl,mpc8641-dma", "fsl,eloplus-dma";
232 reg = <0x21300 0x4>;
233 ranges = <0x0 0x21100 0x200>;
234 cell-index = <0>;
235 dma-channel@0 {
236 compatible = "fsl,mpc8641-dma-channel",
237 "fsl,eloplus-dma-channel";
238 reg = <0x0 0x80>;
239 cell-index = <0>;
240 interrupt-parent = <&mpic>;
241 interrupts = <20 2>;
242 };
243 dma-channel@80 {
244 compatible = "fsl,mpc8641-dma-channel",
245 "fsl,eloplus-dma-channel";
246 reg = <0x80 0x80>;
247 cell-index = <1>;
248 interrupt-parent = <&mpic>;
249 interrupts = <21 2>;
250 };
251 dma-channel@100 {
252 compatible = "fsl,mpc8641-dma-channel",
253 "fsl,eloplus-dma-channel";
254 reg = <0x100 0x80>;
255 cell-index = <2>;
256 interrupt-parent = <&mpic>;
257 interrupts = <22 2>;
258 };
259 dma-channel@180 {
260 compatible = "fsl,mpc8641-dma-channel",
261 "fsl,eloplus-dma-channel";
262 reg = <0x180 0x80>;
263 cell-index = <3>;
264 interrupt-parent = <&mpic>;
265 interrupts = <23 2>;
266 };
267 };
268
269 enet0: ethernet@24000 {
270 #address-cells = <1>;
271 #size-cells = <1>;
272 cell-index = <0>;
273 device_type = "network";
274 model = "TSEC";
275 compatible = "gianfar";
276 reg = <0x24000 0x1000>;
277 ranges = <0x0 0x24000 0x1000>;
278 local-mac-address = [ 00 00 00 00 00 00 ];
279 interrupts = <29 2 30 2 34 2>;
280 interrupt-parent = <&mpic>;
281 tbi-handle = <&tbi0>;
282 phy-handle = <&phy0>;
283 phy-connection-type = "gmii";
284
285 mdio@520 {
286 #address-cells = <1>;
287 #size-cells = <0>;
288 compatible = "fsl,gianfar-mdio";
289 reg = <0x520 0x20>;
290
291 phy0: ethernet-phy@0 {
292 interrupt-parent = <&gef_pic>;
293 interrupts = <0x9 0x4>;
294 reg = <1>;
295 };
296 phy2: ethernet-phy@2 {
297 interrupt-parent = <&gef_pic>;
298 interrupts = <0x8 0x4>;
299 reg = <3>;
300 };
301 tbi0: tbi-phy@11 {
302 reg = <0x11>;
303 device_type = "tbi-phy";
304 };
305 };
306 };
307
308 enet1: ethernet@26000 {
309 #address-cells = <1>;
310 #size-cells = <1>;
311 cell-index = <2>;
312 device_type = "network";
313 model = "TSEC";
314 compatible = "gianfar";
315 reg = <0x26000 0x1000>;
316 ranges = <0x0 0x26000 0x1000>;
317 local-mac-address = [ 00 00 00 00 00 00 ];
318 interrupts = <31 2 32 2 33 2>;
319 interrupt-parent = <&mpic>;
320 tbi-handle = <&tbi2>;
321 phy-handle = <&phy2>;
322 phy-connection-type = "gmii";
323
324 mdio@520 {
325 #address-cells = <1>;
326 #size-cells = <0>;
327 compatible = "fsl,gianfar-tbi";
328 reg = <0x520 0x20>;
329
330 tbi2: tbi-phy@11 {
331 reg = <0x11>;
332 device_type = "tbi-phy";
333 };
334 };
335 };
336
337 serial0: serial@4500 {
338 cell-index = <0>;
339 device_type = "serial";
340 compatible = "fsl,ns16550", "ns16550";
341 reg = <0x4500 0x100>;
342 clock-frequency = <0>;
343 interrupts = <0x2a 0x2>;
344 interrupt-parent = <&mpic>;
345 };
346
347 serial1: serial@4600 {
348 cell-index = <1>;
349 device_type = "serial";
350 compatible = "fsl,ns16550", "ns16550";
351 reg = <0x4600 0x100>;
352 clock-frequency = <0>;
353 interrupts = <0x1c 0x2>;
354 interrupt-parent = <&mpic>;
355 };
356
357 mpic: pic@40000 {
358 clock-frequency = <0>;
359 interrupt-controller;
360 #address-cells = <0>;
361 #interrupt-cells = <2>;
362 reg = <0x40000 0x40000>;
363 compatible = "chrp,open-pic";
364 device_type = "open-pic";
365 };
366
367 msi@41600 {
368 compatible = "fsl,mpc8641-msi", "fsl,mpic-msi";
369 reg = <0x41600 0x80>;
370 msi-available-ranges = <0 0x100>;
371 interrupts = <
372 0xe0 0
373 0xe1 0
374 0xe2 0
375 0xe3 0
376 0xe4 0
377 0xe5 0
378 0xe6 0
379 0xe7 0>;
380 interrupt-parent = <&mpic>;
381 };
382
383 global-utilities@e0000 {
384 compatible = "fsl,mpc8641-guts";
385 reg = <0xe0000 0x1000>;
386 fsl,has-rstcr;
387 };
388 };
389
390 pci0: pcie@fef08000 {
391 compatible = "fsl,mpc8641-pcie";
392 device_type = "pci";
393 #interrupt-cells = <1>;
394 #size-cells = <2>;
395 #address-cells = <3>;
396 reg = <0xfef08000 0x1000>;
397 bus-range = <0x0 0xff>;
398 ranges = <0x02000000 0x0 0x80000000 0x80000000 0x0 0x40000000
399 0x01000000 0x0 0x00000000 0xfe000000 0x0 0x00400000>;
400 clock-frequency = <33333333>;
401 interrupt-parent = <&mpic>;
402 interrupts = <0x18 0x2>;
403 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
404 interrupt-map = <
405 0x0000 0x0 0x0 0x1 &mpic 0x0 0x1
406 0x0000 0x0 0x0 0x2 &mpic 0x1 0x1
407 0x0000 0x0 0x0 0x3 &mpic 0x2 0x1
408 0x0000 0x0 0x0 0x4 &mpic 0x3 0x1
409 >;
410
411 pcie@0 {
412 reg = <0 0 0 0 0>;
413 #size-cells = <2>;
414 #address-cells = <3>;
415 device_type = "pci";
416 ranges = <0x02000000 0x0 0x80000000
417 0x02000000 0x0 0x80000000
418 0x0 0x40000000
419
420 0x01000000 0x0 0x00000000
421 0x01000000 0x0 0x00000000
422 0x0 0x00400000>;
423 };
424 };
425};
diff --git a/arch/powerpc/boot/dts/gef_sbc310.dts b/arch/powerpc/boot/dts/gef_sbc310.dts
deleted file mode 100644
index d426dd3de9ef..000000000000
--- a/arch/powerpc/boot/dts/gef_sbc310.dts
+++ /dev/null
@@ -1,459 +0,0 @@
1/*
2 * GE SBC310 Device Tree Source
3 *
4 * Copyright 2008 GE Intelligent Platforms Embedded Systems, Inc.
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your
9 * option) any later version.
10 *
11 * Based on: SBS CM6 Device Tree Source
12 * Copyright 2007 SBS Technologies GmbH & Co. KG
13 * And: mpc8641_hpcn.dts (MPC8641 HPCN Device Tree Source)
14 * Copyright 2006 Freescale Semiconductor Inc.
15 */
16
17/*
18 * Compiled with dtc -I dts -O dtb -o gef_sbc310.dtb gef_sbc310.dts
19 */
20
21/dts-v1/;
22
23/ {
24 model = "GEF_SBC310";
25 compatible = "gef,sbc310";
26 #address-cells = <1>;
27 #size-cells = <1>;
28
29 aliases {
30 ethernet0 = &enet0;
31 ethernet1 = &enet1;
32 serial0 = &serial0;
33 serial1 = &serial1;
34 pci0 = &pci0;
35 pci1 = &pci1;
36 };
37
38 cpus {
39 #address-cells = <1>;
40 #size-cells = <0>;
41
42 PowerPC,8641@0 {
43 device_type = "cpu";
44 reg = <0>;
45 d-cache-line-size = <32>; // 32 bytes
46 i-cache-line-size = <32>; // 32 bytes
47 d-cache-size = <32768>; // L1, 32K
48 i-cache-size = <32768>; // L1, 32K
49 timebase-frequency = <0>; // From uboot
50 bus-frequency = <0>; // From uboot
51 clock-frequency = <0>; // From uboot
52 };
53 PowerPC,8641@1 {
54 device_type = "cpu";
55 reg = <1>;
56 d-cache-line-size = <32>; // 32 bytes
57 i-cache-line-size = <32>; // 32 bytes
58 d-cache-size = <32768>; // L1, 32K
59 i-cache-size = <32768>; // L1, 32K
60 timebase-frequency = <0>; // From uboot
61 bus-frequency = <0>; // From uboot
62 clock-frequency = <0>; // From uboot
63 };
64 };
65
66 memory {
67 device_type = "memory";
68 reg = <0x0 0x40000000>; // set by uboot
69 };
70
71 localbus@fef05000 {
72 #address-cells = <2>;
73 #size-cells = <1>;
74 compatible = "fsl,mpc8641-localbus", "simple-bus";
75 reg = <0xfef05000 0x1000>;
76 interrupts = <19 2>;
77 interrupt-parent = <&mpic>;
78
79 ranges = <0 0 0xff000000 0x01000000 // 16MB Boot flash
80 1 0 0xe0000000 0x08000000 // Paged Flash 0
81 2 0 0xe8000000 0x08000000 // Paged Flash 1
82 3 0 0xfc100000 0x00020000 // NVRAM
83 4 0 0xfc000000 0x00010000>; // FPGA
84
85 /* flash@0,0 is a mirror of part of the memory in flash@1,0
86 flash@0,0 {
87 compatible = "gef,sbc310-firmware-mirror", "cfi-flash";
88 reg = <0x0 0x0 0x01000000>;
89 bank-width = <2>;
90 device-width = <2>;
91 #address-cells = <1>;
92 #size-cells = <1>;
93 partition@0 {
94 label = "firmware";
95 reg = <0x0 0x01000000>;
96 read-only;
97 };
98 };
99 */
100
101 flash@1,0 {
102 compatible = "gef,sbc310-paged-flash", "cfi-flash";
103 reg = <0x1 0x0 0x8000000>;
104 bank-width = <2>;
105 device-width = <2>;
106 #address-cells = <1>;
107 #size-cells = <1>;
108 partition@0 {
109 label = "user";
110 reg = <0x0 0x7800000>;
111 };
112 partition@7800000 {
113 label = "firmware";
114 reg = <0x7800000 0x800000>;
115 read-only;
116 };
117 };
118
119 nvram@3,0 {
120 device_type = "nvram";
121 compatible = "simtek,stk14ca8";
122 reg = <0x3 0x0 0x20000>;
123 };
124
125 fpga@4,0 {
126 compatible = "gef,fpga-regs";
127 reg = <0x4 0x0 0x40>;
128 };
129
130 wdt@4,2000 {
131 compatible = "gef,sbc310-fpga-wdt", "gef,fpga-wdt-1.00",
132 "gef,fpga-wdt";
133 reg = <0x4 0x2000 0x8>;
134 interrupts = <0x1a 0x4>;
135 interrupt-parent = <&gef_pic>;
136 };
137/*
138 wdt@4,2010 {
139 compatible = "gef,sbc310-fpga-wdt", "gef,fpga-wdt-1.00",
140 "gef,fpga-wdt";
141 reg = <0x4 0x2010 0x8>;
142 interrupts = <0x1b 0x4>;
143 interrupt-parent = <&gef_pic>;
144 };
145*/
146 gef_pic: pic@4,4000 {
147 #interrupt-cells = <1>;
148 interrupt-controller;
149 compatible = "gef,sbc310-fpga-pic", "gef,fpga-pic";
150 reg = <0x4 0x4000 0x20>;
151 interrupts = <0x8
152 0x9>;
153 interrupt-parent = <&mpic>;
154
155 };
156 gef_gpio: gpio@4,8000 {
157 #gpio-cells = <2>;
158 compatible = "gef,sbc310-gpio";
159 reg = <0x4 0x8000 0x24>;
160 gpio-controller;
161 };
162 };
163
164 soc@fef00000 {
165 #address-cells = <1>;
166 #size-cells = <1>;
167 #interrupt-cells = <2>;
168 device_type = "soc";
169 compatible = "fsl,mpc8641-soc", "simple-bus";
170 ranges = <0x0 0xfef00000 0x00100000>;
171 bus-frequency = <33333333>;
172
173 mcm-law@0 {
174 compatible = "fsl,mcm-law";
175 reg = <0x0 0x1000>;
176 fsl,num-laws = <10>;
177 };
178
179 mcm@1000 {
180 compatible = "fsl,mpc8641-mcm", "fsl,mcm";
181 reg = <0x1000 0x1000>;
182 interrupts = <17 2>;
183 interrupt-parent = <&mpic>;
184 };
185
186 i2c1: i2c@3000 {
187 #address-cells = <1>;
188 #size-cells = <0>;
189 compatible = "fsl-i2c";
190 reg = <0x3000 0x100>;
191 interrupts = <0x2b 0x2>;
192 interrupt-parent = <&mpic>;
193 dfsrr;
194
195 rtc@51 {
196 compatible = "epson,rx8581";
197 reg = <0x00000051>;
198 };
199 };
200
201 i2c2: i2c@3100 {
202 #address-cells = <1>;
203 #size-cells = <0>;
204 compatible = "fsl-i2c";
205 reg = <0x3100 0x100>;
206 interrupts = <0x2b 0x2>;
207 interrupt-parent = <&mpic>;
208 dfsrr;
209
210 hwmon@48 {
211 compatible = "national,lm92";
212 reg = <0x48>;
213 };
214
215 hwmon@4c {
216 compatible = "adi,adt7461";
217 reg = <0x4c>;
218 };
219
220 eti@6b {
221 compatible = "dallas,ds1682";
222 reg = <0x6b>;
223 };
224 };
225
226 dma@21300 {
227 #address-cells = <1>;
228 #size-cells = <1>;
229 compatible = "fsl,mpc8641-dma", "fsl,eloplus-dma";
230 reg = <0x21300 0x4>;
231 ranges = <0x0 0x21100 0x200>;
232 cell-index = <0>;
233 dma-channel@0 {
234 compatible = "fsl,mpc8641-dma-channel",
235 "fsl,eloplus-dma-channel";
236 reg = <0x0 0x80>;
237 cell-index = <0>;
238 interrupt-parent = <&mpic>;
239 interrupts = <20 2>;
240 };
241 dma-channel@80 {
242 compatible = "fsl,mpc8641-dma-channel",
243 "fsl,eloplus-dma-channel";
244 reg = <0x80 0x80>;
245 cell-index = <1>;
246 interrupt-parent = <&mpic>;
247 interrupts = <21 2>;
248 };
249 dma-channel@100 {
250 compatible = "fsl,mpc8641-dma-channel",
251 "fsl,eloplus-dma-channel";
252 reg = <0x100 0x80>;
253 cell-index = <2>;
254 interrupt-parent = <&mpic>;
255 interrupts = <22 2>;
256 };
257 dma-channel@180 {
258 compatible = "fsl,mpc8641-dma-channel",
259 "fsl,eloplus-dma-channel";
260 reg = <0x180 0x80>;
261 cell-index = <3>;
262 interrupt-parent = <&mpic>;
263 interrupts = <23 2>;
264 };
265 };
266
267 enet0: ethernet@24000 {
268 #address-cells = <1>;
269 #size-cells = <1>;
270 cell-index = <0>;
271 device_type = "network";
272 model = "TSEC";
273 compatible = "gianfar";
274 reg = <0x24000 0x1000>;
275 ranges = <0x0 0x24000 0x1000>;
276 local-mac-address = [ 00 00 00 00 00 00 ];
277 interrupts = <29 2 30 2 34 2>;
278 interrupt-parent = <&mpic>;
279 tbi-handle = <&tbi0>;
280 phy-handle = <&phy0>;
281 phy-connection-type = "gmii";
282
283 mdio@520 {
284 #address-cells = <1>;
285 #size-cells = <0>;
286 compatible = "fsl,gianfar-mdio";
287 reg = <0x520 0x20>;
288
289 phy0: ethernet-phy@0 {
290 interrupt-parent = <&gef_pic>;
291 interrupts = <0x9 0x4>;
292 reg = <1>;
293 };
294 phy2: ethernet-phy@2 {
295 interrupt-parent = <&gef_pic>;
296 interrupts = <0x8 0x4>;
297 reg = <3>;
298 };
299 tbi0: tbi-phy@11 {
300 reg = <0x11>;
301 device_type = "tbi-phy";
302 };
303 };
304 };
305
306 enet1: ethernet@26000 {
307 #address-cells = <1>;
308 #size-cells = <1>;
309 cell-index = <2>;
310 device_type = "network";
311 model = "TSEC";
312 compatible = "gianfar";
313 reg = <0x26000 0x1000>;
314 ranges = <0x0 0x26000 0x1000>;
315 local-mac-address = [ 00 00 00 00 00 00 ];
316 interrupts = <31 2 32 2 33 2>;
317 interrupt-parent = <&mpic>;
318 tbi-handle = <&tbi2>;
319 phy-handle = <&phy2>;
320 phy-connection-type = "gmii";
321
322 mdio@520 {
323 #address-cells = <1>;
324 #size-cells = <0>;
325 compatible = "fsl,gianfar-tbi";
326 reg = <0x520 0x20>;
327
328 tbi2: tbi-phy@11 {
329 reg = <0x11>;
330 device_type = "tbi-phy";
331 };
332 };
333 };
334
335 serial0: serial@4500 {
336 cell-index = <0>;
337 device_type = "serial";
338 compatible = "fsl,ns16550", "ns16550";
339 reg = <0x4500 0x100>;
340 clock-frequency = <0>;
341 interrupts = <0x2a 0x2>;
342 interrupt-parent = <&mpic>;
343 };
344
345 serial1: serial@4600 {
346 cell-index = <1>;
347 device_type = "serial";
348 compatible = "fsl,ns16550", "ns16550";
349 reg = <0x4600 0x100>;
350 clock-frequency = <0>;
351 interrupts = <0x1c 0x2>;
352 interrupt-parent = <&mpic>;
353 };
354
355 mpic: pic@40000 {
356 clock-frequency = <0>;
357 interrupt-controller;
358 #address-cells = <0>;
359 #interrupt-cells = <2>;
360 reg = <0x40000 0x40000>;
361 compatible = "chrp,open-pic";
362 device_type = "open-pic";
363 };
364
365 msi@41600 {
366 compatible = "fsl,mpc8641-msi", "fsl,mpic-msi";
367 reg = <0x41600 0x80>;
368 msi-available-ranges = <0 0x100>;
369 interrupts = <
370 0xe0 0
371 0xe1 0
372 0xe2 0
373 0xe3 0
374 0xe4 0
375 0xe5 0
376 0xe6 0
377 0xe7 0>;
378 interrupt-parent = <&mpic>;
379 };
380
381 global-utilities@e0000 {
382 compatible = "fsl,mpc8641-guts";
383 reg = <0xe0000 0x1000>;
384 fsl,has-rstcr;
385 };
386 };
387
388 pci0: pcie@fef08000 {
389 compatible = "fsl,mpc8641-pcie";
390 device_type = "pci";
391 #interrupt-cells = <1>;
392 #size-cells = <2>;
393 #address-cells = <3>;
394 reg = <0xfef08000 0x1000>;
395 bus-range = <0x0 0xff>;
396 ranges = <0x02000000 0x0 0x80000000 0x80000000 0x0 0x40000000
397 0x01000000 0x0 0x00000000 0xfe000000 0x0 0x00400000>;
398 clock-frequency = <33333333>;
399 interrupt-parent = <&mpic>;
400 interrupts = <0x18 0x2>;
401 interrupt-map-mask = <0xff00 0x0 0x0 0x7>;
402 interrupt-map = <
403 0x0000 0x0 0x0 0x1 &mpic 0x0 0x2
404 0x0000 0x0 0x0 0x2 &mpic 0x1 0x2
405 0x0000 0x0 0x0 0x3 &mpic 0x2 0x2
406 0x0000 0x0 0x0 0x4 &mpic 0x3 0x2
407 >;
408
409 pcie@0 {
410 reg = <0 0 0 0 0>;
411 #size-cells = <2>;
412 #address-cells = <3>;
413 device_type = "pci";
414 ranges = <0x02000000 0x0 0x80000000
415 0x02000000 0x0 0x80000000
416 0x0 0x40000000
417
418 0x01000000 0x0 0x00000000
419 0x01000000 0x0 0x00000000
420 0x0 0x00400000>;
421 };
422 };
423
424 pci1: pcie@fef09000 {
425 compatible = "fsl,mpc8641-pcie";
426 device_type = "pci";
427 #interrupt-cells = <1>;
428 #size-cells = <2>;
429 #address-cells = <3>;
430 reg = <0xfef09000 0x1000>;
431 bus-range = <0x0 0xff>;
432 ranges = <0x02000000 0x0 0xc0000000 0xc0000000 0x0 0x20000000
433 0x01000000 0x0 0x00000000 0xfe400000 0x0 0x00400000>;
434 clock-frequency = <33333333>;
435 interrupt-parent = <&mpic>;
436 interrupts = <0x19 0x2>;
437 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
438 interrupt-map = <
439 0x0000 0x0 0x0 0x1 &mpic 0x4 0x2
440 0x0000 0x0 0x0 0x2 &mpic 0x5 0x2
441 0x0000 0x0 0x0 0x3 &mpic 0x6 0x2
442 0x0000 0x0 0x0 0x4 &mpic 0x7 0x2
443 >;
444
445 pcie@0 {
446 reg = <0 0 0 0 0>;
447 #size-cells = <2>;
448 #address-cells = <3>;
449 device_type = "pci";
450 ranges = <0x02000000 0x0 0xc0000000
451 0x02000000 0x0 0xc0000000
452 0x0 0x20000000
453
454 0x01000000 0x0 0x00000000
455 0x01000000 0x0 0x00000000
456 0x0 0x00400000>;
457 };
458 };
459};
diff --git a/arch/powerpc/boot/dts/gef_sbc610.dts b/arch/powerpc/boot/dts/gef_sbc610.dts
deleted file mode 100644
index 5db3399b76b7..000000000000
--- a/arch/powerpc/boot/dts/gef_sbc610.dts
+++ /dev/null
@@ -1,423 +0,0 @@
1/*
2 * GE SBC610 Device Tree Source
3 *
4 * Copyright 2008 GE Intelligent Platforms Embedded Systems, Inc.
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your
9 * option) any later version.
10 *
11 * Based on: SBS CM6 Device Tree Source
12 * Copyright 2007 SBS Technologies GmbH & Co. KG
13 * And: mpc8641_hpcn.dts (MPC8641 HPCN Device Tree Source)
14 * Copyright 2006 Freescale Semiconductor Inc.
15 */
16
17/*
18 * Compiled with dtc -I dts -O dtb -o gef_sbc610.dtb gef_sbc610.dts
19 */
20
21/dts-v1/;
22
23/ {
24 model = "GEF_SBC610";
25 compatible = "gef,sbc610";
26 #address-cells = <1>;
27 #size-cells = <1>;
28
29 aliases {
30 ethernet0 = &enet0;
31 ethernet1 = &enet1;
32 serial0 = &serial0;
33 serial1 = &serial1;
34 pci0 = &pci0;
35 };
36
37 cpus {
38 #address-cells = <1>;
39 #size-cells = <0>;
40
41 PowerPC,8641@0 {
42 device_type = "cpu";
43 reg = <0>;
44 d-cache-line-size = <32>; // 32 bytes
45 i-cache-line-size = <32>; // 32 bytes
46 d-cache-size = <32768>; // L1, 32K
47 i-cache-size = <32768>; // L1, 32K
48 timebase-frequency = <0>; // From uboot
49 bus-frequency = <0>; // From uboot
50 clock-frequency = <0>; // From uboot
51 };
52 PowerPC,8641@1 {
53 device_type = "cpu";
54 reg = <1>;
55 d-cache-line-size = <32>; // 32 bytes
56 i-cache-line-size = <32>; // 32 bytes
57 d-cache-size = <32768>; // L1, 32K
58 i-cache-size = <32768>; // L1, 32K
59 timebase-frequency = <0>; // From uboot
60 bus-frequency = <0>; // From uboot
61 clock-frequency = <0>; // From uboot
62 };
63 };
64
65 memory {
66 device_type = "memory";
67 reg = <0x0 0x40000000>; // set by uboot
68 };
69
70 localbus@fef05000 {
71 #address-cells = <2>;
72 #size-cells = <1>;
73 compatible = "fsl,mpc8641-localbus", "simple-bus";
74 reg = <0xfef05000 0x1000>;
75 interrupts = <19 2>;
76 interrupt-parent = <&mpic>;
77
78 ranges = <0 0 0xff000000 0x01000000 // 16MB Boot flash
79 1 0 0xe8000000 0x08000000 // Paged Flash 0
80 2 0 0xe0000000 0x08000000 // Paged Flash 1
81 3 0 0xfc100000 0x00020000 // NVRAM
82 4 0 0xfc000000 0x00008000 // FPGA
83 5 0 0xfc008000 0x00008000 // AFIX FPGA
84 6 0 0xfd000000 0x00800000 // IO FPGA (8-bit)
85 7 0 0xfd800000 0x00800000>; // IO FPGA (32-bit)
86
87 /* flash@0,0 is a mirror of part of the memory in flash@1,0
88 flash@0,0 {
89 compatible = "gef,sbc610-firmware-mirror", "cfi-flash";
90 reg = <0x0 0x0 0x1000000>;
91 bank-width = <4>;
92 device-width = <2>;
93 #address-cells = <1>;
94 #size-cells = <1>;
95 partition@0 {
96 label = "firmware";
97 reg = <0x0 0x1000000>;
98 read-only;
99 };
100 };
101 */
102
103 flash@1,0 {
104 compatible = "gef,sbc610-paged-flash", "cfi-flash";
105 reg = <0x1 0x0 0x8000000>;
106 bank-width = <4>;
107 device-width = <2>;
108 #address-cells = <1>;
109 #size-cells = <1>;
110 partition@0 {
111 label = "user";
112 reg = <0x0 0x7800000>;
113 };
114 partition@7800000 {
115 label = "firmware";
116 reg = <0x7800000 0x800000>;
117 read-only;
118 };
119 };
120
121 nvram@3,0 {
122 device_type = "nvram";
123 compatible = "simtek,stk14ca8";
124 reg = <0x3 0x0 0x20000>;
125 };
126
127 fpga@4,0 {
128 compatible = "gef,fpga-regs";
129 reg = <0x4 0x0 0x40>;
130 };
131
132 wdt@4,2000 {
133 compatible = "gef,fpga-wdt";
134 reg = <0x4 0x2000 0x8>;
135 interrupts = <0x1a 0x4>;
136 interrupt-parent = <&gef_pic>;
137 };
138 /* Second watchdog available, driver currently supports one.
139 wdt@4,2010 {
140 compatible = "gef,fpga-wdt";
141 reg = <0x4 0x2010 0x8>;
142 interrupts = <0x1b 0x4>;
143 interrupt-parent = <&gef_pic>;
144 };
145 */
146 gef_pic: pic@4,4000 {
147 #interrupt-cells = <1>;
148 interrupt-controller;
149 compatible = "gef,fpga-pic";
150 reg = <0x4 0x4000 0x20>;
151 interrupts = <0x8
152 0x9>;
153 interrupt-parent = <&mpic>;
154
155 };
156 gef_gpio: gpio@7,14000 {
157 #gpio-cells = <2>;
158 compatible = "gef,sbc610-gpio";
159 reg = <0x7 0x14000 0x24>;
160 gpio-controller;
161 };
162 };
163
164 soc@fef00000 {
165 #address-cells = <1>;
166 #size-cells = <1>;
167 #interrupt-cells = <2>;
168 device_type = "soc";
169 compatible = "simple-bus";
170 ranges = <0x0 0xfef00000 0x00100000>;
171 bus-frequency = <33333333>;
172
173 mcm-law@0 {
174 compatible = "fsl,mcm-law";
175 reg = <0x0 0x1000>;
176 fsl,num-laws = <10>;
177 };
178
179 mcm@1000 {
180 compatible = "fsl,mpc8641-mcm", "fsl,mcm";
181 reg = <0x1000 0x1000>;
182 interrupts = <17 2>;
183 interrupt-parent = <&mpic>;
184 };
185
186 i2c1: i2c@3000 {
187 #address-cells = <1>;
188 #size-cells = <0>;
189 compatible = "fsl-i2c";
190 reg = <0x3000 0x100>;
191 interrupts = <0x2b 0x2>;
192 interrupt-parent = <&mpic>;
193 dfsrr;
194
195 hwmon@48 {
196 compatible = "national,lm92";
197 reg = <0x48>;
198 };
199
200 hwmon@4c {
201 compatible = "adi,adt7461";
202 reg = <0x4c>;
203 };
204
205 rtc@51 {
206 compatible = "epson,rx8581";
207 reg = <0x00000051>;
208 };
209
210 eti@6b {
211 compatible = "dallas,ds1682";
212 reg = <0x6b>;
213 };
214 };
215
216 i2c2: i2c@3100 {
217 #address-cells = <1>;
218 #size-cells = <0>;
219 compatible = "fsl-i2c";
220 reg = <0x3100 0x100>;
221 interrupts = <0x2b 0x2>;
222 interrupt-parent = <&mpic>;
223 dfsrr;
224 };
225
226 dma@21300 {
227 #address-cells = <1>;
228 #size-cells = <1>;
229 compatible = "fsl,mpc8641-dma", "fsl,eloplus-dma";
230 reg = <0x21300 0x4>;
231 ranges = <0x0 0x21100 0x200>;
232 cell-index = <0>;
233 dma-channel@0 {
234 compatible = "fsl,mpc8641-dma-channel",
235 "fsl,eloplus-dma-channel";
236 reg = <0x0 0x80>;
237 cell-index = <0>;
238 interrupt-parent = <&mpic>;
239 interrupts = <20 2>;
240 };
241 dma-channel@80 {
242 compatible = "fsl,mpc8641-dma-channel",
243 "fsl,eloplus-dma-channel";
244 reg = <0x80 0x80>;
245 cell-index = <1>;
246 interrupt-parent = <&mpic>;
247 interrupts = <21 2>;
248 };
249 dma-channel@100 {
250 compatible = "fsl,mpc8641-dma-channel",
251 "fsl,eloplus-dma-channel";
252 reg = <0x100 0x80>;
253 cell-index = <2>;
254 interrupt-parent = <&mpic>;
255 interrupts = <22 2>;
256 };
257 dma-channel@180 {
258 compatible = "fsl,mpc8641-dma-channel",
259 "fsl,eloplus-dma-channel";
260 reg = <0x180 0x80>;
261 cell-index = <3>;
262 interrupt-parent = <&mpic>;
263 interrupts = <23 2>;
264 };
265 };
266
267 enet0: ethernet@24000 {
268 #address-cells = <1>;
269 #size-cells = <1>;
270 cell-index = <0>;
271 device_type = "network";
272 model = "TSEC";
273 compatible = "gianfar";
274 reg = <0x24000 0x1000>;
275 ranges = <0x0 0x24000 0x1000>;
276 local-mac-address = [ 00 00 00 00 00 00 ];
277 interrupts = <29 2 30 2 34 2>;
278 interrupt-parent = <&mpic>;
279 tbi-handle = <&tbi0>;
280 phy-handle = <&phy0>;
281 phy-connection-type = "gmii";
282
283 mdio@520 {
284 #address-cells = <1>;
285 #size-cells = <0>;
286 compatible = "fsl,gianfar-mdio";
287 reg = <0x520 0x20>;
288
289 phy0: ethernet-phy@0 {
290 interrupt-parent = <&gef_pic>;
291 interrupts = <0x9 0x4>;
292 reg = <1>;
293 };
294 phy2: ethernet-phy@2 {
295 interrupt-parent = <&gef_pic>;
296 interrupts = <0x8 0x4>;
297 reg = <3>;
298 };
299 tbi0: tbi-phy@11 {
300 reg = <0x11>;
301 device_type = "tbi-phy";
302 };
303 };
304 };
305
306 enet1: ethernet@26000 {
307 #address-cells = <1>;
308 #size-cells = <1>;
309 cell-index = <2>;
310 device_type = "network";
311 model = "TSEC";
312 compatible = "gianfar";
313 reg = <0x26000 0x1000>;
314 ranges = <0x0 0x26000 0x1000>;
315 local-mac-address = [ 00 00 00 00 00 00 ];
316 interrupts = <31 2 32 2 33 2>;
317 interrupt-parent = <&mpic>;
318 tbi-handle = <&tbi2>;
319 phy-handle = <&phy2>;
320 phy-connection-type = "gmii";
321
322 mdio@520 {
323 #address-cells = <1>;
324 #size-cells = <0>;
325 compatible = "fsl,gianfar-tbi";
326 reg = <0x520 0x20>;
327
328 tbi2: tbi-phy@11 {
329 reg = <0x11>;
330 device_type = "tbi-phy";
331 };
332 };
333 };
334
335 serial0: serial@4500 {
336 cell-index = <0>;
337 device_type = "serial";
338 compatible = "fsl,ns16550", "ns16550";
339 reg = <0x4500 0x100>;
340 clock-frequency = <0>;
341 interrupts = <0x2a 0x2>;
342 interrupt-parent = <&mpic>;
343 };
344
345 serial1: serial@4600 {
346 cell-index = <1>;
347 device_type = "serial";
348 compatible = "fsl,ns16550", "ns16550";
349 reg = <0x4600 0x100>;
350 clock-frequency = <0>;
351 interrupts = <0x1c 0x2>;
352 interrupt-parent = <&mpic>;
353 };
354
355 mpic: pic@40000 {
356 clock-frequency = <0>;
357 interrupt-controller;
358 #address-cells = <0>;
359 #interrupt-cells = <2>;
360 reg = <0x40000 0x40000>;
361 compatible = "chrp,open-pic";
362 device_type = "open-pic";
363 };
364
365 msi@41600 {
366 compatible = "fsl,mpc8641-msi", "fsl,mpic-msi";
367 reg = <0x41600 0x80>;
368 msi-available-ranges = <0 0x100>;
369 interrupts = <
370 0xe0 0
371 0xe1 0
372 0xe2 0
373 0xe3 0
374 0xe4 0
375 0xe5 0
376 0xe6 0
377 0xe7 0>;
378 interrupt-parent = <&mpic>;
379 };
380
381 global-utilities@e0000 {
382 compatible = "fsl,mpc8641-guts";
383 reg = <0xe0000 0x1000>;
384 fsl,has-rstcr;
385 };
386 };
387
388 pci0: pcie@fef08000 {
389 compatible = "fsl,mpc8641-pcie";
390 device_type = "pci";
391 #interrupt-cells = <1>;
392 #size-cells = <2>;
393 #address-cells = <3>;
394 reg = <0xfef08000 0x1000>;
395 bus-range = <0x0 0xff>;
396 ranges = <0x02000000 0x0 0x80000000 0x80000000 0x0 0x40000000
397 0x01000000 0x0 0x00000000 0xfe000000 0x0 0x00400000>;
398 clock-frequency = <33333333>;
399 interrupt-parent = <&mpic>;
400 interrupts = <0x18 0x2>;
401 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
402 interrupt-map = <
403 0x0000 0x0 0x0 0x1 &mpic 0x0 0x1
404 0x0000 0x0 0x0 0x2 &mpic 0x1 0x1
405 0x0000 0x0 0x0 0x3 &mpic 0x2 0x1
406 0x0000 0x0 0x0 0x4 &mpic 0x3 0x1
407 >;
408
409 pcie@0 {
410 reg = <0 0 0 0 0>;
411 #size-cells = <2>;
412 #address-cells = <3>;
413 device_type = "pci";
414 ranges = <0x02000000 0x0 0x80000000
415 0x02000000 0x0 0x80000000
416 0x0 0x40000000
417
418 0x01000000 0x0 0x00000000
419 0x01000000 0x0 0x00000000
420 0x0 0x00400000>;
421 };
422 };
423};
diff --git a/arch/powerpc/boot/dts/sbc8641d.dts b/arch/powerpc/boot/dts/sbc8641d.dts
deleted file mode 100644
index 68f0ed7626bd..000000000000
--- a/arch/powerpc/boot/dts/sbc8641d.dts
+++ /dev/null
@@ -1,447 +0,0 @@
1/*
2 * SBC8641D Device Tree Source
3 *
4 * Copyright 2008 Wind River Systems Inc.
5 *
6 * Paul Gortmaker (see MAINTAINERS for contact information)
7 *
8 * Based largely on the mpc8641_hpcn.dts by Freescale Semiconductor Inc.
9 *
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License as published by the
12 * Free Software Foundation; either version 2 of the License, or (at your
13 * option) any later version.
14 */
15
16/dts-v1/;
17
18/ {
19 model = "SBC8641D";
20 compatible = "wind,sbc8641";
21 #address-cells = <1>;
22 #size-cells = <1>;
23
24 aliases {
25 ethernet0 = &enet0;
26 ethernet1 = &enet1;
27 ethernet2 = &enet2;
28 ethernet3 = &enet3;
29 serial0 = &serial0;
30 serial1 = &serial1;
31 pci0 = &pci0;
32 pci1 = &pci1;
33 };
34
35 cpus {
36 #address-cells = <1>;
37 #size-cells = <0>;
38
39 PowerPC,8641@0 {
40 device_type = "cpu";
41 reg = <0>;
42 d-cache-line-size = <32>;
43 i-cache-line-size = <32>;
44 d-cache-size = <32768>; // L1
45 i-cache-size = <32768>; // L1
46 timebase-frequency = <0>; // From uboot
47 bus-frequency = <0>; // From uboot
48 clock-frequency = <0>; // From uboot
49 };
50 PowerPC,8641@1 {
51 device_type = "cpu";
52 reg = <1>;
53 d-cache-line-size = <32>;
54 i-cache-line-size = <32>;
55 d-cache-size = <32768>;
56 i-cache-size = <32768>;
57 timebase-frequency = <0>; // From uboot
58 bus-frequency = <0>; // From uboot
59 clock-frequency = <0>; // From uboot
60 };
61 };
62
63 memory {
64 device_type = "memory";
65 reg = <0x00000000 0x20000000>; // 512M at 0x0
66 };
67
68 localbus@f8005000 {
69 #address-cells = <2>;
70 #size-cells = <1>;
71 compatible = "fsl,mpc8641-localbus", "simple-bus";
72 reg = <0xf8005000 0x1000>;
73 interrupts = <19 2>;
74 interrupt-parent = <&mpic>;
75
76 ranges = <0 0 0xff000000 0x01000000 // 16MB Boot flash
77 1 0 0xf0000000 0x00010000 // 64KB EEPROM
78 2 0 0xf1000000 0x00100000 // EPLD (1MB)
79 3 0 0xe0000000 0x04000000 // 64MB LB SDRAM (CS3)
80 4 0 0xe4000000 0x04000000 // 64MB LB SDRAM (CS4)
81 6 0 0xf4000000 0x00100000 // LCD display (1MB)
82 7 0 0xe8000000 0x04000000>; // 64MB OneNAND
83
84 flash@0,0 {
85 compatible = "cfi-flash";
86 reg = <0 0 0x01000000>;
87 bank-width = <2>;
88 device-width = <2>;
89 #address-cells = <1>;
90 #size-cells = <1>;
91 partition@0 {
92 label = "dtb";
93 reg = <0x00000000 0x00100000>;
94 read-only;
95 };
96 partition@300000 {
97 label = "kernel";
98 reg = <0x00100000 0x00400000>;
99 read-only;
100 };
101 partition@400000 {
102 label = "fs";
103 reg = <0x00500000 0x00a00000>;
104 };
105 partition@700000 {
106 label = "firmware";
107 reg = <0x00f00000 0x00100000>;
108 read-only;
109 };
110 };
111
112 epld@2,0 {
113 compatible = "wrs,epld-localbus";
114 #address-cells = <2>;
115 #size-cells = <1>;
116 reg = <2 0 0x100000>;
117 ranges = <0 0 5 0 1 // User switches
118 1 0 5 1 1 // Board ID/Rev
119 3 0 5 3 1>; // LEDs
120 };
121 };
122
123 soc@f8000000 {
124 #address-cells = <1>;
125 #size-cells = <1>;
126 device_type = "soc";
127 compatible = "simple-bus";
128 ranges = <0x00000000 0xf8000000 0x00100000>;
129 bus-frequency = <0>;
130
131 mcm-law@0 {
132 compatible = "fsl,mcm-law";
133 reg = <0x0 0x1000>;
134 fsl,num-laws = <10>;
135 };
136
137 mcm@1000 {
138 compatible = "fsl,mpc8641-mcm", "fsl,mcm";
139 reg = <0x1000 0x1000>;
140 interrupts = <17 2>;
141 interrupt-parent = <&mpic>;
142 };
143
144 i2c@3000 {
145 #address-cells = <1>;
146 #size-cells = <0>;
147 cell-index = <0>;
148 compatible = "fsl-i2c";
149 reg = <0x3000 0x100>;
150 interrupts = <43 2>;
151 interrupt-parent = <&mpic>;
152 dfsrr;
153 };
154
155 i2c@3100 {
156 #address-cells = <1>;
157 #size-cells = <0>;
158 cell-index = <1>;
159 compatible = "fsl-i2c";
160 reg = <0x3100 0x100>;
161 interrupts = <43 2>;
162 interrupt-parent = <&mpic>;
163 dfsrr;
164 };
165
166 dma@21300 {
167 #address-cells = <1>;
168 #size-cells = <1>;
169 compatible = "fsl,mpc8641-dma", "fsl,eloplus-dma";
170 reg = <0x21300 0x4>;
171 ranges = <0x0 0x21100 0x200>;
172 cell-index = <0>;
173 dma-channel@0 {
174 compatible = "fsl,mpc8641-dma-channel",
175 "fsl,eloplus-dma-channel";
176 reg = <0x0 0x80>;
177 cell-index = <0>;
178 interrupt-parent = <&mpic>;
179 interrupts = <20 2>;
180 };
181 dma-channel@80 {
182 compatible = "fsl,mpc8641-dma-channel",
183 "fsl,eloplus-dma-channel";
184 reg = <0x80 0x80>;
185 cell-index = <1>;
186 interrupt-parent = <&mpic>;
187 interrupts = <21 2>;
188 };
189 dma-channel@100 {
190 compatible = "fsl,mpc8641-dma-channel",
191 "fsl,eloplus-dma-channel";
192 reg = <0x100 0x80>;
193 cell-index = <2>;
194 interrupt-parent = <&mpic>;
195 interrupts = <22 2>;
196 };
197 dma-channel@180 {
198 compatible = "fsl,mpc8641-dma-channel",
199 "fsl,eloplus-dma-channel";
200 reg = <0x180 0x80>;
201 cell-index = <3>;
202 interrupt-parent = <&mpic>;
203 interrupts = <23 2>;
204 };
205 };
206
207 enet0: ethernet@24000 {
208 #address-cells = <1>;
209 #size-cells = <1>;
210 cell-index = <0>;
211 device_type = "network";
212 model = "TSEC";
213 compatible = "gianfar";
214 reg = <0x24000 0x1000>;
215 ranges = <0x0 0x24000 0x1000>;
216 local-mac-address = [ 00 00 00 00 00 00 ];
217 interrupts = <29 2 30 2 34 2>;
218 interrupt-parent = <&mpic>;
219 tbi-handle = <&tbi0>;
220 phy-handle = <&phy0>;
221 phy-connection-type = "rgmii-id";
222
223 mdio@520 {
224 #address-cells = <1>;
225 #size-cells = <0>;
226 compatible = "fsl,gianfar-mdio";
227 reg = <0x520 0x20>;
228
229 phy0: ethernet-phy@1f {
230 reg = <0x1f>;
231 };
232 phy1: ethernet-phy@0 {
233 reg = <0>;
234 };
235 phy2: ethernet-phy@1 {
236 reg = <1>;
237 };
238 phy3: ethernet-phy@2 {
239 reg = <2>;
240 };
241 tbi0: tbi-phy@11 {
242 reg = <0x11>;
243 device_type = "tbi-phy";
244 };
245 };
246 };
247
248 enet1: ethernet@25000 {
249 #address-cells = <1>;
250 #size-cells = <1>;
251 cell-index = <1>;
252 device_type = "network";
253 model = "TSEC";
254 compatible = "gianfar";
255 reg = <0x25000 0x1000>;
256 ranges = <0x0 0x25000 0x1000>;
257 local-mac-address = [ 00 00 00 00 00 00 ];
258 interrupts = <35 2 36 2 40 2>;
259 interrupt-parent = <&mpic>;
260 tbi-handle = <&tbi1>;
261 phy-handle = <&phy1>;
262 phy-connection-type = "rgmii-id";
263
264 mdio@520 {
265 #address-cells = <1>;
266 #size-cells = <0>;
267 compatible = "fsl,gianfar-tbi";
268 reg = <0x520 0x20>;
269
270 tbi1: tbi-phy@11 {
271 reg = <0x11>;
272 device_type = "tbi-phy";
273 };
274 };
275 };
276
277 enet2: ethernet@26000 {
278 #address-cells = <1>;
279 #size-cells = <1>;
280 cell-index = <2>;
281 device_type = "network";
282 model = "TSEC";
283 compatible = "gianfar";
284 reg = <0x26000 0x1000>;
285 ranges = <0x0 0x26000 0x1000>;
286 local-mac-address = [ 00 00 00 00 00 00 ];
287 interrupts = <31 2 32 2 33 2>;
288 interrupt-parent = <&mpic>;
289 tbi-handle = <&tbi2>;
290 phy-handle = <&phy2>;
291 phy-connection-type = "rgmii-id";
292
293 mdio@520 {
294 #address-cells = <1>;
295 #size-cells = <0>;
296 compatible = "fsl,gianfar-tbi";
297 reg = <0x520 0x20>;
298
299 tbi2: tbi-phy@11 {
300 reg = <0x11>;
301 device_type = "tbi-phy";
302 };
303 };
304 };
305
306 enet3: ethernet@27000 {
307 #address-cells = <1>;
308 #size-cells = <1>;
309 cell-index = <3>;
310 device_type = "network";
311 model = "TSEC";
312 compatible = "gianfar";
313 reg = <0x27000 0x1000>;
314 ranges = <0x0 0x27000 0x1000>;
315 local-mac-address = [ 00 00 00 00 00 00 ];
316 interrupts = <37 2 38 2 39 2>;
317 interrupt-parent = <&mpic>;
318 tbi-handle = <&tbi3>;
319 phy-handle = <&phy3>;
320 phy-connection-type = "rgmii-id";
321
322 mdio@520 {
323 #address-cells = <1>;
324 #size-cells = <0>;
325 compatible = "fsl,gianfar-tbi";
326 reg = <0x520 0x20>;
327
328 tbi3: tbi-phy@11 {
329 reg = <0x11>;
330 device_type = "tbi-phy";
331 };
332 };
333 };
334
335 serial0: serial@4500 {
336 cell-index = <0>;
337 device_type = "serial";
338 compatible = "fsl,ns16550", "ns16550";
339 reg = <0x4500 0x100>;
340 clock-frequency = <0>;
341 interrupts = <42 2>;
342 interrupt-parent = <&mpic>;
343 };
344
345 serial1: serial@4600 {
346 cell-index = <1>;
347 device_type = "serial";
348 compatible = "fsl,ns16550", "ns16550";
349 reg = <0x4600 0x100>;
350 clock-frequency = <0>;
351 interrupts = <28 2>;
352 interrupt-parent = <&mpic>;
353 };
354
355 mpic: pic@40000 {
356 clock-frequency = <0>;
357 interrupt-controller;
358 #address-cells = <0>;
359 #interrupt-cells = <2>;
360 reg = <0x40000 0x40000>;
361 compatible = "chrp,open-pic";
362 device_type = "open-pic";
363 big-endian;
364 };
365
366 global-utilities@e0000 {
367 compatible = "fsl,mpc8641-guts";
368 reg = <0xe0000 0x1000>;
369 fsl,has-rstcr;
370 };
371 };
372
373 pci0: pcie@f8008000 {
374 compatible = "fsl,mpc8641-pcie";
375 device_type = "pci";
376 #interrupt-cells = <1>;
377 #size-cells = <2>;
378 #address-cells = <3>;
379 reg = <0xf8008000 0x1000>;
380 bus-range = <0x0 0xff>;
381 ranges = <0x02000000 0x0 0x80000000 0x80000000 0x0 0x20000000
382 0x01000000 0x0 0x00000000 0xe2000000 0x0 0x00100000>;
383 clock-frequency = <33333333>;
384 interrupt-parent = <&mpic>;
385 interrupts = <24 2>;
386 interrupt-map-mask = <0xff00 0 0 7>;
387 interrupt-map = <
388 /* IDSEL 0x0 */
389 0x0000 0 0 1 &mpic 0 1
390 0x0000 0 0 2 &mpic 1 1
391 0x0000 0 0 3 &mpic 2 1
392 0x0000 0 0 4 &mpic 3 1
393 >;
394
395 pcie@0 {
396 reg = <0 0 0 0 0>;
397 #size-cells = <2>;
398 #address-cells = <3>;
399 device_type = "pci";
400 ranges = <0x02000000 0x0 0x80000000
401 0x02000000 0x0 0x80000000
402 0x0 0x20000000
403
404 0x01000000 0x0 0x00000000
405 0x01000000 0x0 0x00000000
406 0x0 0x00100000>;
407 };
408
409 };
410
411 pci1: pcie@f8009000 {
412 compatible = "fsl,mpc8641-pcie";
413 device_type = "pci";
414 #interrupt-cells = <1>;
415 #size-cells = <2>;
416 #address-cells = <3>;
417 reg = <0xf8009000 0x1000>;
418 bus-range = <0 0xff>;
419 ranges = <0x02000000 0x0 0xa0000000 0xa0000000 0x0 0x20000000
420 0x01000000 0x0 0x00000000 0xe3000000 0x0 0x00100000>;
421 clock-frequency = <33333333>;
422 interrupt-parent = <&mpic>;
423 interrupts = <25 2>;
424 interrupt-map-mask = <0xf800 0 0 7>;
425 interrupt-map = <
426 /* IDSEL 0x0 */
427 0x0000 0 0 1 &mpic 4 1
428 0x0000 0 0 2 &mpic 5 1
429 0x0000 0 0 3 &mpic 6 1
430 0x0000 0 0 4 &mpic 7 1
431 >;
432
433 pcie@0 {
434 reg = <0 0 0 0 0>;
435 #size-cells = <2>;
436 #address-cells = <3>;
437 device_type = "pci";
438 ranges = <0x02000000 0x0 0xa0000000
439 0x02000000 0x0 0xa0000000
440 0x0 0x20000000
441
442 0x01000000 0x0 0x00000000
443 0x01000000 0x0 0x00000000
444 0x0 0x00100000>;
445 };
446 };
447};
diff --git a/arch/powerpc/configs/83xx/mpc834x_itx_defconfig b/arch/powerpc/configs/83xx/mpc834x_itx_defconfig
index 2a5fdcbabcdd..87fc15bce407 100644
--- a/arch/powerpc/configs/83xx/mpc834x_itx_defconfig
+++ b/arch/powerpc/configs/83xx/mpc834x_itx_defconfig
@@ -35,7 +35,6 @@ CONFIG_MTD_PHYSMAP=y
35CONFIG_BLK_DEV_LOOP=y 35CONFIG_BLK_DEV_LOOP=y
36CONFIG_BLK_DEV_RAM=y 36CONFIG_BLK_DEV_RAM=y
37CONFIG_BLK_DEV_RAM_SIZE=32768 37CONFIG_BLK_DEV_RAM_SIZE=32768
38CONFIG_IDE=y
39CONFIG_BLK_DEV_SD=y 38CONFIG_BLK_DEV_SD=y
40CONFIG_CHR_DEV_SG=y 39CONFIG_CHR_DEV_SG=y
41CONFIG_SCSI_SPI_ATTRS=y 40CONFIG_SCSI_SPI_ATTRS=y
diff --git a/arch/powerpc/configs/85xx/ksi8560_defconfig b/arch/powerpc/configs/85xx/ksi8560_defconfig
index 3be85c5f1a2a..6f753a71fe5d 100644
--- a/arch/powerpc/configs/85xx/ksi8560_defconfig
+++ b/arch/powerpc/configs/85xx/ksi8560_defconfig
@@ -34,7 +34,6 @@ CONFIG_MTD_PHYSMAP_OF=y
34CONFIG_BLK_DEV_LOOP=y 34CONFIG_BLK_DEV_LOOP=y
35CONFIG_BLK_DEV_RAM=y 35CONFIG_BLK_DEV_RAM=y
36CONFIG_BLK_DEV_RAM_SIZE=32768 36CONFIG_BLK_DEV_RAM_SIZE=32768
37CONFIG_IDE=y
38CONFIG_NETDEVICES=y 37CONFIG_NETDEVICES=y
39CONFIG_FS_ENET=y 38CONFIG_FS_ENET=y
40# CONFIG_FS_ENET_HAS_SCC is not set 39# CONFIG_FS_ENET_HAS_SCC is not set
diff --git a/arch/powerpc/configs/85xx/stx_gp3_defconfig b/arch/powerpc/configs/85xx/stx_gp3_defconfig
index f66d16ba8c58..b45190556c0c 100644
--- a/arch/powerpc/configs/85xx/stx_gp3_defconfig
+++ b/arch/powerpc/configs/85xx/stx_gp3_defconfig
@@ -31,8 +31,6 @@ CONFIG_BLK_DEV_LOOP=m
31CONFIG_BLK_DEV_NBD=m 31CONFIG_BLK_DEV_NBD=m
32CONFIG_BLK_DEV_RAM=y 32CONFIG_BLK_DEV_RAM=y
33CONFIG_BLK_DEV_RAM_SIZE=32768 33CONFIG_BLK_DEV_RAM_SIZE=32768
34CONFIG_IDE=y
35CONFIG_BLK_DEV_IDECD=m
36CONFIG_SCSI=m 34CONFIG_SCSI=m
37CONFIG_BLK_DEV_SD=m 35CONFIG_BLK_DEV_SD=m
38CONFIG_CHR_DEV_ST=m 36CONFIG_CHR_DEV_ST=m
diff --git a/arch/powerpc/configs/86xx-hw.config b/arch/powerpc/configs/86xx-hw.config
new file mode 100644
index 000000000000..f91f8895fc93
--- /dev/null
+++ b/arch/powerpc/configs/86xx-hw.config
@@ -0,0 +1,104 @@
1CONFIG_ATA=y
2CONFIG_BLK_DEV_SD=y
3CONFIG_BLK_DEV_SR=y
4CONFIG_BROADCOM_PHY=y
5# CONFIG_CARDBUS is not set
6CONFIG_CHR_DEV_SG=y
7CONFIG_CHR_DEV_ST=y
8CONFIG_CRC_T10DIF=y
9CONFIG_CRYPTO_HMAC=y
10CONFIG_DS1682=y
11CONFIG_EEPROM_LEGACY=y
12CONFIG_GEF_WDT=y
13CONFIG_GIANFAR=y
14CONFIG_GPIO_GE_FPGA=y
15CONFIG_GPIO_SYSFS=y
16CONFIG_HID_A4TECH=y
17CONFIG_HID_APPLE=y
18CONFIG_HID_BELKIN=y
19CONFIG_HID_CHERRY=y
20CONFIG_HID_CHICONY=y
21CONFIG_HID_CYPRESS=y
22CONFIG_HID_EZKEY=y
23CONFIG_HID_GYRATION=y
24CONFIG_HID_LOGITECH=y
25CONFIG_HID_MICROSOFT=y
26CONFIG_HID_MONTEREY=y
27CONFIG_HID_PANTHERLORD=y
28CONFIG_HID_PETALYNX=y
29CONFIG_HID_SAMSUNG=y
30CONFIG_HID_SUNPLUS=y
31CONFIG_HW_RANDOM=y
32CONFIG_HZ_1000=y
33CONFIG_I2C_MPC=y
34CONFIG_I2C=y
35# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
36# CONFIG_INET_XFRM_MODE_TUNNEL is not set
37CONFIG_INPUT_FF_MEMLESS=m
38# CONFIG_INPUT_KEYBOARD is not set
39# CONFIG_INPUT_MOUSEDEV is not set
40# CONFIG_INPUT_MOUSE is not set
41CONFIG_MTD_BLOCK=y
42CONFIG_MTD_CFI_ADV_OPTIONS=y
43CONFIG_MTD_CFI_AMDSTD=y
44CONFIG_MTD_CFI_INTELEXT=y
45CONFIG_MTD_CFI_LE_BYTE_SWAP=y
46CONFIG_MTD_CFI=y
47CONFIG_MTD_CMDLINE_PARTS=y
48CONFIG_MTD_JEDECPROBE=y
49CONFIG_MTD_NAND_FSL_ELBC=y
50CONFIG_MTD_NAND=y
51CONFIG_MTD_PHYSMAP_OF=y
52CONFIG_NETDEVICES=y
53CONFIG_NET_TULIP=y
54CONFIG_NVRAM=y
55CONFIG_PATA_ALI=y
56CONFIG_PCCARD=y
57CONFIG_PCI_DEBUG=y
58# CONFIG_PCIEASPM is not set
59CONFIG_PCIEPORTBUS=y
60CONFIG_PCI=y
61# CONFIG_PCMCIA_LOAD_CIS is not set
62# CONFIG_PPC_CHRP is not set
63# CONFIG_PPC_PMAC is not set
64CONFIG_RTC_CLASS=y
65CONFIG_RTC_DRV_CMOS=y
66CONFIG_RTC_DRV_RX8581=y
67CONFIG_SATA_AHCI=y
68CONFIG_SATA_SIL24=y
69CONFIG_SATA_SIL=y
70CONFIG_SCSI_LOGGING=y
71CONFIG_SENSORS_LM90=y
72CONFIG_SENSORS_LM92=y
73CONFIG_SERIAL_8250_CONSOLE=y
74CONFIG_SERIAL_8250_DETECT_IRQ=y
75CONFIG_SERIAL_8250_EXTENDED=y
76CONFIG_SERIAL_8250_MANY_PORTS=y
77CONFIG_SERIAL_8250_NR_UARTS=2
78CONFIG_SERIAL_8250_RSA=y
79CONFIG_SERIAL_8250_RUNTIME_UARTS=2
80CONFIG_SERIAL_8250_SHARE_IRQ=y
81CONFIG_SERIAL_8250=y
82CONFIG_SERIO_LIBPS2=y
83CONFIG_SND_INTEL8X0=y
84CONFIG_SND_MIXER_OSS=y
85CONFIG_SND_PCM_OSS=y
86# CONFIG_SND_SUPPORT_OLD_API is not set
87CONFIG_SND=y
88CONFIG_SOUND=y
89CONFIG_ULI526X=y
90CONFIG_USB_EHCI_HCD=y
91CONFIG_USB_MON=y
92CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
93CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
94CONFIG_USB_OHCI_HCD=y
95CONFIG_USB_STORAGE=y
96CONFIG_USB=y
97CONFIG_VITESSE_PHY=y
98CONFIG_VME_BUS=y
99CONFIG_VME_TSI148=y
100CONFIG_WATCHDOG=y
101# CONFIG_YENTA_O2 is not set
102# CONFIG_YENTA_RICOH is not set
103# CONFIG_YENTA_TOSHIBA is not set
104CONFIG_YENTA=y
diff --git a/arch/powerpc/configs/86xx-smp.config b/arch/powerpc/configs/86xx-smp.config
new file mode 100644
index 000000000000..40ac38d3038c
--- /dev/null
+++ b/arch/powerpc/configs/86xx-smp.config
@@ -0,0 +1,2 @@
1CONFIG_NR_CPUS=2
2CONFIG_SMP=y
diff --git a/arch/powerpc/configs/86xx/gef_ppc9a_defconfig b/arch/powerpc/configs/86xx/gef_ppc9a_defconfig
deleted file mode 100644
index 9792a2cb9b20..000000000000
--- a/arch/powerpc/configs/86xx/gef_ppc9a_defconfig
+++ /dev/null
@@ -1,216 +0,0 @@
1CONFIG_SMP=y
2CONFIG_NR_CPUS=2
3CONFIG_SYSVIPC=y
4CONFIG_POSIX_MQUEUE=y
5CONFIG_HIGH_RES_TIMERS=y
6CONFIG_BSD_PROCESS_ACCT=y
7CONFIG_BSD_PROCESS_ACCT_V3=y
8CONFIG_IKCONFIG=y
9CONFIG_IKCONFIG_PROC=y
10CONFIG_LOG_BUF_SHIFT=14
11CONFIG_RELAY=y
12CONFIG_BLK_DEV_INITRD=y
13CONFIG_EXPERT=y
14CONFIG_SLAB=y
15CONFIG_MODULES=y
16CONFIG_MODULE_UNLOAD=y
17# CONFIG_BLK_DEV_BSG is not set
18# CONFIG_PPC_CHRP is not set
19# CONFIG_PPC_PMAC is not set
20CONFIG_PPC_86xx=y
21CONFIG_GEF_PPC9A=y
22CONFIG_HIGHMEM=y
23CONFIG_HZ_1000=y
24CONFIG_PREEMPT=y
25CONFIG_BINFMT_MISC=m
26CONFIG_PCI=y
27CONFIG_PCIEPORTBUS=y
28# CONFIG_PCIEASPM is not set
29CONFIG_PCCARD=y
30# CONFIG_PCMCIA_LOAD_CIS is not set
31# CONFIG_CARDBUS is not set
32CONFIG_YENTA=y
33# CONFIG_YENTA_O2 is not set
34# CONFIG_YENTA_RICOH is not set
35# CONFIG_YENTA_TOSHIBA is not set
36CONFIG_NET=y
37CONFIG_PACKET=y
38CONFIG_UNIX=y
39CONFIG_XFRM_USER=m
40CONFIG_NET_KEY=m
41CONFIG_INET=y
42CONFIG_IP_MULTICAST=y
43CONFIG_IP_ADVANCED_ROUTER=y
44CONFIG_IP_MULTIPLE_TABLES=y
45CONFIG_IP_ROUTE_MULTIPATH=y
46CONFIG_IP_ROUTE_VERBOSE=y
47CONFIG_IP_PNP=y
48CONFIG_IP_PNP_DHCP=y
49CONFIG_IP_PNP_BOOTP=y
50CONFIG_IP_PNP_RARP=y
51CONFIG_NET_IPIP=m
52CONFIG_IP_MROUTE=y
53CONFIG_IP_PIMSM_V1=y
54CONFIG_IP_PIMSM_V2=y
55CONFIG_SYN_COOKIES=y
56CONFIG_INET_AH=m
57CONFIG_INET_ESP=m
58CONFIG_INET_IPCOMP=m
59# CONFIG_INET_XFRM_MODE_BEET is not set
60CONFIG_INET6_AH=m
61CONFIG_INET6_ESP=m
62CONFIG_INET6_IPCOMP=m
63CONFIG_IPV6_TUNNEL=m
64CONFIG_NET_PKTGEN=m
65CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
66CONFIG_MTD=y
67CONFIG_MTD_BLOCK=y
68CONFIG_MTD_CFI=y
69CONFIG_MTD_JEDECPROBE=y
70CONFIG_MTD_CFI_INTELEXT=y
71CONFIG_MTD_CFI_AMDSTD=y
72CONFIG_MTD_PHYSMAP_OF=y
73CONFIG_BLK_DEV_LOOP=m
74CONFIG_BLK_DEV_CRYPTOLOOP=m
75CONFIG_BLK_DEV_NBD=m
76CONFIG_BLK_DEV_RAM=y
77CONFIG_BLK_DEV_RAM_SIZE=131072
78CONFIG_DS1682=y
79CONFIG_IDE=y
80CONFIG_BLK_DEV_IDECS=y
81CONFIG_BLK_DEV_SD=y
82CONFIG_CHR_DEV_ST=y
83CONFIG_BLK_DEV_SR=y
84CONFIG_ATA=y
85CONFIG_SATA_SIL=y
86CONFIG_NETDEVICES=y
87CONFIG_BONDING=m
88CONFIG_DUMMY=m
89CONFIG_NETCONSOLE=y
90CONFIG_TUN=m
91CONFIG_GIANFAR=y
92CONFIG_PPP=m
93CONFIG_PPP_BSDCOMP=m
94CONFIG_PPP_DEFLATE=m
95CONFIG_PPP_FILTER=y
96CONFIG_PPP_MULTILINK=y
97CONFIG_PPPOE=m
98CONFIG_PPP_ASYNC=m
99CONFIG_PPP_SYNC_TTY=m
100CONFIG_SLIP=m
101CONFIG_SLIP_COMPRESSED=y
102CONFIG_SLIP_SMART=y
103CONFIG_SLIP_MODE_SLIP6=y
104# CONFIG_INPUT_KEYBOARD is not set
105# CONFIG_INPUT_MOUSE is not set
106# CONFIG_SERIO is not set
107# CONFIG_LEGACY_PTYS is not set
108CONFIG_SERIAL_8250=y
109CONFIG_SERIAL_8250_CONSOLE=y
110# CONFIG_SERIAL_8250_PCI is not set
111CONFIG_SERIAL_8250_NR_UARTS=2
112CONFIG_SERIAL_8250_RUNTIME_UARTS=2
113CONFIG_HW_RANDOM=y
114CONFIG_NVRAM=y
115CONFIG_I2C=y
116CONFIG_I2C_CHARDEV=y
117CONFIG_I2C_MPC=y
118CONFIG_GPIO_SYSFS=y
119CONFIG_GPIO_GE_FPGA=y
120CONFIG_SENSORS_LM90=y
121CONFIG_SENSORS_LM92=y
122CONFIG_WATCHDOG=y
123CONFIG_GEF_WDT=y
124CONFIG_HID_A4TECH=y
125CONFIG_HID_APPLE=y
126CONFIG_HID_BELKIN=y
127CONFIG_HID_CHERRY=y
128CONFIG_HID_CHICONY=y
129CONFIG_HID_CYPRESS=y
130CONFIG_HID_EZKEY=y
131CONFIG_HID_GYRATION=y
132CONFIG_HID_LOGITECH=y
133CONFIG_HID_MICROSOFT=y
134CONFIG_HID_MONTEREY=y
135CONFIG_HID_PANTHERLORD=y
136CONFIG_HID_PETALYNX=y
137CONFIG_HID_SAMSUNG=y
138CONFIG_HID_SUNPLUS=y
139CONFIG_USB=y
140CONFIG_USB_EHCI_HCD=y
141# CONFIG_USB_EHCI_HCD_PPC_OF is not set
142CONFIG_USB_OHCI_HCD=y
143CONFIG_USB_STORAGE=y
144CONFIG_RTC_CLASS=y
145# CONFIG_RTC_INTF_PROC is not set
146CONFIG_RTC_DRV_RX8581=y
147CONFIG_STAGING=y
148CONFIG_VME_BUS=y
149CONFIG_VME_TSI148=y
150CONFIG_EXT2_FS=y
151CONFIG_EXT2_FS_XATTR=y
152CONFIG_EXT2_FS_POSIX_ACL=y
153CONFIG_EXT3_FS=y
154# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
155CONFIG_EXT3_FS_POSIX_ACL=y
156CONFIG_ISO9660_FS=y
157CONFIG_JOLIET=y
158CONFIG_ZISOFS=y
159CONFIG_UDF_FS=y
160CONFIG_MSDOS_FS=y
161CONFIG_VFAT_FS=y
162CONFIG_FAT_DEFAULT_CODEPAGE=850
163CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
164CONFIG_PROC_KCORE=y
165CONFIG_TMPFS=y
166CONFIG_JFFS2_FS=y
167CONFIG_NFS_FS=y
168CONFIG_NFS_V4=y
169CONFIG_ROOT_NFS=y
170CONFIG_CIFS=m
171CONFIG_CIFS_XATTR=y
172CONFIG_CIFS_POSIX=y
173CONFIG_NLS_CODEPAGE_437=m
174CONFIG_NLS_CODEPAGE_737=m
175CONFIG_NLS_CODEPAGE_775=m
176CONFIG_NLS_CODEPAGE_850=m
177CONFIG_NLS_CODEPAGE_852=m
178CONFIG_NLS_CODEPAGE_855=m
179CONFIG_NLS_CODEPAGE_857=m
180CONFIG_NLS_CODEPAGE_860=m
181CONFIG_NLS_CODEPAGE_861=m
182CONFIG_NLS_CODEPAGE_862=m
183CONFIG_NLS_CODEPAGE_863=m
184CONFIG_NLS_CODEPAGE_864=m
185CONFIG_NLS_CODEPAGE_865=m
186CONFIG_NLS_CODEPAGE_866=m
187CONFIG_NLS_CODEPAGE_869=m
188CONFIG_NLS_CODEPAGE_936=m
189CONFIG_NLS_CODEPAGE_950=m
190CONFIG_NLS_CODEPAGE_932=m
191CONFIG_NLS_CODEPAGE_949=m
192CONFIG_NLS_CODEPAGE_874=m
193CONFIG_NLS_ISO8859_8=m
194CONFIG_NLS_CODEPAGE_1250=m
195CONFIG_NLS_CODEPAGE_1251=m
196CONFIG_NLS_ASCII=m
197CONFIG_NLS_ISO8859_1=m
198CONFIG_NLS_ISO8859_2=m
199CONFIG_NLS_ISO8859_3=m
200CONFIG_NLS_ISO8859_4=m
201CONFIG_NLS_ISO8859_5=m
202CONFIG_NLS_ISO8859_6=m
203CONFIG_NLS_ISO8859_7=m
204CONFIG_NLS_ISO8859_9=m
205CONFIG_NLS_ISO8859_13=m
206CONFIG_NLS_ISO8859_14=m
207CONFIG_NLS_ISO8859_15=m
208CONFIG_NLS_KOI8_R=m
209CONFIG_NLS_KOI8_U=m
210CONFIG_NLS_UTF8=m
211CONFIG_CRC_CCITT=y
212CONFIG_CRC_T10DIF=y
213CONFIG_LIBCRC32C=y
214CONFIG_MAGIC_SYSRQ=y
215# CONFIG_CRYPTO_ANSI_CPRNG is not set
216# CONFIG_CRYPTO_HW is not set
diff --git a/arch/powerpc/configs/86xx/gef_sbc310_defconfig b/arch/powerpc/configs/86xx/gef_sbc310_defconfig
deleted file mode 100644
index cadc36682bb4..000000000000
--- a/arch/powerpc/configs/86xx/gef_sbc310_defconfig
+++ /dev/null
@@ -1,214 +0,0 @@
1CONFIG_SMP=y
2CONFIG_NR_CPUS=2
3CONFIG_SYSVIPC=y
4CONFIG_POSIX_MQUEUE=y
5CONFIG_HIGH_RES_TIMERS=y
6CONFIG_BSD_PROCESS_ACCT=y
7CONFIG_BSD_PROCESS_ACCT_V3=y
8CONFIG_IKCONFIG=y
9CONFIG_IKCONFIG_PROC=y
10CONFIG_LOG_BUF_SHIFT=14
11CONFIG_RELAY=y
12CONFIG_BLK_DEV_INITRD=y
13CONFIG_EXPERT=y
14CONFIG_SLAB=y
15CONFIG_MODULES=y
16CONFIG_MODULE_UNLOAD=y
17# CONFIG_BLK_DEV_BSG is not set
18# CONFIG_PPC_CHRP is not set
19# CONFIG_PPC_PMAC is not set
20CONFIG_PPC_86xx=y
21CONFIG_GEF_SBC310=y
22CONFIG_HIGHMEM=y
23CONFIG_HZ_1000=y
24CONFIG_PREEMPT=y
25CONFIG_BINFMT_MISC=y
26CONFIG_PCI=y
27CONFIG_PCIEPORTBUS=y
28# CONFIG_PCIEASPM is not set
29CONFIG_PCCARD=y
30# CONFIG_PCMCIA_LOAD_CIS is not set
31# CONFIG_CARDBUS is not set
32CONFIG_YENTA=y
33# CONFIG_YENTA_O2 is not set
34# CONFIG_YENTA_RICOH is not set
35# CONFIG_YENTA_TOSHIBA is not set
36CONFIG_NET=y
37CONFIG_PACKET=y
38CONFIG_UNIX=y
39CONFIG_XFRM_USER=m
40CONFIG_NET_KEY=m
41CONFIG_INET=y
42CONFIG_IP_MULTICAST=y
43CONFIG_IP_ADVANCED_ROUTER=y
44CONFIG_IP_MULTIPLE_TABLES=y
45CONFIG_IP_ROUTE_MULTIPATH=y
46CONFIG_IP_ROUTE_VERBOSE=y
47CONFIG_IP_PNP=y
48CONFIG_IP_PNP_DHCP=y
49CONFIG_IP_PNP_BOOTP=y
50CONFIG_IP_PNP_RARP=y
51CONFIG_NET_IPIP=m
52CONFIG_IP_MROUTE=y
53CONFIG_IP_PIMSM_V1=y
54CONFIG_IP_PIMSM_V2=y
55CONFIG_SYN_COOKIES=y
56CONFIG_INET_AH=m
57CONFIG_INET_ESP=m
58CONFIG_INET_IPCOMP=m
59# CONFIG_INET_XFRM_MODE_BEET is not set
60CONFIG_INET6_AH=m
61CONFIG_INET6_ESP=m
62CONFIG_INET6_IPCOMP=m
63CONFIG_IPV6_TUNNEL=m
64CONFIG_NET_PKTGEN=m
65CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
66CONFIG_MTD=y
67CONFIG_MTD_BLOCK=y
68CONFIG_MTD_CFI=y
69CONFIG_MTD_JEDECPROBE=y
70CONFIG_MTD_CFI_INTELEXT=y
71CONFIG_MTD_CFI_AMDSTD=y
72CONFIG_MTD_PHYSMAP_OF=y
73CONFIG_BLK_DEV_LOOP=m
74CONFIG_BLK_DEV_CRYPTOLOOP=m
75CONFIG_BLK_DEV_NBD=m
76CONFIG_BLK_DEV_RAM=y
77CONFIG_BLK_DEV_RAM_SIZE=131072
78CONFIG_DS1682=y
79CONFIG_IDE=y
80CONFIG_BLK_DEV_IDECS=y
81CONFIG_BLK_DEV_SD=y
82CONFIG_CHR_DEV_ST=y
83CONFIG_BLK_DEV_SR=y
84CONFIG_ATA=y
85CONFIG_SATA_SIL24=y
86# CONFIG_ATA_SFF is not set
87CONFIG_NETDEVICES=y
88CONFIG_BONDING=m
89CONFIG_DUMMY=m
90CONFIG_NETCONSOLE=y
91CONFIG_TUN=m
92CONFIG_GIANFAR=y
93CONFIG_PPP=m
94CONFIG_PPP_BSDCOMP=m
95CONFIG_PPP_DEFLATE=m
96CONFIG_PPP_FILTER=y
97CONFIG_PPP_MULTILINK=y
98CONFIG_PPPOE=m
99CONFIG_PPP_ASYNC=m
100CONFIG_PPP_SYNC_TTY=m
101CONFIG_SLIP=m
102CONFIG_SLIP_COMPRESSED=y
103CONFIG_SLIP_SMART=y
104CONFIG_SLIP_MODE_SLIP6=y
105# CONFIG_INPUT_KEYBOARD is not set
106# CONFIG_INPUT_MOUSE is not set
107# CONFIG_SERIO is not set
108# CONFIG_LEGACY_PTYS is not set
109CONFIG_SERIAL_8250=y
110CONFIG_SERIAL_8250_CONSOLE=y
111# CONFIG_SERIAL_8250_PCI is not set
112CONFIG_SERIAL_8250_NR_UARTS=2
113CONFIG_SERIAL_8250_RUNTIME_UARTS=2
114CONFIG_HW_RANDOM=y
115CONFIG_NVRAM=y
116CONFIG_I2C=y
117CONFIG_I2C_CHARDEV=y
118CONFIG_I2C_MPC=y
119CONFIG_GPIO_SYSFS=y
120CONFIG_GPIO_GE_FPGA=y
121CONFIG_SENSORS_LM90=y
122CONFIG_SENSORS_LM92=y
123CONFIG_WATCHDOG=y
124CONFIG_GEF_WDT=y
125CONFIG_HID_A4TECH=y
126CONFIG_HID_APPLE=y
127CONFIG_HID_BELKIN=y
128CONFIG_HID_CHERRY=y
129CONFIG_HID_CHICONY=y
130CONFIG_HID_CYPRESS=y
131CONFIG_HID_EZKEY=y
132CONFIG_HID_GYRATION=y
133CONFIG_HID_LOGITECH=y
134CONFIG_HID_MICROSOFT=y
135CONFIG_HID_MONTEREY=y
136CONFIG_HID_PANTHERLORD=y
137CONFIG_HID_PETALYNX=y
138CONFIG_HID_SAMSUNG=y
139CONFIG_HID_SUNPLUS=y
140CONFIG_USB=y
141CONFIG_USB_EHCI_HCD=y
142# CONFIG_USB_EHCI_HCD_PPC_OF is not set
143CONFIG_USB_OHCI_HCD=y
144CONFIG_USB_STORAGE=y
145CONFIG_RTC_CLASS=y
146# CONFIG_RTC_INTF_PROC is not set
147CONFIG_RTC_DRV_RX8581=y
148CONFIG_EXT2_FS=y
149CONFIG_EXT2_FS_XATTR=y
150CONFIG_EXT2_FS_POSIX_ACL=y
151CONFIG_EXT3_FS=y
152# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
153CONFIG_EXT3_FS_POSIX_ACL=y
154CONFIG_ISO9660_FS=y
155CONFIG_JOLIET=y
156CONFIG_ZISOFS=y
157CONFIG_UDF_FS=y
158CONFIG_MSDOS_FS=y
159CONFIG_VFAT_FS=y
160CONFIG_FAT_DEFAULT_CODEPAGE=850
161CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
162CONFIG_PROC_KCORE=y
163CONFIG_TMPFS=y
164CONFIG_JFFS2_FS=y
165CONFIG_NFS_FS=y
166CONFIG_NFS_V4=y
167CONFIG_ROOT_NFS=y
168CONFIG_CIFS=m
169CONFIG_CIFS_XATTR=y
170CONFIG_CIFS_POSIX=y
171CONFIG_NLS_CODEPAGE_437=m
172CONFIG_NLS_CODEPAGE_737=m
173CONFIG_NLS_CODEPAGE_775=m
174CONFIG_NLS_CODEPAGE_850=m
175CONFIG_NLS_CODEPAGE_852=m
176CONFIG_NLS_CODEPAGE_855=m
177CONFIG_NLS_CODEPAGE_857=m
178CONFIG_NLS_CODEPAGE_860=m
179CONFIG_NLS_CODEPAGE_861=m
180CONFIG_NLS_CODEPAGE_862=m
181CONFIG_NLS_CODEPAGE_863=m
182CONFIG_NLS_CODEPAGE_864=m
183CONFIG_NLS_CODEPAGE_865=m
184CONFIG_NLS_CODEPAGE_866=m
185CONFIG_NLS_CODEPAGE_869=m
186CONFIG_NLS_CODEPAGE_936=m
187CONFIG_NLS_CODEPAGE_950=m
188CONFIG_NLS_CODEPAGE_932=m
189CONFIG_NLS_CODEPAGE_949=m
190CONFIG_NLS_CODEPAGE_874=m
191CONFIG_NLS_ISO8859_8=m
192CONFIG_NLS_CODEPAGE_1250=m
193CONFIG_NLS_CODEPAGE_1251=m
194CONFIG_NLS_ASCII=m
195CONFIG_NLS_ISO8859_1=m
196CONFIG_NLS_ISO8859_2=m
197CONFIG_NLS_ISO8859_3=m
198CONFIG_NLS_ISO8859_4=m
199CONFIG_NLS_ISO8859_5=m
200CONFIG_NLS_ISO8859_6=m
201CONFIG_NLS_ISO8859_7=m
202CONFIG_NLS_ISO8859_9=m
203CONFIG_NLS_ISO8859_13=m
204CONFIG_NLS_ISO8859_14=m
205CONFIG_NLS_ISO8859_15=m
206CONFIG_NLS_KOI8_R=m
207CONFIG_NLS_KOI8_U=m
208CONFIG_NLS_UTF8=m
209CONFIG_CRC_CCITT=y
210CONFIG_CRC_T10DIF=y
211CONFIG_LIBCRC32C=y
212CONFIG_MAGIC_SYSRQ=y
213# CONFIG_CRYPTO_ANSI_CPRNG is not set
214# CONFIG_CRYPTO_HW is not set
diff --git a/arch/powerpc/configs/86xx/gef_sbc610_defconfig b/arch/powerpc/configs/86xx/gef_sbc610_defconfig
deleted file mode 100644
index 2aa7d9737e43..000000000000
--- a/arch/powerpc/configs/86xx/gef_sbc610_defconfig
+++ /dev/null
@@ -1,273 +0,0 @@
1CONFIG_SMP=y
2CONFIG_NR_CPUS=2
3CONFIG_SYSVIPC=y
4CONFIG_POSIX_MQUEUE=y
5CONFIG_HIGH_RES_TIMERS=y
6CONFIG_BSD_PROCESS_ACCT=y
7CONFIG_BSD_PROCESS_ACCT_V3=y
8CONFIG_IKCONFIG=y
9CONFIG_IKCONFIG_PROC=y
10CONFIG_LOG_BUF_SHIFT=14
11CONFIG_RELAY=y
12CONFIG_BLK_DEV_INITRD=y
13CONFIG_EXPERT=y
14CONFIG_SLAB=y
15CONFIG_MODULES=y
16CONFIG_MODULE_UNLOAD=y
17# CONFIG_BLK_DEV_BSG is not set
18# CONFIG_PPC_CHRP is not set
19# CONFIG_PPC_PMAC is not set
20CONFIG_PPC_86xx=y
21CONFIG_GEF_SBC610=y
22CONFIG_HIGHMEM=y
23CONFIG_HZ_1000=y
24CONFIG_PREEMPT=y
25CONFIG_BINFMT_MISC=m
26CONFIG_PCI=y
27CONFIG_PCIEPORTBUS=y
28# CONFIG_PCIEASPM is not set
29CONFIG_PCI_DEBUG=y
30CONFIG_NET=y
31CONFIG_PACKET=y
32CONFIG_UNIX=y
33CONFIG_XFRM_USER=m
34CONFIG_NET_KEY=m
35CONFIG_INET=y
36CONFIG_IP_MULTICAST=y
37CONFIG_IP_ADVANCED_ROUTER=y
38CONFIG_IP_MULTIPLE_TABLES=y
39CONFIG_IP_ROUTE_MULTIPATH=y
40CONFIG_IP_ROUTE_VERBOSE=y
41CONFIG_IP_PNP=y
42CONFIG_IP_PNP_DHCP=y
43CONFIG_IP_PNP_BOOTP=y
44CONFIG_IP_PNP_RARP=y
45CONFIG_NET_IPIP=m
46CONFIG_IP_MROUTE=y
47CONFIG_IP_PIMSM_V1=y
48CONFIG_IP_PIMSM_V2=y
49CONFIG_SYN_COOKIES=y
50CONFIG_INET_AH=m
51CONFIG_INET_ESP=m
52CONFIG_INET_IPCOMP=m
53# CONFIG_INET_LRO is not set
54CONFIG_INET6_AH=m
55CONFIG_INET6_ESP=m
56CONFIG_INET6_IPCOMP=m
57CONFIG_IPV6_TUNNEL=m
58CONFIG_NETFILTER=y
59# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
60CONFIG_IP_NF_IPTABLES=m
61CONFIG_IP_NF_MATCH_ECN=m
62CONFIG_IP_NF_MATCH_TTL=m
63CONFIG_IP_NF_FILTER=m
64CONFIG_IP_NF_TARGET_REJECT=m
65CONFIG_IP_NF_MANGLE=m
66CONFIG_IP_NF_TARGET_ECN=m
67CONFIG_IP_NF_RAW=m
68CONFIG_IP_NF_ARPTABLES=m
69CONFIG_IP_NF_ARPFILTER=m
70CONFIG_IP_NF_ARP_MANGLE=m
71CONFIG_IP6_NF_IPTABLES=m
72CONFIG_IP6_NF_MATCH_EUI64=m
73CONFIG_IP6_NF_MATCH_FRAG=m
74CONFIG_IP6_NF_MATCH_OPTS=m
75CONFIG_IP6_NF_MATCH_HL=m
76CONFIG_IP6_NF_MATCH_IPV6HEADER=m
77CONFIG_IP6_NF_MATCH_RT=m
78CONFIG_IP6_NF_FILTER=m
79CONFIG_IP6_NF_MANGLE=m
80CONFIG_IP6_NF_RAW=m
81CONFIG_IP_SCTP=m
82CONFIG_TIPC=m
83CONFIG_ATM=m
84CONFIG_ATM_CLIP=m
85CONFIG_ATM_LANE=m
86CONFIG_ATM_MPOA=m
87CONFIG_ATM_BR2684=m
88CONFIG_BRIDGE=m
89CONFIG_VLAN_8021Q=m
90CONFIG_NET_SCHED=y
91CONFIG_NET_SCH_CBQ=m
92CONFIG_NET_SCH_HTB=m
93CONFIG_NET_SCH_HFSC=m
94CONFIG_NET_SCH_ATM=m
95CONFIG_NET_SCH_PRIO=m
96CONFIG_NET_SCH_RED=m
97CONFIG_NET_SCH_SFQ=m
98CONFIG_NET_SCH_TEQL=m
99CONFIG_NET_SCH_TBF=m
100CONFIG_NET_SCH_GRED=m
101CONFIG_NET_SCH_DSMARK=m
102CONFIG_NET_SCH_NETEM=m
103CONFIG_NET_CLS_TCINDEX=m
104CONFIG_NET_CLS_ROUTE4=m
105CONFIG_NET_CLS_FW=m
106CONFIG_NET_CLS_U32=m
107CONFIG_NET_CLS_RSVP=m
108CONFIG_NET_CLS_RSVP6=m
109CONFIG_NET_PKTGEN=m
110CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
111# CONFIG_FW_LOADER is not set
112CONFIG_MTD=y
113CONFIG_MTD_BLOCK=y
114CONFIG_MTD_CFI=y
115CONFIG_MTD_JEDECPROBE=y
116CONFIG_MTD_CFI_INTELEXT=y
117CONFIG_MTD_CFI_AMDSTD=y
118CONFIG_MTD_PHYSMAP_OF=y
119CONFIG_BLK_DEV_LOOP=m
120CONFIG_BLK_DEV_CRYPTOLOOP=m
121CONFIG_BLK_DEV_NBD=m
122CONFIG_BLK_DEV_RAM=y
123CONFIG_BLK_DEV_RAM_SIZE=131072
124CONFIG_DS1682=y
125CONFIG_BLK_DEV_SD=y
126CONFIG_CHR_DEV_ST=y
127CONFIG_BLK_DEV_SR=y
128CONFIG_ATA=y
129CONFIG_SATA_SIL=y
130CONFIG_NETDEVICES=y
131CONFIG_BONDING=m
132CONFIG_DUMMY=m
133CONFIG_NETCONSOLE=y
134CONFIG_TUN=m
135CONFIG_GIANFAR=y
136CONFIG_PPP=m
137CONFIG_PPP_BSDCOMP=m
138CONFIG_PPP_DEFLATE=m
139CONFIG_PPP_FILTER=y
140CONFIG_PPP_MULTILINK=y
141CONFIG_PPPOATM=m
142CONFIG_PPPOE=m
143CONFIG_PPP_ASYNC=m
144CONFIG_PPP_SYNC_TTY=m
145CONFIG_SLIP=m
146CONFIG_SLIP_COMPRESSED=y
147CONFIG_SLIP_SMART=y
148CONFIG_SLIP_MODE_SLIP6=y
149CONFIG_INPUT_FF_MEMLESS=m
150# CONFIG_INPUT_KEYBOARD is not set
151# CONFIG_INPUT_MOUSE is not set
152# CONFIG_SERIO is not set
153# CONFIG_LEGACY_PTYS is not set
154CONFIG_SERIAL_8250=y
155CONFIG_SERIAL_8250_CONSOLE=y
156# CONFIG_SERIAL_8250_PCI is not set
157CONFIG_SERIAL_8250_NR_UARTS=2
158CONFIG_SERIAL_8250_RUNTIME_UARTS=2
159CONFIG_HW_RANDOM=y
160CONFIG_NVRAM=y
161CONFIG_I2C=y
162CONFIG_I2C_CHARDEV=y
163CONFIG_I2C_MPC=y
164CONFIG_GPIO_SYSFS=y
165CONFIG_GPIO_GE_FPGA=y
166CONFIG_SENSORS_LM90=y
167CONFIG_SENSORS_LM92=y
168CONFIG_WATCHDOG=y
169CONFIG_GEF_WDT=y
170CONFIG_HID_A4TECH=y
171CONFIG_HID_APPLE=y
172CONFIG_HID_BELKIN=y
173CONFIG_HID_CHERRY=y
174CONFIG_HID_CHICONY=y
175CONFIG_HID_CYPRESS=y
176CONFIG_HID_EZKEY=y
177CONFIG_HID_GYRATION=y
178CONFIG_HID_LOGITECH=y
179CONFIG_HID_MICROSOFT=y
180CONFIG_HID_MONTEREY=y
181CONFIG_HID_PANTHERLORD=y
182CONFIG_HID_PETALYNX=y
183CONFIG_HID_SAMSUNG=y
184CONFIG_HID_SUNPLUS=y
185CONFIG_USB=y
186CONFIG_USB_EHCI_HCD=y
187# CONFIG_USB_EHCI_HCD_PPC_OF is not set
188CONFIG_USB_OHCI_HCD=y
189CONFIG_USB_STORAGE=y
190CONFIG_RTC_CLASS=y
191# CONFIG_RTC_INTF_PROC is not set
192CONFIG_RTC_DRV_RX8581=y
193CONFIG_STAGING=y
194CONFIG_VME_BUS=y
195CONFIG_VME_TSI148=y
196CONFIG_EXT2_FS=y
197CONFIG_EXT2_FS_XATTR=y
198CONFIG_EXT2_FS_POSIX_ACL=y
199CONFIG_EXT3_FS=y
200# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
201CONFIG_EXT3_FS_POSIX_ACL=y
202CONFIG_MSDOS_FS=y
203CONFIG_VFAT_FS=y
204CONFIG_PROC_KCORE=y
205CONFIG_TMPFS=y
206CONFIG_JFFS2_FS=y
207CONFIG_NFS_FS=y
208CONFIG_NFS_V4=y
209CONFIG_ROOT_NFS=y
210CONFIG_CIFS=m
211CONFIG_CIFS_XATTR=y
212CONFIG_CIFS_POSIX=y
213CONFIG_NLS_CODEPAGE_437=m
214CONFIG_NLS_CODEPAGE_737=m
215CONFIG_NLS_CODEPAGE_775=m
216CONFIG_NLS_CODEPAGE_850=m
217CONFIG_NLS_CODEPAGE_852=m
218CONFIG_NLS_CODEPAGE_855=m
219CONFIG_NLS_CODEPAGE_857=m
220CONFIG_NLS_CODEPAGE_860=m
221CONFIG_NLS_CODEPAGE_861=m
222CONFIG_NLS_CODEPAGE_862=m
223CONFIG_NLS_CODEPAGE_863=m
224CONFIG_NLS_CODEPAGE_864=m
225CONFIG_NLS_CODEPAGE_865=m
226CONFIG_NLS_CODEPAGE_866=m
227CONFIG_NLS_CODEPAGE_869=m
228CONFIG_NLS_CODEPAGE_936=m
229CONFIG_NLS_CODEPAGE_950=m
230CONFIG_NLS_CODEPAGE_932=m
231CONFIG_NLS_CODEPAGE_949=m
232CONFIG_NLS_CODEPAGE_874=m
233CONFIG_NLS_ISO8859_8=m
234CONFIG_NLS_CODEPAGE_1250=m
235CONFIG_NLS_CODEPAGE_1251=m
236CONFIG_NLS_ASCII=m
237CONFIG_NLS_ISO8859_1=m
238CONFIG_NLS_ISO8859_2=m
239CONFIG_NLS_ISO8859_3=m
240CONFIG_NLS_ISO8859_4=m
241CONFIG_NLS_ISO8859_5=m
242CONFIG_NLS_ISO8859_6=m
243CONFIG_NLS_ISO8859_7=m
244CONFIG_NLS_ISO8859_9=m
245CONFIG_NLS_ISO8859_13=m
246CONFIG_NLS_ISO8859_14=m
247CONFIG_NLS_ISO8859_15=m
248CONFIG_NLS_KOI8_R=m
249CONFIG_NLS_KOI8_U=m
250CONFIG_NLS_UTF8=m
251CONFIG_DEBUG_INFO=y
252CONFIG_MAGIC_SYSRQ=y
253CONFIG_DETECT_HUNG_TASK=y
254# CONFIG_DEBUG_BUGVERBOSE is not set
255CONFIG_SECURITY=y
256CONFIG_SECURITY_NETWORK=y
257CONFIG_CRYPTO_NULL=m
258CONFIG_CRYPTO_TEST=m
259CONFIG_CRYPTO_PCBC=m
260CONFIG_CRYPTO_HMAC=y
261CONFIG_CRYPTO_MICHAEL_MIC=m
262CONFIG_CRYPTO_SHA512=m
263CONFIG_CRYPTO_WP512=m
264CONFIG_CRYPTO_ANUBIS=m
265CONFIG_CRYPTO_BLOWFISH=m
266CONFIG_CRYPTO_CAST5=m
267CONFIG_CRYPTO_CAST6=m
268CONFIG_CRYPTO_KHAZAD=m
269CONFIG_CRYPTO_SERPENT=m
270CONFIG_CRYPTO_TEA=m
271CONFIG_CRYPTO_TWOFISH=m
272# CONFIG_CRYPTO_ANSI_CPRNG is not set
273# CONFIG_CRYPTO_HW is not set
diff --git a/arch/powerpc/configs/86xx/mpc8610_hpcd_defconfig b/arch/powerpc/configs/86xx/mpc8610_hpcd_defconfig
deleted file mode 100644
index e32207de2b77..000000000000
--- a/arch/powerpc/configs/86xx/mpc8610_hpcd_defconfig
+++ /dev/null
@@ -1,110 +0,0 @@
1# CONFIG_SWAP is not set
2CONFIG_SYSVIPC=y
3CONFIG_NO_HZ=y
4CONFIG_HIGH_RES_TIMERS=y
5CONFIG_IKCONFIG=y
6CONFIG_IKCONFIG_PROC=y
7CONFIG_LOG_BUF_SHIFT=14
8CONFIG_BLK_DEV_INITRD=y
9CONFIG_EXPERT=y
10# CONFIG_ELF_CORE is not set
11CONFIG_MODULES=y
12CONFIG_MODULE_UNLOAD=y
13# CONFIG_BLK_DEV_BSG is not set
14CONFIG_PARTITION_ADVANCED=y
15CONFIG_LDM_PARTITION=y
16# CONFIG_IOSCHED_CFQ is not set
17# CONFIG_PPC_CHRP is not set
18# CONFIG_PPC_PMAC is not set
19CONFIG_PPC_86xx=y
20CONFIG_MPC8610_HPCD=y
21CONFIG_HIGHMEM=y
22CONFIG_HZ_1000=y
23CONFIG_FORCE_MAX_ZONEORDER=12
24# CONFIG_SECCOMP is not set
25CONFIG_PCI=y
26CONFIG_PCIEPORTBUS=y
27# CONFIG_PCIEASPM is not set
28CONFIG_PCI_DEBUG=y
29CONFIG_NET=y
30CONFIG_PACKET=y
31CONFIG_UNIX=y
32CONFIG_XFRM_USER=y
33CONFIG_INET=y
34CONFIG_IP_PNP=y
35CONFIG_IP_PNP_DHCP=y
36CONFIG_IP_PNP_BOOTP=y
37CONFIG_IP_PNP_RARP=y
38# CONFIG_INET_LRO is not set
39CONFIG_IPV6=y
40CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
41CONFIG_MTD=y
42CONFIG_MTD_CMDLINE_PARTS=y
43CONFIG_MTD_BLOCK=y
44CONFIG_MTD_CFI=y
45CONFIG_MTD_CFI_AMDSTD=y
46CONFIG_MTD_PHYSMAP_OF=y
47CONFIG_MTD_NAND=y
48CONFIG_MTD_NAND_FSL_ELBC=y
49CONFIG_BLK_DEV_LOOP=y
50CONFIG_BLK_DEV_RAM=y
51CONFIG_BLK_DEV_RAM_SIZE=131072
52CONFIG_IDE=y
53CONFIG_BLK_DEV_SD=y
54CONFIG_CHR_DEV_SG=y
55CONFIG_ATA=y
56CONFIG_SATA_AHCI=y
57CONFIG_PATA_ALI=y
58CONFIG_NETDEVICES=y
59CONFIG_DUMMY=y
60CONFIG_NET_TULIP=y
61CONFIG_ULI526X=y
62# CONFIG_INPUT_MOUSEDEV is not set
63# CONFIG_INPUT_KEYBOARD is not set
64# CONFIG_INPUT_MOUSE is not set
65CONFIG_SERIO_LIBPS2=y
66# CONFIG_LEGACY_PTYS is not set
67CONFIG_SERIAL_8250=y
68CONFIG_SERIAL_8250_CONSOLE=y
69CONFIG_SERIAL_8250_NR_UARTS=2
70CONFIG_SERIAL_8250_RUNTIME_UARTS=2
71CONFIG_SERIAL_8250_EXTENDED=y
72CONFIG_SERIAL_8250_MANY_PORTS=y
73CONFIG_SERIAL_8250_SHARE_IRQ=y
74CONFIG_SERIAL_8250_DETECT_IRQ=y
75CONFIG_SERIAL_8250_RSA=y
76# CONFIG_HW_RANDOM is not set
77CONFIG_I2C=y
78CONFIG_I2C_MPC=y
79# CONFIG_HWMON is not set
80CONFIG_FB=y
81CONFIG_FB_FSL_DIU=y
82CONFIG_VGACON_SOFT_SCROLLBACK=y
83CONFIG_FRAMEBUFFER_CONSOLE=y
84CONFIG_SOUND=y
85CONFIG_SND=y
86CONFIG_SND_MIXER_OSS=y
87CONFIG_SND_PCM_OSS=y
88# CONFIG_SND_SUPPORT_OLD_API is not set
89CONFIG_SND_SOC=y
90CONFIG_SND_POWERPC_SOC=y
91CONFIG_RTC_CLASS=y
92CONFIG_RTC_DRV_CMOS=y
93CONFIG_EXT2_FS=y
94CONFIG_EXT3_FS=y
95# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
96# CONFIG_DNOTIFY is not set
97CONFIG_PROC_KCORE=y
98CONFIG_TMPFS=y
99CONFIG_NFS_FS=y
100CONFIG_ROOT_NFS=y
101CONFIG_NFSD=y
102CONFIG_NLS=y
103CONFIG_CRC_T10DIF=y
104CONFIG_FONTS=y
105CONFIG_FONT_8x8=y
106CONFIG_FONT_8x16=y
107CONFIG_DEBUG_INFO=y
108CONFIG_DEBUG_SHIRQ=y
109CONFIG_DETECT_HUNG_TASK=y
110# CONFIG_CRYPTO_ANSI_CPRNG is not set
diff --git a/arch/powerpc/configs/86xx/mpc8641_hpcn_defconfig b/arch/powerpc/configs/86xx/mpc8641_hpcn_defconfig
deleted file mode 100644
index a36e11ddaebd..000000000000
--- a/arch/powerpc/configs/86xx/mpc8641_hpcn_defconfig
+++ /dev/null
@@ -1,156 +0,0 @@
1CONFIG_SMP=y
2CONFIG_NR_CPUS=2
3CONFIG_SYSVIPC=y
4CONFIG_POSIX_MQUEUE=y
5CONFIG_AUDIT=y
6CONFIG_NO_HZ=y
7CONFIG_HIGH_RES_TIMERS=y
8CONFIG_BSD_PROCESS_ACCT=y
9CONFIG_IKCONFIG=y
10CONFIG_IKCONFIG_PROC=y
11CONFIG_LOG_BUF_SHIFT=14
12CONFIG_BLK_DEV_INITRD=y
13CONFIG_EXPERT=y
14CONFIG_KALLSYMS_ALL=y
15CONFIG_MODULES=y
16CONFIG_MODULE_UNLOAD=y
17CONFIG_MODULE_FORCE_UNLOAD=y
18CONFIG_MODVERSIONS=y
19# CONFIG_BLK_DEV_BSG is not set
20CONFIG_PARTITION_ADVANCED=y
21CONFIG_MAC_PARTITION=y
22# CONFIG_PPC_CHRP is not set
23# CONFIG_PPC_PMAC is not set
24CONFIG_PPC_86xx=y
25CONFIG_MPC8641_HPCN=y
26CONFIG_HIGHMEM=y
27CONFIG_HZ_1000=y
28CONFIG_BINFMT_MISC=m
29CONFIG_PCI=y
30CONFIG_NET=y
31CONFIG_PACKET=y
32CONFIG_UNIX=y
33CONFIG_XFRM_USER=y
34CONFIG_NET_KEY=m
35CONFIG_INET=y
36CONFIG_IP_MULTICAST=y
37CONFIG_IP_ADVANCED_ROUTER=y
38CONFIG_IP_MULTIPLE_TABLES=y
39CONFIG_IP_ROUTE_MULTIPATH=y
40CONFIG_IP_ROUTE_VERBOSE=y
41CONFIG_IP_PNP=y
42CONFIG_IP_PNP_DHCP=y
43CONFIG_IP_PNP_BOOTP=y
44CONFIG_IP_PNP_RARP=y
45CONFIG_NET_IPIP=y
46CONFIG_IP_MROUTE=y
47CONFIG_IP_PIMSM_V1=y
48CONFIG_IP_PIMSM_V2=y
49# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
50# CONFIG_INET_XFRM_MODE_TUNNEL is not set
51# CONFIG_INET_XFRM_MODE_BEET is not set
52# CONFIG_INET_LRO is not set
53CONFIG_IPV6=y
54CONFIG_IP_SCTP=m
55CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
56CONFIG_BLK_DEV_LOOP=y
57CONFIG_BLK_DEV_NBD=y
58CONFIG_BLK_DEV_RAM=y
59CONFIG_BLK_DEV_RAM_SIZE=131072
60CONFIG_EEPROM_LEGACY=y
61CONFIG_BLK_DEV_SD=y
62CONFIG_CHR_DEV_ST=y
63CONFIG_BLK_DEV_SR=y
64CONFIG_CHR_DEV_SG=y
65CONFIG_SCSI_LOGGING=y
66CONFIG_ATA=y
67CONFIG_SATA_AHCI=y
68CONFIG_PATA_ALI=y
69CONFIG_NETDEVICES=y
70CONFIG_DUMMY=y
71CONFIG_GIANFAR=y
72CONFIG_VITESSE_PHY=y
73CONFIG_INPUT_FF_MEMLESS=m
74# CONFIG_INPUT_MOUSEDEV is not set
75# CONFIG_INPUT_KEYBOARD is not set
76# CONFIG_INPUT_MOUSE is not set
77CONFIG_SERIO_LIBPS2=y
78CONFIG_SERIAL_8250=y
79CONFIG_SERIAL_8250_CONSOLE=y
80CONFIG_SERIAL_8250_NR_UARTS=2
81CONFIG_SERIAL_8250_RUNTIME_UARTS=2
82CONFIG_SERIAL_8250_EXTENDED=y
83CONFIG_SERIAL_8250_MANY_PORTS=y
84CONFIG_SERIAL_8250_SHARE_IRQ=y
85CONFIG_SERIAL_8250_DETECT_IRQ=y
86CONFIG_SERIAL_8250_RSA=y
87# CONFIG_HW_RANDOM is not set
88CONFIG_NVRAM=y
89CONFIG_I2C=y
90CONFIG_I2C_MPC=y
91# CONFIG_HWMON is not set
92CONFIG_SOUND=y
93CONFIG_SND=y
94CONFIG_SND_MIXER_OSS=y
95CONFIG_SND_PCM_OSS=y
96# CONFIG_SND_SUPPORT_OLD_API is not set
97CONFIG_SND_INTEL8X0=y
98CONFIG_HID_A4TECH=y
99CONFIG_HID_APPLE=y
100CONFIG_HID_BELKIN=y
101CONFIG_HID_CHERRY=y
102CONFIG_HID_CHICONY=y
103CONFIG_HID_CYPRESS=y
104CONFIG_HID_EZKEY=y
105CONFIG_HID_GYRATION=y
106CONFIG_HID_LOGITECH=y
107CONFIG_HID_MICROSOFT=y
108CONFIG_HID_MONTEREY=y
109CONFIG_HID_PANTHERLORD=y
110CONFIG_HID_PETALYNX=y
111CONFIG_HID_SAMSUNG=y
112CONFIG_HID_SUNPLUS=y
113CONFIG_USB=y
114CONFIG_USB_MON=y
115CONFIG_USB_EHCI_HCD=y
116CONFIG_USB_OHCI_HCD=y
117CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
118CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
119CONFIG_USB_STORAGE=y
120CONFIG_RTC_CLASS=y
121CONFIG_RTC_DRV_CMOS=y
122CONFIG_EXT2_FS=y
123CONFIG_EXT3_FS=y
124# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
125CONFIG_ISO9660_FS=m
126CONFIG_JOLIET=y
127CONFIG_ZISOFS=y
128CONFIG_UDF_FS=m
129CONFIG_MSDOS_FS=m
130CONFIG_VFAT_FS=y
131CONFIG_NTFS_FS=y
132CONFIG_PROC_KCORE=y
133CONFIG_TMPFS=y
134CONFIG_ADFS_FS=m
135CONFIG_AFFS_FS=m
136CONFIG_HFS_FS=m
137CONFIG_HFSPLUS_FS=m
138CONFIG_BEFS_FS=m
139CONFIG_BFS_FS=m
140CONFIG_EFS_FS=m
141CONFIG_CRAMFS=y
142CONFIG_VXFS_FS=m
143CONFIG_HPFS_FS=m
144CONFIG_QNX4FS_FS=m
145CONFIG_SYSV_FS=m
146CONFIG_UFS_FS=m
147CONFIG_NFS_FS=y
148CONFIG_NFS_V4=y
149CONFIG_ROOT_NFS=y
150CONFIG_NFSD=y
151CONFIG_CRC_T10DIF=y
152CONFIG_DEBUG_INFO=y
153CONFIG_DETECT_HUNG_TASK=y
154CONFIG_CRYPTO_PCBC=m
155CONFIG_CRYPTO_HMAC=y
156# CONFIG_CRYPTO_ANSI_CPRNG is not set
diff --git a/arch/powerpc/configs/86xx/sbc8641d_defconfig b/arch/powerpc/configs/86xx/sbc8641d_defconfig
deleted file mode 100644
index db79bdee844b..000000000000
--- a/arch/powerpc/configs/86xx/sbc8641d_defconfig
+++ /dev/null
@@ -1,246 +0,0 @@
1CONFIG_SMP=y
2CONFIG_NR_CPUS=2
3CONFIG_SYSVIPC=y
4CONFIG_POSIX_MQUEUE=y
5CONFIG_HIGH_RES_TIMERS=y
6CONFIG_BSD_PROCESS_ACCT=y
7CONFIG_BSD_PROCESS_ACCT_V3=y
8CONFIG_IKCONFIG=y
9CONFIG_IKCONFIG_PROC=y
10CONFIG_LOG_BUF_SHIFT=14
11CONFIG_RELAY=y
12CONFIG_BLK_DEV_INITRD=y
13CONFIG_EXPERT=y
14CONFIG_SLAB=y
15CONFIG_MODULES=y
16CONFIG_MODULE_UNLOAD=y
17# CONFIG_BLK_DEV_BSG is not set
18# CONFIG_PPC_CHRP is not set
19# CONFIG_PPC_PMAC is not set
20CONFIG_PPC_86xx=y
21CONFIG_SBC8641D=y
22CONFIG_PREEMPT=y
23CONFIG_BINFMT_MISC=m
24CONFIG_PCI=y
25CONFIG_PCIEPORTBUS=y
26# CONFIG_PCIEASPM is not set
27CONFIG_NET=y
28CONFIG_PACKET=y
29CONFIG_UNIX=y
30CONFIG_XFRM_USER=m
31CONFIG_NET_KEY=m
32CONFIG_INET=y
33CONFIG_IP_MULTICAST=y
34CONFIG_IP_ADVANCED_ROUTER=y
35CONFIG_IP_MULTIPLE_TABLES=y
36CONFIG_IP_ROUTE_MULTIPATH=y
37CONFIG_IP_ROUTE_VERBOSE=y
38CONFIG_IP_PNP=y
39CONFIG_IP_PNP_DHCP=y
40CONFIG_IP_PNP_BOOTP=y
41CONFIG_IP_PNP_RARP=y
42CONFIG_NET_IPIP=m
43CONFIG_IP_MROUTE=y
44CONFIG_IP_PIMSM_V1=y
45CONFIG_IP_PIMSM_V2=y
46CONFIG_SYN_COOKIES=y
47CONFIG_INET_AH=m
48CONFIG_INET_ESP=m
49CONFIG_INET_IPCOMP=m
50# CONFIG_INET_LRO is not set
51CONFIG_INET6_AH=m
52CONFIG_INET6_ESP=m
53CONFIG_INET6_IPCOMP=m
54CONFIG_IPV6_TUNNEL=m
55CONFIG_NETFILTER=y
56# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
57CONFIG_IP_NF_IPTABLES=m
58CONFIG_IP_NF_MATCH_ECN=m
59CONFIG_IP_NF_MATCH_TTL=m
60CONFIG_IP_NF_FILTER=m
61CONFIG_IP_NF_TARGET_REJECT=m
62CONFIG_IP_NF_MANGLE=m
63CONFIG_IP_NF_TARGET_ECN=m
64CONFIG_IP_NF_RAW=m
65CONFIG_IP_NF_ARPTABLES=m
66CONFIG_IP_NF_ARPFILTER=m
67CONFIG_IP_NF_ARP_MANGLE=m
68CONFIG_IP6_NF_IPTABLES=m
69CONFIG_IP6_NF_MATCH_EUI64=m
70CONFIG_IP6_NF_MATCH_FRAG=m
71CONFIG_IP6_NF_MATCH_OPTS=m
72CONFIG_IP6_NF_MATCH_HL=m
73CONFIG_IP6_NF_MATCH_IPV6HEADER=m
74CONFIG_IP6_NF_MATCH_RT=m
75CONFIG_IP6_NF_FILTER=m
76CONFIG_IP6_NF_MANGLE=m
77CONFIG_IP6_NF_RAW=m
78CONFIG_IP_SCTP=m
79CONFIG_TIPC=m
80CONFIG_ATM=m
81CONFIG_ATM_CLIP=m
82CONFIG_ATM_LANE=m
83CONFIG_ATM_MPOA=m
84CONFIG_ATM_BR2684=m
85CONFIG_BRIDGE=m
86CONFIG_VLAN_8021Q=m
87CONFIG_NET_SCHED=y
88CONFIG_NET_SCH_CBQ=m
89CONFIG_NET_SCH_HTB=m
90CONFIG_NET_SCH_HFSC=m
91CONFIG_NET_SCH_ATM=m
92CONFIG_NET_SCH_PRIO=m
93CONFIG_NET_SCH_RED=m
94CONFIG_NET_SCH_SFQ=m
95CONFIG_NET_SCH_TEQL=m
96CONFIG_NET_SCH_TBF=m
97CONFIG_NET_SCH_GRED=m
98CONFIG_NET_SCH_DSMARK=m
99CONFIG_NET_SCH_NETEM=m
100CONFIG_NET_CLS_TCINDEX=m
101CONFIG_NET_CLS_ROUTE4=m
102CONFIG_NET_CLS_FW=m
103CONFIG_NET_CLS_U32=m
104CONFIG_NET_CLS_RSVP=m
105CONFIG_NET_CLS_RSVP6=m
106CONFIG_NET_PKTGEN=m
107CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
108# CONFIG_FW_LOADER is not set
109CONFIG_MTD=y
110CONFIG_MTD_BLOCK=y
111CONFIG_MTD_CFI=y
112CONFIG_MTD_CFI_ADV_OPTIONS=y
113CONFIG_MTD_CFI_LE_BYTE_SWAP=y
114CONFIG_MTD_CFI_INTELEXT=y
115CONFIG_MTD_PHYSMAP_OF=y
116CONFIG_BLK_DEV_LOOP=m
117CONFIG_BLK_DEV_CRYPTOLOOP=m
118CONFIG_BLK_DEV_NBD=m
119CONFIG_BLK_DEV_RAM=y
120CONFIG_MD=y
121CONFIG_BLK_DEV_MD=y
122CONFIG_MD_LINEAR=y
123CONFIG_MD_RAID0=y
124CONFIG_MD_RAID1=y
125CONFIG_MD_RAID10=y
126CONFIG_MD_MULTIPATH=y
127CONFIG_MD_FAULTY=y
128CONFIG_BLK_DEV_DM=y
129CONFIG_DM_CRYPT=y
130CONFIG_DM_SNAPSHOT=y
131CONFIG_DM_MIRROR=y
132CONFIG_DM_ZERO=y
133CONFIG_NETDEVICES=y
134CONFIG_BONDING=m
135CONFIG_DUMMY=m
136CONFIG_NETCONSOLE=y
137CONFIG_TUN=m
138CONFIG_GIANFAR=y
139CONFIG_BROADCOM_PHY=y
140CONFIG_PPP=m
141CONFIG_PPP_BSDCOMP=m
142CONFIG_PPP_DEFLATE=m
143CONFIG_PPP_FILTER=y
144CONFIG_PPP_MULTILINK=y
145CONFIG_PPPOATM=m
146CONFIG_PPPOE=m
147CONFIG_PPP_ASYNC=m
148CONFIG_PPP_SYNC_TTY=m
149CONFIG_SLIP=m
150CONFIG_SLIP_COMPRESSED=y
151CONFIG_SLIP_SMART=y
152CONFIG_SLIP_MODE_SLIP6=y
153# CONFIG_INPUT_KEYBOARD is not set
154# CONFIG_INPUT_MOUSE is not set
155# CONFIG_SERIO is not set
156CONFIG_SERIAL_8250=y
157CONFIG_SERIAL_8250_CONSOLE=y
158# CONFIG_SERIAL_8250_PCI is not set
159CONFIG_SERIAL_8250_NR_UARTS=2
160CONFIG_SERIAL_8250_RUNTIME_UARTS=2
161CONFIG_I2C=y
162CONFIG_I2C_CHARDEV=y
163CONFIG_I2C_MPC=y
164CONFIG_WATCHDOG=y
165CONFIG_SOFT_WATCHDOG=m
166CONFIG_EXT2_FS=y
167CONFIG_EXT2_FS_XATTR=y
168CONFIG_EXT2_FS_POSIX_ACL=y
169CONFIG_EXT3_FS=y
170# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
171CONFIG_EXT3_FS_POSIX_ACL=y
172CONFIG_REISERFS_FS=m
173CONFIG_REISERFS_FS_XATTR=y
174CONFIG_REISERFS_FS_POSIX_ACL=y
175CONFIG_AUTOFS4_FS=m
176CONFIG_PROC_KCORE=y
177CONFIG_TMPFS=y
178CONFIG_MINIX_FS=m
179CONFIG_ROMFS_FS=m
180CONFIG_NFS_FS=y
181CONFIG_NFS_V4=y
182CONFIG_ROOT_NFS=y
183CONFIG_CIFS=m
184CONFIG_CIFS_XATTR=y
185CONFIG_CIFS_POSIX=y
186CONFIG_NLS_CODEPAGE_437=m
187CONFIG_NLS_CODEPAGE_737=m
188CONFIG_NLS_CODEPAGE_775=m
189CONFIG_NLS_CODEPAGE_850=m
190CONFIG_NLS_CODEPAGE_852=m
191CONFIG_NLS_CODEPAGE_855=m
192CONFIG_NLS_CODEPAGE_857=m
193CONFIG_NLS_CODEPAGE_860=m
194CONFIG_NLS_CODEPAGE_861=m
195CONFIG_NLS_CODEPAGE_862=m
196CONFIG_NLS_CODEPAGE_863=m
197CONFIG_NLS_CODEPAGE_864=m
198CONFIG_NLS_CODEPAGE_865=m
199CONFIG_NLS_CODEPAGE_866=m
200CONFIG_NLS_CODEPAGE_869=m
201CONFIG_NLS_CODEPAGE_936=m
202CONFIG_NLS_CODEPAGE_950=m
203CONFIG_NLS_CODEPAGE_932=m
204CONFIG_NLS_CODEPAGE_949=m
205CONFIG_NLS_CODEPAGE_874=m
206CONFIG_NLS_ISO8859_8=m
207CONFIG_NLS_CODEPAGE_1250=m
208CONFIG_NLS_CODEPAGE_1251=m
209CONFIG_NLS_ASCII=m
210CONFIG_NLS_ISO8859_1=m
211CONFIG_NLS_ISO8859_2=m
212CONFIG_NLS_ISO8859_3=m
213CONFIG_NLS_ISO8859_4=m
214CONFIG_NLS_ISO8859_5=m
215CONFIG_NLS_ISO8859_6=m
216CONFIG_NLS_ISO8859_7=m
217CONFIG_NLS_ISO8859_9=m
218CONFIG_NLS_ISO8859_13=m
219CONFIG_NLS_ISO8859_14=m
220CONFIG_NLS_ISO8859_15=m
221CONFIG_NLS_KOI8_R=m
222CONFIG_NLS_KOI8_U=m
223CONFIG_NLS_UTF8=m
224CONFIG_DEBUG_INFO=y
225CONFIG_DEBUG_FS=y
226CONFIG_MAGIC_SYSRQ=y
227CONFIG_DETECT_HUNG_TASK=y
228# CONFIG_DEBUG_BUGVERBOSE is not set
229CONFIG_SECURITY=y
230CONFIG_SECURITY_NETWORK=y
231CONFIG_CRYPTO_NULL=m
232CONFIG_CRYPTO_TEST=m
233CONFIG_CRYPTO_PCBC=m
234CONFIG_CRYPTO_HMAC=y
235CONFIG_CRYPTO_MICHAEL_MIC=m
236CONFIG_CRYPTO_SHA512=m
237CONFIG_CRYPTO_WP512=m
238CONFIG_CRYPTO_ANUBIS=m
239CONFIG_CRYPTO_BLOWFISH=m
240CONFIG_CRYPTO_CAST5=m
241CONFIG_CRYPTO_CAST6=m
242CONFIG_CRYPTO_KHAZAD=m
243CONFIG_CRYPTO_SERPENT=m
244CONFIG_CRYPTO_TEA=m
245CONFIG_CRYPTO_TWOFISH=m
246# CONFIG_CRYPTO_ANSI_CPRNG is not set
diff --git a/arch/powerpc/configs/mpc86xx_basic_defconfig b/arch/powerpc/configs/mpc86xx_basic_defconfig
new file mode 100644
index 000000000000..33af5c5de105
--- /dev/null
+++ b/arch/powerpc/configs/mpc86xx_basic_defconfig
@@ -0,0 +1,10 @@
1CONFIG_HIGHMEM=y
2CONFIG_KEXEC=y
3CONFIG_PPC_86xx=y
4CONFIG_PROC_KCORE=y
5CONFIG_GEF_PPC9A=y
6CONFIG_GEF_SBC310=y
7CONFIG_GEF_SBC610=y
8CONFIG_MPC8610_HPCD=y
9CONFIG_MPC8641_HPCN=y
10CONFIG_SBC8641D=y
diff --git a/arch/powerpc/configs/mpc86xx_defconfig b/arch/powerpc/configs/mpc86xx_defconfig
deleted file mode 100644
index a4572563681c..000000000000
--- a/arch/powerpc/configs/mpc86xx_defconfig
+++ /dev/null
@@ -1,162 +0,0 @@
1CONFIG_SMP=y
2CONFIG_NR_CPUS=2
3CONFIG_SYSVIPC=y
4CONFIG_POSIX_MQUEUE=y
5CONFIG_AUDIT=y
6CONFIG_NO_HZ=y
7CONFIG_HIGH_RES_TIMERS=y
8CONFIG_BSD_PROCESS_ACCT=y
9CONFIG_IKCONFIG=y
10CONFIG_IKCONFIG_PROC=y
11CONFIG_LOG_BUF_SHIFT=14
12CONFIG_BLK_DEV_INITRD=y
13CONFIG_EXPERT=y
14CONFIG_KALLSYMS_ALL=y
15CONFIG_MODULES=y
16CONFIG_MODULE_UNLOAD=y
17CONFIG_MODULE_FORCE_UNLOAD=y
18CONFIG_MODVERSIONS=y
19# CONFIG_BLK_DEV_BSG is not set
20CONFIG_PARTITION_ADVANCED=y
21CONFIG_MAC_PARTITION=y
22# CONFIG_PPC_CHRP is not set
23# CONFIG_PPC_PMAC is not set
24CONFIG_PPC_86xx=y
25CONFIG_MPC8641_HPCN=y
26CONFIG_SBC8641D=y
27CONFIG_MPC8610_HPCD=y
28CONFIG_GEF_SBC610=y
29CONFIG_HIGHMEM=y
30CONFIG_HZ_1000=y
31CONFIG_BINFMT_MISC=m
32CONFIG_PCI=y
33CONFIG_NET=y
34CONFIG_PACKET=y
35CONFIG_UNIX=y
36CONFIG_XFRM_USER=y
37CONFIG_NET_KEY=m
38CONFIG_INET=y
39CONFIG_IP_MULTICAST=y
40CONFIG_IP_ADVANCED_ROUTER=y
41CONFIG_IP_MULTIPLE_TABLES=y
42CONFIG_IP_ROUTE_MULTIPATH=y
43CONFIG_IP_ROUTE_VERBOSE=y
44CONFIG_IP_PNP=y
45CONFIG_IP_PNP_DHCP=y
46CONFIG_IP_PNP_BOOTP=y
47CONFIG_IP_PNP_RARP=y
48CONFIG_NET_IPIP=y
49CONFIG_IP_MROUTE=y
50CONFIG_IP_PIMSM_V1=y
51CONFIG_IP_PIMSM_V2=y
52# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
53# CONFIG_INET_XFRM_MODE_TUNNEL is not set
54# CONFIG_INET_XFRM_MODE_BEET is not set
55# CONFIG_INET_LRO is not set
56CONFIG_IPV6=y
57CONFIG_IP_SCTP=m
58CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
59CONFIG_BLK_DEV_LOOP=y
60CONFIG_BLK_DEV_NBD=y
61CONFIG_BLK_DEV_RAM=y
62CONFIG_BLK_DEV_RAM_SIZE=131072
63CONFIG_EEPROM_LEGACY=y
64CONFIG_BLK_DEV_SD=y
65CONFIG_CHR_DEV_ST=y
66CONFIG_BLK_DEV_SR=y
67CONFIG_CHR_DEV_SG=y
68CONFIG_SCSI_LOGGING=y
69CONFIG_ATA=y
70CONFIG_SATA_AHCI=y
71CONFIG_PATA_ALI=y
72CONFIG_NETDEVICES=y
73CONFIG_DUMMY=y
74CONFIG_GIANFAR=y
75CONFIG_VITESSE_PHY=y
76CONFIG_INPUT_FF_MEMLESS=m
77# CONFIG_INPUT_MOUSEDEV is not set
78# CONFIG_INPUT_KEYBOARD is not set
79# CONFIG_INPUT_MOUSE is not set
80CONFIG_SERIO_LIBPS2=y
81CONFIG_SERIAL_8250=y
82CONFIG_SERIAL_8250_CONSOLE=y
83CONFIG_SERIAL_8250_NR_UARTS=2
84CONFIG_SERIAL_8250_RUNTIME_UARTS=2
85CONFIG_SERIAL_8250_EXTENDED=y
86CONFIG_SERIAL_8250_MANY_PORTS=y
87CONFIG_SERIAL_8250_SHARE_IRQ=y
88CONFIG_SERIAL_8250_DETECT_IRQ=y
89CONFIG_SERIAL_8250_RSA=y
90# CONFIG_HW_RANDOM is not set
91CONFIG_NVRAM=y
92CONFIG_I2C=y
93CONFIG_I2C_MPC=y
94# CONFIG_HWMON is not set
95CONFIG_SOUND=y
96CONFIG_SND=y
97CONFIG_SND_MIXER_OSS=y
98CONFIG_SND_PCM_OSS=y
99# CONFIG_SND_SUPPORT_OLD_API is not set
100CONFIG_SND_INTEL8X0=y
101CONFIG_HID_A4TECH=y
102CONFIG_HID_APPLE=y
103CONFIG_HID_BELKIN=y
104CONFIG_HID_CHERRY=y
105CONFIG_HID_CHICONY=y
106CONFIG_HID_CYPRESS=y
107CONFIG_HID_EZKEY=y
108CONFIG_HID_GYRATION=y
109CONFIG_HID_LOGITECH=y
110CONFIG_HID_MICROSOFT=y
111CONFIG_HID_MONTEREY=y
112CONFIG_HID_PANTHERLORD=y
113CONFIG_HID_PETALYNX=y
114CONFIG_HID_SAMSUNG=y
115CONFIG_HID_SUNPLUS=y
116CONFIG_USB=y
117CONFIG_USB_MON=y
118CONFIG_USB_EHCI_HCD=y
119CONFIG_USB_OHCI_HCD=y
120CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
121CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
122CONFIG_USB_STORAGE=y
123CONFIG_RTC_CLASS=y
124CONFIG_RTC_DRV_CMOS=y
125CONFIG_EXT2_FS=y
126CONFIG_EXT3_FS=y
127# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
128CONFIG_ISO9660_FS=m
129CONFIG_JOLIET=y
130CONFIG_ZISOFS=y
131CONFIG_UDF_FS=m
132CONFIG_MSDOS_FS=m
133CONFIG_VFAT_FS=y
134CONFIG_NTFS_FS=y
135CONFIG_PROC_KCORE=y
136CONFIG_TMPFS=y
137CONFIG_ADFS_FS=m
138CONFIG_AFFS_FS=m
139CONFIG_HFS_FS=m
140CONFIG_HFSPLUS_FS=m
141CONFIG_BEFS_FS=m
142CONFIG_BFS_FS=m
143CONFIG_EFS_FS=m
144CONFIG_CRAMFS=y
145CONFIG_VXFS_FS=m
146CONFIG_HPFS_FS=m
147CONFIG_QNX4FS_FS=m
148CONFIG_SYSV_FS=m
149CONFIG_UFS_FS=m
150CONFIG_NFS_FS=y
151CONFIG_NFS_V4=y
152CONFIG_ROOT_NFS=y
153CONFIG_NFSD=y
154CONFIG_NLS_CODEPAGE_437=y
155CONFIG_NLS_CODEPAGE_850=y
156CONFIG_NLS_ISO8859_1=y
157CONFIG_CRC_T10DIF=y
158CONFIG_DEBUG_INFO=y
159CONFIG_DETECT_HUNG_TASK=y
160CONFIG_CRYPTO_PCBC=m
161CONFIG_CRYPTO_HMAC=y
162# CONFIG_CRYPTO_ANSI_CPRNG is not set
diff --git a/arch/powerpc/include/asm/cache.h b/arch/powerpc/include/asm/cache.h
index 5f8229e24fe6..ffbafbf76b19 100644
--- a/arch/powerpc/include/asm/cache.h
+++ b/arch/powerpc/include/asm/cache.h
@@ -69,6 +69,25 @@ extern void _set_L3CR(unsigned long);
69#define _set_L3CR(val) do { } while(0) 69#define _set_L3CR(val) do { } while(0)
70#endif 70#endif
71 71
72static inline void dcbz(void *addr)
73{
74 __asm__ __volatile__ ("dcbz 0, %0" : : "r"(addr) : "memory");
75}
76
77static inline void dcbi(void *addr)
78{
79 __asm__ __volatile__ ("dcbi 0, %0" : : "r"(addr) : "memory");
80}
81
82static inline void dcbf(void *addr)
83{
84 __asm__ __volatile__ ("dcbf 0, %0" : : "r"(addr) : "memory");
85}
86
87static inline void dcbst(void *addr)
88{
89 __asm__ __volatile__ ("dcbst 0, %0" : : "r"(addr) : "memory");
90}
72#endif /* !__ASSEMBLY__ */ 91#endif /* !__ASSEMBLY__ */
73#endif /* __KERNEL__ */ 92#endif /* __KERNEL__ */
74#endif /* _ASM_POWERPC_CACHE_H */ 93#endif /* _ASM_POWERPC_CACHE_H */
diff --git a/arch/powerpc/include/asm/cacheflush.h b/arch/powerpc/include/asm/cacheflush.h
index 6229e6b6037b..69fb16d7a811 100644
--- a/arch/powerpc/include/asm/cacheflush.h
+++ b/arch/powerpc/include/asm/cacheflush.h
@@ -30,8 +30,6 @@ extern void flush_dcache_page(struct page *page);
30#define flush_dcache_mmap_lock(mapping) do { } while (0) 30#define flush_dcache_mmap_lock(mapping) do { } while (0)
31#define flush_dcache_mmap_unlock(mapping) do { } while (0) 31#define flush_dcache_mmap_unlock(mapping) do { } while (0)
32 32
33extern void __flush_disable_L1(void);
34
35extern void flush_icache_range(unsigned long, unsigned long); 33extern void flush_icache_range(unsigned long, unsigned long);
36extern void flush_icache_user_range(struct vm_area_struct *vma, 34extern void flush_icache_user_range(struct vm_area_struct *vma,
37 struct page *page, unsigned long addr, 35 struct page *page, unsigned long addr,
@@ -47,12 +45,58 @@ static inline void __flush_dcache_icache_phys(unsigned long physaddr)
47} 45}
48#endif 46#endif
49 47
50extern void flush_dcache_range(unsigned long start, unsigned long stop);
51#ifdef CONFIG_PPC32 48#ifdef CONFIG_PPC32
52extern void clean_dcache_range(unsigned long start, unsigned long stop); 49/*
53extern void invalidate_dcache_range(unsigned long start, unsigned long stop); 50 * Write any modified data cache blocks out to memory and invalidate them.
51 * Does not invalidate the corresponding instruction cache blocks.
52 */
53static inline void flush_dcache_range(unsigned long start, unsigned long stop)
54{
55 void *addr = (void *)(start & ~(L1_CACHE_BYTES - 1));
56 unsigned long size = stop - (unsigned long)addr + (L1_CACHE_BYTES - 1);
57 unsigned long i;
58
59 for (i = 0; i < size >> L1_CACHE_SHIFT; i++, addr += L1_CACHE_BYTES)
60 dcbf(addr);
61 mb(); /* sync */
62}
63
64/*
65 * Write any modified data cache blocks out to memory.
66 * Does not invalidate the corresponding cache lines (especially for
67 * any corresponding instruction cache).
68 */
69static inline void clean_dcache_range(unsigned long start, unsigned long stop)
70{
71 void *addr = (void *)(start & ~(L1_CACHE_BYTES - 1));
72 unsigned long size = stop - (unsigned long)addr + (L1_CACHE_BYTES - 1);
73 unsigned long i;
74
75 for (i = 0; i < size >> L1_CACHE_SHIFT; i++, addr += L1_CACHE_BYTES)
76 dcbst(addr);
77 mb(); /* sync */
78}
79
80/*
81 * Like above, but invalidate the D-cache. This is used by the 8xx
82 * to invalidate the cache so the PPC core doesn't get stale data
83 * from the CPM (no cache snooping here :-).
84 */
85static inline void invalidate_dcache_range(unsigned long start,
86 unsigned long stop)
87{
88 void *addr = (void *)(start & ~(L1_CACHE_BYTES - 1));
89 unsigned long size = stop - (unsigned long)addr + (L1_CACHE_BYTES - 1);
90 unsigned long i;
91
92 for (i = 0; i < size >> L1_CACHE_SHIFT; i++, addr += L1_CACHE_BYTES)
93 dcbi(addr);
94 mb(); /* sync */
95}
96
54#endif /* CONFIG_PPC32 */ 97#endif /* CONFIG_PPC32 */
55#ifdef CONFIG_PPC64 98#ifdef CONFIG_PPC64
99extern void flush_dcache_range(unsigned long start, unsigned long stop);
56extern void flush_inval_dcache_range(unsigned long start, unsigned long stop); 100extern void flush_inval_dcache_range(unsigned long start, unsigned long stop);
57extern void flush_dcache_phys_range(unsigned long start, unsigned long stop); 101extern void flush_dcache_phys_range(unsigned long start, unsigned long stop);
58#endif 102#endif
diff --git a/arch/powerpc/include/asm/checksum.h b/arch/powerpc/include/asm/checksum.h
index e8d9ef4755a4..ee655ed1ff1b 100644
--- a/arch/powerpc/include/asm/checksum.h
+++ b/arch/powerpc/include/asm/checksum.h
@@ -9,30 +9,9 @@
9 * 2 of the License, or (at your option) any later version. 9 * 2 of the License, or (at your option) any later version.
10 */ 10 */
11 11
12/*
13 * This is a version of ip_compute_csum() optimized for IP headers,
14 * which always checksum on 4 octet boundaries. ihl is the number
15 * of 32-bit words and is always >= 5.
16 */
17#ifdef CONFIG_GENERIC_CSUM 12#ifdef CONFIG_GENERIC_CSUM
18#include <asm-generic/checksum.h> 13#include <asm-generic/checksum.h>
19#else 14#else
20extern __sum16 ip_fast_csum(const void *iph, unsigned int ihl);
21
22/*
23 * computes the checksum of a memory block at buff, length len,
24 * and adds in "sum" (32-bit)
25 *
26 * returns a 32-bit number suitable for feeding into itself
27 * or csum_tcpudp_magic
28 *
29 * this function must be called with even lengths, except
30 * for the last fragment, which may be odd
31 *
32 * it's best to have buff aligned on a 32-bit boundary
33 */
34extern __wsum csum_partial(const void *buff, int len, __wsum sum);
35
36/* 15/*
37 * Computes the checksum of a memory block at src, length len, 16 * Computes the checksum of a memory block at src, length len,
38 * and adds in "sum" (32-bit), while copying the block to dst. 17 * and adds in "sum" (32-bit), while copying the block to dst.
@@ -47,21 +26,12 @@ extern __wsum csum_partial_copy_generic(const void *src, void *dst,
47 int len, __wsum sum, 26 int len, __wsum sum,
48 int *src_err, int *dst_err); 27 int *src_err, int *dst_err);
49 28
50#ifdef __powerpc64__
51#define _HAVE_ARCH_COPY_AND_CSUM_FROM_USER 29#define _HAVE_ARCH_COPY_AND_CSUM_FROM_USER
52extern __wsum csum_and_copy_from_user(const void __user *src, void *dst, 30extern __wsum csum_and_copy_from_user(const void __user *src, void *dst,
53 int len, __wsum sum, int *err_ptr); 31 int len, __wsum sum, int *err_ptr);
54#define HAVE_CSUM_COPY_USER 32#define HAVE_CSUM_COPY_USER
55extern __wsum csum_and_copy_to_user(const void *src, void __user *dst, 33extern __wsum csum_and_copy_to_user(const void *src, void __user *dst,
56 int len, __wsum sum, int *err_ptr); 34 int len, __wsum sum, int *err_ptr);
57#else
58/*
59 * the same as csum_partial, but copies from src to dst while it
60 * checksums.
61 */
62#define csum_partial_copy_from_user(src, dst, len, sum, errp) \
63 csum_partial_copy_generic((__force const void *)(src), (dst), (len), (sum), (errp), NULL)
64#endif
65 35
66#define csum_partial_copy_nocheck(src, dst, len, sum) \ 36#define csum_partial_copy_nocheck(src, dst, len, sum) \
67 csum_partial_copy_generic((src), (dst), (len), (sum), NULL, NULL) 37 csum_partial_copy_generic((src), (dst), (len), (sum), NULL, NULL)
@@ -83,15 +53,6 @@ static inline __sum16 csum_fold(__wsum sum)
83 return (__force __sum16)(~((__force u32)sum + tmp) >> 16); 53 return (__force __sum16)(~((__force u32)sum + tmp) >> 16);
84} 54}
85 55
86/*
87 * this routine is used for miscellaneous IP-like checksums, mainly
88 * in icmp.c
89 */
90static inline __sum16 ip_compute_csum(const void *buff, int len)
91{
92 return csum_fold(csum_partial(buff, len, 0));
93}
94
95static inline __wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr, 56static inline __wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr,
96 unsigned short len, 57 unsigned short len,
97 unsigned short proto, 58 unsigned short proto,
@@ -135,17 +96,117 @@ static inline __wsum csum_add(__wsum csum, __wsum addend)
135{ 96{
136#ifdef __powerpc64__ 97#ifdef __powerpc64__
137 u64 res = (__force u64)csum; 98 u64 res = (__force u64)csum;
99#endif
100 if (__builtin_constant_p(csum) && csum == 0)
101 return addend;
102 if (__builtin_constant_p(addend) && addend == 0)
103 return csum;
138 104
105#ifdef __powerpc64__
139 res += (__force u64)addend; 106 res += (__force u64)addend;
140 return (__force __wsum)((u32)res + (res >> 32)); 107 return (__force __wsum)((u32)res + (res >> 32));
141#else 108#else
142 asm("addc %0,%0,%1;" 109 asm("addc %0,%0,%1;"
143 "addze %0,%0;" 110 "addze %0,%0;"
144 : "+r" (csum) : "r" (addend)); 111 : "+r" (csum) : "r" (addend) : "xer");
145 return csum; 112 return csum;
146#endif 113#endif
147} 114}
148 115
116/*
117 * This is a version of ip_compute_csum() optimized for IP headers,
118 * which always checksum on 4 octet boundaries. ihl is the number
119 * of 32-bit words and is always >= 5.
120 */
121static inline __wsum ip_fast_csum_nofold(const void *iph, unsigned int ihl)
122{
123 const u32 *ptr = (const u32 *)iph + 1;
124#ifdef __powerpc64__
125 unsigned int i;
126 u64 s = *(const u32 *)iph;
127
128 for (i = 0; i < ihl - 1; i++, ptr++)
129 s += *ptr;
130 s += (s >> 32);
131 return (__force __wsum)s;
132#else
133 __wsum sum, tmp;
134
135 asm("mtctr %3;"
136 "addc %0,%4,%5;"
137 "1: lwzu %1, 4(%2);"
138 "adde %0,%0,%1;"
139 "bdnz 1b;"
140 "addze %0,%0;"
141 : "=r" (sum), "=r" (tmp), "+b" (ptr)
142 : "r" (ihl - 2), "r" (*(const u32 *)iph), "r" (*ptr)
143 : "ctr", "xer", "memory");
144
145 return sum;
146#endif
147}
148
149static inline __sum16 ip_fast_csum(const void *iph, unsigned int ihl)
150{
151 return csum_fold(ip_fast_csum_nofold(iph, ihl));
152}
153
154/*
155 * computes the checksum of a memory block at buff, length len,
156 * and adds in "sum" (32-bit)
157 *
158 * returns a 32-bit number suitable for feeding into itself
159 * or csum_tcpudp_magic
160 *
161 * this function must be called with even lengths, except
162 * for the last fragment, which may be odd
163 *
164 * it's best to have buff aligned on a 32-bit boundary
165 */
166__wsum __csum_partial(const void *buff, int len, __wsum sum);
167
168static inline __wsum csum_partial(const void *buff, int len, __wsum sum)
169{
170 if (__builtin_constant_p(len) && len <= 16 && (len & 1) == 0) {
171 if (len == 2)
172 sum = csum_add(sum, (__force __wsum)*(const u16 *)buff);
173 if (len >= 4)
174 sum = csum_add(sum, (__force __wsum)*(const u32 *)buff);
175 if (len == 6)
176 sum = csum_add(sum, (__force __wsum)
177 *(const u16 *)(buff + 4));
178 if (len >= 8)
179 sum = csum_add(sum, (__force __wsum)
180 *(const u32 *)(buff + 4));
181 if (len == 10)
182 sum = csum_add(sum, (__force __wsum)
183 *(const u16 *)(buff + 8));
184 if (len >= 12)
185 sum = csum_add(sum, (__force __wsum)
186 *(const u32 *)(buff + 8));
187 if (len == 14)
188 sum = csum_add(sum, (__force __wsum)
189 *(const u16 *)(buff + 12));
190 if (len >= 16)
191 sum = csum_add(sum, (__force __wsum)
192 *(const u32 *)(buff + 12));
193 } else if (__builtin_constant_p(len) && (len & 3) == 0) {
194 sum = csum_add(sum, ip_fast_csum_nofold(buff, len >> 2));
195 } else {
196 sum = __csum_partial(buff, len, sum);
197 }
198 return sum;
199}
200
201/*
202 * this routine is used for miscellaneous IP-like checksums, mainly
203 * in icmp.c
204 */
205static inline __sum16 ip_compute_csum(const void *buff, int len)
206{
207 return csum_fold(csum_partial(buff, len, 0));
208}
209
149#endif 210#endif
150#endif /* __KERNEL__ */ 211#endif /* __KERNEL__ */
151#endif 212#endif
diff --git a/arch/powerpc/include/asm/cputable.h b/arch/powerpc/include/asm/cputable.h
index 94ace9b4c4e1..df4fb5faba43 100644
--- a/arch/powerpc/include/asm/cputable.h
+++ b/arch/powerpc/include/asm/cputable.h
@@ -43,6 +43,11 @@ extern int machine_check_e500(struct pt_regs *regs);
43extern int machine_check_e200(struct pt_regs *regs); 43extern int machine_check_e200(struct pt_regs *regs);
44extern int machine_check_47x(struct pt_regs *regs); 44extern int machine_check_47x(struct pt_regs *regs);
45 45
46extern void cpu_down_flush_e500v2(void);
47extern void cpu_down_flush_e500mc(void);
48extern void cpu_down_flush_e5500(void);
49extern void cpu_down_flush_e6500(void);
50
46/* NOTE WELL: Update identify_cpu() if fields are added or removed! */ 51/* NOTE WELL: Update identify_cpu() if fields are added or removed! */
47struct cpu_spec { 52struct cpu_spec {
48 /* CPU is matched via (PVR & pvr_mask) == pvr_value */ 53 /* CPU is matched via (PVR & pvr_mask) == pvr_value */
@@ -59,6 +64,9 @@ struct cpu_spec {
59 unsigned int icache_bsize; 64 unsigned int icache_bsize;
60 unsigned int dcache_bsize; 65 unsigned int dcache_bsize;
61 66
67 /* flush caches inside the current cpu */
68 void (*cpu_down_flush)(void);
69
62 /* number of performance monitor counters */ 70 /* number of performance monitor counters */
63 unsigned int num_pmcs; 71 unsigned int num_pmcs;
64 enum powerpc_pmc_type pmc_type; 72 enum powerpc_pmc_type pmc_type;
diff --git a/arch/powerpc/include/asm/cputhreads.h b/arch/powerpc/include/asm/cputhreads.h
index ba42e46ea58e..666bef4ebfae 100644
--- a/arch/powerpc/include/asm/cputhreads.h
+++ b/arch/powerpc/include/asm/cputhreads.h
@@ -1,6 +1,7 @@
1#ifndef _ASM_POWERPC_CPUTHREADS_H 1#ifndef _ASM_POWERPC_CPUTHREADS_H
2#define _ASM_POWERPC_CPUTHREADS_H 2#define _ASM_POWERPC_CPUTHREADS_H
3 3
4#ifndef __ASSEMBLY__
4#include <linux/cpumask.h> 5#include <linux/cpumask.h>
5 6
6/* 7/*
@@ -94,7 +95,21 @@ static inline int cpu_last_thread_sibling(int cpu)
94 return cpu | (threads_per_core - 1); 95 return cpu | (threads_per_core - 1);
95} 96}
96 97
98static inline u32 get_tensr(void)
99{
100#ifdef CONFIG_BOOKE
101 if (cpu_has_feature(CPU_FTR_SMT))
102 return mfspr(SPRN_TENSR);
103#endif
104 return 1;
105}
106
107void book3e_start_thread(int thread, unsigned long addr);
108void book3e_stop_thread(int thread);
109
110#endif /* __ASSEMBLY__ */
97 111
112#define INVALID_THREAD_HWID 0x0fff
98 113
99#endif /* _ASM_POWERPC_CPUTHREADS_H */ 114#endif /* _ASM_POWERPC_CPUTHREADS_H */
100 115
diff --git a/arch/powerpc/include/asm/fsl_pm.h b/arch/powerpc/include/asm/fsl_pm.h
new file mode 100644
index 000000000000..47df55e36d4f
--- /dev/null
+++ b/arch/powerpc/include/asm/fsl_pm.h
@@ -0,0 +1,51 @@
1/*
2 * Support Power Management
3 *
4 * Copyright 2014-2015 Freescale Semiconductor Inc.
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your
9 * option) any later version.
10 */
11#ifndef __PPC_FSL_PM_H
12#define __PPC_FSL_PM_H
13
14#define E500_PM_PH10 1
15#define E500_PM_PH15 2
16#define E500_PM_PH20 3
17#define E500_PM_PH30 4
18#define E500_PM_DOZE E500_PM_PH10
19#define E500_PM_NAP E500_PM_PH15
20
21#define PLAT_PM_SLEEP 20
22#define PLAT_PM_LPM20 30
23
24#define FSL_PM_SLEEP (1 << 0)
25#define FSL_PM_DEEP_SLEEP (1 << 1)
26
27struct fsl_pm_ops {
28 /* mask pending interrupts to the RCPM from MPIC */
29 void (*irq_mask)(int cpu);
30
31 /* unmask pending interrupts to the RCPM from MPIC */
32 void (*irq_unmask)(int cpu);
33 void (*cpu_enter_state)(int cpu, int state);
34 void (*cpu_exit_state)(int cpu, int state);
35 void (*cpu_up_prepare)(int cpu);
36 void (*cpu_die)(int cpu);
37 int (*plat_enter_sleep)(void);
38 void (*freeze_time_base)(bool freeze);
39
40 /* keep the power of IP blocks during sleep/deep sleep */
41 void (*set_ip_power)(bool enable, u32 mask);
42
43 /* get platform supported power management modes */
44 unsigned int (*get_pm_modes)(void);
45};
46
47extern const struct fsl_pm_ops *qoriq_pm_ops;
48
49int __init fsl_rcpm_init(void);
50
51#endif /* __PPC_FSL_PM_H */
diff --git a/arch/powerpc/include/asm/mmu-8xx.h b/arch/powerpc/include/asm/mmu-8xx.h
index f05500a29a60..0a566f15f985 100644
--- a/arch/powerpc/include/asm/mmu-8xx.h
+++ b/arch/powerpc/include/asm/mmu-8xx.h
@@ -171,9 +171,9 @@ typedef struct {
171} mm_context_t; 171} mm_context_t;
172#endif /* !__ASSEMBLY__ */ 172#endif /* !__ASSEMBLY__ */
173 173
174#if (PAGE_SHIFT == 12) 174#if defined(CONFIG_PPC_4K_PAGES)
175#define mmu_virtual_psize MMU_PAGE_4K 175#define mmu_virtual_psize MMU_PAGE_4K
176#elif (PAGE_SHIFT == 14) 176#elif defined(CONFIG_PPC_16K_PAGES)
177#define mmu_virtual_psize MMU_PAGE_16K 177#define mmu_virtual_psize MMU_PAGE_16K
178#else 178#else
179#error "Unsupported PAGE_SIZE" 179#error "Unsupported PAGE_SIZE"
diff --git a/arch/powerpc/include/asm/nohash/32/pgtable.h b/arch/powerpc/include/asm/nohash/32/pgtable.h
index c82cbf52d19e..780847597514 100644
--- a/arch/powerpc/include/asm/nohash/32/pgtable.h
+++ b/arch/powerpc/include/asm/nohash/32/pgtable.h
@@ -86,7 +86,7 @@ extern int icache_44x_need_flush;
86 * We no longer map larger than phys RAM with the BATs so we don't have 86 * We no longer map larger than phys RAM with the BATs so we don't have
87 * to worry about the VMALLOC_OFFSET causing problems. We do have to worry 87 * to worry about the VMALLOC_OFFSET causing problems. We do have to worry
88 * about clashes between our early calls to ioremap() that start growing down 88 * about clashes between our early calls to ioremap() that start growing down
89 * from ioremap_base being run into the VM area allocations (growing upwards 89 * from IOREMAP_TOP being run into the VM area allocations (growing upwards
90 * from VMALLOC_START). For this reason we have ioremap_bot to check when 90 * from VMALLOC_START). For this reason we have ioremap_bot to check when
91 * we actually run into our mappings setup in the early boot with the VM 91 * we actually run into our mappings setup in the early boot with the VM
92 * system. This really does become a problem for machines with good amounts 92 * system. This really does become a problem for machines with good amounts
@@ -309,7 +309,8 @@ static inline void __ptep_set_access_flags(pte_t *ptep, pte_t entry)
309#define pte_index(address) \ 309#define pte_index(address) \
310 (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) 310 (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
311#define pte_offset_kernel(dir, addr) \ 311#define pte_offset_kernel(dir, addr) \
312 ((pte_t *) pmd_page_vaddr(*(dir)) + pte_index(addr)) 312 (pmd_bad(*(dir)) ? NULL : (pte_t *)pmd_page_vaddr(*(dir)) + \
313 pte_index(addr))
313#define pte_offset_map(dir, addr) \ 314#define pte_offset_map(dir, addr) \
314 ((pte_t *) kmap_atomic(pmd_page(*(dir))) + pte_index(addr)) 315 ((pte_t *) kmap_atomic(pmd_page(*(dir))) + pte_index(addr))
315#define pte_unmap(pte) kunmap_atomic(pte) 316#define pte_unmap(pte) kunmap_atomic(pte)
diff --git a/arch/powerpc/include/asm/page_32.h b/arch/powerpc/include/asm/page_32.h
index 68d73b2a7bfc..6a8e1797f223 100644
--- a/arch/powerpc/include/asm/page_32.h
+++ b/arch/powerpc/include/asm/page_32.h
@@ -1,6 +1,8 @@
1#ifndef _ASM_POWERPC_PAGE_32_H 1#ifndef _ASM_POWERPC_PAGE_32_H
2#define _ASM_POWERPC_PAGE_32_H 2#define _ASM_POWERPC_PAGE_32_H
3 3
4#include <asm/cache.h>
5
4#if defined(CONFIG_PHYSICAL_ALIGN) && (CONFIG_PHYSICAL_START != 0) 6#if defined(CONFIG_PHYSICAL_ALIGN) && (CONFIG_PHYSICAL_START != 0)
5#if (CONFIG_PHYSICAL_START % CONFIG_PHYSICAL_ALIGN) != 0 7#if (CONFIG_PHYSICAL_START % CONFIG_PHYSICAL_ALIGN) != 0
6#error "CONFIG_PHYSICAL_START must be a multiple of CONFIG_PHYSICAL_ALIGN" 8#error "CONFIG_PHYSICAL_START must be a multiple of CONFIG_PHYSICAL_ALIGN"
@@ -36,9 +38,18 @@ typedef unsigned long long pte_basic_t;
36typedef unsigned long pte_basic_t; 38typedef unsigned long pte_basic_t;
37#endif 39#endif
38 40
39struct page; 41/*
40extern void clear_pages(void *page, int order); 42 * Clear page using the dcbz instruction, which doesn't cause any
41static inline void clear_page(void *page) { clear_pages(page, 0); } 43 * memory traffic (except to write out any cache lines which get
44 * displaced). This only works on cacheable memory.
45 */
46static inline void clear_page(void *addr)
47{
48 unsigned int i;
49
50 for (i = 0; i < PAGE_SIZE / L1_CACHE_BYTES; i++, addr += L1_CACHE_BYTES)
51 dcbz(addr);
52}
42extern void copy_page(void *to, void *from); 53extern void copy_page(void *to, void *from);
43 54
44#include <asm-generic/getorder.h> 55#include <asm-generic/getorder.h>
diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h
index 52ed654d01ba..f5f4c66bbbc9 100644
--- a/arch/powerpc/include/asm/reg.h
+++ b/arch/powerpc/include/asm/reg.h
@@ -1219,9 +1219,11 @@ static inline void mtmsr_isync(unsigned long val)
1219#define mfspr(rn) ({unsigned long rval; \ 1219#define mfspr(rn) ({unsigned long rval; \
1220 asm volatile("mfspr %0," __stringify(rn) \ 1220 asm volatile("mfspr %0," __stringify(rn) \
1221 : "=r" (rval)); rval;}) 1221 : "=r" (rval)); rval;})
1222#ifndef mtspr
1222#define mtspr(rn, v) asm volatile("mtspr " __stringify(rn) ",%0" : \ 1223#define mtspr(rn, v) asm volatile("mtspr " __stringify(rn) ",%0" : \
1223 : "r" ((unsigned long)(v)) \ 1224 : "r" ((unsigned long)(v)) \
1224 : "memory") 1225 : "memory")
1226#endif
1225 1227
1226extern void msr_check_and_set(unsigned long bits); 1228extern void msr_check_and_set(unsigned long bits);
1227extern bool strict_msr_control; 1229extern bool strict_msr_control;
diff --git a/arch/powerpc/include/asm/reg_8xx.h b/arch/powerpc/include/asm/reg_8xx.h
index e8ea346b21d3..d41412c7748b 100644
--- a/arch/powerpc/include/asm/reg_8xx.h
+++ b/arch/powerpc/include/asm/reg_8xx.h
@@ -4,6 +4,8 @@
4#ifndef _ASM_POWERPC_REG_8xx_H 4#ifndef _ASM_POWERPC_REG_8xx_H
5#define _ASM_POWERPC_REG_8xx_H 5#define _ASM_POWERPC_REG_8xx_H
6 6
7#include <asm/mmu-8xx.h>
8
7/* Cache control on the MPC8xx is provided through some additional 9/* Cache control on the MPC8xx is provided through some additional
8 * special purpose registers. 10 * special purpose registers.
9 */ 11 */
@@ -14,6 +16,15 @@
14#define SPRN_DC_ADR 569 /* Address needed for some commands */ 16#define SPRN_DC_ADR 569 /* Address needed for some commands */
15#define SPRN_DC_DAT 570 /* Read-only data register */ 17#define SPRN_DC_DAT 570 /* Read-only data register */
16 18
19/* Misc Debug */
20#define SPRN_DPDR 630
21#define SPRN_MI_CAM 816
22#define SPRN_MI_RAM0 817
23#define SPRN_MI_RAM1 818
24#define SPRN_MD_CAM 824
25#define SPRN_MD_RAM0 825
26#define SPRN_MD_RAM1 826
27
17/* Commands. Only the first few are available to the instruction cache. 28/* Commands. Only the first few are available to the instruction cache.
18*/ 29*/
19#define IDC_ENABLE 0x02000000 /* Cache enable */ 30#define IDC_ENABLE 0x02000000 /* Cache enable */
@@ -39,4 +50,86 @@
39#define DC_DFWT 0x40000000 /* Data cache is forced write through */ 50#define DC_DFWT 0x40000000 /* Data cache is forced write through */
40#define DC_LES 0x20000000 /* Caches are little endian mode */ 51#define DC_LES 0x20000000 /* Caches are little endian mode */
41 52
53#ifdef CONFIG_8xx_CPU6
54#define do_mtspr_cpu6(rn, rn_addr, v) \
55 do { \
56 int _reg_cpu6 = rn_addr, _tmp_cpu6[1]; \
57 asm volatile("stw %0, %1;" \
58 "lwz %0, %1;" \
59 "mtspr " __stringify(rn) ",%2" : \
60 : "r" (_reg_cpu6), "m"(_tmp_cpu6), \
61 "r" ((unsigned long)(v)) \
62 : "memory"); \
63 } while (0)
64
65#define do_mtspr(rn, v) asm volatile("mtspr " __stringify(rn) ",%0" : \
66 : "r" ((unsigned long)(v)) \
67 : "memory")
68#define mtspr(rn, v) \
69 do { \
70 if (rn == SPRN_IMMR) \
71 do_mtspr_cpu6(rn, 0x3d30, v); \
72 else if (rn == SPRN_IC_CST) \
73 do_mtspr_cpu6(rn, 0x2110, v); \
74 else if (rn == SPRN_IC_ADR) \
75 do_mtspr_cpu6(rn, 0x2310, v); \
76 else if (rn == SPRN_IC_DAT) \
77 do_mtspr_cpu6(rn, 0x2510, v); \
78 else if (rn == SPRN_DC_CST) \
79 do_mtspr_cpu6(rn, 0x3110, v); \
80 else if (rn == SPRN_DC_ADR) \
81 do_mtspr_cpu6(rn, 0x3310, v); \
82 else if (rn == SPRN_DC_DAT) \
83 do_mtspr_cpu6(rn, 0x3510, v); \
84 else if (rn == SPRN_MI_CTR) \
85 do_mtspr_cpu6(rn, 0x2180, v); \
86 else if (rn == SPRN_MI_AP) \
87 do_mtspr_cpu6(rn, 0x2580, v); \
88 else if (rn == SPRN_MI_EPN) \
89 do_mtspr_cpu6(rn, 0x2780, v); \
90 else if (rn == SPRN_MI_TWC) \
91 do_mtspr_cpu6(rn, 0x2b80, v); \
92 else if (rn == SPRN_MI_RPN) \
93 do_mtspr_cpu6(rn, 0x2d80, v); \
94 else if (rn == SPRN_MI_CAM) \
95 do_mtspr_cpu6(rn, 0x2190, v); \
96 else if (rn == SPRN_MI_RAM0) \
97 do_mtspr_cpu6(rn, 0x2390, v); \
98 else if (rn == SPRN_MI_RAM1) \
99 do_mtspr_cpu6(rn, 0x2590, v); \
100 else if (rn == SPRN_MD_CTR) \
101 do_mtspr_cpu6(rn, 0x3180, v); \
102 else if (rn == SPRN_M_CASID) \
103 do_mtspr_cpu6(rn, 0x3380, v); \
104 else if (rn == SPRN_MD_AP) \
105 do_mtspr_cpu6(rn, 0x3580, v); \
106 else if (rn == SPRN_MD_EPN) \
107 do_mtspr_cpu6(rn, 0x3780, v); \
108 else if (rn == SPRN_M_TWB) \
109 do_mtspr_cpu6(rn, 0x3980, v); \
110 else if (rn == SPRN_MD_TWC) \
111 do_mtspr_cpu6(rn, 0x3b80, v); \
112 else if (rn == SPRN_MD_RPN) \
113 do_mtspr_cpu6(rn, 0x3d80, v); \
114 else if (rn == SPRN_M_TW) \
115 do_mtspr_cpu6(rn, 0x3f80, v); \
116 else if (rn == SPRN_MD_CAM) \
117 do_mtspr_cpu6(rn, 0x3190, v); \
118 else if (rn == SPRN_MD_RAM0) \
119 do_mtspr_cpu6(rn, 0x3390, v); \
120 else if (rn == SPRN_MD_RAM1) \
121 do_mtspr_cpu6(rn, 0x3590, v); \
122 else if (rn == SPRN_DEC) \
123 do_mtspr_cpu6(rn, 0x2c00, v); \
124 else if (rn == SPRN_TBWL) \
125 do_mtspr_cpu6(rn, 0x3880, v); \
126 else if (rn == SPRN_TBWU) \
127 do_mtspr_cpu6(rn, 0x3a80, v); \
128 else if (rn == SPRN_DPDR) \
129 do_mtspr_cpu6(rn, 0x2d30, v); \
130 else \
131 do_mtspr(rn, v); \
132 } while (0)
133#endif
134
42#endif /* _ASM_POWERPC_REG_8xx_H */ 135#endif /* _ASM_POWERPC_REG_8xx_H */
diff --git a/arch/powerpc/include/asm/smp.h b/arch/powerpc/include/asm/smp.h
index 825663c30945..174271ef2767 100644
--- a/arch/powerpc/include/asm/smp.h
+++ b/arch/powerpc/include/asm/smp.h
@@ -67,6 +67,9 @@ void generic_cpu_die(unsigned int cpu);
67void generic_set_cpu_dead(unsigned int cpu); 67void generic_set_cpu_dead(unsigned int cpu);
68void generic_set_cpu_up(unsigned int cpu); 68void generic_set_cpu_up(unsigned int cpu);
69int generic_check_cpu_restart(unsigned int cpu); 69int generic_check_cpu_restart(unsigned int cpu);
70int is_cpu_dead(unsigned int cpu);
71#else
72#define generic_set_cpu_up(i) do { } while (0)
70#endif 73#endif
71 74
72#ifdef CONFIG_PPC64 75#ifdef CONFIG_PPC64
@@ -197,6 +200,7 @@ extern void generic_secondary_thread_init(void);
197extern unsigned long __secondary_hold_spinloop; 200extern unsigned long __secondary_hold_spinloop;
198extern unsigned long __secondary_hold_acknowledge; 201extern unsigned long __secondary_hold_acknowledge;
199extern char __secondary_hold; 202extern char __secondary_hold;
203extern unsigned int booting_thread_hwid;
200 204
201extern void __early_start(void); 205extern void __early_start(void);
202#endif /* __ASSEMBLY__ */ 206#endif /* __ASSEMBLY__ */
diff --git a/arch/powerpc/include/asm/time.h b/arch/powerpc/include/asm/time.h
index 2d7109a8d296..1092fdd7e737 100644
--- a/arch/powerpc/include/asm/time.h
+++ b/arch/powerpc/include/asm/time.h
@@ -31,8 +31,6 @@ extern void tick_broadcast_ipi_handler(void);
31 31
32extern void generic_calibrate_decr(void); 32extern void generic_calibrate_decr(void);
33 33
34extern void set_dec_cpu6(unsigned int val);
35
36/* Some sane defaults: 125 MHz timebase, 1GHz processor */ 34/* Some sane defaults: 125 MHz timebase, 1GHz processor */
37extern unsigned long ppc_proc_freq; 35extern unsigned long ppc_proc_freq;
38#define DEFAULT_PROC_FREQ (DEFAULT_TB_FREQ * 8) 36#define DEFAULT_PROC_FREQ (DEFAULT_TB_FREQ * 8)
@@ -166,14 +164,12 @@ static inline void set_dec(int val)
166{ 164{
167#if defined(CONFIG_40x) 165#if defined(CONFIG_40x)
168 mtspr(SPRN_PIT, val); 166 mtspr(SPRN_PIT, val);
169#elif defined(CONFIG_8xx_CPU6)
170 set_dec_cpu6(val - 1);
171#else 167#else
172#ifndef CONFIG_BOOKE 168#ifndef CONFIG_BOOKE
173 --val; 169 --val;
174#endif 170#endif
175 mtspr(SPRN_DEC, val); 171 mtspr(SPRN_DEC, val);
176#endif /* not 40x or 8xx_CPU6 */ 172#endif /* not 40x */
177} 173}
178 174
179static inline unsigned long tb_ticks_since(unsigned long tstamp) 175static inline unsigned long tb_ticks_since(unsigned long tstamp)
diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c
index 10d5eab19458..0d0183d3180a 100644
--- a/arch/powerpc/kernel/asm-offsets.c
+++ b/arch/powerpc/kernel/asm-offsets.c
@@ -376,6 +376,7 @@ int main(void)
376 DEFINE(CPU_SPEC_FEATURES, offsetof(struct cpu_spec, cpu_features)); 376 DEFINE(CPU_SPEC_FEATURES, offsetof(struct cpu_spec, cpu_features));
377 DEFINE(CPU_SPEC_SETUP, offsetof(struct cpu_spec, cpu_setup)); 377 DEFINE(CPU_SPEC_SETUP, offsetof(struct cpu_spec, cpu_setup));
378 DEFINE(CPU_SPEC_RESTORE, offsetof(struct cpu_spec, cpu_restore)); 378 DEFINE(CPU_SPEC_RESTORE, offsetof(struct cpu_spec, cpu_restore));
379 DEFINE(CPU_DOWN_FLUSH, offsetof(struct cpu_spec, cpu_down_flush));
379 380
380 DEFINE(pbe_address, offsetof(struct pbe, address)); 381 DEFINE(pbe_address, offsetof(struct pbe, address));
381 DEFINE(pbe_orig_address, offsetof(struct pbe, orig_address)); 382 DEFINE(pbe_orig_address, offsetof(struct pbe, orig_address));
diff --git a/arch/powerpc/kernel/cpu_setup_fsl_booke.S b/arch/powerpc/kernel/cpu_setup_fsl_booke.S
index dddba3e94260..462aed9bcf51 100644
--- a/arch/powerpc/kernel/cpu_setup_fsl_booke.S
+++ b/arch/powerpc/kernel/cpu_setup_fsl_booke.S
@@ -13,11 +13,13 @@
13 * 13 *
14 */ 14 */
15 15
16#include <asm/page.h>
16#include <asm/processor.h> 17#include <asm/processor.h>
17#include <asm/cputable.h> 18#include <asm/cputable.h>
18#include <asm/ppc_asm.h> 19#include <asm/ppc_asm.h>
19#include <asm/mmu-book3e.h> 20#include <asm/mmu-book3e.h>
20#include <asm/asm-offsets.h> 21#include <asm/asm-offsets.h>
22#include <asm/mpc85xx.h>
21 23
22_GLOBAL(__e500_icache_setup) 24_GLOBAL(__e500_icache_setup)
23 mfspr r0, SPRN_L1CSR1 25 mfspr r0, SPRN_L1CSR1
@@ -233,3 +235,113 @@ _GLOBAL(__setup_cpu_e5500)
233 mtlr r5 235 mtlr r5
234 blr 236 blr
235#endif 237#endif
238
239/* flush L1 date cache, it can apply to e500v2, e500mc and e5500 */
240_GLOBAL(flush_dcache_L1)
241 mfmsr r10
242 wrteei 0
243
244 mfspr r3,SPRN_L1CFG0
245 rlwinm r5,r3,9,3 /* Extract cache block size */
246 twlgti r5,1 /* Only 32 and 64 byte cache blocks
247 * are currently defined.
248 */
249 li r4,32
250 subfic r6,r5,2 /* r6 = log2(1KiB / cache block size) -
251 * log2(number of ways)
252 */
253 slw r5,r4,r5 /* r5 = cache block size */
254
255 rlwinm r7,r3,0,0xff /* Extract number of KiB in the cache */
256 mulli r7,r7,13 /* An 8-way cache will require 13
257 * loads per set.
258 */
259 slw r7,r7,r6
260
261 /* save off HID0 and set DCFA */
262 mfspr r8,SPRN_HID0
263 ori r9,r8,HID0_DCFA@l
264 mtspr SPRN_HID0,r9
265 isync
266
267 LOAD_REG_IMMEDIATE(r6, KERNELBASE)
268 mr r4, r6
269 mtctr r7
270
2711: lwz r3,0(r4) /* Load... */
272 add r4,r4,r5
273 bdnz 1b
274
275 msync
276 mr r4, r6
277 mtctr r7
278
2791: dcbf 0,r4 /* ...and flush. */
280 add r4,r4,r5
281 bdnz 1b
282
283 /* restore HID0 */
284 mtspr SPRN_HID0,r8
285 isync
286
287 wrtee r10
288
289 blr
290
291has_L2_cache:
292 /* skip L2 cache on P2040/P2040E as they have no L2 cache */
293 mfspr r3, SPRN_SVR
294 /* shift right by 8 bits and clear E bit of SVR */
295 rlwinm r4, r3, 24, ~0x800
296
297 lis r3, SVR_P2040@h
298 ori r3, r3, SVR_P2040@l
299 cmpw r4, r3
300 beq 1f
301
302 li r3, 1
303 blr
3041:
305 li r3, 0
306 blr
307
308/* flush backside L2 cache */
309flush_backside_L2_cache:
310 mflr r10
311 bl has_L2_cache
312 mtlr r10
313 cmpwi r3, 0
314 beq 2f
315
316 /* Flush the L2 cache */
317 mfspr r3, SPRN_L2CSR0
318 ori r3, r3, L2CSR0_L2FL@l
319 msync
320 isync
321 mtspr SPRN_L2CSR0,r3
322 isync
323
324 /* check if it is complete */
3251: mfspr r3,SPRN_L2CSR0
326 andi. r3, r3, L2CSR0_L2FL@l
327 bne 1b
3282:
329 blr
330
331_GLOBAL(cpu_down_flush_e500v2)
332 mflr r0
333 bl flush_dcache_L1
334 mtlr r0
335 blr
336
337_GLOBAL(cpu_down_flush_e500mc)
338_GLOBAL(cpu_down_flush_e5500)
339 mflr r0
340 bl flush_dcache_L1
341 bl flush_backside_L2_cache
342 mtlr r0
343 blr
344
345/* L1 Data Cache of e6500 contains no modified data, no flush is required */
346_GLOBAL(cpu_down_flush_e6500)
347 blr
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c
index be4d73053bed..6c662b8de90d 100644
--- a/arch/powerpc/kernel/cputable.c
+++ b/arch/powerpc/kernel/cputable.c
@@ -2050,6 +2050,7 @@ static struct cpu_spec __initdata cpu_specs[] = {
2050 .cpu_setup = __setup_cpu_e500v2, 2050 .cpu_setup = __setup_cpu_e500v2,
2051 .machine_check = machine_check_e500, 2051 .machine_check = machine_check_e500,
2052 .platform = "ppc8548", 2052 .platform = "ppc8548",
2053 .cpu_down_flush = cpu_down_flush_e500v2,
2053 }, 2054 },
2054#else 2055#else
2055 { /* e500mc */ 2056 { /* e500mc */
@@ -2069,6 +2070,7 @@ static struct cpu_spec __initdata cpu_specs[] = {
2069 .cpu_setup = __setup_cpu_e500mc, 2070 .cpu_setup = __setup_cpu_e500mc,
2070 .machine_check = machine_check_e500mc, 2071 .machine_check = machine_check_e500mc,
2071 .platform = "ppce500mc", 2072 .platform = "ppce500mc",
2073 .cpu_down_flush = cpu_down_flush_e500mc,
2072 }, 2074 },
2073#endif /* CONFIG_PPC_E500MC */ 2075#endif /* CONFIG_PPC_E500MC */
2074#endif /* CONFIG_PPC32 */ 2076#endif /* CONFIG_PPC32 */
@@ -2093,6 +2095,7 @@ static struct cpu_spec __initdata cpu_specs[] = {
2093#endif 2095#endif
2094 .machine_check = machine_check_e500mc, 2096 .machine_check = machine_check_e500mc,
2095 .platform = "ppce5500", 2097 .platform = "ppce5500",
2098 .cpu_down_flush = cpu_down_flush_e5500,
2096 }, 2099 },
2097 { /* e6500 */ 2100 { /* e6500 */
2098 .pvr_mask = 0xffff0000, 2101 .pvr_mask = 0xffff0000,
@@ -2115,6 +2118,7 @@ static struct cpu_spec __initdata cpu_specs[] = {
2115#endif 2118#endif
2116 .machine_check = machine_check_e500mc, 2119 .machine_check = machine_check_e500mc,
2117 .platform = "ppce6500", 2120 .platform = "ppce6500",
2121 .cpu_down_flush = cpu_down_flush_e6500,
2118 }, 2122 },
2119#endif /* CONFIG_PPC_E500MC */ 2123#endif /* CONFIG_PPC_E500MC */
2120#ifdef CONFIG_PPC32 2124#ifdef CONFIG_PPC32
diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S
index 1b779560728f..291628320fbe 100644
--- a/arch/powerpc/kernel/head_64.S
+++ b/arch/powerpc/kernel/head_64.S
@@ -40,6 +40,7 @@
40#include <asm/kvm_book3s_asm.h> 40#include <asm/kvm_book3s_asm.h>
41#include <asm/ptrace.h> 41#include <asm/ptrace.h>
42#include <asm/hw_irq.h> 42#include <asm/hw_irq.h>
43#include <asm/cputhreads.h>
43 44
44/* The physical memory is laid out such that the secondary processor 45/* The physical memory is laid out such that the secondary processor
45 * spin code sits at 0x0000...0x00ff. On server, the vectors follow 46 * spin code sits at 0x0000...0x00ff. On server, the vectors follow
@@ -181,6 +182,64 @@ exception_marker:
181#endif 182#endif
182 183
183#ifdef CONFIG_PPC_BOOK3E 184#ifdef CONFIG_PPC_BOOK3E
185/*
186 * The booting_thread_hwid holds the thread id we want to boot in cpu
187 * hotplug case. It is set by cpu hotplug code, and is invalid by default.
188 * The thread id is the same as the initial value of SPRN_PIR[THREAD_ID]
189 * bit field.
190 */
191 .globl booting_thread_hwid
192booting_thread_hwid:
193 .long INVALID_THREAD_HWID
194 .align 3
195/*
196 * start a thread in the same core
197 * input parameters:
198 * r3 = the thread physical id
199 * r4 = the entry point where thread starts
200 */
201_GLOBAL(book3e_start_thread)
202 LOAD_REG_IMMEDIATE(r5, MSR_KERNEL)
203 cmpi 0, r3, 0
204 beq 10f
205 cmpi 0, r3, 1
206 beq 11f
207 /* If the thread id is invalid, just exit. */
208 b 13f
20910:
210 mttmr TMRN_IMSR0, r5
211 mttmr TMRN_INIA0, r4
212 b 12f
21311:
214 mttmr TMRN_IMSR1, r5
215 mttmr TMRN_INIA1, r4
21612:
217 isync
218 li r6, 1
219 sld r6, r6, r3
220 mtspr SPRN_TENS, r6
22113:
222 blr
223
224/*
225 * stop a thread in the same core
226 * input parameter:
227 * r3 = the thread physical id
228 */
229_GLOBAL(book3e_stop_thread)
230 cmpi 0, r3, 0
231 beq 10f
232 cmpi 0, r3, 1
233 beq 10f
234 /* If the thread id is invalid, just exit. */
235 b 13f
23610:
237 li r4, 1
238 sld r4, r4, r3
239 mtspr SPRN_TENC, r4
24013:
241 blr
242
184_GLOBAL(fsl_secondary_thread_init) 243_GLOBAL(fsl_secondary_thread_init)
185 mfspr r4,SPRN_BUCSR 244 mfspr r4,SPRN_BUCSR
186 245
@@ -261,6 +320,44 @@ _GLOBAL(generic_secondary_smp_init)
261 mr r3,r24 320 mr r3,r24
262 mr r4,r25 321 mr r4,r25
263 bl book3e_secondary_core_init 322 bl book3e_secondary_core_init
323
324/*
325 * After common core init has finished, check if the current thread is the
326 * one we wanted to boot. If not, start the specified thread and stop the
327 * current thread.
328 */
329 LOAD_REG_ADDR(r4, booting_thread_hwid)
330 lwz r3, 0(r4)
331 li r5, INVALID_THREAD_HWID
332 cmpw r3, r5
333 beq 20f
334
335 /*
336 * The value of booting_thread_hwid has been stored in r3,
337 * so make it invalid.
338 */
339 stw r5, 0(r4)
340
341 /*
342 * Get the current thread id and check if it is the one we wanted.
343 * If not, start the one specified in booting_thread_hwid and stop
344 * the current thread.
345 */
346 mfspr r8, SPRN_TIR
347 cmpw r3, r8
348 beq 20f
349
350 /* start the specified thread */
351 LOAD_REG_ADDR(r5, fsl_secondary_thread_init)
352 ld r4, 0(r5)
353 bl book3e_start_thread
354
355 /* stop the current thread */
356 mr r3, r8
357 bl book3e_stop_thread
35810:
359 b 10b
36020:
264#endif 361#endif
265 362
266generic_secondary_common_init: 363generic_secondary_common_init:
diff --git a/arch/powerpc/kernel/head_8xx.S b/arch/powerpc/kernel/head_8xx.S
index 78c1eba4c04a..80c69472314e 100644
--- a/arch/powerpc/kernel/head_8xx.S
+++ b/arch/powerpc/kernel/head_8xx.S
@@ -329,7 +329,7 @@ InstructionTLBMiss:
329 /* If we are faulting a kernel address, we have to use the 329 /* If we are faulting a kernel address, we have to use the
330 * kernel page tables. 330 * kernel page tables.
331 */ 331 */
332#ifdef CONFIG_MODULES 332#if defined(CONFIG_MODULES) || defined (CONFIG_DEBUG_PAGEALLOC)
333 /* Only modules will cause ITLB Misses as we always 333 /* Only modules will cause ITLB Misses as we always
334 * pin the first 8MB of kernel memory */ 334 * pin the first 8MB of kernel memory */
335 mfspr r11, SPRN_SRR0 /* Get effective address of fault */ 335 mfspr r11, SPRN_SRR0 /* Get effective address of fault */
@@ -385,27 +385,26 @@ InstructionTLBMiss:
385 385
386 . = 0x1200 386 . = 0x1200
387DataStoreTLBMiss: 387DataStoreTLBMiss:
388#ifdef CONFIG_8xx_CPU6
389 mtspr SPRN_SPRG_SCRATCH2, r3 388 mtspr SPRN_SPRG_SCRATCH2, r3
390#endif
391 EXCEPTION_PROLOG_0 389 EXCEPTION_PROLOG_0
392 mfcr r10 390 mfcr r3
393 391
394 /* If we are faulting a kernel address, we have to use the 392 /* If we are faulting a kernel address, we have to use the
395 * kernel page tables. 393 * kernel page tables.
396 */ 394 */
397 mfspr r11, SPRN_MD_EPN 395 mfspr r10, SPRN_MD_EPN
398 IS_KERNEL(r11, r11) 396 IS_KERNEL(r11, r10)
399 mfspr r11, SPRN_M_TW /* Get level 1 table */ 397 mfspr r11, SPRN_M_TW /* Get level 1 table */
400 BRANCH_UNLESS_KERNEL(3f) 398 BRANCH_UNLESS_KERNEL(3f)
401 lis r11, (swapper_pg_dir-PAGE_OFFSET)@ha 399 lis r11, (swapper_pg_dir-PAGE_OFFSET)@ha
4023: 4003:
403 mtcr r10
404 mfspr r10, SPRN_MD_EPN
405 401
406 /* Insert level 1 index */ 402 /* Insert level 1 index */
407 rlwimi r11, r10, 32 - ((PAGE_SHIFT - 2) << 1), (PAGE_SHIFT - 2) << 1, 29 403 rlwimi r11, r10, 32 - ((PAGE_SHIFT - 2) << 1), (PAGE_SHIFT - 2) << 1, 29
408 lwz r11, (swapper_pg_dir-PAGE_OFFSET)@l(r11) /* Get the level 1 entry */ 404 lwz r11, (swapper_pg_dir-PAGE_OFFSET)@l(r11) /* Get the level 1 entry */
405 mtcr r11
406 bt- 28,DTLBMiss8M /* bit 28 = Large page (8M) */
407 mtcr r3
409 408
410 /* We have a pte table, so load fetch the pte from the table. 409 /* We have a pte table, so load fetch the pte from the table.
411 */ 410 */
@@ -453,13 +452,34 @@ DataStoreTLBMiss:
453 MTSPR_CPU6(SPRN_MD_RPN, r10, r3) /* Update TLB entry */ 452 MTSPR_CPU6(SPRN_MD_RPN, r10, r3) /* Update TLB entry */
454 453
455 /* Restore registers */ 454 /* Restore registers */
456#ifdef CONFIG_8xx_CPU6
457 mfspr r3, SPRN_SPRG_SCRATCH2 455 mfspr r3, SPRN_SPRG_SCRATCH2
456 mtspr SPRN_DAR, r11 /* Tag DAR */
457 EXCEPTION_EPILOG_0
458 rfi
459
460DTLBMiss8M:
461 mtcr r3
462 ori r11, r11, MD_SVALID
463 MTSPR_CPU6(SPRN_MD_TWC, r11, r3)
464#ifdef CONFIG_PPC_16K_PAGES
465 /*
466 * In 16k pages mode, each PGD entry defines a 64M block.
467 * Here we select the 8M page within the block.
468 */
469 rlwimi r11, r10, 0, 0x03800000
458#endif 470#endif
471 rlwinm r10, r11, 0, 0xff800000
472 ori r10, r10, 0xf0 | MD_SPS16K | _PAGE_SHARED | _PAGE_DIRTY | \
473 _PAGE_PRESENT
474 MTSPR_CPU6(SPRN_MD_RPN, r10, r3) /* Update TLB entry */
475
476 li r11, RPN_PATTERN
477 mfspr r3, SPRN_SPRG_SCRATCH2
459 mtspr SPRN_DAR, r11 /* Tag DAR */ 478 mtspr SPRN_DAR, r11 /* Tag DAR */
460 EXCEPTION_EPILOG_0 479 EXCEPTION_EPILOG_0
461 rfi 480 rfi
462 481
482
463/* This is an instruction TLB error on the MPC8xx. This could be due 483/* This is an instruction TLB error on the MPC8xx. This could be due
464 * to many reasons, such as executing guarded memory or illegal instruction 484 * to many reasons, such as executing guarded memory or illegal instruction
465 * addresses. There is nothing to do but handle a big time error fault. 485 * addresses. There is nothing to do but handle a big time error fault.
@@ -537,13 +557,15 @@ FixupDAR:/* Entry point for dcbx workaround. */
537 /* Insert level 1 index */ 557 /* Insert level 1 index */
5383: rlwimi r11, r10, 32 - ((PAGE_SHIFT - 2) << 1), (PAGE_SHIFT - 2) << 1, 29 5583: rlwimi r11, r10, 32 - ((PAGE_SHIFT - 2) << 1), (PAGE_SHIFT - 2) << 1, 29
539 lwz r11, (swapper_pg_dir-PAGE_OFFSET)@l(r11) /* Get the level 1 entry */ 559 lwz r11, (swapper_pg_dir-PAGE_OFFSET)@l(r11) /* Get the level 1 entry */
560 mtcr r11
561 bt 28,200f /* bit 28 = Large page (8M) */
540 rlwinm r11, r11,0,0,19 /* Extract page descriptor page address */ 562 rlwinm r11, r11,0,0,19 /* Extract page descriptor page address */
541 /* Insert level 2 index */ 563 /* Insert level 2 index */
542 rlwimi r11, r10, 32 - (PAGE_SHIFT - 2), 32 - PAGE_SHIFT, 29 564 rlwimi r11, r10, 32 - (PAGE_SHIFT - 2), 32 - PAGE_SHIFT, 29
543 lwz r11, 0(r11) /* Get the pte */ 565 lwz r11, 0(r11) /* Get the pte */
544 /* concat physical page address(r11) and page offset(r10) */ 566 /* concat physical page address(r11) and page offset(r10) */
545 rlwimi r11, r10, 0, 32 - PAGE_SHIFT, 31 567 rlwimi r11, r10, 0, 32 - PAGE_SHIFT, 31
546 lwz r11,0(r11) 568201: lwz r11,0(r11)
547/* Check if it really is a dcbx instruction. */ 569/* Check if it really is a dcbx instruction. */
548/* dcbt and dcbtst does not generate DTLB Misses/Errors, 570/* dcbt and dcbtst does not generate DTLB Misses/Errors,
549 * no need to include them here */ 571 * no need to include them here */
@@ -562,6 +584,10 @@ FixupDAR:/* Entry point for dcbx workaround. */
562141: mfspr r10,SPRN_SPRG_SCRATCH2 584141: mfspr r10,SPRN_SPRG_SCRATCH2
563 b DARFixed /* Nope, go back to normal TLB processing */ 585 b DARFixed /* Nope, go back to normal TLB processing */
564 586
587 /* concat physical page address(r11) and page offset(r10) */
588200: rlwimi r11, r10, 0, 32 - (PAGE_SHIFT << 1), 31
589 b 201b
590
565144: mfspr r10, SPRN_DSISR 591144: mfspr r10, SPRN_DSISR
566 rlwinm r10, r10,0,7,5 /* Clear store bit for buggy dcbst insn */ 592 rlwinm r10, r10,0,7,5 /* Clear store bit for buggy dcbst insn */
567 mtspr SPRN_DSISR, r10 593 mtspr SPRN_DSISR, r10
@@ -857,68 +883,6 @@ initial_mmu:
857 883
858 884
859/* 885/*
860 * Set up to use a given MMU context.
861 * r3 is context number, r4 is PGD pointer.
862 *
863 * We place the physical address of the new task page directory loaded
864 * into the MMU base register, and set the ASID compare register with
865 * the new "context."
866 */
867_GLOBAL(set_context)
868
869#ifdef CONFIG_BDI_SWITCH
870 /* Context switch the PTE pointer for the Abatron BDI2000.
871 * The PGDIR is passed as second argument.
872 */
873 lis r5, KERNELBASE@h
874 lwz r5, 0xf0(r5)
875 stw r4, 0x4(r5)
876#endif
877
878 /* Register M_TW will contain base address of level 1 table minus the
879 * lower part of the kernel PGDIR base address, so that all accesses to
880 * level 1 table are done relative to lower part of kernel PGDIR base
881 * address.
882 */
883 li r5, (swapper_pg_dir-PAGE_OFFSET)@l
884 sub r4, r4, r5
885 tophys (r4, r4)
886#ifdef CONFIG_8xx_CPU6
887 lis r6, cpu6_errata_word@h
888 ori r6, r6, cpu6_errata_word@l
889 li r7, 0x3f80
890 stw r7, 12(r6)
891 lwz r7, 12(r6)
892#endif
893 mtspr SPRN_M_TW, r4 /* Update pointeur to level 1 table */
894#ifdef CONFIG_8xx_CPU6
895 li r7, 0x3380
896 stw r7, 12(r6)
897 lwz r7, 12(r6)
898#endif
899 mtspr SPRN_M_CASID, r3 /* Update context */
900 SYNC
901 blr
902
903#ifdef CONFIG_8xx_CPU6
904/* It's here because it is unique to the 8xx.
905 * It is important we get called with interrupts disabled. I used to
906 * do that, but it appears that all code that calls this already had
907 * interrupt disabled.
908 */
909 .globl set_dec_cpu6
910set_dec_cpu6:
911 lis r7, cpu6_errata_word@h
912 ori r7, r7, cpu6_errata_word@l
913 li r4, 0x2c00
914 stw r4, 8(r7)
915 lwz r4, 8(r7)
916 mtspr 22, r3 /* Update Decrementer */
917 SYNC
918 blr
919#endif
920
921/*
922 * We put a few things here that have to be page-aligned. 886 * We put a few things here that have to be page-aligned.
923 * This stuff goes at the beginning of the data segment, 887 * This stuff goes at the beginning of the data segment,
924 * which is page-aligned. 888 * which is page-aligned.
diff --git a/arch/powerpc/kernel/head_fsl_booke.S b/arch/powerpc/kernel/head_fsl_booke.S
index f705171b924b..3bfa3150911f 100644
--- a/arch/powerpc/kernel/head_fsl_booke.S
+++ b/arch/powerpc/kernel/head_fsl_booke.S
@@ -1037,80 +1037,6 @@ _GLOBAL(set_context)
1037 isync /* Force context change */ 1037 isync /* Force context change */
1038 blr 1038 blr
1039 1039
1040_GLOBAL(flush_dcache_L1)
1041 mfspr r3,SPRN_L1CFG0
1042
1043 rlwinm r5,r3,9,3 /* Extract cache block size */
1044 twlgti r5,1 /* Only 32 and 64 byte cache blocks
1045 * are currently defined.
1046 */
1047 li r4,32
1048 subfic r6,r5,2 /* r6 = log2(1KiB / cache block size) -
1049 * log2(number of ways)
1050 */
1051 slw r5,r4,r5 /* r5 = cache block size */
1052
1053 rlwinm r7,r3,0,0xff /* Extract number of KiB in the cache */
1054 mulli r7,r7,13 /* An 8-way cache will require 13
1055 * loads per set.
1056 */
1057 slw r7,r7,r6
1058
1059 /* save off HID0 and set DCFA */
1060 mfspr r8,SPRN_HID0
1061 ori r9,r8,HID0_DCFA@l
1062 mtspr SPRN_HID0,r9
1063 isync
1064
1065 lis r4,KERNELBASE@h
1066 mtctr r7
1067
10681: lwz r3,0(r4) /* Load... */
1069 add r4,r4,r5
1070 bdnz 1b
1071
1072 msync
1073 lis r4,KERNELBASE@h
1074 mtctr r7
1075
10761: dcbf 0,r4 /* ...and flush. */
1077 add r4,r4,r5
1078 bdnz 1b
1079
1080 /* restore HID0 */
1081 mtspr SPRN_HID0,r8
1082 isync
1083
1084 blr
1085
1086/* Flush L1 d-cache, invalidate and disable d-cache and i-cache */
1087_GLOBAL(__flush_disable_L1)
1088 mflr r10
1089 bl flush_dcache_L1 /* Flush L1 d-cache */
1090 mtlr r10
1091
1092 mfspr r4, SPRN_L1CSR0 /* Invalidate and disable d-cache */
1093 li r5, 2
1094 rlwimi r4, r5, 0, 3
1095
1096 msync
1097 isync
1098 mtspr SPRN_L1CSR0, r4
1099 isync
1100
11011: mfspr r4, SPRN_L1CSR0 /* Wait for the invalidate to finish */
1102 andi. r4, r4, 2
1103 bne 1b
1104
1105 mfspr r4, SPRN_L1CSR1 /* Invalidate and disable i-cache */
1106 li r5, 2
1107 rlwimi r4, r5, 0, 3
1108
1109 mtspr SPRN_L1CSR1, r4
1110 isync
1111
1112 blr
1113
1114#ifdef CONFIG_SMP 1040#ifdef CONFIG_SMP
1115/* When we get here, r24 needs to hold the CPU # */ 1041/* When we get here, r24 needs to hold the CPU # */
1116 .globl __secondary_start 1042 .globl __secondary_start
diff --git a/arch/powerpc/kernel/misc_32.S b/arch/powerpc/kernel/misc_32.S
index be8edd67f05b..bf5160fbf9d8 100644
--- a/arch/powerpc/kernel/misc_32.S
+++ b/arch/powerpc/kernel/misc_32.S
@@ -91,17 +91,16 @@ _GLOBAL(mulhdu)
91 addc r7,r0,r7 91 addc r7,r0,r7
92 addze r4,r4 92 addze r4,r4
931: beqlr cr1 /* all done if high part of A is 0 */ 931: beqlr cr1 /* all done if high part of A is 0 */
94 mr r10,r3
95 mullw r9,r3,r5 94 mullw r9,r3,r5
96 mulhwu r3,r3,r5 95 mulhwu r10,r3,r5
97 beq 2f 96 beq 2f
98 mullw r0,r10,r6 97 mullw r0,r3,r6
99 mulhwu r8,r10,r6 98 mulhwu r8,r3,r6
100 addc r7,r0,r7 99 addc r7,r0,r7
101 adde r4,r4,r8 100 adde r4,r4,r8
102 addze r3,r3 101 addze r10,r10
1032: addc r4,r4,r9 1022: addc r4,r4,r9
104 addze r3,r3 103 addze r3,r10
105 blr 104 blr
106 105
107/* 106/*
@@ -296,12 +295,9 @@ _GLOBAL(real_writeb)
296 * Flush instruction cache. 295 * Flush instruction cache.
297 * This is a no-op on the 601. 296 * This is a no-op on the 601.
298 */ 297 */
298#ifndef CONFIG_PPC_8xx
299_GLOBAL(flush_instruction_cache) 299_GLOBAL(flush_instruction_cache)
300#if defined(CONFIG_8xx) 300#if defined(CONFIG_4xx)
301 isync
302 lis r5, IDC_INVALL@h
303 mtspr SPRN_IC_CST, r5
304#elif defined(CONFIG_4xx)
305#ifdef CONFIG_403GCX 301#ifdef CONFIG_403GCX
306 li r3, 512 302 li r3, 512
307 mtctr r3 303 mtctr r3
@@ -334,9 +330,10 @@ END_FTR_SECTION_IFSET(CPU_FTR_UNIFIED_ID_CACHE)
334 mfspr r3,SPRN_HID0 330 mfspr r3,SPRN_HID0
335 ori r3,r3,HID0_ICFI 331 ori r3,r3,HID0_ICFI
336 mtspr SPRN_HID0,r3 332 mtspr SPRN_HID0,r3
337#endif /* CONFIG_8xx/4xx */ 333#endif /* CONFIG_4xx */
338 isync 334 isync
339 blr 335 blr
336#endif /* CONFIG_PPC_8xx */
340 337
341/* 338/*
342 * Write any modified data cache blocks out to memory 339 * Write any modified data cache blocks out to memory
@@ -350,10 +347,9 @@ BEGIN_FTR_SECTION
350 PURGE_PREFETCHED_INS 347 PURGE_PREFETCHED_INS
351 blr /* for 601, do nothing */ 348 blr /* for 601, do nothing */
352END_FTR_SECTION_IFSET(CPU_FTR_COHERENT_ICACHE) 349END_FTR_SECTION_IFSET(CPU_FTR_COHERENT_ICACHE)
353 li r5,L1_CACHE_BYTES-1 350 rlwinm r3,r3,0,0,31 - L1_CACHE_SHIFT
354 andc r3,r3,r5
355 subf r4,r3,r4 351 subf r4,r3,r4
356 add r4,r4,r5 352 addi r4,r4,L1_CACHE_BYTES - 1
357 srwi. r4,r4,L1_CACHE_SHIFT 353 srwi. r4,r4,L1_CACHE_SHIFT
358 beqlr 354 beqlr
359 mtctr r4 355 mtctr r4
@@ -377,71 +373,6 @@ END_FTR_SECTION_IFSET(CPU_FTR_COHERENT_ICACHE)
377 isync 373 isync
378 blr 374 blr
379/* 375/*
380 * Write any modified data cache blocks out to memory.
381 * Does not invalidate the corresponding cache lines (especially for
382 * any corresponding instruction cache).
383 *
384 * clean_dcache_range(unsigned long start, unsigned long stop)
385 */
386_GLOBAL(clean_dcache_range)
387 li r5,L1_CACHE_BYTES-1
388 andc r3,r3,r5
389 subf r4,r3,r4
390 add r4,r4,r5
391 srwi. r4,r4,L1_CACHE_SHIFT
392 beqlr
393 mtctr r4
394
3951: dcbst 0,r3
396 addi r3,r3,L1_CACHE_BYTES
397 bdnz 1b
398 sync /* wait for dcbst's to get to ram */
399 blr
400
401/*
402 * Write any modified data cache blocks out to memory and invalidate them.
403 * Does not invalidate the corresponding instruction cache blocks.
404 *
405 * flush_dcache_range(unsigned long start, unsigned long stop)
406 */
407_GLOBAL(flush_dcache_range)
408 li r5,L1_CACHE_BYTES-1
409 andc r3,r3,r5
410 subf r4,r3,r4
411 add r4,r4,r5
412 srwi. r4,r4,L1_CACHE_SHIFT
413 beqlr
414 mtctr r4
415
4161: dcbf 0,r3
417 addi r3,r3,L1_CACHE_BYTES
418 bdnz 1b
419 sync /* wait for dcbst's to get to ram */
420 blr
421
422/*
423 * Like above, but invalidate the D-cache. This is used by the 8xx
424 * to invalidate the cache so the PPC core doesn't get stale data
425 * from the CPM (no cache snooping here :-).
426 *
427 * invalidate_dcache_range(unsigned long start, unsigned long stop)
428 */
429_GLOBAL(invalidate_dcache_range)
430 li r5,L1_CACHE_BYTES-1
431 andc r3,r3,r5
432 subf r4,r3,r4
433 add r4,r4,r5
434 srwi. r4,r4,L1_CACHE_SHIFT
435 beqlr
436 mtctr r4
437
4381: dcbi 0,r3
439 addi r3,r3,L1_CACHE_BYTES
440 bdnz 1b
441 sync /* wait for dcbi's to get to ram */
442 blr
443
444/*
445 * Flush a particular page from the data cache to RAM. 376 * Flush a particular page from the data cache to RAM.
446 * Note: this is necessary because the instruction cache does *not* 377 * Note: this is necessary because the instruction cache does *not*
447 * snoop from the data cache. 378 * snoop from the data cache.
@@ -519,22 +450,6 @@ END_FTR_SECTION_IFSET(CPU_FTR_COHERENT_ICACHE)
519#endif /* CONFIG_BOOKE */ 450#endif /* CONFIG_BOOKE */
520 451
521/* 452/*
522 * Clear pages using the dcbz instruction, which doesn't cause any
523 * memory traffic (except to write out any cache lines which get
524 * displaced). This only works on cacheable memory.
525 *
526 * void clear_pages(void *page, int order) ;
527 */
528_GLOBAL(clear_pages)
529 li r0,PAGE_SIZE/L1_CACHE_BYTES
530 slw r0,r0,r4
531 mtctr r0
5321: dcbz 0,r3
533 addi r3,r3,L1_CACHE_BYTES
534 bdnz 1b
535 blr
536
537/*
538 * Copy a whole page. We use the dcbz instruction on the destination 453 * Copy a whole page. We use the dcbz instruction on the destination
539 * to reduce memory traffic (it eliminates the unnecessary reads of 454 * to reduce memory traffic (it eliminates the unnecessary reads of
540 * the destination into cache). This requires that the destination 455 * the destination into cache). This requires that the destination
diff --git a/arch/powerpc/kernel/ppc_ksyms.c b/arch/powerpc/kernel/ppc_ksyms.c
index ef7024dacff7..9f01e28ecef3 100644
--- a/arch/powerpc/kernel/ppc_ksyms.c
+++ b/arch/powerpc/kernel/ppc_ksyms.c
@@ -6,7 +6,9 @@
6#include <asm/cacheflush.h> 6#include <asm/cacheflush.h>
7#include <asm/epapr_hcalls.h> 7#include <asm/epapr_hcalls.h>
8 8
9#ifdef CONFIG_PPC64
9EXPORT_SYMBOL(flush_dcache_range); 10EXPORT_SYMBOL(flush_dcache_range);
11#endif
10EXPORT_SYMBOL(flush_icache_range); 12EXPORT_SYMBOL(flush_icache_range);
11 13
12EXPORT_SYMBOL(empty_zero_page); 14EXPORT_SYMBOL(empty_zero_page);
diff --git a/arch/powerpc/kernel/ppc_ksyms_32.c b/arch/powerpc/kernel/ppc_ksyms_32.c
index 30ddd8a24eee..2bfaafe5be99 100644
--- a/arch/powerpc/kernel/ppc_ksyms_32.c
+++ b/arch/powerpc/kernel/ppc_ksyms_32.c
@@ -10,7 +10,6 @@
10#include <asm/pgtable.h> 10#include <asm/pgtable.h>
11#include <asm/dcr.h> 11#include <asm/dcr.h>
12 12
13EXPORT_SYMBOL(clear_pages);
14EXPORT_SYMBOL(ISA_DMA_THRESHOLD); 13EXPORT_SYMBOL(ISA_DMA_THRESHOLD);
15EXPORT_SYMBOL(DMA_MODE_READ); 14EXPORT_SYMBOL(DMA_MODE_READ);
16EXPORT_SYMBOL(DMA_MODE_WRITE); 15EXPORT_SYMBOL(DMA_MODE_WRITE);
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
index ec9ec2058d2d..8575d044775d 100644
--- a/arch/powerpc/kernel/smp.c
+++ b/arch/powerpc/kernel/smp.c
@@ -427,7 +427,7 @@ void generic_cpu_die(unsigned int cpu)
427 427
428 for (i = 0; i < 100; i++) { 428 for (i = 0; i < 100; i++) {
429 smp_rmb(); 429 smp_rmb();
430 if (per_cpu(cpu_state, cpu) == CPU_DEAD) 430 if (is_cpu_dead(cpu))
431 return; 431 return;
432 msleep(100); 432 msleep(100);
433 } 433 }
@@ -454,6 +454,11 @@ int generic_check_cpu_restart(unsigned int cpu)
454 return per_cpu(cpu_state, cpu) == CPU_UP_PREPARE; 454 return per_cpu(cpu_state, cpu) == CPU_UP_PREPARE;
455} 455}
456 456
457int is_cpu_dead(unsigned int cpu)
458{
459 return per_cpu(cpu_state, cpu) == CPU_DEAD;
460}
461
457static bool secondaries_inhibited(void) 462static bool secondaries_inhibited(void)
458{ 463{
459 return kvm_hv_mode_active(); 464 return kvm_hv_mode_active();
diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile
index 4513d1a706be..ba21be15310f 100644
--- a/arch/powerpc/lib/Makefile
+++ b/arch/powerpc/lib/Makefile
@@ -22,8 +22,7 @@ obj64-$(CONFIG_SMP) += locks.o
22obj64-$(CONFIG_ALTIVEC) += vmx-helper.o 22obj64-$(CONFIG_ALTIVEC) += vmx-helper.o
23 23
24ifeq ($(CONFIG_GENERIC_CSUM),) 24ifeq ($(CONFIG_GENERIC_CSUM),)
25obj-y += checksum_$(CONFIG_WORD_SIZE).o 25obj-y += checksum_$(CONFIG_WORD_SIZE).o checksum_wrappers.o
26obj-$(CONFIG_PPC64) += checksum_wrappers_64.o
27endif 26endif
28 27
29obj-$(CONFIG_PPC_EMULATE_SSTEP) += sstep.o ldstfp.o 28obj-$(CONFIG_PPC_EMULATE_SSTEP) += sstep.o ldstfp.o
diff --git a/arch/powerpc/lib/checksum_32.S b/arch/powerpc/lib/checksum_32.S
index 6d67e057f15e..d90870a66b60 100644
--- a/arch/powerpc/lib/checksum_32.S
+++ b/arch/powerpc/lib/checksum_32.S
@@ -14,68 +14,59 @@
14 14
15#include <linux/sys.h> 15#include <linux/sys.h>
16#include <asm/processor.h> 16#include <asm/processor.h>
17#include <asm/cache.h>
17#include <asm/errno.h> 18#include <asm/errno.h>
18#include <asm/ppc_asm.h> 19#include <asm/ppc_asm.h>
19 20
20 .text 21 .text
21 22
22/* 23/*
23 * ip_fast_csum(buf, len) -- Optimized for IP header
24 * len is in words and is always >= 5.
25 */
26_GLOBAL(ip_fast_csum)
27 lwz r0,0(r3)
28 lwzu r5,4(r3)
29 addic. r4,r4,-2
30 addc r0,r0,r5
31 mtctr r4
32 blelr-
331: lwzu r4,4(r3)
34 adde r0,r0,r4
35 bdnz 1b
36 addze r0,r0 /* add in final carry */
37 rlwinm r3,r0,16,0,31 /* fold two halves together */
38 add r3,r0,r3
39 not r3,r3
40 srwi r3,r3,16
41 blr
42
43/*
44 * computes the checksum of a memory block at buff, length len, 24 * computes the checksum of a memory block at buff, length len,
45 * and adds in "sum" (32-bit) 25 * and adds in "sum" (32-bit)
46 * 26 *
47 * csum_partial(buff, len, sum) 27 * __csum_partial(buff, len, sum)
48 */ 28 */
49_GLOBAL(csum_partial) 29_GLOBAL(__csum_partial)
50 addic r0,r5,0
51 subi r3,r3,4 30 subi r3,r3,4
52 srwi. r6,r4,2 31 srawi. r6,r4,2 /* Divide len by 4 and also clear carry */
53 beq 3f /* if we're doing < 4 bytes */ 32 beq 3f /* if we're doing < 4 bytes */
54 andi. r5,r3,2 /* Align buffer to longword boundary */ 33 andi. r0,r3,2 /* Align buffer to longword boundary */
55 beq+ 1f 34 beq+ 1f
56 lhz r5,4(r3) /* do 2 bytes to get aligned */ 35 lhz r0,4(r3) /* do 2 bytes to get aligned */
57 addi r3,r3,2
58 subi r4,r4,2 36 subi r4,r4,2
59 addc r0,r0,r5 37 addi r3,r3,2
60 srwi. r6,r4,2 /* # words to do */ 38 srwi. r6,r4,2 /* # words to do */
39 adde r5,r5,r0
61 beq 3f 40 beq 3f
621: mtctr r6 411: andi. r6,r6,3 /* Prepare to handle words 4 by 4 */
632: lwzu r5,4(r3) /* the bdnz has zero overhead, so it should */ 42 beq 21f
64 adde r0,r0,r5 /* be unnecessary to unroll this loop */ 43 mtctr r6
442: lwzu r0,4(r3)
45 adde r5,r5,r0
65 bdnz 2b 46 bdnz 2b
66 andi. r4,r4,3 4721: srwi. r6,r4,4 /* # blocks of 4 words to do */
673: cmpwi 0,r4,2 48 beq 3f
68 blt+ 4f 49 mtctr r6
69 lhz r5,4(r3) 5022: lwz r0,4(r3)
51 lwz r6,8(r3)
52 lwz r7,12(r3)
53 lwzu r8,16(r3)
54 adde r5,r5,r0
55 adde r5,r5,r6
56 adde r5,r5,r7
57 adde r5,r5,r8
58 bdnz 22b
593: andi. r0,r4,2
60 beq+ 4f
61 lhz r0,4(r3)
70 addi r3,r3,2 62 addi r3,r3,2
71 subi r4,r4,2 63 adde r5,r5,r0
72 adde r0,r0,r5 644: andi. r0,r4,1
734: cmpwi 0,r4,1 65 beq+ 5f
74 bne+ 5f 66 lbz r0,4(r3)
75 lbz r5,4(r3) 67 slwi r0,r0,8 /* Upper byte of word */
76 slwi r5,r5,8 /* Upper byte of word */ 68 adde r5,r5,r0
77 adde r0,r0,r5 695: addze r3,r5 /* add in final carry */
785: addze r3,r0 /* add in final carry */
79 blr 70 blr
80 71
81/* 72/*
@@ -87,123 +78,220 @@ _GLOBAL(csum_partial)
87 * 78 *
88 * csum_partial_copy_generic(src, dst, len, sum, src_err, dst_err) 79 * csum_partial_copy_generic(src, dst, len, sum, src_err, dst_err)
89 */ 80 */
81#define CSUM_COPY_16_BYTES_WITHEX(n) \
828 ## n ## 0: \
83 lwz r7,4(r4); \
848 ## n ## 1: \
85 lwz r8,8(r4); \
868 ## n ## 2: \
87 lwz r9,12(r4); \
888 ## n ## 3: \
89 lwzu r10,16(r4); \
908 ## n ## 4: \
91 stw r7,4(r6); \
92 adde r12,r12,r7; \
938 ## n ## 5: \
94 stw r8,8(r6); \
95 adde r12,r12,r8; \
968 ## n ## 6: \
97 stw r9,12(r6); \
98 adde r12,r12,r9; \
998 ## n ## 7: \
100 stwu r10,16(r6); \
101 adde r12,r12,r10
102
103#define CSUM_COPY_16_BYTES_EXCODE(n) \
104.section __ex_table,"a"; \
105 .align 2; \
106 .long 8 ## n ## 0b,src_error; \
107 .long 8 ## n ## 1b,src_error; \
108 .long 8 ## n ## 2b,src_error; \
109 .long 8 ## n ## 3b,src_error; \
110 .long 8 ## n ## 4b,dst_error; \
111 .long 8 ## n ## 5b,dst_error; \
112 .long 8 ## n ## 6b,dst_error; \
113 .long 8 ## n ## 7b,dst_error; \
114 .text
115
116 .text
117 .stabs "arch/powerpc/lib/",N_SO,0,0,0f
118 .stabs "checksum_32.S",N_SO,0,0,0f
1190:
120
121CACHELINE_BYTES = L1_CACHE_BYTES
122LG_CACHELINE_BYTES = L1_CACHE_SHIFT
123CACHELINE_MASK = (L1_CACHE_BYTES-1)
124
90_GLOBAL(csum_partial_copy_generic) 125_GLOBAL(csum_partial_copy_generic)
91 addic r0,r6,0 126 stwu r1,-16(r1)
92 subi r3,r3,4 127 stw r7,12(r1)
93 subi r4,r4,4 128 stw r8,8(r1)
94 srwi. r6,r5,2 129
95 beq 3f /* if we're doing < 4 bytes */ 130 andi. r0,r4,1 /* is destination address even ? */
96 andi. r9,r4,2 /* Align dst to longword boundary */ 131 cmplwi cr7,r0,0
97 beq+ 1f 132 addic r12,r6,0
9881: lhz r6,4(r3) /* do 2 bytes to get aligned */ 133 addi r6,r4,-4
99 addi r3,r3,2 134 neg r0,r4
100 subi r5,r5,2 135 addi r4,r3,-4
10191: sth r6,4(r4) 136 andi. r0,r0,CACHELINE_MASK /* # bytes to start of cache line */
102 addi r4,r4,2 137 beq 58f
103 addc r0,r0,r6 138
104 srwi. r6,r5,2 /* # words to do */ 139 cmplw 0,r5,r0 /* is this more than total to do? */
105 beq 3f 140 blt 63f /* if not much to do */
1061: srwi. r6,r5,4 /* # groups of 4 words to do */ 141 andi. r8,r0,3 /* get it word-aligned first */
107 beq 10f 142 mtctr r8
108 mtctr r6 143 beq+ 61f
10971: lwz r6,4(r3) 144 li r3,0
11072: lwz r9,8(r3) 14570: lbz r9,4(r4) /* do some bytes */
11173: lwz r10,12(r3) 146 addi r4,r4,1
11274: lwzu r11,16(r3) 147 slwi r3,r3,8
113 adde r0,r0,r6 148 rlwimi r3,r9,0,24,31
11475: stw r6,4(r4) 14971: stb r9,4(r6)
115 adde r0,r0,r9 150 addi r6,r6,1
11676: stw r9,8(r4) 151 bdnz 70b
117 adde r0,r0,r10 152 adde r12,r12,r3
11877: stw r10,12(r4) 15361: subf r5,r0,r5
119 adde r0,r0,r11 154 srwi. r0,r0,2
12078: stwu r11,16(r4) 155 mtctr r0
121 bdnz 71b 156 beq 58f
12210: rlwinm. r6,r5,30,30,31 /* # words left to do */ 15772: lwzu r9,4(r4) /* do some words */
123 beq 13f 158 adde r12,r12,r9
124 mtctr r6 15973: stwu r9,4(r6)
12582: lwzu r9,4(r3) 160 bdnz 72b
12692: stwu r9,4(r4) 161
127 adde r0,r0,r9 16258: srwi. r0,r5,LG_CACHELINE_BYTES /* # complete cachelines */
128 bdnz 82b 163 clrlwi r5,r5,32-LG_CACHELINE_BYTES
12913: andi. r5,r5,3 164 li r11,4
1303: cmpwi 0,r5,2 165 beq 63f
131 blt+ 4f 166
13283: lhz r6,4(r3) 167 /* Here we decide how far ahead to prefetch the source */
133 addi r3,r3,2 168 li r3,4
134 subi r5,r5,2 169 cmpwi r0,1
13593: sth r6,4(r4) 170 li r7,0
171 ble 114f
172 li r7,1
173#if MAX_COPY_PREFETCH > 1
174 /* Heuristically, for large transfers we prefetch
175 MAX_COPY_PREFETCH cachelines ahead. For small transfers
176 we prefetch 1 cacheline ahead. */
177 cmpwi r0,MAX_COPY_PREFETCH
178 ble 112f
179 li r7,MAX_COPY_PREFETCH
180112: mtctr r7
181111: dcbt r3,r4
182 addi r3,r3,CACHELINE_BYTES
183 bdnz 111b
184#else
185 dcbt r3,r4
186 addi r3,r3,CACHELINE_BYTES
187#endif /* MAX_COPY_PREFETCH > 1 */
188
189114: subf r8,r7,r0
190 mr r0,r7
191 mtctr r8
192
19353: dcbt r3,r4
19454: dcbz r11,r6
195/* the main body of the cacheline loop */
196 CSUM_COPY_16_BYTES_WITHEX(0)
197#if L1_CACHE_BYTES >= 32
198 CSUM_COPY_16_BYTES_WITHEX(1)
199#if L1_CACHE_BYTES >= 64
200 CSUM_COPY_16_BYTES_WITHEX(2)
201 CSUM_COPY_16_BYTES_WITHEX(3)
202#if L1_CACHE_BYTES >= 128
203 CSUM_COPY_16_BYTES_WITHEX(4)
204 CSUM_COPY_16_BYTES_WITHEX(5)
205 CSUM_COPY_16_BYTES_WITHEX(6)
206 CSUM_COPY_16_BYTES_WITHEX(7)
207#endif
208#endif
209#endif
210 bdnz 53b
211 cmpwi r0,0
212 li r3,4
213 li r7,0
214 bne 114b
215
21663: srwi. r0,r5,2
217 mtctr r0
218 beq 64f
21930: lwzu r0,4(r4)
220 adde r12,r12,r0
22131: stwu r0,4(r6)
222 bdnz 30b
223
22464: andi. r0,r5,2
225 beq+ 65f
22640: lhz r0,4(r4)
136 addi r4,r4,2 227 addi r4,r4,2
137 adde r0,r0,r6 22841: sth r0,4(r6)
1384: cmpwi 0,r5,1 229 adde r12,r12,r0
139 bne+ 5f 230 addi r6,r6,2
14084: lbz r6,4(r3) 23165: andi. r0,r5,1
14194: stb r6,4(r4) 232 beq+ 66f
142 slwi r6,r6,8 /* Upper byte of word */ 23350: lbz r0,4(r4)
143 adde r0,r0,r6 23451: stb r0,4(r6)
1445: addze r3,r0 /* add in final carry */ 235 slwi r0,r0,8
236 adde r12,r12,r0
23766: addze r3,r12
238 addi r1,r1,16
239 beqlr+ cr7
240 rlwinm r3,r3,8,0,31 /* swap bytes for odd destination */
145 blr 241 blr
146 242
147/* These shouldn't go in the fixup section, since that would 243/* read fault */
148 cause the ex_table addresses to get out of order. */
149
150src_error_4:
151 mfctr r6 /* update # bytes remaining from ctr */
152 rlwimi r5,r6,4,0,27
153 b 79f
154src_error_1:
155 li r6,0
156 subi r5,r5,2
15795: sth r6,4(r4)
158 addi r4,r4,2
15979: srwi. r6,r5,2
160 beq 3f
161 mtctr r6
162src_error_2:
163 li r6,0
16496: stwu r6,4(r4)
165 bdnz 96b
1663: andi. r5,r5,3
167 beq src_error
168src_error_3:
169 li r6,0
170 mtctr r5
171 addi r4,r4,3
17297: stbu r6,1(r4)
173 bdnz 97b
174src_error: 244src_error:
175 cmpwi 0,r7,0 245 lwz r7,12(r1)
176 beq 1f 246 addi r1,r1,16
177 li r6,-EFAULT 247 cmpwi cr0,r7,0
178 stw r6,0(r7) 248 beqlr
1791: addze r3,r0 249 li r0,-EFAULT
250 stw r0,0(r7)
180 blr 251 blr
181 252/* write fault */
182dst_error: 253dst_error:
183 cmpwi 0,r8,0 254 lwz r8,8(r1)
184 beq 1f 255 addi r1,r1,16
185 li r6,-EFAULT 256 cmpwi cr0,r8,0
186 stw r6,0(r8) 257 beqlr
1871: addze r3,r0 258 li r0,-EFAULT
259 stw r0,0(r8)
188 blr 260 blr
189 261
190.section __ex_table,"a" 262 .section __ex_table,"a"
191 .long 81b,src_error_1 263 .align 2
192 .long 91b,dst_error 264 .long 70b,src_error
193 .long 71b,src_error_4 265 .long 71b,dst_error
194 .long 72b,src_error_4 266 .long 72b,src_error
195 .long 73b,src_error_4 267 .long 73b,dst_error
196 .long 74b,src_error_4 268 .long 54b,dst_error
197 .long 75b,dst_error 269 .text
198 .long 76b,dst_error 270
199 .long 77b,dst_error 271/*
200 .long 78b,dst_error 272 * this stuff handles faults in the cacheline loop and branches to either
201 .long 82b,src_error_2 273 * src_error (if in read part) or dst_error (if in write part)
202 .long 92b,dst_error 274 */
203 .long 83b,src_error_3 275 CSUM_COPY_16_BYTES_EXCODE(0)
204 .long 93b,dst_error 276#if L1_CACHE_BYTES >= 32
205 .long 84b,src_error_3 277 CSUM_COPY_16_BYTES_EXCODE(1)
206 .long 94b,dst_error 278#if L1_CACHE_BYTES >= 64
207 .long 95b,dst_error 279 CSUM_COPY_16_BYTES_EXCODE(2)
208 .long 96b,dst_error 280 CSUM_COPY_16_BYTES_EXCODE(3)
209 .long 97b,dst_error 281#if L1_CACHE_BYTES >= 128
282 CSUM_COPY_16_BYTES_EXCODE(4)
283 CSUM_COPY_16_BYTES_EXCODE(5)
284 CSUM_COPY_16_BYTES_EXCODE(6)
285 CSUM_COPY_16_BYTES_EXCODE(7)
286#endif
287#endif
288#endif
289
290 .section __ex_table,"a"
291 .align 2
292 .long 30b,src_error
293 .long 31b,dst_error
294 .long 40b,src_error
295 .long 41b,dst_error
296 .long 50b,src_error
297 .long 51b,dst_error
diff --git a/arch/powerpc/lib/checksum_64.S b/arch/powerpc/lib/checksum_64.S
index f3ef35436612..8e6e51016cc5 100644
--- a/arch/powerpc/lib/checksum_64.S
+++ b/arch/powerpc/lib/checksum_64.S
@@ -18,39 +18,12 @@
18#include <asm/ppc_asm.h> 18#include <asm/ppc_asm.h>
19 19
20/* 20/*
21 * ip_fast_csum(r3=buf, r4=len) -- Optimized for IP header
22 * len is in words and is always >= 5.
23 *
24 * In practice len == 5, but this is not guaranteed. So this code does not
25 * attempt to use doubleword instructions.
26 */
27_GLOBAL(ip_fast_csum)
28 lwz r0,0(r3)
29 lwzu r5,4(r3)
30 addic. r4,r4,-2
31 addc r0,r0,r5
32 mtctr r4
33 blelr-
341: lwzu r4,4(r3)
35 adde r0,r0,r4
36 bdnz 1b
37 addze r0,r0 /* add in final carry */
38 rldicl r4,r0,32,0 /* fold two 32-bit halves together */
39 add r0,r0,r4
40 srdi r0,r0,32
41 rlwinm r3,r0,16,0,31 /* fold two halves together */
42 add r3,r0,r3
43 not r3,r3
44 srwi r3,r3,16
45 blr
46
47/*
48 * Computes the checksum of a memory block at buff, length len, 21 * Computes the checksum of a memory block at buff, length len,
49 * and adds in "sum" (32-bit). 22 * and adds in "sum" (32-bit).
50 * 23 *
51 * csum_partial(r3=buff, r4=len, r5=sum) 24 * __csum_partial(r3=buff, r4=len, r5=sum)
52 */ 25 */
53_GLOBAL(csum_partial) 26_GLOBAL(__csum_partial)
54 addic r0,r5,0 /* clear carry */ 27 addic r0,r5,0 /* clear carry */
55 28
56 srdi. r6,r4,3 /* less than 8 bytes? */ 29 srdi. r6,r4,3 /* less than 8 bytes? */
diff --git a/arch/powerpc/lib/checksum_wrappers_64.c b/arch/powerpc/lib/checksum_wrappers.c
index 08e3a3356c40..08e3a3356c40 100644
--- a/arch/powerpc/lib/checksum_wrappers_64.c
+++ b/arch/powerpc/lib/checksum_wrappers.c
diff --git a/arch/powerpc/lib/ppc_ksyms.c b/arch/powerpc/lib/ppc_ksyms.c
index c7f8e9586316..c422812f7405 100644
--- a/arch/powerpc/lib/ppc_ksyms.c
+++ b/arch/powerpc/lib/ppc_ksyms.c
@@ -17,10 +17,8 @@ EXPORT_SYMBOL(strcmp);
17EXPORT_SYMBOL(strncmp); 17EXPORT_SYMBOL(strncmp);
18 18
19#ifndef CONFIG_GENERIC_CSUM 19#ifndef CONFIG_GENERIC_CSUM
20EXPORT_SYMBOL(csum_partial); 20EXPORT_SYMBOL(__csum_partial);
21EXPORT_SYMBOL(csum_partial_copy_generic); 21EXPORT_SYMBOL(csum_partial_copy_generic);
22EXPORT_SYMBOL(ip_fast_csum);
23EXPORT_SYMBOL(csum_tcpudp_magic);
24#endif 22#endif
25 23
26EXPORT_SYMBOL(__copy_tofrom_user); 24EXPORT_SYMBOL(__copy_tofrom_user);
diff --git a/arch/powerpc/mm/8xx_mmu.c b/arch/powerpc/mm/8xx_mmu.c
new file mode 100644
index 000000000000..949100577db5
--- /dev/null
+++ b/arch/powerpc/mm/8xx_mmu.c
@@ -0,0 +1,141 @@
1/*
2 * This file contains the routines for initializing the MMU
3 * on the 8xx series of chips.
4 * -- christophe
5 *
6 * Derived from arch/powerpc/mm/40x_mmu.c:
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version
11 * 2 of the License, or (at your option) any later version.
12 *
13 */
14
15#include <linux/memblock.h>
16
17#include "mmu_decl.h"
18
19extern int __map_without_ltlbs;
20/*
21 * MMU_init_hw does the chip-specific initialization of the MMU hardware.
22 */
23void __init MMU_init_hw(void)
24{
25 /* Nothing to do for the time being but keep it similar to other PPC */
26}
27
28#define LARGE_PAGE_SIZE_4M (1<<22)
29#define LARGE_PAGE_SIZE_8M (1<<23)
30#define LARGE_PAGE_SIZE_64M (1<<26)
31
32unsigned long __init mmu_mapin_ram(unsigned long top)
33{
34 unsigned long v, s, mapped;
35 phys_addr_t p;
36
37 v = KERNELBASE;
38 p = 0;
39 s = top;
40
41 if (__map_without_ltlbs)
42 return 0;
43
44#ifdef CONFIG_PPC_4K_PAGES
45 while (s >= LARGE_PAGE_SIZE_8M) {
46 pmd_t *pmdp;
47 unsigned long val = p | MD_PS8MEG;
48
49 pmdp = pmd_offset(pud_offset(pgd_offset_k(v), v), v);
50 *pmdp++ = __pmd(val);
51 *pmdp++ = __pmd(val + LARGE_PAGE_SIZE_4M);
52
53 v += LARGE_PAGE_SIZE_8M;
54 p += LARGE_PAGE_SIZE_8M;
55 s -= LARGE_PAGE_SIZE_8M;
56 }
57#else /* CONFIG_PPC_16K_PAGES */
58 while (s >= LARGE_PAGE_SIZE_64M) {
59 pmd_t *pmdp;
60 unsigned long val = p | MD_PS8MEG;
61
62 pmdp = pmd_offset(pud_offset(pgd_offset_k(v), v), v);
63 *pmdp++ = __pmd(val);
64
65 v += LARGE_PAGE_SIZE_64M;
66 p += LARGE_PAGE_SIZE_64M;
67 s -= LARGE_PAGE_SIZE_64M;
68 }
69#endif
70
71 mapped = top - s;
72
73 /* If the size of RAM is not an exact power of two, we may not
74 * have covered RAM in its entirety with 8 MiB
75 * pages. Consequently, restrict the top end of RAM currently
76 * allocable so that calls to the MEMBLOCK to allocate PTEs for "tail"
77 * coverage with normal-sized pages (or other reasons) do not
78 * attempt to allocate outside the allowed range.
79 */
80 memblock_set_current_limit(mapped);
81
82 return mapped;
83}
84
85void setup_initial_memory_limit(phys_addr_t first_memblock_base,
86 phys_addr_t first_memblock_size)
87{
88 /* We don't currently support the first MEMBLOCK not mapping 0
89 * physical on those processors
90 */
91 BUG_ON(first_memblock_base != 0);
92
93#ifdef CONFIG_PIN_TLB
94 /* 8xx can only access 24MB at the moment */
95 memblock_set_current_limit(min_t(u64, first_memblock_size, 0x01800000));
96#else
97 /* 8xx can only access 8MB at the moment */
98 memblock_set_current_limit(min_t(u64, first_memblock_size, 0x00800000));
99#endif
100}
101
102/*
103 * Set up to use a given MMU context.
104 * id is context number, pgd is PGD pointer.
105 *
106 * We place the physical address of the new task page directory loaded
107 * into the MMU base register, and set the ASID compare register with
108 * the new "context."
109 */
110void set_context(unsigned long id, pgd_t *pgd)
111{
112 s16 offset = (s16)(__pa(swapper_pg_dir));
113
114#ifdef CONFIG_BDI_SWITCH
115 pgd_t **ptr = *(pgd_t ***)(KERNELBASE + 0xf0);
116
117 /* Context switch the PTE pointer for the Abatron BDI2000.
118 * The PGDIR is passed as second argument.
119 */
120 *(ptr + 1) = pgd;
121#endif
122
123 /* Register M_TW will contain base address of level 1 table minus the
124 * lower part of the kernel PGDIR base address, so that all accesses to
125 * level 1 table are done relative to lower part of kernel PGDIR base
126 * address.
127 */
128 mtspr(SPRN_M_TW, __pa(pgd) - offset);
129
130 /* Update context */
131 mtspr(SPRN_M_CASID, id);
132 /* sync */
133 mb();
134}
135
136void flush_instruction_cache(void)
137{
138 isync();
139 mtspr(SPRN_IC_CST, IDC_INVALL);
140 isync();
141}
diff --git a/arch/powerpc/mm/Makefile b/arch/powerpc/mm/Makefile
index 1ffeda85c086..adfee3f1aeb9 100644
--- a/arch/powerpc/mm/Makefile
+++ b/arch/powerpc/mm/Makefile
@@ -25,6 +25,7 @@ obj-$(CONFIG_PPC_ICSWX) += icswx.o
25obj-$(CONFIG_PPC_ICSWX_PID) += icswx_pid.o 25obj-$(CONFIG_PPC_ICSWX_PID) += icswx_pid.o
26obj-$(CONFIG_40x) += 40x_mmu.o 26obj-$(CONFIG_40x) += 40x_mmu.o
27obj-$(CONFIG_44x) += 44x_mmu.o 27obj-$(CONFIG_44x) += 44x_mmu.o
28obj-$(CONFIG_PPC_8xx) += 8xx_mmu.o
28obj-$(CONFIG_PPC_FSL_BOOK3E) += fsl_booke_mmu.o 29obj-$(CONFIG_PPC_FSL_BOOK3E) += fsl_booke_mmu.o
29obj-$(CONFIG_NEED_MULTIPLE_NODES) += numa.o 30obj-$(CONFIG_NEED_MULTIPLE_NODES) += numa.o
30obj-$(CONFIG_PPC_SPLPAR) += vphn.o 31obj-$(CONFIG_PPC_SPLPAR) += vphn.o
diff --git a/arch/powerpc/mm/dma-noncoherent.c b/arch/powerpc/mm/dma-noncoherent.c
index 169aba446a74..2dc74e5c6458 100644
--- a/arch/powerpc/mm/dma-noncoherent.c
+++ b/arch/powerpc/mm/dma-noncoherent.c
@@ -327,7 +327,7 @@ void __dma_sync(void *vaddr, size_t size, int direction)
327 * invalidate only when cache-line aligned otherwise there is 327 * invalidate only when cache-line aligned otherwise there is
328 * the potential for discarding uncommitted data from the cache 328 * the potential for discarding uncommitted data from the cache
329 */ 329 */
330 if ((start & (L1_CACHE_BYTES - 1)) || (size & (L1_CACHE_BYTES - 1))) 330 if ((start | end) & (L1_CACHE_BYTES - 1))
331 flush_dcache_range(start, end); 331 flush_dcache_range(start, end);
332 else 332 else
333 invalidate_dcache_range(start, end); 333 invalidate_dcache_range(start, end);
diff --git a/arch/powerpc/mm/fsl_booke_mmu.c b/arch/powerpc/mm/fsl_booke_mmu.c
index f3afe3d97f6b..a1b2713f6e96 100644
--- a/arch/powerpc/mm/fsl_booke_mmu.c
+++ b/arch/powerpc/mm/fsl_booke_mmu.c
@@ -72,10 +72,11 @@ unsigned long tlbcam_sz(int idx)
72 return tlbcam_addrs[idx].limit - tlbcam_addrs[idx].start + 1; 72 return tlbcam_addrs[idx].limit - tlbcam_addrs[idx].start + 1;
73} 73}
74 74
75#ifdef CONFIG_FSL_BOOKE
75/* 76/*
76 * Return PA for this VA if it is mapped by a CAM, or 0 77 * Return PA for this VA if it is mapped by a CAM, or 0
77 */ 78 */
78phys_addr_t v_mapped_by_tlbcam(unsigned long va) 79phys_addr_t v_block_mapped(unsigned long va)
79{ 80{
80 int b; 81 int b;
81 for (b = 0; b < tlbcam_index; ++b) 82 for (b = 0; b < tlbcam_index; ++b)
@@ -87,7 +88,7 @@ phys_addr_t v_mapped_by_tlbcam(unsigned long va)
87/* 88/*
88 * Return VA for a given PA or 0 if not mapped 89 * Return VA for a given PA or 0 if not mapped
89 */ 90 */
90unsigned long p_mapped_by_tlbcam(phys_addr_t pa) 91unsigned long p_block_mapped(phys_addr_t pa)
91{ 92{
92 int b; 93 int b;
93 for (b = 0; b < tlbcam_index; ++b) 94 for (b = 0; b < tlbcam_index; ++b)
@@ -97,6 +98,7 @@ unsigned long p_mapped_by_tlbcam(phys_addr_t pa)
97 return tlbcam_addrs[b].start+(pa-tlbcam_addrs[b].phys); 98 return tlbcam_addrs[b].start+(pa-tlbcam_addrs[b].phys);
98 return 0; 99 return 0;
99} 100}
101#endif
100 102
101/* 103/*
102 * Set up a variable-size TLB entry (tlbcam). The parameters are not checked; 104 * Set up a variable-size TLB entry (tlbcam). The parameters are not checked;
diff --git a/arch/powerpc/mm/init_32.c b/arch/powerpc/mm/init_32.c
index a10be665b645..4eb1b8f5667c 100644
--- a/arch/powerpc/mm/init_32.c
+++ b/arch/powerpc/mm/init_32.c
@@ -178,10 +178,6 @@ void __init MMU_init(void)
178 /* Initialize early top-down ioremap allocator */ 178 /* Initialize early top-down ioremap allocator */
179 ioremap_bot = IOREMAP_TOP; 179 ioremap_bot = IOREMAP_TOP;
180 180
181 /* Map in I/O resources */
182 if (ppc_md.progress)
183 ppc_md.progress("MMU:setio", 0x302);
184
185 if (ppc_md.progress) 181 if (ppc_md.progress)
186 ppc_md.progress("MMU:exit", 0x211); 182 ppc_md.progress("MMU:exit", 0x211);
187 183
@@ -193,22 +189,3 @@ void __init MMU_init(void)
193 /* Shortly after that, the entire linear mapping will be available */ 189 /* Shortly after that, the entire linear mapping will be available */
194 memblock_set_current_limit(lowmem_end_addr); 190 memblock_set_current_limit(lowmem_end_addr);
195} 191}
196
197#ifdef CONFIG_8xx /* No 8xx specific .c file to put that in ... */
198void setup_initial_memory_limit(phys_addr_t first_memblock_base,
199 phys_addr_t first_memblock_size)
200{
201 /* We don't currently support the first MEMBLOCK not mapping 0
202 * physical on those processors
203 */
204 BUG_ON(first_memblock_base != 0);
205
206#ifdef CONFIG_PIN_TLB
207 /* 8xx can only access 24MB at the moment */
208 memblock_set_current_limit(min_t(u64, first_memblock_size, 0x01800000));
209#else
210 /* 8xx can only access 8MB at the moment */
211 memblock_set_current_limit(min_t(u64, first_memblock_size, 0x00800000));
212#endif
213}
214#endif /* CONFIG_8xx */
diff --git a/arch/powerpc/mm/mmu_decl.h b/arch/powerpc/mm/mmu_decl.h
index 898d63365cdd..bfb7c0bcabd5 100644
--- a/arch/powerpc/mm/mmu_decl.h
+++ b/arch/powerpc/mm/mmu_decl.h
@@ -100,7 +100,6 @@ extern void setbat(int index, unsigned long virt, phys_addr_t phys,
100 100
101extern int __map_without_bats; 101extern int __map_without_bats;
102extern int __allow_ioremap_reserved; 102extern int __allow_ioremap_reserved;
103extern unsigned long ioremap_base;
104extern unsigned int rtas_data, rtas_size; 103extern unsigned int rtas_data, rtas_size;
105 104
106struct hash_pte; 105struct hash_pte;
@@ -133,22 +132,17 @@ extern void wii_memory_fixups(void);
133/* ...and now those things that may be slightly different between processor 132/* ...and now those things that may be slightly different between processor
134 * architectures. -- Dan 133 * architectures. -- Dan
135 */ 134 */
136#if defined(CONFIG_8xx) 135#ifdef CONFIG_PPC32
137#define MMU_init_hw() do { } while(0)
138#define mmu_mapin_ram(top) (0UL)
139
140#elif defined(CONFIG_4xx)
141extern void MMU_init_hw(void); 136extern void MMU_init_hw(void);
142extern unsigned long mmu_mapin_ram(unsigned long top); 137extern unsigned long mmu_mapin_ram(unsigned long top);
138#endif
143 139
144#elif defined(CONFIG_PPC_FSL_BOOK3E) 140#ifdef CONFIG_PPC_FSL_BOOK3E
145extern unsigned long map_mem_in_cams(unsigned long ram, int max_cam_idx, 141extern unsigned long map_mem_in_cams(unsigned long ram, int max_cam_idx,
146 bool dryrun); 142 bool dryrun);
147extern unsigned long calc_cam_sz(unsigned long ram, unsigned long virt, 143extern unsigned long calc_cam_sz(unsigned long ram, unsigned long virt,
148 phys_addr_t phys); 144 phys_addr_t phys);
149#ifdef CONFIG_PPC32 145#ifdef CONFIG_PPC32
150extern void MMU_init_hw(void);
151extern unsigned long mmu_mapin_ram(unsigned long top);
152extern void adjust_total_lowmem(void); 146extern void adjust_total_lowmem(void);
153extern int switch_to_as1(void); 147extern int switch_to_as1(void);
154extern void restore_to_as0(int esel, int offset, void *dt_ptr, int bootcpu); 148extern void restore_to_as0(int esel, int offset, void *dt_ptr, int bootcpu);
@@ -163,8 +157,14 @@ struct tlbcam {
163 u32 MAS3; 157 u32 MAS3;
164 u32 MAS7; 158 u32 MAS7;
165}; 159};
166#elif defined(CONFIG_PPC32) 160#endif
167/* anything 32-bit except 4xx or 8xx */ 161
168extern void MMU_init_hw(void); 162#if defined(CONFIG_6xx) || defined(CONFIG_FSL_BOOKE)
169extern unsigned long mmu_mapin_ram(unsigned long top); 163/* 6xx have BATS */
164/* FSL_BOOKE have TLBCAM */
165phys_addr_t v_block_mapped(unsigned long va);
166unsigned long p_block_mapped(phys_addr_t pa);
167#else
168static inline phys_addr_t v_block_mapped(unsigned long va) { return 0; }
169static inline unsigned long p_block_mapped(phys_addr_t pa) { return 0; }
170#endif 170#endif
diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c
index 7692d1bb1bc6..bf7bf32b54f8 100644
--- a/arch/powerpc/mm/pgtable_32.c
+++ b/arch/powerpc/mm/pgtable_32.c
@@ -37,35 +37,10 @@
37 37
38#include "mmu_decl.h" 38#include "mmu_decl.h"
39 39
40unsigned long ioremap_base;
41unsigned long ioremap_bot; 40unsigned long ioremap_bot;
42EXPORT_SYMBOL(ioremap_bot); /* aka VMALLOC_END */ 41EXPORT_SYMBOL(ioremap_bot); /* aka VMALLOC_END */
43 42
44#ifdef CONFIG_6xx 43extern char etext[], _stext[], _sinittext[], _einittext[];
45#define HAVE_BATS 1
46#endif
47
48#if defined(CONFIG_FSL_BOOKE)
49#define HAVE_TLBCAM 1
50#endif
51
52extern char etext[], _stext[];
53
54#ifdef HAVE_BATS
55extern phys_addr_t v_mapped_by_bats(unsigned long va);
56extern unsigned long p_mapped_by_bats(phys_addr_t pa);
57#else /* !HAVE_BATS */
58#define v_mapped_by_bats(x) (0UL)
59#define p_mapped_by_bats(x) (0UL)
60#endif /* HAVE_BATS */
61
62#ifdef HAVE_TLBCAM
63extern phys_addr_t v_mapped_by_tlbcam(unsigned long va);
64extern unsigned long p_mapped_by_tlbcam(phys_addr_t pa);
65#else /* !HAVE_TLBCAM */
66#define v_mapped_by_tlbcam(x) (0UL)
67#define p_mapped_by_tlbcam(x) (0UL)
68#endif /* HAVE_TLBCAM */
69 44
70#define PGDIR_ORDER (32 + PGD_T_LOG2 - PGDIR_SHIFT) 45#define PGDIR_ORDER (32 + PGD_T_LOG2 - PGDIR_SHIFT)
71 46
@@ -197,7 +172,7 @@ __ioremap_caller(phys_addr_t addr, unsigned long size, unsigned long flags,
197 /* 172 /*
198 * Choose an address to map it to. 173 * Choose an address to map it to.
199 * Once the vmalloc system is running, we use it. 174 * Once the vmalloc system is running, we use it.
200 * Before then, we use space going down from ioremap_base 175 * Before then, we use space going down from IOREMAP_TOP
201 * (ioremap_bot records where we're up to). 176 * (ioremap_bot records where we're up to).
202 */ 177 */
203 p = addr & PAGE_MASK; 178 p = addr & PAGE_MASK;
@@ -228,19 +203,10 @@ __ioremap_caller(phys_addr_t addr, unsigned long size, unsigned long flags,
228 203
229 /* 204 /*
230 * Is it already mapped? Perhaps overlapped by a previous 205 * Is it already mapped? Perhaps overlapped by a previous
231 * BAT mapping. If the whole area is mapped then we're done, 206 * mapping.
232 * otherwise remap it since we want to keep the virt addrs for
233 * each request contiguous.
234 *
235 * We make the assumption here that if the bottom and top
236 * of the range we want are mapped then it's mapped to the
237 * same virt address (and this is contiguous).
238 * -- Cort
239 */ 207 */
240 if ((v = p_mapped_by_bats(p)) /*&& p_mapped_by_bats(p+size-1)*/ ) 208 v = p_block_mapped(p);
241 goto out; 209 if (v)
242
243 if ((v = p_mapped_by_tlbcam(p)))
244 goto out; 210 goto out;
245 211
246 if (slab_is_available()) { 212 if (slab_is_available()) {
@@ -278,7 +244,8 @@ void iounmap(volatile void __iomem *addr)
278 * If mapped by BATs then there is nothing to do. 244 * If mapped by BATs then there is nothing to do.
279 * Calling vfree() generates a benign warning. 245 * Calling vfree() generates a benign warning.
280 */ 246 */
281 if (v_mapped_by_bats((unsigned long)addr)) return; 247 if (v_block_mapped((unsigned long)addr))
248 return;
282 249
283 if (addr > high_memory && (unsigned long) addr < ioremap_bot) 250 if (addr > high_memory && (unsigned long) addr < ioremap_bot)
284 vunmap((void *) (PAGE_MASK & (unsigned long)addr)); 251 vunmap((void *) (PAGE_MASK & (unsigned long)addr));
@@ -322,7 +289,8 @@ void __init __mapin_ram_chunk(unsigned long offset, unsigned long top)
322 v = PAGE_OFFSET + s; 289 v = PAGE_OFFSET + s;
323 p = memstart_addr + s; 290 p = memstart_addr + s;
324 for (; s < top; s += PAGE_SIZE) { 291 for (; s < top; s += PAGE_SIZE) {
325 ktext = ((char *) v >= _stext && (char *) v < etext); 292 ktext = ((char *)v >= _stext && (char *)v < etext) ||
293 ((char *)v >= _sinittext && (char *)v < _einittext);
326 f = ktext ? pgprot_val(PAGE_KERNEL_TEXT) : pgprot_val(PAGE_KERNEL); 294 f = ktext ? pgprot_val(PAGE_KERNEL_TEXT) : pgprot_val(PAGE_KERNEL);
327 map_page(v, p, f); 295 map_page(v, p, f);
328#ifdef CONFIG_PPC_STD_MMU_32 296#ifdef CONFIG_PPC_STD_MMU_32
@@ -403,7 +371,7 @@ static int __change_page_attr(struct page *page, pgprot_t prot)
403 BUG_ON(PageHighMem(page)); 371 BUG_ON(PageHighMem(page));
404 address = (unsigned long)page_address(page); 372 address = (unsigned long)page_address(page);
405 373
406 if (v_mapped_by_bats(address) || v_mapped_by_tlbcam(address)) 374 if (v_block_mapped(address))
407 return 0; 375 return 0;
408 if (!get_pteptr(&init_mm, address, &kpte, &kpmd)) 376 if (!get_pteptr(&init_mm, address, &kpte, &kpmd))
409 return -EINVAL; 377 return -EINVAL;
diff --git a/arch/powerpc/mm/ppc_mmu_32.c b/arch/powerpc/mm/ppc_mmu_32.c
index 6b2f3e457171..2a049fb8523d 100644
--- a/arch/powerpc/mm/ppc_mmu_32.c
+++ b/arch/powerpc/mm/ppc_mmu_32.c
@@ -49,7 +49,7 @@ struct batrange { /* stores address ranges mapped by BATs */
49/* 49/*
50 * Return PA for this VA if it is mapped by a BAT, or 0 50 * Return PA for this VA if it is mapped by a BAT, or 0
51 */ 51 */
52phys_addr_t v_mapped_by_bats(unsigned long va) 52phys_addr_t v_block_mapped(unsigned long va)
53{ 53{
54 int b; 54 int b;
55 for (b = 0; b < 4; ++b) 55 for (b = 0; b < 4; ++b)
@@ -61,7 +61,7 @@ phys_addr_t v_mapped_by_bats(unsigned long va)
61/* 61/*
62 * Return VA for a given PA or 0 if not mapped 62 * Return VA for a given PA or 0 if not mapped
63 */ 63 */
64unsigned long p_mapped_by_bats(phys_addr_t pa) 64unsigned long p_block_mapped(phys_addr_t pa)
65{ 65{
66 int b; 66 int b;
67 for (b = 0; b < 4; ++b) 67 for (b = 0; b < 4; ++b)
diff --git a/arch/powerpc/mm/tlb_nohash.c b/arch/powerpc/mm/tlb_nohash.c
index bb04e4df3100..f4668488512c 100644
--- a/arch/powerpc/mm/tlb_nohash.c
+++ b/arch/powerpc/mm/tlb_nohash.c
@@ -640,9 +640,7 @@ static void early_init_this_mmu(void)
640 * transient mapping would cause problems. 640 * transient mapping would cause problems.
641 */ 641 */
642#ifdef CONFIG_SMP 642#ifdef CONFIG_SMP
643 if (cpu != boot_cpuid && 643 if (hweight32(get_tensr()) > 1)
644 (cpu != cpu_first_thread_sibling(cpu) ||
645 cpu == cpu_first_thread_sibling(boot_cpuid)))
646 map = false; 644 map = false;
647#endif 645#endif
648 646
diff --git a/arch/powerpc/platforms/85xx/Kconfig b/arch/powerpc/platforms/85xx/Kconfig
index 97915feffd42..e626461a63bd 100644
--- a/arch/powerpc/platforms/85xx/Kconfig
+++ b/arch/powerpc/platforms/85xx/Kconfig
@@ -8,6 +8,7 @@ menuconfig FSL_SOC_BOOKE
8 select FSL_PCI if PCI 8 select FSL_PCI if PCI
9 select SERIAL_8250_EXTENDED if SERIAL_8250 9 select SERIAL_8250_EXTENDED if SERIAL_8250
10 select SERIAL_8250_SHARE_IRQ if SERIAL_8250 10 select SERIAL_8250_SHARE_IRQ if SERIAL_8250
11 select FSL_CORENET_RCPM if PPC_E500MC
11 default y 12 default y
12 13
13if FSL_SOC_BOOKE 14if FSL_SOC_BOOKE
diff --git a/arch/powerpc/platforms/85xx/Makefile b/arch/powerpc/platforms/85xx/Makefile
index 1fe7fb95175a..7bc86dae9517 100644
--- a/arch/powerpc/platforms/85xx/Makefile
+++ b/arch/powerpc/platforms/85xx/Makefile
@@ -2,6 +2,7 @@
2# Makefile for the PowerPC 85xx linux kernel. 2# Makefile for the PowerPC 85xx linux kernel.
3# 3#
4obj-$(CONFIG_SMP) += smp.o 4obj-$(CONFIG_SMP) += smp.o
5obj-$(CONFIG_FSL_PMC) += mpc85xx_pm_ops.o
5 6
6obj-y += common.o 7obj-y += common.o
7 8
diff --git a/arch/powerpc/platforms/85xx/common.c b/arch/powerpc/platforms/85xx/common.c
index 949f22c86e61..28720a4ded7b 100644
--- a/arch/powerpc/platforms/85xx/common.c
+++ b/arch/powerpc/platforms/85xx/common.c
@@ -9,11 +9,14 @@
9#include <linux/of_irq.h> 9#include <linux/of_irq.h>
10#include <linux/of_platform.h> 10#include <linux/of_platform.h>
11 11
12#include <asm/fsl_pm.h>
12#include <soc/fsl/qe/qe.h> 13#include <soc/fsl/qe/qe.h>
13#include <sysdev/cpm2_pic.h> 14#include <sysdev/cpm2_pic.h>
14 15
15#include "mpc85xx.h" 16#include "mpc85xx.h"
16 17
18const struct fsl_pm_ops *qoriq_pm_ops;
19
17static const struct of_device_id mpc85xx_common_ids[] __initconst = { 20static const struct of_device_id mpc85xx_common_ids[] __initconst = {
18 { .type = "soc", }, 21 { .type = "soc", },
19 { .compatible = "soc", }, 22 { .compatible = "soc", },
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_pm_ops.c b/arch/powerpc/platforms/85xx/mpc85xx_pm_ops.c
new file mode 100644
index 000000000000..f05325f0cc03
--- /dev/null
+++ b/arch/powerpc/platforms/85xx/mpc85xx_pm_ops.c
@@ -0,0 +1,106 @@
1/*
2 * MPC85xx PM operators
3 *
4 * Copyright 2015 Freescale Semiconductor Inc.
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your
9 * option) any later version.
10 */
11
12#define pr_fmt(fmt) "%s: " fmt, __func__
13
14#include <linux/kernel.h>
15#include <linux/of.h>
16#include <linux/of_address.h>
17#include <linux/fsl/guts.h>
18
19#include <asm/io.h>
20#include <asm/fsl_pm.h>
21
22static struct ccsr_guts __iomem *guts;
23
24static void mpc85xx_irq_mask(int cpu)
25{
26
27}
28
29static void mpc85xx_irq_unmask(int cpu)
30{
31
32}
33
34static void mpc85xx_cpu_die(int cpu)
35{
36 u32 tmp;
37
38 tmp = (mfspr(SPRN_HID0) & ~(HID0_DOZE|HID0_SLEEP)) | HID0_NAP;
39 mtspr(SPRN_HID0, tmp);
40
41 /* Enter NAP mode. */
42 tmp = mfmsr();
43 tmp |= MSR_WE;
44 asm volatile(
45 "msync\n"
46 "mtmsr %0\n"
47 "isync\n"
48 :
49 : "r" (tmp));
50}
51
52static void mpc85xx_cpu_up_prepare(int cpu)
53{
54
55}
56
57static void mpc85xx_freeze_time_base(bool freeze)
58{
59 uint32_t mask;
60
61 mask = CCSR_GUTS_DEVDISR_TB0 | CCSR_GUTS_DEVDISR_TB1;
62 if (freeze)
63 setbits32(&guts->devdisr, mask);
64 else
65 clrbits32(&guts->devdisr, mask);
66
67 in_be32(&guts->devdisr);
68}
69
70static const struct of_device_id mpc85xx_smp_guts_ids[] = {
71 { .compatible = "fsl,mpc8572-guts", },
72 { .compatible = "fsl,p1020-guts", },
73 { .compatible = "fsl,p1021-guts", },
74 { .compatible = "fsl,p1022-guts", },
75 { .compatible = "fsl,p1023-guts", },
76 { .compatible = "fsl,p2020-guts", },
77 { .compatible = "fsl,bsc9132-guts", },
78 {},
79};
80
81static const struct fsl_pm_ops mpc85xx_pm_ops = {
82 .freeze_time_base = mpc85xx_freeze_time_base,
83 .irq_mask = mpc85xx_irq_mask,
84 .irq_unmask = mpc85xx_irq_unmask,
85 .cpu_die = mpc85xx_cpu_die,
86 .cpu_up_prepare = mpc85xx_cpu_up_prepare,
87};
88
89int __init mpc85xx_setup_pmc(void)
90{
91 struct device_node *np;
92
93 np = of_find_matching_node(NULL, mpc85xx_smp_guts_ids);
94 if (np) {
95 guts = of_iomap(np, 0);
96 of_node_put(np);
97 if (!guts) {
98 pr_err("Could not map guts node address\n");
99 return -ENOMEM;
100 }
101 }
102
103 qoriq_pm_ops = &mpc85xx_pm_ops;
104
105 return 0;
106}
diff --git a/arch/powerpc/platforms/85xx/smp.c b/arch/powerpc/platforms/85xx/smp.c
index 6b107cea1c08..fe9f19e5e935 100644
--- a/arch/powerpc/platforms/85xx/smp.c
+++ b/arch/powerpc/platforms/85xx/smp.c
@@ -2,7 +2,7 @@
2 * Author: Andy Fleming <afleming@freescale.com> 2 * Author: Andy Fleming <afleming@freescale.com>
3 * Kumar Gala <galak@kernel.crashing.org> 3 * Kumar Gala <galak@kernel.crashing.org>
4 * 4 *
5 * Copyright 2006-2008, 2011-2012 Freescale Semiconductor Inc. 5 * Copyright 2006-2008, 2011-2012, 2015 Freescale Semiconductor Inc.
6 * 6 *
7 * This program is free software; you can redistribute it and/or modify it 7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the 8 * under the terms of the GNU General Public License as published by the
@@ -15,7 +15,6 @@
15#include <linux/init.h> 15#include <linux/init.h>
16#include <linux/delay.h> 16#include <linux/delay.h>
17#include <linux/of.h> 17#include <linux/of.h>
18#include <linux/of_address.h>
19#include <linux/kexec.h> 18#include <linux/kexec.h>
20#include <linux/highmem.h> 19#include <linux/highmem.h>
21#include <linux/cpu.h> 20#include <linux/cpu.h>
@@ -29,6 +28,7 @@
29#include <asm/dbell.h> 28#include <asm/dbell.h>
30#include <asm/code-patching.h> 29#include <asm/code-patching.h>
31#include <asm/cputhreads.h> 30#include <asm/cputhreads.h>
31#include <asm/fsl_pm.h>
32 32
33#include <sysdev/fsl_soc.h> 33#include <sysdev/fsl_soc.h>
34#include <sysdev/mpic.h> 34#include <sysdev/mpic.h>
@@ -43,35 +43,23 @@ struct epapr_spin_table {
43 u32 pir; 43 u32 pir;
44}; 44};
45 45
46static struct ccsr_guts __iomem *guts; 46#ifdef CONFIG_HOTPLUG_CPU
47static u64 timebase; 47static u64 timebase;
48static int tb_req; 48static int tb_req;
49static int tb_valid; 49static int tb_valid;
50 50
51static void mpc85xx_timebase_freeze(int freeze)
52{
53 uint32_t mask;
54
55 mask = CCSR_GUTS_DEVDISR_TB0 | CCSR_GUTS_DEVDISR_TB1;
56 if (freeze)
57 setbits32(&guts->devdisr, mask);
58 else
59 clrbits32(&guts->devdisr, mask);
60
61 in_be32(&guts->devdisr);
62}
63
64static void mpc85xx_give_timebase(void) 51static void mpc85xx_give_timebase(void)
65{ 52{
66 unsigned long flags; 53 unsigned long flags;
67 54
68 local_irq_save(flags); 55 local_irq_save(flags);
56 hard_irq_disable();
69 57
70 while (!tb_req) 58 while (!tb_req)
71 barrier(); 59 barrier();
72 tb_req = 0; 60 tb_req = 0;
73 61
74 mpc85xx_timebase_freeze(1); 62 qoriq_pm_ops->freeze_time_base(true);
75#ifdef CONFIG_PPC64 63#ifdef CONFIG_PPC64
76 /* 64 /*
77 * e5500/e6500 have a workaround for erratum A-006958 in place 65 * e5500/e6500 have a workaround for erratum A-006958 in place
@@ -104,7 +92,7 @@ static void mpc85xx_give_timebase(void)
104 while (tb_valid) 92 while (tb_valid)
105 barrier(); 93 barrier();
106 94
107 mpc85xx_timebase_freeze(0); 95 qoriq_pm_ops->freeze_time_base(false);
108 96
109 local_irq_restore(flags); 97 local_irq_restore(flags);
110} 98}
@@ -114,6 +102,7 @@ static void mpc85xx_take_timebase(void)
114 unsigned long flags; 102 unsigned long flags;
115 103
116 local_irq_save(flags); 104 local_irq_save(flags);
105 hard_irq_disable();
117 106
118 tb_req = 1; 107 tb_req = 1;
119 while (!tb_valid) 108 while (!tb_valid)
@@ -126,36 +115,54 @@ static void mpc85xx_take_timebase(void)
126 local_irq_restore(flags); 115 local_irq_restore(flags);
127} 116}
128 117
129#ifdef CONFIG_HOTPLUG_CPU
130static void smp_85xx_mach_cpu_die(void) 118static void smp_85xx_mach_cpu_die(void)
131{ 119{
132 unsigned int cpu = smp_processor_id(); 120 unsigned int cpu = smp_processor_id();
133 u32 tmp;
134 121
135 local_irq_disable(); 122 local_irq_disable();
123 hard_irq_disable();
124 /* mask all irqs to prevent cpu wakeup */
125 qoriq_pm_ops->irq_mask(cpu);
126
136 idle_task_exit(); 127 idle_task_exit();
137 generic_set_cpu_dead(cpu);
138 mb();
139 128
140 mtspr(SPRN_TCR, 0); 129 mtspr(SPRN_TCR, 0);
130 mtspr(SPRN_TSR, mfspr(SPRN_TSR));
141 131
142 __flush_disable_L1(); 132 generic_set_cpu_dead(cpu);
143 tmp = (mfspr(SPRN_HID0) & ~(HID0_DOZE|HID0_SLEEP)) | HID0_NAP;
144 mtspr(SPRN_HID0, tmp);
145 isync();
146 133
147 /* Enter NAP mode. */ 134 cur_cpu_spec->cpu_down_flush();
148 tmp = mfmsr(); 135
149 tmp |= MSR_WE; 136 qoriq_pm_ops->cpu_die(cpu);
150 mb();
151 mtmsr(tmp);
152 isync();
153 137
154 while (1) 138 while (1)
155 ; 139 ;
156} 140}
141
142static void qoriq_cpu_kill(unsigned int cpu)
143{
144 int i;
145
146 for (i = 0; i < 500; i++) {
147 if (is_cpu_dead(cpu)) {
148#ifdef CONFIG_PPC64
149 paca[cpu].cpu_start = 0;
150#endif
151 return;
152 }
153 msleep(20);
154 }
155 pr_err("CPU%d didn't die...\n", cpu);
156}
157#endif 157#endif
158 158
159/*
160 * To keep it compatible with old boot program which uses
161 * cache-inhibit spin table, we need to flush the cache
162 * before accessing spin table to invalidate any staled data.
163 * We also need to flush the cache after writing to spin
164 * table to push data out.
165 */
159static inline void flush_spin_table(void *spin_table) 166static inline void flush_spin_table(void *spin_table)
160{ 167{
161 flush_dcache_range((ulong)spin_table, 168 flush_dcache_range((ulong)spin_table,
@@ -173,78 +180,28 @@ static inline u32 read_spin_table_addr_l(void *spin_table)
173static void wake_hw_thread(void *info) 180static void wake_hw_thread(void *info)
174{ 181{
175 void fsl_secondary_thread_init(void); 182 void fsl_secondary_thread_init(void);
176 unsigned long imsr, inia; 183 unsigned long inia;
177 int nr = *(const int *)info; 184 int cpu = *(const int *)info;
178 185
179 imsr = MSR_KERNEL;
180 inia = *(unsigned long *)fsl_secondary_thread_init; 186 inia = *(unsigned long *)fsl_secondary_thread_init;
181 187 book3e_start_thread(cpu_thread_in_core(cpu), inia);
182 if (cpu_thread_in_core(nr) == 0) {
183 /* For when we boot on a secondary thread with kdump */
184 mttmr(TMRN_IMSR0, imsr);
185 mttmr(TMRN_INIA0, inia);
186 mtspr(SPRN_TENS, TEN_THREAD(0));
187 } else {
188 mttmr(TMRN_IMSR1, imsr);
189 mttmr(TMRN_INIA1, inia);
190 mtspr(SPRN_TENS, TEN_THREAD(1));
191 }
192
193 smp_generic_kick_cpu(nr);
194} 188}
195#endif 189#endif
196 190
197static int smp_85xx_kick_cpu(int nr) 191static int smp_85xx_start_cpu(int cpu)
198{ 192{
199 unsigned long flags; 193 int ret = 0;
200 const u64 *cpu_rel_addr;
201 __iomem struct epapr_spin_table *spin_table;
202 struct device_node *np; 194 struct device_node *np;
203 int hw_cpu = get_hard_smp_processor_id(nr); 195 const u64 *cpu_rel_addr;
196 unsigned long flags;
204 int ioremappable; 197 int ioremappable;
205 int ret = 0; 198 int hw_cpu = get_hard_smp_processor_id(cpu);
206 199 struct epapr_spin_table __iomem *spin_table;
207 WARN_ON(nr < 0 || nr >= NR_CPUS);
208 WARN_ON(hw_cpu < 0 || hw_cpu >= NR_CPUS);
209
210 pr_debug("smp_85xx_kick_cpu: kick CPU #%d\n", nr);
211
212#ifdef CONFIG_PPC64
213 /* Threads don't use the spin table */
214 if (cpu_thread_in_core(nr) != 0) {
215 int primary = cpu_first_thread_sibling(nr);
216
217 if (WARN_ON_ONCE(!cpu_has_feature(CPU_FTR_SMT)))
218 return -ENOENT;
219
220 if (cpu_thread_in_core(nr) != 1) {
221 pr_err("%s: cpu %d: invalid hw thread %d\n",
222 __func__, nr, cpu_thread_in_core(nr));
223 return -ENOENT;
224 }
225 200
226 if (!cpu_online(primary)) { 201 np = of_get_cpu_node(cpu, NULL);
227 pr_err("%s: cpu %d: primary %d not online\n",
228 __func__, nr, primary);
229 return -ENOENT;
230 }
231
232 smp_call_function_single(primary, wake_hw_thread, &nr, 0);
233 return 0;
234 } else if (cpu_thread_in_core(boot_cpuid) != 0 &&
235 cpu_first_thread_sibling(boot_cpuid) == nr) {
236 if (WARN_ON_ONCE(!cpu_has_feature(CPU_FTR_SMT)))
237 return -ENOENT;
238
239 smp_call_function_single(boot_cpuid, wake_hw_thread, &nr, 0);
240 }
241#endif
242
243 np = of_get_cpu_node(nr, NULL);
244 cpu_rel_addr = of_get_property(np, "cpu-release-addr", NULL); 202 cpu_rel_addr = of_get_property(np, "cpu-release-addr", NULL);
245 203 if (!cpu_rel_addr) {
246 if (cpu_rel_addr == NULL) { 204 pr_err("No cpu-release-addr for cpu %d\n", cpu);
247 printk(KERN_ERR "No cpu-release-addr for cpu %d\n", nr);
248 return -ENOENT; 205 return -ENOENT;
249 } 206 }
250 207
@@ -264,28 +221,18 @@ static int smp_85xx_kick_cpu(int nr)
264 spin_table = phys_to_virt(*cpu_rel_addr); 221 spin_table = phys_to_virt(*cpu_rel_addr);
265 222
266 local_irq_save(flags); 223 local_irq_save(flags);
267#ifdef CONFIG_PPC32 224 hard_irq_disable();
268#ifdef CONFIG_HOTPLUG_CPU
269 /* Corresponding to generic_set_cpu_dead() */
270 generic_set_cpu_up(nr);
271 225
272 if (system_state == SYSTEM_RUNNING) { 226 if (qoriq_pm_ops)
273 /* 227 qoriq_pm_ops->cpu_up_prepare(cpu);
274 * To keep it compatible with old boot program which uses
275 * cache-inhibit spin table, we need to flush the cache
276 * before accessing spin table to invalidate any staled data.
277 * We also need to flush the cache after writing to spin
278 * table to push data out.
279 */
280 flush_spin_table(spin_table);
281 out_be32(&spin_table->addr_l, 0);
282 flush_spin_table(spin_table);
283 228
229 /* if cpu is not spinning, reset it */
230 if (read_spin_table_addr_l(spin_table) != 1) {
284 /* 231 /*
285 * We don't set the BPTR register here since it already points 232 * We don't set the BPTR register here since it already points
286 * to the boot page properly. 233 * to the boot page properly.
287 */ 234 */
288 mpic_reset_core(nr); 235 mpic_reset_core(cpu);
289 236
290 /* 237 /*
291 * wait until core is ready... 238 * wait until core is ready...
@@ -295,40 +242,23 @@ static int smp_85xx_kick_cpu(int nr)
295 if (!spin_event_timeout( 242 if (!spin_event_timeout(
296 read_spin_table_addr_l(spin_table) == 1, 243 read_spin_table_addr_l(spin_table) == 1,
297 10000, 100)) { 244 10000, 100)) {
298 pr_err("%s: timeout waiting for core %d to reset\n", 245 pr_err("timeout waiting for cpu %d to reset\n",
299 __func__, hw_cpu); 246 hw_cpu);
300 ret = -ENOENT; 247 ret = -EAGAIN;
301 goto out; 248 goto err;
302 } 249 }
303
304 /* clear the acknowledge status */
305 __secondary_hold_acknowledge = -1;
306 } 250 }
307#endif
308 flush_spin_table(spin_table);
309 out_be32(&spin_table->pir, hw_cpu);
310 out_be32(&spin_table->addr_l, __pa(__early_start));
311 flush_spin_table(spin_table);
312
313 /* Wait a bit for the CPU to ack. */
314 if (!spin_event_timeout(__secondary_hold_acknowledge == hw_cpu,
315 10000, 100)) {
316 pr_err("%s: timeout waiting for core %d to ack\n",
317 __func__, hw_cpu);
318 ret = -ENOENT;
319 goto out;
320 }
321out:
322#else
323 smp_generic_kick_cpu(nr);
324 251
325 flush_spin_table(spin_table); 252 flush_spin_table(spin_table);
326 out_be32(&spin_table->pir, hw_cpu); 253 out_be32(&spin_table->pir, hw_cpu);
254#ifdef CONFIG_PPC64
327 out_be64((u64 *)(&spin_table->addr_h), 255 out_be64((u64 *)(&spin_table->addr_h),
328 __pa(ppc_function_entry(generic_secondary_smp_init))); 256 __pa(ppc_function_entry(generic_secondary_smp_init)));
329 flush_spin_table(spin_table); 257#else
258 out_be32(&spin_table->addr_l, __pa(__early_start));
330#endif 259#endif
331 260 flush_spin_table(spin_table);
261err:
332 local_irq_restore(flags); 262 local_irq_restore(flags);
333 263
334 if (ioremappable) 264 if (ioremappable)
@@ -337,6 +267,81 @@ out:
337 return ret; 267 return ret;
338} 268}
339 269
270static int smp_85xx_kick_cpu(int nr)
271{
272 int ret = 0;
273#ifdef CONFIG_PPC64
274 int primary = nr;
275#endif
276
277 WARN_ON(nr < 0 || nr >= num_possible_cpus());
278
279 pr_debug("kick CPU #%d\n", nr);
280
281#ifdef CONFIG_PPC64
282 if (threads_per_core == 2) {
283 if (WARN_ON_ONCE(!cpu_has_feature(CPU_FTR_SMT)))
284 return -ENOENT;
285
286 booting_thread_hwid = cpu_thread_in_core(nr);
287 primary = cpu_first_thread_sibling(nr);
288
289 if (qoriq_pm_ops)
290 qoriq_pm_ops->cpu_up_prepare(nr);
291
292 /*
293 * If either thread in the core is online, use it to start
294 * the other.
295 */
296 if (cpu_online(primary)) {
297 smp_call_function_single(primary,
298 wake_hw_thread, &nr, 1);
299 goto done;
300 } else if (cpu_online(primary + 1)) {
301 smp_call_function_single(primary + 1,
302 wake_hw_thread, &nr, 1);
303 goto done;
304 }
305
306 /*
307 * If getting here, it means both threads in the core are
308 * offline. So start the primary thread, then it will start
309 * the thread specified in booting_thread_hwid, the one
310 * corresponding to nr.
311 */
312
313 } else if (threads_per_core == 1) {
314 /*
315 * If one core has only one thread, set booting_thread_hwid to
316 * an invalid value.
317 */
318 booting_thread_hwid = INVALID_THREAD_HWID;
319
320 } else if (threads_per_core > 2) {
321 pr_err("Do not support more than 2 threads per CPU.");
322 return -EINVAL;
323 }
324
325 ret = smp_85xx_start_cpu(primary);
326 if (ret)
327 return ret;
328
329done:
330 paca[nr].cpu_start = 1;
331 generic_set_cpu_up(nr);
332
333 return ret;
334#else
335 ret = smp_85xx_start_cpu(nr);
336 if (ret)
337 return ret;
338
339 generic_set_cpu_up(nr);
340
341 return ret;
342#endif
343}
344
340struct smp_ops_t smp_85xx_ops = { 345struct smp_ops_t smp_85xx_ops = {
341 .kick_cpu = smp_85xx_kick_cpu, 346 .kick_cpu = smp_85xx_kick_cpu,
342 .cpu_bootable = smp_generic_cpu_bootable, 347 .cpu_bootable = smp_generic_cpu_bootable,
@@ -359,7 +364,7 @@ void mpc85xx_smp_kexec_cpu_down(int crash_shutdown, int secondary)
359 local_irq_disable(); 364 local_irq_disable();
360 365
361 if (secondary) { 366 if (secondary) {
362 __flush_disable_L1(); 367 cur_cpu_spec->cpu_down_flush();
363 atomic_inc(&kexec_down_cpus); 368 atomic_inc(&kexec_down_cpus);
364 /* loop forever */ 369 /* loop forever */
365 while (1); 370 while (1);
@@ -467,16 +472,6 @@ static void smp_85xx_setup_cpu(int cpu_nr)
467 smp_85xx_basic_setup(cpu_nr); 472 smp_85xx_basic_setup(cpu_nr);
468} 473}
469 474
470static const struct of_device_id mpc85xx_smp_guts_ids[] = {
471 { .compatible = "fsl,mpc8572-guts", },
472 { .compatible = "fsl,p1020-guts", },
473 { .compatible = "fsl,p1021-guts", },
474 { .compatible = "fsl,p1022-guts", },
475 { .compatible = "fsl,p1023-guts", },
476 { .compatible = "fsl,p2020-guts", },
477 {},
478};
479
480void __init mpc85xx_smp_init(void) 475void __init mpc85xx_smp_init(void)
481{ 476{
482 struct device_node *np; 477 struct device_node *np;
@@ -500,22 +495,21 @@ void __init mpc85xx_smp_init(void)
500 smp_85xx_ops.probe = NULL; 495 smp_85xx_ops.probe = NULL;
501 } 496 }
502 497
503 np = of_find_matching_node(NULL, mpc85xx_smp_guts_ids); 498#ifdef CONFIG_HOTPLUG_CPU
504 if (np) { 499#ifdef CONFIG_FSL_CORENET_RCPM
505 guts = of_iomap(np, 0); 500 fsl_rcpm_init();
506 of_node_put(np); 501#endif
507 if (!guts) { 502
508 pr_err("%s: Could not map guts node address\n", 503#ifdef CONFIG_FSL_PMC
509 __func__); 504 mpc85xx_setup_pmc();
510 return; 505#endif
511 } 506 if (qoriq_pm_ops) {
512 smp_85xx_ops.give_timebase = mpc85xx_give_timebase; 507 smp_85xx_ops.give_timebase = mpc85xx_give_timebase;
513 smp_85xx_ops.take_timebase = mpc85xx_take_timebase; 508 smp_85xx_ops.take_timebase = mpc85xx_take_timebase;
514#ifdef CONFIG_HOTPLUG_CPU
515 ppc_md.cpu_die = smp_85xx_mach_cpu_die; 509 ppc_md.cpu_die = smp_85xx_mach_cpu_die;
516#endif 510 smp_85xx_ops.cpu_die = qoriq_cpu_kill;
517 } 511 }
518 512#endif
519 smp_ops = &smp_85xx_ops; 513 smp_ops = &smp_85xx_ops;
520 514
521#ifdef CONFIG_KEXEC 515#ifdef CONFIG_KEXEC
diff --git a/arch/powerpc/platforms/85xx/smp.h b/arch/powerpc/platforms/85xx/smp.h
index e2b44933ff19..0b20ae315c53 100644
--- a/arch/powerpc/platforms/85xx/smp.h
+++ b/arch/powerpc/platforms/85xx/smp.h
@@ -5,6 +5,7 @@
5 5
6#ifdef CONFIG_SMP 6#ifdef CONFIG_SMP
7void __init mpc85xx_smp_init(void); 7void __init mpc85xx_smp_init(void);
8int __init mpc85xx_setup_pmc(void);
8#else 9#else
9static inline void mpc85xx_smp_init(void) 10static inline void mpc85xx_smp_init(void)
10{ 11{
diff --git a/arch/powerpc/platforms/86xx/Makefile b/arch/powerpc/platforms/86xx/Makefile
index ede815d6489d..2d889ad7dc89 100644
--- a/arch/powerpc/platforms/86xx/Makefile
+++ b/arch/powerpc/platforms/86xx/Makefile
@@ -2,7 +2,7 @@
2# Makefile for the PowerPC 86xx linux kernel. 2# Makefile for the PowerPC 86xx linux kernel.
3# 3#
4 4
5obj-y := pic.o 5obj-y := pic.o common.o
6obj-$(CONFIG_SMP) += mpc86xx_smp.o 6obj-$(CONFIG_SMP) += mpc86xx_smp.o
7obj-$(CONFIG_MPC8641_HPCN) += mpc86xx_hpcn.o 7obj-$(CONFIG_MPC8641_HPCN) += mpc86xx_hpcn.o
8obj-$(CONFIG_SBC8641D) += sbc8641d.o 8obj-$(CONFIG_SBC8641D) += sbc8641d.o
diff --git a/arch/powerpc/platforms/86xx/common.c b/arch/powerpc/platforms/86xx/common.c
new file mode 100644
index 000000000000..0f7b7fcf1ba2
--- /dev/null
+++ b/arch/powerpc/platforms/86xx/common.c
@@ -0,0 +1,43 @@
1/*
2 * Routines common to most mpc86xx-based boards.
3 *
4 * This is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 */
8
9#include <linux/of_platform.h>
10#include <asm/synch.h>
11
12#include "mpc86xx.h"
13
14static const struct of_device_id mpc86xx_common_ids[] __initconst = {
15 { .type = "soc", },
16 { .compatible = "soc", },
17 { .compatible = "simple-bus", },
18 { .name = "localbus", },
19 { .compatible = "gianfar", },
20 { .compatible = "fsl,mpc8641-pcie", },
21 {},
22};
23
24int __init mpc86xx_common_publish_devices(void)
25{
26 return of_platform_bus_probe(NULL, mpc86xx_common_ids, NULL);
27}
28
29long __init mpc86xx_time_init(void)
30{
31 unsigned int temp;
32
33 /* Set the time base to zero */
34 mtspr(SPRN_TBWL, 0);
35 mtspr(SPRN_TBWU, 0);
36
37 temp = mfspr(SPRN_HID0);
38 temp |= HID0_TBEN;
39 mtspr(SPRN_HID0, temp);
40 isync();
41
42 return 0;
43}
diff --git a/arch/powerpc/platforms/86xx/gef_ppc9a.c b/arch/powerpc/platforms/86xx/gef_ppc9a.c
index bf17933b20f3..8e63b752712c 100644
--- a/arch/powerpc/platforms/86xx/gef_ppc9a.c
+++ b/arch/powerpc/platforms/86xx/gef_ppc9a.c
@@ -197,37 +197,7 @@ static int __init gef_ppc9a_probe(void)
197 return 0; 197 return 0;
198} 198}
199 199
200static long __init mpc86xx_time_init(void) 200machine_arch_initcall(gef_ppc9a, mpc86xx_common_publish_devices);
201{
202 unsigned int temp;
203
204 /* Set the time base to zero */
205 mtspr(SPRN_TBWL, 0);
206 mtspr(SPRN_TBWU, 0);
207
208 temp = mfspr(SPRN_HID0);
209 temp |= HID0_TBEN;
210 mtspr(SPRN_HID0, temp);
211 asm volatile("isync");
212
213 return 0;
214}
215
216static const struct of_device_id of_bus_ids[] __initconst = {
217 { .compatible = "simple-bus", },
218 { .compatible = "gianfar", },
219 { .compatible = "fsl,mpc8641-pcie", },
220 {},
221};
222
223static int __init declare_of_platform_devices(void)
224{
225 printk(KERN_DEBUG "Probe platform devices\n");
226 of_platform_bus_probe(NULL, of_bus_ids, NULL);
227
228 return 0;
229}
230machine_arch_initcall(gef_ppc9a, declare_of_platform_devices);
231 201
232define_machine(gef_ppc9a) { 202define_machine(gef_ppc9a) {
233 .name = "GE PPC9A", 203 .name = "GE PPC9A",
diff --git a/arch/powerpc/platforms/86xx/gef_sbc310.c b/arch/powerpc/platforms/86xx/gef_sbc310.c
index 8facf5873866..0e0be94f551f 100644
--- a/arch/powerpc/platforms/86xx/gef_sbc310.c
+++ b/arch/powerpc/platforms/86xx/gef_sbc310.c
@@ -184,37 +184,7 @@ static int __init gef_sbc310_probe(void)
184 return 0; 184 return 0;
185} 185}
186 186
187static long __init mpc86xx_time_init(void) 187machine_arch_initcall(gef_sbc310, mpc86xx_common_publish_devices);
188{
189 unsigned int temp;
190
191 /* Set the time base to zero */
192 mtspr(SPRN_TBWL, 0);
193 mtspr(SPRN_TBWU, 0);
194
195 temp = mfspr(SPRN_HID0);
196 temp |= HID0_TBEN;
197 mtspr(SPRN_HID0, temp);
198 asm volatile("isync");
199
200 return 0;
201}
202
203static const struct of_device_id of_bus_ids[] __initconst = {
204 { .compatible = "simple-bus", },
205 { .compatible = "gianfar", },
206 { .compatible = "fsl,mpc8641-pcie", },
207 {},
208};
209
210static int __init declare_of_platform_devices(void)
211{
212 printk(KERN_DEBUG "Probe platform devices\n");
213 of_platform_bus_probe(NULL, of_bus_ids, NULL);
214
215 return 0;
216}
217machine_arch_initcall(gef_sbc310, declare_of_platform_devices);
218 188
219define_machine(gef_sbc310) { 189define_machine(gef_sbc310) {
220 .name = "GE SBC310", 190 .name = "GE SBC310",
diff --git a/arch/powerpc/platforms/86xx/gef_sbc610.c b/arch/powerpc/platforms/86xx/gef_sbc610.c
index 8c9058df5642..e8292b492d7e 100644
--- a/arch/powerpc/platforms/86xx/gef_sbc610.c
+++ b/arch/powerpc/platforms/86xx/gef_sbc610.c
@@ -174,37 +174,7 @@ static int __init gef_sbc610_probe(void)
174 return 0; 174 return 0;
175} 175}
176 176
177static long __init mpc86xx_time_init(void) 177machine_arch_initcall(gef_sbc610, mpc86xx_common_publish_devices);
178{
179 unsigned int temp;
180
181 /* Set the time base to zero */
182 mtspr(SPRN_TBWL, 0);
183 mtspr(SPRN_TBWU, 0);
184
185 temp = mfspr(SPRN_HID0);
186 temp |= HID0_TBEN;
187 mtspr(SPRN_HID0, temp);
188 asm volatile("isync");
189
190 return 0;
191}
192
193static const struct of_device_id of_bus_ids[] __initconst = {
194 { .compatible = "simple-bus", },
195 { .compatible = "gianfar", },
196 { .compatible = "fsl,mpc8641-pcie", },
197 {},
198};
199
200static int __init declare_of_platform_devices(void)
201{
202 printk(KERN_DEBUG "Probe platform devices\n");
203 of_platform_bus_probe(NULL, of_bus_ids, NULL);
204
205 return 0;
206}
207machine_arch_initcall(gef_sbc610, declare_of_platform_devices);
208 178
209define_machine(gef_sbc610) { 179define_machine(gef_sbc610) {
210 .name = "GE SBC610", 180 .name = "GE SBC610",
diff --git a/arch/powerpc/platforms/86xx/mpc8610_hpcd.c b/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
index 437a9c372ae1..957473e5c8e5 100644
--- a/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
+++ b/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
@@ -88,12 +88,10 @@ static inline void mpc8610_suspend_init(void) { }
88static const struct of_device_id mpc8610_ids[] __initconst = { 88static const struct of_device_id mpc8610_ids[] __initconst = {
89 { .compatible = "fsl,mpc8610-immr", }, 89 { .compatible = "fsl,mpc8610-immr", },
90 { .compatible = "fsl,mpc8610-guts", }, 90 { .compatible = "fsl,mpc8610-guts", },
91 { .compatible = "simple-bus", },
92 /* So that the DMA channel nodes can be probed individually: */ 91 /* So that the DMA channel nodes can be probed individually: */
93 { .compatible = "fsl,eloplus-dma", }, 92 { .compatible = "fsl,eloplus-dma", },
94 /* PCI controllers */ 93 /* PCI controllers */
95 { .compatible = "fsl,mpc8610-pci", }, 94 { .compatible = "fsl,mpc8610-pci", },
96 { .compatible = "fsl,mpc8641-pcie", },
97 {} 95 {}
98}; 96};
99 97
@@ -105,6 +103,8 @@ static int __init mpc8610_declare_of_platform_devices(void)
105 /* Enable wakeup on PIXIS' event IRQ. */ 103 /* Enable wakeup on PIXIS' event IRQ. */
106 mpc8610_suspend_init(); 104 mpc8610_suspend_init();
107 105
106 mpc86xx_common_publish_devices();
107
108 /* Without this call, the SSI device driver won't get probed. */ 108 /* Without this call, the SSI device driver won't get probed. */
109 of_platform_bus_probe(NULL, mpc8610_ids, NULL); 109 of_platform_bus_probe(NULL, mpc8610_ids, NULL);
110 110
@@ -327,22 +327,6 @@ static int __init mpc86xx_hpcd_probe(void)
327 return 0; 327 return 0;
328} 328}
329 329
330static long __init mpc86xx_time_init(void)
331{
332 unsigned int temp;
333
334 /* Set the time base to zero */
335 mtspr(SPRN_TBWL, 0);
336 mtspr(SPRN_TBWU, 0);
337
338 temp = mfspr(SPRN_HID0);
339 temp |= HID0_TBEN;
340 mtspr(SPRN_HID0, temp);
341 asm volatile("isync");
342
343 return 0;
344}
345
346define_machine(mpc86xx_hpcd) { 330define_machine(mpc86xx_hpcd) {
347 .name = "MPC86xx HPCD", 331 .name = "MPC86xx HPCD",
348 .probe = mpc86xx_hpcd_probe, 332 .probe = mpc86xx_hpcd_probe,
diff --git a/arch/powerpc/platforms/86xx/mpc86xx.h b/arch/powerpc/platforms/86xx/mpc86xx.h
index 08efb57559d1..53500db6b644 100644
--- a/arch/powerpc/platforms/86xx/mpc86xx.h
+++ b/arch/powerpc/platforms/86xx/mpc86xx.h
@@ -17,5 +17,7 @@
17 17
18extern void mpc86xx_smp_init(void); 18extern void mpc86xx_smp_init(void);
19extern void mpc86xx_init_irq(void); 19extern void mpc86xx_init_irq(void);
20extern long mpc86xx_time_init(void);
21extern int mpc86xx_common_publish_devices(void);
20 22
21#endif /* __MPC86XX_H__ */ 23#endif /* __MPC86XX_H__ */
diff --git a/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c b/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c
index 07ccb1b0cc7d..e5084811b9c6 100644
--- a/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c
+++ b/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c
@@ -110,33 +110,14 @@ static int __init mpc86xx_hpcn_probe(void)
110 return 0; 110 return 0;
111} 111}
112 112
113static long __init
114mpc86xx_time_init(void)
115{
116 unsigned int temp;
117
118 /* Set the time base to zero */
119 mtspr(SPRN_TBWL, 0);
120 mtspr(SPRN_TBWU, 0);
121
122 temp = mfspr(SPRN_HID0);
123 temp |= HID0_TBEN;
124 mtspr(SPRN_HID0, temp);
125 asm volatile("isync");
126
127 return 0;
128}
129
130static const struct of_device_id of_bus_ids[] __initconst = { 113static const struct of_device_id of_bus_ids[] __initconst = {
131 { .compatible = "simple-bus", },
132 { .compatible = "fsl,srio", }, 114 { .compatible = "fsl,srio", },
133 { .compatible = "gianfar", },
134 { .compatible = "fsl,mpc8641-pcie", },
135 {}, 115 {},
136}; 116};
137 117
138static int __init declare_of_platform_devices(void) 118static int __init declare_of_platform_devices(void)
139{ 119{
120 mpc86xx_common_publish_devices();
140 of_platform_bus_probe(NULL, of_bus_ids, NULL); 121 of_platform_bus_probe(NULL, of_bus_ids, NULL);
141 122
142 return 0; 123 return 0;
diff --git a/arch/powerpc/platforms/86xx/sbc8641d.c b/arch/powerpc/platforms/86xx/sbc8641d.c
index 6810b71d54a7..2a9cf278c12a 100644
--- a/arch/powerpc/platforms/86xx/sbc8641d.c
+++ b/arch/powerpc/platforms/86xx/sbc8641d.c
@@ -75,37 +75,7 @@ static int __init sbc8641_probe(void)
75 return 0; 75 return 0;
76} 76}
77 77
78static long __init 78machine_arch_initcall(sbc8641, mpc86xx_common_publish_devices);
79mpc86xx_time_init(void)
80{
81 unsigned int temp;
82
83 /* Set the time base to zero */
84 mtspr(SPRN_TBWL, 0);
85 mtspr(SPRN_TBWU, 0);
86
87 temp = mfspr(SPRN_HID0);
88 temp |= HID0_TBEN;
89 mtspr(SPRN_HID0, temp);
90 asm volatile("isync");
91
92 return 0;
93}
94
95static const struct of_device_id of_bus_ids[] __initconst = {
96 { .compatible = "simple-bus", },
97 { .compatible = "gianfar", },
98 { .compatible = "fsl,mpc8641-pcie", },
99 {},
100};
101
102static int __init declare_of_platform_devices(void)
103{
104 of_platform_bus_probe(NULL, of_bus_ids, NULL);
105
106 return 0;
107}
108machine_arch_initcall(sbc8641, declare_of_platform_devices);
109 79
110define_machine(sbc8641) { 80define_machine(sbc8641) {
111 .name = "SBC8641D", 81 .name = "SBC8641D",
diff --git a/arch/powerpc/platforms/embedded6xx/mpc10x.h b/arch/powerpc/platforms/embedded6xx/mpc10x.h
index b290b63661f1..5ad12023e562 100644
--- a/arch/powerpc/platforms/embedded6xx/mpc10x.h
+++ b/arch/powerpc/platforms/embedded6xx/mpc10x.h
@@ -24,13 +24,11 @@
24 * Processor: 0x80000000 - 0x807fffff -> PCI I/O: 0x00000000 - 0x007fffff 24 * Processor: 0x80000000 - 0x807fffff -> PCI I/O: 0x00000000 - 0x007fffff
25 * Processor: 0xc0000000 - 0xdfffffff -> PCI MEM: 0x00000000 - 0x1fffffff 25 * Processor: 0xc0000000 - 0xdfffffff -> PCI MEM: 0x00000000 - 0x1fffffff
26 * PCI MEM: 0x80000000 -> Processor System Memory: 0x00000000 26 * PCI MEM: 0x80000000 -> Processor System Memory: 0x00000000
27 * EUMB mapped to: ioremap_base - 0x00100000 (ioremap_base - 1 MB)
28 * 27 *
29 * MAP B (CHRP Map) 28 * MAP B (CHRP Map)
30 * Processor: 0xfe000000 - 0xfebfffff -> PCI I/O: 0x00000000 - 0x00bfffff 29 * Processor: 0xfe000000 - 0xfebfffff -> PCI I/O: 0x00000000 - 0x00bfffff
31 * Processor: 0x80000000 - 0xbfffffff -> PCI MEM: 0x80000000 - 0xbfffffff 30 * Processor: 0x80000000 - 0xbfffffff -> PCI MEM: 0x80000000 - 0xbfffffff
32 * PCI MEM: 0x00000000 -> Processor System Memory: 0x00000000 31 * PCI MEM: 0x00000000 -> Processor System Memory: 0x00000000
33 * EUMB mapped to: ioremap_base - 0x00100000 (ioremap_base - 1 MB)
34 */ 32 */
35 33
36/* 34/*
@@ -138,14 +136,6 @@
138#define MPC10X_EUMB_WP_OFFSET 0x000ff000 /* Data path diagnostic, watchpoint reg offset */ 136#define MPC10X_EUMB_WP_OFFSET 0x000ff000 /* Data path diagnostic, watchpoint reg offset */
139#define MPC10X_EUMB_WP_SIZE 0x00001000 /* Data path diagnostic, watchpoint reg size */ 137#define MPC10X_EUMB_WP_SIZE 0x00001000 /* Data path diagnostic, watchpoint reg size */
140 138
141/*
142 * Define some recommended places to put the EUMB regs.
143 * For both maps, recommend putting the EUMB from 0xeff00000 to 0xefffffff.
144 */
145extern unsigned long ioremap_base;
146#define MPC10X_MAPA_EUMB_BASE (ioremap_base - MPC10X_EUMB_SIZE)
147#define MPC10X_MAPB_EUMB_BASE MPC10X_MAPA_EUMB_BASE
148
149enum ppc_sys_devices { 139enum ppc_sys_devices {
150 MPC10X_IIC1, 140 MPC10X_IIC1,
151 MPC10X_DMA0, 141 MPC10X_DMA0,
diff --git a/arch/powerpc/sysdev/Kconfig b/arch/powerpc/sysdev/Kconfig
index a19332a38715..52dc165c0efb 100644
--- a/arch/powerpc/sysdev/Kconfig
+++ b/arch/powerpc/sysdev/Kconfig
@@ -40,3 +40,8 @@ config SCOM_DEBUGFS
40config GE_FPGA 40config GE_FPGA
41 bool 41 bool
42 default n 42 default n
43
44config FSL_CORENET_RCPM
45 bool
46 help
47 This option enables support for RCPM (Run Control/Power Management).
diff --git a/arch/powerpc/sysdev/Makefile b/arch/powerpc/sysdev/Makefile
index bd6bd729969c..a254824719f1 100644
--- a/arch/powerpc/sysdev/Makefile
+++ b/arch/powerpc/sysdev/Makefile
@@ -20,6 +20,7 @@ obj-$(CONFIG_MMIO_NVRAM) += mmio_nvram.o
20obj-$(CONFIG_FSL_SOC) += fsl_soc.o fsl_mpic_err.o 20obj-$(CONFIG_FSL_SOC) += fsl_soc.o fsl_mpic_err.o
21obj-$(CONFIG_FSL_PCI) += fsl_pci.o $(fsl-msi-obj-y) 21obj-$(CONFIG_FSL_PCI) += fsl_pci.o $(fsl-msi-obj-y)
22obj-$(CONFIG_FSL_PMC) += fsl_pmc.o 22obj-$(CONFIG_FSL_PMC) += fsl_pmc.o
23obj-$(CONFIG_FSL_CORENET_RCPM) += fsl_rcpm.o
23obj-$(CONFIG_FSL_LBC) += fsl_lbc.o 24obj-$(CONFIG_FSL_LBC) += fsl_lbc.o
24obj-$(CONFIG_FSL_GTM) += fsl_gtm.o 25obj-$(CONFIG_FSL_GTM) += fsl_gtm.o
25obj-$(CONFIG_FSL_85XX_CACHE_SRAM) += fsl_85xx_l2ctlr.o fsl_85xx_cache_sram.o 26obj-$(CONFIG_FSL_85XX_CACHE_SRAM) += fsl_85xx_l2ctlr.o fsl_85xx_cache_sram.o
diff --git a/arch/powerpc/sysdev/cpm1.c b/arch/powerpc/sysdev/cpm1.c
index 5e6ff38ea69f..8ed65365be50 100644
--- a/arch/powerpc/sysdev/cpm1.c
+++ b/arch/powerpc/sysdev/cpm1.c
@@ -228,7 +228,10 @@ void __init cpm_reset(void)
228 * Bit 25, FAM can also be set to use FEC aggressive mode (860T). 228 * Bit 25, FAM can also be set to use FEC aggressive mode (860T).
229 */ 229 */
230 siu_conf = immr_map(im_siu_conf); 230 siu_conf = immr_map(im_siu_conf);
231 out_be32(&siu_conf->sc_sdcr, 1); 231 if ((mfspr(SPRN_IMMR) & 0xffff) == 0x0900) /* MPC885 */
232 out_be32(&siu_conf->sc_sdcr, 0x40);
233 else
234 out_be32(&siu_conf->sc_sdcr, 1);
232 immr_unmap(siu_conf); 235 immr_unmap(siu_conf);
233 236
234 cpm_muram_init(); 237 cpm_muram_init();
diff --git a/arch/powerpc/sysdev/fsl_lbc.c b/arch/powerpc/sysdev/fsl_lbc.c
index 47f781059eeb..424b67fdb57f 100644
--- a/arch/powerpc/sysdev/fsl_lbc.c
+++ b/arch/powerpc/sysdev/fsl_lbc.c
@@ -27,6 +27,7 @@
27#include <linux/platform_device.h> 27#include <linux/platform_device.h>
28#include <linux/interrupt.h> 28#include <linux/interrupt.h>
29#include <linux/mod_devicetable.h> 29#include <linux/mod_devicetable.h>
30#include <linux/syscore_ops.h>
30#include <asm/prom.h> 31#include <asm/prom.h>
31#include <asm/fsl_lbc.h> 32#include <asm/fsl_lbc.h>
32 33
@@ -352,24 +353,42 @@ err:
352#ifdef CONFIG_SUSPEND 353#ifdef CONFIG_SUSPEND
353 354
354/* save lbc registers */ 355/* save lbc registers */
355static int fsl_lbc_suspend(struct platform_device *pdev, pm_message_t state) 356static int fsl_lbc_syscore_suspend(void)
356{ 357{
357 struct fsl_lbc_ctrl *ctrl = dev_get_drvdata(&pdev->dev); 358 struct fsl_lbc_ctrl *ctrl;
358 struct fsl_lbc_regs __iomem *lbc = ctrl->regs; 359 struct fsl_lbc_regs __iomem *lbc;
360
361 ctrl = fsl_lbc_ctrl_dev;
362 if (!ctrl)
363 goto out;
364
365 lbc = ctrl->regs;
366 if (!lbc)
367 goto out;
359 368
360 ctrl->saved_regs = kmalloc(sizeof(struct fsl_lbc_regs), GFP_KERNEL); 369 ctrl->saved_regs = kmalloc(sizeof(struct fsl_lbc_regs), GFP_KERNEL);
361 if (!ctrl->saved_regs) 370 if (!ctrl->saved_regs)
362 return -ENOMEM; 371 return -ENOMEM;
363 372
364 _memcpy_fromio(ctrl->saved_regs, lbc, sizeof(struct fsl_lbc_regs)); 373 _memcpy_fromio(ctrl->saved_regs, lbc, sizeof(struct fsl_lbc_regs));
374
375out:
365 return 0; 376 return 0;
366} 377}
367 378
368/* restore lbc registers */ 379/* restore lbc registers */
369static int fsl_lbc_resume(struct platform_device *pdev) 380static void fsl_lbc_syscore_resume(void)
370{ 381{
371 struct fsl_lbc_ctrl *ctrl = dev_get_drvdata(&pdev->dev); 382 struct fsl_lbc_ctrl *ctrl;
372 struct fsl_lbc_regs __iomem *lbc = ctrl->regs; 383 struct fsl_lbc_regs __iomem *lbc;
384
385 ctrl = fsl_lbc_ctrl_dev;
386 if (!ctrl)
387 goto out;
388
389 lbc = ctrl->regs;
390 if (!lbc)
391 goto out;
373 392
374 if (ctrl->saved_regs) { 393 if (ctrl->saved_regs) {
375 _memcpy_toio(lbc, ctrl->saved_regs, 394 _memcpy_toio(lbc, ctrl->saved_regs,
@@ -377,7 +396,9 @@ static int fsl_lbc_resume(struct platform_device *pdev)
377 kfree(ctrl->saved_regs); 396 kfree(ctrl->saved_regs);
378 ctrl->saved_regs = NULL; 397 ctrl->saved_regs = NULL;
379 } 398 }
380 return 0; 399
400out:
401 return;
381} 402}
382#endif /* CONFIG_SUSPEND */ 403#endif /* CONFIG_SUSPEND */
383 404
@@ -389,20 +410,26 @@ static const struct of_device_id fsl_lbc_match[] = {
389 {}, 410 {},
390}; 411};
391 412
413#ifdef CONFIG_SUSPEND
414static struct syscore_ops lbc_syscore_pm_ops = {
415 .suspend = fsl_lbc_syscore_suspend,
416 .resume = fsl_lbc_syscore_resume,
417};
418#endif
419
392static struct platform_driver fsl_lbc_ctrl_driver = { 420static struct platform_driver fsl_lbc_ctrl_driver = {
393 .driver = { 421 .driver = {
394 .name = "fsl-lbc", 422 .name = "fsl-lbc",
395 .of_match_table = fsl_lbc_match, 423 .of_match_table = fsl_lbc_match,
396 }, 424 },
397 .probe = fsl_lbc_ctrl_probe, 425 .probe = fsl_lbc_ctrl_probe,
398#ifdef CONFIG_SUSPEND
399 .suspend = fsl_lbc_suspend,
400 .resume = fsl_lbc_resume,
401#endif
402}; 426};
403 427
404static int __init fsl_lbc_init(void) 428static int __init fsl_lbc_init(void)
405{ 429{
430#ifdef CONFIG_SUSPEND
431 register_syscore_ops(&lbc_syscore_pm_ops);
432#endif
406 return platform_driver_register(&fsl_lbc_ctrl_driver); 433 return platform_driver_register(&fsl_lbc_ctrl_driver);
407} 434}
408subsys_initcall(fsl_lbc_init); 435subsys_initcall(fsl_lbc_init);
diff --git a/arch/powerpc/sysdev/fsl_rcpm.c b/arch/powerpc/sysdev/fsl_rcpm.c
new file mode 100644
index 000000000000..656d9ca057e5
--- /dev/null
+++ b/arch/powerpc/sysdev/fsl_rcpm.c
@@ -0,0 +1,385 @@
1/*
2 * RCPM(Run Control/Power Management) support
3 *
4 * Copyright 2012-2015 Freescale Semiconductor Inc.
5 *
6 * Author: Chenhui Zhao <chenhui.zhao@freescale.com>
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation; either version 2 of the License, or (at your
11 * option) any later version.
12 */
13
14#define pr_fmt(fmt) "%s: " fmt, __func__
15
16#include <linux/types.h>
17#include <linux/errno.h>
18#include <linux/of_address.h>
19#include <linux/export.h>
20
21#include <asm/io.h>
22#include <linux/fsl/guts.h>
23#include <asm/cputhreads.h>
24#include <asm/fsl_pm.h>
25
26static struct ccsr_rcpm_v1 __iomem *rcpm_v1_regs;
27static struct ccsr_rcpm_v2 __iomem *rcpm_v2_regs;
28static unsigned int fsl_supported_pm_modes;
29
30static void rcpm_v1_irq_mask(int cpu)
31{
32 int hw_cpu = get_hard_smp_processor_id(cpu);
33 unsigned int mask = 1 << hw_cpu;
34
35 setbits32(&rcpm_v1_regs->cpmimr, mask);
36 setbits32(&rcpm_v1_regs->cpmcimr, mask);
37 setbits32(&rcpm_v1_regs->cpmmcmr, mask);
38 setbits32(&rcpm_v1_regs->cpmnmimr, mask);
39}
40
41static void rcpm_v2_irq_mask(int cpu)
42{
43 int hw_cpu = get_hard_smp_processor_id(cpu);
44 unsigned int mask = 1 << hw_cpu;
45
46 setbits32(&rcpm_v2_regs->tpmimr0, mask);
47 setbits32(&rcpm_v2_regs->tpmcimr0, mask);
48 setbits32(&rcpm_v2_regs->tpmmcmr0, mask);
49 setbits32(&rcpm_v2_regs->tpmnmimr0, mask);
50}
51
52static void rcpm_v1_irq_unmask(int cpu)
53{
54 int hw_cpu = get_hard_smp_processor_id(cpu);
55 unsigned int mask = 1 << hw_cpu;
56
57 clrbits32(&rcpm_v1_regs->cpmimr, mask);
58 clrbits32(&rcpm_v1_regs->cpmcimr, mask);
59 clrbits32(&rcpm_v1_regs->cpmmcmr, mask);
60 clrbits32(&rcpm_v1_regs->cpmnmimr, mask);
61}
62
63static void rcpm_v2_irq_unmask(int cpu)
64{
65 int hw_cpu = get_hard_smp_processor_id(cpu);
66 unsigned int mask = 1 << hw_cpu;
67
68 clrbits32(&rcpm_v2_regs->tpmimr0, mask);
69 clrbits32(&rcpm_v2_regs->tpmcimr0, mask);
70 clrbits32(&rcpm_v2_regs->tpmmcmr0, mask);
71 clrbits32(&rcpm_v2_regs->tpmnmimr0, mask);
72}
73
74static void rcpm_v1_set_ip_power(bool enable, u32 mask)
75{
76 if (enable)
77 setbits32(&rcpm_v1_regs->ippdexpcr, mask);
78 else
79 clrbits32(&rcpm_v1_regs->ippdexpcr, mask);
80}
81
82static void rcpm_v2_set_ip_power(bool enable, u32 mask)
83{
84 if (enable)
85 setbits32(&rcpm_v2_regs->ippdexpcr[0], mask);
86 else
87 clrbits32(&rcpm_v2_regs->ippdexpcr[0], mask);
88}
89
90static void rcpm_v1_cpu_enter_state(int cpu, int state)
91{
92 int hw_cpu = get_hard_smp_processor_id(cpu);
93 unsigned int mask = 1 << hw_cpu;
94
95 switch (state) {
96 case E500_PM_PH10:
97 setbits32(&rcpm_v1_regs->cdozcr, mask);
98 break;
99 case E500_PM_PH15:
100 setbits32(&rcpm_v1_regs->cnapcr, mask);
101 break;
102 default:
103 pr_warn("Unknown cpu PM state (%d)\n", state);
104 break;
105 }
106}
107
108static void rcpm_v2_cpu_enter_state(int cpu, int state)
109{
110 int hw_cpu = get_hard_smp_processor_id(cpu);
111 u32 mask = 1 << cpu_core_index_of_thread(cpu);
112
113 switch (state) {
114 case E500_PM_PH10:
115 /* one bit corresponds to one thread for PH10 of 6500 */
116 setbits32(&rcpm_v2_regs->tph10setr0, 1 << hw_cpu);
117 break;
118 case E500_PM_PH15:
119 setbits32(&rcpm_v2_regs->pcph15setr, mask);
120 break;
121 case E500_PM_PH20:
122 setbits32(&rcpm_v2_regs->pcph20setr, mask);
123 break;
124 case E500_PM_PH30:
125 setbits32(&rcpm_v2_regs->pcph30setr, mask);
126 break;
127 default:
128 pr_warn("Unknown cpu PM state (%d)\n", state);
129 }
130}
131
132static void rcpm_v1_cpu_die(int cpu)
133{
134 rcpm_v1_cpu_enter_state(cpu, E500_PM_PH15);
135}
136
137#ifdef CONFIG_PPC64
138static void qoriq_disable_thread(int cpu)
139{
140 int thread = cpu_thread_in_core(cpu);
141
142 book3e_stop_thread(thread);
143}
144#endif
145
146static void rcpm_v2_cpu_die(int cpu)
147{
148#ifdef CONFIG_PPC64
149 int primary;
150
151 if (threads_per_core == 2) {
152 primary = cpu_first_thread_sibling(cpu);
153 if (cpu_is_offline(primary) && cpu_is_offline(primary + 1)) {
154 /* if both threads are offline, put the cpu in PH20 */
155 rcpm_v2_cpu_enter_state(cpu, E500_PM_PH20);
156 } else {
157 /* if only one thread is offline, disable the thread */
158 qoriq_disable_thread(cpu);
159 }
160 }
161#endif
162
163 if (threads_per_core == 1)
164 rcpm_v2_cpu_enter_state(cpu, E500_PM_PH20);
165}
166
167static void rcpm_v1_cpu_exit_state(int cpu, int state)
168{
169 int hw_cpu = get_hard_smp_processor_id(cpu);
170 unsigned int mask = 1 << hw_cpu;
171
172 switch (state) {
173 case E500_PM_PH10:
174 clrbits32(&rcpm_v1_regs->cdozcr, mask);
175 break;
176 case E500_PM_PH15:
177 clrbits32(&rcpm_v1_regs->cnapcr, mask);
178 break;
179 default:
180 pr_warn("Unknown cpu PM state (%d)\n", state);
181 break;
182 }
183}
184
185static void rcpm_v1_cpu_up_prepare(int cpu)
186{
187 rcpm_v1_cpu_exit_state(cpu, E500_PM_PH15);
188 rcpm_v1_irq_unmask(cpu);
189}
190
191static void rcpm_v2_cpu_exit_state(int cpu, int state)
192{
193 int hw_cpu = get_hard_smp_processor_id(cpu);
194 u32 mask = 1 << cpu_core_index_of_thread(cpu);
195
196 switch (state) {
197 case E500_PM_PH10:
198 setbits32(&rcpm_v2_regs->tph10clrr0, 1 << hw_cpu);
199 break;
200 case E500_PM_PH15:
201 setbits32(&rcpm_v2_regs->pcph15clrr, mask);
202 break;
203 case E500_PM_PH20:
204 setbits32(&rcpm_v2_regs->pcph20clrr, mask);
205 break;
206 case E500_PM_PH30:
207 setbits32(&rcpm_v2_regs->pcph30clrr, mask);
208 break;
209 default:
210 pr_warn("Unknown cpu PM state (%d)\n", state);
211 }
212}
213
214static void rcpm_v2_cpu_up_prepare(int cpu)
215{
216 rcpm_v2_cpu_exit_state(cpu, E500_PM_PH20);
217 rcpm_v2_irq_unmask(cpu);
218}
219
220static int rcpm_v1_plat_enter_state(int state)
221{
222 u32 *pmcsr_reg = &rcpm_v1_regs->powmgtcsr;
223 int ret = 0;
224 int result;
225
226 switch (state) {
227 case PLAT_PM_SLEEP:
228 setbits32(pmcsr_reg, RCPM_POWMGTCSR_SLP);
229
230 /* Upon resume, wait for RCPM_POWMGTCSR_SLP bit to be clear. */
231 result = spin_event_timeout(
232 !(in_be32(pmcsr_reg) & RCPM_POWMGTCSR_SLP), 10000, 10);
233 if (!result) {
234 pr_err("timeout waiting for SLP bit to be cleared\n");
235 ret = -ETIMEDOUT;
236 }
237 break;
238 default:
239 pr_warn("Unknown platform PM state (%d)", state);
240 ret = -EINVAL;
241 }
242
243 return ret;
244}
245
246static int rcpm_v2_plat_enter_state(int state)
247{
248 u32 *pmcsr_reg = &rcpm_v2_regs->powmgtcsr;
249 int ret = 0;
250 int result;
251
252 switch (state) {
253 case PLAT_PM_LPM20:
254 /* clear previous LPM20 status */
255 setbits32(pmcsr_reg, RCPM_POWMGTCSR_P_LPM20_ST);
256 /* enter LPM20 status */
257 setbits32(pmcsr_reg, RCPM_POWMGTCSR_LPM20_RQ);
258
259 /* At this point, the device is in LPM20 status. */
260
261 /* resume ... */
262 result = spin_event_timeout(
263 !(in_be32(pmcsr_reg) & RCPM_POWMGTCSR_LPM20_ST), 10000, 10);
264 if (!result) {
265 pr_err("timeout waiting for LPM20 bit to be cleared\n");
266 ret = -ETIMEDOUT;
267 }
268 break;
269 default:
270 pr_warn("Unknown platform PM state (%d)\n", state);
271 ret = -EINVAL;
272 }
273
274 return ret;
275}
276
277static int rcpm_v1_plat_enter_sleep(void)
278{
279 return rcpm_v1_plat_enter_state(PLAT_PM_SLEEP);
280}
281
282static int rcpm_v2_plat_enter_sleep(void)
283{
284 return rcpm_v2_plat_enter_state(PLAT_PM_LPM20);
285}
286
287static void rcpm_common_freeze_time_base(u32 *tben_reg, int freeze)
288{
289 static u32 mask;
290
291 if (freeze) {
292 mask = in_be32(tben_reg);
293 clrbits32(tben_reg, mask);
294 } else {
295 setbits32(tben_reg, mask);
296 }
297
298 /* read back to push the previous write */
299 in_be32(tben_reg);
300}
301
302static void rcpm_v1_freeze_time_base(bool freeze)
303{
304 rcpm_common_freeze_time_base(&rcpm_v1_regs->ctbenr, freeze);
305}
306
307static void rcpm_v2_freeze_time_base(bool freeze)
308{
309 rcpm_common_freeze_time_base(&rcpm_v2_regs->pctbenr, freeze);
310}
311
312static unsigned int rcpm_get_pm_modes(void)
313{
314 return fsl_supported_pm_modes;
315}
316
317static const struct fsl_pm_ops qoriq_rcpm_v1_ops = {
318 .irq_mask = rcpm_v1_irq_mask,
319 .irq_unmask = rcpm_v1_irq_unmask,
320 .cpu_enter_state = rcpm_v1_cpu_enter_state,
321 .cpu_exit_state = rcpm_v1_cpu_exit_state,
322 .cpu_up_prepare = rcpm_v1_cpu_up_prepare,
323 .cpu_die = rcpm_v1_cpu_die,
324 .plat_enter_sleep = rcpm_v1_plat_enter_sleep,
325 .set_ip_power = rcpm_v1_set_ip_power,
326 .freeze_time_base = rcpm_v1_freeze_time_base,
327 .get_pm_modes = rcpm_get_pm_modes,
328};
329
330static const struct fsl_pm_ops qoriq_rcpm_v2_ops = {
331 .irq_mask = rcpm_v2_irq_mask,
332 .irq_unmask = rcpm_v2_irq_unmask,
333 .cpu_enter_state = rcpm_v2_cpu_enter_state,
334 .cpu_exit_state = rcpm_v2_cpu_exit_state,
335 .cpu_up_prepare = rcpm_v2_cpu_up_prepare,
336 .cpu_die = rcpm_v2_cpu_die,
337 .plat_enter_sleep = rcpm_v2_plat_enter_sleep,
338 .set_ip_power = rcpm_v2_set_ip_power,
339 .freeze_time_base = rcpm_v2_freeze_time_base,
340 .get_pm_modes = rcpm_get_pm_modes,
341};
342
343static const struct of_device_id rcpm_matches[] = {
344 {
345 .compatible = "fsl,qoriq-rcpm-1.0",
346 .data = &qoriq_rcpm_v1_ops,
347 },
348 {
349 .compatible = "fsl,qoriq-rcpm-2.0",
350 .data = &qoriq_rcpm_v2_ops,
351 },
352 {
353 .compatible = "fsl,qoriq-rcpm-2.1",
354 .data = &qoriq_rcpm_v2_ops,
355 },
356 {},
357};
358
359int __init fsl_rcpm_init(void)
360{
361 struct device_node *np;
362 const struct of_device_id *match;
363 void __iomem *base;
364
365 np = of_find_matching_node_and_match(NULL, rcpm_matches, &match);
366 if (!np)
367 return 0;
368
369 base = of_iomap(np, 0);
370 of_node_put(np);
371 if (!base) {
372 pr_err("of_iomap() error.\n");
373 return -ENOMEM;
374 }
375
376 rcpm_v1_regs = base;
377 rcpm_v2_regs = base;
378
379 /* support sleep by default */
380 fsl_supported_pm_modes = FSL_PM_SLEEP;
381
382 qoriq_pm_ops = match->data;
383
384 return 0;
385}
diff --git a/drivers/soc/fsl/qe/qe_common.c b/drivers/soc/fsl/qe/qe_common.c
index 419fa5b7be4d..41eff805a904 100644
--- a/drivers/soc/fsl/qe/qe_common.c
+++ b/drivers/soc/fsl/qe/qe_common.c
@@ -103,6 +103,39 @@ out_muram:
103} 103}
104 104
105/* 105/*
106 * cpm_muram_alloc_common - cpm_muram_alloc common code
107 * @size: number of bytes to allocate
108 * @algo: algorithm for alloc.
109 * @data: data for genalloc's algorithm.
110 *
111 * This function returns an offset into the muram area.
112 */
113static unsigned long cpm_muram_alloc_common(unsigned long size,
114 genpool_algo_t algo, void *data)
115{
116 struct muram_block *entry;
117 unsigned long start;
118
119 start = gen_pool_alloc_algo(muram_pool, size, algo, data);
120 if (!start)
121 goto out2;
122 start = start - GENPOOL_OFFSET;
123 memset_io(cpm_muram_addr(start), 0, size);
124 entry = kmalloc(sizeof(*entry), GFP_ATOMIC);
125 if (!entry)
126 goto out1;
127 entry->start = start;
128 entry->size = size;
129 list_add(&entry->head, &muram_block_list);
130
131 return start;
132out1:
133 gen_pool_free(muram_pool, start, size);
134out2:
135 return (unsigned long)-ENOMEM;
136}
137
138/*
106 * cpm_muram_alloc - allocate the requested size worth of multi-user ram 139 * cpm_muram_alloc - allocate the requested size worth of multi-user ram
107 * @size: number of bytes to allocate 140 * @size: number of bytes to allocate
108 * @align: requested alignment, in bytes 141 * @align: requested alignment, in bytes
@@ -175,39 +208,6 @@ unsigned long cpm_muram_alloc_fixed(unsigned long offset, unsigned long size)
175} 208}
176EXPORT_SYMBOL(cpm_muram_alloc_fixed); 209EXPORT_SYMBOL(cpm_muram_alloc_fixed);
177 210
178/*
179 * cpm_muram_alloc_common - cpm_muram_alloc common code
180 * @size: number of bytes to allocate
181 * @algo: algorithm for alloc.
182 * @data: data for genalloc's algorithm.
183 *
184 * This function returns an offset into the muram area.
185 */
186unsigned long cpm_muram_alloc_common(unsigned long size, genpool_algo_t algo,
187 void *data)
188{
189 struct muram_block *entry;
190 unsigned long start;
191
192 start = gen_pool_alloc_algo(muram_pool, size, algo, data);
193 if (!start)
194 goto out2;
195 start = start - GENPOOL_OFFSET;
196 memset_io(cpm_muram_addr(start), 0, size);
197 entry = kmalloc(sizeof(*entry), GFP_KERNEL);
198 if (!entry)
199 goto out1;
200 entry->start = start;
201 entry->size = size;
202 list_add(&entry->head, &muram_block_list);
203
204 return start;
205out1:
206 gen_pool_free(muram_pool, start, size);
207out2:
208 return (unsigned long)-ENOMEM;
209}
210
211/** 211/**
212 * cpm_muram_addr - turn a muram offset into a virtual address 212 * cpm_muram_addr - turn a muram offset into a virtual address
213 * @offset: muram offset to convert 213 * @offset: muram offset to convert
diff --git a/drivers/soc/fsl/qe/qe_ic.c b/drivers/soc/fsl/qe/qe_ic.c
index b77d01ff8330..ec2ca864b0c5 100644
--- a/drivers/soc/fsl/qe/qe_ic.c
+++ b/drivers/soc/fsl/qe/qe_ic.c
@@ -259,6 +259,11 @@ static int qe_ic_host_map(struct irq_domain *h, unsigned int virq,
259 struct qe_ic *qe_ic = h->host_data; 259 struct qe_ic *qe_ic = h->host_data;
260 struct irq_chip *chip; 260 struct irq_chip *chip;
261 261
262 if (hw >= ARRAY_SIZE(qe_ic_info)) {
263 pr_err("%s: Invalid hw irq number for QEIC\n", __func__);
264 return -EINVAL;
265 }
266
262 if (qe_ic_info[hw].mask == 0) { 267 if (qe_ic_info[hw].mask == 0) {
263 printk(KERN_ERR "Can't map reserved IRQ\n"); 268 printk(KERN_ERR "Can't map reserved IRQ\n");
264 return -EINVAL; 269 return -EINVAL;
@@ -407,7 +412,8 @@ int qe_ic_set_priority(unsigned int virq, unsigned int priority)
407 412
408 if (priority > 8 || priority == 0) 413 if (priority > 8 || priority == 0)
409 return -EINVAL; 414 return -EINVAL;
410 if (src > 127) 415 if (WARN_ONCE(src >= ARRAY_SIZE(qe_ic_info),
416 "%s: Invalid hw irq number for QEIC\n", __func__))
411 return -EINVAL; 417 return -EINVAL;
412 if (qe_ic_info[src].pri_reg == 0) 418 if (qe_ic_info[src].pri_reg == 0)
413 return -EINVAL; 419 return -EINVAL;
@@ -436,6 +442,9 @@ int qe_ic_set_high_priority(unsigned int virq, unsigned int priority, int high)
436 442
437 if (priority > 2 || priority == 0) 443 if (priority > 2 || priority == 0)
438 return -EINVAL; 444 return -EINVAL;
445 if (WARN_ONCE(src >= ARRAY_SIZE(qe_ic_info),
446 "%s: Invalid hw irq number for QEIC\n", __func__))
447 return -EINVAL;
439 448
440 switch (qe_ic_info[src].pri_reg) { 449 switch (qe_ic_info[src].pri_reg) {
441 case QEIC_CIPZCC: 450 case QEIC_CIPZCC:
diff --git a/include/linux/fsl/guts.h b/include/linux/fsl/guts.h
index 84d971ff3fba..649e9171a9b3 100644
--- a/include/linux/fsl/guts.h
+++ b/include/linux/fsl/guts.h
@@ -189,4 +189,109 @@ static inline void guts_set_pmuxcr_dma(struct ccsr_guts __iomem *guts,
189 189
190#endif 190#endif
191 191
192struct ccsr_rcpm_v1 {
193 u8 res0000[4];
194 __be32 cdozsr; /* 0x0004 Core Doze Status Register */
195 u8 res0008[4];
196 __be32 cdozcr; /* 0x000c Core Doze Control Register */
197 u8 res0010[4];
198 __be32 cnapsr; /* 0x0014 Core Nap Status Register */
199 u8 res0018[4];
200 __be32 cnapcr; /* 0x001c Core Nap Control Register */
201 u8 res0020[4];
202 __be32 cdozpsr; /* 0x0024 Core Doze Previous Status Register */
203 u8 res0028[4];
204 __be32 cnappsr; /* 0x002c Core Nap Previous Status Register */
205 u8 res0030[4];
206 __be32 cwaitsr; /* 0x0034 Core Wait Status Register */
207 u8 res0038[4];
208 __be32 cwdtdsr; /* 0x003c Core Watchdog Detect Status Register */
209 __be32 powmgtcsr; /* 0x0040 PM Control&Status Register */
210#define RCPM_POWMGTCSR_SLP 0x00020000
211 u8 res0044[12];
212 __be32 ippdexpcr; /* 0x0050 IP Powerdown Exception Control Register */
213 u8 res0054[16];
214 __be32 cpmimr; /* 0x0064 Core PM IRQ Mask Register */
215 u8 res0068[4];
216 __be32 cpmcimr; /* 0x006c Core PM Critical IRQ Mask Register */
217 u8 res0070[4];
218 __be32 cpmmcmr; /* 0x0074 Core PM Machine Check Mask Register */
219 u8 res0078[4];
220 __be32 cpmnmimr; /* 0x007c Core PM NMI Mask Register */
221 u8 res0080[4];
222 __be32 ctbenr; /* 0x0084 Core Time Base Enable Register */
223 u8 res0088[4];
224 __be32 ctbckselr; /* 0x008c Core Time Base Clock Select Register */
225 u8 res0090[4];
226 __be32 ctbhltcr; /* 0x0094 Core Time Base Halt Control Register */
227 u8 res0098[4];
228 __be32 cmcpmaskcr; /* 0x00a4 Core Machine Check Mask Register */
229};
230
231struct ccsr_rcpm_v2 {
232 u8 res_00[12];
233 __be32 tph10sr0; /* Thread PH10 Status Register */
234 u8 res_10[12];
235 __be32 tph10setr0; /* Thread PH10 Set Control Register */
236 u8 res_20[12];
237 __be32 tph10clrr0; /* Thread PH10 Clear Control Register */
238 u8 res_30[12];
239 __be32 tph10psr0; /* Thread PH10 Previous Status Register */
240 u8 res_40[12];
241 __be32 twaitsr0; /* Thread Wait Status Register */
242 u8 res_50[96];
243 __be32 pcph15sr; /* Physical Core PH15 Status Register */
244 __be32 pcph15setr; /* Physical Core PH15 Set Control Register */
245 __be32 pcph15clrr; /* Physical Core PH15 Clear Control Register */
246 __be32 pcph15psr; /* Physical Core PH15 Prev Status Register */
247 u8 res_c0[16];
248 __be32 pcph20sr; /* Physical Core PH20 Status Register */
249 __be32 pcph20setr; /* Physical Core PH20 Set Control Register */
250 __be32 pcph20clrr; /* Physical Core PH20 Clear Control Register */
251 __be32 pcph20psr; /* Physical Core PH20 Prev Status Register */
252 __be32 pcpw20sr; /* Physical Core PW20 Status Register */
253 u8 res_e0[12];
254 __be32 pcph30sr; /* Physical Core PH30 Status Register */
255 __be32 pcph30setr; /* Physical Core PH30 Set Control Register */
256 __be32 pcph30clrr; /* Physical Core PH30 Clear Control Register */
257 __be32 pcph30psr; /* Physical Core PH30 Prev Status Register */
258 u8 res_100[32];
259 __be32 ippwrgatecr; /* IP Power Gating Control Register */
260 u8 res_124[12];
261 __be32 powmgtcsr; /* Power Management Control & Status Reg */
262#define RCPM_POWMGTCSR_LPM20_RQ 0x00100000
263#define RCPM_POWMGTCSR_LPM20_ST 0x00000200
264#define RCPM_POWMGTCSR_P_LPM20_ST 0x00000100
265 u8 res_134[12];
266 __be32 ippdexpcr[4]; /* IP Powerdown Exception Control Reg */
267 u8 res_150[12];
268 __be32 tpmimr0; /* Thread PM Interrupt Mask Reg */
269 u8 res_160[12];
270 __be32 tpmcimr0; /* Thread PM Crit Interrupt Mask Reg */
271 u8 res_170[12];
272 __be32 tpmmcmr0; /* Thread PM Machine Check Interrupt Mask Reg */
273 u8 res_180[12];
274 __be32 tpmnmimr0; /* Thread PM NMI Mask Reg */
275 u8 res_190[12];
276 __be32 tmcpmaskcr0; /* Thread Machine Check Mask Control Reg */
277 __be32 pctbenr; /* Physical Core Time Base Enable Reg */
278 __be32 pctbclkselr; /* Physical Core Time Base Clock Select */
279 __be32 tbclkdivr; /* Time Base Clock Divider Register */
280 u8 res_1ac[4];
281 __be32 ttbhltcr[4]; /* Thread Time Base Halt Control Register */
282 __be32 clpcl10sr; /* Cluster PCL10 Status Register */
283 __be32 clpcl10setr; /* Cluster PCL30 Set Control Register */
284 __be32 clpcl10clrr; /* Cluster PCL30 Clear Control Register */
285 __be32 clpcl10psr; /* Cluster PCL30 Prev Status Register */
286 __be32 cddslpsetr; /* Core Domain Deep Sleep Set Register */
287 __be32 cddslpclrr; /* Core Domain Deep Sleep Clear Register */
288 __be32 cdpwroksetr; /* Core Domain Power OK Set Register */
289 __be32 cdpwrokclrr; /* Core Domain Power OK Clear Register */
290 __be32 cdpwrensr; /* Core Domain Power Enable Status Register */
291 __be32 cddslsr; /* Core Domain Deep Sleep Status Register */
292 u8 res_1e8[8];
293 __be32 dslpcntcr[8]; /* Deep Sleep Counter Cfg Register */
294 u8 res_300[3568];
295};
296
192#endif 297#endif
diff --git a/include/soc/fsl/qe/qe.h b/include/soc/fsl/qe/qe.h
index c7fa36c335c9..33b29ead3d55 100644
--- a/include/soc/fsl/qe/qe.h
+++ b/include/soc/fsl/qe/qe.h
@@ -103,8 +103,6 @@ int cpm_muram_init(void);
103unsigned long cpm_muram_alloc(unsigned long size, unsigned long align); 103unsigned long cpm_muram_alloc(unsigned long size, unsigned long align);
104int cpm_muram_free(unsigned long offset); 104int cpm_muram_free(unsigned long offset);
105unsigned long cpm_muram_alloc_fixed(unsigned long offset, unsigned long size); 105unsigned long cpm_muram_alloc_fixed(unsigned long offset, unsigned long size);
106unsigned long cpm_muram_alloc_common(unsigned long size, genpool_algo_t algo,
107 void *data);
108void __iomem *cpm_muram_addr(unsigned long offset); 106void __iomem *cpm_muram_addr(unsigned long offset);
109unsigned long cpm_muram_offset(void __iomem *addr); 107unsigned long cpm_muram_offset(void __iomem *addr);
110dma_addr_t cpm_muram_dma(void __iomem *addr); 108dma_addr_t cpm_muram_dma(void __iomem *addr);