diff --git a/devices/cudy-x6/default.nix b/devices/cudy-x6/default.nix new file mode 100644 index 00000000..58ca3e5c --- /dev/null +++ b/devices/cudy-x6/default.nix @@ -0,0 +1,233 @@ +{ + 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 { + eth = link.build { ifname = "eth0"; }; + lan = link.build { ifname = "lan"; }; + 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"; + serverip = "10.23.42.23"; + ipaddr = "10.23.42.42"; + }; + }; + + 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 + }; + }; + }; +}