Hello,
I am implementing support for the AM572x GP EVM in a GDB remote stub, using a third-party (non-TI) JTAG probe. Most of the functionality is working, but I am having difficulty with resetting IPU1. I can use my stub to reset and debug code running on the A15s, and I can connect to and debug code running on the IPU1 M4s if they have been initialized by Linux, but if I try to reset them manually the status register RM_IPU_RSTST doesn't show that anything reset. If I ignore that, I am unable to halt the M4 cores.
Using AHB to read and write memory, I perform the operations below to reset the M4 cores. All of the reads and writes complete without error. The probe logs an indication that a reset occurred. Can you help me understand what I am doing wrong, or what I am missing?
# Notation: operation address value|condition
# Map timer suspend sources to IPU1 M4 cores.
write 0x54160248 0x9 # TIMER3, Core0, suspend during debug halt
write 0x5416024c 0x9 # TIMER4, Core1, suspend during debug halt
# Assert reset for IPU1 (MMU/Unicache, Core0, Core1).
write 0x4ae06510 0x07 # RM_IPU1_RSTCTRL
# Deassert reset for IPU1 MMU/Unicache
write 0x4ae06514 0x07 # RM_IPU1_RSTST
write 0x4ae06510 0x03
read 0x4ae06514 until (value & 0x4) == 0x4 # <==<< Hangs here, always get value 0x00000000.
# Write code for dummy loop to IPU1 boot space.
write 0x58820000 0x10000
write 0x58820004 0x09
write 0x58820008 0xE7FEE7FE
# Deassert reset for IPU1 Core0, Core1.
write 0x4ae06510 0x00
# Check that IPU1 is out of reset.
read 0x4ae06514 until (value & 0x3) == 0x3 # <==<< If skip previous check that hangs, hangs here, get value 0x00000000.
# Set reset status for all IPU1.
write 0x4ae06514 0x07
Any advice or pointers much appreciated.
Thank you,
--Don