From: Yangbo Lu <yangbo.lu@nxp.com>
To: netdev@vger.kernel.org, devicetree@vger.kernel.org
Cc: "David S . Miller" <davem@davemloft.net>,
Richard Cochran <richardcochran@gmail.com>,
Rob Herring <robh+dt@kernel.org>,
Claudiu Manoil <claudiu.manoil@nxp.com>,
Yangbo Lu <yangbo.lu@nxp.com>
Subject: [v2, 3/9] ptp_qoriq: convert to use ptp_qoriq_init()
Date: Sat, 2 Feb 2019 10:57:01 +0800 [thread overview]
Message-ID: <20190202025707.10794-4-yangbo.lu@nxp.com> (raw)
In-Reply-To: <20190202025707.10794-1-yangbo.lu@nxp.com>
Moved QorIQ PTP clock initialization into new function
qoriq_ptp_init(). This function could also be reused
by ENETC PTP drvier which is a PCI driver for same 1588
timer IP block.
Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
---
Changes for v2:
- None.
---
drivers/ptp/ptp_qoriq.c | 120 +++++++++++++++++++++--------------------
include/linux/fsl/ptp_qoriq.h | 2 +
2 files changed, 64 insertions(+), 58 deletions(-)
diff --git a/drivers/ptp/ptp_qoriq.c b/drivers/ptp/ptp_qoriq.c
index 1f3e73e..63896b5 100644
--- a/drivers/ptp/ptp_qoriq.c
+++ b/drivers/ptp/ptp_qoriq.c
@@ -458,25 +458,17 @@ static int ptp_qoriq_auto_config(struct ptp_qoriq *ptp_qoriq,
return 0;
}
-static int ptp_qoriq_probe(struct platform_device *dev)
+int ptp_qoriq_init(struct ptp_qoriq *ptp_qoriq, void __iomem *base,
+ const struct ptp_clock_info caps)
{
- struct device_node *node = dev->dev.of_node;
- struct ptp_qoriq *ptp_qoriq;
+ struct device_node *node = ptp_qoriq->dev->of_node;
struct ptp_qoriq_registers *regs;
struct timespec64 now;
- int err = -ENOMEM;
- u32 tmr_ctrl;
unsigned long flags;
- void __iomem *base;
-
- ptp_qoriq = kzalloc(sizeof(*ptp_qoriq), GFP_KERNEL);
- if (!ptp_qoriq)
- goto no_memory;
-
- err = -EINVAL;
+ u32 tmr_ctrl;
- ptp_qoriq->dev = &dev->dev;
- ptp_qoriq->caps = ptp_qoriq_caps;
+ ptp_qoriq->base = base;
+ ptp_qoriq->caps = caps;
if (of_property_read_u32(node, "fsl,cksel", &ptp_qoriq->cksel))
ptp_qoriq->cksel = DEFAULT_CKSEL;
@@ -501,44 +493,9 @@ static int ptp_qoriq_probe(struct platform_device *dev)
pr_warn("device tree node missing required elements, try automatic configuration\n");
if (ptp_qoriq_auto_config(ptp_qoriq, node))
- goto no_config;
+ return -ENODEV;
}
- err = -ENODEV;
-
- ptp_qoriq->irq = platform_get_irq(dev, 0);
-
- if (ptp_qoriq->irq < 0) {
- pr_err("irq not in device tree\n");
- goto no_node;
- }
- if (request_irq(ptp_qoriq->irq, ptp_qoriq_isr, IRQF_SHARED,
- DRIVER, ptp_qoriq)) {
- pr_err("request_irq failed\n");
- goto no_node;
- }
-
- ptp_qoriq->rsrc = platform_get_resource(dev, IORESOURCE_MEM, 0);
- if (!ptp_qoriq->rsrc) {
- pr_err("no resource\n");
- goto no_resource;
- }
- if (request_resource(&iomem_resource, ptp_qoriq->rsrc)) {
- pr_err("resource busy\n");
- goto no_resource;
- }
-
- spin_lock_init(&ptp_qoriq->lock);
-
- base = ioremap(ptp_qoriq->rsrc->start,
- resource_size(ptp_qoriq->rsrc));
- if (!base) {
- pr_err("ioremap ptp registers failed\n");
- goto no_ioremap;
- }
-
- ptp_qoriq->base = base;
-
if (of_device_is_compatible(node, "fsl,fman-ptp-timer")) {
ptp_qoriq->regs.ctrl_regs = base + FMAN_CTRL_REGS_OFFSET;
ptp_qoriq->regs.alarm_regs = base + FMAN_ALARM_REGS_OFFSET;
@@ -558,6 +515,7 @@ static int ptp_qoriq_probe(struct platform_device *dev)
(ptp_qoriq->tclk_period & TCLK_PERIOD_MASK) << TCLK_PERIOD_SHIFT |
(ptp_qoriq->cksel & CKSEL_MASK) << CKSEL_SHIFT;
+ spin_lock_init(&ptp_qoriq->lock);
spin_lock_irqsave(&ptp_qoriq->lock, flags);
regs = &ptp_qoriq->regs;
@@ -571,16 +529,63 @@ static int ptp_qoriq_probe(struct platform_device *dev)
spin_unlock_irqrestore(&ptp_qoriq->lock, flags);
- ptp_qoriq->clock = ptp_clock_register(&ptp_qoriq->caps, &dev->dev);
- if (IS_ERR(ptp_qoriq->clock)) {
- err = PTR_ERR(ptp_qoriq->clock);
- goto no_clock;
- }
- ptp_qoriq->phc_index = ptp_clock_index(ptp_qoriq->clock);
+ ptp_qoriq->clock = ptp_clock_register(&ptp_qoriq->caps, ptp_qoriq->dev);
+ if (IS_ERR(ptp_qoriq->clock))
+ return PTR_ERR(ptp_qoriq->clock);
+ ptp_qoriq->phc_index = ptp_clock_index(ptp_qoriq->clock);
ptp_qoriq_create_debugfs(ptp_qoriq);
- platform_set_drvdata(dev, ptp_qoriq);
+ return 0;
+}
+EXPORT_SYMBOL_GPL(ptp_qoriq_init);
+
+static int ptp_qoriq_probe(struct platform_device *dev)
+{
+ struct ptp_qoriq *ptp_qoriq;
+ int err = -ENOMEM;
+ void __iomem *base;
+
+ ptp_qoriq = kzalloc(sizeof(*ptp_qoriq), GFP_KERNEL);
+ if (!ptp_qoriq)
+ goto no_memory;
+
+ ptp_qoriq->dev = &dev->dev;
+
+ err = -ENODEV;
+
+ ptp_qoriq->irq = platform_get_irq(dev, 0);
+ if (ptp_qoriq->irq < 0) {
+ pr_err("irq not in device tree\n");
+ goto no_node;
+ }
+ if (request_irq(ptp_qoriq->irq, ptp_qoriq_isr, IRQF_SHARED,
+ DRIVER, ptp_qoriq)) {
+ pr_err("request_irq failed\n");
+ goto no_node;
+ }
+ ptp_qoriq->rsrc = platform_get_resource(dev, IORESOURCE_MEM, 0);
+ if (!ptp_qoriq->rsrc) {
+ pr_err("no resource\n");
+ goto no_resource;
+ }
+ if (request_resource(&iomem_resource, ptp_qoriq->rsrc)) {
+ pr_err("resource busy\n");
+ goto no_resource;
+ }
+
+ base = ioremap(ptp_qoriq->rsrc->start,
+ resource_size(ptp_qoriq->rsrc));
+ if (!base) {
+ pr_err("ioremap ptp registers failed\n");
+ goto no_ioremap;
+ }
+
+ err = ptp_qoriq_init(ptp_qoriq, base, ptp_qoriq_caps);
+ if (err)
+ goto no_clock;
+
+ platform_set_drvdata(dev, ptp_qoriq);
return 0;
no_clock:
@@ -589,7 +594,6 @@ static int ptp_qoriq_probe(struct platform_device *dev)
release_resource(ptp_qoriq->rsrc);
no_resource:
free_irq(ptp_qoriq->irq, ptp_qoriq);
-no_config:
no_node:
kfree(ptp_qoriq);
no_memory:
diff --git a/include/linux/fsl/ptp_qoriq.h b/include/linux/fsl/ptp_qoriq.h
index 75e6f05..d0c1e42 100644
--- a/include/linux/fsl/ptp_qoriq.h
+++ b/include/linux/fsl/ptp_qoriq.h
@@ -173,6 +173,8 @@ static inline void qoriq_write(unsigned __iomem *addr, u32 val)
}
irqreturn_t ptp_qoriq_isr(int irq, void *priv);
+int ptp_qoriq_init(struct ptp_qoriq *ptp_qoriq, void __iomem *base,
+ const struct ptp_clock_info caps);
int ptp_qoriq_adjfine(struct ptp_clock_info *ptp, long scaled_ppm);
int ptp_qoriq_adjtime(struct ptp_clock_info *ptp, s64 delta);
int ptp_qoriq_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts);
--
1.7.1
next prev parent reply other threads:[~2019-02-02 2:57 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-02 2:56 [v2, 0/9] Add ENETC PTP clock driver Yangbo Lu
2019-02-02 2:56 ` [v2, 1/9] ptp_qoriq: make structure/function names more consistent Yangbo Lu
2019-02-02 2:57 ` [v2, 2/9] ptp_qoriq: make ptp operations global Yangbo Lu
2019-02-02 2:57 ` Yangbo Lu [this message]
2019-02-02 2:57 ` [v2, 4/9] ptp_qoriq: add little enadian support Yangbo Lu
2019-02-02 2:57 ` [v2, 5/9] dt-binding: ptp_qoriq: add little-endian support Yangbo Lu
2019-02-02 2:57 ` [v2, 6/9] ptp_qoriq: fix register memory map Yangbo Lu
2019-02-02 2:57 ` [v2, 7/9] ptp: add QorIQ PTP support for ENETC Yangbo Lu
2019-02-02 2:57 ` [v2, 8/9] enetc: add PTP clock driver Yangbo Lu
2019-02-02 2:57 ` [v2, 9/9] MAINTAINERS: add enetc_ptp driver into QorIQ PTP list Yangbo Lu
2019-02-03 19:39 ` [v2, 0/9] Add ENETC PTP clock driver David Miller
2019-02-03 20:11 ` David Miller
2019-02-12 4:02 ` Y.b. Lu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190202025707.10794-4-yangbo.lu@nxp.com \
--to=yangbo.lu@nxp.com \
--cc=claudiu.manoil@nxp.com \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=richardcochran@gmail.com \
--cc=robh+dt@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).