Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 21 Apr 2016 16:49:04 +0000 (UTC)
From:      Jared McNeill <jmcneill@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r298422 - in head: release/arm sys/arm/allwinner sys/arm/allwinner/a20 sys/arm/allwinner/a31 sys/arm/conf sys/boot/fdt/dts/arm sys/modules/dtb/allwinner
Message-ID:  <201604211649.u3LGn4Vo058952@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jmcneill
Date: Thu Apr 21 16:49:04 2016
New Revision: 298422
URL: https://svnweb.freebsd.org/changeset/base/298422

Log:
  Replace the A20 kernel config with a generic ALLWINNER kernel config that
  supports A20, A31, and A31S. Adds support for the BananaPi M2 (A31S) board.
  
  Submitted by:		Emmanuel Vadot <manu@bidouilliste.com>
  Reviewed by:		jmcneill
  Differential Revision:	https://reviews.freebsd.org/D5580

Added:
  head/sys/arm/allwinner/a31/files.a31   (contents, props changed)
  head/sys/arm/allwinner/a31/std.a31   (contents, props changed)
  head/sys/arm/allwinner/aw_if_dwc.c
     - copied unchanged from r298421, head/sys/arm/allwinner/a20/a20_if_dwc.c
  head/sys/arm/allwinner/std.allwinner   (contents, props changed)
  head/sys/arm/conf/ALLWINNER
     - copied, changed from r298421, head/sys/arm/conf/A20
  head/sys/boot/fdt/dts/arm/bananapim2.dts   (contents, props changed)
Deleted:
  head/sys/arm/allwinner/a20/a20_if_dwc.c
  head/sys/arm/conf/A20
Modified:
  head/release/arm/BANANAPI.conf
  head/release/arm/CUBIEBOARD2.conf
  head/sys/arm/allwinner/a10_padconf.c
  head/sys/arm/allwinner/a20/a20_padconf.c
  head/sys/arm/allwinner/a20/files.a20
  head/sys/arm/allwinner/a31/a31_padconf.c
  head/sys/arm/allwinner/a31/a31s_padconf.c
  head/sys/arm/allwinner/files.allwinner
  head/sys/modules/dtb/allwinner/Makefile

Modified: head/release/arm/BANANAPI.conf
==============================================================================
--- head/release/arm/BANANAPI.conf	Thu Apr 21 16:43:36 2016	(r298421)
+++ head/release/arm/BANANAPI.conf	Thu Apr 21 16:49:04 2016	(r298422)
@@ -7,7 +7,7 @@ EMBEDDEDBUILD=1
 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"

Modified: head/release/arm/CUBIEBOARD2.conf
==============================================================================
--- head/release/arm/CUBIEBOARD2.conf	Thu Apr 21 16:43:36 2016	(r298421)
+++ head/release/arm/CUBIEBOARD2.conf	Thu Apr 21 16:49:04 2016	(r298422)
@@ -7,7 +7,7 @@ EMBEDDEDBUILD=1
 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"

Modified: head/sys/arm/allwinner/a10_padconf.c
==============================================================================
--- head/sys/arm/allwinner/a10_padconf.c	Thu Apr 21 16:43:36 2016	(r298421)
+++ head/sys/arm/allwinner/a10_padconf.c	Thu Apr 21 16:49:04 2016	(r298422)
@@ -35,6 +35,8 @@ __FBSDID("$FreeBSD$");
 
 #include <arm/allwinner/allwinner_pinctrl.h>
 
+#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 @@ const struct allwinner_padconf a10_padco
 	.npins = sizeof(a10_pins) / sizeof(struct allwinner_pins),
 	.pins = a10_pins,
 };
+
+#endif /* SOC_ALLWINNER_A10 */

Modified: head/sys/arm/allwinner/a20/a20_padconf.c
==============================================================================
--- head/sys/arm/allwinner/a20/a20_padconf.c	Thu Apr 21 16:43:36 2016	(r298421)
+++ head/sys/arm/allwinner/a20/a20_padconf.c	Thu Apr 21 16:49:04 2016	(r298422)
@@ -35,6 +35,8 @@ __FBSDID("$FreeBSD$");
 
 #include <arm/allwinner/allwinner_pinctrl.h>
 
+#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 @@ const struct allwinner_padconf a20_padco
 	.npins = sizeof(a20_pins) / sizeof(struct allwinner_pins),
 	.pins = a20_pins,
 };
+
+#endif /* SOC_ALLWINNER_A20 */

Modified: head/sys/arm/allwinner/a20/files.a20
==============================================================================
--- head/sys/arm/allwinner/a20/files.a20	Thu Apr 21 16:43:36 2016	(r298421)
+++ head/sys/arm/allwinner/a20/files.a20	Thu Apr 21 16:49:04 2016	(r298422)
@@ -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

Modified: head/sys/arm/allwinner/a31/a31_padconf.c
==============================================================================
--- head/sys/arm/allwinner/a31/a31_padconf.c	Thu Apr 21 16:43:36 2016	(r298421)
+++ head/sys/arm/allwinner/a31/a31_padconf.c	Thu Apr 21 16:49:04 2016	(r298422)
@@ -35,6 +35,8 @@ __FBSDID("$FreeBSD$");
 
 #include <arm/allwinner/allwinner_pinctrl.h>
 
+#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 @@ const struct allwinner_padconf a31_padco
 	.npins = nitems(a31_pins),
 	.pins = a31_pins,
 };
+
+#endif /* SOC_ALLWINNER_A31 */

