mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [RFC] xload: get barebox size from barebox_arm_head
@ 2012-08-27 10:56 Jan Weitzel
  2012-08-28  6:54 ` Sascha Hauer
  0 siblings, 1 reply; 17+ messages in thread
From: Jan Weitzel @ 2012-08-27 10:56 UTC (permalink / raw)
  To: barebox

Add functions to read the barebox_arm_head, check barebox magicword
and read out the barebox image size.
Create a inital partion of 1Mb to access the barebox image on nand.
Fall back to 512 Byte.

Where is a good place for the helper functions? arch/arm/lib ?

Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
---
 arch/arm/include/asm/barebox-arm-head.h |    4 ++
 arch/arm/mach-omap/include/mach/xload.h |    2 +-
 arch/arm/mach-omap/xload.c              |   55 ++++++++++++++++++++++++++++--
 3 files changed, 56 insertions(+), 5 deletions(-)

diff --git a/arch/arm/include/asm/barebox-arm-head.h b/arch/arm/include/asm/barebox-arm-head.h
index 0dc3074..521bcf6 100644
--- a/arch/arm/include/asm/barebox-arm-head.h
+++ b/arch/arm/include/asm/barebox-arm-head.h
@@ -1,6 +1,10 @@
 #ifndef __ASM_ARM_HEAD_H
 #define __ASM_ARM_HEAD_H
 
+#define ARM_HEAD_SIZE		0x30
+#define HEAD_MAGICWORD_OFFSET	0x20
+#define HEAD_SIZE_OFFSET	0x2C
+
 static inline void barebox_arm_head(void)
 {
 	__asm__ __volatile__ (
diff --git a/arch/arm/mach-omap/include/mach/xload.h b/arch/arm/mach-omap/include/mach/xload.h
index 844b57f..26f1b68 100644
--- a/arch/arm/mach-omap/include/mach/xload.h
+++ b/arch/arm/mach-omap/include/mach/xload.h
@@ -1,7 +1,7 @@
 #ifndef _MACH_XLOAD_H
 #define _MACH_XLOAD_H
 
-void *omap_xload_boot_nand(int offset, int size);
+void *omap_xload_boot_nand(int offset);
 void *omap_xload_boot_mmc(void);
 
 enum omap_boot_src {
diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c
index 9a6b0b4..eff2ea0 100644
--- a/arch/arm/mach-omap/xload.c
+++ b/arch/arm/mach-omap/xload.c
@@ -7,16 +7,63 @@
 #include <fcntl.h>
 #include <mach/xload.h>
 #include <sizes.h>
+#include <asm/barebox-arm-head.h>
 
-void *omap_xload_boot_nand(int offset, int size)
+void *read_image_head(const char *name)
+{
+	void *header = xmalloc(ARM_HEAD_SIZE);
+	struct cdev *cdev;
+	int ret;
+
+	cdev = cdev_open(name, O_RDONLY);
+	if (!cdev) {
+		printf("failed to open partition\n");
+		return NULL;
+	}
+
+	ret = cdev_read(cdev, header, ARM_HEAD_SIZE, 0, 0);
+	cdev_close(cdev);
+
+	if (ret != ARM_HEAD_SIZE) {
+		printf("failed to read from partition\n");
+		return NULL;
+	}
+
+	return header;
+}
+
+unsigned int get_image_size(void *head)
+{
+	unsigned int ret = 0;
+	unsigned int *psize = head + HEAD_SIZE_OFFSET;
+	const char *pmagic = head + HEAD_MAGICWORD_OFFSET;
+
+	if (!head)
+		return 0;
+
+	if (!strcmp(pmagic, "barebox"))
+		ret = *psize;
+	debug("Detected barebox image size %u\n", ret);
+
+	return ret;
+}
+
+void *omap_xload_boot_nand(int offset)
 {
 	int ret;
-	void *to = xmalloc(size);
+	int size;
+	void *to;
 	struct cdev *cdev;
 
-	devfs_add_partition("nand0", offset, size, PARTITION_FIXED, "x");
+	devfs_add_partition("nand0", offset, SZ_1M, PARTITION_FIXED, "x");
 	dev_add_bb_dev("x", "bbx");
 
+	size = get_image_size(read_image_head("bbx"));
+	if (!size)
+		size = SZ_512K;
+
+	to = xmalloc(size);
+
 	cdev = cdev_open("bbx", O_RDONLY);
 	if (!cdev) {
 		printf("failed to open nand\n");
@@ -80,7 +127,7 @@ int run_shell(void)
 		printf("unknown boot source. Fall back to nand\n");
 	case OMAP_BOOTSRC_NAND:
 		printf("booting from NAND\n");
-		func = omap_xload_boot_nand(SZ_128K, SZ_512K);
+		func = omap_xload_boot_nand(SZ_128K);
 		break;
 	}
 
-- 
1.7.0.4


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

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

* Re: [RFC] xload: get barebox size from barebox_arm_head
  2012-08-27 10:56 [RFC] xload: get barebox size from barebox_arm_head Jan Weitzel
@ 2012-08-28  6:54 ` Sascha Hauer
  2012-08-28  8:41   ` Jan Weitzel
  0 siblings, 1 reply; 17+ messages in thread
From: Sascha Hauer @ 2012-08-28  6:54 UTC (permalink / raw)
  To: Jan Weitzel; +Cc: barebox

Hi Jan,

Looks mostly good.

On Mon, Aug 27, 2012 at 12:56:20PM +0200, Jan Weitzel wrote:
>  #include <fcntl.h>
>  #include <mach/xload.h>
>  #include <sizes.h>
> +#include <asm/barebox-arm-head.h>
>  
> -void *omap_xload_boot_nand(int offset, int size)
> +void *read_image_head(const char *name)
> +{
> +	void *header = xmalloc(ARM_HEAD_SIZE);
> +	struct cdev *cdev;
> +	int ret;
> +
> +	cdev = cdev_open(name, O_RDONLY);
> +	if (!cdev) {
> +		printf("failed to open partition\n");
> +		return NULL;
> +	}
> +
> +	ret = cdev_read(cdev, header, ARM_HEAD_SIZE, 0, 0);
> +	cdev_close(cdev);
> +
> +	if (ret != ARM_HEAD_SIZE) {
> +		printf("failed to read from partition\n");
> +		return NULL;
> +	}
> +
> +	return header;
> +}
> +
> +unsigned int get_image_size(void *head)
> +{
> +	unsigned int ret = 0;
> +	unsigned int *psize = head + HEAD_SIZE_OFFSET;
> +	const char *pmagic = head + HEAD_MAGICWORD_OFFSET;
> +
> +	if (!head)
> +		return 0;

Please drop this check...

> +
> +	if (!strcmp(pmagic, "barebox"))
> +		ret = *psize;
> +	debug("Detected barebox image size %u\n", ret);
> +
> +	return ret;
> +}
> +
> +void *omap_xload_boot_nand(int offset)
>  {
>  	int ret;
> -	void *to = xmalloc(size);
> +	int size;
> +	void *to;
>  	struct cdev *cdev;
>  
> -	devfs_add_partition("nand0", offset, size, PARTITION_FIXED, "x");
> +	devfs_add_partition("nand0", offset, SZ_1M, PARTITION_FIXED, "x");
>  	dev_add_bb_dev("x", "bbx");
>  
> +	size = get_image_size(read_image_head("bbx"));

...and instead bail out directly here if you are unable to read the
image head. If you are unable to read even the head of the image there
is no point in trying to continue.

Sascha


> +	if (!size)
> +		size = SZ_512K;
> +
> +	to = xmalloc(size);
> +
>  	cdev = cdev_open("bbx", O_RDONLY);
>  	if (!cdev) {
>  		printf("failed to open nand\n");
> @@ -80,7 +127,7 @@ int run_shell(void)
>  		printf("unknown boot source. Fall back to nand\n");
>  	case OMAP_BOOTSRC_NAND:
>  		printf("booting from NAND\n");
> -		func = omap_xload_boot_nand(SZ_128K, SZ_512K);
> +		func = omap_xload_boot_nand(SZ_128K);
>  		break;
>  	}
>  
> -- 
> 1.7.0.4
> 
> 
> _______________________________________________
> barebox mailing list
> barebox@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
> 

-- 
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] 17+ messages in thread

* Re: [RFC] xload: get barebox size from barebox_arm_head
  2012-08-28  6:54 ` Sascha Hauer
@ 2012-08-28  8:41   ` Jan Weitzel
  2012-08-28  9:08     ` Sascha Hauer
  0 siblings, 1 reply; 17+ messages in thread
From: Jan Weitzel @ 2012-08-28  8:41 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox

Am Dienstag, den 28.08.2012, 08:54 +0200 schrieb Sascha Hauer:
> Hi Jan,
> 
> Looks mostly good.
Is there a better place than arch/arm/mach-omap/xload.c for the helper functions?
Didn't find one for common arm related code.

Jan

