Commit 4b1eb833 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'net-enetc-improve-the-interface-for-obtaining-phc_index'

Wei Fang says:

====================
net: enetc: improve the interface for obtaining phc_index

The first patch is to fix the issue that a sleeping function is called
in the context of rcu_read_lock(). The second patch is to use the generic
API instead of the custom API to get phc_index. In addition, the second
patch depends on the first patch to work.

v1: https://lore.kernel.org/20250918074454.1742328-1-wei.fang@nxp.com
====================

Link: https://patch.msgid.link/20250919084509.1846513-1-wei.fang@nxp.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 78e87f9d ac0e650f
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -493,9 +493,6 @@ struct enetc_msg_cmd_set_primary_mac {

#define ENETC_CBDR_TIMEOUT	1000 /* usecs */

/* PTP driver exports */
extern int enetc_phc_index;

/* SI common */
u32 enetc_port_mac_rd(struct enetc_si *si, u32 reg);
void enetc_port_mac_wr(struct enetc_si *si, u32 reg, u32 val);
+12 −17
Original line number Diff line number Diff line
@@ -880,7 +880,7 @@ static int enetc_set_coalesce(struct net_device *ndev,
	return 0;
}

static int enetc4_get_phc_index_by_pdev(struct enetc_si *si)
static int enetc_get_phc_index_by_pdev(struct enetc_si *si)
{
	struct pci_bus *bus = si->pdev->bus;
	struct pci_dev *timer_pdev;
@@ -888,6 +888,9 @@ static int enetc4_get_phc_index_by_pdev(struct enetc_si *si)
	int phc_index;

	switch (si->revision) {
	case ENETC_REV_1_0:
		devfn = PCI_DEVFN(0, 4);
		break;
	case ENETC_REV_4_1:
		devfn = PCI_DEVFN(24, 0);
		break;
@@ -895,7 +898,8 @@ static int enetc4_get_phc_index_by_pdev(struct enetc_si *si)
		return -1;
	}

	timer_pdev = pci_get_slot(bus, devfn);
	timer_pdev = pci_get_domain_bus_and_slot(pci_domain_nr(bus),
						 bus->number, devfn);
	if (!timer_pdev)
		return -1;

@@ -905,18 +909,18 @@ static int enetc4_get_phc_index_by_pdev(struct enetc_si *si)
	return phc_index;
}

static int enetc4_get_phc_index(struct enetc_si *si)
static int enetc_get_phc_index(struct enetc_si *si)
{
	struct device_node *np = si->pdev->dev.of_node;
	struct device_node *timer_np;
	int phc_index;

	if (!np)
		return enetc4_get_phc_index_by_pdev(si);
		return enetc_get_phc_index_by_pdev(si);

	timer_np = of_parse_phandle(np, "ptp-timer", 0);
	if (!timer_np)
		return enetc4_get_phc_index_by_pdev(si);
		return enetc_get_phc_index_by_pdev(si);

	phc_index = ptp_clock_index_by_of_node(timer_np);
	of_node_put(timer_np);
@@ -949,22 +953,13 @@ static int enetc_get_ts_info(struct net_device *ndev,
{
	struct enetc_ndev_priv *priv = netdev_priv(ndev);
	struct enetc_si *si = priv->si;
	int *phc_idx;

	if (!enetc_ptp_clock_is_enabled(si))
		goto timestamp_tx_sw;

	if (is_enetc_rev1(si)) {
		phc_idx = symbol_get(enetc_phc_index);
		if (phc_idx) {
			info->phc_index = *phc_idx;
			symbol_put(enetc_phc_index);
		}
	} else {
		info->phc_index = enetc4_get_phc_index(si);
	info->phc_index = enetc_get_phc_index(si);
	if (info->phc_index < 0)
		goto timestamp_tx_sw;
	}

	enetc_get_ts_generic_info(ndev, info);

+0 −5
Original line number Diff line number Diff line
@@ -7,9 +7,6 @@

#include "enetc.h"

int enetc_phc_index = -1;
EXPORT_SYMBOL_GPL(enetc_phc_index);

static struct ptp_clock_info enetc_ptp_caps = {
	.owner		= THIS_MODULE,
	.name		= "ENETC PTP clock",
@@ -92,7 +89,6 @@ static int enetc_ptp_probe(struct pci_dev *pdev,
	if (err)
		goto err_no_clock;

	enetc_phc_index = ptp_qoriq->phc_index;
	pci_set_drvdata(pdev, ptp_qoriq);

	return 0;
@@ -118,7 +114,6 @@ static void enetc_ptp_remove(struct pci_dev *pdev)
{
	struct ptp_qoriq *ptp_qoriq = pci_get_drvdata(pdev);

	enetc_phc_index = -1;
	ptp_qoriq_free(ptp_qoriq);
	pci_free_irq_vectors(pdev);
	kfree(ptp_qoriq);