10-07-2013 08:36 AM
We have problems upgrading our Zynq device from a Linux Kernel 3.0 to a more recent version 3.9 (xilinx-v14.6.02)
Our 3.0 version runs fine, but with 3.9 we just don't manage to get a working console.
"Warning: unable to open an initial console."
Initially we had a problem similar to:
Output stopped in line "Registering SWP/SWPB emulation handler", but we came over that by disabling function clk_disable_unused() in drivers/clk/clk.c
I debugged and added some printk's. Then I see that when trying to sys_open "/dev/console" in main.c it fails when doing a kobj_lookup in chrdev_open (-ENXIO).
Perhaps there is a problem when initializing the device tree: In zynq_init_machine function of_platform_populate tries to find compatible devices. But xuartps_init is called only later and hence can't be found as compatible device.
Do you have any idea of what is going wrong?
Attached in our devicetree.
10-07-2013 09:15 AM
You make a big jump in kernel versions without updating your dts properly. There have been several huge changes regarding the clock framework and its description in Zynq dts files your dts is completely missing.
Please try to use a dts file coming with the kernel sources, or if you use a custom board, port over the clock related parts to your dts.
10-08-2013 08:34 AM
I finally found the cause of the problem.
We copied the devicetree to 0x1000000 and the ramdisk to 0x800000.
But since we specified 16M for the initrd-size it ended at 0x1800000.
Thus when the ramdisk was freed the devicetree data was removed and no drivers could connect with it.
Maybe the older kernel didn't overwrite the data when freed, so we didn't notice that our memory layout was faulty.