Skip to content

Commit

Permalink
ramips: MT7620 add Support HiWiFi R33(C312B B52) (#10812)
Browse files Browse the repository at this point in the history
  • Loading branch information
zfdx123 authored Jan 26, 2023
1 parent ae14a83 commit 0c40df8
Show file tree
Hide file tree
Showing 7 changed files with 318 additions and 0 deletions.
9 changes: 9 additions & 0 deletions target/linux/generic/files/drivers/net/phy/rtl8367b.c
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,8 @@ struct rtl8367b_initval {
u16 val;
};

u32 rtl_device_id;

#define RTL8367B_MIB_RXB_ID 0 /* IfInOctets */
#define RTL8367B_MIB_TXB_ID 28 /* IfOutOctets */

Expand Down Expand Up @@ -612,6 +614,10 @@ static int rtl8367b_write_initvals(struct rtl8366_smi *smi,
int err;
int i;

if (rtl_device_id == 0x0020) {
return 0;
}

for (i = 0; i < count; i++)
REG_WR(smi, initvals[i].reg, initvals[i].val);

Expand Down Expand Up @@ -1540,7 +1546,10 @@ static int rtl8367b_detect(struct rtl8366_smi *smi)
return ret;
}

rtl_device_id = chip_ver;

switch (chip_ver) {
case 0x0020:
case 0x1000:
chip_name = "8367RB";
break;
Expand Down
235 changes: 235 additions & 0 deletions target/linux/ramips/dts/mt7620a_hiwifi_r33.dts
Original file line number Diff line number Diff line change
@@ -0,0 +1,235 @@
#include "mt7620a.dtsi"

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

/ {
compatible = "hiwifi,r33", "ralink,mt7620a-soc";
model = "HiWiFi R33";

chosen {
bootargs = "console=ttyS0,115200";
};

aliases {
led-boot = &led_system;
led-failsafe = &led_system;
led-running = &led_system;
led-upgrade = &led_system;
};

nand {
status = "okay";
#address-cells = <1>;
#size-cells = <1>;
compatible = "mtk,mt7620-nand";

partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;

partition@0 {
label = "u-boot";
reg = <0x0 0x80000>;
read-only;
};

partition@80000 {
label = "debug";
reg = <0x80000 0x80000>;
read-only;
};

factory: partition@100000 {
label = "factory";
reg = <0x100000 0x40000>;
read-only;
};

partition@140000 {
label = "kernel";
reg = <0x140000 0x400000>;
};

ubiconcat0: partition@540000 {
label = "ubiconcat0";
reg = <0x540000 0x1c80000>;
};

partition@21c0000 {
label = "bdinfo";
reg = <0x21c0000 0x80000>;
read-only;
};

ubiconcat1: partition@2240000 {
label = "ubiconcat1";
reg = <0x2240000 0x5d40000>;
};
};
};

ubi-concat {
compatible = "mtd-concat";
devices = <&ubiconcat0 &ubiconcat1>;

partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;

partition@0 {
label = "ubi";
reg = <0x0 0x79c0000>;
};
};
};

leds {
compatible = "gpio-leds";

wlan5g {
label = "blue:wlan5g";
gpios = <&gpio0 7 GPIO_ACTIVE_LOW>;
linux,default-trigger = "phy0tpt";
};

led_system: system {
label = "blue:system";
gpios = <&gpio0 9 GPIO_ACTIVE_HIGH>;
};

turbo {
label = "blue:turbo";
gpios = <&gpio0 10 GPIO_ACTIVE_HIGH>;
};

wlan2g {
label = "blue:wlan2g";
gpios = <&gpio0 11 GPIO_ACTIVE_LOW>;
linux,default-trigger = "phy1tpt";
};

internet {
label = "blue:internet";
gpios = <&gpio3 0 GPIO_ACTIVE_LOW>;
};
};

keys {
compatible = "gpio-keys";

reset {
label = "reset";
gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
linux,code = <KEY_RESTART>;
};
};

gpio_export {
compatible = "gpio-export";
#size-cells = <0>;

usbpower {
gpio-export,name = "usbpower";
gpio-export,output = <0>;
gpios = <&gpio0 13 GPIO_ACTIVE_LOW>;
};
};

rtl8367rb {
compatible = "realtek,rtl8367b", "rtl8367b";
cpu_port = <6>;
realtek,extif1 = <1 0 1 1 1 1 1 1 2>;
mii-bus = <&mdio0>;
};
};

