u32 *p;
        int i;
 
-       etnaviv_domain->base.bad_page_cpu = dma_alloc_coherent(
-                                               etnaviv_domain->base.dev,
-                                               SZ_4K,
-                                               &etnaviv_domain->base.bad_page_dma,
-                                               GFP_KERNEL);
+       etnaviv_domain->base.bad_page_cpu =
+                       dma_alloc_wc(etnaviv_domain->base.dev, SZ_4K,
+                                    &etnaviv_domain->base.bad_page_dma,
+                                    GFP_KERNEL);
        if (!etnaviv_domain->base.bad_page_cpu)
                return -ENOMEM;
 
        for (i = 0; i < SZ_4K / 4; i++)
                *p++ = 0xdead55aa;
 
-       etnaviv_domain->pgtable_cpu =
-                       dma_alloc_coherent(etnaviv_domain->base.dev, PT_SIZE,
-                                          &etnaviv_domain->pgtable_dma,
-                                          GFP_KERNEL);
+       etnaviv_domain->pgtable_cpu = dma_alloc_wc(etnaviv_domain->base.dev,
+                                                  PT_SIZE,
+                                                  &etnaviv_domain->pgtable_dma,
+                                                  GFP_KERNEL);
        if (!etnaviv_domain->pgtable_cpu) {
-               dma_free_coherent(etnaviv_domain->base.dev, SZ_4K,
-                                 etnaviv_domain->base.bad_page_cpu,
-                                 etnaviv_domain->base.bad_page_dma);
+               dma_free_wc(etnaviv_domain->base.dev, SZ_4K,
+                           etnaviv_domain->base.bad_page_cpu,
+                           etnaviv_domain->base.bad_page_dma);
                return -ENOMEM;
        }
 
        struct etnaviv_iommuv1_domain *etnaviv_domain =
                        to_etnaviv_domain(domain);
 
-       dma_free_coherent(etnaviv_domain->base.dev, PT_SIZE,
-                         etnaviv_domain->pgtable_cpu,
-                         etnaviv_domain->pgtable_dma);
+       dma_free_wc(etnaviv_domain->base.dev, PT_SIZE,
+                   etnaviv_domain->pgtable_cpu, etnaviv_domain->pgtable_dma);
 
-       dma_free_coherent(etnaviv_domain->base.dev, SZ_4K,
-                         etnaviv_domain->base.bad_page_cpu,
-                         etnaviv_domain->base.bad_page_dma);
+       dma_free_wc(etnaviv_domain->base.dev, SZ_4K,
+                   etnaviv_domain->base.bad_page_cpu,
+                   etnaviv_domain->base.bad_page_dma);
 
        kfree(etnaviv_domain);
 }
 
        int ret, i, j;
 
        /* allocate scratch page */
