2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2025-01-05 20:24:09 +08:00
linux-next/Documentation/devicetree/bindings
Jan Kundrát 8031358635 serial: max310x: Use level-triggered interrupts
I was getting this trace along with a disabled IRQ when I was generating
heavy traffic over four daisy-chained UARTs (MAX14830) on my test kit
(Marvell Armada AM388, Solidrun Clearfog Base):

    irq 51: nobody cared (try booting with the "irqpoll" option)
    CPU: 0 PID: 68 Comm: irq/51-spi1.2 Not tainted 4.14.4 #7
    Hardware name: Marvell Armada 380/385 (Device Tree)
    [<c0110ba4>] (unwind_backtrace) from [<c010c1d8>] (show_stack+0x10/0x14)
    [<c010c1d8>] (show_stack) from [<c07776ac>] (dump_stack+0x84/0x98)
    [<c07776ac>] (dump_stack) from [<c016bdfc>] (__report_bad_irq+0x28/0xcc)
    [<c016bdfc>] (__report_bad_irq) from [<c016c204>] (note_interrupt+0x28c/0x2dc)
    [<c016c204>] (note_interrupt) from [<c01695d4>] (handle_irq_event_percpu+0x4c/0x58)
    [<c01695d4>] (handle_irq_event_percpu) from [<c0169624>] (handle_irq_event+0x44/0x68)
    [<c0169624>] (handle_irq_event) from [<c016ce80>] (handle_edge_irq+0x12c/0x1dc)
    [<c016ce80>] (handle_edge_irq) from [<c016872c>] (generic_handle_irq+0x24/0x34)
    [<c016872c>] (generic_handle_irq) from [<c03fc5a0>] (mvebu_gpio_irq_handler+0xe0/0x184)
    [<c03fc5a0>] (mvebu_gpio_irq_handler) from [<c016872c>] (generic_handle_irq+0x24/0x34)
    [<c016872c>] (generic_handle_irq) from [<c0168c4c>] (__handle_domain_irq+0x5c/0xb4)
    [<c0168c4c>] (__handle_domain_irq) from [<c0101520>] (gic_handle_irq+0x4c/0x90)
    [<c0101520>] (gic_handle_irq) from [<c010ce4c>] (__irq_svc+0x6c/0x90)
    Exception stack(0xeea77c30 to 0xeea77c78)
    7c20:                                     0000000a 018cba80 0000000a f098f680
    7c40: 0000020a f098f680 00000008 0000020a 018cba80 00000001 ee9302a0 eea76000
    7c60: ef2b2640 eea77c80 c050687c c0506894 80070013 ffffffff
    [<c010ce4c>] (__irq_svc) from [<c0506894>] (orion_spi_setup_transfer+0x118/0x20c)
    [<c0506894>] (orion_spi_setup_transfer) from [<c05069ac>] (orion_spi_transfer_one+0x1c/0x26c)
    [<c05069ac>] (orion_spi_transfer_one) from [<c05060e4>] (spi_transfer_one_message+0xec/0x500)
    [<c05060e4>] (spi_transfer_one_message) from [<c05059a4>] (__spi_pump_messages+0x3f4/0x680)
    [<c05059a4>] (__spi_pump_messages) from [<c0505e38>] (__spi_sync+0x1fc/0x200)
    [<c0505e38>] (__spi_sync) from [<c0505e60>] (spi_sync+0x24/0x3c)
    [<c0505e60>] (spi_sync) from [<c0505f48>] (spi_write_then_read+0xd0/0x17c)
    [<c0505f48>] (spi_write_then_read) from [<c0482efc>] (_regmap_raw_read+0xb0/0x250)
    [<c0482efc>] (_regmap_raw_read) from [<c04830c0>] (_regmap_bus_read+0x24/0x4c)
    [<c04830c0>] (_regmap_bus_read) from [<c04826f4>] (_regmap_read+0x60/0x148)
    [<c04826f4>] (_regmap_read) from [<c0482818>] (regmap_read+0x3c/0x5c)
    [<c0482818>] (regmap_read) from [<c04592b4>] (max310x_port_irq+0x104/0x2dc)
    [<c04592b4>] (max310x_port_irq) from [<c0459a40>] (max310x_ist+0x68/0xc0)
    [<c0459a40>] (max310x_ist) from [<c016a610>] (irq_thread_fn+0x1c/0x54)
    [<c016a610>] (irq_thread_fn) from [<c016a8d8>] (irq_thread+0x12c/0x1f0)
    [<c016a8d8>] (irq_thread) from [<c013e560>] (kthread+0x128/0x158)
    [<c013e560>] (kthread) from [<c0107a50>] (ret_from_fork+0x14/0x24)
    handlers:
    [<c0169694>] irq_default_primary_handler threaded [<c04599d8>] max310x_ist
    Disabling IRQ #51

On a multi-UART max310x, each UART has its own interrupt status register
which automatically de-asserts the IRQ line upon read. (There are also
top-level IRQ indicator registers which are not clear-on-read, but they
are not relevant here.) It was quite possible to receive a pending IRQ
for, e.g., UART0, enter the threaded IRQ handler, clear the ISR for
UART0 which de-asserts the IRQ line, and then race with another event on
the same chip, but a different UART channel. That resulted in another
edge on the shared-within-the-chip IRQ line which got intercepted by the
kernel.

