linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next v2] macb: Common code to enable ptp support for MACB/GEM
@ 2017-01-19 15:56 Andrei Pistirica
  2017-01-19 16:07 ` Nicolas Ferre
  2017-01-26 15:15 ` Rafal Ozieblo
  0 siblings, 2 replies; 10+ messages in thread
From: Andrei Pistirica @ 2017-01-19 15:56 UTC (permalink / raw)
  To: netdev, linux-kernel, linux-arm-kernel, davem, nicolas.ferre,
	harinikatakamlinux, harini.katakam
  Cc: punnaia, michals, anirudh, boris.brezillon, alexandre.belloni,
	tbultel, richardcochran, rafalo, Andrei Pistirica

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>
---
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 */
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next v2] macb: Common code to enable ptp support for MACB/GEM
  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
  2017-01-26 15:15 ` Rafal Ozieblo
  1 sibling, 1 reply; 10+ messages in thread
From: Nicolas Ferre @ 2017-01-19 16:07 UTC (permalink / raw)
  To: Andrei Pistirica, netdev, linux-kernel, linux-arm-kernel, davem,
	harinikatakamlinux, harini.katakam
  Cc: punnaia, michals, anirudh, boris.brezillon, alexandre.belloni,
	tbultel, richardcochran, rafalo

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>

Thanks, 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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next v2] macb: Common code to enable ptp support for MACB/GEM
  2017-01-19 16:07 ` Nicolas Ferre
@ 2017-01-25  9:26   ` Nicolas Ferre
  2017-01-25  9:37     ` Harini Katakam
  0 siblings, 1 reply; 10+ messages in thread
From: Nicolas Ferre @ 2017-01-25  9:26 UTC (permalink / raw)
  To: Andrei Pistirica, netdev, linux-kernel, linux-arm-kernel, davem,
	harinikatakamlinux, harini.katakam
  Cc: punnaia, michals, anirudh, boris.brezillon, alexandre.belloni,
	tbultel, richardcochran, rafalo

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next v2] macb: Common code to enable ptp support for MACB/GEM
  2017-01-25  9:26   ` Nicolas Ferre
@ 2017-01-25  9:37     ` Harini Katakam
  0 siblings, 0 replies; 10+ messages in thread
From: Harini Katakam @ 2017-01-25  9:37 UTC (permalink / raw)
  To: Nicolas Ferre
  Cc: Andrei Pistirica, netdev, linux-kernel, linux-arm-kernel,
	David Miller, Harini Katakam, Punnaiah Choudary Kalluri, michals,
	Anirudha Sarangi, Boris Brezillon, alexandre.belloni, tbultel,
	Richard Cochran, Rafal Ozieblo

On Wed, Jan 25, 2017 at 2:56 PM, Nicolas Ferre <nicolas.ferre@atmel.com> wrote:
> 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>

Reviewed-by: Harini Katakam <harinik@xilinx.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.

Sure, reviewed and working with it, meant to add tag :)

Regards,
Harini

^ permalink raw reply	[flat|nested] 10+ messages in thread

* RE: [PATCH net-next v2] macb: Common code to enable ptp support for MACB/GEM
  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-26 15:15 ` Rafal Ozieblo
  2017-01-27  5:42   ` Harini Katakam
  1 sibling, 1 reply; 10+ messages in thread
From: Rafal Ozieblo @ 2017-01-26 15:15 UTC (permalink / raw)
  To: Andrei Pistirica, netdev, linux-kernel, linux-arm-kernel, davem,
	nicolas.ferre, harinikatakamlinux, harini.katakam
  Cc: punnaia, michals, anirudh, boris.brezillon, alexandre.belloni,
	tbultel, richardcochran

> -----Original Message-----
> From: Andrei Pistirica [mailto:andrei.pistirica@microchip.com] 
> Sent: 19 stycznia 2017 16:56
> Subject: [PATCH net-next v2] macb: Common code to enable ptp support for MACB/GEM
> 
>  
> +static inline bool gem_has_ptp(struct macb *bp)
> +{
> +	return !!(bp->caps & MACB_CAPS_GEM_HAS_PTP);
> +}
Why don't you use hardware capabilities here? Would it be better to read it from hardware instead adding it to many configuration?

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next v2] macb: Common code to enable ptp support for MACB/GEM
  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
  0 siblings, 2 replies; 10+ messages in thread
From: Harini Katakam @ 2017-01-27  5:42 UTC (permalink / raw)
  To: Rafal Ozieblo
  Cc: Andrei Pistirica, netdev, linux-kernel, linux-arm-kernel, davem,
	nicolas.ferre, harini.katakam, punnaia, michals, anirudh,
	boris.brezillon, alexandre.belloni, tbultel, richardcochran

Hi Rafal,

