Requirements for FDT load address on ARM
Ian Campbell
ian.campbell at citrix.com
Wed Jul 24 10:58:43 EDT 2013
[apologies if this is a repeat, I don't see it in the archives and at
least one CC'd recipient (Julien) didn't receive it either. Beasties in
our email server I expect...]
Are there any requirements about where the FDT may be loaded by the
bootloader?
I'm finding that if I load it "too high" I get a fault (the specifics
aren't that relevant but details are below). FWIW with RAM from
0x8000000-0xffffffff and a kernel loaded at 0x80008000 "too high" means
above somewhere around 0xaf800000.
I expect this is because the kernel doesn't use an explicit mapping of
the fdt but expects it to be within the RAM directly mapped by the
lowmem area (i.e. it uses phys_to_virt, since day one aka 93c02ab40ae6
"arm/dt: probe for platforms via the device tree"). This effectively
limits the FDT to being within the first ~700MB (give or take based
on .config etc, I suppose <500MB is a pretty safe rule of thumb). Is
this expected or is it actually not intentional and the kernel should
really be using an explicit mapping here? Should I send a patch against
Documentation/arm/Booting?
Ian.
Unable to handle kernel paging request at virtual address ffe00000
pgd = c0004000
[ffe00000] *pgd=af7fe821, *pte=00000000, *ppte=00000000
Internal error: Oops: 17 [#1] ARM
CPU: 0 PID: 0 Comm: swapper Not tainted 3.11.0-rc1-arm-native+ #136
task: c045e500 ti: c0454000 task.ti: c0454000
PC is at __unflatten_device_tree+0x18/0x11c
LR is at unflatten_device_tree+0x1c/0x34
pc : [<c027fb38>] lr : [<c0445bec>] psr: a00001d3
sp : c0455f70 ip : 80454000 fp : 00000000
r10: c0ca10c0 r9 : 410fd0f0 r8 : c045f380
r7 : c0434340 r6 : c045f380 r5 : ffe00000 r4 : c0434340
r3 : d00dfeed r2 : c0434340 r1 : c0497608 r0 : ffe00000
Flags: NzCv IRQs off FIQs off Mode SVC_32 ISA ARM Segment kernel
Control: 10c5383d Table: 80004059 DAC: 00000015
Process swapper (pid: 0, stack limit = 0xc0454230)
Stack: (0xc0455f70 to 0xc0456000)
5f60: ffe00000 c0497608 c0434340 c0497608
5f80: c0434340 c044cb90 c045f380 c04649b0 c045f380 c0445bec c044b958 c0433970
5fa0: 00000000 10c53c7d c046184c 00000001 ffffffff c044cba0 c045f4a0 80004059
5fc0: 00000000 c04304f8 00000000 00000000 00000000 00000000 00000000 c044cba4
5fe0: 00000000 10c53c7d c045c024 c044cba0 c045f4a0 80008070 00000000 00000000
[<c027fb38>] (__unflatten_device_tree+0x18/0x11c) from [<c0445bec>] (unflatten_device_tree+0x1c/0x34)
[<c0445bec>] (unflatten_device_tree+0x1c/0x34) from [<c0433970>] (setup_arch+0x5ac/0x72c)
[<c0433970>] (setup_arch+0x5ac/0x72c) from [<c04304f8>] (start_kernel+0x68/0x2d8)
[<c04304f8>] (start_kernel+0x68/0x2d8) from [<80008070>] (0x80008070)
Code: e1a07002 e58d100c 0a00003a e59f30e8 (e5952000)
---[ end trace 1b75b31a2719ed1c ]---
Kernel panic - not syncing: Attempted to kill the idle task!
More information about the linux-arm-kernel
mailing list