sparc64: Add ATU (new IOMMU) support
authorTushar Dave <tushar.n.dave@oracle.com>
Fri, 28 Oct 2016 17:12:41 +0000 (10:12 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 18 Nov 2016 19:16:59 +0000 (11:16 -0800)
commitf0248c1524fae654e9746e6843b9657fb3917387
tree5dafe1d2017a8d84a14c6b7b603344b5ea8e2e52
parentc88c545bf3202ca2cdb45df93eb40e3bcdbb3742
sparc64: Add ATU (new IOMMU) support

ATU (Address Translation Unit) is a new IOMMU in SPARC supported with
Hypervisor IOMMU v2 APIs.

Current SPARC IOMMU supports only 32bit address ranges and one TSB
per PCIe root complex that has a 2GB per root complex DVMA space
limit. The limit has become a scalability bottleneck nowadays that
a typical 10G/40G NIC can consume 300MB-500MB DVMA space per
instance. When DVMA resource is exhausted, devices will not be usable
since the driver can't allocate DVMA.

ATU removes bottleneck by allowing guest os to create IOTSB of size
32G (or more) with 64bit address ranges available in ATU HW. 32G is
more than enough DVMA space to be shared by all PCIe devices under
root complex contrast to 2G space provided by legacy IOMMU.

ATU allows PCIe devices to use 64bit DMA addressing. Devices
which choose to use 32bit DMA mask will continue to work with the
existing legacy IOMMU.

Signed-off-by: Tushar Dave <tushar.n.dave@oracle.com>
Reviewed-by: chris hyser <chris.hyser@oracle.com>
Acked-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc/include/asm/hypervisor.h
arch/sparc/include/asm/iommu_64.h
arch/sparc/kernel/hvapi.c
arch/sparc/kernel/pci_sun4v.c
arch/sparc/kernel/pci_sun4v.h
arch/sparc/kernel/pci_sun4v_asm.S