kernel_optimize_test/arch/mips
Maciej W. Rozycki e4849aff1e
MIPS: SiByte: Enable swiotlb for SWARM, LittleSur and BigSur
The Broadcom SiByte BCM1250, BCM1125, and BCM1125H SOCs have an onchip
DRAM controller that supports memory amounts of up to 16GiB, and due to
how the address decoder has been wired in the SOC any memory beyond 1GiB
is actually mapped starting from 4GiB physical up, that is beyond the
32-bit addressable limit[1].  Consequently if the maximum amount of
memory has been installed, then it will span up to 19GiB.

Many of the evaluation boards we support that are based on one of these
SOCs have their memory soldered and the amount present fits in the
32-bit address range.  The BCM91250A SWARM board however has actual DIMM
slots and accepts, depending on the peripherals revision of the SOC, up
to 4GiB or 8GiB of memory in commercially available JEDEC modules[2].
I believe this is also the case with the BCM91250C2 LittleSur board.
This means that up to either 3GiB or 7GiB of memory requires 64-bit
addressing to access.

I believe the BCM91480B BigSur board, which has the BCM1480 SOC instead,
accepts at least as much memory, although I have no documentation or
actual hardware available to verify that.

Both systems have PCI slots installed for use by any PCI option boards,
including ones that only support 32-bit addressing (additionally the
32-bit PCI host bridge of the BCM1250, BCM1125, and BCM1125H SOCs limits
addressing to 32-bits), and there is no IOMMU available.  Therefore for
PCI DMA to work in the presence of memory beyond enable swiotlb for the
affected systems.

All the other SOC onchip DMA devices use 40-bit addressing and therefore
can address the whole memory, so only enable swiotlb if PCI support and
support for DMA beyond 4GiB have been both enabled in the configuration
of the kernel.

This shows up as follows:

Broadcom SiByte BCM1250 B2 @ 800 MHz (SB1 rev 2)
Board type: SiByte BCM91250A (SWARM)
Determined physical RAM map:
 memory: 000000000fe7fe00 @ 0000000000000000 (usable)
 memory: 000000001ffffe00 @ 0000000080000000 (usable)
 memory: 000000000ffffe00 @ 00000000c0000000 (usable)
 memory: 0000000087fffe00 @ 0000000100000000 (usable)
software IO TLB: mapped [mem 0xcbffc000-0xcfffc000] (64MB)

in the bootstrap log and removes failures like these:

defxx 0000:02:00.0: dma_direct_map_page: overflow 0x0000000185bc6080+4608 of device mask ffffffff bus mask 0
fddi0: Receive buffer allocation failed
fddi0: Adapter open failed!
IP-Config: Failed to open fddi0
defxx 0000:09:08.0: dma_direct_map_page: overflow 0x0000000185bc6080+4608 of device mask ffffffff bus mask 0
fddi1: Receive buffer allocation failed
fddi1: Adapter open failed!
IP-Config: Failed to open fddi1

when memory beyond 4GiB is handed out to devices that can only do 32-bit
addressing.