Modified: head/sys/arm/allwinner/a31/a31s_padconf.c
==============================================================================
--- head/sys/arm/allwinner/a31/a31s_padconf.c	Thu Apr 21 16:43:36 2016	(r298421)
+++ head/sys/arm/allwinner/a31/a31s_padconf.c	Thu Apr 21 16:49:04 2016	(r298422)
@@ -35,6 +35,8 @@ __FBSDID("$FreeBSD$");
 
 #include <arm/allwinner/allwinner_pinctrl.h>
 
+#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 @@ const struct allwinner_padconf a31s_padc
 	.npins = nitems(a31s_pins),
 	.pins = a31s_pins,
 };
+
+#endif /* SOC_ALLWINNER_A31S */

Added: head/sys/arm/allwinner/a31/files.a31
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sys/arm/allwinner/a31/files.a31	Thu Apr 21 16:49:04 2016	(r298422)
@@ -0,0 +1,4 @@
+# $FreeBSD$
+
+arm/allwinner/a31/a31_padconf.c		standard
+arm/allwinner/a31/a31s_padconf.c	standard

Added: head/sys/arm/allwinner/a31/std.a31
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sys/arm/allwinner/a31/std.a31	Thu Apr 21 16:49:04 2016	(r298422)
@@ -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"

Copied: head/sys/arm/allwinner/aw_if_dwc.c (from r298421, head/sys/arm/allwinner/a20/a20_if_dwc.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sys/arm/allwinner/aw_if_dwc.c	Thu Apr 21 16:49:04 2016	(r298422, copy of r298421, head/sys/arm/allwinner/a20/a20_if_dwc.c)
@@ -0,0 +1,145 @@
+/*-
+ * Copyright (c) 2015 Luiz Otavio O Souza <loos@FreeBSD.org>
+ * 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 <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/bus.h>
+#include <sys/kernel.h>
+#include <sys/module.h>
+
+#include <machine/bus.h>
+
+#include <dev/dwc/if_dwc.h>
+#include <dev/dwc/if_dwcvar.h>
+#include <dev/ofw/ofw_bus.h>
+#include <dev/ofw/ofw_bus_subr.h>
+
+#include <arm/allwinner/allwinner_machdep.h>
+#include <dev/extres/clk/clk.h>
+#include <dev/extres/regulator/regulator.h>
+
+#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", &reg) == 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);

Modified: head/sys/arm/allwinner/files.allwinner
==============================================================================
--- head/sys/arm/allwinner/files.allwinner	Thu Apr 21 16:43:36 2016	(r298421)
+++ head/sys/arm/allwinner/files.allwinner	Thu Apr 21 16:49:04 2016	(r298422)
@@ -10,10 +10,12 @@ arm/allwinner/aw_usbphy.c		optional	ehci
 arm/allwinner/a10_gpio.c		optional	gpio
 arm/allwinner/a10_mmc.c			optional	mmc
 arm/allwinner/a10_sramc.c		standard
+arm/allwinner/aw_if_dwc.c		optional	dwc
 arm/allwinner/aw_rtc.c			standard
 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/sunxi_dma_if.m		standard

Added: head/sys/arm/allwinner/std.allwinner
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sys/arm/allwinner/std.allwinner	Thu Apr 21 16:49:04 2016	(r298422)
@@ -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"

Copied and modified: head/sys/arm/conf/ALLWINNER (from r298421, head/sys/arm/conf/A20)
==============================================================================
--- head/sys/arm/conf/A20	Thu Apr 21 16:43:36 2016	(r298421, copy source)
+++ head/sys/arm/conf/ALLWINNER	Thu Apr 21 16:49:04 2016	(r298422)
@@ -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,16 @@
 #
 # $FreeBSD$
 
-ident		A20
+ident		ALLWINNER
 
 include 	"std.armv6"
-include 	"../allwinner/a20/std.a20"
+include 	"../allwinner/std.allwinner"
 
 options 	INTRNG
 
 options 	SOC_ALLWINNER_A20
+options 	SOC_ALLWINNER_A31
+options 	SOC_ALLWINNER_A31S
 
 options 	HZ=100
 options 	SCHED_ULE		# ULE scheduler
@@ -56,7 +58,7 @@ options 	WITNESS_SKIPSPIN	# Don't run wi
 #options 	BOOTP_WIRED_TO=dwc0
 
 # EXT_RESOURCES pseudo devices
-options		EXT_RESOURCES
+options 	EXT_RESOURCES
 device		clk
 device		phy
 device		hwreset
@@ -125,9 +127,6 @@ device		miibus
 # Sound support
 device		sound
 
-# Pinmux
-device		fdt_pinctrl
-
 # Framebuffer support
 device		vt
 device		kbdmux
@@ -136,6 +135,9 @@ device		ukbd
 device		videomode
 device		hdmi
 
+# Pinmux
+device		fdt_pinctrl
+
 # Flattened Device Tree
 options 	FDT			# Configure using FDT/DTB data
 makeoptions	MODULES_EXTRA=dtb/allwinner

Added: head/sys/boot/fdt/dts/arm/bananapim2.dts
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sys/boot/fdt/dts/arm/bananapim2.dts	Thu Apr 21 16:49:04 2016	(r298422)
@@ -0,0 +1,33 @@
+/*-
+ * Copyright (c) 2016 Emmanuel Vadot <manu@bidouilliste.com>
+ * 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";
+};

Modified: head/sys/modules/dtb/allwinner/Makefile
==============================================================================
--- head/sys/modules/dtb/allwinner/Makefile	Thu Apr 21 16:43:36 2016	(r298421)
+++ head/sys/modules/dtb/allwinner/Makefile	Thu Apr 21 16:49:04 2016	(r298422)
@@ -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 \



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201604211649.u3LGn4Vo058952>