Unsupported Sercomm RP324-C (MT7615) low TX power, incomplete EEPROM / calibration issue

Hi everyone,

I’m working on a Sercomm board (MT7621AT + MT7603EN + MT7615N). I started by porting OpenWrt 25.12 using an Etisalat S3 image as a base, which is what initially led me to modifying the DTS.

At first, I noticed that the S3 image maps the Factory partition differently from the stock firmware:

  • Stock firmware: Factory is at mtd3 (128KB)
  • S3 image: Factory is mapped to mtd2 (1MB)

Because of this mismatch, I initially suspected that the driver was reading invalid calibration data. I even tried extracting my original factory.bin and placing it under /lib/firmware/mediatek/, hoping to force the driver to use it, but that didn’t work.

I also attempted to manually split the factory data per radio, extracting the corresponding regions and creating separate EEPROM files. I tested different filenames and locations under /lib/firmware/ (including mediatek/), using both .bin and .eeprom formats, but none of these approaches had any effect.

(I also previously made a post — in the wrong forum section — asking how to force the S3 image to use my factory data without modifying the DTS. Now I understand that this approach was always going to fail....)

After creating a proper DTS for my device, I was able to fix the partition mapping and confirm that MAC addresses are read correctly from Factory. However, this led to a new discovery: the Factory partition itself appears to be incomplete.

After digging deeper into my device and extracting the full squashfs from the stock firmware, I think I’ve found why the mt7615e driver is stuck at very low transmit power (6 dBm).

From what I can see, the stock firmware does not store a complete EEPROM in the Factory partition.

Instead, it seems to use a split / hybrid approach:

  • Factory partition (mtd3 @ 0x8000):
    Contains only ~1024 bytes (0x400). This includes MAC address and some basic calibration data.
    https://pastebin.com/NFwxgBx8

  • Stock Firmware filesystem (/etc/wireless/mt7615/):
    Contains:

    • mt7615.eeprom.bin (also ~1KB, looks like a template)
      https://pastebin.com/x94H5AfV

    • mt7615-sku.dat (per-country power tables)
      https://pastebin.com/DqZGjt5c

  • What the vendor driver does:
    Using scripts like mt7615.lua, it appears to load the template EEPROM, overlay data from Factory, apply SKU limits (via .dat)
    https://pastebin.com/ELbp6Lf1

So the final EEPROM used at runtime is dynamically assembled.

My understanding is that the mt76 driver expects a complete EEPROM blob.

Right now in my DTS, I point to:

  • mtd3 @ 0x8000 for the 5GHz EEPROM

But that region only contains the first ~1KB. So, calibration tables for 5GHz are missing or invalid and the driver falls back to 6 dBm.

Additional findings

  • The device uses internal PA/LNA (no external FEM visible - photos attached)
  • The stock firmware allows much higher TX power (~19–30 dBm depending on channel), confirmed via mt7615-sku.dat.

My current state

  • Partition layout is corrected in DTS
  • MAC addresses are properly assigned via nvmem-cells
  • Radios initialize correctly
  • But TX power remains capped due to incomplete EEPROM data

I also have a second identical unit running the stock firmware (vendor-modified, SDK-based on an old OpenWRT release), with full backups of all original partitions available.

Question / Idea

At this point, I’m wondering:

Would it be possible to reconstruct a full EEPROM image by combining the partial calibration data from Factory, the vendor template (mt7615.eeprom.bin), possibly respecting limits from mt7615-sku.dat, and then expose that as a complete EEPROM to the mt76 driver?

I’m not sure if this approach makes sense, or if I’m misunderstanding how calibration data should be structured.

Alternatively, would it be possible to use a “generic” EEPROM for the MT7615N?
Or is there a better approach?

More Info:

Custom DTS (WIP)

LINK: https://pastebin.com/2xBUb9FK

LED

In the stock firmware, all LEDs (Power, WiFi, LAN) are solid green by default, with no blinking patterns during normal operation.

  • POWER: GPIO 519
  • WIFI_R/G1 (Bi-color):
    • Green: GPIO 524 (Active Low).
    • Red: GPIO 520. (Active Low).
  • WIFI_B1 (Blue): GPIO 522 (Active Low).
  • LAN3: It stays dim green and does not respond to GPIO commands. Still unknown.
  • WPS Button: GPIO 523 (Active High / hi when pressed).
