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 <m...@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 <l...@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 <m...@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 \
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to