> On Mon, Aug 27, 2012 at 12:56:20PM +0200, Jan Weitzel wrote:
> >  #include <fcntl.h>
> >  #include <mach/xload.h>
> >  #include <sizes.h>
> > +#include <asm/barebox-arm-head.h>
> >  
> > -void *omap_xload_boot_nand(int offset, int size)
> > +void *read_image_head(const char *name)
> > +{
> > +	void *header = xmalloc(ARM_HEAD_SIZE);
> > +	struct cdev *cdev;
> > +	int ret;
> > +
> > +	cdev = cdev_open(name, O_RDONLY);
> > +	if (!cdev) {
> > +		printf("failed to open partition\n");
> > +		return NULL;
> > +	}
> > +
> > +	ret = cdev_read(cdev, header, ARM_HEAD_SIZE, 0, 0);
> > +	cdev_close(cdev);
> > +
> > +	if (ret != ARM_HEAD_SIZE) {
> > +		printf("failed to read from partition\n");
> > +		return NULL;
> > +	}
> > +
> > +	return header;
> > +}
> > +
> > +unsigned int get_image_size(void *head)
> > +{
> > +	unsigned int ret = 0;
> > +	unsigned int *psize = head + HEAD_SIZE_OFFSET;
> > +	const char *pmagic = head + HEAD_MAGICWORD_OFFSET;
> > +
> > +	if (!head)
> > +		return 0;
> 
> Please drop this check...
> 
> > +
> > +	if (!strcmp(pmagic, "barebox"))
> > +		ret = *psize;
> > +	debug("Detected barebox image size %u\n", ret);
> > +
> > +	return ret;
> > +}
> > +
> > +void *omap_xload_boot_nand(int offset)
> >  {
> >  	int ret;
> > -	void *to = xmalloc(size);
> > +	int size;
> > +	void *to;
> >  	struct cdev *cdev;
> >  
> > -	devfs_add_partition("nand0", offset, size, PARTITION_FIXED, "x");
> > +	devfs_add_partition("nand0", offset, SZ_1M, PARTITION_FIXED, "x");
> >  	dev_add_bb_dev("x", "bbx");
> >  
> > +	size = get_image_size(read_image_head("bbx"));
> 
> ...and instead bail out directly here if you are unable to read the
> image head. If you are unable to read even the head of the image there
> is no point in trying to continue.
> 
> Sascha
> 
> 
> > +	if (!size)
> > +		size = SZ_512K;
> > +
> > +	to = xmalloc(size);
> > +
> >  	cdev = cdev_open("bbx", O_RDONLY);
> >  	if (!cdev) {
> >  		printf("failed to open nand\n");
> > @@ -80,7 +127,7 @@ int run_shell(void)
> >  		printf("unknown boot source. Fall back to nand\n");
> >  	case OMAP_BOOTSRC_NAND:
> >  		printf("booting from NAND\n");
> > -		func = omap_xload_boot_nand(SZ_128K, SZ_512K);
> > +		func = omap_xload_boot_nand(SZ_128K);
> >  		break;
> >  	}
> >  
> > -- 
> > 1.7.0.4
> > 
> > 
> > _______________________________________________
> > barebox mailing list
> > barebox@lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/barebox
> > 
> 



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

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

* Re: [RFC] xload: get barebox size from barebox_arm_head
  2012-08-28  8:41   ` Jan Weitzel
@ 2012-08-28  9:08     ` Sascha Hauer
  2012-08-28 12:36       ` [PATCH v2] " Jan Weitzel
  0 siblings, 1 reply; 17+ messages in thread
From: Sascha Hauer @ 2012-08-28  9:08 UTC (permalink / raw)
  To: Jan Weitzel; +Cc: barebox

On Tue, Aug 28, 2012 at 10:41:03AM +0200, Jan Weitzel wrote:
> Am Dienstag, den 28.08.2012, 08:54 +0200 schrieb Sascha Hauer:
> > Hi Jan,
> > 
> > Looks mostly good.
> Is there a better place than arch/arm/mach-omap/xload.c for the helper functions?
> Didn't find one for common arm related code.

You mean read_image_head and get_image_size? I think it's ok for now to
have them in xload.c.

Sascha

> 
> Jan
> 
> > On Mon, Aug 27, 2012 at 12:56:20PM +0200, Jan Weitzel wrote:
> > >  #include <fcntl.h>
> > >  #include <mach/xload.h>
> > >  #include <sizes.h>
> > > +#include <asm/barebox-arm-head.h>
> > >  
> > > -void *omap_xload_boot_nand(int offset, int size)
> > > +void *read_image_head(const char *name)
> > > +{
> > > +	void *header = xmalloc(ARM_HEAD_SIZE);
> > > +	struct cdev *cdev;
> > > +	int ret;
> > > +
> > > +	cdev = cdev_open(name, O_RDONLY);
> > > +	if (!cdev) {
> > > +		printf("failed to open partition\n");
> > > +		return NULL;
> > > +	}
> > > +
> > > +	ret = cdev_read(cdev, header, ARM_HEAD_SIZE, 0, 0);
> > > +	cdev_close(cdev);
> > > +
> > > +	if (ret != ARM_HEAD_SIZE) {
> > > +		printf("failed to read from partition\n");
> > > +		return NULL;
> > > +	}
> > > +
> > > +	return header;
> > > +}
> > > +
> > > +unsigned int get_image_size(void *head)
> > > +{
> > > +	unsigned int ret = 0;
> > > +	unsigned int *psize = head + HEAD_SIZE_OFFSET;
> > > +	const char *pmagic = head + HEAD_MAGICWORD_OFFSET;
> > > +
> > > +	if (!head)
> > > +		return 0;
> > 
> > Please drop this check...
> > 
> > > +
> > > +	if (!strcmp(pmagic, "barebox"))
> > > +		ret = *psize;
> > > +	debug("Detected barebox image size %u\n", ret);
> > > +
> > > +	return ret;
> > > +}
> > > +
> > > +void *omap_xload_boot_nand(int offset)
> > >  {
> > >  	int ret;
> > > -	void *to = xmalloc(size);
> > > +	int size;
> > > +	void *to;
> > >  	struct cdev *cdev;
> > >  
> > > -	devfs_add_partition("nand0", offset, size, PARTITION_FIXED, "x");
> > > +	devfs_add_partition("nand0", offset, SZ_1M, PARTITION_FIXED, "x");
> > >  	dev_add_bb_dev("x", "bbx");
> > >  
> > > +	size = get_image_size(read_image_head("bbx"));
> > 
> > ...and instead bail out directly here if you are unable to read the
> > image head. If you are unable to read even the head of the image there
> > is no point in trying to continue.
> > 
> > Sascha
> > 
> > 
> > > +	if (!size)
> > > +		size = SZ_512K;
> > > +
> > > +	to = xmalloc(size);
> > > +
> > >  	cdev = cdev_open("bbx", O_RDONLY);
> > >  	if (!cdev) {
> > >  		printf("failed to open nand\n");
> > > @@ -80,7 +127,7 @@ int run_shell(void)
> > >  		printf("unknown boot source. Fall back to nand\n");
> > >  	case OMAP_BOOTSRC_NAND:
> > >  		printf("booting from NAND\n");
> > > -		func = omap_xload_boot_nand(SZ_128K, SZ_512K);
> > > +		func = omap_xload_boot_nand(SZ_128K);
> > >  		break;
> > >  	}
> > >  
> > > -- 
> > > 1.7.0.4
> > > 
> > > 
> > > _______________________________________________
> > > barebox mailing list
> > > barebox@lists.infradead.org
> > > http://lists.infradead.org/mailman/listinfo/barebox
> > > 
> > 
> 
> 
> 

-- 
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] 17+ messages in thread

* [PATCH v2] xload: get barebox size from barebox_arm_head
  2012-08-28  9:08     ` Sascha Hauer
@ 2012-08-28 12:36       ` Jan Weitzel
  2012-08-29  6:59         ` Sascha Hauer
  0 siblings, 1 reply; 17+ messages in thread
From: Jan Weitzel @ 2012-08-28 12:36 UTC (permalink / raw)
  To: barebox

Add functions to read the barebox_arm_head, check barebox magicword
and read out the barebox image size.
Create a inital partion of 1Mb to access the barebox image on nand.

Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
---
v2: remove fall back if header read fail 

 arch/arm/include/asm/barebox-arm-head.h |    4 ++
 arch/arm/mach-omap/include/mach/xload.h |    2 +-
 arch/arm/mach-omap/xload.c              |   58 ++++++++++++++++++++++++++++--
 3 files changed, 59 insertions(+), 5 deletions(-)

diff --git a/arch/arm/include/asm/barebox-arm-head.h b/arch/arm/include/asm/barebox-arm-head.h
index 0dc3074..521bcf6 100644
--- a/arch/arm/include/asm/barebox-arm-head.h
+++ b/arch/arm/include/asm/barebox-arm-head.h
@@ -1,6 +1,10 @@
 #ifndef __ASM_ARM_HEAD_H
 #define __ASM_ARM_HEAD_H
 
+#define ARM_HEAD_SIZE		0x30
+#define HEAD_MAGICWORD_OFFSET	0x20
+#define HEAD_SIZE_OFFSET	0x2C
+
 static inline void barebox_arm_head(void)
 {
 	__asm__ __volatile__ (
diff --git a/arch/arm/mach-omap/include/mach/xload.h b/arch/arm/mach-omap/include/mach/xload.h
index 844b57f..26f1b68 100644
--- a/arch/arm/mach-omap/include/mach/xload.h
+++ b/arch/arm/mach-omap/include/mach/xload.h
@@ -1,7 +1,7 @@
 #ifndef _MACH_XLOAD_H
 #define _MACH_XLOAD_H
 
-void *omap_xload_boot_nand(int offset, int size);
+void *omap_xload_boot_nand(int offset);
 void *omap_xload_boot_mmc(void);
 
 enum omap_boot_src {
diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c
index 9a6b0b4..0be0c50 100644
--- a/arch/arm/mach-omap/xload.c
+++ b/arch/arm/mach-omap/xload.c
@@ -7,16 +7,66 @@
 #include <fcntl.h>
 #include <mach/xload.h>
 #include <sizes.h>
+#include <asm/barebox-arm-head.h>
 
-void *omap_xload_boot_nand(int offset, int size)
+void *read_image_head(const char *name)
 {
+	void *header = xmalloc(ARM_HEAD_SIZE);
+	struct cdev *cdev;
 	int ret;
-	void *to = xmalloc(size);
+
+	cdev = cdev_open(name, O_RDONLY);
+	if (!cdev) {
+		printf("failed to open partition\n");
+		return NULL;
+	}
+
+	ret = cdev_read(cdev, header, ARM_HEAD_SIZE, 0, 0);
+	cdev_close(cdev);
+
+	if (ret != ARM_HEAD_SIZE) {
+		printf("failed to read from partition\n");
+		return NULL;
+	}
+
+	return header;
+}
+
+unsigned int get_image_size(void *head)
+{
+	unsigned int ret = 0;
+	unsigned int *psize = head + HEAD_SIZE_OFFSET;
+	const char *pmagic = head + HEAD_MAGICWORD_OFFSET;
+
+	if (!strcmp(pmagic, "barebox"))
+		ret = *psize;
+	debug("Detected barebox image size %u\n", ret);
+
+	return ret;
+}
+
+void *omap_xload_boot_nand(int offset)
+{
+	int ret;
+	int size;
+	void *to, *header;
 	struct cdev *cdev;
 
-	devfs_add_partition("nand0", offset, size, PARTITION_FIXED, "x");
+	devfs_add_partition("nand0", offset, SZ_1M, PARTITION_FIXED, "x");
 	dev_add_bb_dev("x", "bbx");
 
+	header = get_image_size(read_image_head("bbx"));
+	if (header == NULL)
+		return NULL;
+
+	size = get_image_size(header);
+	if (!size) {
+		printf("failed to get image size\n");
+		return NULL;
+	}
+
+	to = xmalloc(size);
+
 	cdev = cdev_open("bbx", O_RDONLY);
 	if (!cdev) {
 		printf("failed to open nand\n");
@@ -80,7 +130,7 @@ int run_shell(void)
 		printf("unknown boot source. Fall back to nand\n");
 	case OMAP_BOOTSRC_NAND:
 		printf("booting from NAND\n");
-		func = omap_xload_boot_nand(SZ_128K, SZ_512K);
+		func = omap_xload_boot_nand(SZ_128K);
 		break;
 	}
 
-- 
1.7.0.4


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

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

* Re: [PATCH v2] xload: get barebox size from barebox_arm_head
  2012-08-28 12:36       ` [PATCH v2] " Jan Weitzel
@ 2012-08-29  6:59         ` Sascha Hauer
  2012-08-29  8:01           ` Jan Weitzel
  0 siblings, 1 reply; 17+ messages in thread
From: Sascha Hauer @ 2012-08-29  6:59 UTC (permalink / raw)
  To: Jan Weitzel; +Cc: barebox

On Tue, Aug 28, 2012 at 02:36:21PM +0200, Jan Weitzel wrote:
> Add functions to read the barebox_arm_head, check barebox magicword
> and read out the barebox image size.
> Create a inital partion of 1Mb to access the barebox image on nand.

The patch neither applies on next or on master. On which branch did you
apply this?

Sascha

> 
> Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
> ---
> v2: remove fall back if header read fail 
> 
>  arch/arm/include/asm/barebox-arm-head.h |    4 ++
>  arch/arm/mach-omap/include/mach/xload.h |    2 +-
>  arch/arm/mach-omap/xload.c              |   58 ++++++++++++++++++++++++++++--
>  3 files changed, 59 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/arm/include/asm/barebox-arm-head.h b/arch/arm/include/asm/barebox-arm-head.h
> index 0dc3074..521bcf6 100644
> --- a/arch/arm/include/asm/barebox-arm-head.h
> +++ b/arch/arm/include/asm/barebox-arm-head.h
> @@ -1,6 +1,10 @@
>  #ifndef __ASM_ARM_HEAD_H
>  #define __ASM_ARM_HEAD_H
>  
> +#define ARM_HEAD_SIZE		0x30
> +#define HEAD_MAGICWORD_OFFSET	0x20
> +#define HEAD_SIZE_OFFSET	0x2C
> +
>  static inline void barebox_arm_head(void)
>  {
>  	__asm__ __volatile__ (
> diff --git a/arch/arm/mach-omap/include/mach/xload.h b/arch/arm/mach-omap/include/mach/xload.h
> index 844b57f..26f1b68 100644
> --- a/arch/arm/mach-omap/include/mach/xload.h
> +++ b/arch/arm/mach-omap/include/mach/xload.h
> @@ -1,7 +1,7 @@
>  #ifndef _MACH_XLOAD_H
>  #define _MACH_XLOAD_H
>  
> -void *omap_xload_boot_nand(int offset, int size);
> +void *omap_xload_boot_nand(int offset);
>  void *omap_xload_boot_mmc(void);
>  
>  enum omap_boot_src {
> diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c
> index 9a6b0b4..0be0c50 100644
> --- a/arch/arm/mach-omap/xload.c
> +++ b/arch/arm/mach-omap/xload.c
> @@ -7,16 +7,66 @@
>  #include <fcntl.h>
>  #include <mach/xload.h>
>  #include <sizes.h>
> +#include <asm/barebox-arm-head.h>
>  
> -void *omap_xload_boot_nand(int offset, int size)
> +void *read_image_head(const char *name)
>  {
> +	void *header = xmalloc(ARM_HEAD_SIZE);
> +	struct cdev *cdev;
>  	int ret;
> -	void *to = xmalloc(size);
> +
> +	cdev = cdev_open(name, O_RDONLY);
> +	if (!cdev) {
> +		printf("failed to open partition\n");
> +		return NULL;
> +	}
> +
> +	ret = cdev_read(cdev, header, ARM_HEAD_SIZE, 0, 0);
> +	cdev_close(cdev);
> +
> +	if (ret != ARM_HEAD_SIZE) {
> +		printf("failed to read from partition\n");
> +		return NULL;
> +	}
> +
> +	return header;
> +}
> +
> +unsigned int get_image_size(void *head)
> +{
> +	unsigned int ret = 0;
> +	unsigned int *psize = head + HEAD_SIZE_OFFSET;
> +	const char *pmagic = head + HEAD_MAGICWORD_OFFSET;
> +
> +	if (!strcmp(pmagic, "barebox"))
> +		ret = *psize;
> +	debug("Detected barebox image size %u\n", ret);
> +
> +	return ret;
> +}
> +
> +void *omap_xload_boot_nand(int offset)
> +{
> +	int ret;
> +	int size;
> +	void *to, *header;
>  	struct cdev *cdev;
>  
> -	devfs_add_partition("nand0", offset, size, PARTITION_FIXED, "x");
> +	devfs_add_partition("nand0", offset, SZ_1M, PARTITION_FIXED, "x");
>  	dev_add_bb_dev("x", "bbx");
>  
> +	header = get_image_size(read_image_head("bbx"));
> +	if (header == NULL)
> +		return NULL;
> +
> +	size = get_image_size(header);
> +	if (!size) {
> +		printf("failed to get image size\n");
> +		return NULL;
> +	}
> +
> +	to = xmalloc(size);
> +
>  	cdev = cdev_open("bbx", O_RDONLY);
>  	if (!cdev) {
>  		printf("failed to open nand\n");
> @@ -80,7 +130,7 @@ int run_shell(void)
>  		printf("unknown boot source. Fall back to nand\n");
>  	case OMAP_BOOTSRC_NAND:
>  		printf("booting from NAND\n");
> -		func = omap_xload_boot_nand(SZ_128K, SZ_512K);
> +		func = omap_xload_boot_nand(SZ_128K);
>  		break;
>  	}
>  
> -- 
> 1.7.0.4
> 
> 
> _______________________________________________
> barebox mailing list
> barebox@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
> 

-- 
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] 17+ messages in thread

* Re: [PATCH v2] xload: get barebox size from barebox_arm_head
  2012-08-29  6:59         ` Sascha Hauer
@ 2012-08-29  8:01           ` Jan Weitzel
  2012-08-29  9:10             ` [PATCH v3] " Jan Weitzel
  0 siblings, 1 reply; 17+ messages in thread
From: Jan Weitzel @ 2012-08-29  8:01 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox

Am Mittwoch, den 29.08.2012, 08:59 +0200 schrieb Sascha Hauer:
> On Tue, Aug 28, 2012 at 02:36:21PM +0200, Jan Weitzel wrote:
> > Add functions to read the barebox_arm_head, check barebox magicword
> > and read out the barebox image size.
> > Create a inital partion of 1Mb to access the barebox image on nand.
> 
> The patch neither applies on next or on master. On which branch did you
> apply this?
Sorry, on a outdated branch with other omap4 nand stuff. I rebase the patch to master and send it after testing.
Jan

> Sascha
> 
> > 
> > Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
> > ---
> > v2: remove fall back if header read fail 
> > 
> >  arch/arm/include/asm/barebox-arm-head.h |    4 ++
> >  arch/arm/mach-omap/include/mach/xload.h |    2 +-
> >  arch/arm/mach-omap/xload.c              |   58 ++++++++++++++++++++++++++++--
> >  3 files changed, 59 insertions(+), 5 deletions(-)
> > 
> > diff --git a/arch/arm/include/asm/barebox-arm-head.h b/arch/arm/include/asm/barebox-arm-head.h
> > index 0dc3074..521bcf6 100644
> > --- a/arch/arm/include/asm/barebox-arm-head.h
> > +++ b/arch/arm/include/asm/barebox-arm-head.h
> > @@ -1,6 +1,10 @@
> >  #ifndef __ASM_ARM_HEAD_H
> >  #define __ASM_ARM_HEAD_H
> >  
> > +#define ARM_HEAD_SIZE		0x30
> > +#define HEAD_MAGICWORD_OFFSET	0x20
> > +#define HEAD_SIZE_OFFSET	0x2C
> > +
> >  static inline void barebox_arm_head(void)
> >  {
> >  	__asm__ __volatile__ (
> > diff --git a/arch/arm/mach-omap/include/mach/xload.h b/arch/arm/mach-omap/include/mach/xload.h
> > index 844b57f..26f1b68 100644
> > --- a/arch/arm/mach-omap/include/mach/xload.h
> > +++ b/arch/arm/mach-omap/include/mach/xload.h
> > @@ -1,7 +1,7 @@
> >  #ifndef _MACH_XLOAD_H
> >  #define _MACH_XLOAD_H
> >  
> > -void *omap_xload_boot_nand(int offset, int size);
> > +void *omap_xload_boot_nand(int offset);
> >  void *omap_xload_boot_mmc(void);
> >  
> >  enum omap_boot_src {
> > diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c
> > index 9a6b0b4..0be0c50 100644
> > --- a/arch/arm/mach-omap/xload.c
> > +++ b/arch/arm/mach-omap/xload.c
> > @@ -7,16 +7,66 @@
> >  #include <fcntl.h>
> >  #include <mach/xload.h>
> >  #include <sizes.h>
> > +#include <asm/barebox-arm-head.h>
> >  
> > -void *omap_xload_boot_nand(int offset, int size)
> > +void *read_image_head(const char *name)
> >  {
> > +	void *header = xmalloc(ARM_HEAD_SIZE);
> > +	struct cdev *cdev;
> >  	int ret;
> > -	void *to = xmalloc(size);
> > +
> > +	cdev = cdev_open(name, O_RDONLY);
> > +	if (!cdev) {
> > +		printf("failed to open partition\n");
> > +		return NULL;
> > +	}
> > +
> > +	ret = cdev_read(cdev, header, ARM_HEAD_SIZE, 0, 0);
> > +	cdev_close(cdev);
> > +
> > +	if (ret != ARM_HEAD_SIZE) {
> > +		printf("failed to read from partition\n");
> > +		return NULL;
> > +	}
> > +
> > +	return header;
> > +}
> > +
> > +unsigned int get_image_size(void *head)
> > +{
> > +	unsigned int ret = 0;
> > +	unsigned int *psize = head + HEAD_SIZE_OFFSET;
> > +	const char *pmagic = head + HEAD_MAGICWORD_OFFSET;
> > +
> > +	if (!strcmp(pmagic, "barebox"))
> > +		ret = *psize;
> > +	debug("Detected barebox image size %u\n", ret);
> > +
> > +	return ret;
> > +}
> > +
> > +void *omap_xload_boot_nand(int offset)
> > +{
> > +	int ret;
> > +	int size;
> > +	void *to, *header;
> >  	struct cdev *cdev;
> >  
> > -	devfs_add_partition("nand0", offset, size, PARTITION_FIXED, "x");
> > +	devfs_add_partition("nand0", offset, SZ_1M, PARTITION_FIXED, "x");
> >  	dev_add_bb_dev("x", "bbx");
> >  
> > +	header = get_image_size(read_image_head("bbx"));
> > +	if (header == NULL)
> > +		return NULL;
> > +
> > +	size = get_image_size(header);
> > +	if (!size) {
> > +		printf("failed to get image size\n");
> > +		return NULL;
> > +	}
> > +
> > +	to = xmalloc(size);
> > +
> >  	cdev = cdev_open("bbx", O_RDONLY);
> >  	if (!cdev) {
> >  		printf("failed to open nand\n");
> > @@ -80,7 +130,7 @@ int run_shell(void)
> >  		printf("unknown boot source. Fall back to nand\n");
> >  	case OMAP_BOOTSRC_NAND:
> >  		printf("booting from NAND\n");
> > -		func = omap_xload_boot_nand(SZ_128K, SZ_512K);
> > +		func = omap_xload_boot_nand(SZ_128K);
> >  		break;
> >  	}
> >  
> > -- 
> > 1.7.0.4
> > 
> > 
> > _______________________________________________
> > barebox mailing list
> > barebox@lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/barebox
> > 
> 



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

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

* [PATCH v3] xload: get barebox size from barebox_arm_head
  2012-08-29  8:01           ` Jan Weitzel
@ 2012-08-29  9:10             ` Jan Weitzel
  2012-08-29 12:21               ` Jean-Christophe PLAGNIOL-VILLARD
  0 siblings, 1 reply; 17+ messages in thread
From: Jan Weitzel @ 2012-08-29  9:10 UTC (permalink / raw)
  To: barebox

Add functions to read the barebox_arm_head, check barebox magicword
and read out the barebox image size.
Create a inital partion of 1Mb to access the barebox image on nand.

Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
---
v2: remove fall back if header read fail 
v3: fix header check, rebase master 

 arch/arm/include/asm/barebox-arm-head.h |    4 ++
 arch/arm/mach-omap/include/mach/xload.h |    2 +-
 arch/arm/mach-omap/xload.c              |   58 ++++++++++++++++++++++++++++--
 3 files changed, 59 insertions(+), 5 deletions(-)

diff --git a/arch/arm/include/asm/barebox-arm-head.h b/arch/arm/include/asm/barebox-arm-head.h
index 2c250e9..1ddfc0f 100644
--- a/arch/arm/include/asm/barebox-arm-head.h
+++ b/arch/arm/include/asm/barebox-arm-head.h
@@ -1,6 +1,10 @@
 #ifndef __ASM_ARM_HEAD_H
 #define __ASM_ARM_HEAD_H
 
+#define ARM_HEAD_SIZE		0x30
+#define HEAD_MAGICWORD_OFFSET	0x20
+#define HEAD_SIZE_OFFSET	0x2C
+
 static inline void barebox_arm_head(void)
 {
 	__asm__ __volatile__ (
diff --git a/arch/arm/mach-omap/include/mach/xload.h b/arch/arm/mach-omap/include/mach/xload.h
index 844b57f..26f1b68 100644
--- a/arch/arm/mach-omap/include/mach/xload.h
+++ b/arch/arm/mach-omap/include/mach/xload.h
@@ -1,7 +1,7 @@
 #ifndef _MACH_XLOAD_H
 #define _MACH_XLOAD_H
 
-void *omap_xload_boot_nand(int offset, int size);
+void *omap_xload_boot_nand(int offset);
 void *omap_xload_boot_mmc(void);
 
 enum omap_boot_src {
diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c
index 13024ab..d9765b7 100644
--- a/arch/arm/mach-omap/xload.c
+++ b/arch/arm/mach-omap/xload.c
@@ -7,16 +7,66 @@
 #include <fcntl.h>
 #include <mach/xload.h>
 #include <sizes.h>
+#include <asm/barebox-arm-head.h>
 
-void *omap_xload_boot_nand(int offset, int size)
+void *read_image_head(const char *name)
 {
+	void *header = xmalloc(ARM_HEAD_SIZE);
+	struct cdev *cdev;
 	int ret;
-	void *to = xmalloc(size);
+
+	cdev = cdev_open(name, O_RDONLY);
+	if (!cdev) {
+		printf("failed to open partition\n");
+		return NULL;
+	}
+
+	ret = cdev_read(cdev, header, ARM_HEAD_SIZE, 0, 0);
+	cdev_close(cdev);
+
+	if (ret != ARM_HEAD_SIZE) {
+		printf("failed to read from partition\n");
+		return NULL;
+	}
+
+	return header;
+}
+
+unsigned int get_image_size(void *head)
+{
+	unsigned int ret = 0;
+	unsigned int *psize = head + HEAD_SIZE_OFFSET;
+	const char *pmagic = head + HEAD_MAGICWORD_OFFSET;
+
+	if (!strcmp(pmagic, "barebox"))
+		ret = *psize;
+	debug("Detected barebox image size %u\n", ret);
+
+	return ret;
+}
+
+void *omap_xload_boot_nand(int offset)
+{
+	int ret;
+	int size;
+	void *to, *header;
 	struct cdev *cdev;
 
-	devfs_add_partition("nand0", offset, size, DEVFS_PARTITION_FIXED, "x");
+	devfs_add_partition("nand0", offset, SZ_1M, DEVFS_PARTITION_FIXED, "x");
 	dev_add_bb_dev("x", "bbx");
 
+	header = read_image_head("bbx");
+	if (header == NULL)
+		return NULL;
+
+	size = get_image_size(header);
+	if (!size) {
+		printf("failed to get image size\n");
+		return NULL;
+	}
+
+	to = xmalloc(size);
+
 	cdev = cdev_open("bbx", O_RDONLY);
 	if (!cdev) {
 		printf("failed to open nand\n");
@@ -80,7 +130,7 @@ int run_shell(void)
 		printf("unknown boot source. Fall back to nand\n");
 	case OMAP_BOOTSRC_NAND:
 		printf("booting from NAND\n");
-		func = omap_xload_boot_nand(SZ_128K, SZ_256K);
+		func = omap_xload_boot_nand(SZ_128K);
 		break;
 	}
 
-- 
1.7.0.4


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

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

* Re: [PATCH v3] xload: get barebox size from barebox_arm_head
  2012-08-29  9:10             ` [PATCH v3] " Jan Weitzel
@ 2012-08-29 12:21               ` Jean-Christophe PLAGNIOL-VILLARD
  2012-09-04  7:34                 ` Jan Weitzel
  0 siblings, 1 reply; 17+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-08-29 12:21 UTC (permalink / raw)
  To: Jan Weitzel; +Cc: barebox

On 11:10 Wed 29 Aug     , Jan Weitzel wrote:
> Add functions to read the barebox_arm_head, check barebox magicword
> and read out the barebox image size.
> Create a inital partion of 1Mb to access the barebox image on nand.
> 
> Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
> ---
> v2: remove fall back if header read fail 
> v3: fix header check, rebase master 
> 
>  arch/arm/include/asm/barebox-arm-head.h |    4 ++
>  arch/arm/mach-omap/include/mach/xload.h |    2 +-
>  arch/arm/mach-omap/xload.c              |   58 ++++++++++++++++++++++++++++--
>  3 files changed, 59 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/arm/include/asm/barebox-arm-head.h b/arch/arm/include/asm/barebox-arm-head.h
> index 2c250e9..1ddfc0f 100644
> --- a/arch/arm/include/asm/barebox-arm-head.h
> +++ b/arch/arm/include/asm/barebox-arm-head.h
> @@ -1,6 +1,10 @@
>  #ifndef __ASM_ARM_HEAD_H
>  #define __ASM_ARM_HEAD_H
>  
> +#define ARM_HEAD_SIZE		0x30
> +#define HEAD_MAGICWORD_OFFSET	0x20
> +#define HEAD_SIZE_OFFSET	0x2C
> +
>  static inline void barebox_arm_head(void)
>  {
>  	__asm__ __volatile__ (
> diff --git a/arch/arm/mach-omap/include/mach/xload.h b/arch/arm/mach-omap/include/mach/xload.h
> index 844b57f..26f1b68 100644
> --- a/arch/arm/mach-omap/include/mach/xload.h
> +++ b/arch/arm/mach-omap/include/mach/xload.h
> @@ -1,7 +1,7 @@
>  #ifndef _MACH_XLOAD_H
>  #define _MACH_XLOAD_H
>  
> -void *omap_xload_boot_nand(int offset, int size);
> +void *omap_xload_boot_nand(int offset);
>  void *omap_xload_boot_mmc(void);
>  
>  enum omap_boot_src {
> diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c
> index 13024ab..d9765b7 100644
> --- a/arch/arm/mach-omap/xload.c
> +++ b/arch/arm/mach-omap/xload.c
> @@ -7,16 +7,66 @@
>  #include <fcntl.h>
>  #include <mach/xload.h>
>  #include <sizes.h>
> +#include <asm/barebox-arm-head.h>
>  
> -void *omap_xload_boot_nand(int offset, int size)
> +void *read_image_head(const char *name)
>  {
> +	void *header = xmalloc(ARM_HEAD_SIZE);
> +	struct cdev *cdev;
>  	int ret;
> -	void *to = xmalloc(size);
> +
> +	cdev = cdev_open(name, O_RDONLY);
> +	if (!cdev) {
> +		printf("failed to open partition\n");
> +		return NULL;
> +	}
> +
> +	ret = cdev_read(cdev, header, ARM_HEAD_SIZE, 0, 0);
> +	cdev_close(cdev);
> +
> +	if (ret != ARM_HEAD_SIZE) {
> +		printf("failed to read from partition\n");
> +		return NULL;
> +	}
> +
> +	return header;
> +}
> +
> +unsigned int get_image_size(void *head)
> +{
> +	unsigned int ret = 0;
> +	unsigned int *psize = head + HEAD_SIZE_OFFSET;
> +	const char *pmagic = head + HEAD_MAGICWORD_OFFSET;
> +
> +	if (!strcmp(pmagic, "barebox"))
> +		ret = *psize;
> +	debug("Detected barebox image size %u\n", ret);
factorise the code with filetype

Best Regards,
J.

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

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

* Re: [PATCH v3] xload: get barebox size from barebox_arm_head
  2012-08-29 12:21               ` Jean-Christophe PLAGNIOL-VILLARD
@ 2012-09-04  7:34                 ` Jan Weitzel
  2012-09-04  9:28                   ` Sascha Hauer
  0 siblings, 1 reply; 17+ messages in thread
From: Jan Weitzel @ 2012-09-04  7:34 UTC (permalink / raw)
  To: Jean-Christophe PLAGNIOL-VILLARD; +Cc: barebox

Am Mittwoch, den 29.08.2012, 14:21 +0200 schrieb Jean-Christophe
PLAGNIOL-VILLARD:
> On 11:10 Wed 29 Aug     , Jan Weitzel wrote:
> > Add functions to read the barebox_arm_head, check barebox magicword
> > and read out the barebox image size.
> > Create a inital partion of 1Mb to access the barebox image on nand.
> > 
> > Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
> > ---
> > v2: remove fall back if header read fail 
> > v3: fix header check, rebase master 
> > 
> >  arch/arm/include/asm/barebox-arm-head.h |    4 ++
> >  arch/arm/mach-omap/include/mach/xload.h |    2 +-
> >  arch/arm/mach-omap/xload.c              |   58 ++++++++++++++++++++++++++++--
> >  3 files changed, 59 insertions(+), 5 deletions(-)
> > 
> > diff --git a/arch/arm/include/asm/barebox-arm-head.h b/arch/arm/include/asm/barebox-arm-head.h
> > index 2c250e9..1ddfc0f 100644
> > --- a/arch/arm/include/asm/barebox-arm-head.h
> > +++ b/arch/arm/include/asm/barebox-arm-head.h
> > @@ -1,6 +1,10 @@
> >  #ifndef __ASM_ARM_HEAD_H
> >  #define __ASM_ARM_HEAD_H
> >  
> > +#define ARM_HEAD_SIZE		0x30
> > +#define HEAD_MAGICWORD_OFFSET	0x20
> > +#define HEAD_SIZE_OFFSET	0x2C
> > +
> >  static inline void barebox_arm_head(void)
> >  {
> >  	__asm__ __volatile__ (
> > diff --git a/arch/arm/mach-omap/include/mach/xload.h b/arch/arm/mach-omap/include/mach/xload.h
> > index 844b57f..26f1b68 100644
> > --- a/arch/arm/mach-omap/include/mach/xload.h
> > +++ b/arch/arm/mach-omap/include/mach/xload.h
> > @@ -1,7 +1,7 @@
> >  #ifndef _MACH_XLOAD_H
> >  #define _MACH_XLOAD_H
> >  
> > -void *omap_xload_boot_nand(int offset, int size);
> > +void *omap_xload_boot_nand(int offset);
> >  void *omap_xload_boot_mmc(void);
> >  
> >  enum omap_boot_src {
> > diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c
> > index 13024ab..d9765b7 100644
> > --- a/arch/arm/mach-omap/xload.c
> > +++ b/arch/arm/mach-omap/xload.c
> > @@ -7,16 +7,66 @@
> >  #include <fcntl.h>
> >  #include <mach/xload.h>
> >  #include <sizes.h>
> > +#include <asm/barebox-arm-head.h>
> >  
> > -void *omap_xload_boot_nand(int offset, int size)
> > +void *read_image_head(const char *name)
> >  {
> > +	void *header = xmalloc(ARM_HEAD_SIZE);
> > +	struct cdev *cdev;
> >  	int ret;
> > -	void *to = xmalloc(size);
> > +
> > +	cdev = cdev_open(name, O_RDONLY);
> > +	if (!cdev) {
> > +		printf("failed to open partition\n");
> > +		return NULL;
> > +	}
> > +
> > +	ret = cdev_read(cdev, header, ARM_HEAD_SIZE, 0, 0);
> > +	cdev_close(cdev);
> > +
> > +	if (ret != ARM_HEAD_SIZE) {
> > +		printf("failed to read from partition\n");
> > +		return NULL;
> > +	}
> > +
> > +	return header;
> > +}
> > +
> > +unsigned int get_image_size(void *head)
> > +{
> > +	unsigned int ret = 0;
> > +	unsigned int *psize = head + HEAD_SIZE_OFFSET;
> > +	const char *pmagic = head + HEAD_MAGICWORD_OFFSET;
> > +
> > +	if (!strcmp(pmagic, "barebox"))
> > +		ret = *psize;
> > +	debug("Detected barebox image size %u\n", ret);
> factorise the code with filetype
What exactly do you mean? I could factorise it by boot source (mmc / nand) with complete omap_xload_boot_nand.
Jan

> Best Regards,
> J.



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

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

* Re: [PATCH v3] xload: get barebox size from barebox_arm_head
  2012-09-04  7:34                 ` Jan Weitzel
@ 2012-09-04  9:28                   ` Sascha Hauer
  2012-09-04 12:27                     ` Jan Weitzel
  0 siblings, 1 reply; 17+ messages in thread
From: Sascha Hauer @ 2012-09-04  9:28 UTC (permalink / raw)
  To: Jan Weitzel; +Cc: barebox

On Tue, Sep 04, 2012 at 09:34:22AM +0200, Jan Weitzel wrote:
> Am Mittwoch, den 29.08.2012, 14:21 +0200 schrieb Jean-Christophe
> > > +unsigned int get_image_size(void *head)
> > > +{
> > > +	unsigned int ret = 0;
> > > +	unsigned int *psize = head + HEAD_SIZE_OFFSET;
> > > +	const char *pmagic = head + HEAD_MAGICWORD_OFFSET;
> > > +
> > > +	if (!strcmp(pmagic, "barebox"))
> > > +		ret = *psize;
> > > +	debug("Detected barebox image size %u\n", ret);
> > factorise the code with filetype
> What exactly do you mean? I could factorise it by boot source (mmc / nand) with complete omap_xload_boot_nand.

He means that you should use file_detect_type() To detect whether it's a
barebox image.
I'm unsure I share this opinion. After detecting that it's a barebox
file you have to look into the header anyway to get the actual size.

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] 17+ messages in thread

* Re: [PATCH v3] xload: get barebox size from barebox_arm_head
  2012-09-04  9:28                   ` Sascha Hauer
@ 2012-09-04 12:27                     ` Jan Weitzel
  2012-09-04 14:41                       ` Jean-Christophe PLAGNIOL-VILLARD
  0 siblings, 1 reply; 17+ messages in thread
From: Jan Weitzel @ 2012-09-04 12:27 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox

Am Dienstag, den 04.09.2012, 11:28 +0200 schrieb Sascha Hauer:
> On Tue, Sep 04, 2012 at 09:34:22AM +0200, Jan Weitzel wrote:
> > Am Mittwoch, den 29.08.2012, 14:21 +0200 schrieb Jean-Christophe
> > > > +unsigned int get_image_size(void *head)
> > > > +{
> > > > +	unsigned int ret = 0;
> > > > +	unsigned int *psize = head + HEAD_SIZE_OFFSET;
> > > > +	const char *pmagic = head + HEAD_MAGICWORD_OFFSET;
> > > > +
> > > > +	if (!strcmp(pmagic, "barebox"))
> > > > +		ret = *psize;
> > > > +	debug("Detected barebox image size %u\n", ret);
> > > factorise the code with filetype
> > What exactly do you mean? I could factorise it by boot source (mmc / nand) with complete omap_xload_boot_nand.
> 
> He means that you should use file_detect_type() To detect whether it's a
> barebox image.
> I'm unsure I share this opinion. After detecting that it's a barebox
> file you have to look into the header anyway to get the actual size.
I wasn't aware of this function. I would like to avoid adding
CONFIG_FILETYPE to MLO config.
Jan
> Sascha
> 



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

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

* Re: [PATCH v3] xload: get barebox size from barebox_arm_head
  2012-09-04 12:27                     ` Jan Weitzel
@ 2012-09-04 14:41                       ` Jean-Christophe PLAGNIOL-VILLARD
  2012-09-05  8:22                         ` [PATCH v4] " Jan Weitzel
  0 siblings, 1 reply; 17+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-09-04 14:41 UTC (permalink / raw)
  To: Jan Weitzel; +Cc: barebox

On 14:27 Tue 04 Sep     , Jan Weitzel wrote:
> Am Dienstag, den 04.09.2012, 11:28 +0200 schrieb Sascha Hauer:
> > On Tue, Sep 04, 2012 at 09:34:22AM +0200, Jan Weitzel wrote:
> > > Am Mittwoch, den 29.08.2012, 14:21 +0200 schrieb Jean-Christophe
> > > > > +unsigned int get_image_size(void *head)
> > > > > +{
> > > > > +	unsigned int ret = 0;
> > > > > +	unsigned int *psize = head + HEAD_SIZE_OFFSET;
> > > > > +	const char *pmagic = head + HEAD_MAGICWORD_OFFSET;
> > > > > +
> > > > > +	if (!strcmp(pmagic, "barebox"))
> > > > > +		ret = *psize;
> > > > > +	debug("Detected barebox image size %u\n", ret);
> > > > factorise the code with filetype
> > > What exactly do you mean? I could factorise it by boot source (mmc / nand) with complete omap_xload_boot_nand.
> > 
> > He means that you should use file_detect_type() To detect whether it's a
> > barebox image.
> > I'm unsure I share this opinion. After detecting that it's a barebox
> > file you have to look into the header anyway to get the actual size.
> I wasn't aware of this function. I would like to avoid adding
> CONFIG_FILETYPE to MLO config.

so factorize the detection of the barebox-arm in a header share by both

duplication of the code NACK

Best Regards,
J.

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

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

* [PATCH v4] xload: get barebox size from barebox_arm_head
  2012-09-04 14:41                       ` Jean-Christophe PLAGNIOL-VILLARD
@ 2012-09-05  8:22                         ` Jan Weitzel
  2012-09-05 10:34                           ` Jean-Christophe PLAGNIOL-VILLARD
  0 siblings, 1 reply; 17+ messages in thread
From: Jan Weitzel @ 2012-09-05  8:22 UTC (permalink / raw)
  To: barebox

Add functions to read the barebox_arm_head, check barebox magicword
and read out the barebox image size.
Create a inital partion of 1Mb to access the barebox image on nand.

Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
---
v2: remove fall back if header read fail 
v3: fix header check, rebase master 
v4: factorize barebox detection

 arch/arm/include/asm/barebox-arm-head.h |    9 +++++
 arch/arm/mach-omap/include/mach/xload.h |    2 +-
 arch/arm/mach-omap/xload.c              |   57 ++++++++++++++++++++++++++++--
 common/filetype.c                       |    3 +-
 4 files changed, 65 insertions(+), 6 deletions(-)

diff --git a/arch/arm/include/asm/barebox-arm-head.h b/arch/arm/include/asm/barebox-arm-head.h
index 2c250e9..42bd239 100644
--- a/arch/arm/include/asm/barebox-arm-head.h
+++ b/arch/arm/include/asm/barebox-arm-head.h
@@ -1,6 +1,15 @@
 #ifndef __ASM_ARM_HEAD_H
 #define __ASM_ARM_HEAD_H
 
+#define ARM_HEAD_SIZE		0x30
+#define HEAD_MAGICWORD_OFFSET	0x20
+#define HEAD_SIZE_OFFSET	0x2C
+
+static inline int is_barebox_arm_head(const char *head)
+{
+	return !strcmp(head + HEAD_MAGICWORD_OFFSET, "barebox");
+}
+
 static inline void barebox_arm_head(void)
 {
 	__asm__ __volatile__ (
diff --git a/arch/arm/mach-omap/include/mach/xload.h b/arch/arm/mach-omap/include/mach/xload.h
index 844b57f..26f1b68 100644
--- a/arch/arm/mach-omap/include/mach/xload.h
+++ b/arch/arm/mach-omap/include/mach/xload.h
@@ -1,7 +1,7 @@
 #ifndef _MACH_XLOAD_H
 #define _MACH_XLOAD_H
 
-void *omap_xload_boot_nand(int offset, int size);
+void *omap_xload_boot_nand(int offset);
 void *omap_xload_boot_mmc(void);
 
 enum omap_boot_src {
diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c
index 13024ab..5f9ca26 100644
--- a/arch/arm/mach-omap/xload.c
+++ b/arch/arm/mach-omap/xload.c
@@ -7,16 +7,65 @@
 #include <fcntl.h>
 #include <mach/xload.h>
 #include <sizes.h>
+#include <asm/barebox-arm-head.h>
 
-void *omap_xload_boot_nand(int offset, int size)
+void *read_image_head(const char *name)
 {
+	void *header = xmalloc(ARM_HEAD_SIZE);
+	struct cdev *cdev;
 	int ret;
-	void *to = xmalloc(size);
+
+	cdev = cdev_open(name, O_RDONLY);
+	if (!cdev) {
+		printf("failed to open partition\n");
+		return NULL;
+	}
+
+	ret = cdev_read(cdev, header, ARM_HEAD_SIZE, 0, 0);
+	cdev_close(cdev);
+
+	if (ret != ARM_HEAD_SIZE) {
+		printf("failed to read from partition\n");
+		return NULL;
+	}
+
+	return header;
+}
+
+unsigned int get_image_size(void *head)
+{
+	unsigned int ret = 0;
+	unsigned int *psize = head + HEAD_SIZE_OFFSET;
+
+	if (is_barebox_arm_head(head))
+		ret = *psize;
+	debug("Detected barebox image size %u\n", ret);
+
+	return ret;
+}
+
+void *omap_xload_boot_nand(int offset)
+{
+	int ret;
+	int size;
+	void *to, *header;
 	struct cdev *cdev;
 
-	devfs_add_partition("nand0", offset, size, DEVFS_PARTITION_FIXED, "x");
+	devfs_add_partition("nand0", offset, SZ_1M, DEVFS_PARTITION_FIXED, "x");
 	dev_add_bb_dev("x", "bbx");
 
+	header = read_image_head("bbx");
+	if (header == NULL)
+		return NULL;
+
+	size = get_image_size(header);
+	if (!size) {
+		printf("failed to get image size\n");
+		return NULL;
+	}
+
+	to = xmalloc(size);
+
 	cdev = cdev_open("bbx", O_RDONLY);
 	if (!cdev) {
 		printf("failed to open nand\n");
@@ -80,7 +129,7 @@ int run_shell(void)
 		printf("unknown boot source. Fall back to nand\n");
 	case OMAP_BOOTSRC_NAND:
 		printf("booting from NAND\n");
-		func = omap_xload_boot_nand(SZ_128K, SZ_256K);
+		func = omap_xload_boot_nand(SZ_128K);
 		break;
 	}
 
diff --git a/common/filetype.c b/common/filetype.c
index 1a5b82d..a95e4fd 100644
--- a/common/filetype.c
+++ b/common/filetype.c
@@ -25,6 +25,7 @@
 #include <fcntl.h>
 #include <fs.h>
 #include <malloc.h>
+#include "../arch/arm/include/asm/barebox-arm-head.h"
 
 static const char *filetype_str[] = {
 	[filetype_unknown] = "unknown",
@@ -57,7 +58,7 @@ enum filetype file_detect_type(void *_buf)
 
 	if (strncmp(buf8, "#!/bin/sh", 9) == 0)
 		return filetype_sh;
-	if (buf[8] == 0x65726162 && buf[9] == 0x00786f62)
+	if (is_barebox_arm_head(_buf))
 		return filetype_arm_barebox;
 	if (buf[9] == 0x016f2818 || buf[9] == 0x18286f01)
 		return filetype_arm_zimage;
-- 
1.7.0.4


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

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

* Re: [PATCH v4] xload: get barebox size from barebox_arm_head
  2012-09-05  8:22                         ` [PATCH v4] " Jan Weitzel
@ 2012-09-05 10:34                           ` Jean-Christophe PLAGNIOL-VILLARD
  2012-09-05 11:37                             ` Suspected ##SPAM## -:Re: " Jan Weitzel
  0 siblings, 1 reply; 17+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-09-05 10:34 UTC (permalink / raw)
  To: Jan Weitzel; +Cc: barebox

On 10:22 Wed 05 Sep     , Jan Weitzel wrote:
> Add functions to read the barebox_arm_head, check barebox magicword
> and read out the barebox image size.
> Create a inital partion of 1Mb to access the barebox image on nand.
> 
> Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
> ---
> v2: remove fall back if header read fail 
> v3: fix header check, rebase master 
> v4: factorize barebox detection
> 
>  arch/arm/include/asm/barebox-arm-head.h |    9 +++++
>  arch/arm/mach-omap/include/mach/xload.h |    2 +-
>  arch/arm/mach-omap/xload.c              |   57 ++++++++++++++++++++++++++++--
>  common/filetype.c                       |    3 +-
this con not work

common/filetype is use accross ARCH

is_barebox_arm_head need to be a inline returning false if not arm

Best Regards,
J.
>  4 files changed, 65 insertions(+), 6 deletions(-)
> 
> diff --git a/arch/arm/include/asm/barebox-arm-head.h b/arch/arm/include/asm/barebox-arm-head.h
> index 2c250e9..42bd239 100644
> --- a/arch/arm/include/asm/barebox-arm-head.h
> +++ b/arch/arm/include/asm/barebox-arm-head.h
> @@ -1,6 +1,15 @@
>  #ifndef __ASM_ARM_HEAD_H
>  #define __ASM_ARM_HEAD_H
>  
> +#define ARM_HEAD_SIZE		0x30
> +#define HEAD_MAGICWORD_OFFSET	0x20
> +#define HEAD_SIZE_OFFSET	0x2C
> +
> +static inline int is_barebox_arm_head(const char *head)
> +{
> +	return !strcmp(head + HEAD_MAGICWORD_OFFSET, "barebox");
> +}
> +
>  static inline void barebox_arm_head(void)
>  {
>  	__asm__ __volatile__ (
> diff --git a/arch/arm/mach-omap/include/mach/xload.h b/arch/arm/mach-omap/include/mach/xload.h
> index 844b57f..26f1b68 100644
> --- a/arch/arm/mach-omap/include/mach/xload.h
> +++ b/arch/arm/mach-omap/include/mach/xload.h
> @@ -1,7 +1,7 @@
>  #ifndef _MACH_XLOAD_H
>  #define _MACH_XLOAD_H
>  
> -void *omap_xload_boot_nand(int offset, int size);
> +void *omap_xload_boot_nand(int offset);
>  void *omap_xload_boot_mmc(void);
>  
>  enum omap_boot_src {
> diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c
> index 13024ab..5f9ca26 100644
> --- a/arch/arm/mach-omap/xload.c
> +++ b/arch/arm/mach-omap/xload.c
> @@ -7,16 +7,65 @@
>  #include <fcntl.h>
>  #include <mach/xload.h>
>  #include <sizes.h>
> +#include <asm/barebox-arm-head.h>
>  
> -void *omap_xload_boot_nand(int offset, int size)
> +void *read_image_head(const char *name)
>  {
> +	void *header = xmalloc(ARM_HEAD_SIZE);
> +	struct cdev *cdev;
>  	int ret;
> -	void *to = xmalloc(size);
> +
> +	cdev = cdev_open(name, O_RDONLY);
> +	if (!cdev) {
> +		printf("failed to open partition\n");
> +		return NULL;
> +	}
> +
> +	ret = cdev_read(cdev, header, ARM_HEAD_SIZE, 0, 0);
> +	cdev_close(cdev);
> +
> +	if (ret != ARM_HEAD_SIZE) {
> +		printf("failed to read from partition\n");
> +		return NULL;
> +	}
> +
> +	return header;
> +}
> +
> +unsigned int get_image_size(void *head)
> +{
> +	unsigned int ret = 0;
> +	unsigned int *psize = head + HEAD_SIZE_OFFSET;
> +
> +	if (is_barebox_arm_head(head))
> +		ret = *psize;
> +	debug("Detected barebox image size %u\n", ret);
> +
> +	return ret;
> +}
> +
> +void *omap_xload_boot_nand(int offset)
> +{
> +	int ret;
> +	int size;
> +	void *to, *header;
>  	struct cdev *cdev;
>  
> -	devfs_add_partition("nand0", offset, size, DEVFS_PARTITION_FIXED, "x");
> +	devfs_add_partition("nand0", offset, SZ_1M, DEVFS_PARTITION_FIXED, "x");
>  	dev_add_bb_dev("x", "bbx");
>  
> +	header = read_image_head("bbx");
> +	if (header == NULL)
> +		return NULL;
> +
> +	size = get_image_size(header);
> +	if (!size) {
> +		printf("failed to get image size\n");
> +		return NULL;
> +	}
> +
> +	to = xmalloc(size);
> +
>  	cdev = cdev_open("bbx", O_RDONLY);
>  	if (!cdev) {
>  		printf("failed to open nand\n");
> @@ -80,7 +129,7 @@ int run_shell(void)
>  		printf("unknown boot source. Fall back to nand\n");
>  	case OMAP_BOOTSRC_NAND:
>  		printf("booting from NAND\n");
> -		func = omap_xload_boot_nand(SZ_128K, SZ_256K);
> +		func = omap_xload_boot_nand(SZ_128K);
>  		break;
>  	}
>  
> diff --git a/common/filetype.c b/common/filetype.c
> index 1a5b82d..a95e4fd 100644
> --- a/common/filetype.c
> +++ b/common/filetype.c
> @@ -25,6 +25,7 @@
>  #include <fcntl.h>
>  #include <fs.h>
>  #include <malloc.h>
> +#include "../arch/arm/include/asm/barebox-arm-head.h"
>  
>  static const char *filetype_str[] = {
>  	[filetype_unknown] = "unknown",
> @@ -57,7 +58,7 @@ enum filetype file_detect_type(void *_buf)
>  
>  	if (strncmp(buf8, "#!/bin/sh", 9) == 0)
>  		return filetype_sh;
> -	if (buf[8] == 0x65726162 && buf[9] == 0x00786f62)
> +	if (is_barebox_arm_head(_buf))
>  		return filetype_arm_barebox;
>  	if (buf[9] == 0x016f2818 || buf[9] == 0x18286f01)
>  		return filetype_arm_zimage;
> -- 
> 1.7.0.4
> 

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

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

* Re: Suspected ##SPAM## -:Re: [PATCH v4] xload: get barebox size from barebox_arm_head
  2012-09-05 10:34                           ` Jean-Christophe PLAGNIOL-VILLARD
@ 2012-09-05 11:37                             ` Jan Weitzel
  2012-09-05 12:02                               ` Jean-Christophe PLAGNIOL-VILLARD
  0 siblings, 1 reply; 17+ messages in thread
From: Jan Weitzel @ 2012-09-05 11:37 UTC (permalink / raw)
  To: Jean-Christophe PLAGNIOL-VILLARD; +Cc: barebox

Am Mittwoch, den 05.09.2012, 12:34 +0200 schrieb Jean-Christophe
PLAGNIOL-VILLARD:
> On 10:22 Wed 05 Sep     , Jan Weitzel wrote:
> > Add functions to read the barebox_arm_head, check barebox magicword
> > and read out the barebox image size.
> > Create a inital partion of 1Mb to access the barebox image on nand.
> > 
> > Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
> > ---
> > v2: remove fall back if header read fail 
> > v3: fix header check, rebase master 
> > v4: factorize barebox detection
> > 
> >  arch/arm/include/asm/barebox-arm-head.h |    9 +++++
> >  arch/arm/mach-omap/include/mach/xload.h |    2 +-
> >  arch/arm/mach-omap/xload.c              |   57 ++++++++++++++++++++++++++++--
> >  common/filetype.c                       |    3 +-
> this con not work
> 
> common/filetype is use accross ARCH
> 
> is_barebox_arm_head need to be a inline returning false if not arm
this is why I use the ugly #include
"../arch/arm/include/asm/barebox-arm-head.h". By now we can detect
filetype_arm_barebox even on non arm architectures. Is breaking this OK?
Jan
> 
> Best Regards,
> J.
> >  4 files changed, 65 insertions(+), 6 deletions(-)
> > 
> > diff --git a/arch/arm/include/asm/barebox-arm-head.h b/arch/arm/include/asm/barebox-arm-head.h
> > index 2c250e9..42bd239 100644
> > --- a/arch/arm/include/asm/barebox-arm-head.h
> > +++ b/arch/arm/include/asm/barebox-arm-head.h
> > @@ -1,6 +1,15 @@
> >  #ifndef __ASM_ARM_HEAD_H
> >  #define __ASM_ARM_HEAD_H
> >  
> > +#define ARM_HEAD_SIZE		0x30
> > +#define HEAD_MAGICWORD_OFFSET	0x20
> > +#define HEAD_SIZE_OFFSET	0x2C
> > +
> > +static inline int is_barebox_arm_head(const char *head)
> > +{
> > +	return !strcmp(head + HEAD_MAGICWORD_OFFSET, "barebox");
> > +}
> > +
> >  static inline void barebox_arm_head(void)
> >  {
> >  	__asm__ __volatile__ (
> > diff --git a/arch/arm/mach-omap/include/mach/xload.h b/arch/arm/mach-omap/include/mach/xload.h
> > index 844b57f..26f1b68 100644
> > --- a/arch/arm/mach-omap/include/mach/xload.h
> > +++ b/arch/arm/mach-omap/include/mach/xload.h
> > @@ -1,7 +1,7 @@
> >  #ifndef _MACH_XLOAD_H
> >  #define _MACH_XLOAD_H
> >  
> > -void *omap_xload_boot_nand(int offset, int size);
> > +void *omap_xload_boot_nand(int offset);
> >  void *omap_xload_boot_mmc(void);
> >  
> >  enum omap_boot_src {
> > diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c
> > index 13024ab..5f9ca26 100644
> > --- a/arch/arm/mach-omap/xload.c
> > +++ b/arch/arm/mach-omap/xload.c
> > @@ -7,16 +7,65 @@
> >  #include <fcntl.h>
> >  #include <mach/xload.h>
> >  #include <sizes.h>
> > +#include <asm/barebox-arm-head.h>
> >  
> > -void *omap_xload_boot_nand(int offset, int size)
> > +void *read_image_head(const char *name)
> >  {
> > +	void *header = xmalloc(ARM_HEAD_SIZE);
> > +	struct cdev *cdev;
> >  	int ret;
> > -	void *to = xmalloc(size);
> > +
> > +	cdev = cdev_open(name, O_RDONLY);
> > +	if (!cdev) {
> > +		printf("failed to open partition\n");
> > +		return NULL;
> > +	}
> > +
> > +	ret = cdev_read(cdev, header, ARM_HEAD_SIZE, 0, 0);
> > +	cdev_close(cdev);
> > +
> > +	if (ret != ARM_HEAD_SIZE) {
> > +		printf("failed to read from partition\n");
> > +		return NULL;
> > +	}
> > +
> > +	return header;
> > +}
> > +
> > +unsigned int get_image_size(void *head)
> > +{
> > +	unsigned int ret = 0;
> > +	unsigned int *psize = head + HEAD_SIZE_OFFSET;
> > +
> > +	if (is_barebox_arm_head(head))
> > +		ret = *psize;
> > +	debug("Detected barebox image size %u\n", ret);
> > +
> > +	return ret;
> > +}
> > +
> > +void *omap_xload_boot_nand(int offset)
> > +{
> > +	int ret;
> > +	int size;
> > +	void *to, *header;
> >  	struct cdev *cdev;
> >  
> > -	devfs_add_partition("nand0", offset, size, DEVFS_PARTITION_FIXED, "x");
> > +	devfs_add_partition("nand0", offset, SZ_1M, DEVFS_PARTITION_FIXED, "x");
> >  	dev_add_bb_dev("x", "bbx");
> >  
> > +	header = read_image_head("bbx");
> > +	if (header == NULL)
> > +		return NULL;
> > +
> > +	size = get_image_size(header);
> > +	if (!size) {
> > +		printf("failed to get image size\n");
> > +		return NULL;
> > +	}
> > +
> > +	to = xmalloc(size);
> > +
> >  	cdev = cdev_open("bbx", O_RDONLY);
> >  	if (!cdev) {
> >  		printf("failed to open nand\n");
> > @@ -80,7 +129,7 @@ int run_shell(void)
> >  		printf("unknown boot source. Fall back to nand\n");
> >  	case OMAP_BOOTSRC_NAND:
> >  		printf("booting from NAND\n");
> > -		func = omap_xload_boot_nand(SZ_128K, SZ_256K);
> > +		func = omap_xload_boot_nand(SZ_128K);
> >  		break;
> >  	}
> >  
> > diff --git a/common/filetype.c b/common/filetype.c
> > index 1a5b82d..a95e4fd 100644
> > --- a/common/filetype.c
> > +++ b/common/filetype.c
> > @@ -25,6 +25,7 @@
> >  #include <fcntl.h>
> >  #include <fs.h>
> >  #include <malloc.h>
> > +#include "../arch/arm/include/asm/barebox-arm-head.h"
> >  
> >  static const char *filetype_str[] = {
> >  	[filetype_unknown] = "unknown",
> > @@ -57,7 +58,7 @@ enum filetype file_detect_type(void *_buf)
> >  
> >  	if (strncmp(buf8, "#!/bin/sh", 9) == 0)
> >  		return filetype_sh;
> > -	if (buf[8] == 0x65726162 && buf[9] == 0x00786f62)
> > +	if (is_barebox_arm_head(_buf))
> >  		return filetype_arm_barebox;
> >  	if (buf[9] == 0x016f2818 || buf[9] == 0x18286f01)
> >  		return filetype_arm_zimage;
> > -- 
> > 1.7.0.4
> > 



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

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

* Re: Suspected ##SPAM## -:Re: [PATCH v4] xload: get barebox size from barebox_arm_head
  2012-09-05 11:37                             ` Suspected ##SPAM## -:Re: " Jan Weitzel
@ 2012-09-05 12:02                               ` Jean-Christophe PLAGNIOL-VILLARD
  0 siblings, 0 replies; 17+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-09-05 12:02 UTC (permalink / raw)
  To: Jan Weitzel; +Cc: barebox

On 13:37 Wed 05 Sep     , Jan Weitzel wrote:
> Am Mittwoch, den 05.09.2012, 12:34 +0200 schrieb Jean-Christophe
> PLAGNIOL-VILLARD:
> > On 10:22 Wed 05 Sep     , Jan Weitzel wrote:
> > > Add functions to read the barebox_arm_head, check barebox magicword
> > > and read out the barebox image size.
> > > Create a inital partion of 1Mb to access the barebox image on nand.
> > > 
> > > Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>
> > > ---
> > > v2: remove fall back if header read fail 
> > > v3: fix header check, rebase master 
> > > v4: factorize barebox detection
> > > 
> > >  arch/arm/include/asm/barebox-arm-head.h |    9 +++++
> > >  arch/arm/mach-omap/include/mach/xload.h |    2 +-
> > >  arch/arm/mach-omap/xload.c              |   57 ++++++++++++++++++++++++++++--
> > >  common/filetype.c                       |    3 +-
> > this con not work
> > 
> > common/filetype is use accross ARCH
> > 
> > is_barebox_arm_head need to be a inline returning false if not arm
> this is why I use the ugly #include
> "../arch/arm/include/asm/barebox-arm-head.h". By now we can detect
> filetype_arm_barebox even on non arm architectures. Is breaking this OK?
no it's not

> Jan
> > 
> > Best Regards,
> > J.
> > >  4 files changed, 65 insertions(+), 6 deletions(-)
> > > 
> > > diff --git a/arch/arm/include/asm/barebox-arm-head.h b/arch/arm/include/asm/barebox-arm-head.h
> > > index 2c250e9..42bd239 100644
> > > --- a/arch/arm/include/asm/barebox-arm-head.h
> > > +++ b/arch/arm/include/asm/barebox-arm-head.h
> > > @@ -1,6 +1,15 @@
> > >  #ifndef __ASM_ARM_HEAD_H
> > >  #define __ASM_ARM_HEAD_H
> > >  
> > > +#define ARM_HEAD_SIZE		0x30
> > > +#define HEAD_MAGICWORD_OFFSET	0x20
> > > +#define HEAD_SIZE_OFFSET	0x2C
> > > +
> > > +static inline int is_barebox_arm_head(const char *head)
> > > +{
> > > +	return !strcmp(head + HEAD_MAGICWORD_OFFSET, "barebox");
> > > +}
put this in flietype.h

Best Regards,
J.

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

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

end of thread, other threads:[~2012-09-05 12:02 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-08-27 10:56 [RFC] xload: get barebox size from barebox_arm_head Jan Weitzel
2012-08-28  6:54 ` Sascha Hauer
2012-08-28  8:41   ` Jan Weitzel
2012-08-28  9:08     ` Sascha Hauer
2012-08-28 12:36       ` [PATCH v2] " Jan Weitzel
2012-08-29  6:59         ` Sascha Hauer
2012-08-29  8:01           ` Jan Weitzel
2012-08-29  9:10             ` [PATCH v3] " Jan Weitzel
2012-08-29 12:21               ` Jean-Christophe PLAGNIOL-VILLARD
2012-09-04  7:34                 ` Jan Weitzel
2012-09-04  9:28                   ` Sascha Hauer
2012-09-04 12:27                     ` Jan Weitzel
2012-09-04 14:41                       ` Jean-Christophe PLAGNIOL-VILLARD
2012-09-05  8:22                         ` [PATCH v4] " Jan Weitzel
2012-09-05 10:34                           ` Jean-Christophe PLAGNIOL-VILLARD
2012-09-05 11:37                             ` Suspected ##SPAM## -:Re: " Jan Weitzel
2012-09-05 12:02                               ` Jean-Christophe PLAGNIOL-VILLARD

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