config MACH_LOONGSON64
        bool "Loongson 64-bit family of machines"
+       select ARCH_DMA_DEFAULT_COHERENT
        select ARCH_SPARSEMEM_ENABLE
        select ARCH_MIGHT_HAVE_PC_PARPORT
        select ARCH_MIGHT_HAVE_PC_SERIO
        select CPU_SUPPORTS_MSA
        select CPU_DIEI_BROKEN if !LOONGSON3_ENHANCEMENT
        select CPU_MIPSR2_IRQ_VI
+       select DMA_NONCOHERENT
        select WEAK_ORDERING
        select WEAK_REORDERING_BEYOND_LLSC
        select MIPS_ASID_BITS_VARIABLE
 
  * Copyright (C) 2009 Lemote Inc.
  * Author: Wu Zhangjin, wuzhangjin@gmail.com
  */
+
+#include <linux/dma-map-ops.h>
 #include <linux/export.h>
 #include <linux/pci_ids.h>
 #include <asm/bootinfo.h>
 
        loongson_sysconf.dma_mask_bits = eirq_source->dma_mask_bits;
        if (loongson_sysconf.dma_mask_bits < 32 ||
-               loongson_sysconf.dma_mask_bits > 64)
+                       loongson_sysconf.dma_mask_bits > 64) {
                loongson_sysconf.dma_mask_bits = 32;
+               dma_default_coherent = true;
+       } else {
+               dma_default_coherent = !eirq_source->dma_noncoherent;
+       }
+
+       pr_info("Firmware: Coherent DMA: %s\n", dma_default_coherent ? "on" : "off");
 
        loongson_sysconf.restart_addr = boot_p->reset_system.ResetWarm;
        loongson_sysconf.poweroff_addr = boot_p->reset_system.Shutdown;