summaryrefslogtreecommitdiff
path: root/sys/dev/dwc
diff options
context:
space:
mode:
authorEmmanuel Vadot <manu@FreeBSD.org>2020-11-22 20:16:46 +0000
committerEmmanuel Vadot <manu@FreeBSD.org>2020-11-22 20:16:46 +0000
commit5e38d9e4832620a5b78ad5b5604311de0bed4316 (patch)
treeb6d1a7c4a505886659603b906fcf8e35edc1f0e4 /sys/dev/dwc
parent5321a88409c771b0d0207b196270bcdff6e715b4 (diff)
Notes
Diffstat (limited to 'sys/dev/dwc')
-rw-r--r--sys/dev/dwc/if_dwc.c25
-rw-r--r--sys/dev/dwc/if_dwc.h2
2 files changed, 21 insertions, 6 deletions
diff --git a/sys/dev/dwc/if_dwc.c b/sys/dev/dwc/if_dwc.c
index cd0e48b3f689..7bbfac512996 100644
--- a/sys/dev/dwc/if_dwc.c
+++ b/sys/dev/dwc/if_dwc.c
@@ -1496,6 +1496,9 @@ dwc_attach(device_t dev)
uint32_t reg;
char *phy_mode;
phandle_t node;
+ uint32_t txpbl, rxpbl;
+ bool nopblx8 = false;
+ bool fixed_burst = false;
sc = device_get_softc(dev);
sc->dev = dev;
@@ -1513,6 +1516,15 @@ dwc_attach(device_t dev)
OF_prop_free(phy_mode);
}
+ if (OF_getencprop(node, "snps,txpbl", &txpbl, sizeof(uint32_t)) <= 0)
+ txpbl = 8;
+ if (OF_getencprop(node, "snps,rxpbl", &rxpbl, sizeof(uint32_t)) <= 0)
+ rxpbl = 8;
+ if (OF_hasprop(node, "snps,no-pbl-x8") == 1)
+ nopblx8 = true;
+ if (OF_hasprop(node, "snps,fixed-burst") == 1)
+ fixed_burst = true;
+
if (IF_DWC_INIT(dev) != 0)
return (ENXIO);
@@ -1550,12 +1562,13 @@ dwc_attach(device_t dev)
return (ENXIO);
}
- if (sc->mactype != DWC_GMAC_EXT_DESC) {
- reg = BUS_MODE_FIXEDBURST;
- reg |= (BUS_MODE_PRIORXTX_41 << BUS_MODE_PRIORXTX_SHIFT);
- } else
- reg = (BUS_MODE_EIGHTXPBL);
- reg |= (BUS_MODE_PBL_BEATS_8 << BUS_MODE_PBL_SHIFT);
+ reg = BUS_MODE_USP;
+ if (!nopblx8)
+ reg |= BUS_MODE_EIGHTXPBL;
+ reg |= (txpbl << BUS_MODE_PBL_SHIFT);
+ reg |= (rxpbl << BUS_MODE_RPBL_SHIFT);
+ if (fixed_burst)
+ reg |= BUS_MODE_FIXEDBURST;
WRITE4(sc, BUS_MODE, reg);
/*
diff --git a/sys/dev/dwc/if_dwc.h b/sys/dev/dwc/if_dwc.h
index 28290d139b55..d0ba813af8c0 100644
--- a/sys/dev/dwc/if_dwc.h
+++ b/sys/dev/dwc/if_dwc.h
@@ -220,6 +220,8 @@
/* DMA */
#define BUS_MODE 0x1000
#define BUS_MODE_EIGHTXPBL (1 << 24) /* Multiplies PBL by 8 */
+#define BUS_MODE_USP (1 << 23)
+#define BUS_MODE_RPBL_SHIFT 17 /* Single block transfer size */
#define BUS_MODE_FIXEDBURST (1 << 16)
#define BUS_MODE_PRIORXTX_SHIFT 14
#define BUS_MODE_PRIORXTX_41 3