linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Nicolas Ferre <nicolas.ferre@atmel.com>
To: Andrei Pistirica <andrei.pistirica@microchip.com>,
	<netdev@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<linux-arm-kernel@lists.infradead.org>, <davem@davemloft.net>,
	<harinikatakamlinux@gmail.com>, <harini.katakam@xilinx.com>
Cc: <punnaia@xilinx.com>, <michals@xilinx.com>, <anirudh@xilinx.com>,
	<boris.brezillon@free-electrons.com>,
	<alexandre.belloni@free-electrons.com>, <tbultel@pixelsurmer.com>,
	<richardcochran@gmail.com>, <rafalo@cadence.com>
Subject: Re: [PATCH net-next v2] macb: Common code to enable ptp support for MACB/GEM
Date: Wed, 25 Jan 2017 10:26:20 +0100	[thread overview]
Message-ID: <88d4aee3-cc38-b271-3f52-a28e5af7bdac@atmel.com> (raw)
In-Reply-To: <9bc6b112-f79c-58e4-7d2b-718ee07ff3a1@atmel.com>

Le 19/01/2017 à 17:07, Nicolas Ferre a écrit :
> Le 19/01/2017 à 08:56, Andrei Pistirica a écrit :
>> This patch does the following:
>> - MACB/GEM-PTP interface
>> - registers and bitfields for TSU
>> - capability flags to enable PTP per platform basis
>>
>> Signed-off-by: Andrei Pistirica <andrei.pistirica@microchip.com>
> 
> Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>

Harini or Rafal, do you plan to review this patch and add your
"Reviewed-by" tags? It can be useful to make this support move forward.

Regards,

