Using the generic host PCIe driver

Mason slash.tmp at free.fr
Wed Mar 1 10:05:26 PST 2017


On 01/03/2017 17:18, Bjorn Helgaas wrote:

> On Wed, Mar 01, 2017 at 04:18:51PM +0100, Mason wrote:
>
>> [    0.657711] pci 0000:00:00.0: BAR 0: no space for [mem size 0x01000000 64bit]
>> [    0.657731] pci 0000:00:00.0: BAR 0: failed to assign [mem size 0x01000000 64bit]
>> [    0.657755] pci 0000:00:00.0: BAR 8: assigned [mem 0xa0000000-0xa00fffff]
>> [    0.657776] pci 0000:01:00.0: BAR 0: assigned [mem 0xa0000000-0xa0001fff 64bit]
>>
>> These 4 statements sound fishy.
> 
> 00:00.0 is a PCI-to-PCI bridge.  "BAR 8" is its memory window (as shown
> below).  01:00.0 is below the bridge and is using part of the window.  That
> part is normal.
> 
> 00:00.0 also has a BAR of its own.  That's perfectly legal but slightly
> unusual.  The device will still work fine as a generic PCI-to-PCI bridge
> even though we didn't assign the BAR.
> 
> The BAR would contain device-specific stuff: maybe performance monitoring
> or management interfaces.  Those things won't work because we didn't assign
> space.  But even if we did assign space, they would require a special
> driver to make them work, since they're device-specific and the PCI core
> knows nothing about them.
> 
> Bottom line is that you can ignore the 00:00.0 BAR 0 assignment
> failure.  It has nothing to do with getting other devices below the
> bridge to work.

Another thing I don't understand... According to this reference:
http://elinux.org/Device_Tree_Usage#PCI_Address_Translation

The "ranges" prop starts with:

    phys.hi  cell: npt000ss bbbbbbbb dddddfff rrrrrrrr
    phys.mid cell: hhhhhhhh hhhhhhhh hhhhhhhh hhhhhhhh
    phys.low cell: llllllll llllllll llllllll llllllll

So I thought it might be possible to specify bbbbbbbb = 0x01
to mean "I want to assign memory only to bus 1, don't assign
any memory to bus 0". Am I mistaken?

The kernel panics when I use

	ranges = <0x02010000 0x0 0x90000000  0x90000000  0x0 0x00100000>;

