This bug affects vanilla kernels up to and including 3.6.3.
The problem seems to be a design issue with the Marvell controller. With
VT-d enabled, each device gets its own "view" of memory it can get
access to. The Marvell chip only registers one device per SATA port, but
actually uses more than one device. It's this second phantom device that
is not allowed memory access when VT-d is enabled.
It may eventually be worked around in the kernel, but it's not an easy
fix. AFAIK the current thinking is to register the phantom device
automatically when the first one is found.