Serial Pinout

I identified and soldered pins for the serial connection, pinout images attached.
The correct baud rate is 57600.

Preview Image:

Images

LINK:
https://imgur.com/a/h9Ev7SC

Relevant Stock Firmware Info

Full Boot Log Link:

https://pastebin.com/rm1HUixw

Additionally includes: "ifconfig", "iwpriv", "cat /proc/cpuinfo", "logread | grep -i wifi", "lspci"

Partitions

root@Andes:/# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 07f80000 00020000 "ALL"
mtd1: 00080000 00020000 "Bootloader"
mtd2: 00020000 00020000 "Config"
mtd3: 00020000 00020000 "Factory"
mtd4: 02000000 00020000 "firmware"
mtd5: 02000000 00020000 "firmware2"
mtd6: 01d2cffa 00020000 "rootfs"
mtd7: 01100000 00020000 "rootfs_data"

dmesg | grep mt76

root@Andes:/# dmesg | grep mt76
[   12.988000] mt7603_init()-->
[   13.004000] <--mt7603_init()
[   13.028000] l1set_profile_path() profile remain /etc/wireless/mt7603/mt7603.dat
[   13.100000] l1set_single_sku_path() sku path update from /etc/Wireless/RT2860AP/SingleSKU.dat to /etc/wireless/mt7603/mt7603-sku.dat
[   37.988000] l1set_profile_path() profile remain /etc/wireless/mt7603/mt7603.dat
[   37.988000] l1set_single_sku_path() profile remain /etc/wireless/mt7603/mt7603-sku.dat
[   38.416000] mt7603_init_mac_cr()-->
[   40.440000] mt7603_switch_channel(): Switch to Ch#6(2T2R), BBP_BW=0
[   40.456000] mt7603_set_ed_cca: TURN OFF EDCCA  mac 0x10618 = 0x8564267c, EDCCA_Status=0

[ 70.428000] mt7615_apply_cal_data() : eeprom 0x52 bit 1 is 0, do runtime cal , skip RX reload 
[ 70.428000] mt7615_apply_cal_data() : eeprom 0x52 bit 0 is 0, do runtime cal , skip TX reload 
[ 70.640000] mt7603_switch_channel(): Switch to Ch#2(2T2R), BBP_BW=0

mt76-related kernel logs only appear before the WiFi subsystem is fully initialized.
The WiFi LED turns on after the 5GHz radio is active.
Once the 5GHz interface is brought up, logging via dmesg stops completely.

Relevant New Firmware Info

iw phy phy1 info | grep -i dbm

                        * 5180.0 MHz [36] (6.0 dBm)
                        * 5200.0 MHz [40] (6.0 dBm)
                        * 5220.0 MHz [44] (6.0 dBm)
                        * 5240.0 MHz [48] (6.0 dBm)
                        * 5260.0 MHz [52] (6.0 dBm) (radar detection)
.................
**Always 6.0 dBm**

dmesg | grep mt76

