* Re: [PATCH 1/3] powerpc, Makefile: Make it possible to safely select CONFIG_FRAME_POINTER
From: Benjamin Herrenschmidt @ 2009-05-18 4:14 UTC (permalink / raw)
To: Steven Rostedt
Cc: linux-kernel, linuxppc-dev, Paul Mackerras, Ingo Molnar,
Sam Ravnborg
In-Reply-To: <1241565080.11379.14.camel@localhost.localdomain>
On Tue, 2009-05-05 at 19:11 -0400, Steven Rostedt wrote:
> OK, so what's the status with this patch series?
>
> I don't want to pull it in unless I have an ack from Sam, and now
> there's issues with having -fno-omit-frame-pointer. Should we add a
> patch instead that simply removes that?
>
> If we eliminate the -fno-omit-frame-pointer, would that solve the PPC
> problem? And would it cause any other issues with other archs?
Well, the patch looks fine to me to be honest I'm not sure what the
complaint is above...
IE. On arch that define the new HAVE_NORMAL_FRAME_POINTER (let's just
call it HAVE_IMPLIED_FRAME_POINTER then :-) we just don't do
-fno-omit-frame-pointer and avoid triggering the bug...
Segher, what are we missing here ?
Ben.
^ permalink raw reply
* Re: [PATCH] powerpc: Make the NR_CPUS max 8192
From: Michael Neuling @ 2009-05-18 4:14 UTC (permalink / raw)
To: michael; +Cc: paulus, linuxppc-dev
In-Reply-To: <1242609873.13757.4.camel@concordia>
> > We can compile and boot with NR_CPUS=3D8192, so make this the max. 1024
> > was an arbitrary decision anyway.
>
> Is 8192 still arbitrary? Or does something break above that?
Yeah, the compile breaks after that with 4K pages.
In drivers/base/node.c we have:
/* 2008/04/07: buf currently PAGE_SIZE, need 9 chars per 32 bits. */
BUILD_BUG_ON((NR_CPUS/32 * 9) > (PAGE_SIZE-1));
which causes:
drivers/base/node.c: In function 'node_read_cpumap':
drivers/base/node.c:31: error: size of array 'type name' is negative
I can compile with 16384 CPUs with 64K pages, but it doesn't boot.
sfr asked for size info for different builds, so I may as well repost
them here:
text data bss dec hex filename
9237767 3225768 4409996 16873531 101783b vmlinux.1024
9247355 4769472 7373708 21390535 14664c7 vmlinux.2048
9267239 7857032 13301132 30425403 1d0413b vmlinux.4096
9302623 14035832 25155980 48494435 2e3f763 vmlinux.8192
9373283 26389360 48865676 84628319 50b535f vmlinux.16384
config was pseries_defconfig but with 64K pages.
Mikey
^ permalink raw reply
* Re: [RFC Patch 1/6] Prepare the PowerPC platform for HW Breakpoint infrastructure
From: Benjamin Herrenschmidt @ 2009-05-18 3:35 UTC (permalink / raw)
To: K.Prasad
Cc: linuxppc-dev, Michael Neuling, Alan Stern, Roland McGrath, paulus
In-Reply-To: <20090514134335.GB14229@in.ibm.com>
On Thu, 2009-05-14 at 19:13 +0530, K.Prasad wrote:
> plain text document attachment (ppc64_prepare_code_01)
> Prepare the PowerPC code for HW Breakpoint infrastructure patches by including
> relevant constant definitions and function declarations.
Hi !
Some comments below...
> +#define HBP_NUM 1 /* Number of physical HW breakpoint registers */
Can you use a more verbose constant ? reg.h is included everywhere so
the risk of collision is high.
> #define DABR_TRANSLATION (1UL << 2)
> #define DABR_DATA_WRITE (1UL << 1)
> #define DABR_DATA_READ (1UL << 0)
> +#define DABR_DATA_RW (3UL << 0)
Do you really need that ? It's just DABR_DATA_WRITE | DABR_DATA_READ :-)
Cheers,
Ben.
^ permalink raw reply
* Re: [PATCH] ppc64: xmon: Add dl command to dump contents of __log_buf
From: Benjamin Herrenschmidt @ 2009-05-18 3:29 UTC (permalink / raw)
To: Vinay Sridhar; +Cc: linuxppc-dev, ellerman
In-Reply-To: <200905151443.07723.vinay@linux.vnet.ibm.com>
On Fri, 2009-05-15 at 14:43 +0530, Vinay Sridhar wrote:
> Hello All,
>
> Quite a while back Michael Ellerman had posted a patch to add support to xmon to print the contents of the console log pointed to by __log_buf.
> Here's the link to that patch - http://ozlabs.org/pipermail/linuxppc64-dev/2005-March/003657.html
> I've ported the patch in the above link to 2.6.30-rc5 and have tested it.
Thanks, good idea.
I'll review & test and if all goes well, it will be in -next.
Cheers,
Ben
^ permalink raw reply
* Re: [PATCH] Allow selecting mv643xx_eth on Pegasos again
From: Benjamin Herrenschmidt @ 2009-05-18 3:24 UTC (permalink / raw)
To: Gabriel Paubert; +Cc: LinuxPPC
In-Reply-To: <20090515181813.GA28132@iram.es>
On Fri, 2009-05-15 at 20:18 +0200, Gabriel Paubert wrote:
> Since PPC_MUTIPLATFORM was removed, it was impossible to select the
> driver for mv643xx_eth on the Pegasos. Fix by allowing to select
> the driver on CHRP platforms; Pegasos is a CHRP platform and the driver
> will not work wihtout arch/powerpc/platforms/chrp/pegasos_eth.
>
> The patch also removes all references to MV64360 config option which
> no more exists.
>
> Signed-off-by: Gabriel Paubert <paubert@iram.es>
Please break that up into 2 different patches. The arch/powerpc one that
removes the reference from IRQ_ALL_CPUs and the drivers/net/ one which
should be set to the netdev mailing list.
Thanks !
Cheers,
Ben.
> diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
> index a0d1146..1dfeb62 100644
> --- a/arch/powerpc/Kconfig
> +++ b/arch/powerpc/Kconfig
> @@ -360,7 +360,7 @@ config PPCBUG_NVRAM
>
> config IRQ_ALL_CPUS
> bool "Distribute interrupts on all CPUs by default"
> - depends on SMP && !MV64360
> + depends on SMP
> help
> This option gives the kernel permission to distribute IRQs across
> multiple CPUs. Saying N here will route all IRQs to the first
> diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
> index 214a92d..6fc0ff4 100644
> --- a/drivers/net/Kconfig
> +++ b/drivers/net/Kconfig
> @@ -2351,7 +2351,7 @@ config UGETH_TX_ON_DEMAND
>
> config MV643XX_ETH
> tristate "Marvell Discovery (643XX) and Orion ethernet support"
> - depends on MV64360 || MV64X60 || (PPC_MULTIPLATFORM && PPC32) || PLAT_ORION
> + depends on MV64X60 || PPC_CHRP || PLAT_ORION
> select INET_LRO
> select PHYLIB
> help
^ permalink raw reply
* Re: [Linux-fbdev-devel] [PATCH] fbdev: Add PLB support and cleanup DCR in xilinxfb driver.
From: Benjamin Herrenschmidt @ 2009-05-18 3:20 UTC (permalink / raw)
To: Krzysztof Helt
Cc: linux-fbdev-devel, Antonino Daplas, Suneel, linuxppc-dev,
Geert Uytterhoeven, John Linn
In-Reply-To: <20090517122644.f537f500.krzysztof.h1@poczta.fm>
On Sun, 2009-05-17 at 12:26 +0200, Krzysztof Helt wrote:
> If so please ignore my comment.
>
> Acked-by: Krzysztof Helt <krzysztof.h1@wp.pl>
Andrew, will you merge this or should I stick it into the powerpc.git
tree ?
Cheers,
Ben.
^ permalink raw reply
* Re: [PATCH] powerpc: Make the NR_CPUS max 8192
From: Michael Ellerman @ 2009-05-18 1:24 UTC (permalink / raw)
To: Michael Neuling; +Cc: paulus, linuxppc-dev
In-Reply-To: <17087.1242609196@neuling.org>
[-- Attachment #1: Type: text/plain, Size: 244 bytes --]
On Mon, 2009-05-18 at 11:13 +1000, Michael Neuling wrote:
> We can compile and boot with NR_CPUS=8192, so make this the max. 1024
> was an arbitrary decision anyway.
Is 8192 still arbitrary? Or does something break above that?
cheers
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 197 bytes --]
^ permalink raw reply
* [PATCH] powerpc: Make the NR_CPUS max 8192
From: Michael Neuling @ 2009-05-18 1:13 UTC (permalink / raw)
To: paulus, benh; +Cc: linuxppc-dev
We can compile and boot with NR_CPUS=8192, so make this the max. 1024
was an arbitrary decision anyway.
Signed-off-by: Michael Neuling <mikey@neuling.org>
--
No, I've not actually booted on a 8192 way machine, although if wishing
made it so....
arch/powerpc/platforms/Kconfig.cputype | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
Index: linux-2.6-ozlabs/arch/powerpc/platforms/Kconfig.cputype
===================================================================
--- linux-2.6-ozlabs.orig/arch/powerpc/platforms/Kconfig.cputype
+++ linux-2.6-ozlabs/arch/powerpc/platforms/Kconfig.cputype
@@ -262,8 +262,8 @@ config SMP
If you don't know what to do here, say N.
config NR_CPUS
- int "Maximum number of CPUs (2-1024)"
- range 2 1024
+ int "Maximum number of CPUs (2-8192)"
+ range 2 8192
depends on SMP
default "32" if PPC64
default "4"
^ permalink raw reply
* Re: [PATCH] [PowerPC] Support For Initrd Loaded Into Highmem
From: Benjamin Herrenschmidt @ 2009-05-17 21:56 UTC (permalink / raw)
To: Wolfgang Denk; +Cc: Konstantin Baydarov, linuxppc-dev, linux-kernel
In-Reply-To: <20090517133417.9E0FC832E416@gemini.denx.de>
> > How Solved:
> > Code was added that checks if initrd is in the highmem and relocates initrd
> > into lowmem if required.
>
> I don't think this is needed. Just don't load the ramdisk to highmem
> in the first place.
Well, it does make some sense to avoid the kernel eating itself if
passed things out of lowmem in the reserve map, though Konstantin patch
doesn't fix that properly, I think it's still something to look into.
Cheers,
Ben.
^ permalink raw reply
* Re: [v0 PATCH 1/4] EDAC: MPIC Hypertransport IRQ support
From: Benjamin Herrenschmidt @ 2009-05-17 22:00 UTC (permalink / raw)
To: Harry Ciao; +Cc: linuxppc-dev, bluesmoke-devel, linux-kernel
In-Reply-To: <1242377034-7378-2-git-send-email-qingtao.cao@windriver.com>
On Fri, 2009-05-15 at 16:43 +0800, Harry Ciao wrote:
> Support EDAC INT mode for Hypertransport devices, where southbridge
> NMI Request messages posted through Hypertransport Channel will
> be transferred to a MPIC interrupt instance that latches MPIC INT0
> pin. Also, Hypertransport Hostbridge controller may latch MPIC INT2
> pin for Hypertransport Link Errors.
>
> Since multiple Hypertransport southbridges such as AMD8131 & AMD8111
> could post NMI request messages, EDAC core should be responsible
> for maintaining the mapping from hwirq == 0 to a virq.
>
> The edac_mpic_irq.c is inert for EDAC drivers where related hardware
> is not connecting to MPIC, so it should be controlled by CONFIG_MPIC.
It would have been simpler to ajust avoid this layer completely and
always just map the interrupts.
IE. There is no problem with calling irq_create_mapping() for the same
hwirq multiple times, though they aren't refcounted, so just don't call
irq_dispose_mapping() and you're done :-)
IRQ mappings don't need to be disposed of, especially with mpic where
they don't actually occupy resources (the reverse map is of fixed size
anyway).
Ben.
> Signed-off-by: Harry Ciao <qingtao.cao@windriver.com>
> diff --git a/drivers/edac/Makefile b/drivers/edac/Makefile
> index 07a31cf..62778ee 100644
> --- a/drivers/edac/Makefile
> +++ b/drivers/edac/Makefile
> @@ -17,6 +17,10 @@ ifdef CONFIG_PCI
> edac_core-objs += edac_pci.o edac_pci_sysfs.o
> endif
>
> +ifdef CONFIG_MPIC
> +edac_core-objs += edac_mpic_irq.o
> +endif
> +
> obj-$(CONFIG_EDAC_AMD76X) += amd76x_edac.o
> obj-$(CONFIG_EDAC_CPC925) += cpc925_edac.o
> obj-$(CONFIG_EDAC_I5000) += i5000_edac.o
> diff --git a/drivers/edac/edac_mpic_irq.c b/drivers/edac/edac_mpic_irq.c
> new file mode 100644
> index 0000000..26b43c0
> --- /dev/null
> +++ b/drivers/edac/edac_mpic_irq.c
> @@ -0,0 +1,145 @@
> +/*
> + * edac_mpic_irq.c -
> + * For all EDAC Hypertransport southbridge devices(such as AMD8111
> + * or AMD8131) that could post upstream NMI Request Messages, this
> + * driver is used to manage the mapping from the hardware IRQ that
> + * carried in the NMI Request Message to its related virtual IRQ.
> + *
> + * The EDAC driver for a specific Hypertransport southbridge device
> + * must implement its mach-specific method for edac_mach_get_irq().
> + *
> + * Copyright (c) 2009 Wind River Systems, Inc.
> + *
> + * Authors: Cao Qingtao <qingtao.cao@windriver.com>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
> + * See the GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
> + */
> +
> +#include <linux/kernel.h>
> +#include <linux/module.h>
> +#include <linux/interrupt.h>
> +#include <linux/of.h>
> +#include <linux/edac.h>
> +
> +struct irqmap {
> + int virq;
> + int count;
> +};
> +
> +static struct irqmap hwirq2virqs[MPIC_HWIRQS] = {
> + [MPIC_HWIRQ_HT_NMI] = {
> + .virq = NO_IRQ,
> + .count = 0,
> + },
> + [MPIC_HWIRQ_INTERNAL_ERROR] = {
> + .virq = NO_IRQ,
> + .count = 0,
> + },
> +};
> +
> +#ifdef CONFIG_PPC_MAPLE
> +static int edac_maple_get_irq(int hwirq)
> +{
> + struct device_node *np, *mpic_node = NULL;
> + int irq = NO_IRQ;
> +
> + /*
> + * Locate MPIC in the device-tree. Note that there is a bug
> + * in Maple device-tree where the type of the controller is
> + * open-pic and not interrupt-controller
> + */
> + for_each_node_by_type(np, "interrupt-controller") {
> + if (of_device_is_compatible(np, "open-pic")) {
> + mpic_node = np;
> + break;
> + }
> + }
> +
> + if (mpic_node == NULL) {
> + for_each_node_by_type(np, "open-pic") {
> + mpic_node = np;
> + break;
> + }
> + }
> +
> + if (mpic_node) {
> + irq = irq_create_of_mapping(mpic_node, &hwirq, 1);
> + of_node_put(mpic_node);
> + } else
> + printk(KERN_ERR "Failed to locate the MPIC DTB node\n");
> +
> + return irq;
> +}
> +#endif
> +
> +/*
> + * NOTE:
> + * The EDAC driver should implement and register its machine-specific
> + * method to get a virtual IRQ here.
> + */
> +static int edac_mach_get_irq(int hwirq)
> +{
> + int virq = NO_IRQ;
> +
> +#ifdef CONFIG_PPC_MAPLE
> + virq = edac_maple_get_irq(hwirq);
> +#endif
> +
> + return virq;
> +}
> +
> +int edac_get_mpic_irq(int hwirq)
> +{
> + struct irqmap *irq;
> +
> + if ((hwirq != MPIC_HWIRQ_HT_NMI) &&
> + (hwirq != MPIC_HWIRQ_INTERNAL_ERROR))
> + return NO_IRQ;
> +
> + irq = &hwirq2virqs[hwirq];
> +
> + if (irq->virq == NO_IRQ) {
> + if (irq->count == 0) {
> + irq->virq = edac_mach_get_irq(hwirq);
> + if (irq->virq != NO_IRQ)
> + irq->count++;
> + else
> + irq->count = -1; /* error */
> + }
> + } else
> + irq->count++;
> +
> + return irq->virq;
> +}
> +EXPORT_SYMBOL_GPL(edac_get_mpic_irq);
> +
> +void edac_put_mpic_irq(int hwirq)
> +{
> + struct irqmap *irq;
> +
> + if ((hwirq != MPIC_HWIRQ_HT_NMI) &&
> + (hwirq != MPIC_HWIRQ_INTERNAL_ERROR))
> + return;
> +
> + irq = &hwirq2virqs[hwirq];
> +
> + if (irq->count <= 0)
> + return;
> +
> + if (--irq->count == 0) {
> + irq_dispose_mapping(irq->virq);
> + irq->virq = NO_IRQ;
> + }
> +}
> +EXPORT_SYMBOL_GPL(edac_put_mpic_irq);
> diff --git a/include/linux/edac.h b/include/linux/edac.h
> index 7cf92e8..804dbb6 100644
> --- a/include/linux/edac.h
> +++ b/include/linux/edac.h
> @@ -38,4 +38,27 @@ static inline void opstate_init(void)
> return;
> }
>
> +#ifdef CONFIG_MPIC
> +enum {
> + /*
> + * Vector carried in southbridge NMI Request Messages
> + * posted through Hypertransport Channel
> + */
> + MPIC_HWIRQ_HT_NMI = 0,
> +
> + /*
> + * Vector for MPIC Internal Error
> + */
> + MPIC_HWIRQ_INTERNAL_ERROR = 2,
> +
> + MPIC_HWIRQS, /* must be the very last */
> +};
> +
> +/* Create a hwirq2virq mapping for the specified hwirq */
> +extern int edac_get_mpic_irq(int hwirq);
> +
> +/* Dispose the hwirq2virq mapping for the specified hwirq */
> +extern void edac_put_mpic_irq(int hwirq);
> +#endif
> +
> #endif
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@ozlabs.org
> https://ozlabs.org/mailman/listinfo/linuxppc-dev
^ permalink raw reply
* Re: [PATCH] [PowerPC] Support For Initrd Loaded Into Highmem
From: Benjamin Herrenschmidt @ 2009-05-17 21:55 UTC (permalink / raw)
To: Konstantin Baydarov; +Cc: linuxppc-dev, linux-kernel
In-Reply-To: <4A103EDF.7050108@ru.mvista.com>
> Also if initrd is in the highmem, uBoot adds initrd highmem region into the
> initial_boot_params->off_mem_rsvmap. This leads to kernel crash, because kernel
> assumes that regions from the initial_boot_params->off_mem_rsvmap are in the
> lowmem. So patch skips initrd highmem region when kernel reserves lowmem regions
> in early_reserve_mem().
>
> This patch is for linux-2.6.30-rc6.
Fixing the reserve map isn't the right approach.
We should be able to have anything in there. It's the kernel that should
be more careful at coping if it contains things that aren't in lowmem.
Cheers,
Ben.
^ permalink raw reply
* Re: [PATCH 3/3] sound: use dev_set_drvdata
From: Takashi Iwai @ 2009-05-17 17:32 UTC (permalink / raw)
To: Julia Lawall
Cc: linuxppc-dev, alsa-devel, kernel-janitors, timur, linux-kernel
In-Reply-To: <Pine.LNX.4.64.0905171129020.20440@pc-004.diku.dk>
At Sun, 17 May 2009 11:29:21 +0200 (CEST),
Julia Lawall wrote:
>
> From: Julia Lawall <julia@diku.dk>
>
> Eliminate direct accesses to the driver_data field.
> cf 82ab13b26f15f49be45f15ccc96bfa0b81dfd015
>
> The semantic patch that makes this change is as follows:
> (http://www.emn.fr/x-info/coccinelle/)
>
> // <smpl>
> @@
> struct device *dev;
> expression E;
> type T;
> @@
>
> - dev->driver_data = (T)E
> + dev_set_drvdata(dev, E)
>
> @@
> struct device *dev;
> type T;
> @@
>
> - (T)dev->driver_data
> + dev_get_drvdata(dev)
> // </smpl>
>
> Signed-off-by: Julia Lawall <julia@diku.dk>
Applied now. Thanks.
Takashi
>
> ---
> sound/soc/fsl/fsl_ssi.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff -u -p a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c
> --- a/sound/soc/fsl/fsl_ssi.c
> +++ b/sound/soc/fsl/fsl_ssi.c
> @@ -674,7 +674,7 @@ struct snd_soc_dai *fsl_ssi_create_dai(s
> ssi_private->dev = ssi_info->dev;
> ssi_private->asynchronous = ssi_info->asynchronous;
>
> - ssi_private->dev->driver_data = fsl_ssi_dai;
> + dev_set_drvdata(ssi_private->dev, fsl_ssi_dai);
>
> /* Initialize the the device_attribute structure */
> dev_attr->attr.name = "ssi-stats";
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>
^ permalink raw reply
* Re: [PATCH] [PowerPC] Support For Initrd Loaded Into Highmem
From: Wolfgang Denk @ 2009-05-17 13:34 UTC (permalink / raw)
To: Konstantin Baydarov; +Cc: linuxppc-dev, linux-kernel
In-Reply-To: <4A103EDF.7050108@ru.mvista.com>
Dear Konstantin Baydarov,
In message <4A103EDF.7050108@ru.mvista.com> you wrote:
>
> It turned out that:
> PPC uBoot always loads initrd image at the highest RAM address. So if board has
Please read the documentation, for example the U-Boot README - pay
speicial attention to the section that discusses the "initrd_high"
envrionment variable.
> How Solved:
> Code was added that checks if initrd is in the highmem and relocates initrd
> into lowmem if required.
I don't think this is needed. Just don't load the ramdisk to highmem
in the first place.
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de
How come everyone's going so slow if it's called rush hour?
^ permalink raw reply
* [PATCH] [PowerPC] Support For Initrd Loaded Into Highmem
From: Konstantin Baydarov @ 2009-05-17 16:44 UTC (permalink / raw)
To: Kumar Gala, linuxppc-dev; +Cc: linux-kernel
Hello.
Recently I faced following issue:
On PPC targets with uBoot monitor with RAM size more than 768 Mb, boot with
initrd(rootfs image that is loaded separately from uImage) fails. Kernel crashes very early.
It turned out that:
PPC uBoot always loads initrd image at the highest RAM address. So if board has
sufficient amount of RAM initrd will be loaded at highmem, at address that is
bigger than CONFIG_LOWMEM_SIZE=0x30000000. Kernel cannot work with highmem
addresses directly, ioremap is required. So initrd relocation to lowmem is
required to make kernel work correctly with initrd.
Also if initrd is in the highmem, uBoot adds initrd highmem region into the
initial_boot_params->off_mem_rsvmap. This leads to kernel crash, because kernel
assumes that regions from the initial_boot_params->off_mem_rsvmap are in the
lowmem.
How Solved:
Code was added that checks if initrd is in the highmem and relocates initrd
into lowmem if required.
Also if initrd is in the highmem, uBoot adds initrd highmem region into the
initial_boot_params->off_mem_rsvmap. This leads to kernel crash, because kernel
assumes that regions from the initial_boot_params->off_mem_rsvmap are in the
lowmem. So patch skips initrd highmem region when kernel reserves lowmem regions
in early_reserve_mem().
This patch is for linux-2.6.30-rc6.
Signed-off-by: Konstantin Baydarov <kbaidarov@ru.mvista.com>
Index: linux-2.6.30-rc6/arch/powerpc/kernel/prom.c
===================================================================
--- linux-2.6.30-rc6.orig/arch/powerpc/kernel/prom.c
+++ linux-2.6.30-rc6/arch/powerpc/kernel/prom.c
@@ -763,28 +763,56 @@ static int __init early_init_dt_scan_cpu
return 0;
}
+unsigned long orig_initrd_start, orig_initrd_end;
+int need_reloc_initrd = 0;
+static int need_to_fix_reserve_map = 0;
#ifdef CONFIG_BLK_DEV_INITRD
static void __init early_init_dt_check_for_initrd(unsigned long node)
{
- unsigned long l;
+ unsigned long l, initrd_size;
u32 *prop;
DBG("Looking for initrd properties... ");
+ initrd_start = 0;
+ initrd_end = 0;
prop = of_get_flat_dt_prop(node, "linux,initrd-start", &l);
- if (prop) {
- initrd_start = (unsigned long)__va(of_read_ulong(prop, l/4));
+ if (!prop)
+ return;
- prop = of_get_flat_dt_prop(node, "linux,initrd-end", &l);
- if (prop) {
- initrd_end = (unsigned long)
- __va(of_read_ulong(prop, l/4));
- initrd_below_start_ok = 1;
- } else {
- initrd_start = 0;
- }
- }
+ orig_initrd_start = (unsigned long)(of_read_ulong(prop, l/4));
+ prop = of_get_flat_dt_prop(node, "linux,initrd-end", &l);
+ if (!prop)
+ return;
+
+ orig_initrd_end = (unsigned long)(of_read_ulong(prop, l/4));
+ initrd_below_start_ok = 1;
+#ifdef CONFIG_PPC32
+ need_to_fix_reserve_map = 1;
+ if (orig_initrd_end <= CONFIG_LOWMEM_SIZE) {
+ initrd_start = (unsigned long)__va(orig_initrd_start);
+ initrd_end = (unsigned long)__va(orig_initrd_end);
+ need_to_fix_reserve_map = 0;
+ }
+#ifdef CONFIG_HIGHMEM
+ else if (orig_initrd_start < CONFIG_LOWMEM_SIZE) {
+ /* TODO: add support for Initrd Image that is spread to
+ low and high mem */
+ } else {
+ /* Whole initrd is in highmem */
+ need_reloc_initrd = 1;
+ initrd_size = orig_initrd_end - orig_initrd_start;
+ initrd_start = CONFIG_LOWMEM_SIZE - initrd_size;
+ initrd_start &= PAGE_MASK;
+ initrd_start += KERNELBASE;
+ initrd_end = initrd_start + initrd_size;
+ }
+#endif
+#else
+ initrd_start = (unsigned long)__va(orig_initrd_start);
+ initrd_end = (unsigned long)__va(orig_initrd_end);
+#endif
DBG("initrd_start=0x%lx initrd_end=0x%lx\n", initrd_start, initrd_end);
}
#else
@@ -1061,8 +1089,15 @@ static void __init early_reserve_mem(voi
/* skip if the reservation is for the blob */
if (base_32 == self_base && size_32 == self_size)
continue;
- DBG("reserving: %x -> %x\n", base_32, size_32);
- lmb_reserve(base_32, size_32);
+ /* Skip reserving initrd region if it's in highmem,
+ * Because kernel assumes that regions are from lowmem.
+ * Entry from high mem leads to kernel crash.
+ */
+ if (!need_to_fix_reserve_map ||
+ (base_32 != orig_initrd_start)) {
+ DBG("reserving: %x -> %x\n", base_32, size_32);
+ lmb_reserve(base_32, size_32);
+ }
}
return;
}
@@ -1072,8 +1107,15 @@ static void __init early_reserve_mem(voi
size = *(reserve_map++);
if (size == 0)
break;
- DBG("reserving: %llx -> %llx\n", base, size);
- lmb_reserve(base, size);
+ /* Skip reserving initrd region if it's in highmem,
+ * Because kernel assumes that regions are from lowmem.
+ * Entry from high mem leads to kernel crash.
+ */
+ if (!need_to_fix_reserve_map ||
+ (base != orig_initrd_start)) {
+ DBG("reserving: %llx -> %llx\n", base, size);
+ lmb_reserve(base, size);
+ }
}
}
Index: linux-2.6.30-rc6/arch/powerpc/kernel/setup-common.c
===================================================================
--- linux-2.6.30-rc6.orig/arch/powerpc/kernel/setup-common.c
+++ linux-2.6.30-rc6/arch/powerpc/kernel/setup-common.c
@@ -335,6 +335,46 @@ struct seq_operations cpuinfo_op = {
.show = show_cpuinfo,
};
+#if defined (CONFIG_BLK_DEV_INITRD) && (CONFIG_PPC32)
+extern unsigned long orig_initrd_start, orig_initrd_end;
+extern int need_reloc_initrd;
+
+/**
+ * relocate_initrd - if initrd is loaded into highmem, relocate it
+ * to lowmem.
+ */
+static void relocate_initrd(void)
+{
+ unsigned long src = orig_initrd_start;
+ unsigned long size = orig_initrd_end - orig_initrd_start;
+ char *src_ptr;
+ char *dest = (char *) initrd_start;
+
+ if (!need_reloc_initrd)
+ return;
+
+ /* Map the physical address in and copy the
+ * data from it, in page-size chunks. */
+ while (size) {
+ src_ptr = ioremap(src, PAGE_SIZE);
+ if (src_ptr) {
+ int amount_to_copy = min(size, PAGE_SIZE);
+ memcpy(dest, src_ptr, amount_to_copy);
+ iounmap(src_ptr);
+ src += amount_to_copy;
+ dest += amount_to_copy;
+ size -= amount_to_copy;
+ } else {
+ printk(KERN_CRIT
+ "Can't map memory to copy ramdisk\n");
+ break;
+ }
+ }
+}
+#elif defined (CONFIG_BLK_DEV_INITRD)
+#define relocate_initrd()
+#endif
+
void __init check_for_initrd(void)
{
#ifdef CONFIG_BLK_DEV_INITRD
@@ -345,9 +385,10 @@ void __init check_for_initrd(void)
* look sensible. If not, clear initrd reference.
*/
if (is_kernel_addr(initrd_start) && is_kernel_addr(initrd_end) &&
- initrd_end > initrd_start)
+ initrd_end > initrd_start) {
+ relocate_initrd();
ROOT_DEV = Root_RAM0;
- else
+ } else
initrd_start = initrd_end = 0;
if (initrd_start)
^ permalink raw reply
* Re: [Linux-fbdev-devel] [PATCH] fbdev: Add PLB support and cleanup DCR in xilinxfb driver.
From: Krzysztof Helt @ 2009-05-17 10:26 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: linux-fbdev-devel, Antonino Daplas, Suneel, linuxppc-dev,
John Linn
In-Reply-To: <10f740e80905170125ie1c1aew441de30874e6a72f@mail.gmail.com>
On Sun, 17 May 2009 10:25:31 +0200
Geert Uytterhoeven <geert@linux-m68k.org> wrote:
> On Sun, May 17, 2009 at 10:06, Krzysztof Helt <krzysztof.h1@poczta.fm> wr=
ote:
> > On Fri, 15 May 2009 12:19:17 -0600 Grant Likely <grant.likely@secretlab=
.ca> wrote:
> >> diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c
> >> index 40a3a2a..7a868bd 100644
> >> --- a/drivers/video/xilinxfb.c
> >> +++ b/drivers/video/xilinxfb.c
> >> @@ -107,17 +111,28 @@ static struct fb_var_screeninfo xilinx_fb_var =
=3D {
> >> =A0 =A0 =A0 .activate =3D =A0 =A0 FB_ACTIVATE_NOW
> >> =A0};
> >>
> >> +
> >> +#define PLB_ACCESS_FLAG =A0 =A0 =A00x1 =A0 =A0 =A0 =A0 =A0 =A0 /* 1 =
=3D PLB, 0 =3D DCR */
> >> +
> >> =A0struct xilinxfb_drvdata {
> >>
> >> =A0 =A0 =A0 struct fb_info =A0info; =A0 =A0 =A0 =A0 =A0 /* FB driver i=
nfo record */
> >>
> >> - =A0 =A0 u32 =A0 =A0 =A0 =A0 =A0 =A0 regs_phys; =A0 =A0 =A0/* phys. a=
ddress of the control registers */
> >> - =A0 =A0 u32 __iomem =A0 =A0 *regs; =A0 =A0 =A0 =A0 =A0/* virt. addre=
ss of the control registers */
> >> + =A0 =A0 phys_addr_t =A0 =A0 regs_phys; =A0 =A0 =A0/* phys. address o=
f the control
> >> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 registers */
> >
> > There are fields fb_info.fix.mmio_start and fb_info.fix.mmio_len for
> > physical IO range used by framebuffer. There is no field for
> > virtual IO address so the "regs" below must stay.
>=20
> If I'm not mistaken, this driver is used on ppc44x, where phys_addr_t is =
64-bit,
> so the 32-bit unsigned long fb_info.fix.mmio_start is not large enough
> to hold the
> physical address.
>=20
If so please ignore my comment.
Acked-by: Krzysztof Helt <krzysztof.h1@wp.pl>
Regards,
Krzysztof
----------------------------------------------------------------------
Dzwonki na komorkê!
Sprawdz >> http://link.interia.pl/f2161
^ permalink raw reply
* [PATCH 3/3] sound: use dev_set_drvdata
From: Julia Lawall @ 2009-05-17 9:29 UTC (permalink / raw)
To: timur, alsa-devel, linuxppc-dev, linux-kernel, kernel-janitors
From: Julia Lawall <julia@diku.dk>
Eliminate direct accesses to the driver_data field.
cf 82ab13b26f15f49be45f15ccc96bfa0b81dfd015
The semantic patch that makes this change is as follows:
(http://www.emn.fr/x-info/coccinelle/)
// <smpl>
@@
struct device *dev;
expression E;
type T;
@@
- dev->driver_data = (T)E
+ dev_set_drvdata(dev, E)
@@
struct device *dev;
type T;
@@
- (T)dev->driver_data
+ dev_get_drvdata(dev)
// </smpl>
Signed-off-by: Julia Lawall <julia@diku.dk>
---
sound/soc/fsl/fsl_ssi.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff -u -p a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c
--- a/sound/soc/fsl/fsl_ssi.c
+++ b/sound/soc/fsl/fsl_ssi.c
@@ -674,7 +674,7 @@ struct snd_soc_dai *fsl_ssi_create_dai(s
ssi_private->dev = ssi_info->dev;
ssi_private->asynchronous = ssi_info->asynchronous;
- ssi_private->dev->driver_data = fsl_ssi_dai;
+ dev_set_drvdata(ssi_private->dev, fsl_ssi_dai);
/* Initialize the the device_attribute structure */
dev_attr->attr.name = "ssi-stats";
^ permalink raw reply
* Accessing NTFS Shares from Freescale MPC8313
From: Chris Plasun @ 2009-05-17 8:45 UTC (permalink / raw)
To: linuxppc-dev
Hi,
(I haven't found any answers in the archives)
How would I access a NTFS shared directory from a Freescale MPC8313?
Will Samba run on a Freescale MPC8313?
Thanks,
Chris Plasun
^ permalink raw reply
* Accessing MS SQL Server from embedded PPC Linux
From: Chris Plasun @ 2009-05-17 8:42 UTC (permalink / raw)
To: linuxppc-dev
Hi,
While part of my subject line might be redundant, how would I go about
accessing MS SQL Server from my Freescale MPC8313 machine?
Do I need to use a Linux ODBC driver?
Thank you for any help.
Chris Plasun
^ permalink raw reply
* Re: [Linux-fbdev-devel] [PATCH] fbdev: Add PLB support and cleanup DCR in xilinxfb driver.
From: Geert Uytterhoeven @ 2009-05-17 8:25 UTC (permalink / raw)
To: Krzysztof Helt
Cc: linux-fbdev-devel, Antonino Daplas, Suneel, linuxppc-dev,
John Linn
In-Reply-To: <20090517100643.9d00e980.krzysztof.h1@poczta.fm>
On Sun, May 17, 2009 at 10:06, Krzysztof Helt <krzysztof.h1@poczta.fm> wrot=
e:
> On Fri, 15 May 2009 12:19:17 -0600 Grant Likely <grant.likely@secretlab.c=
a> wrote:
>> diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c
>> index 40a3a2a..7a868bd 100644
>> --- a/drivers/video/xilinxfb.c
>> +++ b/drivers/video/xilinxfb.c
>> @@ -107,17 +111,28 @@ static struct fb_var_screeninfo xilinx_fb_var =3D =
{
>> =C2=A0 =C2=A0 =C2=A0 .activate =3D =C2=A0 =C2=A0 FB_ACTIVATE_NOW
>> =C2=A0};
>>
>> +
>> +#define PLB_ACCESS_FLAG =C2=A0 =C2=A0 =C2=A00x1 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 /* 1 =3D PLB, 0 =3D DCR */
>> +
>> =C2=A0struct xilinxfb_drvdata {
>>
>> =C2=A0 =C2=A0 =C2=A0 struct fb_info =C2=A0info; =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 /* FB driver info record */
>>
>> - =C2=A0 =C2=A0 u32 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 regs_phys;=
=C2=A0 =C2=A0 =C2=A0/* phys. address of the control registers */
>> - =C2=A0 =C2=A0 u32 __iomem =C2=A0 =C2=A0 *regs; =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0/* virt. address of the control registers */
>> + =C2=A0 =C2=A0 phys_addr_t =C2=A0 =C2=A0 regs_phys; =C2=A0 =C2=A0 =C2=
=A0/* phys. address of the control
>> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 registers */
>
> There are fields fb_info.fix.mmio_start and fb_info.fix.mmio_len for
> physical IO range used by framebuffer. There is no field for
> virtual IO address so the "regs" below must stay.
If I'm not mistaken, this driver is used on ppc44x, where phys_addr_t is 64=
-bit,
so the 32-bit unsigned long fb_info.fix.mmio_start is not large enough
to hold the
physical address.
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k=
.org
In personal conversations with technical people, I call myself a hacker. Bu=
t
when I'm talking to journalists I just say "programmer" or something like t=
hat.
-- Linus Torvalds
^ permalink raw reply
* Re: [Linux-fbdev-devel] [PATCH] fbdev: Add PLB support and cleanup DCR in xilinxfb driver.
From: Krzysztof Helt @ 2009-05-17 8:06 UTC (permalink / raw)
To: Grant Likely
Cc: linux-fbdev-devel, Antonino Daplas, Suneel, linuxppc-dev,
John Linn
In-Reply-To: <20090515181237.22961.64270.stgit@localhost.localdomain>
Hi Grant and John,
On Fri, 15 May 2009 12:19:17 -0600
Grant Likely <grant.likely@secretlab.ca> wrote:
> Antonino,
>
Antonino is gone for quite a long time. I have reviewed your patch.
I have two comments only. Both are of small caliber.
> If you prefer, I'm willing to merge it via my powerpc tree.
>
As you prefer. If you want to send it here, CC it top Andrew Morton.
> drivers/video/xilinxfb.c | 290 ++++++++++++++++++++++++----------------------
> 1 files changed, 151 insertions(+), 139 deletions(-)
>
>
> diff --git a/drivers/video/xilinxfb.c b/drivers/video/xilinxfb.c
> index 40a3a2a..7a868bd 100644
> --- a/drivers/video/xilinxfb.c
> +++ b/drivers/video/xilinxfb.c
(...)
> @@ -107,17 +111,28 @@ static struct fb_var_screeninfo xilinx_fb_var = {
> .activate = FB_ACTIVATE_NOW
> };
>
> +
> +#define PLB_ACCESS_FLAG 0x1 /* 1 = PLB, 0 = DCR */
> +
> struct xilinxfb_drvdata {
>
> struct fb_info info; /* FB driver info record */
>
> - u32 regs_phys; /* phys. address of the control registers */
> - u32 __iomem *regs; /* virt. address of the control registers */
> + phys_addr_t regs_phys; /* phys. address of the control
> + registers */
There are fields fb_info.fix.mmio_start and fb_info.fix.mmio_len for
physical IO range used by framebuffer. There is no field for
virtual IO address so the "regs" below must stay.
> + void __iomem *regs; /* virt. address of the control
> + registers */
> +
> + dcr_host_t dcr_host;
> + unsigned int dcr_start;
> + unsigned int dcr_len;
>
> void *fb_virt; /* virt. address of the frame buffer */
> dma_addr_t fb_phys; /* phys. address of the frame buffer */
> int fb_alloced; /* Flag, was the fb memory alloced? */
>
> + u8 flags; /* features of the driver */
> +
> u32 reg_ctrl_default;
>
> u32 pseudo_palette[PALETTE_ENTRIES_NO];
(...)
> @@ -247,7 +266,10 @@ static int xilinxfb_assign(struct device *dev, unsigned long physaddr,
> if (!drvdata->fb_virt) {
> dev_err(dev, "Could not allocate frame buffer memory\n");
> rc = -ENOMEM;
> - goto err_fbmem;
> + if (drvdata->flags & PLB_ACCESS_FLAG)
> + goto err_fbmem;
> + else
> + goto err_region;
> }
>
The code after labels err_fbmem and err_region is also
modified so there is no need for the if clause here (just
do "goto err_fbmem").
> /* Clear (turn to black) the framebuffer */
The rest of the patch is ok for me.
Regards,
Krzysztof
----------------------------------------------------------------------
Fantastyczne nagrody do zgarniecia!
Zagraj >> http://link.interia.pl/f2177
^ permalink raw reply
* [PATCH] powerpc: minimizing the configuration of linkstation_defconfig
From: Rogério Brito @ 2009-05-16 16:04 UTC (permalink / raw)
To: Kumar Gala; +Cc: linuxppc-dev, Guennadi Liakhovetski, linux-kernel
In-Reply-To: <20090428133200.GB12828@ime.usp.br>
Hi, Kumar, Guennadi, and Co.
This patch addresses the following issues:
01. makes CFQ the default scheduler, to be in line with the rest of
the kernel.
02. since linkstations are meant to store files, enable large blk
devices.
03. disable CONFIG_MIGRATION in in such low memory devices.
04. disable CONFIG_BLK_DEV_RAM.
05. disable CONFIG_SCSI_LOWLEVEL, as no device under that tree is
used.
06. idem for CONFIG_NETDEV_10000.
07. idem for CONFIG_WIRELESS.
08. idem for CONFIG_HWMON.
09. idem for CONFIG_CRYPTO_HW.
10. disable CONFIG_VIDEO_OUTPUT_CONTROL.
11. keep consistency and disable extended attributes in CIFS, ext3,
and NFS.
12. enable CONFIG_PRINTK_TIME.
Signed-off-by: Rogério Brito <rbrito@ime.usp.br>
---
This is the patch for tidying the defconfig. I'm still having issues
with the MTD devices, it seems. :-( I will investigate this now.
I can send a similar patch to storcenter.
diff --git a/arch/powerpc/configs/linkstation_defconfig b/arch/powerpc/configs/linkstation_defconfig
index a4053ab..e762af0 100644
--- a/arch/powerpc/configs/linkstation_defconfig
+++ b/arch/powerpc/configs/linkstation_defconfig
@@ -155,7 +155,7 @@ CONFIG_MODULE_UNLOAD=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_BLOCK=y
-# CONFIG_LBD is not set
+CONFIG_LBD=y
# CONFIG_BLK_DEV_BSG is not set
# CONFIG_BLK_DEV_INTEGRITY is not set
@@ -166,11 +166,11 @@ CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
-CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_AS is not set
# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
+CONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
+CONFIG_DEFAULT_IOSCHED="cfq"
# CONFIG_FREEZER is not set
#
@@ -252,7 +252,7 @@ CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
CONFIG_PAGEFLAGS_EXTENDED=y
CONFIG_SPLIT_PTLOCK_CPUS=4
-CONFIG_MIGRATION=y
+# CONFIG_MIGRATION is not set
# CONFIG_PHYS_ADDR_T_64BIT is not set
CONFIG_ZONE_DMA_FLAG=1
CONFIG_BOUNCE=y
@@ -492,13 +492,7 @@ CONFIG_IP_NF_ARP_MANGLE=m
# CONFIG_IRDA is not set
# CONFIG_BT is not set
# CONFIG_AF_RXRPC is not set
-CONFIG_WIRELESS=y
-# CONFIG_CFG80211 is not set
-CONFIG_WIRELESS_OLD_REGULATORY=y
-CONFIG_WIRELESS_EXT=y
-CONFIG_WIRELESS_EXT_SYSFS=y
-# CONFIG_LIB80211 is not set
-# CONFIG_MAC80211 is not set
+# CONFIG_WIRELESS is not set
# CONFIG_WIMAX is not set
# CONFIG_RFKILL is not set
# CONFIG_NET_9P is not set
@@ -625,10 +619,7 @@ CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_SX8 is not set
# CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=2
-CONFIG_BLK_DEV_RAM_SIZE=8192
-# CONFIG_BLK_DEV_XIP is not set
+# CONFIG_BLK_DEV_RAM is not set
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
# CONFIG_BLK_DEV_HD is not set
@@ -688,49 +679,7 @@ CONFIG_SCSI_WAIT_SCAN=m
# CONFIG_SCSI_ISCSI_ATTRS is not set
# CONFIG_SCSI_SAS_LIBSAS is not set
# CONFIG_SCSI_SRP_ATTRS is not set
-CONFIG_SCSI_LOWLEVEL=y
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_CXGB3_ISCSI is not set
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC79XX is not set
-# CONFIG_SCSI_AIC94XX is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_ARCMSR is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_SAS is not set
-# CONFIG_SCSI_MPT2SAS is not set
-# CONFIG_SCSI_HPTIOP is not set
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_LIBFC is not set
-# CONFIG_LIBFCOE is not set
-# CONFIG_FCOE is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_EATA is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GDTH is not set
-# CONFIG_SCSI_IPS is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_MVSAS is not set
-# CONFIG_SCSI_STEX is not set
-# CONFIG_SCSI_SYM53C8XX_2 is not set
-# CONFIG_SCSI_IPR is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_QLA_ISCSI is not set
-# CONFIG_SCSI_LPFC is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_DEBUG is not set
-# CONFIG_SCSI_SRP is not set
+# CONFIG_SCSI_LOWLEVEL is not set
# CONFIG_SCSI_DH is not set
# CONFIG_SCSI_OSD_INITIATOR is not set
CONFIG_ATA=y
@@ -872,25 +821,7 @@ CONFIG_R8169=y
# CONFIG_ATL1E is not set
# CONFIG_ATL1C is not set
# CONFIG_JME is not set
-CONFIG_NETDEV_10000=y
-# CONFIG_CHELSIO_T1 is not set
-CONFIG_CHELSIO_T3_DEPENDS=y
-# CONFIG_CHELSIO_T3 is not set
-# CONFIG_ENIC is not set
-# CONFIG_IXGBE is not set
-# CONFIG_IXGB is not set
-# CONFIG_S2IO is not set
-# CONFIG_VXGE is not set
-# CONFIG_MYRI10GE is not set
-# CONFIG_NETXEN_NIC is not set
-# CONFIG_NIU is not set
-# CONFIG_MLX4_EN is not set
-# CONFIG_MLX4_CORE is not set
-# CONFIG_TEHUTI is not set
-# CONFIG_BNX2X is not set
-# CONFIG_QLGE is not set
-# CONFIG_SFC is not set
-# CONFIG_BE2NET is not set
+# CONFIG_NETDEV_10000 is not set
# CONFIG_TR is not set
#
@@ -1085,68 +1016,7 @@ CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
# CONFIG_GPIOLIB is not set
# CONFIG_W1 is not set
# CONFIG_POWER_SUPPLY is not set
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_AD7414 is not set
-# CONFIG_SENSORS_AD7418 is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_ADM1025 is not set
-# CONFIG_SENSORS_ADM1026 is not set
-# CONFIG_SENSORS_ADM1029 is not set
-# CONFIG_SENSORS_ADM1031 is not set
-# CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ADT7462 is not set
-# CONFIG_SENSORS_ADT7470 is not set
-# CONFIG_SENSORS_ADT7473 is not set
-# CONFIG_SENSORS_ADT7475 is not set
-# CONFIG_SENSORS_ATXP1 is not set
-# CONFIG_SENSORS_DS1621 is not set
-# CONFIG_SENSORS_I5K_AMB is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_F71882FG is not set
-# CONFIG_SENSORS_F75375S is not set
-# CONFIG_SENSORS_G760A is not set
-# CONFIG_SENSORS_GL518SM is not set
-# CONFIG_SENSORS_GL520SM is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_LM63 is not set
-# CONFIG_SENSORS_LM75 is not set
-# CONFIG_SENSORS_LM77 is not set
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM80 is not set
-# CONFIG_SENSORS_LM83 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_LM87 is not set
-# CONFIG_SENSORS_LM90 is not set
-# CONFIG_SENSORS_LM92 is not set
-# CONFIG_SENSORS_LM93 is not set
-# CONFIG_SENSORS_LTC4215 is not set
-# CONFIG_SENSORS_LTC4245 is not set
-# CONFIG_SENSORS_LM95241 is not set
-# CONFIG_SENSORS_MAX1619 is not set
-# CONFIG_SENSORS_MAX6650 is not set
-# CONFIG_SENSORS_PC87360 is not set
-# CONFIG_SENSORS_PC87427 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_SIS5595 is not set
-# CONFIG_SENSORS_DME1737 is not set
-# CONFIG_SENSORS_SMSC47M1 is not set
-# CONFIG_SENSORS_SMSC47M192 is not set
-# CONFIG_SENSORS_SMSC47B397 is not set
-# CONFIG_SENSORS_ADS7828 is not set
-# CONFIG_SENSORS_THMC50 is not set
-# CONFIG_SENSORS_VIA686A is not set
-# CONFIG_SENSORS_VT1211 is not set
-# CONFIG_SENSORS_VT8231 is not set
-# CONFIG_SENSORS_W83781D is not set
-# CONFIG_SENSORS_W83791D is not set
-# CONFIG_SENSORS_W83792D is not set
-# CONFIG_SENSORS_W83793 is not set
-# CONFIG_SENSORS_W83L785TS is not set
-# CONFIG_SENSORS_W83L786NG is not set
-# CONFIG_SENSORS_W83627HF is not set
-# CONFIG_SENSORS_W83627EHF is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
+# CONFIG_HWMON is not set
# CONFIG_THERMAL is not set
# CONFIG_THERMAL_HWMON is not set
# CONFIG_WATCHDOG is not set
@@ -1193,7 +1063,7 @@ CONFIG_SSB_POSSIBLE=y
# CONFIG_AGP is not set
# CONFIG_DRM is not set
# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=m
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
# CONFIG_FB is not set
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
@@ -1460,21 +1330,19 @@ CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XIP is not set
CONFIG_EXT3_FS=y
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
-CONFIG_EXT3_FS_XATTR=y
-# CONFIG_EXT3_FS_POSIX_ACL is not set
-# CONFIG_EXT3_FS_SECURITY is not set
+# CONFIG_EXT3_FS_XATTR is not set
# CONFIG_EXT4_FS is not set
CONFIG_JBD=y
-CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
+# CONFIG_FS_POSIX_ACL is not set
CONFIG_FILE_LOCKING=y
CONFIG_XFS_FS=m
# CONFIG_XFS_QUOTA is not set
# CONFIG_XFS_POSIX_ACL is not set
# CONFIG_XFS_RT is not set
# CONFIG_XFS_DEBUG is not set
+# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_BTRFS_FS is not set
CONFIG_DNOTIFY=y
@@ -1546,7 +1414,7 @@ CONFIG_MISC_FILESYSTEMS=y
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
-CONFIG_NFS_V3_ACL=y
+# CONFIG_NFS_V3_ACL is not set
CONFIG_NFS_V4=y
CONFIG_ROOT_NFS=y
CONFIG_NFSD=m
@@ -1556,7 +1424,6 @@ CONFIG_NFSD_V3=y
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
CONFIG_EXPORTFS=m
-CONFIG_NFS_ACL_SUPPORT=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
CONFIG_SUNRPC_GSS=y
@@ -1649,7 +1516,7 @@ CONFIG_NLATTR=y
#
# Kernel hacking
#
-# CONFIG_PRINTK_TIME is not set
+CONFIG_PRINTK_TIME=y
CONFIG_ENABLE_WARN_DEPRECATED=y
CONFIG_ENABLE_MUST_CHECK=y
CONFIG_FRAME_WARN=1024
@@ -1832,8 +1699,6 @@ CONFIG_CRYPTO_DEFLATE=m
# Random Number Generation
#
# CONFIG_CRYPTO_ANSI_CPRNG is not set
-CONFIG_CRYPTO_HW=y
-# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-# CONFIG_CRYPTO_DEV_TALITOS is not set
+# CONFIG_CRYPTO_HW is not set
# CONFIG_PPC_CLOCK is not set
# CONFIG_VIRTUALIZATION is not set
--
Rogério Brito : rbrito@{mackenzie,ime.usp}.br : GPG key 1024D/7C2CAEB8
http://www.ime.usp.br/~rbrito : http://meusite.mackenzie.com.br/rbrito
Projects: algorithms.berlios.de : lame.sf.net : vrms.alioth.debian.org
^ permalink raw reply related
* Re: [PATCH] mv643xx_eth: fix PPC DMA breakage
From: Lennert Buytenhek @ 2009-05-15 23:53 UTC (permalink / raw)
To: Gabriel Paubert; +Cc: tbm, LinuxPPC, pacman, netdev, David Miller
In-Reply-To: <20090515183924.GA29279@iram.es>
On Fri, May 15, 2009 at 08:39:24PM +0200, Gabriel Paubert wrote:
> After 2.6.29, PPC no more admits passing NULL to the dev parameter of
> the DMA API. The result is a BUG followed by solid lock-up when the
> mv643xx_eth driver brings an interface up. The following patch makes
> the driver work on my Pegasos again; it is mostly a search and replace
> of NULL by mp->dev->dev.parent in dma allocation/freeing/mapping/unmapping
> functions.
>
> Signed-off-by: Gabriel Paubert <paubert@iram.es>
Acked-by: Lennert Buytenhek <buytenh@marvell.com>
Thanks for testing!
^ permalink raw reply
* [RFC PATCH] fsldma: Add DMA_SLAVE support
From: Ira Snyder @ 2009-05-15 22:56 UTC (permalink / raw)
To: Dan Williams, Li Yang, linuxppc-dev
Use the DMA_SLAVE capability of the DMAEngine API to copy/from a
scatterlist into an arbitrary list of hardware address/length pairs.
This allows a single DMA transaction to copy data from several different
devices into a scatterlist at the same time.
This also adds support to enable some controller-specific features such as
external start and external pause of a DMA transaction.
Signed-off-by: Ira W. Snyder <iws@ovro.caltech.edu>
---
This is a request for comments on this patch. I hunch it is not quite
ready for inclusion, though it is certainly ready for review. Correct
functioning of this patch depends on the patches submitted earlier.
As suggested by Dan Williams, I implemented DMA_SLAVE support for the
fsldma controller to allow me to use the hardware to transfer to/from a
scatterlist to a list of hardware address/length pairs.
I implemented support for the extra features available in the DMA
controller, such as external pause and external start. I have not tested
the features yet. I am willing to drop the support if everything else
looks good.
I have implemented helper functions for creating the list of hardware
address/length pairs as static inline functions in the linux/fsldma.h
header. Should I incorporate these into the driver itself and use
EXPORT_SYMBOL()? I've never done this before :)
Thanks for your review,
Ira
drivers/dma/fsldma.c | 226 ++++++++++++++++++++++++++++++++++++++++++++++++
include/linux/fsldma.h | 105 ++++++++++++++++++++++
2 files changed, 331 insertions(+), 0 deletions(-)
create mode 100644 include/linux/fsldma.h
diff --git a/drivers/dma/fsldma.c b/drivers/dma/fsldma.c
index de0e5c8..465846c 100644
--- a/drivers/dma/fsldma.c
+++ b/drivers/dma/fsldma.c
@@ -29,6 +29,7 @@
#include <linux/dmapool.h>
#include <linux/of_platform.h>
+#include <linux/fsldma.h>
#include "fsldma.h"
static void dma_init(struct fsl_dma_chan *fsl_chan)
@@ -530,6 +531,228 @@ fail:
return NULL;
}
+/*
+ * Setup the DMA controller for a DMA_SLAVE transaction
+ *
+ * NOTE: this gets the hardware address/length pairs from the
+ * NOTE: struct fsl_dma_slave stored in chan->private
+ *
+ * @param chan the DMA channel
+ * @param sgl the scatterlist to transfer to/from
+ * @param sg_len the number of entries in the scatterlist
+ * @param direction the DMA direction
+ * @param flags DMAEngine flags
+ *
+ * @return a new struct dma_async_tx_descriptor or NULL
+ */
+static struct dma_async_tx_descriptor *fsl_dma_prep_slave_sg(
+ struct dma_chan *chan, struct scatterlist *sgl, unsigned int sg_len,
+ enum dma_data_direction direction, unsigned long flags)
+{
+ struct fsl_dma_chan *fsl_chan;
+ struct fsl_desc_sw *first = NULL, *prev = NULL, *new = NULL;
+ struct fsl_dma_slave *slave;
+ struct list_head *tx_list;
+ size_t copy;
+
+ int i;
+ struct scatterlist *sg;
+ size_t sg_used;
+ size_t hw_used;
+ struct fsl_dma_hw_addr *hw;
+ dma_addr_t dma_dst, dma_src;
+
+ if (!chan)
+ return NULL;
+
+ if (!chan->private)
+ return NULL;
+
+ fsl_chan = to_fsl_chan(chan);
+ slave = chan->private;
+
+ if (list_empty(&slave->addresses))
+ return NULL;
+
+ hw = list_first_entry(&slave->addresses, struct fsl_dma_hw_addr, entry);
+ hw_used = 0;
+
+ /*
+ * Build the hardware transaction to copy from the scatterlist to
+ * the hardware, or from the hardware to the scatterlist
+ *
+ * If you are copying from the hardware to the scatterlist and it
+ * takes two hardware entries to fill an entire page, then both
+ * hardware entries will be coalesced into the same page
+ *
+ * If you are copying from the scatterlist to the hardware and a
+ * single page can fill two hardware entries, then the data will
+ * be read out of the page into the first hardware entry, and so on
+ */
+ for_each_sg(sgl, sg, sg_len, i) {
+ sg_used = 0;
+
+ /* Loop until the entire scatterlist entry is used */
+ while (sg_used < sg_dma_len(sg)) {
+
+ /*
+ * If we've used up the current hardware address/length
+ * pair, we need to load a new one
+ *
+ * This is done in a while loop so that descriptors with
+ * length == 0 will be skipped
+ */
+ while (hw_used >= hw->length) {
+
+ /*
+ * If the current hardware entry is the last
+ * entry in the list, we're finished
+ */
+ if (list_is_last(&hw->entry, &slave->addresses))
+ goto finished;
+
+ /* Get the next hardware address/length pair */
+ hw = list_entry(hw->entry.next,
+ struct fsl_dma_hw_addr, entry);
+ hw_used = 0;
+ }
+
+ /* Allocate the link descriptor from DMA pool */
+ new = fsl_dma_alloc_descriptor(fsl_chan);
+ if (!new) {
+ dev_err(fsl_chan->dev, "No free memory for "
+ "link descriptor\n");
+ goto fail;
+ }
+#ifdef FSL_DMA_LD_DEBUG
+ dev_dbg(fsl_chan->dev, "new link desc alloc %p\n", new);
+#endif
+
+ /*
+ * Calculate the maximum number of bytes to transfer,
+ * making sure it is less than the DMA controller limit
+ */
+ copy = min_t(size_t, sg_dma_len(sg) - sg_used,
+ hw->length - hw_used);
+ copy = min_t(size_t, copy, FSL_DMA_BCR_MAX_CNT);
+
+ /*
+ * DMA_FROM_DEVICE
+ * from the hardware to the scatterlist
+ *
+ * DMA_TO_DEVICE
+ * from the scatterlist to the hardware
+ */
+ if (direction == DMA_FROM_DEVICE) {
+ dma_src = hw->address + hw_used;
+ dma_dst = sg_dma_address(sg) + sg_used;
+ } else {
+ dma_src = sg_dma_address(sg) + sg_used;
+ dma_dst = hw->address + hw_used;
+ }
+
+ /* Fill in the descriptor */
+ set_desc_cnt(fsl_chan, &new->hw, copy);
+ set_desc_src(fsl_chan, &new->hw, dma_src);
+ set_desc_dest(fsl_chan, &new->hw, dma_dst);
+
+ /*
+ * If this is not the first descriptor, chain the
+ * current descriptor after the previous descriptor
+ */
+ if (!first) {
+ first = new;
+ } else {
+ set_desc_next(fsl_chan, &prev->hw,
+ new->async_tx.phys);
+ }
+
+ new->async_tx.cookie = 0;
+ async_tx_ack(&new->async_tx);
+
+ prev = new;
+ sg_used += copy;
+ hw_used += copy;
+
+ /* Insert the link descriptor into the LD ring */
+ list_add_tail(&new->node, &first->async_tx.tx_list);
+ }
+ }
+
+finished:
+
+ /* All of the hardware address/length pairs had length == 0 */
+ if (!first || !new)
+ return NULL;
+
+ new->async_tx.flags = flags;
+ new->async_tx.cookie = -EBUSY;
+
+ /* Set End-of-link to the last link descriptor of new list */
+ set_ld_eol(fsl_chan, new);
+
+ /* Enable extra controller features */
+ if (fsl_chan->set_src_loop_size)
+ fsl_chan->set_src_loop_size(fsl_chan, slave->src_loop_size);
+
+ if (fsl_chan->set_dest_loop_size)
+ fsl_chan->set_dest_loop_size(fsl_chan, slave->dst_loop_size);
+
+ if (fsl_chan->toggle_ext_start)
+ fsl_chan->toggle_ext_start(fsl_chan, slave->external_start);
+
+ if (fsl_chan->toggle_ext_pause)
+ fsl_chan->toggle_ext_pause(fsl_chan, slave->external_pause);
+
+ return &first->async_tx;
+
+fail:
+ /* If first was not set, then we failed to allocate the very first
+ * descriptor, and we're done */
+ if (!first)
+ return NULL;
+
+ /*
+ * First is set, so all of the descriptors we allocated have been added
+ * to first->async_tx.tx_list, INCLUDING "first" itself. Therefore we
+ * must traverse the list backwards freeing each descriptor in turn
+ *
+ * We're re-using variables for the loop, oh well
+ */
+ tx_list = &first->async_tx.tx_list;
+ list_for_each_entry_safe_reverse(new, prev, tx_list, node) {
+ list_del_init(&new->node);
+ dma_pool_free(fsl_chan->desc_pool, new, new->async_tx.phys);
+ }
+
+ return NULL;
+}
+
+static void fsl_dma_device_terminate_all(struct dma_chan *chan)
+{
+ struct fsl_dma_chan *fsl_chan;
+ struct fsl_desc_sw *desc, *tmp;
+ unsigned long flags;
+
+ if (!chan)
+ return;
+
+ fsl_chan = to_fsl_chan(chan);
+
+ /* Halt the DMA engine */
+ dma_halt(fsl_chan);
+
+ spin_lock_irqsave(&fsl_chan->desc_lock, flags);
+
+ /* Remove and free all of the descriptors in the LD queue */
+ list_for_each_entry_safe(desc, tmp, &fsl_chan->ld_queue, node) {
+ list_del(&desc->node);
+ dma_pool_free(fsl_chan->desc_pool, desc, desc->async_tx.phys);
+ }
+
+ spin_unlock_irqrestore(&fsl_chan->desc_lock, flags);
+}
+
/**
* fsl_dma_update_completed_cookie - Update the completed cookie.
* @fsl_chan : Freescale DMA channel
@@ -952,12 +1175,15 @@ static int __devinit of_fsl_dma_probe(struct of_device *dev,
dma_cap_set(DMA_MEMCPY, fdev->common.cap_mask);
dma_cap_set(DMA_INTERRUPT, fdev->common.cap_mask);
+ dma_cap_set(DMA_SLAVE, fdev->common.cap_mask);
fdev->common.device_alloc_chan_resources = fsl_dma_alloc_chan_resources;
fdev->common.device_free_chan_resources = fsl_dma_free_chan_resources;
fdev->common.device_prep_dma_interrupt = fsl_dma_prep_interrupt;
fdev->common.device_prep_dma_memcpy = fsl_dma_prep_memcpy;
fdev->common.device_is_tx_complete = fsl_dma_is_complete;
fdev->common.device_issue_pending = fsl_dma_memcpy_issue_pending;
+ fdev->common.device_prep_slave_sg = fsl_dma_prep_slave_sg;
+ fdev->common.device_terminate_all = fsl_dma_device_terminate_all;
fdev->common.dev = &dev->dev;
fdev->irq = irq_of_parse_and_map(dev->node, 0);
diff --git a/include/linux/fsldma.h b/include/linux/fsldma.h
new file mode 100644
index 0000000..a42dcdd
--- /dev/null
+++ b/include/linux/fsldma.h
@@ -0,0 +1,105 @@
+/*
+ * Freescale MPC83XX / MPC85XX DMA Controller
+ *
+ * Copyright (c) 2009 Ira W. Snyder <iws@ovro.caltech.edu>
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2. This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.
+ */
+
+#ifndef __LINUX_FSLDMA_H__
+#define __LINUX_FSLDMA_H__
+
+#include <linux/dmaengine.h>
+
+/*
+ * physical hardware address / length pair for use with the
+ * DMAEngine DMA_SLAVE API
+ */
+struct fsl_dma_hw_addr {
+ struct list_head entry;
+
+ dma_addr_t address;
+ size_t length;
+};
+
+/*
+ * structure passed to the DMAEngine DMA_SLAVE API via the
+ * chan->private pointer
+ */
+struct fsl_dma_slave {
+
+ /* List of hardware address/length pairs */
+ struct list_head addresses;
+
+ /* Support for extra controller features */
+ unsigned int src_loop_size;
+ unsigned int dst_loop_size;
+ bool external_start;
+ bool external_pause;
+};
+
+/*
+ * Add an address/length pair to an existing DMA_SLAVE structure
+ *
+ * @param slave the DMA_SLAVE structure
+ * @param address the hardware address
+ * @param length the length of bytes to transfer
+ * @return 0 on success, -ERRNO otherwise
+ */
+static inline int fsl_dma_slave_append(struct fsl_dma_slave *slave,
+ dma_addr_t address, size_t length)
+{
+ struct fsl_dma_hw_addr *addr;
+
+ addr = kzalloc(sizeof(*addr), GFP_ATOMIC);
+ if (!addr)
+ return -ENOMEM;
+
+ INIT_LIST_HEAD(&addr->entry);
+ addr->address = address;
+ addr->length = length;
+
+ list_add_tail(&addr->entry, &slave->addresses);
+ return 0;
+}
+
+/*
+ * Free a DMA_SLAVE structure and associated address/length pairs
+ *
+ * @param slave the DMA_SLAVE structure to free
+ */
+static inline void fsl_dma_slave_free(struct fsl_dma_slave *slave)
+{
+ struct fsl_dma_hw_addr *addr, *tmp;
+
+ if (slave) {
+ list_for_each_entry_safe(addr, tmp, &slave->addresses, entry) {
+ list_del(&addr->entry);
+ kfree(addr);
+ }
+
+ kfree(slave);
+ }
+}
+
+/*
+ * Allocate a DMA_SLAVE structure
+ *
+ * @param gfp memory allocation flags
+ * @return a new struct fsl_dma_slave or NULL
+ */
+static inline struct fsl_dma_slave *fsl_dma_slave_alloc(gfp_t gfp)
+{
+ struct fsl_dma_slave *slave;
+
+ slave = kzalloc(sizeof(*slave), gfp);
+ if (!slave)
+ return NULL;
+
+ INIT_LIST_HEAD(&slave->addresses);
+ return slave;
+}
+
+#endif /* __LINUX_FSLDMA_H__ */
--
1.5.4.3
^ permalink raw reply related
* Fwd: Patch 2/2: Add Xilinx ML510 reference design support [attempt2]
From: Roderick Colenbrander @ 2009-05-15 22:20 UTC (permalink / raw)
To: Linuxppc-dev Development, Grant Likely
Hi,
As requested here the same patch but now with a signed-off line which I for=
got.
Regards,
Roderick Colenbrander
Signed-off-by: Roderick Colenbrander <thunderbird2k@gmail.com>
>From f46fa90e4d066767cc4fc1c5b8dc2f9ee013ea0a Mon Sep 17 00:00:00 2001
From: Roderick Colenbrander <thunderbird2k@gmail.com>
Date: Tue, 14 Apr 2009 15:49:32 +0200
Subject: [PATCH] Add Xilinx ML510 reference design support.
---
=A0arch/powerpc/boot/dts/virtex440-ml510.dts | =A0453 +++++++++++++++++++++=
++++++++
=A0arch/powerpc/platforms/44x/Kconfig =A0 =A0 =A0 =A0| =A0 10 +
=A0arch/powerpc/platforms/44x/Makefile =A0 =A0 =A0 | =A0 =A01 +
=A0arch/powerpc/platforms/44x/ml510.c =A0 =A0 =A0 =A0| =A0161 ++++++++++
=A04 files changed, 625 insertions(+), 0 deletions(-)
=A0create mode 100644 arch/powerpc/boot/dts/virtex440-ml510.dts
=A0create mode 100644 arch/powerpc/platforms/44x/ml510.c
diff --git a/arch/powerpc/boot/dts/virtex440-ml510.dts
b/arch/powerpc/boot/dts/virtex440-ml510.dts
new file mode 100644
index 0000000..7ded73c
--- /dev/null
+++ b/arch/powerpc/boot/dts/virtex440-ml510.dts
@@ -0,0 +1,453 @@
+/*
+ * Xilinx ML510 Reference Design support
+ * This DTS file was created for the ml510_bsb1_pcores_ppc440 reference de=
sign.
+ * The reference design contains a bug which prevent PCI DMA from
working properly.
+ * A description of the bug is given in the plbv46_pci section. It
needs to be fixed
+ * by the user until Xilinx updates their reference design.
+ *
+ * Copyright 2009, Roderick Colenbrander
+ */
+
+/dts-v1/;
+/ {
+ =A0 =A0 =A0 #address-cells =3D <1>;
+ =A0 =A0 =A0 #size-cells =3D <1>;
+ =A0 =A0 =A0 compatible =3D "xlnx,ml510-ref-design";
+ =A0 =A0 =A0 dcr-parent =3D <&ppc440_0>;
+ =A0 =A0 =A0 model =3D "testing";
+ =A0 =A0 =A0 DDR2_SDRAM_DIMM0: memory@0 {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 device_type =3D "memory";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 reg =3D < 0x0 0x20000000 >;
+ =A0 =A0 =A0 } ;
+ =A0 =A0 =A0 alias {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 ethernet0 =3D &Hard_Ethernet_MAC;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 serial0 =3D &RS232_Uart_1;
+ =A0 =A0 =A0 } ;
+ =A0 =A0 =A0 chosen {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0bootargs =3D "console=3DttyS0 root=3D/dev/=
xsa2 init=3D/etc/preinit";
+// =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0bootargs =3D "console=3DttyS0 root=3D/de=
v/ram";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0linux,stdout-path =3D "/plb@0/serial@83e00=
000";
+ =A0 =A0 =A0 } ;
+ =A0 =A0 =A0 cpus {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 #address-cells =3D <1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 #cpus =3D <0x1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 #size-cells =3D <0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 ppc440_0: cpu@0 {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 #address-cells =3D <1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 #size-cells =3D <1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 clock-frequency =3D <30000000=
0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 compatible =3D "PowerPC,440",=
"ibm,ppc440";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 d-cache-line-size =3D <0x20>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 d-cache-size =3D <0x8000>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 dcr-access-method =3D "native=
";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 dcr-controller ;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 device_type =3D "cpu";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 i-cache-line-size =3D <0x20>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 i-cache-size =3D <0x8000>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 model =3D "PowerPC,440";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 reg =3D <0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 timebase-frequency =3D <30000=
0000>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,apu-control =3D <0x2000>=
;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,apu-udi-0 =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,apu-udi-1 =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,apu-udi-10 =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,apu-udi-11 =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,apu-udi-12 =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,apu-udi-13 =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,apu-udi-14 =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,apu-udi-15 =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,apu-udi-2 =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,apu-udi-3 =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,apu-udi-4 =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,apu-udi-5 =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,apu-udi-6 =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,apu-udi-7 =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,apu-udi-8 =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,apu-udi-9 =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dcr-autolock-enable =3D =
<0x1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dcu-rd-ld-cache-plb-prio=
=3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dcu-rd-noncache-plb-prio=
=3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dcu-rd-touch-plb-prio =
=3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dcu-rd-urgent-plb-prio =
=3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dcu-wr-flush-plb-prio =
=3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dcu-wr-store-plb-prio =
=3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dcu-wr-urgent-plb-prio =
=3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dma0-control =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dma0-plb-prio =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dma0-rxchannelctrl =3D <=
0x1010000>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dma0-rxirqtimer =3D <0x3=
ff>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dma0-txchannelctrl =3D <=
0x1010000>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dma0-txirqtimer =3D <0x3=
ff>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dma1-control =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dma1-plb-prio =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dma1-rxchannelctrl =3D <=
0x1010000>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dma1-rxirqtimer =3D <0x3=
ff>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dma1-txchannelctrl =3D <=
0x1010000>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dma1-txirqtimer =3D <0x3=
ff>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dma2-control =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dma2-plb-prio =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dma2-rxchannelctrl =3D <=
0x1010000>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dma2-rxirqtimer =3D <0x3=
ff>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dma2-txchannelctrl =3D <=
0x1010000>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dma2-txirqtimer =3D <0x3=
ff>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dma3-control =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dma3-plb-prio =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dma3-rxchannelctrl =3D <=
0x1010000>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dma3-rxirqtimer =3D <0x3=
ff>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dma3-txchannelctrl =3D <=
0x1010000>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dma3-txirqtimer =3D <0x3=
ff>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,endian-reset =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,generate-plb-timespecs =
=3D <0x1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,icu-rd-fetch-plb-prio =
=3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,icu-rd-spec-plb-prio =3D=
<0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,icu-rd-touch-plb-prio =
=3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,interconnect-imask =3D <=
0xffffffff>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mplb-allow-lock-xfer =3D=
<0x1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mplb-arb-mode =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mplb-awidth =3D <0x20>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mplb-counter =3D <0x500>=
;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mplb-dwidth =3D <0x80>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mplb-max-burst =3D <0x8>=
;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mplb-native-dwidth =3D <=
0x80>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mplb-p2p =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mplb-prio-dcur =3D <0x2>=
;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mplb-prio-dcuw =3D <0x3>=
;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mplb-prio-icu =3D <0x4>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mplb-prio-splb0 =3D <0x1=
>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mplb-prio-splb1 =3D <0x0=
>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mplb-read-pipe-enable =
=3D <0x1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mplb-sync-tattribute =3D=
<0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mplb-wdog-enable =3D <0x=
1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mplb-write-pipe-enable =
=3D <0x1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mplb-write-post-enable =
=3D <0x1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,num-dma =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,pir =3D <0xf>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,ppc440mc-addr-base =3D <=
0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,ppc440mc-addr-high =3D <=
0x1fffffff>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,ppc440mc-arb-mode =3D <0=
x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,ppc440mc-bank-conflict-m=
ask =3D <0x1800000>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,ppc440mc-control =3D <0x=
f810008f>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,ppc440mc-max-burst =3D <=
0x8>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,ppc440mc-prio-dcur =3D <=
0x2>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,ppc440mc-prio-dcuw =3D <=
0x3>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,ppc440mc-prio-icu =3D <0=
x4>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,ppc440mc-prio-splb0 =3D =
<0x1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,ppc440mc-prio-splb1 =3D =
<0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,ppc440mc-row-conflict-ma=
sk =3D <0x7ffe00>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,ppcdm-asyncmode =3D <0x0=
>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,ppcds-asyncmode =3D <0x0=
>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,user-reset =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 } ;
+ =A0 =A0 =A0 } ;
+ =A0 =A0 =A0 plb_v46_0: plb@0 {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 #address-cells =3D <1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 #size-cells =3D <1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 compatible =3D "xlnx,plb-v46-1.03.a", "simple=
-bus";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 ranges ;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 FLASH: flash@fc000000 {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 bank-width =3D <2>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 compatible =3D "xlnx,xps-mch-=
emc-2.00.a", "cfi-flash";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 reg =3D < 0xfc000000 0x200000=
0 >;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,family =3D "virtex5";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,include-datawidth-matchi=
ng-0 =3D <0x1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,include-datawidth-matchi=
ng-1 =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,include-datawidth-matchi=
ng-2 =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,include-datawidth-matchi=
ng-3 =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,include-negedge-ioregs =
=3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,include-plb-ipif =3D <0x=
1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,include-wrbuf =3D <0x1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,max-mem-width =3D <0x10>=
;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mch-native-dwidth =3D <0=
x20>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mch-plb-clk-period-ps =
=3D <0x2710>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mch-splb-awidth =3D <0x2=
0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mch0-accessbuf-depth =3D=
<0x10>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mch0-protocol =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mch0-rddatabuf-depth =3D=
<0x10>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mch1-accessbuf-depth =3D=
<0x10>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mch1-protocol =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mch1-rddatabuf-depth =3D=
<0x10>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mch2-accessbuf-depth =3D=
<0x10>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mch2-protocol =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mch2-rddatabuf-depth =3D=
<0x10>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mch3-accessbuf-depth =3D=
<0x10>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mch3-protocol =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mch3-rddatabuf-depth =3D=
<0x10>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mem0-width =3D <0x10>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mem1-width =3D <0x20>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mem2-width =3D <0x20>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mem3-width =3D <0x20>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,num-banks-mem =3D <0x1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,num-channels =3D <0x2>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,priority-mode =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,synch-mem-0 =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,synch-mem-1 =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,synch-mem-2 =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,synch-mem-3 =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,synch-pipedelay-0 =3D <0=
x2>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,synch-pipedelay-1 =3D <0=
x2>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,synch-pipedelay-2 =3D <0=
x2>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,synch-pipedelay-3 =3D <0=
x2>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,tavdv-ps-mem-0 =3D <0x1a=
db0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,tavdv-ps-mem-1 =3D <0x3a=
98>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,tavdv-ps-mem-2 =3D <0x3a=
98>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,tavdv-ps-mem-3 =3D <0x3a=
98>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,tcedv-ps-mem-0 =3D <0x1a=
db0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,tcedv-ps-mem-1 =3D <0x3a=
98>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,tcedv-ps-mem-2 =3D <0x3a=
98>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,tcedv-ps-mem-3 =3D <0x3a=
98>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,thzce-ps-mem-0 =3D <0x88=
b8>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,thzce-ps-mem-1 =3D <0x1b=
58>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,thzce-ps-mem-2 =3D <0x1b=
58>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,thzce-ps-mem-3 =3D <0x1b=
58>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,thzoe-ps-mem-0 =3D <0x1b=
58>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,thzoe-ps-mem-1 =3D <0x1b=
58>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,thzoe-ps-mem-2 =3D <0x1b=
58>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,thzoe-ps-mem-3 =3D <0x1b=
58>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,tlzwe-ps-mem-0 =3D <0x88=
b8>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,tlzwe-ps-mem-1 =3D <0x0>=
;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,tlzwe-ps-mem-2 =3D <0x0>=
;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,tlzwe-ps-mem-3 =3D <0x0>=
;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,twc-ps-mem-0 =3D <0x1adb=
0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,twc-ps-mem-1 =3D <0x3a98=
>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,twc-ps-mem-2 =3D <0x3a98=
>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,twc-ps-mem-3 =3D <0x3a98=
>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,twp-ps-mem-0 =3D <0x1117=
0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,twp-ps-mem-1 =3D <0x2ee0=
>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,twp-ps-mem-2 =3D <0x2ee0=
>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,twp-ps-mem-3 =3D <0x2ee0=
>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,xcl0-linesize =3D <0x4>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,xcl0-writexfer =3D <0x1>=
;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,xcl1-linesize =3D <0x4>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,xcl1-writexfer =3D <0x1>=
;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,xcl2-linesize =3D <0x4>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,xcl2-writexfer =3D <0x1>=
;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,xcl3-linesize =3D <0x4>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,xcl3-writexfer =3D <0x1>=
;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 } ;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 Hard_Ethernet_MAC: xps-ll-temac@81c00000 {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 #address-cells =3D <1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 #size-cells =3D <1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 compatible =3D "xlnx,compound=
";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ethernet@81c00000 {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 compatible =
=3D "xlnx,xps-ll-temac-1.01.b";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 device_type =
=3D "network";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 interrupt-par=
ent =3D <&xps_intc_0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 interrupts =
=3D < 8 2 >;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 llink-connect=
ed =3D <&Hard_Ethernet_MAC_fifo>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 local-mac-add=
ress =3D [ 02 00 00 00 00 00 ];
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 reg =3D < 0x8=
1c00000 0x40 >;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,bus2core=
-clk-ratio =3D <0x1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,phy-type=
=3D <0x3>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,phyaddr =
=3D <0x1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,rxcsum =
=3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,rxfifo =
=3D <0x8000>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,temac-ty=
pe =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,txcsum =
=3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,txfifo =
=3D <0x8000>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 } ;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 } ;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 Hard_Ethernet_MAC_fifo: xps-ll-fifo@81a00000 =
{
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 compatible =3D "xlnx,xps-ll-f=
ifo-1.01.a";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 interrupt-parent =3D <&xps_in=
tc_0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 interrupts =3D < 6 2 >;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 reg =3D < 0x81a00000 0x10000 =
>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,family =3D "virtex5";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 } ;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 IIC_EEPROM: i2c@81600000 {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 compatible =3D "xlnx,xps-iic-=
2.00.a";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 interrupt-parent =3D <&xps_in=
tc_0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 interrupts =3D < 9 2 >;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 reg =3D < 0x81600000 0x10000 =
>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,clk-freq =3D <0x5f5e100>=
;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,family =3D "virtex5";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,gpo-width =3D <0x1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,iic-freq =3D <0x186a0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,scl-inertial-delay =3D <=
0x5>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,sda-inertial-delay =3D <=
0x5>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,ten-bit-adr =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 } ;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 LCD_OPTIONAL: gpio@81420000 {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 compatible =3D "xlnx,xps-gpio=
-1.00.a";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 reg =3D < 0x81420000 0x10000 =
>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,all-inputs =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,all-inputs-2 =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dout-default =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dout-default-2 =3D <0x0>=
;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,family =3D "virtex5";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,gpio-width =3D <0xb>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,interrupt-present =3D <0=
x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,is-bidir =3D <0x1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,is-bidir-2 =3D <0x1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,is-dual =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,tri-default =3D <0xfffff=
fff>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,tri-default-2 =3D <0xfff=
fffff>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 } ;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 LEDs_4Bit: gpio@81400000 {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 compatible =3D "xlnx,xps-gpio=
-1.00.a";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 reg =3D < 0x81400000 0x10000 =
>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,all-inputs =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,all-inputs-2 =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dout-default =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dout-default-2 =3D <0x0>=
;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,family =3D "virtex5";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,gpio-width =3D <0x4>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,interrupt-present =3D <0=
x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,is-bidir =3D <0x1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,is-bidir-2 =3D <0x1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,is-dual =3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,tri-default =3D <0xfffff=
fff>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,tri-default-2 =3D <0xfff=
fffff>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 } ;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 RS232_Uart_1: serial@83e00000 {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 clock-frequency =3D <10000000=
0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 compatible =3D "xlnx,xps-uart=
16550-2.00.b", "ns16550";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 current-speed =3D <9600>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 device_type =3D "serial";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 interrupt-parent =3D <&xps_in=
tc_0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 interrupts =3D < 11 2 >;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 reg =3D < 0x83e00000 0x10000 =
>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 reg-offset =3D <0x1003>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 reg-shift =3D <2>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,family =3D "virtex5";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,has-external-rclk =3D <0=
x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,has-external-xin =3D <0x=
0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,is-a-16550 =3D <0x1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 } ;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 SPI_EEPROM: xps-spi@feff8000 {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 compatible =3D "xlnx,xps-spi-=
2.00.b";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 interrupt-parent =3D <&xps_in=
tc_0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 interrupts =3D < 10 2 >;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 reg =3D < 0xfeff8000 0x80 >;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,family =3D "virtex5";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,fifo-exist =3D <0x1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,num-ss-bits =3D <0x1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,num-transfer-bits =3D <0=
x8>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,sck-ratio =3D <0x80>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 } ;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 SysACE_CompactFlash: sysace@83600000 {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 compatible =3D "xlnx,xps-sysa=
ce-1.00.a";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 interrupt-parent =3D <&xps_in=
tc_0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 interrupts =3D < 7 2 >;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 reg =3D < 0x83600000 0x10000 =
>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,family =3D "virtex5";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mem-width =3D <0x10>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 } ;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 plbv46_pci_0: plbv46-pci@85e00000 {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 #size-cells =3D <2>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 #address-cells =3D <3>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 compatible =3D "xlnx,plbv46-p=
ci-1.03.a";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 device_type =3D "pci";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 reg =3D < 0x85e00000 0x10000 =
>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 /* The default ML510 BSB has
C_IPIFBAR2PCIBAR_0 set to 0 which means that a read/write to
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0* the memory mapped i/o re=
gion (which starts
at 0xa0000000) for pci bar 0 on the plb side
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0* translates to 0.
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0* It is important to this =
value to
0xa0000000, so that inbound and outbound pci transactions
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0* work properly including =
DMA.
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*/
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ranges =3D <0x02000000 0x0000=
0000 0xa0000000
0xa0000000 0x00000000 0x20000000
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 0x0100000=
0 0x00000000 0x00000000
0xf0000000 0x00000000 0x00010000>;
+
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 #interrupt-cells =3D <1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 interrupt-parent =3D <&xps_in=
tc_0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 interrupt-map-mask =3D <0xff0=
0 0x0 0x0 0x7>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 interrupt-map =3D <
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 /* IRQ mappin=
g for pci slots and ALI
M1533 periperhals. In total there are
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0* 5 interr=
upt lines connected to a
xps_intc controller. Four of them are PCI
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0* IRQ A, B=
, C, D and which correspond
to respectively xpx_intc 5, 4, 3 and 2.
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0* The fift=
h interrupt line is
connected to the south bridge and this one
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0* uses irq=
1 and is active high
instead of active low.
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0* The M153=
3 contains various
peripherals including AC97 audio, a modem, USB,
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0* IDE and =
some power management
stuff. The modem isn't connected on the ML510
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0* and the =
power management core also
isn't used.
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*/
+
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 /* IDSEL 0x16=
/ dev=3D6, bus=3D0 / PCI slot 3 */
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 0x3000 0 0 1 =
&xps_intc_0 3 2
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 0x3000 0 0 2 =
&xps_intc_0 2 2
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 0x3000 0 0 3 =
&xps_intc_0 5 2
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 0x3000 0 0 4 =
&xps_intc_0 4 2
+
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 /* IDSEL 0x13=
/ dev=3D3, bus=3D1 / PCI slot 4 */
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 /*
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 0x11800 0 0 1=
&xps_intc_0 5 0 2
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 0x11800 0 0 2=
&xps_intc_0 4 0 2
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 0x11800 0 0 3=
&xps_intc_0 3 0 2
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 0x11800 0 0 4=
&xps_intc_0 2 0 2
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 */
+
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 /* According =
to the datasheet +
schematic ABCD [FPGA] of slot 5 is mapped to DABC.
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0* Testing =
showed that at least A maps
to B, the mapping of the other pins is a guess
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0* and for =
that reason the lines have
been commented.
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*/
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 /* IDSEL 0x15=
/ dev=3D5, bus=3D0 / PCI slot 5 */
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 0x2800 0 0 1 =
&xps_intc_0 4 2
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 /*
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 0x2800 0 0 2 =
&xps_intc_0 3 2
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 0x2800 0 0 3 =
&xps_intc_0 2 2
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 0x2800 0 0 4 =
&xps_intc_0 5 2
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 */
+
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 /* IDSEL 0x12=
/ dev=3D2, bus=3D1 / PCI slot 6 */
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 /*
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 0x11000 0 0 1=
&xps_intc_0 4 0 2
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 0x11000 0 0 2=
&xps_intc_0 3 0 2
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 0x11000 0 0 3=
&xps_intc_0 2 0 2
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 0x11000 0 0 4=
&xps_intc_0 5 0 2
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 */
+
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 /* IDSEL 0x11=
/ dev=3D1, bus=3D0 / AC97 audio */
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 0x0800 0 0 1 =
&i8259 7 2
+
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 /* IDSEL 0x1b=
/ dev=3D11, bus=3D0 / IDE */
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 0x5800 0 0 1 =
&i8259 14 2
+
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 /* IDSEL 0x1f=
/ dev 15, bus=3D0 / 2x USB 1.1 */
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 0x7800 0 0 1 =
&i8259 7 2
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 >;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ali_m1533 {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 #size-cells =
=3D <1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 #address-cell=
s =3D <2>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 i8259: interr=
upt-controller@20 {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 reg =3D <1 0x20 2
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 1 0xa0 2
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 1 0x4d0 2>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 interrupt-controller;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 device_type =3D "interrupt-controller";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 #address-cells =3D <0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 #interrupt-cells =3D <2>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 compatible =3D "chrp,iic";
+
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 /* The south bridge connection
is active high */
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 interrupts =3D <1 3>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 interrupt-parent =3D <&xps_intc_0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 };
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 };
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 } ;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 xps_bram_if_cntlr_1: xps-bram-if-cntlr@ffff00=
00 {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 compatible =3D "xlnx,xps-bram=
-if-cntlr-1.00.a";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 reg =3D < 0xffff0000 0x10000 =
>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,family =3D "virtex5";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 } ;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 xps_intc_0: interrupt-controller@81800000 {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 #interrupt-cells =3D <0x2>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 compatible =3D "xlnx,xps-intc=
-1.00.a";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 interrupt-controller ;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 reg =3D < 0x81800000 0x10000 =
>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,num-intr-inputs =3D <0xc=
>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 } ;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 xps_tft_0: tft@86e00000 {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 compatible =3D "xlnx,xps-tft-=
1.00.a";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 reg =3D < 0x86e00000 0x10000 =
>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,dcr-splb-slave-if =3D <0=
x1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,default-tft-base-addr =
=3D <0x0>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,family =3D "virtex5";
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,i2c-slave-addr =3D <0x76=
>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mplb-awidth =3D <0x20>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mplb-dwidth =3D <0x80>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mplb-native-dwidth =3D <=
0x40>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,mplb-smallest-slave =3D =
<0x20>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 xlnx,tft-interface =3D <0x1>;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 } ;
+ =A0 =A0 =A0 } ;
+} =A0;
diff --git a/arch/powerpc/platforms/44x/Kconfig
b/arch/powerpc/platforms/44x/Kconfig
index bf5c7ff..cf706a7 100644
--- a/arch/powerpc/platforms/44x/Kconfig
+++ b/arch/powerpc/platforms/44x/Kconfig
@@ -171,6 +171,16 @@ config XILINX_VIRTEX440_GENERIC_BOARD
=A0 =A0 =A0 =A0 =A0Most Virtex 5 designs should use this unless it needs to=
do some
=A0 =A0 =A0 =A0 =A0special configuration at board probe time.
+config XILINX_ML510
+ =A0 =A0 =A0 bool "Xilinx ML510 Reference Design support"
+ =A0 =A0 =A0 depends on 44x
+ =A0 =A0 =A0 default n
+ =A0 =A0 =A0 select XILINX_VIRTEX_5_FXT
+ =A0 =A0 =A0 select PPC_PCI_CHOICE
+ =A0 =A0 =A0 select XILINX_VIRTEX_PCI if PCI
+ =A0 =A0 =A0 select PPC_INDIRECT_PCI if PCI
+ =A0 =A0 =A0 select PPC_I8259 if PCI
+
=A0config PPC44x_SIMPLE
=A0 =A0 =A0 =A0bool "Simple PowerPC 44x board support"
=A0 =A0 =A0 =A0depends on 44x
diff --git a/arch/powerpc/platforms/44x/Makefile
b/arch/powerpc/platforms/44x/Makefile
index 01f51da..6793f4e 100644
--- a/arch/powerpc/platforms/44x/Makefile
+++ b/arch/powerpc/platforms/44x/Makefile
@@ -4,3 +4,4 @@ obj-$(CONFIG_EBONY) =A0 =A0 +=3D ebony.o
=A0obj-$(CONFIG_SAM440EP) =A0 =A0 =A0 =A0 +=3D sam440ep.o
=A0obj-$(CONFIG_WARP) =A0 =A0 +=3D warp.o
=A0obj-$(CONFIG_XILINX_VIRTEX_5_FXT) +=3D virtex.o
+obj-$(CONFIG_XILINX_ML510) +=3D ml510.o
diff --git a/arch/powerpc/platforms/44x/ml510.c
b/arch/powerpc/platforms/44x/ml510.c
new file mode 100644
index 0000000..c64d792
--- /dev/null
+++ b/arch/powerpc/platforms/44x/ml510.c
@@ -0,0 +1,161 @@
+/*
+ * Xilinx ML510 Reference Design support, derived from
+ * the generic Xilinx Virtex 5 board support
+ *
+ * Copyright 2007 Secret Lab Technologies Ltd.
+ * Copyright 2008 Xilinx, Inc.
+ * Copyright 2009 Roderick Colenbrander
+ *
+ * The i8259 cascade code was derived from 86xx/pic.c which is
copyrighted by Freescale Semiconductor, Inc.
+ * Xilinx ML510 PCI initialization code, derived from the Xilinx
ML300/ML410 based board support.
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2. This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.
+ */
+
+#include <linux/init.h>
+#include <linux/of_platform.h>
+#include <asm/machdep.h>
+#include <asm/prom.h>
+#include <asm/time.h>
+#include <asm/xilinx_intc.h>
+#include <asm/reg.h>
+#include <asm/ppc4xx.h>
+#ifdef CONFIG_PPC_I8259
+#include <asm/i8259.h>
+#endif
+#ifdef CONFIG_PCI
+#include <linux/pci.h>
+#endif
+#include "44x.h"
+
+static struct of_device_id xilinx_of_bus_ids[] __initdata =3D {
+ =A0 =A0 =A0 { .compatible =3D "simple-bus", },
+ =A0 =A0 =A0 { .compatible =3D "xlnx,plb-v46-1.00.a", },
+ =A0 =A0 =A0 { .compatible =3D "xlnx,plb-v46-1.02.a", },
+ =A0 =A0 =A0 { .compatible =3D "xlnx,plb-v34-1.01.a", },
+ =A0 =A0 =A0 { .compatible =3D "xlnx,plb-v34-1.02.a", },
+ =A0 =A0 =A0 { .compatible =3D "xlnx,opb-v20-1.10.c", },
+ =A0 =A0 =A0 { .compatible =3D "xlnx,dcr-v29-1.00.a", },
+ =A0 =A0 =A0 { .compatible =3D "xlnx,compound", },
+ =A0 =A0 =A0 {}
+};
+
+#ifdef CONFIG_PPC_I8259
+static void ml510_8259_cascade(unsigned int irq, struct irq_desc *desc)
+{
+ =A0 =A0 =A0 unsigned int cascade_irq =3D i8259_irq();
+ =A0 =A0 =A0 if (cascade_irq !=3D NO_IRQ)
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 generic_handle_irq(cascade_irq);
+
+ =A0 =A0 =A0 /* Let xilinx_intc end the interrupt */
+ =A0 =A0 =A0 desc->chip->ack(irq);
+ =A0 =A0 =A0 desc->chip->unmask(irq);
+}
+
+static void __init ml510_setup_i8259_cascade(void)
+{
+ =A0 =A0 =A0 struct device_node *np, *cascade_node =3D NULL;
+ =A0 =A0 =A0 int cascade_irq;
+
+ =A0 =A0 =A0 /* Initialize i8259 controller */
+ =A0 =A0 =A0 for_each_node_by_type(np, "interrupt-controller")
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (of_device_is_compatible(n=
p, "chrp,iic")) {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 cascade_node =3D np;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 break;
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 }
+
+ =A0 =A0 =A0 if (cascade_node =3D=3D NULL) {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 printk(KERN_DEBUG "Could not =
find i8259 PIC\n");
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return;
+ =A0 =A0 =A0 }
+
+ =A0 =A0 =A0 cascade_irq =3D irq_of_parse_and_map(cascade_node, 0);
+ =A0 =A0 =A0 if (cascade_irq =3D=3D NO_IRQ) {
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 printk(KERN_ERR "Failed to ma=
p cascade interrupt\n");
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 return;
+ =A0 =A0 =A0 }
+
+ =A0 =A0 =A0 i8259_init(cascade_node, 0);
+
+ =A0 =A0 =A0 of_node_put(cascade_node);
+ =A0 =A0 =A0 set_irq_chained_handler(cascade_irq, ml510_8259_cascade);
+}
+#endif /* CONFIG_PPC_I8259 */
+
+#ifdef CONFIG_PCI
+static int ml510_pci_exclude_device(struct pci_controller *hose,
u_char bus, u8 devfn)
+{
+ =A0 =A0 =A0 if (bus !=3D 0)
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 return PCIBIOS_DEVICE_NOT_FOUND;
+ =A0 =A0 =A0 else
+ =A0 =A0 =A0 =A0 =A0 =A0 =A0 return PCIBIOS_SUCCESSFUL;
+}
+
+static void __devinit ali_quirk(struct pci_dev *dev)
+{
+ =A0 =A0 =A0 /* Enable the IDE controller */
+ =A0 =A0 =A0 pci_write_config_byte(dev, 0x58, 0x4c);
+ =A0 =A0 =A0 /* Assign irq 14 to the primary ide channel */
+ =A0 =A0 =A0 pci_write_config_byte(dev, 0x44, 0x0d);
+ =A0 =A0 =A0 /* Assign irq 15 to the secondary ide channel */
+ =A0 =A0 =A0 pci_write_config_byte(dev, 0x75, 0x0f);
+ =A0 =A0 =A0 /* Set the ide controller in native mode */
+ =A0 =A0 =A0 pci_write_config_byte(dev, 0x09, 0xff);
+
+ =A0 =A0 =A0 pci_write_config_byte(dev, 0x48, 0x00); // INTB =3D disabled,
INTA =3D disabled
+ =A0 =A0 =A0 pci_write_config_byte(dev, 0x4a, 0x00); // INTD =3D disabled,
INTC =3D disabled
+ =A0 =A0 =A0 pci_write_config_byte(dev, 0x4b, 0x00); // Audio =3D INT7, Mo=
dem
=3D disabled.
+ =A0 =A0 =A0 pci_write_config_byte(dev, 0x74, 0x06); // USB =3D INT7
+}
+DECLARE_PCI_FIXUP_EARLY(0x10b9, 0x1533, ali_quirk);
+#endif /* CONFIG_PCI */
+
+static int __init ml510_device_probe(void)
+{
+ =A0 =A0 =A0 of_platform_bus_probe(NULL, xilinx_of_bus_ids, NULL);
+
+ =A0 =A0 =A0 return 0;
+}
+machine_device_initcall(ml510, ml510_device_probe);
+
+static int __init ml510_probe(void)
+{
+ =A0 =A0 =A0 unsigned long root =3D of_get_flat_dt_root();
+
+ =A0 =A0 =A0 return of_flat_dt_is_compatible(root, "xlnx,ml510-ref-design"=
);
+}
+
+void virtex_pci_init(void);
+static void __init ml510_setup_arch(void)
+{
+#ifdef CONFIG_PCI
+ =A0 =A0 =A0 /* Register the host bridge */
+ =A0 =A0 =A0 virtex_pci_init();
+#endif /* CONFIG_PCI */
+}
+
+static void ml510_init_IRQ(void)
+{
+ =A0 =A0 =A0 xilinx_intc_init_tree();
+
+#ifdef CONFIG_PPC_I8259
+ =A0 =A0 =A0 /* The devices on the ALI M1553 south bridge are connected to
an internal i8259 */
+ =A0 =A0 =A0 ml510_setup_i8259_cascade();
+ =A0 =A0 =A0 /* Program irq 7 (usb/audio), 14/15 (ide) to level sensitive =
*/
+ =A0 =A0 =A0 outb(0xc0, 0x4d0);
+ =A0 =A0 =A0 outb(0xc0, 0x4d1);
+#endif /* CONFIG_PPC_I8259 */
+}
+
+define_machine(ml510) {
+ =A0 =A0 =A0 .name =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=
=A0 =A0 =A0 =3D "Xilinx ML510
Reference Design support",
+ =A0 =A0 =A0 .probe =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0=3D ml510_probe,
+ =A0 =A0 =A0 .setup_arch =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =3D ml510_setup_arch,
+ =A0 =A0 =A0 .pci_exclude_device =A0 =A0 =A0 =A0 =A0 =A0 =3D ml510_pci_exc=
lude_device,
+ =A0 =A0 =A0 .init_IRQ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=
=A0 =A0 =3D ml510_init_IRQ,
+ =A0 =A0 =A0 .get_irq =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0=3D xilinx_intc_get_irq,
+ =A0 =A0 =A0 .calibrate_decr =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =3D generic_c=
alibrate_decr,
+ =A0 =A0 =A0 .restart =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0=3D ppc4xx_reset_system,
+};
--
1.5.6.3
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev
^ permalink raw reply related
* Re: [PATCH] powerpc/ftrace: fix constraint to be early clobber
From: Benjamin Herrenschmidt @ 2009-05-15 22:27 UTC (permalink / raw)
To: Steven Rostedt
Cc: linuxppc-dev, Ingo Molnar, LKML, Andrew Morton,
Frederic Weisbecker
In-Reply-To: <alpine.DEB.2.00.0905141236420.30591@gandalf.stny.rr.com>
On Fri, 2009-05-15 at 10:33 -0400, Steven Rostedt wrote:
> After upgrading my distcc boxes from gcc 4.2.2 to 4.4.0, the function
> graph tracer broke. This was discovered on my x86 boxes.
>
> The issue is that gcc used the same register for an output as it did for
> an input in an asm statement. I first thought this was a bug in gcc and
> reported it. I was notified that gcc was correct and that the output had
> to be flagged as an "early clobber".
>
> I noticed that powerpc had the same issue and this patch fixes it.
>
> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Ack. You merge this or I do ?
Cheers,
Ben.
> diff --git a/arch/powerpc/kernel/ftrace.c b/arch/powerpc/kernel/ftrace.c
> index 70e2a73..68fd74e 100644
> --- a/arch/powerpc/kernel/ftrace.c
> +++ b/arch/powerpc/kernel/ftrace.c
> @@ -594,7 +594,7 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr)
> PPC_LONG "2b,4b\n"
> ".previous"
>
> - : [old] "=r" (old), [faulted] "=r" (faulted)
> + : [old] "=&r" (old), [faulted] "=r" (faulted)
> : [parent] "r" (parent), [return_hooker] "r" (return_hooker)
> : "memory"
> );
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox