aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2008-01-23 23:29:14 -0500
committerPaul Mackerras <paulus@samba.org>2008-01-23 23:29:14 -0500
commitdcb571be2019ae677bc5ed64437dbc87ae1eb67f (patch)
tree1b93f9ea3568be4dcc49ffb2adc0d3ab0a02b47f
parent9156ad48338e0306e508ead5c0d9986050744475 (diff)
parent96f39c1718091d63dc1c5012d566737ea0d2a20c (diff)
Merge branch 'for-2.6.25' of master.kernel.org:/pub/scm/linux/kernel/git/galak/powerpc into for-2.6.25
-rw-r--r--Documentation/powerpc/00-INDEX3
-rw-r--r--Documentation/powerpc/booting-without-of.txt91
-rw-r--r--Documentation/powerpc/qe_firmware.txt295
-rw-r--r--arch/powerpc/Kconfig3
-rw-r--r--arch/powerpc/boot/.gitignore1
-rw-r--r--arch/powerpc/boot/Makefile10
-rw-r--r--arch/powerpc/boot/cuboot-824x.c53
-rw-r--r--arch/powerpc/boot/cuboot-83xx.c3
-rw-r--r--arch/powerpc/boot/cuboot-85xx.c5
-rw-r--r--arch/powerpc/boot/devtree.c14
-rw-r--r--arch/powerpc/boot/dts/adder875-redboot.dts184
-rw-r--r--arch/powerpc/boot/dts/adder875-uboot.dts183
-rw-r--r--arch/powerpc/boot/dts/ep8248e.dts207
-rw-r--r--arch/powerpc/boot/dts/mpc8313erdb.dts49
-rw-r--r--arch/powerpc/boot/dts/mpc832x_mds.dts51
-rw-r--r--arch/powerpc/boot/dts/mpc8349emitx.dts30
-rw-r--r--arch/powerpc/boot/dts/mpc8349emitxgp.dts1
-rw-r--r--arch/powerpc/boot/dts/mpc834x_mds.dts2
-rw-r--r--arch/powerpc/boot/dts/mpc836x_mds.dts1
-rw-r--r--arch/powerpc/boot/dts/mpc8377_mds.dts279
-rw-r--r--arch/powerpc/boot/dts/mpc8378_mds.dts265
-rw-r--r--arch/powerpc/boot/dts/mpc8379_mds.dts293
-rw-r--r--arch/powerpc/boot/dts/mpc8544ds.dts6
-rw-r--r--arch/powerpc/boot/dts/mpc8572ds.dts7
-rw-r--r--arch/powerpc/boot/dts/mpc8610_hpcd.dts113
-rw-r--r--arch/powerpc/boot/dts/mpc8641_hpcn.dts48
-rw-r--r--arch/powerpc/boot/dts/storcenter.dts138
-rw-r--r--arch/powerpc/boot/ep8248e.c55
-rw-r--r--arch/powerpc/boot/ops.h14
-rw-r--r--arch/powerpc/boot/redboot-8xx.c58
-rw-r--r--arch/powerpc/boot/redboot.h56
-rwxr-xr-xarch/powerpc/boot/wrapper2
-rw-r--r--arch/powerpc/configs/adder875-redboot_defconfig798
-rw-r--r--arch/powerpc/configs/adder875-uboot_defconfig798
-rw-r--r--arch/powerpc/configs/ep8248e_defconfig821
-rw-r--r--arch/powerpc/configs/mpc8313_rdb_defconfig46
-rw-r--r--arch/powerpc/configs/mpc834x_itx_defconfig3
-rw-r--r--arch/powerpc/configs/mpc8610_hpcd_defconfig171
-rw-r--r--arch/powerpc/configs/storcenter_defconfig1174
-rw-r--r--arch/powerpc/kernel/Makefile1
-rw-r--r--arch/powerpc/kernel/head_fsl_booke.S20
-rw-r--r--arch/powerpc/kernel/pci-common.c8
-rw-r--r--arch/powerpc/kernel/pci_32.c58
-rw-r--r--arch/powerpc/kernel/rio.c (renamed from arch/ppc/kernel/rio.c)0
-rw-r--r--arch/powerpc/math-emu/op-4.h40
-rw-r--r--arch/powerpc/mm/fsl_booke_mmu.c6
-rw-r--r--arch/powerpc/mm/lmb.c13
-rw-r--r--arch/powerpc/mm/mem.c21
-rw-r--r--arch/powerpc/platforms/82xx/Kconfig13
-rw-r--r--arch/powerpc/platforms/82xx/Makefile1
-rw-r--r--arch/powerpc/platforms/82xx/ep8248e.c324
-rw-r--r--arch/powerpc/platforms/83xx/mpc8313_rdb.c13
-rw-r--r--arch/powerpc/platforms/83xx/mpc832x_mds.c5
-rw-r--r--arch/powerpc/platforms/83xx/mpc832x_rdb.c10
-rw-r--r--arch/powerpc/platforms/83xx/mpc834x_itx.c12
-rw-r--r--arch/powerpc/platforms/83xx/mpc834x_mds.c5
-rw-r--r--arch/powerpc/platforms/83xx/mpc836x_mds.c5
-rw-r--r--arch/powerpc/platforms/83xx/mpc837x_mds.c56
-rw-r--r--arch/powerpc/platforms/83xx/mpc83xx.h3
-rw-r--r--arch/powerpc/platforms/83xx/usb.c46
-rw-r--r--arch/powerpc/platforms/85xx/mpc85xx_ads.c18
-rw-r--r--arch/powerpc/platforms/85xx/mpc85xx_cds.c6
-rw-r--r--arch/powerpc/platforms/85xx/mpc85xx_mds.c7
-rw-r--r--arch/powerpc/platforms/86xx/mpc8610_hpcd.c15
-rw-r--r--arch/powerpc/platforms/86xx/mpc86xx_hpcn.c14
-rw-r--r--arch/powerpc/platforms/8xx/Kconfig9
-rw-r--r--arch/powerpc/platforms/8xx/Makefile1
-rw-r--r--arch/powerpc/platforms/8xx/adder875.c118
-rw-r--r--arch/powerpc/platforms/8xx/ep88xc.c5
-rw-r--r--arch/powerpc/platforms/8xx/mpc86xads_setup.c5
-rw-r--r--arch/powerpc/platforms/8xx/mpc885ads_setup.c5
-rw-r--r--arch/powerpc/platforms/Kconfig6
-rw-r--r--arch/powerpc/platforms/embedded6xx/Kconfig23
-rw-r--r--arch/powerpc/platforms/embedded6xx/Makefile1
-rw-r--r--arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c2
-rw-r--r--arch/powerpc/platforms/embedded6xx/storcenter.c192
-rw-r--r--arch/powerpc/sysdev/Makefile3
-rw-r--r--arch/powerpc/sysdev/fsl_pci.c150
-rw-r--r--arch/powerpc/sysdev/fsl_rio.c (renamed from arch/ppc/syslib/ppc85xx_rio.c)0
-rw-r--r--arch/powerpc/sysdev/fsl_rio.h (renamed from arch/ppc/syslib/ppc85xx_rio.h)0
-rw-r--r--arch/powerpc/sysdev/fsl_soc.c103
-rw-r--r--arch/powerpc/sysdev/ipic.c62
-rw-r--r--arch/powerpc/sysdev/mpic.c4
-rw-r--r--arch/powerpc/sysdev/qe_lib/Kconfig2
-rw-r--r--arch/powerpc/sysdev/qe_lib/qe.c247
-rw-r--r--arch/powerpc/sysdev/qe_lib/ucc_slow.c10
-rw-r--r--arch/ppc/kernel/Makefile1
-rw-r--r--arch/ppc/platforms/85xx/mpc85xx_ads_common.c3
-rw-r--r--arch/ppc/platforms/85xx/stx_gp3.c2
-rw-r--r--arch/ppc/platforms/85xx/tqm85xx.c2
-rw-r--r--arch/ppc/syslib/Makefile1
-rw-r--r--drivers/net/fs_enet/fs_enet-main.c9
-rw-r--r--drivers/net/phy/Kconfig32
-rw-r--r--drivers/net/phy/fixed.c445
-rw-r--r--drivers/rapidio/rio.c5
-rw-r--r--drivers/serial/Kconfig10
-rw-r--r--drivers/serial/Makefile1
-rw-r--r--drivers/serial/cpm_uart/cpm_uart_cpm2.c2
-rw-r--r--drivers/serial/ucc_uart.c1514
-rw-r--r--include/asm-powerpc/immap_qe.h34
-rw-r--r--include/asm-powerpc/lmb.h1
-rw-r--r--include/asm-powerpc/mpc8260.h1
-rw-r--r--include/asm-powerpc/pci-bridge.h3
-rw-r--r--include/asm-powerpc/qe.h61
-rw-r--r--include/asm-powerpc/system.h2
-rw-r--r--include/linux/phy_fixed.h51
106 files changed, 9507 insertions, 672 deletions
diff --git a/Documentation/powerpc/00-INDEX b/Documentation/powerpc/00-INDEX
index 94a3c577b083..3be84aa38dfe 100644
--- a/Documentation/powerpc/00-INDEX
+++ b/Documentation/powerpc/00-INDEX
@@ -28,3 +28,6 @@ sound.txt
28 - info on sound support under Linux/PPC 28 - info on sound support under Linux/PPC
29zImage_layout.txt 29zImage_layout.txt
30 - info on the kernel images for Linux/PPC 30 - info on the kernel images for Linux/PPC
31qe_firmware.txt
32 - describes the layout of firmware binaries for the Freescale QUICC
33 Engine and the code that parses and uploads the microcode therein.
diff --git a/Documentation/powerpc/booting-without-of.txt b/Documentation/powerpc/booting-without-of.txt
index 6d1d0856063e..da98154328a0 100644
--- a/Documentation/powerpc/booting-without-of.txt
+++ b/Documentation/powerpc/booting-without-of.txt
@@ -52,7 +52,11 @@ Table of Contents
52 i) Freescale QUICC Engine module (QE) 52 i) Freescale QUICC Engine module (QE)
53 j) CFI or JEDEC memory-mapped NOR flash 53 j) CFI or JEDEC memory-mapped NOR flash
54 k) Global Utilities Block 54 k) Global Utilities Block
55 l) Xilinx IP cores 55 l) Freescale Communications Processor Module
56 m) Chipselect/Local Bus
57 n) 4xx/Axon EMAC ethernet nodes
58 o) Xilinx IP cores
59 p) Freescale Synchronous Serial Interface
56 60
57 VII - Specifying interrupt information for devices 61 VII - Specifying interrupt information for devices
58 1) interrupts property 62 1) interrupts property
@@ -1257,6 +1261,10 @@ platforms are moved over to use the flattened-device-tree model.
1257 services interrupts for this device. 1261 services interrupts for this device.
1258 - phy-handle : The phandle for the PHY connected to this ethernet 1262 - phy-handle : The phandle for the PHY connected to this ethernet
1259 controller. 1263 controller.
1264 - fixed-link : <a b c d e> where a is emulated phy id - choose any,
1265 but unique to the all specified fixed-links, b is duplex - 0 half,
1266 1 full, c is link speed - d#10/d#100/d#1000, d is pause - 0 no
1267 pause, 1 pause, e is asym_pause - 0 no asym_pause, 1 asym_pause.
1260 1268
1261 Recommended properties: 1269 Recommended properties:
1262 1270
@@ -1411,7 +1419,6 @@ platforms are moved over to use the flattened-device-tree model.
1411 1419
1412 Example multi port host USB controller device node : 1420 Example multi port host USB controller device node :
1413 usb@22000 { 1421 usb@22000 {
1414 device_type = "usb";
1415 compatible = "fsl-usb2-mph"; 1422 compatible = "fsl-usb2-mph";
1416 reg = <22000 1000>; 1423 reg = <22000 1000>;
1417 #address-cells = <1>; 1424 #address-cells = <1>;
@@ -1425,7 +1432,6 @@ platforms are moved over to use the flattened-device-tree model.
1425 1432
1426 Example dual role USB controller device node : 1433 Example dual role USB controller device node :
1427 usb@23000 { 1434 usb@23000 {
1428 device_type = "usb";
1429 compatible = "fsl-usb2-dr"; 1435 compatible = "fsl-usb2-dr";
1430 reg = <23000 1000>; 1436 reg = <23000 1000>;
1431 #address-cells = <1>; 1437 #address-cells = <1>;
@@ -1589,7 +1595,6 @@ platforms are moved over to use the flattened-device-tree model.
1589 iii) USB (Universal Serial Bus Controller) 1595 iii) USB (Universal Serial Bus Controller)
1590 1596
1591 Required properties: 1597 Required properties:
1592 - device_type : should be "usb".
1593 - compatible : could be "qe_udc" or "fhci-hcd". 1598 - compatible : could be "qe_udc" or "fhci-hcd".
1594 - mode : the could be "host" or "slave". 1599 - mode : the could be "host" or "slave".
1595 - reg : Offset and length of the register set for the device 1600 - reg : Offset and length of the register set for the device
@@ -1603,7 +1608,6 @@ platforms are moved over to use the flattened-device-tree model.
1603 1608
1604 Example(slave): 1609 Example(slave):
1605 usb@6c0 { 1610 usb@6c0 {
1606 device_type = "usb";
1607 compatible = "qe_udc"; 1611 compatible = "qe_udc";
1608 reg = <6c0 40>; 1612 reg = <6c0 40>;
1609 interrupts = <8b 0>; 1613 interrupts = <8b 0>;
@@ -1616,7 +1620,7 @@ platforms are moved over to use the flattened-device-tree model.
1616 1620
1617 Required properties: 1621 Required properties:
1618 - device_type : should be "network", "hldc", "uart", "transparent" 1622 - device_type : should be "network", "hldc", "uart", "transparent"
1619 "bisync" or "atm". 1623 "bisync", "atm", or "serial".
1620 - compatible : could be "ucc_geth" or "fsl_atm" and so on. 1624 - compatible : could be "ucc_geth" or "fsl_atm" and so on.
1621 - model : should be "UCC". 1625 - model : should be "UCC".
1622 - device-id : the ucc number(1-8), corresponding to UCCx in UM. 1626 - device-id : the ucc number(1-8), corresponding to UCCx in UM.
@@ -1629,6 +1633,13 @@ platforms are moved over to use the flattened-device-tree model.
1629 - interrupt-parent : the phandle for the interrupt controller that 1633 - interrupt-parent : the phandle for the interrupt controller that
1630 services interrupts for this device. 1634 services interrupts for this device.
1631 - pio-handle : The phandle for the Parallel I/O port configuration. 1635 - pio-handle : The phandle for the Parallel I/O port configuration.
1636 - port-number : for UART drivers, the port number to use, between 0 and 3.
1637 This usually corresponds to the /dev/ttyQE device, e.g. <0> = /dev/ttyQE0.
1638 The port number is added to the minor number of the device. Unlike the
1639 CPM UART driver, the port-number is required for the QE UART driver.
1640 - soft-uart : for UART drivers, if specified this means the QE UART device
1641 driver should use "Soft-UART" mode, which is needed on some SOCs that have
1642 broken UART hardware. Soft-UART is provided via a microcode upload.
1632 - rx-clock-name: the UCC receive clock source 1643 - rx-clock-name: the UCC receive clock source
1633 "none": clock source is disabled 1644 "none": clock source is disabled
1634 "brg1" through "brg16": clock source is BRG1-BRG16, respectively 1645 "brg1" through "brg16": clock source is BRG1-BRG16, respectively
@@ -1788,6 +1799,32 @@ platforms are moved over to use the flattened-device-tree model.
1788 }; 1799 };
1789 }; 1800 };
1790 1801
1802 viii) Uploaded QE firmware
1803
1804 If a new firwmare has been uploaded to the QE (usually by the
1805 boot loader), then a 'firmware' child node should be added to the QE
1806 node. This node provides information on the uploaded firmware that
1807 device drivers may need.
1808
1809 Required properties:
1810 - id: The string name of the firmware. This is taken from the 'id'
1811 member of the qe_firmware structure of the uploaded firmware.
1812 Device drivers can search this string to determine if the
1813 firmware they want is already present.
1814 - extended-modes: The Extended Modes bitfield, taken from the
1815 firmware binary. It is a 64-bit number represented
1816 as an array of two 32-bit numbers.
1817 - virtual-traps: The virtual traps, taken from the firmware binary.
1818 It is an array of 8 32-bit numbers.
1819
1820 Example:
1821
1822 firmware {
1823 id = "Soft-UART";
1824 extended-modes = <0 0>;
1825 virtual-traps = <0 0 0 0 0 0 0 0>;
1826 }
1827
1791 j) CFI or JEDEC memory-mapped NOR flash 1828 j) CFI or JEDEC memory-mapped NOR flash
1792 1829
1793 Flash chips (Memory Technology Devices) are often used for solid state 1830 Flash chips (Memory Technology Devices) are often used for solid state
@@ -2269,7 +2306,7 @@ platforms are moved over to use the flattened-device-tree model.
2269 available. 2306 available.
2270 For Axon: 0x0000012a 2307 For Axon: 0x0000012a
2271 2308
2272 l) Xilinx IP cores 2309 o) Xilinx IP cores
2273 2310
2274 The Xilinx EDK toolchain ships with a set of IP cores (devices) for use 2311 The Xilinx EDK toolchain ships with a set of IP cores (devices) for use
2275 in Xilinx Spartan and Virtex FPGAs. The devices cover the whole range 2312 in Xilinx Spartan and Virtex FPGAs. The devices cover the whole range
@@ -2539,6 +2576,46 @@ platforms are moved over to use the flattened-device-tree model.
2539 Requred properties: 2576 Requred properties:
2540 - current-speed : Baud rate of uartlite 2577 - current-speed : Baud rate of uartlite
2541 2578
2579 p) Freescale Synchronous Serial Interface
2580
2581 The SSI is a serial device that communicates with audio codecs. It can
2582 be programmed in AC97, I2S, left-justified, or right-justified modes.
2583
2584 Required properties:
2585 - compatible : compatible list, containing "fsl,ssi"
2586 - cell-index : the SSI, <0> = SSI1, <1> = SSI2, and so on
2587 - reg : offset and length of the register set for the device
2588 - interrupts : <a b> where a is the interrupt number and b is a
2589 field that represents an encoding of the sense and
2590 level information for the interrupt. This should be
2591 encoded based on the information in section 2)
2592 depending on the type of interrupt controller you
2593 have.
2594 - interrupt-parent : the phandle for the interrupt controller that
2595 services interrupts for this device.
2596 - fsl,mode : the operating mode for the SSI interface
2597 "i2s-slave" - I2S mode, SSI is clock slave
2598 "i2s-master" - I2S mode, SSI is clock master
2599 "lj-slave" - left-justified mode, SSI is clock slave
2600 "lj-master" - l.j. mode, SSI is clock master
2601 "rj-slave" - right-justified mode, SSI is clock slave
2602 "rj-master" - r.j., SSI is clock master
2603 "ac97-slave" - AC97 mode, SSI is clock slave
2604 "ac97-master" - AC97 mode, SSI is clock master
2605
2606 Optional properties:
2607 - codec-handle : phandle to a 'codec' node that defines an audio
2608 codec connected to this SSI. This node is typically
2609 a child of an I2C or other control node.
2610
2611 Child 'codec' node required properties:
2612 - compatible : compatible list, contains the name of the codec
2613
2614 Child 'codec' node optional properties:
2615 - clock-frequency : The frequency of the input clock, which typically
2616 comes from an on-board dedicated oscillator.
2617
2618
2542 More devices will be defined as this spec matures. 2619 More devices will be defined as this spec matures.
2543 2620
2544VII - Specifying interrupt information for devices 2621VII - Specifying interrupt information for devices
diff --git a/Documentation/powerpc/qe_firmware.txt b/Documentation/powerpc/qe_firmware.txt
new file mode 100644
index 000000000000..896266432d33
--- /dev/null
+++ b/Documentation/powerpc/qe_firmware.txt
@@ -0,0 +1,295 @@
1 Freescale QUICC Engine Firmware Uploading
2 -----------------------------------------
3
4(c) 2007 Timur Tabi <timur at freescale.com>,
5 Freescale Semiconductor
6
7Table of Contents
8=================
9
10 I - Software License for Firmware
11
12 II - Microcode Availability
13
14 III - Description and Terminology
15
16 IV - Microcode Programming Details
17
18 V - Firmware Structure Layout
19
20 VI - Sample Code for Creating Firmware Files
21
22Revision Information
23====================
24
25November 30, 2007: Rev 1.0 - Initial version
26
27I - Software License for Firmware
28=================================
29
30Each firmware file comes with its own software license. For information on
31the particular license, please see the license text that is distributed with
32the firmware.
33
34II - Microcode Availability
35===========================
36
37Firmware files are distributed through various channels. Some are available on
38http://opensource.freescale.com. For other firmware files, please contact
39your Freescale representative or your operating system vendor.
40
41III - Description and Terminology
42================================
43
44In this document, the term 'microcode' refers to the sequence of 32-bit
45integers that compose the actual QE microcode.
46
47The term 'firmware' refers to a binary blob that contains the microcode as
48well as other data that
49
50 1) describes the microcode's purpose
51 2) describes how and where to upload the microcode
52 3) specifies the values of various registers
53 4) includes additional data for use by specific device drivers
54
55Firmware files are binary files that contain only a firmware.
56
57IV - Microcode Programming Details
58===================================
59
60The QE architecture allows for only one microcode present in I-RAM for each
61RISC processor. To replace any current microcode, a full QE reset (which
62disables the microcode) must be performed first.
63
64QE microcode is uploaded using the following procedure:
65
661) The microcode is placed into I-RAM at a specific location, using the
67 IRAM.IADD and IRAM.IDATA registers.
68
692) The CERCR.CIR bit is set to 0 or 1, depending on whether the firmware
70 needs split I-RAM. Split I-RAM is only meaningful for SOCs that have
71 QEs with multiple RISC processors, such as the 8360. Splitting the I-RAM
72 allows each processor to run a different microcode, effectively creating an
73 asymmetric multiprocessing (AMP) system.
74
753) The TIBCR trap registers are loaded with the addresses of the trap handlers
76 in the microcode.
77
784) The RSP.ECCR register is programmed with the value provided.
79
805) If necessary, device drivers that need the virtual traps and extended mode
81 data will use them.
82
83Virtual Microcode Traps
84
85These virtual traps are conditional branches in the microcode. These are
86"soft" provisional introduced in the ROMcode in order to enable higher
87flexibility and save h/w traps If new features are activated or an issue is
88being fixed in the RAM package utilizing they should be activated. This data
89structure signals the microcode which of these virtual traps is active.
90
91This structure contains 6 words that the application should copy to some
92specific been defined. This table describes the structure.
93
94 ---------------------------------------------------------------
95 | Offset in | | Destination Offset | Size of |
96 | array | Protocol | within PRAM | Operand |
97 --------------------------------------------------------------|
98 | 0 | Ethernet | 0xF8 | 4 bytes |
99 | | interworking | | |
100 ---------------------------------------------------------------
101 | 4 | ATM | 0xF8 | 4 bytes |
102 | | interworking | | |
103 ---------------------------------------------------------------
104 | 8 | PPP | 0xF8 | 4 bytes |
105 | | interworking | | |
106 ---------------------------------------------------------------
107 | 12 | Ethernet RX | 0x22 | 1 byte |
108 | | Distributor Page | | |
109 ---------------------------------------------------------------
110 | 16 | ATM Globtal | 0x28 | 1 byte |
111 | | Params Table | | |
112 ---------------------------------------------------------------
113 | 20 | Insert Frame | 0xF8 | 4 bytes |
114 ---------------------------------------------------------------
115
116
117Extended Modes
118
119This is a double word bit array (64 bits) that defines special functionality
120which has an impact on the softwarew drivers. Each bit has its own impact
121and has special instructions for the s/w associated with it. This structure is
122described in this table:
123
124 -----------------------------------------------------------------------
125 | Bit # | Name | Description |
126 -----------------------------------------------------------------------
127 | 0 | General | Indicates that prior to each host command |
128 | | push command | given by the application, the software must |
129 | | | assert a special host command (push command)|
130 | | | CECDR = 0x00800000. |
131 | | | CECR = 0x01c1000f. |
132 -----------------------------------------------------------------------
133 | 1 | UCC ATM | Indicates that after issuing ATM RX INIT |
134 | | RX INIT | command, the host must issue another special|
135 | | push command | command (push command) and immediately |
136 | | | following that re-issue the ATM RX INIT |
137 | | | command. (This makes the sequence of |
138 | | | initializing the ATM receiver a sequence of |
139 | | | three host commands) |
140 | | | CECDR = 0x00800000. |
141 | | | CECR = 0x01c1000f. |
142 -----------------------------------------------------------------------
143 | 2 | Add/remove | Indicates that following the specific host |
144 | | command | command: "Add/Remove entry in Hash Lookup |
145 | | validation | Table" used in Interworking setup, the user |
146 | | | must issue another command. |
147 | | | CECDR = 0xce000003. |
148 | | | CECR = 0x01c10f58. |
149 -----------------------------------------------------------------------
150 | 3 | General push | Indicates that the s/w has to initialize |
151 | | command | some pointers in the Ethernet thread pages |
152 | | | which are used when Header Compression is |
153 | | | activated. The full details of these |
154 | | | pointers is located in the software drivers.|
155 -----------------------------------------------------------------------
156 | 4 | General push | Indicates that after issuing Ethernet TX |
157 | | command | INIT command, user must issue this command |
158 | | | for each SNUM of Ethernet TX thread. |
159 | | | CECDR = 0x00800003. |
160 | | | CECR = 0x7'b{0}, 8'b{Enet TX thread SNUM}, |
161 | | | 1'b{1}, 12'b{0}, 4'b{1} |
162 -----------------------------------------------------------------------
163 | 5 - 31 | N/A | Reserved, set to zero. |
164 -----------------------------------------------------------------------
165
166V - Firmware Structure Layout
167==============================
168
169QE microcode from Freescale is typically provided as a header file. This
170header file contains macros that define the microcode binary itself as well as
171some other data used in uploading that microcode. The format of these files
172do not lend themselves to simple inclusion into other code. Hence,
173the need for a more portable format. This section defines that format.
174
175Instead of distributing a header file, the microcode and related data are
176embedded into a binary blob. This blob is passed to the qe_upload_firmware()
177function, which parses the blob and performs everything necessary to upload
178the microcode.
179
180All integers are big-endian. See the comments for function
181qe_upload_firmware() for up-to-date implementation information.
182
183This structure supports versioning, where the version of the structure is
184embedded into the structure itself. To ensure forward and backwards
185compatibility, all versions of the structure must use the same 'qe_header'
186structure at the beginning.
187
188'header' (type: struct qe_header):
189 The 'length' field is the size, in bytes, of the entire structure,
190 including all the microcode embedded in it, as well as the CRC (if
191 present).
192
193 The 'magic' field is an array of three bytes that contains the letters
194 'Q', 'E', and 'F'. This is an identifier that indicates that this
195 structure is a QE Firmware structure.
196
197 The 'version' field is a single byte that indicates the version of this
198 structure. If the layout of the structure should ever need to be
199 changed to add support for additional types of microcode, then the
200 version number should also be changed.
201
202The 'id' field is a null-terminated string(suitable for printing) that
203identifies the firmware.
204
205The 'count' field indicates the number of 'microcode' structures. There
206must be one and only one 'microcode' structure for each RISC processor.
207Therefore, this field also represents the number of RISC processors for this
208SOC.
209
210The 'soc' structure contains the SOC numbers and revisions used to match
211the microcode to the SOC itself. Normally, the microcode loader should
212check the data in this structure with the SOC number and revisions, and
213only upload the microcode if there's a match. However, this check is not
214made on all platforms.
215
216Although it is not recommended, you can specify '0' in the soc.model
217field to skip matching SOCs altogether.
218
219The 'model' field is a 16-bit number that matches the actual SOC. The
220'major' and 'minor' fields are the major and minor revision numbrs,
221respectively, of the SOC.
222
223For example, to match the 8323, revision 1.0:
224 soc.model = 8323
225 soc.major = 1
226 soc.minor = 0
227
228'padding' is neccessary for structure alignment. This field ensures that the
229'extended_modes' field is aligned on a 64-bit boundary.
230
231'extended_modes' is a bitfield that defines special functionality which has an
232impact on the device drivers. Each bit has its own impact and has special
233instructions for the driver associated with it. This field is stored in
234the QE library and available to any driver that calles qe_get_firmware_info().
235
236'vtraps' is an array of 8 words that contain virtual trap values for each
237virtual traps. As with 'extended_modes', this field is stored in the QE
238library and available to any driver that calles qe_get_firmware_info().
239
240'microcode' (type: struct qe_microcode):
241 For each RISC processor there is one 'microcode' structure. The first
242 'microcode' structure is for the first RISC, and so on.
243
244 The 'id' field is a null-terminated string suitable for printing that
245 identifies this particular microcode.
246
247 'traps' is an array of 16 words that contain hardware trap values
248 for each of the 16 traps. If trap[i] is 0, then this particular
249 trap is to be ignored (i.e. not written to TIBCR[i]). The entire value
250 is written as-is to the TIBCR[i] register, so be sure to set the EN
251 and T_IBP bits if necessary.
252
253 'eccr' is the value to program into the ECCR register.
254
255 'iram_offset' is the offset into IRAM to start writing the
256 microcode.
257
258 'count' is the number of 32-bit words in the microcode.
259
260 'code_offset' is the offset, in bytes, from the beginning of this
261 structure where the microcode itself can be found. The first
262 microcode binary should be located immediately after the 'microcode'
263 array.
264
265 'major', 'minor', and 'revision' are the major, minor, and revision
266 version numbers, respectively, of the microcode. If all values are 0,
267 then these fields are ignored.
268
269 'reserved' is necessary for structure alignment. Since 'microcode'
270 is an array, the 64-bit 'extended_modes' field needs to be aligned
271 on a 64-bit boundary, and this can only happen if the size of
272 'microcode' is a multiple of 8 bytes. To ensure that, we add
273 'reserved'.
274
275After the last microcode is a 32-bit CRC. It can be calculated using
276this algorithm:
277
278u32 crc32(const u8 *p, unsigned int len)
279{
280 unsigned int i;
281 u32 crc = 0;
282
283 while (len--) {
284 crc ^= *p++;
285 for (i = 0; i < 8; i++)
286 crc = (crc >> 1) ^ ((crc & 1) ? 0xedb88320 : 0);
287 }
288 return crc;
289}
290
291VI - Sample Code for Creating Firmware Files
292============================================
293
294A Python program that creates firmware binaries from the header files normally
295distributed by Freescale can be found on http://opensource.freescale.com.
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 53d0955abf11..9ae800d81f89 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -140,6 +140,9 @@ config DEFAULT_UIMAGE
140 Used to allow a board to specify it wants a uImage built by default 140 Used to allow a board to specify it wants a uImage built by default
141 default n 141 default n
142 142
143config REDBOOT
144 bool
145
143config PPC64_SWSUSP 146config PPC64_SWSUSP
144 bool 147 bool
145 depends on PPC64 && (BROKEN || (PPC_PMAC64 && EXPERIMENTAL)) 148 depends on PPC64 && (BROKEN || (PPC_PMAC64 && EXPERIMENTAL))
diff --git a/arch/powerpc/boot/.gitignore b/arch/powerpc/boot/.gitignore
index b160322a87ad..5ef2bdf8d189 100644
--- a/arch/powerpc/boot/.gitignore
+++ b/arch/powerpc/boot/.gitignore
@@ -31,6 +31,7 @@ zImage.*lds
31zImage.miboot 31zImage.miboot
32zImage.pmac 32zImage.pmac
33zImage.pseries 33zImage.pseries
34zImage.redboot*
34zImage.sandpoint 35zImage.sandpoint
35zImage.vmode 36zImage.vmode
36zconf.h 37zconf.h
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile
index d1e625c073bb..1e20aca48f45 100644
--- a/arch/powerpc/boot/Makefile
+++ b/arch/powerpc/boot/Makefile
@@ -57,12 +57,12 @@ src-wlib := string.S crt0.S stdio.c main.c \
57 4xx.c ebony.c mv64x60.c mpsc.c mv64x60_i2c.c cuboot.c bamboo.c \ 57 4xx.c ebony.c mv64x60.c mpsc.c mv64x60_i2c.c cuboot.c bamboo.c \
58 cpm-serial.c stdlib.c mpc52xx-psc.c planetcore.c uartlite.c \ 58 cpm-serial.c stdlib.c mpc52xx-psc.c planetcore.c uartlite.c \
59 fsl-soc.c mpc8xx.c pq2.c 59 fsl-soc.c mpc8xx.c pq2.c
60src-plat := of.c cuboot-52xx.c cuboot-83xx.c cuboot-85xx.c holly.c \ 60src-plat := of.c cuboot-52xx.c cuboot-824x.c cuboot-83xx.c cuboot-85xx.c holly.c \
61 cuboot-ebony.c treeboot-ebony.c prpmc2800.c \ 61 cuboot-ebony.c treeboot-ebony.c prpmc2800.c \
62 ps3-head.S ps3-hvcall.S ps3.c treeboot-bamboo.c cuboot-8xx.c \ 62 ps3-head.S ps3-hvcall.S ps3.c treeboot-bamboo.c cuboot-8xx.c \
63 cuboot-pq2.c cuboot-sequoia.c treeboot-walnut.c cuboot-bamboo.c \ 63 cuboot-pq2.c cuboot-sequoia.c treeboot-walnut.c cuboot-bamboo.c \
64 fixed-head.S ep88xc.c cuboot-hpc2.c ep405.c cuboot-taishan.c \ 64 fixed-head.S ep88xc.c cuboot-hpc2.c ep405.c cuboot-taishan.c \
65 cuboot-katmai.c cuboot-rainier.c 65 cuboot-katmai.c cuboot-rainier.c redboot-8xx.c ep8248e.c
66src-boot := $(src-wlib) $(src-plat) empty.c 66src-boot := $(src-wlib) $(src-plat) empty.c
67 67
68src-boot := $(addprefix $(obj)/, $(src-boot)) 68src-boot := $(addprefix $(obj)/, $(src-boot))
@@ -195,7 +195,9 @@ image-$(CONFIG_PPC_8xx) += cuImage.8xx
195image-$(CONFIG_PPC_EP88XC) += zImage.ep88xc 195image-$(CONFIG_PPC_EP88XC) += zImage.ep88xc
196image-$(CONFIG_EP405) += zImage.ep405 196image-$(CONFIG_EP405) += zImage.ep405
197image-$(CONFIG_8260) += cuImage.pq2 197image-$(CONFIG_8260) += cuImage.pq2
198image-$(CONFIG_EP8248E) += zImage.ep8248e
198image-$(CONFIG_PPC_MPC52xx) += cuImage.52xx 199image-$(CONFIG_PPC_MPC52xx) += cuImage.52xx
200image-$(CONFIG_STORCENTER) += cuImage.824x
199image-$(CONFIG_PPC_83xx) += cuImage.83xx 201image-$(CONFIG_PPC_83xx) += cuImage.83xx
200image-$(CONFIG_PPC_85xx) += cuImage.85xx 202image-$(CONFIG_PPC_85xx) += cuImage.85xx
201image-$(CONFIG_MPC7448HPC2) += cuImage.hpc2 203image-$(CONFIG_MPC7448HPC2) += cuImage.hpc2
@@ -208,6 +210,10 @@ image-$(CONFIG_TAISHAN) += cuImage.taishan
208image-$(CONFIG_KATMAI) += cuImage.katmai 210image-$(CONFIG_KATMAI) += cuImage.katmai
209endif 211endif
210 212
213ifneq ($(CONFIG_REDBOOT),"")
214image-$(CONFIG_PPC_8xx) += zImage.redboot-8xx
215endif
216
211# For 32-bit powermacs, build the COFF and miboot images 217# For 32-bit powermacs, build the COFF and miboot images
212# as well as the ELF images. 218# as well as the ELF images.
213ifeq ($(CONFIG_PPC32),y) 219ifeq ($(CONFIG_PPC32),y)
diff --git a/arch/powerpc/boot/cuboot-824x.c b/arch/powerpc/boot/cuboot-824x.c
new file mode 100644
index 000000000000..ced90c53de48
--- /dev/null
+++ b/arch/powerpc/boot/cuboot-824x.c
@@ -0,0 +1,53 @@
1/*
2 * Old U-boot compatibility for 824x
3 *
4 * Copyright (c) 2007 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 version 2 as published
8 * by the Free Software Foundation.
9 */
10
11#include "ops.h"
12#include "stdio.h"
13#include "cuboot.h"
14
15#define TARGET_824x
16#include "ppcboot.h"
17
18static bd_t bd;
19
20
21static void platform_fixups(void)
22{
23 void *soc;
24
25 dt_fixup_memory(bd.bi_memstart, bd.bi_memsize);
26 dt_fixup_mac_addresses(bd.bi_enetaddr);
27 dt_fixup_cpu_clocks(bd.bi_intfreq, bd.bi_busfreq / 4, bd.bi_busfreq);
28
29 soc = find_node_by_devtype(NULL, "soc");
30 if (soc) {
31 void *serial = NULL;
32
33 setprop(soc, "bus-frequency", &bd.bi_busfreq,
34 sizeof(bd.bi_busfreq));
35
36 while ((serial = find_node_by_devtype(serial, "serial"))) {
37 if (get_parent(serial) != soc)
38 continue;
39
40 setprop(serial, "clock-frequency", &bd.bi_busfreq,
41 sizeof(bd.bi_busfreq));
42 }
43 }
44}
45
46void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
47 unsigned long r6, unsigned long r7)
48{
49 CUBOOT_INIT();
50 fdt_init(_dtb_start);
51 serial_console_init();
52 platform_ops.fixups = platform_fixups;
53}
diff --git a/arch/powerpc/boot/cuboot-83xx.c b/arch/powerpc/boot/cuboot-83xx.c
index acd860ed7393..61af1c1e8255 100644
--- a/arch/powerpc/boot/cuboot-83xx.c
+++ b/arch/powerpc/boot/cuboot-83xx.c
@@ -24,7 +24,8 @@ static void platform_fixups(void)
24 void *soc; 24 void *soc;
25 25
26 dt_fixup_memory(bd.bi_memstart, bd.bi_memsize); 26 dt_fixup_memory(bd.bi_memstart, bd.bi_memsize);
27 dt_fixup_mac_addresses(bd.bi_enetaddr, bd.bi_enet1addr); 27 dt_fixup_mac_address_by_alias("ethernet0", bd.bi_enetaddr);
28 dt_fixup_mac_address_by_alias("ethernet1", bd.bi_enet1addr);
28 dt_fixup_cpu_clocks(bd.bi_intfreq, bd.bi_busfreq / 4, bd.bi_busfreq); 29 dt_fixup_cpu_clocks(bd.bi_intfreq, bd.bi_busfreq / 4, bd.bi_busfreq);
29 30
30 /* Unfortunately, the specific model number is encoded in the 31 /* Unfortunately, the specific model number is encoded in the
diff --git a/arch/powerpc/boot/cuboot-85xx.c b/arch/powerpc/boot/cuboot-85xx.c
index 943779ed19be..6776a1a29f13 100644
--- a/arch/powerpc/boot/cuboot-85xx.c
+++ b/arch/powerpc/boot/cuboot-85xx.c
@@ -24,8 +24,9 @@ static void platform_fixups(void)
24 void *soc; 24 void *soc;
25 25
26 dt_fixup_memory(bd.bi_memstart, bd.bi_memsize); 26 dt_fixup_memory(bd.bi_memstart, bd.bi_memsize);
27 dt_fixup_mac_addresses(bd.bi_enetaddr, bd.bi_enet1addr, 27 dt_fixup_mac_address_by_alias("ethernet0", bd.bi_enetaddr);
28 bd.bi_enet2addr); 28 dt_fixup_mac_address_by_alias("ethernet1", bd.bi_enet1addr);
29 dt_fixup_mac_address_by_alias("ethernet2", bd.bi_enet2addr);
29 dt_fixup_cpu_clocks(bd.bi_intfreq, bd.bi_busfreq / 8, bd.bi_busfreq); 30 dt_fixup_cpu_clocks(bd.bi_intfreq, bd.bi_busfreq / 8, bd.bi_busfreq);
30 31
31 /* Unfortunately, the specific model number is encoded in the 32 /* Unfortunately, the specific model number is encoded in the
diff --git a/arch/powerpc/boot/devtree.c b/arch/powerpc/boot/devtree.c
index e5dfe4497313..60f561e307a9 100644
--- a/arch/powerpc/boot/devtree.c
+++ b/arch/powerpc/boot/devtree.c
@@ -88,6 +88,20 @@ void dt_fixup_clock(const char *path, u32 freq)
88 } 88 }
89} 89}
90 90
91void dt_fixup_mac_address_by_alias(const char *alias, const u8 *addr)
92{
93 void *devp = find_node_by_alias(alias);
94
95 if (devp) {
96 printf("%s: local-mac-address <-"
97 " %02x:%02x:%02x:%02x:%02x:%02x\n\r", alias,
98 addr[0], addr[1], addr[2],
99 addr[3], addr[4], addr[5]);
100
101 setprop(devp, "local-mac-address", addr, 6);
102 }
103}
104
91void dt_fixup_mac_address(u32 index, const u8 *addr) 105void dt_fixup_mac_address(u32 index, const u8 *addr)
92{ 106{
93 void *devp = find_node_by_prop_value(NULL, "linux,network-index", 107 void *devp = find_node_by_prop_value(NULL, "linux,network-index",
diff --git a/arch/powerpc/boot/dts/adder875-redboot.dts b/arch/powerpc/boot/dts/adder875-redboot.dts
new file mode 100644
index 000000000000..930bfb3894eb
--- /dev/null
+++ b/arch/powerpc/boot/dts/adder875-redboot.dts
@@ -0,0 +1,184 @@
1/*
2 * Device Tree Source for MPC885 ADS running RedBoot
3 *
4 * Copyright 2006 MontaVista Software, Inc.
5 * Copyright 2007 Freescale Semiconductor, Inc.
6 *
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
9 * Free Software Foundation; either version 2 of the License, or (at your
10 * option) any later version.
11 */
12
13/dts-v1/;
14/ {
15 model = "Analogue & Micro Adder MPC875";
16 compatible = "analogue-and-micro,adder875";
17 #address-cells = <1>;
18 #size-cells = <1>;
19
20 aliases {
21 console = &console;
22 ethernet0 = &eth0;
23 ethernet1 = &eth1;
24 };
25
26 cpus {
27 #address-cells = <1>;
28 #size-cells = <0>;
29
30 PowerPC,875@0 {
31 device_type = "cpu";
32 reg = <0>;
33 d-cache-line-size = <16>;
34 i-cache-line-size = <16>;
35 d-cache-size = <8192>;
36 i-cache-size = <8192>;
37 timebase-frequency = <0>;
38 bus-frequency = <0>;
39 clock-frequency = <0>;
40 interrupts = <15 2>; // decrementer interrupt
41 interrupt-parent = <&PIC>;
42 };
43 };
44
45 memory {
46 device_type = "memory";
47 reg = <0 0x01000000>;
48 };
49
50 localbus@fa200100 {
51 compatible = "fsl,mpc885-localbus", "fsl,pq1-localbus",
52 "simple-bus";
53 #address-cells = <2>;
54 #size-cells = <1>;
55 reg = <0xfa200100 0x40>;
56
57 ranges = <
58 0 0 0xfe000000 0x00800000
59 2 0 0xfa100000 0x00008000
60 >;
61
62 flash@0,0 {
63 compatible = "cfi-flash";
64 reg = <0 0 0x800000>;
65 bank-width = <2>;
66 device-width = <2>;
67 };
68 };
69
70 soc@fa200000 {
71 compatible = "fsl,mpc875-immr", "fsl,pq1-soc", "simple-bus";
72 #address-cells = <1>;
73 #size-cells = <1>;
74 ranges = <0 0xfa200000 0x00004000>;
75
76 // Temporary until code stops depending on it.
77 device_type = "soc";
78
79 // Temporary until get_immrbase() is fixed.
80 reg = <0xfa200000 0x4000>;
81
82 mdio@e00 {
83 compatible = "fsl,mpc875-fec-mdio", "fsl,pq1-fec-mdio";
84 reg = <0xe00 0x188>;
85 #address-cells = <1>;
86 #size-cells = <0>;
87
88 PHY0: ethernet-phy@0 {
89 reg = <0>;
90 device_type = "ethernet-phy";
91 };
92
93 PHY1: ethernet-phy@1 {
94 reg = <1>;
95 device_type = "ethernet-phy";
96 };
97 };
98
99 eth0: ethernet@e00 {
100 device_type = "network";
101 compatible = "fsl,mpc875-fec-enet",
102 "fsl,pq1-fec-enet";
103 reg = <0xe00 0x188>;
104 local-mac-address = [ 00 00 00 00 00 00 ];
105 interrupts = <3 1>;
106 interrupt-parent = <&PIC>;
107 phy-handle = <&PHY0>;
108 linux,network-index = <0>;
109 };
110
111 eth1: ethernet@1e00 {
112 device_type = "network";
113 compatible = "fsl,mpc875-fec-enet",
114 "fsl,pq1-fec-enet";
115 reg = <0x1e00 0x188>;
116 local-mac-address = [ 00 00 00 00 00 00 ];
117 interrupts = <7 1>;
118 interrupt-parent = <&PIC>;
119 phy-handle = <&PHY1>;
120 linux,network-index = <1>;
121 };
122
123 PIC: interrupt-controller@0 {
124 interrupt-controller;
125 #interrupt-cells = <2>;
126 reg = <0 0x24>;
127 compatible = "fsl,mpc875-pic", "fsl,pq1-pic";
128 };
129
130 cpm@9c0 {
131 #address-cells = <1>;
132 #size-cells = <1>;
133 compatible = "fsl,mpc875-cpm", "fsl,cpm1", "simple-bus";
134 interrupts = <0>; // cpm error interrupt
135 interrupt-parent = <&CPM_PIC>;
136 reg = <0x9c0 0x40>;
137 ranges;
138
139 muram {
140 #address-cells = <1>;
141 #size-cells = <1>;
142 ranges = <0 0x2000 0x2000>;
143
144 data@0 {
145 compatible = "fsl,cpm-muram-data";
146 reg = <0 0x1c00>;
147 };
148 };
149
150 brg@9f0 {
151 compatible = "fsl,mpc875-brg",
152 "fsl,cpm1-brg",
153 "fsl,cpm-brg";
154 reg = <0x9f0 0x10>;
155 };
156
157 CPM_PIC: interrupt-controller@930 {
158 interrupt-controller;
159 #interrupt-cells = <1>;
160 interrupts = <5 2 0 2>;
161 interrupt-parent = <&PIC>;
162 reg = <0x930 0x20>;
163 compatible = "fsl,mpc875-cpm-pic",
164 "fsl,cpm1-pic";
165 };
166
167 console: serial@a80 {
168 device_type = "serial";
169 compatible = "fsl,mpc875-smc-uart",
170 "fsl,cpm1-smc-uart";
171 reg = <0xa80 0x10 0x3e80 0x40>;
172 interrupts = <4>;
173 interrupt-parent = <&CPM_PIC>;
174 fsl,cpm-brg = <1>;
175 fsl,cpm-command = <0x0090>;
176 current-speed = <115200>;
177 };
178 };
179 };
180
181 chosen {
182 linux,stdout-path = &console;
183 };
184};
diff --git a/arch/powerpc/boot/dts/adder875-uboot.dts b/arch/powerpc/boot/dts/adder875-uboot.dts
new file mode 100644
index 000000000000..0197242dacfb
--- /dev/null
+++ b/arch/powerpc/boot/dts/adder875-uboot.dts
@@ -0,0 +1,183 @@
1/*
2 * Device Tree Source for MPC885 ADS running U-Boot
3 *
4 * Copyright 2006 MontaVista Software, Inc.
5 * Copyright 2007 Freescale Semiconductor, Inc.
6 *
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
9 * Free Software Foundation; either version 2 of the License, or (at your
10 * option) any later version.
11 */
12
13/dts-v1/;
14/ {
15 model = "Analogue & Micro Adder MPC875";
16 compatible = "analogue-and-micro,adder875";
17 #address-cells = <1>;
18 #size-cells = <1>;
19
20 aliases {
21 console = &console;
22 ethernet0 = &eth0;
23 ethernet1 = &eth1;
24 };
25
26 cpus {
27 #address-cells = <1>;
28 #size-cells = <0>;
29
30 PowerPC,875@0 {
31 device_type = "cpu";
32 reg = <0>;
33 d-cache-line-size = <16>;
34 i-cache-line-size = <16>;
35 d-cache-size = <8192>;
36 i-cache-size = <8192>;
37 timebase-frequency = <0>;
38 bus-frequency = <0>;
39 clock-frequency = <0>;
40 interrupts = <15 2>; // decrementer interrupt
41 interrupt-parent = <&PIC>;
42 };
43 };
44
45 memory {
46 device_type = "memory";
47 reg = <0 0x01000000>;
48 };
49
50 localbus@ff000100 {
51 compatible = "fsl,mpc885-localbus", "fsl,pq1-localbus",
52 "simple-bus";
53 #address-cells = <2>;
54 #size-cells = <1>;
55 reg = <0xff000100 0x40>;
56
57 ranges = <
58 0 0 0xfe000000 0x01000000
59 >;
60
61 flash@0,0 {
62 compatible = "cfi-flash";
63 reg = <0 0 0x800000>;
64 bank-width = <2>;
65 device-width = <2>;
66 };
67 };
68
69 soc@ff000000 {
70 compatible = "fsl,mpc875-immr", "fsl,pq1-soc", "simple-bus";
71 #address-cells = <1>;
72 #size-cells = <1>;
73 ranges = <0 0xff000000 0x00004000>;
74
75 // Temporary until code stops depending on it.
76 device_type = "soc";
77
78 // Temporary until get_immrbase() is fixed.
79 reg = <0xff000000 0x4000>;
80
81 mdio@e00 {
82 compatible = "fsl,mpc875-fec-mdio", "fsl,pq1-fec-mdio";
83 reg = <0xe00 0x188>;
84 #address-cells = <1>;
85 #size-cells = <0>;
86
87 PHY0: ethernet-phy@0 {
88 reg = <0>;
89 device_type = "ethernet-phy";
90 };
91
92 PHY1: ethernet-phy@1 {
93 reg = <1>;
94 device_type = "ethernet-phy";
95 };
96 };
97
98 eth0: ethernet@e00 {
99 device_type = "network";
100 compatible = "fsl,mpc875-fec-enet",
101 "fsl,pq1-fec-enet";
102 reg = <0xe00 0x188>;
103 local-mac-address = [ 00 00 00 00 00 00 ];
104 interrupts = <3 1>;
105 interrupt-parent = <&PIC>;
106 phy-handle = <&PHY0>;
107 linux,network-index = <0>;
108 };
109
110 eth1: ethernet@1e00 {
111 device_type = "network";
112 compatible = "fsl,mpc875-fec-enet",
113 "fsl,pq1-fec-enet";
114 reg = <0x1e00 0x188>;
115 local-mac-address = [ 00 00 00 00 00 00 ];
116 interrupts = <7 1>;
117 interrupt-parent = <&PIC>;
118 phy-handle = <&PHY1>;
119 linux,network-index = <1>;
120 };
121
122 PIC: interrupt-controller@0 {
123 interrupt-controller;
124 #interrupt-cells = <2>;
125 reg = <0 0x24>;
126 compatible = "fsl,mpc875-pic", "fsl,pq1-pic";
127 };
128
129 cpm@9c0 {
130 #address-cells = <1>;
131 #size-cells = <1>;
132 compatible = "fsl,mpc875-cpm", "fsl,cpm1", "simple-bus";
133 interrupts = <0>; // cpm error interrupt
134 interrupt-parent = <&CPM_PIC>;
135 reg = <0x9c0 0x40>;
136 ranges;
137
138 muram {
139 #address-cells = <1>;
140 #size-cells = <1>;
141 ranges = <0 0x2000 0x2000>;
142
143 data@0 {
144 compatible = "fsl,cpm-muram-data";
145 reg = <0 0x1c00>;
146 };
147 };
148
149 brg@9f0 {
150 compatible = "fsl,mpc875-brg",
151 "fsl,cpm1-brg",
152 "fsl,cpm-brg";
153 reg = <0x9f0 0x10>;
154 };
155
156 CPM_PIC: interrupt-controller@930 {
157 interrupt-controller;
158 #interrupt-cells = <1>;
159 interrupts = <5 2 0 2>;
160 interrupt-parent = <&PIC>;
161 reg = <0x930 0x20>;
162 compatible = "fsl,mpc875-cpm-pic",
163 "fsl,cpm1-pic";
164 };
165
166 console: serial@a80 {
167 device_type = "serial";
168 compatible = "fsl,mpc875-smc-uart",
169 "fsl,cpm1-smc-uart";
170 reg = <0xa80 0x10 0x3e80 0x40>;
171 interrupts = <4>;
172 interrupt-parent = <&CPM_PIC>;
173 fsl,cpm-brg = <1>;
174 fsl,cpm-command = <0x0090>;
175 current-speed = <115200>;
176 };
177 };
178 };
179
180 chosen {
181 linux,stdout-path = &console;
182 };
183};
diff --git a/arch/powerpc/boot/dts/ep8248e.dts b/arch/powerpc/boot/dts/ep8248e.dts
new file mode 100644
index 000000000000..5d2fb76a72c1
--- /dev/null
+++ b/arch/powerpc/boot/dts/ep8248e.dts
@@ -0,0 +1,207 @@
1/*
2 * Device Tree for the Embedded Planet EP8248E board running PlanetCore.
3 *
4 * Copyright 2007 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/dts-v1/;
13/ {
14 model = "EP8248E";
15 compatible = "fsl,ep8248e";
16 #address-cells = <1>;
17 #size-cells = <1>;
18
19 aliases {
20 planetcore-SMC1 = &smc1;
21 planetcore-SCC1 = &scc1;
22 ethernet0 = &eth0;
23 ethernet1 = &eth1;
24 serial0 = &smc1;
25 serial1 = &scc1;
26 };
27
28 cpus {
29 #address-cells = <1>;
30 #size-cells = <0>;
31
32 PowerPC,8248@0 {
33 device_type = "cpu";
34 reg = <0>;
35 d-cache-line-size = <32>;
36 i-cache-line-size = <32>;
37 d-cache-size = <16384>;
38 i-cache-size = <16384>;
39 timebase-frequency = <0>;
40 clock-frequency = <0>;
41 };
42 };
43
44 localbus@f0010100 {
45 compatible = "fsl,mpc8248-localbus",
46 "fsl,pq2-localbus",
47 "simple-bus";
48 #address-cells = <2>;
49 #size-cells = <1>;
50 reg = <0xf0010100 0x40>;
51
52 ranges = <0 0 0xfc000000 0x04000000
53 1 0 0xfa000000 0x00008000>;
54
55 flash@0,3800000 {
56 compatible = "cfi-flash";
57 reg = <0 0x3800000 0x800000>;
58 bank-width = <4>;
59 device-width = <2>;
60 };
61
62 bcsr@1,0 {
63 #address-cells = <2>;
64 #size-cells = <1>;
65 reg = <1 0 0x10>;
66 compatible = "fsl,ep8248e-bcsr";
67 ranges;
68
69 mdio {
70 device_type = "mdio";
71 compatible = "fsl,ep8248e-mdio-bitbang";
72 #address-cells = <1>;
73 #size-cells = <0>;
74 reg = <1 8 1>;
75
76 PHY0: ethernet-phy@0 {
77 interrupt-parent = <&PIC>;
78 reg = <0>;
79 device_type = "ethernet-phy";
80 };
81
82 PHY1: ethernet-phy@1 {
83 interrupt-parent = <&PIC>;
84 reg = <1>;
85 device_type = "ethernet-phy";
86 };
87 };
88 };
89 };
90
91 memory {
92 device_type = "memory";
93 reg = <0 0>;
94 };
95
96 soc@f0000000 {
97 #address-cells = <1>;
98 #size-cells = <1>;
99 compatible = "fsl,mpc8248-immr", "fsl,pq2-soc", "simple-bus";
100 ranges = <0x00000000 0xf0000000 0x00053000>;
101
102 // Temporary until code stops depending on it.
103 device_type = "soc";
104
105 // Temporary -- will go away once kernel uses ranges for get_immrbase().
106 reg = <0xf0000000 0x00053000>;
107
108 cpm@119c0 {
109 #address-cells = <1>;
110 #size-cells = <1>;
111 #interrupt-cells = <2>;
112 compatible = "fsl,mpc8248-cpm", "fsl,cpm2",
113 "simple-bus";
114 reg = <0x119c0 0x30>;
115 ranges;
116
117 muram {
118 #address-cells = <1>;
119 #size-cells = <1>;
120 ranges = <0 0 0x10000>;
121
122 data@0 {
123 compatible = "fsl,cpm-muram-data";
124 reg = <0 0x1100 0x1140
125 0xec0 0x9800 0x800>;
126 };
127 };
128
129 brg@119f0 {
130 compatible = "fsl,mpc8248-brg",
131 "fsl,cpm2-brg",
132 "fsl,cpm-brg";
133 reg = <0x119f0 0x10 0x115f0 0x10>;
134 };
135
136 /* Monitor port/SMC1 */
137 smc1: serial@11a80 {
138 device_type = "serial";
139 compatible = "fsl,mpc8248-smc-uart",
140 "fsl,cpm2-smc-uart";
141 reg = <0x11a80 0x20 0x1100 0x40>;
142 interrupts = <4 8>;
143 interrupt-parent = <&PIC>;
144 fsl,cpm-brg = <7>;
145 fsl,cpm-command = <0x1d000000>;
146 linux,planetcore-label = "SMC1";
147 };
148
149 /* "Serial" port/SCC1 */
150 scc1: serial@11a00 {
151 device_type = "serial";
152 compatible = "fsl,mpc8248-scc-uart",
153 "fsl,cpm2-scc-uart";
154 reg = <0x11a00 0x20 0x8000 0x100>;
155 interrupts = <40 8>;
156 interrupt-parent = <&PIC>;
157 fsl,cpm-brg = <1>;
158 fsl,cpm-command = <0x00800000>;
159 linux,planetcore-label = "SCC1";
160 };
161
162 eth0: ethernet@11300 {
163 device_type = "network";
164 compatible = "fsl,mpc8248-fcc-enet",
165 "fsl,cpm2-fcc-enet";
166 reg = <0x11300 0x20 0x8400 0x100 0x11390 1>;
167 local-mac-address = [ 00 00 00 00 00 00 ];
168 interrupts = <32 8>;
169 interrupt-parent = <&PIC>;
170 phy-handle = <&PHY0>;
171 linux,network-index = <0>;
172 fsl,cpm-command = <0x12000300>;
173 };
174
175 eth1: ethernet@11320 {
176 device_type = "network";
177 compatible = "fsl,mpc8248-fcc-enet",
178 "fsl,cpm2-fcc-enet";
179 reg = <0x11320 0x20 0x8500 0x100 0x113b0 1>;
180 local-mac-address = [ 00 00 00 00 00 00 ];
181 interrupts = <33 8>;
182 interrupt-parent = <&PIC>;
183 phy-handle = <&PHY1>;
184 linux,network-index = <1>;
185 fsl,cpm-command = <0x16200300>;
186 };
187
188 usb@11b60 {
189 #address-cells = <1>;
190 #size-cells = <0>;
191 compatible = "fsl,mpc8248-usb",
192 "fsl,cpm2-usb";
193 reg = <0x11b60 0x18 0x8b00 0x100>;
194 interrupt-parent = <&PIC>;
195 interrupts = <11 8>;
196 fsl,cpm-command = <0x2e600000>;
197 };
198 };
199
200 PIC: interrupt-controller@10c00 {
201 #interrupt-cells = <2>;
202 interrupt-controller;
203 reg = <0x10c00 0x80>;
204 compatible = "fsl,mpc8248-pic", "fsl,pq2-pic";
205 };
206 };
207};
diff --git a/arch/powerpc/boot/dts/mpc8313erdb.dts b/arch/powerpc/boot/dts/mpc8313erdb.dts
index c5b6665a8209..9bcf2c92541f 100644
--- a/arch/powerpc/boot/dts/mpc8313erdb.dts
+++ b/arch/powerpc/boot/dts/mpc8313erdb.dts
@@ -45,10 +45,58 @@
45 reg = <00000000 08000000>; // 128MB at 0 45 reg = <00000000 08000000>; // 128MB at 0
46 }; 46 };
47 47
48 localbus@e0005000 {
49 #address-cells = <2>;
50 #size-cells = <1>;
51 compatible = "fsl,mpc8313-elbc", "fsl,elbc", "simple-bus";
52 reg = <e0005000 1000>;
53 interrupts = <d#77 8>;
54 interrupt-parent = <&ipic>;
55
56 // CS0 and CS1 are swapped when
57 // booting from nand, but the
58 // addresses are the same.
59 ranges = <0 0 fe000000 00800000
60 1 0 e2800000 00008000
61 2 0 f0000000 00020000
62 3 0 fa000000 00008000>;
63
64 flash@0,0 {
65 #address-cells = <1>;
66 #size-cells = <1>;
67 compatible = "cfi-flash";
68 reg = <0 0 800000>;
69 bank-width = <2>;
70 device-width = <1>;
71 };
72
73 nand@1,0 {
74 #address-cells = <1>;
75 #size-cells = <1>;
76 compatible = "fsl,mpc8313-fcm-nand",
77 "fsl,elbc-fcm-nand";
78 reg = <1 0 2000>;
79
80 u-boot@0 {
81 reg = <0 100000>;
82 read-only;
83 };
84
85 kernel@100000 {
86 reg = <100000 300000>;
87 };
88
89 fs@400000 {
90 reg = <400000 1c00000>;
91 };
92 };
93 };
94
48 soc8313@e0000000 { 95 soc8313@e0000000 {
49 #address-cells = <1>; 96 #address-cells = <1>;
50 #size-cells = <1>; 97 #size-cells = <1>;
51 device_type = "soc"; 98 device_type = "soc";
99 compatible = "simple-bus";
52 ranges = <0 e0000000 00100000>; 100 ranges = <0 e0000000 00100000>;
53 reg = <e0000000 00000200>; 101 reg = <e0000000 00000200>;
54 bus-frequency = <0>; 102 bus-frequency = <0>;
@@ -92,7 +140,6 @@
92 140
93 /* phy type (ULPI, UTMI, UTMI_WIDE, SERIAL) */ 141 /* phy type (ULPI, UTMI, UTMI_WIDE, SERIAL) */
94 usb@23000 { 142 usb@23000 {
95 device_type = "usb";
96 compatible = "fsl-usb2-dr"; 143 compatible = "fsl-usb2-dr";
97 reg = <23000 1000>; 144 reg = <23000 1000>;
98 #address-cells = <1>; 145 #address-cells = <1>;
diff --git a/arch/powerpc/boot/dts/mpc832x_mds.dts b/arch/powerpc/boot/dts/mpc832x_mds.dts
index 26ac467b10ea..690252456d3d 100644
--- a/arch/powerpc/boot/dts/mpc832x_mds.dts
+++ b/arch/powerpc/boot/dts/mpc832x_mds.dts
@@ -7,6 +7,18 @@
7 * under the terms of the GNU General Public License as published by the 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 8 * Free Software Foundation; either version 2 of the License, or (at your
9 * option) any later version. 9 * option) any later version.
10
11 * To enable external serial I/O on a Freescale MPC 8323 SYS/MDS board, do
12 * this:
13 *
14 * 1) On chip U61, lift (disconnect) pins 21 (TXD) and 22 (RXD) from the board.
15 * 2) Solder a wire from U61-21 to P19A-23. P19 is a grid of pins on the board
16 * next to the serial ports.
17 * 3) Solder a wire from U61-22 to P19K-22.
18 *
19 * Note that there's a typo in the schematic. The board labels the last column
20 * of pins "P19K", but in the schematic, that column is called "P19J". So if
21 * you're going by the schematic, the pin is called "P19J-K22".
10 */ 22 */
11 23
12/ { 24/ {
@@ -169,6 +181,23 @@
169 1 1e 1 0 1 0 /* TX_EN */ 181 1 1e 1 0 1 0 /* TX_EN */
170 1 1f 2 0 1 0>;/* CRS */ 182 1 1f 2 0 1 0>;/* CRS */
171 }; 183 };
184 pio5: ucc_pin@05 {
185 pio-map = <
186 /*
187 * open has
188 * port pin dir drain sel irq
189 */
190 2 0 1 0 2 0 /* TxD5 */
191 2 8 2 0 2 0 /* RxD5 */
192
193 2 1d 2 0 0 0 /* CTS5 */
194 2 1f 1 0 2 0 /* RTS5 */
195
196 2 18 2 0 0 0 /* CD */
197
198 >;
199 };
200
172 }; 201 };
173 }; 202 };
174 203
@@ -176,6 +205,7 @@
176 #address-cells = <1>; 205 #address-cells = <1>;
177 #size-cells = <1>; 206 #size-cells = <1>;
178 device_type = "qe"; 207 device_type = "qe";
208 compatible = "fsl,qe";
179 model = "QE"; 209 model = "QE";
180 ranges = <0 e0100000 00100000>; 210 ranges = <0 e0100000 00100000>;
181 reg = <e0100000 480>; 211 reg = <e0100000 480>;
@@ -210,7 +240,6 @@
210 }; 240 };
211 241
212 usb@6c0 { 242 usb@6c0 {
213 device_type = "usb";
214 compatible = "qe_udc"; 243 compatible = "qe_udc";
215 reg = <6c0 40 8B00 100>; 244 reg = <6c0 40 8B00 100>;
216 interrupts = <b>; 245 interrupts = <b>;
@@ -250,6 +279,26 @@
250 pio-handle = < &pio4 >; 279 pio-handle = < &pio4 >;
251 }; 280 };
252 281
282 ucc@2400 {
283 device_type = "serial";
284 compatible = "ucc_uart";
285 model = "UCC";
286 device-id = <5>; /* The UCC number, 1-7*/
287 port-number = <0>; /* Which ttyQEx device */
288 soft-uart; /* We need Soft-UART */
289 reg = <2400 200>;
290 interrupts = <28>; /* From Table 18-12 */
291 interrupt-parent = < &qeic >;
292 /*
293 * For Soft-UART, we need to set TX to 1X, which
294 * means specifying separate clock sources.
295 */
296 rx-clock-name = "brg5";
297 tx-clock-name = "brg6";
298 pio-handle = < &pio5 >;
299 };
300
301
253 mdio@2320 { 302 mdio@2320 {
254 #address-cells = <1>; 303 #address-cells = <1>;
255 #size-cells = <0>; 304 #size-cells = <0>;
diff --git a/arch/powerpc/boot/dts/mpc8349emitx.dts b/arch/powerpc/boot/dts/mpc8349emitx.dts
index e354f2634246..04b8da4deb60 100644
--- a/arch/powerpc/boot/dts/mpc8349emitx.dts
+++ b/arch/powerpc/boot/dts/mpc8349emitx.dts
@@ -91,7 +91,6 @@
91 }; 91 };
92 92
93 usb@22000 { 93 usb@22000 {
94 device_type = "usb";
95 compatible = "fsl-usb2-mph"; 94 compatible = "fsl-usb2-mph";
96 reg = <22000 1000>; 95 reg = <22000 1000>;
97 #address-cells = <1>; 96 #address-cells = <1>;
@@ -103,7 +102,6 @@
103 }; 102 };
104 103
105 usb@23000 { 104 usb@23000 {
106 device_type = "usb";
107 compatible = "fsl-usb2-dr"; 105 compatible = "fsl-usb2-dr";
108 reg = <23000 1000>; 106 reg = <23000 1000>;
109 #address-cells = <1>; 107 #address-cells = <1>;
@@ -127,14 +125,6 @@
127 reg = <1c>; 125 reg = <1c>;
128 device_type = "ethernet-phy"; 126 device_type = "ethernet-phy";
129 }; 127 };
130
131 /* Vitesse 7385 */
132 phy1f: ethernet-phy@1f {
133 interrupt-parent = < &ipic >;
134 interrupts = <12 8>;
135 reg = <1f>;
136 device_type = "ethernet-phy";
137 };
138 }; 128 };
139 129
140 enet0: ethernet@24000 { 130 enet0: ethernet@24000 {
@@ -159,7 +149,8 @@
159 local-mac-address = [ 00 00 00 00 00 00 ]; 149 local-mac-address = [ 00 00 00 00 00 00 ];
160 interrupts = <23 8 24 8 25 8>; 150 interrupts = <23 8 24 8 25 8>;
161 interrupt-parent = < &ipic >; 151 interrupt-parent = < &ipic >;
162 phy-handle = < &phy1f >; 152 /* Vitesse 7385 isn't on the MDIO bus */
153 fixed-link = <1 1 d#1000 0 0>;
163 linux,network-index = <1>; 154 linux,network-index = <1>;
164 }; 155 };
165 156
@@ -253,6 +244,21 @@
253 device_type = "pci"; 244 device_type = "pci";
254 }; 245 };
255 246
247 localbus@e0005000 {
248 #address-cells = <2>;
249 #size-cells = <1>;
250 compatible = "fsl,mpc8349e-localbus",
251 "fsl,pq2pro-localbus";
252 reg = <e0005000 d8>;
253 ranges = <3 0 f0000000 210>;
256 254
257 255 pata@3,0 {
256 compatible = "fsl,mpc8349emitx-pata", "ata-generic";
257 reg = <3 0 10 3 20c 4>;
258 reg-shift = <1>;
259 pio-mode = <6>;
260 interrupts = <17 8>;
261 interrupt-parent = <&ipic>;
262 };
263 };
258}; 264};
diff --git a/arch/powerpc/boot/dts/mpc8349emitxgp.dts b/arch/powerpc/boot/dts/mpc8349emitxgp.dts
index ebdf0b750086..a06ff92cf0b1 100644
--- a/arch/powerpc/boot/dts/mpc8349emitxgp.dts
+++ b/arch/powerpc/boot/dts/mpc8349emitxgp.dts
@@ -89,7 +89,6 @@
89 }; 89 };
90 90
91 usb@23000 { 91 usb@23000 {
92 device_type = "usb";
93 compatible = "fsl-usb2-dr"; 92 compatible = "fsl-usb2-dr";
94 reg = <23000 1000>; 93 reg = <23000 1000>;
95 #address-cells = <1>; 94 #address-cells = <1>;
diff --git a/arch/powerpc/boot/dts/mpc834x_mds.dts b/arch/powerpc/boot/dts/mpc834x_mds.dts
index 0ba13ebcea68..4120e92fcecf 100644
--- a/arch/powerpc/boot/dts/mpc834x_mds.dts
+++ b/arch/powerpc/boot/dts/mpc834x_mds.dts
@@ -104,7 +104,6 @@
104 /* phy type (ULPI or SERIAL) are only types supportted for MPH */ 104 /* phy type (ULPI or SERIAL) are only types supportted for MPH */
105 /* port = 0 or 1 */ 105 /* port = 0 or 1 */
106 usb@22000 { 106 usb@22000 {
107 device_type = "usb";
108 compatible = "fsl-usb2-mph"; 107 compatible = "fsl-usb2-mph";
109 reg = <22000 1000>; 108 reg = <22000 1000>;
110 #address-cells = <1>; 109 #address-cells = <1>;
@@ -116,7 +115,6 @@
116 }; 115 };
117 /* phy type (ULPI, UTMI, UTMI_WIDE, SERIAL) */ 116 /* phy type (ULPI, UTMI, UTMI_WIDE, SERIAL) */
118 usb@23000 { 117 usb@23000 {
119 device_type = "usb";
120 compatible = "fsl-usb2-dr"; 118 compatible = "fsl-usb2-dr";
121 reg = <23000 1000>; 119 reg = <23000 1000>;
122 #address-cells = <1>; 120 #address-cells = <1>;
diff --git a/arch/powerpc/boot/dts/mpc836x_mds.dts b/arch/powerpc/boot/dts/mpc836x_mds.dts
index fd841b2fddd0..2181d2cdbff2 100644
--- a/arch/powerpc/boot/dts/mpc836x_mds.dts
+++ b/arch/powerpc/boot/dts/mpc836x_mds.dts
@@ -241,7 +241,6 @@
241 }; 241 };
242 242
243 usb@6c0 { 243 usb@6c0 {
244 device_type = "usb";
245 compatible = "qe_udc"; 244 compatible = "qe_udc";
246 reg = <6c0 40 8B00 100>; 245 reg = <6c0 40 8B00 100>;
247 interrupts = <b>; 246 interrupts = <b>;
diff --git a/arch/powerpc/boot/dts/mpc8377_mds.dts b/arch/powerpc/boot/dts/mpc8377_mds.dts
new file mode 100644
index 000000000000..98b46065f45a
--- /dev/null
+++ b/arch/powerpc/boot/dts/mpc8377_mds.dts
@@ -0,0 +1,279 @@
1/*
2 * MPC8377E MDS Device Tree Source
3 *
4 * Copyright 2007 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/dts-v1/;
13
14/ {
15 model = "fsl,mpc8377emds";
16 compatible = "fsl,mpc8377emds","fsl,mpc837xmds";
17 #address-cells = <1>;
18 #size-cells = <1>;
19
20 aliases {
21 ethernet0 = &enet0;
22 ethernet1 = &enet1;
23 serial0 = &serial0;
24 serial1 = &serial1;
25 pci0 = &pci0;
26 };
27
28 cpus {
29 #address-cells = <1>;
30 #size-cells = <0>;
31
32 PowerPC,8377@0 {
33 device_type = "cpu";
34 reg = <0>;
35 d-cache-line-size = <0x20>;
36 i-cache-line-size = <0x20>;
37 d-cache-size = <0x8000>; // L1, 32K
38 i-cache-size = <0x8000>; // L1, 32K
39 timebase-frequency = <0>;
40 bus-frequency = <0>;
41 clock-frequency = <0>;
42 };
43 };
44
45 memory {
46 device_type = "memory";
47 reg = <0x00000000 0x20000000>; // 512MB at 0
48 };
49
50 soc@e0000000 {
51 #address-cells = <1>;
52 #size-cells = <1>;
53 device_type = "soc";
54 ranges = <0x0 0xe0000000 0x00100000>;
55 reg = <0xe0000000 0x00000200>;
56 bus-frequency = <0>;
57
58 wdt@200 {
59 compatible = "mpc83xx_wdt";
60 reg = <0x200 0x100>;
61 };
62
63 i2c@3000 {
64 #address-cells = <1>;
65 #size-cells = <0>;
66 cell-index = <0>;
67 compatible = "fsl-i2c";
68 reg = <0x3000 0x100>;
69 interrupts = <0xe 0x8>;
70 interrupt-parent = < &ipic >;
71 dfsrr;
72 };
73
74 i2c@3100 {
75 #address-cells = <1>;
76 #size-cells = <0>;
77 cell-index = <1>;
78 compatible = "fsl-i2c";
79 reg = <0x3100 0x100>;
80 interrupts = <0xf 0x8>;
81 interrupt-parent = < &ipic >;
82 dfsrr;
83 };
84
85 spi@7000 {
86 compatible = "fsl_spi";
87 reg = <0x7000 0x1000>;
88 interrupts = <0x10 0x8>;
89 interrupt-parent = < &ipic >;
90 mode = "cpu";
91 };
92
93 /* phy type (ULPI, UTMI, UTMI_WIDE, SERIAL) */
94 usb@23000 {
95 compatible = "fsl-usb2-dr";
96 reg = <0x23000 0x1000>;
97 #address-cells = <1>;
98 #size-cells = <0>;
99 interrupt-parent = < &ipic >;
100 interrupts = <0x26 0x8>;
101 phy_type = "utmi_wide";
102 };
103
104 mdio@24520 {
105 #address-cells = <1>;
106 #size-cells = <0>;
107 compatible = "fsl,gianfar-mdio";
108 reg = <0x24520 0x20>;
109 phy2: ethernet-phy@2 {
110 interrupt-parent = < &ipic >;
111 interrupts = <0x11 0x8>;
112 reg = <2>;
113 device_type = "ethernet-phy";
114 };
115 phy3: ethernet-phy@3 {
116 interrupt-parent = < &ipic >;
117 interrupts = <0x12 0x8>;
118 reg = <3>;
119 device_type = "ethernet-phy";
120 };
121 };
122
123 enet0: ethernet@24000 {
124 cell-index = <0>;
125 device_type = "network";
126 model = "eTSEC";
127 compatible = "gianfar";
128 reg = <0x24000 0x1000>;
129 local-mac-address = [ 00 00 00 00 00 00 ];
130 interrupts = <0x20 0x8 0x21 0x8 0x22 0x8>;
131 phy-connection-type = "mii";
132 interrupt-parent = < &ipic >;
133 phy-handle = < &phy2 >;
134 };
135
136 enet1: ethernet@25000 {
137 cell-index = <1>;
138 device_type = "network";
139 model = "eTSEC";
140 compatible = "gianfar";
141 reg = <0x25000 0x1000>;
142 local-mac-address = [ 00 00 00 00 00 00 ];
143 interrupts = <0x23 0x8 0x24 0x8 0x25 0x8>;
144 phy-connection-type = "mii";
145 interrupt-parent = < &ipic >;
146 phy-handle = < &phy3 >;
147 };
148
149 serial0: serial@4500 {
150 cell-index = <0>;
151 device_type = "serial";
152 compatible = "ns16550";
153 reg = <0x4500 0x100>;
154 clock-frequency = <0>;
155 interrupts = <0x9 0x8>;
156 interrupt-parent = < &ipic >;
157 };
158
159 serial1: serial@4600 {
160 cell-index = <1>;
161 device_type = "serial";
162 compatible = "ns16550";
163 reg = <0x4600 0x100>;
164 clock-frequency = <0>;
165 interrupts = <0xa 0x8>;
166 interrupt-parent = < &ipic >;
167 };
168
169 crypto@30000 {
170 model = "SEC3";
171 compatible = "talitos";
172 reg = <0x30000 0x10000>;
173 interrupts = <0xb 0x8>;
174 interrupt-parent = < &ipic >;
175 /* Rev. 3.0 geometry */
176 num-channels = <4>;
177 channel-fifo-len = <0x18>;
178 exec-units-mask = <0x000001fe>;
179 descriptor-types-mask = <0x03ab0ebf>;
180 };
181
182 sdhc@2e000 {
183 model = "eSDHC";
184 compatible = "fsl,esdhc";
185 reg = <0x2e000 0x1000>;
186 interrupts = <0x2a 0x8>;
187 interrupt-parent = < &ipic >;
188 };
189
190 sata@18000 {
191 compatible = "fsl,mpc8379-sata";
192 reg = <0x18000 0x1000>;
193 interrupts = <0x2c 0x8>;
194 interrupt-parent = < &ipic >;
195 };
196
197 sata@19000 {
198 compatible = "fsl,mpc8379-sata";
199 reg = <0x19000 0x1000>;
200 interrupts = <0x2d 0x8>;
201 interrupt-parent = < &ipic >;
202 };
203
204 /* IPIC
205 * interrupts cell = <intr #, sense>
206 * sense values match linux IORESOURCE_IRQ_* defines:
207 * sense == 8: Level, low assertion
208 * sense == 2: Edge, high-to-low change
209 */
210 ipic: pic@700 {
211 compatible = "fsl,ipic";
212 interrupt-controller;
213 #address-cells = <0>;
214 #interrupt-cells = <2>;
215 reg = <0x700 0x100>;
216 };
217 };
218
219 pci0: pci@e0008500 {
220 cell-index = <0>;
221 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
222 interrupt-map = <
223
224 /* IDSEL 0x11 */
225 0x8800 0x0 0x0 0x1 &ipic 0x14 0x8
226 0x8800 0x0 0x0 0x2 &ipic 0x15 0x8
227 0x8800 0x0 0x0 0x3 &ipic 0x16 0x8
228 0x8800 0x0 0x0 0x4 &ipic 0x17 0x8
229
230 /* IDSEL 0x12 */
231 0x9000 0x0 0x0 0x1 &ipic 0x16 0x8
232 0x9000 0x0 0x0 0x2 &ipic 0x17 0x8
233 0x9000 0x0 0x0 0x3 &ipic 0x14 0x8
234 0x9000 0x0 0x0 0x4 &ipic 0x15 0x8
235
236 /* IDSEL 0x13 */
237 0x9800 0x0 0x0 0x1 &ipic 0x17 0x8
238 0x9800 0x0 0x0 0x2 &ipic 0x14 0x8
239 0x9800 0x0 0x0 0x3 &ipic 0x15 0x8
240 0x9800 0x0 0x0 0x4 &ipic 0x16 0x8
241
242 /* IDSEL 0x15 */
243 0xa800 0x0 0x0 0x1 &ipic 0x14 0x8
244 0xa800 0x0 0x0 0x2 &ipic 0x15 0x8
245 0xa800 0x0 0x0 0x3 &ipic 0x16 0x8
246 0xa800 0x0 0x0 0x4 &ipic 0x17 0x8
247
248 /* IDSEL 0x16 */
249 0xb000 0x0 0x0 0x1 &ipic 0x17 0x8
250 0xb000 0x0 0x0 0x2 &ipic 0x14 0x8
251 0xb000 0x0 0x0 0x3 &ipic 0x15 0x8
252 0xb000 0x0 0x0 0x4 &ipic 0x16 0x8
253
254 /* IDSEL 0x17 */
255 0xb800 0x0 0x0 0x1 &ipic 0x16 0x8
256 0xb800 0x0 0x0 0x2 &ipic 0x17 0x8
257 0xb800 0x0 0x0 0x3 &ipic 0x14 0x8
258 0xb800 0x0 0x0 0x4 &ipic 0x15 0x8
259
260 /* IDSEL 0x18 */
261 0xc000 0x0 0x0 0x1 &ipic 0x15 0x8
262 0xc000 0x0 0x0 0x2 &ipic 0x16 0x8
263 0xc000 0x0 0x0 0x3 &ipic 0x17 0x8
264 0xc000 0x0 0x0 0x4 &ipic 0x14 0x8>;
265 interrupt-parent = < &ipic >;
266 interrupts = <0x42 0x8>;
267 bus-range = <0 0>;
268 ranges = <0x02000000 0x0 0x90000000 0x90000000 0x0 0x10000000
269 0x42000000 0x0 0x80000000 0x80000000 0x0 0x10000000
270 0x01000000 0x0 0x00000000 0xe0300000 0x0 0x00100000>;
271 clock-frequency = <0>;
272 #interrupt-cells = <1>;
273 #size-cells = <2>;
274 #address-cells = <3>;
275 reg = <0xe0008500 0x100>;
276 compatible = "fsl,mpc8349-pci";
277 device_type = "pci";
278 };
279};
diff --git a/arch/powerpc/boot/dts/mpc8378_mds.dts b/arch/powerpc/boot/dts/mpc8378_mds.dts
new file mode 100644
index 000000000000..c117a6a3a8e6
--- /dev/null
+++ b/arch/powerpc/boot/dts/mpc8378_mds.dts
@@ -0,0 +1,265 @@
1/*
2 * MPC8378E MDS Device Tree Source
3 *
4 * Copyright 2007 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/dts-v1/;
13
14/ {
15 model = "fsl,mpc8378emds";
16 compatible = "fsl,mpc8378emds","fsl,mpc837xmds";
17 #address-cells = <1>;
18 #size-cells = <1>;
19
20 aliases {
21 ethernet0 = &enet0;
22 ethernet1 = &enet1;
23 serial0 = &serial0;
24 serial1 = &serial1;
25 pci0 = &pci0;
26 };
27
28 cpus {
29 #address-cells = <1>;
30 #size-cells = <0>;
31
32 PowerPC,8378@0 {
33 device_type = "cpu";
34 reg = <0>;
35 d-cache-line-size = <0x20>;
36 i-cache-line-size = <0x20>;
37 d-cache-size = <0x8000>; // L1, 32K
38 i-cache-size = <0x8000>; // L1, 32K
39 timebase-frequency = <0>;
40 bus-frequency = <0>;
41 clock-frequency = <0>;
42 };
43 };
44
45 memory {
46 device_type = "memory";
47 reg = <0x00000000 0x20000000>; // 512MB at 0
48 };
49
50 soc@e0000000 {
51 #address-cells = <1>;
52 #size-cells = <1>;
53 device_type = "soc";
54 ranges = <0x0 0xe0000000 0x00100000>;
55 reg = <0xe0000000 0x00000200>;
56 bus-frequency = <0>;
57
58 wdt@200 {
59 compatible = "mpc83xx_wdt";
60 reg = <0x200 0x100>;
61 };
62
63 i2c@3000 {
64 #address-cells = <1>;
65 #size-cells = <0>;
66 cell-index = <0>;
67 compatible = "fsl-i2c";
68 reg = <0x3000 0x100>;
69 interrupts = <0xe 0x8>;
70 interrupt-parent = < &ipic >;
71 dfsrr;
72 };
73
74 i2c@3100 {
75 #address-cells = <1>;
76 #size-cells = <0>;
77 cell-index = <1>;
78 compatible = "fsl-i2c";
79 reg = <0x3100 0x100>;
80 interrupts = <0xf 0x8>;
81 interrupt-parent = < &ipic >;
82 dfsrr;
83 };
84
85 spi@7000 {
86 compatible = "fsl_spi";
87 reg = <0x7000 0x1000>;
88 interrupts = <0x10 0x8>;
89 interrupt-parent = < &ipic >;
90 mode = "cpu";
91 };
92
93 /* phy type (ULPI, UTMI, UTMI_WIDE, SERIAL) */
94 usb@23000 {
95 compatible = "fsl-usb2-dr";
96 reg = <0x23000 0x1000>;
97 #address-cells = <1>;
98 #size-cells = <0>;
99 interrupt-parent = < &ipic >;
100 interrupts = <0x26 0x8>;
101 phy_type = "utmi_wide";
102 };
103
104 mdio@24520 {
105 #address-cells = <1>;
106 #size-cells = <0>;
107 compatible = "fsl,gianfar-mdio";
108 reg = <0x24520 0x20>;
109 phy2: ethernet-phy@2 {
110 interrupt-parent = < &ipic >;
111 interrupts = <0x11 0x8>;
112 reg = <2>;
113 device_type = "ethernet-phy";
114 };
115 phy3: ethernet-phy@3 {
116 interrupt-parent = < &ipic >;
117 interrupts = <0x12 0x8>;
118 reg = <3>;
119 device_type = "ethernet-phy";
120 };
121 };
122
123 enet0: ethernet@24000 {
124 cell-index = <0>;
125 device_type = "network";
126 model = "eTSEC";
127 compatible = "gianfar";
128 reg = <0x24000 0x1000>;
129 local-mac-address = [ 00 00 00 00 00 00 ];
130 interrupts = <0x20 0x8 0x21 0x8 0x22 0x8>;
131 phy-connection-type = "mii";
132 interrupt-parent = < &ipic >;
133 phy-handle = < &phy2 >;
134 };
135
136 enet1: ethernet@25000 {
137 cell-index = <1>;
138 device_type = "network";
139 model = "eTSEC";
140 compatible = "gianfar";
141 reg = <0x25000 0x1000>;
142 local-mac-address = [ 00 00 00 00 00 00 ];
143 interrupts = <0x23 0x8 0x24 0x8 0x25 0x8>;
144 phy-connection-type = "mii";
145 interrupt-parent = < &ipic >;
146 phy-handle = < &phy3 >;
147 };
148
149 serial0: serial@4500 {
150 cell-index = <0>;
151 device_type = "serial";
152 compatible = "ns16550";
153 reg = <0x4500 0x100>;
154 clock-frequency = <0>;
155 interrupts = <0x9 0x8>;
156 interrupt-parent = < &ipic >;
157 };
158
159 serial1: serial@4600 {
160 cell-index = <1>;
161 device_type = "serial";
162 compatible = "ns16550";
163 reg = <0x4600 0x100>;
164 clock-frequency = <0>;
165 interrupts = <0xa 0x8>;
166 interrupt-parent = < &ipic >;
167 };
168
169 crypto@30000 {
170 model = "SEC3";
171 compatible = "talitos";
172 reg = <0x30000 0x10000>;
173 interrupts = <0xb 0x8>;
174 interrupt-parent = < &ipic >;
175 /* Rev. 3.0 geometry */
176 num-channels = <4>;
177 channel-fifo-len = <0x18>;
178 exec-units-mask = <0x000001fe>;
179 descriptor-types-mask = <0x03ab0ebf>;
180 };
181
182 sdhc@2e000 {
183 model = "eSDHC";
184 compatible = "fsl,esdhc";
185 reg = <0x2e000 0x1000>;
186 interrupts = <0x2a 0x8>;
187 interrupt-parent = < &ipic >;
188 };
189
190 /* IPIC
191 * interrupts cell = <intr #, sense>
192 * sense values match linux IORESOURCE_IRQ_* defines:
193 * sense == 8: Level, low assertion
194 * sense == 2: Edge, high-to-low change
195 */
196 ipic: pic@700 {
197 compatible = "fsl,ipic";
198 interrupt-controller;
199 #address-cells = <0>;
200 #interrupt-cells = <2>;
201 reg = <0x700 0x100>;
202 };
203 };
204
205 pci0: pci@e0008500 {
206 cell-index = <0>;
207 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
208 interrupt-map = <
209
210 /* IDSEL 0x11 */
211 0x8800 0x0 0x0 0x1 &ipic 0x14 0x8
212 0x8800 0x0 0x0 0x2 &ipic 0x15 0x8
213 0x8800 0x0 0x0 0x3 &ipic 0x16 0x8
214 0x8800 0x0 0x0 0x4 &ipic 0x17 0x8
215
216 /* IDSEL 0x12 */
217 0x9000 0x0 0x0 0x1 &ipic 0x16 0x8
218 0x9000 0x0 0x0 0x2 &ipic 0x17 0x8
219 0x9000 0x0 0x0 0x3 &ipic 0x14 0x8
220 0x9000 0x0 0x0 0x4 &ipic 0x15 0x8
221
222 /* IDSEL 0x13 */
223 0x9800 0x0 0x0 0x1 &ipic 0x17 0x8
224 0x9800 0x0 0x0 0x2 &ipic 0x14 0x8
225 0x9800 0x0 0x0 0x3 &ipic 0x15 0x8
226 0x9800 0x0 0x0 0x4 &ipic 0x16 0x8
227
228 /* IDSEL 0x15 */
229 0xa800 0x0 0x0 0x1 &ipic 0x14 0x8
230 0xa800 0x0 0x0 0x2 &ipic 0x15 0x8
231 0xa800 0x0 0x0 0x3 &ipic 0x16 0x8
232 0xa800 0x0 0x0 0x4 &ipic 0x17 0x8
233
234 /* IDSEL 0x16 */
235 0xb000 0x0 0x0 0x1 &ipic 0x17 0x8
236 0xb000 0x0 0x0 0x2 &ipic 0x14 0x8
237 0xb000 0x0 0x0 0x3 &ipic 0x15 0x8
238 0xb000 0x0 0x0 0x4 &ipic 0x16 0x8
239
240 /* IDSEL 0x17 */
241 0xb800 0x0 0x0 0x1 &ipic 0x16 0x8
242 0xb800 0x0 0x0 0x2 &ipic 0x17 0x8
243 0xb800 0x0 0x0 0x3 &ipic 0x14 0x8
244 0xb800 0x0 0x0 0x4 &ipic 0x15 0x8
245
246 /* IDSEL 0x18 */
247 0xc000 0x0 0x0 0x1 &ipic 0x15 0x8
248 0xc000 0x0 0x0 0x2 &ipic 0x16 0x8
249 0xc000 0x0 0x0 0x3 &ipic 0x17 0x8
250 0xc000 0x0 0x0 0x4 &ipic 0x14 0x8>;
251 interrupt-parent = < &ipic >;
252 interrupts = <0x42 0x8>;
253 bus-range = <0 0>;
254 ranges = <0x02000000 0x0 0x90000000 0x90000000 0x0 0x10000000
255 0x42000000 0x0 0x80000000 0x80000000 0x0 0x10000000
256 0x01000000 0x0 0x00000000 0xe0300000 0x0 0x00100000>;
257 clock-frequency = <0>;
258 #interrupt-cells = <1>;
259 #size-cells = <2>;
260 #address-cells = <3>;
261 reg = <0xe0008500 0x100>;
262 compatible = "fsl,mpc8349-pci";
263 device_type = "pci";
264 };
265};
diff --git a/arch/powerpc/boot/dts/mpc8379_mds.dts b/arch/powerpc/boot/dts/mpc8379_mds.dts
new file mode 100644
index 000000000000..fc3ba79fb684
--- /dev/null
+++ b/arch/powerpc/boot/dts/mpc8379_mds.dts
@@ -0,0 +1,293 @@
1/*
2 * MPC8379E MDS Device Tree Source
3 *
4 * Copyright 2007 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/dts-v1/;
13
14/ {
15 model = "fsl,mpc8379emds";
16 compatible = "fsl,mpc8379emds","fsl,mpc837xmds";
17 #address-cells = <1>;
18 #size-cells = <1>;
19
20 aliases {
21 ethernet0 = &enet0;
22 ethernet1 = &enet1;
23 serial0 = &serial0;
24 serial1 = &serial1;
25 pci0 = &pci0;
26 };
27
28 cpus {
29 #address-cells = <1>;
30 #size-cells = <0>;
31
32 PowerPC,8379@0 {
33 device_type = "cpu";
34 reg = <0>;
35 d-cache-line-size = <0x20>;
36 i-cache-line-size = <0x20>;
37 d-cache-size = <0x8000>; // L1, 32K
38 i-cache-size = <0x8000>; // L1, 32K
39 timebase-frequency = <0>;
40 bus-frequency = <0>;
41 clock-frequency = <0>;
42 };
43 };
44
45 memory {
46 device_type = "memory";
47 reg = <0x00000000 0x20000000>; // 512MB at 0
48 };
49
50 soc@e0000000 {
51 #address-cells = <1>;
52 #size-cells = <1>;
53 device_type = "soc";
54 ranges = <0x0 0xe0000000 0x00100000>;
55 reg = <0xe0000000 0x00000200>;
56 bus-frequency = <0>;
57
58 wdt@200 {
59 compatible = "mpc83xx_wdt";
60 reg = <0x200 0x100>;
61 };
62
63 i2c@3000 {
64 #address-cells = <1>;
65 #size-cells = <0>;
66 cell-index = <0>;
67 compatible = "fsl-i2c";
68 reg = <0x3000 0x100>;
69 interrupts = <0xe 0x8>;
70 interrupt-parent = < &ipic >;
71 dfsrr;
72 };
73
74 i2c@3100 {
75 #address-cells = <1>;
76 #size-cells = <0>;
77 cell-index = <1>;
78 compatible = "fsl-i2c";
79 reg = <0x3100 0x100>;
80 interrupts = <0xf 0x8>;
81 interrupt-parent = < &ipic >;
82 dfsrr;
83 };
84
85 spi@7000 {
86 compatible = "fsl_spi";
87 reg = <0x7000 0x1000>;
88 interrupts = <0x10 0x8>;
89 interrupt-parent = < &ipic >;
90 mode = "cpu";
91 };
92
93 /* phy type (ULPI, UTMI, UTMI_WIDE, SERIAL) */
94 usb@23000 {
95 compatible = "fsl-usb2-dr";
96 reg = <0x23000 0x1000>;
97 #address-cells = <1>;
98 #size-cells = <0>;
99 interrupt-parent = < &ipic >;
100 interrupts = <0x26 0x8>;
101 phy_type = "utmi_wide";
102 };
103
104 mdio@24520 {
105 #address-cells = <1>;
106 #size-cells = <0>;
107 compatible = "fsl,gianfar-mdio";
108 reg = <0x24520 0x20>;
109 phy2: ethernet-phy@2 {
110 interrupt-parent = < &ipic >;
111 interrupts = <0x11 0x8>;
112 reg = <2>;
113 device_type = "ethernet-phy";
114 };
115 phy3: ethernet-phy@3 {
116 interrupt-parent = < &ipic >;
117 interrupts = <0x12 0x8>;
118 reg = <3>;
119 device_type = "ethernet-phy";
120 };
121 };
122
123 enet0: ethernet@24000 {
124 cell-index = <0>;
125 device_type = "network";
126 model = "eTSEC";
127 compatible = "gianfar";
128 reg = <0x24000 0x1000>;
129 local-mac-address = [ 00 00 00 00 00 00 ];
130 interrupts = <0x20 0x8 0x21 0x8 0x22 0x8>;
131 phy-connection-type = "mii";
132 interrupt-parent = < &ipic >;
133 phy-handle = < &phy2 >;
134 };
135
136 enet1: ethernet@25000 {
137 cell-index = <1>;
138 device_type = "network";
139 model = "eTSEC";
140 compatible = "gianfar";
141 reg = <0x25000 0x1000>;
142 local-mac-address = [ 00 00 00 00 00 00 ];
143 interrupts = <0x23 0x8 0x24 0x8 0x25 0x8>;
144 phy-connection-type = "mii";
145 interrupt-parent = < &ipic >;
146 phy-handle = < &phy3 >;
147 };
148
149 serial0: serial@4500 {
150 cell-index = <0>;
151 device_type = "serial";
152 compatible = "ns16550";
153 reg = <0x4500 0x100>;
154 clock-frequency = <0>;
155 interrupts = <0x9 0x8>;
156 interrupt-parent = < &ipic >;
157 };
158
159 serial1: serial@4600 {
160 cell-index = <1>;
161 device_type = "serial";
162 compatible = "ns16550";
163 reg = <0x4600 0x100>;
164 clock-frequency = <0>;
165 interrupts = <0xa 0x8>;
166 interrupt-parent = < &ipic >;
167 };
168
169 crypto@30000 {
170 model = "SEC3";
171 compatible = "talitos";
172 reg = <0x30000 0x10000>;
173 interrupts = <0xb 0x8>;
174 interrupt-parent = < &ipic >;
175 /* Rev. 3.0 geometry */
176 num-channels = <4>;
177 channel-fifo-len = <0x18>;
178 exec-units-mask = <0x000001fe>;
179 descriptor-types-mask = <0x03ab0ebf>;
180 };
181
182 sdhc@2e000 {
183 model = "eSDHC";
184 compatible = "fsl,esdhc";
185 reg = <0x2e000 0x1000>;
186 interrupts = <0x2a 0x8>;
187 interrupt-parent = < &ipic >;
188 };
189
190 sata@18000 {
191 compatible = "fsl,mpc8379-sata";
192 reg = <0x18000 0x1000>;
193 interrupts = <0x2c 0x8>;
194 interrupt-parent = < &ipic >;
195 };
196
197 sata@19000 {
198 compatible = "fsl,mpc8379-sata";
199 reg = <0x19000 0x1000>;
200 interrupts = <0x2d 0x8>;
201 interrupt-parent = < &ipic >;
202 };
203
204 sata@1a000 {
205 compatible = "fsl,mpc8379-sata";
206 reg = <0x1a000 0x1000>;
207 interrupts = <0x2e 0x8>;
208 interrupt-parent = < &ipic >;
209 };
210
211 sata@1b000 {
212 compatible = "fsl,mpc8379-sata";
213 reg = <0x1b000 0x1000>;
214 interrupts = <0x2f 0x8>;
215 interrupt-parent = < &ipic >;
216 };
217
218 /* IPIC
219 * interrupts cell = <intr #, sense>
220 * sense values match linux IORESOURCE_IRQ_* defines:
221 * sense == 8: Level, low assertion
222 * sense == 2: Edge, high-to-low change
223 */
224 ipic: pic@700 {
225 compatible = "fsl,ipic";
226 interrupt-controller;
227 #address-cells = <0>;
228 #interrupt-cells = <2>;
229 reg = <0x700 0x100>;
230 };
231 };
232
233 pci0: pci@e0008500 {
234 cell-index = <0>;
235 interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
236 interrupt-map = <
237
238 /* IDSEL 0x11 */
239 0x8800 0x0 0x0 0x1 &ipic 0x14 0x8
240 0x8800 0x0 0x0 0x2 &ipic 0x15 0x8
241 0x8800 0x0 0x0 0x3 &ipic 0x16 0x8
242 0x8800 0x0 0x0 0x4 &ipic 0x17 0x8
243
244 /* IDSEL 0x12 */
245 0x9000 0x0 0x0 0x1 &ipic 0x16 0x8
246 0x9000 0x0 0x0 0x2 &ipic 0x17 0x8
247 0x9000 0x0 0x0 0x3 &ipic 0x14 0x8
248 0x9000 0x0 0x0 0x4 &ipic 0x15 0x8
249
250 /* IDSEL 0x13 */
251 0x9800 0x0 0x0 0x1 &ipic 0x17 0x8
252 0x9800 0x0 0x0 0x2 &ipic 0x14 0x8
253 0x9800 0x0 0x0 0x3 &ipic 0x15 0x8
254 0x9800 0x0 0x0 0x4 &ipic 0x16 0x8
255
256 /* IDSEL 0x15 */
257 0xa800 0x0 0x0 0x1 &ipic 0x14 0x8
258 0xa800 0x0 0x0 0x2 &ipic 0x15 0x8
259 0xa800 0x0 0x0 0x3 &ipic 0x16 0x8
260 0xa800 0x0 0x0 0x4 &ipic 0x17 0x8
261
262 /* IDSEL 0x16 */
263 0xb000 0x0 0x0 0x1 &ipic 0x17 0x8
264 0xb000 0x0 0x0 0x2 &ipic 0x14 0x8
265 0xb000 0x0 0x0 0x3 &ipic 0x15 0x8
266 0xb000 0x0 0x0 0x4 &ipic 0x16 0x8
267
268 /* IDSEL 0x17 */
269 0xb800 0x0 0x0 0x1 &ipic 0x16 0x8
270 0xb800 0x0 0x0 0x2 &ipic 0x17 0x8
271 0xb800 0x0 0x0 0x3 &ipic 0x14 0x8
272 0xb800 0x0 0x0 0x4 &ipic 0x15 0x8
273
274 /* IDSEL 0x18 */
275 0xc000 0x0 0x0 0x1 &ipic 0x15 0x8
276 0xc000 0x0 0x0 0x2 &ipic 0x16 0x8
277 0xc000 0x0 0x0 0x3 &ipic 0x17 0x8
278 0xc000 0x0 0x0 0x4 &ipic 0x14 0x8>;
279 interrupt-parent = < &ipic >;
280 interrupts = <0x42 0x8>;
281 bus-range = <0 0>;
282 ranges = <0x02000000 0x0 0x90000000 0x90000000 0x0 0x10000000
283 0x42000000 0x0 0x80000000 0x80000000 0x0 0x10000000
284 0x01000000 0x0 0x00000000 0xe0300000 0x0 0x00100000>;
285 clock-frequency = <0>;
286 #interrupt-cells = <1>;
287 #size-cells = <2>;
288 #address-cells = <3>;
289 reg = <0xe0008500 0x100>;
290 compatible = "fsl,mpc8349-pci";
291 device_type = "pci";
292 };
293};
diff --git a/arch/powerpc/boot/dts/mpc8544ds.dts b/arch/powerpc/boot/dts/mpc8544ds.dts
index 54b3bdf7fc97..688af9d06382 100644
--- a/arch/powerpc/boot/dts/mpc8544ds.dts
+++ b/arch/powerpc/boot/dts/mpc8544ds.dts
@@ -304,9 +304,9 @@
304 interrupt-map = < 304 interrupt-map = <
305 // IDSEL 0x1c USB 305 // IDSEL 0x1c USB
306 e000 0 0 1 &i8259 c 2 306 e000 0 0 1 &i8259 c 2
307 e100 0 0 1 &i8259 9 2 307 e100 0 0 2 &i8259 9 2
308 e200 0 0 1 &i8259 a 2 308 e200 0 0 3 &i8259 a 2
309 e300 0 0 1 &i8259 b 2 309 e300 0 0 4 &i8259 b 2
310 310
311 // IDSEL 0x1d Audio 311 // IDSEL 0x1d Audio
312 e800 0 0 1 &i8259 6 2 312 e800 0 0 1 &i8259 6 2
diff --git a/arch/powerpc/boot/dts/mpc8572ds.dts b/arch/powerpc/boot/dts/mpc8572ds.dts
index 233e0d5a8b9d..813c259abbe5 100644
--- a/arch/powerpc/boot/dts/mpc8572ds.dts
+++ b/arch/powerpc/boot/dts/mpc8572ds.dts
@@ -334,9 +334,9 @@
334 334
335 // IDSEL 0x1c USB 335 // IDSEL 0x1c USB
336 e000 0 0 1 &i8259 c 2 336 e000 0 0 1 &i8259 c 2
337 e100 0 0 1 &i8259 9 2 337 e100 0 0 2 &i8259 9 2
338 e200 0 0 1 &i8259 a 2 338 e200 0 0 3 &i8259 a 2
339 e300 0 0 1 &i8259 b 2 339 e300 0 0 4 &i8259 b 2
340 340
341 // IDSEL 0x1d Audio 341 // IDSEL 0x1d Audio
342 e800 0 0 1 &i8259 6 2 342 e800 0 0 1 &i8259 6 2
@@ -481,6 +481,7 @@
481 clock-frequency = <1fca055>; 481 clock-frequency = <1fca055>;
482 interrupt-parent = <&mpic>; 482 interrupt-parent = <&mpic>;
483 interrupts = <1b 2>; 483 interrupts = <1b 2>;
484 interrupt-map-mask = <f800 0 0 7>;
484 interrupt-map = < 485 interrupt-map = <
485 /* IDSEL 0x0 */ 486 /* IDSEL 0x0 */
486 0000 0 0 1 &mpic 0 1 487 0000 0 0 1 &mpic 0 1
diff --git a/arch/powerpc/boot/dts/mpc8610_hpcd.dts b/arch/powerpc/boot/dts/mpc8610_hpcd.dts
index 01040a752c82..d98715cbda28 100644
--- a/arch/powerpc/boot/dts/mpc8610_hpcd.dts
+++ b/arch/powerpc/boot/dts/mpc8610_hpcd.dts
@@ -1,7 +1,7 @@
1/* 1/*
2 * MPC8610 HPCD Device Tree Source 2 * MPC8610 HPCD Device Tree Source
3 * 3 *
4 * Copyright 2007 Freescale Semiconductor Inc. 4 * Copyright 2007-2008 Freescale Semiconductor Inc.
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify it 6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License Version 2 as published 7 * under the terms of the GNU General Public License Version 2 as published
@@ -49,6 +49,7 @@
49 #size-cells = <1>; 49 #size-cells = <1>;
50 #interrupt-cells = <2>; 50 #interrupt-cells = <2>;
51 device_type = "soc"; 51 device_type = "soc";
52 compatible = "fsl,mpc8610-immr", "simple-bus";
52 ranges = <0 e0000000 00100000>; 53 ranges = <0 e0000000 00100000>;
53 reg = <e0000000 1000>; 54 reg = <e0000000 1000>;
54 bus-frequency = <0>; 55 bus-frequency = <0>;
@@ -62,6 +63,13 @@
62 interrupts = <2b 2>; 63 interrupts = <2b 2>;
63 interrupt-parent = <&mpic>; 64 interrupt-parent = <&mpic>;
64 dfsrr; 65 dfsrr;
66
67 cs4270:codec@4f {
68 compatible = "cirrus,cs4270";
69 reg = <4f>;
70 /* MCLK source is a stand-alone oscillator */
71 clock-frequency = <bb8000>;
72 };
65 }; 73 };
66 74
67 i2c@3100 { 75 i2c@3100 {
@@ -111,6 +119,109 @@
111 reg = <e0000 1000>; 119 reg = <e0000 1000>;
112 fsl,has-rstcr; 120 fsl,has-rstcr;
113 }; 121 };
122
123 i2s@16000 {
124 compatible = "fsl,mpc8610-ssi";
125 cell-index = <0>;
126 reg = <16000 100>;
127 interrupt-parent = <&mpic>;
128 interrupts = <3e 2>;
129 fsl,mode = "i2s-slave";
130 codec-handle = <&cs4270>;
131 };
132
133 ssi@16100 {
134 compatible = "fsl,mpc8610-ssi";
135 cell-index = <1>;
136 reg = <16100 100>;
137 interrupt-parent = <&mpic>;
138 interrupts = <3f 2>;
139 };
140
141 dma@21300 {
142 #address-cells = <1>;
143 #size-cells = <1>;
144 compatible = "fsl,mpc8610-dma", "fsl,eloplus-dma";
145 cell-index = <0>;
146 reg = <21300 4>; /* DMA general status register */
147 ranges = <0 21100 200>;
148
149 dma-channel@0 {
150 compatible = "fsl,mpc8610-dma-channel",
151 "fsl,eloplus-dma-channel";
152 cell-index = <0>;
153 reg = <0 80>;
154 interrupt-parent = <&mpic>;
155 interrupts = <14 2>;
156 };
157 dma-channel@1 {
158 compatible = "fsl,mpc8610-dma-channel",
159 "fsl,eloplus-dma-channel";
160 cell-index = <1>;
161 reg = <80 80>;
162 interrupt-parent = <&mpic>;
163 interrupts = <15 2>;
164 };
165 dma-channel@2 {
166 compatible = "fsl,mpc8610-dma-channel",
167 "fsl,eloplus-dma-channel";
168 cell-index = <2>;
169 reg = <100 80>;
170 interrupt-parent = <&mpic>;
171 interrupts = <16 2>;
172 };
173 dma-channel@3 {
174 compatible = "fsl,mpc8610-dma-channel",
175 "fsl,eloplus-dma-channel";
176 cell-index = <3>;
177 reg = <180 80>;
178 interrupt-parent = <&mpic>;
179 interrupts = <17 2>;
180 };
181 };
182
183 dma@c300 {
184 #address-cells = <1>;
185 #size-cells = <1>;
186 compatible = "fsl,mpc8610-dma", "fsl,mpc8540-dma";
187 cell-index = <1>;
188 reg = <c300 4>; /* DMA general status register */
189 ranges = <0 c100 200>;
190
191 dma-channel@0 {
192 compatible = "fsl,mpc8610-dma-channel",
193 "fsl,mpc8540-dma-channel";
194 cell-index = <0>;
195 reg = <0 80>;
196 interrupt-parent = <&mpic>;
197 interrupts = <3c 2>;
198 };
199 dma-channel@1 {
200 compatible = "fsl,mpc8610-dma-channel",
201 "fsl,mpc8540-dma-channel";
202 cell-index = <1>;
203 reg = <80 80>;
204 interrupt-parent = <&mpic>;
205 interrupts = <3d 2>;
206 };
207 dma-channel@2 {
208 compatible = "fsl,mpc8610-dma-channel",
209 "fsl,mpc8540-dma-channel";
210 cell-index = <2>;
211 reg = <100 80>;
212 interrupt-parent = <&mpic>;
213 interrupts = <3e 2>;
214 };
215 dma-channel@3 {
216 compatible = "fsl,mpc8610-dma-channel",
217 "fsl,mpc8540-dma-channel";
218 cell-index = <3>;
219 reg = <180 80>;
220 interrupt-parent = <&mpic>;
221 interrupts = <3f 2>;
222 };
223 };
224
114 }; 225 };
115 226
116 pci0: pci@e0008000 { 227 pci0: pci@e0008000 {
diff --git a/arch/powerpc/boot/dts/mpc8641_hpcn.dts b/arch/powerpc/boot/dts/mpc8641_hpcn.dts
index 86fc2280c16d..556a9cac0793 100644
--- a/arch/powerpc/boot/dts/mpc8641_hpcn.dts
+++ b/arch/powerpc/boot/dts/mpc8641_hpcn.dts
@@ -60,10 +60,52 @@
60 reg = <00000000 40000000>; // 1G at 0x0 60 reg = <00000000 40000000>; // 1G at 0x0
61 }; 61 };
62 62
63 localbus@f8005000 {
64 #address-cells = <2>;
65 #size-cells = <1>;
66 compatible = "fsl,mpc8641-localbus", "simple-bus";
67 reg = <f8005000 1000>;
68 interrupts = <13 2>;
69 interrupt-parent = <&mpic>;
70
71 ranges = <0 0 ff800000 00800000
72 1 0 fe000000 01000000
73 2 0 f8200000 00100000
74 3 0 f8100000 00100000>;
75
76 flash@0,0 {
77 compatible = "cfi-flash";
78 reg = <0 0 00800000>;
79 bank-width = <2>;
80 device-width = <2>;
81 #address-cells = <1>;
82 #size-cells = <1>;
83 partition@0 {
84 label = "kernel";
85 reg = <00000000 00300000>;
86 };
87 partition@300000 {
88 label = "firmware b";
89 reg = <00300000 00100000>;
90 read-only;
91 };
92 partition@400000 {
93 label = "fs";
94 reg = <00400000 00300000>;
95 };
96 partition@700000 {
97 label = "firmware a";
98 reg = <00700000 00100000>;
99 read-only;
100 };
101 };
102 };
103
63 soc8641@f8000000 { 104 soc8641@f8000000 {
64 #address-cells = <1>; 105 #address-cells = <1>;
65 #size-cells = <1>; 106 #size-cells = <1>;
66 device_type = "soc"; 107 device_type = "soc";
108 compatible = "simple-bus";
67 ranges = <00000000 f8000000 00100000>; 109 ranges = <00000000 f8000000 00100000>;
68 reg = <f8000000 00001000>; // CCSRBAR 110 reg = <f8000000 00001000>; // CCSRBAR
69 bus-frequency = <0>; 111 bus-frequency = <0>;
@@ -326,9 +368,9 @@
326 368
327 // IDSEL 0x1c USB 369 // IDSEL 0x1c USB
328 e000 0 0 1 &i8259 c 2 370 e000 0 0 1 &i8259 c 2
329 e100 0 0 1 &i8259 9 2 371 e100 0 0 2 &i8259 9 2
330 e200 0 0 1 &i8259 a 2 372 e200 0 0 3 &i8259 a 2
331 e300 0 0 1 &i8259 b 2 373 e300 0 0 4 &i8259 b 2
332 374
333 // IDSEL 0x1d Audio 375 // IDSEL 0x1d Audio
334 e800 0 0 1 &i8259 6 2 376 e800 0 0 1 &i8259 6 2
diff --git a/arch/powerpc/boot/dts/storcenter.dts b/arch/powerpc/boot/dts/storcenter.dts
new file mode 100644
index 000000000000..6aa1d695e644
--- /dev/null
+++ b/arch/powerpc/boot/dts/storcenter.dts
@@ -0,0 +1,138 @@
1/*
2 * Device Tree Source for IOMEGA StorCenter
3 *
4 * Copyright 2007 Oyvind Repvik
5 * Copyright 2007 Jon Loeliger
6 *
7 * Based on the Kurobox DTS by G. Liakhovetski <g.liakhovetski@gmx.de>
8 *
9 * This file is licensed under the terms of the GNU General Public
10 * License version 2. This program is licensed "as is" without any
11 * warranty of any kind, whether express or implied.
12 */
13
14/ {
15 model = "StorCenter";
16 compatible = "storcenter";
17 #address-cells = <1>;
18 #size-cells = <1>;
19
20 aliases {
21 serial0 = &serial0;
22 serial1 = &serial1;
23 pci0 = &pci0;
24 };
25
26 cpus {
27 #address-cells = <1>;
28 #size-cells = <0>;
29
30 PowerPC,8241@0 {
31 device_type = "cpu";
32 reg = <0>;
33 clock-frequency = <d# 200000000>; /* Hz */
34 timebase-frequency = <d# 25000000>; /* Hz */
35 bus-frequency = <0>; /* from bootwrapper */
36 i-cache-line-size = <d# 32>; /* bytes */
37 d-cache-line-size = <d# 32>; /* bytes */
38 i-cache-size = <4000>;
39 d-cache-size = <4000>;
40 };
41 };
42
43 memory {
44 device_type = "memory";
45 reg = <00000000 04000000>; /* 64MB @ 0x0 */
46 };
47
48 soc@fc000000 {
49 #address-cells = <1>;
50 #size-cells = <1>;
51 device_type = "soc";
52 compatible = "fsl,mpc8241", "mpc10x";
53 store-gathering = <0>; /* 0 == off, !0 == on */
54 ranges = <0 fc000000 100000>;
55 reg = <fc000000 100000>; /* EUMB */
56 bus-frequency = <0>; /* fixed by loader */
57
58 i2c@3000 {
59 #address-cells = <1>;
60 #size-cells = <0>;
61 compatible = "fsl-i2c";
62 reg = <3000 100>;
63 interrupts = <5 2>;
64 interrupt-parent = <&mpic>;
65
66 rtc@68 {
67 compatible = "dallas,ds1337";
68 reg = <68>;
69 };
70 };
71
72 serial0: serial@4500 {
73 cell-index = <0>;
74 device_type = "serial";
75 compatible = "ns16550";
76 reg = <4500 20>;
77 clock-frequency = <d# 97553800>; /* Hz */
78 current-speed = <d# 115200>;
79 interrupts = <9 2>;
80 interrupt-parent = <&mpic>;
81 };
82
83 serial1: serial@4600 {
84 cell-index = <1>;
85 device_type = "serial";
86 compatible = "ns16550";
87 reg = <4600 20>;
88 clock-frequency = <d# 97553800>; /* Hz */
89 current-speed = <d# 9600>;
90 interrupts = <a 2>;
91 interrupt-parent = <&mpic>;
92 };
93
94 mpic: interrupt-controller@40000 {
95 #interrupt-cells = <2>;
96 device_type = "open-pic";
97 compatible = "chrp,open-pic";
98 interrupt-controller;
99 reg = <40000 40000>;
100 };
101
102 };
103
104 pci0: pci@fe800000 {
105 #address-cells = <3>;
106 #size-cells = <2>;
107 #interrupt-cells = <1>;
108 device_type = "pci";
109 compatible = "mpc10x-pci";
110 reg = <fe800000 1000>;
111 ranges = <01000000 0 0 fe000000 0 00c00000
112 02000000 0 80000000 80000000 0 70000000>;
113 bus-range = <0 ff>;
114 clock-frequency = <d# 97553800>; /* Hz */
115 interrupt-parent = <&mpic>;
116 interrupt-map-mask = <f800 0 0 7>;
117 interrupt-map = <
118 /* IDSEL 13 - IDE */
119 6800 0 0 1 &mpic 0 1
120 6800 0 0 2 &mpic 0 1
121 6800 0 0 3 &mpic 0 1
122 /* IDSEL 14 - USB */
123 7000 0 0 1 &mpic 0 1
124 7000 0 0 2 &mpic 0 1
125 7000 0 0 3 &mpic 0 1
126 7000 0 0 4 &mpic 0 1
127 /* IDSEL 15 - ETH */
128 7800 0 0 1 &mpic 0 1
129 7800 0 0 2 &mpic 0 1
130 7800 0 0 3 &mpic 0 1
131 7800 0 0 4 &mpic 0 1
132 >;
133 };
134
135 chosen {
136 linux,stdout-path = "/soc/serial@4500";
137 };
138};
diff --git a/arch/powerpc/boot/ep8248e.c b/arch/powerpc/boot/ep8248e.c
new file mode 100644
index 000000000000..f57d14d0272b
--- /dev/null
+++ b/arch/powerpc/boot/ep8248e.c
@@ -0,0 +1,55 @@
1/*
2 * Embedded Planet EP8248E with PlanetCore firmware
3 *
4 * Author: Scott Wood <scottwood@freescale.com>
5 *
6 * Copyright (c) 2007 Freescale Semiconductor, Inc.
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 version 2 as published
10 * by the Free Software Foundation.
11 */
12
13#include "ops.h"
14#include "stdio.h"
15#include "planetcore.h"
16#include "pq2.h"
17
18static char *table;
19static u64 mem_size;
20
21#include <io.h>
22
23static void platform_fixups(void)
24{
25 u64 val;
26
27 dt_fixup_memory(0, mem_size);
28 planetcore_set_mac_addrs(table);
29
30 if (!planetcore_get_decimal(table, PLANETCORE_KEY_CRYSTAL_HZ, &val)) {
31 printf("No PlanetCore crystal frequency key.\r\n");
32 return;
33 }
34
35 pq2_fixup_clocks(val);
36}
37
38void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
39 unsigned long r6, unsigned long r7)
40{
41 table = (char *)r3;
42 planetcore_prepare_table(table);
43
44 if (!planetcore_get_decimal(table, PLANETCORE_KEY_MB_RAM, &mem_size))
45 return;
46
47 mem_size *= 1024 * 1024;
48 simple_alloc_init(_end, mem_size - (unsigned long)_end, 32, 64);
49
50 fdt_init(_dtb_start);
51
52 planetcore_set_stdout_path(table);
53 serial_console_init();
54 platform_ops.fixups = platform_fixups;
55}
diff --git a/arch/powerpc/boot/ops.h b/arch/powerpc/boot/ops.h
index 6036a98e646a..5872ef1779ae 100644
--- a/arch/powerpc/boot/ops.h
+++ b/arch/powerpc/boot/ops.h
@@ -159,9 +159,23 @@ static inline void *find_node_by_devtype(const void *prev,
159 return find_node_by_prop_value_str(prev, "device_type", type); 159 return find_node_by_prop_value_str(prev, "device_type", type);
160} 160}
161 161
162static inline void *find_node_by_alias(const char *alias)
163{
164 void *devp = finddevice("/aliases");
165
166 if (devp) {
167 char path[MAX_PATH_LEN];
168 if (getprop(devp, alias, path, MAX_PATH_LEN) > 0)
169 return finddevice(path);
170 }
171
172 return NULL;
173}
174
162void dt_fixup_memory(u64 start, u64 size); 175void dt_fixup_memory(u64 start, u64 size);
163void dt_fixup_cpu_clocks(u32 cpufreq, u32 tbfreq, u32 busfreq); 176void dt_fixup_cpu_clocks(u32 cpufreq, u32 tbfreq, u32 busfreq);
164void dt_fixup_clock(const char *path, u32 freq); 177void dt_fixup_clock(const char *path, u32 freq);
178void dt_fixup_mac_address_by_alias(const char *alias, const u8 *addr);
165void dt_fixup_mac_address(u32 index, const u8 *addr); 179void dt_fixup_mac_address(u32 index, const u8 *addr);
166void __dt_fixup_mac_addresses(u32 startindex, ...); 180void __dt_fixup_mac_addresses(u32 startindex, ...);
167#define dt_fixup_mac_addresses(...) \ 181#define dt_fixup_mac_addresses(...) \
diff --git a/arch/powerpc/boot/redboot-8xx.c b/arch/powerpc/boot/redboot-8xx.c
new file mode 100644
index 000000000000..f7945adc8004
--- /dev/null
+++ b/arch/powerpc/boot/redboot-8xx.c
@@ -0,0 +1,58 @@
1/*
2 * RedBoot firmware support
3 *
4 * Author: Scott Wood <scottwood@freescale.com>
5 *
6 * Copyright (c) 2007 Freescale Semiconductor, Inc.
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 version 2 as published
10 * by the Free Software Foundation.
11 */
12
13#include "ops.h"
14#include "stdio.h"
15#include "redboot.h"
16#include "fsl-soc.h"
17#include "io.h"
18
19static bd_t bd;
20BSS_STACK(4096);
21
22#define MHZ(x) ((x + 500000) / 1000000)
23
24static void platform_fixups(void)
25{
26 void *node;
27
28 dt_fixup_memory(bd.bi_memstart, bd.bi_memsize);
29 dt_fixup_mac_addresses(bd.bi_enetaddr);
30 dt_fixup_cpu_clocks(bd.bi_intfreq, bd.bi_busfreq / 16, bd.bi_busfreq);
31
32 node = finddevice("/soc/cpm/brg");
33 if (node) {
34 printf("BRG clock-frequency <- 0x%x (%dMHz)\r\n",
35 bd.bi_busfreq, MHZ(bd.bi_busfreq));
36 setprop(node, "clock-frequency", &bd.bi_busfreq, 4);
37 }
38}
39
40void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
41 unsigned long r6, unsigned long r7)
42{
43 memcpy(&bd, (char *)r3, sizeof(bd));
44
45 if (bd.bi_tag != 0x42444944)
46 return;
47
48 simple_alloc_init(_end,
49 bd.bi_memstart + bd.bi_memsize - (unsigned long)_end,
50 32, 64);
51
52 fdt_init(_dtb_start);
53 serial_console_init();
54 platform_ops.fixups = platform_fixups;
55
56 loader_info.cmdline = (char *)bd.bi_cmdline;
57 loader_info.cmdline_len = strlen((char *)bd.bi_cmdline);
58}
diff --git a/arch/powerpc/boot/redboot.h b/arch/powerpc/boot/redboot.h
new file mode 100644
index 000000000000..ace0b7fed8eb
--- /dev/null
+++ b/arch/powerpc/boot/redboot.h
@@ -0,0 +1,56 @@
1#ifndef _PPC_REDBOOT_H
2#define _PPC_REDBOOT_H
3
4//=========================================================================
5// include/asm-ppc/redboot.h
6// Copyright (c) 2002, 2003 Gary Thomas (<gary@mlbassoc.com>
7// Copyright (c) 1997 Dan Malek (dmalek@jlc.net)
8
9//
10// Board specific details, as provided by RedBoot
11//
12
13/* A Board Information structure that is given to a program when
14 * RedBoot starts it up. Note: not all fields make sense for all
15 * architectures and it's up to the platform specific code to fill
16 * in the details.
17 */
18typedef struct bd_info {
19 unsigned int bi_tag; /* Should be 0x42444944 "BDID" */
20 unsigned int bi_size; /* Size of this structure */
21 unsigned int bi_revision; /* revision of this structure */
22 unsigned int bi_bdate; /* bootstrap date, i.e. 0x19971106 */
23 unsigned int bi_memstart; /* Memory start address */
24 unsigned int bi_memsize; /* Memory (end) size in bytes */
25 unsigned int bi_intfreq; /* Internal Freq, in Hz */
26 unsigned int bi_busfreq; /* Bus Freq, in Hz */
27 unsigned int bi_cpmfreq; /* CPM Freq, in Hz */
28 unsigned int bi_brgfreq; /* BRG Freq, in Hz */
29 unsigned int bi_vco; /* VCO Out from PLL */
30 unsigned int bi_pci_freq; /* PCI Freq, in Hz */
31 unsigned int bi_baudrate; /* Default console baud rate */
32 unsigned int bi_immr; /* IMMR when called from boot rom */
33 unsigned char bi_enetaddr[6];
34 unsigned int bi_flashbase; /* Physical address of FLASH memory */
35 unsigned int bi_flashsize; /* Length of FLASH memory */
36 int bi_flashwidth; /* Width (8,16,32,64) */
37 unsigned char *bi_cmdline; /* Pointer to command line */
38 unsigned char bi_esa[3][6]; /* Ethernet station addresses */
39 unsigned int bi_ramdisk_begin, bi_ramdisk_end;
40 struct { /* Information about [main] video screen */
41 short x_res; /* Horizontal resolution in pixels */
42 short y_res; /* Vertical resolution in pixels */
43 short bpp; /* Bits/pixel */
44 short mode; /* Type of pixels (packed, indexed) */
45 unsigned long fb; /* Pointer to frame buffer (pixel) memory */
46 } bi_video;
47 void (*bi_cputc)(char); /* Write a character to the RedBoot console */
48 char (*bi_cgetc)(void); /* Read a character from the RedBoot console */
49 int (*bi_ctstc)(void); /* Test for input on the RedBoot console */
50} bd_t;
51
52#define BI_REV 0x0102 /* Version 1.02 */
53
54#define bi_pci_busfreq bi_pci_freq
55#define bi_immr_base bi_immr
56#endif
diff --git a/arch/powerpc/boot/wrapper b/arch/powerpc/boot/wrapper
index 154df055aad2..763a0c46f441 100755
--- a/arch/powerpc/boot/wrapper
+++ b/arch/powerpc/boot/wrapper
@@ -168,7 +168,7 @@ ps3)
168 ksection=.kernel:vmlinux.bin 168 ksection=.kernel:vmlinux.bin
169 isection=.kernel:initrd 169 isection=.kernel:initrd
170 ;; 170 ;;
171ep88xc|ep405) 171ep88xc|ep405|redboot*|ep8248e)
172 platformo="$object/fixed-head.o $object/$platform.o" 172 platformo="$object/fixed-head.o $object/$platform.o"
173 binary=y 173 binary=y
174 ;; 174 ;;
diff --git a/arch/powerpc/configs/adder875-redboot_defconfig b/arch/powerpc/configs/adder875-redboot_defconfig
new file mode 100644
index 000000000000..cab5f9b64567
--- /dev/null
+++ b/arch/powerpc/configs/adder875-redboot_defconfig
@@ -0,0 +1,798 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.24-rc6
4# Thu Jan 17 16:17:38 2008
5#
6# CONFIG_PPC64 is not set
7
8#
9# Processor support
10#
11# CONFIG_6xx is not set
12# CONFIG_PPC_85xx is not set
13CONFIG_PPC_8xx=y
14# CONFIG_40x is not set
15# CONFIG_44x is not set
16# CONFIG_E200 is not set
17CONFIG_8xx=y
18# CONFIG_PPC_MM_SLICES is not set
19CONFIG_NOT_COHERENT_CACHE=y
20CONFIG_PPC32=y
21CONFIG_WORD_SIZE=32
22CONFIG_PPC_MERGE=y
23CONFIG_MMU=y
24CONFIG_GENERIC_CMOS_UPDATE=y
25CONFIG_GENERIC_TIME=y
26CONFIG_GENERIC_TIME_VSYSCALL=y
27CONFIG_GENERIC_CLOCKEVENTS=y
28CONFIG_GENERIC_HARDIRQS=y
29CONFIG_IRQ_PER_CPU=y
30CONFIG_RWSEM_XCHGADD_ALGORITHM=y
31CONFIG_ARCH_HAS_ILOG2_U32=y
32CONFIG_GENERIC_HWEIGHT=y
33CONFIG_GENERIC_CALIBRATE_DELAY=y
34CONFIG_GENERIC_FIND_NEXT_BIT=y
35# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
36CONFIG_PPC=y
37CONFIG_EARLY_PRINTK=y
38CONFIG_GENERIC_NVRAM=y
39CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
40CONFIG_ARCH_MAY_HAVE_PC_FDC=y
41CONFIG_PPC_OF=y
42CONFIG_OF=y
43# CONFIG_PPC_UDBG_16550 is not set
44# CONFIG_GENERIC_TBSYNC is not set
45CONFIG_AUDIT_ARCH=y
46CONFIG_GENERIC_BUG=y
47# CONFIG_DEFAULT_UIMAGE is not set
48CONFIG_REDBOOT=y
49# CONFIG_PPC_DCR_NATIVE is not set
50# CONFIG_PPC_DCR_MMIO is not set
51CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
52
53#
54# General setup
55#
56CONFIG_EXPERIMENTAL=y
57CONFIG_BROKEN_ON_SMP=y
58CONFIG_INIT_ENV_ARG_LIMIT=32
59CONFIG_LOCALVERSION=""
60CONFIG_LOCALVERSION_AUTO=y
61# CONFIG_SWAP is not set
62CONFIG_SYSVIPC=y
63CONFIG_SYSVIPC_SYSCTL=y
64# CONFIG_POSIX_MQUEUE is not set
65# CONFIG_BSD_PROCESS_ACCT is not set
66# CONFIG_TASKSTATS is not set
67# CONFIG_USER_NS is not set
68# CONFIG_PID_NS is not set
69# CONFIG_AUDIT is not set
70# CONFIG_IKCONFIG is not set
71CONFIG_LOG_BUF_SHIFT=14
72# CONFIG_CGROUPS is not set
73CONFIG_FAIR_GROUP_SCHED=y
74CONFIG_FAIR_USER_SCHED=y
75# CONFIG_FAIR_CGROUP_SCHED is not set
76CONFIG_SYSFS_DEPRECATED=y
77# CONFIG_RELAY is not set
78# CONFIG_BLK_DEV_INITRD is not set
79# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
80CONFIG_SYSCTL=y
81CONFIG_EMBEDDED=y
82# CONFIG_SYSCTL_SYSCALL is not set
83CONFIG_KALLSYMS=y
84# CONFIG_KALLSYMS_ALL is not set
85# CONFIG_KALLSYMS_EXTRA_PASS is not set
86CONFIG_HOTPLUG=y
87CONFIG_PRINTK=y
88CONFIG_BUG=y
89# CONFIG_ELF_CORE is not set
90# CONFIG_BASE_FULL is not set
91# CONFIG_FUTEX is not set
92CONFIG_ANON_INODES=y
93CONFIG_EPOLL=y
94CONFIG_SIGNALFD=y
95CONFIG_EVENTFD=y
96CONFIG_SHMEM=y
97# CONFIG_VM_EVENT_COUNTERS is not set
98CONFIG_SLUB_DEBUG=y
99# CONFIG_SLAB is not set
100CONFIG_SLUB=y
101# CONFIG_SLOB is not set
102# CONFIG_TINY_SHMEM is not set
103CONFIG_BASE_SMALL=1
104# CONFIG_MODULES is not set
105CONFIG_BLOCK=y
106# CONFIG_LBD is not set
107# CONFIG_BLK_DEV_IO_TRACE is not set
108# CONFIG_LSF is not set
109# CONFIG_BLK_DEV_BSG is not set
110
111#
112# IO Schedulers
113#
114CONFIG_IOSCHED_NOOP=y
115# CONFIG_IOSCHED_AS is not set
116CONFIG_IOSCHED_DEADLINE=y
117# CONFIG_IOSCHED_CFQ is not set
118# CONFIG_DEFAULT_AS is not set
119CONFIG_DEFAULT_DEADLINE=y
120# CONFIG_DEFAULT_CFQ is not set
121# CONFIG_DEFAULT_NOOP is not set
122CONFIG_DEFAULT_IOSCHED="deadline"
123
124#
125# Platform support
126#
127# CONFIG_PPC_MPC52xx is not set
128# CONFIG_PPC_MPC5200 is not set
129# CONFIG_PPC_CELL is not set
130# CONFIG_PPC_CELL_NATIVE is not set
131CONFIG_CPM1=y
132# CONFIG_MPC8XXFADS is not set
133# CONFIG_MPC86XADS is not set
134# CONFIG_MPC885ADS is not set
135# CONFIG_PPC_EP88XC is not set
136CONFIG_PPC_ADDER875=y
137
138#
139# MPC8xx CPM Options
140#
141
142#
143# Generic MPC8xx Options
144#
145CONFIG_8xx_COPYBACK=y
146# CONFIG_8xx_CPU6 is not set
147CONFIG_8xx_CPU15=y
148CONFIG_NO_UCODE_PATCH=y
149# CONFIG_USB_SOF_UCODE_PATCH is not set
150# CONFIG_I2C_SPI_UCODE_PATCH is not set
151# CONFIG_I2C_SPI_SMC1_UCODE_PATCH is not set
152# CONFIG_PQ2ADS is not set
153# CONFIG_MPIC is not set
154# CONFIG_MPIC_WEIRD is not set
155# CONFIG_PPC_I8259 is not set
156# CONFIG_PPC_RTAS is not set
157# CONFIG_MMIO_NVRAM is not set
158# CONFIG_PPC_MPC106 is not set
159# CONFIG_PPC_970_NAP is not set
160# CONFIG_PPC_INDIRECT_IO is not set
161# CONFIG_GENERIC_IOMAP is not set
162# CONFIG_CPU_FREQ is not set
163# CONFIG_CPM2 is not set
164CONFIG_PPC_CPM_NEW_BINDING=y
165# CONFIG_FSL_ULI1575 is not set
166CONFIG_CPM=y
167
168#
169# Kernel options
170#
171# CONFIG_HIGHMEM is not set
172# CONFIG_TICK_ONESHOT is not set
173# CONFIG_NO_HZ is not set
174# CONFIG_HIGH_RES_TIMERS is not set
175CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
176# CONFIG_HZ_100 is not set
177# CONFIG_HZ_250 is not set
178# CONFIG_HZ_300 is not set
179CONFIG_HZ_1000=y
180CONFIG_HZ=1000
181CONFIG_PREEMPT_NONE=y
182# CONFIG_PREEMPT_VOLUNTARY is not set
183# CONFIG_PREEMPT is not set
184CONFIG_BINFMT_ELF=y
185# CONFIG_BINFMT_MISC is not set
186# CONFIG_MATH_EMULATION is not set
187# CONFIG_8XX_MINIMAL_FPEMU is not set
188CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
189CONFIG_ARCH_FLATMEM_ENABLE=y
190CONFIG_ARCH_POPULATES_NODE_MAP=y
191CONFIG_SELECT_MEMORY_MODEL=y
192CONFIG_FLATMEM_MANUAL=y
193# CONFIG_DISCONTIGMEM_MANUAL is not set
194# CONFIG_SPARSEMEM_MANUAL is not set
195CONFIG_FLATMEM=y
196CONFIG_FLAT_NODE_MEM_MAP=y
197# CONFIG_SPARSEMEM_STATIC is not set
198# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
199CONFIG_SPLIT_PTLOCK_CPUS=4
200# CONFIG_RESOURCES_64BIT is not set
201CONFIG_ZONE_DMA_FLAG=1
202CONFIG_BOUNCE=y
203CONFIG_VIRT_TO_BUS=y
204# CONFIG_PROC_DEVICETREE is not set
205# CONFIG_CMDLINE_BOOL is not set
206# CONFIG_PM is not set
207CONFIG_SUSPEND_UP_POSSIBLE=y
208CONFIG_HIBERNATION_UP_POSSIBLE=y
209# CONFIG_SECCOMP is not set
210CONFIG_WANT_DEVICE_TREE=y
211CONFIG_DEVICE_TREE="adder875-redboot.dts"
212CONFIG_ISA_DMA_API=y
213
214#
215# Bus options
216#
217CONFIG_ZONE_DMA=y
218CONFIG_FSL_SOC=y
219# CONFIG_PCI is not set
220# CONFIG_PCI_DOMAINS is not set
221# CONFIG_PCI_SYSCALL is not set
222# CONFIG_PCI_QSPAN is not set
223# CONFIG_ARCH_SUPPORTS_MSI is not set
224# CONFIG_PCCARD is not set
225
226#
227# Advanced setup
228#
229# CONFIG_ADVANCED_OPTIONS is not set
230
231#
232# Default settings for advanced configuration options are used
233#
234CONFIG_HIGHMEM_START=0xfe000000
235CONFIG_LOWMEM_SIZE=0x30000000
236CONFIG_KERNEL_START=0xc0000000
237CONFIG_TASK_SIZE=0x80000000
238CONFIG_CONSISTENT_START=0xfd000000
239CONFIG_CONSISTENT_SIZE=0x00200000
240CONFIG_BOOT_LOAD=0x00400000
241
242#
243# Networking
244#
245CONFIG_NET=y
246
247#
248# Networking options
249#
250CONFIG_PACKET=y
251# CONFIG_PACKET_MMAP is not set
252CONFIG_UNIX=y
253# CONFIG_NET_KEY is not set
254CONFIG_INET=y
255CONFIG_IP_MULTICAST=y
256# CONFIG_IP_ADVANCED_ROUTER is not set
257CONFIG_IP_FIB_HASH=y
258CONFIG_IP_PNP=y
259# CONFIG_IP_PNP_DHCP is not set
260# CONFIG_IP_PNP_BOOTP is not set
261# CONFIG_IP_PNP_RARP is not set
262# CONFIG_NET_IPIP is not set
263# CONFIG_NET_IPGRE is not set
264# CONFIG_IP_MROUTE is not set
265# CONFIG_ARPD is not set
266CONFIG_SYN_COOKIES=y
267# CONFIG_INET_AH is not set
268# CONFIG_INET_ESP is not set
269# CONFIG_INET_IPCOMP is not set
270# CONFIG_INET_XFRM_TUNNEL is not set
271# CONFIG_INET_TUNNEL is not set
272# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
273# CONFIG_INET_XFRM_MODE_TUNNEL is not set
274# CONFIG_INET_XFRM_MODE_BEET is not set
275# CONFIG_INET_LRO is not set
276CONFIG_INET_DIAG=y
277CONFIG_INET_TCP_DIAG=y
278# CONFIG_TCP_CONG_ADVANCED is not set
279CONFIG_TCP_CONG_CUBIC=y
280CONFIG_DEFAULT_TCP_CONG="cubic"
281# CONFIG_TCP_MD5SIG is not set
282# CONFIG_IPV6 is not set
283# CONFIG_INET6_XFRM_TUNNEL is not set
284# CONFIG_INET6_TUNNEL is not set
285# CONFIG_NETWORK_SECMARK is not set
286# CONFIG_NETFILTER is not set
287# CONFIG_IP_DCCP is not set
288# CONFIG_IP_SCTP is not set
289# CONFIG_TIPC is not set
290# CONFIG_ATM is not set
291# CONFIG_BRIDGE is not set
292# CONFIG_VLAN_8021Q is not set
293# CONFIG_DECNET is not set
294# CONFIG_LLC2 is not set
295# CONFIG_IPX is not set
296# CONFIG_ATALK is not set
297# CONFIG_X25 is not set
298# CONFIG_LAPB is not set
299# CONFIG_ECONET is not set
300# CONFIG_WAN_ROUTER is not set
301# CONFIG_NET_SCHED is not set
302
303#
304# Network testing
305#
306# CONFIG_NET_PKTGEN is not set
307# CONFIG_HAMRADIO is not set
308# CONFIG_IRDA is not set
309# CONFIG_BT is not set
310# CONFIG_AF_RXRPC is not set
311
312#
313# Wireless
314#
315# CONFIG_CFG80211 is not set
316# CONFIG_WIRELESS_EXT is not set
317# CONFIG_MAC80211 is not set
318# CONFIG_IEEE80211 is not set
319# CONFIG_RFKILL is not set
320# CONFIG_NET_9P is not set
321
322#
323# Device Drivers
324#
325
326#
327# Generic Driver Options
328#
329CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
330CONFIG_STANDALONE=y
331CONFIG_PREVENT_FIRMWARE_BUILD=y
332# CONFIG_FW_LOADER is not set
333# CONFIG_DEBUG_DRIVER is not set
334# CONFIG_DEBUG_DEVRES is not set
335# CONFIG_SYS_HYPERVISOR is not set
336# CONFIG_CONNECTOR is not set
337CONFIG_MTD=y
338# CONFIG_MTD_DEBUG is not set
339# CONFIG_MTD_CONCAT is not set
340# CONFIG_MTD_PARTITIONS is not set
341
342#
343# User Modules And Translation Layers
344#
345CONFIG_MTD_CHAR=y
346CONFIG_MTD_BLKDEVS=y
347CONFIG_MTD_BLOCK=y
348# CONFIG_FTL is not set
349# CONFIG_NFTL is not set
350# CONFIG_INFTL is not set
351# CONFIG_RFD_FTL is not set
352# CONFIG_SSFDC is not set
353# CONFIG_MTD_OOPS is not set
354
355#
356# RAM/ROM/Flash chip drivers
357#
358CONFIG_MTD_CFI=y
359# CONFIG_MTD_JEDECPROBE is not set
360CONFIG_MTD_GEN_PROBE=y
361# CONFIG_MTD_CFI_ADV_OPTIONS is not set
362CONFIG_MTD_MAP_BANK_WIDTH_1=y
363CONFIG_MTD_MAP_BANK_WIDTH_2=y
364CONFIG_MTD_MAP_BANK_WIDTH_4=y
365# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
366# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
367# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
368CONFIG_MTD_CFI_I1=y
369CONFIG_MTD_CFI_I2=y
370# CONFIG_MTD_CFI_I4 is not set
371# CONFIG_MTD_CFI_I8 is not set
372# CONFIG_MTD_CFI_INTELEXT is not set
373CONFIG_MTD_CFI_AMDSTD=y
374# CONFIG_MTD_CFI_STAA is not set
375CONFIG_MTD_CFI_UTIL=y
376# CONFIG_MTD_RAM is not set
377# CONFIG_MTD_ROM is not set
378# CONFIG_MTD_ABSENT is not set
379
380#
381# Mapping drivers for chip access
382#
383# CONFIG_MTD_COMPLEX_MAPPINGS is not set
384# CONFIG_MTD_PHYSMAP is not set
385CONFIG_MTD_PHYSMAP_OF=y
386# CONFIG_MTD_CFI_FLAGADM is not set
387# CONFIG_MTD_PLATRAM is not set
388
389#
390# Self-contained MTD device drivers
391#
392# CONFIG_MTD_SLRAM is not set
393# CONFIG_MTD_PHRAM is not set
394# CONFIG_MTD_MTDRAM is not set
395# CONFIG_MTD_BLOCK2MTD is not set
396
397#
398# Disk-On-Chip Device Drivers
399#
400# CONFIG_MTD_DOC2000 is not set
401# CONFIG_MTD_DOC2001 is not set
402# CONFIG_MTD_DOC2001PLUS is not set
403# CONFIG_MTD_NAND is not set
404# CONFIG_MTD_ONENAND is not set
405
406#
407# UBI - Unsorted block images
408#
409# CONFIG_MTD_UBI is not set
410CONFIG_OF_DEVICE=y
411# CONFIG_PARPORT is not set
412# CONFIG_BLK_DEV is not set
413# CONFIG_MISC_DEVICES is not set
414# CONFIG_IDE is not set
415
416#
417# SCSI device support
418#
419# CONFIG_RAID_ATTRS is not set
420# CONFIG_SCSI is not set
421# CONFIG_SCSI_DMA is not set
422# CONFIG_SCSI_NETLINK is not set
423# CONFIG_ATA is not set
424# CONFIG_MD is not set
425# CONFIG_MACINTOSH_DRIVERS is not set
426CONFIG_NETDEVICES=y
427# CONFIG_NETDEVICES_MULTIQUEUE is not set
428# CONFIG_DUMMY is not set
429# CONFIG_BONDING is not set
430# CONFIG_MACVLAN is not set
431# CONFIG_EQUALIZER is not set
432# CONFIG_TUN is not set
433# CONFIG_VETH is not set
434CONFIG_PHYLIB=y
435
436#
437# MII PHY device drivers
438#
439# CONFIG_MARVELL_PHY is not set
440CONFIG_DAVICOM_PHY=y
441# CONFIG_QSEMI_PHY is not set
442# CONFIG_LXT_PHY is not set
443# CONFIG_CICADA_PHY is not set
444# CONFIG_VITESSE_PHY is not set
445# CONFIG_SMSC_PHY is not set
446# CONFIG_BROADCOM_PHY is not set
447# CONFIG_ICPLUS_PHY is not set
448# CONFIG_FIXED_PHY is not set
449# CONFIG_MDIO_BITBANG is not set
450CONFIG_NET_ETHERNET=y
451CONFIG_MII=y
452# CONFIG_IBM_NEW_EMAC_ZMII is not set
453# CONFIG_IBM_NEW_EMAC_RGMII is not set
454# CONFIG_IBM_NEW_EMAC_TAH is not set
455# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
456# CONFIG_B44 is not set
457CONFIG_FS_ENET=y
458# CONFIG_FS_ENET_HAS_SCC is not set
459CONFIG_FS_ENET_HAS_FEC=y
460CONFIG_FS_ENET_MDIO_FEC=y
461# CONFIG_NETDEV_1000 is not set
462# CONFIG_NETDEV_10000 is not set
463
464#
465# Wireless LAN
466#
467# CONFIG_WLAN_PRE80211 is not set
468# CONFIG_WLAN_80211 is not set
469# CONFIG_WAN is not set
470# CONFIG_PPP is not set
471# CONFIG_SLIP is not set
472# CONFIG_SHAPER is not set
473# CONFIG_NETCONSOLE is not set
474# CONFIG_NETPOLL is not set
475# CONFIG_NET_POLL_CONTROLLER is not set
476# CONFIG_ISDN is not set
477# CONFIG_PHONE is not set
478
479#
480# Input device support
481#
482CONFIG_INPUT=y
483# CONFIG_INPUT_FF_MEMLESS is not set
484# CONFIG_INPUT_POLLDEV is not set
485
486#
487# Userland interfaces
488#
489CONFIG_INPUT_MOUSEDEV=y
490CONFIG_INPUT_MOUSEDEV_PSAUX=y
491CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
492CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
493# CONFIG_INPUT_JOYDEV is not set
494# CONFIG_INPUT_EVDEV is not set
495# CONFIG_INPUT_EVBUG is not set
496
497#
498# Input Device Drivers
499#
500CONFIG_INPUT_KEYBOARD=y
501CONFIG_KEYBOARD_ATKBD=y
502# CONFIG_KEYBOARD_SUNKBD is not set
503# CONFIG_KEYBOARD_LKKBD is not set
504# CONFIG_KEYBOARD_XTKBD is not set
505# CONFIG_KEYBOARD_NEWTON is not set
506# CONFIG_KEYBOARD_STOWAWAY is not set
507CONFIG_INPUT_MOUSE=y
508CONFIG_MOUSE_PS2=y
509CONFIG_MOUSE_PS2_ALPS=y
510CONFIG_MOUSE_PS2_LOGIPS2PP=y
511CONFIG_MOUSE_PS2_SYNAPTICS=y
512CONFIG_MOUSE_PS2_LIFEBOOK=y
513CONFIG_MOUSE_PS2_TRACKPOINT=y
514# CONFIG_MOUSE_PS2_TOUCHKIT is not set
515# CONFIG_MOUSE_SERIAL is not set
516# CONFIG_MOUSE_VSXXXAA is not set
517# CONFIG_INPUT_JOYSTICK is not set
518# CONFIG_INPUT_TABLET is not set
519# CONFIG_INPUT_TOUCHSCREEN is not set
520# CONFIG_INPUT_MISC is not set
521
522#
523# Hardware I/O ports
524#
525CONFIG_SERIO=y
526CONFIG_SERIO_I8042=y
527CONFIG_SERIO_SERPORT=y
528CONFIG_SERIO_LIBPS2=y
529# CONFIG_SERIO_RAW is not set
530# CONFIG_GAMEPORT is not set
531
532#
533# Character devices
534#
535# CONFIG_VT is not set
536# CONFIG_SERIAL_NONSTANDARD is not set
537
538#
539# Serial drivers
540#
541# CONFIG_SERIAL_8250 is not set
542
543#
544# Non-8250 serial port support
545#
546# CONFIG_SERIAL_UARTLITE is not set
547CONFIG_SERIAL_CORE=y
548CONFIG_SERIAL_CORE_CONSOLE=y
549CONFIG_SERIAL_CPM=y
550CONFIG_SERIAL_CPM_CONSOLE=y
551# CONFIG_SERIAL_CPM_SCC1 is not set
552# CONFIG_SERIAL_CPM_SCC2 is not set
553# CONFIG_SERIAL_CPM_SCC3 is not set
554# CONFIG_SERIAL_CPM_SCC4 is not set
555CONFIG_SERIAL_CPM_SMC1=y
556CONFIG_SERIAL_CPM_SMC2=y
557CONFIG_UNIX98_PTYS=y
558# CONFIG_LEGACY_PTYS is not set
559# CONFIG_IPMI_HANDLER is not set
560CONFIG_HW_RANDOM=y
561# CONFIG_NVRAM is not set
562CONFIG_GEN_RTC=y
563# CONFIG_GEN_RTC_X is not set
564# CONFIG_R3964 is not set
565# CONFIG_RAW_DRIVER is not set
566# CONFIG_TCG_TPM is not set
567# CONFIG_I2C is not set
568
569#
570# SPI support
571#
572# CONFIG_SPI is not set
573# CONFIG_SPI_MASTER is not set
574# CONFIG_W1 is not set
575# CONFIG_POWER_SUPPLY is not set
576# CONFIG_HWMON is not set
577# CONFIG_WATCHDOG is not set
578
579#
580# Sonics Silicon Backplane
581#
582CONFIG_SSB_POSSIBLE=y
583# CONFIG_SSB is not set
584
585#
586# Multifunction device drivers
587#
588# CONFIG_MFD_SM501 is not set
589
590#
591# Multimedia devices
592#
593# CONFIG_VIDEO_DEV is not set
594# CONFIG_DVB_CORE is not set
595CONFIG_DAB=y
596
597#
598# Graphics support
599#
600# CONFIG_VGASTATE is not set
601CONFIG_VIDEO_OUTPUT_CONTROL=y
602# CONFIG_FB is not set
603# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
604
605#
606# Display device support
607#
608# CONFIG_DISPLAY_SUPPORT is not set
609
610#
611# Sound
612#
613# CONFIG_SOUND is not set
614# CONFIG_HID_SUPPORT is not set
615# CONFIG_USB_SUPPORT is not set
616# CONFIG_MMC is not set
617# CONFIG_NEW_LEDS is not set
618# CONFIG_EDAC is not set
619# CONFIG_RTC_CLASS is not set
620
621#
622# Userspace I/O
623#
624# CONFIG_UIO is not set
625
626#
627# File systems
628#
629# CONFIG_EXT2_FS is not set
630# CONFIG_EXT3_FS is not set
631# CONFIG_EXT4DEV_FS is not set
632# CONFIG_REISERFS_FS is not set
633# CONFIG_JFS_FS is not set
634# CONFIG_FS_POSIX_ACL is not set
635# CONFIG_XFS_FS is not set
636# CONFIG_GFS2_FS is not set
637# CONFIG_OCFS2_FS is not set
638# CONFIG_MINIX_FS is not set
639# CONFIG_ROMFS_FS is not set
640# CONFIG_INOTIFY is not set
641# CONFIG_QUOTA is not set
642# CONFIG_DNOTIFY is not set
643# CONFIG_AUTOFS_FS is not set
644# CONFIG_AUTOFS4_FS is not set
645# CONFIG_FUSE_FS is not set
646
647#
648# CD-ROM/DVD Filesystems
649#
650# CONFIG_ISO9660_FS is not set
651# CONFIG_UDF_FS is not set
652
653#
654# DOS/FAT/NT Filesystems
655#
656# CONFIG_MSDOS_FS is not set
657# CONFIG_VFAT_FS is not set
658# CONFIG_NTFS_FS is not set
659
660#
661# Pseudo filesystems
662#
663CONFIG_PROC_FS=y
664# CONFIG_PROC_KCORE is not set
665CONFIG_PROC_SYSCTL=y
666CONFIG_SYSFS=y
667CONFIG_TMPFS=y
668# CONFIG_TMPFS_POSIX_ACL is not set
669# CONFIG_HUGETLB_PAGE is not set
670# CONFIG_CONFIGFS_FS is not set
671
672#
673# Miscellaneous filesystems
674#
675# CONFIG_ADFS_FS is not set
676# CONFIG_AFFS_FS is not set
677# CONFIG_HFS_FS is not set
678# CONFIG_HFSPLUS_FS is not set
679# CONFIG_BEFS_FS is not set
680# CONFIG_BFS_FS is not set
681# CONFIG_EFS_FS is not set
682# CONFIG_JFFS2_FS is not set
683CONFIG_CRAMFS=y
684# CONFIG_VXFS_FS is not set
685# CONFIG_HPFS_FS is not set
686# CONFIG_QNX4FS_FS is not set
687# CONFIG_SYSV_FS is not set
688# CONFIG_UFS_FS is not set
689CONFIG_NETWORK_FILESYSTEMS=y
690CONFIG_NFS_FS=y
691CONFIG_NFS_V3=y
692# CONFIG_NFS_V3_ACL is not set
693# CONFIG_NFS_V4 is not set
694# CONFIG_NFS_DIRECTIO is not set
695# CONFIG_NFSD is not set
696CONFIG_ROOT_NFS=y
697CONFIG_LOCKD=y
698CONFIG_LOCKD_V4=y
699CONFIG_NFS_COMMON=y
700CONFIG_SUNRPC=y
701# CONFIG_SUNRPC_BIND34 is not set
702# CONFIG_RPCSEC_GSS_KRB5 is not set
703# CONFIG_RPCSEC_GSS_SPKM3 is not set
704# CONFIG_SMB_FS is not set
705# CONFIG_CIFS is not set
706# CONFIG_NCP_FS is not set
707# CONFIG_CODA_FS is not set
708# CONFIG_AFS_FS is not set
709
710#
711# Partition Types
712#
713CONFIG_PARTITION_ADVANCED=y
714# CONFIG_ACORN_PARTITION is not set
715# CONFIG_OSF_PARTITION is not set
716# CONFIG_AMIGA_PARTITION is not set
717# CONFIG_ATARI_PARTITION is not set
718# CONFIG_MAC_PARTITION is not set
719CONFIG_MSDOS_PARTITION=y
720# CONFIG_BSD_DISKLABEL is not set
721# CONFIG_MINIX_SUBPARTITION is not set
722# CONFIG_SOLARIS_X86_PARTITION is not set
723# CONFIG_UNIXWARE_DISKLABEL is not set
724# CONFIG_LDM_PARTITION is not set
725# CONFIG_SGI_PARTITION is not set
726# CONFIG_ULTRIX_PARTITION is not set
727# CONFIG_SUN_PARTITION is not set
728# CONFIG_KARMA_PARTITION is not set
729# CONFIG_EFI_PARTITION is not set
730# CONFIG_SYSV68_PARTITION is not set
731# CONFIG_NLS is not set
732# CONFIG_DLM is not set
733# CONFIG_UCC_SLOW is not set
734
735#
736# Library routines
737#
738# CONFIG_CRC_CCITT is not set
739# CONFIG_CRC16 is not set
740# CONFIG_CRC_ITU_T is not set
741# CONFIG_CRC32 is not set
742# CONFIG_CRC7 is not set
743# CONFIG_LIBCRC32C is not set
744CONFIG_ZLIB_INFLATE=y
745CONFIG_HAS_IOMEM=y
746CONFIG_HAS_IOPORT=y
747CONFIG_HAS_DMA=y
748CONFIG_INSTRUMENTATION=y
749# CONFIG_PROFILING is not set
750# CONFIG_MARKERS is not set
751
752#
753# Kernel hacking
754#
755# CONFIG_PRINTK_TIME is not set
756CONFIG_ENABLE_WARN_DEPRECATED=y
757CONFIG_ENABLE_MUST_CHECK=y
758CONFIG_MAGIC_SYSRQ=y
759# CONFIG_UNUSED_SYMBOLS is not set
760# CONFIG_DEBUG_FS is not set
761# CONFIG_HEADERS_CHECK is not set
762CONFIG_DEBUG_KERNEL=y
763# CONFIG_DEBUG_SHIRQ is not set
764CONFIG_DETECT_SOFTLOCKUP=y
765CONFIG_SCHED_DEBUG=y
766# CONFIG_SCHEDSTATS is not set
767# CONFIG_TIMER_STATS is not set
768# CONFIG_SLUB_DEBUG_ON is not set
769# CONFIG_DEBUG_SPINLOCK is not set
770# CONFIG_DEBUG_MUTEXES is not set
771# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
772# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
773# CONFIG_DEBUG_KOBJECT is not set
774CONFIG_DEBUG_BUGVERBOSE=y
775CONFIG_DEBUG_INFO=y
776# CONFIG_DEBUG_VM is not set
777# CONFIG_DEBUG_LIST is not set
778# CONFIG_DEBUG_SG is not set
779CONFIG_FORCED_INLINING=y
780# CONFIG_BOOT_PRINTK_DELAY is not set
781# CONFIG_FAULT_INJECTION is not set
782# CONFIG_SAMPLES is not set
783# CONFIG_DEBUG_STACKOVERFLOW is not set
784# CONFIG_DEBUG_STACK_USAGE is not set
785# CONFIG_DEBUG_PAGEALLOC is not set
786# CONFIG_DEBUGGER is not set
787# CONFIG_BDI_SWITCH is not set
788# CONFIG_PPC_EARLY_DEBUG is not set
789
790#
791# Security options
792#
793# CONFIG_KEYS is not set
794# CONFIG_SECURITY is not set
795# CONFIG_SECURITY_FILE_CAPABILITIES is not set
796# CONFIG_CRYPTO is not set
797# CONFIG_PPC_CLOCK is not set
798CONFIG_PPC_LIB_RHEAP=y
diff --git a/arch/powerpc/configs/adder875-uboot_defconfig b/arch/powerpc/configs/adder875-uboot_defconfig
new file mode 100644
index 000000000000..1faf7ef59a23
--- /dev/null
+++ b/arch/powerpc/configs/adder875-uboot_defconfig
@@ -0,0 +1,798 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.24-rc6
4# Thu Jan 17 16:17:18 2008
5#
6# CONFIG_PPC64 is not set
7
8#
9# Processor support
10#
11# CONFIG_6xx is not set
12# CONFIG_PPC_85xx is not set
13CONFIG_PPC_8xx=y
14# CONFIG_40x is not set
15# CONFIG_44x is not set
16# CONFIG_E200 is not set
17CONFIG_8xx=y
18# CONFIG_PPC_MM_SLICES is not set
19CONFIG_NOT_COHERENT_CACHE=y
20CONFIG_PPC32=y
21CONFIG_WORD_SIZE=32
22CONFIG_PPC_MERGE=y
23CONFIG_MMU=y
24CONFIG_GENERIC_CMOS_UPDATE=y
25CONFIG_GENERIC_TIME=y
26CONFIG_GENERIC_TIME_VSYSCALL=y
27CONFIG_GENERIC_CLOCKEVENTS=y
28CONFIG_GENERIC_HARDIRQS=y
29CONFIG_IRQ_PER_CPU=y
30CONFIG_RWSEM_XCHGADD_ALGORITHM=y
31CONFIG_ARCH_HAS_ILOG2_U32=y
32CONFIG_GENERIC_HWEIGHT=y
33CONFIG_GENERIC_CALIBRATE_DELAY=y
34CONFIG_GENERIC_FIND_NEXT_BIT=y
35# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
36CONFIG_PPC=y
37CONFIG_EARLY_PRINTK=y
38CONFIG_GENERIC_NVRAM=y
39CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
40CONFIG_ARCH_MAY_HAVE_PC_FDC=y
41CONFIG_PPC_OF=y
42CONFIG_OF=y
43# CONFIG_PPC_UDBG_16550 is not set
44# CONFIG_GENERIC_TBSYNC is not set
45CONFIG_AUDIT_ARCH=y
46CONFIG_GENERIC_BUG=y
47# CONFIG_DEFAULT_UIMAGE is not set
48CONFIG_REDBOOT=y
49# CONFIG_PPC_DCR_NATIVE is not set
50# CONFIG_PPC_DCR_MMIO is not set
51CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
52
53#
54# General setup
55#
56CONFIG_EXPERIMENTAL=y
57CONFIG_BROKEN_ON_SMP=y
58CONFIG_INIT_ENV_ARG_LIMIT=32
59CONFIG_LOCALVERSION=""
60CONFIG_LOCALVERSION_AUTO=y
61# CONFIG_SWAP is not set
62CONFIG_SYSVIPC=y
63CONFIG_SYSVIPC_SYSCTL=y
64# CONFIG_POSIX_MQUEUE is not set
65# CONFIG_BSD_PROCESS_ACCT is not set
66# CONFIG_TASKSTATS is not set
67# CONFIG_USER_NS is not set
68# CONFIG_PID_NS is not set
69# CONFIG_AUDIT is not set
70# CONFIG_IKCONFIG is not set
71CONFIG_LOG_BUF_SHIFT=14
72# CONFIG_CGROUPS is not set
73CONFIG_FAIR_GROUP_SCHED=y
74CONFIG_FAIR_USER_SCHED=y
75# CONFIG_FAIR_CGROUP_SCHED is not set
76CONFIG_SYSFS_DEPRECATED=y
77# CONFIG_RELAY is not set
78# CONFIG_BLK_DEV_INITRD is not set
79# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
80CONFIG_SYSCTL=y
81CONFIG_EMBEDDED=y
82# CONFIG_SYSCTL_SYSCALL is not set
83CONFIG_KALLSYMS=y
84# CONFIG_KALLSYMS_ALL is not set
85# CONFIG_KALLSYMS_EXTRA_PASS is not set
86CONFIG_HOTPLUG=y
87CONFIG_PRINTK=y
88CONFIG_BUG=y
89# CONFIG_ELF_CORE is not set
90# CONFIG_BASE_FULL is not set
91# CONFIG_FUTEX is not set
92CONFIG_ANON_INODES=y
93CONFIG_EPOLL=y
94CONFIG_SIGNALFD=y
95CONFIG_EVENTFD=y
96CONFIG_SHMEM=y
97# CONFIG_VM_EVENT_COUNTERS is not set
98CONFIG_SLUB_DEBUG=y
99# CONFIG_SLAB is not set
100CONFIG_SLUB=y
101# CONFIG_SLOB is not set
102# CONFIG_TINY_SHMEM is not set
103CONFIG_BASE_SMALL=1
104# CONFIG_MODULES is not set
105CONFIG_BLOCK=y
106# CONFIG_LBD is not set
107# CONFIG_BLK_DEV_IO_TRACE is not set
108# CONFIG_LSF is not set
109# CONFIG_BLK_DEV_BSG is not set
110
111#
112# IO Schedulers
113#
114CONFIG_IOSCHED_NOOP=y
115# CONFIG_IOSCHED_AS is not set
116CONFIG_IOSCHED_DEADLINE=y
117# CONFIG_IOSCHED_CFQ is not set
118# CONFIG_DEFAULT_AS is not set
119CONFIG_DEFAULT_DEADLINE=y
120# CONFIG_DEFAULT_CFQ is not set
121# CONFIG_DEFAULT_NOOP is not set
122CONFIG_DEFAULT_IOSCHED="deadline"
123
124#
125# Platform support
126#
127# CONFIG_PPC_MPC52xx is not set
128# CONFIG_PPC_MPC5200 is not set
129# CONFIG_PPC_CELL is not set
130# CONFIG_PPC_CELL_NATIVE is not set
131CONFIG_CPM1=y
132# CONFIG_MPC8XXFADS is not set
133# CONFIG_MPC86XADS is not set
134# CONFIG_MPC885ADS is not set
135# CONFIG_PPC_EP88XC is not set
136CONFIG_PPC_ADDER875=y
137
138#
139# MPC8xx CPM Options
140#
141
142#
143# Generic MPC8xx Options
144#
145CONFIG_8xx_COPYBACK=y
146# CONFIG_8xx_CPU6 is not set
147CONFIG_8xx_CPU15=y
148CONFIG_NO_UCODE_PATCH=y
149# CONFIG_USB_SOF_UCODE_PATCH is not set
150# CONFIG_I2C_SPI_UCODE_PATCH is not set
151# CONFIG_I2C_SPI_SMC1_UCODE_PATCH is not set
152# CONFIG_PQ2ADS is not set
153# CONFIG_MPIC is not set
154# CONFIG_MPIC_WEIRD is not set
155# CONFIG_PPC_I8259 is not set
156# CONFIG_PPC_RTAS is not set
157# CONFIG_MMIO_NVRAM is not set
158# CONFIG_PPC_MPC106 is not set
159# CONFIG_PPC_970_NAP is not set
160# CONFIG_PPC_INDIRECT_IO is not set
161# CONFIG_GENERIC_IOMAP is not set
162# CONFIG_CPU_FREQ is not set
163# CONFIG_CPM2 is not set
164CONFIG_PPC_CPM_NEW_BINDING=y
165# CONFIG_FSL_ULI1575 is not set
166CONFIG_CPM=y
167
168#
169# Kernel options
170#
171# CONFIG_HIGHMEM is not set
172# CONFIG_TICK_ONESHOT is not set
173# CONFIG_NO_HZ is not set
174# CONFIG_HIGH_RES_TIMERS is not set
175CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
176# CONFIG_HZ_100 is not set
177# CONFIG_HZ_250 is not set
178# CONFIG_HZ_300 is not set
179CONFIG_HZ_1000=y
180CONFIG_HZ=1000
181CONFIG_PREEMPT_NONE=y
182# CONFIG_PREEMPT_VOLUNTARY is not set
183# CONFIG_PREEMPT is not set
184CONFIG_BINFMT_ELF=y
185# CONFIG_BINFMT_MISC is not set
186# CONFIG_MATH_EMULATION is not set
187# CONFIG_8XX_MINIMAL_FPEMU is not set
188CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
189CONFIG_ARCH_FLATMEM_ENABLE=y
190CONFIG_ARCH_POPULATES_NODE_MAP=y
191CONFIG_SELECT_MEMORY_MODEL=y
192CONFIG_FLATMEM_MANUAL=y
193# CONFIG_DISCONTIGMEM_MANUAL is not set
194# CONFIG_SPARSEMEM_MANUAL is not set
195CONFIG_FLATMEM=y
196CONFIG_FLAT_NODE_MEM_MAP=y
197# CONFIG_SPARSEMEM_STATIC is not set
198# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
199CONFIG_SPLIT_PTLOCK_CPUS=4
200# CONFIG_RESOURCES_64BIT is not set
201CONFIG_ZONE_DMA_FLAG=1
202CONFIG_BOUNCE=y
203CONFIG_VIRT_TO_BUS=y
204# CONFIG_PROC_DEVICETREE is not set
205# CONFIG_CMDLINE_BOOL is not set
206# CONFIG_PM is not set
207CONFIG_SUSPEND_UP_POSSIBLE=y
208CONFIG_HIBERNATION_UP_POSSIBLE=y
209# CONFIG_SECCOMP is not set
210CONFIG_WANT_DEVICE_TREE=y
211CONFIG_DEVICE_TREE="adder875-uboot.dts"
212CONFIG_ISA_DMA_API=y
213
214#
215# Bus options
216#
217CONFIG_ZONE_DMA=y
218CONFIG_FSL_SOC=y
219# CONFIG_PCI is not set
220# CONFIG_PCI_DOMAINS is not set
221# CONFIG_PCI_SYSCALL is not set
222# CONFIG_PCI_QSPAN is not set
223# CONFIG_ARCH_SUPPORTS_MSI is not set
224# CONFIG_PCCARD is not set
225
226#
227# Advanced setup
228#
229# CONFIG_ADVANCED_OPTIONS is not set
230
231#
232# Default settings for advanced configuration options are used
233#
234CONFIG_HIGHMEM_START=0xfe000000
235CONFIG_LOWMEM_SIZE=0x30000000
236CONFIG_KERNEL_START=0xc0000000
237CONFIG_TASK_SIZE=0x80000000
238CONFIG_CONSISTENT_START=0xfd000000
239CONFIG_CONSISTENT_SIZE=0x00200000
240CONFIG_BOOT_LOAD=0x00400000
241
242#
243# Networking
244#
245CONFIG_NET=y
246
247#
248# Networking options
249#
250CONFIG_PACKET=y
251# CONFIG_PACKET_MMAP is not set
252CONFIG_UNIX=y
253# CONFIG_NET_KEY is not set
254CONFIG_INET=y
255CONFIG_IP_MULTICAST=y
256# CONFIG_IP_ADVANCED_ROUTER is not set
257CONFIG_IP_FIB_HASH=y
258CONFIG_IP_PNP=y
259# CONFIG_IP_PNP_DHCP is not set
260# CONFIG_IP_PNP_BOOTP is not set
261# CONFIG_IP_PNP_RARP is not set
262# CONFIG_NET_IPIP is not set
263# CONFIG_NET_IPGRE is not set
264# CONFIG_IP_MROUTE is not set
265# CONFIG_ARPD is not set
266CONFIG_SYN_COOKIES=y
267# CONFIG_INET_AH is not set
268# CONFIG_INET_ESP is not set
269# CONFIG_INET_IPCOMP is not set
270# CONFIG_INET_XFRM_TUNNEL is not set
271# CONFIG_INET_TUNNEL is not set
272# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
273# CONFIG_INET_XFRM_MODE_TUNNEL is not set
274# CONFIG_INET_XFRM_MODE_BEET is not set
275# CONFIG_INET_LRO is not set
276CONFIG_INET_DIAG=y
277CONFIG_INET_TCP_DIAG=y
278# CONFIG_TCP_CONG_ADVANCED is not set
279CONFIG_TCP_CONG_CUBIC=y
280CONFIG_DEFAULT_TCP_CONG="cubic"
281# CONFIG_TCP_MD5SIG is not set
282# CONFIG_IPV6 is not set
283# CONFIG_INET6_XFRM_TUNNEL is not set
284# CONFIG_INET6_TUNNEL is not set
285# CONFIG_NETWORK_SECMARK is not set
286# CONFIG_NETFILTER is not set
287# CONFIG_IP_DCCP is not set
288# CONFIG_IP_SCTP is not set
289# CONFIG_TIPC is not set
290# CONFIG_ATM is not set
291# CONFIG_BRIDGE is not set
292# CONFIG_VLAN_8021Q is not set
293# CONFIG_DECNET is not set
294# CONFIG_LLC2 is not set
295# CONFIG_IPX is not set
296# CONFIG_ATALK is not set
297# CONFIG_X25 is not set
298# CONFIG_LAPB is not set
299# CONFIG_ECONET is not set
300# CONFIG_WAN_ROUTER is not set
301# CONFIG_NET_SCHED is not set
302
303#
304# Network testing
305#
306# CONFIG_NET_PKTGEN is not set
307# CONFIG_HAMRADIO is not set
308# CONFIG_IRDA is not set
309# CONFIG_BT is not set
310# CONFIG_AF_RXRPC is not set
311
312#
313# Wireless
314#
315# CONFIG_CFG80211 is not set
316# CONFIG_WIRELESS_EXT is not set
317# CONFIG_MAC80211 is not set
318# CONFIG_IEEE80211 is not set
319# CONFIG_RFKILL is not set
320# CONFIG_NET_9P is not set
321
322#
323# Device Drivers
324#
325
326#
327# Generic Driver Options
328#
329CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
330CONFIG_STANDALONE=y
331CONFIG_PREVENT_FIRMWARE_BUILD=y
332# CONFIG_FW_LOADER is not set
333# CONFIG_DEBUG_DRIVER is not set
334# CONFIG_DEBUG_DEVRES is not set
335# CONFIG_SYS_HYPERVISOR is not set
336# CONFIG_CONNECTOR is not set
337CONFIG_MTD=y
338# CONFIG_MTD_DEBUG is not set
339# CONFIG_MTD_CONCAT is not set
340# CONFIG_MTD_PARTITIONS is not set
341
342#
343# User Modules And Translation Layers
344#
345CONFIG_MTD_CHAR=y
346CONFIG_MTD_BLKDEVS=y
347CONFIG_MTD_BLOCK=y
348# CONFIG_FTL is not set
349# CONFIG_NFTL is not set
350# CONFIG_INFTL is not set
351# CONFIG_RFD_FTL is not set
352# CONFIG_SSFDC is not set
353# CONFIG_MTD_OOPS is not set
354
355#
356# RAM/ROM/Flash chip drivers
357#
358CONFIG_MTD_CFI=y
359# CONFIG_MTD_JEDECPROBE is not set
360CONFIG_MTD_GEN_PROBE=y
361# CONFIG_MTD_CFI_ADV_OPTIONS is not set
362CONFIG_MTD_MAP_BANK_WIDTH_1=y
363CONFIG_MTD_MAP_BANK_WIDTH_2=y
364CONFIG_MTD_MAP_BANK_WIDTH_4=y
365# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
366# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
367# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
368CONFIG_MTD_CFI_I1=y
369CONFIG_MTD_CFI_I2=y
370# CONFIG_MTD_CFI_I4 is not set
371# CONFIG_MTD_CFI_I8 is not set
372# CONFIG_MTD_CFI_INTELEXT is not set
373CONFIG_MTD_CFI_AMDSTD=y
374# CONFIG_MTD_CFI_STAA is not set
375CONFIG_MTD_CFI_UTIL=y
376# CONFIG_MTD_RAM is not set
377# CONFIG_MTD_ROM is not set
378# CONFIG_MTD_ABSENT is not set
379
380#
381# Mapping drivers for chip access
382#
383# CONFIG_MTD_COMPLEX_MAPPINGS is not set
384# CONFIG_MTD_PHYSMAP is not set
385CONFIG_MTD_PHYSMAP_OF=y
386# CONFIG_MTD_CFI_FLAGADM is not set
387# CONFIG_MTD_PLATRAM is not set
388
389#
390# Self-contained MTD device drivers
391#
392# CONFIG_MTD_SLRAM is not set
393# CONFIG_MTD_PHRAM is not set
394# CONFIG_MTD_MTDRAM is not set
395# CONFIG_MTD_BLOCK2MTD is not set
396
397#
398# Disk-On-Chip Device Drivers
399#
400# CONFIG_MTD_DOC2000 is not set
401# CONFIG_MTD_DOC2001 is not set
402# CONFIG_MTD_DOC2001PLUS is not set
403# CONFIG_MTD_NAND is not set
404# CONFIG_MTD_ONENAND is not set
405
406#
407# UBI - Unsorted block images
408#
409# CONFIG_MTD_UBI is not set
410CONFIG_OF_DEVICE=y
411# CONFIG_PARPORT is not set
412# CONFIG_BLK_DEV is not set
413# CONFIG_MISC_DEVICES is not set
414# CONFIG_IDE is not set
415
416#
417# SCSI device support
418#
419# CONFIG_RAID_ATTRS is not set
420# CONFIG_SCSI is not set
421# CONFIG_SCSI_DMA is not set
422# CONFIG_SCSI_NETLINK is not set
423# CONFIG_ATA is not set
424# CONFIG_MD is not set
425# CONFIG_MACINTOSH_DRIVERS is not set
426CONFIG_NETDEVICES=y
427# CONFIG_NETDEVICES_MULTIQUEUE is not set
428# CONFIG_DUMMY is not set
429# CONFIG_BONDING is not set
430# CONFIG_MACVLAN is not set
431# CONFIG_EQUALIZER is not set
432# CONFIG_TUN is not set
433# CONFIG_VETH is not set
434CONFIG_PHYLIB=y
435
436#
437# MII PHY device drivers
438#
439# CONFIG_MARVELL_PHY is not set
440CONFIG_DAVICOM_PHY=y
441# CONFIG_QSEMI_PHY is not set
442# CONFIG_LXT_PHY is not set
443# CONFIG_CICADA_PHY is not set
444# CONFIG_VITESSE_PHY is not set
445# CONFIG_SMSC_PHY is not set
446# CONFIG_BROADCOM_PHY is not set
447# CONFIG_ICPLUS_PHY is not set
448# CONFIG_FIXED_PHY is not set
449# CONFIG_MDIO_BITBANG is not set
450CONFIG_NET_ETHERNET=y
451CONFIG_MII=y
452# CONFIG_IBM_NEW_EMAC_ZMII is not set
453# CONFIG_IBM_NEW_EMAC_RGMII is not set
454# CONFIG_IBM_NEW_EMAC_TAH is not set
455# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
456# CONFIG_B44 is not set
457CONFIG_FS_ENET=y
458# CONFIG_FS_ENET_HAS_SCC is not set
459CONFIG_FS_ENET_HAS_FEC=y
460CONFIG_FS_ENET_MDIO_FEC=y
461# CONFIG_NETDEV_1000 is not set
462# CONFIG_NETDEV_10000 is not set
463
464#
465# Wireless LAN
466#
467# CONFIG_WLAN_PRE80211 is not set
468# CONFIG_WLAN_80211 is not set
469# CONFIG_WAN is not set
470# CONFIG_PPP is not set
471# CONFIG_SLIP is not set
472# CONFIG_SHAPER is not set
473# CONFIG_NETCONSOLE is not set
474# CONFIG_NETPOLL is not set
475# CONFIG_NET_POLL_CONTROLLER is not set
476# CONFIG_ISDN is not set
477# CONFIG_PHONE is not set
478
479#
480# Input device support
481#
482CONFIG_INPUT=y
483# CONFIG_INPUT_FF_MEMLESS is not set
484# CONFIG_INPUT_POLLDEV is not set
485
486#
487# Userland interfaces
488#
489CONFIG_INPUT_MOUSEDEV=y
490CONFIG_INPUT_MOUSEDEV_PSAUX=y
491CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
492CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
493# CONFIG_INPUT_JOYDEV is not set
494# CONFIG_INPUT_EVDEV is not set
495# CONFIG_INPUT_EVBUG is not set
496
497#
498# Input Device Drivers
499#
500CONFIG_INPUT_KEYBOARD=y
501CONFIG_KEYBOARD_ATKBD=y
502# CONFIG_KEYBOARD_SUNKBD is not set
503# CONFIG_KEYBOARD_LKKBD is not set
504# CONFIG_KEYBOARD_XTKBD is not set
505# CONFIG_KEYBOARD_NEWTON is not set
506# CONFIG_KEYBOARD_STOWAWAY is not set
507CONFIG_INPUT_MOUSE=y
508CONFIG_MOUSE_PS2=y
509CONFIG_MOUSE_PS2_ALPS=y
510CONFIG_MOUSE_PS2_LOGIPS2PP=y
511CONFIG_MOUSE_PS2_SYNAPTICS=y
512CONFIG_MOUSE_PS2_LIFEBOOK=y
513CONFIG_MOUSE_PS2_TRACKPOINT=y
514# CONFIG_MOUSE_PS2_TOUCHKIT is not set
515# CONFIG_MOUSE_SERIAL is not set
516# CONFIG_MOUSE_VSXXXAA is not set
517# CONFIG_INPUT_JOYSTICK is not set
518# CONFIG_INPUT_TABLET is not set
519# CONFIG_INPUT_TOUCHSCREEN is not set
520# CONFIG_INPUT_MISC is not set
521
522#
523# Hardware I/O ports
524#
525CONFIG_SERIO=y
526CONFIG_SERIO_I8042=y
527CONFIG_SERIO_SERPORT=y
528CONFIG_SERIO_LIBPS2=y
529# CONFIG_SERIO_RAW is not set
530# CONFIG_GAMEPORT is not set
531
532#
533# Character devices
534#
535# CONFIG_VT is not set
536# CONFIG_SERIAL_NONSTANDARD is not set
537
538#
539# Serial drivers
540#
541# CONFIG_SERIAL_8250 is not set
542
543#
544# Non-8250 serial port support
545#
546# CONFIG_SERIAL_UARTLITE is not set
547CONFIG_SERIAL_CORE=y
548CONFIG_SERIAL_CORE_CONSOLE=y
549CONFIG_SERIAL_CPM=y
550CONFIG_SERIAL_CPM_CONSOLE=y
551# CONFIG_SERIAL_CPM_SCC1 is not set
552# CONFIG_SERIAL_CPM_SCC2 is not set
553# CONFIG_SERIAL_CPM_SCC3 is not set
554# CONFIG_SERIAL_CPM_SCC4 is not set
555CONFIG_SERIAL_CPM_SMC1=y
556CONFIG_SERIAL_CPM_SMC2=y
557CONFIG_UNIX98_PTYS=y
558# CONFIG_LEGACY_PTYS is not set
559# CONFIG_IPMI_HANDLER is not set
560CONFIG_HW_RANDOM=y
561# CONFIG_NVRAM is not set
562CONFIG_GEN_RTC=y
563# CONFIG_GEN_RTC_X is not set
564# CONFIG_R3964 is not set
565# CONFIG_RAW_DRIVER is not set
566# CONFIG_TCG_TPM is not set
567# CONFIG_I2C is not set
568
569#
570# SPI support
571#
572# CONFIG_SPI is not set
573# CONFIG_SPI_MASTER is not set
574# CONFIG_W1 is not set
575# CONFIG_POWER_SUPPLY is not set
576# CONFIG_HWMON is not set
577# CONFIG_WATCHDOG is not set
578
579#
580# Sonics Silicon Backplane
581#
582CONFIG_SSB_POSSIBLE=y
583# CONFIG_SSB is not set
584
585#
586# Multifunction device drivers
587#
588# CONFIG_MFD_SM501 is not set
589
590#
591# Multimedia devices
592#
593# CONFIG_VIDEO_DEV is not set
594# CONFIG_DVB_CORE is not set
595CONFIG_DAB=y
596
597#
598# Graphics support
599#
600# CONFIG_VGASTATE is not set
601CONFIG_VIDEO_OUTPUT_CONTROL=y
602# CONFIG_FB is not set
603# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
604
605#
606# Display device support
607#
608# CONFIG_DISPLAY_SUPPORT is not set
609
610#
611# Sound
612#
613# CONFIG_SOUND is not set
614# CONFIG_HID_SUPPORT is not set
615# CONFIG_USB_SUPPORT is not set
616# CONFIG_MMC is not set
617# CONFIG_NEW_LEDS is not set
618# CONFIG_EDAC is not set
619# CONFIG_RTC_CLASS is not set
620
621#
622# Userspace I/O
623#
624# CONFIG_UIO is not set
625
626#
627# File systems
628#
629# CONFIG_EXT2_FS is not set
630# CONFIG_EXT3_FS is not set
631# CONFIG_EXT4DEV_FS is not set
632# CONFIG_REISERFS_FS is not set
633# CONFIG_JFS_FS is not set
634# CONFIG_FS_POSIX_ACL is not set
635# CONFIG_XFS_FS is not set
636# CONFIG_GFS2_FS is not set
637# CONFIG_OCFS2_FS is not set
638# CONFIG_MINIX_FS is not set
639# CONFIG_ROMFS_FS is not set
640# CONFIG_INOTIFY is not set
641# CONFIG_QUOTA is not set
642# CONFIG_DNOTIFY is not set
643# CONFIG_AUTOFS_FS is not set
644# CONFIG_AUTOFS4_FS is not set
645# CONFIG_FUSE_FS is not set
646
647#
648# CD-ROM/DVD Filesystems
649#
650# CONFIG_ISO9660_FS is not set
651# CONFIG_UDF_FS is not set
652
653#
654# DOS/FAT/NT Filesystems
655#
656# CONFIG_MSDOS_FS is not set
657# CONFIG_VFAT_FS is not set
658# CONFIG_NTFS_FS is not set
659
660#
661# Pseudo filesystems
662#
663CONFIG_PROC_FS=y
664# CONFIG_PROC_KCORE is not set
665CONFIG_PROC_SYSCTL=y
666CONFIG_SYSFS=y
667CONFIG_TMPFS=y
668# CONFIG_TMPFS_POSIX_ACL is not set
669# CONFIG_HUGETLB_PAGE is not set
670# CONFIG_CONFIGFS_FS is not set
671
672#
673# Miscellaneous filesystems
674#
675# CONFIG_ADFS_FS is not set
676# CONFIG_AFFS_FS is not set
677# CONFIG_HFS_FS is not set
678# CONFIG_HFSPLUS_FS is not set
679# CONFIG_BEFS_FS is not set
680# CONFIG_BFS_FS is not set
681# CONFIG_EFS_FS is not set
682# CONFIG_JFFS2_FS is not set
683CONFIG_CRAMFS=y
684# CONFIG_VXFS_FS is not set
685# CONFIG_HPFS_FS is not set
686# CONFIG_QNX4FS_FS is not set
687# CONFIG_SYSV_FS is not set
688# CONFIG_UFS_FS is not set
689CONFIG_NETWORK_FILESYSTEMS=y
690CONFIG_NFS_FS=y
691CONFIG_NFS_V3=y
692# CONFIG_NFS_V3_ACL is not set
693# CONFIG_NFS_V4 is not set
694# CONFIG_NFS_DIRECTIO is not set
695# CONFIG_NFSD is not set
696CONFIG_ROOT_NFS=y
697CONFIG_LOCKD=y
698CONFIG_LOCKD_V4=y
699CONFIG_NFS_COMMON=y
700CONFIG_SUNRPC=y
701# CONFIG_SUNRPC_BIND34 is not set
702# CONFIG_RPCSEC_GSS_KRB5 is not set
703# CONFIG_RPCSEC_GSS_SPKM3 is not set
704# CONFIG_SMB_FS is not set
705# CONFIG_CIFS is not set
706# CONFIG_NCP_FS is not set
707# CONFIG_CODA_FS is not set
708# CONFIG_AFS_FS is not set
709
710#
711# Partition Types
712#
713CONFIG_PARTITION_ADVANCED=y
714# CONFIG_ACORN_PARTITION is not set
715# CONFIG_OSF_PARTITION is not set
716# CONFIG_AMIGA_PARTITION is not set
717# CONFIG_ATARI_PARTITION is not set
718# CONFIG_MAC_PARTITION is not set
719CONFIG_MSDOS_PARTITION=y
720# CONFIG_BSD_DISKLABEL is not set
721# CONFIG_MINIX_SUBPARTITION is not set
722# CONFIG_SOLARIS_X86_PARTITION is not set
723# CONFIG_UNIXWARE_DISKLABEL is not set
724# CONFIG_LDM_PARTITION is not set
725# CONFIG_SGI_PARTITION is not set
726# CONFIG_ULTRIX_PARTITION is not set
727# CONFIG_SUN_PARTITION is not set
728# CONFIG_KARMA_PARTITION is not set
729# CONFIG_EFI_PARTITION is not set
730# CONFIG_SYSV68_PARTITION is not set
731# CONFIG_NLS is not set
732# CONFIG_DLM is not set
733# CONFIG_UCC_SLOW is not set
734
735#
736# Library routines
737#
738# CONFIG_CRC_CCITT is not set
739# CONFIG_CRC16 is not set
740# CONFIG_CRC_ITU_T is not set
741# CONFIG_CRC32 is not set
742# CONFIG_CRC7 is not set
743# CONFIG_LIBCRC32C is not set
744CONFIG_ZLIB_INFLATE=y
745CONFIG_HAS_IOMEM=y
746CONFIG_HAS_IOPORT=y
747CONFIG_HAS_DMA=y
748CONFIG_INSTRUMENTATION=y
749# CONFIG_PROFILING is not set
750# CONFIG_MARKERS is not set
751
752#
753# Kernel hacking
754#
755# CONFIG_PRINTK_TIME is not set
756CONFIG_ENABLE_WARN_DEPRECATED=y
757CONFIG_ENABLE_MUST_CHECK=y
758CONFIG_MAGIC_SYSRQ=y
759# CONFIG_UNUSED_SYMBOLS is not set
760# CONFIG_DEBUG_FS is not set
761# CONFIG_HEADERS_CHECK is not set
762CONFIG_DEBUG_KERNEL=y
763# CONFIG_DEBUG_SHIRQ is not set
764CONFIG_DETECT_SOFTLOCKUP=y
765CONFIG_SCHED_DEBUG=y
766# CONFIG_SCHEDSTATS is not set
767# CONFIG_TIMER_STATS is not set
768# CONFIG_SLUB_DEBUG_ON is not set
769# CONFIG_DEBUG_SPINLOCK is not set
770# CONFIG_DEBUG_MUTEXES is not set
771# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
772# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
773# CONFIG_DEBUG_KOBJECT is not set
774CONFIG_DEBUG_BUGVERBOSE=y
775CONFIG_DEBUG_INFO=y
776# CONFIG_DEBUG_VM is not set
777# CONFIG_DEBUG_LIST is not set
778# CONFIG_DEBUG_SG is not set
779CONFIG_FORCED_INLINING=y
780# CONFIG_BOOT_PRINTK_DELAY is not set
781# CONFIG_FAULT_INJECTION is not set
782# CONFIG_SAMPLES is not set
783# CONFIG_DEBUG_STACKOVERFLOW is not set
784# CONFIG_DEBUG_STACK_USAGE is not set
785# CONFIG_DEBUG_PAGEALLOC is not set
786# CONFIG_DEBUGGER is not set
787# CONFIG_BDI_SWITCH is not set
788# CONFIG_PPC_EARLY_DEBUG is not set
789
790#
791# Security options
792#
793# CONFIG_KEYS is not set
794# CONFIG_SECURITY is not set
795# CONFIG_SECURITY_FILE_CAPABILITIES is not set
796# CONFIG_CRYPTO is not set
797# CONFIG_PPC_CLOCK is not set
798CONFIG_PPC_LIB_RHEAP=y
diff --git a/arch/powerpc/configs/ep8248e_defconfig b/arch/powerpc/configs/ep8248e_defconfig
new file mode 100644
index 000000000000..01ad5951ade9
--- /dev/null
+++ b/arch/powerpc/configs/ep8248e_defconfig
@@ -0,0 +1,821 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.24-rc6
4# Fri Jan 11 14:02:06 2008
5#
6# CONFIG_PPC64 is not set
7
8#
9# Processor support
10#
11CONFIG_6xx=y
12# CONFIG_PPC_85xx is not set
13# CONFIG_PPC_8xx is not set
14# CONFIG_40x is not set
15# CONFIG_44x is not set
16# CONFIG_E200 is not set
17CONFIG_PPC_FPU=y
18CONFIG_PPC_STD_MMU=y
19CONFIG_PPC_STD_MMU_32=y
20# CONFIG_PPC_MM_SLICES is not set
21# CONFIG_SMP is not set
22CONFIG_PPC32=y
23CONFIG_WORD_SIZE=32
24CONFIG_PPC_MERGE=y
25CONFIG_MMU=y
26CONFIG_GENERIC_CMOS_UPDATE=y
27CONFIG_GENERIC_TIME=y
28CONFIG_GENERIC_TIME_VSYSCALL=y
29CONFIG_GENERIC_CLOCKEVENTS=y
30CONFIG_GENERIC_HARDIRQS=y
31CONFIG_IRQ_PER_CPU=y
32CONFIG_RWSEM_XCHGADD_ALGORITHM=y
33CONFIG_ARCH_HAS_ILOG2_U32=y
34CONFIG_GENERIC_HWEIGHT=y
35CONFIG_GENERIC_CALIBRATE_DELAY=y
36CONFIG_GENERIC_FIND_NEXT_BIT=y
37# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
38CONFIG_PPC=y
39CONFIG_EARLY_PRINTK=y
40CONFIG_GENERIC_NVRAM=y
41CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
42CONFIG_ARCH_MAY_HAVE_PC_FDC=y
43CONFIG_PPC_OF=y
44CONFIG_OF=y
45# CONFIG_PPC_UDBG_16550 is not set
46# CONFIG_GENERIC_TBSYNC is not set
47CONFIG_AUDIT_ARCH=y
48CONFIG_GENERIC_BUG=y
49# CONFIG_DEFAULT_UIMAGE is not set
50# CONFIG_PPC_DCR_NATIVE is not set
51# CONFIG_PPC_DCR_MMIO is not set
52CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
53
54#
55# General setup
56#
57# CONFIG_EXPERIMENTAL is not set
58CONFIG_BROKEN_ON_SMP=y
59CONFIG_INIT_ENV_ARG_LIMIT=32
60CONFIG_LOCALVERSION=""
61CONFIG_LOCALVERSION_AUTO=y
62CONFIG_SWAP=y
63CONFIG_SYSVIPC=y
64CONFIG_SYSVIPC_SYSCTL=y
65# CONFIG_BSD_PROCESS_ACCT is not set
66# CONFIG_TASKSTATS is not set
67# CONFIG_AUDIT is not set
68CONFIG_IKCONFIG=y
69CONFIG_IKCONFIG_PROC=y
70CONFIG_LOG_BUF_SHIFT=14
71# CONFIG_CGROUPS is not set
72CONFIG_FAIR_GROUP_SCHED=y
73CONFIG_FAIR_USER_SCHED=y
74# CONFIG_FAIR_CGROUP_SCHED is not set
75CONFIG_SYSFS_DEPRECATED=y
76# CONFIG_RELAY is not set
77# CONFIG_BLK_DEV_INITRD is not set
78CONFIG_SYSCTL=y
79CONFIG_EMBEDDED=y
80CONFIG_SYSCTL_SYSCALL=y
81CONFIG_KALLSYMS=y
82CONFIG_KALLSYMS_ALL=y
83# CONFIG_KALLSYMS_EXTRA_PASS is not set
84CONFIG_HOTPLUG=y
85CONFIG_PRINTK=y
86CONFIG_BUG=y
87CONFIG_ELF_CORE=y
88CONFIG_BASE_FULL=y
89CONFIG_FUTEX=y
90CONFIG_ANON_INODES=y
91CONFIG_EPOLL=y
92CONFIG_SIGNALFD=y
93CONFIG_EVENTFD=y
94CONFIG_SHMEM=y
95CONFIG_VM_EVENT_COUNTERS=y
96CONFIG_SLAB=y
97# CONFIG_SLUB is not set
98# CONFIG_SLOB is not set
99CONFIG_RT_MUTEXES=y
100# CONFIG_TINY_SHMEM is not set
101CONFIG_BASE_SMALL=0
102# CONFIG_MODULES is not set
103CONFIG_BLOCK=y
104# CONFIG_LBD is not set
105# CONFIG_BLK_DEV_IO_TRACE is not set
106# CONFIG_LSF is not set
107
108#
109# IO Schedulers
110#
111CONFIG_IOSCHED_NOOP=y
112# CONFIG_IOSCHED_AS is not set
113CONFIG_IOSCHED_DEADLINE=y
114# CONFIG_IOSCHED_CFQ is not set
115# CONFIG_DEFAULT_AS is not set
116CONFIG_DEFAULT_DEADLINE=y
117# CONFIG_DEFAULT_CFQ is not set
118# CONFIG_DEFAULT_NOOP is not set
119CONFIG_DEFAULT_IOSCHED="deadline"
120
121#
122# Platform support
123#
124# CONFIG_PPC_MULTIPLATFORM is not set
125CONFIG_PPC_82xx=y
126# CONFIG_PPC_83xx is not set
127# CONFIG_PPC_86xx is not set
128# CONFIG_PPC_MPC52xx is not set
129# CONFIG_PPC_MPC5200 is not set
130# CONFIG_PPC_CELL is not set
131# CONFIG_PPC_CELL_NATIVE is not set
132# CONFIG_MPC8272_ADS is not set
133# CONFIG_PQ2FADS is not set
134CONFIG_EP8248E=y
135# CONFIG_PQ2ADS is not set
136CONFIG_8260=y
137CONFIG_8272=y
138# CONFIG_MPIC is not set
139# CONFIG_MPIC_WEIRD is not set
140# CONFIG_PPC_I8259 is not set
141# CONFIG_PPC_RTAS is not set
142# CONFIG_MMIO_NVRAM is not set
143# CONFIG_PPC_MPC106 is not set
144# CONFIG_PPC_970_NAP is not set
145# CONFIG_PPC_INDIRECT_IO is not set
146# CONFIG_GENERIC_IOMAP is not set
147# CONFIG_CPU_FREQ is not set
148CONFIG_CPM2=y
149CONFIG_PPC_CPM_NEW_BINDING=y
150# CONFIG_FSL_ULI1575 is not set
151CONFIG_CPM=y
152
153#
154# Kernel options
155#
156# CONFIG_HIGHMEM is not set
157# CONFIG_TICK_ONESHOT is not set
158# CONFIG_NO_HZ is not set
159# CONFIG_HIGH_RES_TIMERS is not set
160CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
161# CONFIG_HZ_100 is not set
162CONFIG_HZ_250=y
163# CONFIG_HZ_300 is not set
164# CONFIG_HZ_1000 is not set
165CONFIG_HZ=250
166CONFIG_PREEMPT_NONE=y
167# CONFIG_PREEMPT_VOLUNTARY is not set
168# CONFIG_PREEMPT is not set
169CONFIG_BINFMT_ELF=y
170CONFIG_BINFMT_MISC=y
171CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
172CONFIG_ARCH_FLATMEM_ENABLE=y
173CONFIG_ARCH_POPULATES_NODE_MAP=y
174CONFIG_FLATMEM=y
175CONFIG_FLAT_NODE_MEM_MAP=y
176# CONFIG_SPARSEMEM_STATIC is not set
177# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
178CONFIG_SPLIT_PTLOCK_CPUS=4
179# CONFIG_RESOURCES_64BIT is not set
180CONFIG_ZONE_DMA_FLAG=1
181CONFIG_BOUNCE=y
182CONFIG_VIRT_TO_BUS=y
183CONFIG_PROC_DEVICETREE=y
184# CONFIG_CMDLINE_BOOL is not set
185# CONFIG_PM is not set
186CONFIG_SUSPEND_UP_POSSIBLE=y
187CONFIG_HIBERNATION_UP_POSSIBLE=y
188# CONFIG_SECCOMP is not set
189CONFIG_WANT_DEVICE_TREE=y
190CONFIG_DEVICE_TREE="ep8248e.dts"
191CONFIG_ISA_DMA_API=y
192
193#
194# Bus options
195#
196CONFIG_ZONE_DMA=y
197CONFIG_FSL_SOC=y
198# CONFIG_PCI is not set
199# CONFIG_PCI_DOMAINS is not set
200# CONFIG_PCI_SYSCALL is not set
201# CONFIG_ARCH_SUPPORTS_MSI is not set
202# CONFIG_PCCARD is not set
203
204#
205# Advanced setup
206#
207# CONFIG_ADVANCED_OPTIONS is not set
208
209#
210# Default settings for advanced configuration options are used
211#
212CONFIG_HIGHMEM_START=0xfe000000
213CONFIG_LOWMEM_SIZE=0x30000000
214CONFIG_KERNEL_START=0xc0000000
215CONFIG_TASK_SIZE=0xc0000000
216CONFIG_BOOT_LOAD=0x00400000
217
218#
219# Networking
220#
221CONFIG_NET=y
222
223#
224# Networking options
225#
226CONFIG_PACKET=y
227# CONFIG_PACKET_MMAP is not set
228CONFIG_UNIX=y
229CONFIG_XFRM=y
230# CONFIG_XFRM_USER is not set
231# CONFIG_NET_KEY is not set
232CONFIG_INET=y
233CONFIG_IP_MULTICAST=y
234# CONFIG_IP_ADVANCED_ROUTER is not set
235CONFIG_IP_FIB_HASH=y
236CONFIG_IP_PNP=y
237CONFIG_IP_PNP_DHCP=y
238CONFIG_IP_PNP_BOOTP=y
239# CONFIG_IP_PNP_RARP is not set
240# CONFIG_NET_IPIP is not set
241# CONFIG_NET_IPGRE is not set
242# CONFIG_IP_MROUTE is not set
243CONFIG_SYN_COOKIES=y
244# CONFIG_INET_AH is not set
245# CONFIG_INET_ESP is not set
246# CONFIG_INET_IPCOMP is not set
247# CONFIG_INET_XFRM_TUNNEL is not set
248CONFIG_INET_TUNNEL=y
249CONFIG_INET_XFRM_MODE_TRANSPORT=y
250CONFIG_INET_XFRM_MODE_TUNNEL=y
251CONFIG_INET_XFRM_MODE_BEET=y
252# CONFIG_INET_LRO is not set
253CONFIG_INET_DIAG=y
254CONFIG_INET_TCP_DIAG=y
255# CONFIG_TCP_CONG_ADVANCED is not set
256CONFIG_TCP_CONG_CUBIC=y
257CONFIG_DEFAULT_TCP_CONG="cubic"
258# CONFIG_IP_VS is not set
259CONFIG_IPV6=y
260# CONFIG_IPV6_PRIVACY is not set
261# CONFIG_IPV6_ROUTER_PREF is not set
262# CONFIG_INET6_AH is not set
263# CONFIG_INET6_ESP is not set
264# CONFIG_INET6_IPCOMP is not set
265# CONFIG_INET6_XFRM_TUNNEL is not set
266# CONFIG_INET6_TUNNEL is not set
267CONFIG_INET6_XFRM_MODE_TRANSPORT=y
268CONFIG_INET6_XFRM_MODE_TUNNEL=y
269CONFIG_INET6_XFRM_MODE_BEET=y
270CONFIG_IPV6_SIT=y
271# CONFIG_IPV6_TUNNEL is not set
272# CONFIG_NETWORK_SECMARK is not set
273CONFIG_NETFILTER=y
274# CONFIG_NETFILTER_DEBUG is not set
275
276#
277# Core Netfilter Configuration
278#
279# CONFIG_NETFILTER_NETLINK is not set
280# CONFIG_NF_CONNTRACK_ENABLED is not set
281# CONFIG_NF_CONNTRACK is not set
282# CONFIG_NETFILTER_XTABLES is not set
283
284#
285# IP: Netfilter Configuration
286#
287# CONFIG_IP_NF_QUEUE is not set
288# CONFIG_IP_NF_IPTABLES is not set
289# CONFIG_IP_NF_ARPTABLES is not set
290# CONFIG_BRIDGE is not set
291# CONFIG_VLAN_8021Q is not set
292# CONFIG_DECNET is not set
293# CONFIG_LLC2 is not set
294# CONFIG_IPX is not set
295# CONFIG_ATALK is not set
296# CONFIG_NET_SCHED is not set
297
298#
299# Network testing
300#
301# CONFIG_NET_PKTGEN is not set
302# CONFIG_HAMRADIO is not set
303# CONFIG_IRDA is not set
304# CONFIG_BT is not set
305
306#
307# Wireless
308#
309# CONFIG_CFG80211 is not set
310# CONFIG_WIRELESS_EXT is not set
311# CONFIG_IEEE80211 is not set
312# CONFIG_RFKILL is not set
313
314#
315# Device Drivers
316#
317
318#
319# Generic Driver Options
320#
321CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
322CONFIG_STANDALONE=y
323CONFIG_PREVENT_FIRMWARE_BUILD=y
324# CONFIG_FW_LOADER is not set
325# CONFIG_DEBUG_DRIVER is not set
326# CONFIG_DEBUG_DEVRES is not set
327# CONFIG_SYS_HYPERVISOR is not set
328# CONFIG_CONNECTOR is not set
329CONFIG_MTD=y
330# CONFIG_MTD_DEBUG is not set
331# CONFIG_MTD_CONCAT is not set
332# CONFIG_MTD_PARTITIONS is not set
333
334#
335# User Modules And Translation Layers
336#
337CONFIG_MTD_CHAR=y
338CONFIG_MTD_BLKDEVS=y
339CONFIG_MTD_BLOCK=y
340# CONFIG_FTL is not set
341# CONFIG_NFTL is not set
342# CONFIG_INFTL is not set
343# CONFIG_RFD_FTL is not set
344# CONFIG_SSFDC is not set
345# CONFIG_MTD_OOPS is not set
346
347#
348# RAM/ROM/Flash chip drivers
349#
350CONFIG_MTD_CFI=y
351# CONFIG_MTD_JEDECPROBE is not set
352CONFIG_MTD_GEN_PROBE=y
353CONFIG_MTD_CFI_ADV_OPTIONS=y
354CONFIG_MTD_CFI_NOSWAP=y
355# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
356# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
357CONFIG_MTD_CFI_GEOMETRY=y
358# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
359# CONFIG_MTD_MAP_BANK_WIDTH_2 is not set
360CONFIG_MTD_MAP_BANK_WIDTH_4=y
361# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
362# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
363# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
364# CONFIG_MTD_CFI_I1 is not set
365CONFIG_MTD_CFI_I2=y
366# CONFIG_MTD_CFI_I4 is not set
367# CONFIG_MTD_CFI_I8 is not set
368# CONFIG_MTD_OTP is not set
369# CONFIG_MTD_CFI_INTELEXT is not set
370CONFIG_MTD_CFI_AMDSTD=y
371# CONFIG_MTD_CFI_STAA is not set
372CONFIG_MTD_CFI_UTIL=y
373# CONFIG_MTD_RAM is not set
374# CONFIG_MTD_ROM is not set
375# CONFIG_MTD_ABSENT is not set
376
377#
378# Mapping drivers for chip access
379#
380# CONFIG_MTD_COMPLEX_MAPPINGS is not set
381# CONFIG_MTD_PHYSMAP is not set
382CONFIG_MTD_PHYSMAP_OF=y
383# CONFIG_MTD_PLATRAM is not set
384
385#
386# Self-contained MTD device drivers
387#
388# CONFIG_MTD_SLRAM is not set
389# CONFIG_MTD_PHRAM is not set
390# CONFIG_MTD_MTDRAM is not set
391# CONFIG_MTD_BLOCK2MTD is not set
392
393#
394# Disk-On-Chip Device Drivers
395#
396# CONFIG_MTD_DOC2000 is not set
397# CONFIG_MTD_DOC2001 is not set
398# CONFIG_MTD_DOC2001PLUS is not set
399# CONFIG_MTD_NAND is not set
400# CONFIG_MTD_ONENAND is not set
401
402#
403# UBI - Unsorted block images
404#
405# CONFIG_MTD_UBI is not set
406CONFIG_OF_DEVICE=y
407# CONFIG_PARPORT is not set
408CONFIG_BLK_DEV=y
409# CONFIG_BLK_DEV_FD is not set
410# CONFIG_BLK_DEV_COW_COMMON is not set
411CONFIG_BLK_DEV_LOOP=y
412# CONFIG_BLK_DEV_CRYPTOLOOP is not set
413# CONFIG_BLK_DEV_NBD is not set
414# CONFIG_BLK_DEV_RAM is not set
415# CONFIG_CDROM_PKTCDVD is not set
416# CONFIG_ATA_OVER_ETH is not set
417# CONFIG_MISC_DEVICES is not set
418# CONFIG_IDE is not set
419
420#
421# SCSI device support
422#
423# CONFIG_RAID_ATTRS is not set
424# CONFIG_SCSI is not set
425# CONFIG_SCSI_DMA is not set
426# CONFIG_SCSI_NETLINK is not set
427# CONFIG_ATA is not set
428# CONFIG_MD is not set
429# CONFIG_MACINTOSH_DRIVERS is not set
430CONFIG_NETDEVICES=y
431# CONFIG_NETDEVICES_MULTIQUEUE is not set
432# CONFIG_DUMMY is not set
433# CONFIG_BONDING is not set
434# CONFIG_EQUALIZER is not set
435# CONFIG_TUN is not set
436# CONFIG_VETH is not set
437CONFIG_PHYLIB=y
438
439#
440# MII PHY device drivers
441#
442# CONFIG_MARVELL_PHY is not set
443CONFIG_DAVICOM_PHY=y
444# CONFIG_QSEMI_PHY is not set
445# CONFIG_LXT_PHY is not set
446# CONFIG_CICADA_PHY is not set
447# CONFIG_VITESSE_PHY is not set
448# CONFIG_SMSC_PHY is not set
449# CONFIG_BROADCOM_PHY is not set
450# CONFIG_ICPLUS_PHY is not set
451# CONFIG_FIXED_PHY is not set
452CONFIG_MDIO_BITBANG=y
453CONFIG_NET_ETHERNET=y
454CONFIG_MII=y
455# CONFIG_IBM_NEW_EMAC_ZMII is not set
456# CONFIG_IBM_NEW_EMAC_RGMII is not set
457# CONFIG_IBM_NEW_EMAC_TAH is not set
458# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
459# CONFIG_B44 is not set
460CONFIG_FS_ENET=y
461# CONFIG_FS_ENET_HAS_SCC is not set
462CONFIG_FS_ENET_HAS_FCC=y
463# CONFIG_FS_ENET_MDIO_FCC is not set
464CONFIG_NETDEV_1000=y
465CONFIG_NETDEV_10000=y
466
467#
468# Wireless LAN
469#
470# CONFIG_WLAN_PRE80211 is not set
471# CONFIG_WLAN_80211 is not set
472# CONFIG_WAN is not set
473# CONFIG_PPP is not set
474# CONFIG_SLIP is not set
475# CONFIG_NETPOLL is not set
476# CONFIG_NET_POLL_CONTROLLER is not set
477# CONFIG_ISDN is not set
478# CONFIG_PHONE is not set
479
480#
481# Input device support
482#
483# CONFIG_INPUT is not set
484
485#
486# Hardware I/O ports
487#
488# CONFIG_SERIO is not set
489# CONFIG_GAMEPORT is not set
490
491#
492# Character devices
493#
494# CONFIG_VT is not set
495# CONFIG_SERIAL_NONSTANDARD is not set
496
497#
498# Serial drivers
499#
500# CONFIG_SERIAL_8250 is not set
501
502#
503# Non-8250 serial port support
504#
505# CONFIG_SERIAL_UARTLITE is not set
506CONFIG_SERIAL_CORE=y
507CONFIG_SERIAL_CORE_CONSOLE=y
508CONFIG_SERIAL_CPM=y
509CONFIG_SERIAL_CPM_CONSOLE=y
510CONFIG_SERIAL_CPM_SCC1=y
511# CONFIG_SERIAL_CPM_SCC2 is not set
512# CONFIG_SERIAL_CPM_SCC3 is not set
513CONFIG_SERIAL_CPM_SCC4=y
514# CONFIG_SERIAL_CPM_SMC1 is not set
515# CONFIG_SERIAL_CPM_SMC2 is not set
516CONFIG_UNIX98_PTYS=y
517CONFIG_LEGACY_PTYS=y
518CONFIG_LEGACY_PTY_COUNT=256
519# CONFIG_IPMI_HANDLER is not set
520CONFIG_HW_RANDOM=y
521# CONFIG_NVRAM is not set
522# CONFIG_GEN_RTC is not set
523# CONFIG_R3964 is not set
524# CONFIG_RAW_DRIVER is not set
525# CONFIG_I2C is not set
526
527#
528# SPI support
529#
530# CONFIG_SPI is not set
531# CONFIG_SPI_MASTER is not set
532# CONFIG_W1 is not set
533# CONFIG_POWER_SUPPLY is not set
534# CONFIG_HWMON is not set
535# CONFIG_WATCHDOG is not set
536
537#
538# Sonics Silicon Backplane
539#
540CONFIG_SSB_POSSIBLE=y
541# CONFIG_SSB is not set
542
543#
544# Multifunction device drivers
545#
546# CONFIG_MFD_SM501 is not set
547
548#
549# Multimedia devices
550#
551# CONFIG_VIDEO_DEV is not set
552# CONFIG_DVB_CORE is not set
553CONFIG_DAB=y
554
555#
556# Graphics support
557#
558# CONFIG_VGASTATE is not set
559# CONFIG_VIDEO_OUTPUT_CONTROL is not set
560# CONFIG_FB is not set
561# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
562
563#
564# Display device support
565#
566# CONFIG_DISPLAY_SUPPORT is not set
567
568#
569# Sound
570#
571# CONFIG_SOUND is not set
572# CONFIG_USB_SUPPORT is not set
573# CONFIG_MMC is not set
574# CONFIG_NEW_LEDS is not set
575# CONFIG_RTC_CLASS is not set
576
577#
578# Userspace I/O
579#
580# CONFIG_UIO is not set
581
582#
583# File systems
584#
585CONFIG_EXT2_FS=y
586# CONFIG_EXT2_FS_XATTR is not set
587# CONFIG_EXT2_FS_XIP is not set
588CONFIG_EXT3_FS=y
589# CONFIG_EXT3_FS_XATTR is not set
590CONFIG_JBD=y
591# CONFIG_REISERFS_FS is not set
592# CONFIG_JFS_FS is not set
593# CONFIG_FS_POSIX_ACL is not set
594# CONFIG_XFS_FS is not set
595# CONFIG_OCFS2_FS is not set
596# CONFIG_MINIX_FS is not set
597# CONFIG_ROMFS_FS is not set
598CONFIG_INOTIFY=y
599CONFIG_INOTIFY_USER=y
600# CONFIG_QUOTA is not set
601CONFIG_DNOTIFY=y
602# CONFIG_AUTOFS_FS is not set
603CONFIG_AUTOFS4_FS=y
604# CONFIG_FUSE_FS is not set
605
606#
607# CD-ROM/DVD Filesystems
608#
609# CONFIG_ISO9660_FS is not set
610# CONFIG_UDF_FS is not set
611
612#
613# DOS/FAT/NT Filesystems
614#
615# CONFIG_MSDOS_FS is not set
616# CONFIG_VFAT_FS is not set
617# CONFIG_NTFS_FS is not set
618
619#
620# Pseudo filesystems
621#
622CONFIG_PROC_FS=y
623CONFIG_PROC_KCORE=y
624CONFIG_PROC_SYSCTL=y
625CONFIG_SYSFS=y
626CONFIG_TMPFS=y
627# CONFIG_TMPFS_POSIX_ACL is not set
628# CONFIG_HUGETLB_PAGE is not set
629
630#
631# Miscellaneous filesystems
632#
633# CONFIG_HFSPLUS_FS is not set
634# CONFIG_JFFS2_FS is not set
635CONFIG_CRAMFS=y
636# CONFIG_VXFS_FS is not set
637# CONFIG_HPFS_FS is not set
638# CONFIG_QNX4FS_FS is not set
639# CONFIG_SYSV_FS is not set
640# CONFIG_UFS_FS is not set
641CONFIG_NETWORK_FILESYSTEMS=y
642CONFIG_NFS_FS=y
643CONFIG_NFS_V3=y
644# CONFIG_NFS_V3_ACL is not set
645# CONFIG_NFS_DIRECTIO is not set
646# CONFIG_NFSD is not set
647CONFIG_ROOT_NFS=y
648CONFIG_LOCKD=y
649CONFIG_LOCKD_V4=y
650CONFIG_NFS_COMMON=y
651CONFIG_SUNRPC=y
652# CONFIG_SMB_FS is not set
653# CONFIG_CIFS is not set
654# CONFIG_NCP_FS is not set
655# CONFIG_CODA_FS is not set
656
657#
658# Partition Types
659#
660CONFIG_PARTITION_ADVANCED=y
661# CONFIG_ACORN_PARTITION is not set
662# CONFIG_OSF_PARTITION is not set
663# CONFIG_AMIGA_PARTITION is not set
664# CONFIG_ATARI_PARTITION is not set
665# CONFIG_MAC_PARTITION is not set
666CONFIG_MSDOS_PARTITION=y
667# CONFIG_BSD_DISKLABEL is not set
668# CONFIG_MINIX_SUBPARTITION is not set
669# CONFIG_SOLARIS_X86_PARTITION is not set
670# CONFIG_UNIXWARE_DISKLABEL is not set
671# CONFIG_LDM_PARTITION is not set
672# CONFIG_SGI_PARTITION is not set
673# CONFIG_ULTRIX_PARTITION is not set
674# CONFIG_SUN_PARTITION is not set
675# CONFIG_KARMA_PARTITION is not set
676# CONFIG_EFI_PARTITION is not set
677# CONFIG_SYSV68_PARTITION is not set
678CONFIG_NLS=y
679CONFIG_NLS_DEFAULT="iso8859-1"
680CONFIG_NLS_CODEPAGE_437=y
681# CONFIG_NLS_CODEPAGE_737 is not set
682# CONFIG_NLS_CODEPAGE_775 is not set
683# CONFIG_NLS_CODEPAGE_850 is not set
684# CONFIG_NLS_CODEPAGE_852 is not set
685# CONFIG_NLS_CODEPAGE_855 is not set
686# CONFIG_NLS_CODEPAGE_857 is not set
687# CONFIG_NLS_CODEPAGE_860 is not set
688# CONFIG_NLS_CODEPAGE_861 is not set
689# CONFIG_NLS_CODEPAGE_862 is not set
690# CONFIG_NLS_CODEPAGE_863 is not set
691# CONFIG_NLS_CODEPAGE_864 is not set
692# CONFIG_NLS_CODEPAGE_865 is not set
693# CONFIG_NLS_CODEPAGE_866 is not set
694# CONFIG_NLS_CODEPAGE_869 is not set
695# CONFIG_NLS_CODEPAGE_936 is not set
696# CONFIG_NLS_CODEPAGE_950 is not set
697# CONFIG_NLS_CODEPAGE_932 is not set
698# CONFIG_NLS_CODEPAGE_949 is not set
699# CONFIG_NLS_CODEPAGE_874 is not set
700# CONFIG_NLS_ISO8859_8 is not set
701# CONFIG_NLS_CODEPAGE_1250 is not set
702# CONFIG_NLS_CODEPAGE_1251 is not set
703CONFIG_NLS_ASCII=y
704CONFIG_NLS_ISO8859_1=y
705# CONFIG_NLS_ISO8859_2 is not set
706# CONFIG_NLS_ISO8859_3 is not set
707# CONFIG_NLS_ISO8859_4 is not set
708# CONFIG_NLS_ISO8859_5 is not set
709# CONFIG_NLS_ISO8859_6 is not set
710# CONFIG_NLS_ISO8859_7 is not set
711# CONFIG_NLS_ISO8859_9 is not set
712# CONFIG_NLS_ISO8859_13 is not set
713# CONFIG_NLS_ISO8859_14 is not set
714# CONFIG_NLS_ISO8859_15 is not set
715# CONFIG_NLS_KOI8_R is not set
716# CONFIG_NLS_KOI8_U is not set
717CONFIG_NLS_UTF8=y
718# CONFIG_UCC_SLOW is not set
719
720#
721# Library routines
722#
723# CONFIG_CRC_CCITT is not set
724# CONFIG_CRC16 is not set
725# CONFIG_CRC_ITU_T is not set
726# CONFIG_CRC32 is not set
727# CONFIG_CRC7 is not set
728# CONFIG_LIBCRC32C is not set
729CONFIG_ZLIB_INFLATE=y
730CONFIG_PLIST=y
731CONFIG_HAS_IOMEM=y
732CONFIG_HAS_IOPORT=y
733CONFIG_HAS_DMA=y
734CONFIG_INSTRUMENTATION=y
735# CONFIG_PROFILING is not set
736# CONFIG_MARKERS is not set
737
738#
739# Kernel hacking
740#
741# CONFIG_PRINTK_TIME is not set
742CONFIG_ENABLE_WARN_DEPRECATED=y
743CONFIG_ENABLE_MUST_CHECK=y
744CONFIG_MAGIC_SYSRQ=y
745# CONFIG_UNUSED_SYMBOLS is not set
746# CONFIG_DEBUG_FS is not set
747# CONFIG_HEADERS_CHECK is not set
748CONFIG_DEBUG_KERNEL=y
749# CONFIG_DEBUG_SHIRQ is not set
750# CONFIG_DETECT_SOFTLOCKUP is not set
751# CONFIG_SCHED_DEBUG is not set
752# CONFIG_SCHEDSTATS is not set
753# CONFIG_TIMER_STATS is not set
754# CONFIG_DEBUG_SLAB is not set
755# CONFIG_DEBUG_RT_MUTEXES is not set
756# CONFIG_RT_MUTEX_TESTER is not set
757# CONFIG_DEBUG_SPINLOCK is not set
758# CONFIG_DEBUG_MUTEXES is not set
759# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
760# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
761# CONFIG_DEBUG_KOBJECT is not set
762CONFIG_DEBUG_BUGVERBOSE=y
763CONFIG_DEBUG_INFO=y
764# CONFIG_DEBUG_VM is not set
765# CONFIG_DEBUG_LIST is not set
766# CONFIG_DEBUG_SG is not set
767CONFIG_FORCED_INLINING=y
768# CONFIG_BOOT_PRINTK_DELAY is not set
769# CONFIG_FAULT_INJECTION is not set
770# CONFIG_SAMPLES is not set
771# CONFIG_DEBUG_STACKOVERFLOW is not set
772# CONFIG_DEBUG_STACK_USAGE is not set
773# CONFIG_DEBUG_PAGEALLOC is not set
774# CONFIG_DEBUGGER is not set
775# CONFIG_KGDB_CONSOLE is not set
776CONFIG_BDI_SWITCH=y
777# CONFIG_PPC_EARLY_DEBUG is not set
778
779#
780# Security options
781#
782# CONFIG_KEYS is not set
783# CONFIG_SECURITY is not set
784CONFIG_CRYPTO=y
785CONFIG_CRYPTO_ALGAPI=y
786CONFIG_CRYPTO_BLKCIPHER=y
787CONFIG_CRYPTO_MANAGER=y
788# CONFIG_CRYPTO_HMAC is not set
789# CONFIG_CRYPTO_NULL is not set
790# CONFIG_CRYPTO_MD4 is not set
791CONFIG_CRYPTO_MD5=y
792# CONFIG_CRYPTO_SHA1 is not set
793# CONFIG_CRYPTO_SHA256 is not set
794# CONFIG_CRYPTO_SHA512 is not set
795# CONFIG_CRYPTO_WP512 is not set
796# CONFIG_CRYPTO_TGR192 is not set
797CONFIG_CRYPTO_ECB=y
798CONFIG_CRYPTO_CBC=y
799CONFIG_CRYPTO_PCBC=y
800# CONFIG_CRYPTO_CRYPTD is not set
801CONFIG_CRYPTO_DES=y
802# CONFIG_CRYPTO_FCRYPT is not set
803# CONFIG_CRYPTO_BLOWFISH is not set
804# CONFIG_CRYPTO_TWOFISH is not set
805# CONFIG_CRYPTO_SERPENT is not set
806# CONFIG_CRYPTO_AES is not set
807# CONFIG_CRYPTO_CAST5 is not set
808# CONFIG_CRYPTO_CAST6 is not set
809# CONFIG_CRYPTO_TEA is not set
810# CONFIG_CRYPTO_ARC4 is not set
811# CONFIG_CRYPTO_KHAZAD is not set
812# CONFIG_CRYPTO_ANUBIS is not set
813# CONFIG_CRYPTO_SEED is not set
814# CONFIG_CRYPTO_DEFLATE is not set
815# CONFIG_CRYPTO_MICHAEL_MIC is not set
816# CONFIG_CRYPTO_CRC32C is not set
817# CONFIG_CRYPTO_CAMELLIA is not set
818# CONFIG_CRYPTO_AUTHENC is not set
819# CONFIG_CRYPTO_HW is not set
820# CONFIG_PPC_CLOCK is not set
821CONFIG_PPC_LIB_RHEAP=y
diff --git a/arch/powerpc/configs/mpc8313_rdb_defconfig b/arch/powerpc/configs/mpc8313_rdb_defconfig
index c9af905bbb1d..db08e736c0ac 100644
--- a/arch/powerpc/configs/mpc8313_rdb_defconfig
+++ b/arch/powerpc/configs/mpc8313_rdb_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.24-rc4 3# Linux kernel version: 2.6.24-rc6
4# Thu Dec 6 16:48:31 2007 4# Thu Jan 17 16:35:55 2008
5# 5#
6# CONFIG_PPC64 is not set 6# CONFIG_PPC64 is not set
7 7
@@ -144,6 +144,7 @@ CONFIG_MPC8313_RDB=y
144# CONFIG_MPC834x_MDS is not set 144# CONFIG_MPC834x_MDS is not set
145# CONFIG_MPC834x_ITX is not set 145# CONFIG_MPC834x_ITX is not set
146# CONFIG_MPC836x_MDS is not set 146# CONFIG_MPC836x_MDS is not set
147# CONFIG_MPC837x_MDS is not set
147CONFIG_PPC_MPC831x=y 148CONFIG_PPC_MPC831x=y
148# CONFIG_MPIC is not set 149# CONFIG_MPIC is not set
149# CONFIG_MPIC_WEIRD is not set 150# CONFIG_MPIC_WEIRD is not set
@@ -336,15 +337,16 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
336CONFIG_MTD=y 337CONFIG_MTD=y
337# CONFIG_MTD_DEBUG is not set 338# CONFIG_MTD_DEBUG is not set
338# CONFIG_MTD_CONCAT is not set 339# CONFIG_MTD_CONCAT is not set
339# CONFIG_MTD_PARTITIONS is not set 340CONFIG_MTD_PARTITIONS=y
341# CONFIG_MTD_REDBOOT_PARTS is not set
342# CONFIG_MTD_CMDLINE_PARTS is not set
340 343
341# 344#
342# User Modules And Translation Layers 345# User Modules And Translation Layers
343# 346#
344CONFIG_MTD_CHAR=y 347CONFIG_MTD_CHAR=y
345# CONFIG_MTD_BLKDEVS is not set 348CONFIG_MTD_BLKDEVS=y
346# CONFIG_MTD_BLOCK is not set 349CONFIG_MTD_BLOCK=y
347# CONFIG_MTD_BLOCK_RO is not set
348# CONFIG_FTL is not set 350# CONFIG_FTL is not set
349# CONFIG_NFTL is not set 351# CONFIG_NFTL is not set
350# CONFIG_INFTL is not set 352# CONFIG_INFTL is not set
@@ -381,11 +383,8 @@ CONFIG_MTD_CFI_UTIL=y
381# Mapping drivers for chip access 383# Mapping drivers for chip access
382# 384#
383# CONFIG_MTD_COMPLEX_MAPPINGS is not set 385# CONFIG_MTD_COMPLEX_MAPPINGS is not set
384CONFIG_MTD_PHYSMAP=y 386# CONFIG_MTD_PHYSMAP is not set
385CONFIG_MTD_PHYSMAP_START=0xfe000000 387CONFIG_MTD_PHYSMAP_OF=y
386CONFIG_MTD_PHYSMAP_LEN=0x1000000
387CONFIG_MTD_PHYSMAP_BANKWIDTH=2
388# CONFIG_MTD_PHYSMAP_OF is not set
389# CONFIG_MTD_INTEL_VR_NOR is not set 388# CONFIG_MTD_INTEL_VR_NOR is not set
390# CONFIG_MTD_PLATRAM is not set 389# CONFIG_MTD_PLATRAM is not set
391 390
@@ -406,7 +405,16 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=2
406# CONFIG_MTD_DOC2000 is not set 405# CONFIG_MTD_DOC2000 is not set
407# CONFIG_MTD_DOC2001 is not set 406# CONFIG_MTD_DOC2001 is not set
408# CONFIG_MTD_DOC2001PLUS is not set 407# CONFIG_MTD_DOC2001PLUS is not set
409# CONFIG_MTD_NAND is not set 408CONFIG_MTD_NAND=y
409CONFIG_MTD_NAND_VERIFY_WRITE=y
410# CONFIG_MTD_NAND_ECC_SMC is not set
411# CONFIG_MTD_NAND_MUSEUM_IDS is not set
412CONFIG_MTD_NAND_IDS=y
413# CONFIG_MTD_NAND_DISKONCHIP is not set
414# CONFIG_MTD_NAND_CAFE is not set
415# CONFIG_MTD_NAND_NANDSIM is not set
416# CONFIG_MTD_NAND_PLATFORM is not set
417# CONFIG_MTD_ALAUDA is not set
410# CONFIG_MTD_ONENAND is not set 418# CONFIG_MTD_ONENAND is not set
411 419
412# 420#
@@ -1178,7 +1186,17 @@ CONFIG_TMPFS=y
1178# CONFIG_BEFS_FS is not set 1186# CONFIG_BEFS_FS is not set
1179# CONFIG_BFS_FS is not set 1187# CONFIG_BFS_FS is not set
1180# CONFIG_EFS_FS is not set 1188# CONFIG_EFS_FS is not set
1181# CONFIG_JFFS2_FS is not set 1189CONFIG_JFFS2_FS=y
1190CONFIG_JFFS2_FS_DEBUG=0
1191CONFIG_JFFS2_FS_WRITEBUFFER=y
1192# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
1193# CONFIG_JFFS2_SUMMARY is not set
1194# CONFIG_JFFS2_FS_XATTR is not set
1195# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
1196CONFIG_JFFS2_ZLIB=y
1197# CONFIG_JFFS2_LZO is not set
1198CONFIG_JFFS2_RTIME=y
1199# CONFIG_JFFS2_RUBIN is not set
1182# CONFIG_CRAMFS is not set 1200# CONFIG_CRAMFS is not set
1183# CONFIG_VXFS_FS is not set 1201# CONFIG_VXFS_FS is not set
1184# CONFIG_HPFS_FS is not set 1202# CONFIG_HPFS_FS is not set
@@ -1242,6 +1260,8 @@ CONFIG_BITREVERSE=y
1242CONFIG_CRC32=y 1260CONFIG_CRC32=y
1243# CONFIG_CRC7 is not set 1261# CONFIG_CRC7 is not set
1244# CONFIG_LIBCRC32C is not set 1262# CONFIG_LIBCRC32C is not set
1263CONFIG_ZLIB_INFLATE=y
1264CONFIG_ZLIB_DEFLATE=y
1245CONFIG_PLIST=y 1265CONFIG_PLIST=y
1246CONFIG_HAS_IOMEM=y 1266CONFIG_HAS_IOMEM=y
1247CONFIG_HAS_IOPORT=y 1267CONFIG_HAS_IOPORT=y
diff --git a/arch/powerpc/configs/mpc834x_itx_defconfig b/arch/powerpc/configs/mpc834x_itx_defconfig
index 6feb86e2b786..2fbe4e5344f7 100644
--- a/arch/powerpc/configs/mpc834x_itx_defconfig
+++ b/arch/powerpc/configs/mpc834x_itx_defconfig
@@ -570,7 +570,8 @@ CONFIG_SATA_SIL=y
570# CONFIG_PATA_SIS is not set 570# CONFIG_PATA_SIS is not set
571# CONFIG_PATA_VIA is not set 571# CONFIG_PATA_VIA is not set
572# CONFIG_PATA_WINBOND is not set 572# CONFIG_PATA_WINBOND is not set
573# CONFIG_PATA_PLATFORM is not set 573CONFIG_PATA_PLATFORM=y
574CONFIG_PATA_OF_PLATFORM=y
574CONFIG_MD=y 575CONFIG_MD=y
575CONFIG_BLK_DEV_MD=y 576CONFIG_BLK_DEV_MD=y
576CONFIG_MD_LINEAR=y 577CONFIG_MD_LINEAR=y
diff --git a/arch/powerpc/configs/mpc8610_hpcd_defconfig b/arch/powerpc/configs/mpc8610_hpcd_defconfig
index 9614d24f832a..2500ef42959d 100644
--- a/arch/powerpc/configs/mpc8610_hpcd_defconfig
+++ b/arch/powerpc/configs/mpc8610_hpcd_defconfig
@@ -696,7 +696,7 @@ CONFIG_SERIAL_8250_RSA=y
696CONFIG_SERIAL_CORE=y 696CONFIG_SERIAL_CORE=y
697CONFIG_SERIAL_CORE_CONSOLE=y 697CONFIG_SERIAL_CORE_CONSOLE=y
698# CONFIG_SERIAL_JSM is not set 698# CONFIG_SERIAL_JSM is not set
699CONFIG_SERIAL_OF_PLATFORM=y 699# CONFIG_SERIAL_OF_PLATFORM is not set
700CONFIG_UNIX98_PTYS=y 700CONFIG_UNIX98_PTYS=y
701# CONFIG_LEGACY_PTYS is not set 701# CONFIG_LEGACY_PTYS is not set
702# CONFIG_IPMI_HANDLER is not set 702# CONFIG_IPMI_HANDLER is not set
@@ -708,7 +708,60 @@ CONFIG_UNIX98_PTYS=y
708# CONFIG_RAW_DRIVER is not set 708# CONFIG_RAW_DRIVER is not set
709# CONFIG_TCG_TPM is not set 709# CONFIG_TCG_TPM is not set
710CONFIG_DEVPORT=y 710CONFIG_DEVPORT=y
711# CONFIG_I2C is not set 711CONFIG_I2C=y
712CONFIG_I2C_BOARDINFO=y
713# CONFIG_I2C_CHARDEV is not set
714
715#
716# I2C Algorithms
717#
718# CONFIG_I2C_ALGOBIT is not set
719# CONFIG_I2C_ALGOPCF is not set
720# CONFIG_I2C_ALGOPCA is not set
721
722#
723# I2C Hardware Bus support
724#
725# CONFIG_I2C_ALI1535 is not set
726# CONFIG_I2C_ALI1563 is not set
727# CONFIG_I2C_ALI15X3 is not set
728# CONFIG_I2C_AMD756 is not set
729# CONFIG_I2C_AMD8111 is not set
730# CONFIG_I2C_I801 is not set
731# CONFIG_I2C_I810 is not set
732# CONFIG_I2C_PIIX4 is not set
733CONFIG_I2C_MPC=y
734# CONFIG_I2C_NFORCE2 is not set
735# CONFIG_I2C_OCORES is not set
736# CONFIG_I2C_PARPORT_LIGHT is not set
737# CONFIG_I2C_PROSAVAGE is not set
738# CONFIG_I2C_SAVAGE4 is not set
739# CONFIG_I2C_SIMTEC is not set
740# CONFIG_I2C_SIS5595 is not set
741# CONFIG_I2C_SIS630 is not set
742# CONFIG_I2C_SIS96X is not set
743# CONFIG_I2C_TAOS_EVM is not set
744# CONFIG_I2C_VIA is not set
745# CONFIG_I2C_VIAPRO is not set
746# CONFIG_I2C_VOODOO3 is not set
747
748#
749# Miscellaneous I2C Chip support
750#
751# CONFIG_SENSORS_DS1337 is not set
752# CONFIG_SENSORS_DS1374 is not set
753# CONFIG_DS1682 is not set
754# CONFIG_SENSORS_EEPROM is not set
755# CONFIG_SENSORS_PCF8574 is not set
756# CONFIG_SENSORS_PCA9539 is not set
757# CONFIG_SENSORS_PCF8591 is not set
758# CONFIG_SENSORS_M41T00 is not set
759# CONFIG_SENSORS_MAX6875 is not set
760# CONFIG_SENSORS_TSL2550 is not set
761# CONFIG_I2C_DEBUG_CORE is not set
762# CONFIG_I2C_DEBUG_ALGO is not set
763# CONFIG_I2C_DEBUG_BUS is not set
764# CONFIG_I2C_DEBUG_CHIP is not set
712 765
713# 766#
714# SPI support 767# SPI support
@@ -763,7 +816,119 @@ CONFIG_DUMMY_CONSOLE=y
763# 816#
764# Sound 817# Sound
765# 818#
766# CONFIG_SOUND is not set 819CONFIG_SOUND=y
820
821#
822# Advanced Linux Sound Architecture
823#
824CONFIG_SND=y
825CONFIG_SND_TIMER=y
826CONFIG_SND_PCM=y
827# CONFIG_SND_SEQUENCER is not set
828CONFIG_SND_OSSEMUL=y
829CONFIG_SND_MIXER_OSS=y
830CONFIG_SND_PCM_OSS=y
831# CONFIG_SND_PCM_OSS_PLUGINS is not set
832# CONFIG_SND_DYNAMIC_MINORS is not set
833# CONFIG_SND_SUPPORT_OLD_API is not set
834CONFIG_SND_VERBOSE_PROCFS=y
835# CONFIG_SND_VERBOSE_PRINTK is not set
836# CONFIG_SND_DEBUG is not set
837
838#
839# Generic devices
840#
841# CONFIG_SND_DUMMY is not set
842# CONFIG_SND_MTPAV is not set
843# CONFIG_SND_SERIAL_U16550 is not set
844# CONFIG_SND_MPU401 is not set
845
846#
847# PCI devices
848#
849# CONFIG_SND_AD1889 is not set
850# CONFIG_SND_ALS300 is not set
851# CONFIG_SND_ALS4000 is not set
852# CONFIG_SND_ALI5451 is not set
853# CONFIG_SND_ATIIXP is not set
854# CONFIG_SND_ATIIXP_MODEM is not set
855# CONFIG_SND_AU8810 is not set
856# CONFIG_SND_AU8820 is not set
857# CONFIG_SND_AU8830 is not set
858# CONFIG_SND_AZT3328 is not set
859# CONFIG_SND_BT87X is not set
860# CONFIG_SND_CA0106 is not set
861# CONFIG_SND_CMIPCI is not set
862# CONFIG_SND_CS4281 is not set
863# CONFIG_SND_CS46XX is not set
864# CONFIG_SND_CS5530 is not set
865# CONFIG_SND_DARLA20 is not set
866# CONFIG_SND_GINA20 is not set
867# CONFIG_SND_LAYLA20 is not set
868# CONFIG_SND_DARLA24 is not set
869# CONFIG_SND_GINA24 is not set
870# CONFIG_SND_LAYLA24 is not set
871# CONFIG_SND_MONA is not set
872# CONFIG_SND_MIA is not set
873# CONFIG_SND_ECHO3G is not set
874# CONFIG_SND_INDIGO is not set
875# CONFIG_SND_INDIGOIO is not set
876# CONFIG_SND_INDIGODJ is not set
877# CONFIG_SND_EMU10K1 is not set
878# CONFIG_SND_EMU10K1X is not set
879# CONFIG_SND_ENS1370 is not set
880# CONFIG_SND_ENS1371 is not set
881# CONFIG_SND_ES1938 is not set
882# CONFIG_SND_ES1968 is not set
883# CONFIG_SND_FM801 is not set
884# CONFIG_SND_HDA_INTEL is not set
885# CONFIG_SND_HDSP is not set
886# CONFIG_SND_HDSPM is not set
887# CONFIG_SND_ICE1712 is not set
888# CONFIG_SND_ICE1724 is not set
889# CONFIG_SND_INTEL8X0 is not set
890# CONFIG_SND_INTEL8X0M is not set
891# CONFIG_SND_KORG1212 is not set
892# CONFIG_SND_MAESTRO3 is not set
893# CONFIG_SND_MIXART is not set
894# CONFIG_SND_NM256 is not set
895# CONFIG_SND_PCXHR is not set
896# CONFIG_SND_RIPTIDE is not set
897# CONFIG_SND_RME32 is not set
898# CONFIG_SND_RME96 is not set
899# CONFIG_SND_RME9652 is not set
900# CONFIG_SND_SONICVIBES is not set
901# CONFIG_SND_TRIDENT is not set
902# CONFIG_SND_VIA82XX is not set
903# CONFIG_SND_VIA82XX_MODEM is not set
904# CONFIG_SND_VX222 is not set
905# CONFIG_SND_YMFPCI is not set
906
907#
908# ALSA PowerMac devices
909#
910
911#
912# ALSA PowerPC devices
913#
914
915#
916# System on Chip audio support
917#
918CONFIG_SND_SOC=y
919
920#
921# SoC Audio support for SuperH
922#
923
924#
925# ALSA SoC audio for Freescale SOCs
926#
927CONFIG_SND_SOC_MPC8610=y
928CONFIG_SND_SOC_MPC8610_HPCD=y
929CONFIG_SND_SOC_CS4270=y
930CONFIG_SND_SOC_CS4270_VD33_ERRATA=y
931
767CONFIG_HID_SUPPORT=y 932CONFIG_HID_SUPPORT=y
768CONFIG_HID=y 933CONFIG_HID=y
769# CONFIG_HID_DEBUG is not set 934# CONFIG_HID_DEBUG is not set
diff --git a/arch/powerpc/configs/storcenter_defconfig b/arch/powerpc/configs/storcenter_defconfig
new file mode 100644
index 000000000000..a034a5e452ef
--- /dev/null
+++ b/arch/powerpc/configs/storcenter_defconfig
@@ -0,0 +1,1174 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.24-rc6
4# Tue Jan 8 09:33:54 2008
5#
6# CONFIG_PPC64 is not set
7
8#
9# Processor support
10#
11CONFIG_6xx=y
12# CONFIG_PPC_85xx is not set
13# CONFIG_PPC_8xx is not set
14# CONFIG_40x is not set
15# CONFIG_44x is not set
16# CONFIG_E200 is not set
17CONFIG_PPC_FPU=y
18# CONFIG_ALTIVEC is not set
19CONFIG_PPC_STD_MMU=y
20CONFIG_PPC_STD_MMU_32=y
21# CONFIG_PPC_MM_SLICES is not set
22# CONFIG_SMP is not set
23CONFIG_PPC32=y
24CONFIG_WORD_SIZE=32
25CONFIG_PPC_MERGE=y
26CONFIG_MMU=y
27CONFIG_GENERIC_CMOS_UPDATE=y
28CONFIG_GENERIC_TIME=y
29CONFIG_GENERIC_TIME_VSYSCALL=y
30CONFIG_GENERIC_CLOCKEVENTS=y
31CONFIG_GENERIC_HARDIRQS=y
32CONFIG_IRQ_PER_CPU=y
33CONFIG_RWSEM_XCHGADD_ALGORITHM=y
34CONFIG_ARCH_HAS_ILOG2_U32=y
35CONFIG_GENERIC_HWEIGHT=y
36CONFIG_GENERIC_CALIBRATE_DELAY=y
37CONFIG_GENERIC_FIND_NEXT_BIT=y
38# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
39CONFIG_PPC=y
40CONFIG_EARLY_PRINTK=y
41CONFIG_GENERIC_NVRAM=y
42CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
43CONFIG_ARCH_MAY_HAVE_PC_FDC=y
44CONFIG_PPC_OF=y
45CONFIG_OF=y
46CONFIG_PPC_UDBG_16550=y
47# CONFIG_GENERIC_TBSYNC is not set
48CONFIG_AUDIT_ARCH=y
49CONFIG_GENERIC_BUG=y
50# CONFIG_DEFAULT_UIMAGE is not set
51# CONFIG_PPC_DCR_NATIVE is not set
52# CONFIG_PPC_DCR_MMIO is not set
53CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
54
55#
56# General setup
57#
58CONFIG_EXPERIMENTAL=y
59CONFIG_BROKEN_ON_SMP=y
60CONFIG_INIT_ENV_ARG_LIMIT=32
61CONFIG_LOCALVERSION=""
62CONFIG_LOCALVERSION_AUTO=y
63CONFIG_SWAP=y
64CONFIG_SYSVIPC=y
65CONFIG_SYSVIPC_SYSCTL=y
66# CONFIG_POSIX_MQUEUE is not set
67# CONFIG_BSD_PROCESS_ACCT is not set
68# CONFIG_TASKSTATS is not set
69# CONFIG_USER_NS is not set
70# CONFIG_PID_NS is not set
71# CONFIG_AUDIT is not set
72# CONFIG_IKCONFIG is not set
73CONFIG_LOG_BUF_SHIFT=14
74# CONFIG_CGROUPS is not set
75CONFIG_FAIR_GROUP_SCHED=y
76CONFIG_FAIR_USER_SCHED=y
77# CONFIG_FAIR_CGROUP_SCHED is not set
78CONFIG_SYSFS_DEPRECATED=y
79# CONFIG_RELAY is not set
80# CONFIG_BLK_DEV_INITRD is not set
81CONFIG_CC_OPTIMIZE_FOR_SIZE=y
82CONFIG_SYSCTL=y
83CONFIG_EMBEDDED=y
84CONFIG_SYSCTL_SYSCALL=y
85# CONFIG_KALLSYMS is not set
86CONFIG_HOTPLUG=y
87CONFIG_PRINTK=y
88CONFIG_BUG=y
89CONFIG_ELF_CORE=y
90CONFIG_BASE_FULL=y
91CONFIG_FUTEX=y
92CONFIG_ANON_INODES=y
93CONFIG_EPOLL=y
94CONFIG_SIGNALFD=y
95CONFIG_EVENTFD=y
96CONFIG_SHMEM=y
97CONFIG_VM_EVENT_COUNTERS=y
98CONFIG_SLUB_DEBUG=y
99# CONFIG_SLAB is not set
100CONFIG_SLUB=y
101# CONFIG_SLOB is not set
102CONFIG_RT_MUTEXES=y
103# CONFIG_TINY_SHMEM is not set
104CONFIG_BASE_SMALL=0
105CONFIG_MODULES=y
106CONFIG_MODULE_UNLOAD=y
107# CONFIG_MODULE_FORCE_UNLOAD is not set
108# CONFIG_MODVERSIONS is not set
109# CONFIG_MODULE_SRCVERSION_ALL is not set
110CONFIG_KMOD=y
111CONFIG_BLOCK=y
112CONFIG_LBD=y
113# CONFIG_BLK_DEV_IO_TRACE is not set
114# CONFIG_LSF is not set
115# CONFIG_BLK_DEV_BSG is not set
116
117#
118# IO Schedulers
119#
120CONFIG_IOSCHED_NOOP=y
121CONFIG_IOSCHED_AS=y
122CONFIG_IOSCHED_DEADLINE=y
123CONFIG_IOSCHED_CFQ=y
124# CONFIG_DEFAULT_AS is not set
125# CONFIG_DEFAULT_DEADLINE is not set
126CONFIG_DEFAULT_CFQ=y
127# CONFIG_DEFAULT_NOOP is not set
128CONFIG_DEFAULT_IOSCHED="cfq"
129
130#
131# Platform support
132#
133CONFIG_PPC_MULTIPLATFORM=y
134# CONFIG_PPC_82xx is not set
135# CONFIG_PPC_83xx is not set
136# CONFIG_PPC_86xx is not set
137CONFIG_CLASSIC32=y
138# CONFIG_PPC_CHRP is not set
139# CONFIG_PPC_MPC52xx is not set
140# CONFIG_PPC_MPC5200 is not set
141# CONFIG_PPC_EFIKA is not set
142# CONFIG_PPC_LITE5200 is not set
143# CONFIG_PPC_PMAC is not set
144# CONFIG_PPC_CELL is not set
145# CONFIG_PPC_CELL_NATIVE is not set
146# CONFIG_PQ2ADS is not set
147CONFIG_EMBEDDED6xx=y
148# CONFIG_LINKSTATION is not set
149CONFIG_STORCENTER=y
150# CONFIG_MPC7448HPC2 is not set
151# CONFIG_PPC_HOLLY is not set
152# CONFIG_PPC_PRPMC2800 is not set
153CONFIG_MPC10X_BRIDGE=y
154CONFIG_MPC10X_OPENPIC=y
155# CONFIG_MPC10X_STORE_GATHERING is not set
156CONFIG_MPIC=y
157# CONFIG_MPIC_WEIRD is not set
158# CONFIG_PPC_I8259 is not set
159# CONFIG_PPC_RTAS is not set
160# CONFIG_MMIO_NVRAM is not set
161# CONFIG_PPC_MPC106 is not set
162# CONFIG_PPC_970_NAP is not set
163# CONFIG_PPC_INDIRECT_IO is not set
164# CONFIG_GENERIC_IOMAP is not set
165# CONFIG_CPU_FREQ is not set
166# CONFIG_TAU is not set
167# CONFIG_CPM2 is not set
168# CONFIG_FSL_ULI1575 is not set
169
170#
171# Kernel options
172#
173# CONFIG_HIGHMEM is not set
174# CONFIG_TICK_ONESHOT is not set
175# CONFIG_NO_HZ is not set
176# CONFIG_HIGH_RES_TIMERS is not set
177CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
178CONFIG_HZ_100=y
179# CONFIG_HZ_250 is not set
180# CONFIG_HZ_300 is not set
181# CONFIG_HZ_1000 is not set
182CONFIG_HZ=100
183CONFIG_PREEMPT_NONE=y
184# CONFIG_PREEMPT_VOLUNTARY is not set
185# CONFIG_PREEMPT is not set
186CONFIG_BINFMT_ELF=y
187CONFIG_BINFMT_MISC=y
188CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
189# CONFIG_KEXEC is not set
190CONFIG_ARCH_FLATMEM_ENABLE=y
191CONFIG_ARCH_POPULATES_NODE_MAP=y
192CONFIG_SELECT_MEMORY_MODEL=y
193CONFIG_FLATMEM_MANUAL=y
194# CONFIG_DISCONTIGMEM_MANUAL is not set
195# CONFIG_SPARSEMEM_MANUAL is not set
196CONFIG_FLATMEM=y
197CONFIG_FLAT_NODE_MEM_MAP=y
198# CONFIG_SPARSEMEM_STATIC is not set
199# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
200CONFIG_SPLIT_PTLOCK_CPUS=4
201# CONFIG_RESOURCES_64BIT is not set
202CONFIG_ZONE_DMA_FLAG=1
203CONFIG_BOUNCE=y
204CONFIG_VIRT_TO_BUS=y
205CONFIG_PROC_DEVICETREE=y
206CONFIG_CMDLINE_BOOL=y
207CONFIG_CMDLINE="console=ttyS0,115200"
208# CONFIG_PM is not set
209CONFIG_SUSPEND_UP_POSSIBLE=y
210CONFIG_HIBERNATION_UP_POSSIBLE=y
211# CONFIG_SECCOMP is not set
212CONFIG_WANT_DEVICE_TREE=y
213CONFIG_DEVICE_TREE="storcenter.dts"
214CONFIG_ISA_DMA_API=y
215
216#
217# Bus options
218#
219CONFIG_ZONE_DMA=y
220CONFIG_GENERIC_ISA_DMA=y
221CONFIG_PPC_INDIRECT_PCI=y
222CONFIG_FSL_SOC=y
223CONFIG_PCI=y
224CONFIG_PCI_DOMAINS=y
225CONFIG_PCI_SYSCALL=y
226# CONFIG_PCIEPORTBUS is not set
227CONFIG_ARCH_SUPPORTS_MSI=y
228# CONFIG_PCI_MSI is not set
229CONFIG_PCI_LEGACY=y
230# CONFIG_PCCARD is not set
231# CONFIG_HOTPLUG_PCI is not set
232
233#
234# Advanced setup
235#
236# CONFIG_ADVANCED_OPTIONS is not set
237
238#
239# Default settings for advanced configuration options are used
240#
241CONFIG_HIGHMEM_START=0xfe000000
242CONFIG_LOWMEM_SIZE=0x30000000
243CONFIG_KERNEL_START=0xc0000000
244CONFIG_TASK_SIZE=0xc0000000
245CONFIG_BOOT_LOAD=0x00800000
246
247#
248# Networking
249#
250CONFIG_NET=y
251
252#
253# Networking options
254#
255CONFIG_PACKET=m
256# CONFIG_PACKET_MMAP is not set
257CONFIG_UNIX=y
258# CONFIG_NET_KEY is not set
259CONFIG_INET=y
260CONFIG_IP_MULTICAST=y
261# CONFIG_IP_ADVANCED_ROUTER is not set
262CONFIG_IP_FIB_HASH=y
263CONFIG_IP_PNP=y
264CONFIG_IP_PNP_DHCP=y
265# CONFIG_IP_PNP_BOOTP is not set
266# CONFIG_IP_PNP_RARP is not set
267# CONFIG_NET_IPIP is not set
268# CONFIG_NET_IPGRE is not set
269# CONFIG_IP_MROUTE is not set
270# CONFIG_ARPD is not set
271# CONFIG_SYN_COOKIES is not set
272# CONFIG_INET_AH is not set
273# CONFIG_INET_ESP is not set
274# CONFIG_INET_IPCOMP is not set
275# CONFIG_INET_XFRM_TUNNEL is not set
276# CONFIG_INET_TUNNEL is not set
277# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
278# CONFIG_INET_XFRM_MODE_TUNNEL is not set
279# CONFIG_INET_XFRM_MODE_BEET is not set
280# CONFIG_INET_LRO is not set
281CONFIG_INET_DIAG=y
282CONFIG_INET_TCP_DIAG=y
283# CONFIG_TCP_CONG_ADVANCED is not set
284CONFIG_TCP_CONG_CUBIC=y
285CONFIG_DEFAULT_TCP_CONG="cubic"
286# CONFIG_TCP_MD5SIG is not set
287# CONFIG_IPV6 is not set
288# CONFIG_INET6_XFRM_TUNNEL is not set
289# CONFIG_INET6_TUNNEL is not set
290# CONFIG_NETWORK_SECMARK is not set
291# CONFIG_NETFILTER is not set
292# CONFIG_IP_DCCP is not set
293# CONFIG_IP_SCTP is not set
294# CONFIG_TIPC is not set
295# CONFIG_ATM is not set
296# CONFIG_BRIDGE is not set
297# CONFIG_VLAN_8021Q is not set
298# CONFIG_DECNET is not set
299# CONFIG_LLC2 is not set
300# CONFIG_IPX is not set
301# CONFIG_ATALK is not set
302# CONFIG_X25 is not set
303# CONFIG_LAPB is not set
304# CONFIG_ECONET is not set
305# CONFIG_WAN_ROUTER is not set
306# CONFIG_NET_SCHED is not set
307
308#
309# Network testing
310#
311# CONFIG_NET_PKTGEN is not set
312# CONFIG_HAMRADIO is not set
313# CONFIG_IRDA is not set
314# CONFIG_BT is not set
315# CONFIG_AF_RXRPC is not set
316
317#
318# Wireless
319#
320# CONFIG_CFG80211 is not set
321# CONFIG_WIRELESS_EXT is not set
322# CONFIG_MAC80211 is not set
323# CONFIG_IEEE80211 is not set
324# CONFIG_RFKILL is not set
325# CONFIG_NET_9P is not set
326
327#
328# Device Drivers
329#
330
331#
332# Generic Driver Options
333#
334CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
335CONFIG_STANDALONE=y
336CONFIG_PREVENT_FIRMWARE_BUILD=y
337# CONFIG_FW_LOADER is not set
338# CONFIG_SYS_HYPERVISOR is not set
339# CONFIG_CONNECTOR is not set
340CONFIG_MTD=y
341# CONFIG_MTD_DEBUG is not set
342# CONFIG_MTD_CONCAT is not set
343CONFIG_MTD_PARTITIONS=y
344# CONFIG_MTD_REDBOOT_PARTS is not set
345# CONFIG_MTD_CMDLINE_PARTS is not set
346
347#
348# User Modules And Translation Layers
349#
350CONFIG_MTD_CHAR=y
351CONFIG_MTD_BLKDEVS=y
352CONFIG_MTD_BLOCK=y
353CONFIG_FTL=y
354CONFIG_NFTL=y
355CONFIG_NFTL_RW=y
356# CONFIG_INFTL is not set
357# CONFIG_RFD_FTL is not set
358# CONFIG_SSFDC is not set
359# CONFIG_MTD_OOPS is not set
360
361#
362# RAM/ROM/Flash chip drivers
363#
364CONFIG_MTD_CFI=y
365# CONFIG_MTD_JEDECPROBE is not set
366CONFIG_MTD_GEN_PROBE=y
367# CONFIG_MTD_CFI_ADV_OPTIONS is not set
368CONFIG_MTD_MAP_BANK_WIDTH_1=y
369CONFIG_MTD_MAP_BANK_WIDTH_2=y
370CONFIG_MTD_MAP_BANK_WIDTH_4=y
371# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
372# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
373# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
374CONFIG_MTD_CFI_I1=y
375CONFIG_MTD_CFI_I2=y
376# CONFIG_MTD_CFI_I4 is not set
377# CONFIG_MTD_CFI_I8 is not set
378# CONFIG_MTD_CFI_INTELEXT is not set
379CONFIG_MTD_CFI_AMDSTD=y
380# CONFIG_MTD_CFI_STAA is not set
381CONFIG_MTD_CFI_UTIL=y
382# CONFIG_MTD_RAM is not set
383# CONFIG_MTD_ROM is not set
384# CONFIG_MTD_ABSENT is not set
385
386#
387# Mapping drivers for chip access
388#
389# CONFIG_MTD_COMPLEX_MAPPINGS is not set
390CONFIG_MTD_PHYSMAP=y
391CONFIG_MTD_PHYSMAP_START=0xFF800000
392CONFIG_MTD_PHYSMAP_LEN=0x00800000
393CONFIG_MTD_PHYSMAP_BANKWIDTH=1
394# CONFIG_MTD_PHYSMAP_OF is not set
395# CONFIG_MTD_INTEL_VR_NOR is not set
396# CONFIG_MTD_PLATRAM is not set
397
398#
399# Self-contained MTD device drivers
400#
401# CONFIG_MTD_PMC551 is not set
402# CONFIG_MTD_SLRAM is not set
403# CONFIG_MTD_PHRAM is not set
404# CONFIG_MTD_MTDRAM is not set
405# CONFIG_MTD_BLOCK2MTD is not set
406
407#
408# Disk-On-Chip Device Drivers
409#
410# CONFIG_MTD_DOC2000 is not set
411# CONFIG_MTD_DOC2001 is not set
412# CONFIG_MTD_DOC2001PLUS is not set
413# CONFIG_MTD_NAND is not set
414# CONFIG_MTD_ONENAND is not set
415
416#
417# UBI - Unsorted block images
418#
419# CONFIG_MTD_UBI is not set
420CONFIG_OF_DEVICE=y
421# CONFIG_PARPORT is not set
422CONFIG_BLK_DEV=y
423# CONFIG_BLK_DEV_FD is not set
424# CONFIG_BLK_CPQ_DA is not set
425# CONFIG_BLK_CPQ_CISS_DA is not set
426# CONFIG_BLK_DEV_DAC960 is not set
427# CONFIG_BLK_DEV_UMEM is not set
428# CONFIG_BLK_DEV_COW_COMMON is not set
429# CONFIG_BLK_DEV_LOOP is not set
430# CONFIG_BLK_DEV_NBD is not set
431# CONFIG_BLK_DEV_SX8 is not set
432# CONFIG_BLK_DEV_UB is not set
433# CONFIG_BLK_DEV_RAM is not set
434# CONFIG_CDROM_PKTCDVD is not set
435# CONFIG_ATA_OVER_ETH is not set
436CONFIG_MISC_DEVICES=y
437# CONFIG_PHANTOM is not set
438# CONFIG_EEPROM_93CX6 is not set
439# CONFIG_SGI_IOC4 is not set
440# CONFIG_TIFM_CORE is not set
441CONFIG_IDE=y
442CONFIG_IDE_MAX_HWIFS=4
443CONFIG_BLK_DEV_IDE=y
444
445#
446# Please see Documentation/ide.txt for help/info on IDE drives
447#
448# CONFIG_BLK_DEV_IDE_SATA is not set
449CONFIG_BLK_DEV_IDEDISK=y
450CONFIG_IDEDISK_MULTI_MODE=y
451# CONFIG_BLK_DEV_IDECD is not set
452# CONFIG_BLK_DEV_IDETAPE is not set
453# CONFIG_BLK_DEV_IDEFLOPPY is not set
454# CONFIG_BLK_DEV_IDESCSI is not set
455# CONFIG_IDE_TASK_IOCTL is not set
456CONFIG_IDE_PROC_FS=y
457
458#
459# IDE chipset support/bugfixes
460#
461CONFIG_IDE_GENERIC=y
462# CONFIG_BLK_DEV_PLATFORM is not set
463
464#
465# PCI IDE chipsets support
466#
467CONFIG_BLK_DEV_IDEPCI=y
468# CONFIG_IDEPCI_SHARE_IRQ is not set
469CONFIG_IDEPCI_PCIBUS_ORDER=y
470# CONFIG_BLK_DEV_GENERIC is not set
471# CONFIG_BLK_DEV_OPTI621 is not set
472CONFIG_BLK_DEV_IDEDMA_PCI=y
473# CONFIG_BLK_DEV_AEC62XX is not set
474# CONFIG_BLK_DEV_ALI15X3 is not set
475# CONFIG_BLK_DEV_AMD74XX is not set
476# CONFIG_BLK_DEV_CMD64X is not set
477# CONFIG_BLK_DEV_TRIFLEX is not set
478# CONFIG_BLK_DEV_CY82C693 is not set
479# CONFIG_BLK_DEV_CS5520 is not set
480# CONFIG_BLK_DEV_CS5530 is not set
481# CONFIG_BLK_DEV_HPT34X is not set
482# CONFIG_BLK_DEV_HPT366 is not set
483# CONFIG_BLK_DEV_JMICRON is not set
484# CONFIG_BLK_DEV_SC1200 is not set
485# CONFIG_BLK_DEV_PIIX is not set
486# CONFIG_BLK_DEV_IT8213 is not set
487# CONFIG_BLK_DEV_IT821X is not set
488# CONFIG_BLK_DEV_NS87415 is not set
489# CONFIG_BLK_DEV_PDC202XX_OLD is not set
490# CONFIG_BLK_DEV_PDC202XX_NEW is not set
491# CONFIG_BLK_DEV_SVWKS is not set
492# CONFIG_BLK_DEV_SIIMAGE is not set
493# CONFIG_BLK_DEV_SL82C105 is not set
494# CONFIG_BLK_DEV_SLC90E66 is not set
495# CONFIG_BLK_DEV_TRM290 is not set
496CONFIG_BLK_DEV_VIA82CXXX=y
497# CONFIG_BLK_DEV_TC86C001 is not set
498# CONFIG_IDE_ARM is not set
499CONFIG_BLK_DEV_IDEDMA=y
500CONFIG_IDE_ARCH_OBSOLETE_INIT=y
501# CONFIG_BLK_DEV_HD is not set
502
503#
504# SCSI device support
505#
506# CONFIG_RAID_ATTRS is not set
507CONFIG_SCSI=y
508CONFIG_SCSI_DMA=y
509# CONFIG_SCSI_TGT is not set
510# CONFIG_SCSI_NETLINK is not set
511CONFIG_SCSI_PROC_FS=y
512
513#
514# SCSI support type (disk, tape, CD-ROM)
515#
516CONFIG_BLK_DEV_SD=y
517# CONFIG_CHR_DEV_ST is not set
518# CONFIG_CHR_DEV_OSST is not set
519CONFIG_BLK_DEV_SR=y
520# CONFIG_BLK_DEV_SR_VENDOR is not set
521# CONFIG_CHR_DEV_SG is not set
522# CONFIG_CHR_DEV_SCH is not set
523
524#
525# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
526#
527# CONFIG_SCSI_MULTI_LUN is not set
528# CONFIG_SCSI_CONSTANTS is not set
529# CONFIG_SCSI_LOGGING is not set
530# CONFIG_SCSI_SCAN_ASYNC is not set
531CONFIG_SCSI_WAIT_SCAN=m
532
533#
534# SCSI Transports
535#
536CONFIG_SCSI_SPI_ATTRS=y
537# CONFIG_SCSI_FC_ATTRS is not set
538# CONFIG_SCSI_ISCSI_ATTRS is not set
539# CONFIG_SCSI_SAS_LIBSAS is not set
540# CONFIG_SCSI_SRP_ATTRS is not set
541CONFIG_SCSI_LOWLEVEL=y
542# CONFIG_ISCSI_TCP is not set
543# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
544# CONFIG_SCSI_3W_9XXX is not set
545# CONFIG_SCSI_ACARD is not set
546# CONFIG_SCSI_AACRAID is not set
547# CONFIG_SCSI_AIC7XXX is not set
548# CONFIG_SCSI_AIC7XXX_OLD is not set
549# CONFIG_SCSI_AIC79XX is not set
550# CONFIG_SCSI_AIC94XX is not set
551# CONFIG_SCSI_DPT_I2O is not set
552# CONFIG_SCSI_ADVANSYS is not set
553# CONFIG_SCSI_ARCMSR is not set
554# CONFIG_MEGARAID_NEWGEN is not set
555# CONFIG_MEGARAID_LEGACY is not set
556# CONFIG_MEGARAID_SAS is not set
557# CONFIG_SCSI_HPTIOP is not set
558# CONFIG_SCSI_BUSLOGIC is not set
559# CONFIG_SCSI_DMX3191D is not set
560# CONFIG_SCSI_EATA is not set
561# CONFIG_SCSI_FUTURE_DOMAIN is not set
562# CONFIG_SCSI_GDTH is not set
563# CONFIG_SCSI_IPS is not set
564# CONFIG_SCSI_INITIO is not set
565# CONFIG_SCSI_INIA100 is not set
566# CONFIG_SCSI_STEX is not set
567# CONFIG_SCSI_SYM53C8XX_2 is not set
568# CONFIG_SCSI_QLOGIC_1280 is not set
569# CONFIG_SCSI_QLA_FC is not set
570# CONFIG_SCSI_QLA_ISCSI is not set
571# CONFIG_SCSI_LPFC is not set
572# CONFIG_SCSI_DC395x is not set
573# CONFIG_SCSI_DC390T is not set
574# CONFIG_SCSI_NSP32 is not set
575# CONFIG_SCSI_DEBUG is not set
576# CONFIG_SCSI_SRP is not set
577# CONFIG_ATA is not set
578CONFIG_MD=y
579CONFIG_BLK_DEV_MD=y
580CONFIG_MD_LINEAR=y
581CONFIG_MD_RAID0=y
582CONFIG_MD_RAID1=y
583# CONFIG_MD_RAID10 is not set
584CONFIG_MD_RAID456=y
585CONFIG_MD_RAID5_RESHAPE=y
586# CONFIG_MD_MULTIPATH is not set
587# CONFIG_MD_FAULTY is not set
588# CONFIG_BLK_DEV_DM is not set
589# CONFIG_FUSION is not set
590
591#
592# IEEE 1394 (FireWire) support
593#
594# CONFIG_FIREWIRE is not set
595# CONFIG_IEEE1394 is not set
596# CONFIG_I2O is not set
597# CONFIG_MACINTOSH_DRIVERS is not set
598CONFIG_NETDEVICES=y
599# CONFIG_NETDEVICES_MULTIQUEUE is not set
600CONFIG_DUMMY=m
601# CONFIG_BONDING is not set
602# CONFIG_MACVLAN is not set
603# CONFIG_EQUALIZER is not set
604# CONFIG_TUN is not set
605# CONFIG_VETH is not set
606# CONFIG_IP1000 is not set
607# CONFIG_ARCNET is not set
608# CONFIG_NET_ETHERNET is not set
609CONFIG_NETDEV_1000=y
610# CONFIG_ACENIC is not set
611# CONFIG_DL2K is not set
612# CONFIG_E1000 is not set
613# CONFIG_E1000E is not set
614# CONFIG_NS83820 is not set
615# CONFIG_HAMACHI is not set
616# CONFIG_YELLOWFIN is not set
617CONFIG_R8169=y
618# CONFIG_R8169_NAPI is not set
619# CONFIG_SIS190 is not set
620# CONFIG_SKGE is not set
621# CONFIG_SKY2 is not set
622# CONFIG_SK98LIN is not set
623# CONFIG_VIA_VELOCITY is not set
624# CONFIG_TIGON3 is not set
625# CONFIG_BNX2 is not set
626# CONFIG_MV643XX_ETH is not set
627# CONFIG_QLA3XXX is not set
628# CONFIG_ATL1 is not set
629# CONFIG_NETDEV_10000 is not set
630# CONFIG_TR is not set
631
632#
633# Wireless LAN
634#
635# CONFIG_WLAN_PRE80211 is not set
636# CONFIG_WLAN_80211 is not set
637
638#
639# USB Network Adapters
640#
641# CONFIG_USB_CATC is not set
642# CONFIG_USB_KAWETH is not set
643# CONFIG_USB_PEGASUS is not set
644# CONFIG_USB_RTL8150 is not set
645# CONFIG_USB_USBNET is not set
646# CONFIG_WAN is not set
647# CONFIG_FDDI is not set
648# CONFIG_HIPPI is not set
649# CONFIG_PPP is not set
650# CONFIG_SLIP is not set
651# CONFIG_NET_FC is not set
652# CONFIG_SHAPER is not set
653# CONFIG_NETCONSOLE is not set
654# CONFIG_NETPOLL is not set
655# CONFIG_NET_POLL_CONTROLLER is not set
656# CONFIG_ISDN is not set
657# CONFIG_PHONE is not set
658
659#
660# Input device support
661#
662# CONFIG_INPUT is not set
663
664#
665# Hardware I/O ports
666#
667# CONFIG_SERIO is not set
668# CONFIG_GAMEPORT is not set
669
670#
671# Character devices
672#
673# CONFIG_VT is not set
674# CONFIG_SERIAL_NONSTANDARD is not set
675
676#
677# Serial drivers
678#
679CONFIG_SERIAL_8250=y
680CONFIG_SERIAL_8250_CONSOLE=y
681# CONFIG_SERIAL_8250_PCI is not set
682CONFIG_SERIAL_8250_NR_UARTS=2
683CONFIG_SERIAL_8250_RUNTIME_UARTS=2
684# CONFIG_SERIAL_8250_EXTENDED is not set
685
686#
687# Non-8250 serial port support
688#
689# CONFIG_SERIAL_UARTLITE is not set
690CONFIG_SERIAL_CORE=y
691CONFIG_SERIAL_CORE_CONSOLE=y
692# CONFIG_SERIAL_JSM is not set
693# CONFIG_SERIAL_OF_PLATFORM is not set
694CONFIG_UNIX98_PTYS=y
695CONFIG_LEGACY_PTYS=y
696CONFIG_LEGACY_PTY_COUNT=256
697# CONFIG_IPMI_HANDLER is not set
698CONFIG_HW_RANDOM=m
699CONFIG_NVRAM=y
700CONFIG_GEN_RTC=y
701# CONFIG_GEN_RTC_X is not set
702# CONFIG_R3964 is not set
703# CONFIG_APPLICOM is not set
704# CONFIG_RAW_DRIVER is not set
705# CONFIG_TCG_TPM is not set
706CONFIG_DEVPORT=y
707CONFIG_I2C=y
708CONFIG_I2C_BOARDINFO=y
709CONFIG_I2C_CHARDEV=y
710
711#
712# I2C Algorithms
713#
714# CONFIG_I2C_ALGOBIT is not set
715# CONFIG_I2C_ALGOPCF is not set
716# CONFIG_I2C_ALGOPCA is not set
717
718#
719# I2C Hardware Bus support
720#
721# CONFIG_I2C_ALI1535 is not set
722# CONFIG_I2C_ALI1563 is not set
723# CONFIG_I2C_ALI15X3 is not set
724# CONFIG_I2C_AMD756 is not set
725# CONFIG_I2C_AMD8111 is not set
726# CONFIG_I2C_I801 is not set
727# CONFIG_I2C_I810 is not set
728# CONFIG_I2C_PIIX4 is not set
729CONFIG_I2C_MPC=y
730# CONFIG_I2C_NFORCE2 is not set
731# CONFIG_I2C_OCORES is not set
732# CONFIG_I2C_PARPORT_LIGHT is not set
733# CONFIG_I2C_PROSAVAGE is not set
734# CONFIG_I2C_SAVAGE4 is not set
735# CONFIG_I2C_SIMTEC is not set
736# CONFIG_I2C_SIS5595 is not set
737# CONFIG_I2C_SIS630 is not set
738# CONFIG_I2C_SIS96X is not set
739# CONFIG_I2C_TAOS_EVM is not set
740# CONFIG_I2C_STUB is not set
741# CONFIG_I2C_TINY_USB is not set
742# CONFIG_I2C_VIA is not set
743# CONFIG_I2C_VIAPRO is not set
744# CONFIG_I2C_VOODOO3 is not set
745
746#
747# Miscellaneous I2C Chip support
748#
749# CONFIG_SENSORS_DS1337 is not set
750# CONFIG_SENSORS_DS1374 is not set
751# CONFIG_DS1682 is not set
752# CONFIG_SENSORS_EEPROM is not set
753# CONFIG_SENSORS_PCF8574 is not set
754# CONFIG_SENSORS_PCA9539 is not set
755# CONFIG_SENSORS_PCF8591 is not set
756# CONFIG_SENSORS_M41T00 is not set
757# CONFIG_SENSORS_MAX6875 is not set
758# CONFIG_SENSORS_TSL2550 is not set
759# CONFIG_I2C_DEBUG_CORE is not set
760# CONFIG_I2C_DEBUG_ALGO is not set
761# CONFIG_I2C_DEBUG_BUS is not set
762# CONFIG_I2C_DEBUG_CHIP is not set
763
764#
765# SPI support
766#
767# CONFIG_SPI is not set
768# CONFIG_SPI_MASTER is not set
769# CONFIG_W1 is not set
770# CONFIG_POWER_SUPPLY is not set
771# CONFIG_HWMON is not set
772# CONFIG_WATCHDOG is not set
773
774#
775# Sonics Silicon Backplane
776#
777CONFIG_SSB_POSSIBLE=y
778# CONFIG_SSB is not set
779
780#
781# Multifunction device drivers
782#
783# CONFIG_MFD_SM501 is not set
784
785#
786# Multimedia devices
787#
788# CONFIG_VIDEO_DEV is not set
789# CONFIG_DVB_CORE is not set
790# CONFIG_DAB is not set
791
792#
793# Graphics support
794#
795# CONFIG_AGP is not set
796# CONFIG_DRM is not set
797# CONFIG_VGASTATE is not set
798# CONFIG_VIDEO_OUTPUT_CONTROL is not set
799# CONFIG_FB is not set
800# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
801
802#
803# Display device support
804#
805# CONFIG_DISPLAY_SUPPORT is not set
806
807#
808# Sound
809#
810# CONFIG_SOUND is not set
811CONFIG_USB_SUPPORT=y
812CONFIG_USB_ARCH_HAS_HCD=y
813CONFIG_USB_ARCH_HAS_OHCI=y
814CONFIG_USB_ARCH_HAS_EHCI=y
815CONFIG_USB=y
816# CONFIG_USB_DEBUG is not set
817
818#
819# Miscellaneous USB options
820#
821CONFIG_USB_DEVICEFS=y
822CONFIG_USB_DEVICE_CLASS=y
823# CONFIG_USB_DYNAMIC_MINORS is not set
824# CONFIG_USB_OTG is not set
825
826#
827# USB Host Controller Drivers
828#
829CONFIG_USB_EHCI_HCD=y
830# CONFIG_USB_EHCI_SPLIT_ISO is not set
831# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
832# CONFIG_USB_EHCI_TT_NEWSCHED is not set
833# CONFIG_USB_ISP116X_HCD is not set
834CONFIG_USB_OHCI_HCD=y
835# CONFIG_USB_OHCI_HCD_PPC_OF is not set
836# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
837# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
838CONFIG_USB_OHCI_LITTLE_ENDIAN=y
839# CONFIG_USB_UHCI_HCD is not set
840# CONFIG_USB_SL811_HCD is not set
841# CONFIG_USB_R8A66597_HCD is not set
842
843#
844# USB Device Class drivers
845#
846# CONFIG_USB_ACM is not set
847# CONFIG_USB_PRINTER is not set
848
849#
850# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
851#
852
853#
854# may also be needed; see USB_STORAGE Help for more information
855#
856CONFIG_USB_STORAGE=y
857# CONFIG_USB_STORAGE_DEBUG is not set
858# CONFIG_USB_STORAGE_DATAFAB is not set
859# CONFIG_USB_STORAGE_FREECOM is not set
860# CONFIG_USB_STORAGE_ISD200 is not set
861# CONFIG_USB_STORAGE_DPCM is not set
862# CONFIG_USB_STORAGE_USBAT is not set
863# CONFIG_USB_STORAGE_SDDR09 is not set
864# CONFIG_USB_STORAGE_SDDR55 is not set
865# CONFIG_USB_STORAGE_JUMPSHOT is not set
866# CONFIG_USB_STORAGE_ALAUDA is not set
867# CONFIG_USB_STORAGE_KARMA is not set
868# CONFIG_USB_LIBUSUAL is not set
869
870#
871# USB Imaging devices
872#
873# CONFIG_USB_MDC800 is not set
874# CONFIG_USB_MICROTEK is not set
875# CONFIG_USB_MON is not set
876
877#
878# USB port drivers
879#
880
881#
882# USB Serial Converter support
883#
884# CONFIG_USB_SERIAL is not set
885
886#
887# USB Miscellaneous drivers
888#
889# CONFIG_USB_EMI62 is not set
890# CONFIG_USB_EMI26 is not set
891# CONFIG_USB_ADUTUX is not set
892# CONFIG_USB_AUERSWALD is not set
893# CONFIG_USB_RIO500 is not set
894# CONFIG_USB_LEGOTOWER is not set
895# CONFIG_USB_LCD is not set
896# CONFIG_USB_BERRY_CHARGE is not set
897# CONFIG_USB_LED is not set
898# CONFIG_USB_CYPRESS_CY7C63 is not set
899# CONFIG_USB_CYTHERM is not set
900# CONFIG_USB_PHIDGET is not set
901# CONFIG_USB_IDMOUSE is not set
902# CONFIG_USB_FTDI_ELAN is not set
903# CONFIG_USB_APPLEDISPLAY is not set
904# CONFIG_USB_SISUSBVGA is not set
905# CONFIG_USB_LD is not set
906# CONFIG_USB_TRANCEVIBRATOR is not set
907# CONFIG_USB_IOWARRIOR is not set
908# CONFIG_USB_TEST is not set
909
910#
911# USB DSL modem support
912#
913
914#
915# USB Gadget Support
916#
917# CONFIG_USB_GADGET is not set
918# CONFIG_MMC is not set
919# CONFIG_NEW_LEDS is not set
920# CONFIG_INFINIBAND is not set
921# CONFIG_EDAC is not set
922CONFIG_RTC_LIB=y
923CONFIG_RTC_CLASS=y
924CONFIG_RTC_HCTOSYS=y
925CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
926# CONFIG_RTC_DEBUG is not set
927
928#
929# RTC interfaces
930#
931CONFIG_RTC_INTF_SYSFS=y
932CONFIG_RTC_INTF_PROC=y
933CONFIG_RTC_INTF_DEV=y
934# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
935# CONFIG_RTC_DRV_TEST is not set
936
937#
938# I2C RTC drivers
939#
940CONFIG_RTC_DRV_DS1307=y
941# CONFIG_RTC_DRV_DS1374 is not set
942# CONFIG_RTC_DRV_DS1672 is not set
943# CONFIG_RTC_DRV_MAX6900 is not set
944# CONFIG_RTC_DRV_RS5C372 is not set
945# CONFIG_RTC_DRV_ISL1208 is not set
946# CONFIG_RTC_DRV_X1205 is not set
947# CONFIG_RTC_DRV_PCF8563 is not set
948# CONFIG_RTC_DRV_PCF8583 is not set
949# CONFIG_RTC_DRV_M41T80 is not set
950
951#
952# SPI RTC drivers
953#
954
955#
956# Platform RTC drivers
957#
958# CONFIG_RTC_DRV_CMOS is not set
959# CONFIG_RTC_DRV_DS1553 is not set
960# CONFIG_RTC_DRV_STK17TA8 is not set
961# CONFIG_RTC_DRV_DS1742 is not set
962# CONFIG_RTC_DRV_M48T86 is not set
963# CONFIG_RTC_DRV_M48T59 is not set
964# CONFIG_RTC_DRV_V3020 is not set
965
966#
967# on-CPU RTC drivers
968#
969
970#
971# Userspace I/O
972#
973# CONFIG_UIO is not set
974
975#
976# File systems
977#
978CONFIG_EXT2_FS=y
979# CONFIG_EXT2_FS_XATTR is not set
980# CONFIG_EXT2_FS_XIP is not set
981CONFIG_EXT3_FS=y
982CONFIG_EXT3_FS_XATTR=y
983# CONFIG_EXT3_FS_POSIX_ACL is not set
984# CONFIG_EXT3_FS_SECURITY is not set
985# CONFIG_EXT4DEV_FS is not set
986CONFIG_JBD=y
987CONFIG_FS_MBCACHE=y
988# CONFIG_REISERFS_FS is not set
989# CONFIG_JFS_FS is not set
990# CONFIG_FS_POSIX_ACL is not set
991CONFIG_XFS_FS=m
992# CONFIG_XFS_QUOTA is not set
993# CONFIG_XFS_SECURITY is not set
994# CONFIG_XFS_POSIX_ACL is not set
995# CONFIG_XFS_RT is not set
996# CONFIG_GFS2_FS is not set
997# CONFIG_OCFS2_FS is not set
998# CONFIG_MINIX_FS is not set
999# CONFIG_ROMFS_FS is not set
1000CONFIG_INOTIFY=y
1001CONFIG_INOTIFY_USER=y
1002# CONFIG_QUOTA is not set
1003CONFIG_DNOTIFY=y
1004# CONFIG_AUTOFS_FS is not set
1005# CONFIG_AUTOFS4_FS is not set
1006# CONFIG_FUSE_FS is not set
1007
1008#
1009# CD-ROM/DVD Filesystems
1010#
1011# CONFIG_ISO9660_FS is not set
1012# CONFIG_UDF_FS is not set
1013
1014#
1015# DOS/FAT/NT Filesystems
1016#
1017# CONFIG_MSDOS_FS is not set
1018# CONFIG_VFAT_FS is not set
1019# CONFIG_NTFS_FS is not set
1020
1021#
1022# Pseudo filesystems
1023#
1024CONFIG_PROC_FS=y
1025CONFIG_PROC_KCORE=y
1026CONFIG_PROC_SYSCTL=y
1027CONFIG_SYSFS=y
1028CONFIG_TMPFS=y
1029# CONFIG_TMPFS_POSIX_ACL is not set
1030# CONFIG_HUGETLB_PAGE is not set
1031# CONFIG_CONFIGFS_FS is not set
1032
1033#
1034# Miscellaneous filesystems
1035#
1036# CONFIG_ADFS_FS is not set
1037# CONFIG_AFFS_FS is not set
1038# CONFIG_HFS_FS is not set
1039# CONFIG_HFSPLUS_FS is not set
1040# CONFIG_BEFS_FS is not set
1041# CONFIG_BFS_FS is not set
1042# CONFIG_EFS_FS is not set
1043CONFIG_JFFS2_FS=y
1044CONFIG_JFFS2_FS_DEBUG=0
1045CONFIG_JFFS2_FS_WRITEBUFFER=y
1046# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
1047# CONFIG_JFFS2_SUMMARY is not set
1048# CONFIG_JFFS2_FS_XATTR is not set
1049# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
1050CONFIG_JFFS2_ZLIB=y
1051# CONFIG_JFFS2_LZO is not set
1052CONFIG_JFFS2_RTIME=y
1053# CONFIG_JFFS2_RUBIN is not set
1054# CONFIG_CRAMFS is not set
1055# CONFIG_VXFS_FS is not set
1056# CONFIG_HPFS_FS is not set
1057# CONFIG_QNX4FS_FS is not set
1058# CONFIG_SYSV_FS is not set
1059# CONFIG_UFS_FS is not set
1060# CONFIG_NETWORK_FILESYSTEMS is not set
1061
1062#
1063# Partition Types
1064#
1065CONFIG_PARTITION_ADVANCED=y
1066# CONFIG_ACORN_PARTITION is not set
1067# CONFIG_OSF_PARTITION is not set
1068# CONFIG_AMIGA_PARTITION is not set
1069# CONFIG_ATARI_PARTITION is not set
1070# CONFIG_MAC_PARTITION is not set
1071CONFIG_MSDOS_PARTITION=y
1072# CONFIG_BSD_DISKLABEL is not set
1073# CONFIG_MINIX_SUBPARTITION is not set
1074# CONFIG_SOLARIS_X86_PARTITION is not set
1075# CONFIG_UNIXWARE_DISKLABEL is not set
1076# CONFIG_LDM_PARTITION is not set
1077# CONFIG_SGI_PARTITION is not set
1078# CONFIG_ULTRIX_PARTITION is not set
1079# CONFIG_SUN_PARTITION is not set
1080# CONFIG_KARMA_PARTITION is not set
1081# CONFIG_EFI_PARTITION is not set
1082# CONFIG_SYSV68_PARTITION is not set
1083CONFIG_NLS=y
1084CONFIG_NLS_DEFAULT="utf8"
1085CONFIG_NLS_CODEPAGE_437=y
1086# CONFIG_NLS_CODEPAGE_737 is not set
1087# CONFIG_NLS_CODEPAGE_775 is not set
1088# CONFIG_NLS_CODEPAGE_850 is not set
1089# CONFIG_NLS_CODEPAGE_852 is not set
1090# CONFIG_NLS_CODEPAGE_855 is not set
1091# CONFIG_NLS_CODEPAGE_857 is not set
1092# CONFIG_NLS_CODEPAGE_860 is not set
1093# CONFIG_NLS_CODEPAGE_861 is not set
1094# CONFIG_NLS_CODEPAGE_862 is not set
1095# CONFIG_NLS_CODEPAGE_863 is not set
1096# CONFIG_NLS_CODEPAGE_864 is not set
1097# CONFIG_NLS_CODEPAGE_865 is not set
1098# CONFIG_NLS_CODEPAGE_866 is not set
1099# CONFIG_NLS_CODEPAGE_869 is not set
1100# CONFIG_NLS_CODEPAGE_936 is not set
1101# CONFIG_NLS_CODEPAGE_950 is not set
1102# CONFIG_NLS_CODEPAGE_932 is not set
1103# CONFIG_NLS_CODEPAGE_949 is not set
1104# CONFIG_NLS_CODEPAGE_874 is not set
1105# CONFIG_NLS_ISO8859_8 is not set
1106# CONFIG_NLS_CODEPAGE_1250 is not set
1107# CONFIG_NLS_CODEPAGE_1251 is not set
1108# CONFIG_NLS_ASCII is not set
1109CONFIG_NLS_ISO8859_1=y
1110# CONFIG_NLS_ISO8859_2 is not set
1111# CONFIG_NLS_ISO8859_3 is not set
1112# CONFIG_NLS_ISO8859_4 is not set
1113# CONFIG_NLS_ISO8859_5 is not set
1114# CONFIG_NLS_ISO8859_6 is not set
1115# CONFIG_NLS_ISO8859_7 is not set
1116# CONFIG_NLS_ISO8859_9 is not set
1117# CONFIG_NLS_ISO8859_13 is not set
1118# CONFIG_NLS_ISO8859_14 is not set
1119# CONFIG_NLS_ISO8859_15 is not set
1120# CONFIG_NLS_KOI8_R is not set
1121# CONFIG_NLS_KOI8_U is not set
1122CONFIG_NLS_UTF8=y
1123# CONFIG_DLM is not set
1124# CONFIG_UCC_SLOW is not set
1125
1126#
1127# Library routines
1128#
1129CONFIG_BITREVERSE=y
1130# CONFIG_CRC_CCITT is not set
1131# CONFIG_CRC16 is not set
1132# CONFIG_CRC_ITU_T is not set
1133CONFIG_CRC32=y
1134# CONFIG_CRC7 is not set
1135# CONFIG_LIBCRC32C is not set
1136CONFIG_ZLIB_INFLATE=y
1137CONFIG_ZLIB_DEFLATE=y
1138CONFIG_PLIST=y
1139CONFIG_HAS_IOMEM=y
1140CONFIG_HAS_IOPORT=y
1141CONFIG_HAS_DMA=y
1142CONFIG_INSTRUMENTATION=y
1143# CONFIG_PROFILING is not set
1144# CONFIG_MARKERS is not set
1145
1146#
1147# Kernel hacking
1148#
1149# CONFIG_PRINTK_TIME is not set
1150# CONFIG_ENABLE_WARN_DEPRECATED is not set
1151# CONFIG_ENABLE_MUST_CHECK is not set
1152# CONFIG_MAGIC_SYSRQ is not set
1153# CONFIG_UNUSED_SYMBOLS is not set
1154# CONFIG_DEBUG_FS is not set
1155# CONFIG_HEADERS_CHECK is not set
1156# CONFIG_DEBUG_KERNEL is not set
1157# CONFIG_SLUB_DEBUG_ON is not set
1158# CONFIG_DEBUG_BUGVERBOSE is not set
1159# CONFIG_SAMPLES is not set
1160# CONFIG_BOOTX_TEXT is not set
1161# CONFIG_PPC_EARLY_DEBUG is not set
1162
1163#
1164# Security options
1165#
1166# CONFIG_KEYS is not set
1167# CONFIG_SECURITY is not set
1168# CONFIG_SECURITY_FILE_CAPABILITIES is not set
1169CONFIG_XOR_BLOCKS=y
1170CONFIG_ASYNC_CORE=y
1171CONFIG_ASYNC_MEMCPY=y
1172CONFIG_ASYNC_XOR=y
1173# CONFIG_CRYPTO is not set
1174# CONFIG_PPC_CLOCK is not set
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
index d9b377070caa..58dbfeff9b4d 100644
--- a/arch/powerpc/kernel/Makefile
+++ b/arch/powerpc/kernel/Makefile
@@ -70,6 +70,7 @@ pci64-$(CONFIG_PPC64) += pci_dn.o isa-bridge.o
70obj-$(CONFIG_PCI) += pci_$(CONFIG_WORD_SIZE).o $(pci64-y) \ 70obj-$(CONFIG_PCI) += pci_$(CONFIG_WORD_SIZE).o $(pci64-y) \
71 pci-common.o 71 pci-common.o
72obj-$(CONFIG_PCI_MSI) += msi.o 72obj-$(CONFIG_PCI_MSI) += msi.o
73obj-$(CONFIG_RAPIDIO) += rio.o
73obj-$(CONFIG_KEXEC) += machine_kexec.o crash.o \ 74obj-$(CONFIG_KEXEC) += machine_kexec.o crash.o \
74 machine_kexec_$(CONFIG_WORD_SIZE).o 75 machine_kexec_$(CONFIG_WORD_SIZE).o
75obj-$(CONFIG_AUDIT) += audit.o 76obj-$(CONFIG_AUDIT) += audit.o
diff --git a/arch/powerpc/kernel/head_fsl_booke.S b/arch/powerpc/kernel/head_fsl_booke.S
index 7aecb39a5a45..d9cc2c288d9e 100644
--- a/arch/powerpc/kernel/head_fsl_booke.S
+++ b/arch/powerpc/kernel/head_fsl_booke.S
@@ -73,8 +73,8 @@ _ENTRY(_start);
73/* We try to not make any assumptions about how the boot loader 73/* We try to not make any assumptions about how the boot loader
74 * setup or used the TLBs. We invalidate all mappings from the 74 * setup or used the TLBs. We invalidate all mappings from the
75 * boot loader and load a single entry in TLB1[0] to map the 75 * boot loader and load a single entry in TLB1[0] to map the
76 * first 16M of kernel memory. Any boot info passed from the 76 * first 64M of kernel memory. Any boot info passed from the
77 * bootloader needs to live in this first 16M. 77 * bootloader needs to live in this first 64M.
78 * 78 *
79 * Requirement on bootloader: 79 * Requirement on bootloader:
80 * - The page we're executing in needs to reside in TLB1 and 80 * - The page we're executing in needs to reside in TLB1 and
@@ -167,7 +167,7 @@ skpinv: addi r6,r6,1 /* Increment */
167 mtspr SPRN_MAS0,r7 167 mtspr SPRN_MAS0,r7
168 tlbre 168 tlbre
169 169
170 /* Just modify the entry ID and EPN for the temp mapping */ 170 /* Just modify the entry ID, EPN and RPN for the temp mapping */
171 lis r7,0x1000 /* Set MAS0(TLBSEL) = 1 */ 171 lis r7,0x1000 /* Set MAS0(TLBSEL) = 1 */
172 rlwimi r7,r5,16,4,15 /* Setup MAS0 = TLBSEL | ESEL(r5) */ 172 rlwimi r7,r5,16,4,15 /* Setup MAS0 = TLBSEL | ESEL(r5) */
173 mtspr SPRN_MAS0,r7 173 mtspr SPRN_MAS0,r7
@@ -177,9 +177,12 @@ skpinv: addi r6,r6,1 /* Increment */
177 ori r6,r6,(MAS1_TSIZE(BOOKE_PAGESZ_4K))@l 177 ori r6,r6,(MAS1_TSIZE(BOOKE_PAGESZ_4K))@l
178 mtspr SPRN_MAS1,r6 178 mtspr SPRN_MAS1,r6
179 mfspr r6,SPRN_MAS2 179 mfspr r6,SPRN_MAS2
180 li r7,0 /* temp EPN = 0 */ 180 lis r7,PHYSICAL_START@h
181 rlwimi r7,r6,0,20,31 181 rlwimi r7,r6,0,20,31
182 mtspr SPRN_MAS2,r7 182 mtspr SPRN_MAS2,r7
183 mfspr r6,SPRN_MAS3
184 rlwimi r7,r6,0,20,31
185 mtspr SPRN_MAS3,r7
183 tlbwe 186 tlbwe
184 187
185 xori r6,r4,1 188 xori r6,r4,1
@@ -222,11 +225,11 @@ skpinv: addi r6,r6,1 /* Increment */
222 lis r6,0x1000 /* Set MAS0(TLBSEL) = TLB1(1), ESEL = 0 */ 225 lis r6,0x1000 /* Set MAS0(TLBSEL) = TLB1(1), ESEL = 0 */
223 mtspr SPRN_MAS0,r6 226 mtspr SPRN_MAS0,r6
224 lis r6,(MAS1_VALID|MAS1_IPROT)@h 227 lis r6,(MAS1_VALID|MAS1_IPROT)@h
225 ori r6,r6,(MAS1_TSIZE(BOOKE_PAGESZ_16M))@l 228 ori r6,r6,(MAS1_TSIZE(BOOKE_PAGESZ_64M))@l
226 mtspr SPRN_MAS1,r6 229 mtspr SPRN_MAS1,r6
227 li r7,0 230 li r7,0
228 lis r6,KERNELBASE@h 231 lis r6,PAGE_OFFSET@h
229 ori r6,r6,KERNELBASE@l 232 ori r6,r6,PAGE_OFFSET@l
230 rlwimi r6,r7,0,20,31 233 rlwimi r6,r7,0,20,31
231 mtspr SPRN_MAS2,r6 234 mtspr SPRN_MAS2,r6
232 li r7,(MAS3_SX|MAS3_SW|MAS3_SR) 235 li r7,(MAS3_SX|MAS3_SW|MAS3_SR)
@@ -234,6 +237,9 @@ skpinv: addi r6,r6,1 /* Increment */
234 tlbwe 237 tlbwe
235 238
236/* 7. Jump to KERNELBASE mapping */ 239/* 7. Jump to KERNELBASE mapping */
240 lis r6,KERNELBASE@h
241 ori r6,r6,KERNELBASE@l
242 rlwimi r6,r7,0,20,31
237 lis r7,MSR_KERNEL@h 243 lis r7,MSR_KERNEL@h
238 ori r7,r7,MSR_KERNEL@l 244 ori r7,r7,MSR_KERNEL@l
239 bl 1f /* Find our address */ 245 bl 1f /* Find our address */
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c
index d394d41b61d5..980fe32895c0 100644
--- a/arch/powerpc/kernel/pci-common.c
+++ b/arch/powerpc/kernel/pci-common.c
@@ -792,9 +792,10 @@ static void __devinit __pcibios_fixup_bus(struct pci_bus *bus)
792 for (i = 0; i < PCI_BUS_NUM_RESOURCES; ++i) { 792 for (i = 0; i < PCI_BUS_NUM_RESOURCES; ++i) {
793 if ((res = bus->resource[i]) == NULL) 793 if ((res = bus->resource[i]) == NULL)
794 continue; 794 continue;
795 if (!res->flags || bus->self->transparent) 795 if (!res->flags)
796 continue;
797 if (i >= 3 && bus->self->transparent)
796 continue; 798 continue;
797
798 /* On PowerMac, Apple leaves bridge windows open over 799 /* On PowerMac, Apple leaves bridge windows open over
799 * an inaccessible region of memory space (0...fffff) 800 * an inaccessible region of memory space (0...fffff)
800 * which is somewhat bogus, but that's what they think 801 * which is somewhat bogus, but that's what they think
@@ -806,7 +807,8 @@ static void __devinit __pcibios_fixup_bus(struct pci_bus *bus)
806 * equal to the pci_mem_offset of the host bridge and 807 * equal to the pci_mem_offset of the host bridge and
807 * their size is smaller than 1M. 808 * their size is smaller than 1M.
808 */ 809 */
809 if (res->start == hose->pci_mem_offset && 810 if (res->flags & IORESOURCE_MEM &&
811 res->start == hose->pci_mem_offset &&
810 res->end < 0x100000) { 812 res->end < 0x100000) {
811 printk(KERN_INFO 813 printk(KERN_INFO
812 "PCI: Closing bogus Apple Firmware" 814 "PCI: Closing bogus Apple Firmware"
diff --git a/arch/powerpc/kernel/pci_32.c b/arch/powerpc/kernel/pci_32.c
index 14e300f85ce4..88db4ffaf11c 100644
--- a/arch/powerpc/kernel/pci_32.c
+++ b/arch/powerpc/kernel/pci_32.c
@@ -94,64 +94,6 @@ fixup_cpc710_pci64(struct pci_dev* dev)
94} 94}
95DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CPC710_PCI64, fixup_cpc710_pci64); 95DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CPC710_PCI64, fixup_cpc710_pci64);
96 96
97
98void __init
99update_bridge_resource(struct pci_dev *dev, struct resource *res)
100{
101 u8 io_base_lo, io_limit_lo;
102 u16 mem_base, mem_limit;
103 u16 cmd;
104 resource_size_t start, end, off;
105 struct pci_controller *hose = dev->sysdata;
106
107 if (!hose) {
108 printk("update_bridge_base: no hose?\n");
109 return;
110 }
111 pci_read_config_word(dev, PCI_COMMAND, &cmd);
112 pci_write_config_word(dev, PCI_COMMAND,
113 cmd & ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY));
114 if (res->flags & IORESOURCE_IO) {
115 off = (unsigned long) hose->io_base_virt - isa_io_base;
116 start = res->start - off;
117 end = res->end - off;
118 io_base_lo = (start >> 8) & PCI_IO_RANGE_MASK;
119 io_limit_lo = (end >> 8) & PCI_IO_RANGE_MASK;
120 if (end > 0xffff)
121 io_base_lo |= PCI_IO_RANGE_TYPE_32;
122 else
123 io_base_lo |= PCI_IO_RANGE_TYPE_16;
124 pci_write_config_word(dev, PCI_IO_BASE_UPPER16,
125 start >> 16);
126 pci_write_config_word(dev, PCI_IO_LIMIT_UPPER16,
127 end >> 16);
128 pci_write_config_byte(dev, PCI_IO_BASE, io_base_lo);
129 pci_write_config_byte(dev, PCI_IO_LIMIT, io_limit_lo);
130
131 } else if ((res->flags & (IORESOURCE_MEM | IORESOURCE_PREFETCH))
132 == IORESOURCE_MEM) {
133 off = hose->pci_mem_offset;
134 mem_base = ((res->start - off) >> 16) & PCI_MEMORY_RANGE_MASK;
135 mem_limit = ((res->end - off) >> 16) & PCI_MEMORY_RANGE_MASK;
136 pci_write_config_word(dev, PCI_MEMORY_BASE, mem_base);
137 pci_write_config_word(dev, PCI_MEMORY_LIMIT, mem_limit);
138
139 } else if ((res->flags & (IORESOURCE_MEM | IORESOURCE_PREFETCH))
140 == (IORESOURCE_MEM | IORESOURCE_PREFETCH)) {
141 off = hose->pci_mem_offset;
142 mem_base = ((res->start - off) >> 16) & PCI_PREF_RANGE_MASK;
143 mem_limit = ((res->end - off) >> 16) & PCI_PREF_RANGE_MASK;
144 pci_write_config_word(dev, PCI_PREF_MEMORY_BASE, mem_base);
145 pci_write_config_word(dev, PCI_PREF_MEMORY_LIMIT, mem_limit);
146
147 } else {
148 DBG(KERN_ERR "PCI: ugh, bridge %s res has flags=%lx\n",
149 pci_name(dev), res->flags);
150 }
151 pci_write_config_word(dev, PCI_COMMAND, cmd);
152}
153
154
155#ifdef CONFIG_PPC_OF 97#ifdef CONFIG_PPC_OF
156/* 98/*
157 * Functions below are used on OpenFirmware machines. 99 * Functions below are used on OpenFirmware machines.
diff --git a/arch/ppc/kernel/rio.c b/arch/powerpc/kernel/rio.c
index 29487fedfc76..29487fedfc76 100644
--- a/arch/ppc/kernel/rio.c
+++ b/arch/powerpc/kernel/rio.c
diff --git a/arch/powerpc/math-emu/op-4.h b/arch/powerpc/math-emu/op-4.h
index fcdd6d064c54..c9ae626070da 100644
--- a/arch/powerpc/math-emu/op-4.h
+++ b/arch/powerpc/math-emu/op-4.h
@@ -194,19 +194,39 @@
194 (X##_f[3] = I3, X##_f[2] = I2, X##_f[1] = I1, X##_f[0] = I0) 194 (X##_f[3] = I3, X##_f[2] = I2, X##_f[1] = I1, X##_f[0] = I0)
195 195
196#ifndef __FP_FRAC_ADD_4 196#ifndef __FP_FRAC_ADD_4
197#define __FP_FRAC_ADD_4(r3,r2,r1,r0,x3,x2,x1,x0,y3,y2,y1,y0) \ 197#define __FP_FRAC_ADD_4(r3,r2,r1,r0,x3,x2,x1,x0,y3,y2,y1,y0) \
198 (r0 = x0 + y0, \ 198 do { \
199 r1 = x1 + y1 + (r0 < x0), \ 199 int _c1, _c2, _c3; \
200 r2 = x2 + y2 + (r1 < x1), \ 200 r0 = x0 + y0; \
201 r3 = x3 + y3 + (r2 < x2)) 201 _c1 = r0 < x0; \
202 r1 = x1 + y1; \
203 _c2 = r1 < x1; \
204 r1 += _c1; \
205 _c2 |= r1 < _c1; \
206 r2 = x2 + y2; \
207 _c3 = r2 < x2; \
208 r2 += _c2; \
209 _c3 |= r2 < _c2; \
210 r3 = x3 + y3 + _c3; \
211 } while (0)
202#endif 212#endif
203 213
204#ifndef __FP_FRAC_SUB_4 214#ifndef __FP_FRAC_SUB_4
205#define __FP_FRAC_SUB_4(r3,r2,r1,r0,x3,x2,x1,x0,y3,y2,y1,y0) \ 215#define __FP_FRAC_SUB_4(r3,r2,r1,r0,x3,x2,x1,x0,y3,y2,y1,y0) \
206 (r0 = x0 - y0, \ 216 do { \
207 r1 = x1 - y1 - (r0 > x0), \ 217 int _c1, _c2, _c3; \
208 r2 = x2 - y2 - (r1 > x1), \ 218 r0 = x0 - y0; \
209 r3 = x3 - y3 - (r2 > x2)) 219 _c1 = r0 > x0; \
220 r1 = x1 - y1; \
221 _c2 = r1 > x1; \
222 r1 -= _c1; \
223 _c2 |= r1 > _c1; \
224 r2 = x2 - y2; \
225 _c3 = r2 > x2; \
226 r2 -= _c2; \
227 _c3 |= r2 > _c2; \
228 r3 = x3 - y3 - _c3; \
229 } while (0)
210#endif 230#endif
211 231
212#ifndef __FP_FRAC_ADDI_4 232#ifndef __FP_FRAC_ADDI_4
diff --git a/arch/powerpc/mm/fsl_booke_mmu.c b/arch/powerpc/mm/fsl_booke_mmu.c
index 17139daeaff4..c93a966b7e4b 100644
--- a/arch/powerpc/mm/fsl_booke_mmu.c
+++ b/arch/powerpc/mm/fsl_booke_mmu.c
@@ -165,15 +165,15 @@ void invalidate_tlbcam_entry(int index)
165void __init cam_mapin_ram(unsigned long cam0, unsigned long cam1, 165void __init cam_mapin_ram(unsigned long cam0, unsigned long cam1,
166 unsigned long cam2) 166 unsigned long cam2)
167{ 167{
168 settlbcam(0, KERNELBASE, PPC_MEMSTART, cam0, _PAGE_KERNEL, 0); 168 settlbcam(0, PAGE_OFFSET, PPC_MEMSTART, cam0, _PAGE_KERNEL, 0);
169 tlbcam_index++; 169 tlbcam_index++;
170 if (cam1) { 170 if (cam1) {
171 tlbcam_index++; 171 tlbcam_index++;
172 settlbcam(1, KERNELBASE+cam0, PPC_MEMSTART+cam0, cam1, _PAGE_KERNEL, 0); 172 settlbcam(1, PAGE_OFFSET+cam0, PPC_MEMSTART+cam0, cam1, _PAGE_KERNEL, 0);
173 } 173 }
174 if (cam2) { 174 if (cam2) {
175 tlbcam_index++; 175 tlbcam_index++;
176 settlbcam(2, KERNELBASE+cam0+cam1, PPC_MEMSTART+cam0+cam1, cam2, _PAGE_KERNEL, 0); 176 settlbcam(2, PAGE_OFFSET+cam0+cam1, PPC_MEMSTART+cam0+cam1, cam2, _PAGE_KERNEL, 0);
177 } 177 }
178} 178}
179 179
diff --git a/arch/powerpc/mm/lmb.c b/arch/powerpc/mm/lmb.c
index 8f4d2dc4cafb..4ce23bcf8a57 100644
--- a/arch/powerpc/mm/lmb.c
+++ b/arch/powerpc/mm/lmb.c
@@ -342,3 +342,16 @@ void __init lmb_enforce_memory_limit(unsigned long memory_limit)
342 } 342 }
343 } 343 }
344} 344}
345
346int __init lmb_is_reserved(unsigned long addr)
347{
348 int i;
349
350 for (i = 0; i < lmb.reserved.cnt; i++) {
351 unsigned long upper = lmb.reserved.region[i].base +
352 lmb.reserved.region[i].size - 1;
353 if ((addr >= lmb.reserved.region[i].base) && (addr <= upper))
354 return 1;
355 }
356 return 0;
357}
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c
index 5402fb6b3aae..e8122447f019 100644
--- a/arch/powerpc/mm/mem.c
+++ b/arch/powerpc/mm/mem.c
@@ -213,15 +213,30 @@ void __init do_init_bootmem(void)
213 */ 213 */
214#ifdef CONFIG_HIGHMEM 214#ifdef CONFIG_HIGHMEM
215 free_bootmem_with_active_regions(0, total_lowmem >> PAGE_SHIFT); 215 free_bootmem_with_active_regions(0, total_lowmem >> PAGE_SHIFT);
216
217 /* reserve the sections we're already using */
218 for (i = 0; i < lmb.reserved.cnt; i++) {
219 unsigned long addr = lmb.reserved.region[i].base +
220 lmb_size_bytes(&lmb.reserved, i) - 1;
221 if (addr < total_lowmem)
222 reserve_bootmem(lmb.reserved.region[i].base,
223 lmb_size_bytes(&lmb.reserved, i));
224 else if (lmb.reserved.region[i].base < total_lowmem) {
225 unsigned long adjusted_size = total_lowmem -
226 lmb.reserved.region[i].base;
227 reserve_bootmem(lmb.reserved.region[i].base,
228 adjusted_size);
229 }
230 }
216#else 231#else
217 free_bootmem_with_active_regions(0, max_pfn); 232 free_bootmem_with_active_regions(0, max_pfn);
218#endif
219 233
220 /* reserve the sections we're already using */ 234 /* reserve the sections we're already using */
221 for (i = 0; i < lmb.reserved.cnt; i++) 235 for (i = 0; i < lmb.reserved.cnt; i++)
222 reserve_bootmem(lmb.reserved.region[i].base, 236 reserve_bootmem(lmb.reserved.region[i].base,
223 lmb_size_bytes(&lmb.reserved, i)); 237 lmb_size_bytes(&lmb.reserved, i));
224 238
239#endif
225 /* XXX need to clip this if using highmem? */ 240 /* XXX need to clip this if using highmem? */
226 sparse_memory_present_with_active_regions(0); 241 sparse_memory_present_with_active_regions(0);
227 242
@@ -334,11 +349,13 @@ void __init mem_init(void)
334 highmem_mapnr = total_lowmem >> PAGE_SHIFT; 349 highmem_mapnr = total_lowmem >> PAGE_SHIFT;
335 for (pfn = highmem_mapnr; pfn < max_mapnr; ++pfn) { 350 for (pfn = highmem_mapnr; pfn < max_mapnr; ++pfn) {
336 struct page *page = pfn_to_page(pfn); 351 struct page *page = pfn_to_page(pfn);
337 352 if (lmb_is_reserved(pfn << PAGE_SHIFT))
353 continue;
338 ClearPageReserved(page); 354 ClearPageReserved(page);
339 init_page_count(page); 355 init_page_count(page);
340 __free_page(page); 356 __free_page(page);
341 totalhigh_pages++; 357 totalhigh_pages++;
358 reservedpages--;
342 } 359 }
343 totalram_pages += totalhigh_pages; 360 totalram_pages += totalhigh_pages;
344 printk(KERN_DEBUG "High memory: %luk\n", 361 printk(KERN_DEBUG "High memory: %luk\n",
diff --git a/arch/powerpc/platforms/82xx/Kconfig b/arch/powerpc/platforms/82xx/Kconfig
index 541fbb815631..4fad6c7bf9f1 100644
--- a/arch/powerpc/platforms/82xx/Kconfig
+++ b/arch/powerpc/platforms/82xx/Kconfig
@@ -26,6 +26,19 @@ config PQ2FADS
26 help 26 help
27 This option enables support for the PQ2FADS board 27 This option enables support for the PQ2FADS board
28 28
29config EP8248E
30 bool "Embedded Planet EP8248E (a.k.a. CWH-PPC-8248N-VE)"
31 select 8272
32 select 8260
33 select FSL_SOC
34 select PPC_CPM_NEW_BINDING
35 select MDIO_BITBANG
36 help
37 This enables support for the Embedded Planet EP8248E board.
38
39 This board is also resold by Freescale as the QUICCStart
40 MPC8248 Evaluation System and/or the CWH-PPC-8248N-VE.
41
29endchoice 42endchoice
30 43
31config PQ2ADS 44config PQ2ADS
diff --git a/arch/powerpc/platforms/82xx/Makefile b/arch/powerpc/platforms/82xx/Makefile
index 68c8b0c9772b..6cd5cd59bf2a 100644
--- a/arch/powerpc/platforms/82xx/Makefile
+++ b/arch/powerpc/platforms/82xx/Makefile
@@ -5,3 +5,4 @@ obj-$(CONFIG_MPC8272_ADS) += mpc8272_ads.o
5obj-$(CONFIG_CPM2) += pq2.o 5obj-$(CONFIG_CPM2) += pq2.o
6obj-$(CONFIG_PQ2_ADS_PCI_PIC) += pq2ads-pci-pic.o 6obj-$(CONFIG_PQ2_ADS_PCI_PIC) += pq2ads-pci-pic.o
7obj-$(CONFIG_PQ2FADS) += pq2fads.o 7obj-$(CONFIG_PQ2FADS) += pq2fads.o
8obj-$(CONFIG_EP8248E) += ep8248e.o
diff --git a/arch/powerpc/platforms/82xx/ep8248e.c b/arch/powerpc/platforms/82xx/ep8248e.c
new file mode 100644
index 000000000000..ba93d8ae9b0c
--- /dev/null
+++ b/arch/powerpc/platforms/82xx/ep8248e.c
@@ -0,0 +1,324 @@
1/*
2 * Embedded Planet EP8248E support
3 *
4 * Copyright 2007 Freescale Semiconductor, Inc.
5 * Author: Scott Wood <scottwood@freescale.com>
6 *
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
9 * Free Software Foundation; either version 2 of the License, or (at your
10 * option) any later version.
11 */
12
13#include <linux/init.h>
14#include <linux/interrupt.h>
15#include <linux/fsl_devices.h>
16#include <linux/mdio-bitbang.h>
17#include <linux/of_platform.h>
18
19#include <asm/io.h>
20#include <asm/cpm2.h>
21#include <asm/udbg.h>
22#include <asm/machdep.h>
23#include <asm/time.h>
24#include <asm/mpc8260.h>
25#include <asm/prom.h>
26
27#include <sysdev/fsl_soc.h>
28#include <sysdev/cpm2_pic.h>
29
30#include "pq2.h"
31
32static u8 __iomem *ep8248e_bcsr;
33static struct device_node *ep8248e_bcsr_node;
34
35#define BCSR7_SCC2_ENABLE 0x10
36
37#define BCSR8_PHY1_ENABLE 0x80
38#define BCSR8_PHY1_POWER 0x40
39#define BCSR8_PHY2_ENABLE 0x20
40#define BCSR8_PHY2_POWER 0x10
41#define BCSR8_MDIO_READ 0x04
42#define BCSR8_MDIO_CLOCK 0x02
43#define BCSR8_MDIO_DATA 0x01
44
45#define BCSR9_USB_ENABLE 0x80
46#define BCSR9_USB_POWER 0x40
47#define BCSR9_USB_HOST 0x20
48#define BCSR9_USB_FULL_SPEED_TARGET 0x10
49
50static void __init ep8248e_pic_init(void)
51{
52 struct device_node *np = of_find_compatible_node(NULL, NULL, "fsl,pq2-pic");
53 if (!np) {
54 printk(KERN_ERR "PIC init: can not find cpm-pic node\n");
55 return;
56 }
57
58 cpm2_pic_init(np);
59 of_node_put(np);
60}
61
62static void ep8248e_set_mdc(struct mdiobb_ctrl *ctrl, int level)
63{
64 if (level)
65 setbits8(&ep8248e_bcsr[8], BCSR8_MDIO_CLOCK);
66 else
67 clrbits8(&ep8248e_bcsr[8], BCSR8_MDIO_CLOCK);
68
69 /* Read back to flush the write. */
70 in_8(&ep8248e_bcsr[8]);
71}
72
73static void ep8248e_set_mdio_dir(struct mdiobb_ctrl *ctrl, int output)
74{
75 if (output)
76 clrbits8(&ep8248e_bcsr[8], BCSR8_MDIO_READ);
77 else
78 setbits8(&ep8248e_bcsr[8], BCSR8_MDIO_READ);
79
80 /* Read back to flush the write. */
81 in_8(&ep8248e_bcsr[8]);
82}
83
84static void ep8248e_set_mdio_data(struct mdiobb_ctrl *ctrl, int data)
85{
86 if (data)
87 setbits8(&ep8248e_bcsr[8], BCSR8_MDIO_DATA);
88 else
89 clrbits8(&ep8248e_bcsr[8], BCSR8_MDIO_DATA);
90
91 /* Read back to flush the write. */
92 in_8(&ep8248e_bcsr[8]);
93}
94
95static int ep8248e_get_mdio_data(struct mdiobb_ctrl *ctrl)
96{
97 return in_8(&ep8248e_bcsr[8]) & BCSR8_MDIO_DATA;
98}
99
100static const struct mdiobb_ops ep8248e_mdio_ops = {
101 .set_mdc = ep8248e_set_mdc,
102 .set_mdio_dir = ep8248e_set_mdio_dir,
103 .set_mdio_data = ep8248e_set_mdio_data,
104 .get_mdio_data = ep8248e_get_mdio_data,
105 .owner = THIS_MODULE,
106};
107
108static struct mdiobb_ctrl ep8248e_mdio_ctrl = {
109 .ops = &ep8248e_mdio_ops,
110};
111
112static int __devinit ep8248e_mdio_probe(struct of_device *ofdev,
113 const struct of_device_id *match)
114{
115 struct mii_bus *bus;
116 struct resource res;
117 struct device_node *node;
118 int ret, i;
119
120 node = of_get_parent(ofdev->node);
121 of_node_put(node);
122 if (node != ep8248e_bcsr_node)
123 return -ENODEV;
124
125 ret = of_address_to_resource(ofdev->node, 0, &res);
126 if (ret)
127 return ret;
128
129 bus = alloc_mdio_bitbang(&ep8248e_mdio_ctrl);
130 if (!bus)
131 return -ENOMEM;
132
133 bus->phy_mask = 0;
134 bus->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL);
135
136 for (i = 0; i < PHY_MAX_ADDR; i++)
137 bus->irq[i] = -1;
138
139 bus->name = "ep8248e-mdio-bitbang";
140 bus->dev = &ofdev->dev;
141 bus->id = res.start;
142
143 return mdiobus_register(bus);
144}
145
146static int ep8248e_mdio_remove(struct of_device *ofdev)
147{
148 BUG();
149 return 0;
150}
151
152static const struct of_device_id ep8248e_mdio_match[] = {
153 {
154 .compatible = "fsl,ep8248e-mdio-bitbang",
155 },
156 {},
157};
158
159static struct of_platform_driver ep8248e_mdio_driver = {
160 .driver = {
161 .name = "ep8248e-mdio-bitbang",
162 },
163 .match_table = ep8248e_mdio_match,
164 .probe = ep8248e_mdio_probe,
165 .remove = ep8248e_mdio_remove,
166};
167
168struct cpm_pin {
169 int port, pin, flags;
170};
171
172static __initdata struct cpm_pin ep8248e_pins[] = {
173 /* SMC1 */
174 {2, 4, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
175 {2, 5, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
176
177 /* SCC1 */
178 {2, 14, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
179 {2, 15, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
180 {3, 29, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
181 {3, 30, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY},
182 {3, 31, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
183
184 /* FCC1 */
185 {0, 14, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
186 {0, 15, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
187 {0, 16, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
188 {0, 17, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
189 {0, 18, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
190 {0, 19, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
191 {0, 20, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
192 {0, 21, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
193 {0, 26, CPM_PIN_INPUT | CPM_PIN_SECONDARY},
194 {0, 27, CPM_PIN_INPUT | CPM_PIN_SECONDARY},
195 {0, 28, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY},
196 {0, 29, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY},
197 {0, 30, CPM_PIN_INPUT | CPM_PIN_SECONDARY},
198 {0, 31, CPM_PIN_INPUT | CPM_PIN_SECONDARY},
199 {2, 21, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
200 {2, 22, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
201
202 /* FCC2 */
203 {1, 18, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
204 {1, 19, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
205 {1, 20, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
206 {1, 21, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
207 {1, 22, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
208 {1, 23, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
209 {1, 24, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
210 {1, 25, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
211 {1, 26, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
212 {1, 27, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
213 {1, 28, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
214 {1, 29, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY},
215 {1, 30, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
216 {1, 31, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
217 {2, 18, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
218 {2, 19, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
219
220 /* I2C */
221 {4, 14, CPM_PIN_INPUT | CPM_PIN_SECONDARY},
222 {4, 15, CPM_PIN_INPUT | CPM_PIN_SECONDARY},
223
224 /* USB */
225 {2, 10, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
226 {2, 11, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
227 {2, 20, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
228 {2, 24, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
229 {3, 23, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
230 {3, 24, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
231 {3, 25, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
232};
233
234static void __init init_ioports(void)
235{
236 int i;
237
238 for (i = 0; i < ARRAY_SIZE(ep8248e_pins); i++) {
239 const struct cpm_pin *pin = &ep8248e_pins[i];
240 cpm2_set_pin(pin->port, pin->pin, pin->flags);
241 }
242
243 cpm2_smc_clk_setup(CPM_CLK_SMC1, CPM_BRG7);
244 cpm2_clk_setup(CPM_CLK_SCC1, CPM_BRG1, CPM_CLK_RX);
245 cpm2_clk_setup(CPM_CLK_SCC1, CPM_BRG1, CPM_CLK_TX);
246 cpm2_clk_setup(CPM_CLK_SCC3, CPM_CLK8, CPM_CLK_TX); /* USB */
247 cpm2_clk_setup(CPM_CLK_FCC1, CPM_CLK11, CPM_CLK_RX);
248 cpm2_clk_setup(CPM_CLK_FCC1, CPM_CLK10, CPM_CLK_TX);
249 cpm2_clk_setup(CPM_CLK_FCC2, CPM_CLK13, CPM_CLK_RX);
250 cpm2_clk_setup(CPM_CLK_FCC2, CPM_CLK14, CPM_CLK_TX);
251}
252
253static void __init ep8248e_setup_arch(void)
254{
255 if (ppc_md.progress)
256 ppc_md.progress("ep8248e_setup_arch()", 0);
257
258 cpm2_reset();
259
260 /* When this is set, snooping CPM DMA from RAM causes
261 * machine checks. See erratum SIU18.
262 */
263 clrbits32(&cpm2_immr->im_siu_conf.siu_82xx.sc_bcr, MPC82XX_BCR_PLDP);
264
265 ep8248e_bcsr_node =
266 of_find_compatible_node(NULL, NULL, "fsl,ep8248e-bcsr");
267 if (!ep8248e_bcsr_node) {
268 printk(KERN_ERR "No bcsr in device tree\n");
269 return;
270 }
271
272 ep8248e_bcsr = of_iomap(ep8248e_bcsr_node, 0);
273 if (!ep8248e_bcsr) {
274 printk(KERN_ERR "Cannot map BCSR registers\n");
275 of_node_put(ep8248e_bcsr_node);
276 ep8248e_bcsr_node = NULL;
277 return;
278 }
279
280 setbits8(&ep8248e_bcsr[7], BCSR7_SCC2_ENABLE);
281 setbits8(&ep8248e_bcsr[8], BCSR8_PHY1_ENABLE | BCSR8_PHY1_POWER |
282 BCSR8_PHY2_ENABLE | BCSR8_PHY2_POWER);
283
284 init_ioports();
285
286 if (ppc_md.progress)
287 ppc_md.progress("ep8248e_setup_arch(), finish", 0);
288}
289
290static __initdata struct of_device_id of_bus_ids[] = {
291 { .compatible = "simple-bus", },
292 { .compatible = "fsl,ep8248e-bcsr", },
293 {},
294};
295
296static int __init declare_of_platform_devices(void)
297{
298 of_platform_bus_probe(NULL, of_bus_ids, NULL);
299 of_register_platform_driver(&ep8248e_mdio_driver);
300
301 return 0;
302}
303machine_device_initcall(ep8248e, declare_of_platform_devices);
304
305/*
306 * Called very early, device-tree isn't unflattened
307 */
308static int __init ep8248e_probe(void)
309{
310 unsigned long root = of_get_flat_dt_root();
311 return of_flat_dt_is_compatible(root, "fsl,ep8248e");
312}
313
314define_machine(ep8248e)
315{
316 .name = "Embedded Planet EP8248E",
317 .probe = ep8248e_probe,
318 .setup_arch = ep8248e_setup_arch,
319 .init_IRQ = ep8248e_pic_init,
320 .get_irq = cpm2_get_irq,
321 .calibrate_decr = generic_calibrate_decr,
322 .restart = pq2_restart,
323 .progress = udbg_progress,
324};
diff --git a/arch/powerpc/platforms/83xx/mpc8313_rdb.c b/arch/powerpc/platforms/83xx/mpc8313_rdb.c
index 6fb82993967c..4996b7dfdf1d 100644
--- a/arch/powerpc/platforms/83xx/mpc8313_rdb.c
+++ b/arch/powerpc/platforms/83xx/mpc8313_rdb.c
@@ -14,6 +14,7 @@
14 */ 14 */
15 15
16#include <linux/pci.h> 16#include <linux/pci.h>
17#include <linux/of_platform.h>
17 18
18#include <asm/time.h> 19#include <asm/time.h>
19#include <asm/ipic.h> 20#include <asm/ipic.h>
@@ -75,6 +76,18 @@ static int __init mpc8313_rdb_probe(void)
75 return of_flat_dt_is_compatible(root, "MPC8313ERDB"); 76 return of_flat_dt_is_compatible(root, "MPC8313ERDB");
76} 77}
77 78
79static struct of_device_id __initdata of_bus_ids[] = {
80 { .compatible = "simple-bus" },
81 {},
82};
83
84static int __init declare_of_platform_devices(void)
85{
86 of_platform_bus_probe(NULL, of_bus_ids, NULL);
87 return 0;
88}
89machine_device_initcall(mpc8313_rdb, declare_of_platform_devices);
90
78define_machine(mpc8313_rdb) { 91define_machine(mpc8313_rdb) {
79 .name = "MPC8313 RDB", 92 .name = "MPC8313 RDB",
80 .probe = mpc8313_rdb_probe, 93 .probe = mpc8313_rdb_probe,
diff --git a/arch/powerpc/platforms/83xx/mpc832x_mds.c b/arch/powerpc/platforms/83xx/mpc832x_mds.c
index 1e570bb947fc..dbdd4adef645 100644
--- a/arch/powerpc/platforms/83xx/mpc832x_mds.c
+++ b/arch/powerpc/platforms/83xx/mpc832x_mds.c
@@ -110,15 +110,12 @@ static struct of_device_id mpc832x_ids[] = {
110 110
111static int __init mpc832x_declare_of_platform_devices(void) 111static int __init mpc832x_declare_of_platform_devices(void)
112{ 112{
113 if (!machine_is(mpc832x_mds))
114 return 0;
115
116 /* Publish the QE devices */ 113 /* Publish the QE devices */
117 of_platform_bus_probe(NULL, mpc832x_ids, NULL); 114 of_platform_bus_probe(NULL, mpc832x_ids, NULL);
118 115
119 return 0; 116 return 0;
120} 117}
121device_initcall(mpc832x_declare_of_platform_devices); 118machine_device_initcall(mpc832x_mds, mpc832x_declare_of_platform_devices);
122 119
123static void __init mpc832x_sys_init_IRQ(void) 120static void __init mpc832x_sys_init_IRQ(void)
124{ 121{
diff --git a/arch/powerpc/platforms/83xx/mpc832x_rdb.c b/arch/powerpc/platforms/83xx/mpc832x_rdb.c
index ffb2e9361ce3..5fddd2285abb 100644
--- a/arch/powerpc/platforms/83xx/mpc832x_rdb.c
+++ b/arch/powerpc/platforms/83xx/mpc832x_rdb.c
@@ -63,9 +63,6 @@ static struct spi_board_info mpc832x_spi_boardinfo = {
63 63
64static int __init mpc832x_spi_init(void) 64static int __init mpc832x_spi_init(void)
65{ 65{
66 if (!machine_is(mpc832x_rdb))
67 return 0;
68
69 par_io_config_pin(3, 0, 3, 0, 1, 0); /* SPI1 MOSI, I/O */ 66 par_io_config_pin(3, 0, 3, 0, 1, 0); /* SPI1 MOSI, I/O */
70 par_io_config_pin(3, 1, 3, 0, 1, 0); /* SPI1 MISO, I/O */ 67 par_io_config_pin(3, 1, 3, 0, 1, 0); /* SPI1 MISO, I/O */
71 par_io_config_pin(3, 2, 3, 0, 1, 0); /* SPI1 CLK, I/O */ 68 par_io_config_pin(3, 2, 3, 0, 1, 0); /* SPI1 CLK, I/O */
@@ -80,7 +77,7 @@ static int __init mpc832x_spi_init(void)
80 mpc83xx_spi_deactivate_cs); 77 mpc83xx_spi_deactivate_cs);
81} 78}
82 79
83device_initcall(mpc832x_spi_init); 80machine_device_initcall(mpc832x_rdb, mpc832x_spi_init);
84 81
85/* ************************************************************************ 82/* ************************************************************************
86 * 83 *
@@ -123,15 +120,12 @@ static struct of_device_id mpc832x_ids[] = {
123 120
124static int __init mpc832x_declare_of_platform_devices(void) 121static int __init mpc832x_declare_of_platform_devices(void)
125{ 122{
126 if (!machine_is(mpc832x_rdb))
127 return 0;
128
129 /* Publish the QE devices */ 123 /* Publish the QE devices */
130 of_platform_bus_probe(NULL, mpc832x_ids, NULL); 124 of_platform_bus_probe(NULL, mpc832x_ids, NULL);
131 125
132 return 0; 126 return 0;
133} 127}
134device_initcall(mpc832x_declare_of_platform_devices); 128machine_device_initcall(mpc832x_rdb, mpc832x_declare_of_platform_devices);
135 129
136void __init mpc832x_rdb_init_IRQ(void) 130void __init mpc832x_rdb_init_IRQ(void)
137{ 131{
diff --git a/arch/powerpc/platforms/83xx/mpc834x_itx.c b/arch/powerpc/platforms/83xx/mpc834x_itx.c
index aa768199432d..50e8f632061c 100644
--- a/arch/powerpc/platforms/83xx/mpc834x_itx.c
+++ b/arch/powerpc/platforms/83xx/mpc834x_itx.c
@@ -23,6 +23,7 @@
23#include <linux/delay.h> 23#include <linux/delay.h>
24#include <linux/seq_file.h> 24#include <linux/seq_file.h>
25#include <linux/root_dev.h> 25#include <linux/root_dev.h>
26#include <linux/of_platform.h>
26 27
27#include <asm/system.h> 28#include <asm/system.h>
28#include <asm/atomic.h> 29#include <asm/atomic.h>
@@ -37,6 +38,17 @@
37 38
38#include "mpc83xx.h" 39#include "mpc83xx.h"
39 40
41static struct of_device_id __initdata mpc834x_itx_ids[] = {
42 { .compatible = "fsl,pq2pro-localbus", },
43 {},
44};
45
46static int __init mpc834x_itx_declare_of_platform_devices(void)
47{
48 return of_platform_bus_probe(NULL, mpc834x_itx_ids, NULL);
49}
50machine_device_initcall(mpc834x_itx, mpc834x_itx_declare_of_platform_devices);
51
40/* ************************************************************************ 52/* ************************************************************************
41 * 53 *
42 * Setup the architecture 54 * Setup the architecture
diff --git a/arch/powerpc/platforms/83xx/mpc834x_mds.c b/arch/powerpc/platforms/83xx/mpc834x_mds.c
index 459fb7227e76..2b8a0a3f8557 100644
--- a/arch/powerpc/platforms/83xx/mpc834x_mds.c
+++ b/arch/powerpc/platforms/83xx/mpc834x_mds.c
@@ -115,13 +115,10 @@ static struct of_device_id mpc834x_ids[] = {
115 115
116static int __init mpc834x_declare_of_platform_devices(void) 116static int __init mpc834x_declare_of_platform_devices(void)
117{ 117{
118 if (!machine_is(mpc834x_mds))
119 return 0;
120
121 of_platform_bus_probe(NULL, mpc834x_ids, NULL); 118 of_platform_bus_probe(NULL, mpc834x_ids, NULL);
122 return 0; 119 return 0;
123} 120}
124device_initcall(mpc834x_declare_of_platform_devices); 121machine_device_initcall(mpc834x_mds, mpc834x_declare_of_platform_devices);
125 122
126/* 123/*
127 * Called very early, MMU is off, device-tree isn't unflattened 124 * Called very early, MMU is off, device-tree isn't unflattened
diff --git a/arch/powerpc/platforms/83xx/mpc836x_mds.c b/arch/powerpc/platforms/83xx/mpc836x_mds.c
index 2ac9890b763c..db491ec006e0 100644
--- a/arch/powerpc/platforms/83xx/mpc836x_mds.c
+++ b/arch/powerpc/platforms/83xx/mpc836x_mds.c
@@ -141,15 +141,12 @@ static struct of_device_id mpc836x_ids[] = {
141 141
142static int __init mpc836x_declare_of_platform_devices(void) 142static int __init mpc836x_declare_of_platform_devices(void)
143{ 143{
144 if (!machine_is(mpc836x_mds))
145 return 0;
146
147 /* Publish the QE devices */ 144 /* Publish the QE devices */
148 of_platform_bus_probe(NULL, mpc836x_ids, NULL); 145 of_platform_bus_probe(NULL, mpc836x_ids, NULL);
149 146
150 return 0; 147 return 0;
151} 148}
152device_initcall(mpc836x_declare_of_platform_devices); 149machine_device_initcall(mpc836x_mds, mpc836x_declare_of_platform_devices);
153 150
154static void __init mpc836x_mds_init_IRQ(void) 151static void __init mpc836x_mds_init_IRQ(void)
155{ 152{
diff --git a/arch/powerpc/platforms/83xx/mpc837x_mds.c b/arch/powerpc/platforms/83xx/mpc837x_mds.c
index 9cdc32b4fa18..8a9c26973605 100644
--- a/arch/powerpc/platforms/83xx/mpc837x_mds.c
+++ b/arch/powerpc/platforms/83xx/mpc837x_mds.c
@@ -22,6 +22,56 @@
22 22
23#include "mpc83xx.h" 23#include "mpc83xx.h"
24 24
25#define BCSR12_USB_SER_MASK 0x8a
26#define BCSR12_USB_SER_PIN 0x80
27#define BCSR12_USB_SER_DEVICE 0x02
28extern int mpc837x_usb_cfg(void);
29
30static int mpc837xmds_usb_cfg(void)
31{
32 struct device_node *np;
33 const void *phy_type, *mode;
34 void __iomem *bcsr_regs = NULL;
35 u8 bcsr12;
36 int ret;
37
38 ret = mpc837x_usb_cfg();
39 if (ret)
40 return ret;
41 /* Map BCSR area */
42 np = of_find_node_by_name(NULL, "bcsr");
43 if (np) {
44 struct resource res;
45
46 of_address_to_resource(np, 0, &res);
47 bcsr_regs = ioremap(res.start, res.end - res.start + 1);
48 of_node_put(np);
49 }
50 if (!bcsr_regs)
51 return -1;
52
53 np = of_find_node_by_name(NULL, "usb");
54 if (!np)
55 return -ENODEV;
56 phy_type = of_get_property(np, "phy_type", NULL);
57 if (phy_type && !strcmp(phy_type, "ulpi")) {
58 clrbits8(bcsr_regs + 12, BCSR12_USB_SER_PIN);
59 } else if (phy_type && !strcmp(phy_type, "serial")) {
60 mode = of_get_property(np, "dr_mode", NULL);
61 bcsr12 = in_8(bcsr_regs + 12) & ~BCSR12_USB_SER_MASK;
62 bcsr12 |= BCSR12_USB_SER_PIN;
63 if (mode && !strcmp(mode, "peripheral"))
64 bcsr12 |= BCSR12_USB_SER_DEVICE;
65 out_8(bcsr_regs + 12, bcsr12);
66 } else {
67 printk(KERN_ERR "USB DR: unsupported PHY\n");
68 }
69
70 of_node_put(np);
71 iounmap(bcsr_regs);
72 return 0;
73}
74
25/* ************************************************************************ 75/* ************************************************************************
26 * 76 *
27 * Setup the architecture 77 * Setup the architecture
@@ -40,6 +90,7 @@ static void __init mpc837x_mds_setup_arch(void)
40 for_each_compatible_node(np, "pci", "fsl,mpc8349-pci") 90 for_each_compatible_node(np, "pci", "fsl,mpc8349-pci")
41 mpc83xx_add_bridge(np); 91 mpc83xx_add_bridge(np);
42#endif 92#endif
93 mpc837xmds_usb_cfg();
43} 94}
44 95
45static struct of_device_id mpc837x_ids[] = { 96static struct of_device_id mpc837x_ids[] = {
@@ -50,15 +101,12 @@ static struct of_device_id mpc837x_ids[] = {
50 101
51static int __init mpc837x_declare_of_platform_devices(void) 102static int __init mpc837x_declare_of_platform_devices(void)
52{ 103{
53 if (!machine_is(mpc837x_mds))
54 return 0;
55
56 /* Publish of_device */ 104 /* Publish of_device */
57 of_platform_bus_probe(NULL, mpc837x_ids, NULL); 105 of_platform_bus_probe(NULL, mpc837x_ids, NULL);
58 106
59 return 0; 107 return 0;
60} 108}
61device_initcall(mpc837x_declare_of_platform_devices); 109machine_device_initcall(mpc837x_mds, mpc837x_declare_of_platform_devices);
62 110
63static void __init mpc837x_mds_init_IRQ(void) 111static void __init mpc837x_mds_init_IRQ(void)
64{ 112{
diff --git a/arch/powerpc/platforms/83xx/mpc83xx.h b/arch/powerpc/platforms/83xx/mpc83xx.h
index b778cb4f3fb5..88bb748aff0d 100644
--- a/arch/powerpc/platforms/83xx/mpc83xx.h
+++ b/arch/powerpc/platforms/83xx/mpc83xx.h
@@ -14,6 +14,7 @@
14#define MPC83XX_SCCR_USB_DRCM_11 0x00300000 14#define MPC83XX_SCCR_USB_DRCM_11 0x00300000
15#define MPC83XX_SCCR_USB_DRCM_01 0x00100000 15#define MPC83XX_SCCR_USB_DRCM_01 0x00100000
16#define MPC83XX_SCCR_USB_DRCM_10 0x00200000 16#define MPC83XX_SCCR_USB_DRCM_10 0x00200000
17#define MPC837X_SCCR_USB_DRCM_11 0x00c00000
17 18
18/* system i/o configuration register low */ 19/* system i/o configuration register low */
19#define MPC83XX_SICRL_OFFS 0x114 20#define MPC83XX_SICRL_OFFS 0x114
@@ -22,6 +23,8 @@
22#define MPC834X_SICRL_USB1 0x20000000 23#define MPC834X_SICRL_USB1 0x20000000
23#define MPC831X_SICRL_USB_MASK 0x00000c00 24#define MPC831X_SICRL_USB_MASK 0x00000c00
24#define MPC831X_SICRL_USB_ULPI 0x00000800 25#define MPC831X_SICRL_USB_ULPI 0x00000800
26#define MPC837X_SICRL_USB_MASK 0xf0000000
27#define MPC837X_SICRL_USB_ULPI 0x50000000
25 28
26/* system i/o configuration register high */ 29/* system i/o configuration register high */
27#define MPC83XX_SICRH_OFFS 0x118 30#define MPC83XX_SICRH_OFFS 0x118
diff --git a/arch/powerpc/platforms/83xx/usb.c b/arch/powerpc/platforms/83xx/usb.c
index b45160f8d084..6a454a4087c8 100644
--- a/arch/powerpc/platforms/83xx/usb.c
+++ b/arch/powerpc/platforms/83xx/usb.c
@@ -41,7 +41,7 @@ int mpc834x_usb_cfg(void)
41 sicrl = in_be32(immap + MPC83XX_SICRL_OFFS) & ~MPC834X_SICRL_USB_MASK; 41 sicrl = in_be32(immap + MPC83XX_SICRL_OFFS) & ~MPC834X_SICRL_USB_MASK;
42 sicrh = in_be32(immap + MPC83XX_SICRH_OFFS) & ~MPC834X_SICRH_USB_UTMI; 42 sicrh = in_be32(immap + MPC83XX_SICRH_OFFS) & ~MPC834X_SICRH_USB_UTMI;
43 43
44 np = of_find_compatible_node(NULL, "usb", "fsl-usb2-dr"); 44 np = of_find_compatible_node(NULL, NULL, "fsl-usb2-dr");
45 if (np) { 45 if (np) {
46 sccr |= MPC83XX_SCCR_USB_DRCM_11; /* 1:3 */ 46 sccr |= MPC83XX_SCCR_USB_DRCM_11; /* 1:3 */
47 47
@@ -67,7 +67,7 @@ int mpc834x_usb_cfg(void)
67 port0_is_dr = 1; 67 port0_is_dr = 1;
68 of_node_put(np); 68 of_node_put(np);
69 } 69 }
70 np = of_find_compatible_node(NULL, "usb", "fsl-usb2-mph"); 70 np = of_find_compatible_node(NULL, NULL, "fsl-usb2-mph");
71 if (np) { 71 if (np) {
72 sccr |= MPC83XX_SCCR_USB_MPHCM_11; /* 1:3 */ 72 sccr |= MPC83XX_SCCR_USB_MPHCM_11; /* 1:3 */
73 73
@@ -111,7 +111,7 @@ int mpc831x_usb_cfg(void)
111 const void *dr_mode; 111 const void *dr_mode;
112#endif 112#endif
113 113
114 np = of_find_compatible_node(NULL, "usb", "fsl-usb2-dr"); 114 np = of_find_compatible_node(NULL, NULL, "fsl-usb2-dr");
115 if (!np) 115 if (!np)
116 return -ENODEV; 116 return -ENODEV;
117 prop = of_get_property(np, "phy_type", NULL); 117 prop = of_get_property(np, "phy_type", NULL);
@@ -179,3 +179,43 @@ int mpc831x_usb_cfg(void)
179 return ret; 179 return ret;
180} 180}
181#endif /* CONFIG_PPC_MPC831x */ 181#endif /* CONFIG_PPC_MPC831x */
182
183#ifdef CONFIG_PPC_MPC837x
184int mpc837x_usb_cfg(void)
185{
186 void __iomem *immap;
187 struct device_node *np = NULL;
188 const void *prop;
189 int ret = 0;
190
191 np = of_find_compatible_node(NULL, NULL, "fsl-usb2-dr");
192 if (!np)
193 return -ENODEV;
194 prop = of_get_property(np, "phy_type", NULL);
195
196 if (!prop || (strcmp(prop, "ulpi") && strcmp(prop, "serial"))) {
197 printk(KERN_WARNING "837x USB PHY type not supported\n");
198 of_node_put(np);
199 return -EINVAL;
200 }
201
202 /* Map IMMR space for pin and clock settings */
203 immap = ioremap(get_immrbase(), 0x1000);
204 if (!immap) {
205 of_node_put(np);
206 return -ENOMEM;
207 }
208
209 /* Configure clock */
210 clrsetbits_be32(immap + MPC83XX_SCCR_OFFS, MPC837X_SCCR_USB_DRCM_11,
211 MPC837X_SCCR_USB_DRCM_11);
212
213 /* Configure pin mux for ULPI/serial */
214 clrsetbits_be32(immap + MPC83XX_SICRL_OFFS, MPC837X_SICRL_USB_MASK,
215 MPC837X_SICRL_USB_ULPI);
216
217 iounmap(immap);
218 of_node_put(np);
219 return ret;
220}
221#endif /* CONFIG_PPC_MPC837x */
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_ads.c b/arch/powerpc/platforms/85xx/mpc85xx_ads.c
index bccdc25f83a2..4e0305096114 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx_ads.c
+++ b/arch/powerpc/platforms/85xx/mpc85xx_ads.c
@@ -52,9 +52,9 @@ static void cpm2_cascade(unsigned int irq, struct irq_desc *desc)
52{ 52{
53 int cascade_irq; 53 int cascade_irq;
54 54
55 while ((cascade_irq = cpm2_get_irq()) >= 0) { 55 while ((cascade_irq = cpm2_get_irq()) >= 0)
56 generic_handle_irq(cascade_irq); 56 generic_handle_irq(cascade_irq);
57 } 57
58 desc->chip->eoi(irq); 58 desc->chip->eoi(irq);
59} 59}
60 60
@@ -70,13 +70,12 @@ static void __init mpc85xx_ads_pic_init(void)
70#endif 70#endif
71 71
72 np = of_find_node_by_type(np, "open-pic"); 72 np = of_find_node_by_type(np, "open-pic");
73 73 if (!np) {
74 if (np == NULL) {
75 printk(KERN_ERR "Could not find open-pic node\n"); 74 printk(KERN_ERR "Could not find open-pic node\n");
76 return; 75 return;
77 } 76 }
78 77
79 if(of_address_to_resource(np, 0, &r)) { 78 if (of_address_to_resource(np, 0, &r)) {
80 printk(KERN_ERR "Could not map mpic register space\n"); 79 printk(KERN_ERR "Could not map mpic register space\n");
81 of_node_put(np); 80 of_node_put(np);
82 return; 81 return;
@@ -100,6 +99,7 @@ static void __init mpc85xx_ads_pic_init(void)
100 irq = irq_of_parse_and_map(np, 0); 99 irq = irq_of_parse_and_map(np, 0);
101 100
102 cpm2_pic_init(np); 101 cpm2_pic_init(np);
102 of_node_put(np);
103 set_irq_chained_handler(irq, cpm2_cascade); 103 set_irq_chained_handler(irq, cpm2_cascade);
104#endif 104#endif
105} 105}
@@ -112,7 +112,7 @@ struct cpm_pin {
112 int port, pin, flags; 112 int port, pin, flags;
113}; 113};
114 114
115static struct cpm_pin mpc8560_ads_pins[] = { 115static const struct cpm_pin mpc8560_ads_pins[] = {
116 /* SCC1 */ 116 /* SCC1 */
117 {3, 29, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY}, 117 {3, 29, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
118 {3, 30, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY}, 118 {3, 30, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY},
@@ -233,13 +233,11 @@ static struct of_device_id __initdata of_bus_ids[] = {
233 233
234static int __init declare_of_platform_devices(void) 234static int __init declare_of_platform_devices(void)
235{ 235{
236 if (!machine_is(mpc85xx_ads))
237 return 0;
238
239 of_platform_bus_probe(NULL, of_bus_ids, NULL); 236 of_platform_bus_probe(NULL, of_bus_ids, NULL);
237
240 return 0; 238 return 0;
241} 239}
242device_initcall(declare_of_platform_devices); 240machine_device_initcall(mpc85xx_ads, declare_of_platform_devices);
243 241
244/* 242/*
245 * Called very early, device-tree isn't unflattened 243 * Called very early, device-tree isn't unflattened
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_cds.c b/arch/powerpc/platforms/85xx/mpc85xx_cds.c
index 4d063eec6210..8b1de7884be6 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx_cds.c
+++ b/arch/powerpc/platforms/85xx/mpc85xx_cds.c
@@ -222,9 +222,6 @@ static int mpc85xx_cds_8259_attach(void)
222 struct device_node *cascade_node = NULL; 222 struct device_node *cascade_node = NULL;
223 int cascade_irq; 223 int cascade_irq;
224 224
225 if (!machine_is(mpc85xx_cds))
226 return 0;
227
228 /* Initialize the i8259 controller */ 225 /* Initialize the i8259 controller */
229 for_each_node_by_type(np, "interrupt-controller") 226 for_each_node_by_type(np, "interrupt-controller")
230 if (of_device_is_compatible(np, "chrp,iic")) { 227 if (of_device_is_compatible(np, "chrp,iic")) {
@@ -262,8 +259,7 @@ static int mpc85xx_cds_8259_attach(void)
262 259
263 return 0; 260 return 0;
264} 261}
265 262machine_device_initcall(mpc85xx_cds, mpc85xx_cds_8259_attach);
266device_initcall(mpc85xx_cds_8259_attach);
267 263
268#endif /* CONFIG_PPC_I8259 */ 264#endif /* CONFIG_PPC_I8259 */
269 265
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_mds.c b/arch/powerpc/platforms/85xx/mpc85xx_mds.c
index e6c63a5b1efb..4fdf5abefffd 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx_mds.c
+++ b/arch/powerpc/platforms/85xx/mpc85xx_mds.c
@@ -144,15 +144,12 @@ static struct of_device_id mpc85xx_ids[] = {
144 144
145static int __init mpc85xx_publish_devices(void) 145static int __init mpc85xx_publish_devices(void)
146{ 146{
147 if (!machine_is(mpc85xx_mds))
148 return 0;
149
150 /* Publish the QE devices */ 147 /* Publish the QE devices */
151 of_platform_bus_probe(NULL,mpc85xx_ids,NULL); 148 of_platform_bus_probe(NULL, mpc85xx_ids, NULL);
152 149
153 return 0; 150 return 0;
154} 151}
155device_initcall(mpc85xx_publish_devices); 152machine_device_initcall(mpc85xx_mds, mpc85xx_publish_devices);
156 153
157static void __init mpc85xx_mds_pic_init(void) 154static void __init mpc85xx_mds_pic_init(void)
158{ 155{
diff --git a/arch/powerpc/platforms/86xx/mpc8610_hpcd.c b/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
index c6d2f48f8f3d..0b07485641fe 100644
--- a/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
+++ b/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
@@ -34,9 +34,24 @@
34 34
35#include <asm/mpic.h> 35#include <asm/mpic.h>
36 36
37#include <linux/of_platform.h>
37#include <sysdev/fsl_pci.h> 38#include <sysdev/fsl_pci.h>
38#include <sysdev/fsl_soc.h> 39#include <sysdev/fsl_soc.h>
39 40
41static struct of_device_id __initdata mpc8610_ids[] = {
42 { .compatible = "fsl,mpc8610-immr", },
43 {}
44};
45
46static int __init mpc8610_declare_of_platform_devices(void)
47{
48 /* Without this call, the SSI device driver won't get probed. */
49 of_platform_bus_probe(NULL, mpc8610_ids, NULL);
50
51 return 0;
52}
53machine_device_initcall(mpc86xx_hpcd, mpc8610_declare_of_platform_devices);
54
40void __init 55void __init
41mpc86xx_hpcd_init_irq(void) 56mpc86xx_hpcd_init_irq(void)
42{ 57{
diff --git a/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c b/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c
index 14f4e527e7ac..cfbe8c52e263 100644
--- a/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c
+++ b/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c
@@ -18,6 +18,7 @@
18#include <linux/kdev_t.h> 18#include <linux/kdev_t.h>
19#include <linux/delay.h> 19#include <linux/delay.h>
20#include <linux/seq_file.h> 20#include <linux/seq_file.h>
21#include <linux/of_platform.h>
21 22
22#include <asm/system.h> 23#include <asm/system.h>
23#include <asm/time.h> 24#include <asm/time.h>
@@ -212,6 +213,19 @@ mpc86xx_time_init(void)
212 return 0; 213 return 0;
213} 214}
214 215
216static __initdata struct of_device_id of_bus_ids[] = {
217 { .compatible = "simple-bus", },
218 {},
219};
220
221static int __init declare_of_platform_devices(void)
222{
223 of_platform_bus_probe(NULL, of_bus_ids, NULL);
224
225 return 0;
226}
227machine_device_initcall(mpc86xx_hpcn, declare_of_platform_devices);
228
215define_machine(mpc86xx_hpcn) { 229define_machine(mpc86xx_hpcn) {
216 .name = "MPC86xx HPCN", 230 .name = "MPC86xx HPCN",
217 .probe = mpc86xx_hpcn_probe, 231 .probe = mpc86xx_hpcn_probe,
diff --git a/arch/powerpc/platforms/8xx/Kconfig b/arch/powerpc/platforms/8xx/Kconfig
index 91fbe4241918..7fd224ca233d 100644
--- a/arch/powerpc/platforms/8xx/Kconfig
+++ b/arch/powerpc/platforms/8xx/Kconfig
@@ -44,6 +44,15 @@ config PPC_EP88XC
44 This board is also resold by Freescale as the QUICCStart 44 This board is also resold by Freescale as the QUICCStart
45 MPC885 Evaluation System and/or the CWH-PPC-885XN-VE. 45 MPC885 Evaluation System and/or the CWH-PPC-885XN-VE.
46 46
47config PPC_ADDER875
48 bool "Analogue & Micro Adder 875"
49 select CPM1
50 select PPC_CPM_NEW_BINDING
51 select REDBOOT
52 help
53 This enables support for the Analogue & Micro Adder 875
54 board.
55
47endchoice 56endchoice
48 57
49menu "Freescale Ethernet driver platform-specific options" 58menu "Freescale Ethernet driver platform-specific options"
diff --git a/arch/powerpc/platforms/8xx/Makefile b/arch/powerpc/platforms/8xx/Makefile
index 8b7098018b59..7b71d9c8fb45 100644
--- a/arch/powerpc/platforms/8xx/Makefile
+++ b/arch/powerpc/platforms/8xx/Makefile
@@ -5,3 +5,4 @@ obj-$(CONFIG_PPC_8xx) += m8xx_setup.o
5obj-$(CONFIG_MPC885ADS) += mpc885ads_setup.o 5obj-$(CONFIG_MPC885ADS) += mpc885ads_setup.o
6obj-$(CONFIG_MPC86XADS) += mpc86xads_setup.o 6obj-$(CONFIG_MPC86XADS) += mpc86xads_setup.o
7obj-$(CONFIG_PPC_EP88XC) += ep88xc.o 7obj-$(CONFIG_PPC_EP88XC) += ep88xc.o
8obj-$(CONFIG_PPC_ADDER875) += adder875.o
diff --git a/arch/powerpc/platforms/8xx/adder875.c b/arch/powerpc/platforms/8xx/adder875.c
new file mode 100644
index 000000000000..c6bc0783c3b0
--- /dev/null
+++ b/arch/powerpc/platforms/8xx/adder875.c
@@ -0,0 +1,118 @@
1/* Analogue & Micro Adder MPC875 board support
2 *
3 * Author: Scott Wood <scottwood@freescale.com>
4 *
5 * Copyright (c) 2007 Freescale Semiconductor, Inc.
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License, version 2, as
9 * published by the Free Software Foundation.
10 */
11
12#include <linux/init.h>
13#include <linux/fs_enet_pd.h>
14#include <linux/of_platform.h>
15
16#include <asm/time.h>
17#include <asm/machdep.h>
18#include <asm/commproc.h>
19#include <asm/fs_pd.h>
20#include <asm/udbg.h>
21#include <asm/prom.h>
22
23#include <sysdev/commproc.h>
24
25struct cpm_pin {
26 int port, pin, flags;
27};
28
29static __initdata struct cpm_pin adder875_pins[] = {
30 /* SMC1 */
31 {CPM_PORTB, 24, CPM_PIN_INPUT}, /* RX */
32 {CPM_PORTB, 25, CPM_PIN_INPUT | CPM_PIN_SECONDARY}, /* TX */
33
34 /* MII1 */
35 {CPM_PORTA, 0, CPM_PIN_INPUT},
36 {CPM_PORTA, 1, CPM_PIN_INPUT},
37 {CPM_PORTA, 2, CPM_PIN_INPUT},
38 {CPM_PORTA, 3, CPM_PIN_INPUT},
39 {CPM_PORTA, 4, CPM_PIN_OUTPUT},
40 {CPM_PORTA, 10, CPM_PIN_OUTPUT},
41 {CPM_PORTA, 11, CPM_PIN_OUTPUT},
42 {CPM_PORTB, 19, CPM_PIN_INPUT},
43 {CPM_PORTB, 31, CPM_PIN_INPUT},
44 {CPM_PORTC, 12, CPM_PIN_INPUT},
45 {CPM_PORTC, 13, CPM_PIN_INPUT},
46 {CPM_PORTE, 30, CPM_PIN_OUTPUT},
47 {CPM_PORTE, 31, CPM_PIN_OUTPUT},
48
49 /* MII2 */
50 {CPM_PORTE, 14, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY},
51 {CPM_PORTE, 15, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY},
52 {CPM_PORTE, 16, CPM_PIN_OUTPUT},
53 {CPM_PORTE, 17, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY},
54 {CPM_PORTE, 18, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY},
55 {CPM_PORTE, 19, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY},
56 {CPM_PORTE, 20, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY},
57 {CPM_PORTE, 21, CPM_PIN_OUTPUT},
58 {CPM_PORTE, 22, CPM_PIN_OUTPUT},
59 {CPM_PORTE, 23, CPM_PIN_OUTPUT},
60 {CPM_PORTE, 24, CPM_PIN_OUTPUT},
61 {CPM_PORTE, 25, CPM_PIN_OUTPUT},
62 {CPM_PORTE, 26, CPM_PIN_OUTPUT},
63 {CPM_PORTE, 27, CPM_PIN_OUTPUT},
64 {CPM_PORTE, 28, CPM_PIN_OUTPUT},
65 {CPM_PORTE, 29, CPM_PIN_OUTPUT},
66};
67
68static void __init init_ioports(void)
69{
70 int i;
71
72 for (i = 0; i < ARRAY_SIZE(adder875_pins); i++) {
73 const struct cpm_pin *pin = &adder875_pins[i];
74 cpm1_set_pin(pin->port, pin->pin, pin->flags);
75 }
76
77 cpm1_clk_setup(CPM_CLK_SMC1, CPM_BRG1, CPM_CLK_RTX);
78
79 /* Set FEC1 and FEC2 to MII mode */
80 clrbits32(&mpc8xx_immr->im_cpm.cp_cptr, 0x00000180);
81}
82
83static void __init adder875_setup(void)
84{
85 cpm_reset();
86 init_ioports();
87}
88
89static int __init adder875_probe(void)
90{
91 unsigned long root = of_get_flat_dt_root();
92 return of_flat_dt_is_compatible(root, "analogue-and-micro,adder875");
93}
94
95static __initdata struct of_device_id of_bus_ids[] = {
96 { .compatible = "simple-bus", },
97 {},
98};
99
100static int __init declare_of_platform_devices(void)
101{
102 of_platform_bus_probe(NULL, of_bus_ids, NULL);
103 return 0;
104}
105machine_device_initcall(adder875, declare_of_platform_devices);
106
107define_machine(adder875) {
108 .name = "Adder MPC875",
109 .probe = adder875_probe,
110 .setup_arch = adder875_setup,
111 .init_IRQ = m8xx_pic_init,
112 .get_irq = mpc8xx_get_irq,
113 .restart = mpc8xx_restart,
114 .calibrate_decr = generic_calibrate_decr,
115 .set_rtc_time = mpc8xx_set_rtc_time,
116 .get_rtc_time = mpc8xx_get_rtc_time,
117 .progress = udbg_progress,
118};
diff --git a/arch/powerpc/platforms/8xx/ep88xc.c b/arch/powerpc/platforms/8xx/ep88xc.c
index c518b6cc5fab..88afa353f1d2 100644
--- a/arch/powerpc/platforms/8xx/ep88xc.c
+++ b/arch/powerpc/platforms/8xx/ep88xc.c
@@ -155,12 +155,11 @@ static struct of_device_id __initdata of_bus_ids[] = {
155static int __init declare_of_platform_devices(void) 155static int __init declare_of_platform_devices(void)
156{ 156{
157 /* Publish the QE devices */ 157 /* Publish the QE devices */
158 if (machine_is(ep88xc)) 158 of_platform_bus_probe(NULL, of_bus_ids, NULL);
159 of_platform_bus_probe(NULL, of_bus_ids, NULL);
160 159
161 return 0; 160 return 0;
162} 161}
163device_initcall(declare_of_platform_devices); 162machine_device_initcall(ep88xc, declare_of_platform_devices);
164 163
165define_machine(ep88xc) { 164define_machine(ep88xc) {
166 .name = "Embedded Planet EP88xC", 165 .name = "Embedded Planet EP88xC",
diff --git a/arch/powerpc/platforms/8xx/mpc86xads_setup.c b/arch/powerpc/platforms/8xx/mpc86xads_setup.c
index d2927a434aef..d7965f885209 100644
--- a/arch/powerpc/platforms/8xx/mpc86xads_setup.c
+++ b/arch/powerpc/platforms/8xx/mpc86xads_setup.c
@@ -128,12 +128,11 @@ static struct of_device_id __initdata of_bus_ids[] = {
128 128
129static int __init declare_of_platform_devices(void) 129static int __init declare_of_platform_devices(void)
130{ 130{
131 if (machine_is(mpc86x_ads)) 131 of_platform_bus_probe(NULL, of_bus_ids, NULL);
132 of_platform_bus_probe(NULL, of_bus_ids, NULL);
133 132
134 return 0; 133 return 0;
135} 134}
136device_initcall(declare_of_platform_devices); 135machine_device_initcall(mpc86x_ads, declare_of_platform_devices);
137 136
138define_machine(mpc86x_ads) { 137define_machine(mpc86x_ads) {
139 .name = "MPC86x ADS", 138 .name = "MPC86x ADS",
diff --git a/arch/powerpc/platforms/8xx/mpc885ads_setup.c b/arch/powerpc/platforms/8xx/mpc885ads_setup.c
index 2cf1b6a75173..6ef8e9e6b8c3 100644
--- a/arch/powerpc/platforms/8xx/mpc885ads_setup.c
+++ b/arch/powerpc/platforms/8xx/mpc885ads_setup.c
@@ -264,12 +264,11 @@ static struct of_device_id __initdata of_bus_ids[] = {
264static int __init declare_of_platform_devices(void) 264static int __init declare_of_platform_devices(void)
265{ 265{
266 /* Publish the QE devices */ 266 /* Publish the QE devices */
267 if (machine_is(mpc885_ads)) 267 of_platform_bus_probe(NULL, of_bus_ids, NULL);
268 of_platform_bus_probe(NULL, of_bus_ids, NULL);
269 268
270 return 0; 269 return 0;
271} 270}
272device_initcall(declare_of_platform_devices); 271machine_device_initcall(mpc885_ads, declare_of_platform_devices);
273 272
274define_machine(mpc885_ads) { 273define_machine(mpc885_ads) {
275 .name = "Freescale MPC885 ADS", 274 .name = "Freescale MPC885 ADS",
diff --git a/arch/powerpc/platforms/Kconfig b/arch/powerpc/platforms/Kconfig
index ea22cad2cd0a..2cec34314d2e 100644
--- a/arch/powerpc/platforms/Kconfig
+++ b/arch/powerpc/platforms/Kconfig
@@ -22,6 +22,7 @@ config PPC_83xx
22 depends on 6xx 22 depends on 6xx
23 select FSL_SOC 23 select FSL_SOC
24 select 83xx 24 select 83xx
25 select IPIC
25 select WANT_DEVICE_TREE 26 select WANT_DEVICE_TREE
26 27
27config PPC_86xx 28config PPC_86xx
@@ -80,6 +81,10 @@ config XICS
80 bool 81 bool
81 default y 82 default y
82 83
84config IPIC
85 bool
86 default n
87
83config MPIC 88config MPIC
84 bool 89 bool
85 default n 90 default n
@@ -265,6 +270,7 @@ config TAU_AVERAGE
265config QUICC_ENGINE 270config QUICC_ENGINE
266 bool 271 bool
267 select PPC_LIB_RHEAP 272 select PPC_LIB_RHEAP
273 select CRC32
268 help 274 help
269 The QUICC Engine (QE) is a new generation of communications 275 The QUICC Engine (QE) is a new generation of communications
270 coprocessors on Freescale embedded CPUs (akin to CPM in older chips). 276 coprocessors on Freescale embedded CPUs (akin to CPM in older chips).
diff --git a/arch/powerpc/platforms/embedded6xx/Kconfig b/arch/powerpc/platforms/embedded6xx/Kconfig
index 8924095a7928..6c8083757938 100644
--- a/arch/powerpc/platforms/embedded6xx/Kconfig
+++ b/arch/powerpc/platforms/embedded6xx/Kconfig
@@ -9,6 +9,8 @@ config LINKSTATION
9 select FSL_SOC 9 select FSL_SOC
10 select PPC_UDBG_16550 if SERIAL_8250 10 select PPC_UDBG_16550 if SERIAL_8250
11 select DEFAULT_UIMAGE 11 select DEFAULT_UIMAGE
12 select MPC10X_OPENPIC
13 select MPC10X_BRIDGE
12 help 14 help
13 Select LINKSTATION if configuring for one of PPC- (MPC8241) 15 Select LINKSTATION if configuring for one of PPC- (MPC8241)
14 based NAS systems from Buffalo Technology. So far only 16 based NAS systems from Buffalo Technology. So far only
@@ -16,6 +18,19 @@ config LINKSTATION
16 Linkstation-I HD-HLAN and HD-HGLAN versions, and PPC-based 18 Linkstation-I HD-HLAN and HD-HGLAN versions, and PPC-based
17 Terastation systems should be supported too. 19 Terastation systems should be supported too.
18 20
21config STORCENTER
22 bool "IOMEGA StorCenter"
23 depends on EMBEDDED6xx
24 select MPIC
25 select FSL_SOC
26 select PPC_UDBG_16550 if SERIAL_8250
27 select WANT_DEVICE_TREE
28 select MPC10X_OPENPIC
29 select MPC10X_BRIDGE
30 help
31 Select STORCENTER if configuring for the iomega StorCenter
32 with an 8241 CPU in it.
33
19config MPC7448HPC2 34config MPC7448HPC2
20 bool "Freescale MPC7448HPC2(Taiga)" 35 bool "Freescale MPC7448HPC2(Taiga)"
21 depends on EMBEDDED6xx 36 depends on EMBEDDED6xx
@@ -23,6 +38,7 @@ config MPC7448HPC2
23 select DEFAULT_UIMAGE 38 select DEFAULT_UIMAGE
24 select PPC_UDBG_16550 39 select PPC_UDBG_16550
25 select WANT_DEVICE_TREE 40 select WANT_DEVICE_TREE
41 select TSI108_BRIDGE
26 help 42 help
27 Select MPC7448HPC2 if configuring for Freescale MPC7448HPC2 (Taiga) 43 Select MPC7448HPC2 if configuring for Freescale MPC7448HPC2 (Taiga)
28 platform 44 platform
@@ -33,6 +49,7 @@ config PPC_HOLLY
33 select TSI108_BRIDGE 49 select TSI108_BRIDGE
34 select PPC_UDBG_16550 50 select PPC_UDBG_16550
35 select WANT_DEVICE_TREE 51 select WANT_DEVICE_TREE
52 select TSI108_BRIDGE
36 help 53 help
37 Select PPC_HOLLY if configuring for an IBM 750GX/CL Eval 54 Select PPC_HOLLY if configuring for an IBM 750GX/CL Eval
38 Board with TSI108/9 bridge (Hickory/Holly) 55 Board with TSI108/9 bridge (Hickory/Holly)
@@ -48,17 +65,13 @@ config PPC_PRPMC2800
48 65
49config TSI108_BRIDGE 66config TSI108_BRIDGE
50 bool 67 bool
51 depends on MPC7448HPC2 || PPC_HOLLY
52 select PCI 68 select PCI
53 select MPIC 69 select MPIC
54 select MPIC_WEIRD 70 select MPIC_WEIRD
55 default y
56 71
57config MPC10X_BRIDGE 72config MPC10X_BRIDGE
58 bool 73 bool
59 depends on LINKSTATION
60 select PPC_INDIRECT_PCI 74 select PPC_INDIRECT_PCI
61 default y
62 75
63config MV64X60 76config MV64X60
64 bool 77 bool
@@ -67,8 +80,6 @@ config MV64X60
67 80
68config MPC10X_OPENPIC 81config MPC10X_OPENPIC
69 bool 82 bool
70 depends on LINKSTATION
71 default y
72 83
73config MPC10X_STORE_GATHERING 84config MPC10X_STORE_GATHERING
74 bool "Enable MPC10x store gathering" 85 bool "Enable MPC10x store gathering"
diff --git a/arch/powerpc/platforms/embedded6xx/Makefile b/arch/powerpc/platforms/embedded6xx/Makefile
index 844947cfc5db..06524d3ffd2e 100644
--- a/arch/powerpc/platforms/embedded6xx/Makefile
+++ b/arch/powerpc/platforms/embedded6xx/Makefile
@@ -3,5 +3,6 @@
3# 3#
4obj-$(CONFIG_MPC7448HPC2) += mpc7448_hpc2.o 4obj-$(CONFIG_MPC7448HPC2) += mpc7448_hpc2.o
5obj-$(CONFIG_LINKSTATION) += linkstation.o ls_uart.o 5obj-$(CONFIG_LINKSTATION) += linkstation.o ls_uart.o
6obj-$(CONFIG_STORCENTER) += storcenter.o
6obj-$(CONFIG_PPC_HOLLY) += holly.o 7obj-$(CONFIG_PPC_HOLLY) += holly.o
7obj-$(CONFIG_PPC_PRPMC2800) += prpmc2800.o 8obj-$(CONFIG_PPC_PRPMC2800) += prpmc2800.o
diff --git a/arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c b/arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c
index a2c04b9d42b1..d4f8bf581e3a 100644
--- a/arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c
+++ b/arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c
@@ -53,8 +53,6 @@
53 53
54#define MPC7448HPC2_PCI_CFG_PHYS 0xfb000000 54#define MPC7448HPC2_PCI_CFG_PHYS 0xfb000000
55 55
56extern void _nmask_and_or_msr(unsigned long nmask, unsigned long or_val);
57
58int mpc7448_hpc2_exclude_device(struct pci_controller *hose, 56int mpc7448_hpc2_exclude_device(struct pci_controller *hose,
59 u_char bus, u_char devfn) 57 u_char bus, u_char devfn)
60{ 58{
diff --git a/arch/powerpc/platforms/embedded6xx/storcenter.c b/arch/powerpc/platforms/embedded6xx/storcenter.c
new file mode 100644
index 000000000000..e12e9d298716
--- /dev/null
+++ b/arch/powerpc/platforms/embedded6xx/storcenter.c
@@ -0,0 +1,192 @@
1/*
2 * Board setup routines for the storcenter
3 *
4 * Copyright 2007 (C) Oyvind Repvik (nail@nslu2-linux.org)
5 * Copyright 2007 Andy Wilcox, Jon Loeliger
6 *
7 * Based on linkstation.c by G. Liakhovetski
8 *
9 * This file is licensed under the terms of the GNU General Public License
10 * version 2. This program is licensed "as is" without any warranty of
11 * any kind, whether express or implied.
12 */
13
14#include <linux/kernel.h>
15#include <linux/pci.h>
16#include <linux/initrd.h>
17#include <linux/mtd/physmap.h>
18#include <linux/of_platform.h>
19
20#include <asm/system.h>
21#include <asm/time.h>
22#include <asm/prom.h>
23#include <asm/mpic.h>
24#include <asm/pci-bridge.h>
25
26#include "mpc10x.h"
27
28
29#ifdef CONFIG_MTD_PHYSMAP
30static struct mtd_partition storcenter_physmap_partitions[] = {
31 {
32 .name = "kernel",
33 .offset = 0x000000,
34 .size = 0x170000,
35 },
36 {
37 .name = "rootfs",
38 .offset = 0x170000,
39 .size = 0x590000,
40 },
41 {
42 .name = "uboot",
43 .offset = 0x700000,
44 .size = 0x040000,
45 },
46 {
47 .name = "config",
48 .offset = 0x740000,
49 .size = 0x0c0000,
50 },
51};
52#endif
53
54
55static __initdata struct of_device_id storcenter_of_bus[] = {
56 { .name = "soc", },
57 {},
58};
59
60static int __init storcenter_device_probe(void)
61{
62 of_platform_bus_probe(NULL, storcenter_of_bus, NULL);
63 return 0;
64}
65machine_device_initcall(storcenter, storcenter_device_probe);
66
67
68static int __init storcenter_add_bridge(struct device_node *dev)
69{
70#ifdef CONFIG_PCI
71 int len;
72 struct pci_controller *hose;
73 const int *bus_range;
74
75 printk("Adding PCI host bridge %s\n", dev->full_name);
76
77 hose = pcibios_alloc_controller(dev);
78 if (hose == NULL)
79 return -ENOMEM;
80
81 bus_range = of_get_property(dev, "bus-range", &len);
82 hose->first_busno = bus_range ? bus_range[0] : 0;
83 hose->last_busno = bus_range ? bus_range[1] : 0xff;
84
85 setup_indirect_pci(hose, MPC10X_MAPB_CNFG_ADDR, MPC10X_MAPB_CNFG_DATA, 0);
86
87 /* Interpret the "ranges" property */
88 /* This also maps the I/O region and sets isa_io/mem_base */
89 pci_process_bridge_OF_ranges(hose, dev, 1);
90#endif
91
92 return 0;
93}
94
95static void __init storcenter_setup_arch(void)
96{
97 struct device_node *np;
98
99#ifdef CONFIG_MTD_PHYSMAP
100 physmap_set_partitions(storcenter_physmap_partitions,
101 ARRAY_SIZE(storcenter_physmap_partitions));
102#endif
103
104 /* Lookup PCI host bridges */
105 for_each_compatible_node(np, "pci", "mpc10x-pci")
106 storcenter_add_bridge(np);
107
108 printk(KERN_INFO "IOMEGA StorCenter\n");
109}
110
111/*
112 * Interrupt setup and service. Interrrupts on the turbostation come
113 * from the four PCI slots plus onboard 8241 devices: I2C, DUART.
114 */
115static void __init storcenter_init_IRQ(void)
116{
117 struct mpic *mpic;
118 struct device_node *dnp;
119 const void *prop;
120 int size;
121 phys_addr_t paddr;
122
123 dnp = of_find_node_by_type(NULL, "open-pic");
124 if (dnp == NULL)
125 return;
126
127 prop = of_get_property(dnp, "reg", &size);
128 if (prop == NULL) {
129 of_node_put(dnp);
130 return;
131 }
132
133 paddr = (phys_addr_t)of_translate_address(dnp, prop);
134 mpic = mpic_alloc(dnp, paddr, MPIC_PRIMARY | MPIC_WANTS_RESET,
135 4, 32, " EPIC ");
136
137 of_node_put(dnp);
138
139 BUG_ON(mpic == NULL);
140
141 /* PCI IRQs */
142 /*
143 * 2.6.12 patch:
144 * openpic_set_sources(0, 5, OpenPIC_Addr + 0x10200);
145 * openpic_set_sources(5, 2, OpenPIC_Addr + 0x11120);
146 * first_irq, num_irqs, __iomem first_ISR
147 * o_ss: i, src: 0, fdf50200
148 * o_ss: i, src: 1, fdf50220
149 * o_ss: i, src: 2, fdf50240
150 * o_ss: i, src: 3, fdf50260
151 * o_ss: i, src: 4, fdf50280
152 * o_ss: i, src: 5, fdf51120
153 * o_ss: i, src: 6, fdf51140
154 */
155 mpic_assign_isu(mpic, 0, paddr + 0x10200);
156 mpic_assign_isu(mpic, 1, paddr + 0x10220);
157 mpic_assign_isu(mpic, 2, paddr + 0x10240);
158 mpic_assign_isu(mpic, 3, paddr + 0x10260);
159 mpic_assign_isu(mpic, 4, paddr + 0x10280);
160 mpic_assign_isu(mpic, 5, paddr + 0x11120);
161 mpic_assign_isu(mpic, 6, paddr + 0x11140);
162
163 mpic_init(mpic);
164}
165
166static void storcenter_restart(char *cmd)
167{
168 local_irq_disable();
169
170 /* Set exception prefix high - to the firmware */
171 _nmask_and_or_msr(0, MSR_IP);
172
173 /* Wait for reset to happen */
174 for (;;) ;
175}
176
177static int __init storcenter_probe(void)
178{
179 unsigned long root = of_get_flat_dt_root();
180
181 return of_flat_dt_is_compatible(root, "storcenter");
182}
183
184define_machine(storcenter){
185 .name = "IOMEGA StorCenter",
186 .probe = storcenter_probe,
187 .setup_arch = storcenter_setup_arch,
188 .init_IRQ = storcenter_init_IRQ,
189 .get_irq = mpic_get_irq,
190 .restart = storcenter_restart,
191 .calibrate_decr = generic_calibrate_decr,
192};
diff --git a/arch/powerpc/sysdev/Makefile b/arch/powerpc/sysdev/Makefile
index 9a20ef4f0ea4..f17e7b885f60 100644
--- a/arch/powerpc/sysdev/Makefile
+++ b/arch/powerpc/sysdev/Makefile
@@ -12,6 +12,7 @@ obj-$(CONFIG_U3_DART) += dart_iommu.o
12obj-$(CONFIG_MMIO_NVRAM) += mmio_nvram.o 12obj-$(CONFIG_MMIO_NVRAM) += mmio_nvram.o
13obj-$(CONFIG_FSL_SOC) += fsl_soc.o 13obj-$(CONFIG_FSL_SOC) += fsl_soc.o
14obj-$(CONFIG_FSL_PCI) += fsl_pci.o 14obj-$(CONFIG_FSL_PCI) += fsl_pci.o
15obj-$(CONFIG_RAPIDIO) += fsl_rio.o
15obj-$(CONFIG_TSI108_BRIDGE) += tsi108_pci.o tsi108_dev.o 16obj-$(CONFIG_TSI108_BRIDGE) += tsi108_pci.o tsi108_dev.o
16obj-$(CONFIG_QUICC_ENGINE) += qe_lib/ 17obj-$(CONFIG_QUICC_ENGINE) += qe_lib/
17obj-$(CONFIG_PPC_BESTCOMM) += bestcomm/ 18obj-$(CONFIG_PPC_BESTCOMM) += bestcomm/
@@ -24,7 +25,7 @@ obj-$(CONFIG_AXON_RAM) += axonram.o
24ifeq ($(CONFIG_PPC_MERGE),y) 25ifeq ($(CONFIG_PPC_MERGE),y)
25obj-$(CONFIG_PPC_INDIRECT_PCI) += indirect_pci.o 26obj-$(CONFIG_PPC_INDIRECT_PCI) += indirect_pci.o
26obj-$(CONFIG_PPC_I8259) += i8259.o 27obj-$(CONFIG_PPC_I8259) += i8259.o
27obj-$(CONFIG_PPC_83xx) += ipic.o 28obj-$(CONFIG_IPIC) += ipic.o
28obj-$(CONFIG_4xx) += uic.o 29obj-$(CONFIG_4xx) += uic.o
29obj-$(CONFIG_XILINX_VIRTEX) += xilinx_intc.o 30obj-$(CONFIG_XILINX_VIRTEX) += xilinx_intc.o
30ifeq ($(CONFIG_PCI),y) 31ifeq ($(CONFIG_PCI),y)
diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c
index 4b1d5120c122..bf13c2174a4e 100644
--- a/arch/powerpc/sysdev/fsl_pci.c
+++ b/arch/powerpc/sysdev/fsl_pci.c
@@ -33,8 +33,8 @@ void __init setup_pci_atmu(struct pci_controller *hose, struct resource *rsrc)
33 struct ccsr_pci __iomem *pci; 33 struct ccsr_pci __iomem *pci;
34 int i; 34 int i;
35 35
36 pr_debug("PCI memory map start 0x%x, size 0x%x\n", rsrc->start, 36 pr_debug("PCI memory map start 0x%016llx, size 0x%016llx\n",
37 rsrc->end - rsrc->start + 1); 37 (u64)rsrc->start, (u64)rsrc->end - (u64)rsrc->start + 1);
38 pci = ioremap(rsrc->start, rsrc->end - rsrc->start + 1); 38 pci = ioremap(rsrc->start, rsrc->end - rsrc->start + 1);
39 39
40 /* Disable all windows (except powar0 since its ignored) */ 40 /* Disable all windows (except powar0 since its ignored) */
@@ -46,17 +46,17 @@ void __init setup_pci_atmu(struct pci_controller *hose, struct resource *rsrc)
46 /* Setup outbound MEM window */ 46 /* Setup outbound MEM window */
47 for(i = 0; i < 3; i++) 47 for(i = 0; i < 3; i++)
48 if (hose->mem_resources[i].flags & IORESOURCE_MEM){ 48 if (hose->mem_resources[i].flags & IORESOURCE_MEM){
49 pr_debug("PCI MEM resource start 0x%08x, size 0x%08x.\n", 49 resource_size_t pci_addr_start =
50 hose->mem_resources[i].start, 50 hose->mem_resources[i].start -
51 hose->mem_resources[i].end 51 hose->pci_mem_offset;
52 - hose->mem_resources[i].start + 1); 52 pr_debug("PCI MEM resource start 0x%016llx, size 0x%016llx.\n",
53 out_be32(&pci->pow[i+1].potar, 53 (u64)hose->mem_resources[i].start,
54 (hose->mem_resources[i].start >> 12) 54 (u64)hose->mem_resources[i].end
55 & 0x000fffff); 55 - (u64)hose->mem_resources[i].start + 1);
56 out_be32(&pci->pow[i+1].potar, (pci_addr_start >> 12));
56 out_be32(&pci->pow[i+1].potear, 0); 57 out_be32(&pci->pow[i+1].potear, 0);
57 out_be32(&pci->pow[i+1].powbar, 58 out_be32(&pci->pow[i+1].powbar,
58 (hose->mem_resources[i].start >> 12) 59 (hose->mem_resources[i].start >> 12));
59 & 0x000fffff);
60 /* Enable, Mem R/W */ 60 /* Enable, Mem R/W */
61 out_be32(&pci->pow[i+1].powar, 0x80044000 61 out_be32(&pci->pow[i+1].powar, 0x80044000
62 | (__ilog2(hose->mem_resources[i].end 62 | (__ilog2(hose->mem_resources[i].end
@@ -65,15 +65,14 @@ void __init setup_pci_atmu(struct pci_controller *hose, struct resource *rsrc)
65 65
66 /* Setup outbound IO window */ 66 /* Setup outbound IO window */
67 if (hose->io_resource.flags & IORESOURCE_IO){ 67 if (hose->io_resource.flags & IORESOURCE_IO){
68 pr_debug("PCI IO resource start 0x%08x, size 0x%08x, phy base 0x%08x.\n", 68 pr_debug("PCI IO resource start 0x%016llx, size 0x%016llx, "
69 hose->io_resource.start, 69 "phy base 0x%016llx.\n",
70 hose->io_resource.end - hose->io_resource.start + 1, 70 (u64)hose->io_resource.start,
71 hose->io_base_phys); 71 (u64)hose->io_resource.end - (u64)hose->io_resource.start + 1,
72 out_be32(&pci->pow[i+1].potar, (hose->io_resource.start >> 12) 72 (u64)hose->io_base_phys);
73 & 0x000fffff); 73 out_be32(&pci->pow[i+1].potar, (hose->io_resource.start >> 12));
74 out_be32(&pci->pow[i+1].potear, 0); 74 out_be32(&pci->pow[i+1].potear, 0);
75 out_be32(&pci->pow[i+1].powbar, (hose->io_base_phys >> 12) 75 out_be32(&pci->pow[i+1].powbar, (hose->io_base_phys >> 12));
76 & 0x000fffff);
77 /* Enable, IO R/W */ 76 /* Enable, IO R/W */
78 out_be32(&pci->pow[i+1].powar, 0x80088000 77 out_be32(&pci->pow[i+1].powar, 0x80088000
79 | (__ilog2(hose->io_resource.end 78 | (__ilog2(hose->io_resource.end
@@ -107,55 +106,17 @@ void __init setup_pci_cmd(struct pci_controller *hose)
107 } 106 }
108} 107}
109 108
110static void __init quirk_fsl_pcie_transparent(struct pci_dev *dev) 109static int fsl_pcie_bus_fixup;
111{
112 struct resource *res;
113 int i, res_idx = PCI_BRIDGE_RESOURCES;
114 struct pci_controller *hose;
115 110
111static void __init quirk_fsl_pcie_header(struct pci_dev *dev)
112{
116 /* if we aren't a PCIe don't bother */ 113 /* if we aren't a PCIe don't bother */
117 if (!pci_find_capability(dev, PCI_CAP_ID_EXP)) 114 if (!pci_find_capability(dev, PCI_CAP_ID_EXP))
118 return ; 115 return ;
119 116
120 /* 117 dev->class = PCI_CLASS_BRIDGE_PCI << 8;
121 * Make the bridge be transparent. 118 fsl_pcie_bus_fixup = 1;
122 */ 119 return ;
123 dev->transparent = 1;
124
125 hose = pci_bus_to_host(dev->bus);
126 if (!hose) {
127 printk(KERN_ERR "Can't find hose for bus %d\n",
128 dev->bus->number);
129 return;
130 }
131
132 /* Clear out any of the virtual P2P bridge registers */
133 pci_write_config_word(dev, PCI_IO_BASE_UPPER16, 0);
134 pci_write_config_word(dev, PCI_IO_LIMIT_UPPER16, 0);
135 pci_write_config_byte(dev, PCI_IO_BASE, 0x10);
136 pci_write_config_byte(dev, PCI_IO_LIMIT, 0);
137 pci_write_config_word(dev, PCI_MEMORY_BASE, 0x10);
138 pci_write_config_word(dev, PCI_MEMORY_LIMIT, 0);
139 pci_write_config_word(dev, PCI_PREF_BASE_UPPER32, 0x0);
140 pci_write_config_word(dev, PCI_PREF_LIMIT_UPPER32, 0x0);
141 pci_write_config_word(dev, PCI_PREF_MEMORY_BASE, 0x10);
142 pci_write_config_word(dev, PCI_PREF_MEMORY_LIMIT, 0);
143
144 if (hose->io_resource.flags) {
145 res = &dev->resource[res_idx++];
146 res->start = hose->io_resource.start;
147 res->end = hose->io_resource.end;
148 res->flags = hose->io_resource.flags;
149 update_bridge_resource(dev, res);
150 }
151
152 for (i = 0; i < 3; i++) {
153 res = &dev->resource[res_idx + i];
154 res->start = hose->mem_resources[i].start;
155 res->end = hose->mem_resources[i].end;
156 res->flags = hose->mem_resources[i].flags;
157 update_bridge_resource(dev, res);
158 }
159} 120}
160 121
161int __init fsl_pcie_check_link(struct pci_controller *hose) 122int __init fsl_pcie_check_link(struct pci_controller *hose)
@@ -172,11 +133,24 @@ void fsl_pcibios_fixup_bus(struct pci_bus *bus)
172 struct pci_controller *hose = (struct pci_controller *) bus->sysdata; 133 struct pci_controller *hose = (struct pci_controller *) bus->sysdata;
173 int i; 134 int i;
174 135
175 /* deal with bogus pci_bus when we don't have anything connected on PCIe */ 136 if ((bus->parent == hose->bus) &&
176 if (hose->indirect_type & PPC_INDIRECT_TYPE_NO_PCIE_LINK) { 137 ((fsl_pcie_bus_fixup &&
177 if (bus->parent) { 138 early_find_capability(hose, 0, 0, PCI_CAP_ID_EXP)) ||
178 for (i = 0; i < 4; ++i) 139 (hose->indirect_type & PPC_INDIRECT_TYPE_NO_PCIE_LINK)))
179 bus->resource[i] = bus->parent->resource[i]; 140 {
141 for (i = 0; i < 4; ++i) {
142 struct resource *res = bus->resource[i];
143 struct resource *par = bus->parent->resource[i];
144 if (res) {
145 res->start = 0;
146 res->end = 0;
147 res->flags = 0;
148 }
149 if (res && par) {
150 res->start = par->start;
151 res->end = par->end;
152 res->flags = par->flags;
153 }
180 } 154 }
181 } 155 }
182} 156}
@@ -240,23 +214,23 @@ int __init fsl_add_bridge(struct device_node *dev, int is_primary)
240 return 0; 214 return 0;
241} 215}
242 216
243DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8548E, quirk_fsl_pcie_transparent); 217DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8548E, quirk_fsl_pcie_header);
244DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8548, quirk_fsl_pcie_transparent); 218DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8548, quirk_fsl_pcie_header);
245DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8543E, quirk_fsl_pcie_transparent); 219DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8543E, quirk_fsl_pcie_header);
246DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8543, quirk_fsl_pcie_transparent); 220DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8543, quirk_fsl_pcie_header);
247DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8547E, quirk_fsl_pcie_transparent); 221DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8547E, quirk_fsl_pcie_header);
248DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8545E, quirk_fsl_pcie_transparent); 222DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8545E, quirk_fsl_pcie_header);
249DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8545, quirk_fsl_pcie_transparent); 223DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8545, quirk_fsl_pcie_header);
250DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8568E, quirk_fsl_pcie_transparent); 224DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8568E, quirk_fsl_pcie_header);
251DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8568, quirk_fsl_pcie_transparent); 225DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8568, quirk_fsl_pcie_header);
252DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8567E, quirk_fsl_pcie_transparent); 226DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8567E, quirk_fsl_pcie_header);
253DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8567, quirk_fsl_pcie_transparent); 227DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8567, quirk_fsl_pcie_header);
254DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8533E, quirk_fsl_pcie_transparent); 228DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8533E, quirk_fsl_pcie_header);
255DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8533, quirk_fsl_pcie_transparent); 229DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8533, quirk_fsl_pcie_header);
256DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8544E, quirk_fsl_pcie_transparent); 230DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8544E, quirk_fsl_pcie_header);
257DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8544, quirk_fsl_pcie_transparent); 231DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8544, quirk_fsl_pcie_header);
258DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8572E, quirk_fsl_pcie_transparent); 232DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8572E, quirk_fsl_pcie_header);
259DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8572, quirk_fsl_pcie_transparent); 233DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8572, quirk_fsl_pcie_header);
260DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8641, quirk_fsl_pcie_transparent); 234DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8641, quirk_fsl_pcie_header);
261DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8641D, quirk_fsl_pcie_transparent); 235DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8641D, quirk_fsl_pcie_header);
262DECLARE_PCI_FIXUP_EARLY(0x1957, PCI_DEVICE_ID_MPC8610, quirk_fsl_pcie_transparent); 236DECLARE_PCI_FIXUP_HEADER(0x1957, PCI_DEVICE_ID_MPC8610, quirk_fsl_pcie_header);
diff --git a/arch/ppc/syslib/ppc85xx_rio.c b/arch/powerpc/sysdev/fsl_rio.c
index af2425e4655f..af2425e4655f 100644
--- a/arch/ppc/syslib/ppc85xx_rio.c
+++ b/arch/powerpc/sysdev/fsl_rio.c
diff --git a/arch/ppc/syslib/ppc85xx_rio.h b/arch/powerpc/sysdev/fsl_rio.h
index 6d3ff30b1579..6d3ff30b1579 100644
--- a/arch/ppc/syslib/ppc85xx_rio.h
+++ b/arch/powerpc/sysdev/fsl_rio.h
diff --git a/arch/powerpc/sysdev/fsl_soc.c b/arch/powerpc/sysdev/fsl_soc.c
index 217bcc2e8f86..f2c0988a03b8 100644
--- a/arch/powerpc/sysdev/fsl_soc.c
+++ b/arch/powerpc/sysdev/fsl_soc.c
@@ -24,6 +24,7 @@
24#include <linux/platform_device.h> 24#include <linux/platform_device.h>
25#include <linux/of_platform.h> 25#include <linux/of_platform.h>
26#include <linux/phy.h> 26#include <linux/phy.h>
27#include <linux/phy_fixed.h>
27#include <linux/spi/spi.h> 28#include <linux/spi/spi.h>
28#include <linux/fsl_devices.h> 29#include <linux/fsl_devices.h>
29#include <linux/fs_enet_pd.h> 30#include <linux/fs_enet_pd.h>
@@ -54,10 +55,18 @@ phys_addr_t get_immrbase(void)
54 soc = of_find_node_by_type(NULL, "soc"); 55 soc = of_find_node_by_type(NULL, "soc");
55 if (soc) { 56 if (soc) {
56 int size; 57 int size;
57 const void *prop = of_get_property(soc, "reg", &size); 58 u32 naddr;
59 const u32 *prop = of_get_property(soc, "#address-cells", &size);
58 60
61 if (prop && size == 4)
62 naddr = *prop;
63 else
64 naddr = 2;
65
66 prop = of_get_property(soc, "ranges", &size);
59 if (prop) 67 if (prop)
60 immrbase = of_translate_address(soc, prop); 68 immrbase = of_translate_address(soc, prop + naddr);
69
61 of_node_put(soc); 70 of_node_put(soc);
62 } 71 }
63 72
@@ -130,6 +139,37 @@ u32 get_baudrate(void)
130EXPORT_SYMBOL(get_baudrate); 139EXPORT_SYMBOL(get_baudrate);
131#endif /* CONFIG_CPM2 */ 140#endif /* CONFIG_CPM2 */
132 141
142#ifdef CONFIG_FIXED_PHY
143static int __init of_add_fixed_phys(void)
144{
145 int ret;
146 struct device_node *np;
147 u32 *fixed_link;
148 struct fixed_phy_status status = {};
149
150 for_each_node_by_name(np, "ethernet") {
151 fixed_link = (u32 *)of_get_property(np, "fixed-link", NULL);
152 if (!fixed_link)
153 continue;
154
155 status.link = 1;
156 status.duplex = fixed_link[1];
157 status.speed = fixed_link[2];
158 status.pause = fixed_link[3];
159 status.asym_pause = fixed_link[4];
160
161 ret = fixed_phy_add(PHY_POLL, fixed_link[0], &status);
162 if (ret) {
163 of_node_put(np);
164 return ret;
165 }
166 }
167
168 return 0;
169}
170arch_initcall(of_add_fixed_phys);
171#endif /* CONFIG_FIXED_PHY */
172
133static int __init gfar_mdio_of_init(void) 173static int __init gfar_mdio_of_init(void)
134{ 174{
135 struct device_node *np = NULL; 175 struct device_node *np = NULL;
@@ -198,7 +238,6 @@ static const char *gfar_tx_intr = "tx";
198static const char *gfar_rx_intr = "rx"; 238static const char *gfar_rx_intr = "rx";
199static const char *gfar_err_intr = "error"; 239static const char *gfar_err_intr = "error";
200 240
201
202static int __init gfar_of_init(void) 241static int __init gfar_of_init(void)
203{ 242{
204 struct device_node *np; 243 struct device_node *np;
@@ -282,29 +321,43 @@ static int __init gfar_of_init(void)
282 gfar_data.interface = PHY_INTERFACE_MODE_MII; 321 gfar_data.interface = PHY_INTERFACE_MODE_MII;
283 322
284 ph = of_get_property(np, "phy-handle", NULL); 323 ph = of_get_property(np, "phy-handle", NULL);
285 phy = of_find_node_by_phandle(*ph); 324 if (ph == NULL) {
325 u32 *fixed_link;
286 326
287 if (phy == NULL) { 327 fixed_link = (u32 *)of_get_property(np, "fixed-link",
288 ret = -ENODEV; 328 NULL);
289 goto unreg; 329 if (!fixed_link) {
290 } 330 ret = -ENODEV;
331 goto unreg;
332 }
291 333
292 mdio = of_get_parent(phy); 334 gfar_data.bus_id = 0;
335 gfar_data.phy_id = fixed_link[0];
336 } else {
337 phy = of_find_node_by_phandle(*ph);
338
339 if (phy == NULL) {
340 ret = -ENODEV;
341 goto unreg;
342 }
343
344 mdio = of_get_parent(phy);
345
346 id = of_get_property(phy, "reg", NULL);
347 ret = of_address_to_resource(mdio, 0, &res);
348 if (ret) {
349 of_node_put(phy);
350 of_node_put(mdio);
351 goto unreg;
352 }
353
354 gfar_data.phy_id = *id;
355 gfar_data.bus_id = res.start;
293 356
294 id = of_get_property(phy, "reg", NULL);
295 ret = of_address_to_resource(mdio, 0, &res);
296 if (ret) {
297 of_node_put(phy); 357 of_node_put(phy);
298 of_node_put(mdio); 358 of_node_put(mdio);
299 goto unreg;
300 } 359 }
301 360
302 gfar_data.phy_id = *id;
303 gfar_data.bus_id = res.start;
304
305 of_node_put(phy);
306 of_node_put(mdio);
307
308 ret = 361 ret =
309 platform_device_add_data(gfar_dev, &gfar_data, 362 platform_device_add_data(gfar_dev, &gfar_data,
310 sizeof(struct 363 sizeof(struct
@@ -531,14 +584,12 @@ static enum fsl_usb2_phy_modes determine_usb_phy(const char *phy_type)
531static int __init fsl_usb_of_init(void) 584static int __init fsl_usb_of_init(void)
532{ 585{
533 struct device_node *np; 586 struct device_node *np;
534 unsigned int i; 587 unsigned int i = 0;
535 struct platform_device *usb_dev_mph = NULL, *usb_dev_dr_host = NULL, 588 struct platform_device *usb_dev_mph = NULL, *usb_dev_dr_host = NULL,
536 *usb_dev_dr_client = NULL; 589 *usb_dev_dr_client = NULL;
537 int ret; 590 int ret;
538 591
539 for (np = NULL, i = 0; 592 for_each_compatible_node(np, NULL, "fsl-usb2-mph") {
540 (np = of_find_compatible_node(np, "usb", "fsl-usb2-mph")) != NULL;
541 i++) {
542 struct resource r[2]; 593 struct resource r[2];
543 struct fsl_usb2_platform_data usb_data; 594 struct fsl_usb2_platform_data usb_data;
544 const unsigned char *prop = NULL; 595 const unsigned char *prop = NULL;
@@ -581,11 +632,10 @@ static int __init fsl_usb_of_init(void)
581 fsl_usb2_platform_data)); 632 fsl_usb2_platform_data));
582 if (ret) 633 if (ret)
583 goto unreg_mph; 634 goto unreg_mph;
635 i++;
584 } 636 }
585 637
586 for (np = NULL; 638 for_each_compatible_node(np, NULL, "fsl-usb2-dr") {
587 (np = of_find_compatible_node(np, "usb", "fsl-usb2-dr")) != NULL;
588 i++) {
589 struct resource r[2]; 639 struct resource r[2];
590 struct fsl_usb2_platform_data usb_data; 640 struct fsl_usb2_platform_data usb_data;
591 const unsigned char *prop = NULL; 641 const unsigned char *prop = NULL;
@@ -657,6 +707,7 @@ static int __init fsl_usb_of_init(void)
657 fsl_usb2_platform_data)))) 707 fsl_usb2_platform_data))))
658 goto unreg_dr; 708 goto unreg_dr;
659 } 709 }
710 i++;
660 } 711 }
661 return 0; 712 return 0;
662 713
diff --git a/arch/powerpc/sysdev/ipic.c b/arch/powerpc/sysdev/ipic.c
index 7274750fd9c6..4c016da68426 100644
--- a/arch/powerpc/sysdev/ipic.c
+++ b/arch/powerpc/sysdev/ipic.c
@@ -48,6 +48,13 @@ static struct ipic_info ipic_info[] = {
48 .bit = 17, 48 .bit = 17,
49 .prio_mask = 1, 49 .prio_mask = 1,
50 }, 50 },
51 [3] = {
52 .mask = IPIC_SIMSR_H,
53 .prio = IPIC_SIPRR_C,
54 .force = IPIC_SIFCR_H,
55 .bit = 18,
56 .prio_mask = 2,
57 },
51 [4] = { 58 [4] = {
52 .mask = IPIC_SIMSR_H, 59 .mask = IPIC_SIMSR_H,
53 .prio = IPIC_SIPRR_C, 60 .prio = IPIC_SIPRR_C,
@@ -55,6 +62,34 @@ static struct ipic_info ipic_info[] = {
55 .bit = 19, 62 .bit = 19,
56 .prio_mask = 3, 63 .prio_mask = 3,
57 }, 64 },
65 [5] = {
66 .mask = IPIC_SIMSR_H,
67 .prio = IPIC_SIPRR_C,
68 .force = IPIC_SIFCR_H,
69 .bit = 20,
70 .prio_mask = 4,
71 },
72 [6] = {
73 .mask = IPIC_SIMSR_H,
74 .prio = IPIC_SIPRR_C,
75 .force = IPIC_SIFCR_H,
76 .bit = 21,
77 .prio_mask = 5,
78 },
79 [7] = {
80 .mask = IPIC_SIMSR_H,
81 .prio = IPIC_SIPRR_C,
82 .force = IPIC_SIFCR_H,
83 .bit = 22,
84 .prio_mask = 6,
85 },
86 [8] = {
87 .mask = IPIC_SIMSR_H,
88 .prio = IPIC_SIPRR_C,
89 .force = IPIC_SIFCR_H,
90 .bit = 23,
91 .prio_mask = 7,
92 },
58 [9] = { 93 [9] = {
59 .mask = IPIC_SIMSR_H, 94 .mask = IPIC_SIMSR_H,
60 .prio = IPIC_SIPRR_D, 95 .prio = IPIC_SIPRR_D,
@@ -223,6 +258,20 @@ static struct ipic_info ipic_info[] = {
223 .bit = 7, 258 .bit = 7,
224 .prio_mask = 7, 259 .prio_mask = 7,
225 }, 260 },
261 [40] = {
262 .mask = IPIC_SIMSR_H,
263 .prio = IPIC_SIPRR_B,
264 .force = IPIC_SIFCR_H,
265 .bit = 8,
266 .prio_mask = 0,
267 },
268 [41] = {
269 .mask = IPIC_SIMSR_H,
270 .prio = IPIC_SIPRR_B,
271 .force = IPIC_SIFCR_H,
272 .bit = 9,
273 .prio_mask = 1,
274 },
226 [42] = { 275 [42] = {
227 .mask = IPIC_SIMSR_H, 276 .mask = IPIC_SIMSR_H,
228 .prio = IPIC_SIPRR_B, 277 .prio = IPIC_SIPRR_B,
@@ -230,6 +279,13 @@ static struct ipic_info ipic_info[] = {
230 .bit = 10, 279 .bit = 10,
231 .prio_mask = 2, 280 .prio_mask = 2,
232 }, 281 },
282 [43] = {
283 .mask = IPIC_SIMSR_H,
284 .prio = IPIC_SIPRR_B,
285 .force = IPIC_SIFCR_H,
286 .bit = 11,
287 .prio_mask = 3,
288 },
233 [44] = { 289 [44] = {
234 .mask = IPIC_SIMSR_H, 290 .mask = IPIC_SIMSR_H,
235 .prio = IPIC_SIPRR_B, 291 .prio = IPIC_SIPRR_B,
@@ -387,6 +443,12 @@ static struct ipic_info ipic_info[] = {
387 .force = IPIC_SIFCR_L, 443 .force = IPIC_SIFCR_L,
388 .bit = 18, 444 .bit = 18,
389 }, 445 },
446 [83] = {
447 .mask = IPIC_SIMSR_L,
448 .prio = 0,
449 .force = IPIC_SIFCR_L,
450 .bit = 19,
451 },
390 [84] = { 452 [84] = {
391 .mask = IPIC_SIMSR_L, 453 .mask = IPIC_SIMSR_L,
392 .prio = 0, 454 .prio = 0,
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c
index f88ff09c4711..0da7069c7c62 100644
--- a/arch/powerpc/sysdev/mpic.c
+++ b/arch/powerpc/sysdev/mpic.c
@@ -267,7 +267,7 @@ static inline void _mpic_irq_write(struct mpic *mpic, unsigned int src_no,
267 */ 267 */
268 268
269 269
270static void _mpic_map_mmio(struct mpic *mpic, unsigned long phys_addr, 270static void _mpic_map_mmio(struct mpic *mpic, phys_addr_t phys_addr,
271 struct mpic_reg_bank *rb, unsigned int offset, 271 struct mpic_reg_bank *rb, unsigned int offset,
272 unsigned int size) 272 unsigned int size)
273{ 273{
@@ -287,7 +287,7 @@ static void _mpic_map_dcr(struct mpic *mpic, struct mpic_reg_bank *rb,
287 BUG_ON(!DCR_MAP_OK(rb->dhost)); 287 BUG_ON(!DCR_MAP_OK(rb->dhost));
288} 288}
289 289
290static inline void mpic_map(struct mpic *mpic, unsigned long phys_addr, 290static inline void mpic_map(struct mpic *mpic, phys_addr_t phys_addr,
291 struct mpic_reg_bank *rb, unsigned int offset, 291 struct mpic_reg_bank *rb, unsigned int offset,
292 unsigned int size) 292 unsigned int size)
293{ 293{
diff --git a/arch/powerpc/sysdev/qe_lib/Kconfig b/arch/powerpc/sysdev/qe_lib/Kconfig
index f611d344a126..adc66212a419 100644
--- a/arch/powerpc/sysdev/qe_lib/Kconfig
+++ b/arch/powerpc/sysdev/qe_lib/Kconfig
@@ -4,7 +4,7 @@
4 4
5config UCC_SLOW 5config UCC_SLOW
6 bool 6 bool
7 default n 7 default y if SERIAL_QE
8 help 8 help
9 This option provides qe_lib support to UCC slow 9 This option provides qe_lib support to UCC slow
10 protocols: UART, BISYNC, QMC 10 protocols: UART, BISYNC, QMC
diff --git a/arch/powerpc/sysdev/qe_lib/qe.c b/arch/powerpc/sysdev/qe_lib/qe.c
index 21e01061aca9..3925eae9b0f5 100644
--- a/arch/powerpc/sysdev/qe_lib/qe.c
+++ b/arch/powerpc/sysdev/qe_lib/qe.c
@@ -25,6 +25,7 @@
25#include <linux/module.h> 25#include <linux/module.h>
26#include <linux/delay.h> 26#include <linux/delay.h>
27#include <linux/ioport.h> 27#include <linux/ioport.h>
28#include <linux/crc32.h>
28#include <asm/irq.h> 29#include <asm/irq.h>
29#include <asm/page.h> 30#include <asm/page.h>
30#include <asm/pgtable.h> 31#include <asm/pgtable.h>
@@ -394,3 +395,249 @@ void *qe_muram_addr(unsigned long offset)
394 return (void *)&qe_immr->muram[offset]; 395 return (void *)&qe_immr->muram[offset];
395} 396}
396EXPORT_SYMBOL(qe_muram_addr); 397EXPORT_SYMBOL(qe_muram_addr);
398
399/* The maximum number of RISCs we support */
400#define MAX_QE_RISC 2
401
402/* Firmware information stored here for qe_get_firmware_info() */
403static struct qe_firmware_info qe_firmware_info;
404
405/*
406 * Set to 1 if QE firmware has been uploaded, and therefore
407 * qe_firmware_info contains valid data.
408 */
409static int qe_firmware_uploaded;
410
411/*
412 * Upload a QE microcode
413 *
414 * This function is a worker function for qe_upload_firmware(). It does
415 * the actual uploading of the microcode.
416 */
417static void qe_upload_microcode(const void *base,
418 const struct qe_microcode *ucode)
419{
420 const __be32 *code = base + be32_to_cpu(ucode->code_offset);
421 unsigned int i;
422
423 if (ucode->major || ucode->minor || ucode->revision)
424 printk(KERN_INFO "qe-firmware: "
425 "uploading microcode '%s' version %u.%u.%u\n",
426 ucode->id, ucode->major, ucode->minor, ucode->revision);
427 else
428 printk(KERN_INFO "qe-firmware: "
429 "uploading microcode '%s'\n", ucode->id);
430
431 /* Use auto-increment */
432 out_be32(&qe_immr->iram.iadd, be32_to_cpu(ucode->iram_offset) |
433 QE_IRAM_IADD_AIE | QE_IRAM_IADD_BADDR);
434
435 for (i = 0; i < be32_to_cpu(ucode->count); i++)
436 out_be32(&qe_immr->iram.idata, be32_to_cpu(code[i]));
437}
438
439/*
440 * Upload a microcode to the I-RAM at a specific address.
441 *
442 * See Documentation/powerpc/qe-firmware.txt for information on QE microcode
443 * uploading.
444 *
445 * Currently, only version 1 is supported, so the 'version' field must be
446 * set to 1.
447 *
448 * The SOC model and revision are not validated, they are only displayed for
449 * informational purposes.
450 *
451 * 'calc_size' is the calculated size, in bytes, of the firmware structure and
452 * all of the microcode structures, minus the CRC.
453 *
454 * 'length' is the size that the structure says it is, including the CRC.
455 */
456int qe_upload_firmware(const struct qe_firmware *firmware)
457{
458 unsigned int i;
459 unsigned int j;
460 u32 crc;
461 size_t calc_size = sizeof(struct qe_firmware);
462 size_t length;
463 const struct qe_header *hdr;
464
465 if (!firmware) {
466 printk(KERN_ERR "qe-firmware: invalid pointer\n");
467 return -EINVAL;
468 }
469
470 hdr = &firmware->header;
471 length = be32_to_cpu(hdr->length);
472
473 /* Check the magic */
474 if ((hdr->magic[0] != 'Q') || (hdr->magic[1] != 'E') ||
475 (hdr->magic[2] != 'F')) {
476 printk(KERN_ERR "qe-firmware: not a microcode\n");
477 return -EPERM;
478 }
479
480 /* Check the version */
481 if (hdr->version != 1) {
482 printk(KERN_ERR "qe-firmware: unsupported version\n");
483 return -EPERM;
484 }
485
486 /* Validate some of the fields */
487 if ((firmware->count < 1) || (firmware->count >= MAX_QE_RISC)) {
488 printk(KERN_ERR "qe-firmware: invalid data\n");
489 return -EINVAL;
490 }
491
492 /* Validate the length and check if there's a CRC */
493 calc_size += (firmware->count - 1) * sizeof(struct qe_microcode);
494
495 for (i = 0; i < firmware->count; i++)
496 /*
497 * For situations where the second RISC uses the same microcode
498 * as the first, the 'code_offset' and 'count' fields will be
499 * zero, so it's okay to add those.
500 */
501 calc_size += sizeof(__be32) *
502 be32_to_cpu(firmware->microcode[i].count);
503
504 /* Validate the length */
505 if (length != calc_size + sizeof(__be32)) {
506 printk(KERN_ERR "qe-firmware: invalid length\n");
507 return -EPERM;
508 }
509
510 /* Validate the CRC */
511 crc = be32_to_cpu(*(__be32 *)((void *)firmware + calc_size));
512 if (crc != crc32(0, firmware, calc_size)) {
513 printk(KERN_ERR "qe-firmware: firmware CRC is invalid\n");
514 return -EIO;
515 }
516
517 /*
518 * If the microcode calls for it, split the I-RAM.
519 */
520 if (!firmware->split)
521 setbits16(&qe_immr->cp.cercr, QE_CP_CERCR_CIR);
522
523 if (firmware->soc.model)
524 printk(KERN_INFO
525 "qe-firmware: firmware '%s' for %u V%u.%u\n",
526 firmware->id, be16_to_cpu(firmware->soc.model),
527 firmware->soc.major, firmware->soc.minor);
528 else
529 printk(KERN_INFO "qe-firmware: firmware '%s'\n",
530 firmware->id);
531
532 /*
533 * The QE only supports one microcode per RISC, so clear out all the
534 * saved microcode information and put in the new.
535 */
536 memset(&qe_firmware_info, 0, sizeof(qe_firmware_info));
537 strcpy(qe_firmware_info.id, firmware->id);
538 qe_firmware_info.extended_modes = firmware->extended_modes;
539 memcpy(qe_firmware_info.vtraps, firmware->vtraps,
540 sizeof(firmware->vtraps));
541
542 /* Loop through each microcode. */
543 for (i = 0; i < firmware->count; i++) {
544 const struct qe_microcode *ucode = &firmware->microcode[i];
545
546 /* Upload a microcode if it's present */
547 if (ucode->code_offset)
548 qe_upload_microcode(firmware, ucode);
549
550 /* Program the traps for this processor */
551 for (j = 0; j < 16; j++) {
552 u32 trap = be32_to_cpu(ucode->traps[j]);
553
554 if (trap)
555 out_be32(&qe_immr->rsp[i].tibcr[j], trap);
556 }
557
558 /* Enable traps */
559 out_be32(&qe_immr->rsp[i].eccr, be32_to_cpu(ucode->eccr));
560 }
561
562 qe_firmware_uploaded = 1;
563
564 return 0;
565}
566EXPORT_SYMBOL(qe_upload_firmware);
567
568/*
569 * Get info on the currently-loaded firmware
570 *
571 * This function also checks the device tree to see if the boot loader has
572 * uploaded a firmware already.
573 */
574struct qe_firmware_info *qe_get_firmware_info(void)
575{
576 static int initialized;
577 struct property *prop;
578 struct device_node *qe;
579 struct device_node *fw = NULL;
580 const char *sprop;
581 unsigned int i;
582
583 /*
584 * If we haven't checked yet, and a driver hasn't uploaded a firmware
585 * yet, then check the device tree for information.
586 */
587 if (initialized || qe_firmware_uploaded)
588 return NULL;
589
590 initialized = 1;
591
592 /*
593 * Newer device trees have an "fsl,qe" compatible property for the QE
594 * node, but we still need to support older device trees.
595 */
596 qe = of_find_compatible_node(NULL, NULL, "fsl,qe");
597 if (!qe) {
598 qe = of_find_node_by_type(NULL, "qe");
599 if (!qe)
600 return NULL;
601 }
602
603 /* Find the 'firmware' child node */
604 for_each_child_of_node(qe, fw) {
605 if (strcmp(fw->name, "firmware") == 0)
606 break;
607 }
608
609 of_node_put(qe);
610
611 /* Did we find the 'firmware' node? */
612 if (!fw)
613 return NULL;
614
615 qe_firmware_uploaded = 1;
616
617 /* Copy the data into qe_firmware_info*/
618 sprop = of_get_property(fw, "id", NULL);
619 if (sprop)
620 strncpy(qe_firmware_info.id, sprop,
621 sizeof(qe_firmware_info.id) - 1);
622
623 prop = of_find_property(fw, "extended-modes", NULL);
624 if (prop && (prop->length == sizeof(u64))) {
625 const u64 *iprop = prop->value;
626
627 qe_firmware_info.extended_modes = *iprop;
628 }
629
630 prop = of_find_property(fw, "virtual-traps", NULL);
631 if (prop && (prop->length == 32)) {
632 const u32 *iprop = prop->value;
633
634 for (i = 0; i < ARRAY_SIZE(qe_firmware_info.vtraps); i++)
635 qe_firmware_info.vtraps[i] = iprop[i];
636 }
637
638 of_node_put(fw);
639
640 return &qe_firmware_info;
641}
642EXPORT_SYMBOL(qe_get_firmware_info);
643
diff --git a/arch/powerpc/sysdev/qe_lib/ucc_slow.c b/arch/powerpc/sysdev/qe_lib/ucc_slow.c
index 0174b3aeef8f..b2870b208ddb 100644
--- a/arch/powerpc/sysdev/qe_lib/ucc_slow.c
+++ b/arch/powerpc/sysdev/qe_lib/ucc_slow.c
@@ -19,6 +19,7 @@
19#include <linux/stddef.h> 19#include <linux/stddef.h>
20#include <linux/interrupt.h> 20#include <linux/interrupt.h>
21#include <linux/err.h> 21#include <linux/err.h>
22#include <linux/module.h>
22 23
23#include <asm/io.h> 24#include <asm/io.h>
24#include <asm/immap_qe.h> 25#include <asm/immap_qe.h>
@@ -41,6 +42,7 @@ u32 ucc_slow_get_qe_cr_subblock(int uccs_num)
41 default: return QE_CR_SUBBLOCK_INVALID; 42 default: return QE_CR_SUBBLOCK_INVALID;
42 } 43 }
43} 44}
45EXPORT_SYMBOL(ucc_slow_get_qe_cr_subblock);
44 46
45void ucc_slow_poll_transmitter_now(struct ucc_slow_private * uccs) 47void ucc_slow_poll_transmitter_now(struct ucc_slow_private * uccs)
46{ 48{
@@ -56,6 +58,7 @@ void ucc_slow_graceful_stop_tx(struct ucc_slow_private * uccs)
56 qe_issue_cmd(QE_GRACEFUL_STOP_TX, id, 58 qe_issue_cmd(QE_GRACEFUL_STOP_TX, id,
57 QE_CR_PROTOCOL_UNSPECIFIED, 0); 59 QE_CR_PROTOCOL_UNSPECIFIED, 0);
58} 60}
61EXPORT_SYMBOL(ucc_slow_graceful_stop_tx);
59 62
60void ucc_slow_stop_tx(struct ucc_slow_private * uccs) 63void ucc_slow_stop_tx(struct ucc_slow_private * uccs)
61{ 64{
@@ -65,6 +68,7 @@ void ucc_slow_stop_tx(struct ucc_slow_private * uccs)
65 id = ucc_slow_get_qe_cr_subblock(us_info->ucc_num); 68 id = ucc_slow_get_qe_cr_subblock(us_info->ucc_num);
66 qe_issue_cmd(QE_STOP_TX, id, QE_CR_PROTOCOL_UNSPECIFIED, 0); 69 qe_issue_cmd(QE_STOP_TX, id, QE_CR_PROTOCOL_UNSPECIFIED, 0);
67} 70}
71EXPORT_SYMBOL(ucc_slow_stop_tx);
68 72
69void ucc_slow_restart_tx(struct ucc_slow_private * uccs) 73void ucc_slow_restart_tx(struct ucc_slow_private * uccs)
70{ 74{
@@ -74,6 +78,7 @@ void ucc_slow_restart_tx(struct ucc_slow_private * uccs)
74 id = ucc_slow_get_qe_cr_subblock(us_info->ucc_num); 78 id = ucc_slow_get_qe_cr_subblock(us_info->ucc_num);
75 qe_issue_cmd(QE_RESTART_TX, id, QE_CR_PROTOCOL_UNSPECIFIED, 0); 79 qe_issue_cmd(QE_RESTART_TX, id, QE_CR_PROTOCOL_UNSPECIFIED, 0);
76} 80}
81EXPORT_SYMBOL(ucc_slow_restart_tx);
77 82
78void ucc_slow_enable(struct ucc_slow_private * uccs, enum comm_dir mode) 83void ucc_slow_enable(struct ucc_slow_private * uccs, enum comm_dir mode)
79{ 84{
@@ -94,6 +99,7 @@ void ucc_slow_enable(struct ucc_slow_private * uccs, enum comm_dir mode)
94 } 99 }
95 out_be32(&us_regs->gumr_l, gumr_l); 100 out_be32(&us_regs->gumr_l, gumr_l);
96} 101}
102EXPORT_SYMBOL(ucc_slow_enable);
97 103
98void ucc_slow_disable(struct ucc_slow_private * uccs, enum comm_dir mode) 104void ucc_slow_disable(struct ucc_slow_private * uccs, enum comm_dir mode)
99{ 105{
@@ -114,6 +120,7 @@ void ucc_slow_disable(struct ucc_slow_private * uccs, enum comm_dir mode)
114 } 120 }
115 out_be32(&us_regs->gumr_l, gumr_l); 121 out_be32(&us_regs->gumr_l, gumr_l);
116} 122}
123EXPORT_SYMBOL(ucc_slow_disable);
117 124
118/* Initialize the UCC for Slow operations 125/* Initialize the UCC for Slow operations
119 * 126 *
@@ -347,6 +354,7 @@ int ucc_slow_init(struct ucc_slow_info * us_info, struct ucc_slow_private ** ucc
347 *uccs_ret = uccs; 354 *uccs_ret = uccs;
348 return 0; 355 return 0;
349} 356}
357EXPORT_SYMBOL(ucc_slow_init);
350 358
351void ucc_slow_free(struct ucc_slow_private * uccs) 359void ucc_slow_free(struct ucc_slow_private * uccs)
352{ 360{
@@ -366,5 +374,5 @@ void ucc_slow_free(struct ucc_slow_private * uccs)
366 374
367 kfree(uccs); 375 kfree(uccs);
368} 376}
369 377EXPORT_SYMBOL(ucc_slow_free);
370 378
diff --git a/arch/ppc/kernel/Makefile b/arch/ppc/kernel/Makefile
index 6b4f022111e7..5da0ca7c302f 100644
--- a/arch/ppc/kernel/Makefile
+++ b/arch/ppc/kernel/Makefile
@@ -13,7 +13,6 @@ obj-y := entry.o traps.o time.o misc.o \
13 ppc_htab.o 13 ppc_htab.o
14obj-$(CONFIG_MODULES) += ppc_ksyms.o 14obj-$(CONFIG_MODULES) += ppc_ksyms.o
15obj-$(CONFIG_PCI) += pci.o 15obj-$(CONFIG_PCI) += pci.o
16obj-$(CONFIG_RAPIDIO) += rio.o
17obj-$(CONFIG_KGDB) += ppc-stub.o 16obj-$(CONFIG_KGDB) += ppc-stub.o
18obj-$(CONFIG_SMP) += smp.o smp-tbsync.o 17obj-$(CONFIG_SMP) += smp.o smp-tbsync.o
19obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o 18obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o
diff --git a/arch/ppc/platforms/85xx/mpc85xx_ads_common.c b/arch/ppc/platforms/85xx/mpc85xx_ads_common.c
index 674806e001f6..0706dca5a8ea 100644
--- a/arch/ppc/platforms/85xx/mpc85xx_ads_common.c
+++ b/arch/ppc/platforms/85xx/mpc85xx_ads_common.c
@@ -42,8 +42,6 @@
42 42
43#include <mm/mmu_decl.h> 43#include <mm/mmu_decl.h>
44 44
45#include <syslib/ppc85xx_rio.h>
46
47#include <platforms/85xx/mpc85xx_ads_common.h> 45#include <platforms/85xx/mpc85xx_ads_common.h>
48 46
49#ifndef CONFIG_PCI 47#ifndef CONFIG_PCI
@@ -190,6 +188,7 @@ mpc85xx_exclude_device(u_char bus, u_char devfn)
190#endif /* CONFIG_PCI */ 188#endif /* CONFIG_PCI */
191 189
192#ifdef CONFIG_RAPIDIO 190#ifdef CONFIG_RAPIDIO
191extern void mpc85xx_rio_setup(int law_start, int law_size);
193void platform_rio_init(void) 192void platform_rio_init(void)
194{ 193{
195 /* 512MB RIO LAW at 0xc0000000 */ 194 /* 512MB RIO LAW at 0xc0000000 */
diff --git a/arch/ppc/platforms/85xx/stx_gp3.c b/arch/ppc/platforms/85xx/stx_gp3.c
index 731b40eacfdb..8748da3b3e0e 100644
--- a/arch/ppc/platforms/85xx/stx_gp3.c
+++ b/arch/ppc/platforms/85xx/stx_gp3.c
@@ -54,7 +54,6 @@
54 54
55#include <syslib/cpm2_pic.h> 55#include <syslib/cpm2_pic.h>
56#include <syslib/ppc85xx_common.h> 56#include <syslib/ppc85xx_common.h>
57#include <syslib/ppc85xx_rio.h>
58 57
59 58
60unsigned char __res[sizeof(bd_t)]; 59unsigned char __res[sizeof(bd_t)];
@@ -270,6 +269,7 @@ int mpc85xx_exclude_device(u_char bus, u_char devfn)
270#endif /* CONFIG_PCI */ 269#endif /* CONFIG_PCI */
271 270
272#ifdef CONFIG_RAPIDIO 271#ifdef CONFIG_RAPIDIO
272extern void mpc85xx_rio_setup(int law_start, int law_size);
273void 273void
274platform_rio_init(void) 274platform_rio_init(void)
275{ 275{
diff --git a/arch/ppc/platforms/85xx/tqm85xx.c b/arch/ppc/platforms/85xx/tqm85xx.c
index 4ee2bd156dc5..2a863a83d4c8 100644
--- a/arch/ppc/platforms/85xx/tqm85xx.c
+++ b/arch/ppc/platforms/85xx/tqm85xx.c
@@ -54,7 +54,6 @@
54#include <syslib/ppc85xx_setup.h> 54#include <syslib/ppc85xx_setup.h>
55#include <syslib/cpm2_pic.h> 55#include <syslib/cpm2_pic.h>
56#include <syslib/ppc85xx_common.h> 56#include <syslib/ppc85xx_common.h>
57#include <syslib/ppc85xx_rio.h>
58 57
59#ifndef CONFIG_PCI 58#ifndef CONFIG_PCI
60unsigned long isa_io_base = 0; 59unsigned long isa_io_base = 0;
@@ -309,6 +308,7 @@ int mpc85xx_exclude_device(u_char bus, u_char devfn)
309#endif /* CONFIG_PCI */ 308#endif /* CONFIG_PCI */
310 309
311#ifdef CONFIG_RAPIDIO 310#ifdef CONFIG_RAPIDIO
311extern void mpc85xx_rio_setup(int law_start, int law_size);
312void platform_rio_init(void) 312void platform_rio_init(void)
313{ 313{
314 /* 512MB RIO LAW at 0xc0000000 */ 314 /* 512MB RIO LAW at 0xc0000000 */
diff --git a/arch/ppc/syslib/Makefile b/arch/ppc/syslib/Makefile
index 543795be58c8..5e16228f7645 100644
--- a/arch/ppc/syslib/Makefile
+++ b/arch/ppc/syslib/Makefile
@@ -93,7 +93,6 @@ obj-$(CONFIG_85xx) += open_pic.o ppc85xx_common.o ppc85xx_setup.o \
93ifeq ($(CONFIG_85xx),y) 93ifeq ($(CONFIG_85xx),y)
94obj-$(CONFIG_PCI) += pci_auto.o 94obj-$(CONFIG_PCI) += pci_auto.o
95endif 95endif
96obj-$(CONFIG_RAPIDIO) += ppc85xx_rio.o
97obj-$(CONFIG_83xx) += ppc83xx_setup.o ppc_sys.o \ 96obj-$(CONFIG_83xx) += ppc83xx_setup.o ppc_sys.o \
98 mpc83xx_sys.o mpc83xx_devices.o ipic.o 97 mpc83xx_sys.o mpc83xx_devices.o ipic.o
99ifeq ($(CONFIG_83xx),y) 98ifeq ($(CONFIG_83xx),y)
diff --git a/drivers/net/fs_enet/fs_enet-main.c b/drivers/net/fs_enet/fs_enet-main.c
index c83bd6560088..42d94edeee26 100644
--- a/drivers/net/fs_enet/fs_enet-main.c
+++ b/drivers/net/fs_enet/fs_enet-main.c
@@ -1178,8 +1178,15 @@ static int __devinit find_phy(struct device_node *np,
1178 struct device_node *phynode, *mdionode; 1178 struct device_node *phynode, *mdionode;
1179 struct resource res; 1179 struct resource res;
1180 int ret = 0, len; 1180 int ret = 0, len;
1181 const u32 *data;
1182
1183 data = of_get_property(np, "fixed-link", NULL);
1184 if (data) {
1185 snprintf(fpi->bus_id, 16, PHY_ID_FMT, 0, *data);
1186 return 0;
1187 }
1181 1188
1182 const u32 *data = of_get_property(np, "phy-handle", &len); 1189 data = of_get_property(np, "phy-handle", &len);
1183 if (!data || len != 4) 1190 if (!data || len != 4)
1184 return -EINVAL; 1191 return -EINVAL;
1185 1192
diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
index 54b2ba996640..7fe03ce774b1 100644
--- a/drivers/net/phy/Kconfig
+++ b/drivers/net/phy/Kconfig
@@ -61,34 +61,12 @@ config ICPLUS_PHY
61 Currently supports the IP175C PHY. 61 Currently supports the IP175C PHY.
62 62
63config FIXED_PHY 63config FIXED_PHY
64 tristate "Drivers for PHY emulation on fixed speed/link" 64 bool "Driver for MDIO Bus/PHY emulation with fixed speed/link PHYs"
65 ---help--- 65 ---help---
66 Adds the driver to PHY layer to cover the boards that do not have any PHY bound, 66 Adds the platform "fixed" MDIO Bus to cover the boards that use
67 but with the ability to manipulate the speed/link in software. The relevant MII 67 PHYs that are not connected to the real MDIO bus.
68 speed/duplex parameters could be effectively handled in a user-specified function. 68
69 Currently tested with mpc866ads. 69 Currently tested with mpc866ads and mpc8349e-mitx.
70
71config FIXED_MII_10_FDX
72 bool "Emulation for 10M Fdx fixed PHY behavior"
73 depends on FIXED_PHY
74
75config FIXED_MII_100_FDX
76 bool "Emulation for 100M Fdx fixed PHY behavior"
77 depends on FIXED_PHY
78
79config FIXED_MII_1000_FDX
80 bool "Emulation for 1000M Fdx fixed PHY behavior"
81 depends on FIXED_PHY
82
83config FIXED_MII_AMNT
84 int "Number of emulated PHYs to allocate "
85 depends on FIXED_PHY
86 default "1"
87 ---help---
88 Sometimes it is required to have several independent emulated
89 PHYs on the bus (in case of multi-eth but phy-less HW for instance).
90 This control will have specified number allocated for each fixed
91 PHY type enabled.
92 70
93config MDIO_BITBANG 71config MDIO_BITBANG
94 tristate "Support for bitbanged MDIO buses" 72 tristate "Support for bitbanged MDIO buses"
diff --git a/drivers/net/phy/fixed.c b/drivers/net/phy/fixed.c
index 56191822fa26..73b6d39ef6b0 100644
--- a/drivers/net/phy/fixed.c
+++ b/drivers/net/phy/fixed.c
@@ -1,362 +1,253 @@
1/* 1/*
2 * drivers/net/phy/fixed.c 2 * Fixed MDIO bus (MDIO bus emulation with fixed PHYs)
3 * 3 *
4 * Driver for fixed PHYs, when transceiver is able to operate in one fixed mode. 4 * Author: Vitaly Bordug <vbordug@ru.mvista.com>
5 * Anton Vorontsov <avorontsov@ru.mvista.com>
5 * 6 *
6 * Author: Vitaly Bordug 7 * Copyright (c) 2006-2007 MontaVista Software, Inc.
7 *
8 * Copyright (c) 2006 MontaVista Software, Inc.
9 * 8 *
10 * This program is free software; you can redistribute it and/or modify it 9 * 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 10 * 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 11 * Free Software Foundation; either version 2 of the License, or (at your
13 * option) any later version. 12 * option) any later version.
14 *
15 */ 13 */
14
16#include <linux/kernel.h> 15#include <linux/kernel.h>
17#include <linux/string.h>
18#include <linux/errno.h>
19#include <linux/unistd.h>
20#include <linux/slab.h>
21#include <linux/interrupt.h>
22#include <linux/init.h>
23#include <linux/delay.h>
24#include <linux/netdevice.h>
25#include <linux/etherdevice.h>
26#include <linux/skbuff.h>
27#include <linux/spinlock.h>
28#include <linux/mm.h>
29#include <linux/module.h> 16#include <linux/module.h>
17#include <linux/platform_device.h>
18#include <linux/list.h>
30#include <linux/mii.h> 19#include <linux/mii.h>
31#include <linux/ethtool.h>
32#include <linux/phy.h> 20#include <linux/phy.h>
33#include <linux/phy_fixed.h> 21#include <linux/phy_fixed.h>
34 22
35#include <asm/io.h> 23#define MII_REGS_NUM 29
36#include <asm/irq.h>
37#include <asm/uaccess.h>
38 24
39/* we need to track the allocated pointers in order to free them on exit */ 25struct fixed_mdio_bus {
40static struct fixed_info *fixed_phy_ptrs[CONFIG_FIXED_MII_AMNT*MAX_PHY_AMNT]; 26 int irqs[PHY_MAX_ADDR];
41 27 struct mii_bus mii_bus;
42/*----------------------------------------------------------------------------- 28 struct list_head phys;
43 * If something weird is required to be done with link/speed, 29};
44 * network driver is able to assign a function to implement this.
45 * May be useful for PHY's that need to be software-driven.
46 *-----------------------------------------------------------------------------*/
47int fixed_mdio_set_link_update(struct phy_device *phydev,
48 int (*link_update) (struct net_device *,
49 struct fixed_phy_status *))
50{
51 struct fixed_info *fixed;
52
53 if (link_update == NULL)
54 return -EINVAL;
55
56 if (phydev) {
57 if (phydev->bus) {
58 fixed = phydev->bus->priv;
59 fixed->link_update = link_update;
60 return 0;
61 }
62 }
63 return -EINVAL;
64}
65
66EXPORT_SYMBOL(fixed_mdio_set_link_update);
67 30
68struct fixed_info *fixed_mdio_get_phydev (int phydev_ind) 31struct fixed_phy {
69{ 32 int id;
70 if (phydev_ind >= MAX_PHY_AMNT) 33 u16 regs[MII_REGS_NUM];
71 return NULL; 34 struct phy_device *phydev;
72 return fixed_phy_ptrs[phydev_ind]; 35 struct fixed_phy_status status;
73} 36 int (*link_update)(struct net_device *, struct fixed_phy_status *);
37 struct list_head node;
38};
74 39
75EXPORT_SYMBOL(fixed_mdio_get_phydev); 40static struct platform_device *pdev;
41static struct fixed_mdio_bus platform_fmb = {
42 .phys = LIST_HEAD_INIT(platform_fmb.phys),
43};
76 44
77/*----------------------------------------------------------------------------- 45static int fixed_phy_update_regs(struct fixed_phy *fp)
78 * This is used for updating internal mii regs from the status
79 *-----------------------------------------------------------------------------*/
80#if defined(CONFIG_FIXED_MII_100_FDX) || defined(CONFIG_FIXED_MII_10_FDX) || defined(CONFIG_FIXED_MII_1000_FDX)
81static int fixed_mdio_update_regs(struct fixed_info *fixed)
82{ 46{
83 u16 *regs = fixed->regs; 47 u16 bmsr = BMSR_ANEGCAPABLE;
84 u16 bmsr = 0;
85 u16 bmcr = 0; 48 u16 bmcr = 0;
49 u16 lpagb = 0;
50 u16 lpa = 0;
86 51
87 if (!regs) { 52 if (fp->status.duplex) {
88 printk(KERN_ERR "%s: regs not set up", __FUNCTION__);
89 return -EINVAL;
90 }
91
92 if (fixed->phy_status.link)
93 bmsr |= BMSR_LSTATUS;
94
95 if (fixed->phy_status.duplex) {
96 bmcr |= BMCR_FULLDPLX; 53 bmcr |= BMCR_FULLDPLX;
97 54
98 switch (fixed->phy_status.speed) { 55 switch (fp->status.speed) {
56 case 1000:
57 bmsr |= BMSR_ESTATEN;
58 bmcr |= BMCR_SPEED1000;
59 lpagb |= LPA_1000FULL;
60 break;
99 case 100: 61 case 100:
100 bmsr |= BMSR_100FULL; 62 bmsr |= BMSR_100FULL;
101 bmcr |= BMCR_SPEED100; 63 bmcr |= BMCR_SPEED100;
64 lpa |= LPA_100FULL;
102 break; 65 break;
103
104 case 10: 66 case 10:
105 bmsr |= BMSR_10FULL; 67 bmsr |= BMSR_10FULL;
68 lpa |= LPA_10FULL;
106 break; 69 break;
70 default:
71 printk(KERN_WARNING "fixed phy: unknown speed\n");
72 return -EINVAL;
107 } 73 }
108 } else { 74 } else {
109 switch (fixed->phy_status.speed) { 75 switch (fp->status.speed) {
76 case 1000:
77 bmsr |= BMSR_ESTATEN;
78 bmcr |= BMCR_SPEED1000;
79 lpagb |= LPA_1000HALF;
80 break;
110 case 100: 81 case 100:
111 bmsr |= BMSR_100HALF; 82 bmsr |= BMSR_100HALF;
112 bmcr |= BMCR_SPEED100; 83 bmcr |= BMCR_SPEED100;
84 lpa |= LPA_100HALF;
113 break; 85 break;
114
115 case 10: 86 case 10:
116 bmsr |= BMSR_100HALF; 87 bmsr |= BMSR_10HALF;
88 lpa |= LPA_10HALF;
117 break; 89 break;
90 default:
91 printk(KERN_WARNING "fixed phy: unknown speed\n");
92 return -EINVAL;
118 } 93 }
119 } 94 }
120 95
121 regs[MII_BMCR] = bmcr; 96 if (fp->status.link)
122 regs[MII_BMSR] = bmsr | 0x800; /*we are always capable of 10 hdx */ 97 bmsr |= BMSR_LSTATUS | BMSR_ANEGCOMPLETE;
98
99 if (fp->status.pause)
100 lpa |= LPA_PAUSE_CAP;
101
102 if (fp->status.asym_pause)
103 lpa |= LPA_PAUSE_ASYM;
104
105 fp->regs[MII_PHYSID1] = fp->id >> 16;
106 fp->regs[MII_PHYSID2] = fp->id;
107
108 fp->regs[MII_BMSR] = bmsr;
109 fp->regs[MII_BMCR] = bmcr;
110 fp->regs[MII_LPA] = lpa;
111 fp->regs[MII_STAT1000] = lpagb;
123 112
124 return 0; 113 return 0;
125} 114}
126 115
127static int fixed_mii_read(struct mii_bus *bus, int phy_id, int location) 116static int fixed_mdio_read(struct mii_bus *bus, int phy_id, int reg_num)
128{ 117{
129 struct fixed_info *fixed = bus->priv; 118 struct fixed_mdio_bus *fmb = container_of(bus, struct fixed_mdio_bus,
130 119 mii_bus);
131 /* if user has registered link update callback, use it */ 120 struct fixed_phy *fp;
132 if (fixed->phydev) 121
133 if (fixed->phydev->attached_dev) { 122 if (reg_num >= MII_REGS_NUM)
134 if (fixed->link_update) { 123 return -1;
135 fixed->link_update(fixed->phydev->attached_dev, 124
136 &fixed->phy_status); 125 list_for_each_entry(fp, &fmb->phys, node) {
137 fixed_mdio_update_regs(fixed); 126 if (fp->id == phy_id) {
127 /* Issue callback if user registered it. */
128 if (fp->link_update) {
129 fp->link_update(fp->phydev->attached_dev,
130 &fp->status);
131 fixed_phy_update_regs(fp);
138 } 132 }
133 return fp->regs[reg_num];
139 } 134 }
135 }
140 136
141 if ((unsigned int)location >= fixed->regs_num) 137 return 0xFFFF;
142 return -1;
143 return fixed->regs[location];
144} 138}
145 139
146static int fixed_mii_write(struct mii_bus *bus, int phy_id, int location, 140static int fixed_mdio_write(struct mii_bus *bus, int phy_id, int reg_num,
147 u16 val) 141 u16 val)
148{ 142{
149 /* do nothing for now */
150 return 0; 143 return 0;
151} 144}
152 145
153static int fixed_mii_reset(struct mii_bus *bus) 146/*
147 * If something weird is required to be done with link/speed,
148 * network driver is able to assign a function to implement this.
149 * May be useful for PHY's that need to be software-driven.
150 */
151int fixed_phy_set_link_update(struct phy_device *phydev,
152 int (*link_update)(struct net_device *,
153 struct fixed_phy_status *))
154{ 154{
155 /*nothing here - no way/need to reset it */ 155 struct fixed_mdio_bus *fmb = &platform_fmb;
156 return 0; 156 struct fixed_phy *fp;
157}
158#endif
159 157
160static int fixed_config_aneg(struct phy_device *phydev) 158 if (!link_update || !phydev || !phydev->bus)
161{ 159 return -EINVAL;
162 /* :TODO:03/13/2006 09:45:37 PM::
163 The full autoneg funcionality can be emulated,
164 but no need to have anything here for now
165 */
166 return 0;
167}
168 160
169/*----------------------------------------------------------------------------- 161 list_for_each_entry(fp, &fmb->phys, node) {
170 * the manual bind will do the magic - with phy_id_mask == 0 162 if (fp->id == phydev->phy_id) {
171 * match will never return true... 163 fp->link_update = link_update;
172 *-----------------------------------------------------------------------------*/ 164 fp->phydev = phydev;
173static struct phy_driver fixed_mdio_driver = { 165 return 0;
174 .name = "Fixed PHY", 166 }
175#ifdef CONFIG_FIXED_MII_1000_FDX 167 }
176 .features = PHY_GBIT_FEATURES,
177#else
178 .features = PHY_BASIC_FEATURES,
179#endif
180 .config_aneg = fixed_config_aneg,
181 .read_status = genphy_read_status,
182 .driver = { .owner = THIS_MODULE, },
183};
184 168
185static void fixed_mdio_release(struct device *dev) 169 return -ENOENT;
186{
187 struct phy_device *phydev = container_of(dev, struct phy_device, dev);
188 struct mii_bus *bus = phydev->bus;
189 struct fixed_info *fixed = bus->priv;
190
191 kfree(phydev);
192 kfree(bus->dev);
193 kfree(bus);
194 kfree(fixed->regs);
195 kfree(fixed);
196} 170}
171EXPORT_SYMBOL_GPL(fixed_phy_set_link_update);
197 172
198/*----------------------------------------------------------------------------- 173int fixed_phy_add(unsigned int irq, int phy_id,
199 * This func is used to create all the necessary stuff, bind 174 struct fixed_phy_status *status)
200 * the fixed phy driver and register all it on the mdio_bus_type.
201 * speed is either 10 or 100 or 1000, duplex is boolean.
202 * number is used to create multiple fixed PHYs, so that several devices can
203 * utilize them simultaneously.
204 *
205 * The device on mdio bus will look like [bus_id]:[phy_id],
206 * bus_id = number
207 * phy_id = speed+duplex.
208 *-----------------------------------------------------------------------------*/
209#if defined(CONFIG_FIXED_MII_100_FDX) || defined(CONFIG_FIXED_MII_10_FDX) || defined(CONFIG_FIXED_MII_1000_FDX)
210struct fixed_info *fixed_mdio_register_device(
211 int bus_id, int speed, int duplex, u8 phy_id)
212{ 175{
213 struct mii_bus *new_bus; 176 int ret;
214 struct fixed_info *fixed; 177 struct fixed_mdio_bus *fmb = &platform_fmb;
215 struct phy_device *phydev; 178 struct fixed_phy *fp;
216 int err;
217 179
218 struct device *dev = kzalloc(sizeof(struct device), GFP_KERNEL); 180 fp = kzalloc(sizeof(*fp), GFP_KERNEL);
181 if (!fp)
182 return -ENOMEM;
219 183
220 if (dev == NULL) 184 memset(fp->regs, 0xFF, sizeof(fp->regs[0]) * MII_REGS_NUM);
221 goto err_dev_alloc;
222 185
223 new_bus = kzalloc(sizeof(struct mii_bus), GFP_KERNEL); 186 fmb->irqs[phy_id] = irq;
224 187
225 if (new_bus == NULL) 188 fp->id = phy_id;
226 goto err_bus_alloc; 189 fp->status = *status;
227 190
228 fixed = kzalloc(sizeof(struct fixed_info), GFP_KERNEL); 191 ret = fixed_phy_update_regs(fp);
192 if (ret)
193 goto err_regs;
229 194
230 if (fixed == NULL) 195 list_add_tail(&fp->node, &fmb->phys);
231 goto err_fixed_alloc;
232 196
233 fixed->regs = kzalloc(MII_REGS_NUM * sizeof(int), GFP_KERNEL); 197 return 0;
234 if (NULL == fixed->regs)
235 goto err_fixed_regs_alloc;
236 198
237 fixed->regs_num = MII_REGS_NUM; 199err_regs:
238 fixed->phy_status.speed = speed; 200 kfree(fp);
239 fixed->phy_status.duplex = duplex; 201 return ret;
240 fixed->phy_status.link = 1; 202}
203EXPORT_SYMBOL_GPL(fixed_phy_add);
241 204
242 new_bus->name = "Fixed MII Bus"; 205static int __init fixed_mdio_bus_init(void)
243 new_bus->read = &fixed_mii_read; 206{
244 new_bus->write = &fixed_mii_write; 207 struct fixed_mdio_bus *fmb = &platform_fmb;
245 new_bus->reset = &fixed_mii_reset; 208 int ret;
246 /*set up workspace */
247 fixed_mdio_update_regs(fixed);
248 new_bus->priv = fixed;
249 209
250 new_bus->dev = dev; 210 pdev = platform_device_register_simple("Fixed MDIO bus", 0, NULL, 0);
251 dev_set_drvdata(dev, new_bus); 211 if (!pdev) {
212 ret = -ENOMEM;
213 goto err_pdev;
214 }
252 215
253 /* create phy_device and register it on the mdio bus */ 216 fmb->mii_bus.id = 0;
254 phydev = phy_device_create(new_bus, 0, 0); 217 fmb->mii_bus.name = "Fixed MDIO Bus";
255 if (phydev == NULL) 218 fmb->mii_bus.dev = &pdev->dev;
256 goto err_phy_dev_create; 219 fmb->mii_bus.read = &fixed_mdio_read;
220 fmb->mii_bus.write = &fixed_mdio_write;
221 fmb->mii_bus.irq = fmb->irqs;
257 222
258 /* 223 ret = mdiobus_register(&fmb->mii_bus);
259 * Put the phydev pointer into the fixed pack so that bus read/write 224 if (ret)
260 * code could be able to access for instance attached netdev. Well it 225 goto err_mdiobus_reg;
261 * doesn't have to do so, only in case of utilizing user-specified
262 * link-update...
263 */
264 226
265 fixed->phydev = phydev; 227 return 0;
266 phydev->speed = speed;
267 phydev->duplex = duplex;
268 228
269 phydev->irq = PHY_IGNORE_INTERRUPT; 229err_mdiobus_reg:
270 phydev->dev.bus = &mdio_bus_type; 230 platform_device_unregister(pdev);
231err_pdev:
232 return ret;
233}
234module_init(fixed_mdio_bus_init);
271 235
272 snprintf(phydev->dev.bus_id, BUS_ID_SIZE, 236static void __exit fixed_mdio_bus_exit(void)
273 PHY_ID_FMT, bus_id, phy_id); 237{
238 struct fixed_mdio_bus *fmb = &platform_fmb;
239 struct fixed_phy *fp;
274 240
275 phydev->bus = new_bus; 241 mdiobus_unregister(&fmb->mii_bus);
242 platform_device_unregister(pdev);
276 243
277 phydev->dev.driver = &fixed_mdio_driver.driver; 244 list_for_each_entry(fp, &fmb->phys, node) {
278 phydev->dev.release = fixed_mdio_release; 245 list_del(&fp->node);
279 err = phydev->dev.driver->probe(&phydev->dev); 246 kfree(fp);
280 if (err < 0) {
281 printk(KERN_ERR "Phy %s: problems with fixed driver\n",
282 phydev->dev.bus_id);
283 goto err_out;
284 }
285 err = device_register(&phydev->dev);
286 if (err) {
287 printk(KERN_ERR "Phy %s failed to register\n",
288 phydev->dev.bus_id);
289 goto err_out;
290 } 247 }
291 //phydev->state = PHY_RUNNING; /* make phy go up quick, but in 10Mbit/HDX
292 return fixed;
293
294err_out:
295 kfree(phydev);
296err_phy_dev_create:
297 kfree(fixed->regs);
298err_fixed_regs_alloc:
299 kfree(fixed);
300err_fixed_alloc:
301 kfree(new_bus);
302err_bus_alloc:
303 kfree(dev);
304err_dev_alloc:
305
306 return NULL;
307
308} 248}
309#endif 249module_exit(fixed_mdio_bus_exit);
310 250
311MODULE_DESCRIPTION("Fixed PHY device & driver for PAL"); 251MODULE_DESCRIPTION("Fixed MDIO bus (MDIO bus emulation with fixed PHYs)");
312MODULE_AUTHOR("Vitaly Bordug"); 252MODULE_AUTHOR("Vitaly Bordug");
313MODULE_LICENSE("GPL"); 253MODULE_LICENSE("GPL");
314
315static int __init fixed_init(void)
316{
317 int cnt = 0;
318 int i;
319/* register on the bus... Not expected to be matched
320 * with anything there...
321 *
322 */
323 phy_driver_register(&fixed_mdio_driver);
324
325/* We will create several mdio devices here, and will bound the upper
326 * driver to them.
327 *
328 * Then the external software can lookup the phy bus by searching
329 * for 0:101, to be connected to the virtual 100M Fdx phy.
330 *
331 * In case several virtual PHYs required, the bus_id will be in form
332 * [num]:[duplex]+[speed], which make it able even to define
333 * driver-specific link control callback, if for instance PHY is
334 * completely SW-driven.
335 */
336 for (i=1; i <= CONFIG_FIXED_MII_AMNT; i++) {
337#ifdef CONFIG_FIXED_MII_1000_FDX
338 fixed_phy_ptrs[cnt++] = fixed_mdio_register_device(0, 1000, 1, i);
339#endif
340#ifdef CONFIG_FIXED_MII_100_FDX
341 fixed_phy_ptrs[cnt++] = fixed_mdio_register_device(1, 100, 1, i);
342#endif
343#ifdef CONFIG_FIXED_MII_10_FDX
344 fixed_phy_ptrs[cnt++] = fixed_mdio_register_device(2, 10, 1, i);
345#endif
346 }
347
348 return 0;
349}
350
351static void __exit fixed_exit(void)
352{
353 int i;
354
355 phy_driver_unregister(&fixed_mdio_driver);
356 for (i=0; i < MAX_PHY_AMNT; i++)
357 if ( fixed_phy_ptrs[i] )
358 device_unregister(&fixed_phy_ptrs[i]->phydev->dev);
359}
360
361module_init(fixed_init);
362module_exit(fixed_exit);
diff --git a/drivers/rapidio/rio.c b/drivers/rapidio/rio.c
index f644807da2f9..80c5f1ba2e49 100644
--- a/drivers/rapidio/rio.c
+++ b/drivers/rapidio/rio.c
@@ -23,6 +23,7 @@
23#include <linux/module.h> 23#include <linux/module.h>
24#include <linux/spinlock.h> 24#include <linux/spinlock.h>
25#include <linux/slab.h> 25#include <linux/slab.h>
26#include <linux/interrupt.h>
26 27
27#include "rio.h" 28#include "rio.h"
28 29
@@ -476,8 +477,8 @@ int rio_init_mports(void)
476 port->iores.end - port->iores.start, 477 port->iores.end - port->iores.start,
477 port->name)) { 478 port->name)) {
478 printk(KERN_ERR 479 printk(KERN_ERR
479 "RIO: Error requesting master port region %8.8lx-%8.8lx\n", 480 "RIO: Error requesting master port region 0x%016llx-0x%016llx\n",
480 port->iores.start, port->iores.end - 1); 481 (u64)port->iores.start, (u64)port->iores.end - 1);
481 rc = -ENOMEM; 482 rc = -ENOMEM;
482 goto out; 483 goto out;
483 } 484 }
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
index d7e1996e2fec..d962b74e3114 100644
--- a/drivers/serial/Kconfig
+++ b/drivers/serial/Kconfig
@@ -1284,4 +1284,14 @@ config SERIAL_OF_PLATFORM
1284 Currently, only 8250 compatible ports are supported, but 1284 Currently, only 8250 compatible ports are supported, but
1285 others can easily be added. 1285 others can easily be added.
1286 1286
1287config SERIAL_QE
1288 tristate "Freescale QUICC Engine serial port support"
1289 depends on QUICC_ENGINE
1290 select SERIAL_CORE
1291 select FW_LOADER
1292 default n
1293 help
1294 This driver supports the QE serial ports on Freescale embedded
1295 PowerPC that contain a QUICC Engine.
1296
1287endmenu 1297endmenu
diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile
index af6377d480d7..7eb45534778e 100644
--- a/drivers/serial/Makefile
+++ b/drivers/serial/Makefile
@@ -64,3 +64,4 @@ obj-$(CONFIG_SERIAL_UARTLITE) += uartlite.o
64obj-$(CONFIG_SERIAL_NETX) += netx-serial.o 64obj-$(CONFIG_SERIAL_NETX) += netx-serial.o
65obj-$(CONFIG_SERIAL_OF_PLATFORM) += of_serial.o 65obj-$(CONFIG_SERIAL_OF_PLATFORM) += of_serial.o
66obj-$(CONFIG_SERIAL_KS8695) += serial_ks8695.o 66obj-$(CONFIG_SERIAL_KS8695) += serial_ks8695.o
67obj-$(CONFIG_SERIAL_QE) += ucc_uart.o
diff --git a/drivers/serial/cpm_uart/cpm_uart_cpm2.c b/drivers/serial/cpm_uart/cpm_uart_cpm2.c
index def01582de5c..d9af06a791ba 100644
--- a/drivers/serial/cpm_uart/cpm_uart_cpm2.c
+++ b/drivers/serial/cpm_uart/cpm_uart_cpm2.c
@@ -165,9 +165,9 @@ void scc2_lineif(struct uart_cpm_port *pinfo)
165 * really has to get out of the driver so boards can 165 * really has to get out of the driver so boards can
166 * be supported in a sane fashion. 166 * be supported in a sane fashion.
167 */ 167 */
168 volatile cpmux_t *cpmux = cpm2_map(im_cpmux);
168#ifndef CONFIG_STX_GP3 169#ifndef CONFIG_STX_GP3
169 volatile iop_cpm2_t *io = cpm2_map(im_ioport); 170 volatile iop_cpm2_t *io = cpm2_map(im_ioport);
170 volatile cpmux_t *cpmux = cpm2_map(im_cpmux);
171 171
172 io->iop_pparb |= 0x008b0000; 172 io->iop_pparb |= 0x008b0000;
173 io->iop_pdirb |= 0x00880000; 173 io->iop_pdirb |= 0x00880000;
diff --git a/drivers/serial/ucc_uart.c b/drivers/serial/ucc_uart.c
new file mode 100644
index 000000000000..e0994f061001
--- /dev/null
+++ b/drivers/serial/ucc_uart.c
@@ -0,0 +1,1514 @@
1/*
2 * Freescale QUICC Engine UART device driver
3 *
4 * Author: Timur Tabi <timur@freescale.com>
5 *
6 * Copyright 2007 Freescale Semiconductor, Inc. This file is licensed under
7 * the terms of the GNU General Public License version 2. This program
8 * is licensed "as is" without any warranty of any kind, whether express
9 * or implied.
10 *
11 * This driver adds support for UART devices via Freescale's QUICC Engine
12 * found on some Freescale SOCs.
13 *
14 * If Soft-UART support is needed but not already present, then this driver
15 * will request and upload the "Soft-UART" microcode upon probe. The
16 * filename of the microcode should be fsl_qe_ucode_uart_X_YZ.bin, where "X"
17 * is the name of the SOC (e.g. 8323), and YZ is the revision of the SOC,
18 * (e.g. "11" for 1.1).
19 */
20
21#include <linux/module.h>
22#include <linux/serial.h>
23#include <linux/serial_core.h>
24#include <linux/io.h>
25#include <linux/of_platform.h>
26#include <linux/dma-mapping.h>
27
28#include <linux/fs_uart_pd.h>
29#include <asm/ucc_slow.h>
30
31#include <linux/firmware.h>
32#include <asm/reg.h>
33
34/*
35 * The GUMR flag for Soft UART. This would normally be defined in qe.h,
36 * but Soft-UART is a hack and we want to keep everything related to it in
37 * this file.
38 */
39#define UCC_SLOW_GUMR_H_SUART 0x00004000 /* Soft-UART */
40
41/*
42 * soft_uart is 1 if we need to use Soft-UART mode
43 */
44static int soft_uart;
45/*
46 * firmware_loaded is 1 if the firmware has been loaded, 0 otherwise.
47 */
48static int firmware_loaded;
49
50/* Enable this macro to configure all serial ports in internal loopback
51 mode */
52/* #define LOOPBACK */
53
54/* The major and minor device numbers are defined in
55 * http://www.lanana.org/docs/device-list/devices-2.6+.txt. For the QE
56 * UART, we have major number 204 and minor numbers 46 - 49, which are the
57 * same as for the CPM2. This decision was made because no Freescale part
58 * has both a CPM and a QE.
59 */
60#define SERIAL_QE_MAJOR 204
61#define SERIAL_QE_MINOR 46
62
63/* Since we only have minor numbers 46 - 49, there is a hard limit of 4 ports */
64#define UCC_MAX_UART 4
65
66/* The number of buffer descriptors for receiving characters. */
67#define RX_NUM_FIFO 4
68
69/* The number of buffer descriptors for transmitting characters. */
70#define TX_NUM_FIFO 4
71
72/* The maximum size of the character buffer for a single RX BD. */
73#define RX_BUF_SIZE 32
74
75/* The maximum size of the character buffer for a single TX BD. */
76#define TX_BUF_SIZE 32
77
78/*
79 * The number of jiffies to wait after receiving a close command before the
80 * device is actually closed. This allows the last few characters to be
81 * sent over the wire.
82 */
83#define UCC_WAIT_CLOSING 100
84
85struct ucc_uart_pram {
86 struct ucc_slow_pram common;
87 u8 res1[8]; /* reserved */
88 __be16 maxidl; /* Maximum idle chars */
89 __be16 idlc; /* temp idle counter */
90 __be16 brkcr; /* Break count register */
91 __be16 parec; /* receive parity error counter */
92 __be16 frmec; /* receive framing error counter */
93 __be16 nosec; /* receive noise counter */
94 __be16 brkec; /* receive break condition counter */
95 __be16 brkln; /* last received break length */
96 __be16 uaddr[2]; /* UART address character 1 & 2 */
97 __be16 rtemp; /* Temp storage */
98 __be16 toseq; /* Transmit out of sequence char */
99 __be16 cchars[8]; /* control characters 1-8 */
100 __be16 rccm; /* receive control character mask */
101 __be16 rccr; /* receive control character register */
102 __be16 rlbc; /* receive last break character */
103 __be16 res2; /* reserved */
104 __be32 res3; /* reserved, should be cleared */
105 u8 res4; /* reserved, should be cleared */
106 u8 res5[3]; /* reserved, should be cleared */
107 __be32 res6; /* reserved, should be cleared */
108 __be32 res7; /* reserved, should be cleared */
109 __be32 res8; /* reserved, should be cleared */
110 __be32 res9; /* reserved, should be cleared */
111 __be32 res10; /* reserved, should be cleared */
112 __be32 res11; /* reserved, should be cleared */
113 __be32 res12; /* reserved, should be cleared */
114 __be32 res13; /* reserved, should be cleared */
115/* The rest is for Soft-UART only */
116 __be16 supsmr; /* 0x90, Shadow UPSMR */
117 __be16 res92; /* 0x92, reserved, initialize to 0 */
118 __be32 rx_state; /* 0x94, RX state, initialize to 0 */
119 __be32 rx_cnt; /* 0x98, RX count, initialize to 0 */
120 u8 rx_length; /* 0x9C, Char length, set to 1+CL+PEN+1+SL */
121 u8 rx_bitmark; /* 0x9D, reserved, initialize to 0 */
122 u8 rx_temp_dlst_qe; /* 0x9E, reserved, initialize to 0 */
123 u8 res14[0xBC - 0x9F]; /* reserved */
124 __be32 dump_ptr; /* 0xBC, Dump pointer */
125 __be32 rx_frame_rem; /* 0xC0, reserved, initialize to 0 */
126 u8 rx_frame_rem_size; /* 0xC4, reserved, initialize to 0 */
127 u8 tx_mode; /* 0xC5, mode, 0=AHDLC, 1=UART */
128 __be16 tx_state; /* 0xC6, TX state */
129 u8 res15[0xD0 - 0xC8]; /* reserved */
130 __be32 resD0; /* 0xD0, reserved, initialize to 0 */
131 u8 resD4; /* 0xD4, reserved, initialize to 0 */
132 __be16 resD5; /* 0xD5, reserved, initialize to 0 */
133} __attribute__ ((packed));
134
135/* SUPSMR definitions, for Soft-UART only */
136#define UCC_UART_SUPSMR_SL 0x8000
137#define UCC_UART_SUPSMR_RPM_MASK 0x6000
138#define UCC_UART_SUPSMR_RPM_ODD 0x0000
139#define UCC_UART_SUPSMR_RPM_LOW 0x2000
140#define UCC_UART_SUPSMR_RPM_EVEN 0x4000
141#define UCC_UART_SUPSMR_RPM_HIGH 0x6000
142#define UCC_UART_SUPSMR_PEN 0x1000
143#define UCC_UART_SUPSMR_TPM_MASK 0x0C00
144#define UCC_UART_SUPSMR_TPM_ODD 0x0000
145#define UCC_UART_SUPSMR_TPM_LOW 0x0400
146#define UCC_UART_SUPSMR_TPM_EVEN 0x0800
147#define UCC_UART_SUPSMR_TPM_HIGH 0x0C00
148#define UCC_UART_SUPSMR_FRZ 0x0100
149#define UCC_UART_SUPSMR_UM_MASK 0x00c0
150#define UCC_UART_SUPSMR_UM_NORMAL 0x0000
151#define UCC_UART_SUPSMR_UM_MAN_MULTI 0x0040
152#define UCC_UART_SUPSMR_UM_AUTO_MULTI 0x00c0
153#define UCC_UART_SUPSMR_CL_MASK 0x0030
154#define UCC_UART_SUPSMR_CL_8 0x0030
155#define UCC_UART_SUPSMR_CL_7 0x0020
156#define UCC_UART_SUPSMR_CL_6 0x0010
157#define UCC_UART_SUPSMR_CL_5 0x0000
158
159#define UCC_UART_TX_STATE_AHDLC 0x00
160#define UCC_UART_TX_STATE_UART 0x01
161#define UCC_UART_TX_STATE_X1 0x00
162#define UCC_UART_TX_STATE_X16 0x80
163
164#define UCC_UART_PRAM_ALIGNMENT 0x100
165
166#define UCC_UART_SIZE_OF_BD UCC_SLOW_SIZE_OF_BD
167#define NUM_CONTROL_CHARS 8
168
169/* Private per-port data structure */
170struct uart_qe_port {
171 struct uart_port port;
172 struct ucc_slow __iomem *uccp;
173 struct ucc_uart_pram __iomem *uccup;
174 struct ucc_slow_info us_info;
175 struct ucc_slow_private *us_private;
176 struct device_node *np;
177 unsigned int ucc_num; /* First ucc is 0, not 1 */
178
179 u16 rx_nrfifos;
180 u16 rx_fifosize;
181 u16 tx_nrfifos;
182 u16 tx_fifosize;
183 int wait_closing;
184 u32 flags;
185 struct qe_bd *rx_bd_base;
186 struct qe_bd *rx_cur;
187 struct qe_bd *tx_bd_base;
188 struct qe_bd *tx_cur;
189 unsigned char *tx_buf;
190 unsigned char *rx_buf;
191 void *bd_virt; /* virtual address of the BD buffers */
192 dma_addr_t bd_dma_addr; /* bus address of the BD buffers */
193 unsigned int bd_size; /* size of BD buffer space */
194};
195
196static struct uart_driver ucc_uart_driver = {
197 .owner = THIS_MODULE,
198 .driver_name = "serial",
199 .dev_name = "ttyQE",
200 .major = SERIAL_QE_MAJOR,
201 .minor = SERIAL_QE_MINOR,
202 .nr = UCC_MAX_UART,
203};
204
205/*
206 * Virtual to physical address translation.
207 *
208 * Given the virtual address for a character buffer, this function returns
209 * the physical (DMA) equivalent.
210 */
211static inline dma_addr_t cpu2qe_addr(void *addr, struct uart_qe_port *qe_port)
212{
213 if (likely((addr >= qe_port->bd_virt)) &&
214 (addr < (qe_port->bd_virt + qe_port->bd_size)))
215 return qe_port->bd_dma_addr + (addr - qe_port->bd_virt);
216
217 /* something nasty happened */
218 printk(KERN_ERR "%s: addr=%p\n", __FUNCTION__, addr);
219 BUG();
220 return 0;
221}
222
223/*
224 * Physical to virtual address translation.
225 *
226 * Given the physical (DMA) address for a character buffer, this function
227 * returns the virtual equivalent.
228 */
229static inline void *qe2cpu_addr(dma_addr_t addr, struct uart_qe_port *qe_port)
230{
231 /* sanity check */
232 if (likely((addr >= qe_port->bd_dma_addr) &&
233 (addr < (qe_port->bd_dma_addr + qe_port->bd_size))))
234 return qe_port->bd_virt + (addr - qe_port->bd_dma_addr);
235
236 /* something nasty happened */
237 printk(KERN_ERR "%s: addr=%x\n", __FUNCTION__, addr);
238 BUG();
239 return NULL;
240}
241
242/*
243 * Return 1 if the QE is done transmitting all buffers for this port
244 *
245 * This function scans each BD in sequence. If we find a BD that is not
246 * ready (READY=1), then we return 0 indicating that the QE is still sending
247 * data. If we reach the last BD (WRAP=1), then we know we've scanned
248 * the entire list, and all BDs are done.
249 */
250static unsigned int qe_uart_tx_empty(struct uart_port *port)
251{
252 struct uart_qe_port *qe_port =
253 container_of(port, struct uart_qe_port, port);
254 struct qe_bd *bdp = qe_port->tx_bd_base;
255
256 while (1) {
257 if (in_be16(&bdp->status) & BD_SC_READY)
258 /* This BD is not done, so return "not done" */
259 return 0;
260
261 if (in_be16(&bdp->status) & BD_SC_WRAP)
262 /*
263 * This BD is done and it's the last one, so return
264 * "done"
265 */
266 return 1;
267
268 bdp++;
269 };
270}
271
272/*
273 * Set the modem control lines
274 *
275 * Although the QE can control the modem control lines (e.g. CTS), we
276 * don't need that support. This function must exist, however, otherwise
277 * the kernel will panic.
278 */
279void qe_uart_set_mctrl(struct uart_port *port, unsigned int mctrl)
280{
281}
282
283/*
284 * Get the current modem control line status
285 *
286 * Although the QE can control the modem control lines (e.g. CTS), this
287 * driver currently doesn't support that, so we always return Carrier
288 * Detect, Data Set Ready, and Clear To Send.
289 */
290static unsigned int qe_uart_get_mctrl(struct uart_port *port)
291{
292 return TIOCM_CAR | TIOCM_DSR | TIOCM_CTS;
293}
294
295/*
296 * Disable the transmit interrupt.
297 *
298 * Although this function is called "stop_tx", it does not actually stop
299 * transmission of data. Instead, it tells the QE to not generate an
300 * interrupt when the UCC is finished sending characters.
301 */
302static void qe_uart_stop_tx(struct uart_port *port)
303{
304 struct uart_qe_port *qe_port =
305 container_of(port, struct uart_qe_port, port);
306
307 clrbits16(&qe_port->uccp->uccm, UCC_UART_UCCE_TX);
308}
309
310/*
311 * Transmit as many characters to the HW as possible.
312 *
313 * This function will attempt to stuff of all the characters from the
314 * kernel's transmit buffer into TX BDs.
315 *
316 * A return value of non-zero indicates that it sucessfully stuffed all
317 * characters from the kernel buffer.
318 *
319 * A return value of zero indicates that there are still characters in the
320 * kernel's buffer that have not been transmitted, but there are no more BDs
321 * available. This function should be called again after a BD has been made
322 * available.
323 */
324static int qe_uart_tx_pump(struct uart_qe_port *qe_port)
325{
326 struct qe_bd *bdp;
327 unsigned char *p;
328 unsigned int count;
329 struct uart_port *port = &qe_port->port;
330 struct circ_buf *xmit = &port->info->xmit;
331
332 bdp = qe_port->rx_cur;
333
334 /* Handle xon/xoff */
335 if (port->x_char) {
336 /* Pick next descriptor and fill from buffer */
337 bdp = qe_port->tx_cur;
338
339 p = qe2cpu_addr(bdp->buf, qe_port);
340
341 *p++ = port->x_char;
342 out_be16(&bdp->length, 1);
343 setbits16(&bdp->status, BD_SC_READY);
344 /* Get next BD. */
345 if (in_be16(&bdp->status) & BD_SC_WRAP)
346 bdp = qe_port->tx_bd_base;
347 else
348 bdp++;
349 qe_port->tx_cur = bdp;
350
351 port->icount.tx++;
352 port->x_char = 0;
353 return 1;
354 }
355
356 if (uart_circ_empty(xmit) || uart_tx_stopped(port)) {
357 qe_uart_stop_tx(port);
358 return 0;
359 }
360
361 /* Pick next descriptor and fill from buffer */
362 bdp = qe_port->tx_cur;
363
364 while (!(in_be16(&bdp->status) & BD_SC_READY) &&
365 (xmit->tail != xmit->head)) {
366 count = 0;
367 p = qe2cpu_addr(bdp->buf, qe_port);
368 while (count < qe_port->tx_fifosize) {
369 *p++ = xmit->buf[xmit->tail];
370 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
371 port->icount.tx++;
372 count++;
373 if (xmit->head == xmit->tail)
374 break;
375 }
376
377 out_be16(&bdp->length, count);
378 setbits16(&bdp->status, BD_SC_READY);
379
380 /* Get next BD. */
381 if (in_be16(&bdp->status) & BD_SC_WRAP)
382 bdp = qe_port->tx_bd_base;
383 else
384 bdp++;
385 }
386 qe_port->tx_cur = bdp;
387
388 if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
389 uart_write_wakeup(port);
390
391 if (uart_circ_empty(xmit)) {
392 /* The kernel buffer is empty, so turn off TX interrupts. We
393 don't need to be told when the QE is finished transmitting
394 the data. */
395 qe_uart_stop_tx(port);
396 return 0;
397 }
398
399 return 1;
400}
401
402/*
403 * Start transmitting data
404 *
405 * This function will start transmitting any available data, if the port
406 * isn't already transmitting data.
407 */
408static void qe_uart_start_tx(struct uart_port *port)
409{
410 struct uart_qe_port *qe_port =
411 container_of(port, struct uart_qe_port, port);
412
413 /* If we currently are transmitting, then just return */
414 if (in_be16(&qe_port->uccp->uccm) & UCC_UART_UCCE_TX)
415 return;
416
417 /* Otherwise, pump the port and start transmission */
418 if (qe_uart_tx_pump(qe_port))
419 setbits16(&qe_port->uccp->uccm, UCC_UART_UCCE_TX);
420}
421
422/*
423 * Stop transmitting data
424 */
425static void qe_uart_stop_rx(struct uart_port *port)
426{
427 struct uart_qe_port *qe_port =
428 container_of(port, struct uart_qe_port, port);
429
430 clrbits16(&qe_port->uccp->uccm, UCC_UART_UCCE_RX);
431}
432
433/*
434 * Enable status change interrupts
435 *
436 * We don't support status change interrupts, but we need to define this
437 * function otherwise the kernel will panic.
438 */
439static void qe_uart_enable_ms(struct uart_port *port)
440{
441}
442
443/* Start or stop sending break signal
444 *
445 * This function controls the sending of a break signal. If break_state=1,
446 * then we start sending a break signal. If break_state=0, then we stop
447 * sending the break signal.
448 */
449static void qe_uart_break_ctl(struct uart_port *port, int break_state)
450{
451 struct uart_qe_port *qe_port =
452 container_of(port, struct uart_qe_port, port);
453
454 if (break_state)
455 ucc_slow_stop_tx(qe_port->us_private);
456 else
457 ucc_slow_restart_tx(qe_port->us_private);
458}
459
460/* ISR helper function for receiving character.
461 *
462 * This function is called by the ISR to handling receiving characters
463 */
464static void qe_uart_int_rx(struct uart_qe_port *qe_port)
465{
466 int i;
467 unsigned char ch, *cp;
468 struct uart_port *port = &qe_port->port;
469 struct tty_struct *tty = port->info->tty;
470 struct qe_bd *bdp;
471 u16 status;
472 unsigned int flg;
473
474 /* Just loop through the closed BDs and copy the characters into
475 * the buffer.
476 */
477 bdp = qe_port->rx_cur;
478 while (1) {
479 status = in_be16(&bdp->status);
480
481 /* If this one is empty, then we assume we've read them all */
482 if (status & BD_SC_EMPTY)
483 break;
484
485 /* get number of characters, and check space in RX buffer */
486 i = in_be16(&bdp->length);
487
488 /* If we don't have enough room in RX buffer for the entire BD,
489 * then we try later, which will be the next RX interrupt.
490 */
491 if (tty_buffer_request_room(tty, i) < i) {
492 dev_dbg(port->dev, "ucc-uart: no room in RX buffer\n");
493 return;
494 }
495
496 /* get pointer */
497 cp = qe2cpu_addr(bdp->buf, qe_port);
498
499 /* loop through the buffer */
500 while (i-- > 0) {
501 ch = *cp++;
502 port->icount.rx++;
503 flg = TTY_NORMAL;
504
505 if (!i && status &
506 (BD_SC_BR | BD_SC_FR | BD_SC_PR | BD_SC_OV))
507 goto handle_error;
508 if (uart_handle_sysrq_char(port, ch))
509 continue;
510
511error_return:
512 tty_insert_flip_char(tty, ch, flg);
513
514 }
515
516 /* This BD is ready to be used again. Clear status. get next */
517 clrsetbits_be16(&bdp->status, BD_SC_BR | BD_SC_FR | BD_SC_PR |
518 BD_SC_OV | BD_SC_ID, BD_SC_EMPTY);
519 if (in_be16(&bdp->status) & BD_SC_WRAP)
520 bdp = qe_port->rx_bd_base;
521 else
522 bdp++;
523
524 }
525
526 /* Write back buffer pointer */
527 qe_port->rx_cur = bdp;
528
529 /* Activate BH processing */
530 tty_flip_buffer_push(tty);
531
532 return;
533
534 /* Error processing */
535
536handle_error:
537 /* Statistics */
538 if (status & BD_SC_BR)
539 port->icount.brk++;
540 if (status & BD_SC_PR)
541 port->icount.parity++;
542 if (status & BD_SC_FR)
543 port->icount.frame++;
544 if (status & BD_SC_OV)
545 port->icount.overrun++;
546
547 /* Mask out ignored conditions */
548 status &= port->read_status_mask;
549
550 /* Handle the remaining ones */
551 if (status & BD_SC_BR)
552 flg = TTY_BREAK;
553 else if (status & BD_SC_PR)
554 flg = TTY_PARITY;
555 else if (status & BD_SC_FR)
556 flg = TTY_FRAME;
557
558 /* Overrun does not affect the current character ! */
559 if (status & BD_SC_OV)
560 tty_insert_flip_char(tty, 0, TTY_OVERRUN);
561#ifdef SUPPORT_SYSRQ
562 port->sysrq = 0;
563#endif
564 goto error_return;
565}
566
567/* Interrupt handler
568 *
569 * This interrupt handler is called after a BD is processed.
570 */
571static irqreturn_t qe_uart_int(int irq, void *data)
572{
573 struct uart_qe_port *qe_port = (struct uart_qe_port *) data;
574 struct ucc_slow __iomem *uccp = qe_port->uccp;
575 u16 events;
576
577 /* Clear the interrupts */
578 events = in_be16(&uccp->ucce);
579 out_be16(&uccp->ucce, events);
580
581 if (events & UCC_UART_UCCE_BRKE)
582 uart_handle_break(&qe_port->port);
583
584 if (events & UCC_UART_UCCE_RX)
585 qe_uart_int_rx(qe_port);
586
587 if (events & UCC_UART_UCCE_TX)
588 qe_uart_tx_pump(qe_port);
589
590 return events ? IRQ_HANDLED : IRQ_NONE;
591}
592
593/* Initialize buffer descriptors
594 *
595 * This function initializes all of the RX and TX buffer descriptors.
596 */
597static void qe_uart_initbd(struct uart_qe_port *qe_port)
598{
599 int i;
600 void *bd_virt;
601 struct qe_bd *bdp;
602
603 /* Set the physical address of the host memory buffers in the buffer
604 * descriptors, and the virtual address for us to work with.
605 */
606 bd_virt = qe_port->bd_virt;
607 bdp = qe_port->rx_bd_base;
608 qe_port->rx_cur = qe_port->rx_bd_base;
609 for (i = 0; i < (qe_port->rx_nrfifos - 1); i++) {
610 out_be16(&bdp->status, BD_SC_EMPTY | BD_SC_INTRPT);
611 out_be32(&bdp->buf, cpu2qe_addr(bd_virt, qe_port));
612 out_be16(&bdp->length, 0);
613 bd_virt += qe_port->rx_fifosize;
614 bdp++;
615 }
616
617 /* */
618 out_be16(&bdp->status, BD_SC_WRAP | BD_SC_EMPTY | BD_SC_INTRPT);
619 out_be32(&bdp->buf, cpu2qe_addr(bd_virt, qe_port));
620 out_be16(&bdp->length, 0);
621
622 /* Set the physical address of the host memory
623 * buffers in the buffer descriptors, and the
624 * virtual address for us to work with.
625 */
626 bd_virt = qe_port->bd_virt +
627 L1_CACHE_ALIGN(qe_port->rx_nrfifos * qe_port->rx_fifosize);
628 qe_port->tx_cur = qe_port->tx_bd_base;
629 bdp = qe_port->tx_bd_base;
630 for (i = 0; i < (qe_port->tx_nrfifos - 1); i++) {
631 out_be16(&bdp->status, BD_SC_INTRPT);
632 out_be32(&bdp->buf, cpu2qe_addr(bd_virt, qe_port));
633 out_be16(&bdp->length, 0);
634 bd_virt += qe_port->tx_fifosize;
635 bdp++;
636 }
637
638 /* Loopback requires the preamble bit to be set on the first TX BD */
639#ifdef LOOPBACK
640 setbits16(&qe_port->tx_cur->status, BD_SC_P);
641#endif
642
643 out_be16(&bdp->status, BD_SC_WRAP | BD_SC_INTRPT);
644 out_be32(&bdp->buf, cpu2qe_addr(bd_virt, qe_port));
645 out_be16(&bdp->length, 0);
646}
647
648/*
649 * Initialize a UCC for UART.
650 *
651 * This function configures a given UCC to be used as a UART device. Basic
652 * UCC initialization is handled in qe_uart_request_port(). This function
653 * does all the UART-specific stuff.
654 */
655static void qe_uart_init_ucc(struct uart_qe_port *qe_port)
656{
657 u32 cecr_subblock;
658 struct ucc_slow __iomem *uccp = qe_port->uccp;
659 struct ucc_uart_pram *uccup = qe_port->uccup;
660
661 unsigned int i;
662
663 /* First, disable TX and RX in the UCC */
664 ucc_slow_disable(qe_port->us_private, COMM_DIR_RX_AND_TX);
665
666 /* Program the UCC UART parameter RAM */
667 out_8(&uccup->common.rbmr, UCC_BMR_GBL | UCC_BMR_BO_BE);
668 out_8(&uccup->common.tbmr, UCC_BMR_GBL | UCC_BMR_BO_BE);
669 out_be16(&uccup->common.mrblr, qe_port->rx_fifosize);
670 out_be16(&uccup->maxidl, 0x10);
671 out_be16(&uccup->brkcr, 1);
672 out_be16(&uccup->parec, 0);
673 out_be16(&uccup->frmec, 0);
674 out_be16(&uccup->nosec, 0);
675 out_be16(&uccup->brkec, 0);
676 out_be16(&uccup->uaddr[0], 0);
677 out_be16(&uccup->uaddr[1], 0);
678 out_be16(&uccup->toseq, 0);
679 for (i = 0; i < 8; i++)
680 out_be16(&uccup->cchars[i], 0xC000);
681 out_be16(&uccup->rccm, 0xc0ff);
682
683 /* Configure the GUMR registers for UART */
684 if (soft_uart)
685 /* Soft-UART requires a 1X multiplier for TX */
686 clrsetbits_be32(&uccp->gumr_l,
687 UCC_SLOW_GUMR_L_MODE_MASK | UCC_SLOW_GUMR_L_TDCR_MASK |
688 UCC_SLOW_GUMR_L_RDCR_MASK,
689 UCC_SLOW_GUMR_L_MODE_UART | UCC_SLOW_GUMR_L_TDCR_1 |
690 UCC_SLOW_GUMR_L_RDCR_16);
691 else
692 clrsetbits_be32(&uccp->gumr_l,
693 UCC_SLOW_GUMR_L_MODE_MASK | UCC_SLOW_GUMR_L_TDCR_MASK |
694 UCC_SLOW_GUMR_L_RDCR_MASK,
695 UCC_SLOW_GUMR_L_MODE_UART | UCC_SLOW_GUMR_L_TDCR_16 |
696 UCC_SLOW_GUMR_L_RDCR_16);
697
698 clrsetbits_be32(&uccp->gumr_h, UCC_SLOW_GUMR_H_RFW,
699 UCC_SLOW_GUMR_H_TRX | UCC_SLOW_GUMR_H_TTX);
700
701#ifdef LOOPBACK
702 clrsetbits_be32(&uccp->gumr_l, UCC_SLOW_GUMR_L_DIAG_MASK,
703 UCC_SLOW_GUMR_L_DIAG_LOOP);
704 clrsetbits_be32(&uccp->gumr_h,
705 UCC_SLOW_GUMR_H_CTSP | UCC_SLOW_GUMR_H_RSYN,
706 UCC_SLOW_GUMR_H_CDS);
707#endif
708
709 /* Enable rx interrupts and clear all pending events. */
710 out_be16(&uccp->uccm, 0);
711 out_be16(&uccp->ucce, 0xffff);
712 out_be16(&uccp->udsr, 0x7e7e);
713
714 /* Initialize UPSMR */
715 out_be16(&uccp->upsmr, 0);
716
717 if (soft_uart) {
718 out_be16(&uccup->supsmr, 0x30);
719 out_be16(&uccup->res92, 0);
720 out_be32(&uccup->rx_state, 0);
721 out_be32(&uccup->rx_cnt, 0);
722 out_8(&uccup->rx_bitmark, 0);
723 out_8(&uccup->rx_length, 10);
724 out_be32(&uccup->dump_ptr, 0x4000);
725 out_8(&uccup->rx_temp_dlst_qe, 0);
726 out_be32(&uccup->rx_frame_rem, 0);
727 out_8(&uccup->rx_frame_rem_size, 0);
728 /* Soft-UART requires TX to be 1X */
729 out_8(&uccup->tx_mode,
730 UCC_UART_TX_STATE_UART | UCC_UART_TX_STATE_X1);
731 out_be16(&uccup->tx_state, 0);
732 out_8(&uccup->resD4, 0);
733 out_be16(&uccup->resD5, 0);
734
735 /* Set UART mode.
736 * Enable receive and transmit.
737 */
738
739 /* From the microcode errata:
740 * 1.GUMR_L register, set mode=0010 (QMC).
741 * 2.Set GUMR_H[17] bit. (UART/AHDLC mode).
742 * 3.Set GUMR_H[19:20] (Transparent mode)
743 * 4.Clear GUMR_H[26] (RFW)
744 * ...
745 * 6.Receiver must use 16x over sampling
746 */
747 clrsetbits_be32(&uccp->gumr_l,
748 UCC_SLOW_GUMR_L_MODE_MASK | UCC_SLOW_GUMR_L_TDCR_MASK |
749 UCC_SLOW_GUMR_L_RDCR_MASK,
750 UCC_SLOW_GUMR_L_MODE_QMC | UCC_SLOW_GUMR_L_TDCR_16 |
751 UCC_SLOW_GUMR_L_RDCR_16);
752
753 clrsetbits_be32(&uccp->gumr_h,
754 UCC_SLOW_GUMR_H_RFW | UCC_SLOW_GUMR_H_RSYN,
755 UCC_SLOW_GUMR_H_SUART | UCC_SLOW_GUMR_H_TRX |
756 UCC_SLOW_GUMR_H_TTX | UCC_SLOW_GUMR_H_TFL);
757
758#ifdef LOOPBACK
759 clrsetbits_be32(&uccp->gumr_l, UCC_SLOW_GUMR_L_DIAG_MASK,
760 UCC_SLOW_GUMR_L_DIAG_LOOP);
761 clrbits32(&uccp->gumr_h, UCC_SLOW_GUMR_H_CTSP |
762 UCC_SLOW_GUMR_H_CDS);
763#endif
764
765 cecr_subblock = ucc_slow_get_qe_cr_subblock(qe_port->ucc_num);
766 qe_issue_cmd(QE_INIT_TX_RX, cecr_subblock,
767 QE_CR_PROTOCOL_UNSPECIFIED, 0);
768 }
769}
770
771/*
772 * Initialize the port.
773 */
774static int qe_uart_startup(struct uart_port *port)
775{
776 struct uart_qe_port *qe_port =
777 container_of(port, struct uart_qe_port, port);
778 int ret;
779
780 /*
781 * If we're using Soft-UART mode, then we need to make sure the
782 * firmware has been uploaded first.
783 */
784 if (soft_uart && !firmware_loaded) {
785 dev_err(port->dev, "Soft-UART firmware not uploaded\n");
786 return -ENODEV;
787 }
788
789 qe_uart_initbd(qe_port);
790 qe_uart_init_ucc(qe_port);
791
792 /* Install interrupt handler. */
793 ret = request_irq(port->irq, qe_uart_int, IRQF_SHARED, "ucc-uart",
794 qe_port);
795 if (ret) {
796 dev_err(port->dev, "could not claim IRQ %u\n", port->irq);
797 return ret;
798 }
799
800 /* Startup rx-int */
801 setbits16(&qe_port->uccp->uccm, UCC_UART_UCCE_RX);
802 ucc_slow_enable(qe_port->us_private, COMM_DIR_RX_AND_TX);
803
804 return 0;
805}
806
807/*
808 * Shutdown the port.
809 */
810static void qe_uart_shutdown(struct uart_port *port)
811{
812 struct uart_qe_port *qe_port =
813 container_of(port, struct uart_qe_port, port);
814 struct ucc_slow __iomem *uccp = qe_port->uccp;
815 unsigned int timeout = 20;
816
817 /* Disable RX and TX */
818
819 /* Wait for all the BDs marked sent */
820 while (!qe_uart_tx_empty(port)) {
821 if (!--timeout) {
822 dev_warn(port->dev, "shutdown timeout\n");
823 break;
824 }
825 set_current_state(TASK_UNINTERRUPTIBLE);
826 schedule_timeout(2);
827 }
828
829 if (qe_port->wait_closing) {
830 /* Wait a bit longer */
831 set_current_state(TASK_UNINTERRUPTIBLE);
832 schedule_timeout(qe_port->wait_closing);
833 }
834
835 /* Stop uarts */
836 ucc_slow_disable(qe_port->us_private, COMM_DIR_RX_AND_TX);
837 clrbits16(&uccp->uccm, UCC_UART_UCCE_TX | UCC_UART_UCCE_RX);
838
839 /* Shut them really down and reinit buffer descriptors */
840 ucc_slow_graceful_stop_tx(qe_port->us_private);
841 qe_uart_initbd(qe_port);
842
843 free_irq(port->irq, qe_port);
844}
845
846/*
847 * Set the serial port parameters.
848 */
849static void qe_uart_set_termios(struct uart_port *port,
850 struct ktermios *termios, struct ktermios *old)
851{
852 struct uart_qe_port *qe_port =
853 container_of(port, struct uart_qe_port, port);
854 struct ucc_slow __iomem *uccp = qe_port->uccp;
855 unsigned int baud;
856 unsigned long flags;
857 u16 upsmr = in_be16(&uccp->upsmr);
858 struct ucc_uart_pram __iomem *uccup = qe_port->uccup;
859 u16 supsmr = in_be16(&uccup->supsmr);
860 u8 char_length = 2; /* 1 + CL + PEN + 1 + SL */
861
862 /* Character length programmed into the mode register is the
863 * sum of: 1 start bit, number of data bits, 0 or 1 parity bit,
864 * 1 or 2 stop bits, minus 1.
865 * The value 'bits' counts this for us.
866 */
867
868 /* byte size */
869 upsmr &= UCC_UART_UPSMR_CL_MASK;
870 supsmr &= UCC_UART_SUPSMR_CL_MASK;
871
872 switch (termios->c_cflag & CSIZE) {
873 case CS5:
874 upsmr |= UCC_UART_UPSMR_CL_5;
875 supsmr |= UCC_UART_SUPSMR_CL_5;
876 char_length += 5;
877 break;
878 case CS6:
879 upsmr |= UCC_UART_UPSMR_CL_6;
880 supsmr |= UCC_UART_SUPSMR_CL_6;
881 char_length += 6;
882 break;
883 case CS7:
884 upsmr |= UCC_UART_UPSMR_CL_7;
885 supsmr |= UCC_UART_SUPSMR_CL_7;
886 char_length += 7;
887 break;
888 default: /* case CS8 */
889 upsmr |= UCC_UART_UPSMR_CL_8;
890 supsmr |= UCC_UART_SUPSMR_CL_8;
891 char_length += 8;
892 break;
893 }
894
895 /* If CSTOPB is set, we want two stop bits */
896 if (termios->c_cflag & CSTOPB) {
897 upsmr |= UCC_UART_UPSMR_SL;
898 supsmr |= UCC_UART_SUPSMR_SL;
899 char_length++; /* + SL */
900 }
901
902 if (termios->c_cflag & PARENB) {
903 upsmr |= UCC_UART_UPSMR_PEN;
904 supsmr |= UCC_UART_SUPSMR_PEN;
905 char_length++; /* + PEN */
906
907 if (!(termios->c_cflag & PARODD)) {
908 upsmr &= ~(UCC_UART_UPSMR_RPM_MASK |
909 UCC_UART_UPSMR_TPM_MASK);
910 upsmr |= UCC_UART_UPSMR_RPM_EVEN |
911 UCC_UART_UPSMR_TPM_EVEN;
912 supsmr &= ~(UCC_UART_SUPSMR_RPM_MASK |
913 UCC_UART_SUPSMR_TPM_MASK);
914 supsmr |= UCC_UART_SUPSMR_RPM_EVEN |
915 UCC_UART_SUPSMR_TPM_EVEN;
916 }
917 }
918
919 /*
920 * Set up parity check flag
921 */
922 port->read_status_mask = BD_SC_EMPTY | BD_SC_OV;
923 if (termios->c_iflag & INPCK)
924 port->read_status_mask |= BD_SC_FR | BD_SC_PR;
925 if (termios->c_iflag & (BRKINT | PARMRK))
926 port->read_status_mask |= BD_SC_BR;
927
928 /*
929 * Characters to ignore
930 */
931 port->ignore_status_mask = 0;
932 if (termios->c_iflag & IGNPAR)
933 port->ignore_status_mask |= BD_SC_PR | BD_SC_FR;
934 if (termios->c_iflag & IGNBRK) {
935 port->ignore_status_mask |= BD_SC_BR;
936 /*
937 * If we're ignore parity and break indicators, ignore
938 * overruns too. (For real raw support).
939 */
940 if (termios->c_iflag & IGNPAR)
941 port->ignore_status_mask |= BD_SC_OV;
942 }
943 /*
944 * !!! ignore all characters if CREAD is not set
945 */
946 if ((termios->c_cflag & CREAD) == 0)
947 port->read_status_mask &= ~BD_SC_EMPTY;
948
949 baud = uart_get_baud_rate(port, termios, old, 0, 115200);
950
951 /* Do we really need a spinlock here? */
952 spin_lock_irqsave(&port->lock, flags);
953
954 out_be16(&uccp->upsmr, upsmr);
955 if (soft_uart) {
956 out_be16(&uccup->supsmr, supsmr);
957 out_8(&uccup->rx_length, char_length);
958
959 /* Soft-UART requires a 1X multiplier for TX */
960 qe_setbrg(qe_port->us_info.rx_clock, baud, 16);
961 qe_setbrg(qe_port->us_info.tx_clock, baud, 1);
962 } else {
963 qe_setbrg(qe_port->us_info.rx_clock, baud, 16);
964 qe_setbrg(qe_port->us_info.tx_clock, baud, 16);
965 }
966
967 spin_unlock_irqrestore(&port->lock, flags);
968}
969
970/*
971 * Return a pointer to a string that describes what kind of port this is.
972 */
973static const char *qe_uart_type(struct uart_port *port)
974{
975 return "QE";
976}
977
978/*
979 * Allocate any memory and I/O resources required by the port.
980 */
981static int qe_uart_request_port(struct uart_port *port)
982{
983 int ret;
984 struct uart_qe_port *qe_port =
985 container_of(port, struct uart_qe_port, port);
986 struct ucc_slow_info *us_info = &qe_port->us_info;
987 struct ucc_slow_private *uccs;
988 unsigned int rx_size, tx_size;
989 void *bd_virt;
990 dma_addr_t bd_dma_addr = 0;
991
992 ret = ucc_slow_init(us_info, &uccs);
993 if (ret) {
994 dev_err(port->dev, "could not initialize UCC%u\n",
995 qe_port->ucc_num);
996 return ret;
997 }
998
999 qe_port->us_private = uccs;
1000 qe_port->uccp = uccs->us_regs;
1001 qe_port->uccup = (struct ucc_uart_pram *) uccs->us_pram;
1002 qe_port->rx_bd_base = uccs->rx_bd;
1003 qe_port->tx_bd_base = uccs->tx_bd;
1004
1005 /*
1006 * Allocate the transmit and receive data buffers.
1007 */
1008
1009 rx_size = L1_CACHE_ALIGN(qe_port->rx_nrfifos * qe_port->rx_fifosize);
1010 tx_size = L1_CACHE_ALIGN(qe_port->tx_nrfifos * qe_port->tx_fifosize);
1011
1012 bd_virt = dma_alloc_coherent(NULL, rx_size + tx_size, &bd_dma_addr,
1013 GFP_KERNEL);
1014 if (!bd_virt) {
1015 dev_err(port->dev, "could not allocate buffer descriptors\n");
1016 return -ENOMEM;
1017 }
1018
1019 qe_port->bd_virt = bd_virt;
1020 qe_port->bd_dma_addr = bd_dma_addr;
1021 qe_port->bd_size = rx_size + tx_size;
1022
1023 qe_port->rx_buf = bd_virt;
1024 qe_port->tx_buf = qe_port->rx_buf + rx_size;
1025
1026 return 0;
1027}
1028
1029/*
1030 * Configure the port.
1031 *
1032 * We say we're a CPM-type port because that's mostly true. Once the device
1033 * is configured, this driver operates almost identically to the CPM serial
1034 * driver.
1035 */
1036static void qe_uart_config_port(struct uart_port *port, int flags)
1037{
1038 if (flags & UART_CONFIG_TYPE) {
1039 port->type = PORT_CPM;
1040 qe_uart_request_port(port);
1041 }
1042}
1043
1044/*
1045 * Release any memory and I/O resources that were allocated in
1046 * qe_uart_request_port().
1047 */
1048static void qe_uart_release_port(struct uart_port *port)
1049{
1050 struct uart_qe_port *qe_port =
1051 container_of(port, struct uart_qe_port, port);
1052 struct ucc_slow_private *uccs = qe_port->us_private;
1053
1054 dma_free_coherent(NULL, qe_port->bd_size, qe_port->bd_virt,
1055 qe_port->bd_dma_addr);
1056
1057 ucc_slow_free(uccs);
1058}
1059
1060/*
1061 * Verify that the data in serial_struct is suitable for this device.
1062 */
1063static int qe_uart_verify_port(struct uart_port *port,
1064 struct serial_struct *ser)
1065{
1066 if (ser->type != PORT_UNKNOWN && ser->type != PORT_CPM)
1067 return -EINVAL;
1068
1069 if (ser->irq < 0 || ser->irq >= NR_IRQS)
1070 return -EINVAL;
1071
1072 if (ser->baud_base < 9600)
1073 return -EINVAL;
1074
1075 return 0;
1076}
1077/* UART operations
1078 *
1079 * Details on these functions can be found in Documentation/serial/driver
1080 */
1081static struct uart_ops qe_uart_pops = {
1082 .tx_empty = qe_uart_tx_empty,
1083 .set_mctrl = qe_uart_set_mctrl,
1084 .get_mctrl = qe_uart_get_mctrl,
1085 .stop_tx = qe_uart_stop_tx,
1086 .start_tx = qe_uart_start_tx,
1087 .stop_rx = qe_uart_stop_rx,
1088 .enable_ms = qe_uart_enable_ms,
1089 .break_ctl = qe_uart_break_ctl,
1090 .startup = qe_uart_startup,
1091 .shutdown = qe_uart_shutdown,
1092 .set_termios = qe_uart_set_termios,
1093 .type = qe_uart_type,
1094 .release_port = qe_uart_release_port,
1095 .request_port = qe_uart_request_port,
1096 .config_port = qe_uart_config_port,
1097 .verify_port = qe_uart_verify_port,
1098};
1099
1100/*
1101 * Obtain the SOC model number and revision level
1102 *
1103 * This function parses the device tree to obtain the SOC model. It then
1104 * reads the SVR register to the revision.
1105 *
1106 * The device tree stores the SOC model two different ways.
1107 *
1108 * The new way is:
1109 *
1110 * cpu@0 {
1111 * compatible = "PowerPC,8323";
1112 * device_type = "cpu";
1113 * ...
1114 *
1115 *
1116 * The old way is:
1117 * PowerPC,8323@0 {
1118 * device_type = "cpu";
1119 * ...
1120 *
1121 * This code first checks the new way, and then the old way.
1122 */
1123static unsigned int soc_info(unsigned int *rev_h, unsigned int *rev_l)
1124{
1125 struct device_node *np;
1126 const char *soc_string;
1127 unsigned int svr;
1128 unsigned int soc;
1129
1130 /* Find the CPU node */
1131 np = of_find_node_by_type(NULL, "cpu");
1132 if (!np)
1133 return 0;
1134 /* Find the compatible property */
1135 soc_string = of_get_property(np, "compatible", NULL);
1136 if (!soc_string)
1137 /* No compatible property, so try the name. */
1138 soc_string = np->name;
1139
1140 /* Extract the SOC number from the "PowerPC," string */
1141 if ((sscanf(soc_string, "PowerPC,%u", &soc) != 1) || !soc)
1142 return 0;
1143
1144 /* Get the revision from the SVR */
1145 svr = mfspr(SPRN_SVR);
1146 *rev_h = (svr >> 4) & 0xf;
1147 *rev_l = svr & 0xf;
1148
1149 return soc;
1150}
1151
1152/*
1153 * requst_firmware_nowait() callback function
1154 *
1155 * This function is called by the kernel when a firmware is made available,
1156 * or if it times out waiting for the firmware.
1157 */
1158static void uart_firmware_cont(const struct firmware *fw, void *context)
1159{
1160 struct qe_firmware *firmware;
1161 struct device *dev = context;
1162 int ret;
1163
1164 if (!fw) {
1165 dev_err(dev, "firmware not found\n");
1166 return;
1167 }
1168
1169 firmware = (struct qe_firmware *) fw->data;
1170
1171 if (firmware->header.length != fw->size) {
1172 dev_err(dev, "invalid firmware\n");
1173 return;
1174 }
1175
1176 ret = qe_upload_firmware(firmware);
1177 if (ret) {
1178 dev_err(dev, "could not load firmware\n");
1179 return;
1180 }
1181
1182 firmware_loaded = 1;
1183}
1184
1185static int ucc_uart_probe(struct of_device *ofdev,
1186 const struct of_device_id *match)
1187{
1188 struct device_node *np = ofdev->node;
1189 const unsigned int *iprop; /* Integer OF properties */
1190 const char *sprop; /* String OF properties */
1191 struct uart_qe_port *qe_port = NULL;
1192 struct resource res;
1193 int ret;
1194
1195 /*
1196 * Determine if we need Soft-UART mode
1197 */
1198 if (of_find_property(np, "soft-uart", NULL)) {
1199 dev_dbg(&ofdev->dev, "using Soft-UART mode\n");
1200 soft_uart = 1;
1201 }
1202
1203 /*
1204 * If we are using Soft-UART, determine if we need to upload the
1205 * firmware, too.
1206 */
1207 if (soft_uart) {
1208 struct qe_firmware_info *qe_fw_info;
1209
1210 qe_fw_info = qe_get_firmware_info();
1211
1212 /* Check if the firmware has been uploaded. */
1213 if (qe_fw_info && strstr(qe_fw_info->id, "Soft-UART")) {
1214 firmware_loaded = 1;
1215 } else {
1216 char filename[32];
1217 unsigned int soc;
1218 unsigned int rev_h;
1219 unsigned int rev_l;
1220
1221 soc = soc_info(&rev_h, &rev_l);
1222 if (!soc) {
1223 dev_err(&ofdev->dev, "unknown CPU model\n");
1224 return -ENXIO;
1225 }
1226 sprintf(filename, "fsl_qe_ucode_uart_%u_%u%u.bin",
1227 soc, rev_h, rev_l);
1228
1229 dev_info(&ofdev->dev, "waiting for firmware %s\n",
1230 filename);
1231
1232 /*
1233 * We call request_firmware_nowait instead of
1234 * request_firmware so that the driver can load and
1235 * initialize the ports without holding up the rest of
1236 * the kernel. If hotplug support is enabled in the
1237 * kernel, then we use it.
1238 */
1239 ret = request_firmware_nowait(THIS_MODULE,
1240 FW_ACTION_HOTPLUG, filename, &ofdev->dev,
1241 &ofdev->dev, uart_firmware_cont);
1242 if (ret) {
1243 dev_err(&ofdev->dev,
1244 "could not load firmware %s\n",
1245 filename);
1246 return ret;
1247 }
1248 }
1249 }
1250
1251 qe_port = kzalloc(sizeof(struct uart_qe_port), GFP_KERNEL);
1252 if (!qe_port) {
1253 dev_err(&ofdev->dev, "can't allocate QE port structure\n");
1254 return -ENOMEM;
1255 }
1256
1257 /* Search for IRQ and mapbase */
1258 ret = of_address_to_resource(np, 0, &res);
1259 if (ret) {
1260 dev_err(&ofdev->dev, "missing 'reg' property in device tree\n");
1261 kfree(qe_port);
1262 return ret;
1263 }
1264 if (!res.start) {
1265 dev_err(&ofdev->dev, "invalid 'reg' property in device tree\n");
1266 kfree(qe_port);
1267 return -EINVAL;
1268 }
1269 qe_port->port.mapbase = res.start;
1270
1271 /* Get the UCC number (device ID) */
1272 /* UCCs are numbered 1-7 */
1273 iprop = of_get_property(np, "device-id", NULL);
1274 if (!iprop || (*iprop < 1) || (*iprop > UCC_MAX_NUM)) {
1275 dev_err(&ofdev->dev,
1276 "missing or invalid UCC specified in device tree\n");
1277 kfree(qe_port);
1278 return -ENODEV;
1279 }
1280 qe_port->ucc_num = *iprop - 1;
1281
1282 /*
1283 * In the future, we should not require the BRG to be specified in the
1284 * device tree. If no clock-source is specified, then just pick a BRG
1285 * to use. This requires a new QE library function that manages BRG
1286 * assignments.
1287 */
1288
1289 sprop = of_get_property(np, "rx-clock-name", NULL);
1290 if (!sprop) {
1291 dev_err(&ofdev->dev, "missing rx-clock-name in device tree\n");
1292 kfree(qe_port);
1293 return -ENODEV;
1294 }
1295
1296 qe_port->us_info.rx_clock = qe_clock_source(sprop);
1297 if ((qe_port->us_info.rx_clock < QE_BRG1) ||
1298 (qe_port->us_info.rx_clock > QE_BRG16)) {
1299 dev_err(&ofdev->dev, "rx-clock-name must be a BRG for UART\n");
1300 kfree(qe_port);
1301 return -ENODEV;
1302 }
1303
1304#ifdef LOOPBACK
1305 /* In internal loopback mode, TX and RX must use the same clock */
1306 qe_port->us_info.tx_clock = qe_port->us_info.rx_clock;
1307#else
1308 sprop = of_get_property(np, "tx-clock-name", NULL);
1309 if (!sprop) {
1310 dev_err(&ofdev->dev, "missing tx-clock-name in device tree\n");
1311 kfree(qe_port);
1312 return -ENODEV;
1313 }
1314 qe_port->us_info.tx_clock = qe_clock_source(sprop);
1315#endif
1316 if ((qe_port->us_info.tx_clock < QE_BRG1) ||
1317 (qe_port->us_info.tx_clock > QE_BRG16)) {
1318 dev_err(&ofdev->dev, "tx-clock-name must be a BRG for UART\n");
1319 kfree(qe_port);
1320 return -ENODEV;
1321 }
1322
1323 /* Get the port number, numbered 0-3 */
1324 iprop = of_get_property(np, "port-number", NULL);
1325 if (!iprop) {
1326 dev_err(&ofdev->dev, "missing port-number in device tree\n");
1327 kfree(qe_port);
1328 return -EINVAL;
1329 }
1330 qe_port->port.line = *iprop;
1331 if (qe_port->port.line >= UCC_MAX_UART) {
1332 dev_err(&ofdev->dev, "port-number must be 0-%u\n",
1333 UCC_MAX_UART - 1);
1334 kfree(qe_port);
1335 return -EINVAL;
1336 }
1337
1338 qe_port->port.irq = irq_of_parse_and_map(np, 0);
1339 if (qe_port->port.irq == NO_IRQ) {
1340 dev_err(&ofdev->dev, "could not map IRQ for UCC%u\n",
1341 qe_port->ucc_num + 1);
1342 kfree(qe_port);
1343 return -EINVAL;
1344 }
1345
1346 /*
1347 * Newer device trees have an "fsl,qe" compatible property for the QE
1348 * node, but we still need to support older device trees.
1349 */
1350 np = of_find_compatible_node(NULL, NULL, "fsl,qe");
1351 if (!np) {
1352 np = of_find_node_by_type(NULL, "qe");
1353 if (!np) {
1354 dev_err(&ofdev->dev, "could not find 'qe' node\n");
1355 kfree(qe_port);
1356 return -EINVAL;
1357 }
1358 }
1359
1360 iprop = of_get_property(np, "brg-frequency", NULL);
1361 if (!iprop) {
1362 dev_err(&ofdev->dev,
1363 "missing brg-frequency in device tree\n");
1364 kfree(qe_port);
1365 return -EINVAL;
1366 }
1367
1368 if (*iprop)
1369 qe_port->port.uartclk = *iprop;
1370 else {
1371 /*
1372 * Older versions of U-Boot do not initialize the brg-frequency
1373 * property, so in this case we assume the BRG frequency is
1374 * half the QE bus frequency.
1375 */
1376 iprop = of_get_property(np, "bus-frequency", NULL);
1377 if (!iprop) {
1378 dev_err(&ofdev->dev,
1379 "missing QE bus-frequency in device tree\n");
1380 kfree(qe_port);
1381 return -EINVAL;
1382 }
1383 if (*iprop)
1384 qe_port->port.uartclk = *iprop / 2;
1385 else {
1386 dev_err(&ofdev->dev,
1387 "invalid QE bus-frequency in device tree\n");
1388 kfree(qe_port);
1389 return -EINVAL;
1390 }
1391 }
1392
1393 spin_lock_init(&qe_port->port.lock);
1394 qe_port->np = np;
1395 qe_port->port.dev = &ofdev->dev;
1396 qe_port->port.ops = &qe_uart_pops;
1397 qe_port->port.iotype = UPIO_MEM;
1398
1399 qe_port->tx_nrfifos = TX_NUM_FIFO;
1400 qe_port->tx_fifosize = TX_BUF_SIZE;
1401 qe_port->rx_nrfifos = RX_NUM_FIFO;
1402 qe_port->rx_fifosize = RX_BUF_SIZE;
1403
1404 qe_port->wait_closing = UCC_WAIT_CLOSING;
1405 qe_port->port.fifosize = 512;
1406 qe_port->port.flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP;
1407
1408 qe_port->us_info.ucc_num = qe_port->ucc_num;
1409 qe_port->us_info.regs = (phys_addr_t) res.start;
1410 qe_port->us_info.irq = qe_port->port.irq;
1411
1412 qe_port->us_info.rx_bd_ring_len = qe_port->rx_nrfifos;
1413 qe_port->us_info.tx_bd_ring_len = qe_port->tx_nrfifos;
1414
1415 /* Make sure ucc_slow_init() initializes both TX and RX */
1416 qe_port->us_info.init_tx = 1;
1417 qe_port->us_info.init_rx = 1;
1418
1419 /* Add the port to the uart sub-system. This will cause
1420 * qe_uart_config_port() to be called, so the us_info structure must
1421 * be initialized.
1422 */
1423 ret = uart_add_one_port(&ucc_uart_driver, &qe_port->port);
1424 if (ret) {
1425 dev_err(&ofdev->dev, "could not add /dev/ttyQE%u\n",
1426 qe_port->port.line);
1427 kfree(qe_port);
1428 return ret;
1429 }
1430
1431 dev_set_drvdata(&ofdev->dev, qe_port);
1432
1433 dev_info(&ofdev->dev, "UCC%u assigned to /dev/ttyQE%u\n",
1434 qe_port->ucc_num + 1, qe_port->port.line);
1435
1436 /* Display the mknod command for this device */
1437 dev_dbg(&ofdev->dev, "mknod command is 'mknod /dev/ttyQE%u c %u %u'\n",
1438 qe_port->port.line, SERIAL_QE_MAJOR,
1439 SERIAL_QE_MINOR + qe_port->port.line);
1440
1441 return 0;
1442}
1443
1444static int ucc_uart_remove(struct of_device *ofdev)
1445{
1446 struct uart_qe_port *qe_port = dev_get_drvdata(&ofdev->dev);
1447
1448 dev_info(&ofdev->dev, "removing /dev/ttyQE%u\n", qe_port->port.line);
1449
1450 uart_remove_one_port(&ucc_uart_driver, &qe_port->port);
1451
1452 dev_set_drvdata(&ofdev->dev, NULL);
1453 kfree(qe_port);
1454
1455 return 0;
1456}
1457
1458static struct of_device_id ucc_uart_match[] = {
1459 {
1460 .type = "serial",
1461 .compatible = "ucc_uart",
1462 },
1463 {},
1464};
1465MODULE_DEVICE_TABLE(of, ucc_uart_match);
1466
1467static struct of_platform_driver ucc_uart_of_driver = {
1468 .owner = THIS_MODULE,
1469 .name = "ucc_uart",
1470 .match_table = ucc_uart_match,
1471 .probe = ucc_uart_probe,
1472 .remove = ucc_uart_remove,
1473};
1474
1475static int __init ucc_uart_init(void)
1476{
1477 int ret;
1478
1479 printk(KERN_INFO "Freescale QUICC Engine UART device driver\n");
1480#ifdef LOOPBACK
1481 printk(KERN_INFO "ucc-uart: Using loopback mode\n");
1482#endif
1483
1484 ret = uart_register_driver(&ucc_uart_driver);
1485 if (ret) {
1486 printk(KERN_ERR "ucc-uart: could not register UART driver\n");
1487 return ret;
1488 }
1489
1490 ret = of_register_platform_driver(&ucc_uart_of_driver);
1491 if (ret)
1492 printk(KERN_ERR
1493 "ucc-uart: could not register platform driver\n");
1494
1495 return ret;
1496}
1497
1498static void __exit ucc_uart_exit(void)
1499{
1500 printk(KERN_INFO
1501 "Freescale QUICC Engine UART device driver unloading\n");
1502
1503 of_unregister_platform_driver(&ucc_uart_of_driver);
1504 uart_unregister_driver(&ucc_uart_driver);
1505}
1506
1507module_init(ucc_uart_init);
1508module_exit(ucc_uart_exit);
1509
1510MODULE_DESCRIPTION("Freescale QUICC Engine (QE) UART");
1511MODULE_AUTHOR("Timur Tabi <timur@freescale.com>");
1512MODULE_LICENSE("GPL v2");
1513MODULE_ALIAS_CHARDEV_MAJOR(SERIAL_QE_MAJOR);
1514
diff --git a/include/asm-powerpc/immap_qe.h b/include/asm-powerpc/immap_qe.h
index aba9806b31c9..82a452615097 100644
--- a/include/asm-powerpc/immap_qe.h
+++ b/include/asm-powerpc/immap_qe.h
@@ -393,9 +393,39 @@ struct dbg {
393 u8 res2[0x48]; 393 u8 res2[0x48];
394} __attribute__ ((packed)); 394} __attribute__ ((packed));
395 395
396/* RISC Special Registers (Trap and Breakpoint) */ 396/*
397 * RISC Special Registers (Trap and Breakpoint). These are described in
398 * the QE Developer's Handbook.
399 */
397struct rsp { 400struct rsp {
398 u32 reg[0x40]; /* 64 32-bit registers */ 401 __be32 tibcr[16]; /* Trap/instruction breakpoint control regs */
402 u8 res0[64];
403 __be32 ibcr0;
404 __be32 ibs0;
405 __be32 ibcnr0;
406 u8 res1[4];
407 __be32 ibcr1;
408 __be32 ibs1;
409 __be32 ibcnr1;
410 __be32 npcr;
411 __be32 dbcr;
412 __be32 dbar;
413 __be32 dbamr;
414 __be32 dbsr;
415 __be32 dbcnr;
416 u8 res2[12];
417 __be32 dbdr_h;
418 __be32 dbdr_l;
419 __be32 dbdmr_h;
420 __be32 dbdmr_l;
421 __be32 bsr;
422 __be32 bor;
423 __be32 bior;
424 u8 res3[4];
425 __be32 iatr[4];
426 __be32 eccr; /* Exception control configuration register */
427 __be32 eicr;
428 u8 res4[0x100-0xf8];
399} __attribute__ ((packed)); 429} __attribute__ ((packed));
400 430
401struct qe_immap { 431struct qe_immap {
diff --git a/include/asm-powerpc/lmb.h b/include/asm-powerpc/lmb.h
index b5f9f4c9c294..5d1dc48a0bb8 100644
--- a/include/asm-powerpc/lmb.h
+++ b/include/asm-powerpc/lmb.h
@@ -51,6 +51,7 @@ extern unsigned long __init __lmb_alloc_base(unsigned long size,
51extern unsigned long __init lmb_phys_mem_size(void); 51extern unsigned long __init lmb_phys_mem_size(void);
52extern unsigned long __init lmb_end_of_DRAM(void); 52extern unsigned long __init lmb_end_of_DRAM(void);
53extern void __init lmb_enforce_memory_limit(unsigned long memory_limit); 53extern void __init lmb_enforce_memory_limit(unsigned long memory_limit);
54extern int __init lmb_is_reserved(unsigned long addr);
54 55
55extern void lmb_dump_all(void); 56extern void lmb_dump_all(void);
56 57
diff --git a/include/asm-powerpc/mpc8260.h b/include/asm-powerpc/mpc8260.h
index e0d480790e12..03317e1e6185 100644
--- a/include/asm-powerpc/mpc8260.h
+++ b/include/asm-powerpc/mpc8260.h
@@ -8,6 +8,7 @@
8#ifndef __ASM_POWERPC_MPC8260_H__ 8#ifndef __ASM_POWERPC_MPC8260_H__
9#define __ASM_POWERPC_MPC8260_H__ 9#define __ASM_POWERPC_MPC8260_H__
10 10
11#define MPC82XX_BCR_PLDP 0x00800000 /* Pipeline Maximum Depth */
11 12
12#ifdef CONFIG_8260 13#ifdef CONFIG_8260
13 14
diff --git a/include/asm-powerpc/pci-bridge.h b/include/asm-powerpc/pci-bridge.h
index a6ea49eb680b..e5802c62f428 100644
--- a/include/asm-powerpc/pci-bridge.h
+++ b/include/asm-powerpc/pci-bridge.h
@@ -152,9 +152,6 @@ extern void setup_indirect_pci(struct pci_controller* hose,
152 resource_size_t cfg_addr, 152 resource_size_t cfg_addr,
153 resource_size_t cfg_data, u32 flags); 153 resource_size_t cfg_data, u32 flags);
154extern void setup_grackle(struct pci_controller *hose); 154extern void setup_grackle(struct pci_controller *hose);
155extern void __init update_bridge_resource(struct pci_dev *dev,
156 struct resource *res);
157
158#else /* CONFIG_PPC64 */ 155#else /* CONFIG_PPC64 */
159 156
160/* 157/*
diff --git a/include/asm-powerpc/qe.h b/include/asm-powerpc/qe.h
index a24b7b14958f..430dc77b35fc 100644
--- a/include/asm-powerpc/qe.h
+++ b/include/asm-powerpc/qe.h
@@ -94,6 +94,58 @@ unsigned long qe_muram_alloc_fixed(unsigned long offset, int size);
94void qe_muram_dump(void); 94void qe_muram_dump(void);
95void *qe_muram_addr(unsigned long offset); 95void *qe_muram_addr(unsigned long offset);
96 96
97/* Structure that defines QE firmware binary files.
98 *
99 * See Documentation/powerpc/qe-firmware.txt for a description of these
100 * fields.
101 */
102struct qe_firmware {
103 struct qe_header {
104 __be32 length; /* Length of the entire structure, in bytes */
105 u8 magic[3]; /* Set to { 'Q', 'E', 'F' } */
106 u8 version; /* Version of this layout. First ver is '1' */
107 } header;
108 u8 id[62]; /* Null-terminated identifier string */
109 u8 split; /* 0 = shared I-RAM, 1 = split I-RAM */
110 u8 count; /* Number of microcode[] structures */
111 struct {
112 __be16 model; /* The SOC model */
113 u8 major; /* The SOC revision major */
114 u8 minor; /* The SOC revision minor */
115 } __attribute__ ((packed)) soc;
116 u8 padding[4]; /* Reserved, for alignment */
117 __be64 extended_modes; /* Extended modes */
118 __be32 vtraps[8]; /* Virtual trap addresses */
119 u8 reserved[4]; /* Reserved, for future expansion */
120 struct qe_microcode {
121 u8 id[32]; /* Null-terminated identifier */
122 __be32 traps[16]; /* Trap addresses, 0 == ignore */
123 __be32 eccr; /* The value for the ECCR register */
124 __be32 iram_offset; /* Offset into I-RAM for the code */
125 __be32 count; /* Number of 32-bit words of the code */
126 __be32 code_offset; /* Offset of the actual microcode */
127 u8 major; /* The microcode version major */
128 u8 minor; /* The microcode version minor */
129 u8 revision; /* The microcode version revision */
130 u8 padding; /* Reserved, for alignment */
131 u8 reserved[4]; /* Reserved, for future expansion */
132 } __attribute__ ((packed)) microcode[1];
133 /* All microcode binaries should be located here */
134 /* CRC32 should be located here, after the microcode binaries */
135} __attribute__ ((packed));
136
137struct qe_firmware_info {
138 char id[64]; /* Firmware name */
139 u32 vtraps[8]; /* Virtual trap addresses */
140 u64 extended_modes; /* Extended modes */
141};
142
143/* Upload a firmware to the QE */
144int qe_upload_firmware(const struct qe_firmware *firmware);
145
146/* Obtain information on the uploaded firmware */
147struct qe_firmware_info *qe_get_firmware_info(void);
148
97/* Buffer descriptors */ 149/* Buffer descriptors */
98struct qe_bd { 150struct qe_bd {
99 __be16 status; 151 __be16 status;
@@ -329,6 +381,15 @@ enum comm_dir {
329 381
330#define QE_SDEBCR_BA_MASK 0x01FFFFFF 382#define QE_SDEBCR_BA_MASK 0x01FFFFFF
331 383
384/* Communication Processor */
385#define QE_CP_CERCR_MEE 0x8000 /* Multi-user RAM ECC enable */
386#define QE_CP_CERCR_IEE 0x4000 /* Instruction RAM ECC enable */
387#define QE_CP_CERCR_CIR 0x0800 /* Common instruction RAM */
388
389/* I-RAM */
390#define QE_IRAM_IADD_AIE 0x80000000 /* Auto Increment Enable */
391#define QE_IRAM_IADD_BADDR 0x00080000 /* Base Address */
392
332/* UPC */ 393/* UPC */
333#define UPGCR_PROTOCOL 0x80000000 /* protocol ul2 or pl2 */ 394#define UPGCR_PROTOCOL 0x80000000 /* protocol ul2 or pl2 */
334#define UPGCR_TMS 0x40000000 /* Transmit master/slave mode */ 395#define UPGCR_TMS 0x40000000 /* Transmit master/slave mode */
diff --git a/include/asm-powerpc/system.h b/include/asm-powerpc/system.h
index 87be8c3bc9cb..bc9739dff5e7 100644
--- a/include/asm-powerpc/system.h
+++ b/include/asm-powerpc/system.h
@@ -169,6 +169,8 @@ extern int do_page_fault(struct pt_regs *, unsigned long, unsigned long);
169extern void bad_page_fault(struct pt_regs *, unsigned long, int); 169extern void bad_page_fault(struct pt_regs *, unsigned long, int);
170extern int die(const char *, struct pt_regs *, long); 170extern int die(const char *, struct pt_regs *, long);
171extern void _exception(int, struct pt_regs *, int, unsigned long); 171extern void _exception(int, struct pt_regs *, int, unsigned long);
172extern void _nmask_and_or_msr(unsigned long nmask, unsigned long or_val);
173
172#ifdef CONFIG_BOOKE_WDT 174#ifdef CONFIG_BOOKE_WDT
173extern u32 booke_wdt_enabled; 175extern u32 booke_wdt_enabled;
174extern u32 booke_wdt_period; 176extern u32 booke_wdt_period;
diff --git a/include/linux/phy_fixed.h b/include/linux/phy_fixed.h
index 04ba70d49fb8..509d8f5f984e 100644
--- a/include/linux/phy_fixed.h
+++ b/include/linux/phy_fixed.h
@@ -1,38 +1,31 @@
1#ifndef __PHY_FIXED_H 1#ifndef __PHY_FIXED_H
2#define __PHY_FIXED_H 2#define __PHY_FIXED_H
3 3
4#define MII_REGS_NUM 29
5
6/* max number of virtual phy stuff */
7#define MAX_PHY_AMNT 10
8/*
9 The idea is to emulate normal phy behavior by responding with
10 pre-defined values to mii BMCR read, so that read_status hook could
11 take all the needed info.
12*/
13
14struct fixed_phy_status { 4struct fixed_phy_status {
15 u8 link; 5 int link;
16 u16 speed; 6 int speed;
17 u8 duplex; 7 int duplex;
8 int pause;
9 int asym_pause;
18}; 10};
19 11
20/*----------------------------------------------------------------------------- 12#ifdef CONFIG_FIXED_PHY
21 * Private information hoder for mii_bus 13extern int fixed_phy_add(unsigned int irq, int phy_id,
22 *-----------------------------------------------------------------------------*/ 14 struct fixed_phy_status *status);
23struct fixed_info { 15#else
24 u16 *regs; 16static inline int fixed_phy_add(unsigned int irq, int phy_id,
25 u8 regs_num; 17 struct fixed_phy_status *status)
26 struct fixed_phy_status phy_status; 18{
27 struct phy_device *phydev; /* pointer to the container */ 19 return -ENODEV;
28 /* link & speed cb */ 20}
29 int (*link_update) (struct net_device *, struct fixed_phy_status *); 21#endif /* CONFIG_FIXED_PHY */
30 22
31}; 23/*
32 24 * This function issued only by fixed_phy-aware drivers, no need
33 25 * protect it with #ifdef
34int fixed_mdio_set_link_update(struct phy_device *, 26 */
35 int (*link_update) (struct net_device *, struct fixed_phy_status *)); 27extern int fixed_phy_set_link_update(struct phy_device *phydev,
36struct fixed_info *fixed_mdio_get_phydev (int phydev_ind); 28 int (*link_update)(struct net_device *,
29 struct fixed_phy_status *));
37 30
38#endif /* __PHY_FIXED_H */ 31#endif /* __PHY_FIXED_H */