root@OpenWrt:~# dmesg | grep mt76
[    1.369604] mt7621_gpio 1e000600.gpio: registering 32 gpios
[    1.381496] mt7621_gpio 1e000600.gpio: registering 32 gpios
[    1.393337] mt7621_gpio 1e000600.gpio: registering 32 gpios
[    1.405390] mt7621-pci 1e140000.pcie: host bridge /pcie@1e140000 ranges:
[    1.418693] mt7621-pci 1e140000.pcie:   No bus range found for /pcie@1e140000, using [bus 00-ff]
[    1.436137] mt7621-pci 1e140000.pcie:      MEM 0x0060000000..0x006fffffff -> 0x0060000000
[    1.452425] mt7621-pci 1e140000.pcie:       IO 0x001e160000..0x001e16ffff -> 0x0000000000
[    1.816272] mt7621-pci 1e140000.pcie: pcie2 no card, disable it (RST & CLK)
[    1.830063] mt7621-pci 1e140000.pcie: PCIE0 enabled
[    1.839707] mt7621-pci 1e140000.pcie: PCIE1 enabled
[    1.863781] mt7621-pci 1e140000.pcie: PCI host bridge to bus 0000:00
[    3.142572] mt7621-nand 1e003000.nand: ECC strength adjusted to 4 bits
[    3.155715] 5 fixed-partitions partitions found on MTD device mt7621-nand
[    3.169856] Creating 5 MTD partitions on "mt7621-nand":
[   17.335160] mt7603e 0000:02:00.0: enabling device (0000 -> 0002)
[   17.347371] mt7603e 0000:02:00.0: ASIC revision: 76030010
[   17.362466] mt7603e 0000:02:00.0: Firmware Version: ap_pcie
[   17.373665] mt7603e 0000:02:00.0: Build Time: 20160107100755
[   17.406310] mt7603e 0000:02:00.0: firmware init done
[   17.593961] mt7603e 0000:02:00.0: registering led 'mt76-phy0'
[   17.707871] mt7615e 0000:01:00.0: enabling device (0000 -> 0002)
[   17.729650] mt7615e 0000:01:00.0: registering led 'mt76-phy1'
[   17.826892] mt7615e 0000:01:00.0: HW/SW Version: 0x8a108a10, Build Time: 20180518100604a
[   17.884353] mt7615e 0000:01:00.0: N9 Firmware Version: _reserved_, Build Time: 20200814163649
[   17.951494] mt7615e 0000:01:00.0: CR4 Firmware Version: _reserved_, Build Time: 20190415154149
root@OpenWrt:~#

dmesg | grep -Ei "eeprom|cal|limit"

root@OpenWrt:~# dmesg | grep -Ei "eeprom|cal|limit"
[    0.000000] rcu: Hierarchical RCU implementation.
[    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
[    0.016020] Calibrating delay loop... 586.13 BogoMIPS (lpj=2930688)
[    0.146962] rcu: Hierarchical SRCU implementation.
[    0.828095] NET: Registered PF_UNIX/PF_LOCAL protocol family
[    2.157983] pci 0000:01:00.0: 2.000 Gb/s available PCIe bandwidth, limited by 2.5 GT/s PCIe x1 link at 0000:00:00.0 (capable of 4.000 Gb/s with 5.0 GT/s PCIe x1 link)
root@OpenWrt:~#
Background / flashing notes

Since there is no official target for this specific board, I tested several images through trial and error.

I picked the S3 image because, on paper, the hardware looked similar, and it became my entry point to learning how all of this works.

As I kept digging, it turned into a bit of a "snowball" project where I had to figure out how to handle UBI volumes, fix kernel headers (legacy U-Boot), realize that the partition maps don't match, and eventually understand that the EEPROM is incomplete.

At this point:

  • Ethernet is working
  • Wi-Fi initializes correctly
  • But 5GHz TX power is stuck at ~6 dBm

I’m still learning, so I may have taken a suboptimal path getting here. Any help, suggestions, or pointers would be greatly appreciated. Thanks in advance.

EEPROM size for mt7615 should be 0x400 instead of 0x1000.

Can you clarify which slot is which chip?

Also you can skip setting Wi-Fi macaddr if it's contained in EEPROM.

Not much you can do on the power tables because it's usually compiled in vendor driver unless you want to manually dump the value.

So my hypothesis about the EEPROM being "incomplete" was pretty much wrong then.

Regarding which slot is which: pcie0 is the 5GHz radio (MT7615) and pcie1 is the 2.4GHz radio (MT7603).

Considering the power tables are missing from my factory partition... how crazy would it be to grab a full EEPROM dump from another MT7615 device and just hex-edit my MAC addresses offsets into it? at least for testing purposes...

In the meantime, I’ll look for a base EEPROM to work with. I’ll probably need it anyway to try and manually port the manufacturer's calibration values from the .dat files.

Well, I have my work cut out for me. Thanks for the help!

For converting sku dat files see this

Supposed you can use this script.

I think you can just edit 0x80f3 of your EEPROM.