-       etnaviv_domain->base.bad_page_cpu = dma_alloc_coherent(
-                                               etnaviv_domain->base.dev,
-                                               SZ_4K,
-                                               &etnaviv_domain->base.bad_page_dma,
-                                               GFP_KERNEL);
+       etnaviv_domain->base.bad_page_cpu =
+                       dma_alloc_wc(etnaviv_domain->base.dev, SZ_4K,
+                                    &etnaviv_domain->base.bad_page_dma,
+                                    GFP_KERNEL);
        if (!etnaviv_domain->base.bad_page_cpu) {
                ret = -ENOMEM;
                goto fail_mem;
        for (i = 0; i < SZ_4K / 4; i++)
                *p++ = 0xdead55aa;
 
-       etnaviv_domain->pta_cpu = dma_alloc_coherent(etnaviv_domain->base.dev,
-                                                    SZ_4K,
-                                                    &etnaviv_domain->pta_dma,
-                                                    GFP_KERNEL);
+       etnaviv_domain->pta_cpu = dma_alloc_wc(etnaviv_domain->base.dev,
+                                              SZ_4K, &etnaviv_domain->pta_dma,
+                                              GFP_KERNEL);
        if (!etnaviv_domain->pta_cpu) {
                ret = -ENOMEM;
                goto fail_mem;
        }
 
-       etnaviv_domain->mtlb_cpu = dma_alloc_coherent(etnaviv_domain->base.dev,
-                                                 SZ_4K,
-                                                 &etnaviv_domain->mtlb_dma,
-                                                 GFP_KERNEL);
+       etnaviv_domain->mtlb_cpu = dma_alloc_wc(etnaviv_domain->base.dev,
+                                               SZ_4K, &etnaviv_domain->mtlb_dma,
+                                               GFP_KERNEL);
        if (!etnaviv_domain->mtlb_cpu) {
                ret = -ENOMEM;
                goto fail_mem;
        /* pre-populate STLB pages (may want to switch to on-demand later) */
        for (i = 0; i < MMUv2_MAX_STLB_ENTRIES; i++) {
                etnaviv_domain->stlb_cpu[i] =
-                               dma_alloc_coherent(etnaviv_domain->base.dev,
-                                                  SZ_4K,
-                                                  &etnaviv_domain->stlb_dma[i],
-                                                  GFP_KERNEL);
+                               dma_alloc_wc(etnaviv_domain->base.dev, SZ_4K,
+                                            &etnaviv_domain->stlb_dma[i],
+                                            GFP_KERNEL);
                if (!etnaviv_domain->stlb_cpu[i]) {
                        ret = -ENOMEM;
                        goto fail_mem;
 
 fail_mem:
        if (etnaviv_domain->base.bad_page_cpu)
-               dma_free_coherent(etnaviv_domain->base.dev, SZ_4K,
-                                 etnaviv_domain->base.bad_page_cpu,
-                                 etnaviv_domain->base.bad_page_dma);
+               dma_free_wc(etnaviv_domain->base.dev, SZ_4K,
+                           etnaviv_domain->base.bad_page_cpu,
+                           etnaviv_domain->base.bad_page_dma);
 
        if (etnaviv_domain->pta_cpu)
-               dma_free_coherent(etnaviv_domain->base.dev, SZ_4K,
-                                 etnaviv_domain->pta_cpu,
-                                 etnaviv_domain->pta_dma);
+               dma_free_wc(etnaviv_domain->base.dev, SZ_4K,
+                           etnaviv_domain->pta_cpu, etnaviv_domain->pta_dma);
 
        if (etnaviv_domain->mtlb_cpu)
-               dma_free_coherent(etnaviv_domain->base.dev, SZ_4K,
-                                 etnaviv_domain->mtlb_cpu,
-                                 etnaviv_domain->mtlb_dma);
+               dma_free_wc(etnaviv_domain->base.dev, SZ_4K,
+                           etnaviv_domain->mtlb_cpu, etnaviv_domain->mtlb_dma);
 
        for (i = 0; i < MMUv2_MAX_STLB_ENTRIES; i++) {
                if (etnaviv_domain->stlb_cpu[i])
-                       dma_free_coherent(etnaviv_domain->base.dev, SZ_4K,
-                                         etnaviv_domain->stlb_cpu[i],
-                                         etnaviv_domain->stlb_dma[i]);
+                       dma_free_wc(etnaviv_domain->base.dev, SZ_4K,
+                                   etnaviv_domain->stlb_cpu[i],
+                                   etnaviv_domain->stlb_dma[i]);
        }
 
        return ret;
                        to_etnaviv_domain(domain);
        int i;
 
-       dma_free_coherent(etnaviv_domain->base.dev, SZ_4K,
-                         etnaviv_domain->base.bad_page_cpu,
-                         etnaviv_domain->base.bad_page_dma);
+       dma_free_wc(etnaviv_domain->base.dev, SZ_4K,
+                   etnaviv_domain->base.bad_page_cpu,
+                   etnaviv_domain->base.bad_page_dma);
 
-       dma_free_coherent(etnaviv_domain->base.dev, SZ_4K,
-                         etnaviv_domain->pta_cpu,
-                         etnaviv_domain->pta_dma);
+       dma_free_wc(etnaviv_domain->base.dev, SZ_4K,
+                   etnaviv_domain->pta_cpu, etnaviv_domain->pta_dma);
 
-       dma_free_coherent(etnaviv_domain->base.dev, SZ_4K,
-                         etnaviv_domain->mtlb_cpu,
-                         etnaviv_domain->mtlb_dma);
+       dma_free_wc(etnaviv_domain->base.dev, SZ_4K,
+                   etnaviv_domain->mtlb_cpu, etnaviv_domain->mtlb_dma);
 
        for (i = 0; i < MMUv2_MAX_STLB_ENTRIES; i++) {
                if (etnaviv_domain->stlb_cpu[i])
-                       dma_free_coherent(etnaviv_domain->base.dev, SZ_4K,
-                                         etnaviv_domain->stlb_cpu[i],
-                                         etnaviv_domain->stlb_dma[i]);
+                       dma_free_wc(etnaviv_domain->base.dev, SZ_4K,
+                                   etnaviv_domain->stlb_cpu[i],
+                                   etnaviv_domain->stlb_dma[i]);
        }
 
        vfree(etnaviv_domain);