[OpenWrt-Devel] [PATCH][ar71xx] add support for OpenEmbed SOM9331

Rajeev Tandon rajeev.tandon at gmail.com
Mon Aug 29 14:48:30 EDT 2016


From: Allan Nick Pedrana <nik9993 at gmail.com>

This patch adds the target profile SOM9331 and configures hardware
functionality for the 3x Eth Ports & corresponding LED's,
the USB Host, the USART to USB bridge and the System LED.

The patch has been tested by me (Rajeev Tandon) and works well (tested
with sysupgrade image in OpenEmbed SOM9331) by flashing over the
supplied firmware (AA)

Tested-by: Rajeev Tandon <rajeev.tandon at gmail.com>
--

I based what I did on the patch for SOM9331 running 12.09 AA that was
distributed by the vendor, found
here[https://github.com/10to7/SOM9331/blob/master/som9331.patch].

 target/linux/ar71xx/base-files/etc/diag.sh                             |    3
 target/linux/ar71xx/base-files/etc/uci-defaults/01_leds                |    8
 target/linux/ar71xx/base-files/etc/uci-defaults/02_network             |    1
 target/linux/ar71xx/base-files/lib/ar71xx.sh                           |    3
 target/linux/ar71xx/base-files/lib/upgrade/platform.sh                 |    1
 target/linux/ar71xx/config-3.18                                        |    1
 target/linux/ar71xx/files/arch/mips/ath79/mach-som9331.c
 |  125 ++++++++++
 target/linux/ar71xx/generic/profiles/openembed.mk                      |   13 +
 target/linux/ar71xx/image/Makefile                                     |    9
 target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch |   24 +
 tools/firmware-utils/src/mktplinkfw.c                                  |    6
 11 files changed, 188 insertions(+), 6 deletions(-)
diff --git a/target/linux/ar71xx/base-files/etc/diag.sh
b/target/linux/ar71xx/base-files/etc/diag.sh
index 5a184cd..d984d72 100644
--- a/target/linux/ar71xx/base-files/etc/diag.sh
+++ b/target/linux/ar71xx/base-files/etc/diag.sh
@@ -224,6 +224,9 @@ get_status_led() {
  qihoo-c301)
  status_led="qihoo:green:status"
  ;;
+ som9331)
+ status_led="som9331:green:system"
+ ;;
  tew-632brp)
  status_led="tew-632brp:green:status"
  ;;
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
index a4b355a..d8b39a6 100644
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/01_leds
@@ -311,6 +311,14 @@ smart-300)
  ucidef_set_led_wlan "wlan" "WLAN" "nc-link:green:wlan" "phy0tpt"
  ;;

+som9331)
+    ucidef_set_led_netdev "wan" "WAN" "som9331:orange:wan" "eth1"
+    ucidef_set_led_switch "lan1" "LAN1" "som9331:orange:lan1" "switch0" "0x08"
+    ucidef_set_led_switch "lan2" "LAN2" "som9331:orange:lan2" "switch0" "0x02"
+    ucidef_set_led_wlan "wlan" "WLAN" "som9331:red:wlan" "phy0tpt"
+    ucidef_set_led_usbdev "usb" "USB" "som9331:green:system" "1-1"
+    ;;
+
 tew-712br)
  ucidef_set_led_netdev "wan" "WAN" "trendnet:green:wan" "eth1"
  ucidef_set_led_switch "lan1" "LAN1" "trendnet:green:lan1" "switch0" "0x02"
diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
index b2e15bb..165a68a 100755
--- a/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
+++ b/target/linux/ar71xx/base-files/etc/uci-defaults/02_network
@@ -425,6 +425,7 @@ oolite |\
 qihoo-c301 |\
 rb-750 |\
 rb-751 |\
+som9331 |\
 tew-632brp |\
 tew-712br |\
 tew-732br |\
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh
b/target/linux/ar71xx/base-files/lib/ar71xx.sh
index dab4d2c..d9158dc 100755
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
@@ -686,6 +686,9 @@ ar71xx_board_detect() {
  "Smart Electronics Black Swift board"*)
  name="bsb"
  ;;
