mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-14 11:11:22 -04:00
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:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user