I am using 6678 silicon rev 2;
I am using a 6678 connected to a host processor via a SRIO switch. The 6678 is also connected to an EEPROM over I2C. The boot mode is I2C. The RBL loads instructions from EEPROM, configures the reconfigures the PLL & SRIO and then waits for the host processor to download code into 6678's internal RAM. After host downloads the code, a doorbell wakes up the DSP to start executing the code in the IRAM. This scheme works well on power up (POR).
6678 SRIO is explicitly removed from reset isolation after bootup.
After bootup, in some error conditions, I hard reset the DSP using software instructions to write to RSTCTRL register on PLL module. This always successfully hard resets the DSP following which the boot process works - i.e boot ROM code runs, and waits for host to sync SRIO port and download code.
In another use case, I cannot hard reset the DSP in software using RSTCRTL register. In that case, I use the watchdog to hard reset the whole chip. For some reason, 8/10 times the 6678 does not reboot in this case. I know that watchdog times out, and the hard reset is triggered because I can see some traffic on the I2C bus that is supposed to happen when the internal boot ROM's code starts executing. But for some reason, the SRIO switch port of the 6678 does not come up.
The question I have is what is the difference between a hard reset triggered by a watchdog, and a hard reset triggered by using RSTCTRL? I cannot see why one works and not the other. Both are described in section 7.4.2 of 6678 data sheet.