]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/net/ethernet/renesas/ravb_ptp.c
Merge remote-tracking branch 'net-next/master'
[karo-tx-linux.git] / drivers / net / ethernet / renesas / ravb_ptp.c
index 7a8ce920c49e709b067321ae91306153f4f24390..57992ccc46575dc6ba21bc4d7ce86e73576e46b9 100644 (file)
@@ -2,7 +2,7 @@
  *
  * Copyright (C) 2013-2015 Renesas Electronics Corporation
  * Copyright (C) 2015 Renesas Solutions Corp.
- * Copyright (C) 2015 Cogent Embedded, Inc. <source@cogentembedded.com>
+ * Copyright (C) 2015-2016 Cogent Embedded, Inc. <source@cogentembedded.com>
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -21,7 +21,7 @@ static int ravb_ptp_tcr_request(struct ravb_private *priv, u32 request)
        if (error)
                return error;
 
-       ravb_write(ndev, ravb_read(ndev, GCCR) | request, GCCR);
+       ravb_modify(ndev, GCCR, request, request);
        return ravb_wait(ndev, GCCR, GCCR_TCR, GCCR_TCR_NOREQ);
 }
 
@@ -185,7 +185,6 @@ static int ravb_ptp_extts(struct ptp_clock_info *ptp,
                                                 ptp.info);
        struct net_device *ndev = priv->ndev;
        unsigned long flags;
-       u32 gic;
 
        if (req->index)
                return -EINVAL;
@@ -195,12 +194,7 @@ static int ravb_ptp_extts(struct ptp_clock_info *ptp,
        priv->ptp.extts[req->index] = on;
 
        spin_lock_irqsave(&priv->lock, flags);
-       gic = ravb_read(ndev, GIC);
-       if (on)
-               gic |= GIC_PTCE;
-       else
-               gic &= ~GIC_PTCE;
-       ravb_write(ndev, gic, GIC);
+       ravb_modify(ndev, GIC, GIC_PTCE, on ? GIC_PTCE : 0);
        mmiowb();
        spin_unlock_irqrestore(&priv->lock, flags);
 
@@ -216,7 +210,6 @@ static int ravb_ptp_perout(struct ptp_clock_info *ptp,
        struct ravb_ptp_perout *perout;
        unsigned long flags;
        int error = 0;
-       u32 gic;
 
        if (req->index)
                return -EINVAL;
@@ -248,9 +241,7 @@ static int ravb_ptp_perout(struct ptp_clock_info *ptp,
                error = ravb_ptp_update_compare(priv, (u32)start_ns);
                if (!error) {
                        /* Unmask interrupt */
-                       gic = ravb_read(ndev, GIC);
-                       gic |= GIC_PTME;
-                       ravb_write(ndev, gic, GIC);
+                       ravb_modify(ndev, GIC, GIC_PTME, GIC_PTME);
                }
        } else  {
                spin_lock_irqsave(&priv->lock, flags);
@@ -259,9 +250,7 @@ static int ravb_ptp_perout(struct ptp_clock_info *ptp,
                perout->period = 0;
 
                /* Mask interrupt */
-               gic = ravb_read(ndev, GIC);
-               gic &= ~GIC_PTME;
-               ravb_write(ndev, gic, GIC);
+               ravb_modify(ndev, GIC, GIC_PTME, 0);
        }
        mmiowb();
        spin_unlock_irqrestore(&priv->lock, flags);
@@ -331,7 +320,6 @@ void ravb_ptp_init(struct net_device *ndev, struct platform_device *pdev)
 {
        struct ravb_private *priv = netdev_priv(ndev);
        unsigned long flags;
-       u32 gccr;
 
        priv->ptp.info = ravb_ptp_info;
 
@@ -340,8 +328,7 @@ void ravb_ptp_init(struct net_device *ndev, struct platform_device *pdev)
 
        spin_lock_irqsave(&priv->lock, flags);
        ravb_wait(ndev, GCCR, GCCR_TCR, GCCR_TCR_NOREQ);
-       gccr = ravb_read(ndev, GCCR) & ~GCCR_TCSS;
-       ravb_write(ndev, gccr | GCCR_TCSS_ADJGPTP, GCCR);
+       ravb_modify(ndev, GCCR, GCCR_TCSS, GCCR_TCSS_ADJGPTP);
        mmiowb();
        spin_unlock_irqrestore(&priv->lock, flags);