+ *SOM9331)
+ name="som9331"
+ ;;
  *TEW-632BRP)
  name="tew-632brp"
  ;;
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
index d025632..e5bfb1b 100755
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
@@ -317,6 +317,7 @@ platform_check_image() {
  onion-omega | \
  oolite | \
  smart-300 | \
+ som9331 | \
  tl-mr10u | \
  tl-mr11u | \
  tl-mr12u | \
diff --git a/target/linux/ar71xx/config-3.18 b/target/linux/ar71xx/config-3.18
index e2ff826..4fe40ab 100644
--- a/target/linux/ar71xx/config-3.18
+++ b/target/linux/ar71xx/config-3.18
@@ -105,6 +105,7 @@ CONFIG_ATH79_MACH_R6100=y
 # CONFIG_ATH79_MACH_RBSXTLITE is not set
 CONFIG_ATH79_MACH_RW2458N=y
 CONFIG_ATH79_MACH_SMART_300=y
+CONFIG_ATH79_MACH_SOM9331=y
 CONFIG_ATH79_MACH_TEW_632BRP=y
 CONFIG_ATH79_MACH_TEW_673GRU=y
 CONFIG_ATH79_MACH_TEW_712BR=y
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-som9331.c
b/target/linux/ar71xx/files/arch/mips/ath79/mach-som9331.c
new file mode 100644
index 0000000..eef5bce
--- /dev/null
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-som9331.c
@@ -0,0 +1,125 @@
+/*
+ *  OpenEmbed SOM9331 board support
+ *
+ *  Copyright (C) 2011 dongyuqi <729650915 at qq.com>
+ *  Copyright (C) 2011-2012 Gabor Juhos <juhosg at openwrt.org>
+ *
+ *  5/27/2016 - Modified by Allan Nick Pedrana <nik9993 at gmail.com>
+ *
+ *  This program is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License version 2 as published
+ *  by the Free Software Foundation.
+ */
+
+#include <linux/gpio.h>
+
+#include <asm/mach-ath79/ath79.h>
+#include <asm/mach-ath79/ar71xx_regs.h>
+
+#include "common.h"
+#include "dev-eth.h"
+#include "dev-gpio-buttons.h"
+#include "dev-leds-gpio.h"
+#include "dev-m25p80.h"
+#include "dev-usb.h"
+#include "dev-wmac.h"
+#include "machtypes.h"
+
+#define SOM9331_GPIO_LED_WLAN   27
+#define SOM9331_GPIO_LED_SYSTEM 0
+#define SOM9331_GPIO_LED_2  13
+#define SOM9331_GPIO_LED_3  14
+#define SOM9331_GPIO_LED_5  16
+#define SOM9331_GPIO_LED_WAN    SOM9331_GPIO_LED_2
+#define SOM9331_GPIO_LED_LAN1   SOM9331_GPIO_LED_3
+#define SOM9331_GPIO_LED_LAN2   SOM9331_GPIO_LED_5
+#define SOM9331_GPIO_BTN_RESET  11
+
+#define SOM9331_KEYS_POLL_INTERVAL  20  /* msecs */
+#define SOM9331_KEYS_DEBOUNCE_INTERVAL  (3 * SOM9331_KEYS_POLL_INTERVAL)
+
+static const char *som9331_part_probes[] = {
+    "tp-link",
+    NULL,
+};
+
+static struct flash_platform_data som9331_flash_data = {
+    .part_probes    = som9331_part_probes,
+};
+
+static struct gpio_led som9331_leds_gpio[] __initdata = {
+    {
+        .name       = "som9331:red:wlan",
+        .gpio       = SOM9331_GPIO_LED_WLAN,
+        .active_low = 1,
+    },
+    {
+        .name       = "som9331:orange:wan",
+        .gpio       = SOM9331_GPIO_LED_WAN,
+        .active_low = 0,
+    },
+    {
+        .name       = "som9331:orange:lan1",
+        .gpio       = SOM9331_GPIO_LED_LAN1,
+        .active_low = 0,
+    },
+    {
+        .name       = "som9331:orange:lan2",
+        .gpio       = SOM9331_GPIO_LED_LAN2,
+        .active_low = 0,
+    },
+    {
+        .name       = "som9331:blue:system",
+        .gpio       = SOM9331_GPIO_LED_SYSTEM,
+        .active_low = 0,
+    },
+};
+
+static struct gpio_keys_button som9331_gpio_keys[] __initdata = {
+    {
+        .desc       = "reset",
+        .type       = EV_KEY,
+        .code       = KEY_RESTART,
+        .debounce_interval = SOM9331_KEYS_DEBOUNCE_INTERVAL,
+        .gpio       = SOM9331_GPIO_BTN_RESET,
+        .active_low = 0,
+    }
+};
+
+static void __init som9331_setup(void)
+{
+    u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00);
+    u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
+
+    ath79_setup_ar933x_phy4_switch(true, true);
+
+    ath79_gpio_function_disable(AR933X_GPIO_FUNC_ETH_SWITCH_LED0_EN |
+                    AR933X_GPIO_FUNC_ETH_SWITCH_LED1_EN |
+                    AR933X_GPIO_FUNC_ETH_SWITCH_LED2_EN |
+                    AR933X_GPIO_FUNC_ETH_SWITCH_LED3_EN |
+                    AR933X_GPIO_FUNC_ETH_SWITCH_LED4_EN);
+
+    ath79_register_m25p80(&som9331_flash_data);
+    ath79_register_leds_gpio(-1, ARRAY_SIZE(som9331_leds_gpio),
+                 som9331_leds_gpio);
+    ath79_register_gpio_keys_polled(-1, SOM9331_KEYS_POLL_INTERVAL,
+                    ARRAY_SIZE(som9331_gpio_keys),
+                    som9331_gpio_keys);
+
+    ath79_register_usb();
+
+    ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0);
+    ath79_init_mac(ath79_eth1_data.mac_addr, mac, -1);
+
+    ath79_register_mdio(0, 0x0);
+
+    /* LAN ports */
+    ath79_register_eth(1);
+
+    /* WAN port */
+    ath79_register_eth(0);
+
+    ath79_register_wmac(ee, mac);
+}
+
+MIPS_MACHINE(ATH79_MACH_SOM9331, "SOM9331", "OpenEmbed SOM9331",
som9331_setup);
diff --git a/target/linux/ar71xx/generic/profiles/openembed.mk
b/target/linux/ar71xx/generic/profiles/openembed.mk
new file mode 100644
index 0000000..2603e0a
--- /dev/null
+++ b/target/linux/ar71xx/generic/profiles/openembed.mk
@@ -0,0 +1,13 @@
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+
+define Profile/SOM9331
+   NAME:=OpenEmbed SOM9331
+   PACKAGES:=kmod-usb-core kmod-usb2 kmod-usb-storage kmod-i2c-core
kmod-i2c-gpio-custom kmod-spi-bitbang kmod-spi-dev kmod-spi-gpio
kmod-spi-gpio-custom kmod-usb-serial
+endef
+
+define Profile/SOM9331/Description
+   Package set optimized for the OpenEmbed SOM9331.
+endef
+$(eval $(call Profile,SOM9331))
+
diff --git a/target/linux/ar71xx/image/Makefile
b/target/linux/ar71xx/image/Makefile
index 9a7acbd..9052c7e 100644
--- a/target/linux/ar71xx/image/Makefile
+++ b/target/linux/ar71xx/image/Makefile
@@ -371,6 +371,15 @@ define Device/onion-omega
 endef
 TARGET_DEVICES += onion-omega

