OpenWrt support for Zyxel PMG5617GA and Econet SoCs, first GPON support !?

If I had to take a wild guess, I’d say it’s another pin that is unused/undocumented, because the vendor code doesn’t bother with interrupts. In any case, knowing instantly when the cable is plugged in is the least of our issues right now…

Hello @cjd

I just tested the en751221 initramfs image on my MT751020 device and it's booting then restarting. Here's the bootlog :

Terminal ready
�M%��}@��/�G�@
DRAMC V2.0 (0)

DRAMC V2.0.0.1 (0)


MT751020 at Mon Apr 27 15:21:13 KST 2015 version 1.2.0 free bootbase

Memory size 128MB

NAND Page size:2048B,Total size 128MB 
bmt pool size: 81 

tcPhyVer_mt7510FE 
 Not found TC Phy
Press 's' key in 3 secs to enter boot command mode.
..
bldr> xmdm 80020000 5FB49F
CCCCCCCCCCCCCCCCjump 80020000
Jump to 80020000
zimage at:     800233C0 8061A5D0
Uncompressing Linux at load address 81000000
Copy device tree to address  8277E6E0
Now, booting the kernel...
[    0.000000] Linux version 6.12.65 (runner@runnervmmtnos) (mips-openwrt-linux-musl-gcc (OpenWrt GCC 14.3.0 r0+32666-450638efc6) 14.3.0, GNU ld (GNU Binutils) 2.44) #0 SMP Sat Jan 17 17:00:39 2026
[    0.000000] ISPRAM0: PA=1c000000,Size=00008000,enabled
[    0.000000] DSPRAM0: PA=1c100000,Size=00001000,enabled
[    0.000000] printk: legacy bootconsole [early0] enabled
[    0.000000] CPU0 revision is: 00019555 (MIPS 34Kc)
[    0.000000] MIPS: machine is Generic EN751221
[    0.000000] Initrd not found or empty - disabling initrd
[    0.000000] OF: reserved mem: Reserved memory: No reserved-memory node in the DT
[    0.000000] Primary instruction cache 64kB, VIPT, 4-way, linesize 32 bytes.
[    0.000000] Primary data cache 64kB, 4-way, VIPT, cache aliases, linesize 32 bytes
[    0.000000] Zone ranges:
[    0.000000]   Normal   [mem 0x0000000000000000-0x0000000003ffffff]
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000000000-0x0000000003ffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x0000000003ffffff]
[    0.000000] percpu: Embedded 12 pages/cpu s18128 r8192 d22832 u49152
[    0.000000] Kernel command line: 
[    0.000000] Dentry cache hash table entries: 8192 (order: 3, 32768 bytes, linear)
[    0.000000] Inode-cache hash table entries: 4096 (order: 2, 16384 bytes, linear)
[    0.000000] Writing ErrCtl register=000775bc
[    0.000000] Readback ErrCtl register=000775bc
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 16384
[    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] rcu: Hierarchical RCU implementation.
[    0.000000] rcu: 	RCU restricting CPUs from NR_CPUS=2 to nr_cpu_ids=1.
[    0.000000] 	Tracing variant of Tasks RCU enabled.
[    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
[    0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
[    0.000000] RCU Tasks Trace: Setting shift to 0 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=1.
[    0.000000] NR_IRQS: 256
[    0.000000] rcu: srcu_init: Setting srcu_struct sizes based on contention.
[    0.000000] clocksource: timer: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 9556302233 ns
[    0.000004] sched_clock: 32 bits at 200MHz, resolution 5ns, wraps every 10737418237ns
[    0.011364] timer: using 200.000 MHz high precision timer
[    0.019467] Calibrating delay loop... 373.55 BogoMIPS (lpj=1867776)
[    0.088507] pid_max: default: 32768 minimum: 301
[    0.110695] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.121352] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.147951] rcu: Hierarchical SRCU implementation.
[    0.154941] rcu: 	Max phase no-delay instances is 1000.
[    0.164078] smp: Bringing up secondary CPUs ...
[    0.170709] smp: Brought up 1 node, 1 CPU
[    0.176749] Memory: 38900K/65536K available (7446K kernel code, 629K rwdata, 1444K rodata, 15560K init, 227K bss, 26016K reserved, 0K cma-reserved)
[    0.201125] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.215607] futex hash table entries: 256 (order: 1, 8192 bytes, linear)
[    0.238553] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[    0.265261] clocksource: Switched to clocksource timer
[    0.288238] NET: Registered PF_INET protocol family
[    0.295756] IP idents hash table entries: 2048 (order: 2, 16384 bytes, linear)
[    0.307380] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes, linear)
[    0.319659] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    0.330929] TCP established hash table entries: 1024 (order: 0, 4096 bytes, linear)
[    0.342177] TCP bind hash table entries: 1024 (order: 2, 16384 bytes, linear)
[    0.352616] TCP: Hash tables configured (established 1024 bind 1024)
[    0.362894] MPTCP token hash table entries: 256 (order: 0, 4096 bytes, linear)
[    0.374056] UDP hash table entries: 256 (order: 1, 8192 bytes, linear)
[    0.383633] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes, linear)
[    0.395291] NET: Registered PF_UNIX/PF_LOCAL protocol family
[    0.435772] workingset: timestamp_bits=14 max_order=14 bucket_order=0
[    0.449535] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[    0.486397] Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled
[    0.497610] printk: legacy console [ttyS0] disabled
[    0.505563] 1fbf0000.serial: ttyS0 at MMIO 0x1fbf0000 (irq = 8, base_baud = 115200) is a 16550
[    0.518264] printk: legacy console [ttyS0] enabled
[    0.518264] printk: legacy console [ttyS0] enabled
[    0.531621] printk: legacy bootconsole [early0] disabled
[    0.531621] printk: legacy bootconsole [early0] disabled

