Commit bcb81ac6ae3c ("iommu: Get DT/ACPI parsing into the proper probe path") changed the sequence of probing the SYSMMU controller devices and calls to arm_iommu_attach_device(), what results in resuming SYSMMU controller earlier, when it is still set to IDENTITY mapping. Such change revealed the bug in IDENTITY handling in the exynos-iommu driver. When SYSMMU controller is set to IDENTITY mapping, data->domain is NULL, so adjust checks in suspend & resume callbacks to handle this case correctly.
Unified · Split
| @@ -832,7 +832,7 @@ static int __maybe_unused exynos_sysmmu_suspend(struct device *dev) · 831 unmodified lines | ||
| 832 | 832 | struct exynos_iommu_owner *owner = dev_iommu_priv_get(master); |
| 833 | 833 | |
| 834 | 834 | mutex_lock(&owner->rpm_lock); |
| 835 | − if (&data->domain->domain != &exynos_identity_domain) { | |
| 835 | + if (data->domain) { | |
| 836 | 836 | dev_dbg(data->sysmmu, "saving state\n"); |
| 837 | 837 | __sysmmu_disable(data); |
| 838 | 838 | } |
| @@ -850,7 +850,7 @@ static int __maybe_unused exynos_sysmmu_resume(struct device *dev) · 11 unmodified lines | ||
| 850 | 850 | struct exynos_iommu_owner *owner = dev_iommu_priv_get(master); |
| 851 | 851 | |
| 852 | 852 | mutex_lock(&owner->rpm_lock); |
| 853 | − if (&data->domain->domain != &exynos_identity_domain) { | |
| 853 | + if (data->domain) { | |
| 854 | 854 | dev_dbg(data->sysmmu, "restoring state\n"); |
| 855 | 855 | __sysmmu_enable(data); |
| 856 | 856 | } |