get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/293300/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 293300,
    "url": "http://patchwork.ozlabs.org/api/patches/293300/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/1385086116-10972-7-git-send-email-alistair@popple.id.au/",
    "project": {
        "id": 2,
        "url": "http://patchwork.ozlabs.org/api/projects/2/?format=api",
        "name": "Linux PPC development",
        "link_name": "linuxppc-dev",
        "list_id": "linuxppc-dev.lists.ozlabs.org",
        "list_email": "linuxppc-dev@lists.ozlabs.org",
        "web_url": "https://github.com/linuxppc/wiki/wiki",
        "scm_url": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git",
        "webscm_url": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/",
        "list_archive_url": "https://lore.kernel.org/linuxppc-dev/",
        "list_archive_url_format": "https://lore.kernel.org/linuxppc-dev/{}/",
        "commit_url_format": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id={}"
    },
    "msgid": "<1385086116-10972-7-git-send-email-alistair@popple.id.au>",
    "list_archive_url": "https://lore.kernel.org/linuxppc-dev/1385086116-10972-7-git-send-email-alistair@popple.id.au/",
    "date": "2013-11-22T02:08:35",
    "name": "[7/8] IBM Akebono: Add the Akebono platform",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "be01598cccbb9000df396f47e41fcb3ee9353791",
    "submitter": {
        "id": 24781,
        "url": "http://patchwork.ozlabs.org/api/people/24781/?format=api",
        "name": "Alistair Popple",
        "email": "alistair@popple.id.au"
    },
    "delegate": {
        "id": 14,
        "url": "http://patchwork.ozlabs.org/api/users/14/?format=api",
        "username": "benh",
        "first_name": "Benjamin",
        "last_name": "Herrenschmidt",
        "email": "benh@kernel.crashing.org"
    },
    "mbox": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/1385086116-10972-7-git-send-email-alistair@popple.id.au/mbox/",
    "series": [],
    "comments": "http://patchwork.ozlabs.org/api/patches/293300/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/293300/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org>",
        "X-Original-To": "patchwork-incoming@ozlabs.org",
        "Delivered-To": [
            "patchwork-incoming@ozlabs.org",
            "linuxppc-dev@ozlabs.org"
        ],
        "Received": [
            "from ozlabs.org (localhost [IPv6:::1])\n\tby ozlabs.org (Postfix) with ESMTP id A49492C0491\n\tfor <patchwork-incoming@ozlabs.org>;\n\tFri, 22 Nov 2013 13:12:58 +1100 (EST)",
            "by ozlabs.org (Postfix)\n\tid 04E022C0353; Fri, 22 Nov 2013 13:08:54 +1100 (EST)",
            "from ipmail04.adl6.internode.on.net (ipmail04.adl6.internode.on.net\n\t[IPv6:2001:44b8:8060:ff02:300:1:6:4])\n\tby ozlabs.org (Postfix) with ESMTP id D118D2C0478\n\tfor <linuxppc-dev@ozlabs.org>; Fri, 22 Nov 2013 13:08:53 +1100 (EST)",
            "from ibmaus65.lnk.telstra.net (HELO localhost) ([165.228.126.9])\n\tby ipmail04.adl6.internode.on.net with ESMTP;\n\t22 Nov 2013 12:38:52 +1030"
        ],
        "X-IronPort-Anti-Spam-Filtered": "true",
        "X-IronPort-Anti-Spam-Result": "AhsEANK7jlKl5H4JgWdsb2JhbABZhwq5P4E6DgEBFiYogiYBBRoBCAQLAUYQCB0CJgICVxmIAbACkQsXgSmNCkkFB4JrgUcDmBKVTCg",
        "From": "Alistair Popple <alistair@popple.id.au>",
        "To": "benh@kernel.crashing.org",
        "Subject": "=?UTF-8?q?=5BPATCH=207/8=5D=20IBM=20Akebono=3A=20Add=20the=20Akebono=20platform?=",
        "Date": "Fri, 22 Nov 2013 13:08:35 +1100",
        "Message-Id": "<1385086116-10972-7-git-send-email-alistair@popple.id.au>",
        "X-Mailer": "git-send-email 1.7.10.4",
        "In-Reply-To": "<1385086057-10884-1-git-send-email-alistair@popple.id.au>",
        "References": "<1385086057-10884-1-git-send-email-alistair@popple.id.au>",
        "MIME-Version": "1.0",
        "Cc": "linuxppc-dev@ozlabs.org, Alistair Popple <alistair@popple.id.au>",
        "X-BeenThere": "linuxppc-dev@lists.ozlabs.org",
        "X-Mailman-Version": "2.1.16rc2",
        "Precedence": "list",
        "List-Id": "Linux on PowerPC Developers Mail List\n\t<linuxppc-dev.lists.ozlabs.org>",
        "List-Unsubscribe": "<https://lists.ozlabs.org/options/linuxppc-dev>,\n\t<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.ozlabs.org/pipermail/linuxppc-dev/>",
        "List-Post": "<mailto:linuxppc-dev@lists.ozlabs.org>",
        "List-Help": "<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=help>",
        "List-Subscribe": "<https://lists.ozlabs.org/listinfo/linuxppc-dev>,\n\t<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=subscribe>",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "base64",
        "Errors-To": "linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org",
        "Sender": "\"Linuxppc-dev\"\n\t<linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org>"
    },
    "content": "This patch adds support for the IBM Akebono board.\n\nSigned-off-by: Alistair Popple <alistair@popple.id.au>\n---\n .../devicetree/bindings/powerpc/4xx/akebono.txt    |   54 +++\n arch/powerpc/boot/Makefile                         |    3 +\n arch/powerpc/boot/dcr.h                            |    4 +\n arch/powerpc/boot/dts/akebono.dts                  |  385 ++++++++++++++++++++\n arch/powerpc/boot/treeboot-akebono.c               |  179 +++++++++\n arch/powerpc/boot/wrapper                          |    3 +\n arch/powerpc/configs/44x/akebono_defconfig         |  148 ++++++++\n arch/powerpc/platforms/44x/Kconfig                 |   26 ++\n arch/powerpc/platforms/44x/Makefile                |    1 +\n arch/powerpc/platforms/44x/ppc476.c                |  112 ++++--\n arch/powerpc/sysdev/ppc4xx_pci.c                   |   13 +-\n 11 files changed, 902 insertions(+), 26 deletions(-)\n create mode 100644 Documentation/devicetree/bindings/powerpc/4xx/akebono.txt\n create mode 100644 arch/powerpc/boot/dts/akebono.dts\n create mode 100644 arch/powerpc/boot/treeboot-akebono.c\n create mode 100644 arch/powerpc/configs/44x/akebono_defconfig",
    "diff": "diff --git a/Documentation/devicetree/bindings/powerpc/4xx/akebono.txt b/Documentation/devicetree/bindings/powerpc/4xx/akebono.txt\nnew file mode 100644\nindex 0000000..75adb84\n--- /dev/null\n+++ b/Documentation/devicetree/bindings/powerpc/4xx/akebono.txt\n@@ -0,0 +1,54 @@\n+\n+IBM Akebono board device tree\n+=============================\n+\n+The IBM Akebono board is a development board for the PPC476GTR SoC.\n+\n+0) The root node\n+\n+   Required properties:\n+\n+   - model : \"ibm,akebono\".\n+   - compatible : \"ibm,akebono\" , \"ibm,476gtr\".\n+\n+1.a) The Secure Digital Host Controller Interface (SDHCI) node\n+\n+  Represent the Secure Digital Host Controller Interfaces.\n+\n+  Required properties:\n+\n+   - compatible : should be \"ibm,476gtr-sdhci\",\"sdhci\".\n+   - reg : should contain the SDHCI registers location and length.\n+   - interrupt-parent : a phandle for the interrupt controller.\n+   - interrupts : should contain the SDHCI interrupt.\n+\n+1.b) The Advanced Host Controller Interface (AHCI) SATA node\n+\n+  Represents the advanced host controller SATA interface.\n+\n+  Required properties:\n+\n+   - compatible : should be \"ibm,476gtr-ahci\".\n+   - reg : should contain the AHCI registers location and length.\n+   - interrupt-parent : a phandle for the interrupt controller.\n+   - interrupts : should contain the AHCI interrupt.\n+\n+1.c) The FPGA node\n+\n+  The Akebono board stores some board information such as the revision\n+  number in an FPGA which is represented by this node.\n+\n+  Required properties:\n+\n+   - compatible : should be \"ibm,akebono-fpga\".\n+   - reg : should contain the FPGA registers location and length.\n+\n+1.d) The AVR node\n+\n+  The Akebono board has an Atmel AVR microprocessor attached to the I2C\n+  bus as a power controller for the board.\n+\n+  Required properties:\n+\n+   - compatible : should be \"ibm,akebono-avr\".\n+   - reg : should contain the I2C bus address for the AVR.\ndiff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile\nindex 15ca225..645ff21 100644\n--- a/arch/powerpc/boot/Makefile\n+++ b/arch/powerpc/boot/Makefile\n@@ -46,6 +46,7 @@ $(obj)/cuboot-acadia.o: BOOTCFLAGS += -mcpu=405\n $(obj)/treeboot-walnut.o: BOOTCFLAGS += -mcpu=405\n $(obj)/treeboot-iss4xx.o: BOOTCFLAGS += -mcpu=405\n $(obj)/treeboot-currituck.o: BOOTCFLAGS += -mcpu=405\n+$(obj)/treeboot-akebono.o: BOOTCFLAGS += -mcpu=405\n $(obj)/virtex405-head.o: BOOTAFLAGS += -mcpu=405\n \n \n@@ -85,6 +86,7 @@ src-plat-$(CONFIG_44x) += treeboot-ebony.c cuboot-ebony.c treeboot-bamboo.c \\\n \t\t\t\tcuboot-taishan.c cuboot-katmai.c \\\n \t\t\t\tcuboot-warp.c cuboot-yosemite.c \\\n \t\t\t\ttreeboot-iss4xx.c treeboot-currituck.c \\\n+\t\t\t\ttreeboot-akebono.c \\\n \t\t\t\tsimpleboot.c fixed-head.S virtex.c\n src-plat-$(CONFIG_8xx) += cuboot-8xx.c fixed-head.S ep88xc.c redboot-8xx.c\n src-plat-$(CONFIG_PPC_MPC52xx) += cuboot-52xx.c\n@@ -235,6 +237,7 @@ image-$(CONFIG_YOSEMITE)\t\t+= cuImage.yosemite\n image-$(CONFIG_ISS4xx)\t\t\t+= treeImage.iss4xx \\\n \t\t\t\t\t   treeImage.iss4xx-mpic\n image-$(CONFIG_CURRITUCK)\t\t\t+= treeImage.currituck\n+image-$(CONFIG_AKEBONO)\t\t\t+= treeImage.akebono\n \n # Board ports in arch/powerpc/platform/8xx/Kconfig\n image-$(CONFIG_MPC86XADS)\t\t+= cuImage.mpc866ads\ndiff --git a/arch/powerpc/boot/dcr.h b/arch/powerpc/boot/dcr.h\nindex cc73f7a..bf8f4ed 100644\n--- a/arch/powerpc/boot/dcr.h\n+++ b/arch/powerpc/boot/dcr.h\n@@ -15,6 +15,10 @@\n \t\tasm volatile(\"mfdcrx %0,%1\" : \"=r\"(rval) : \"r\"(rn)); \\\n \t\trval; \\\n \t})\n+#define mtdcrx(rn, val) \\\n+\t({\t\\\n+\t\tasm volatile(\"mtdcrx %0,%1\" : : \"r\"(rn), \"r\" (val)); \\\n+\t})\n \n /* 440GP/440GX SDRAM controller DCRs */\n #define DCRN_SDRAM0_CFGADDR\t\t\t\t0x010\ndiff --git a/arch/powerpc/boot/dts/akebono.dts b/arch/powerpc/boot/dts/akebono.dts\nnew file mode 100644\nindex 0000000..6dd47e9\n--- /dev/null\n+++ b/arch/powerpc/boot/dts/akebono.dts\n@@ -0,0 +1,385 @@\n+/*\n+ * Device Tree Source for IBM Embedded PPC 476 Platform\n+ *\n+ * Copyright © 2013 Tony Breeds IBM Corporation\n+ * Copyright © 2013 Alistair Popple IBM Corporation\n+ *\n+ * This file is licensed under the terms of the GNU General Public\n+ * License version 2.  This program is licensed \"as is\" without\n+ * any warranty of any kind, whether express or implied.\n+ */\n+\n+/dts-v1/;\n+\n+/memreserve/ 0x01f00000 0x00100000;\t// spin table\n+\n+/ {\n+\t#address-cells = <2>;\n+\t#size-cells = <2>;\n+\tmodel = \"ibm,akebono\";\n+\tcompatible = \"ibm,akebono\", \"ibm,476gtr\";\n+\tdcr-parent = <&{/cpus/cpu@0}>;\n+\n+\taliases {\n+\t\tserial0 = &UART0;\n+\t};\n+\n+\tcpus {\n+\t\t#address-cells = <1>;\n+\t\t#size-cells = <0>;\n+\n+\t\tcpu@0 {\n+\t\t\tdevice_type = \"cpu\";\n+\t\t\tmodel = \"PowerPC,476\";\n+\t\t\treg = <0>;\n+\t\t\tclock-frequency = <1600000000>; // 1.6 GHz\n+\t\t\ttimebase-frequency = <100000000>; // 100Mhz\n+\t\t\ti-cache-line-size = <32>;\n+\t\t\td-cache-line-size = <32>;\n+\t\t\ti-cache-size = <32768>;\n+\t\t\td-cache-size = <32768>;\n+\t\t\tdcr-controller;\n+\t\t\tdcr-access-method = \"native\";\n+\t\t\tstatus = \"ok\";\n+\t\t};\n+\t\tcpu@1 {\n+\t\t\tdevice_type = \"cpu\";\n+\t\t\tmodel = \"PowerPC,476\";\n+\t\t\treg = <1>;\n+\t\t\tclock-frequency = <1600000000>; // 1.6 GHz\n+\t\t\ttimebase-frequency = <100000000>; // 100Mhz\n+\t\t\ti-cache-line-size = <32>;\n+\t\t\td-cache-line-size = <32>;\n+\t\t\ti-cache-size = <32768>;\n+\t\t\td-cache-size = <32768>;\n+\t\t\tdcr-controller;\n+\t\t\tdcr-access-method = \"native\";\n+\t\t\tstatus = \"disabled\";\n+\t\t\tenable-method = \"spin-table\";\n+\t\t\tcpu-release-addr = <0x0 0x01f00000>;\n+\t\t};\n+\t};\n+\n+\tmemory {\n+\t\tdevice_type = \"memory\";\n+\t\treg = <0x0 0x0 0x0 0x0>; // filled in by zImage\n+\t};\n+\n+\tMPIC: interrupt-controller {\n+\t\tcompatible = \"chrp,open-pic\";\n+\t\tinterrupt-controller;\n+\t\tdcr-reg = <0xffc00000 0x00040000>;\n+\t\t#address-cells = <0>;\n+\t\t#size-cells = <0>;\n+\t\t#interrupt-cells = <2>;\n+\t\tsingle-cpu-affinity;\n+\t};\n+\n+\tplb {\n+\t\tcompatible = \"ibm,plb6\";\n+\t\t#address-cells = <2>;\n+\t\t#size-cells = <2>;\n+\t\tranges;\n+\t\tclock-frequency = <200000000>; // 200Mhz\n+\n+\t\tMAL0: mcmal {\n+\t\t\tcompatible = \"ibm,mcmal-476gtr\", \"ibm,mcmal2\";\n+\t\t\tdcr-reg = <0xc0000000 0x062>;\n+\t\t\tnum-tx-chans = <1>;\n+\t\t\tnum-rx-chans = <1>;\n+\t\t\t#address-cells = <0>;\n+\t\t\t#size-cells = <0>;\n+\t\t\tinterrupt-parent = <&MPIC>;\n+\t\t\tinterrupts = <\t/*TXEOB*/ 77 0x4\n+\t\t\t\t\t/*RXEOB*/ 78 0x4\n+\t\t\t\t\t/*SERR*/  76 0x4\n+\t\t\t\t\t/*TXDE*/  79 0x4\n+\t\t\t\t\t/*RXDE*/  80 0x4>;\n+\t\t};\n+\n+\t\tSATA0: sata@30000010000 {\n+\t\t\tcompatible = \"ibm,476gtr-ahci\";\n+\t\t\treg = <0x300 0x00010000 0x0 0x10000>;\n+\t\t\tinterrupt-parent = <&MPIC>;\n+\t\t\tinterrupts = <93 2>;\n+\t\t};\n+\n+\t\tEHCI0: ehci@30010000000 {\n+\t\t\tcompatible = \"ibm,476gtr-ehci\", \"usb-ehci\";\n+\t\t\treg = <0x300 0x10000000 0x0 0x10000>;\n+\t\t\tinterrupt-parent = <&MPIC>;\n+\t\t\tinterrupts = <85 2>;\n+\t\t};\n+\n+\t\tSD0: sd@30000000000 {\n+\t\t\tcompatible = \"ibm,476gtr-sdhci\", \"sdhci\";\n+\t\t\treg = <0x300 0x00000000 0x0 0x10000>;\n+\t\t\tinterrupts = <91 2>;\n+\t\t\tinterrupt-parent = <&MPIC>;\n+\t\t};\n+\n+\t\tOHCI0: ohci@30010010000 {\n+\t\t\tcompatible = \"ibm,476gtr-ohci\", \"usb-ohci\";\n+\t\t\treg = <0x300 0x10010000 0x0 0x10000>;\n+\t\t\tinterrupt-parent = <&MPIC>;\n+\t\t\tinterrupts = <89 1>;\n+\t\t\t};\n+\n+\t\tOHCI1: ohci@30010020000 {\n+\t\t\tcompatible = \"ibm,476gtr-ohci\", \"usb-ohci\";\n+\t\t\treg = <0x300 0x10020000 0x0 0x10000>;\n+\t\t\tinterrupt-parent = <&MPIC>;\n+\t\t\tinterrupts = <88 1>;\n+\t\t\t};\n+\n+\t\tPOB0: opb {\n+\t\t\tcompatible = \"ibm,opb-4xx\", \"ibm,opb\";\n+\t\t\t#address-cells = <1>;\n+\t\t\t#size-cells = <1>;\n+\t\t\t/* Wish there was a nicer way of specifying a full\n+\t\t\t * 32-bit range\n+\t\t\t */\n+\t\t\tranges = <0x00000000 0x0000033f 0x00000000 0x80000000\n+\t\t\t\t  0x80000000 0x0000033f 0x80000000 0x80000000>;\n+\t\t\tclock-frequency = <100000000>;\n+\n+\t\t\tRGMII0: emac-rgmii-wol@50004 {\n+\t\t\t\tcompatible = \"ibm,rgmii-wol-476gtr\", \"ibm,rgmii-wol\";\n+\t\t\t\treg = <0x50004 0x00000008>;\n+\t\t\t\thas-mdio;\n+\t\t\t};\n+\n+\t\t\tEMAC0: ethernet@30000 {\n+\t\t\t\tdevice_type = \"network\";\n+\t\t\t\tcompatible = \"ibm,emac-476gtr\", \"ibm,emac4sync\";\n+\t\t\t\tinterrupt-parent = <&EMAC0>;\n+\t\t\t\tinterrupts = <0x0 0x1>;\n+\t\t\t\t#interrupt-cells = <1>;\n+\t\t\t\t#address-cells = <0>;\n+\t\t\t\t#size-cells = <0>;\n+\t\t\t\tinterrupt-map = </*Status*/ 0x0 &MPIC 81 0x4\n+\t\t\t\t\t\t /*Wake*/   0x1 &MPIC 82 0x4>;\n+\t\t\t\treg = <0x30000 0x78>;\n+\n+\t\t\t\t/* local-mac-address will normally be added by\n+\t\t\t\t * the wrapper. If your device doesn't support\n+\t\t\t\t * passing data to the wrapper (in the form\n+\t\t\t\t * local-mac-addr=<hwaddr>) then you will need\n+\t\t\t\t * to set it manually here. */\n+\t\t\t\t//local-mac-address = [000000000000];\n+\n+\t\t\t\tmal-device = <&MAL0>;\n+\t\t\t\tmal-tx-channel = <0>;\n+\t\t\t\tmal-rx-channel = <0>;\n+\t\t\t\tcell-index = <0>;\n+\t\t\t\tmax-frame-size = <9000>;\n+\t\t\t\trx-fifo-size = <4096>;\n+\t\t\t\ttx-fifo-size = <2048>;\n+\t\t\t\trx-fifo-size-gige = <16384>;\n+\t\t\t\tphy-mode = \"rgmii\";\n+\t\t\t\tphy-map = <0x00000000>;\n+\t\t\t\trgmii-wol-device = <&RGMII0>;\n+\t\t\t\thas-inverted-stacr-oc;\n+\t\t\t\thas-new-stacr-staopc;\n+\t\t\t};\n+\n+\t\t\tUART0: serial@10000 {\n+\t\t\t\tdevice_type = \"serial\";\n+\t\t\t\tcompatible = \"ns16750\", \"ns16550\";\n+\t\t\t\treg = <0x10000 0x00000008>;\n+\t\t\t\tvirtual-reg = <0xe8010000>;\n+\t\t\t\tclock-frequency = <1851851>;\n+\t\t\t\tcurrent-speed = <38400>;\n+\t\t\t\tinterrupt-parent = <&MPIC>;\n+\t\t\t\tinterrupts = <39 2>;\n+\t\t\t};\n+\n+\t\t\tIIC0: i2c@00000000 {\n+\t\t\t\tcompatible = \"ibm,iic-476gtr\", \"ibm,iic\";\n+\t\t\t\treg = <0x0 0x00000020>;\n+\t\t\t\tinterrupt-parent = <&MPIC>;\n+\t\t\t\tinterrupts = <37 2>;\n+\t\t\t\t#address-cells = <1>;\n+\t\t\t\t#size-cells = <0>;\n+\t\t\t\trtc@68 {\n+\t\t\t\t\tcompatible = \"stm,m41t80\", \"m41st85\";\n+\t\t\t\t\treg = <0x68>;\n+\t\t\t\t};\n+\t\t\t};\n+\n+\t\t\tIIC1: i2c@00000100 {\n+\t\t\t\tcompatible = \"ibm,iic-476gtr\", \"ibm,iic\";\n+\t\t\t\treg = <0x100 0x00000020>;\n+\t\t\t\tinterrupt-parent = <&MPIC>;\n+\t\t\t\tinterrupts = <38 2>;\n+\t\t\t\t#address-cells = <1>;\n+\t\t\t\t#size-cells = <0>;\n+\t\t\t\tavr@58 {\n+\t\t\t\t\tcompatible = \"ibm,akebono-avr\";\n+\t\t\t\t\treg = <0x58>;\n+\t\t\t\t};\n+\t\t\t};\n+\n+\t\t\tFPGA0: fpga@ebc00000 {\n+\t\t\t\tcompatible = \"ibm,akebono-fpga\";\n+\t\t\t\treg = <0xebc00000 0x8>;\n+\t\t\t};\n+\t\t};\n+\n+\t\tPCIE0: pciex@10100000000 {\n+\t\t\tdevice_type = \"pci\";\n+\t\t\t#interrupt-cells = <1>;\n+\t\t\t#size-cells = <2>;\n+\t\t\t#address-cells = <3>;\n+\t\t\tcompatible = \"ibm,plb-pciex-476gtr\", \"ibm,plb-pciex\";\n+\t\t\tprimary;\n+\t\t\tport = <0x0>; /* port number */\n+\t\t\treg = <0x00000101 0x00000000 0x0 0x10000000\t       /* Config space access */\n+\t\t\t       0x00000100 0x00000000 0x0 0x00001000>;\t/* UTL Registers space access */\n+\t\t\tdcr-reg = <0xc0 0x20>;\n+\n+//                                pci_space  < pci_addr          > < cpu_addr          > < size       >\n+\t\t\tranges = <0x02000000 0x00000000 0x80000000 0x00000110 0x80000000 0x0 0x80000000\n+\t\t\t          0x01000000 0x0        0x0        0x00000140 0x0        0x0 0x00010000>;\n+\n+\t\t\t/* Inbound starting at 0 to memsize filled in by zImage */\n+\t\t\tdma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x0>;\n+\n+\t\t\t/* This drives busses 0 to 0xf */\n+\t\t\tbus-range = <0x0 0xf>;\n+\n+\t\t\t/* Legacy interrupts (note the weird polarity, the bridge seems\n+\t\t\t * to invert PCIe legacy interrupts).\n+\t\t\t * We are de-swizzling here because the numbers are actually for\n+\t\t\t * port of the root complex virtual P2P bridge. But I want\n+\t\t\t * to avoid putting a node for it in the tree, so the numbers\n+\t\t\t * below are basically de-swizzled numbers.\n+\t\t\t * The real slot is on idsel 0, so the swizzling is 1:1\n+\t\t\t */\n+\t\t\tinterrupt-map-mask = <0x0 0x0 0x0 0x7>;\n+\t\t\tinterrupt-map = <\n+\t\t\t\t0x0 0x0 0x0 0x1 &MPIC 45 0x2 /* int A */\n+\t\t\t\t0x0 0x0 0x0 0x2 &MPIC 46 0x2 /* int B */\n+\t\t\t\t0x0 0x0 0x0 0x3 &MPIC 47 0x2 /* int C */\n+\t\t\t\t0x0 0x0 0x0 0x4 &MPIC 48 0x2 /* int D */>;\n+\t\t};\n+\n+\t\tPCIE1: pciex@20100000000 {\n+\t\t\tdevice_type = \"pci\";\n+\t\t\t#interrupt-cells = <1>;\n+\t\t\t#size-cells = <2>;\n+\t\t\t#address-cells = <3>;\n+\t\t\tcompatible = \"ibm,plb-pciex-476gtr\", \"ibm,plb-pciex\";\n+\t\t\tprimary;\n+\t\t\tport = <0x1>; /* port number */\n+\t\t\treg = <0x00000201 0x00000000 0x0 0x10000000\t       /* Config space access */\n+\t\t\t       0x00000200 0x00000000 0x0 0x00001000>;\t/* UTL Registers space access */\n+\t\t\tdcr-reg = <0x100 0x20>;\n+\n+//                                pci_space  < pci_addr          > < cpu_addr          > < size       >\n+\t\t\tranges = <0x02000000 0x00000000 0x80000000 0x00000210 0x80000000 0x0 0x80000000\n+\t\t\t          0x01000000 0x0        0x0        0x00000240 0x0        0x0 0x00010000>;\n+\n+\t\t\t/* Inbound starting at 0 to memsize filled in by zImage */\n+\t\t\tdma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x0>;\n+\n+\t\t\t/* This drives busses 0 to 0xf */\n+\t\t\tbus-range = <0x0 0xf>;\n+\n+\t\t\t/* Legacy interrupts (note the weird polarity, the bridge seems\n+\t\t\t * to invert PCIe legacy interrupts).\n+\t\t\t * We are de-swizzling here because the numbers are actually for\n+\t\t\t * port of the root complex virtual P2P bridge. But I want\n+\t\t\t * to avoid putting a node for it in the tree, so the numbers\n+\t\t\t * below are basically de-swizzled numbers.\n+\t\t\t * The real slot is on idsel 0, so the swizzling is 1:1\n+\t\t\t */\n+\t\t\tinterrupt-map-mask = <0x0 0x0 0x0 0x7>;\n+\t\t\tinterrupt-map = <\n+\t\t\t\t0x0 0x0 0x0 0x1 &MPIC 53 0x2 /* int A */\n+\t\t\t\t0x0 0x0 0x0 0x2 &MPIC 54 0x2 /* int B */\n+\t\t\t\t0x0 0x0 0x0 0x3 &MPIC 55 0x2 /* int C */\n+\t\t\t\t0x0 0x0 0x0 0x4 &MPIC 56 0x2 /* int D */>;\n+\t\t};\n+\n+\t\tPCIE2: pciex@18100000000 {\n+\t\t\tdevice_type = \"pci\";\n+\t\t\t#interrupt-cells = <1>;\n+\t\t\t#size-cells = <2>;\n+\t\t\t#address-cells = <3>;\n+\t\t\tcompatible = \"ibm,plb-pciex-476gtr\", \"ibm,plb-pciex\";\n+\t\t\tprimary;\n+\t\t\tport = <0x2>; /* port number */\n+\t\t\treg = <0x00000181 0x00000000 0x0 0x10000000\t       /* Config space access */\n+\t\t\t       0x00000180 0x00000000 0x0 0x00001000>;\t/* UTL Registers space access */\n+\t\t\tdcr-reg = <0xe0 0x20>;\n+\n+//                                pci_space  < pci_addr          > < cpu_addr          > < size       >\n+\t\t\tranges = <0x02000000 0x00000000 0x80000000 0x00000190 0x80000000 0x0 0x80000000\n+\t\t\t          0x01000000 0x0        0x0        0x000001c0 0x0        0x0 0x00010000>;\n+\n+\t\t\t/* Inbound starting at 0 to memsize filled in by zImage */\n+\t\t\tdma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x0>;\n+\n+\t\t\t/* This drives busses 0 to 0xf */\n+\t\t\tbus-range = <0x0 0xf>;\n+\n+\t\t\t/* Legacy interrupts (note the weird polarity, the bridge seems\n+\t\t\t * to invert PCIe legacy interrupts).\n+\t\t\t * We are de-swizzling here because the numbers are actually for\n+\t\t\t * port of the root complex virtual P2P bridge. But I want\n+\t\t\t * to avoid putting a node for it in the tree, so the numbers\n+\t\t\t * below are basically de-swizzled numbers.\n+\t\t\t * The real slot is on idsel 0, so the swizzling is 1:1\n+\t\t\t */\n+\t\t\tinterrupt-map-mask = <0x0 0x0 0x0 0x7>;\n+\t\t\tinterrupt-map = <\n+\t\t\t\t0x0 0x0 0x0 0x1 &MPIC 61 0x2 /* int A */\n+\t\t\t\t0x0 0x0 0x0 0x2 &MPIC 62 0x2 /* int B */\n+\t\t\t\t0x0 0x0 0x0 0x3 &MPIC 63 0x2 /* int C */\n+\t\t\t\t0x0 0x0 0x0 0x4 &MPIC 64 0x2 /* int D */>;\n+\t\t};\n+\n+\t\tPCIE3: pciex@28100000000 {\n+\t\t\tdevice_type = \"pci\";\n+\t\t\t#interrupt-cells = <1>;\n+\t\t\t#size-cells = <2>;\n+\t\t\t#address-cells = <3>;\n+\t\t\tcompatible = \"ibm,plb-pciex-476gtr\", \"ibm,plb-pciex\";\n+\t\t\tprimary;\n+\t\t\tport = <0x3>; /* port number */\n+\t\t\treg = <0x00000281 0x00000000 0x0 0x10000000\t       /* Config space access */\n+\t\t\t       0x00000280 0x00000000 0x0 0x00001000>;\t/* UTL Registers space access */\n+\t\t\tdcr-reg = <0x120 0x20>;\n+\n+//                                pci_space  < pci_addr          > < cpu_addr          > < size       >\n+\t\t\tranges = <0x02000000 0x00000000 0x80000000 0x00000290 0x80000000 0x0 0x80000000\n+\t\t\t          0x01000000 0x0        0x0        0x000002c0 0x0        0x0 0x00010000>;\n+\n+\t\t\t/* Inbound starting at 0 to memsize filled in by zImage */\n+\t\t\tdma-ranges = <0x42000000 0x0 0x0 0x0 0x0 0x0 0x0>;\n+\n+\t\t\t/* This drives busses 0 to 0xf */\n+\t\t\tbus-range = <0x0 0xf>;\n+\n+\t\t\t/* Legacy interrupts (note the weird polarity, the bridge seems\n+\t\t\t * to invert PCIe legacy interrupts).\n+\t\t\t * We are de-swizzling here because the numbers are actually for\n+\t\t\t * port of the root complex virtual P2P bridge. But I want\n+\t\t\t * to avoid putting a node for it in the tree, so the numbers\n+\t\t\t * below are basically de-swizzled numbers.\n+\t\t\t * The real slot is on idsel 0, so the swizzling is 1:1\n+\t\t\t */\n+\t\t\tinterrupt-map-mask = <0x0 0x0 0x0 0x7>;\n+\t\t\tinterrupt-map = <\n+\t\t\t\t0x0 0x0 0x0 0x1 &MPIC 69 0x2 /* int A */\n+\t\t\t\t0x0 0x0 0x0 0x2 &MPIC 70 0x2 /* int B */\n+\t\t\t\t0x0 0x0 0x0 0x3 &MPIC 71 0x2 /* int C */\n+\t\t\t\t0x0 0x0 0x0 0x4 &MPIC 72 0x2 /* int D */>;\n+\t\t};\n+\t};\n+\n+\tchosen {\n+\t\tlinux,stdout-path = &UART0;\n+\t};\n+};\ndiff --git a/arch/powerpc/boot/treeboot-akebono.c b/arch/powerpc/boot/treeboot-akebono.c\nnew file mode 100644\nindex 0000000..4bc6f8d\n--- /dev/null\n+++ b/arch/powerpc/boot/treeboot-akebono.c\n@@ -0,0 +1,179 @@\n+/*\n+ * Copyright © 2013 Tony Breeds IBM Corporation\n+ * Copyright © 2013 Alistair Popple IBM Corporation\n+ *\n+ * Based on earlier code:\n+ *   Copyright (C) Paul Mackerras 1997.\n+ *\n+ *   Matt Porter <mporter@kernel.crashing.org>\n+ *   Copyright 2002-2005 MontaVista Software Inc.\n+ *\n+ *   Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>\n+ *   Copyright (c) 2003, 2004 Zultys Technologies\n+ *\n+ *    Copyright 2007 David Gibson, IBM Corporation.\n+ *    Copyright 2010 Ben. Herrenschmidt, IBM Corporation.\n+ *    Copyright © 2011 David Kleikamp IBM Corporation\n+ *\n+ * This program is free software; you can redistribute it and/or\n+ * modify it under the terms of the GNU General Public License\n+ * as published by the Free Software Foundation; either version\n+ * 2 of the License, or (at your option) any later version.\n+ */\n+#include <stdarg.h>\n+#include <stddef.h>\n+#include \"types.h\"\n+#include \"elf.h\"\n+#include \"string.h\"\n+#include \"stdlib.h\"\n+#include \"stdio.h\"\n+#include \"page.h\"\n+#include \"ops.h\"\n+#include \"reg.h\"\n+#include \"io.h\"\n+#include \"dcr.h\"\n+#include \"4xx.h\"\n+#include \"44x.h\"\n+#include \"libfdt.h\"\n+\n+BSS_STACK(4096);\n+\n+#define MAX_RANKS\t0x4\n+#define DDR3_MR0CF\t0x80010011U\n+#define CCTL0_MCO2\t0x8000080FU\n+#define CCTL0_MCO3\t0x80000810U\n+#define CCTL0_MCO4\t0x80000811U\n+#define CCTL0_MCO5\t0x80000812U\n+#define CCTL0_MCO6\t0x80000813U\n+\n+static unsigned long long ibm_akebono_memsize;\n+static long long unsigned mac_addr;\n+\n+static unsigned long long ibm_akebono_detect_memsize(void)\n+{\n+\tu32 reg;\n+\tunsigned i;\n+\tunsigned long long memsize = 0;\n+\n+\tfor (i = 0; i < MAX_RANKS; i++) {\n+\t\treg = mfdcrx(DDR3_MR0CF + i);\n+\n+\t\tif (!(reg & 1))\n+\t\t\tcontinue;\n+\n+\t\treg &= 0x0000f000;\n+\t\treg >>= 12;\n+\t\tmemsize += (0x800000ULL << reg);\n+\t}\n+\n+\treturn memsize;\n+}\n+\n+static void ibm_akebono_fixups(void)\n+{\n+\tvoid *emac;\n+\tu32 reg;\n+\tvoid *devp = finddevice(\"/\");\n+\tu32 dma_ranges[7];\n+\n+\tdt_fixup_memory(0x0ULL,  ibm_akebono_memsize);\n+\n+\twhile ((devp = find_node_by_devtype(devp, \"pci\"))) {\n+\t\tif (getprop(devp, \"dma-ranges\", dma_ranges,\n+\t\t\t    sizeof(dma_ranges)) < 0) {\n+\t\t\tprintf(\"%s: Failed to get dma-ranges\\r\\n\", __func__);\n+\t\t\tcontinue;\n+\t\t}\n+\n+\t\tdma_ranges[5] = ibm_akebono_memsize >> 32;\n+\t\tdma_ranges[6] = ibm_akebono_memsize & 0xffffffffUL;\n+\n+\t\tsetprop(devp, \"dma-ranges\", dma_ranges, sizeof(dma_ranges));\n+\t}\n+\n+\t/* Fixup the SD timeout frequency */\n+\tmtdcrx(CCTL0_MCO4, 0x1);\n+\n+\t/* Disable SD high-speed mode (which seems to be broken) */\n+\treg = mfdcrx(CCTL0_MCO2) & ~0x2;\n+\tmtdcrx(CCTL0_MCO2, reg);\n+\n+\t/* Set the MAC address */\n+\temac = finddevice(\"/plb/opb/ethernet\");\n+\tif (emac > 0) {\n+\t\tif (mac_addr)\n+\t\t\tsetprop(emac, \"local-mac-address\",\n+\t\t\t\t((u8 *) &mac_addr) + 2 , 6);\n+\t}\n+}\n+\n+/* FIXME */\n+#define SPRN_PIR\t0x11E\t/* Processor Indentification Register */\n+#define USERDATA_LEN\t256\t/* Length of userdata passed in by PIBS */\n+void platform_init(char *userdata)\n+{\n+\tunsigned long end_of_ram, avail_ram;\n+\tu32 pir_reg;\n+\tint node, size;\n+\tconst u32 *timebase;\n+\tint len, i, userdata_len;\n+\tchar *end;\n+\n+\tuserdata[USERDATA_LEN - 1] = '\\0';\n+\tuserdata_len = strlen(userdata);\n+\tfor (i = 0; i < userdata_len; i++) {\n+\t\tif (strncmp(&userdata[i], \"local-mac-addr=\", 15) == 0) {\n+\t\t\tif (i > 0 && userdata[i - 1] != ' ') {\n+\t\t\t\t/* We've only found a substring ending\n+\t\t\t\t * with local-mac-addr so this isn't\n+\t\t\t\t * our mac address. */\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\n+\t\t\tmac_addr = strtoull(&userdata[i + 15], &end, 16);\n+\n+\t\t\t/* Remove the \"local-mac-addr=<...>\" from the kernel\n+\t\t\t * command line, including the tailing space if\n+\t\t\t * present. */\n+\t\t\tif (*end == ' ')\n+\t\t\t\tend++;\n+\n+\t\t\tlen = ((int) end) - ((int) &userdata[i]);\n+\t\t\tmemmove(&userdata[i], end,\n+\t\t\t\tuserdata_len - (len + i) + 1);\n+\t\t\tbreak;\n+\t\t}\n+\t}\n+\n+\tloader_info.cmdline = userdata;\n+\tloader_info.cmdline_len = 256;\n+\n+\tibm_akebono_memsize = ibm_akebono_detect_memsize();\n+\tif (ibm_akebono_memsize >> 32)\n+\t\tend_of_ram = ~0UL;\n+\telse\n+\t\tend_of_ram = ibm_akebono_memsize;\n+\tavail_ram = end_of_ram - (unsigned long)_end;\n+\n+\tsimple_alloc_init(_end, avail_ram, 128, 64);\n+\tplatform_ops.fixups = ibm_akebono_fixups;\n+\tplatform_ops.exit = ibm44x_dbcr_reset;\n+\tpir_reg = mfspr(SPRN_PIR);\n+\n+\t/* Make sure FDT blob is sane */\n+\tif (fdt_check_header(_dtb_start) != 0)\n+\t\tfatal(\"Invalid device tree blob\\n\");\n+\n+\tnode = fdt_node_offset_by_prop_value(_dtb_start, -1, \"device_type\",\n+\t\t\t\t\t     \"cpu\", sizeof(\"cpu\"));\n+\tif (!node)\n+\t\tfatal(\"Cannot find cpu node\\n\");\n+\ttimebase = fdt_getprop(_dtb_start, node, \"timebase-frequency\", &size);\n+\tif (timebase && (size == 4))\n+\t\ttimebase_period_ns = 1000000000 / *timebase;\n+\n+\tfdt_set_boot_cpuid_phys(_dtb_start, pir_reg);\n+\tfdt_init(_dtb_start);\n+\n+\tserial_console_init();\n+}\ndiff --git a/arch/powerpc/boot/wrapper b/arch/powerpc/boot/wrapper\nindex cd7af84..1260819 100755\n--- a/arch/powerpc/boot/wrapper\n+++ b/arch/powerpc/boot/wrapper\n@@ -249,6 +249,9 @@ gamecube|wii)\n treeboot-currituck)\n     link_address='0x1000000'\n     ;;\n+treeboot-akebono)\n+    link_address='0x1000000'\n+    ;;\n treeboot-iss4xx-mpic)\n     platformo=\"$object/treeboot-iss4xx.o\"\n     ;;\ndiff --git a/arch/powerpc/configs/44x/akebono_defconfig b/arch/powerpc/configs/44x/akebono_defconfig\nnew file mode 100644\nindex 0000000..7e2530c\n--- /dev/null\n+++ b/arch/powerpc/configs/44x/akebono_defconfig\n@@ -0,0 +1,148 @@\n+CONFIG_44x=y\n+CONFIG_SMP=y\n+CONFIG_SYSVIPC=y\n+CONFIG_POSIX_MQUEUE=y\n+CONFIG_LOG_BUF_SHIFT=14\n+CONFIG_BLK_DEV_INITRD=y\n+CONFIG_RD_BZIP2=y\n+CONFIG_RD_LZMA=y\n+CONFIG_RD_XZ=y\n+CONFIG_EXPERT=y\n+CONFIG_KALLSYMS_ALL=y\n+# CONFIG_SLUB_CPU_PARTIAL is not set\n+CONFIG_PROFILING=y\n+CONFIG_OPROFILE=y\n+CONFIG_MODULES=y\n+CONFIG_MODULE_UNLOAD=y\n+# CONFIG_BLK_DEV_BSG is not set\n+# CONFIG_POWERNV_MSI is not set\n+CONFIG_PPC_47x=y\n+# CONFIG_EBONY is not set\n+CONFIG_AKEBONO=y\n+CONFIG_HIGHMEM=y\n+CONFIG_HZ_100=y\n+CONFIG_IRQ_ALL_CPUS=y\n+# CONFIG_COMPACTION is not set\n+CONFIG_CMDLINE_BOOL=y\n+CONFIG_CMDLINE=\"\"\n+# CONFIG_SUSPEND is not set\n+CONFIG_PCI_MSI=y\n+CONFIG_NET=y\n+CONFIG_PACKET=y\n+CONFIG_UNIX=y\n+CONFIG_INET=y\n+CONFIG_IP_PNP=y\n+CONFIG_IP_PNP_DHCP=y\n+CONFIG_IP_PNP_BOOTP=y\n+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set\n+# CONFIG_INET_XFRM_MODE_TUNNEL is not set\n+# CONFIG_INET_XFRM_MODE_BEET is not set\n+# CONFIG_INET_LRO is not set\n+# CONFIG_IPV6 is not set\n+CONFIG_UEVENT_HELPER_PATH=\"/sbin/hotplug\"\n+CONFIG_DEVTMPFS=y\n+CONFIG_DEVTMPFS_MOUNT=y\n+CONFIG_CONNECTOR=y\n+CONFIG_MTD=y\n+CONFIG_MTD_BLOCK=y\n+CONFIG_MTD_JEDECPROBE=y\n+CONFIG_MTD_CFI_AMDSTD=y\n+CONFIG_MTD_PHYSMAP_OF=y\n+CONFIG_PROC_DEVICETREE=y\n+CONFIG_BLK_DEV_RAM=y\n+CONFIG_BLK_DEV_RAM_SIZE=35000\n+# CONFIG_SCSI_PROC_FS is not set\n+CONFIG_BLK_DEV_SD=y\n+# CONFIG_SCSI_LOWLEVEL is not set\n+# CONFIG_SATA_PMP is not set\n+# CONFIG_ATA_SFF is not set\n+# CONFIG_NET_VENDOR_3COM is not set\n+# CONFIG_NET_VENDOR_ADAPTEC is not set\n+# CONFIG_NET_VENDOR_ALTEON is not set\n+# CONFIG_NET_VENDOR_AMD is not set\n+# CONFIG_NET_VENDOR_ARC is not set\n+# CONFIG_NET_VENDOR_ATHEROS is not set\n+# CONFIG_NET_CADENCE is not set\n+# CONFIG_NET_VENDOR_BROADCOM is not set\n+# CONFIG_NET_VENDOR_BROCADE is not set\n+# CONFIG_NET_VENDOR_CHELSIO is not set\n+# CONFIG_NET_VENDOR_CISCO is not set\n+# CONFIG_NET_VENDOR_DEC is not set\n+# CONFIG_NET_VENDOR_DLINK is not set\n+# CONFIG_NET_VENDOR_EMULEX is not set\n+# CONFIG_NET_VENDOR_EXAR is not set\n+# CONFIG_NET_VENDOR_HP is not set\n+CONFIG_IBM_EMAC=y\n+# CONFIG_NET_VENDOR_MARVELL is not set\n+# CONFIG_NET_VENDOR_MELLANOX is not set\n+# CONFIG_NET_VENDOR_MICREL is not set\n+# CONFIG_NET_VENDOR_MYRI is not set\n+# CONFIG_NET_VENDOR_NATSEMI is not set\n+# CONFIG_NET_VENDOR_NVIDIA is not set\n+# CONFIG_NET_VENDOR_OKI is not set\n+# CONFIG_NET_VENDOR_QLOGIC is not set\n+# CONFIG_NET_VENDOR_REALTEK is not set\n+# CONFIG_NET_VENDOR_RDC is not set\n+# CONFIG_NET_VENDOR_SEEQ is not set\n+# CONFIG_NET_VENDOR_SILAN is not set\n+# CONFIG_NET_VENDOR_SIS is not set\n+# CONFIG_NET_VENDOR_SMSC is not set\n+# CONFIG_NET_VENDOR_STMICRO is not set\n+# CONFIG_NET_VENDOR_SUN is not set\n+# CONFIG_NET_VENDOR_TEHUTI is not set\n+# CONFIG_NET_VENDOR_TI is not set\n+# CONFIG_NET_VENDOR_VIA is not set\n+# CONFIG_NET_VENDOR_WIZNET is not set\n+# CONFIG_NET_VENDOR_XILINX is not set\n+# CONFIG_KEYBOARD_ATKBD is not set\n+# CONFIG_MOUSE_PS2 is not set\n+# CONFIG_SERIO is not set\n+# CONFIG_VT is not set\n+CONFIG_SERIAL_8250=y\n+# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set\n+CONFIG_SERIAL_8250_CONSOLE=y\n+CONFIG_SERIAL_8250_EXTENDED=y\n+CONFIG_SERIAL_8250_SHARE_IRQ=y\n+CONFIG_SERIAL_OF_PLATFORM=y\n+# CONFIG_HW_RANDOM is not set\n+CONFIG_I2C_CHARDEV=y\n+# CONFIG_HWMON is not set\n+CONFIG_THERMAL=y\n+# CONFIG_USB_DEFAULT_PERSIST is not set\n+CONFIG_USB_EHCI_HCD=y\n+CONFIG_USB_OHCI_HCD=y\n+# CONFIG_USB_OHCI_HCD_PCI is not set\n+CONFIG_USB_STORAGE=y\n+CONFIG_MMC=y\n+CONFIG_RTC_CLASS=y\n+CONFIG_RTC_DRV_M41T80=y\n+CONFIG_EXT2_FS=y\n+CONFIG_EXT3_FS=y\n+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set\n+CONFIG_EXT3_FS_POSIX_ACL=y\n+CONFIG_EXT3_FS_SECURITY=y\n+# CONFIG_DNOTIFY is not set\n+# CONFIG_INOTIFY_USER is not set\n+CONFIG_VFAT_FS=y\n+CONFIG_PROC_KCORE=y\n+CONFIG_TMPFS=y\n+CONFIG_CRAMFS=y\n+# CONFIG_NETWORK_FILESYSTEMS is not set\n+CONFIG_NLS_DEFAULT=\"n\"\n+CONFIG_NLS_CODEPAGE_437=y\n+CONFIG_NLS_ISO8859_1=y\n+CONFIG_DEBUG_INFO=y\n+CONFIG_DEBUG_FS=y\n+CONFIG_MAGIC_SYSRQ=y\n+CONFIG_DETECT_HUNG_TASK=y\n+CONFIG_XMON=y\n+CONFIG_XMON_DEFAULT=y\n+CONFIG_PPC_EARLY_DEBUG=y\n+CONFIG_PPC_EARLY_DEBUG_44x_PHYSLOW=0x00010000\n+CONFIG_PPC_EARLY_DEBUG_44x_PHYSHIGH=0x33f\n+CONFIG_CRYPTO_PCBC=y\n+CONFIG_CRYPTO_MD5=y\n+CONFIG_CRYPTO_SHA1_PPC=y\n+CONFIG_CRYPTO_DES=y\n+# CONFIG_CRYPTO_ANSI_CPRNG is not set\n+# CONFIG_CRYPTO_HW is not set\ndiff --git a/arch/powerpc/platforms/44x/Kconfig b/arch/powerpc/platforms/44x/Kconfig\nindex 156d474..9d20800 100644\n--- a/arch/powerpc/platforms/44x/Kconfig\n+++ b/arch/powerpc/platforms/44x/Kconfig\n@@ -199,6 +199,32 @@ config CURRITUCK\n \thelp\n \t  This option enables support for the IBM Currituck (476fpe) evaluation board\n \n+config AKEBONO\n+\tbool \"IBM Akebono (476gtr) Support\"\n+\tdepends on PPC_47x\n+\tdefault n\n+\tselect SWIOTLB\n+\tselect 476\n+\tselect PPC4xx_PCI_EXPRESS\n+\tselect I2C\n+\tselect I2C_IBM_IIC\n+\tselect NETDEVICES\n+\tselect ETHERNET\n+\tselect NET_VENDOR_IBM\n+\tselect IBM_EMAC_EMAC4\n+\tselect IBM_EMAC_RGMII_WOL\n+\tselect USB\n+\tselect USB_OHCI_HCD_PLATFORM\n+\tselect USB_EHCI_HCD_PLATFORM\n+\tselect MMC_SDHCI\n+\tselect MMC_SDHCI_PLTFM\n+\tselect MMC_SDHCI_OF_476GTR\n+\tselect ATA\n+\tselect SATA_AHCI_PLATFORM\n+\thelp\n+\t  This option enables support for the IBM Akebono (476gtr) evaluation board\n+\n+\n config ICON\n \tbool \"Icon\"\n \tdepends on 44x\ndiff --git a/arch/powerpc/platforms/44x/Makefile b/arch/powerpc/platforms/44x/Makefile\nindex f896b89..26d35b5 100644\n--- a/arch/powerpc/platforms/44x/Makefile\n+++ b/arch/powerpc/platforms/44x/Makefile\n@@ -11,3 +11,4 @@ obj-$(CONFIG_XILINX_ML510) += virtex_ml510.o\n obj-$(CONFIG_ISS4xx)\t+= iss4xx.o\n obj-$(CONFIG_CANYONLANDS)+= canyonlands.o\n obj-$(CONFIG_CURRITUCK)\t+= ppc476.o\n+obj-$(CONFIG_AKEBONO)\t+= ppc476.o\ndiff --git a/arch/powerpc/platforms/44x/ppc476.c b/arch/powerpc/platforms/44x/ppc476.c\nindex c6c5a6f..33986c1 100644\n--- a/arch/powerpc/platforms/44x/ppc476.c\n+++ b/arch/powerpc/platforms/44x/ppc476.c\n@@ -1,7 +1,8 @@\n /*\n  * PowerPC 476FPE board specific routines\n  *\n- * Copyright © 2011 Tony Breeds IBM Corporation\n+ * Copyright © 2013 Tony Breeds IBM Corporation\n+ * Copyright © 2013 Alistair Popple IBM Corporation\n  *\n  * Based on earlier code:\n  *    Matt Porter <mporter@kernel.crashing.org>\n@@ -35,6 +36,7 @@\n #include <asm/mmu.h>\n \n #include <linux/pci.h>\n+#include <linux/i2c.h>\n \n static struct of_device_id ppc47x_of_bus[] __initdata = {\n \t{ .compatible = \"ibm,plb4\", },\n@@ -55,15 +57,69 @@ static void quirk_ppc_currituck_usb_fixup(struct pci_dev *dev)\n }\n DECLARE_PCI_FIXUP_HEADER(0x1033, 0x0035, quirk_ppc_currituck_usb_fixup);\n \n+/* Akebono has an AVR microcontroller attached to the I2C bus\n+ * which is used to power off/reset the system. */\n+\n+/* AVR I2C Commands */\n+#define AVR_PWRCTL_CMD (0x26)\n+\n+/* Flags for the power control I2C commands */\n+#define AVR_PWRCTL_PWROFF (0x01)\n+#define AVR_PWRCTL_RESET (0x02)\n+\n+static struct i2c_client *avr_i2c_client;\n+static void avr_halt_system(int pwrctl_flags)\n+{\n+\t/* Request the AVR to reset the system */\n+\ti2c_smbus_write_byte_data(avr_i2c_client,\n+\t\t\t\t  AVR_PWRCTL_CMD, pwrctl_flags);\n+\n+\t/* Wait for system to be reset */\n+\twhile (1)\n+\t\t;\n+}\n+\n+static void avr_power_off_system(void)\n+{\n+\tavr_halt_system(AVR_PWRCTL_PWROFF);\n+}\n+\n+static void avr_reset_system(char *cmd)\n+{\n+\tavr_halt_system(AVR_PWRCTL_RESET);\n+}\n+\n+static int avr_probe(struct i2c_client *client,\n+\t\t\t    const struct i2c_device_id *id)\n+{\n+\tavr_i2c_client = client;\n+\tppc_md.restart = avr_reset_system;\n+\tppc_md.power_off = avr_power_off_system;\n+\treturn 0;\n+}\n+\n+static const struct i2c_device_id avr_id[] = {\n+\t{ \"akebono-avr\", 0 },\n+\t{ }\n+};\n+\n+static struct i2c_driver avr_driver = {\n+\t.driver = {\n+\t\t.name = \"akebono-avr\",\n+\t},\n+\t.probe = avr_probe,\n+\t.id_table = avr_id,\n+};\n+\n static int __init ppc47x_device_probe(void)\n {\n+\ti2c_add_driver(&avr_driver);\n \tof_platform_bus_probe(NULL, ppc47x_of_bus, NULL);\n \n \treturn 0;\n }\n machine_device_initcall(ppc47x, ppc47x_device_probe);\n \n-/* We can have either UICs or MPICs */\n static void __init ppc47x_init_irq(void)\n {\n \tstruct device_node *np;\n@@ -163,37 +219,30 @@ static void __init ppc47x_setup_arch(void)\n \tppc47x_smp_init();\n }\n \n-/*\n- * Called very early, MMU is off, device-tree isn't unflattened\n- */\n-static int __init ppc47x_probe(void)\n-{\n-\tunsigned long root = of_get_flat_dt_root();\n-\n-\tif (!of_flat_dt_is_compatible(root, \"ibm,currituck\"))\n-\t\treturn 0;\n-\n-\treturn 1;\n-}\n-\n static int board_rev = -1;\n static int __init ppc47x_get_board_rev(void)\n {\n-\tu8 fpga_reg0;\n-\tvoid *fpga;\n-\tstruct device_node *np;\n+\tint reg;\n+\tu8 *fpga;\n+\tstruct device_node *np = NULL;\n+\n+\tif (of_machine_is_compatible(\"ibm,currituck\")) {\n+\t\tnp = of_find_compatible_node(NULL, NULL, \"ibm,currituck-fpga\");\n+\t\treg = 0;\n+\t} else if (of_machine_is_compatible(\"ibm,akebono\")) {\n+\t\tnp = of_find_compatible_node(NULL, NULL, \"ibm,akebono-fpga\");\n+\t\treg = 2;\n+\t}\n \n-\tnp = of_find_compatible_node(NULL, NULL, \"ibm,currituck-fpga\");\n \tif (!np)\n \t\tgoto fail;\n \n-\tfpga = of_iomap(np, 0);\n+\tfpga = (u8 *) of_iomap(np, 0);\n \tof_node_put(np);\n \tif (!fpga)\n \t\tgoto fail;\n \n-\tfpga_reg0 = ioread8(fpga);\n-\tboard_rev = fpga_reg0 & 0x03;\n+\tboard_rev = ioread8(fpga + reg) & 0x03;\n \tpr_info(\"%s: Found board revision %d\\n\", __func__, board_rev);\n \tiounmap(fpga);\n \treturn 0;\n@@ -221,13 +270,30 @@ static void ppc47x_pci_irq_fixup(struct pci_dev *dev)\n \t}\n }\n \n+/*\n+ * Called very early, MMU is off, device-tree isn't unflattened\n+ */\n+static int __init ppc47x_probe(void)\n+{\n+\tunsigned long root = of_get_flat_dt_root();\n+\n+\tif (of_flat_dt_is_compatible(root, \"ibm,akebono\"))\n+\t\treturn 1;\n+\n+\tif (of_flat_dt_is_compatible(root, \"ibm,currituck\")) {\n+\t\tppc_md.pci_irq_fixup = ppc47x_pci_irq_fixup;\n+\t\treturn 1;\n+\t}\n+\n+\treturn 0;\n+}\n+\n define_machine(ppc47x) {\n \t.name\t\t\t= \"PowerPC 47x\",\n \t.probe\t\t\t= ppc47x_probe,\n \t.progress\t\t= udbg_progress,\n \t.init_IRQ\t\t= ppc47x_init_irq,\n \t.setup_arch\t\t= ppc47x_setup_arch,\n-\t.pci_irq_fixup\t\t= ppc47x_pci_irq_fixup,\n \t.restart\t\t= ppc4xx_reset_system,\n \t.calibrate_decr\t\t= generic_calibrate_decr,\n };\ndiff --git a/arch/powerpc/sysdev/ppc4xx_pci.c b/arch/powerpc/sysdev/ppc4xx_pci.c\nindex dba5e4d..771a0ba 100644\n--- a/arch/powerpc/sysdev/ppc4xx_pci.c\n+++ b/arch/powerpc/sysdev/ppc4xx_pci.c\n@@ -1440,7 +1440,8 @@ static int __init ppc4xx_pciex_check_core_init(struct device_node *np)\n \t\tppc4xx_pciex_hwops = &ppc405ex_pcie_hwops;\n #endif\n #ifdef CONFIG_476\n-\tif (of_device_is_compatible(np, \"ibm,plb-pciex-476fpe\"))\n+\tif (of_device_is_compatible(np, \"ibm,plb-pciex-476fpe\")\n+\t\t|| of_device_is_compatible(np, \"ibm,plb-pciex-476gtr\"))\n \t\tppc4xx_pciex_hwops = &ppc476_pcie_hwops;\n #endif\n \tif (ppc4xx_pciex_hwops == NULL) {\n@@ -1751,7 +1752,10 @@ static int __init ppc4xx_setup_one_pciex_POM(struct ppc4xx_pciex_port\t*port,\n \t\t\tdcr_write(port->dcrs, DCRO_PEGPL_OMR1MSKL,\n \t\t\t\tsa | DCRO_PEGPL_460SX_OMR1MSKL_UOT\n \t\t\t\t\t| DCRO_PEGPL_OMRxMSKL_VAL);\n-\t\telse if (of_device_is_compatible(port->node, \"ibm,plb-pciex-476fpe\"))\n+\t\telse if (of_device_is_compatible(\n+\t\t\t\tport->node, \"ibm,plb-pciex-476fpe\") ||\n+\t\t\tof_device_is_compatible(\n+\t\t\t\tport->node, \"ibm,plb-pciex-476gtr\"))\n \t\t\tdcr_write(port->dcrs, DCRO_PEGPL_OMR1MSKL,\n \t\t\t\tsa | DCRO_PEGPL_476_OMR1MSKL_UOT\n \t\t\t\t\t| DCRO_PEGPL_OMRxMSKL_VAL);\n@@ -1881,7 +1885,10 @@ static void __init ppc4xx_configure_pciex_PIMs(struct ppc4xx_pciex_port *port,\n \t\t\tsa |= PCI_BASE_ADDRESS_MEM_PREFETCH;\n \n \t\tif (of_device_is_compatible(port->node, \"ibm,plb-pciex-460sx\") ||\n-\t\t    of_device_is_compatible(port->node, \"ibm,plb-pciex-476fpe\"))\n+\t\t    of_device_is_compatible(\n+\t\t\t    port->node, \"ibm,plb-pciex-476fpe\") ||\n+\t\t    of_device_is_compatible(\n+\t\t\t    port->node, \"ibm,plb-pciex-476gtr\"))\n \t\t\tsa |= PCI_BASE_ADDRESS_MEM_TYPE_64;\n \n \t\tout_le32(mbase + PECFG_BAR0HMPA, RES_TO_U32_HIGH(sa));\n",
    "prefixes": [
        "7/8"
    ]
}