android_kernel_motorola_sm6375/Documentation
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Madalin Bucur c211a30c18 dt-bindings: net: FMan erratum A050385
[ Upstream commit 26d5bb9e4c4b541c475751e015072eb2cbf70d15 ]

FMAN DMA read or writes under heavy traffic load may cause FMAN
internal resource leak; thus stopping further packet processing.

The FMAN internal queue can overflow when FMAN splits single
read or write transactions into multiple smaller transactions
such that more than 17 AXI transactions are in flight from FMAN
to interconnect. When the FMAN internal queue overflows, it can
stall further packet processing. The issue can occur with any one
of the following three conditions:

  1. FMAN AXI transaction crosses 4K address boundary (Errata
     A010022)
  2. FMAN DMA address for an AXI transaction is not 16 byte
     aligned, i.e. the last 4 bits of an address are non-zero
  3. Scatter Gather (SG) frames have more than one SG buffer in
     the SG list and any one of the buffers, except the last
     buffer in the SG list has data size that is not a multiple
     of 16 bytes, i.e., other than 16, 32, 48, 64, etc.

With any one of the above three conditions present, there is
likelihood of stalled FMAN packet processing, especially under
stress with multiple ports injecting line-rate traffic.

To avoid situations that stall FMAN packet processing, all of the
above three conditions must be avoided; therefore, configure the
system with the following rules:

  1. Frame buffers must not span a 4KB address boundary, unless
     the frame start address is 256 byte aligned
  2. All FMAN DMA start addresses (for example, BMAN buffer
     address, FD[address] + FD[offset]) are 16B aligned
  3. SG table and buffer addresses are 16B aligned and the size
     of SG buffers are multiple of 16 bytes, except for the last
     SG buffer that can be of any size.

Additional workaround notes:
- Address alignment of 64 bytes is recommended for maximally
efficient system bus transactions (although 16 byte alignment is
sufficient to avoid the stall condition)
- To support frame sizes that are larger than 4K bytes, there are
two options:
  1. Large single buffer frames that span a 4KB page boundary can
     be converted into SG frames to avoid transaction splits at
     the 4KB boundary,
  2. Align the large single buffer to 256B address boundaries,
     ensure that the frame address plus offset is 256B aligned.
- If software generated SG frames have buffers that are unaligned
and with random non-multiple of 16 byte lengths, before
transmitting such frames via FMAN, frames will need to be copied
into a new single buffer or multiple buffer SG frame that is
compliant with the three rules listed above.

Signed-off-by: Madalin Bucur <madalin.bucur@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2020-04-01 11:01:52 +02:00
..
ABI PM / devfreq: Add new name attribute for sysfs 2020-02-05 21:22:40 +00:00
accounting
admin-guide ACPI: watchdog: Allow disabling WDAT at boot 2020-03-21 08:11:47 +01:00
arm
arm64 mm: Avoid creating virtual address aliases in brk()/mmap()/mremap() 2020-02-28 17:22:21 +01:00
block
bpf
cdrom
core-api Modules fixes for v5.4-rc3 2019-10-11 10:19:24 -07:00
cpu-freq
crypto
dev-tools mm, page_owner: decouple freeing stack trace from debug_pagealloc 2019-10-14 15:04:00 -07:00
devicetree dt-bindings: net: FMan erratum A050385 2020-04-01 11:01:52 +02:00
doc-guide
driver-api
EDID
fault-injection
fb fbdev: fix numbering of fbcon options 2020-02-24 08:36:42 +01:00
features
filesystems cifs_atomic_open(): fix double-put on late allocation failure 2020-03-18 07:17:51 +01:00
firmware-guide
firmware_class
fpga
gpu
hid
hwmon hwmon: docs: Extend inspur-ipsps1 title underline 2019-10-07 05:56:57 -07:00
i2c
ia64
ide
iio
infiniband
input
ioctl
isdn
kbuild modpost: move the namespace field in Module.symvers last 2020-03-25 08:25:55 +01:00
kernel-hacking
leds
livepatch
locking
m68k
maintainer
media drm main pull for 5.4-rc1 2019-09-19 16:24:24 -07:00
mic
mips Main MIPS changes for v5.4: 2019-09-22 09:30:30 -07:00
misc-devices
netlabel
networking netfilter: nf_flowtable: fix documentation 2020-03-05 16:43:51 +01:00
nios2
openrisc
parisc
PCI
pcmcia
power
powerpc
process Documentation/process: Add fallthrough pseudo-keyword 2019-10-11 09:26:05 -07:00
RCU
riscv
s390
scheduler
scsi scsi: smartpqi: Update attribute name to driver_version 2020-01-17 19:48:27 +01:00
security Merge branch 'next-integrity' of git://git.kernel.org/pub/scm/linux/kernel/git/zohar/linux-integrity 2019-09-27 19:37:27 -07:00
sh
sound
sparc
sphinx
sphinx-static
spi
target
timers
trace Tracing updates: 2019-09-20 11:19:48 -07:00
translations
usb USB: rio500: Remove Rio 500 kernel driver 2019-10-04 10:53:36 +02:00
userspace-api
virt KVM/Hyper-V: Add new KVM capability KVM_CAP_HYPERV_DIRECT_TLBFLUSH 2019-09-24 13:37:13 +02:00
virtual
vm mm: treewide: clarify pgtable_page_{ctor,dtor}() naming 2019-09-26 10:10:44 -07:00
w1
watchdog linux-watchdog 5.4-rc1 tag 2019-09-27 11:17:38 -07:00
x86 x86/speculation/taa: Add documentation for TSX Async Abort 2019-10-28 08:37:00 +01:00
xtensa
.gitignore
atomic_bitops.txt
atomic_t.txt
bus-virt-phys-mapping.txt
Changes
CodingStyle
conf.py
COPYING-logo
crc32.txt
debugging-modules.txt
debugging-via-ohci1394.txt
digsig.txt
DMA-API-HOWTO.txt
DMA-API.txt
DMA-attributes.txt
DMA-ISA-LPC.txt
docutils.conf
dontdiff
futex-requeue-pi.txt
hwspinlock.txt
index.rst Main MIPS changes for v5.4: 2019-09-22 09:30:30 -07:00
io-mapping.txt
io_ordering.txt
IPMI.txt
IRQ-affinity.txt
IRQ-domain.txt
IRQ.txt
irqflags-tracing.txt
Kconfig
kobject.txt
kprobes.txt
kref.txt
logo.gif
lzo.txt
mailbox.txt
Makefile
memory-barriers.txt
nommu-mmap.txt
padata.txt
percpu-rw-semaphore.txt
pi-futex.txt
preempt-locking.txt
rbtree.txt
remoteproc.txt
robust-futex-ABI.txt
robust-futexes.txt
rpmsg.txt
speculation.txt
static-keys.txt
SubmittingPatches
tee.txt
this_cpu_ops.txt
unaligned-memory-access.txt
xz.txt