RE: [PATCH 5/6] Add OF-tree support to RapidIO controller driver.
> -Original Message- > From: Kumar Gala [mailto:[EMAIL PROTECTED] > > > On Feb 4, 2008, at 11:44 PM, Stephen Rothwell wrote: > > >> > >> + aw = *(u32 *)of_get_property(dev->node, "#address-cells", NULL); > >> + sw = *(u32 *)of_get_property(dev->node, "#size-cells", NULL); > > > > What happens if either of these properties is missing? > > Should we add __must_check to of_get_property? > You are right, I'll add the checking here. Thanks! Wei. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
RE: [PATCH 5/6] Add OF-tree support to RapidIO controller driver.
-Original Message- From: Kumar Gala [mailto:[EMAIL PROTECTED] On Feb 4, 2008, at 11:44 PM, Stephen Rothwell wrote: + aw = *(u32 *)of_get_property(dev-node, #address-cells, NULL); + sw = *(u32 *)of_get_property(dev-node, #size-cells, NULL); What happens if either of these properties is missing? Should we add __must_check to of_get_property? You are right, I'll add the checking here. Thanks! Wei. -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 5/6] Add OF-tree support to RapidIO controller driver.
On Feb 4, 2008, at 11:44 PM, Stephen Rothwell wrote: + aw = *(u32 *)of_get_property(dev->node, "#address-cells", NULL); + sw = *(u32 *)of_get_property(dev->node, "#size-cells", NULL); What happens if either of these properties is missing? Should we add __must_check to of_get_property? - k -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 5/6] Add OF-tree support to RapidIO controller driver.
On Feb 4, 2008, at 11:44 PM, Stephen Rothwell wrote: + aw = *(u32 *)of_get_property(dev-node, #address-cells, NULL); + sw = *(u32 *)of_get_property(dev-node, #size-cells, NULL); What happens if either of these properties is missing? Should we add __must_check to of_get_property? - k -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 5/6] Add OF-tree support to RapidIO controller driver.
On Wed, 30 Jan 2008 18:30:52 +0800 Zhang Wei <[EMAIL PROTECTED]> wrote: > > -void fsl_rio_setup(int law_start, int law_size) > +int fsl_rio_setup(struct of_device *dev) > { > + if (!dev->node) { > + dev_err(>dev, "Device OF-Node is NULL"); > + return -EFAULT; Probably -EINVAL would be better. Here and all the other -EFAULTs. > + aw = *(u32 *)of_get_property(dev->node, "#address-cells", NULL); > + sw = *(u32 *)of_get_property(dev->node, "#size-cells", NULL); What happens if either of these properties is missing? > +static struct of_device_id fsl_of_rio_rpn_ids[] = { This should be "const" please. -- Cheers, Stephen Rothwell[EMAIL PROTECTED] http://www.canb.auug.org.au/~sfr/ pgp5nmctM9RR0.pgp Description: PGP signature
Re: [PATCH 5/6] Add OF-tree support to RapidIO controller driver.
On Wed, 30 Jan 2008 18:30:52 +0800 Zhang Wei [EMAIL PROTECTED] wrote: -void fsl_rio_setup(int law_start, int law_size) +int fsl_rio_setup(struct of_device *dev) { + if (!dev-node) { + dev_err(dev-dev, Device OF-Node is NULL); + return -EFAULT; Probably -EINVAL would be better. Here and all the other -EFAULTs. + aw = *(u32 *)of_get_property(dev-node, #address-cells, NULL); + sw = *(u32 *)of_get_property(dev-node, #size-cells, NULL); What happens if either of these properties is missing? +static struct of_device_id fsl_of_rio_rpn_ids[] = { This should be const please. -- Cheers, Stephen Rothwell[EMAIL PROTECTED] http://www.canb.auug.org.au/~sfr/ pgp5nmctM9RR0.pgp Description: PGP signature
[PATCH 5/6] Add OF-tree support to RapidIO controller driver.
Now, RapidIO driver for powerpc architecture is also support OF-device. Signed-off-by: Zhang Wei <[EMAIL PROTECTED]> --- arch/powerpc/kernel/Makefile |1 - arch/powerpc/kernel/rio.c | 52 - arch/powerpc/sysdev/fsl_rio.c | 101 +--- arch/powerpc/sysdev/fsl_rio.h | 20 4 files changed, 93 insertions(+), 81 deletions(-) delete mode 100644 arch/powerpc/kernel/rio.c delete mode 100644 arch/powerpc/sysdev/fsl_rio.h diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index 58dbfef..d9b3770 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile @@ -70,7 +70,6 @@ pci64-$(CONFIG_PPC64) += pci_dn.o isa-bridge.o obj-$(CONFIG_PCI) += pci_$(CONFIG_WORD_SIZE).o $(pci64-y) \ pci-common.o obj-$(CONFIG_PCI_MSI) += msi.o -obj-$(CONFIG_RAPIDIO) += rio.o obj-$(CONFIG_KEXEC)+= machine_kexec.o crash.o \ machine_kexec_$(CONFIG_WORD_SIZE).o obj-$(CONFIG_AUDIT)+= audit.o diff --git a/arch/powerpc/kernel/rio.c b/arch/powerpc/kernel/rio.c deleted file mode 100644 index 29487fe..000 --- a/arch/powerpc/kernel/rio.c +++ /dev/null @@ -1,52 +0,0 @@ -/* - * RapidIO PPC32 support - * - * Copyright 2005 MontaVista Software, Inc. - * Matt Porter <[EMAIL PROTECTED]> - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - */ - -#include -#include -#include - -#include - -/** - * platform_rio_init - Do platform specific RIO init - * - * Any platform specific initialization of RapdIO - * hardware is done here as well as registration - * of any active master ports in the system. - */ -void __attribute__ ((weak)) -platform_rio_init(void) -{ - printk(KERN_WARNING "RIO: No platform_rio_init() present\n"); -} - -/** - * ppc_rio_init - Do PPC32 RIO init - * - * Calls platform-specific RIO init code and then calls - * rio_init_mports() to initialize any master ports that - * have been registered with the RIO subsystem. - */ -static int __init ppc_rio_init(void) -{ - printk(KERN_INFO "RIO: RapidIO init\n"); - - /* Platform specific initialization */ - platform_rio_init(); - - /* Enumerate all registered ports */ - rio_init_mports(); - - return 0; -} - -subsys_initcall(ppc_rio_init); diff --git a/arch/powerpc/sysdev/fsl_rio.c b/arch/powerpc/sysdev/fsl_rio.c index 3907a2c..36b43ec 100644 --- a/arch/powerpc/sysdev/fsl_rio.c +++ b/arch/powerpc/sysdev/fsl_rio.c @@ -20,6 +20,7 @@ #include #include #include +#include #include @@ -28,7 +29,6 @@ #define IRQ_RIO_TX(m) (((struct rio_priv *)(m->priv))->txirq) #define IRQ_RIO_RX(m) (((struct rio_priv *)(m->priv))->rxirq) -#define RIO_REGS_BASE (CCSRBAR + 0xc) #define RIO_ATMU_REGS_OFFSET 0x10c00 #define RIO_MSG_REGS_OFFSET0x11000 #define RIO_MAINT_WIN_SIZE 0x40 @@ -908,19 +908,57 @@ __setup("riohdid=", fsl_rio_get_cmdline); /** * fsl_rio_setup - Setup MPC85xx RapidIO interface - * @law_start: Starting physical address of RapidIO LAW - * @law_size: Size of RapidIO LAW + * @fsl_rio_setup - Setup Freescale PowerPC RapidIO interface * * Initializes MPC85xx RapidIO hardware interface, configures * master port with system-specific info, and registers the * master port with the RapidIO subsystem. */ -void fsl_rio_setup(int law_start, int law_size) +int fsl_rio_setup(struct of_device *dev) { struct rio_ops *ops; struct rio_mport *port; - struct rio_priv *priv = NULL; - int rc; + struct rio_priv *priv; + int rc = 0; + const u32 *dt_range; + struct resource regs; + int rlen; + u64 law_start, law_size; + int paw, aw, sw; + + if (!dev->node) { + dev_err(>dev, "Device OF-Node is NULL"); + return -EFAULT; + } + + rc = of_address_to_resource(dev->node, 0, ); + if (rc) { + dev_err(>dev, "Can't get %s property 'reg'\n", + dev->node->full_name); + return -EFAULT; + } + dev_info(>dev, "Of-device full name %s\n", dev->node->full_name); + dev_info(>dev, "Regs start 0x%08x size 0x%08x\n", regs.start, + regs.end - regs.start + 1); + + dt_range = of_get_property(dev->node, "ranges", ); + if (!dt_range) { + dev_err(>dev, "Can't get %s property 'ranges'\n", + dev->node->full_name); + return -EFAULT; + } + + /* Get node address wide */ + aw = *(u32 *)of_get_property(dev->node, "#address-cells", NULL); + sw =
[PATCH 5/6] Add OF-tree support to RapidIO controller driver.
Now, RapidIO driver for powerpc architecture is also support OF-device. Signed-off-by: Zhang Wei [EMAIL PROTECTED] --- arch/powerpc/kernel/Makefile |1 - arch/powerpc/kernel/rio.c | 52 - arch/powerpc/sysdev/fsl_rio.c | 101 +--- arch/powerpc/sysdev/fsl_rio.h | 20 4 files changed, 93 insertions(+), 81 deletions(-) delete mode 100644 arch/powerpc/kernel/rio.c delete mode 100644 arch/powerpc/sysdev/fsl_rio.h diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index 58dbfef..d9b3770 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile @@ -70,7 +70,6 @@ pci64-$(CONFIG_PPC64) += pci_dn.o isa-bridge.o obj-$(CONFIG_PCI) += pci_$(CONFIG_WORD_SIZE).o $(pci64-y) \ pci-common.o obj-$(CONFIG_PCI_MSI) += msi.o -obj-$(CONFIG_RAPIDIO) += rio.o obj-$(CONFIG_KEXEC)+= machine_kexec.o crash.o \ machine_kexec_$(CONFIG_WORD_SIZE).o obj-$(CONFIG_AUDIT)+= audit.o diff --git a/arch/powerpc/kernel/rio.c b/arch/powerpc/kernel/rio.c deleted file mode 100644 index 29487fe..000 --- a/arch/powerpc/kernel/rio.c +++ /dev/null @@ -1,52 +0,0 @@ -/* - * RapidIO PPC32 support - * - * Copyright 2005 MontaVista Software, Inc. - * Matt Porter [EMAIL PROTECTED] - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - */ - -#include linux/init.h -#include linux/kernel.h -#include linux/rio.h - -#include asm/rio.h - -/** - * platform_rio_init - Do platform specific RIO init - * - * Any platform specific initialization of RapdIO - * hardware is done here as well as registration - * of any active master ports in the system. - */ -void __attribute__ ((weak)) -platform_rio_init(void) -{ - printk(KERN_WARNING RIO: No platform_rio_init() present\n); -} - -/** - * ppc_rio_init - Do PPC32 RIO init - * - * Calls platform-specific RIO init code and then calls - * rio_init_mports() to initialize any master ports that - * have been registered with the RIO subsystem. - */ -static int __init ppc_rio_init(void) -{ - printk(KERN_INFO RIO: RapidIO init\n); - - /* Platform specific initialization */ - platform_rio_init(); - - /* Enumerate all registered ports */ - rio_init_mports(); - - return 0; -} - -subsys_initcall(ppc_rio_init); diff --git a/arch/powerpc/sysdev/fsl_rio.c b/arch/powerpc/sysdev/fsl_rio.c index 3907a2c..36b43ec 100644 --- a/arch/powerpc/sysdev/fsl_rio.c +++ b/arch/powerpc/sysdev/fsl_rio.c @@ -20,6 +20,7 @@ #include linux/interrupt.h #include linux/rio.h #include linux/rio_drv.h +#include linux/of_platform.h #include asm/io.h @@ -28,7 +29,6 @@ #define IRQ_RIO_TX(m) (((struct rio_priv *)(m-priv))-txirq) #define IRQ_RIO_RX(m) (((struct rio_priv *)(m-priv))-rxirq) -#define RIO_REGS_BASE (CCSRBAR + 0xc) #define RIO_ATMU_REGS_OFFSET 0x10c00 #define RIO_MSG_REGS_OFFSET0x11000 #define RIO_MAINT_WIN_SIZE 0x40 @@ -908,19 +908,57 @@ __setup(riohdid=, fsl_rio_get_cmdline); /** * fsl_rio_setup - Setup MPC85xx RapidIO interface - * @law_start: Starting physical address of RapidIO LAW - * @law_size: Size of RapidIO LAW + * @fsl_rio_setup - Setup Freescale PowerPC RapidIO interface * * Initializes MPC85xx RapidIO hardware interface, configures * master port with system-specific info, and registers the * master port with the RapidIO subsystem. */ -void fsl_rio_setup(int law_start, int law_size) +int fsl_rio_setup(struct of_device *dev) { struct rio_ops *ops; struct rio_mport *port; - struct rio_priv *priv = NULL; - int rc; + struct rio_priv *priv; + int rc = 0; + const u32 *dt_range; + struct resource regs; + int rlen; + u64 law_start, law_size; + int paw, aw, sw; + + if (!dev-node) { + dev_err(dev-dev, Device OF-Node is NULL); + return -EFAULT; + } + + rc = of_address_to_resource(dev-node, 0, regs); + if (rc) { + dev_err(dev-dev, Can't get %s property 'reg'\n, + dev-node-full_name); + return -EFAULT; + } + dev_info(dev-dev, Of-device full name %s\n, dev-node-full_name); + dev_info(dev-dev, Regs start 0x%08x size 0x%08x\n, regs.start, + regs.end - regs.start + 1); + + dt_range = of_get_property(dev-node, ranges, rlen); + if (!dt_range) { + dev_err(dev-dev, Can't get %s property 'ranges'\n, + dev-node-full_name); + return -EFAULT; + } + + /* Get node