//在最新的openwrt master分支中sysc已经被剔除,此处进行备份标记
// &sysc {
// ralink,gpiomux = "i2c", "jtag";
// ralink,uartmux = "gpio";
// ralink,wdtmux = <1>;
// };

&gpio3 {
status = "okay";
};

&ehci {
status = "okay";
};

&ohci {
status = "okay";
};

&pcie {
status = "okay";
};

&ethernet {
pinctrl-names = "default";
pinctrl-0 = <&rgmii1_pins &rgmii2_pins &mdio_pins>;

//mtd-mac-address = <&factory 0x4>;

nvmem-cells = <&macaddr_factory_4>;
nvmem-cell-names = "mac-address";

port@5 {
status = "okay";
mediatek,fixed-link = <1000 1 1 1>;
phy-handle = <&phy5>;
phy-mode = "rgmii";
};

mdio0: mdio-bus {
status = "okay";

phy5: ethernet-phy@5 {
reg = <5>;
phy-mode = "rgmii";
};
};
};

//5G WIFI
&pcie0 {
wifi@0,0 {
compatible = "pci14c3,7662";
reg = <0x0000 0 0 0 0>;
mediatek,mtd-eeprom = <&factory 0x8000>;
ieee80211-freq-limit = <5000000 6000000>;
// nvmem-cells = <&macaddr_factory_4>;
// nvmem-cell-names = "mac-address";
// mac-address-increment = <2>;
};
};

//2.4G WIFI
&wmac {
pinctrl-names = "default";
pinctrl-0 = <&pa_pins>;
ralink,mtd-eeprom = <&factory 0x0>;
// nvmem-cells = <&macaddr_factory_4>;
// nvmem-cell-names = "mac-address";
};

&state_default {
gpio {
groups = "uartf", "wled";
function = "gpio";
};
};

&factory {
compatible = "nvmem-cells";
#address-cells = <1>;
#size-cells = <1>;

macaddr_factory_4: macaddr@4 {
reg = <0x4 0x6>;
};
};
22 changes: 22 additions & 0 deletions target/linux/ramips/image/mt7620.mk
Original file line number Diff line number Diff line change
Expand Up @@ -1338,3 +1338,25 @@ define Device/zyxel_keenetic-viva
SUPPORTED_DEVICES += kng_rc
endef
TARGET_DEVICES += zyxel_keenetic-viva


define Device/hiwifi_r33
SOC := mt7620a
DEVICE_VENDOR := HiWiFi
DEVICE_MODEL := R33
DEVICE_PACKAGES := kmod-usb2 kmod-usb-ohci kmod-usb-ledtrig-usbport \
kmod-switch-rtl8366-smi kmod-switch-rtl8367b kmod-mt76x2
BLOCKSIZE := 128k
PAGESIZE := 2048
KERNEL_SIZE := 4096k
UBINIZE_OPTS := -E 5
IMAGE_SIZE := 32768k
IMAGES += kernel.bin rootfs.bin factory.bin
IMAGE/kernel.bin := append-kernel | check-size $$$$(KERNEL_SIZE)
IMAGE/rootfs.bin := append-ubi | check-size $$$$(IMAGE_SIZE)
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
IMAGE/factory.bin := append-kernel | pad-to $$(KERNEL_SIZE) | append-ubi | \
check-size
SUPPORTED_DEVICES += r33
endef
TARGET_DEVICES += hiwifi_r33
3 changes: 3 additions & 0 deletions target/linux/ramips/mt7620/base-files/etc/board.d/01_leds
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,9 @@ hiwifi,hc5761)
hiwifi,hc5861)
ucidef_set_led_switch "internet" "internet" "blue:internet" "switch0" "0x20"
;;
hiwifi,r33)
ucidef_set_led_netdev "internet" "internet" "blue:internet" "eth0.2" "link tx rx"
;;
hnet,c108)
ucidef_set_led_netdev "lan" "lan" "green:lan" "eth0"
ucidef_set_led_netdev "modem" "modem" "green:modem" "wwan0"
Expand Down
13 changes: 13 additions & 0 deletions target/linux/ramips/mt7620/base-files/etc/board.d/02_network
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,13 @@ ramips_setup_interfaces()
ucidef_add_switch "switch0" \
"0:lan" "1:lan" "5:wan" "6@eth0"
;;
hiwifi,r33)
ucidef_add_switch "switch0" \
"1:lan" "2:lan" "3:lan" "4:lan" "0:wan" "6@eth0"
ucidef_add_switch_attr "switch0" "enable" "false"
ucidef_add_switch "switch1" \
"1:lan" "2:lan" "0:wan" "6@eth0"
;;
iodata,wn-ac1167gr|\
iodata,wn-ac733gr3|\
iptime,a1004ns)
Expand Down Expand Up @@ -336,6 +343,12 @@ ramips_setup_macs()
[ -n "$lan_mac" ] || lan_mac=$(cat /sys/class/net/eth0/address)
wan_mac=$(macaddr_add "$lan_mac" 1)
;;
hiwifi,r33)
lan_mac=$(mtd_get_mac_ascii bdinfo "Vfac_mac ")
label_mac=$lan_mac
[ -n "$lan_mac" ] || lan_mac=$(cat /sys/class/net/eth0/address)
wan_mac=$(macaddr_add "$lan_mac" 1)
;;
iodata,wn-ac1167gr|\
iodata,wn-ac733gr3)
wan_mac=$(mtd_get_mac_ascii u-boot-env wanaddr)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
[ "$ACTION" == "add" ] || exit 0