On Thu, Jan 26, 2017 at 8:45 PM, Rafal Ozieblo <rafalo@cadence.com> wrote:
>> -----Original Message-----
>> From: Andrei Pistirica [mailto:andrei.pistirica@microchip.com]
>> Sent: 19 stycznia 2017 16:56
>> Subject: [PATCH net-next v2] macb: Common code to enable ptp support for MACB/GEM
>>
>>
>> +static inline bool gem_has_ptp(struct macb *bp)
>> +{
>> +     return !!(bp->caps & MACB_CAPS_GEM_HAS_PTP);
>> +}
> Why don't you use hardware capabilities here? Would it be better to read it from hardware instead adding it to many configuration?

If you are referring to TSU bit in DCFG5, then we will be relying on
Cadence IP's information irrespective of the SoC capability
and whether the PTP support was adequate.
I think the capability approach gives better control and
it is not really much to add.

Regards,
Harini

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next v2] macb: Common code to enable ptp support for MACB/GEM
  2017-01-27  5:42   ` Harini Katakam
@ 2017-01-27 10:12     ` Nicolas Ferre
  2017-01-27 10:26     ` Rafal Ozieblo
  1 sibling, 0 replies; 10+ messages in thread
From: Nicolas Ferre @ 2017-01-27 10:12 UTC (permalink / raw)
  To: Harini Katakam, Rafal Ozieblo
  Cc: Andrei Pistirica, netdev, linux-kernel, linux-arm-kernel, davem,
	harini.katakam, punnaia, michals, anirudh, boris.brezillon,
	alexandre.belloni, tbultel, richardcochran

Le 27/01/2017 à 06:42, Harini Katakam a écrit :
> Hi Rafal,
> 
> On Thu, Jan 26, 2017 at 8:45 PM, Rafal Ozieblo <rafalo@cadence.com> wrote:
>>> -----Original Message-----
>>> From: Andrei Pistirica [mailto:andrei.pistirica@microchip.com]
>>> Sent: 19 stycznia 2017 16:56
>>> Subject: [PATCH net-next v2] macb: Common code to enable ptp support for MACB/GEM
>>>
>>>
>>> +static inline bool gem_has_ptp(struct macb *bp)
>>> +{
>>> +     return !!(bp->caps & MACB_CAPS_GEM_HAS_PTP);
>>> +}
>> Why don't you use hardware capabilities here? Would it be better to read it from hardware instead adding it to many configuration?
> 
> If you are referring to TSU bit in DCFG5, then we will be relying on
> Cadence IP's information irrespective of the SoC capability
> and whether the PTP support was adequate.
> I think the capability approach gives better control and
> it is not really much to add.

Yes, absolutely. In fact we already had this discussion and decided that
this capability scheme was giving much more control at low cost.

Regards,
-- 
Nicolas Ferre

^ permalink raw reply	[flat|nested] 10+ messages in thread

* RE: [PATCH net-next v2] macb: Common code to enable ptp support for MACB/GEM
  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
  1 sibling, 1 reply; 10+ messages in thread
From: Rafal Ozieblo @ 2017-01-27 10:26 UTC (permalink / raw)
  To: Harini Katakam
  Cc: Andrei Pistirica, netdev, linux-kernel, linux-arm-kernel, davem,
	nicolas.ferre, harini.katakam, punnaia, michals, anirudh,
	boris.brezillon, alexandre.belloni, tbultel, richardcochran

>-----Original Message-----
>From: Harini Katakam [mailto:harinikatakamlinux@gmail.com] 
>Sent: 27 stycznia 2017 06:43
>Subject: Re: [PATCH net-next v2] macb: Common code to enable ptp support for MACB/GEM
>
>Hi Rafal,
>
>On Thu, Jan 26, 2017 at 8:45 PM, Rafal Ozieblo <rafalo@cadence.com> wrote:
>>> -----Original Message-----
>>> From: Andrei Pistirica [mailto:andrei.pistirica@microchip.com]
>>> Sent: 19 stycznia 2017 16:56
>>> Subject: [PATCH net-next v2] macb: Common code to enable ptp support for MACB/GEM
>>>
>>>
>>> +static inline bool gem_has_ptp(struct macb *bp)
>>> +{
>>> +     return !!(bp->caps & MACB_CAPS_GEM_HAS_PTP);
>>> +}
>> Why don't you use hardware capabilities here? Would it be better to read it from hardware instead adding it to many configuration?
>
>If you are referring to TSU bit in DCFG5, then we will be relying on
>Cadence IP's information irrespective of the SoC capability
>and whether the PTP support was adequate.
>I think the capability approach gives better control and
>it is not really much to add.
>
>Regards,
>Harini
>
Yes, I'm referring to TSU bit.
What if SoC contains multiple Cadence GEMs, some with PTP support and others without?
Relevant will be checking both, hardware capabilities and SoC capabilities from "caps" field.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH net-next v2] macb: Common code to enable ptp support for MACB/GEM
  2017-01-27 10:26     ` Rafal Ozieblo
@ 2017-01-27 10:27       ` Nicolas Ferre
  2017-01-27 11:06         ` Rafal Ozieblo
  0 siblings, 1 reply; 10+ messages in thread
