On 11/01/14 00:58, Russell King - ARM Linux wrote: > On Fri, Jan 10, 2014 at 03:25:48PM +0100, Andrew Lunn wrote: >> On Sat, Jan 11, 2014 at 12:09:11AM +1000, Ben Peddell wrote: >>> Bytes transferred = 1954736 (1dd3b0 hex) >>> Marvell>> setenv bootargs console=ttyS0,115200 ip=off initrd=0x00800040,0x0013FFC0 root=/dev/md0 rw syno_hw_version=DS211j ihd_num=2 netif_num=1 earlyprintk >> >> I don't see you loading the initrd into RAM at 0x0080 0000. > > However, the kernel _is_ being told that the initrd is at 0x00800040. > >>> Uncompressing Linux... done, booting the kernel. >>> [ 0.000000] Booting Linux on physical CPU 0x0 >>> [ 0.000000] Linux version 3.13.0-rc7-ds211j+ (root@lurch) (gcc version 4.8.2 (Gentoo 4.8.2 p1.3, pie-0.5.8) ) #2 Thu Jan 9 08:52:24 EST 2014 >>> [ 0.000000] CPU: Feroceon 88FR131 [56251311] revision 1 (ARMv5TE), cr=00053977 >>> [ 0.000000] CPU: VIVT data cache, VIVT instruction cache >>> [ 0.000000] Machine model: Synology DS210 v10, v20, v30, DS211j >>> [ 0.000000] bootconsole [earlycon0] enabled >>> [ 0.000000] INITRD: 0xf8280040+0x000f993c is not a memory region - disabling initrd >> >> The kernel is correct. There is no RAM here. That is in the IOMEM >> space. > > But here the kernel has ignored the command line parameter and instead > used the one passed via DT. That is not correct - command line parameters > must always override ATAGs or DT. > > (That's irrespective of whether what's actually being asked of the kernel > is correct or not - the principle here applies that command line parameters > override, and in this case they aren't.) Uncompressing Linux... done, booting the kernel. [ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] Linux version 3.13.0-rc7-ds211j+ (klightspeed@lurch) (gcc version 4.8.2 (Gentoo 4.8.2 p1.3, pie-0.5.8) ) #4 Sat Jan 11 01:20:05 EST 2014 [ 0.000000] CPU: Feroceon 88FR131 [56251311] revision 1 (ARMv5TE), cr=00053977 [ 0.000000] CPU: VIVT data cache, VIVT instruction cache [ 0.000000] FDT initrd_start=0xf8280040 initrd_end=0xf83c0000 [ 0.000000] Machine model: Synology DS210 v10, v20, v30, DS211j [ 0.000000] bootconsole [earlycon0] enabled [ 0.000000] Kernel Parameter initrd=0x00800040,0x0013ffc0 [ 0.000000] INITRD: 0xf8280040+0x0013ffc0 is not a memory region - disabling initrd ... [ 1.316624] Trying to unpack rootfs image as initramfs... [ 1.322097] Unable to handle kernel paging request at virtual address b8280040 First, FDT fills in initrd_start and initrd_end: --- start drivers/of/fdt.c line 704 early_init_dt_check_for_initrd() --- initrd_start = (unsigned long)__va(start); initrd_end = (unsigned long)__va(end); initrd_below_start_ok = 1; --- end --- Then the initrd parameter is parsed into phys_initrd_start and phys_initrd_size: --- start arch/arm/mm/init.c line 52 early_initrd() --- phys_initrd_start = start; phys_initrd_size = size; --- end --- phys_initrd_start and phys_initrd_size is then overwritten from initrd_start and initrd_end: --- start arch/arm/mm/init.c line 351 arm_memblock_init() --- /* FDT scan will populate initrd_start */ if (initrd_start) { phys_initrd_start = __virt_to_phys(initrd_start); phys_initrd_size = initrd_end - initrd_start; } --- end --- initrd_start and initrd_end are still set, and so unpack_to_rootfs() tries to access it. -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html