PHYNBR=${DEVPATH##*/phy}

[ -n $PHYNBR ] || exit 0

. /lib/functions.sh
. /lib/functions/system.sh

board=$(board_name)

case "$board" in
hiwifi,hc5661)
label_mac=$(mtd_get_mac_ascii bdinfo "Vfac_mac ")
[ "$PHYNBR" = "0" ] && [ -n "$label_mac" ] && \
echo -n "$label_mac" > /sys${DEVPATH}/macaddress
;;
hiwifi,hc5761|\
hiwifi,hc5861)
label_mac=$(mtd_get_mac_ascii bdinfo "Vfac_mac ")
[ "$PHYNBR" = "1" ] && [ -n "$label_mac" ] && \
echo -n "$label_mac" > /sys${DEVPATH}/macaddress
[ "$PHYNBR" = "0" ] && [ -n "$label_mac" ] && \
macaddr_unsetbit "$label_mac" 6 > /sys${DEVPATH}/macaddress
;;
hiwifi,r33)
label_mac=$(mtd_get_mac_ascii bdinfo "Vfac_mac ")
[ "$PHYNBR" = "1" ] && [ -n "$label_mac" ] && \
echo -n "$label_mac" > /sys${DEVPATH}/macaddress
[ "$PHYNBR" = "0" ] && [ -n "$label_mac" ] && \
macaddr_unsetbit "$label_mac" 6 > /sys${DEVPATH}/macaddress
;;
esac
3 changes: 3 additions & 0 deletions target/linux/ramips/mt7620/base-files/lib/upgrade/platform.sh
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ platform_do_upgrade() {
dd if=/dev/mtd0 bs=64 count=1 2>/dev/null | grep -qi breed && CI_KERNPART_EXT="kernel_stock"
nand_do_upgrade "$1"
;;
hiwifi,r33)
nand_do_upgrade "$1"
;;
*)
default_do_upgrade "$1"
;;
Expand Down

1 comment on commit 0c40df8

@Kissycat
Copy link

@Kissycat Kissycat commented on 0c40df8 Feb 19, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

7620/7621设备在lede这个源上一但跑大流量,会有反复断线的问题,这是一个从20年甚至更早就有的问题了,相关issue到现在也没关,现在看来还是没有修复...
image

@zfdx123 找到病因了,就是这个倒霉的commit,改回去就好了。

加上硬件分流和闭源驱动,拨号无线跑满300M宽带是毫无压力了,峰值表现应该能再高点。
再把不稳定的2.4G WiFi禁用(mt7620 switch上的无用port最好也删掉,看上去干净点),极路由3 Pro的openwrt也算是彻底能稳定使用了,希望老哥最后再去恩山发个新版本呗。

说起来openwrt上游早在19.05,就撤销了这个只存在19.04一个小版本的提交,lede和immoralwrt却都幸运的将这个bug延续了好几年。

Please sign in to comment.