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

Reply via email to