Index: sys/conf/files.arm64 =================================================================== --- sys/conf/files.arm64 +++ sys/conf/files.arm64 @@ -167,6 +167,8 @@ 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 Index: sys/dev/neta/if_mvneta.c =================================================================== --- sys/dev/neta/if_mvneta.c +++ sys/dev/neta/if_mvneta.c @@ -74,9 +74,12 @@ #include -#include #include + +#if !defined(__aarch64__) +#include #include +#endif #include "if_mvnetareg.h" #include "if_mvnetavar.h" @@ -92,6 +95,18 @@ #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 @@ 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 @@ 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 @@ 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_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 @@ reg &= ~MVNETA_PSNPCFG_BUFSNP_MASK; MVNETA_WRITE(sc, MVNETA_PSNPCFG, reg); } +#endif /* * MAC address @@ -1363,7 +1382,7 @@ 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 @@ 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 @@ 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); Index: sys/dev/neta/if_mvneta_fdt.c =================================================================== --- sys/dev/neta/if_mvneta_fdt.c +++ sys/dev/neta/if_mvneta_fdt.c @@ -83,6 +83,12 @@ 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 @@ 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");