# GA-990FXA-UD3 Rev 3 + IOMMU + Marvell 88SE91xx + Networking

## CmdrMoozy

I'm having trouble getting all of the hardware working on this particular board. The symptoms are very odd; if I have the AMD IOMMU disabled (either in the bios, or via iommu=off when booting), the Marvell SATA controller works just fine, but no networking will work - any network card (I even tried an e1000-based card) will seem to initialize and get a link, but refuse to send or receive any packets.

If the IOMMU is turned on, then NICs work just fine, but the SATA controller won't function - again, the AHCI driver sees the chip and initializes it, it sees the drive that's attached to it in dmesg, but no device in /dev is created, and it seems basically unusable (with the IOMMU off, this chip does SATA hotplugging out-of-the-box).

I believe this bug is related, or exactly the same problem, since it describes this situation more or less exactly: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1005226

I'm hoping for some way to get libata to simply ignore the IOMMU, while the rest of the system uses it, or barring that some workaround to get NICs working while the IOMMU is disabled.

Honestly it may simply be the case that a kernel patch is required - this bug seems to describe my situation more or less exactly (although I have an AMD system, not Intel, so this patch won't help me as-is): https://lkml.org/lkml/2012/12/19/104

Thanks in advance for any advice!

----------

## s4e8

This is bug of the Marvell 91xx controller, the controller itself pci id is X:0.0, but the DMA request issued by X:0.1, so IOMMU reject it.

----------

## CmdrMoozy

 *s4e8 wrote:*   

> This is bug of the Marvell 91xx controller, the controller itself pci id is X:0.0, but the DMA request issued by X:0.1, so IOMMU reject it.

 

That's actually very helpful in understanding exactly what Cooks' patch does.

If nobody has a suitable workaround, I may try my hand at writing a kernel patch targeting the AMD IOMMU in the next few days. I'm assuming the changes to drivers/pci/quirks.c can be left as-is, and simply a similar function would need to be added to drivers/iommu/amd_iommu.c. This seems like it would be quite easy.

----------

