int                             usec_timeout;
        const struct amdgpu_asic_funcs  *asic_funcs;
        bool                            shutdown;
-       bool                            need_dma32;
        bool                            need_swiotlb;
        bool                            accel_working;
        struct notifier_block           acpi_nb;
 
 static int gmc_v10_0_sw_init(void *handle)
 {
        int r;
-       int dma_bits;
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 
        gfxhub_v2_0_init(adev);
        else
                adev->gmc.stolen_size = 9 * 1024 *1024;
 
-       /*
-        * Set DMA mask + need_dma32 flags.
-        * PCIE - can handle 44-bits.
-        * IGP - can handle 44-bits
-        * PCI - dma32 for legacy pci gart, 44 bits on navi10
-        */
-       adev->need_dma32 = false;
-       dma_bits = adev->need_dma32 ? 32 : 44;
-
-       r = pci_set_dma_mask(adev->pdev, DMA_BIT_MASK(dma_bits));
+       r = dma_set_mask_and_coherent(adev->dev, DMA_BIT_MASK(44));
        if (r) {
-               adev->need_dma32 = true;
-               dma_bits = 32;
                printk(KERN_WARNING "amdgpu: No suitable DMA available.\n");
-       }
-
-       r = pci_set_consistent_dma_mask(adev->pdev, DMA_BIT_MASK(dma_bits));
-       if (r) {
-               pci_set_consistent_dma_mask(adev->pdev, DMA_BIT_MASK(32));
-               printk(KERN_WARNING "amdgpu: No coherent DMA available.\n");
+               return r;
        }
 
        r = gmc_v10_0_mc_init(adev);
 
 static int gmc_v6_0_sw_init(void *handle)
 {
        int r;
-       int dma_bits;
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 
        if (adev->flags & AMD_IS_APU) {
 
        adev->gmc.mc_mask = 0xffffffffffULL;
 
-       adev->need_dma32 = false;
-       dma_bits = adev->need_dma32 ? 32 : 40;
-       r = pci_set_dma_mask(adev->pdev, DMA_BIT_MASK(dma_bits));
+       r = dma_set_mask_and_coherent(adev->dev, DMA_BIT_MASK(44));
        if (r) {
-               adev->need_dma32 = true;
-               dma_bits = 32;
                dev_warn(adev->dev, "amdgpu: No suitable DMA available.\n");
+               return r;
        }
-       r = pci_set_consistent_dma_mask(adev->pdev, DMA_BIT_MASK(dma_bits));
-       if (r) {
-               pci_set_consistent_dma_mask(adev->pdev, DMA_BIT_MASK(32));
-               dev_warn(adev->dev, "amdgpu: No coherent DMA available.\n");
-       }
-       adev->need_swiotlb = drm_need_swiotlb(dma_bits);
+       adev->need_swiotlb = drm_need_swiotlb(44);
 
        r = gmc_v6_0_init_microcode(adev);
        if (r) {
 
 static int gmc_v7_0_sw_init(void *handle)
 {
        int r;
-       int dma_bits;
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 
        if (adev->flags & AMD_IS_APU) {
         */
        adev->gmc.mc_mask = 0xffffffffffULL; /* 40 bit MC */
 
-       /* set DMA mask + need_dma32 flags.
-        * PCIE - can handle 40-bits.
-        * IGP - can handle 40-bits
-        * PCI - dma32 for legacy pci gart, 40 bits on newer asics
-        */
-       adev->need_dma32 = false;
-       dma_bits = adev->need_dma32 ? 32 : 40;
-       r = pci_set_dma_mask(adev->pdev, DMA_BIT_MASK(dma_bits));
+       r = dma_set_mask_and_coherent(adev->dev, DMA_BIT_MASK(40));
        if (r) {
-               adev->need_dma32 = true;
-               dma_bits = 32;
                pr_warn("amdgpu: No suitable DMA available\n");
+               return r;
        }
-       r = pci_set_consistent_dma_mask(adev->pdev, DMA_BIT_MASK(dma_bits));
-       if (r) {
-               pci_set_consistent_dma_mask(adev->pdev, DMA_BIT_MASK(32));
-               pr_warn("amdgpu: No coherent DMA available\n");
-       }
-       adev->need_swiotlb = drm_need_swiotlb(dma_bits);
+       adev->need_swiotlb = drm_need_swiotlb(40);
 
        r = gmc_v7_0_init_microcode(adev);
        if (r) {
 
 static int gmc_v8_0_sw_init(void *handle)
 {
        int r;
-       int dma_bits;
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 
        if (adev->flags & AMD_IS_APU) {
         */
        adev->gmc.mc_mask = 0xffffffffffULL; /* 40 bit MC */
 
-       /* set DMA mask + need_dma32 flags.
-        * PCIE - can handle 40-bits.
-        * IGP - can handle 40-bits
-        * PCI - dma32 for legacy pci gart, 40 bits on newer asics
-        */
-       adev->need_dma32 = false;
-       dma_bits = adev->need_dma32 ? 32 : 40;
-       r = pci_set_dma_mask(adev->pdev, DMA_BIT_MASK(dma_bits));
+       r = dma_set_mask_and_coherent(adev->dev, DMA_BIT_MASK(40));
        if (r) {
-               adev->need_dma32 = true;
-               dma_bits = 32;
                pr_warn("amdgpu: No suitable DMA available\n");
+               return r;
        }
-       r = pci_set_consistent_dma_mask(adev->pdev, DMA_BIT_MASK(dma_bits));
-       if (r) {
-               pci_set_consistent_dma_mask(adev->pdev, DMA_BIT_MASK(32));
-               pr_warn("amdgpu: No coherent DMA available\n");
-       }
-       adev->need_swiotlb = drm_need_swiotlb(dma_bits);
+       adev->need_swiotlb = drm_need_swiotlb(40);
 
        r = gmc_v8_0_init_microcode(adev);
        if (r) {
 
 static int gmc_v9_0_sw_init(void *handle)
 {
        int r;
-       int dma_bits;
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 
        gfxhub_v1_0_init(adev);
         */
        adev->gmc.mc_mask = 0xffffffffffffULL; /* 48 bit MC */
 
-       /* set DMA mask + need_dma32 flags.
-        * PCIE - can handle 44-bits.
-        * IGP - can handle 44-bits
-        * PCI - dma32 for legacy pci gart, 44 bits on vega10
-        */
-       adev->need_dma32 = false;
-       dma_bits = adev->need_dma32 ? 32 : 44;
-       r = pci_set_dma_mask(adev->pdev, DMA_BIT_MASK(dma_bits));
+       r = dma_set_mask_and_coherent(adev->dev, DMA_BIT_MASK(44));
        if (r) {
-               adev->need_dma32 = true;
-               dma_bits = 32;
                printk(KERN_WARNING "amdgpu: No suitable DMA available.\n");
+               return r;
        }
-       r = pci_set_consistent_dma_mask(adev->pdev, DMA_BIT_MASK(dma_bits));
-       if (r) {
-               pci_set_consistent_dma_mask(adev->pdev, DMA_BIT_MASK(32));
-               printk(KERN_WARNING "amdgpu: No coherent DMA available.\n");
-       }
-       adev->need_swiotlb = drm_need_swiotlb(dma_bits);
+       adev->need_swiotlb = drm_need_swiotlb(44);
 
        if (adev->gmc.xgmi.supported) {
                r = gfxhub_v1_1_get_xgmi_info(adev);