Device: GL-MT3600BE (Beryl 7)
Firmware: v4.9.0 (build 2026-07-02, kernel 5.4.281)
Previous working firmware: v4.8.7
PROBLEM:
After upgrading from v4.8.7 to v4.9.0, the USB 3.0 port stopped detecting
any devices. Tested with Huawei USB modem (works on Keenetic router) and USB
flash drive. lsusb shows only root hubs, dmesg has zero USB device events.
ROOT CAUSE:
/proc/gl-hw-info/usb_power_mode is EMPTY (contains only newline).
Factory data in Device Tree has correct value:
/sys/firmware/devicetree/base/gl-hw/factory_data/usb_power_mode = "Factory0x4100"
gl_sdk4_hw_info.ko has the string "usb_power_mode" but does NOT populate
/proc/gl-hw-info/usb_power_mode from DT factory_data on v4.9.0.
USB port requires PD power (usb-power-require = 9V3A). Without usb_power_mode,
the PD/TCPC controller is never initialized, so VBUS is not delivered.
No VBUS → no device detected.
VERIFIED (everything correct):
- GPIO usb_power (gpio-476): ON (out hi)
- Port disable flags: 0 (both ports enabled)
- xHCI and PHY initialize correctly
- All kmod packages installed, all modules loaded
- Power-cycled GPIO, unbound/rebound xhci-mtk driver — no effect
- usb3_disable flag tried in both positions — no effect
- USB devices work on another router (Keenetic) — hardware is good
STEPS TO REPRODUCE:
- Upgrade MT3600BE from v4.8.7 to v4.9.0
- Plug any USB device into the USB port
- lsusb — only root hubs visible
- cat /proc/gl-hw-info/usb_power_mode — empty
EXPECTED BEHAVIOR:
gl_sdk4_hw_info.ko should read usb_power_mode from DT factory_data
and expose it in /proc/gl-hw-info/usb_power_mode, same as v4.8.7.
WORKAROUND:
Downgrade to v4.8.7 restores USB functionality.