If you execute self-modifying code (you modify instructions), you must execute a fence.i in RISC-V for those changes to become visible to the instruction stream.
Fence.i in rocket/boom performs an icache flush. That will require the icache to go and fetch the new instructions. The icache does NOT snoop the dcache.
-Chris