#12682: WRT350nv1 BCM47XX Data bus error kernel oops on bootup
--------------------------+---------------------------------------
Reporter: Bill Farrow | Owner: hauke
Type: defect | Status: assigned
Priority: normal | Milestone: Barrier Breaker 14.07
Component: kernel | Version: Trunk
Resolution: | Keywords: WRT350nv1 BCM47XX ssb pci
--------------------------+---------------------------------------
Comment (by rmilecki):
Hi, I would like to bring back some focus to this bug.
I own a [https://wikidevi.com/wiki/Linksys_WRT300N_v1.0 WRT300N v1.0]
which is a very similar device. It's based on BCM4704 instead of BCM4705
but also has CardBus BCM4321. I'm also getting `Data bus error` during the
first MMIO read: `idhi = scan_read32(bus, 0, SSB_IDHIGH);`
I believe the key to understand this bug is analyze of PCI resources.
Following log comes from my WRT300N v1.0 using kernel 3.18.10:
{{{
[ 0.980000] pci 0000:00:00.0: BAR 1: assigned [mem
0x40000000-0x47ffffff pref]
[ 0.990000] pci 0000:00:01.0: BAR 0: assigned [mem
0x48000000-0x48003fff]
[ 1.010000] pci 0000:00:00.0: BAR 0: assigned [mem
0x48004000-0x48005fff]
}}}
Assigning resources is done by setting PCI config registers
`PCI_BASE_ADDRESS_[0-5]`. So I decided to:
1. Print info about every write to config register
2. Dump resources configuration after every update
{{{
[ssb_pciecore_dump][bus:0 dev:0 func:0 off:0x10] 0x00000000
[ssb_pciecore_dump][bus:0 dev:0 func:0 off:0x14] 0x00000008
[ssb_pciecore_dump][bus:0 dev:1 func:0 off:0x10] 0x00000000
pci 0000:00:00.0: BAR 1: assigned [mem 0x40000000-0x47ffffff pref]
[ssb_extpci_write_config] bus:0 dev:0 func:0 off:0x14 addr:0x0c010014
val:0x40000008
[ssb_pciecore_dump][bus:0 dev:0 func:0 off:0x10] 0x00000000
[ssb_pciecore_dump][bus:0 dev:0 func:0 off:0x14] 0x40000008
[ssb_pciecore_dump][bus:0 dev:1 func:0 off:0x10] 0x00000000
pci 0000:00:01.0: BAR 0: assigned [mem 0x48000000-0x48003fff]
[ssb_extpci_write_config] bus:0 dev:1 func:0 off:0x10 addr:0x0c020010
val:0x48000000
[ssb_pciecore_dump][bus:0 dev:0 func:0 off:0x10] 0x48000000
[ssb_pciecore_dump][bus:0 dev:0 func:0 off:0x14] 0x40000008
[ssb_pciecore_dump][bus:0 dev:1 func:0 off:0x10] 0x48000000
pci 0000:00:00.0: BAR 0: assigned [mem 0x48004000-0x48005fff]
[ssb_extpci_write_config] bus:0 dev:0 func:0 off:0x10 addr:0x0c010010
val:0x48004000
[ssb_pciecore_dump][bus:0 dev:0 func:0 off:0x10] 0x48004000
[ssb_pciecore_dump][bus:0 dev:0 func:0 off:0x14] 0x40000008
[ssb_pciecore_dump][bus:0 dev:1 func:0 off:0x10] 0x48004000
}}}
You should notice from above log, that assigning '''different''' resources
for `0000:00:00.0` and `0000:00:01.0` doesn't work. In my case it results
in `0000:00:01.0` (device with SSB bus, chipset 0x4321) having wrong
resource assigned.
Unfortunately I'm not sure how to solve this. I guess we should somehow
tell kernel to don't assign any resources to the `0000:00:00.0` (bridge)
device.
Some slightly-related commit:
[http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=a6c84622b7fa3ea5417a9d1d0ce0bc3e7fbe3be1
ssb: fix cardbus slot in hostmode].
--
Ticket URL: <https://dev.openwrt.org/ticket/12682#comment:11>
OpenWrt <http://openwrt.org>
Opensource Wireless Router Technology
_______________________________________________
openwrt-tickets mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-tickets