[    1.118503] pci 0000:00:00.0: BAR 0: no space for [mem size 0x01000000 64bit]
[    1.125774] pci 0000:00:00.0: BAR 0: failed to assign [mem size 0x01000000 64bit]
[    1.133393] pci 0000:00:00.0: BAR 8: assigned [mem 0x90000000-0x900fffff]
[    1.140315] pci 0000:01:00.0: BAR 0: assigned [mem 0x90000000-0x90001fff 64bit]
[    1.147771] pci 0000:00:00.0: PCI bridge to [bus 01]
[    1.152857] pci 0000:00:00.0:   bridge window [mem 0x90000000-0x900fffff]
[    1.159830] pcieport 0000:00:00.0: enabling device (0140 -> 0142)
[    1.166062] pcieport 0000:00:00.0: enabling bus mastering
[    1.171730] pci 0000:01:00.0: calling quirk_usb_early_handoff+0x0/0x790
[    1.178486] pci 0000:01:00.0: enabling device (0140 -> 0142)
[    1.184298] Unable to handle kernel paging request at virtual address d08671c4
[    1.191652] pgd = c0004000
[    1.194465] [d08671c4] *pgd=8f804811, *pte=00000000, *ppte=00000000
[    1.200881] Internal error: Oops: 7 [#1] PREEMPT SMP ARM
[    1.206302] Modules linked in:
[    1.209458] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.9.7-1-rc2 #125
[    1.216101] Hardware name: Sigma Tango DT
[    1.220213] task: cf82c9c0 task.stack: cf838000
[    1.224851] PC is at quirk_usb_early_handoff+0x3e8/0x790
[    1.230277] LR is at ioremap_page_range+0xf8/0x1a8
[    1.235175] pc : [<c039fe8c>]    lr : [<c02d0a10>]    psr: 000e0013
[    1.235175] sp : cf839d78  ip : 00000000  fp : cf839e38
[    1.246886] r10: c10248a0  r9 : 00000000  r8 : d08671c4
[    1.252220] r7 : d084e000  r6 : 00002000  r5 : 000c0300  r4 : cfb4e800
[    1.258864] r3 : 000191c4  r2 : 00000000  r1 : 90001e13  r0 : d084e000
[    1.265509] Flags: nzcv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
[    1.272764] Control: 10c5387d  Table: 8fa2c04a  DAC: 00000051
[    1.278622] Process swapper/0 (pid: 1, stack limit = 0xcf838210)
[    1.284742] Stack: (0xcf839d78 to 0xcf83a000)
[    1.289204] 9d60:                                                       c058f578 c058b180
[    1.297510] 9d80: cfb46300 cf839d98 c0350218 c05adccc cfb4e800 c05adcdc cf838000 00000000
[    1.305816] 9da0: 00000000 c10248a0 cf839e38 c030bfa4 cf9cd480 c034e69c cf867270 00000000
[    1.314122] 9dc0: cfb4e800 cfa3e414 cfa3e400 cf839e30 cf9cd480 00000000 cf906010 c02fa484
[    1.322428] 9de0: cfb4e800 cfa3e414 cfa3e400 c02fa538 cfb4ec00 cfa3e814 cfa3e800 c02fa56c
[    1.330734] 9e00: cfa3e80c cfa3e80c cfa3e800 c031387c cf839e30 cf9ee9b0 c05178c8 c10101d8
[    1.339040] 9e20: cfa15cc0 00000000 cf906000 c058cd2c cf839e30 cf839e30 50000000 5fffffff
[    1.347345] 9e40: cfdf7764 00000200 00000000 00000000 00000000 00000000 c1057de8 cf906010
[    1.355651] 9e60: c1010208 cf906044 c1010208 00000000 00000007 00000000 cfffcec0 c0351624
[    1.363957] 9e80: c1056fb0 cf906010 cf906044 c03500c0 cf906010 c1010208 cf906044 c10177d0
[    1.372262] 9ea0: 00000073 c0350214 00000000 c1010208 c0350150 c034e5e8 cf80545c cf8a60b4
[    1.380568] 9ec0: c1010208 cf9b8d80 00000000 c034f72c c058cd84 c0616a94 c0633cb0 c1010208
[    1.388874] 9ee0: c0616a94 c0633cb0 c0628834 c0350770 ffffe000 c0616a94 c0633cb0 c0101834
[    1.397179] 9f00: c104a354 c100a5c8 00000000 c0220830 00000000 cf87cf00 00000000 c1009370
[    1.405485] 9f20: cfffceee c050fa08 00000073 c0132aec c059a1c4 c05da4a4 00000000 00000006
[    1.413790] 9f40: 00000006 c05723fc c1009358 c1024880 c1024880 c1024880 c0633cb0 c0628834
[    1.422096] 9f60: 00000073 00000007 c062883c c0600db4 00000006 00000006 00000000 c06005ac
[    1.430401] 9f80: a4b68a61 00000000 c049fafc 00000000 00000000 00000000 00000000 00000000
[    1.438706] 9fa0: 00000000 c049fb04 00000000 c01077b8 00000000 00000000 00000000 00000000
[    1.447011] 9fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[    1.455316] 9fe0: 00000000 00000000 00000000 00000000 00000013 00000000 c47be6fa ff2306fe
[    1.463640] [<c039fe8c>] (quirk_usb_early_handoff) from [<c030bfa4>] (pci_do_fixups+0xc8/0x158)
[    1.472480] [<c030bfa4>] (pci_do_fixups) from [<c02fa484>] (pci_bus_add_device+0x18/0x90)
[    1.480790] [<c02fa484>] (pci_bus_add_device) from [<c02fa538>] (pci_bus_add_devices+0x3c/0x80)
[    1.489622] [<c02fa538>] (pci_bus_add_devices) from [<c02fa56c>] (pci_bus_add_devices+0x70/0x80)
[    1.498544] [<c02fa56c>] (pci_bus_add_devices) from [<c031387c>] (pci_host_common_probe+0xfc/0x324)
[    1.507732] [<c031387c>] (pci_host_common_probe) from [<c0351624>] (platform_drv_probe+0x34/0x7c)
[    1.516742] [<c0351624>] (platform_drv_probe) from [<c03500c0>] (really_probe+0x1c4/0x254)
[    1.525137] [<c03500c0>] (really_probe) from [<c0350214>] (__driver_attach+0xc4/0xc8)
[    1.533095] [<c0350214>] (__driver_attach) from [<c034e5e8>] (bus_for_each_dev+0x68/0x9c)
[    1.541402] [<c034e5e8>] (bus_for_each_dev) from [<c034f72c>] (bus_add_driver+0x1a0/0x218)
[    1.549797] [<c034f72c>] (bus_add_driver) from [<c0350770>] (driver_register+0x78/0xf8)
[    1.557931] [<c0350770>] (driver_register) from [<c0101834>] (do_one_initcall+0x44/0x174)
[    1.566247] [<c0101834>] (do_one_initcall) from [<c0600db4>] (kernel_init_freeable+0x154/0x1e4)
[    1.575082] [<c0600db4>] (kernel_init_freeable) from [<c049fb04>] (kernel_init+0x8/0x10c)
[    1.583393] [<c049fb04>] (kernel_init) from [<c01077b8>] (ret_from_fork+0x14/0x3c)
[    1.591090] Code: e3500000 e0833100 0affffcb e0878003 (e5982000) 
[    1.597333] ---[ end trace bbc44517edfb9c6a ]---
[    1.602076] Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
[    1.602076] 
[    1.611435] CPU1: stopping
[    1.614241] CPU: 1 PID: 0 Comm: swapper/1 Tainted: G      D         4.9.7-1-rc2 #125
[    1.622107] Hardware name: Sigma Tango DT
[    1.626233] [<c010ed94>] (unwind_backtrace) from [<c010ae24>] (show_stack+0x10/0x14)
[    1.634106] [<c010ae24>] (show_stack) from [<c02cecc0>] (dump_stack+0x78/0x8c)
[    1.641454] [<c02cecc0>] (dump_stack) from [<c010dc10>] (handle_IPI+0x198/0x1ac)
[    1.648975] [<c010dc10>] (handle_IPI) from [<c01014a4>] (gic_handle_irq+0x88/0x8c)
[    1.656670] [<c01014a4>] (gic_handle_irq) from [<c010b90c>] (__irq_svc+0x6c/0xa8)
[    1.664274] Exception stack(0xcf859f98 to 0xcf859fe0)
[    1.669433] 9f80:                                                       00000001 00000000
[    1.677739] 9fa0: 0000168e c0114620 cf858000 c1002fe4 c1003048 00000002 c100ba2e 413fc090
[    1.686045] 9fc0: 00000000 00000000 00000001 cf859fe8 c0108220 c0108224 60000013 ffffffff
[    1.694352] [<c010b90c>] (__irq_svc) from [<c0108224>] (arch_cpu_idle+0x38/0x3c)
[    1.701878] [<c0108224>] (arch_cpu_idle) from [<c0151f4c>] (cpu_startup_entry+0xcc/0x144)
[    1.710187] [<c0151f4c>] (cpu_startup_entry) from [<8010154c>] (0x8010154c)
[    1.717272] ---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b

Am I doing something stupid? (Very likely)

Regards.



More information about the linux-arm-kernel mailing list