mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH] ARM: Use armlinux_bootparams address for DTB
@ 2013-07-09 12:56 Alexander Shiyan
  2013-07-09 17:54 ` Sascha Hauer
  0 siblings, 1 reply; 4+ messages in thread
From: Alexander Shiyan @ 2013-07-09 12:56 UTC (permalink / raw)
  To: barebox

In some cases, the address of the devicetree, which is obtained
dynamically, may be located in the kernel text area, which leads
to malfunction of the devicetree. The patch uses the address of
the devicetree, designed for the board, if it possible.

Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
---
 arch/arm/lib/armlinux.c | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/arch/arm/lib/armlinux.c b/arch/arm/lib/armlinux.c
index 40a63ea..12fb06d 100644
--- a/arch/arm/lib/armlinux.c
+++ b/arch/arm/lib/armlinux.c
@@ -261,16 +261,20 @@ void start_linux(void *adr, int swap, unsigned long initrd_address,
 		unsigned long initrd_size, void *oftree)
 {
 	void (*kernel)(int zero, int arch, void *params) = adr;
-	void *params = NULL;
 	int architecture;
 
 	if (oftree) {
-		printf("booting Linux kernel with devicetree\n");
-		params = oftree;
-	} else {
+		if (armlinux_bootparams) {
+			struct fdt_header *header = oftree;
+
+			printf("Relocate DTB to 0x%p\n", armlinux_bootparams);
+			memcpy(armlinux_bootparams, oftree,
+			       fdt32_to_cpu(header->totalsize));
+		} else
+			armlinux_bootparams = oftree;
+	} else
 		setup_tags(initrd_address, initrd_size, swap);
-		params = armlinux_bootparams;
-	}
+
 	architecture = armlinux_get_architecture();
 
 	shutdown_barebox();
@@ -288,10 +292,10 @@ void start_linux(void *adr, int swap, unsigned long initrd_address,
 		"mov r2, %1\n"
 		"bx %2\n"
 		:
-		: "r" (architecture), "r" (params), "r" (kernel)
+		: "r" (architecture), "r" (armlinux_bootparams), "r" (kernel)
 		: "r0", "r1", "r2"
 	);
 #else
-	kernel(0, architecture, params);
+	kernel(0, architecture, armlinux_bootparams);
 #endif
 }
-- 
1.8.1.5


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] ARM: Use armlinux_bootparams address for DTB
  2013-07-09 12:56 [PATCH] ARM: Use armlinux_bootparams address for DTB Alexander Shiyan
@ 2013-07-09 17:54 ` Sascha Hauer
  2013-07-09 18:00   ` Alexander Shiyan
  0 siblings, 1 reply; 4+ messages in thread
From: Sascha Hauer @ 2013-07-09 17:54 UTC (permalink / raw)
  To: Alexander Shiyan; +Cc: barebox

On Tue, Jul 09, 2013 at 04:56:40PM +0400, Alexander Shiyan wrote:
> In some cases, the address of the devicetree, which is obtained
> dynamically, may be located in the kernel text area, which leads
> to malfunction of the devicetree. The patch uses the address of
> the devicetree, designed for the board, if it possible.
> 
> Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
> ---
>  arch/arm/lib/armlinux.c | 20 ++++++++++++--------
>  1 file changed, 12 insertions(+), 8 deletions(-)
> 
> diff --git a/arch/arm/lib/armlinux.c b/arch/arm/lib/armlinux.c
> index 40a63ea..12fb06d 100644
> --- a/arch/arm/lib/armlinux.c
> +++ b/arch/arm/lib/armlinux.c
> @@ -261,16 +261,20 @@ void start_linux(void *adr, int swap, unsigned long initrd_address,
>  		unsigned long initrd_size, void *oftree)
>  {
>  	void (*kernel)(int zero, int arch, void *params) = adr;
> -	void *params = NULL;
>  	int architecture;
>  
>  	if (oftree) {
> -		printf("booting Linux kernel with devicetree\n");

This is a useful information that gets removed here. Could you keep it?

> -		params = oftree;
> -	} else {
> +		if (armlinux_bootparams) {
> +			struct fdt_header *header = oftree;
> +
> +			printf("Relocate DTB to 0x%p\n", armlinux_bootparams);

This is more useful for verbose mode, but I think not for the normal
case.

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] ARM: Use armlinux_bootparams address for DTB
  2013-07-09 17:54 ` Sascha Hauer
@ 2013-07-09 18:00   ` Alexander Shiyan
  2013-07-09 18:11     ` Sascha Hauer
  0 siblings, 1 reply; 4+ messages in thread
From: Alexander Shiyan @ 2013-07-09 18:00 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox

