Index: release/arm/BANANAPI.conf =================================================================== --- release/arm/BANANAPI.conf +++ release/arm/BANANAPI.conf @@ -7,7 +7,7 @@ EMBEDDED_TARGET="arm" EMBEDDED_TARGET_ARCH="armv6" EMBEDDEDPORTS="sysutils/u-boot-bananapi" -KERNEL="A20" +KERNEL="ALLWINNER" WORLD_FLAGS="${WORLD_FLAGS} UBLDR_LOADADDR=0x42000000" IMAGE_SIZE="1G" PART_SCHEME="MBR" Index: release/arm/CUBIEBOARD2.conf =================================================================== --- release/arm/CUBIEBOARD2.conf +++ release/arm/CUBIEBOARD2.conf @@ -7,7 +7,7 @@ EMBEDDED_TARGET="arm" EMBEDDED_TARGET_ARCH="armv6" EMBEDDEDPORTS="sysutils/u-boot-cubieboard2" -KERNEL="A20" +KERNEL="ALLWINNER" WORLD_FLAGS="${WORLD_FLAGS} UBLDR_LOADADDR=0x42000000" IMAGE_SIZE="1G" PART_SCHEME="MBR" Index: sys/arm/allwinner/a10_padconf.c =================================================================== --- sys/arm/allwinner/a10_padconf.c +++ sys/arm/allwinner/a10_padconf.c @@ -35,6 +35,8 @@ #include +#ifdef SOC_ALLWINNER_A10 + const static struct allwinner_pins a10_pins[] = { {"PA0", 0, 0, {"gpio_in", "gpio_out", "emac", "spi1", "uart2", NULL, NULL, NULL}}, {"PA1", 0, 1, {"gpio_in", "gpio_out", "emac", "spi1", "uart2", NULL, NULL, NULL}}, @@ -225,3 +227,5 @@ .npins = sizeof(a10_pins) / sizeof(struct allwinner_pins), .pins = a10_pins, }; + +#endif /* SOC_ALLWINNER_A10 */ Index: sys/arm/allwinner/a20/a20_if_dwc.c =================================================================== --- /dev/null +++ sys/arm/allwinner/a20/a20_if_dwc.c @@ -1,145 +0,0 @@ -/*- - * Copyright (c) 2015 Luiz Otavio O Souza - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -__FBSDID("$FreeBSD$"); - -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include - -#include -#include -#include - -#include "if_dwc_if.h" - -static int -a20_if_dwc_probe(device_t dev) -{ - - if (!ofw_bus_status_okay(dev)) - return (ENXIO); - if (!ofw_bus_is_compatible(dev, "allwinner,sun7i-a20-gmac")) - return (ENXIO); - device_set_desc(dev, "A20 Gigabit Ethernet Controller"); - - return (BUS_PROBE_DEFAULT); -} - -static int -a20_if_dwc_init(device_t dev) -{ - const char *tx_parent_name; - char *phy_type; - clk_t clk_tx, clk_tx_parent; - regulator_t reg; - phandle_t node; - int error; - - node = ofw_bus_get_node(dev); - - /* Configure PHY for MII or RGMII mode */ - if (OF_getprop_alloc(node, "phy-mode", 1, (void **)&phy_type)) { - error = clk_get_by_ofw_name(dev, "allwinner_gmac_tx", &clk_tx); - if (error != 0) { - device_printf(dev, "could not get tx clk\n"); - return (error); - } - - if (strcmp(phy_type, "rgmii") == 0) - tx_parent_name = "gmac_int_tx"; - else - tx_parent_name = "mii_phy_tx"; - - error = clk_get_by_name(dev, tx_parent_name, &clk_tx_parent); - if (error != 0) { - device_printf(dev, "could not get clock '%s'\n", - tx_parent_name); - return (error); - } - - error = clk_set_parent_by_clk(clk_tx, clk_tx_parent); - if (error != 0) { - device_printf(dev, "could not set tx clk parent\n"); - return (error); - } - } - - /* Enable PHY regulator if applicable */ - if (regulator_get_by_ofw_property(dev, "phy-supply", ®) == 0) { - error = regulator_enable(reg); - if (error != 0) { - device_printf(dev, "could not enable PHY regulator\n"); - return (error); - } - } - - return (0); -} - -static int -a20_if_dwc_mac_type(device_t dev) -{ - - return (DWC_GMAC_ALT_DESC); -} - -static int -a20_if_dwc_mii_clk(device_t dev) -{ - - return (GMAC_MII_CLK_150_250M_DIV102); -} - -static device_method_t a20_dwc_methods[] = { - DEVMETHOD(device_probe, a20_if_dwc_probe), - - DEVMETHOD(if_dwc_init, a20_if_dwc_init), - DEVMETHOD(if_dwc_mac_type, a20_if_dwc_mac_type), - DEVMETHOD(if_dwc_mii_clk, a20_if_dwc_mii_clk), - - DEVMETHOD_END -}; - -static devclass_t a20_dwc_devclass; - -extern driver_t dwc_driver; - -DEFINE_CLASS_1(dwc, a20_dwc_driver, a20_dwc_methods, sizeof(struct dwc_softc), - dwc_driver); -DRIVER_MODULE(a20_dwc, simplebus, a20_dwc_driver, a20_dwc_devclass, 0, 0); - -MODULE_DEPEND(a20_dwc, dwc, 1, 1, 1); Index: sys/arm/allwinner/a20/a20_padconf.c =================================================================== --- sys/arm/allwinner/a20/a20_padconf.c +++ sys/arm/allwinner/a20/a20_padconf.c @@ -35,6 +35,8 @@ #include +#ifdef SOC_ALLWINNER_A20 + const static struct allwinner_pins a20_pins[] = { {"PA0", 0, 0, {"gpio_in", "gpio_out", "emac", "spi1", "uart2", "gmac", NULL, NULL}}, {"PA1", 0, 1, {"gpio_in", "gpio_out", "emac", "spi1", "uart2", "gmac", NULL, NULL}}, @@ -225,3 +227,5 @@ .npins = sizeof(a20_pins) / sizeof(struct allwinner_pins), .pins = a20_pins, }; + +#endif /* SOC_ALLWINNER_A20 */ Index: sys/arm/allwinner/a20/files.a20 =================================================================== --- sys/arm/allwinner/a20/files.a20 +++ sys/arm/allwinner/a20/files.a20 @@ -1,5 +1,3 @@ # $FreeBSD$ arm/allwinner/a20/a20_padconf.c standard -arm/allwinner/aw_mp.c optional smp -arm/allwinner/a20/a20_if_dwc.c optional dwc Index: sys/arm/allwinner/a31/a31_padconf.c =================================================================== --- sys/arm/allwinner/a31/a31_padconf.c +++ sys/arm/allwinner/a31/a31_padconf.c @@ -35,6 +35,8 @@ #include +#ifdef SOC_ALLWINNER_A31 + const static struct allwinner_pins a31_pins[] = { {"PA0", 0, 0, {"gpio_in", "gpio_out", "gmac", "lcd1", "uart1", NULL, NULL, NULL}}, {"PA1", 0, 1, {"gpio_in", "gpio_out", "gmac", "lcd1", "uart1", NULL, NULL, NULL}}, @@ -214,3 +216,5 @@ .npins = nitems(a31_pins), .pins = a31_pins, }; + +#endif /* SOC_ALLWINNER_A31 */ Index: sys/arm/allwinner/a31/a31s_padconf.c =================================================================== --- sys/arm/allwinner/a31/a31s_padconf.c +++ sys/arm/allwinner/a31/a31s_padconf.c @@ -35,6 +35,8 @@ #include +#ifdef SOC_ALLWINNER_A31S + const static struct allwinner_pins a31s_pins[] = { {"PA0", 0, 0, {"gpio_in", "gpio_out", "gmac", NULL, "uart1", NULL, NULL, NULL}}, {"PA1", 0, 1, {"gpio_in", "gpio_out", "gmac", NULL, "uart1", NULL, NULL, NULL}}, @@ -194,3 +196,5 @@ .npins = nitems(a31s_pins), .pins = a31s_pins, }; + +#endif /* SOC_ALLWINNER_A31S */ Index: sys/arm/allwinner/a31/files.a31 =================================================================== --- /dev/null +++ sys/arm/allwinner/a31/files.a31 @@ -0,0 +1,4 @@ +# $FreeBSD$ + +arm/allwinner/a31/a31_padconf.c standard +arm/allwinner/a31/a31s_padconf.c standard Index: sys/arm/allwinner/a31/std.a31 =================================================================== --- /dev/null +++ sys/arm/allwinner/a31/std.a31 @@ -0,0 +1,15 @@ +# Allwinner A31 common options +#$FreeBSD$ + +cpu CPU_CORTEXA +machine arm armv6 +makeoptions CONF_CFLAGS="-march=armv7a" + +makeoptions KERNVIRTADDR=0xc0200000 +options KERNVIRTADDR=0xc0200000 + +options IPI_IRQ_START=0 +options IPI_IRQ_END=15 + +files "../allwinner/files.allwinner" +files "../allwinner/a31/files.a31" Index: sys/arm/allwinner/files.allwinner =================================================================== --- sys/arm/allwinner/files.allwinner +++ sys/arm/allwinner/files.allwinner @@ -14,8 +14,10 @@ arm/allwinner/aw_wdog.c standard arm/allwinner/a20/a20_cpu_cfg.c standard arm/allwinner/allwinner_machdep.c standard +arm/allwinner/aw_mp.c optional smp arm/allwinner/axp209.c optional axp209 arm/allwinner/if_emac.c optional emac +arm/allwinner/if_gmac.c optional dwc arm/allwinner/sunxi_dma_if.m standard dev/iicbus/twsi/a10_twsi.c optional twsi #arm/allwinner/console.c standard Index: sys/arm/allwinner/std.allwinner =================================================================== --- /dev/null +++ sys/arm/allwinner/std.allwinner @@ -0,0 +1,16 @@ +# Allwinner common options +#$FreeBSD$ + +cpu CPU_CORTEXA +machine arm armv6 +makeoptions CONF_CFLAGS="-march=armv7a" + +makeoptions KERNVIRTADDR=0xc0200000 +options KERNVIRTADDR=0xc0200000 + +options IPI_IRQ_START=0 +options IPI_IRQ_END=15 + +files "../allwinner/files.allwinner" +files "../allwinner/a20/files.a20" +files "../allwinner/a31/files.a31" Index: sys/arm/conf/ALLWINNER =================================================================== --- sys/arm/conf/ALLWINNER +++ sys/arm/conf/ALLWINNER @@ -1,5 +1,5 @@ # -# A20 -- Custom configuration for the Allwinner A20 ARM SoC +# ALLWINNER -- Custom configuration for the Allwinner A20 and A31 ARM SoC # # For more information on this file, please read the config(5) manual page, # and/or the handbook section on Kernel Configuration Files: @@ -18,14 +18,15 @@ # # $FreeBSD$ -ident A20 +ident ALLWINNER include "std.armv6" -include "../allwinner/a20/std.a20" +include "../allwinner/std.allwinner" options ARM_INTRNG options SOC_ALLWINNER_A20 +options SOC_ALLWINNER_A31 options HZ=100 options SCHED_ULE # ULE scheduler @@ -56,7 +57,7 @@ #options BOOTP_WIRED_TO=dwc0 # EXT_RESOURCES pseudo devices -options EXT_RESOURCES +options EXT_RESOURCES device clk device phy device hwreset @@ -125,9 +126,6 @@ # Sound support device sound -# Pinmux -device fdt_pinctrl - # Framebuffer support device vt device kbdmux @@ -136,6 +134,9 @@ device videomode device hdmi +# Pinmux +device fdt_pinctrl + # Flattened Device Tree options FDT # Configure using FDT/DTB data makeoptions MODULES_EXTRA=dtb/allwinner Index: sys/boot/fdt/dts/arm/bananapim2.dts =================================================================== --- /dev/null +++ sys/boot/fdt/dts/arm/bananapim2.dts @@ -0,0 +1,33 @@ +/*- + * Copyright (c) 2016 Emmanuel Vadot + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include "sun6i-a31s-sinovoip-bpi-m2.dts" + +&mmc2 { + status = "disabled"; +}; Index: sys/modules/dtb/allwinner/Makefile =================================================================== --- sys/modules/dtb/allwinner/Makefile +++ sys/modules/dtb/allwinner/Makefile @@ -2,6 +2,7 @@ # All the dts files for allwinner systems we support. DTS= \ bananapi.dts \ + bananapim2.dts \ cubieboard.dts \ cubieboard2.dts \ olimex-a20-som-evb.dts \