Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/arm/sociox make comments about descriptor storage d...
details: https://anonhg.NetBSD.org/src/rev/3b48d2a71b1b
branches: trunk
changeset: 1008378:3b48d2a71b1b
user: nisimura <nisimura%NetBSD.org@localhost>
date: Sat Mar 21 07:16:16 2020 +0000
description:
make comments about descriptor storage design detail
diffstat:
sys/arch/arm/sociox/if_ave.c | 59 ++++++++++++++++++++++---------------------
1 files changed, 30 insertions(+), 29 deletions(-)
diffs (150 lines):
diff -r cdf832a1fe8a -r 3b48d2a71b1b sys/arch/arm/sociox/if_ave.c
--- a/sys/arch/arm/sociox/if_ave.c Sat Mar 21 06:55:13 2020 +0000
+++ b/sys/arch/arm/sociox/if_ave.c Sat Mar 21 07:16:16 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: if_ave.c,v 1.5 2020/03/21 04:35:20 nisimura Exp $ */
+/* $NetBSD: if_ave.c,v 1.6 2020/03/21 07:16:16 nisimura Exp $ */
/*-
* Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -30,11 +30,13 @@
*/
/*
- * Socionext Uniphier AVE GbE driver
+ * Socionext UniPhier AVE GbE driver
+ *
+ * There are two groups for 64bit paddr model and 32bit paddr.
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ave.c,v 1.5 2020/03/21 04:35:20 nisimura Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ave.c,v 1.6 2020/03/21 07:16:16 nisimura Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -125,15 +127,13 @@
#define AVEAFRING 0x0f00 /* entry ring number selector */
#define AVEAFEN 0x0ffc /* entry enable bit vector */
-#define AVETDB 0x1000 /* 64bit Tx descriptor storage base */
-#define AVERDB 0x1c00 /* 64bit Rx descriptor storage base */
-#define AVE32TDB 0x1000 /* 32bit Tx descriptor storage base */
-#define AVE32RDB 0x1800 /* 32bit Rx descriptor storage base */
+#define AVETDB 0x1000 /* 64bit Tx descriptor store, upto 256 */
+#define AVERDB 0x1c00 /* 64bit Rx descriptor store, upto 2048 */
+#define AVE32TDB 0x1000 /* 32bit Tx store base, upto 256 */
+#define AVE32RDB 0x1800 /* 32bit Rx store base, upto 2048 */
/*
* descriptor size is 12 bytes when 64bit paddr design, 8 bytes otherwise.
- * 3KB/24KB split or 64bit paddr Tx/Rx descriptor storage.
- * 2KB/16KB split or 32bit paddr Tx/Rx descriptor storage.
*/
struct tdes {
uint32_t t0, t1, t2;
@@ -165,10 +165,10 @@
/* R2 frame address 63:32 */
#define AVE_NTXSEGS 16
-#define AVE_TXQUEUELEN 8
+#define AVE_TXQUEUELEN (AVE_NTXDESC / AVE_NTXSEGS)
#define AVE_TXQUEUELEN_MASK (AVE_TXQUEUELEN - 1)
#define AVE_TXQUEUE_GC (AVE_TXQUEUELEN / 4)
-#define AVE_NTXDESC (AVE_TXQUEUELEN * AVE_NTXSEGS)
+#define AVE_NTXDESC 256 /* HW limit */
#define AVE_NTXDESC_MASK (AVE_NTXDESC - 1)
#define AVE_NEXTTX(x) (((x) + 1) & AVE_NTXDESC_MASK)
#define AVE_NEXTTXS(x) (((x) + 1) & AVE_TXQUEUELEN_MASK)
@@ -232,8 +232,8 @@
bus_dmamap_t sc_cddmamap; /* control data DMA map */
#define sc_cddma sc_cddmamap->dm_segs[0].ds_addr
- struct tdes *sc_txdescs; /* PTR to tdes [NTXDESC] array */
- struct rdes *sc_rxdescs; /* PTR to rdes [NRXDESC] array */
+ struct tdes *sc_txdescs; /* PTR to tdes [NTXDESC] store */
+ struct rdes *sc_rxdescs; /* PTR to rdes [NRXDESC] store */
struct tdes32 *sc_txd32;
struct rdes32 *sc_rxd32;
@@ -344,19 +344,19 @@
hwver = CSR_READ(sc, AVEHWVER);
sc->sc_model = of_search_compatible(phandle, compat_data)->data;
- aprint_naive("\n");
- aprint_normal(": Gigabit Ethernet Controller\n");
- aprint_normal_dev(self, "UniPhier %c%c%c%c AVE %d GbE (%d.%d)\n",
- hwimp >> 24, hwimp >> 16, hwimp >> 8, hwimp,
- sc->sc_model,
- hwver >> 8, hwver & 0xff);
- aprint_normal_dev(self, "interrupt on %s\n", intrstr);
-
phy_mode = fdtbus_get_string(phandle, "phy-mode");
if (phy_mode == NULL) {
aprint_error(": missing 'phy-mode' property\n");
phy_mode = "rgmii";
}
+
+ aprint_naive("\n");
+ aprint_normal(": Gigabit Ethernet Controller\n");
+ aprint_normal_dev(self, "UniPhier %c%c%c%c AVE %d GbE (%d.%d) %s\n",
+ hwimp >> 24, hwimp >> 16, hwimp >> 8, hwimp,
+ sc->sc_model, hwver >> 8, hwver & 0xff, phy_mode);
+ aprint_normal_dev(self, "interrupt on %s\n", intrstr);
+
if (strcmp(phy_mode, "rgmii") == 0)
sc->sc_phymode = 0; /* RGMII */
else
@@ -423,14 +423,15 @@
callout_setfunc(&sc->sc_tick_ch, phy_tick, sc);
/*
- * no need to build Tx/Rx descriptor control_data.
- * go straight to make dmamap to hold Tx segments/Rx frames.
+ * HW has a dedicated store to hold Tx/Rx descriptor arrays.
+ * so no need to build Tx/Rx descriptor control_data.
+ * go straight to make dmamap to hold Tx segments and Rx frames.
*/
for (i = 0; i < AVE_TXQUEUELEN; i++) {
if ((error = bus_dmamap_create(sc->sc_dmat, MCLBYTES,
AVE_NTXSEGS, MCLBYTES, 0, 0,
&sc->sc_txsoft[i].txs_dmamap)) != 0) {
- aprint_error_dev(sc->sc_dev,
+ aprint_error_dev(self,
"unable to create tx DMA map %d, error = %d\n",
i, error);
goto fail_4;
@@ -439,7 +440,7 @@
for (i = 0; i < AVE_NRXDESC; i++) {
if ((error = bus_dmamap_create(sc->sc_dmat, MCLBYTES,
1, MCLBYTES, 0, 0, &sc->sc_rxsoft[i].rxs_dmamap)) != 0) {
- aprint_error_dev(sc->sc_dev,
+ aprint_error_dev(self,
"unable to create rx DMA map %d, error = %d\n",
i, error);
goto fail_5;
@@ -448,12 +449,12 @@
}
if (pmf_device_register(sc->sc_dev, NULL, NULL))
- pmf_class_network_register(sc->sc_dev, ifp);
+ pmf_class_network_register(self, ifp);
else
- aprint_error_dev(sc->sc_dev,
+ aprint_error_dev(self,
"couldn't establish power handler\n");
- rnd_attach_source(&sc->rnd_source, device_xname(sc->sc_dev),
+ rnd_attach_source(&sc->rnd_source, device_xname(self),
RND_TYPE_NET, RND_FLAG_DEFAULT);
return;
@@ -486,7 +487,7 @@
CSR_WRITE(sc, AVEGR, GR_RXRST); /* assert RxFIFO reset operation */
DELAY(50);
CSR_WRITE(sc, AVEGR, 0); /* negate reset */
- CSR_WRITE(sc, AVEGISR, GISR_RXOVF);
+ CSR_WRITE(sc, AVEGISR, GISR_RXOVF); /* clear OVF condition */
}
static int
Home |
Main Index |
Thread Index |
Old Index