ravb: TROCR register is only present on R-Car Gen3
authorSimon Horman <horms+renesas@verge.net.au>
Thu, 5 Sep 2019 15:10:59 +0000 (17:10 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 6 Sep 2019 14:46:10 +0000 (16:46 +0200)
Only use the TROCR register on R-Car Gen3 as it is not present on other
SoCs.

Offsets used for the undocumented registers are considered reserved and
should not be written to. After some internal investigation with Renesas it
remains unclear why this driver accesses these fields on R-Car Gen2 but
regardless of what the historical reasons are the current code is
considered incorrect.

Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Acked-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/renesas/ravb.h
drivers/net/ethernet/renesas/ravb_main.c

index bdb051f04b0c99b0254a96980794f163d4264498..a9c89d5d88986dd59e443fc5e01247e684154575 100644 (file)
@@ -193,7 +193,7 @@ enum ravb_reg {
        GECMR   = 0x05b0,
        MAHR    = 0x05c0,
        MALR    = 0x05c8,
-       TROCR   = 0x0700,       /* Undocumented? */
+       TROCR   = 0x0700,       /* R-Car Gen3 only */
        CEFCR   = 0x0740,
        FRECR   = 0x0748,
        TSFRCR  = 0x0750,
index b538cc6fdbb70466b2bb7bc35e740d2af4fc6265..de9aa8c47f1c1508eb1bcc9376e30d804c31bf47 100644 (file)
@@ -1621,8 +1621,10 @@ static struct net_device_stats *ravb_get_stats(struct net_device *ndev)
        stats0 = &priv->stats[RAVB_BE];
        stats1 = &priv->stats[RAVB_NC];
 
-       nstats->tx_dropped += ravb_read(ndev, TROCR);
-       ravb_write(ndev, 0, TROCR);     /* (write clear) */
+       if (priv->chip_id == RCAR_GEN3) {
+               nstats->tx_dropped += ravb_read(ndev, TROCR);
+               ravb_write(ndev, 0, TROCR);     /* (write clear) */
+       }
 
        nstats->rx_packets = stats0->rx_packets + stats1->rx_packets;
        nstats->tx_packets = stats0->tx_packets + stats1->tx_packets;