> On Tue, Jul 09, 2013 at 04:56:40PM +0400, Alexander Shiyan wrote:
> > In some cases, the address of the devicetree, which is obtained
> > dynamically, may be located in the kernel text area, which leads
> > to malfunction of the devicetree. The patch uses the address of
> > the devicetree, designed for the board, if it possible.
> > 
> > Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
> > ---
> >  arch/arm/lib/armlinux.c | 20 ++++++++++++--------
> >  1 file changed, 12 insertions(+), 8 deletions(-)
> > 
> > diff --git a/arch/arm/lib/armlinux.c b/arch/arm/lib/armlinux.c
> > index 40a63ea..12fb06d 100644
> > --- a/arch/arm/lib/armlinux.c
> > +++ b/arch/arm/lib/armlinux.c
> > @@ -261,16 +261,20 @@ void start_linux(void *adr, int swap, unsigned long initrd_address,
> >  		unsigned long initrd_size, void *oftree)
> >  {
> >  	void (*kernel)(int zero, int arch, void *params) = adr;
> > -	void *params = NULL;
> >  	int architecture;
> >  
> >  	if (oftree) {
> > -		printf("booting Linux kernel with devicetree\n");
> 
> This is a useful information that gets removed here. Could you keep it?

Yes, but I think this is duplicate previous message "using internal devicetree".

> > -		params = oftree;
> > -	} else {
> > +		if (armlinux_bootparams) {
> > +			struct fdt_header *header = oftree;
> > +
> > +			printf("Relocate DTB to 0x%p\n", armlinux_bootparams);
> 
> This is more useful for verbose mode, but I think not for the normal
> case.

This is note about address, since barebox reports us address of devicetree
before and it different than armlinux_params. Remove anyway?

---
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] ARM: Use armlinux_bootparams address for DTB
  2013-07-09 18:00   ` Alexander Shiyan
@ 2013-07-09 18:11     ` Sascha Hauer
  0 siblings, 0 replies; 4+ messages in thread
From: Sascha Hauer @ 2013-07-09 18:11 UTC (permalink / raw)
  To: Alexander Shiyan; +Cc: barebox

On Tue, Jul 09, 2013 at 10:00:41PM +0400, Alexander Shiyan wrote:
> > On Tue, Jul 09, 2013 at 04:56:40PM +0400, Alexander Shiyan wrote:
> > > In some cases, the address of the devicetree, which is obtained
> > > dynamically, may be located in the kernel text area, which leads
> > > to malfunction of the devicetree. The patch uses the address of
> > > the devicetree, designed for the board, if it possible.
> > > 
> > > Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
> > > ---
> > >  arch/arm/lib/armlinux.c | 20 ++++++++++++--------
> > >  1 file changed, 12 insertions(+), 8 deletions(-)
> > > 
> > > diff --git a/arch/arm/lib/armlinux.c b/arch/arm/lib/armlinux.c
> > > index 40a63ea..12fb06d 100644
> > > --- a/arch/arm/lib/armlinux.c
> > > +++ b/arch/arm/lib/armlinux.c
> > > @@ -261,16 +261,20 @@ void start_linux(void *adr, int swap, unsigned long initrd_address,
> > >  		unsigned long initrd_size, void *oftree)
> > >  {
> > >  	void (*kernel)(int zero, int arch, void *params) = adr;
> > > -	void *params = NULL;
> > >  	int architecture;
> > >  
> > >  	if (oftree) {
> > > -		printf("booting Linux kernel with devicetree\n");
> > 
> > This is a useful information that gets removed here. Could you keep it?
> 
> Yes, but I think this is duplicate previous message "using internal devicetree".

Not really a duplicate since the 'internal devicetree' message will only
come if we are using an internal devicetree (i.e. no devicetree
specified on the commandline).
We could move the message to common/bootm.c instead of removing it.

> 
> > > -		params = oftree;
> > > -	} else {
> > > +		if (armlinux_bootparams) {
> > > +			struct fdt_header *header = oftree;
> > > +
> > > +			printf("Relocate DTB to 0x%p\n", armlinux_bootparams);
> > 
> > This is more useful for verbose mode, but I think not for the normal
> > case.
> 
> This is note about address, since barebox reports us address of devicetree
> before and it different than armlinux_params. Remove anyway?

My idea was not to remove them but encapsulate it in bootm_verbose().
That's not so easy though since this code is called from non bootm code.

We could add an additional verbose argument to this function.

Often the boot code is critical. During normal boot you don't want to
see many messages because they add to the boot time, but when something
doesn't work one is happy about every line that comes out, so I think
it's worth it to pass a verbose parameter around.

Sascha


-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2013-07-09 18:11 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-07-09 12:56 [PATCH] ARM: Use armlinux_bootparams address for DTB Alexander Shiyan
2013-07-09 17:54 ` Sascha Hauer
2013-07-09 18:00   ` Alexander Shiyan
2013-07-09 18:11     ` Sascha Hauer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox