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_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,5 @@ +# $FreeBSD$ + +arm/allwinner/a31/a31_clk.c standard +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 @@ -15,8 +15,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/if_gmac.c =================================================================== --- sys/arm/allwinner/if_gmac.c +++ sys/arm/allwinner/if_gmac.c @@ -66,9 +66,7 @@ /* Activate GMAC clock and set the pin mux to rgmii. */ switch (allwinner_soc_type()) { -#if defined(SOC_ALLWINNER_A10) || defined(SOC_ALLWINNER_A20) - case ALLWINNERSOC_A10: - case ALLWINNERSOC_A10S: +#ifdef SOC_ALLWINNER_A20 case ALLWINNERSOC_A20: clk = a10_clk_gmac_activate(ofw_bus_get_node(dev)); break; 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 @@ -118,9 +119,6 @@ # Sound support device sound -# Pinmux -device fdt_pinctrl - # Framebuffer support device vt device kbdmux @@ -129,6 +127,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,44 @@ +/*- + * 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" + +/ { + soc@01c00000 { + ccm@01c20000 { + compatible = "allwinner,sun6i-a31-ccm"; + #address-cells = <1>; + #size-cells = <1>; + reg = < 0x01c20000 0x400 >; + }; + }; +}; + +&mmc2 { + status = "disabled"; +};