From patchwork Sun Apr 1 15:19:52 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Cochran X-Patchwork-Id: 149939 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 8AB26B6EF4 for ; Mon, 2 Apr 2012 01:21:27 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751691Ab2DAPVL (ORCPT ); Sun, 1 Apr 2012 11:21:11 -0400 Received: from mail-wg0-f42.google.com ([74.125.82.42]:57688 "EHLO mail-wg0-f42.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751359Ab2DAPU4 (ORCPT ); Sun, 1 Apr 2012 11:20:56 -0400 Received: by mail-wg0-f42.google.com with SMTP id ds11so1848342wgb.1 for ; Sun, 01 Apr 2012 08:20:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references :in-reply-to:references; bh=Y4xgijXL9R6jjFfT1NRkVKZ483T2sMzvokXTjE5wR5s=; b=pkvyBFij2X3cfUxIWNX6VGXk/XcDxsNKSmWwBmkfaC7/SeFYXWMo0ifZs6kjAah3zq 21sM8huBiHwZKmbfd4+QVMq4+NddghTE+t+7HNs3MBWWiAi1aA3qN8rmRMG6oWUlDyqd 98A9Lyau7+LsMuY+8GdzjQLD+uOPFGT/tH+7WEeDCZDfYjO46ONrNSYN171XsDVGv0gO VskhcdoaTnWpMFJ2k74jITXdb/7kcspxCAmA8O/EZUFwMvNnEz8LkfW4VBHQNvEOcRP3 KGMozda6fHtejbKwHEOU0binqbVHCxzpxyNOBuXOIiE6y0X3lV17/Zbwj8cJveP5p6xQ VXkQ== Received: by 10.180.88.169 with SMTP id bh9mr16111781wib.5.1333293656326; Sun, 01 Apr 2012 08:20:56 -0700 (PDT) Received: from localhost.localdomain (089144206229.atnat0015.highway.a1.net. [89.144.206.229]) by mx.google.com with ESMTPS id gg2sm41898624wib.7.2012.04.01.08.20.52 (version=TLSv1/SSLv3 cipher=OTHER); Sun, 01 Apr 2012 08:20:55 -0700 (PDT) From: Richard Cochran To: Cc: David Miller , Ben Hutchings , Martin Porter , Jacob Keller , Jeff Kirsher , John Ronciak , e1000-devel@lists.sourceforge.net Subject: [PATCH V2 net-next 07/28] ixp4xx_eth: Support the get_ts_info ethtool method. Date: Sun, 1 Apr 2012 17:19:52 +0200 Message-Id: <92cb27d1dabdcb863a3a40bc2e71ccd5bb4ae8ec.1333289292.git.richardcochran@gmail.com> X-Mailer: git-send-email 1.7.2.5 In-Reply-To: References: In-Reply-To: References: Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Signed-off-by: Richard Cochran --- arch/arm/mach-ixp4xx/include/mach/ixp46x_ts.h | 3 ++ drivers/net/ethernet/xscale/ixp4xx_eth.c | 29 +++++++++++++++++++++++++ drivers/ptp/ptp_ixp46x.c | 3 ++ 3 files changed, 35 insertions(+), 0 deletions(-) diff --git a/arch/arm/mach-ixp4xx/include/mach/ixp46x_ts.h b/arch/arm/mach-ixp4xx/include/mach/ixp46x_ts.h index 292d55e..cf03614 100644 --- a/arch/arm/mach-ixp4xx/include/mach/ixp46x_ts.h +++ b/arch/arm/mach-ixp4xx/include/mach/ixp46x_ts.h @@ -75,4 +75,7 @@ struct ixp46x_ts_regs { #define TX_SNAPSHOT_LOCKED (1<<0) #define RX_SNAPSHOT_LOCKED (1<<1) +/* The ptp_ixp46x module will set this variable */ +extern int ixp46x_phc_index; + #endif diff --git a/drivers/net/ethernet/xscale/ixp4xx_eth.c b/drivers/net/ethernet/xscale/ixp4xx_eth.c index 41a8b5a..482648f 100644 --- a/drivers/net/ethernet/xscale/ixp4xx_eth.c +++ b/drivers/net/ethernet/xscale/ixp4xx_eth.c @@ -1002,12 +1002,41 @@ static int ixp4xx_nway_reset(struct net_device *dev) return phy_start_aneg(port->phydev); } +int ixp46x_phc_index = -1; + +static int ixp4xx_get_ts_info(struct net_device *dev, + struct ethtool_ts_info *info) +{ + if (!cpu_is_ixp46x()) { + info->so_timestamping = + SOF_TIMESTAMPING_TX_SOFTWARE | + SOF_TIMESTAMPING_RX_SOFTWARE | + SOF_TIMESTAMPING_SOFTWARE; + info->phc_index = -1; + return 0; + } + info->so_timestamping = + SOF_TIMESTAMPING_TX_HARDWARE | + SOF_TIMESTAMPING_RX_HARDWARE | + SOF_TIMESTAMPING_RAW_HARDWARE; + info->phc_index = ixp46x_phc_index; + info->tx_types = + (1 << HWTSTAMP_TX_OFF) | + (1 << HWTSTAMP_TX_ON); + info->rx_filters = + (1 << HWTSTAMP_FILTER_NONE) | + (1 << HWTSTAMP_FILTER_PTP_V1_L4_SYNC) | + (1 << HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ); + return 0; +} + static const struct ethtool_ops ixp4xx_ethtool_ops = { .get_drvinfo = ixp4xx_get_drvinfo, .get_settings = ixp4xx_get_settings, .set_settings = ixp4xx_set_settings, .nway_reset = ixp4xx_nway_reset, .get_link = ethtool_op_get_link, + .get_ts_info = ixp4xx_get_ts_info, }; diff --git a/drivers/ptp/ptp_ixp46x.c b/drivers/ptp/ptp_ixp46x.c index 6f2782b..9d13a71 100644 --- a/drivers/ptp/ptp_ixp46x.c +++ b/drivers/ptp/ptp_ixp46x.c @@ -284,6 +284,7 @@ static void __exit ptp_ixp_exit(void) { free_irq(MASTER_IRQ, &ixp_clock); free_irq(SLAVE_IRQ, &ixp_clock); + ixp46x_phc_clock = -1; ptp_clock_unregister(ixp_clock.ptp_clock); } @@ -302,6 +303,8 @@ static int __init ptp_ixp_init(void) if (IS_ERR(ixp_clock.ptp_clock)) return PTR_ERR(ixp_clock.ptp_clock); + ixp46x_phc_clock = ptp_clock_index(ixp_clock.ptp_clock); + __raw_writel(DEFAULT_ADDEND, &ixp_clock.regs->addend); __raw_writel(1, &ixp_clock.regs->trgt_lo); __raw_writel(0, &ixp_clock.regs->trgt_hi);