Hi Sander, On 06/11/2021 20:47, Sander Vanheule wrote:
With some extra testing, I have found that the network port that was active before a watchdog reset, doesn't do much anymore after restarting. Replugging the cable into a port that was not used before the reset works, but that's not really useful if the system isn't readily accessible or has no unused ports. I don't think the current network code resets more than just the CPU NIC, so maybe the networking code could be ammended to also reset the switch control tables, etc. Any thoughts on this?
Resetting different SoC parts in the RTL chips is very badly documented in the GPLed SDK code available, in fact the SDK only ever resets the NIC itself. Combine that with the fact that the global SoC reset at least on the RTL8380 SoCs does not put the chip into the same state as a power off, we are left with experimenting. My impression is that the 838x based routers are not supposed to be software reset. Instead once the SoC is configured for switching by a user through a web interface they will run forever doing everything in silicon even if the CPU hangs completely.
In OWRT resets happen in rtl838x_hw_reset(), this is the latest version with RTL93xx support: /* Reset NIC */ if (priv->family_id == RTL9300_FAMILY_ID || priv->family_id == RTL9310_FAMILY_ID) sw_w32(0x86, priv->r->rst_glb_ctrl); else sw_w32(0x8, priv->r->rst_glb_ctrl); do { /* Wait for reset of NIC and Queues done */ udelay(20); } while (sw_r32(priv->r->rst_glb_ctrl) & 0xff); You can try to reset more parts of the switch by adding more bits to what is written into the RST_GLB_CTRL register. Obvious candidates in addition to bit 3 (NIC reset) are: BIT 0: SW_RST (switch reset?) BIT 1: SW_CFG_RST (switch configuration reset?) BIT 2: SW_Q_RST (switch Queues reset, this is done on the 93xx platforms in the SDK) BIT 3: SW_NIC_RST BIT 4: SW_SERDES_RST (reset the built-in SerDes?) BIT 5: SW_PHY_RST (reset the built in PHY of the RTL838x? That is what I would try first.) I would avoid the CPU_MEM_RST reset which sounds like a reset of the DRAM interface. The TBL_*_RST bits seem to allow resetting the various L2 configuration tables but unless you see a strange configuration after a WD trigger, I would not touch those. Of course the issue you describe could also be due to an issue with the PHY-MAC communication and you need to reset the external PHY (you don't mention the specific device). Cheers, Birger _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel