Author: manu
Date: Thu Dec  3 11:15:49 2020
New Revision: 368299
URL: https://svnweb.freebsd.org/changeset/base/368299

Log:
  if_dwc: Honor snps,pbl property
  
  DTS node can have this property which configure the burst length
  for both TX and RX if it's the same.
  This unbreak if_dwc on Allwinner A20 and possibly other boards that
  uses this prop.
  
  Reported by:  qroxana <qrox...@mail.ru>

Modified:
  head/sys/dev/dwc/if_dwc.c
  head/sys/dev/dwc/if_dwc.h

Modified: head/sys/dev/dwc/if_dwc.c
==============================================================================
--- head/sys/dev/dwc/if_dwc.c   Thu Dec  3 10:41:06 2020        (r368298)
+++ head/sys/dev/dwc/if_dwc.c   Thu Dec  3 11:15:49 2020        (r368299)
@@ -1496,7 +1496,7 @@ dwc_attach(device_t dev)
        uint32_t reg;
        char *phy_mode;
        phandle_t node;
-       uint32_t txpbl, rxpbl;
+       uint32_t txpbl, rxpbl, pbl;
        bool nopblx8 = false;
        bool fixed_burst = false;
 
@@ -1516,10 +1516,12 @@ dwc_attach(device_t dev)
                OF_prop_free(phy_mode);
        }
 
+       if (OF_getencprop(node, "snps,pbl", &pbl, sizeof(uint32_t)) <= 0)
+               pbl = BUS_MODE_DEFAULT_PBL;
        if (OF_getencprop(node, "snps,txpbl", &txpbl, sizeof(uint32_t)) <= 0)
-               txpbl = 8;
+               txpbl = pbl;
        if (OF_getencprop(node, "snps,rxpbl", &rxpbl, sizeof(uint32_t)) <= 0)
-               rxpbl = 8;
+               rxpbl = pbl;
        if (OF_hasprop(node, "snps,no-pbl-x8") == 1)
                nopblx8 = true;
        if (OF_hasprop(node, "snps,fixed-burst") == 1)
@@ -1569,6 +1571,7 @@ dwc_attach(device_t dev)
        reg |= (rxpbl << BUS_MODE_RPBL_SHIFT);
        if (fixed_burst)
                reg |= BUS_MODE_FIXEDBURST;
+
        WRITE4(sc, BUS_MODE, reg);
 
        /*

Modified: head/sys/dev/dwc/if_dwc.h
==============================================================================
--- head/sys/dev/dwc/if_dwc.h   Thu Dec  3 10:41:06 2020        (r368298)
+++ head/sys/dev/dwc/if_dwc.h   Thu Dec  3 11:15:49 2020        (r368299)
@@ -229,8 +229,8 @@
 #define         BUS_MODE_PRIORXTX_21   1
 #define         BUS_MODE_PRIORXTX_11   0
 #define         BUS_MODE_PBL_SHIFT     8 /* Single block transfer size */
-#define         BUS_MODE_PBL_BEATS_8   8
 #define         BUS_MODE_SWR           (1 << 0) /* Reset */
+#define         BUS_MODE_DEFAULT_PBL   8
 #define        TRANSMIT_POLL_DEMAND    0x1004
 #define        RECEIVE_POLL_DEMAND     0x1008
 #define        RX_DESCR_LIST_ADDR      0x100C
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to