MIPS: loongson: untangle dma implementations

Only loongson-3 is DMA coherent and uses swiotlb.  So move the dma
address translations stubs directly to the loongson-3 code, and remove
a few Kconfig indirections.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Patchwork: https://patchwork.linux-mips.org/patch/19539/
Signed-off-by: Paul Burton <paul.burton@mips.com>
Cc: Florian Fainelli <f.fainelli@gmail.com>
Cc: David Daney <david.daney@cavium.com>
Cc: Kevin Cernekee <cernekee@gmail.com>
Cc: Jiaxun Yang <jiaxun.yang@flygoat.com>
Cc: Tom Bogendoerfer <tsbogend@alpha.franken.de>
Cc: Huacai Chen <chenhc@lemote.com>
Cc: iommu@lists.linux-foundation.org
Cc: linux-mips@linux-mips.org
This commit is contained in:
Christoph Hellwig 2018-06-15 13:08:41 +02:00 committed by Paul Burton
parent a330a9c59b
commit d3bc81befc
No known key found for this signature in database
GPG key ID: 3EA79FACB57500DD
5 changed files with 6 additions and 24 deletions

View file

@ -454,7 +454,6 @@ config MACH_LOONGSON32
config MACH_LOONGSON64 config MACH_LOONGSON64
bool "Loongson-2/3 family of machines" bool "Loongson-2/3 family of machines"
select ARCH_HAS_PHYS_TO_DMA
select SYS_SUPPORTS_ZBOOT select SYS_SUPPORTS_ZBOOT
help help
This enables the support of Loongson-2/3 family of machines. This enables the support of Loongson-2/3 family of machines.
@ -1389,6 +1388,7 @@ choice
config CPU_LOONGSON3 config CPU_LOONGSON3
bool "Loongson 3 CPU" bool "Loongson 3 CPU"
depends on SYS_HAS_CPU_LOONGSON3 depends on SYS_HAS_CPU_LOONGSON3
select ARCH_HAS_PHYS_TO_DMA
select CPU_SUPPORTS_64BIT_KERNEL select CPU_SUPPORTS_64BIT_KERNEL
select CPU_SUPPORTS_HIGHMEM select CPU_SUPPORTS_HIGHMEM
select CPU_SUPPORTS_HUGEPAGES select CPU_SUPPORTS_HUGEPAGES

View file

@ -93,7 +93,6 @@ config LOONGSON_MACH3X
select LOONGSON_MC146818 select LOONGSON_MC146818
select ZONE_DMA32 select ZONE_DMA32
select LEFI_FIRMWARE_INTERFACE select LEFI_FIRMWARE_INTERFACE
select PHYS48_TO_HT40
help help
Generic Loongson 3 family machines utilize the 3A/3B revision Generic Loongson 3 family machines utilize the 3A/3B revision
of Loongson processor and RS780/SBX00 chipset. of Loongson processor and RS780/SBX00 chipset.
@ -132,10 +131,6 @@ config LOONGSON_UART_BASE
default y default y
depends on EARLY_PRINTK || SERIAL_8250 depends on EARLY_PRINTK || SERIAL_8250
config PHYS48_TO_HT40
bool
default y if CPU_LOONGSON3
config LOONGSON_MC146818 config LOONGSON_MC146818
bool bool
default n default n

View file

@ -25,8 +25,3 @@ obj-$(CONFIG_CS5536) += cs5536/
# #
obj-$(CONFIG_SUSPEND) += pm.o obj-$(CONFIG_SUSPEND) += pm.o
#
# Big Memory (SWIOTLB) Support
#
obj-$(CONFIG_SWIOTLB) += dma-swiotlb.o

View file

@ -1,7 +1,7 @@
# #
# Makefile for Loongson-3 family machines # Makefile for Loongson-3 family machines
# #
obj-y += irq.o cop2-ex.o platform.o acpi_init.o obj-y += irq.o cop2-ex.o platform.o acpi_init.o dma.o
obj-$(CONFIG_SMP) += smp.o obj-$(CONFIG_SMP) += smp.o

View file

@ -5,26 +5,18 @@
dma_addr_t __phys_to_dma(struct device *dev, phys_addr_t paddr) dma_addr_t __phys_to_dma(struct device *dev, phys_addr_t paddr)
{ {
long nid;
#ifdef CONFIG_PHYS48_TO_HT40
/* We extract 2bit node id (bit 44~47, only bit 44~45 used now) from /* We extract 2bit node id (bit 44~47, only bit 44~45 used now) from
* Loongson-3's 48bit address space and embed it into 40bit */ * Loongson-3's 48bit address space and embed it into 40bit */
nid = (paddr >> 44) & 0x3; long nid = (paddr >> 44) & 0x3;
paddr = ((nid << 44) ^ paddr) | (nid << 37); return ((nid << 44) ^ paddr) | (nid << 37);
#endif
return paddr;
} }
phys_addr_t __dma_to_phys(struct device *dev, dma_addr_t daddr) phys_addr_t __dma_to_phys(struct device *dev, dma_addr_t daddr)
{ {
long nid;
#ifdef CONFIG_PHYS48_TO_HT40
/* We extract 2bit node id (bit 44~47, only bit 44~45 used now) from /* We extract 2bit node id (bit 44~47, only bit 44~45 used now) from
* Loongson-3's 48bit address space and embed it into 40bit */ * Loongson-3's 48bit address space and embed it into 40bit */
nid = (daddr >> 37) & 0x3; long nid = (daddr >> 37) & 0x3;
daddr = ((nid << 37) ^ daddr) | (nid << 44); return ((nid << 37) ^ daddr) | (nid << 44);
#endif
return daddr;
} }
void __init plat_swiotlb_setup(void) void __init plat_swiotlb_setup(void)