aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcin Wojtas <mw@FreeBSD.org>2017-09-09 11:54:04 +0000
committerMarcin Wojtas <mw@FreeBSD.org>2017-09-09 11:54:04 +0000
commite314ac07f40470fcc0c7137e8f2f6ce20907b774 (patch)
treeecadadd455cf3dff8112bacf8d46307f17e86276
parente7843f1dd6649eecf1689b28a048985cf8b7b11c (diff)
Notes
-rw-r--r--sys/conf/files.arm642
-rw-r--r--sys/dev/neta/if_mvneta.c31
-rw-r--r--sys/dev/neta/if_mvneta_fdt.c8
3 files changed, 34 insertions, 7 deletions
diff --git a/sys/conf/files.arm64 b/sys/conf/files.arm64
index f9dbbbacb5ac..eade07f5ffff 100644
--- a/sys/conf/files.arm64
+++ b/sys/conf/files.arm64
@@ -167,6 +167,8 @@ dev/hwpmc/hwpmc_arm64_md.c optional hwpmc
dev/mbox/mbox_if.m optional soc_brcm_bcm2837
dev/mmc/host/dwmmc.c optional dwmmc fdt
dev/mmc/host/dwmmc_hisi.c optional dwmmc fdt soc_hisi_hi6220
+dev/neta/if_mvneta_fdt.c optional neta fdt
+dev/neta/if_mvneta.c optional neta mdio mii
dev/ofw/ofw_cpu.c optional fdt
dev/ofw/ofwpci.c optional fdt pci
dev/pci/pci_host_generic.c optional pci
diff --git a/sys/dev/neta/if_mvneta.c b/sys/dev/neta/if_mvneta.c
index ed847c4045a4..010cdd5bce7e 100644
--- a/sys/dev/neta/if_mvneta.c
+++ b/sys/dev/neta/if_mvneta.c
@@ -74,9 +74,12 @@ __FBSDID("$FreeBSD$");
#include <dev/mdio/mdio.h>
-#include <arm/mv/mvreg.h>
#include <arm/mv/mvvar.h>
+
+#if !defined(__aarch64__)
+#include <arm/mv/mvreg.h>
#include <arm/mv/mvwin.h>
+#endif
#include "if_mvnetareg.h"
#include "if_mvnetavar.h"
@@ -92,6 +95,18 @@ __FBSDID("$FreeBSD$");
#define DASSERT(x) KASSERT((x), (#x))
+#define A3700_TCLK_250MHZ 250000000
+
+STATIC uint32_t
+mvneta_get_clk()
+{
+#if defined(__aarch64__)
+ return (A3700_TCLK_250MHZ);
+#else
+ return (get_tclk());
+#endif
+}
+
/* Device Register Initialization */
STATIC int mvneta_initreg(struct ifnet *);
@@ -464,7 +479,7 @@ mvneta_dma_create(struct mvneta_softc *sc)
error = mvneta_ring_alloc_tx_queue(sc, q);
if (error != 0) {
device_printf(sc->dev,
- "Failed to allocate DMA safe memory for TxQ: %d\n", q);
+ "Failed to allocate DMA safe memory for TxQ: %zu\n", q);
goto fail;
}
}
@@ -512,7 +527,7 @@ mvneta_dma_create(struct mvneta_softc *sc)
for (q = 0; q < MVNETA_RX_QNUM_MAX; q++) {
if (mvneta_ring_alloc_rx_queue(sc, q) != 0) {
device_printf(sc->dev,
- "Failed to allocate DMA safe memory for RxQ: %d\n", q);
+ "Failed to allocate DMA safe memory for RxQ: %zu\n", q);
goto fail;
}
}
@@ -533,7 +548,9 @@ mvneta_attach(device_t self)
device_t child;
int ifm_target;
int q, error;
+#if !defined(__aarch64__)
uint32_t reg;
+#endif
sc = device_get_softc(self);
sc->dev = self;
@@ -556,6 +573,7 @@ mvneta_attach(device_t self)
MVNETA_WRITE(sc, MVNETA_PRXINIT, 0x00000001);
MVNETA_WRITE(sc, MVNETA_PTXINIT, 0x00000001);
+#if !defined(__aarch64__)
/*
* Disable port snoop for buffers and descriptors
* to avoid L2 caching of both without DRAM copy.
@@ -568,6 +586,7 @@ mvneta_attach(device_t self)
reg &= ~MVNETA_PSNPCFG_BUFSNP_MASK;
MVNETA_WRITE(sc, MVNETA_PSNPCFG, reg);
}
+#endif
/*
* MAC address
@@ -1363,7 +1382,7 @@ mvneta_ring_init_rx_queue(struct mvneta_softc *sc, int q)
rx = MVNETA_RX_RING(sc, q);
rx->dma = rx->cpu = 0;
rx->queue_th_received = MVNETA_RXTH_COUNT;
- rx->queue_th_time = (get_tclk() / 1000) / 10; /* 0.1 [ms] */
+ rx->queue_th_time = (mvneta_get_clk() / 1000) / 10; /* 0.1 [ms] */
/* Initialize LRO */
rx->lro_enabled = FALSE;
@@ -3344,7 +3363,7 @@ sysctl_set_queue_rxthtime(SYSCTL_HANDLER_ARGS)
mvneta_rx_lockq(sc, arg->queue);
rx = MVNETA_RX_RING(sc, arg->queue);
time_mvtclk = rx->queue_th_time;
- time_us = ((uint64_t)time_mvtclk * 1000ULL * 1000ULL) / get_tclk();
+ time_us = ((uint64_t)time_mvtclk * 1000ULL * 1000ULL) / mvneta_get_clk();
mvneta_rx_unlockq(sc, arg->queue);
mvneta_sc_unlock(sc);
@@ -3362,7 +3381,7 @@ sysctl_set_queue_rxthtime(SYSCTL_HANDLER_ARGS)
return (EINVAL);
}
time_mvtclk =
- (uint64_t)get_tclk() * (uint64_t)time_us / (1000ULL * 1000ULL);
+ (uint64_t)mvneta_get_clk() * (uint64_t)time_us / (1000ULL * 1000ULL);
rx->queue_th_time = time_mvtclk;
reg = MVNETA_PRXITTH_RITT(rx->queue_th_time);
MVNETA_WRITE(sc, MVNETA_PRXITTH(arg->queue), reg);
diff --git a/sys/dev/neta/if_mvneta_fdt.c b/sys/dev/neta/if_mvneta_fdt.c
index 67b31bddbdf1..a858babf06ec 100644
--- a/sys/dev/neta/if_mvneta_fdt.c
+++ b/sys/dev/neta/if_mvneta_fdt.c
@@ -83,6 +83,12 @@ DRIVER_MODULE(mvneta, simplebus, mvneta_fdt_driver, mvneta_fdt_devclass, 0, 0);
static int mvneta_fdt_phy_acquire(device_t);
+static struct ofw_compat_data compat_data[] = {
+ {"marvell,armada-370-neta", true},
+ {"marvell,armada-3700-neta", true},
+ {NULL, false}
+};
+
static int
mvneta_fdt_probe(device_t dev)
{
@@ -90,7 +96,7 @@ mvneta_fdt_probe(device_t dev)
if (!ofw_bus_status_okay(dev))
return (ENXIO);
- if (!ofw_bus_is_compatible(dev, "marvell,armada-370-neta"))
+ if (!ofw_bus_search_compatible(dev, compat_data)->ocd_data)
return (ENXIO);
device_set_desc(dev, "NETA controller");