Commit fdaf715b authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'add-hwtstamp_get-callback-to-phy-drivers'

Vadim Fedorenko says:

====================
add hwtstamp_get callback to phy drivers

PHY drivers are able to configure HW time stamping and are not able to
report configuration back to user space. Add callback to report
configuration like it's done for net_device and add implementation to
the drivers.
====================

Link: https://patch.msgid.link/20251124181151.277256-1-vadim.fedorenko@linux.dev


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents c01a6e5b dadc5187
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2657,7 +2657,7 @@ static int gbe_hwtstamp_set(void *intf_priv, struct kernel_hwtstamp_config *cfg,

	phy = gbe_intf->slave->phy;
	if (phy_has_hwtstamp(phy))
		return phy->mii_ts->hwtstamp(phy->mii_ts, cfg, extack);
		return phy->mii_ts->hwtstamp_set(phy->mii_ts, cfg, extack);

	switch (cfg->tx_type) {
	case HWTSTAMP_TX_OFF:
+17 −4
Original line number Diff line number Diff line
@@ -780,7 +780,19 @@ static void bcm_ptp_txtstamp(struct mii_timestamper *mii_ts,
	kfree_skb(skb);
}

static int bcm_ptp_hwtstamp(struct mii_timestamper *mii_ts,
static int bcm_ptp_hwtstamp_get(struct mii_timestamper *mii_ts,
				struct kernel_hwtstamp_config *cfg)
{
	struct bcm_ptp_private *priv = mii2priv(mii_ts);

	cfg->rx_filter = priv->hwts_rx ? HWTSTAMP_FILTER_PTP_V2_EVENT
				       : HWTSTAMP_FILTER_NONE;
	cfg->tx_type = priv->tx_type;

	return 0;
}

static int bcm_ptp_hwtstamp_set(struct mii_timestamper *mii_ts,
				struct kernel_hwtstamp_config *cfg,
				struct netlink_ext_ack *extack)
{
@@ -898,7 +910,8 @@ static void bcm_ptp_init(struct bcm_ptp_private *priv)

	priv->mii_ts.rxtstamp = bcm_ptp_rxtstamp;
	priv->mii_ts.txtstamp = bcm_ptp_txtstamp;
	priv->mii_ts.hwtstamp = bcm_ptp_hwtstamp;
	priv->mii_ts.hwtstamp_set = bcm_ptp_hwtstamp_set;
	priv->mii_ts.hwtstamp_get = bcm_ptp_hwtstamp_get;
	priv->mii_ts.ts_info = bcm_ptp_ts_info;

	priv->phydev->mii_ts = &priv->mii_ts;
+21 −8
Original line number Diff line number Diff line
@@ -1176,7 +1176,19 @@ static irqreturn_t dp83640_handle_interrupt(struct phy_device *phydev)
	return IRQ_HANDLED;
}

static int dp83640_hwtstamp(struct mii_timestamper *mii_ts,
static int dp83640_hwtstamp_get(struct mii_timestamper *mii_ts,
				struct kernel_hwtstamp_config *cfg)
{
	struct dp83640_private *dp83640 =
		container_of(mii_ts, struct dp83640_private, mii_ts);

	cfg->rx_filter = dp83640->hwts_rx_en;
	cfg->tx_type = dp83640->hwts_tx_en;

	return 0;
}

static int dp83640_hwtstamp_set(struct mii_timestamper *mii_ts,
				struct kernel_hwtstamp_config *cfg,
				struct netlink_ext_ack *extack)
{
@@ -1198,7 +1210,7 @@ static int dp83640_hwtstamp(struct mii_timestamper *mii_ts,
	case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
	case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
	case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
		dp83640->hwts_rx_en = 1;
		dp83640->hwts_rx_en = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
		dp83640->layer = PTP_CLASS_L4;
		dp83640->version = PTP_CLASS_V1;
		cfg->rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
@@ -1206,7 +1218,7 @@ static int dp83640_hwtstamp(struct mii_timestamper *mii_ts,
	case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
	case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
	case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
		dp83640->hwts_rx_en = 1;
		dp83640->hwts_rx_en = HWTSTAMP_FILTER_PTP_V2_L4_EVENT;
		dp83640->layer = PTP_CLASS_L4;
		dp83640->version = PTP_CLASS_V2;
		cfg->rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT;
@@ -1214,7 +1226,7 @@ static int dp83640_hwtstamp(struct mii_timestamper *mii_ts,
	case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
	case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
	case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
		dp83640->hwts_rx_en = 1;
		dp83640->hwts_rx_en = HWTSTAMP_FILTER_PTP_V2_L2_EVENT;
		dp83640->layer = PTP_CLASS_L2;
		dp83640->version = PTP_CLASS_V2;
		cfg->rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_EVENT;
@@ -1222,7 +1234,7 @@ static int dp83640_hwtstamp(struct mii_timestamper *mii_ts,
	case HWTSTAMP_FILTER_PTP_V2_EVENT:
	case HWTSTAMP_FILTER_PTP_V2_SYNC:
	case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
		dp83640->hwts_rx_en = 1;
		dp83640->hwts_rx_en = HWTSTAMP_FILTER_PTP_V2_EVENT;
		dp83640->layer = PTP_CLASS_L4 | PTP_CLASS_L2;
		dp83640->version = PTP_CLASS_V2;
		cfg->rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
@@ -1407,7 +1419,8 @@ static int dp83640_probe(struct phy_device *phydev)
	dp83640->phydev = phydev;
	dp83640->mii_ts.rxtstamp = dp83640_rxtstamp;
	dp83640->mii_ts.txtstamp = dp83640_txtstamp;
	dp83640->mii_ts.hwtstamp = dp83640_hwtstamp;
	dp83640->mii_ts.hwtstamp_set = dp83640_hwtstamp_set;
	dp83640->mii_ts.hwtstamp_get = dp83640_hwtstamp_get;
	dp83640->mii_ts.ts_info  = dp83640_ts_info;

	INIT_DELAYED_WORK(&dp83640->ts_work, rx_timestamp_work);
+8 −8
Original line number Diff line number Diff line
@@ -3147,7 +3147,7 @@ static void lan8814_flush_fifo(struct phy_device *phydev, bool egress)
	lanphy_read_page_reg(phydev, LAN8814_PAGE_PORT_REGS, PTP_TSU_INT_STS);
}

static int lan8814_hwtstamp(struct mii_timestamper *mii_ts,
static int lan8814_hwtstamp_set(struct mii_timestamper *mii_ts,
				struct kernel_hwtstamp_config *config,
				struct netlink_ext_ack *extack)
{
@@ -4389,7 +4389,7 @@ static void lan8814_ptp_init(struct phy_device *phydev)

	ptp_priv->mii_ts.rxtstamp = lan8814_rxtstamp;
	ptp_priv->mii_ts.txtstamp = lan8814_txtstamp;
	ptp_priv->mii_ts.hwtstamp = lan8814_hwtstamp;
	ptp_priv->mii_ts.hwtstamp_set = lan8814_hwtstamp_set;
	ptp_priv->mii_ts.ts_info  = lan8814_ts_info;

	phydev->mii_ts = &ptp_priv->mii_ts;
@@ -5042,7 +5042,7 @@ static void lan8841_ptp_enable_processing(struct kszphy_ptp_priv *ptp_priv,
#define LAN8841_PTP_TX_TIMESTAMP_EN		443
#define LAN8841_PTP_TX_MOD			445

static int lan8841_hwtstamp(struct mii_timestamper *mii_ts,
static int lan8841_hwtstamp_set(struct mii_timestamper *mii_ts,
				struct kernel_hwtstamp_config *config,
				struct netlink_ext_ack *extack)
{
@@ -5924,7 +5924,7 @@ static int lan8841_probe(struct phy_device *phydev)

	ptp_priv->mii_ts.rxtstamp = lan8841_rxtstamp;
	ptp_priv->mii_ts.txtstamp = lan8814_txtstamp;
	ptp_priv->mii_ts.hwtstamp = lan8841_hwtstamp;
	ptp_priv->mii_ts.hwtstamp_set = lan8841_hwtstamp_set;
	ptp_priv->mii_ts.ts_info = lan8841_ts_info;

	phydev->mii_ts = &ptp_priv->mii_ts;
+4 −4
Original line number Diff line number Diff line
@@ -476,7 +476,7 @@ static bool mchp_rds_ptp_rxtstamp(struct mii_timestamper *mii_ts,
	return true;
}

static int mchp_rds_ptp_hwtstamp(struct mii_timestamper *mii_ts,
static int mchp_rds_ptp_hwtstamp_set(struct mii_timestamper *mii_ts,
				     struct kernel_hwtstamp_config *config,
				     struct netlink_ext_ack *extack)
{
@@ -1281,7 +1281,7 @@ struct mchp_rds_ptp_clock *mchp_rds_ptp_probe(struct phy_device *phydev, u8 mmd,

	clock->mii_ts.rxtstamp = mchp_rds_ptp_rxtstamp;
	clock->mii_ts.txtstamp = mchp_rds_ptp_txtstamp;
	clock->mii_ts.hwtstamp = mchp_rds_ptp_hwtstamp;
	clock->mii_ts.hwtstamp_set = mchp_rds_ptp_hwtstamp_set;
	clock->mii_ts.ts_info = mchp_rds_ptp_ts_info;

	phydev->mii_ts = &clock->mii_ts;
Loading