static struct ipmmu_vmsa_device *to_ipmmu(struct device *dev)
 {
-       return dev->iommu_fwspec ? dev->iommu_fwspec->iommu_priv : NULL;
+       struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
+
+       return fwspec ? fwspec->iommu_priv : NULL;
 }
 
 #define TLB_LOOP_TIMEOUT               100     /* 100us */
 static int ipmmu_attach_device(struct iommu_domain *io_domain,
                               struct device *dev)
 {
-       struct iommu_fwspec *fwspec = dev->iommu_fwspec;
+       struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
        struct ipmmu_vmsa_device *mmu = to_ipmmu(dev);
        struct ipmmu_vmsa_domain *domain = to_vmsa_domain(io_domain);
        unsigned int i;
 static void ipmmu_detach_device(struct iommu_domain *io_domain,
                                struct device *dev)
 {
-       struct iommu_fwspec *fwspec = dev->iommu_fwspec;
+       struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
        struct ipmmu_vmsa_domain *domain = to_vmsa_domain(io_domain);
        unsigned int i;
 
 static int ipmmu_init_platform_device(struct device *dev,
                                      struct of_phandle_args *args)
 {
+       struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
        struct platform_device *ipmmu_pdev;
 
        ipmmu_pdev = of_find_device_by_node(args->np);
        if (!ipmmu_pdev)
                return -ENODEV;
 
-       dev->iommu_fwspec->iommu_priv = platform_get_drvdata(ipmmu_pdev);
+       fwspec->iommu_priv = platform_get_drvdata(ipmmu_pdev);
+
        return 0;
 }