Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
@@ -23,11 +23,13 @@ endef
|
||||
define U-Boot/bcm4908
|
||||
NAME:=Broadcom's BCM4908
|
||||
UBOOT_CONFIG:=bcm94908
|
||||
SOC:=bcm4908
|
||||
endef
|
||||
|
||||
define U-Boot/bcm4912
|
||||
NAME:=Broadcom's BCM4912
|
||||
UBOOT_CONFIG:=bcm94912
|
||||
SOC:=bcm4912
|
||||
endef
|
||||
|
||||
UBOOT_TARGETS := \
|
||||
@@ -46,8 +48,8 @@ endef
|
||||
|
||||
define Build/InstallDev
|
||||
$(INSTALL_DIR) $(STAGING_DIR_IMAGE)/u-boot
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/$(UBOOT_IMAGE) $(STAGING_DIR_IMAGE)/u-boot/
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/u-boot.dtb $(STAGING_DIR_IMAGE)/u-boot/
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/$(UBOOT_IMAGE) $(STAGING_DIR_IMAGE)/u-boot/u-boot-$(SOC).bin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/u-boot.dtb $(STAGING_DIR_IMAGE)/u-boot/u-boot-$(SOC).dtb
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/arch/arm/dts/*.dtb $(STAGING_DIR_IMAGE)/u-boot/
|
||||
endef
|
||||
|
||||
|
||||
14
rules.mk
14
rules.mk
@@ -208,7 +208,6 @@ ifndef DUMP
|
||||
ifneq ($(TOOLCHAIN_LIB_DIRS),)
|
||||
TARGET_LDFLAGS+= $(patsubst %,-L%,$(TOOLCHAIN_LIB_DIRS))
|
||||
endif
|
||||
TARGET_PATH:=$(TOOLCHAIN_DIR)/bin:$(TARGET_PATH)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
@@ -243,20 +242,13 @@ HOST_CXXFLAGS:=
|
||||
HOST_CFLAGS:=-O2 $(HOST_CPPFLAGS)
|
||||
HOST_LDFLAGS:=-L$(STAGING_DIR_HOST)/lib $(if $(IS_PACKAGE_BUILD),-L$(STAGING_DIR_HOSTPKG)/lib -L$(STAGING_DIR)/host/lib)
|
||||
|
||||
ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
|
||||
TARGET_AR:=$(TARGET_CROSS)gcc-ar
|
||||
TARGET_RANLIB:=$(TARGET_CROSS)gcc-ranlib
|
||||
TARGET_NM:=$(TARGET_CROSS)gcc-nm
|
||||
else
|
||||
TARGET_AR:=$(TARGET_CROSS)ar
|
||||
TARGET_RANLIB:=$(TARGET_CROSS)ranlib
|
||||
TARGET_NM:=$(TARGET_CROSS)nm
|
||||
endif
|
||||
|
||||
BUILD_KEY=$(TOPDIR)/key-build
|
||||
|
||||
FAKEROOT:=$(STAGING_DIR_HOST)/bin/fakeroot
|
||||
|
||||
TARGET_AR:=$(TARGET_CROSS)gcc-ar
|
||||
TARGET_RANLIB:=$(TARGET_CROSS)gcc-ranlib
|
||||
TARGET_NM:=$(TARGET_CROSS)gcc-nm
|
||||
TARGET_CC:=$(TARGET_CROSS)gcc
|
||||
TARGET_CXX:=$(TARGET_CROSS)g++
|
||||
KPATCH:=$(SCRIPT_DIR)/patch-kernel.sh
|
||||
|
||||
@@ -50,6 +50,7 @@ BIN_SPECS="
|
||||
gdbserver: gdbserver
|
||||
"
|
||||
|
||||
OVERWRITE_CONFIG=""
|
||||
|
||||
test_c() {
|
||||
cat <<-EOT | "${CC:-false}" $CFLAGS -o /dev/null -x c - 2>/dev/null
|
||||
@@ -281,8 +282,11 @@ print_config() {
|
||||
local mksubtarget
|
||||
|
||||
local target="$("$CC" $CFLAGS -dumpmachine)"
|
||||
local version="$("$CC" $CFLAGS -dumpversion)"
|
||||
local cpuarch="${target%%-*}"
|
||||
local prefix="${CC##*/}"; prefix="${prefix%-*}-"
|
||||
|
||||
# get CC; strip version; strip gcc and add - suffix
|
||||
local prefix="${CC##*/}"; prefix="${prefix%-$version}"; prefix="${prefix%-*}-"
|
||||
local config="${0%/scripts/*}/.config"
|
||||
|
||||
# if no target specified, print choice list and exit
|
||||
@@ -317,9 +321,13 @@ print_config() {
|
||||
fi
|
||||
|
||||
# bail out if there is a .config already
|
||||
if [ -f "${0%/scripts/*}/.config" ]; then
|
||||
echo "There already is a .config file, refusing to overwrite!" >&2
|
||||
return 1
|
||||
if [ -f "$config" ]; then
|
||||
if [ "$OVERWRITE_CONFIG" == "" ]; then
|
||||
echo "There already is a .config file, refusing to overwrite!" >&2
|
||||
return 1
|
||||
else
|
||||
echo "There already is a .config file, trying to overwrite!"
|
||||
fi
|
||||
fi
|
||||
|
||||
case "$mktarget" in */*)
|
||||
@@ -327,8 +335,11 @@ print_config() {
|
||||
mktarget="${mktarget%/*}"
|
||||
;; esac
|
||||
|
||||
if [ ! -f "$config" ]; then
|
||||
touch "$config"
|
||||
fi
|
||||
|
||||
echo "CONFIG_TARGET_${mktarget}=y" > "$config"
|
||||
echo "CONFIG_TARGET_${mktarget}=y" >> "$config"
|
||||
|
||||
if [ -n "$mksubtarget" ]; then
|
||||
echo "CONFIG_TARGET_${mktarget}_${mksubtarget}=y" >> "$config"
|
||||
@@ -358,8 +369,18 @@ print_config() {
|
||||
echo "CONFIG_TOOLCHAIN_PREFIX=\"$prefix\"" >> "$config"
|
||||
echo "CONFIG_TARGET_NAME=\"$target\"" >> "$config"
|
||||
|
||||
if [ "$LIBC_TYPE" != glibc ]; then
|
||||
echo "CONFIG_TOOLCHAIN_LIBC=\"$LIBC_TYPE\"" >> "$config"
|
||||
if [ -f "$config" ]; then
|
||||
sed -i '/CONFIG_EXTERNAL_TOOLCHAIN_LIBC_USE_MUSL/d' "$config"
|
||||
sed -i '/CONFIG_EXTERNAL_TOOLCHAIN_LIBC_USE_GLIBC/d' "$config"
|
||||
fi
|
||||
|
||||
if [ "$LIBC_TYPE" == glibc ]; then
|
||||
echo "CONFIG_EXTERNAL_TOOLCHAIN_LIBC_USE_GLIBC=y" >> "$config"
|
||||
elif [ "$LIBC_TYPE" == musl ]; then
|
||||
echo "CONFIG_EXTERNAL_TOOLCHAIN_LIBC_USE_MUSL=y" >> "$config"
|
||||
else
|
||||
echo "Can't detect LIBC type. Aborting!" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
local lib
|
||||
@@ -452,6 +473,13 @@ probe_cpp() {
|
||||
}
|
||||
|
||||
probe_libc() {
|
||||
if [ -f $TOOLCHAIN/info.mk ]; then
|
||||
LIBC_TYPE=$(grep LIBC_TYPE $TOOLCHAIN/info.mk | sed 's/LIBC_TYPE=//')
|
||||
return 0
|
||||
fi
|
||||
|
||||
echo "Warning! Can't find info.mk, trying to detect with alternative way."
|
||||
|
||||
if [ -z "$LIBC_TYPE" ]; then
|
||||
if test_uclibc; then
|
||||
LIBC_TYPE="uclibc"
|
||||
@@ -529,8 +557,13 @@ while [ -n "$1" ]; do
|
||||
exit $?
|
||||
;;
|
||||
|
||||
--overwrite-config)
|
||||
OVERWRITE_CONFIG=y
|
||||
;;
|
||||
|
||||
--config)
|
||||
if probe_cc; then
|
||||
probe_libc
|
||||
print_config "$1"
|
||||
exit $?
|
||||
fi
|
||||
@@ -570,6 +603,8 @@ while [ -n "$1" ]; do
|
||||
echo -e " is used to specify C flags to be passed to the " >&2
|
||||
echo -e " cross compiler when performing tests." >&2
|
||||
echo -e " This parameter may be repeated multiple times." >&2
|
||||
echo -e " Use --overwrite-config before --config to overwrite" >&2
|
||||
echo -e " an already present config with the required changes.">&2
|
||||
exit 1
|
||||
;;
|
||||
|
||||
|
||||
46
target/linux/bcm4908/base-files/etc/init.d/fastnetwork
Executable file
46
target/linux/bcm4908/base-files/etc/init.d/fastnetwork
Executable file
@@ -0,0 +1,46 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
|
||||
START=25
|
||||
USE_PROCD=1
|
||||
|
||||
start_service() {
|
||||
reload_service
|
||||
}
|
||||
|
||||
service_triggers() {
|
||||
procd_add_reload_trigger "network"
|
||||
procd_add_reload_trigger "firewall"
|
||||
procd_add_reload_interface_trigger "lan"
|
||||
}
|
||||
|
||||
reload_service() {
|
||||
local packet_steering="$(uci -q get network.@globals[0].packet_steering)"
|
||||
local num_cpus="$(grep -c "^processor.*:" /proc/cpuinfo)"
|
||||
local flow_offloading="$(uci -q get firewall.@defaults[0].flow_offloading)"
|
||||
local flow_offloading_hw="$(uci -q get firewall.@defaults[0].flow_offloading_hw)"
|
||||
local rps_eth0=0
|
||||
local rps_br_lan=0
|
||||
|
||||
[ "$num_cpus" -le 1 ] && return
|
||||
|
||||
[ "$packet_steering" = 1 ] && {
|
||||
if [ ${flow_offloading_hw:-0} -gt 0 ]; then
|
||||
# HW offloading
|
||||
# Not implemented
|
||||
:
|
||||
elif [ ${flow_offloading:-0} -gt 0 ]; then
|
||||
# SW offloading
|
||||
# BCM4908 always reaches ~940 Mb/s
|
||||
:
|
||||
else
|
||||
# Default
|
||||
case "$num_cpus" in
|
||||
2) rps_eth0=2; rps_br_lan=2;;
|
||||
4) rps_eth0=e; rps_br_lan=e;;
|
||||
esac
|
||||
fi
|
||||
}
|
||||
|
||||
echo $rps_eth0 > /sys/class/net/eth0/queues/rx-0/rps_cpus
|
||||
echo $rps_br_lan > /sys/class/net/br-lan/queues/rx-0/rps_cpus
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
uci set network.@globals[0].packet_steering="1"
|
||||
@@ -5,19 +5,20 @@ include $(INCLUDE_DIR)/image.mk
|
||||
|
||||
DEVICE_VARS += ASUS_PRODUCTID ASUS_BUILD_NO ASUS_FW_REV ASUS_EXT_NO
|
||||
DEVICE_VARS += NETGEAR_BOARD_ID NETGEAR_REGION
|
||||
DEVICE_VARS += PKGTB_ITS
|
||||
DEVICE_VARS += SOC
|
||||
|
||||
define Image/Prepare
|
||||
cp bootfs-generic.its $(KDIR)/
|
||||
sed -i "s=\$$$${images_dir}=$(STAGING_DIR_IMAGE)=" $(KDIR)/bootfs-generic.its
|
||||
sed -i "s=\$$$${dts_dir}=$(DTS_DIR)=" $(KDIR)/bootfs-generic.its
|
||||
cp bootfs*.its* $(KDIR)/
|
||||
sed -i "s=\$$$${images_dir}=$(STAGING_DIR_IMAGE)=" $(KDIR)/bootfs*.its*
|
||||
sed -i "s=\$$$${dts_dir}=$(DTS_DIR)=" $(KDIR)/bootfs*.its*
|
||||
endef
|
||||
|
||||
define Build/bootfs
|
||||
cat $@ | $(STAGING_DIR_HOST)/bin/lzma e -eos -si -so > $@.tmp
|
||||
mv $@.tmp $@
|
||||
sed -i "s=\$${kernel}=$@=" $(KDIR)/bootfs-generic.its
|
||||
PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage -f $(KDIR)/bootfs-generic.its $(KDIR)/bootfs-generic.itb
|
||||
sed -i "s=\$${kernel}=$@=" $(KDIR)/bootfs*.its*
|
||||
PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage -f $(KDIR)/bootfs-bcm4908.its $(KDIR)/bootfs-bcm4908.itb
|
||||
PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage -f $(KDIR)/bootfs-bcm4912.its $(KDIR)/bootfs-bcm4912.itb
|
||||
endef
|
||||
|
||||
define Build/bcm4908asus
|
||||
@@ -54,8 +55,8 @@ endef
|
||||
|
||||
define Build/pkgtb
|
||||
mv $@ $@.rootfs
|
||||
cp $(PKGTB_ITS) $@.its
|
||||
sed -i "s=\$${bootfs}=$(KDIR)/bootfs-generic.itb=" $@.its
|
||||
cp pkgtb-$(SOC).its $@.its
|
||||
sed -i "s=\$${bootfs}=$(KDIR)/bootfs-$(SOC).itb=" $@.its
|
||||
sed -i "s=\$${rootfs}=$@.rootfs=" $@.its
|
||||
PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage -f $@.its $@
|
||||
endef
|
||||
@@ -129,7 +130,7 @@ endef
|
||||
define Device/netgear_raxe500
|
||||
DEVICE_MODEL := RAXE500
|
||||
$(Device/netgear)
|
||||
PKGTB_ITS := pkgtb-bcm4908.its
|
||||
SOC := bcm4908
|
||||
NETGEAR_BOARD_ID := U12H449T00_NETGEAR
|
||||
endef
|
||||
# TARGET_DEVICES += netgear_raxe500
|
||||
|
||||
48
target/linux/bcm4908/image/bootfs-bcm4908.its
Normal file
48
target/linux/bcm4908/image/bootfs-bcm4908.its
Normal file
@@ -0,0 +1,48 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
|
||||
/include/ "bootfs.itsi"
|
||||
|
||||
/ {
|
||||
images {
|
||||
uboot {
|
||||
data = /incbin/("${images_dir}/u-boot/u-boot-bcm4908.bin");
|
||||
};
|
||||
|
||||
fdt_uboot {
|
||||
data = /incbin/("${images_dir}/u-boot/u-boot-bcm4908.dtb");
|
||||
};
|
||||
|
||||
fdt_uboot_RAX220 {
|
||||
description = "dtb";
|
||||
data = /incbin/("${images_dir}/u-boot/RAX220.dtb");
|
||||
type = "flat_dt";
|
||||
compression = "none";
|
||||
|
||||
hash-1 {
|
||||
algo = "sha256";
|
||||
};
|
||||
};
|
||||
|
||||
fdt_linux_RAX220 {
|
||||
description = "dtb";
|
||||
data = /incbin/("${dts_dir}/broadcom/bcm4908/bcm4908-netgear-raxe500.dtb");
|
||||
arch = "arm64";
|
||||
type = "flat_dt";
|
||||
compression = "none";
|
||||
};
|
||||
};
|
||||
|
||||
configurations {
|
||||
conf_ub_RAX220 {
|
||||
description = "RAX220";
|
||||
fdt = "fdt_uboot_RAX220";
|
||||
loadables = "atf", "uboot";
|
||||
};
|
||||
|
||||
conf_lx_RAX220 {
|
||||
description = "BRCM 63xxx linux";
|
||||
kernel = "kernel";
|
||||
fdt = "fdt_linux_RAX220";
|
||||
};
|
||||
};
|
||||
};
|
||||
34
target/linux/bcm4908/image/bootfs-bcm4912.its
Normal file
34
target/linux/bcm4908/image/bootfs-bcm4912.its
Normal file
@@ -0,0 +1,34 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
|
||||
/include/ "bootfs.itsi"
|
||||
|
||||
/ {
|
||||
images {
|
||||
uboot {
|
||||
data = /incbin/("${images_dir}/u-boot/u-boot-bcm4912.bin");
|
||||
};
|
||||
|
||||
fdt_uboot {
|
||||
data = /incbin/("${images_dir}/u-boot/u-boot-bcm4912.dtb");
|
||||
};
|
||||
|
||||
fdt_GTAX6000 {
|
||||
description = "dtb";
|
||||
data = /incbin/("${images_dir}/u-boot/GTAX6000.dtb");
|
||||
type = "flat_dt";
|
||||
compression = "none";
|
||||
|
||||
hash-1 {
|
||||
algo = "sha256";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
configurations {
|
||||
conf_ub_GTAX6000 {
|
||||
description = "GTAX6000";
|
||||
fdt = "fdt_GTAX6000";
|
||||
loadables = "atf", "uboot";
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -24,7 +24,6 @@
|
||||
|
||||
uboot {
|
||||
description = "U-Boot";
|
||||
data = /incbin/("${images_dir}/u-boot/u-boot-nodtb.bin");
|
||||
os = "U-Boot";
|
||||
arch = "arm64";
|
||||
compression = "none";
|
||||
@@ -53,7 +52,6 @@
|
||||
|
||||
fdt_uboot {
|
||||
description = "dtb";
|
||||
data = /incbin/("${images_dir}/u-boot/u-boot.dtb");
|
||||
type = "flat_dt";
|
||||
compression = "none";
|
||||
|
||||
@@ -61,36 +59,6 @@
|
||||
algo = "sha256";
|
||||
};
|
||||
};
|
||||
|
||||
fdt_GTAX6000 {
|
||||
description = "dtb";
|
||||
data = /incbin/("${images_dir}/u-boot/GTAX6000.dtb");
|
||||
type = "flat_dt";
|
||||
compression = "none";
|
||||
|
||||
hash-1 {
|
||||
algo = "sha256";
|
||||
};
|
||||
};
|
||||
|
||||
fdt_uboot_RAX220 {
|
||||
description = "dtb";
|
||||
data = /incbin/("${images_dir}/u-boot/RAX220.dtb");
|
||||
type = "flat_dt";
|
||||
compression = "none";
|
||||
|
||||
hash-1 {
|
||||
algo = "sha256";
|
||||
};
|
||||
};
|
||||
|
||||
fdt_linux_RAX220 {
|
||||
description = "dtb";
|
||||
data = /incbin/("${dts_dir}/broadcom/bcm4908/bcm4908-netgear-raxe500.dtb");
|
||||
arch = "arm64";
|
||||
type = "flat_dt";
|
||||
compression = "none";
|
||||
};
|
||||
};
|
||||
|
||||
configurations {
|
||||
@@ -101,23 +69,5 @@
|
||||
fdt = "fdt_uboot";
|
||||
loadables = "atf", "uboot";
|
||||
};
|
||||
|
||||
conf_ub_GTAX6000 {
|
||||
description = "GTAX6000";
|
||||
fdt = "fdt_GTAX6000";
|
||||
loadables = "atf", "uboot";
|
||||
};
|
||||
|
||||
conf_ub_RAX220 {
|
||||
description = "RAX220";
|
||||
fdt = "fdt_uboot_RAX220";
|
||||
loadables = "atf", "uboot";
|
||||
};
|
||||
|
||||
conf_lx_RAX220 {
|
||||
description = "BRCM 63xxx linux";
|
||||
kernel = "kernel";
|
||||
fdt = "fdt_linux_RAX220";
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -3703,6 +3703,7 @@ CONFIG_MTD_SPLIT=y
|
||||
# CONFIG_MTD_SPLIT_FIRMWARE is not set
|
||||
CONFIG_MTD_SPLIT_FIRMWARE_NAME="firmware"
|
||||
# CONFIG_MTD_SPLIT_FIT_FW is not set
|
||||
# CONFIG_MTD_SPLIT_H3C_VFS is not set
|
||||
# CONFIG_MTD_SPLIT_JIMAGE_FW is not set
|
||||
# CONFIG_MTD_SPLIT_LZMA_FW is not set
|
||||
# CONFIG_MTD_SPLIT_MINOR_FW is not set
|
||||
|
||||
@@ -3847,6 +3847,7 @@ CONFIG_MTD_SPLIT=y
|
||||
# CONFIG_MTD_SPLIT_FIRMWARE is not set
|
||||
CONFIG_MTD_SPLIT_FIRMWARE_NAME="firmware"
|
||||
# CONFIG_MTD_SPLIT_FIT_FW is not set
|
||||
# CONFIG_MTD_SPLIT_H3C_VFS is not set
|
||||
# CONFIG_MTD_SPLIT_JIMAGE_FW is not set
|
||||
# CONFIG_MTD_SPLIT_LZMA_FW is not set
|
||||
# CONFIG_MTD_SPLIT_MINOR_FW is not set
|
||||
|
||||
@@ -101,3 +101,8 @@ config MTD_SPLIT_ELF_FW
|
||||
bool "ELF loader firmware partition parser"
|
||||
depends on MTD_SPLIT_SUPPORT
|
||||
select MTD_SPLIT
|
||||
|
||||
config MTD_SPLIT_H3C_VFS
|
||||
bool "Parser finding rootfs appended to H3C VFS"
|
||||
depends on MTD_SPLIT_SUPPORT
|
||||
select MTD_SPLIT
|
||||
|
||||
@@ -15,3 +15,4 @@ obj-$(CONFIG_MTD_SPLIT_WRGG_FW) += mtdsplit_wrgg.o
|
||||
obj-$(CONFIG_MTD_SPLIT_MINOR_FW) += mtdsplit_minor.o
|
||||
obj-$(CONFIG_MTD_SPLIT_JIMAGE_FW) += mtdsplit_jimage.o
|
||||
obj-$(CONFIG_MTD_SPLIT_ELF_FW) += mtdsplit_elf.o
|
||||
obj-$(CONFIG_MTD_SPLIT_H3C_VFS) += mtdsplit_h3c_vfs.o
|
||||
|
||||
@@ -0,0 +1,170 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Some devices made by H3C use a "VFS" filesystem to store firmware images.
|
||||
* This parses the start of the filesystem to read the length of the first
|
||||
* file (the kernel image). It then searches for the rootfs after the end of
|
||||
* the file data. This driver assumes that the filesystem was generated by
|
||||
* mkh3cvfs, and only works if the filesystem matches the expected layout,
|
||||
* which includes the file name of the kernel image.
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
|
||||
#include "mtdsplit.h"
|
||||
|
||||
#define VFS_ERASEBLOCK_SIZE 0x10000
|
||||
#define VFS_BLOCK_SIZE 0x400
|
||||
#define VFS_BLOCKS_PER_ERASEBLOCK (VFS_ERASEBLOCK_SIZE / VFS_BLOCK_SIZE)
|
||||
|
||||
#define FORMAT_FLAG_OFFSET 0x0
|
||||
|
||||
#define FORMAT_FLAG (VFS_ERASEBLOCK_SIZE << 12 | VFS_BLOCK_SIZE)
|
||||
|
||||
#define FILE_ENTRY_OFFSET 0x800
|
||||
|
||||
#define FILE_ENTRY_FLAGS 0x3f
|
||||
#define FILE_ENTRY_PARENT_BLOCK 0
|
||||
#define FILE_ENTRY_PARENT_INDEX 0
|
||||
#define FILE_ENTRY_DATA_BLOCK 2
|
||||
#define FILE_ENTRY_NAME "openwrt-kernel.bin"
|
||||
|
||||
#define NR_PARTS 2
|
||||
|
||||
struct file_entry {
|
||||
uint8_t flags;
|
||||
|
||||
uint8_t res0[5];
|
||||
|
||||
uint16_t year;
|
||||
uint8_t month;
|
||||
uint8_t day;
|
||||
uint8_t hour;
|
||||
uint8_t minute;
|
||||
uint8_t second;
|
||||
|
||||
uint8_t res1[3];
|
||||
|
||||
uint32_t length;
|
||||
|
||||
uint32_t parent_block;
|
||||
uint16_t parent_index;
|
||||
|
||||
uint8_t res2[2];
|
||||
|
||||
uint32_t data_block;
|
||||
|
||||
char name[96];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
static inline size_t block_offset(int block)
|
||||
{
|
||||
return VFS_ERASEBLOCK_SIZE * (block / (VFS_BLOCKS_PER_ERASEBLOCK-1))
|
||||
+ VFS_BLOCK_SIZE * (1 + (block % (VFS_BLOCKS_PER_ERASEBLOCK-1)));
|
||||
}
|
||||
|
||||
static inline int block_count(size_t size)
|
||||
{
|
||||
return (size + VFS_BLOCK_SIZE - 1) / VFS_BLOCK_SIZE;
|
||||
}
|
||||
|
||||
static int mtdsplit_h3c_vfs_parse(struct mtd_info *mtd,
|
||||
const struct mtd_partition **pparts,
|
||||
struct mtd_part_parser_data *data)
|
||||
{
|
||||
struct mtd_partition *parts;
|
||||
uint32_t format_flag;
|
||||
struct file_entry file_entry;
|
||||
size_t retlen;
|
||||
int err;
|
||||
size_t kernel_size;
|
||||
size_t expected_offset;
|
||||
size_t rootfs_offset;
|
||||
|
||||
if (mtd->erasesize != VFS_ERASEBLOCK_SIZE)
|
||||
return -EINVAL;
|
||||
|
||||
/* Check format flag */
|
||||
err = mtd_read(mtd, FORMAT_FLAG_OFFSET, sizeof(format_flag), &retlen,
|
||||
(void *) &format_flag);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (retlen != sizeof(format_flag))
|
||||
return -EIO;
|
||||
|
||||
if (format_flag != FORMAT_FLAG)
|
||||
return -EINVAL;
|
||||
|
||||
/* Check file entry */
|
||||
err = mtd_read(mtd, FILE_ENTRY_OFFSET, sizeof(file_entry), &retlen,
|
||||
(void *) &file_entry);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (retlen != sizeof(file_entry))
|
||||
return -EIO;
|
||||
|
||||
if (file_entry.flags != FILE_ENTRY_FLAGS)
|
||||
return -EINVAL;
|
||||
|
||||
if (file_entry.parent_block != FILE_ENTRY_PARENT_BLOCK)
|
||||
return -EINVAL;
|
||||
|
||||
if (file_entry.parent_index != FILE_ENTRY_PARENT_INDEX)
|
||||
return -EINVAL;
|
||||
|
||||
if (file_entry.data_block != FILE_ENTRY_DATA_BLOCK)
|
||||
return -EINVAL;
|
||||
|
||||
if (strncmp(file_entry.name, FILE_ENTRY_NAME, sizeof(file_entry.name)) != 0)
|
||||
return -EINVAL;
|
||||
|
||||
/* Find rootfs offset */
|
||||
kernel_size = block_offset(file_entry.data_block +
|
||||
block_count(file_entry.length) - 1) +
|
||||
VFS_BLOCK_SIZE;
|
||||
|
||||
expected_offset = mtd_roundup_to_eb(kernel_size, mtd);
|
||||
|
||||
err = mtd_find_rootfs_from(mtd, expected_offset, mtd->size,
|
||||
&rootfs_offset, NULL);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
parts = kzalloc(NR_PARTS * sizeof(*parts), GFP_KERNEL);
|
||||
if (!parts)
|
||||
return -ENOMEM;
|
||||
|
||||
parts[0].name = KERNEL_PART_NAME;
|
||||
parts[0].offset = 0;
|
||||
parts[0].size = rootfs_offset;
|
||||
|
||||
parts[1].name = ROOTFS_PART_NAME;
|
||||
parts[1].offset = rootfs_offset;
|
||||
parts[1].size = mtd->size - rootfs_offset;
|
||||
|
||||
*pparts = parts;
|
||||
return NR_PARTS;
|
||||
}
|
||||
|
||||
static const struct of_device_id mtdsplit_h3c_vfs_of_match_table[] = {
|
||||
{ .compatible = "h3c,vfs-firmware" },
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, mtdsplit_h3c_vfs_of_match_table);
|
||||
|
||||
static struct mtd_part_parser mtdsplit_h3c_vfs_parser = {
|
||||
.owner = THIS_MODULE,
|
||||
.name = "h3c-vfs",
|
||||
.of_match_table = mtdsplit_h3c_vfs_of_match_table,
|
||||
.parse_fn = mtdsplit_h3c_vfs_parse,
|
||||
.type = MTD_PARSER_TYPE_FIRMWARE,
|
||||
};
|
||||
|
||||
module_mtd_part_parser(mtdsplit_h3c_vfs_parser);
|
||||
@@ -22,9 +22,20 @@ ucidef_set_bridge_device switch
|
||||
ucidef_set_interface_lan "$lan_list"
|
||||
|
||||
lan_mac=""
|
||||
lan_mac_start=""
|
||||
lan_mac_end=""
|
||||
label_mac=""
|
||||
case $board in
|
||||
hpe,1920-8g|\
|
||||
hpe,1920-16g|\
|
||||
hpe,1920-24g)
|
||||
label_mac=$(mtd_get_mac_binary factory 0x68)
|
||||
lan_mac=$label_mac
|
||||
mac_count1=$(hexdump -v -n 4 -s 0x110 -e '4 "%d"' $(find_mtd_part factory) 2>/dev/null)
|
||||
mac_count2=$(hexdump -v -n 4 -s 0x114 -e '4 "%d"' $(find_mtd_part factory) 2>/dev/null)
|
||||
lan_mac_start=$(macaddr_add $lan_mac 2)
|
||||
lan_mac_end=$(macaddr_add $lan_mac $((mac_count2-mac_count1)))
|
||||
;;
|
||||
*)
|
||||
lan_mac=$(mtd_get_mac_ascii u-boot-env2 mac_start)
|
||||
lan_mac_end=$(mtd_get_mac_ascii u-boot-env2 mac_end)
|
||||
@@ -36,10 +47,11 @@ esac
|
||||
ucidef_set_interface_macaddr "lan" $lan_mac
|
||||
ucidef_set_bridge_mac "$lan_mac"
|
||||
ucidef_set_network_device_mac eth0 $lan_mac
|
||||
[ -z "$lan_mac_start" ] && lan_mac_start=$lan_mac
|
||||
for lan in $lan_list; do
|
||||
ucidef_set_network_device_mac $lan $lan_mac
|
||||
[ -z "$lan_mac_end" ] || [ "$lan_mac" == "$lan_mac_end" ] && lan_mac=$(macaddr_setbit_la $lan_mac)
|
||||
lan_mac=$(macaddr_add $lan_mac 1)
|
||||
ucidef_set_network_device_mac $lan $lan_mac_start
|
||||
[ -z "$lan_mac_end" ] || [ "$lan_mac_start" == "$lan_mac_end" ] && lan_mac_start=$(macaddr_setbit_la $lan_mac_start)
|
||||
lan_mac_start=$(macaddr_add $lan_mac_start 1)
|
||||
done
|
||||
[ -n "$label_mac" ] && ucidef_set_label_macaddr $label_mac
|
||||
|
||||
|
||||
113
target/linux/realtek/dts-5.10/rtl8380_hpe_1920-8g.dts
Normal file
113
target/linux/realtek/dts-5.10/rtl8380_hpe_1920-8g.dts
Normal file
@@ -0,0 +1,113 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
|
||||
#include "rtl838x.dtsi"
|
||||
#include "rtl838x_hpe_1920.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "hpe,1920-8g", "realtek,rtl838x-soc";
|
||||
model = "HPE 1920-8G (JG920A)";
|
||||
|
||||
gpio1: rtl8231-gpio {
|
||||
compatible = "realtek,rtl8231-gpio";
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
indirect-access-bus-id = <0>;
|
||||
};
|
||||
|
||||
i2c0: i2c-gpio-0 {
|
||||
compatible = "i2c-gpio";
|
||||
sda-gpios = <&gpio1 23 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
||||
scl-gpios = <&gpio1 24 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
||||
i2c-gpio,delay-us = <2>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
sfp0: sfp-0 {
|
||||
compatible = "sff,sfp";
|
||||
i2c-bus = <&i2c0>;
|
||||
los-gpio = <&gpio1 26 GPIO_ACTIVE_HIGH>;
|
||||
mod-def0-gpio = <&gpio1 25 GPIO_ACTIVE_LOW>;
|
||||
// tx-fault and tx-disable unconnected
|
||||
};
|
||||
|
||||
i2c1: i2c-gpio-1 {
|
||||
compatible = "i2c-gpio";
|
||||
sda-gpios = <&gpio1 13 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
||||
scl-gpios = <&gpio1 14 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
||||
i2c-gpio,delay-us = <2>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
sfp1: sfp-1 {
|
||||
compatible = "sff,sfp";
|
||||
i2c-bus = <&i2c1>;
|
||||
los-gpio = <&gpio1 22 GPIO_ACTIVE_HIGH>;
|
||||
mod-def0-gpio = <&gpio1 21 GPIO_ACTIVE_LOW>;
|
||||
// tx-fault and tx-disable unconnected
|
||||
};
|
||||
};
|
||||
|
||||
ðernet0 {
|
||||
mdio: mdio-bus {
|
||||
compatible = "realtek,rtl838x-mdio";
|
||||
regmap = <ðernet0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
INTERNAL_PHY(8)
|
||||
INTERNAL_PHY(9)
|
||||
INTERNAL_PHY(10)
|
||||
INTERNAL_PHY(11)
|
||||
INTERNAL_PHY(12)
|
||||
INTERNAL_PHY(13)
|
||||
INTERNAL_PHY(14)
|
||||
INTERNAL_PHY(15)
|
||||
|
||||
INTERNAL_PHY(24)
|
||||
INTERNAL_PHY(26)
|
||||
};
|
||||
};
|
||||
|
||||
&switch0 {
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
SWITCH_PORT(8, 1, internal)
|
||||
SWITCH_PORT(9, 2, internal)
|
||||
SWITCH_PORT(10, 3, internal)
|
||||
SWITCH_PORT(11, 4, internal)
|
||||
SWITCH_PORT(12, 5, internal)
|
||||
SWITCH_PORT(13, 6, internal)
|
||||
SWITCH_PORT(14, 7, internal)
|
||||
SWITCH_PORT(15, 8, internal)
|
||||
|
||||
port@24 {
|
||||
reg = <24>;
|
||||
label = "lan9";
|
||||
phy-mode = "1000base-x";
|
||||
managed = "in-band-status";
|
||||
sfp = <&sfp0>;
|
||||
};
|
||||
|
||||
port@26 {
|
||||
reg = <26>;
|
||||
label = "lan10";
|
||||
phy-mode = "1000base-x";
|
||||
managed = "in-band-status";
|
||||
sfp = <&sfp1>;
|
||||
};
|
||||
|
||||
port@28 {
|
||||
ethernet = <ðernet0>;
|
||||
reg = <28>;
|
||||
phy-mode = "internal";
|
||||
fixed-link {
|
||||
speed = <1000>;
|
||||
full-duplex;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -55,7 +55,6 @@
|
||||
partition@80000 {
|
||||
label = "u-boot-env";
|
||||
reg = <0x00080000 0x40000>;
|
||||
read-only;
|
||||
};
|
||||
partition@c0000 {
|
||||
label = "board-name";
|
||||
|
||||
48
target/linux/realtek/dts-5.10/rtl8382_hpe_1920-16g.dts
Normal file
48
target/linux/realtek/dts-5.10/rtl8382_hpe_1920-16g.dts
Normal file
@@ -0,0 +1,48 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
|
||||
#include "rtl8382_hpe_1920.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "hpe,1920-16g", "realtek,rtl838x-soc";
|
||||
model = "HPE 1920-16G (JG923A)";
|
||||
};
|
||||
|
||||
&switch0 {
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
SWITCH_PORT(8, 1, internal)
|
||||
SWITCH_PORT(9, 2, internal)
|
||||
SWITCH_PORT(10, 3, internal)
|
||||
SWITCH_PORT(11, 4, internal)
|
||||
SWITCH_PORT(12, 5, internal)
|
||||
SWITCH_PORT(13, 6, internal)
|
||||
SWITCH_PORT(14, 7, internal)
|
||||
SWITCH_PORT(15, 8, internal)
|
||||
|
||||
SWITCH_PORT(16, 9, qsgmii)
|
||||
SWITCH_PORT(17, 10, qsgmii)
|
||||
SWITCH_PORT(18, 11, qsgmii)
|
||||
SWITCH_PORT(19, 12, qsgmii)
|
||||
SWITCH_PORT(20, 13, qsgmii)
|
||||
SWITCH_PORT(21, 14, qsgmii)
|
||||
SWITCH_PORT(22, 15, qsgmii)
|
||||
SWITCH_PORT(23, 16, qsgmii)
|
||||
|
||||
SWITCH_PORT(24, 17, qsgmii)
|
||||
SWITCH_PORT(25, 18, qsgmii)
|
||||
SWITCH_PORT(26, 19, qsgmii)
|
||||
SWITCH_PORT(27, 20, qsgmii)
|
||||
|
||||
port@28 {
|
||||
ethernet = <ðernet0>;
|
||||
reg = <28>;
|
||||
phy-mode = "internal";
|
||||
fixed-link {
|
||||
speed = <1000>;
|
||||
full-duplex;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
68
target/linux/realtek/dts-5.10/rtl8382_hpe_1920-24g.dts
Normal file
68
target/linux/realtek/dts-5.10/rtl8382_hpe_1920-24g.dts
Normal file
@@ -0,0 +1,68 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
|
||||
#include "rtl8382_hpe_1920.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "hpe,1920-24g", "realtek,rtl838x-soc";
|
||||
model = "HPE 1920-24G (JG924A)";
|
||||
};
|
||||
|
||||
&mdio {
|
||||
EXTERNAL_PHY(0)
|
||||
EXTERNAL_PHY(1)
|
||||
EXTERNAL_PHY(2)
|
||||
EXTERNAL_PHY(3)
|
||||
EXTERNAL_PHY(4)
|
||||
EXTERNAL_PHY(5)
|
||||
EXTERNAL_PHY(6)
|
||||
EXTERNAL_PHY(7)
|
||||
};
|
||||
|
||||
&switch0 {
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
SWITCH_PORT(0, 1, qsgmii)
|
||||
SWITCH_PORT(1, 2, qsgmii)
|
||||
SWITCH_PORT(2, 3, qsgmii)
|
||||
SWITCH_PORT(3, 4, qsgmii)
|
||||
SWITCH_PORT(4, 5, qsgmii)
|
||||
SWITCH_PORT(5, 6, qsgmii)
|
||||
SWITCH_PORT(6, 7, qsgmii)
|
||||
SWITCH_PORT(7, 8, qsgmii)
|
||||
|
||||
SWITCH_PORT(8, 9, internal)
|
||||
SWITCH_PORT(9, 10, internal)
|
||||
SWITCH_PORT(10, 11, internal)
|
||||
SWITCH_PORT(11, 12, internal)
|
||||
SWITCH_PORT(12, 13, internal)
|
||||
SWITCH_PORT(13, 14, internal)
|
||||
SWITCH_PORT(14, 15, internal)
|
||||
SWITCH_PORT(15, 16, internal)
|
||||
|
||||
SWITCH_PORT(16, 17, qsgmii)
|
||||
SWITCH_PORT(17, 18, qsgmii)
|
||||
SWITCH_PORT(18, 19, qsgmii)
|
||||
SWITCH_PORT(19, 20, qsgmii)
|
||||
SWITCH_PORT(20, 21, qsgmii)
|
||||
SWITCH_PORT(21, 22, qsgmii)
|
||||
SWITCH_PORT(22, 23, qsgmii)
|
||||
SWITCH_PORT(23, 24, qsgmii)
|
||||
|
||||
SWITCH_PORT(24, 25, qsgmii)
|
||||
SWITCH_PORT(25, 26, qsgmii)
|
||||
SWITCH_PORT(26, 27, qsgmii)
|
||||
SWITCH_PORT(27, 28, qsgmii)
|
||||
|
||||
port@28 {
|
||||
ethernet = <ðernet0>;
|
||||
reg = <28>;
|
||||
phy-mode = "internal";
|
||||
fixed-link {
|
||||
speed = <1000>;
|
||||
full-duplex;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
117
target/linux/realtek/dts-5.10/rtl8382_hpe_1920.dtsi
Normal file
117
target/linux/realtek/dts-5.10/rtl8382_hpe_1920.dtsi
Normal file
@@ -0,0 +1,117 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
|
||||
#include "rtl838x.dtsi"
|
||||
#include "rtl838x_hpe_1920.dtsi"
|
||||
|
||||
/ {
|
||||
gpio1: rtl8231-gpio {
|
||||
compatible = "realtek,rtl8231-gpio";
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
indirect-access-bus-id = <0>;
|
||||
};
|
||||
|
||||
i2c0: i2c-gpio-0 {
|
||||
compatible = "i2c-gpio";
|
||||
sda-gpios = <&gpio1 13 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
||||
scl-gpios = <&gpio1 14 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
||||
i2c-gpio,delay-us = <2>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
sfp0: sfp-0 {
|
||||
compatible = "sff,sfp";
|
||||
i2c-bus = <&i2c0>;
|
||||
los-gpio = <&gpio1 22 GPIO_ACTIVE_HIGH>;
|
||||
mod-def0-gpio = <&gpio1 21 GPIO_ACTIVE_LOW>;
|
||||
// tx-fault unconnected
|
||||
// tx-disable connected to RTL8214FC
|
||||
};
|
||||
|
||||
i2c1: i2c-gpio-1 {
|
||||
compatible = "i2c-gpio";
|
||||
sda-gpios = <&gpio1 23 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
||||
scl-gpios = <&gpio1 24 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
||||
i2c-gpio,delay-us = <2>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
sfp1: sfp-1 {
|
||||
compatible = "sff,sfp";
|
||||
i2c-bus = <&i2c1>;
|
||||
los-gpio = <&gpio1 26 GPIO_ACTIVE_HIGH>;
|
||||
mod-def0-gpio = <&gpio1 25 GPIO_ACTIVE_LOW>;
|
||||
// tx-fault unconnected
|
||||
// tx-disable connected to RTL8214FC
|
||||
};
|
||||
|
||||
i2c2: i2c-gpio-2 {
|
||||
compatible = "i2c-gpio";
|
||||
sda-gpios = <&gpio1 27 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
||||
scl-gpios = <&gpio1 28 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
||||
i2c-gpio,delay-us = <2>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
sfp2: sfp-2 {
|
||||
compatible = "sff,sfp";
|
||||
i2c-bus = <&i2c2>;
|
||||
los-gpio = <&gpio1 30 GPIO_ACTIVE_HIGH>;
|
||||
mod-def0-gpio = <&gpio1 29 GPIO_ACTIVE_LOW>;
|
||||
// tx-fault unconnected
|
||||
// tx-disable connected to RTL8214FC
|
||||
};
|
||||
|
||||
i2c3: i2c-gpio-3 {
|
||||
compatible = "i2c-gpio";
|
||||
sda-gpios = <&gpio1 31 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
||||
scl-gpios = <&gpio1 32 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
|
||||
i2c-gpio,delay-us = <2>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
sfp3: sfp-3 {
|
||||
compatible = "sff,sfp";
|
||||
i2c-bus = <&i2c3>;
|
||||
los-gpio = <&gpio1 34 GPIO_ACTIVE_HIGH>;
|
||||
mod-def0-gpio = <&gpio1 33 GPIO_ACTIVE_LOW>;
|
||||
// tx-fault unconnected
|
||||
// tx-disable connected to RTL8214FC
|
||||
};
|
||||
};
|
||||
|
||||
ðernet0 {
|
||||
mdio: mdio-bus {
|
||||
compatible = "realtek,rtl838x-mdio";
|
||||
regmap = <ðernet0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
INTERNAL_PHY(8)
|
||||
INTERNAL_PHY(9)
|
||||
INTERNAL_PHY(10)
|
||||
INTERNAL_PHY(11)
|
||||
INTERNAL_PHY(12)
|
||||
INTERNAL_PHY(13)
|
||||
INTERNAL_PHY(14)
|
||||
INTERNAL_PHY(15)
|
||||
|
||||
EXTERNAL_PHY(16)
|
||||
EXTERNAL_PHY(17)
|
||||
EXTERNAL_PHY(18)
|
||||
EXTERNAL_PHY(19)
|
||||
EXTERNAL_PHY(20)
|
||||
EXTERNAL_PHY(21)
|
||||
EXTERNAL_PHY(22)
|
||||
EXTERNAL_PHY(23)
|
||||
|
||||
EXTERNAL_SFP_PHY_FULL(24, 0)
|
||||
EXTERNAL_SFP_PHY_FULL(25, 1)
|
||||
EXTERNAL_SFP_PHY_FULL(26, 2)
|
||||
EXTERNAL_SFP_PHY_FULL(27, 3)
|
||||
};
|
||||
};
|
||||
@@ -27,6 +27,13 @@
|
||||
reg = <##n>; \
|
||||
};
|
||||
|
||||
#define EXTERNAL_SFP_PHY_FULL(n, s) \
|
||||
phy##n: ethernet-phy@##n { \
|
||||
compatible = "ethernet-phy-ieee802.3-c22"; \
|
||||
sfp = <&sfp##s>; \
|
||||
reg = <##n>; \
|
||||
};
|
||||
|
||||
#define SWITCH_PORT(n, s, m) \
|
||||
port@##n { \
|
||||
reg = <##n>; \
|
||||
|
||||
96
target/linux/realtek/dts-5.10/rtl838x_hpe_1920.dtsi
Normal file
96
target/linux/realtek/dts-5.10/rtl838x_hpe_1920.dtsi
Normal file
@@ -0,0 +1,96 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||
|
||||
#include <dt-bindings/input/input.h>
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
|
||||
/ {
|
||||
chosen {
|
||||
bootargs = "console=ttyS0,38400";
|
||||
};
|
||||
|
||||
memory@0 {
|
||||
device_type = "memory";
|
||||
reg = <0x0 0x8000000>;
|
||||
};
|
||||
|
||||
watchdog1: watchdog {
|
||||
// PT7A7514
|
||||
compatible = "linux,wdt-gpio";
|
||||
gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>;
|
||||
hw_algo = "toggle";
|
||||
hw_margin_ms = <1000>;
|
||||
always-running;
|
||||
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinmux_disable_sys_led>;
|
||||
};
|
||||
};
|
||||
|
||||
&watchdog0 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
&spi0 {
|
||||
status = "okay";
|
||||
|
||||
flash@0 {
|
||||
compatible = "jedec,spi-nor";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <50000000>;
|
||||
m25p,fast-read;
|
||||
|
||||
partitions {
|
||||
compatible = "fixed-partitions";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
partition@0 {
|
||||
label = "bootware_basic";
|
||||
reg = <0x0 0x50000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
partition@0x60000 {
|
||||
label = "bootware_data";
|
||||
reg = <0x60000 0x30000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
partition@0x90000 {
|
||||
label = "bootware_extend";
|
||||
reg = <0x90000 0x40000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
partition@0x100000 {
|
||||
label = "bootware_basic_backup";
|
||||
reg = <0x100000 0x50000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
partition@0x160000 {
|
||||
label = "bootware_data_backup";
|
||||
reg = <0x160000 0x30000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
partition@0x190000 {
|
||||
label = "bootware_extend_backup";
|
||||
reg = <0x190000 0x40000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
partition@0x300000 {
|
||||
label = "firmware";
|
||||
compatible = "h3c,vfs-firmware";
|
||||
reg = <0x300000 0x1cf0000>;
|
||||
};
|
||||
|
||||
partition@0x1ff0000 {
|
||||
label = "factory";
|
||||
reg = <0x1ff0000 0x10000>;
|
||||
read-only;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -1805,13 +1805,20 @@ irqreturn_t rtl838x_switch_irq(int irq, void *dev_id)
|
||||
|
||||
int rtl838x_smi_wait_op(int timeout)
|
||||
{
|
||||
do {
|
||||
timeout--;
|
||||
udelay(10);
|
||||
} while ((sw_r32(RTL838X_SMI_ACCESS_PHY_CTRL_1) & 0x1) && (timeout >= 0));
|
||||
if (timeout <= 0)
|
||||
return -1;
|
||||
return 0;
|
||||
unsigned long end = jiffies + usecs_to_jiffies(timeout);
|
||||
|
||||
while (1) {
|
||||
if (!(sw_r32(RTL838X_SMI_ACCESS_PHY_CTRL_1) & 0x1))
|
||||
return 0;
|
||||
|
||||
if (time_after(jiffies, end))
|
||||
break;
|
||||
|
||||
usleep_range(10, 20);
|
||||
}
|
||||
|
||||
pr_err("rtl838x_smi_wait_op: timeout\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1832,7 +1839,7 @@ int rtl838x_read_phy(u32 port, u32 page, u32 reg, u32 *val)
|
||||
|
||||
mutex_lock(&smi_lock);
|
||||
|
||||
if (rtl838x_smi_wait_op(10000))
|
||||
if (rtl838x_smi_wait_op(100000))
|
||||
goto timeout;
|
||||
|
||||
sw_w32_mask(0xffff0000, port << 16, RTL838X_SMI_ACCESS_PHY_CTRL_2);
|
||||
@@ -1842,7 +1849,7 @@ int rtl838x_read_phy(u32 port, u32 page, u32 reg, u32 *val)
|
||||
sw_w32(v | park_page, RTL838X_SMI_ACCESS_PHY_CTRL_1);
|
||||
sw_w32_mask(0, 1, RTL838X_SMI_ACCESS_PHY_CTRL_1);
|
||||
|
||||
if (rtl838x_smi_wait_op(10000))
|
||||
if (rtl838x_smi_wait_op(100000))
|
||||
goto timeout;
|
||||
|
||||
*val = sw_r32(RTL838X_SMI_ACCESS_PHY_CTRL_2) & 0xffff;
|
||||
@@ -1868,7 +1875,7 @@ int rtl838x_write_phy(u32 port, u32 page, u32 reg, u32 val)
|
||||
return -ENOTSUPP;
|
||||
|
||||
mutex_lock(&smi_lock);
|
||||
if (rtl838x_smi_wait_op(10000))
|
||||
if (rtl838x_smi_wait_op(100000))
|
||||
goto timeout;
|
||||
|
||||
sw_w32(BIT(port), RTL838X_SMI_ACCESS_PHY_CTRL_0);
|
||||
@@ -1881,7 +1888,7 @@ int rtl838x_write_phy(u32 port, u32 page, u32 reg, u32 val)
|
||||
sw_w32(v | park_page, RTL838X_SMI_ACCESS_PHY_CTRL_1);
|
||||
sw_w32_mask(0, 1, RTL838X_SMI_ACCESS_PHY_CTRL_1);
|
||||
|
||||
if (rtl838x_smi_wait_op(10000))
|
||||
if (rtl838x_smi_wait_op(100000))
|
||||
goto timeout;
|
||||
|
||||
mutex_unlock(&smi_lock);
|
||||
@@ -1901,7 +1908,7 @@ int rtl838x_read_mmd_phy(u32 port, u32 addr, u32 reg, u32 *val)
|
||||
|
||||
mutex_lock(&smi_lock);
|
||||
|
||||
if (rtl838x_smi_wait_op(10000))
|
||||
if (rtl838x_smi_wait_op(100000))
|
||||
goto timeout;
|
||||
|
||||
sw_w32(1 << port, RTL838X_SMI_ACCESS_PHY_CTRL_0);
|
||||
@@ -1916,7 +1923,7 @@ int rtl838x_read_mmd_phy(u32 port, u32 addr, u32 reg, u32 *val)
|
||||
v = 1 << 1 | 0 << 2 | 1;
|
||||
sw_w32(v, RTL838X_SMI_ACCESS_PHY_CTRL_1);
|
||||
|
||||
if (rtl838x_smi_wait_op(10000))
|
||||
if (rtl838x_smi_wait_op(100000))
|
||||
goto timeout;
|
||||
|
||||
*val = sw_r32(RTL838X_SMI_ACCESS_PHY_CTRL_2) & 0xffff;
|
||||
@@ -1940,7 +1947,7 @@ int rtl838x_write_mmd_phy(u32 port, u32 addr, u32 reg, u32 val)
|
||||
val &= 0xffff;
|
||||
mutex_lock(&smi_lock);
|
||||
|
||||
if (rtl838x_smi_wait_op(10000))
|
||||
if (rtl838x_smi_wait_op(100000))
|
||||
goto timeout;
|
||||
|
||||
sw_w32(1 << port, RTL838X_SMI_ACCESS_PHY_CTRL_0);
|
||||
@@ -1954,7 +1961,7 @@ int rtl838x_write_mmd_phy(u32 port, u32 addr, u32 reg, u32 val)
|
||||
v = 1 << 1 | 1 << 2 | 1;
|
||||
sw_w32(v, RTL838X_SMI_ACCESS_PHY_CTRL_1);
|
||||
|
||||
if (rtl838x_smi_wait_op(10000))
|
||||
if (rtl838x_smi_wait_op(100000))
|
||||
goto timeout;
|
||||
|
||||
mutex_unlock(&smi_lock);
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/firmware.h>
|
||||
#include <linux/crc32.h>
|
||||
#include <linux/sfp.h>
|
||||
|
||||
#include <asm/mach-rtl838x/mach-rtl83xx.h>
|
||||
#include "rtl83xx-phy.h"
|
||||
@@ -934,66 +935,7 @@ static int rtl8218b_ext_match_phy_device(struct phy_device *phydev)
|
||||
return phydev->phy_id == PHY_ID_RTL8218B_E;
|
||||
}
|
||||
|
||||
static void rtl8380_rtl8214fc_media_set(struct phy_device *phydev, bool set_fibre)
|
||||
{
|
||||
int mac = phydev->mdio.addr;
|
||||
|
||||
static int reg[] = {16, 19, 20, 21};
|
||||
int val, media, power;
|
||||
|
||||
pr_info("%s: port %d, set_fibre: %d\n", __func__, mac, set_fibre);
|
||||
phy_package_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_INTERNAL);
|
||||
val = phy_package_read_paged(phydev, RTL821X_PAGE_PORT, reg[mac % 4]);
|
||||
|
||||
media = (val >> 10) & 0x3;
|
||||
pr_info("Current media %x\n", media);
|
||||
if (media & 0x2) {
|
||||
pr_info("Powering off COPPER\n");
|
||||
phy_package_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_COPPER);
|
||||
/* Ensure power is off */
|
||||
power = phy_package_read_paged(phydev, RTL821X_PAGE_POWER, 0x10);
|
||||
if (!(power & (1 << 11)))
|
||||
phy_package_write_paged(phydev, RTL821X_PAGE_POWER, 0x10, power | (1 << 11));
|
||||
} else {
|
||||
pr_info("Powering off FIBRE");
|
||||
phy_package_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_FIBRE);
|
||||
/* Ensure power is off */
|
||||
power = phy_package_read_paged(phydev, RTL821X_PAGE_POWER, 0x10);
|
||||
if (!(power & (1 << 11)))
|
||||
phy_package_write_paged(phydev, RTL821X_PAGE_POWER, 0x10, power | (1 << 11));
|
||||
}
|
||||
|
||||
if (set_fibre) {
|
||||
val |= 1 << 10;
|
||||
val &= ~(1 << 11);
|
||||
} else {
|
||||
val |= 1 << 10;
|
||||
val |= 1 << 11;
|
||||
}
|
||||
phy_package_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_INTERNAL);
|
||||
phy_package_write_paged(phydev, RTL821X_PAGE_PORT, reg[mac % 4], val);
|
||||
phy_package_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_AUTO);
|
||||
|
||||
if (set_fibre) {
|
||||
pr_info("Powering on FIBRE");
|
||||
phy_package_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_FIBRE);
|
||||
/* Ensure power is off */
|
||||
power = phy_package_read_paged(phydev, RTL821X_PAGE_POWER, 0x10);
|
||||
if (power & (1 << 11))
|
||||
phy_package_write_paged(phydev, RTL821X_PAGE_POWER, 0x10, power & ~(1 << 11));
|
||||
} else {
|
||||
pr_info("Powering on COPPER\n");
|
||||
phy_package_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_COPPER);
|
||||
/* Ensure power is off */
|
||||
power = phy_package_read_paged(phydev, RTL821X_PAGE_POWER, 0x10);
|
||||
if (power & (1 << 11))
|
||||
phy_package_write_paged(phydev, RTL821X_PAGE_POWER, 0x10, power & ~(1 << 11));
|
||||
}
|
||||
|
||||
phy_package_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_AUTO);
|
||||
}
|
||||
|
||||
static bool rtl8380_rtl8214fc_media_is_fibre(struct phy_device *phydev)
|
||||
static bool rtl8214fc_media_is_fibre(struct phy_device *phydev)
|
||||
{
|
||||
int mac = phydev->mdio.addr;
|
||||
|
||||
@@ -1003,11 +945,88 @@ static bool rtl8380_rtl8214fc_media_is_fibre(struct phy_device *phydev)
|
||||
phy_package_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_INTERNAL);
|
||||
val = phy_package_read_paged(phydev, RTL821X_PAGE_PORT, reg[mac % 4]);
|
||||
phy_package_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_AUTO);
|
||||
if (val & (1 << 11))
|
||||
|
||||
if (val & BIT(11))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static void rtl8214fc_power_set(struct phy_device *phydev, int port, bool on)
|
||||
{
|
||||
char *state = on ? "on" : "off";
|
||||
|
||||
if (port == PORT_FIBRE) {
|
||||
pr_info("%s: Powering %s FIBRE (port %d)\n", __func__, state, phydev->mdio.addr);
|
||||
phy_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_FIBRE);
|
||||
} else {
|
||||
pr_info("%s: Powering %s COPPER (port %d)\n", __func__, state, phydev->mdio.addr);
|
||||
phy_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_COPPER);
|
||||
}
|
||||
|
||||
if (on) {
|
||||
phy_modify_paged(phydev, RTL821X_PAGE_POWER, 0x10, BIT(11), 0);
|
||||
} else {
|
||||
phy_modify_paged(phydev, RTL821X_PAGE_POWER, 0x10, 0, BIT(11));
|
||||
}
|
||||
|
||||
phy_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_AUTO);
|
||||
}
|
||||
|
||||
static int rtl8214fc_suspend(struct phy_device *phydev)
|
||||
{
|
||||
rtl8214fc_power_set(phydev, PORT_MII, false);
|
||||
rtl8214fc_power_set(phydev, PORT_FIBRE, false);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rtl8214fc_resume(struct phy_device *phydev)
|
||||
{
|
||||
if (rtl8214fc_media_is_fibre(phydev)) {
|
||||
rtl8214fc_power_set(phydev, PORT_MII, false);
|
||||
rtl8214fc_power_set(phydev, PORT_FIBRE, true);
|
||||
} else {
|
||||
rtl8214fc_power_set(phydev, PORT_FIBRE, false);
|
||||
rtl8214fc_power_set(phydev, PORT_MII, true);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void rtl8214fc_media_set(struct phy_device *phydev, bool set_fibre)
|
||||
{
|
||||
int mac = phydev->mdio.addr;
|
||||
|
||||
static int reg[] = {16, 19, 20, 21};
|
||||
int val;
|
||||
|
||||
pr_info("%s: port %d, set_fibre: %d\n", __func__, mac, set_fibre);
|
||||
phy_package_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_INTERNAL);
|
||||
val = phy_package_read_paged(phydev, RTL821X_PAGE_PORT, reg[mac % 4]);
|
||||
|
||||
val |= BIT(10);
|
||||
if (set_fibre) {
|
||||
val &= ~BIT(11);
|
||||
} else {
|
||||
val |= BIT(11);
|
||||
}
|
||||
|
||||
phy_package_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_INTERNAL);
|
||||
phy_package_write_paged(phydev, RTL821X_PAGE_PORT, reg[mac % 4], val);
|
||||
phy_package_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_AUTO);
|
||||
|
||||
if (!phydev->suspended) {
|
||||
if (set_fibre) {
|
||||
rtl8214fc_power_set(phydev, PORT_MII, false);
|
||||
rtl8214fc_power_set(phydev, PORT_FIBRE, true);
|
||||
} else {
|
||||
rtl8214fc_power_set(phydev, PORT_FIBRE, false);
|
||||
rtl8214fc_power_set(phydev, PORT_MII, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int rtl8214fc_set_port(struct phy_device *phydev, int port)
|
||||
{
|
||||
bool is_fibre = (port == PORT_FIBRE ? true : false);
|
||||
@@ -1015,7 +1034,7 @@ static int rtl8214fc_set_port(struct phy_device *phydev, int port)
|
||||
|
||||
pr_debug("%s port %d to %d\n", __func__, addr, port);
|
||||
|
||||
rtl8380_rtl8214fc_media_set(phydev, is_fibre);
|
||||
rtl8214fc_media_set(phydev, is_fibre);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1024,7 +1043,7 @@ static int rtl8214fc_get_port(struct phy_device *phydev)
|
||||
int addr = phydev->mdio.addr;
|
||||
|
||||
pr_debug("%s: port %d\n", __func__, addr);
|
||||
if (rtl8380_rtl8214fc_media_is_fibre(phydev))
|
||||
if (rtl8214fc_media_is_fibre(phydev))
|
||||
return PORT_FIBRE;
|
||||
return PORT_MII;
|
||||
}
|
||||
@@ -1131,7 +1150,7 @@ static int rtl8214fc_set_eee(struct phy_device *phydev,
|
||||
|
||||
pr_debug("In %s port %d, enabled %d\n", __func__, port, e->eee_enabled);
|
||||
|
||||
if (rtl8380_rtl8214fc_media_is_fibre(phydev)) {
|
||||
if (rtl8214fc_media_is_fibre(phydev)) {
|
||||
netdev_err(phydev->attached_dev, "Port %d configured for FIBRE", port);
|
||||
return -ENOTSUPP;
|
||||
}
|
||||
@@ -1184,7 +1203,7 @@ static int rtl8214fc_get_eee(struct phy_device *phydev,
|
||||
int addr = phydev->mdio.addr;
|
||||
|
||||
pr_debug("In %s port %d, enabled %d\n", __func__, addr, e->eee_enabled);
|
||||
if (rtl8380_rtl8214fc_media_is_fibre(phydev)) {
|
||||
if (rtl8214fc_media_is_fibre(phydev)) {
|
||||
netdev_err(phydev->attached_dev, "Port %d configured for FIBRE", addr);
|
||||
return -ENOTSUPP;
|
||||
}
|
||||
@@ -3658,6 +3677,29 @@ int rtl931x_link_sts_get(u32 sds)
|
||||
return sts1;
|
||||
}
|
||||
|
||||
static int rtl8214fc_sfp_insert(void *upstream, const struct sfp_eeprom_id *id)
|
||||
{
|
||||
struct phy_device *phydev = upstream;
|
||||
|
||||
rtl8214fc_media_set(phydev, true);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void rtl8214fc_sfp_remove(void *upstream)
|
||||
{
|
||||
struct phy_device *phydev = upstream;
|
||||
|
||||
rtl8214fc_media_set(phydev, false);
|
||||
}
|
||||
|
||||
static const struct sfp_upstream_ops rtl8214fc_sfp_ops = {
|
||||
.attach = phy_sfp_attach,
|
||||
.detach = phy_sfp_detach,
|
||||
.module_insert = rtl8214fc_sfp_insert,
|
||||
.module_remove = rtl8214fc_sfp_remove,
|
||||
};
|
||||
|
||||
static int rtl8214fc_phy_probe(struct phy_device *phydev)
|
||||
{
|
||||
struct device *dev = &phydev->mdio.dev;
|
||||
@@ -3681,7 +3723,7 @@ static int rtl8214fc_phy_probe(struct phy_device *phydev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return phy_sfp_probe(phydev, &rtl8214fc_sfp_ops);
|
||||
}
|
||||
|
||||
static int rtl8214c_phy_probe(struct phy_device *phydev)
|
||||
@@ -3842,8 +3884,8 @@ static struct phy_driver rtl83xx_phy_driver[] = {
|
||||
.flags = PHY_HAS_REALTEK_PAGES,
|
||||
.match_phy_device = rtl8214fc_match_phy_device,
|
||||
.probe = rtl8214fc_phy_probe,
|
||||
.suspend = genphy_suspend,
|
||||
.resume = genphy_resume,
|
||||
.suspend = rtl8214fc_suspend,
|
||||
.resume = rtl8214fc_resume,
|
||||
.set_loopback = genphy_loopback,
|
||||
.set_port = rtl8214fc_set_port,
|
||||
.get_port = rtl8214fc_get_port,
|
||||
|
||||
@@ -8,6 +8,7 @@ KERNEL_ENTRY = 0x80000400
|
||||
|
||||
DEVICE_VARS += ZYXEL_VERS DLINK_KERNEL_PART_SIZE
|
||||
DEVICE_VARS += CAMEO_KERNEL_PART CAMEO_ROOTFS_PART CAMEO_CUSTOMER_SIGNATURE CAMEO_BOARD_VERSION
|
||||
DEVICE_VARS += H3C_PRODUCT_ID H3C_DEVICE_ID
|
||||
|
||||
define Build/zyxel-vers
|
||||
( echo VERS;\
|
||||
@@ -41,6 +42,43 @@ define Build/dlink-headers
|
||||
cat $@.kernel_part.hex $@.rootfs_part.hex > $@
|
||||
endef
|
||||
|
||||
define Build/7z
|
||||
$(STAGING_DIR_HOST)/bin/7zr a $(@).new -t7z -m0=lzma $(@)
|
||||
mv $@.new $@
|
||||
endef
|
||||
|
||||
define Build/h3c-image
|
||||
$(STAGING_DIR_HOST)/bin/mkh3cimg \
|
||||
-i $(@) \
|
||||
-o $(@).new \
|
||||
-c 7z \
|
||||
-p $(H3C_PRODUCT_ID) \
|
||||
-d $(H3C_DEVICE_ID)
|
||||
mv $@.new $@
|
||||
endef
|
||||
|
||||
define Build/h3c-vfs
|
||||
$(STAGING_DIR_HOST)/bin/mkh3cvfs \
|
||||
-i $(@) \
|
||||
-o $(@).new \
|
||||
-f openwrt-kernel.bin
|
||||
mv $@.new $@
|
||||
endef
|
||||
|
||||
define Build/relocate-kernel
|
||||
rm -rf $@.relocate
|
||||
$(CP) ../../generic/image/relocate $@.relocate
|
||||
$(MAKE) -j1 -C $@.relocate KERNEL_ADDR=$(KERNEL_LOADADDR) LZMA_TEXT_START=0x82000000 \
|
||||
CROSS_COMPILE=$(TARGET_CROSS)
|
||||
( \
|
||||
dd if=$@.relocate/loader.bin bs=32 conv=sync && \
|
||||
perl -e '@s = stat("$@"); print pack("N", @s[7])' && \
|
||||
cat "$@" \
|
||||
) > "$@.new"
|
||||
mv "$@.new" "$@"
|
||||
rm -rf $@.relocate
|
||||
endef
|
||||
|
||||
define Device/Default
|
||||
PROFILES = Default
|
||||
KERNEL := kernel-bin | append-dtb | gzip | uImage gzip
|
||||
@@ -52,6 +90,17 @@ define Device/Default
|
||||
check-size | append-metadata
|
||||
endef
|
||||
|
||||
define Device/hpe_1920
|
||||
DEVICE_VENDOR := HPE
|
||||
IMAGE_SIZE := 29632k
|
||||
BLOCKSIZE := 64k
|
||||
H3C_PRODUCT_ID := 0x3c010501
|
||||
KERNEL := kernel-bin | append-dtb | relocate-kernel | 7z | h3c-image | h3c-vfs
|
||||
KERNEL_INITRAMFS := kernel-bin | append-dtb | relocate-kernel | 7z | h3c-image
|
||||
IMAGE/sysupgrade.bin := append-kernel | pad-to $$$$(BLOCKSIZE) | append-rootfs | \
|
||||
pad-rootfs | check-size | append-metadata
|
||||
endef
|
||||
|
||||
# "NGE" refers to the uImage magic
|
||||
define Device/netgear_nge
|
||||
KERNEL := kernel-bin | append-dtb | lzma | uImage lzma
|
||||
|
||||
@@ -65,6 +65,30 @@ define Device/engenius_ews2910p
|
||||
endef
|
||||
TARGET_DEVICES += engenius_ews2910p
|
||||
|
||||
define Device/hpe_1920-8g
|
||||
$(Device/hpe_1920)
|
||||
SOC := rtl8380
|
||||
DEVICE_MODEL := 1920-8G (JG920A)
|
||||
H3C_DEVICE_ID := 0x00010023
|
||||
endef
|
||||
TARGET_DEVICES += hpe_1920-8g
|
||||
|
||||
define Device/hpe_1920-16g
|
||||
$(Device/hpe_1920)
|
||||
SOC := rtl8382
|
||||
DEVICE_MODEL := 1920-16G (JG923A)
|
||||
H3C_DEVICE_ID := 0x00010026
|
||||
endef
|
||||
TARGET_DEVICES += hpe_1920-16g
|
||||
|
||||
define Device/hpe_1920-24g
|
||||
$(Device/hpe_1920)
|
||||
SOC := rtl8382
|
||||
DEVICE_MODEL := 1920-24G (JG924A)
|
||||
H3C_DEVICE_ID := 0x00010027
|
||||
endef
|
||||
TARGET_DEVICES += hpe_1920-24g
|
||||
|
||||
define Device/inaba_aml2-17gp
|
||||
SOC := rtl8382
|
||||
IMAGE_SIZE := 13504k
|
||||
|
||||
@@ -74,6 +74,8 @@ CONFIG_GPIO_PCA953X=y
|
||||
CONFIG_GPIO_PCA953X_IRQ=y
|
||||
CONFIG_GPIO_REALTEK_OTTO=y
|
||||
CONFIG_GPIO_RTL8231=y
|
||||
CONFIG_GPIO_WATCHDOG=y
|
||||
# CONFIG_GPIO_WATCHDOG_ARCH_INITCALL is not set
|
||||
CONFIG_GRO_CELLS=y
|
||||
CONFIG_HANDLE_DOMAIN_IRQ=y
|
||||
CONFIG_HARDWARE_WATCHPOINTS=y
|
||||
@@ -134,6 +136,7 @@ CONFIG_MTD_SPI_NOR=y
|
||||
CONFIG_MTD_SPLIT_BRNIMAGE_FW=y
|
||||
CONFIG_MTD_SPLIT_EVA_FW=y
|
||||
CONFIG_MTD_SPLIT_FIRMWARE=y
|
||||
CONFIG_MTD_SPLIT_H3C_VFS=y
|
||||
CONFIG_MTD_SPLIT_TPLINK_FW=y
|
||||
CONFIG_MTD_SPLIT_UIMAGE_FW=y
|
||||
CONFIG_NEED_DMA_MAP_STATE=y
|
||||
|
||||
36
tools/7z/Makefile
Normal file
36
tools/7z/Makefile
Normal file
@@ -0,0 +1,36 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=7z
|
||||
PKG_VERSION:=22.00
|
||||
PKG_SOURCE_VERSION:=2200
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)$(PKG_SOURCE_VERSION)-src.tar.xz
|
||||
PKG_SOURCE_URL:=https://7-zip.org/a/
|
||||
PKG_HASH:=40969f601e86aff49aaa0ba0df5ce6fd397cf7e2683a84b591b0081e461ef675
|
||||
|
||||
# This builds the 7zr variant which supports only 7z, so no non-LGPL code should be included
|
||||
PKG_LICENSE:=LGPL-2.1-or-later
|
||||
PKG_LICENSE_FILES:=DOC/License.txt DOC/copying.txt
|
||||
|
||||
HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/$(PKG_NAME)-$(PKG_VERSION)
|
||||
|
||||
include $(INCLUDE_DIR)/host-build.mk
|
||||
|
||||
TAR_CMD=$(HOST_TAR) -C $(1) $(TAR_OPTIONS)
|
||||
|
||||
ALONE_DIR=$(HOST_BUILD_DIR)/CPP/7zip/Bundles/Alone7z
|
||||
|
||||
define Host/Compile
|
||||
$(MAKE) -C $(ALONE_DIR) -f makefile.gcc
|
||||
endef
|
||||
|
||||
define Host/Install
|
||||
$(INSTALL_DIR) $(STAGING_DIR_HOST)/bin
|
||||
$(INSTALL_BIN) $(ALONE_DIR)/_o/7zr $(STAGING_DIR_HOST)/bin/7zr
|
||||
endef
|
||||
|
||||
define Host/Clean
|
||||
rm -f $(STAGING_DIR_HOST)/bin/7zr
|
||||
endef
|
||||
|
||||
$(eval $(call HostBuild))
|
||||
@@ -33,6 +33,7 @@ tools-$(CONFIG_EFI_IMAGES) += gptfdisk popt
|
||||
tools-$(CONFIG_TARGET_apm821xx)$(CONFIG_TARGET_gemini) += genext2fs
|
||||
tools-$(CONFIG_TARGET_ath79) += lzma-old squashfs
|
||||
tools-$(CONFIG_TARGET_mxs) += elftosb sdimage
|
||||
tools-$(CONFIG_TARGET_realtek) += 7z
|
||||
tools-$(CONFIG_TARGET_tegra) += cbootimage cbootimage-configs
|
||||
tools-$(CONFIG_USES_MINOR) += kernel2minor
|
||||
tools-$(CONFIG_USE_SPARSE) += sparse
|
||||
|
||||
@@ -11,9 +11,9 @@ PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/firmware-utils.git
|
||||
PKG_SOURCE_DATE:=2022-04-25
|
||||
PKG_SOURCE_VERSION:=e609c5d751868ae823c236332c76ce3c50acdd2e
|
||||
PKG_MIRROR_HASH:=f1a5af565bff50ccc99471a2be71636ed685dd15bfb9b162be9acf8ee28033a6
|
||||
PKG_SOURCE_DATE:=2022-07-28
|
||||
PKG_SOURCE_VERSION:=2483fe782e0d406b65eaa73b39fc27afabd8a9ea
|
||||
PKG_MIRROR_HASH:=140b84b33cdae1520304cd6798604a51d2f4281b828808a5913d0b2d4b1f551f
|
||||
|
||||
include $(INCLUDE_DIR)/host-build.mk
|
||||
include $(INCLUDE_DIR)/cmake.mk
|
||||
|
||||
Reference in New Issue
Block a user