mirror of https://github.com/torvalds/linux.git
ptp: qoriq: convert to use generic interfaces to set loopback mode
Since the generic debugfs interfaces for setting the periodic pulse signal loopback have been added to the ptp_clock driver, so convert the vendor-defined debugfs interfaces to the generic interfaces. Signed-off-by: Wei Fang <wei.fang@nxp.com> Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com> Tested-by: Vladimir Oltean <vladimir.oltean@nxp.com> Link: https://patch.msgid.link/20250905030711.1509648-4-wei.fang@nxp.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
67ac836373
commit
f3164840a1
|
|
@ -9817,7 +9817,6 @@ F: drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp*
|
|||
F: drivers/net/ethernet/freescale/dpaa2/dprtc*
|
||||
F: drivers/net/ethernet/freescale/enetc/enetc_ptp.c
|
||||
F: drivers/ptp/ptp_qoriq.c
|
||||
F: drivers/ptp/ptp_qoriq_debugfs.c
|
||||
F: include/linux/fsl/ptp_qoriq.h
|
||||
|
||||
FREESCALE QUAD SPI DRIVER
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ config PTP_1588_CLOCK_QORIQ
|
|||
packets using the SO_TIMESTAMPING API.
|
||||
|
||||
To compile this driver as a module, choose M here: the module
|
||||
will be called ptp-qoriq.
|
||||
will be called ptp_qoriq.
|
||||
|
||||
comment "Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks."
|
||||
depends on PHYLIB=n || NETWORK_PHY_TIMESTAMPING=n
|
||||
|
|
|
|||
|
|
@ -12,9 +12,7 @@ obj-$(CONFIG_PTP_1588_CLOCK_INES) += ptp_ines.o
|
|||
obj-$(CONFIG_PTP_1588_CLOCK_PCH) += ptp_pch.o
|
||||
obj-$(CONFIG_PTP_1588_CLOCK_KVM) += ptp_kvm.o
|
||||
obj-$(CONFIG_PTP_1588_CLOCK_VMCLOCK) += ptp_vmclock.o
|
||||
obj-$(CONFIG_PTP_1588_CLOCK_QORIQ) += ptp-qoriq.o
|
||||
ptp-qoriq-y += ptp_qoriq.o
|
||||
ptp-qoriq-$(CONFIG_DEBUG_FS) += ptp_qoriq_debugfs.o
|
||||
obj-$(CONFIG_PTP_1588_CLOCK_QORIQ) += ptp_qoriq.o
|
||||
obj-$(CONFIG_PTP_1588_CLOCK_IDTCM) += ptp_clockmatrix.o
|
||||
obj-$(CONFIG_PTP_1588_CLOCK_FC3W) += ptp_fc3.o
|
||||
obj-$(CONFIG_PTP_1588_CLOCK_IDT82P33) += ptp_idt82p33.o
|
||||
|
|
|
|||
|
|
@ -465,6 +465,25 @@ static int ptp_qoriq_auto_config(struct ptp_qoriq *ptp_qoriq,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int ptp_qoriq_perout_loopback(struct ptp_clock_info *ptp,
|
||||
unsigned int index, int on)
|
||||
{
|
||||
struct ptp_qoriq *ptp_qoriq = container_of(ptp, struct ptp_qoriq, caps);
|
||||
struct ptp_qoriq_registers *regs = &ptp_qoriq->regs;
|
||||
u32 loopback_bit = index ? PP2L : PP1L;
|
||||
u32 tmr_ctrl;
|
||||
|
||||
tmr_ctrl = ptp_qoriq->read(®s->ctrl_regs->tmr_ctrl);
|
||||
if (on)
|
||||
tmr_ctrl |= loopback_bit;
|
||||
else
|
||||
tmr_ctrl &= ~loopback_bit;
|
||||
|
||||
ptp_qoriq->write(®s->ctrl_regs->tmr_ctrl, tmr_ctrl);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ptp_qoriq_init(struct ptp_qoriq *ptp_qoriq, void __iomem *base,
|
||||
const struct ptp_clock_info *caps)
|
||||
{
|
||||
|
|
@ -479,6 +498,8 @@ int ptp_qoriq_init(struct ptp_qoriq *ptp_qoriq, void __iomem *base,
|
|||
|
||||
ptp_qoriq->base = base;
|
||||
ptp_qoriq->caps = *caps;
|
||||
ptp_qoriq->caps.n_per_lp = 2;
|
||||
ptp_qoriq->caps.perout_loopback = ptp_qoriq_perout_loopback;
|
||||
|
||||
if (of_property_read_u32(node, "fsl,cksel", &ptp_qoriq->cksel))
|
||||
ptp_qoriq->cksel = DEFAULT_CKSEL;
|
||||
|
|
@ -568,7 +589,7 @@ int ptp_qoriq_init(struct ptp_qoriq *ptp_qoriq, void __iomem *base,
|
|||
return PTR_ERR(ptp_qoriq->clock);
|
||||
|
||||
ptp_qoriq->phc_index = ptp_clock_index(ptp_qoriq->clock);
|
||||
ptp_qoriq_create_debugfs(ptp_qoriq);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ptp_qoriq_init);
|
||||
|
|
@ -580,7 +601,6 @@ void ptp_qoriq_free(struct ptp_qoriq *ptp_qoriq)
|
|||
ptp_qoriq->write(®s->ctrl_regs->tmr_temask, 0);
|
||||
ptp_qoriq->write(®s->ctrl_regs->tmr_ctrl, 0);
|
||||
|
||||
ptp_qoriq_remove_debugfs(ptp_qoriq);
|
||||
ptp_clock_unregister(ptp_qoriq->clock);
|
||||
iounmap(ptp_qoriq->base);
|
||||
free_irq(ptp_qoriq->irq, ptp_qoriq);
|
||||
|
|
|
|||
|
|
@ -1,101 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/* Copyright 2019 NXP
|
||||
*/
|
||||
#include <linux/device.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/fsl/ptp_qoriq.h>
|
||||
|
||||
static int ptp_qoriq_fiper1_lpbk_get(void *data, u64 *val)
|
||||
{
|
||||
struct ptp_qoriq *ptp_qoriq = data;
|
||||
struct ptp_qoriq_registers *regs = &ptp_qoriq->regs;
|
||||
u32 ctrl;
|
||||
|
||||
ctrl = ptp_qoriq->read(®s->ctrl_regs->tmr_ctrl);
|
||||
*val = ctrl & PP1L ? 1 : 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ptp_qoriq_fiper1_lpbk_set(void *data, u64 val)
|
||||
{
|
||||
struct ptp_qoriq *ptp_qoriq = data;
|
||||
struct ptp_qoriq_registers *regs = &ptp_qoriq->regs;
|
||||
u32 ctrl;
|
||||
|
||||
ctrl = ptp_qoriq->read(®s->ctrl_regs->tmr_ctrl);
|
||||
if (val == 0)
|
||||
ctrl &= ~PP1L;
|
||||
else
|
||||
ctrl |= PP1L;
|
||||
|
||||
ptp_qoriq->write(®s->ctrl_regs->tmr_ctrl, ctrl);
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_DEBUGFS_ATTRIBUTE(ptp_qoriq_fiper1_fops, ptp_qoriq_fiper1_lpbk_get,
|
||||
ptp_qoriq_fiper1_lpbk_set, "%llu\n");
|
||||
|
||||
static int ptp_qoriq_fiper2_lpbk_get(void *data, u64 *val)
|
||||
{
|
||||
struct ptp_qoriq *ptp_qoriq = data;
|
||||
struct ptp_qoriq_registers *regs = &ptp_qoriq->regs;
|
||||
u32 ctrl;
|
||||
|
||||
ctrl = ptp_qoriq->read(®s->ctrl_regs->tmr_ctrl);
|
||||
*val = ctrl & PP2L ? 1 : 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ptp_qoriq_fiper2_lpbk_set(void *data, u64 val)
|
||||
{
|
||||
struct ptp_qoriq *ptp_qoriq = data;
|
||||
struct ptp_qoriq_registers *regs = &ptp_qoriq->regs;
|
||||
u32 ctrl;
|
||||
|
||||
ctrl = ptp_qoriq->read(®s->ctrl_regs->tmr_ctrl);
|
||||
if (val == 0)
|
||||
ctrl &= ~PP2L;
|
||||
else
|
||||
ctrl |= PP2L;
|
||||
|
||||
ptp_qoriq->write(®s->ctrl_regs->tmr_ctrl, ctrl);
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_DEBUGFS_ATTRIBUTE(ptp_qoriq_fiper2_fops, ptp_qoriq_fiper2_lpbk_get,
|
||||
ptp_qoriq_fiper2_lpbk_set, "%llu\n");
|
||||
|
||||
void ptp_qoriq_create_debugfs(struct ptp_qoriq *ptp_qoriq)
|
||||
{
|
||||
struct dentry *root;
|
||||
|
||||
root = debugfs_create_dir(dev_name(ptp_qoriq->dev), NULL);
|
||||
if (IS_ERR(root))
|
||||
return;
|
||||
if (!root)
|
||||
goto err_root;
|
||||
|
||||
ptp_qoriq->debugfs_root = root;
|
||||
|
||||
if (!debugfs_create_file_unsafe("fiper1-loopback", 0600, root,
|
||||
ptp_qoriq, &ptp_qoriq_fiper1_fops))
|
||||
goto err_node;
|
||||
if (!debugfs_create_file_unsafe("fiper2-loopback", 0600, root,
|
||||
ptp_qoriq, &ptp_qoriq_fiper2_fops))
|
||||
goto err_node;
|
||||
return;
|
||||
|
||||
err_node:
|
||||
debugfs_remove_recursive(root);
|
||||
ptp_qoriq->debugfs_root = NULL;
|
||||
err_root:
|
||||
dev_err(ptp_qoriq->dev, "failed to initialize debugfs\n");
|
||||
}
|
||||
|
||||
void ptp_qoriq_remove_debugfs(struct ptp_qoriq *ptp_qoriq)
|
||||
{
|
||||
debugfs_remove_recursive(ptp_qoriq->debugfs_root);
|
||||
ptp_qoriq->debugfs_root = NULL;
|
||||
}
|
||||
|
|
@ -145,7 +145,6 @@ struct ptp_qoriq {
|
|||
struct ptp_clock *clock;
|
||||
struct ptp_clock_info caps;
|
||||
struct resource *rsrc;
|
||||
struct dentry *debugfs_root;
|
||||
struct device *dev;
|
||||
bool extts_fifo_support;
|
||||
bool fiper3_support;
|
||||
|
|
@ -195,14 +194,5 @@ int ptp_qoriq_settime(struct ptp_clock_info *ptp,
|
|||
int ptp_qoriq_enable(struct ptp_clock_info *ptp,
|
||||
struct ptp_clock_request *rq, int on);
|
||||
int extts_clean_up(struct ptp_qoriq *ptp_qoriq, int index, bool update_event);
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
void ptp_qoriq_create_debugfs(struct ptp_qoriq *ptp_qoriq);
|
||||
void ptp_qoriq_remove_debugfs(struct ptp_qoriq *ptp_qoriq);
|
||||
#else
|
||||
static inline void ptp_qoriq_create_debugfs(struct ptp_qoriq *ptp_qoriq)
|
||||
{ }
|
||||
static inline void ptp_qoriq_remove_debugfs(struct ptp_qoriq *ptp_qoriq)
|
||||
{ }
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in New Issue