{ system = { crossSystem = { config = "mipsel-unknown-linux-musl"; gcc = { abi = "32"; arch = "mips32"; # mips32r2? }; }; }; description = '' Cudy X6 ******************** Zyxel NWA50AX is quite close to the GL-MT300N-v2 "Mango" device, but it is based on the MT7621 chipset instead of the MT7628. Installation ============ ''; module = { pkgs, config, lib, lim, ...}: let inherit (pkgs.liminix.networking) interface; inherit (pkgs.liminix.services) oneshot; inherit (pkgs.pseudofile) dir symlink; inherit (pkgs) openwrt; mac80211 = pkgs.mac80211.override { drivers = [ "mt7915e" ]; klibBuild = config.system.outputs.kernel.modulesupport; }; # v204520220929 wlan_firmware = pkgs.fetchurl { url = "https://github.com/openwrt/mt76/raw/1b88dd07f153b202e57fe29734806744ed006b0e/firmware/mt7915_wa.bin"; hash = "sha256-wooyefzb0i8640+lwq3vNhcBXRFCtGuo+jiL7afZaKA="; }; wlan_firmware' = pkgs.fetchurl { url = "https://github.com/openwrt/mt76/raw/1b88dd07f153b202e57fe29734806744ed006b0e/firmware/mt7915_wm.bin"; hash = "sha256-k62nQewRuKjBLd5R3RxU4F74YKnQx5zr6gqMMImqVQw="; }; wlan_firmware'' = pkgs.fetchurl { url = "https://github.com/openwrt/mt76/raw/1b88dd07f153b202e57fe29734806744ed006b0e/firmware/mt7915_rom_patch.bin"; hash = "sha256-ifriAjWzFACrxVWCANZpUaEZgB/0pdbhnTVQytx6ddg="; }; in { imports = [ # We include it to ensure the bridge functionality # is available on the target kernel. ../../modules/bridge ../../modules/arch/mipsel.nix ../../modules/outputs/tftpboot.nix ../../modules/outputs/mtdimage.nix ]; filesystem = dir { lib = dir { firmware = dir { mediatek = dir { "mt7915_wa.bin" = symlink wlan_firmware; "mt7915_wm.bin" = symlink wlan_firmware'; "mt7915_rom_patch.bin" = symlink wlan_firmware''; }; }; }; }; hardware = { rootDevice = "/dev/mtdblock5"; defaultOutput = "mtdimage"; loadAddress = lim.parseInt "0x80001000"; entryPoint = lim.parseInt "0x80001000"; # Aligned on 2kb. alignment = 2048; flash = { address = lim.parseInt "0xbc050000"; eraseBlockSize = 65536; size = lim.parseInt "0x1F80000"; }; dts = { src = "${openwrt.src}/target/linux/ramips/dts/mt7621_cudy_x6-v1.dts"; includes = [ "${openwrt.src}/target/linux/ramips/dts" ]; }; networkInterfaces = let inherit (config.system.service.network) link; in { wan = link.build { ifname = "wan"; }; lan1 = link.build { ifname = "lan1"; }; lan2 = link.build { ifname = "lan2"; }; lan3 = link.build { ifname = "lan3"; }; lan4 = link.build { ifname = "lan4"; }; wlan0 = link.build { ifname = "wlan0"; dependencies = [ mac80211 ]; }; wlan1 = link.build { ifname = "wlan1"; dependencies = [ mac80211 ]; }; }; }; boot = { imageFormat = "fit"; tftp = { # 5MB is nice. freeSpaceBytes = 5 * 1024 * 1024; loadAddress = lim.parseInt "0x2000000"; }; }; kernel = { src = pkgs.fetchurl { name = "linux.tar.gz"; url = "https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.137.tar.gz"; hash = "sha256-PkdzUKZ0IpBiWe/RS70J76JKnBFzRblWcKlaIFNxnHQ="; }; extraPatchPhase = '' ${openwrt.applyPatches.ramips} ''; config = { RALINK = "y"; PCI = "y"; PHY_MT7621_PCI = "y"; PCIE_MT7621 = "y"; SOC_MT7621 = "y"; CLK_MT7621 = "y"; CLOCKSOURCE_WATCHDOG = "y"; SERIAL_8250_CONSOLE = "y"; SERIAL_8250 = "y"; SERIAL_CORE_CONSOLE = "y"; SERIAL_OF_PLATFORM = "y"; SERIAL_8250_NR_UARTS = "3"; SERIAL_8250_RUNTIME_UARTS = "3"; SERIAL_MCTRL_GPIO = "y"; CONSOLE_LOGLEVEL_DEFAULT = "8"; CONSOLE_LOGLEVEL_QUIET = "4"; # MTD_UBI_BEB_LIMIT = "20"; # MTD_UBI_WL_THRESHOLD = "4096"; MTD = "y"; MTD_BLOCK = "y"; # fix undefined ref to register_mtd_blktrans_dev MTD_RAW_NAND = "y"; MTD_NAND_MT7621 = "y"; MTD_NAND_MTK_BMT = "y"; # Bad-block Management Table MTD_NAND_ECC_SW_HAMMING= "y"; MTD_SPI_NAND= "y"; MTD_OF_PARTS = "y"; MTD_NAND_CORE= "y"; MTD_SPLIT_FIRMWARE= "y"; MTD_SPLIT_FIT_FW= "y"; PINCTRL = "y"; PINCTRL_MT7621 = "y"; I2C = "y"; I2C_MT7621 = "y"; SPI = "y"; MTD_SPI_NOR = "y"; SPI_MT7621 = "y"; SPI_MASTER = "y"; SPI_MEM = "y"; REGULATOR = "y"; REGULATOR_FIXED_VOLTAGE = "y"; RESET_CONTROLLER = "y"; POWER_RESET = "y"; POWER_RESET_GPIO = "y"; POWER_SUPPLY = "y"; LED_TRIGGER_PHY = "y"; PCI_DISABLE_COMMON_QUIRKS = "y"; PCI_DOMAINS = "y"; PCI_DOMAINS_GENERIC = "y"; PCI_DRIVERS_GENERIC = "y"; PCS_MTK_LYNXI = "y"; SOC_BUS = "y"; NET = "y"; ETHERNET = "y"; WLAN = "y"; PHYLIB = "y"; AT803X_PHY = "y"; FIXED_PHY = "y"; GENERIC_PHY = "y"; NET_DSA = "y"; NET_DSA_MT7530 = "y"; NET_DSA_MT7530_MDIO = "y"; NET_DSA_TAG_MTK = "y"; NET_MEDIATEK_SOC = "y"; NET_SWITCHDEV = "y"; NET_VENDOR_MEDIATEK = "y"; SWPHY = "y"; GPIOLIB = "y"; GPIO_MT7621 = "y"; OF_GPIO = "y"; EARLY_PRINTK = "y"; NEW_LEDS = "y"; LEDS_TRIGGERS = "y"; LEDS_CLASS = "y"; # required by rt2x00lib LEDS_CLASS_MULTICOLOR = "y"; LEDS_BRIGHTNESS_HW_CHANGED = "y"; PRINTK_TIME = "y"; } // lib.optionalAttrs (config.system.service ? vlan) { SWCONFIG = "y"; } // lib.optionalAttrs (config.system.service ? watchdog) { RALINK_WDT = "y"; # watchdog MT7621_WDT = "y"; # or it might be this one }; }; }; }