iommu: add arm-smmu

Add a basic implementation of the ARM SMMU. This driver is intended for
use on platforms where the SMMU may have been configured by a previous
bootloader, it keeps all existing stream mappings and only creates new
ones for stream ids that aren't already configured.

This is needed for Qualcomm platforms where a previous bootloader stage
initialised context banks for some stream IDs (e.g. UFS) but not for
other peripherals like USB.

An overly zealous hypervisor prevents us from creating bypass streams,
so we rely on the fact that virtual and physical addresses are the same
and create basic translation type context banks.

Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
3 files changed