my stm32 set default is sink. when Phone connected, it's sink and the nego finish. after that, I change it to source to charge this phone, but it's soft reset.
Regarding your SOFT reset, what it is strange is that the port partner answers to the power role swap after the expiration of the tSenderResponse timer (set to 27ms in our library). It is why we have a soft reset after receiving the accept message:
ACCEPT is received 50ms after the gooodCRC of PR_SWAP.