+define Device/som9331
+    $(Device/tplink-8mlzma)
+    BOARDNAME := SOM9331
+    DEVICE_PROFILE := SOM9331
+    TPLINK_HWID := 0x04800054
+    CONSOLE := ttyATH0,115200
+endef
+TARGET_DEVICES += som9331
+
 define Device/tl-mr10u-v1
     $(Device/tplink-4mlzma)
     BOARDNAME := TL-MR10U
diff --git a/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch
b/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch
index d6e786d..f8f9534 100644
--- a/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch
+++ b/target/linux/ar71xx/patches-3.18/610-MIPS-ath79-openwrt-machines.patch
@@ -1,6 +1,6 @@
 --- a/arch/mips/ath79/machtypes.h
 +++ b/arch/mips/ath79/machtypes.h
-@@ -16,22 +16,199 @@
+@@ -16,22 +16,200 @@

  enum ath79_mach_type {
  ATH79_MACH_GENERIC = 0,
@@ -105,6 +105,7 @@
 + ATH79_MACH_RB_SXTLITE5ND, /* Mikrotik RouterBOARD SXT Lite 5nD */
 + ATH79_MACH_RW2458N, /* Redwave RW2458N */
 + ATH79_MACH_SMART_300, /* NC-LINK SMART-300 */
++ ATH79_MACH_SOM9331, /* OpenEmbed SOM9331 */
 + ATH79_MACH_TEW_632BRP, /* TRENDnet TEW-632BRP */
 + ATH79_MACH_TEW_673GRU, /* TRENDnet TEW-673GRU */
 + ATH79_MACH_TEW_712BR, /* TRENDnet TEW-712BR */
@@ -282,7 +283,7 @@
  config ATH79_MACH_AP121
  bool "Atheros AP121 reference board"
  select SOC_AR933X
-@@ -11,62 +84,1050 @@ config ATH79_MACH_AP121
+@@ -11,62 +84,1060 @@ config ATH79_MACH_AP121
  select ATH79_DEV_M25P80
  select ATH79_DEV_USB
  select ATH79_DEV_WMAC
@@ -420,6 +421,16 @@
 + select ATH79_DEV_USB
 + select ATH79_DEV_WMAC
 +
++config ATH79_MACH_SOM9331
++  bool "SOM9331 support"
++  select SOC_AR933X
++  select ATH79_DEV_ETH
++  select ATH79_DEV_GPIO_BUTTONS
++  select ATH79_DEV_LEDS_GPIO
++  select ATH79_DEV_M25P80
++  select ATH79_DEV_USB
++  select ATH79_DEV_WMAC
++
 +config ATH79_MACH_WHR_HP_G300N
 + bool "Buffalo WHR-HP-G300N board support"
 + select SOC_AR724X
@@ -1361,7 +1372,7 @@

  config ATH79_MACH_UBNT_XM
  bool "Ubiquiti Networks XM/UniFi boards"
-@@ -83,6 +1144,106 @@ config ATH79_MACH_UBNT_XM
+@@ -83,6 +1154,106 @@ config ATH79_MACH_UBNT_XM
   Say 'Y' here if you want your kernel to support the
   Ubiquiti Networks XM (rev 1.0) board.

@@ -1468,7 +1479,7 @@
  endmenu

  config SOC_AR71XX
-@@ -124,7 +1285,10 @@ config ATH79_DEV_DSA
+@@ -124,7 +1295,10 @@ config ATH79_DEV_DSA
  config ATH79_DEV_ETH
  def_bool n

@@ -1480,7 +1491,7 @@
  def_bool n

  config ATH79_DEV_GPIO_BUTTONS
-@@ -154,6 +1318,11 @@ config ATH79_PCI_ATH9K_FIXUP
+@@ -154,6 +1328,11 @@ config ATH79_PCI_ATH9K_FIXUP
  def_bool n

  config ATH79_ROUTERBOOT
@@ -1494,7 +1505,7 @@
  endif
 --- a/arch/mips/ath79/Makefile
 +++ b/arch/mips/ath79/Makefile
-@@ -38,9 +38,128 @@ obj-$(CONFIG_ATH79_ROUTERBOOT) += route
+@@ -38,9 +38,129 @@ obj-$(CONFIG_ATH79_ROUTERBOOT) += route
  #
  # Machines
  #
@@ -1565,6 +1576,7 @@
 +obj-$(CONFIG_ATH79_MACH_RBSXTLITE) += mach-rbsxtlite.o
 +obj-$(CONFIG_ATH79_MACH_RW2458N) += mach-rw2458n.o
 +obj-$(CONFIG_ATH79_MACH_SMART_300) += mach-smart-300.o
++obj-$(CONFIG_ATH79_MACH_SOM9331) += mach-som9331.o
 +obj-$(CONFIG_ATH79_MACH_TEW_632BRP) += mach-tew-632brp.o
 +obj-$(CONFIG_ATH79_MACH_TEW_673GRU) += mach-tew-673gru.o
 +obj-$(CONFIG_ATH79_MACH_TEW_712BR) += mach-tew-712br.o
diff --git a/tools/firmware-utils/src/mktplinkfw.c
b/tools/firmware-utils/src/mktplinkfw.c
index 6df869d..743fb07 100644
--- a/tools/firmware-utils/src/mktplinkfw.c
+++ b/tools/firmware-utils/src/mktplinkfw.c
@@ -35,6 +35,7 @@
 #define HWID_GL_INET_V1 0x08000001
 #define HWID_GS_OOLITE_V1 0x3C000101
 #define HWID_ONION_OMEGA 0x04700001
+#define HWID_SOM9331 0x04800054
 #define HWID_TL_MR10U_V1 0x00100101
 #define HWID_TL_MR13U_V1 0x00130101
 #define HWID_TL_MR3020_V1 0x30200001
@@ -432,6 +433,11 @@ static struct board_info boards[] = {
  .hw_rev = 1,
  .layout_id = "16Mlzma",
  }, {
+ .id = "SOM9331",
+ .hw_id = HWID_SOM9331,
+ .hw_rev = 1,
+ .layout_id = "8Mlzma",
+ }, {
  .id = "ANTMINER-S1",
  .hw_id = HWID_ANTMINER_S1,
  .hw_rev = 1,
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


More information about the openwrt-devel mailing list