>> ---
>> Patch history:
>>
>> Version 1:
>> This is just the common code for MACB/GEM-PTP support.
>> Code is based on the comments related to the following patch series:
>> - [RFC PATCH net-next v1-to-4 1/2] macb: Add 1588 support in Cadence GEM
>> - [RFC PATCH net-next v1-to-4 2/2] macb: Enable 1588 support in SAMA5Dx platforms
>>
>> Version 2:
>> - Cosmetic changes and PTP capability flag changed doe to overlapping with JUMBO.
>>
>> Note: Patch on net-next: January 19.
>>
>>  drivers/net/ethernet/cadence/macb.c | 32 +++++++++++++++-
>>  drivers/net/ethernet/cadence/macb.h | 74 +++++++++++++++++++++++++++++++++++++
>>  2 files changed, 104 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
>> index c0fb80a..ff1e648 100644
>> --- a/drivers/net/ethernet/cadence/macb.c
>> +++ b/drivers/net/ethernet/cadence/macb.c
>> @@ -2085,6 +2085,9 @@ static int macb_open(struct net_device *dev)
>>  
>>  	netif_tx_start_all_queues(dev);
>>  
>> +	if (bp->ptp_info)
>> +		bp->ptp_info->ptp_init(dev);
>> +
>>  	return 0;
>>  }
>>  
>> @@ -2106,6 +2109,9 @@ static int macb_close(struct net_device *dev)
>>  
>>  	macb_free_consistent(bp);
>>  
>> +	if (bp->ptp_info)
>> +		bp->ptp_info->ptp_remove(dev);
>> +
>>  	return 0;
>>  }
>>  
>> @@ -2379,6 +2385,17 @@ static int macb_set_ringparam(struct net_device *netdev,
>>  	return 0;
>>  }
>>  
>> +static int macb_get_ts_info(struct net_device *netdev,
>> +			    struct ethtool_ts_info *info)
>> +{
>> +	struct macb *bp = netdev_priv(netdev);
>> +
>> +	if (bp->ptp_info)
>> +		return bp->ptp_info->get_ts_info(netdev, info);
>> +
>> +	return ethtool_op_get_ts_info(netdev, info);
>> +}
>> +
>>  static const struct ethtool_ops macb_ethtool_ops = {
>>  	.get_regs_len		= macb_get_regs_len,
>>  	.get_regs		= macb_get_regs,
>> @@ -2396,7 +2413,7 @@ static const struct ethtool_ops gem_ethtool_ops = {
>>  	.get_regs_len		= macb_get_regs_len,
>>  	.get_regs		= macb_get_regs,
>>  	.get_link		= ethtool_op_get_link,
>> -	.get_ts_info		= ethtool_op_get_ts_info,
>> +	.get_ts_info		= macb_get_ts_info,
>>  	.get_ethtool_stats	= gem_get_ethtool_stats,
>>  	.get_strings		= gem_get_ethtool_strings,
>>  	.get_sset_count		= gem_get_sset_count,
>> @@ -2409,6 +2426,7 @@ static const struct ethtool_ops gem_ethtool_ops = {
>>  static int macb_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
>>  {
>>  	struct phy_device *phydev = dev->phydev;
>> +	struct macb *bp = netdev_priv(dev);
>>  
>>  	if (!netif_running(dev))
>>  		return -EINVAL;
>> @@ -2416,7 +2434,17 @@ static int macb_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
>>  	if (!phydev)
>>  		return -ENODEV;
>>  
>> -	return phy_mii_ioctl(phydev, rq, cmd);
>> +	if (!bp->ptp_info)
>> +		return phy_mii_ioctl(phydev, rq, cmd);
>> +
>> +	switch (cmd) {
>> +	case SIOCSHWTSTAMP:
>> +		return bp->ptp_info->set_hwtst(dev, rq, cmd);
>> +	case SIOCGHWTSTAMP:
>> +		return bp->ptp_info->get_hwtst(dev, rq);
>> +	default:
>> +		return phy_mii_ioctl(phydev, rq, cmd);
>> +	}
>>  }
>>  
>>  static int macb_set_features(struct net_device *netdev,
>> diff --git a/drivers/net/ethernet/cadence/macb.h b/drivers/net/ethernet/cadence/macb.h
>> index d67adad..94ddedd 100644
>> --- a/drivers/net/ethernet/cadence/macb.h
>> +++ b/drivers/net/ethernet/cadence/macb.h
>> @@ -131,6 +131,20 @@
>>  #define GEM_RXIPCCNT		0x01a8 /* IP header Checksum Error Counter */
>>  #define GEM_RXTCPCCNT		0x01ac /* TCP Checksum Error Counter */
>>  #define GEM_RXUDPCCNT		0x01b0 /* UDP Checksum Error Counter */
>> +#define GEM_TISUBN		0x01bc /* 1588 Timer Increment Sub-ns */
>> +#define GEM_TSH			0x01c0 /* 1588 Timer Seconds High */
>> +#define GEM_TSL			0x01d0 /* 1588 Timer Seconds Low */
>> +#define GEM_TN			0x01d4 /* 1588 Timer Nanoseconds */
>> +#define GEM_TA			0x01d8 /* 1588 Timer Adjust */
>> +#define GEM_TI			0x01dc /* 1588 Timer Increment */
>> +#define GEM_EFTSL		0x01e0 /* PTP Event Frame Tx Seconds Low */
>> +#define GEM_EFTN		0x01e4 /* PTP Event Frame Tx Nanoseconds */
>> +#define GEM_EFRSL		0x01e8 /* PTP Event Frame Rx Seconds Low */
>> +#define GEM_EFRN		0x01ec /* PTP Event Frame Rx Nanoseconds */
>> +#define GEM_PEFTSL		0x01f0 /* PTP Peer Event Frame Tx Secs Low */
>> +#define GEM_PEFTN		0x01f4 /* PTP Peer Event Frame Tx Ns */
>> +#define GEM_PEFRSL		0x01f8 /* PTP Peer Event Frame Rx Sec Low */
>> +#define GEM_PEFRN		0x01fc /* PTP Peer Event Frame Rx Ns */
>>  #define GEM_DCFG1		0x0280 /* Design Config 1 */
>>  #define GEM_DCFG2		0x0284 /* Design Config 2 */
>>  #define GEM_DCFG3		0x0288 /* Design Config 3 */
>> @@ -174,6 +188,7 @@
>>  #define MACB_NCR_TPF_SIZE	1
>>  #define MACB_TZQ_OFFSET		12 /* Transmit zero quantum pause frame */
>>  #define MACB_TZQ_SIZE		1
>> +#define MACB_SRTSM_OFFSET	15
>>  
>>  /* Bitfields in NCFGR */
>>  #define MACB_SPD_OFFSET		0 /* Speed */
>> @@ -319,6 +334,32 @@
>>  #define MACB_PTZ_SIZE		1
>>  #define MACB_WOL_OFFSET		14 /* Enable wake-on-lan interrupt */
>>  #define MACB_WOL_SIZE		1
>> +#define MACB_DRQFR_OFFSET	18 /* PTP Delay Request Frame Received */
>> +#define MACB_DRQFR_SIZE		1
>> +#define MACB_SFR_OFFSET		19 /* PTP Sync Frame Received */
>> +#define MACB_SFR_SIZE		1
>> +#define MACB_DRQFT_OFFSET	20 /* PTP Delay Request Frame Transmitted */
>> +#define MACB_DRQFT_SIZE		1
>> +#define MACB_SFT_OFFSET		21 /* PTP Sync Frame Transmitted */
>> +#define MACB_SFT_SIZE		1
>> +#define MACB_PDRQFR_OFFSET	22 /* PDelay Request Frame Received */
>> +#define MACB_PDRQFR_SIZE	1
>> +#define MACB_PDRSFR_OFFSET	23 /* PDelay Response Frame Received */
>> +#define MACB_PDRSFR_SIZE	1
>> +#define MACB_PDRQFT_OFFSET	24 /* PDelay Request Frame Transmitted */
>> +#define MACB_PDRQFT_SIZE	1
>> +#define MACB_PDRSFT_OFFSET	25 /* PDelay Response Frame Transmitted */
>> +#define MACB_PDRSFT_SIZE	1
>> +#define MACB_SRI_OFFSET		26 /* TSU Seconds Register Increment */
>> +#define MACB_SRI_SIZE		1
>> +
>> +/* Timer increment fields */
>> +#define MACB_TI_CNS_OFFSET	0
>> +#define MACB_TI_CNS_SIZE	8
>> +#define MACB_TI_ACNS_OFFSET	8
>> +#define MACB_TI_ACNS_SIZE	8
>> +#define MACB_TI_NIT_OFFSET	16
>> +#define MACB_TI_NIT_SIZE	8
>>  
>>  /* Bitfields in MAN */
>>  #define MACB_DATA_OFFSET	0 /* data */
>> @@ -386,6 +427,17 @@
>>  #define GEM_PBUF_LSO_OFFSET			27
>>  #define GEM_PBUF_LSO_SIZE			1
>>  
>> +/* Bitfields in TISUBN */
>> +#define GEM_SUBNSINCR_OFFSET			0
>> +#define GEM_SUBNSINCR_SIZE			16
>> +
>> +/* Bitfields in TI */
>> +#define GEM_NSINCR_OFFSET			0
>> +#define GEM_NSINCR_SIZE				8
>> +
>> +/* Bitfields in ADJ */
>> +#define GEM_ADDSUB_OFFSET			31
>> +#define GEM_ADDSUB_SIZE				1
>>  /* Constants for CLK */
>>  #define MACB_CLK_DIV8				0
>>  #define MACB_CLK_DIV16				1
>> @@ -413,6 +465,7 @@
>>  #define MACB_CAPS_NO_GIGABIT_HALF		0x00000008
>>  #define MACB_CAPS_USRIO_DISABLED		0x00000010
>>  #define MACB_CAPS_JUMBO				0x00000020
>> +#define MACB_CAPS_GEM_HAS_PTP			0x00000040
>>  #define MACB_CAPS_FIFO_MODE			0x10000000
>>  #define MACB_CAPS_GIGABIT_MODE_AVAILABLE	0x20000000
>>  #define MACB_CAPS_SG_DISABLED			0x40000000
>> @@ -782,6 +835,20 @@ struct macb_or_gem_ops {
>>  	int	(*mog_rx)(struct macb *bp, int budget);
>>  };
>>  
>> +/* MACB-PTP interface: adapt to platform needs. */
>> +struct macb_ptp_info {
>> +	void (*ptp_init)(struct net_device *ndev);
>> +	void (*ptp_remove)(struct net_device *ndev);
>> +	s32 (*get_ptp_max_adj)(void);
>> +	unsigned int (*get_tsu_rate)(struct macb *bp);
>> +	int (*get_ts_info)(struct net_device *dev,
>> +			   struct ethtool_ts_info *info);
>> +	int (*get_hwtst)(struct net_device *netdev,
>> +			 struct ifreq *ifr);
>> +	int (*set_hwtst)(struct net_device *netdev,
>> +			 struct ifreq *ifr, int cmd);
>> +};
>> +
>>  struct macb_config {
>>  	u32			caps;
>>  	unsigned int		dma_burst_length;
>> @@ -874,6 +941,8 @@ struct macb {
>>  	unsigned int		jumbo_max_len;
>>  
>>  	u32			wol;
>> +
>> +	struct macb_ptp_info	*ptp_info;	/* macb-ptp interface */
>>  };
>>  
>>  static inline bool macb_is_gem(struct macb *bp)
>> @@ -881,4 +950,9 @@ static inline bool macb_is_gem(struct macb *bp)
>>  	return !!(bp->caps & MACB_CAPS_MACB_IS_GEM);
>>  }
>>  
>> +static inline bool gem_has_ptp(struct macb *bp)
>> +{
>> +	return !!(bp->caps & MACB_CAPS_GEM_HAS_PTP);
>> +}
>> +
>>  #endif /* _MACB_H */
>>
> 
> 


-- 
Nicolas Ferre

  reply	other threads:[~2017-01-25  9:26 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-19 15:56 [PATCH net-next v2] macb: Common code to enable ptp support for MACB/GEM Andrei Pistirica
2017-01-19 16:07 ` Nicolas Ferre
2017-01-25  9:26   ` Nicolas Ferre [this message]
2017-01-25  9:37     ` Harini Katakam
2017-01-26 15:15 ` Rafal Ozieblo
2017-01-27  5:42   ` Harini Katakam
2017-01-27 10:12     ` Nicolas Ferre
2017-01-27 10:26     ` Rafal Ozieblo
2017-01-27 10:27       ` Nicolas Ferre
2017-01-27 11:06         ` Rafal Ozieblo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=88d4aee3-cc38-b271-3f52-a28e5af7bdac@atmel.com \
    --to=nicolas.ferre@atmel.com \
    --cc=alexandre.belloni@free-electrons.com \
    --cc=andrei.pistirica@microchip.com \
    --cc=anirudh@xilinx.com \
    --cc=boris.brezillon@free-electrons.com \
    --cc=davem@davemloft.net \
    --cc=harini.katakam@xilinx.com \
    --cc=harinikatakamlinux@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=michals@xilinx.com \
    --cc=netdev@vger.kernel.org \
    --cc=punnaia@xilinx.com \
    --cc=rafalo@cadence.com \
    --cc=richardcochran@gmail.com \
    --cc=tbultel@pixelsurmer.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).