Debugging EcoNet's MT7530 PHYs

Caleb James DeLisle cjd at cjdns.fr
Tue Feb 10 11:25:36 PST 2026


Hello guys,

I have an update on this MT7530. As I mentioned in my initial email 
there are two switches that are stacked, so I'm needing to do quite a 
bit of patching to mt7530.c to create anything that is going to work.

I'm trying to handle incoming traffic from the MCM ("external") switch 
to the on-die switch. It comes in port 4 of the external, where I have a 
cable attached, then goes to port 6 which the external is treating as a 
CPU port. Then it comes in port 5 of the internal. Here's my values for 
the PVC register:

ext 4 0x810001c0 ACC_FRM=all VLAN_ATTR=transparent EG_TAG=consistent 
STAG_VPID=0x8100
ext 6 0x00000920 ACC_FRM=all PORT_STAG VLAN_ATTR=user EG_TAG=consistent 
PT_OPTION STAG_VPID=0x0
int 5 0x810001e0 ACC_FRM=all PORT_STAG VLAN_ATTR=transparent 
EG_TAG=consistent STAG_VPID=0x8100
int 6 0x00000120 ACC_FRM=all PORT_STAG VLAN_ATTR=user EG_TAG=consistent 
STAG_VPID=0x0

When PT_OPTION is set on port 6 of the external, it sets the Passthrough 
bit on the Special Tag before sending it to the internal switch. When 
int 5 has PORT_STAG set, the Passthrough bit is required otherwise it 
will drop STAG'd packets. However, when it's set the switch does a weird 
stupid thing and it copies the port number from what was received from 
the external switch - but it DOESN'T copy the passthrough bit. So you 
end up with this:

[ port 4 ][ port 4 +PT ][ packet header ]

And the obvious problem is this is indistinguishable from a packet that 
comes from port 4 of the internal switch and has an stag directly under 
the eth header.

---

Another angle is to remove the PORT_STAG from internal port 5, and then 
you get this:

[ port 5 ][ port 4 +PT ][ packet header ]

In that case you can also remove PT_OPTION from external port 6, but 
sending ANY kind of VLAN packet from the outside gets it filtered and 
RxFiltering gets incremented. No matter what I do, I can't figure out 
how to stop VLAN packets from getting dropped except by putting 
PORT_STAG on the receiving port (internal port 5). No configuration of 
internal port6 prevents it, even if it's a dumb switch, is still drops them.


Anyone have any ideas?


Thanks,

Caleb




On 28/01/2026 14:26, Caleb James DeLisle wrote:
> Update: It turns out the reset controller I was using only reset the 
> on-die switch, Benjamin found the reset register for the external 
> switch and now everything is behaving MUCH more like normal. I'd say 
> at this point I'm no longer stuck.
>
> Thanks,
>
> Caleb
>
>
> On 27/01/2026 18:26, Caleb James DeLisle wrote:
>>>
>>> Would there be any reason not to set BMCR_PDOWN in 
>>> mt7530_phy_config_init() so we know they're in a consistent state?
>>>
>>> Also if you happen to have an MT7621 sitting there running, would 
>>> you mind setting BMCR_ANENABLE | BMCR_ANRESTART with mdio on a 
>>> running port to see if it's the same behavior? The port should 
>>> immediately die and then go into a loop trying to connect every few 
>>> seconds / minutes depending on what it's connected to.
>>>
>> Whoops, spoke too soon. dsa_register_switch() (indirectly) calls 
>> phy_resume() so the phy is up while the port is down. However, adding 
>> this to mt7530_port_enable() does make it work:
>>
>>     if (priv->id == ID_EN751221_EXT && phy)
>>         genphy_soft_reset(phy);
>>
>> I note that if the port is brought up within seconds of having been 
>> reset, then it seems to work (at least sporadically) despite the 
>> BMCR_ANENABLE bug. I imagine this is something that can be tuned out, 
>> but given it's happening in the bootloader, I don't have much 
>> confidence that I'm going to find the knob to fix it. I've got a 
>> problem with my vendor OS image, but when I get that fixed I'll check 
>> that as well.
>>
>> In the mean time, if any likely culprits come to mind, do let me know.
>>
>> Thanks,
>>
>> Caleb
>>
>>
>> _______________________________________________
>> openwrt-devel mailing list
>> openwrt-devel at lists.openwrt.org
>> https://lists.openwrt.org/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list