summaryrefslogtreecommitdiff
path: root/recipes/linux/linux-2.6.29
diff options
context:
space:
mode:
authorLeon Woestenberg <leon@bigtee.(none)>2009-03-31 11:21:20 +0200
committerLeon Woestenberg <leon@bigtee.(none)>2009-03-31 11:21:20 +0200
commit0dcc23aad9e595ef0a760e3e7b161c04692ac5e7 (patch)
tree9b40a9b23f16fd72f8fbe31c5a8ab29d346605b6 /recipes/linux/linux-2.6.29
parent780c434192ad4c0bfe60386417e7b986767b31ce (diff)
linux-2.6.29: Added machine canyonlands (PowerPC 460EX).
Diffstat (limited to 'recipes/linux/linux-2.6.29')
-rw-r--r--recipes/linux/linux-2.6.29/canyonlands/0001-powerpc-4xx-Add-PPC4xx-PCIe-MSI-support.patch634
-rw-r--r--recipes/linux/linux-2.6.29/canyonlands/defconfig791
-rw-r--r--recipes/linux/linux-2.6.29/canyonlands/ppc4xx_pcie_payload.patch15
3 files changed, 1440 insertions, 0 deletions
diff --git a/recipes/linux/linux-2.6.29/canyonlands/0001-powerpc-4xx-Add-PPC4xx-PCIe-MSI-support.patch b/recipes/linux/linux-2.6.29/canyonlands/0001-powerpc-4xx-Add-PPC4xx-PCIe-MSI-support.patch
new file mode 100644
index 0000000000..177b5d54a1
--- /dev/null
+++ b/recipes/linux/linux-2.6.29/canyonlands/0001-powerpc-4xx-Add-PPC4xx-PCIe-MSI-support.patch
@@ -0,0 +1,634 @@
+From aa1671e0b1a5b72dbf714a1c13cb9850f9ecaee7 Mon Sep 17 00:00:00 2001
+From: Stefan Roese <sr@denx.de>
+Date: Wed, 10 Sep 2008 06:02:17 +0200
+Subject: [PATCH] powerpc/4xx: Add PPC4xx PCIe MSI support
+
+This MSI driver can be used on all PCIe enabled PPC4xx variants.
+This is currently 405EX, 440SPe and 460EX/GT.
+
+This driver version is a testing version and no release. It still
+has some known problems which need to be solved:
+
+- Longshine LCS-8337TXR
+ MSI's are successfully generated on 405EX (Kilauea) and 460EX
+ (Canyonlands). But the MSI generation stops at some time and
+ not further MSI's are generated anymore.
+
+- Intel PRO/1000 PT Desktop
+ No MSI is generated at all
+
+Signed-off-by: Stefan Roese <sr@denx.de>
+---
+ arch/powerpc/boot/dts/canyonlands.dts | 25 +++
+ arch/powerpc/boot/dts/katmai.dts | 12 +
+ arch/powerpc/boot/dts/kilauea.dts | 21 ++
+ arch/powerpc/include/asm/dcr-regs.h | 5 +
+ arch/powerpc/sysdev/Makefile | 3 +-
+ arch/powerpc/sysdev/ppc4xx_msi.c | 358 +++++++++++++++++++++++++++++++++
+ arch/powerpc/sysdev/ppc4xx_pci.c | 46 ++++-
+ arch/powerpc/sysdev/ppc4xx_pci.h | 11 +
+ 8 files changed, 479 insertions(+), 2 deletions(-)
+ create mode 100644 arch/powerpc/sysdev/ppc4xx_msi.c
+
+diff --git a/arch/powerpc/boot/dts/canyonlands.dts b/arch/powerpc/boot/dts/canyonlands.dts
+index 79fe412..5c8b419 100644
+--- a/arch/powerpc/boot/dts/canyonlands.dts
++++ b/arch/powerpc/boot/dts/canyonlands.dts
+@@ -111,6 +111,11 @@
+ ranges;
+ clock-frequency = <0>; /* Filled in by U-Boot */
+
++ MQ0: memqueue {
++ compatible = "ibm,mq-460ex";
++ dcr-reg = <0x040 0x011>;
++ };
++
+ SDRAM0: sdram {
+ compatible = "ibm,sdram-460ex", "ibm,sdram-405gp";
+ dcr-reg = <0x010 0x002>;
+@@ -395,6 +400,8 @@
+ 0x0 0x0 0x0 0x2 &UIC3 0xd 0x4 /* swizzled int B */
+ 0x0 0x0 0x0 0x3 &UIC3 0xe 0x4 /* swizzled int C */
+ 0x0 0x0 0x0 0x4 &UIC3 0xf 0x4 /* swizzled int D */>;
++
++ mq-device = <&MQ0>;
+ };
+
+ PCIE1: pciex@d20000000 {
+@@ -436,6 +443,24 @@
+ 0x0 0x0 0x0 0x2 &UIC3 0x11 0x4 /* swizzled int B */
+ 0x0 0x0 0x0 0x3 &UIC3 0x12 0x4 /* swizzled int C */
+ 0x0 0x0 0x0 0x4 &UIC3 0x13 0x4 /* swizzled int D */>;
++
++ mq-device = <&MQ0>;
++ };
++
++ MSI: msi@c10000000 {
++ compatible = "ibm,ppc4xx-msi-460ex", "ibm,ppc4xx-msi";
++ reg = <0xc 0x10000000 0x100>;
++ sdr-base = <0x36c>;
++ interrupts = <24 1
++ 25 1
++ 26 1
++ 27 1
++ 28 1
++ 29 1
++ 30 1
++ 31 1>;
++ interrupt-parent = <&UIC3>;
++ mq-device = <&MQ0>;
+ };
+ };
+ };
+diff --git a/arch/powerpc/boot/dts/katmai.dts b/arch/powerpc/boot/dts/katmai.dts
+index 077819b..b70bdcb 100644
+--- a/arch/powerpc/boot/dts/katmai.dts
++++ b/arch/powerpc/boot/dts/katmai.dts
+@@ -392,6 +392,18 @@
+ 0x0 0x0 0x0 0x3 &UIC3 0xa 0x4 /* swizzled int C */
+ 0x0 0x0 0x0 0x4 &UIC3 0xb 0x4 /* swizzled int D */>;
+ };
++
++ MSI: msi@400300000 {
++ compatible = "ibm,ppc4xx-msi-440spe", "ibm,ppc4xx-msi";
++ reg = <0x4 0x00300000 0x100>;
++ sdr-base = <0x3b0>;
++ /* test-only: right only 4 UIC interrupts are mapped on 440SPe */
++ interrupts = <12 1
++ 13 1
++ 14 1
++ 15 1>;
++ interrupt-parent = <&UIC0>;
++ };
+ };
+
+ chosen {
+diff --git a/arch/powerpc/boot/dts/kilauea.dts b/arch/powerpc/boot/dts/kilauea.dts
+index dececc4..56fad7c 100644
+--- a/arch/powerpc/boot/dts/kilauea.dts
++++ b/arch/powerpc/boot/dts/kilauea.dts
+@@ -342,5 +342,26 @@
+ 0x0 0x0 0x0 0x3 &UIC2 0xd 0x4 /* swizzled int C */
+ 0x0 0x0 0x0 0x4 &UIC2 0xe 0x4 /* swizzled int D */>;
+ };
++
++ MSI: msi@0ef620000 {
++ compatible = "ibm,ppc4xx-msi-405ex", "ibm,ppc4xx-msi";
++ reg = <0xef620000 0x100>;
++ sdr-base = <0x4b0>;
++ interrupts = <15 1
++ 16 1
++ 17 1
++ 18 1
++ 19 1
++ 20 1
++ 21 1
++ 22 1
++ 23 1
++ 24 1
++ 25 1
++ 26 1
++ 27 1
++ 28 1>;
++ interrupt-parent = <&UIC2>;
++ };
+ };
+ };
+diff --git a/arch/powerpc/include/asm/dcr-regs.h b/arch/powerpc/include/asm/dcr-regs.h
+index 828e3aa..c69dfc2 100644
+--- a/arch/powerpc/include/asm/dcr-regs.h
++++ b/arch/powerpc/include/asm/dcr-regs.h
+@@ -157,4 +157,9 @@
+ #define L2C_SNP_SSR_32G 0x0000f000
+ #define L2C_SNP_ESR 0x00000800
+
++/*
++ * Memory Queue Modules DCR offsets
++ */
++#define MQ0_BAUH 0x10
++
+ #endif /* __DCR_REGS_H__ */
+diff --git a/arch/powerpc/sysdev/Makefile b/arch/powerpc/sysdev/Makefile
+index 5afce11..034a989 100644
+--- a/arch/powerpc/sysdev/Makefile
++++ b/arch/powerpc/sysdev/Makefile
+@@ -6,6 +6,7 @@ mpic-msi-obj-$(CONFIG_PCI_MSI) += mpic_msi.o mpic_u3msi.o mpic_pasemi_msi.o
+ obj-$(CONFIG_MPIC) += mpic.o $(mpic-msi-obj-y)
+ fsl-msi-obj-$(CONFIG_PCI_MSI) += fsl_msi.o
+ obj-$(CONFIG_PPC_MSI_BITMAP) += msi_bitmap.o
++ppc4xx-msi-obj-$(CONFIG_PCI_MSI) += ppc4xx_msi.o
+
+ obj-$(CONFIG_PPC_MPC106) += grackle.o
+ obj-$(CONFIG_PPC_DCR_NATIVE) += dcr-low.o
+@@ -35,7 +36,7 @@ obj-$(CONFIG_4xx_SOC) += ppc4xx_soc.o
+ obj-$(CONFIG_XILINX_VIRTEX) += xilinx_intc.o
+ obj-$(CONFIG_OF_RTC) += of_rtc.o
+ ifeq ($(CONFIG_PCI),y)
+-obj-$(CONFIG_4xx) += ppc4xx_pci.o
++obj-$(CONFIG_4xx) += ppc4xx_pci.o $(ppc4xx-msi-obj-y)
+ endif
+ obj-$(CONFIG_PPC4xx_GPIO) += ppc4xx_gpio.o
+
+diff --git a/arch/powerpc/sysdev/ppc4xx_msi.c b/arch/powerpc/sysdev/ppc4xx_msi.c
+new file mode 100644
+index 0000000..7c95499
+--- /dev/null
++++ b/arch/powerpc/sysdev/ppc4xx_msi.c
+@@ -0,0 +1,358 @@
++/*
++ * IBM/AMCC PPC4xx PCIe MSI handling
++ *
++ * Copyright 2008 Stefan Roese <sr@denx.de>, DENX Software Engineering
++ *
++ * Loosly based on a PPC4xx MSI version posted to linuxppc-dev from
++ * Preetesh Parekh <pparekh@amcc.com>
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ */
++
++#undef DEBUG
++
++#include <linux/irq.h>
++#include <linux/bootmem.h>
++#include <linux/bitmap.h>
++#include <linux/msi.h>
++#include <linux/pci.h>
++#include <linux/of_platform.h>
++#include <asm/ppc-pci.h>
++
++#include <asm/dcr.h>
++#include <asm/dcr-regs.h>
++#include <asm/reg.h>
++
++#define U64_TO_U32_LOW(val) ((u32)((val) & 0x00000000ffffffffULL))
++#define U64_TO_U32_HIGH(val) ((u32)((val) >> 32))
++
++#define RES_TO_U32_LOW(val) \
++ ((sizeof(resource_size_t) > sizeof(u32)) ? U64_TO_U32_LOW(val) : (val))
++#define RES_TO_U32_HIGH(val) \
++ ((sizeof(resource_size_t) > sizeof(u32)) ? U64_TO_U32_HIGH(val) : (0))
++
++/*
++ * Byte reversal for PEIH message handling is handled differently
++ * on 4xx PPC variants:
++ *
++ * 405EX One bit for both directions (in- and outbound)
++ * 440SPe No byte-reversal configuration bit at all
++ * 460EX/GT 2 bits, one for inbound and one for outbount messages
++ */
++
++/* 405EX */
++#define SDR0_PEIHS2_BREV (0x80000000 >> 30)
++
++/* 460EX/GT */
++#define SDR0_PEIHS2_OMBR (0x80000000 >> 29)
++#define SDR0_PEIHS2_IMBR (0x80000000 >> 30)
++
++#define PEIH_TERMADH 0x00
++#define PEIH_TERMADL 0x08
++#define PEIH_MSIED 0x10
++#define PEIH_MSIMK 0x18
++#define PEIH_MSIASS 0x20
++#define PEIH_FLUSH0 0x30
++#define PEIH_FLUSH1 0x38
++#define PEIH_CNTRST 0x48
++
++#define PPC4XX_MSI_DATA 0x00000000
++#define PPC4XX_MSI_DATA_MASK 0xFFFFFFE0
++
++#define NR_MSI_IRQS 32
++
++struct ppc4xx_msi {
++ u32 msi_addr_lo;
++ u32 msi_addr_hi;
++ int virq[NR_MSI_IRQS];
++ int irqs;
++
++ unsigned long *irq_bitmap;
++ spinlock_t bitmap_lock;
++
++ dma_addr_t paddr;
++};
++
++static struct ppc4xx_msi *ppc4xx_msi;
++
++static int ppc4xx_msi_alloc_irqs(struct ppc4xx_msi *msi, int num)
++{
++ unsigned long flags;
++ int order = get_count_order(num);
++ int offset;
++
++ spin_lock_irqsave(&msi->bitmap_lock, flags);
++ offset = bitmap_find_free_region(msi->irq_bitmap, NR_MSI_IRQS, order);
++ spin_unlock_irqrestore(&msi->bitmap_lock, flags);
++
++ pr_debug("%s: allocated 0x%x (2^%d) at offset 0x%x\n",
++ __func__, num, order, offset);
++
++ return offset;
++}
++
++static void ppc4xx_msi_free_irqs(struct ppc4xx_msi *msi, int offset, int num)
++{
++ unsigned long flags;
++ int order = get_count_order(num);
++
++ pr_debug("%s: freeing 0x%x (2^%d) at offset 0x%x\n",
++ __func__, num, order, offset);
++
++ spin_lock_irqsave(&msi->bitmap_lock, flags);
++ bitmap_release_region(msi->irq_bitmap, offset, order);
++ spin_unlock_irqrestore(&msi->bitmap_lock, flags);
++}
++
++static int ppc4xx_msi_init_allocator(struct ppc4xx_msi *msi)
++{
++ int size = BITS_TO_LONGS(NR_MSI_IRQS) * sizeof(u32);
++
++ msi->irq_bitmap = kzalloc(size, GFP_KERNEL);
++ if (msi->irq_bitmap == NULL) {
++ pr_debug("%s: ENOMEM allocating allocator bitmap!\n", __func__);
++ return -ENOMEM;
++ }
++
++ bitmap_allocate_region(msi->irq_bitmap, 0, get_count_order(NR_MSI_IRQS));
++ ppc4xx_msi_free_irqs(msi, 0, NR_MSI_IRQS);
++
++ return 0;
++}
++
++static int ppc4xx_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
++{
++ struct msi_desc *entry;
++ struct msi_msg msg;
++ int msi_irq;
++ struct ppc4xx_msi *msi = ppc4xx_msi;
++ int rc;
++
++ msg.address_hi = ppc4xx_msi->msi_addr_hi;
++ msg.address_lo = ppc4xx_msi->msi_addr_lo;
++
++ list_for_each_entry(entry, &dev->msi_list, list) {
++ msi_irq = ppc4xx_msi_alloc_irqs(msi, 1);
++ if ((msi_irq < 0) || (msi_irq >= msi->irqs)) {
++ pr_debug("%s: fail allocating msi interrupt\n", __func__);
++ rc = -ENOSPC;
++ goto out_free;
++ }
++
++ set_irq_msi(ppc4xx_msi->virq[msi_irq], entry);
++ pr_debug("%s: allocated virq %d (hw %d) addr 0x%08x\n",
++ __func__, ppc4xx_msi->virq[msi_irq], msi_irq, msg.address_lo);
++
++ /* Write message to PCI device */
++ msg.data = PPC4XX_MSI_DATA | msi_irq;
++ write_msi_msg(ppc4xx_msi->virq[msi_irq], &msg);
++ }
++
++ return 0;
++
++out_free:
++ return rc;
++}
++
++static int ppc4xx_msi_check_device(struct pci_dev *pdev, int nvec, int type)
++{
++ if (type == PCI_CAP_ID_MSIX)
++ pr_debug("ppc4xx_msi: MSI-X untested, trying anyway\n");
++
++ return 0;
++}
++
++static void ppc4xx_teardown_msi_irqs(struct pci_dev *dev)
++{
++ struct msi_desc *entry;
++ struct ppc4xx_msi *msi = ppc4xx_msi;
++
++ list_for_each_entry(entry, &dev->msi_list, list) {
++ if (entry->irq == NO_IRQ)
++ continue;
++
++ pr_debug("%s: freeing virq %d\n", __func__, entry->irq);
++ set_irq_msi(entry->irq, NULL);
++ ppc4xx_msi_free_irqs(msi, entry->irq, 1);
++ irq_dispose_mapping(entry->irq);
++ }
++
++ return;
++}
++
++static int __devinit ppc4xx_of_msi_probe(struct of_device *dev,
++ const struct of_device_id *match)
++{
++ struct device_node *np = dev->node;
++ struct device_node *mq_np;
++ struct resource res;
++ struct ppc4xx_msi *msi = NULL;
++ void __iomem *peih_regs = NULL;
++ void *vaddr = NULL;
++ const u32 *pval;
++ u32 sdr_base;
++ int count;
++ int i;
++ int rc;
++ u64 msi_addr = 0;
++ u32 val = 0;
++
++ printk(KERN_INFO "Setting up PPC4xx MSI support\n");
++
++ msi = kzalloc(sizeof(struct ppc4xx_msi), GFP_KERNEL);
++ if (!msi) {
++ printk(KERN_ERR "No memory for MSI structure!\n");
++ rc = -ENOMEM;
++ goto error_out;
++ }
++
++ /* Fetch PCIe interrupt handler registers address */
++ if (of_address_to_resource(np, 0, &res)) {
++ printk(KERN_ERR "%s: Can't get PCI-E interrupt handler space!\n",
++ np->full_name);
++ rc = -ENOMEM;
++ goto error_out;
++ }
++
++ peih_regs = ioremap(res.start, res.end - res.start + 1);
++ if (!peih_regs) {
++ printk(KERN_ERR "%s: ioremap failed!\n", np->full_name);
++ rc = -ENOMEM;
++ goto error_out;
++ }
++
++ pval = of_get_property(np, "sdr-base", NULL);
++ if (pval == NULL) {
++ printk(KERN_ERR "%s: Missing sdr-base!\n", np->full_name);
++ rc = -ENOMEM;
++ goto error_out;
++ }
++ sdr_base = *pval;
++
++ /* Set byte reversal bit(s) if necessary */
++ if (of_device_is_compatible(np, "ibm,ppc4xx-msi-405ex"))
++ val = SDR0_PEIHS2_BREV;
++ if ((of_device_is_compatible(np, "ibm,ppc4xx-msi-460ex")) ||
++ (of_device_is_compatible(np, "ibm,ppc4xx-msi-460gt")))
++ val = SDR0_PEIHS2_IMBR | SDR0_PEIHS2_OMBR;
++
++ /* Set base address for PEIH */
++ mtdcri(SDR0, sdr_base + 0, RES_TO_U32_HIGH(res.start));
++ mtdcri(SDR0, sdr_base + 1, RES_TO_U32_LOW(res.start) | val);
++ pr_debug("%s: MSI PEIH physical address at %llx\n", __func__, (u64)res.start);
++
++ /*
++ * MSI termintaion address needs to be located in an local
++ * area mapped to the PCIe bus via a PIM (PCI Inbound Message Window).
++ * Only this way the accesses get forwarded to the PLB where they are
++ * decoded.
++ */
++ vaddr = dma_alloc_coherent(&dev->dev, PAGE_SIZE, &msi->paddr, GFP_KERNEL);
++
++ /*
++ * On 460EX/GT the PEIH (PCIe Interrupt Handler) logic is implemented
++ * on the HB (High Bandwidth) segment of the PLB. This implies that the
++ * target address must reside in the HB segment range.
++ * The DCR MQ0_BAUH (PLB Base Address, upper 32 bits (HB)) configures
++ * the offset for this HB access window. The optional "mq-device"
++ * points to the Memory-Queue Module device node, which configures
++ * the base address of the HB PLB segment.
++ */
++ pval = of_get_property(np, "mq-device", NULL);
++ if (pval) {
++ mq_np = of_find_node_by_phandle(*pval);
++ if (mq_np) {
++ pval = of_get_property(mq_np, "dcr-reg", NULL);
++ if (pval)
++ msi_addr = (u64)mfdcr(*pval + MQ0_BAUH) << 32;
++ }
++ }
++
++ /* Now add physical address of the cache coherent area */
++ msi_addr += msi->paddr;
++ msi->msi_addr_hi = U64_TO_U32_HIGH(msi_addr);
++ msi->msi_addr_lo = U64_TO_U32_LOW(msi_addr);
++ pr_debug("%s: MSI termination address: vaddr=%p paddr=%llx\n",
++ __func__, vaddr, msi_addr);
++
++ /* Progam the Interrupt handler Termination addr registers */
++ out_be32(peih_regs + PEIH_TERMADH, msi->msi_addr_hi);
++ out_be32(peih_regs + PEIH_TERMADL, msi->msi_addr_lo);
++
++ /* Program MSI Expected data and Mask bits */
++ out_be32(peih_regs + PEIH_MSIED, PPC4XX_MSI_DATA);
++ out_be32(peih_regs + PEIH_MSIMK, PPC4XX_MSI_DATA_MASK);
++
++ rc = ppc4xx_msi_init_allocator(msi);
++ if (rc) {
++ printk(KERN_ERR "Error allocating MSI bitmap!\n");
++ goto error_out;
++ }
++
++ pval = of_get_property(np, "interrupts", &count);
++ if (!pval) {
++ printk(KERN_ERR "No interrupts property found on %s!\n",
++ np->full_name);
++ rc = -ENODEV;
++ goto error_out;
++ }
++ if (count % 8 != 0) {
++ printk(KERN_ERR "Malformed interrupts property on %s!\n",
++ np->full_name);
++ rc = -EINVAL;
++ goto error_out;
++ }
++
++ count /= sizeof(u32);
++ for (i = 0; i < count / 2; i++) {
++ msi->virq[i] = irq_of_parse_and_map(np, i);
++ pr_debug("%s: virq[%d] = %d\n", __func__, i, msi->virq[i]);
++ }
++
++ iounmap(peih_regs);
++
++ msi->irqs = count;
++ ppc4xx_msi = msi;
++
++ WARN_ON(ppc_md.setup_msi_irqs);
++ ppc_md.setup_msi_irqs = ppc4xx_setup_msi_irqs;
++ ppc_md.teardown_msi_irqs = ppc4xx_teardown_msi_irqs;
++ ppc_md.msi_check_device = ppc4xx_msi_check_device;
++
++ return 0;
++
++error_out:
++ if (vaddr)
++ dma_free_coherent(&dev->dev, PAGE_SIZE, vaddr, msi->paddr);
++
++ if (peih_regs)
++ iounmap(peih_regs);
++
++ if (msi)
++ kfree(msi);
++
++ return rc;
++}
++
++static const struct of_device_id ppc4xx_of_msi_ids[] = {
++ {
++ .compatible = "ibm,ppc4xx-msi",
++ },
++ {}
++};
++
++static struct of_platform_driver ppc4xx_of_msi_driver = {
++ .name = "ibm-msi",
++ .match_table = ppc4xx_of_msi_ids,
++ .probe = ppc4xx_of_msi_probe,
++};
++
++static __init int ppc4xx_of_msi_init(void)
++{
++ return of_register_platform_driver(&ppc4xx_of_msi_driver);
++}
++
++subsys_initcall(ppc4xx_of_msi_init);
+diff --git a/arch/powerpc/sysdev/ppc4xx_pci.c b/arch/powerpc/sysdev/ppc4xx_pci.c
+index d3e4d61..03e5c63 100644
+--- a/arch/powerpc/sysdev/ppc4xx_pci.c
++++ b/arch/powerpc/sysdev/ppc4xx_pci.c
+@@ -1393,6 +1393,10 @@ static void __init ppc4xx_configure_pciex_PIMs(struct ppc4xx_pciex_port *port,
+ {
+ resource_size_t size = res->end - res->start + 1;
+ u64 sa;
++ struct device_node *np = port->node;
++ struct device_node *mq_np;
++ const u32 *pval;
++ u32 bauh = 0;
+
+ if (port->endpoint) {
+ resource_size_t ep_addr = 0;
+@@ -1442,10 +1446,50 @@ static void __init ppc4xx_configure_pciex_PIMs(struct ppc4xx_pciex_port *port,
+
+ out_le32(mbase + PCI_BASE_ADDRESS_0, RES_TO_U32_LOW(res->start));
+ out_le32(mbase + PCI_BASE_ADDRESS_1, RES_TO_U32_HIGH(res->start));
++
++ /*
++ * For MSI support some 4xx platforms (e.g. 460EX/GT) need
++ * to configure a 2nd PIM to enable access to the HB PLB
++ * segment where the PEIH MSI termination address is located
++ * and snooped from the PEIH.
++ * The optional "mq-device" points to the Memory-Queue Module
++ * device node, which configures the base address of the HB PLB
++ * segment.
++ */
++ pval = of_get_property(np, "mq-device", NULL);
++ if (pval) {
++ mq_np = of_find_node_by_phandle(*pval);
++ if (mq_np) {
++ pval = of_get_property(mq_np, "dcr-reg", NULL);
++ if (pval)
++ bauh = mfdcr(*pval + MQ0_BAUH);
++ }
++ }
++
++ if (bauh) {
++ out_le32(mbase + PECFG_BAR2HMPA, RES_TO_U32_HIGH(sa));
++ out_le32(mbase + PECFG_BAR2LMPA, RES_TO_U32_LOW(sa));
++
++ /* The setup of the split looks weird to me ... let's see
++ * if it works
++ */
++ out_le32(mbase + PECFG_PIM3LAL, 0x00000000);
++ out_le32(mbase + PECFG_PIM3LAH, 0x00000000);
++ out_le32(mbase + PECFG_PIM4LAL, 0x00000000);
++ out_le32(mbase + PECFG_PIM4LAH, 0x00000000);
++ out_le32(mbase + PECFG_PIM34SAH, 0xffff0000);
++ out_le32(mbase + PECFG_PIM34SAL, 0x00000000);
++
++ out_le32(mbase + PECFG_RTBAR2L, RES_TO_U32_LOW(res->start));
++ out_le32(mbase + PECFG_RTBAR2H, RES_TO_U32_HIGH(res->start) + bauh);
++ }
+ }
+
+ /* Enable inbound mapping */
+- out_le32(mbase + PECFG_PIMEN, 0x1);
++ if (bauh == 0)
++ out_le32(mbase + PECFG_PIMEN, 0x1);
++ else
++ out_le32(mbase + PECFG_PIMEN, 0x5);
+
+ /* Enable I/O, Mem, and Busmaster cycles */
+ out_le16(mbase + PCI_COMMAND,
+diff --git a/arch/powerpc/sysdev/ppc4xx_pci.h b/arch/powerpc/sysdev/ppc4xx_pci.h
+index d04e40b..b1d7d31 100644
+--- a/arch/powerpc/sysdev/ppc4xx_pci.h
++++ b/arch/powerpc/sysdev/ppc4xx_pci.h
+@@ -398,6 +398,14 @@
+ #define PECFG_PIM1LAH 0x34c
+ #define PECFG_PIM01SAL 0x350
+ #define PECFG_PIM01SAH 0x354
++#define PECFG_PIM2LAL 0x358
++#define PECFG_PIM2LAH 0x35c
++#define PECFG_PIM3LAL 0x360
++#define PECFG_PIM3LAH 0x364
++#define PECFG_PIM4LAL 0x368
++#define PECFG_PIM4LAH 0x36c
++#define PECFG_PIM34SAL 0x370
++#define PECFG_PIM34SAH 0x374
+
+ #define PECFG_POM0LAL 0x380
+ #define PECFG_POM0LAH 0x384
+@@ -406,6 +414,9 @@
+ #define PECFG_POM2LAL 0x390
+ #define PECFG_POM2LAH 0x394
+
++#define PECFG_RTBAR2L 0x3b8
++#define PECFG_RTBAR2H 0x3bc
++
+ /* SDR Bit Mappings */
+ #define PESDRx_RCSSET_HLDPLB 0x10000000
+ #define PESDRx_RCSSET_RSTGU 0x01000000
+--
+1.6.2.1
+
diff --git a/recipes/linux/linux-2.6.29/canyonlands/defconfig b/recipes/linux/linux-2.6.29/canyonlands/defconfig
new file mode 100644
index 0000000000..ff2a335c65
--- /dev/null
+++ b/recipes/linux/linux-2.6.29/canyonlands/defconfig
@@ -0,0 +1,791 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.28
+# Mon Mar 30 10:24:29 2009
+#
+# CONFIG_PPC64 is not set
+
+#
+# Processor support
+#
+# CONFIG_6xx is not set
+# CONFIG_PPC_85xx is not set
+# CONFIG_PPC_8xx is not set
+# CONFIG_40x is not set
+CONFIG_44x=y
+# CONFIG_E200 is not set
+CONFIG_PPC_FPU=y
+CONFIG_4xx=y
+CONFIG_BOOKE=y
+CONFIG_PTE_64BIT=y
+CONFIG_PHYS_64BIT=y
+# CONFIG_PPC_MM_SLICES is not set
+CONFIG_NOT_COHERENT_CACHE=y
+CONFIG_PPC32=y
+CONFIG_WORD_SIZE=32
+CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
+CONFIG_MMU=y
+CONFIG_GENERIC_CMOS_UPDATE=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_TIME_VSYSCALL=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_HARDIRQS=y
+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
+CONFIG_IRQ_PER_CPU=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+CONFIG_ARCH_HAS_ILOG2_U32=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
+CONFIG_PPC=y
+CONFIG_EARLY_PRINTK=y
+CONFIG_GENERIC_NVRAM=y
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_PPC_OF=y
+CONFIG_OF=y
+CONFIG_PPC_UDBG_16550=y
+# CONFIG_GENERIC_TBSYNC is not set
+CONFIG_AUDIT_ARCH=y
+CONFIG_GENERIC_BUG=y
+# CONFIG_DEFAULT_UIMAGE is not set
+CONFIG_PPC_DCR_NATIVE=y
+# CONFIG_PPC_DCR_MMIO is not set
+CONFIG_PPC_DCR=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=19
+# CONFIG_CGROUPS is not set
+# CONFIG_GROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_COMPAT_BRK=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_PCI_QUIRKS=y
+CONFIG_SLUB_DEBUG=y
+# CONFIG_SLAB is not set
+CONFIG_SLUB=y
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+# CONFIG_MARKERS is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
+CONFIG_HAVE_IOREMAP_PROT=y
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_ARCH_TRACEHOOK=y
+# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+CONFIG_LBD=y
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+CONFIG_CLASSIC_RCU=y
+# CONFIG_FREEZER is not set
+CONFIG_PPC4xx_PCI_EXPRESS=y
+
+#
+# Platform support
+#
+# CONFIG_PPC_CELL is not set
+# CONFIG_PPC_CELL_NATIVE is not set
+# CONFIG_PQ2ADS is not set
+# CONFIG_BAMBOO is not set
+# CONFIG_EBONY is not set
+# CONFIG_SAM440EP is not set
+# CONFIG_SEQUOIA is not set
+# CONFIG_TAISHAN is not set
+# CONFIG_KATMAI is not set
+# CONFIG_RAINIER is not set
+# CONFIG_WARP is not set
+# CONFIG_ARCHES is not set
+CONFIG_CANYONLANDS=y
+# CONFIG_GLACIER is not set
+# CONFIG_YOSEMITE is not set
+# CONFIG_XILINX_VIRTEX440_GENERIC_BOARD is not set
+CONFIG_PPC44x_SIMPLE=y
+# CONFIG_PPC4xx_GPIO is not set
+CONFIG_460EX=y
+# CONFIG_IPIC is not set
+# CONFIG_MPIC is not set
+# CONFIG_MPIC_WEIRD is not set
+# CONFIG_PPC_I8259 is not set
+# CONFIG_PPC_RTAS is not set
+# CONFIG_MMIO_NVRAM is not set
+# CONFIG_PPC_MPC106 is not set
+# CONFIG_PPC_970_NAP is not set
+# CONFIG_PPC_INDIRECT_IO is not set
+# CONFIG_GENERIC_IOMAP is not set
+# CONFIG_CPU_FREQ is not set
+# CONFIG_FSL_ULI1575 is not set
+
+#
+# Kernel options
+#
+# CONFIG_HIGHMEM is not set
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+CONFIG_SCHED_HRTICK=y
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+# CONFIG_HAVE_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_MATH_EMULATION is not set
+# CONFIG_IOMMU_HELPER is not set
+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+CONFIG_ARCH_HAS_WALK_MEMORY=y
+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+CONFIG_MIGRATION=y
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_PHYS_ADDR_T_64BIT=y
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_BOUNCE=y
+CONFIG_VIRT_TO_BUS=y
+CONFIG_UNEVICTABLE_LRU=y
+CONFIG_FORCE_MAX_ZONEORDER=11
+CONFIG_PROC_DEVICETREE=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE=" debug "
+CONFIG_EXTRA_TARGETS=""
+CONFIG_SECCOMP=y
+CONFIG_ISA_DMA_API=y
+
+#
+# Bus options
+#
+CONFIG_ZONE_DMA=y
+CONFIG_PPC_INDIRECT_PCI=y
+CONFIG_4xx_SOC=y
+CONFIG_PPC_PCI_CHOICE=y
+CONFIG_PCI=y
+CONFIG_PCI_DOMAINS=y
+CONFIG_PCI_SYSCALL=y
+CONFIG_PCIEPORTBUS=y
+CONFIG_PCIEAER=y
+# CONFIG_PCIEASPM is not set
+CONFIG_ARCH_SUPPORTS_MSI=y
+CONFIG_PCI_MSI=y
+CONFIG_PCI_LEGACY=y
+CONFIG_PCI_DEBUG=y
+# CONFIG_PCCARD is not set
+# CONFIG_HOTPLUG_PCI is not set
+# CONFIG_HAS_RAPIDIO is not set
+
+#
+# Advanced setup
+#
+# CONFIG_ADVANCED_OPTIONS is not set
+
+#
+# Default settings for advanced configuration options are used
+#
+CONFIG_LOWMEM_SIZE=0x30000000
+CONFIG_PAGE_OFFSET=0xc0000000
+CONFIG_KERNEL_START=0xc0000000
+CONFIG_PHYSICAL_START=0x00000000
+CONFIG_TASK_SIZE=0xc0000000
+CONFIG_CONSISTENT_START=0xff100000
+CONFIG_CONSISTENT_SIZE=0x00200000
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_NET_DSA is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+# CONFIG_PHONET is not set
+CONFIG_WIRELESS=y
+# CONFIG_CFG80211 is not set
+CONFIG_WIRELESS_OLD_REGULATORY=y
+# CONFIG_WIRELESS_EXT is not set
+# CONFIG_MAC80211 is not set
+# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_CONNECTOR=y
+CONFIG_PROC_EVENTS=y
+# CONFIG_MTD is not set
+CONFIG_OF_DEVICE=y
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=35000
+# CONFIG_BLK_DEV_XIP is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_XILINX_SYSACE is not set
+# CONFIG_BLK_DEV_HD is not set
+# CONFIG_MISC_DEVICES is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# Enable only one of the two stacks, unless you know what you are doing
+#
+# CONFIG_FIREWIRE is not set
+# CONFIG_IEEE1394 is not set
+# CONFIG_I2O is not set
+# CONFIG_MACINTOSH_DRIVERS is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+# CONFIG_ARCNET is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+# CONFIG_MII is not set
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+CONFIG_IBM_NEW_EMAC=y
+CONFIG_IBM_NEW_EMAC_RXB=256
+CONFIG_IBM_NEW_EMAC_TXB=256
+CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
+CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
+CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
+# CONFIG_IBM_NEW_EMAC_DEBUG is not set
+CONFIG_IBM_NEW_EMAC_ZMII=y
+CONFIG_IBM_NEW_EMAC_RGMII=y
+CONFIG_IBM_NEW_EMAC_TAH=y
+CONFIG_IBM_NEW_EMAC_EMAC4=y
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+# CONFIG_NET_PCI is not set
+# CONFIG_B44 is not set
+# CONFIG_ATL2 is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+# CONFIG_TR is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+# CONFIG_IWLWIFI_LEDS is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+# CONFIG_INPUT is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+CONFIG_DEVKMEM=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+# CONFIG_NOZOMI is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+# CONFIG_SERIAL_8250_PCI is not set
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+CONFIG_SERIAL_8250_EXTENDED=y
+# CONFIG_SERIAL_8250_MANY_PORTS is not set
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
+# CONFIG_SERIAL_8250_RSA is not set
+
+#
+# Non-8250 serial port support
+#
+# CONFIG_SERIAL_UARTLITE is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_SERIAL_OF_PLATFORM=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+CONFIG_ALTPCIESGDMA=m
+# CONFIG_ALTPCIECHDMA is not set
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_NVRAM is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_DEVPORT=y
+# CONFIG_I2C is not set
+# CONFIG_SPI is not set
+CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
+# CONFIG_GPIOLIB is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+# CONFIG_THERMAL_HWMON is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_REGULATOR is not set
+
+#
+# Multimedia devices
+#
+
+#
+# Multimedia core support
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_VIDEO_MEDIA is not set
+
+#
+# Multimedia drivers
+#
+CONFIG_DAB=y
+
+#
+# Graphics support
+#
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+# CONFIG_VGASTATE is not set
+CONFIG_VIDEO_OUTPUT_CONTROL=m
+# CONFIG_FB is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+# CONFIG_SOUND is not set
+# CONFIG_USB_SUPPORT is not set
+# CONFIG_UWB is not set
+# CONFIG_MMC is not set
+# CONFIG_MEMSTICK is not set
+# CONFIG_NEW_LEDS is not set
+# CONFIG_ACCESSIBILITY is not set
+# CONFIG_INFINIBAND is not set
+# CONFIG_EDAC is not set
+# CONFIG_RTC_CLASS is not set
+# CONFIG_DMADEVICES is not set
+# CONFIG_UIO is not set
+# CONFIG_STAGING is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4_FS is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+CONFIG_FILE_LOCKING=y
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+# CONFIG_MSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_CRAMFS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+CONFIG_ROOT_NFS=y
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_SUNRPC_REGISTER_V4 is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_NLS is not set
+# CONFIG_DLM is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_T10DIF is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_HAVE_LMB=y
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+CONFIG_SCHED_DEBUG=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_SLUB_DEBUG_ON is not set
+# CONFIG_SLUB_STATS is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+# CONFIG_DEBUG_LIST is not set
+CONFIG_DEBUG_SG=y
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+CONFIG_SYSCTL_SYSCALL_CHECK=y
+CONFIG_HAVE_FUNCTION_TRACER=y
+
+#
+# Tracers
+#
+# CONFIG_FUNCTION_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_CONTEXT_SWITCH_TRACER is not set
+# CONFIG_BOOT_TRACER is not set
+# CONFIG_STACK_TRACER is not set
+# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+# CONFIG_DEBUG_STACKOVERFLOW is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_PAGEALLOC is not set
+# CONFIG_CODE_PATCHING_SELFTEST is not set
+# CONFIG_FTR_FIXUP_SELFTEST is not set
+# CONFIG_MSI_BITMAP_SELFTEST is not set
+# CONFIG_XMON is not set
+# CONFIG_IRQSTACKS is not set
+# CONFIG_VIRQ_DEBUG is not set
+# CONFIG_BDI_SWITCH is not set
+# CONFIG_PPC_EARLY_DEBUG is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+# CONFIG_CRYPTO is not set
+# CONFIG_PPC_CLOCK is not set
+# CONFIG_VIRTUALIZATION is not set
diff --git a/recipes/linux/linux-2.6.29/canyonlands/ppc4xx_pcie_payload.patch b/recipes/linux/linux-2.6.29/canyonlands/ppc4xx_pcie_payload.patch
new file mode 100644
index 0000000000..02c21bfea7
--- /dev/null
+++ b/recipes/linux/linux-2.6.29/canyonlands/ppc4xx_pcie_payload.patch
@@ -0,0 +1,15 @@
+Index: linux-2.6.28/arch/powerpc/sysdev/ppc4xx_pci.c
+===================================================================
+--- linux-2.6.28.orig/arch/powerpc/sysdev/ppc4xx_pci.c 2009-03-19 17:46:18.000000000 +0100
++++ linux-2.6.28/arch/powerpc/sysdev/ppc4xx_pci.c 2009-03-19 17:46:55.000000000 +0100
+@@ -1591,7 +1591,9 @@
+ if (!port->endpoint) {
+ /* Set Class Code to PCI-PCI bridge and Revision Id to 1 */
+ out_le32(mbase + 0x208, 0x06040001);
+-
++ printk(KERN_INFO "maximum payload size 512 bytes.\n");
++ /* maximum payload size 512 bytes */
++ out_le32(mbase + 0x25C, 0x00000002);
+ printk(KERN_INFO "PCIE%d: successfully set as root-complex\n",
+ port->index);
+ } else {