On 04/04/2014 03:00 PM, Rob Herring wrote: > On Fri, Apr 4, 2014 at 7:16 AM, Michal Simek wrote: >> On 04/04/2014 12:16 AM, Rob Herring wrote: >>> From: Rob Herring >>> >>> Both powerpc and microblaze have the same FDT blob in debugfs feature. >>> Move this to common location and remove the powerpc and microblaze >>> implementations. This feature could become more useful when FDT >>> overlay support is added. >>> >>> This changes the path of the blob from "$arch/flat-device-tree" to >>> "device-tree/flat-device-tree". > > [snip] > >>> -#if defined(CONFIG_DEBUG_FS) && defined(DEBUG) >>> -static struct debugfs_blob_wrapper flat_dt_blob; >>> - >>> -static int __init export_flat_device_tree(void) >>> -{ >>> - struct dentry *d; >>> - >>> - flat_dt_blob.data = initial_boot_params; >>> - flat_dt_blob.size = initial_boot_params->totalsize; >> >> As I see even microblaze version was buggy. > > How so? if you compare it with powerpc version here is missing be to cpu conversion. > >> ... >> >>> diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c >>> index fa16a91..2085d47 100644 >>> --- a/drivers/of/fdt.c >>> +++ b/drivers/of/fdt.c >>> @@ -20,6 +20,7 @@ >>> #include >>> #include >>> #include >>> +#include >>> >>> #include /* for COMMAND_LINE_SIZE */ >>> #ifdef CONFIG_PPC >>> @@ -1084,4 +1085,27 @@ void __init unflatten_and_copy_device_tree(void) >>> unflatten_device_tree(); >>> } >>> >>> +#if defined(CONFIG_DEBUG_FS) && defined(DEBUG) >>> +static struct debugfs_blob_wrapper flat_dt_blob; >>> + >>> +static int __init of_flat_dt_debugfs_export_fdt(void) >>> +{ >>> + struct dentry *d = debugfs_create_dir("device-tree", NULL); >>> + >>> + if (!d) >>> + return -ENOENT; >>> + >>> + flat_dt_blob.data = initial_boot_params; >>> + flat_dt_blob.size = fdt_totalsize(initial_boot_params); >> >> Have you tried to compile this? >> >> From my tests fdt_totalsize is not available for target just for host >> from libfdt.h >> >> drivers/of/fdt.c: In function 'of_flat_dt_debugfs_export_fdt': >> drivers/of/fdt.c:957:2: error: implicit declaration of function 'fdt_totalsize' [-Werror=implicit-function-declaration] > > Ah, it needs to be re-ordered after the libfdt conversion when > libfdt.h gets added. I just pick some of them not all of them and send email. :-( Anyway I am testing it for microblaze and getting problem caused by this patch: commit 3d2ee8571ac0580d49c3f41fa28336289934900a Author: Rob Herring Date: Wed Apr 2 15:10:14 2014 -0500 of/fdt: Convert FDT functions to use libfdt And reason is that in unflatten_dt_node() pathp = fdt_get_name(blob, *poffset, &l); is returning NULL and here /* version 0x10 has a more compact unit name here instead of the full * path. we accumulate the full path size using "fpsize", we'll rebuild * it later. We detect this because the first character of the name is * not '/'. */ if ((*pathp) != '/') { code is trying to read it which is causing this kernel bug: Oops: kernel access of bad area, sig: 11 It means fdt_next_node(is doing something wrong) Any easy way how to debug it? Thanks, Michal -- Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91 w: www.monstr.eu p: +42-0-721842854 Maintainer of Linux kernel - Microblaze cpu - http://www.monstr.eu/fdt/ Maintainer of Linux kernel - Xilinx Zynq ARM architecture Microblaze U-BOOT custodian and responsible for u-boot arm zynq platform