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/A20 =================================================================== --- sys/arm/conf/A20 +++ sys/arm/conf/A20 @@ -18,117 +18,7 @@ # # $FreeBSD$ +include "ALLWINNER" ident A20 -include "std.armv6" -include "../allwinner/a20/std.a20" - -options ARM_INTRNG - -options SOC_ALLWINNER_A20 - -options HZ=100 -options SCHED_ULE # ULE scheduler -options SMP # Enable multiple cores -options PLATFORM -options PLATFORM_SMP - -# Debugging for use in -current -makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols -options ALT_BREAK_TO_DEBUGGER -#options VERBOSE_SYSINIT # Enable verbose sysinit messages -options KDB # Enable kernel debugger support -# For minimum debugger support (stable branch) use: -#options KDB_TRACE # Print a stack trace for a panic -# For full debugger support use this instead: -options DDB # Enable the kernel debugger -options INVARIANTS # Enable calls of extra sanity checking -options INVARIANT_SUPPORT # Extra sanity checks of internal structures, required by INVARIANTS -options WITNESS # Enable checks to detect deadlocks and cycles -options WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed -#options DIAGNOSTIC - -# NFS root from boopt/dhcp -#options BOOTP -#options BOOTP_NFSROOT -#options BOOTP_COMPAT -#options BOOTP_NFSV3 -#options BOOTP_WIRED_TO=dwc0 - -# Interrupt controller -device gic - -# ARM Generic Timer -device generic_timer - -# MMC/SD/SDIO Card slot support -device mmc # mmc/sd bus -device mmcsd # mmc/sd flash cards - -# ATA controllers -device ahci # AHCI-compatible SATA controllers -#device ata # Legacy ATA/SATA controllers - -# Console and misc -device uart -device uart_ns8250 -device pty -device snp -device md -device random # Entropy device - -# I2C support -device iicbus -device iic -device twsi -device axp209 # AXP209 Power Management Unit - -# GPIO -device gpio -device gpioled - -device scbus # SCSI bus (required for ATA/SCSI) -device da # Direct Access (disks) -device pass # Passthrough device (direct ATA/SCSI access) - -# USB support -options USB_HOST_ALIGN=64 # Align usb buffers to cache line size. -device usb -options USB_DEBUG -#options USB_REQ_DEBUG -#options USB_VERBOSE -#device uhci -#device ohci -device ehci - -device umass - -# Ethernet -device loop -device ether -device mii -device bpf - -#device emac # 10/100 integrated EMAC controller -device dwc # 10/100/1000 integrated GMAC controller - -# USB ethernet support, requires miibus -device miibus - -# Sound support -device sound - -# Pinmux -device fdt_pinctrl - -# Framebuffer support -device vt -device kbdmux -device ums -device ukbd -device videomode -device hdmi - -# Flattened Device Tree -options FDT # Configure using FDT/DTB data -makeoptions MODULES_EXTRA=dtb/allwinner +nooptions SOC_ALLWINNER_A31 Index: sys/arm/conf/A31 =================================================================== --- /dev/null +++ sys/arm/conf/A31 @@ -0,0 +1,32 @@ +# +# A31 -- Custom configuration for the Allwinner 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: +# +# http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html +# +# The handbook is also available locally in /usr/share/doc/handbook +# if you've installed the doc distribution, otherwise always see the +# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the +# latest information. +# +# An exhaustive list of options and more detailed explanations of the +# device lines is also present in the ../../conf/NOTES and NOTES files. +# If you are in doubt as to the purpose or necessity of a line, check first +# in NOTES. +# +# $FreeBSD$ + +include "ALLWINNER" +ident A31 + +nooptions SOC_ALLWINNER_A20 + +# Framebuffer support +nodevice vt +nodevice kbdmux +nodevice ums +nodevice ukbd +nodevice videomode +nodevice hdmi 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,20 +18,21 @@ # # $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 options SMP # Enable multiple cores options PLATFORM -options PLATFORM_SMP +options PLATFORM_SMP # Debugging for use in -current makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols @@ -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"; +};