Skip to content

Commit

Permalink
octeon: add support for Ubiquiti UniFi Security Gateway
Browse files Browse the repository at this point in the history
Ubiquiti UniFi Security Gateway (USG) is largely identical to
the EdgeRouter Lite (ERLite-3) apart from a different board ID
and two dome leds.

Device data (from WikiDev):
  CPU: Cavium Octeon Plus CN5020 @500mhz 2-cores
  Ethernet: 3x Atheros AR8035-A GbE PHY's
  Flash: On-board 4MB Flash
  Storage: Internal 3.8GB USB Flash (Kingston ID) drive
    w/ 1.5GB free for use occupies single internal USB port.
  Serial: 1x RJ45 port on front panel. 115200, 8N1
  Buttons: 1x Reset

Flash instructions are identical to EdgeRouter Lite.

Signed-off-by: Clemens Hopfer <openwrt@wireloss.net>
  • Loading branch information
oe1rfc authored and chunkeey committed Jun 24, 2022
1 parent 29ed58c commit 8c0930b
Show file tree
Hide file tree
Showing 8 changed files with 211 additions and 6 deletions.
3 changes: 2 additions & 1 deletion target/linux/octeon/base-files/etc/board.d/01_network
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
board_config_update

case "$(board_name)" in
itus,shield-router)
itus,shield-router|\
ubnt,usg)
ucidef_set_interfaces_lan_wan "eth1 eth2" "eth0"
;;
ubnt,edgerouter-4)
Expand Down
3 changes: 2 additions & 1 deletion target/linux/octeon/base-files/lib/preinit/01_sysinfo
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ do_sysinfo_octeon() {
name="erpro"
;;

"UBNT_E300"*)
"UBNT_E300"*|\
"UBNT_USG"*)
# let generic 02_sysinfo handle it since device has its own device tree
return 0
;;
Expand Down
3 changes: 2 additions & 1 deletion target/linux/octeon/base-files/lib/preinit/79_move_config
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ octeon_move_config() {
. /lib/functions.sh

case "$(board_name)" in
erlite)
erlite|\
ubnt,usg)
move_config "/dev/sda1"
;;
itus,shield-router)
Expand Down
9 changes: 6 additions & 3 deletions target/linux/octeon/base-files/lib/upgrade/platform.sh
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ platform_copy_config_helper() {

platform_copy_config() {
case "$(board_name)" in
erlite)
erlite|\
ubnt,usg)
platform_copy_config_helper /dev/sda1
;;
itus,shield-router)
Expand Down Expand Up @@ -91,7 +92,8 @@ platform_do_upgrade() {
ubnt,edgerouter-6p)
kernel=mmcblk0p1
;;
erlite)
erlite|\
ubnt,usg)
kernel=sda1
;;
itus,shield-router)
Expand Down Expand Up @@ -119,7 +121,8 @@ platform_check_image() {
erlite | \
itus,shield-router | \
ubnt,edgerouter-4 | \
ubnt,edgerouter-6p)
ubnt,edgerouter-6p | \
ubnt,usg)
local kernel_length=$(tar xf $tar_file $board_dir/kernel -O | wc -c 2> /dev/null)
local rootfs_length=$(tar xf $tar_file $board_dir/root -O | wc -c 2> /dev/null)
[ "$kernel_length" = 0 -o "$rootfs_length" = 0 ] && {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Device tree source for Ubiquity UniFi Security Gateway.
*
* Written for EdgeRouter Lite by: Aaro Koskinen <aaro.koskinen@iki.fi>
* Adapted for USG by: Clemens Hopfer <openwrt@wireloss.net>
*/

/include/ "octeon_3xxx.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>

/ {
compatible = "ubnt,usg";
model = "Ubiquiti UniFi Security Gateway";

soc@0 {
smi0: mdio@1180000001800 {
phy5: ethernet-phy@5 {
reg = <5>;
compatible = "ethernet-phy-ieee802.3-c22";
};
phy6: ethernet-phy@6 {
reg = <6>;
compatible = "ethernet-phy-ieee802.3-c22";
};
phy7: ethernet-phy@7 {
reg = <7>;
compatible = "ethernet-phy-ieee802.3-c22";
};
};

pip: pip@11800a0000000 {
interface@0 {
ethernet@0 {
phy-handle = <&phy7>;
rx-delay = <0>;
tx-delay = <0x10>;
};
ethernet@1 {
phy-handle = <&phy6>;
rx-delay = <0>;
tx-delay = <0x10>;
};
ethernet@2 {
phy-handle = <&phy5>;
rx-delay = <0>;
tx-delay = <0x10>;
};
};
};

uart0: serial@1180000000800 {
clock-frequency = <500000000>;
};

usbn: usbn@1180068000000 {
refclk-frequency = <12000000>;
refclk-type = "crystal";
};

};

leds {
compatible = "gpio-leds";

led_dome_white: led-0 {
label = "white:dome";
gpios = <&gpio 0 GPIO_ACTIVE_HIGH>;
};

led_dome_blue: led-1 {
label = "blue:dome";
gpios = <&gpio 1 GPIO_ACTIVE_HIGH>;
};
};

keys {
compatible = "gpio-keys-polled";
poll-interval = <20>;

key-restart {
label = "reset";
linux,code = <KEY_RESTART>;
gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
debounce-interval = <60>;
};
};

aliases {
pip = &pip;
led-boot = &led_dome_white;
led-failsafe = &led_dome_blue;
led-running = &led_dome_blue;
led-upgrade = &led_dome_blue;
};
};
10 changes: 10 additions & 0 deletions target/linux/octeon/image/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -84,4 +84,14 @@ define Device/ubnt_edgerouter-lite
endef
TARGET_DEVICES += ubnt_edgerouter-lite

define Device/ubnt_unifi-usg
$(Device/ubnt_edgerouter-lite)
DEVICE_MODEL := UniFi Security Gateway
BOARD_NAME := ubnt,usg
DEVICE_PACKAGES += kmod-gpio-button-hotplug kmod-leds-gpio
DEVICE_DTS := cn5020_ubnt_usg
KERNEL += | append-dtb-to-elf
endef
TARGET_DEVICES += ubnt_unifi-usg

$(eval $(call BuildImage))
46 changes: 46 additions & 0 deletions target/linux/octeon/patches-5.10/150-ubnt_usg_support.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
--- a/arch/mips/include/asm/octeon/cvmx-bootinfo.h
+++ b/arch/mips/include/asm/octeon/cvmx-bootinfo.h
@@ -296,6 +296,7 @@ enum cvmx_board_types_enum {
CVMX_BOARD_TYPE_CUST_PRIVATE_MIN = 20001,
CVMX_BOARD_TYPE_UBNT_E100 = 20002,
CVMX_BOARD_TYPE_UBNT_E200 = 20003,
+ CVMX_BOARD_TYPE_UBNT_USG = 20004,
CVMX_BOARD_TYPE_UBNT_E220 = 20005,
CVMX_BOARD_TYPE_ITUS_SHIELD = 20006,
CVMX_BOARD_TYPE_UBNT_E300 = 20300,
@@ -399,6 +400,7 @@ static inline const char *cvmx_board_typ
/* Customer private range */
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_PRIVATE_MIN)
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E100)
+ ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_USG)
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E200)
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E220)
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_ITUS_SHIELD)
--- a/arch/mips/cavium-octeon/octeon-platform.c
+++ b/arch/mips/cavium-octeon/octeon-platform.c
@@ -634,6 +634,7 @@ static void __init octeon_rx_tx_delay(in
}
break;
case CVMX_BOARD_TYPE_UBNT_E100:
+ case CVMX_BOARD_TYPE_UBNT_USG:
if (iface == 0 && port <= 2) {
_octeon_rx_tx_delay(eth, 0x0, 0x10);
return;
--- a/arch/mips/cavium-octeon/executive/cvmx-helper-board.c
+++ b/arch/mips/cavium-octeon/executive/cvmx-helper-board.c
@@ -170,6 +170,7 @@ int cvmx_helper_board_get_mii_address(in
else
return -1;
case CVMX_BOARD_TYPE_UBNT_E100:
+ case CVMX_BOARD_TYPE_UBNT_USG:
if (ipd_port >= 0 && ipd_port <= 2)
return 7 - ipd_port;
else
@@ -337,6 +338,7 @@ enum cvmx_helper_board_usb_clock_types _
case CVMX_BOARD_TYPE_LANAI2_G:
case CVMX_BOARD_TYPE_NIC10E_66:
case CVMX_BOARD_TYPE_UBNT_E100:
+ case CVMX_BOARD_TYPE_UBNT_USG:
return USB_CLOCK_TYPE_CRYSTAL_12;
case CVMX_BOARD_TYPE_NIC10E:
return USB_CLOCK_TYPE_REF_12;
46 changes: 46 additions & 0 deletions target/linux/octeon/patches-5.15/150-ubnt_usg_support.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
--- a/arch/mips/include/asm/octeon/cvmx-bootinfo.h
+++ b/arch/mips/include/asm/octeon/cvmx-bootinfo.h
@@ -296,6 +296,7 @@ enum cvmx_board_types_enum {
CVMX_BOARD_TYPE_CUST_PRIVATE_MIN = 20001,
CVMX_BOARD_TYPE_UBNT_E100 = 20002,
CVMX_BOARD_TYPE_UBNT_E200 = 20003,
+ CVMX_BOARD_TYPE_UBNT_USG = 20004,
CVMX_BOARD_TYPE_UBNT_E220 = 20005,
CVMX_BOARD_TYPE_ITUS_SHIELD = 20006,
CVMX_BOARD_TYPE_UBNT_E300 = 20300,
@@ -399,6 +400,7 @@ static inline const char *cvmx_board_typ
/* Customer private range */
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_PRIVATE_MIN)
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E100)
+ ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_USG)
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E200)
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E220)
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_ITUS_SHIELD)
--- a/arch/mips/cavium-octeon/octeon-platform.c
+++ b/arch/mips/cavium-octeon/octeon-platform.c
@@ -634,6 +634,7 @@ static void __init octeon_rx_tx_delay(in
}
break;
case CVMX_BOARD_TYPE_UBNT_E100:
+ case CVMX_BOARD_TYPE_UBNT_USG:
if (iface == 0 && port <= 2) {
_octeon_rx_tx_delay(eth, 0x0, 0x10);
return;
--- a/arch/mips/cavium-octeon/executive/cvmx-helper-board.c
+++ b/arch/mips/cavium-octeon/executive/cvmx-helper-board.c
@@ -170,6 +170,7 @@ int cvmx_helper_board_get_mii_address(in
else
return -1;
case CVMX_BOARD_TYPE_UBNT_E100:
+ case CVMX_BOARD_TYPE_UBNT_USG:
if (ipd_port >= 0 && ipd_port <= 2)
return 7 - ipd_port;
else
@@ -337,6 +338,7 @@ enum cvmx_helper_board_usb_clock_types _
case CVMX_BOARD_TYPE_LANAI2_G:
case CVMX_BOARD_TYPE_NIC10E_66:
case CVMX_BOARD_TYPE_UBNT_E100:
+ case CVMX_BOARD_TYPE_UBNT_USG:
return USB_CLOCK_TYPE_CRYSTAL_12;
case CVMX_BOARD_TYPE_NIC10E:
return USB_CLOCK_TYPE_REF_12;

0 comments on commit 8c0930b

Please sign in to comment.