398a9db655
Several init/setup functions passed the PCI BAR resource start address
to ioremap_nocache() via an unsigned long. This caused address truncation
for a 32-bit device mapped above 4 GiB (i.e. the CPU interacts with the
device via a translated address), which resulted in a kernel panic.
This patch replaces all of the instances of intermediate variable use
with pci_ioremap_bar() to ensure the full resource_size_t start address
is used and that ioremap_nocache() is still called.
The kernel panic (Exar XR17V358 PCIe device on a Freescale P2020 SBC):
Machine check in kernel mode.
Caused by (from MCSR=10008): Bus - Read Data Bus Error
Oops: Machine check, sig: 7 [#1]
SMP NR_CPUS=2 X-ES P2020
Modules linked in:
CPU: 1 PID: 1 Comm: swapper/0 Not tainted 3.14.15-xes_r2-00002-g560e401 #978
task: bf850000 ti: bffee000 task.ti: bf84c000
NIP: 80318e10 LR: 80319ecc CTR: 80318dfc
REGS: bffeff10 TRAP: 0204 Not tainted (3.14.15-xes_r2-00002-g560e401)
MSR: 00021000 <CE,ME> CR: 20adbe42 XER: 00000000
DEAR: c1058001 ESR: 00000000
GPR00: 00000000 bf84db30 bf850000 80cb4af8 00000001 00000000 80000007 80000000
GPR08: bf837c9c c1058001 00000001 00000000 80000007 00000000 80002a10 00000000
GPR16: 00000000 00000000 00000000 00000000 00000000 00000000 80cb0000 80c72dc4
GPR24: 80cb4900 fffffffe 00029000 00000001 bf8c11e8 ffffffea 80c72ce4 80cb4af8
NIP [80318e10] mem_serial_in+0x14/0x28
LR [80319ecc] serial8250_config_port+0x160/0xe38
Call Trace:
[bf84db30] [80319d94] serial8250_config_port+0x28/0xe38 (unreliable)
[bf84db60] [80315e3c] uart_add_one_port+0x148/0x3a4
[bf84dbf0] [8031bf40] serial8250_register_8250_port+0x2dc/0x3c8
[bf84dc20] [8032111c] pciserial_init_ports+0xd4/0x1c0
[bf84dd50] [
|
||
---|---|---|
.. | ||
8250_accent.c | ||
8250_acorn.c | ||
8250_boca.c | ||
8250_core.c | ||
8250_dma.c | ||
8250_dw.c | ||
8250_early.c | ||
8250_em.c | ||
8250_exar_st16c554.c | ||
8250_fintek.c | ||
8250_fourport.c | ||
8250_fsl.c | ||
8250_gsc.c | ||
8250_hp300.c | ||
8250_hub6.c | ||
8250_mtk.c | ||
8250_omap.c | ||
8250_pci.c | ||
8250_pnp.c | ||
8250.h | ||
Kconfig | ||
Makefile | ||
serial_cs.c |