Message ID | 1312869313-22434-5-git-send-email-holt@sgi.com (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
On 08/09/2011 07:55 AM, Robin Holt wrote: > I added a clock source for the p1010rdb so the flexcan driver > could find its clock frequency. > > 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> After fixing Wolfgangs remarks add by Acked-by, for what it's worth in the ppc-world :) Some nitpicking from me :) - Darn you send another patch. This comments still apply. > > --- > > Could I also get a ruling on the Kconfig language. I could do it either > with the 85xx_HAVE_CAN_FLEXCAN in or out of the Kconfig file. It felt > like the right thing to do was without, but the arm Kconfig files do > it this way and a patch from freescale had something similar so I went > this route. > > arch/powerpc/platforms/85xx/Kconfig | 6 +++ > arch/powerpc/platforms/85xx/Makefile | 1 + > arch/powerpc/platforms/85xx/clock.c | 59 ++++++++++++++++++++++++++++++++ > arch/powerpc/platforms/85xx/p1010rdb.c | 8 ++++ > 4 files changed, 74 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..ed4cf92 100644 > --- a/arch/powerpc/platforms/85xx/Kconfig > +++ b/arch/powerpc/platforms/85xx/Kconfig > @@ -26,6 +26,10 @@ config MPC8560_ADS > help > This option enables support for the MPC 8560 ADS board > > +config 85xx_HAVE_CAN_FLEXCAN > + bool > + select HAVE_CAN_FLEXCAN if NET && CAN > + > config MPC85xx_CDS > bool "Freescale MPC85xx CDS" > select DEFAULT_UIMAGE > @@ -70,6 +74,8 @@ config MPC85xx_RDB > config P1010_RDB > bool "Freescale P1010RDB" > select DEFAULT_UIMAGE > + select 85xx_HAVE_CAN_FLEXCAN > + 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..64ad7a4 100644 > --- a/arch/powerpc/platforms/85xx/Makefile > +++ b/arch/powerpc/platforms/85xx/Makefile > @@ -11,6 +11,7 @@ obj-$(CONFIG_MPC85xx_DS) += mpc85xx_ds.o > obj-$(CONFIG_MPC85xx_MDS) += mpc85xx_mds.o > obj-$(CONFIG_MPC85xx_RDB) += mpc85xx_rdb.o > obj-$(CONFIG_P1010_RDB) += p1010rdb.o > +obj-$(CONFIG_PPC_CLOCK) += clock.o > obj-$(CONFIG_P1022_DS) += p1022_ds.o > obj-$(CONFIG_P1023_RDS) += p1023_rds.o > obj-$(CONFIG_P2040_RDB) += p2040_rdb.o corenet_ds.o > diff --git a/arch/powerpc/platforms/85xx/clock.c b/arch/powerpc/platforms/85xx/clock.c > new file mode 100644 > index 0000000..a25cbf3 > --- /dev/null > +++ b/arch/powerpc/platforms/85xx/clock.c > @@ -0,0 +1,59 @@ Please add your copyright notice and add a license, e.g. "This file is released under GPLv2" > + > +#include <linux/device.h> > +#include <linux/err.h> > + > +#include <asm/clk_interface.h> > + > +#include <sysdev/fsl_soc.h> > + > +/* > + * p1010rdb needs to provide a clock source for the flexcan driver. > + */ > +struct clk { > + unsigned long rate; > +} p1010_rdb_system_clock; > + > +static struct clk *p1010_rdb_clk_get(struct device *dev, const char *id) > +{ > + const char *dev_init_name; > + > + if (!dev) > + return ERR_PTR(-ENOENT); > + > + /* > + * The can devices are named ffe1c000.can0 and ffe1d000.can1 on > + * the p1010rdb. Check for the "can" portion of that name before > + * returning a clock source. > + */ > + dev_init_name = dev_name(dev); > + if (strlen(dev_init_name) != 13) > + return ERR_PTR(-ENOENT); > + dev_init_name += 9; > + if (strncmp(dev_init_name, "can", 3)) > + return ERR_PTR(-ENOENT); > + > + return &p1010_rdb_system_clock; > +} > + > +static void p1010_rdb_clk_put(struct clk *clk) > +{ > + return; > +} > + > +static unsigned long p1010_rdb_clk_get_rate(struct clk *clk) > +{ > + return clk->rate; > +} > + > +static struct clk_interface p1010_rdb_clk_functions = { > + .clk_get = p1010_rdb_clk_get, > + .clk_get_rate = p1010_rdb_clk_get_rate, > + .clk_put = p1010_rdb_clk_put, no indention here please, just one space before the "=". YMMV > +}; > + > +void __init p1010_rdb_clk_init(void) > +{ > + p1010_rdb_system_clock.rate = fsl_get_sys_freq(); > + clk_functions = p1010_rdb_clk_functions; > +} > + > diff --git a/arch/powerpc/platforms/85xx/p1010rdb.c b/arch/powerpc/platforms/85xx/p1010rdb.c > index d7387fa..29e04d6 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"); > } > > +static void __init p1010_rdb_init(void) > +{ > +#ifdef PPC_CLOCK > + p1010_rdb_clk_init(); > +#endif > +} > + > 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, cheers, Marc
On Tue, Aug 09, 2011 at 02:33:31PM +0200, Marc Kleine-Budde wrote: > On 08/09/2011 07:55 AM, Robin Holt wrote: > > I added a clock source for the p1010rdb so the flexcan driver > > could find its clock frequency. > > > > 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> > > After fixing Wolfgangs remarks add by Acked-by, for what it's worth in > the ppc-world :) Does that go for the other two patches in the series you have not commented on in many revs as well? Robin
On 08/09/2011 02:40 PM, Robin Holt wrote: > On Tue, Aug 09, 2011 at 02:33:31PM +0200, Marc Kleine-Budde wrote: >> On 08/09/2011 07:55 AM, Robin Holt wrote: >>> I added a clock source for the p1010rdb so the flexcan driver >>> could find its clock frequency. >>> >>> 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> >> >> After fixing Wolfgangs remarks add by Acked-by, for what it's worth in >> the ppc-world :) > > Does that go for the other two patches in the series you have not > commented on in many revs as well? They look pretty good so far! I'll compile the next round on arm and hopefully find time to test on HW. cheers, Marc
diff --git a/arch/powerpc/platforms/85xx/Kconfig b/arch/powerpc/platforms/85xx/Kconfig index 498534c..ed4cf92 100644 --- a/arch/powerpc/platforms/85xx/Kconfig +++ b/arch/powerpc/platforms/85xx/Kconfig @@ -26,6 +26,10 @@ config MPC8560_ADS help This option enables support for the MPC 8560 ADS board +config 85xx_HAVE_CAN_FLEXCAN + bool + select HAVE_CAN_FLEXCAN if NET && CAN + config MPC85xx_CDS bool "Freescale MPC85xx CDS" select DEFAULT_UIMAGE @@ -70,6 +74,8 @@ config MPC85xx_RDB config P1010_RDB bool "Freescale P1010RDB" select DEFAULT_UIMAGE + select 85xx_HAVE_CAN_FLEXCAN + 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..64ad7a4 100644 --- a/arch/powerpc/platforms/85xx/Makefile +++ b/arch/powerpc/platforms/85xx/Makefile @@ -11,6 +11,7 @@ obj-$(CONFIG_MPC85xx_DS) += mpc85xx_ds.o obj-$(CONFIG_MPC85xx_MDS) += mpc85xx_mds.o obj-$(CONFIG_MPC85xx_RDB) += mpc85xx_rdb.o obj-$(CONFIG_P1010_RDB) += p1010rdb.o +obj-$(CONFIG_PPC_CLOCK) += clock.o obj-$(CONFIG_P1022_DS) += p1022_ds.o obj-$(CONFIG_P1023_RDS) += p1023_rds.o obj-$(CONFIG_P2040_RDB) += p2040_rdb.o corenet_ds.o diff --git a/arch/powerpc/platforms/85xx/clock.c b/arch/powerpc/platforms/85xx/clock.c new file mode 100644 index 0000000..a25cbf3 --- /dev/null +++ b/arch/powerpc/platforms/85xx/clock.c @@ -0,0 +1,59 @@ + +#include <linux/device.h> +#include <linux/err.h> + +#include <asm/clk_interface.h> + +#include <sysdev/fsl_soc.h> + +/* + * p1010rdb needs to provide a clock source for the flexcan driver. + */ +struct clk { + unsigned long rate; +} p1010_rdb_system_clock; + +static struct clk *p1010_rdb_clk_get(struct device *dev, const char *id) +{ + const char *dev_init_name; + + if (!dev) + return ERR_PTR(-ENOENT); + + /* + * The can devices are named ffe1c000.can0 and ffe1d000.can1 on + * the p1010rdb. Check for the "can" portion of that name before + * returning a clock source. + */ + dev_init_name = dev_name(dev); + if (strlen(dev_init_name) != 13) + return ERR_PTR(-ENOENT); + dev_init_name += 9; + if (strncmp(dev_init_name, "can", 3)) + return ERR_PTR(-ENOENT); + + return &p1010_rdb_system_clock; +} + +static void p1010_rdb_clk_put(struct clk *clk) +{ + return; +} + +static unsigned long p1010_rdb_clk_get_rate(struct clk *clk) +{ + return clk->rate; +} + +static struct clk_interface p1010_rdb_clk_functions = { + .clk_get = p1010_rdb_clk_get, + .clk_get_rate = p1010_rdb_clk_get_rate, + .clk_put = p1010_rdb_clk_put, +}; + +void __init p1010_rdb_clk_init(void) +{ + p1010_rdb_system_clock.rate = fsl_get_sys_freq(); + clk_functions = p1010_rdb_clk_functions; +} + diff --git a/arch/powerpc/platforms/85xx/p1010rdb.c b/arch/powerpc/platforms/85xx/p1010rdb.c index d7387fa..29e04d6 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"); } +static void __init p1010_rdb_init(void) +{ +#ifdef PPC_CLOCK + p1010_rdb_clk_init(); +#endif +} + 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 clock source for the p1010rdb so the flexcan driver could find its clock frequency. 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> --- Could I also get a ruling on the Kconfig language. I could do it either with the 85xx_HAVE_CAN_FLEXCAN in or out of the Kconfig file. It felt like the right thing to do was without, but the arm Kconfig files do it this way and a patch from freescale had something similar so I went this route. arch/powerpc/platforms/85xx/Kconfig | 6 +++ arch/powerpc/platforms/85xx/Makefile | 1 + arch/powerpc/platforms/85xx/clock.c | 59 ++++++++++++++++++++++++++++++++ arch/powerpc/platforms/85xx/p1010rdb.c | 8 ++++ 4 files changed, 74 insertions(+), 0 deletions(-) create mode 100644 arch/powerpc/platforms/85xx/clock.c