DRAMC V2.0 (0)

DRAMC V2.0.0.1 (0)


MT751020 at Mon Apr 27 15:21:13 KST 2015 version 1.2.0 free bootbase

Memory size 128MB

NAND Page size:2048B,Total size 128MB 
bmt pool size: 81 
<<<<<<<<Cut here because it too long>>>>>>>

Is MT751020 will be supported?

it's booting then restarting

Interesting, it’s NAND and no panic shown in the log, IMO it ought to boot.

Is MT751020 will be supported?

No plan on supporting it myself, it’s one of those things that shouldn’t be super hard, but it does need someone to make a specific effort for it to happen.

Yeah, I think it was same platform since it's was mips 34Kc, tc3162 and MT7530 (based on bootlog).
as you said, it need a specific effort for this to happen but if someone needs a device to test i can help.

Thanks, Arif.

I have an MT751020 at my house, it’s similar but it is not the same, so porting to it is not nothing…

Hey, this device maybe of interest to you?

It has the EN7512U chip from the image of the board and i assume that is what you mean by EN7512.

Thanks for the tip!

As usual, the ebay listings are all thievery, but I’ll probably grab one since that gets me pretty close to a complete set…

FYI re EN7516: https://github.com/openwrt/openwrt/pull/22945

2 Likes

@cjd If you have the DX3301, can you confirm the location of the Wi-Fi calibration data? Is it in partition mtd12 or mtd13?

  1. mtd12: 00080000 00020000 "Factory"
  2. mtd13: 000c0000 00020000 "Reserve Area"

Beginning of factory partition, but I think there’s another copy in the reserve area https://github.com/openwrt/openwrt/pull/22945/changes#diff-53d792413cd016b7894607aeb4af1ab811feb8adaa0b505994eef6b33471bbcdR108

1 Like

i got but confuse on EEPROM is in two places, the en7516 is a BE processor, and mtd13 (reservarea) is formatted in BE. mtd12 ( factory) is formatted in LE
You pointed device Tree to the factory partition (mtd12), but because mtd12 is Little-Endian, the OpenWrt driver has to flip the bytes in memory before it can use it. why not this ?

wifi@0,0 {
    compatible = "mediatek,mt76";
    reg = <0x0000 0 0 0 0>;

    /* Point to offset 0x2a000 in mtd13 */
    mediatek,mtd-eeprom = <&reservearea 0x2a000>;
    big-endian;
};

and if you want your way then perhaps no need to add BE am i wrong ?


wifi@0,0 {
    compatible = "mediatek,mt76";
    reg = <0x0000 0 0 0 0>;
    /* Point to offset 0x0000 in mtd12 */
    mediatek,mtd-eeprom = <&factory 0x0000>;
    /* maybe need to REMOVE the big-endian flag here as the data is Little-Endian! */
};

Definitely need the big-endian flag on my device. I can’t imagine that yours would be inverted. As I recall, the eeprom in factory is in big endian format but the hardware wants little endian and the default for modern mt76 is to not swap at all…