That all led to an edge-level interrupt which was not being handled by
anybody because our threaded handler hasn't finished yet. As the chip
actually uses *level* triggered IRQs, let's convert the example DT
bindings to these.

Signed-off-by: Jan Kundrát <jan.kundrat@cesnet.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-12-19 09:59:01 +01:00
..
arc ARC: [plat-hsdk] initial port for HSDK board 2017-09-01 11:26:28 -07:00
arm dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
ata Merge branch 'for-4.15' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata 2017-11-15 14:11:41 -08:00
auxdisplay
board
bus ARM: Device-tree updates for 4.15 2017-11-16 15:48:26 -08:00
c6x
clock dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
cpufreq
cris
crypto dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
devfreq dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
display dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
dma dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
edac
eeprom dt-bindings: eeprom: at25: Document device-specific compatible values 2017-12-06 15:11:43 -06:00
extcon
firmware ARM: SoC driver updates for v4.15 2017-11-16 16:05:01 -08:00
fpga DeviceTree updates for 4.14: 2017-09-07 14:43:33 -07:00
fsi
fuse
goldfish
gpio DeviceTree fixes for v4.15 (part2): 2017-12-08 13:00:51 -08:00
gpu dt-bindings: gpu: mali-utgard: add optional power-domain reference 2017-09-22 11:17:54 +02:00
h8300
hsi dt-bindings: hsi: add omap4 hsi controller bindings 2017-10-01 17:19:54 +02:00
hwlock
hwmon hwmon: (jc42) optionally try to disable the SMBUS timeout 2017-11-30 13:12:44 -08:00
i2c dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
iio dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
infiniband
input dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
interrupt-controller dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
iommu dt-bindings: Remove leading zeros from bindings notation 2017-11-09 17:05:05 -06:00
ipmi
leds DeviceTree for 4.15: 2017-11-14 18:25:40 -08:00
lpddr2
mailbox dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
media dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
memory-controllers dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
metag
mfd dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
mips dt-bindings: Document MIPS Broadcom STB power management nodes 2017-09-25 11:46:51 -07:00
misc dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
mmc dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
mtd dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
mux
net dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
nios2 dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
nvmem Char/Misc patches for 4.15-rc1 2017-11-16 09:10:59 -08:00
openrisc/opencores dt-bindings: openrisc: Add OpenRISC platform SoC 2017-11-03 14:01:04 +09:00
opp dt-bindings: Remove "status" from examples 2017-09-05 10:03:06 -05:00
pci dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
perf
phy dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
pinctrl dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
power ARM: SoC driver updates for v4.15 2017-11-16 16:05:01 -08:00
powerpc dt-bindings: Remove leading zeros from bindings notation 2017-11-09 17:05:05 -06:00
pps drivers/pps: aesthetic tweaks to PPS-related content 2017-09-08 18:26:51 -07:00
ptp DeviceTree updates for 4.14: 2017-09-07 14:43:33 -07:00
pwm pwm: Changes for v4.15-rc1 2017-11-22 21:09:18 -10:00
regmap
regulator dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
remoteproc remoteproc: qcom: Add support for mss remoteproc on msm8996 2017-10-30 18:37:23 -07:00
reserved-memory dt-binding: soc: qcom: Add binding for rmtfs memory 2017-10-22 05:06:34 -05:00
reset ARM: SoC driver updates for v4.15 2017-11-16 16:05:01 -08:00
riscv dt-bindings: RISC-V CPU Bindings 2017-09-25 15:50:57 -07:00
rng dt-bindings: rng: Document BCM7278 RNG200 compatible 2017-11-10 19:20:08 +08:00
rtc RTC for 4.15 2017-11-22 20:58:23 -10:00
scsi dt-bindings: Remove "status" from examples 2017-09-05 10:03:06 -05:00
security/tpm Merge branch 'next-tpm' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security 2017-09-24 11:34:28 -07:00
serial serial: max310x: Use level-triggered interrupts 2017-12-19 09:59:01 +01:00
serio dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
soc dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
sound dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
spi dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
spmi
sram dt-bindings: Remove leading zeros from bindings notation 2017-11-09 17:05:05 -06:00
staging/iio/adc
thermal dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
timer DeviceTree for 4.15: 2017-11-14 18:25:40 -08:00
ufs dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
usb ARM: SoC fixes for 4.15-rc 2017-12-10 08:26:59 -08:00
virtio
w1 dt-bindings: Remove "status" from examples 2017-09-05 10:03:06 -05:00
watchdog dt-bindings: Remove leading 0x from bindings notation 2017-12-06 14:56:33 -06:00
x86
xillybus
ABI.txt
chosen.txt
common-properties.txt dt-bindings: Document common property for daisy-chained devices 2017-10-19 22:33:11 +02:00
graph.txt
marvell.txt dt-bindings: Remove leading zeros from bindings notation 2017-11-09 17:05:05 -06:00
numa.txt
property-units.txt
resource-names.txt
sparc_sun_oracle_rng.txt
submitting-patches.txt
trivial-devices.txt RTC for 4.15 2017-11-22 20:58:23 -10:00
unittest.txt dt-bindings: Remove "status" from examples 2017-09-05 10:03:06 -05:00
vendor-prefixes.txt ARM: Device-tree updates for 4.15 2017-11-16 15:48:26 -08:00
xilinx.txt