The arm-smmu unhandled context mostly happens due to the usage of physical addresses for DMA operation expecting IOMMU - passthrough.
These occur in code which was written for x86 platforms and then tried on an ARM platform.
Linux kernel easily support IOMMU - passthrough on x86 platforms.
But for ARM platforms, enabling IOMMU-passthrough has been made tough to force programmers using the correct way i.e., using DMA addresses (IOMMU virtual addresses) instead of physical addresses.
Hence for ARM platforms, wherever physical addresses are used, we need to replace them with dma_alloc_coherent() created DMA addresses which will setup the needed IOMMU address space.