All of lore.kernel.org
 help / color / mirror / Atom feed
From: gregory.clement@free-electrons.com (Gregory CLEMENT)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] atags_to_fdt: take into account root's #size and #cells
Date: Wed, 19 Jun 2013 13:12:45 +0200	[thread overview]
Message-ID: <51C1922D.8040704@free-electrons.com> (raw)
In-Reply-To: <1371639471-14144-2-git-send-email-ben.dooks@codethink.co.uk>

On 06/19/2013 12:57 PM, Ben Dooks wrote:
> When creating entries for /memory, the root #size and #cells must be taken
> into account otherwise the node will not be recongnized when the OF code
> scans the nodes.
> 
> On some systems, the default is now to be 2 for each of #size and #cells
> which means that appending a kernrel and having it update from ATAGS does
> not work properly.
Hi Ben,

There is already a fix for it which is applied in Russell King's git tree, see
http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=7722/1

Regards,
> ---
>  arch/arm/boot/compressed/atags_to_fdt.c |   22 +++++++++++++++++++++-
>  1 file changed, 21 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm/boot/compressed/atags_to_fdt.c b/arch/arm/boot/compressed/atags_to_fdt.c
> index 74e193e..da36840 100644
> --- a/arch/arm/boot/compressed/atags_to_fdt.c
> +++ b/arch/arm/boot/compressed/atags_to_fdt.c
> @@ -1,5 +1,6 @@
>  #include <asm/setup.h>
>  #include <libfdt.h>
> +#include <linux/of.h>
>  
>  #if defined(CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEND)
>  #define do_extend_cmdline 1
> @@ -95,9 +96,12 @@ static void merge_fdt_bootargs(void *fdt, const char *fdt_cmdline)
>  int atags_to_fdt(void *atag_list, void *fdt, int total_space)
>  {
>  	struct tag *atag = atag_list;
> -	uint32_t mem_reg_property[2 * NR_BANKS];
> +	uint32_t mem_reg_property[2 * 2 * NR_BANKS];
> +	const __be32 *prop;
>  	int memcount = 0;
>  	int ret;
> +	u32 dt_root_size_cells;
> +	u32 dt_root_addr_cells;
>  
>  	/* make sure we've got an aligned pointer */
>  	if ((u32)atag_list & 0x3)
> @@ -118,6 +122,17 @@ int atags_to_fdt(void *atag_list, void *fdt, int total_space)
>  	if (ret < 0)
>  		return ret;
>  
> +	dt_root_size_cells = OF_ROOT_NODE_SIZE_CELLS_DEFAULT;
> +	dt_root_addr_cells = OF_ROOT_NODE_ADDR_CELLS_DEFAULT;
> +
> +	prop = getprop(fdt, "/", "#size-cells", NULL);
> +	if (prop)
> +		dt_root_size_cells = be32_to_cpup(prop);
> +
> +	prop = getprop(fdt, "/", "#address-cells", NULL);
> +	if (prop)
> +		dt_root_addr_cells = be32_to_cpup(prop);
> +
>  	for_each_tag(atag, atag_list) {
>  		if (atag->hdr.tag == cpu_to_atag32(ATAG_CMDLINE)) {
>  			/* Append the ATAGS command line to the device tree
> @@ -137,7 +152,12 @@ int atags_to_fdt(void *atag_list, void *fdt, int total_space)
>  				continue;
>  			if (!atag32_to_cpu(atag->u.mem.size))
>  				continue;
> +
> +			for (ret = 0; ret < dt_root_addr_cells - 1; ret++)
> +				mem_reg_property[memcount++] = cpu_to_fdt32(0);
>  			mem_reg_property[memcount++] = cpu_to_fdt32(atag32_to_cpu(atag->u.mem.start));
> +			for (ret = 0; ret < dt_root_size_cells - 1; ret++)
> +				mem_reg_property[memcount++] = cpu_to_fdt32(0);
>  			mem_reg_property[memcount++] = cpu_to_fdt32(atag32_to_cpu(atag->u.mem.size));
>  		} else if (atag->hdr.tag == cpu_to_atag32(ATAG_INITRD2)) {
>  			uint32_t initrd_start, initrd_size;
> 


-- 
Gregory Clement, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

      parent reply	other threads:[~2013-06-19 11:12 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-19 10:57 No subject Ben Dooks
2013-06-19 10:57 ` [PATCH] atags_to_fdt: take into account root's #size and #cells Ben Dooks
2013-06-19 11:11   ` Thomas Petazzoni
2013-06-19 11:42     ` Ben Dooks
2013-06-19 11:12   ` Gregory CLEMENT [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=51C1922D.8040704@free-electrons.com \
    --to=gregory.clement@free-electrons.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.