From patchwork Tue Aug 9 06:33:19 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: holt@sgi.com X-Patchwork-Id: 109138 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 5BDB6B712A for ; Tue, 9 Aug 2011 16:33:33 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752343Ab1HIGdV (ORCPT ); Tue, 9 Aug 2011 02:33:21 -0400 Received: from relay3.sgi.com ([192.48.152.1]:52059 "EHLO relay.sgi.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752257Ab1HIGdU (ORCPT ); Tue, 9 Aug 2011 02:33:20 -0400 Received: from estes.americas.sgi.com (estes.americas.sgi.com [128.162.236.10]) by relay3.corp.sgi.com (Postfix) with ESMTP id B0CDEAC002; Mon, 8 Aug 2011 23:33:19 -0700 (PDT) Received: from lnx-holt.americas.sgi.com (lnx-holt.americas.sgi.com [128.162.233.109]) by estes.americas.sgi.com (Postfix) with ESMTP id 6FAE270006F9; Tue, 9 Aug 2011 01:33:19 -0500 (CDT) Received: from holt by lnx-holt.americas.sgi.com with local (Exim 4.71) (envelope-from ) id 1QqfsN-0004jd-Cs; Tue, 09 Aug 2011 01:33:19 -0500 Date: Tue, 9 Aug 2011 01:33:19 -0500 From: Robin Holt To: Robin Holt , Marc Kleine-Budde , Wolfgang Grandegger , U Bhaskar-B22300 Cc: socketcan-core@lists.berlios.de, netdev@vger.kernel.org, PPC list Subject: Re: [RFC 4/4] [powerpc] Add flexcan device support for p1010rdb. Message-ID: <20110809063319.GK4926@sgi.com> References: <1312869313-22434-1-git-send-email-holt@sgi.com> <1312869313-22434-5-git-send-email-holt@sgi.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1312869313-22434-5-git-send-email-holt@sgi.com> User-Agent: Mutt/1.5.20 (2009-06-14) Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Argh. I sent an earlier (non-working) version of this patch. Here is the correct one. I added a clock source for the p1010rdb so the flexcan driver could find its clock frequency. Signed-off-by: Robin Holt To: Marc Kleine-Budde , To: Wolfgang Grandegger , To: U Bhaskar-B22300 Cc: socketcan-core@lists.berlios.de, Cc: netdev@vger.kernel.org, Cc: PPC list --- 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 | 10 +++++ 4 files changed, 76 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 @@ + +#include +#include + +#include + +#include + +/* + * 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..d0afbf9 100644 --- a/arch/powerpc/platforms/85xx/p1010rdb.c +++ b/arch/powerpc/platforms/85xx/p1010rdb.c @@ -81,6 +81,15 @@ static void __init p1010_rdb_setup_arch(void) printk(KERN_INFO "P1010 RDB board from Freescale Semiconductor\n"); } +extern void p1010_rdb_clk_init(void); + +static void __init p1010_rdb_init(void) +{ +#ifdef CONFIG_PPC_CLOCK + p1010_rdb_clk_init(); +#endif +} + static struct of_device_id __initdata p1010rdb_ids[] = { { .type = "soc", }, { .compatible = "soc", }, @@ -111,6 +120,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,