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: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Jakub Kicinski
2025-09-22 11:49:18 -07:00
3 changed files with 12 additions and 25 deletions

View File

@@ -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);

View File

@@ -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);
if (info->phc_index < 0)
goto timestamp_tx_sw;
}
info->phc_index = enetc_get_phc_index(si);
if (info->phc_index < 0)
goto timestamp_tx_sw;
enetc_get_ts_generic_info(ndev, info);

View File

@@ -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);