Message ID | 1312892907-20419-5-git-send-email-holt@sgi.com (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Hi Robin, On 08/09/2011 02:28 PM, Robin Holt wrote: > I added a simple clock source for the p1010rdb so the flexcan driver > could determine a clock frequency. The p1010 can device only has an > oscillator of system bus frequency divided by 2. > > Signed-off-by: Robin Holt <holt@sgi.com> > To: Marc Kleine-Budde <mkl@pengutronix.de>, > To: Wolfgang Grandegger <wg@grandegger.com>, > To: U Bhaskar-B22300 <B22300@freescale.com> > Cc: socketcan-core@lists.berlios.de, > Cc: netdev@vger.kernel.org, > Cc: PPC list <linuxppc-dev@lists.ozlabs.org> > --- > arch/powerpc/platforms/85xx/Kconfig | 2 + > arch/powerpc/platforms/85xx/Makefile | 2 + > arch/powerpc/platforms/85xx/clock.c | 42 ++++++++++++++++++++++++++++++++ > arch/powerpc/platforms/85xx/p1010rdb.c | 8 ++++++ > 4 files changed, 54 insertions(+), 0 deletions(-) > create mode 100644 arch/powerpc/platforms/85xx/clock.c > > diff --git a/arch/powerpc/platforms/85xx/Kconfig b/arch/powerpc/platforms/85xx/Kconfig > index 498534c..c4304ae 100644 > --- a/arch/powerpc/platforms/85xx/Kconfig > +++ b/arch/powerpc/platforms/85xx/Kconfig > @@ -70,6 +70,8 @@ config MPC85xx_RDB > config P1010_RDB > bool "Freescale P1010RDB" > select DEFAULT_UIMAGE > + select HAVE_CAN_FLEXCAN if NET && CAN > + select PPC_CLOCK if CAN_FLEXCAN > help > This option enables support for the MPC85xx RDB (P1010 RDB) board > > diff --git a/arch/powerpc/platforms/85xx/Makefile b/arch/powerpc/platforms/85xx/Makefile > index a971b32..cc7f381 100644 > --- a/arch/powerpc/platforms/85xx/Makefile > +++ b/arch/powerpc/platforms/85xx/Makefile > @@ -3,6 +3,8 @@ > # > obj-$(CONFIG_SMP) += smp.o > > +obj-$(CONFIG_PPC_CLOCK) += clock.o > + > obj-$(CONFIG_MPC8540_ADS) += mpc85xx_ads.o > obj-$(CONFIG_MPC8560_ADS) += mpc85xx_ads.o > obj-$(CONFIG_MPC85xx_CDS) += mpc85xx_cds.o > diff --git a/arch/powerpc/platforms/85xx/clock.c b/arch/powerpc/platforms/85xx/clock.c > new file mode 100644 > index 0000000..a6fd2c8 > --- /dev/null > +++ b/arch/powerpc/platforms/85xx/clock.c > @@ -0,0 +1,42 @@ > + > +#include <linux/device.h> > +#include <linux/err.h> > + > +#include <asm/clk_interface.h> > + > +#include <sysdev/fsl_soc.h> > + > +/* > + * p1010 needs to provide a clock source for the flexcan driver. The > + * oscillator for the p1010 processor is only ever the system clock / 2. > + */ > + > +static struct clk *mpc85xx_clk_get(struct device *dev, const char *id) > +{ > + if (!dev) > + return ERR_PTR(-ENOENT); > + Ah, I think you removed too much code here. I obviously did not understand what the device node check is good for, sorry. The clock is only implemented for the Flexcan and therefore we should add a check here: if (!dev->of_node || !of_device_is_compatible(dev->of_node, "fsl,flexcan")) return ERR_PTR(-ENOENT); Something like that should work. For the next version you can then add my "Acked-by: Wolfgang Grandegger <wg@grandegger.com" to all patches. Wolfgang.
Hi Robin, Where are you doing the irq handling ie request_irq() for the powerpc based P1010. Or the existing code of ARM based FlexCAN will work for P1010 ?? --Bhaskar > -----Original Message----- > From: Robin Holt [mailto:holt@sgi.com] > Sent: Tuesday, August 09, 2011 5:58 PM > To: Robin Holt; Marc Kleine-Budde; Wolfgang Grandegger; U Bhaskar-B22300 > Cc: Robin Holt; socketcan-core@lists.berlios.de; netdev@vger.kernel.org; > PPC list > Subject: [PATCH 4/4] [powerpc] Add flexcan device support for p1010rdb. > > I added a simple clock source for the p1010rdb so the flexcan driver > could determine a clock frequency. The p1010 can device only has an > oscillator of system bus frequency divided by 2. > > Signed-off-by: Robin Holt <holt@sgi.com> > To: Marc Kleine-Budde <mkl@pengutronix.de>, > To: Wolfgang Grandegger <wg@grandegger.com>, > To: U Bhaskar-B22300 <B22300@freescale.com> > Cc: socketcan-core@lists.berlios.de, > Cc: netdev@vger.kernel.org, > Cc: PPC list <linuxppc-dev@lists.ozlabs.org> > --- > arch/powerpc/platforms/85xx/Kconfig | 2 + > arch/powerpc/platforms/85xx/Makefile | 2 + > arch/powerpc/platforms/85xx/clock.c | 42 > ++++++++++++++++++++++++++++++++ > arch/powerpc/platforms/85xx/p1010rdb.c | 8 ++++++ > 4 files changed, 54 insertions(+), 0 deletions(-) create mode 100644 > arch/powerpc/platforms/85xx/clock.c > > diff --git a/arch/powerpc/platforms/85xx/Kconfig > b/arch/powerpc/platforms/85xx/Kconfig > index 498534c..c4304ae 100644 > --- a/arch/powerpc/platforms/85xx/Kconfig > +++ b/arch/powerpc/platforms/85xx/Kconfig > @@ -70,6 +70,8 @@ config MPC85xx_RDB > config P1010_RDB > bool "Freescale P1010RDB" > select DEFAULT_UIMAGE > + select HAVE_CAN_FLEXCAN if NET && CAN > + select PPC_CLOCK if CAN_FLEXCAN > help > This option enables support for the MPC85xx RDB (P1010 RDB) board > > diff --git a/arch/powerpc/platforms/85xx/Makefile > b/arch/powerpc/platforms/85xx/Makefile > index a971b32..cc7f381 100644 > --- a/arch/powerpc/platforms/85xx/Makefile > +++ b/arch/powerpc/platforms/85xx/Makefile > @@ -3,6 +3,8 @@ > # > obj-$(CONFIG_SMP) += smp.o > > +obj-$(CONFIG_PPC_CLOCK) += clock.o > + > obj-$(CONFIG_MPC8540_ADS) += mpc85xx_ads.o > obj-$(CONFIG_MPC8560_ADS) += mpc85xx_ads.o > obj-$(CONFIG_MPC85xx_CDS) += mpc85xx_cds.o diff --git > a/arch/powerpc/platforms/85xx/clock.c > b/arch/powerpc/platforms/85xx/clock.c > new file mode 100644 > index 0000000..a6fd2c8 > --- /dev/null > +++ b/arch/powerpc/platforms/85xx/clock.c > @@ -0,0 +1,42 @@ > + > +#include <linux/device.h> > +#include <linux/err.h> > + > +#include <asm/clk_interface.h> > + > +#include <sysdev/fsl_soc.h> > + > +/* > + * p1010 needs to provide a clock source for the flexcan driver. The > + * oscillator for the p1010 processor is only ever the system clock / 2. > + */ > + > +static struct clk *mpc85xx_clk_get(struct device *dev, const char *id) > +{ > + if (!dev) > + return ERR_PTR(-ENOENT); > + > + return NULL; > +} > + > +static void mpc85xx_clk_put(struct clk *clk) { > + return; > +} > + > +static unsigned long mpc85xx_clk_get_rate(struct clk *clk) { > + return fsl_get_sys_freq() / 2; > +} > + > +static struct clk_interface mpc85xx_clk_functions = { > + .clk_get = mpc85xx_clk_get, > + .clk_get_rate = mpc85xx_clk_get_rate, > + .clk_put = mpc85xx_clk_put, > +}; > + > +void __init mpc85xx_clk_init(void) > +{ > + clk_functions = mpc85xx_clk_functions; } > + > diff --git a/arch/powerpc/platforms/85xx/p1010rdb.c > b/arch/powerpc/platforms/85xx/p1010rdb.c > index d7387fa..5e52122 100644 > --- a/arch/powerpc/platforms/85xx/p1010rdb.c > +++ b/arch/powerpc/platforms/85xx/p1010rdb.c > @@ -81,6 +81,13 @@ static void __init p1010_rdb_setup_arch(void) > printk(KERN_INFO "P1010 RDB board from Freescale Semiconductor\n"); > } > > +extern void mpc85xx_clk_init(void); > + > +static void __init p1010_rdb_init(void) { > + mpc85xx_clk_init(); > +} > + > static struct of_device_id __initdata p1010rdb_ids[] = { > { .type = "soc", }, > { .compatible = "soc", }, > @@ -111,6 +118,7 @@ define_machine(p1010_rdb) { > .name = "P1010 RDB", > .probe = p1010_rdb_probe, > .setup_arch = p1010_rdb_setup_arch, > + .init = p1010_rdb_init, > .init_IRQ = p1010_rdb_pic_init, > #ifdef CONFIG_PCI > .pcibios_fixup_bus = fsl_pcibios_fixup_bus, > -- > 1.7.2.1 >
On Tue, Aug 09, 2011 at 02:45:58PM +0000, U Bhaskar-B22300 wrote: > Hi Robin, > Where are you doing the irq handling ie request_irq() for the powerpc based P1010. > Or the existing code of ARM based FlexCAN will work for P1010 ?? It appears that the of_device stuff got moved under the struct device and that allows the request_irq() to just magically work. Robin
On 08/09/2011 04:55 PM, Robin Holt wrote: > On Tue, Aug 09, 2011 at 02:45:58PM +0000, U Bhaskar-B22300 wrote: >> Hi Robin, >> Where are you doing the irq handling ie request_irq() for the powerpc based P1010. >> Or the existing code of ARM based FlexCAN will work for P1010 ?? > > It appears that the of_device stuff got moved under the struct device > and that allows the request_irq() to just magically work. Cool! Actually I was also missing of_address_to_resource (or of_iomap) and irq_of_parse_and_map(). But the resources seem to be filled in here: http://lxr.linux.no/#linux+v3.0.1/drivers/of/platform.c#L121 Wolfgang.
On 08/09/2011 04:55 PM, Robin Holt wrote: > On Tue, Aug 09, 2011 at 02:45:58PM +0000, U Bhaskar-B22300 wrote: >> Hi Robin, >> Where are you doing the irq handling ie request_irq() for the powerpc based P1010. >> Or the existing code of ARM based FlexCAN will work for P1010 ?? > > It appears that the of_device stuff got moved under the struct device > and that allows the request_irq() to just magically work. cool :) Marc
diff --git a/arch/powerpc/platforms/85xx/Kconfig b/arch/powerpc/platforms/85xx/Kconfig index 498534c..c4304ae 100644 --- a/arch/powerpc/platforms/85xx/Kconfig +++ b/arch/powerpc/platforms/85xx/Kconfig @@ -70,6 +70,8 @@ config MPC85xx_RDB config P1010_RDB bool "Freescale P1010RDB" select DEFAULT_UIMAGE + select HAVE_CAN_FLEXCAN if NET && CAN + select PPC_CLOCK if CAN_FLEXCAN help This option enables support for the MPC85xx RDB (P1010 RDB) board diff --git a/arch/powerpc/platforms/85xx/Makefile b/arch/powerpc/platforms/85xx/Makefile index a971b32..cc7f381 100644 --- a/arch/powerpc/platforms/85xx/Makefile +++ b/arch/powerpc/platforms/85xx/Makefile @@ -3,6 +3,8 @@ # obj-$(CONFIG_SMP) += smp.o +obj-$(CONFIG_PPC_CLOCK) += clock.o + obj-$(CONFIG_MPC8540_ADS) += mpc85xx_ads.o obj-$(CONFIG_MPC8560_ADS) += mpc85xx_ads.o obj-$(CONFIG_MPC85xx_CDS) += mpc85xx_cds.o diff --git a/arch/powerpc/platforms/85xx/clock.c b/arch/powerpc/platforms/85xx/clock.c new file mode 100644 index 0000000..a6fd2c8 --- /dev/null +++ b/arch/powerpc/platforms/85xx/clock.c @@ -0,0 +1,42 @@ + +#include <linux/device.h> +#include <linux/err.h> + +#include <asm/clk_interface.h> + +#include <sysdev/fsl_soc.h> + +/* + * p1010 needs to provide a clock source for the flexcan driver. The + * oscillator for the p1010 processor is only ever the system clock / 2. + */ + +static struct clk *mpc85xx_clk_get(struct device *dev, const char *id) +{ + if (!dev) + return ERR_PTR(-ENOENT); + + return NULL; +} + +static void mpc85xx_clk_put(struct clk *clk) +{ + return; +} + +static unsigned long mpc85xx_clk_get_rate(struct clk *clk) +{ + return fsl_get_sys_freq() / 2; +} + +static struct clk_interface mpc85xx_clk_functions = { + .clk_get = mpc85xx_clk_get, + .clk_get_rate = mpc85xx_clk_get_rate, + .clk_put = mpc85xx_clk_put, +}; + +void __init mpc85xx_clk_init(void) +{ + clk_functions = mpc85xx_clk_functions; +} + diff --git a/arch/powerpc/platforms/85xx/p1010rdb.c b/arch/powerpc/platforms/85xx/p1010rdb.c index d7387fa..5e52122 100644 --- a/arch/powerpc/platforms/85xx/p1010rdb.c +++ b/arch/powerpc/platforms/85xx/p1010rdb.c @@ -81,6 +81,13 @@ static void __init p1010_rdb_setup_arch(void) printk(KERN_INFO "P1010 RDB board from Freescale Semiconductor\n"); } +extern void mpc85xx_clk_init(void); + +static void __init p1010_rdb_init(void) +{ + mpc85xx_clk_init(); +} + static struct of_device_id __initdata p1010rdb_ids[] = { { .type = "soc", }, { .compatible = "soc", }, @@ -111,6 +118,7 @@ define_machine(p1010_rdb) { .name = "P1010 RDB", .probe = p1010_rdb_probe, .setup_arch = p1010_rdb_setup_arch, + .init = p1010_rdb_init, .init_IRQ = p1010_rdb_pic_init, #ifdef CONFIG_PCI .pcibios_fixup_bus = fsl_pcibios_fixup_bus,
I added a simple clock source for the p1010rdb so the flexcan driver could determine a clock frequency. The p1010 can device only has an oscillator of system bus frequency divided by 2. Signed-off-by: Robin Holt <holt@sgi.com> To: Marc Kleine-Budde <mkl@pengutronix.de>, To: Wolfgang Grandegger <wg@grandegger.com>, To: U Bhaskar-B22300 <B22300@freescale.com> Cc: socketcan-core@lists.berlios.de, Cc: netdev@vger.kernel.org, Cc: PPC list <linuxppc-dev@lists.ozlabs.org> --- arch/powerpc/platforms/85xx/Kconfig | 2 + arch/powerpc/platforms/85xx/Makefile | 2 + arch/powerpc/platforms/85xx/clock.c | 42 ++++++++++++++++++++++++++++++++ arch/powerpc/platforms/85xx/p1010rdb.c | 8 ++++++ 4 files changed, 54 insertions(+), 0 deletions(-) create mode 100644 arch/powerpc/platforms/85xx/clock.c