This updates commit cce335ae47 ("[MIPS] 64-bit Sibyte kernels need
DMA32.").

References:

[1] "BCM1250/BCM1125/BCM1125H User Manual", Revision 1250_1125-UM100-R,
    Broadcom Corporation, 21 Oct 2002, Section 3: "System Overview",
    "Memory Map", pp. 34-38

[2] "BCM91250A User Manual", Revision 91250A-UM100-R, Broadcom
    Corporation, 18 May 2004, Section 3: "Physical Description",
    "Supported DRAM", p. 23

Signed-off-by: Maciej W. Rozycki <macro@linux-mips.org>
[paul.burton@mips.com: Remove GPL text from dma.c; SPDX tag covers it]
Signed-off-by: Paul Burton <paul.burton@mips.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Patchwork: https://patchwork.linux-mips.org/patch/21108/
References: cce335ae47 ("[MIPS] 64-bit Sibyte kernels need DMA32.")
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
2018-11-15 10:58:01 -08:00
..
alchemy mtd: rawnand: Move platform_nand_xxx definitions out of rawnand.h 2018-10-03 11:12:25 +02:00
ar7 mm: remove include/linux/bootmem.h 2018-10-31 08:54:16 -07:00
ath25
ath79 mm: remove include/linux/bootmem.h 2018-10-31 08:54:16 -07:00
bcm47xx MIPS: BCM47XX: Enable USB power on Netgear WNDR3400v3 2018-08-29 11:11:00 -07:00
bcm63xx mm: remove include/linux/bootmem.h 2018-10-31 08:54:16 -07:00
bmips mm: remove include/linux/bootmem.h 2018-10-31 08:54:16 -07:00
boot MIPS: Boston: Disable EG20T prefetch 2018-11-09 17:20:17 -08:00
cavium-octeon mm: remove include/linux/bootmem.h 2018-10-31 08:54:16 -07:00
cobalt
configs MIPS: DEC: Add 64-bit DECstation defconfig 2018-11-06 15:37:24 -08:00
crypto
dec mm: remove include/linux/bootmem.h 2018-10-31 08:54:16 -07:00
emma mm: remove include/linux/bootmem.h 2018-10-31 08:54:16 -07:00
fw mm: remove include/linux/bootmem.h 2018-10-31 08:54:16 -07:00
generic MIPS: mscc: add PCB120 to the ocelot fitImage 2018-10-09 10:38:29 -07:00
include MIPS: Use Kconfig to select CPU_NO_EFFICIENT_FFS 2018-11-12 14:26:16 -08:00
jazz mm: remove include/linux/bootmem.h 2018-10-31 08:54:16 -07:00
jz4740 JFFS2 changes: 2018-08-14 10:57:44 -07:00
kernel MIPS: Don't dump Hi & Lo regs on >= MIPSr6 2018-11-09 17:20:12 -08:00
kvm MIPS: Introduce CONFIG_MIPS_FP_SUPPORT 2018-11-09 10:23:15 -08:00
lantiq mm: remove include/linux/bootmem.h 2018-10-31 08:54:16 -07:00
lasat mm: remove include/linux/bootmem.h 2018-10-31 08:54:16 -07:00
lib MIPS: lib: Use kernel_pref & user_pref in memcpy() 2018-10-15 23:11:14 -07:00
loongson32
loongson64 MIPS: Simplify FP context initialization 2018-11-09 10:23:13 -08:00
math-emu MIPS: Ensure emulated FP sets PF_USED_MATH 2018-11-09 10:23:14 -08:00
mm mm: remove include/linux/bootmem.h 2018-10-31 08:54:16 -07:00
mti-malta mm: remove include/linux/bootmem.h 2018-10-31 08:54:16 -07:00
net
netlogic mm: remove include/linux/bootmem.h 2018-10-31 08:54:16 -07:00
oprofile
paravirt
pci MIPS: SiByte: Set 32-bit bus mask for BCM1250 PCI 2018-11-15 10:57:44 -08:00
pic32
pistachio
pmcs-msp71xx MIPS: Remove no-op/identity casts 2018-08-31 11:49:20 -07:00
pnx833x mtd: rawnand: Move platform_nand_xxx definitions out of rawnand.h 2018-10-03 11:12:25 +02:00
power
ralink mm: remove include/linux/bootmem.h 2018-10-31 08:54:16 -07:00
rb532 mm: remove include/linux/bootmem.h 2018-10-31 08:54:16 -07:00
sgi-ip22 MIPS: Remove no-op/identity casts 2018-08-31 11:49:20 -07:00
sgi-ip27 mm: remove include/linux/bootmem.h 2018-10-31 08:54:16 -07:00
sgi-ip32
sibyte MIPS: SiByte: Enable swiotlb for SWARM, LittleSur and BigSur 2018-11-15 10:58:01 -08:00
sni
tools MIPS: Use a custom elf-entry program to find kernel entry point 2018-08-30 09:39:22 -07:00
txx9 mm: remove include/linux/bootmem.h 2018-10-31 08:54:16 -07:00
vdso kbuild: replace cc-name test with CONFIG_CC_IS_CLANG 2018-11-02 22:49:00 +09:00
vr41xx
Kbuild
Kbuild.platforms
Kconfig MIPS: SiByte: Enable swiotlb for SWARM, LittleSur and BigSur 2018-11-15 10:58:01 -08:00
Kconfig.debug
Makefile MIPS: Don't compile math-emu when CONFIG_MIPS_FP_SUPPORT=n 2018-11-09 10:23:18 -08:00
Makefile.postlink