IRQ's should work in both directions. I am using IRQ's raised in a SM to request more data from the CPU so the FIFO never becomes empty. I load the FIFO with four words, which starts the SM, then each time the SM removes a word it raises an IRQ and the Python code feeds it another. This seems to work well, except I have some questions about timing. I'm not confident that the rp2 always responds quickly to IRQ's. Work in progress...
IRQ's should work in the opposite direction as the WAIT instruction will wait on an interrupt. I haven't tested this yet.