Commit f3164840 authored by Wei Fang's avatar Wei Fang Committed by Jakub Kicinski
Browse files

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: default avatarWei Fang <wei.fang@nxp.com>
Reviewed-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
Tested-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
Link: https://patch.msgid.link/20250905030711.1509648-4-wei.fang@nxp.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 67ac8363
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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
+1 −3
Original line number Diff line number Diff line
@@ -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
+22 −2
Original line number Diff line number Diff line
@@ -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(&regs->ctrl_regs->tmr_ctrl);
	if (on)
		tmr_ctrl |= loopback_bit;
	else
		tmr_ctrl &= ~loopback_bit;

	ptp_qoriq->write(&regs->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(&regs->ctrl_regs->tmr_temask, 0);
	ptp_qoriq->write(&regs->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);

drivers/ptp/ptp_qoriq_debugfs.c

deleted100644 → 0
+0 −101
Original line number Diff line number Diff line
// 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(&regs->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(&regs->ctrl_regs->tmr_ctrl);
	if (val == 0)
		ctrl &= ~PP1L;
	else
		ctrl |= PP1L;

	ptp_qoriq->write(&regs->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(&regs->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(&regs->ctrl_regs->tmr_ctrl);
	if (val == 0)
		ctrl &= ~PP2L;
	else
		ctrl |= PP2L;

	ptp_qoriq->write(&regs->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;
}
Loading