From: Nicolas Ferre @ 2017-01-27 10:27 UTC (permalink / raw)
  To: Rafal Ozieblo, Harini Katakam
  Cc: Andrei Pistirica, netdev, linux-kernel, linux-arm-kernel, davem,
	harini.katakam, punnaia, michals, anirudh, boris.brezillon,
	alexandre.belloni, tbultel, richardcochran

Le 27/01/2017 à 11:26, Rafal Ozieblo a écrit :
>> -----Original Message-----
>> From: Harini Katakam [mailto:harinikatakamlinux@gmail.com] 
>> Sent: 27 stycznia 2017 06:43
>> Subject: Re: [PATCH net-next v2] macb: Common code to enable ptp support for MACB/GEM
>>
>> Hi Rafal,
>>
>> On Thu, Jan 26, 2017 at 8:45 PM, Rafal Ozieblo <rafalo@cadence.com> wrote:
>>>> -----Original Message-----
>>>> From: Andrei Pistirica [mailto:andrei.pistirica@microchip.com]
>>>> Sent: 19 stycznia 2017 16:56
>>>> Subject: [PATCH net-next v2] macb: Common code to enable ptp support for MACB/GEM
>>>>
>>>>
>>>> +static inline bool gem_has_ptp(struct macb *bp)
>>>> +{
>>>> +     return !!(bp->caps & MACB_CAPS_GEM_HAS_PTP);
>>>> +}
>>> Why don't you use hardware capabilities here? Would it be better to read it from hardware instead adding it to many configuration?
>>
>> If you are referring to TSU bit in DCFG5, then we will be relying on
>> Cadence IP's information irrespective of the SoC capability
>> and whether the PTP support was adequate.
>> I think the capability approach gives better control and
>> it is not really much to add.
>>
>> Regards,
>> Harini
>>
> Yes, I'm referring to TSU bit.
> What if SoC contains multiple Cadence GEMs, some with PTP support and others without?

Simply define different DT compatibility strings and we're good.

> Relevant will be checking both, hardware capabilities and SoC capabilities from "caps" field.
> 


-- 
Nicolas Ferre

^ permalink raw reply	[flat|nested] 10+ messages in thread

* RE: [PATCH net-next v2] macb: Common code to enable ptp support for MACB/GEM
  2017-01-27 10:27       ` Nicolas Ferre
@ 2017-01-27 11:06         ` Rafal Ozieblo
  0 siblings, 0 replies; 10+ messages in thread
From: Rafal Ozieblo @ 2017-01-27 11:06 UTC (permalink / raw)
  To: Nicolas Ferre, Harini Katakam
  Cc: Andrei Pistirica, netdev, linux-kernel, linux-arm-kernel, davem,
	harini.katakam, punnaia, michals, anirudh, boris.brezillon,
	alexandre.belloni, tbultel, richardcochran

>-----Original Message-----
>From: Nicolas Ferre [mailto:nicolas.ferre@atmel.com] 
>Sent: 27 stycznia 2017 11:28
>Subject: Re: [PATCH net-next v2] macb: Common code to enable ptp support for MACB/GEM
>
>Le 27/01/2017 à 11:26, Rafal Ozieblo a écrit :
>>> -----Original Message-----
>>> From: Harini Katakam [mailto:harinikatakamlinux@gmail.com] 
>>> Sent: 27 stycznia 2017 06:43
>>> Subject: Re: [PATCH net-next v2] macb: Common code to enable ptp support for MACB/GEM
>>>
>>> Hi Rafal,
>>>
>>> On Thu, Jan 26, 2017 at 8:45 PM, Rafal Ozieblo <rafalo@cadence.com> wrote:
>>>>> -----Original Message-----
>>>>> From: Andrei Pistirica [mailto:andrei.pistirica@microchip.com]
>>>>> Sent: 19 stycznia 2017 16:56
>>>>> Subject: [PATCH net-next v2] macb: Common code to enable ptp support for MACB/GEM
>>>>>
>>>>>
>>>>> +static inline bool gem_has_ptp(struct macb *bp)
>>>>> +{
>>>>> +     return !!(bp->caps & MACB_CAPS_GEM_HAS_PTP);
>>>>> +}
>>>> Why don't you use hardware capabilities here? Would it be better to read it from hardware instead adding it to many configuration?
>>>
>>> If you are referring to TSU bit in DCFG5, then we will be relying on
>>> Cadence IP's information irrespective of the SoC capability
>>> and whether the PTP support was adequate.
>>> I think the capability approach gives better control and
>>> it is not really much to add.
>>>
>>> Regards,
>>> Harini
>>>
>> Yes, I'm referring to TSU bit.
>> What if SoC contains multiple Cadence GEMs, some with PTP support and others without?
>
>Simply define different DT compatibility strings and we're good.

What with GEM on PCI ? There is no DT.

>> Relevant will be checking both, hardware capabilities and SoC capabilities from "caps" field.
>> 
>
>
>-- 
>Nicolas Ferre
>

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2017-01-27 11:26 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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
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

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).