ravb: Initialize GbEthernet DMAC
authorBiju Das <biju.das.jz@bp.renesas.com>
Fri, 1 Oct 2021 15:06:31 +0000 (16:06 +0100)
committerDavid S. Miller <davem@davemloft.net>
Sat, 2 Oct 2021 12:52:45 +0000 (13:52 +0100)
Initialize GbEthernet DMAC found on RZ/G2L SoC.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/renesas/ravb.h
drivers/net/ethernet/renesas/ravb_main.c

index f6398fdcead231ef9d1614658ed042ec287b6cf8..9cd3a15743b4288a738aa9543916f891d314f3e6 100644 (file)
@@ -81,6 +81,7 @@ enum ravb_reg {
        RQC3    = 0x00A0,
        RQC4    = 0x00A4,
        RPC     = 0x00B0,
+       RTC     = 0x00B4,       /* R-Car Gen3 and RZ/G2L only */
        UFCW    = 0x00BC,
        UFCS    = 0x00C0,
        UFCV0   = 0x00C4,
@@ -193,7 +194,7 @@ enum ravb_reg {
        GECMR   = 0x05b0,
        MAHR    = 0x05c0,
        MALR    = 0x05c8,
-       TROCR   = 0x0700,       /* R-Car Gen3 only */
+       TROCR   = 0x0700,       /* R-Car Gen3 and RZ/G2L only */
        CEFCR   = 0x0740,
        FRECR   = 0x0748,
        TSFRCR  = 0x0750,
index dc817b4d95a19fe53e504a0133839a12b1a20fbf..5790a9332e7b7e1ebd98ed753810ac6d87de0e78 100644 (file)
@@ -489,7 +489,35 @@ static void ravb_emac_init(struct net_device *ndev)
 
 static int ravb_dmac_init_gbeth(struct net_device *ndev)
 {
-       /* Place holder */
+       int error;
+
+       error = ravb_ring_init(ndev, RAVB_BE);
+       if (error)
+               return error;
+
+       /* Descriptor format */
+       ravb_ring_format(ndev, RAVB_BE);
+
+       /* Set AVB RX */
+       ravb_write(ndev, 0x60000000, RCR);
+
+       /* Set Max Frame Length (RTC) */
+       ravb_write(ndev, 0x7ffc0000 | GBETH_RX_BUFF_MAX, RTC);
+
+       /* Set FIFO size */
+       ravb_write(ndev, 0x00222200, TGC);
+
+       ravb_write(ndev, 0, TCCR);
+
+       /* Frame receive */
+       ravb_write(ndev, RIC0_FRE0, RIC0);
+       /* Disable FIFO full warning */
+       ravb_write(ndev, 0x0, RIC1);
+       /* Receive FIFO full error, descriptor empty */
+       ravb_write(ndev, RIC2_QFE0 | RIC2_RFFE, RIC2);
+
+       ravb_write(ndev, TIC_FTE0, TIC);
+
        return 0;
 }