From patchwork Wed Dec 16 06:34:06 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Baruch Siach X-Patchwork-Id: 41235 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 33BAAB6EF5 for ; Wed, 16 Dec 2009 17:34:59 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932102AbZLPGex (ORCPT ); Wed, 16 Dec 2009 01:34:53 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1756571AbZLPGex (ORCPT ); Wed, 16 Dec 2009 01:34:53 -0500 Received: from tango.tkos.co.il ([62.219.50.35]:56600 "EHLO tango.tkos.co.il" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1761654AbZLPGew (ORCPT ); Wed, 16 Dec 2009 01:34:52 -0500 Received: from sivan.tkos.co.il (guitar.tcltek.co.il [192.115.133.116]) by tango.tkos.co.il (8.12.11.20060308/8.12.11) with ESMTP id nBG6YVkM025958; Wed, 16 Dec 2009 08:34:31 +0200 Received: from jasper.tkos.co.il (taragon.tkos.co.il [10.0.4.3]) by sivan.tkos.co.il (Postfix) with SMTP id 639B6B4F7A; Wed, 16 Dec 2009 08:34:22 +0200 (IST) Date: Wed, 16 Dec 2009 08:34:06 +0200 From: Baruch Siach To: Greg Ungerer Cc: Sascha Hauer , netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCH 3/4] fec: add support for Freescale i.MX25 PDK (3DS) Message-ID: <20091216063402.GA13160@jasper.tkos.co.il> References: <20091214103348.GV15126@pengutronix.de> <20091215083142.GB18290@jasper.tkos.co.il> <4B277878.1050804@snapgear.com> <20091215201109.GA2621@tarshish> <4B282644.8030104@snapgear.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <4B282644.8030104@snapgear.com> User-Agent: Mutt/1.5.20 (2009-06-14) X-Virus-Scanned: ClamAV version 0.93.1, clamav-milter version 0.93.1 on tango.tkos.co.il X-Virus-Status: Clean X-Spam-Level: -2.312 () BAYES_00 X-Scanned-By: MIMEDefang 2.62 on 62.219.50.35 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Hi Greg, On Wed, Dec 16, 2009 at 10:13:56AM +1000, Greg Ungerer wrote: > Baruch Siach wrote: > >On Tue, Dec 15, 2009 at 09:52:24PM +1000, Greg Ungerer wrote: > >>On 12/15/2009 06:31 PM, Baruch Siach wrote: > >>>+#ifndef CONFIG_M5272 > >>I would suggest making this conditional on FEC_MIIGSK_ENR. > >>Although the CONFIG_M5272 is the only case here currently, > >>that may change over the years. And using this here may not > >>be obvious to the causual code reader, since the register > >>offset definitions don't explicitly key on CONFIG_M5272. > > > >OK, I'll change this conditional. > > > >Can I take this as an Ack from you? > > With that conditional check changed, sure: > > Acked-by: Greg Ungerer Thanks. The updated patch below. baruch From 2d0751f868519978603b16baa197bfb9f9ec9e2e Mon Sep 17 00:00:00 2001 Message-Id: <2d0751f868519978603b16baa197bfb9f9ec9e2e.1260945080.git.baruch@tkos.co.il> From: Baruch Siach Date: Mon, 14 Dec 2009 10:36:50 +0200 Subject: [PATCH] fec: add support for PHY interface platform data The i.MX25 PDK uses RMII to communicate with its PHY. This patch adds the ability to configure RMII, based on platform data. Signed-off-by: Baruch Siach Acked-by: Greg Ungerer --- drivers/net/fec.c | 22 ++++++++++++++++++++++ drivers/net/fec.h | 2 ++ include/linux/fec.h | 21 +++++++++++++++++++++ 3 files changed, 45 insertions(+), 0 deletions(-) create mode 100644 include/linux/fec.h diff --git a/drivers/net/fec.c b/drivers/net/fec.c index 16a1d58..a7cfe0d 100644 --- a/drivers/net/fec.c +++ b/drivers/net/fec.c @@ -40,6 +40,7 @@ #include #include #include +#include #include @@ -198,6 +199,7 @@ struct fec_enet_private { uint phy_speed; phy_info_t const *phy; struct work_struct phy_task; + phy_interface_t phy_interface; uint sequence_done; uint mii_phy_task_queued; @@ -1810,6 +1812,21 @@ fec_restart(struct net_device *dev, int duplex) /* Set MII speed */ writel(fep->phy_speed, fep->hwp + FEC_MII_SPEED); +#ifdef FEC_MIIGSK_ENR + if (fep->phy_interface == PHY_INTERFACE_MODE_RMII) { + /* disable the gasket and wait */ + writel(0, fep->hwp + FEC_MIIGSK_ENR); + while (readl(fep->hwp + FEC_MIIGSK_ENR) & 4) + udelay(1); + + /* configure the gasket: RMII, 50 MHz, no loopback, no echo */ + writel(1, fep->hwp + FEC_MIIGSK_CFGR); + + /* re-enable the gasket */ + writel(2, fep->hwp + FEC_MIIGSK_ENR); + } +#endif + /* And last, enable the transmit and receive processing */ writel(2, fep->hwp + FEC_ECNTRL); writel(0, fep->hwp + FEC_R_DES_ACTIVE); @@ -1847,6 +1864,7 @@ static int __devinit fec_probe(struct platform_device *pdev) { struct fec_enet_private *fep; + struct fec_platform_data *pdata; struct net_device *ndev; int i, irq, ret = 0; struct resource *r; @@ -1879,6 +1897,10 @@ fec_probe(struct platform_device *pdev) platform_set_drvdata(pdev, ndev); + pdata = pdev->dev.platform_data; + if (pdata) + fep->phy_interface = pdata->phy; + /* This device has up to three irqs on some platforms */ for (i = 0; i < 3; i++) { irq = platform_get_irq(pdev, i); diff --git a/drivers/net/fec.h b/drivers/net/fec.h index cc47f3f..2c48b25 100644 --- a/drivers/net/fec.h +++ b/drivers/net/fec.h @@ -43,6 +43,8 @@ #define FEC_R_DES_START 0x180 /* Receive descriptor ring */ #define FEC_X_DES_START 0x184 /* Transmit descriptor ring */ #define FEC_R_BUFF_SIZE 0x188 /* Maximum receive buff size */ +#define FEC_MIIGSK_CFGR 0x300 /* MIIGSK Configuration reg */ +#define FEC_MIIGSK_ENR 0x308 /* MIIGSK Enable reg */ #else diff --git a/include/linux/fec.h b/include/linux/fec.h new file mode 100644 index 0000000..5d3523d --- /dev/null +++ b/include/linux/fec.h @@ -0,0 +1,21 @@ +/* include/linux/fec.h + * + * Copyright (c) 2009 Orex Computed Radiography + * Baruch Siach + * + * Header file for the FEC platform data + * + * 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. + */ +#ifndef __LINUX_FEC_H__ +#define __LINUX_FEC_H__ + +#include + +struct fec_platform_data { + phy_interface_t phy; +}; + +#endif