--- /dev/null
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "mt7621.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/leds/common.h>
+
+/ {
+ compatible = "beeline,smartbox-giga", "mediatek,mt7621-soc";
+ model = "Beeline SmartBox GIGA";
+
+ aliases {
+ label-mac-device = &gmac0;
+
+ led-boot = &led_status_green;
+ led-failsafe = &led_status_red;
+ led-running = &led_status_green;
+ led-upgrade = &led_status_red;
+ };
+
+ leds {
+ compatible = "gpio-leds";
+
+ led_status_green: led-0 {
+ label = "green:status";
+ color = <LED_COLOR_ID_GREEN>;
+ function = LED_FUNCTION_STATUS;
+ gpios = <&gpio 13 GPIO_ACTIVE_HIGH>;
+ };
+
+ led-1 {
+ label = "blue:wan";
+ color = <LED_COLOR_ID_BLUE>;
+ function = LED_FUNCTION_WAN;
+ gpios = <&gpio 14 GPIO_ACTIVE_HIGH>;
+ };
+
+ led_status_red: led-2 {
+ label = "red:status";
+ color = <LED_COLOR_ID_RED>;
+ function = LED_FUNCTION_STATUS;
+ gpios = <&gpio 15 GPIO_ACTIVE_HIGH>;
+ };
+ };
+
+ keys {
+ compatible = "gpio-keys";
+
+ reset {
+ label = "reset";
+ gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
+ linux,code = <KEY_RESTART>;
+ };
+ };
+
+ ubi-concat {
+ compatible = "mtd-concat";
+ devices = <&ubiconcat0 &ubiconcat1 &ubiconcat2 \
+ &ubiconcat3>;
+
+ partitions {
+ compatible = "fixed-partitions";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ partition@0 {
+ label = "ubi";
+ reg = <0x0 0x5400000>;
+ };
+ };
+ };
+};
+
+&nand {
+ status = "okay";
+
+ partitions {
+ compatible = "sercomm,sc-partitions", "fixed-partitions";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ partition@0 {
+ label = "u-boot";
+ reg = <0x0 0x100000>;
+ sercomm,scpart-id = <0>;
+ read-only;
+ };
+
+ partition@100000 {
+ label = "dynamic partition map";
+ reg = <0x100000 0x100000>;
+ sercomm,scpart-id = <1>;
+ };
+
+ factory: partition@200000 {
+ label = "Factory";
+ reg = <0x200000 0x100000>;
+ sercomm,scpart-id = <2>;
+ read-only;
+
+ compatible = "nvmem-cells";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ macaddr_factory_21000: macaddr@21000 {
+ reg = <0x21000 0x6>;
+ };
+ };
+
+ partition@300000 {
+ label = "Boot Flag";
+ reg = <0x300000 0x100000>;
+ sercomm,scpart-id = <3>;
+ };
+
+ partition@400000 {
+ label = "kernel";
+ reg = <0x400000 0x600000>;
+ sercomm,scpart-id = <4>;
+ };
+
+ partition@a00000 {
+ label = "Kernel 2";
+ reg = <0xa00000 0x600000>;
+ sercomm,scpart-id = <5>;
+ read-only;
+ };
+
+ ubiconcat0: partition@1000000 {
+ label = "File System 1";
+ reg = <0x1000000 0x1800000>;
+ sercomm,scpart-id = <6>;
+ };
+
+ partition@2800000 {
+ label = "File System 2";
+ reg = <0x2800000 0x1800000>;
+ sercomm,scpart-id = <7>;
+ read-only;
+ };
+
+ ubiconcat1: partition@4000000 {
+ label = "Configuration/log";
+ reg = <0x4000000 0x800000>;
+ sercomm,scpart-id = <8>;
+ };
+
+ ubiconcat2: partition@4800000 {
+ label = "application tmp buffer (Ftool)";
+ reg = <0x4800000 0xc00000>;
+ sercomm,scpart-id = <9>;
+ };
+
+ ubiconcat3: partition@5400000 {
+ label = "container";
+ reg = <0x5400000 0x2800000>;
+ sercomm,scpart-id = <10>;
+ };
+
+ partition@7c00000 {
+ label = "bad block reserved";
+ reg = <0x7c00000 0x380000>;
+ sercomm,scpart-id = <11>;
+ read-only;
+ };
+ };
+};
+
+&pcie {
+ status = "okay";
+};
+
+&pcie0 {
+ wifi@0,0 {
+ compatible = "mediatek,mt76";
+ reg = <0x0000 0 0 0 0>;
+ mediatek,mtd-eeprom = <&factory 0x8000>;
+ ieee80211-freq-limit = <5000000 6000000>;
+
+ nvmem-cells = <&macaddr_factory_21000>;
+ nvmem-cell-names = "mac-address";
+ mac-address-increment = <(5)>;
+ };
+};
+
+&pcie1 {
+ wifi@0,0 {
+ compatible = "mediatek,mt76";
+ reg = <0x0000 0 0 0 0>;
+ mediatek,mtd-eeprom = <&factory 0x0>;
+ ieee80211-freq-limit = <2400000 2500000>;
+
+ nvmem-cells = <&macaddr_factory_21000>;
+ nvmem-cell-names = "mac-address";
+ mac-address-increment = <(4)>;
+ };
+};
+
+&gmac0 {
+ nvmem-cells = <&macaddr_factory_21000>;
+ nvmem-cell-names = "mac-address";
+};
+
+&switch0 {
+ ports {
+ port@0 {
+ status = "okay";
+ label = "wan";
+
+ nvmem-cells = <&macaddr_factory_21000>;
+ nvmem-cell-names = "mac-address";
+ mac-address-increment = <(1)>;
+ };
+
+ port@1 {
+ status = "okay";
+ label = "lan1";
+ };
+
+ port@2 {
+ status = "okay";
+ label = "lan2";
+ };
+ };
+};
+
+&uartlite3 {
+ status = "okay";
+};
+
+&state_default {
+ gpio {
+ groups = "i2c", "jtag";
+ function = "gpio";
+ };
+};
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/image.mk
-DEVICE_VARS += LOADER_TYPE LOADER_FLASH_OFFS
+DEVICE_VARS += LOADER_TYPE LOADER_FLASH_OFFS LZMA_TEXT_START
DEVICE_VARS += NETGEAR_BOARD_ID NETGEAR_HW_ID
DEVICE_VARS += BUFFALO_TAG_PLATFORM BUFFALO_TAG_VERSION BUFFALO_TAG_MINOR
DEVICE_VARS += SEAMA_SIGNATURE SEAMA_MTDBLOCK
ldrflashstart-y := 0x1c000000
ldrflashstart-$(CONFIG_TARGET_ramips_mt7621) := 0x1fc00000
+LOADADDR := $(loadaddr-y)
LOADER_PLATFORM := $(ldrplatform-y)
LOADER_FLASH_START := $(ldrflashstart-y)
PKG_BUILD_DIR="$@.src" \
TARGET_DIR="$(dir $@)" LOADER_NAME="$(notdir $@)" \
BOARD="$(BOARDNAME)" PLATFORM="$(LOADER_PLATFORM)" \
- LZMA_TEXT_START=0x81800000 LOADADDR=$(KERNEL_LOADADDR) \
+ LZMA_TEXT_START=$(LZMA_TEXT_START) \
+ LOADADDR=$(LOADADDR) \
$(1) compile loader.$(LOADER_TYPE)
mv "$@.$(LOADER_TYPE)" "$@"
rm -rf $@.src
PROFILES = Default
KERNEL := $(KERNEL_DTB) | uImage lzma
KERNEL_LOADADDR := $(loadaddr-y)
+ LZMA_TEXT_START := 0x81800000
SOC := $(DEFAULT_SOC)
DEVICE_DTS_DIR := ../dts
DEVICE_DTS = $$(SOC)_$(1)
--- /dev/null
+DEVICE_VARS += SERCOMM_KERNEL_OFFSET SERCOMM_ROOTFS_OFFSET
+
+define Build/sercomm-crypto
+ $(TOPDIR)/scripts/sercomm-crypto.py \
+ --input-file $@ \
+ --key-file $@.key \
+ --output-file $@.ser \
+ --version $(SERCOMM_SWVER)
+ $(STAGING_DIR_HOST)/bin/openssl enc -md md5 -aes-256-cbc \
+ -in $@ \
+ -out $@.enc \
+ -K `cat $@.key` \
+ -iv 00000000000000000000000000000000
+ dd if=$@.enc >> $@.ser 2>/dev/null
+ mv $@.ser $@
+ rm -f $@.enc $@.key
+endef
+
+define Build/sercomm-kernel
+ $(TOPDIR)/scripts/sercomm-kernel-header.py \
+ --kernel-image $@ \
+ --kernel-offset $(SERCOMM_KERNEL_OFFSET) \
+ --rootfs-offset $(SERCOMM_ROOTFS_OFFSET) \
+ --output-header $@.hdr
+ dd if=$@ >> $@.hdr 2>/dev/null
+ mv $@.hdr $@
+endef
+
+define Build/sercomm-part-tag
+ $(call Build/sercomm-part-tag-common,$(word 1,$(1)) $@)
+endef
+
+define Build/sercomm-part-tag-common
+ $(eval file=$(word 2,$(1)))
+ $(TOPDIR)/scripts/sercomm-partition-tag.py \
+ --input-file $(file) \
+ --output-file $(file).tmp \
+ --part-name $(word 1,$(1)) \
+ --part-version $(SERCOMM_SWVER)
+ mv $(file).tmp $(file)
+endef
+
+define Build/sercomm-payload
+ $(TOPDIR)/scripts/sercomm-pid.py \
+ --hw-version $(SERCOMM_HWVER) \
+ --hw-id $(SERCOMM_HWID) \
+ --sw-version $(SERCOMM_SWVER) \
+ --pid-file $@.pid \
+ --extra-padding-size 0x10 \
+ --extra-padding-first-byte 0x0a
+ $(TOPDIR)/scripts/sercomm-payload.py \
+ --input-file $@ \
+ --output-file $@.tmp \
+ --pid "$$(cat $@.pid | od -t x1 -An -v | tr -d '\n')"
+ mv $@.tmp $@
+ rm $@.pid
+endef
+
+define Build/sercomm-prepend-tagged-kernel
+ $(CP) $(IMAGE_KERNEL) $(IMAGE_KERNEL).tagged
+ $(call Build/sercomm-part-tag-common,$(word 1,$(1)) \
+ $(IMAGE_KERNEL).tagged)
+ dd if=$@ >> $(IMAGE_KERNEL).tagged 2>/dev/null
+ mv $(IMAGE_KERNEL).tagged $@
+endef
+
+define Device/sercomm_dxx
+ $(Device/dsa-migration)
+ BLOCKSIZE := 128k
+ PAGESIZE := 2048
+ KERNEL_SIZE := 6144k
+ UBINIZE_OPTS := -E 5
+ LOADER_TYPE := bin
+ KERNEL_LOADADDR := 0x81001000
+ LZMA_TEXT_START := 0x82800000
+ KERNEL := kernel-bin | append-dtb | lzma | loader-kernel | lzma -a0 | \
+ uImage lzma | sercomm-kernel
+ KERNEL_INITRAMFS := kernel-bin | append-dtb | lzma | loader-kernel | \
+ lzma -a0 | uImage lzma
+ IMAGES += factory.img
+ IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
+ IMAGE/factory.img := append-ubi | sercomm-part-tag rootfs | \
+ sercomm-prepend-tagged-kernel kernel | gzip | sercomm-payload | \
+ sercomm-crypto
+ SERCOMM_KERNEL_OFFSET := 0x400100
+ SERCOMM_ROOTFS_OFFSET := 0x1000000
+endef