mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH 1/2] kbuild: keep the barebox binary accessible
@ 2012-09-06 10:20 Jan Luebbe
  2012-09-06 10:20 ` [PATCH 2/2] Makefile: add target to produce a SPL compatible uImage Jan Luebbe
  2012-09-06 17:32 ` [PATCH 1/2] kbuild: keep the barebox binary accessible Sascha Hauer
  0 siblings, 2 replies; 8+ messages in thread
From: Jan Luebbe @ 2012-09-06 10:20 UTC (permalink / raw)
  To: barebox

When building a special image  from the original (compressed or
not) binary, to not overwrite KBUILD_BINARY.

This allows producing multiple images (such as MLO, UBL, ...)
from the (z)barebox.bin. In the case where no special image is
used, KBUILD_IMAGE is set to KBUILD_BINARY.

This patch was developed together with Sascha Hauer. Thanks!

Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
---
 Makefile          |   16 +++++++++++-----
 arch/arm/Makefile |   10 +++++-----
 2 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/Makefile b/Makefile
index c6264d3..0f1a319 100644
--- a/Makefile
+++ b/Makefile
@@ -462,12 +462,18 @@ CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
 # disable pointer signed / unsigned warnings in gcc 4.0
 CFLAGS += $(call cc-option,-Wno-pointer-sign,)
 
-# Default kernel image to build when no specific target is given.
-# KBUILD_IMAGE may be overruled on the command line or
-# set in the environment
-# Also any assignments in arch/$(ARCH)/Makefile take precedence over
-# this default value
+# KBUILD_IMAGE: Default barebox image to build
+# Depending on the architecture, this can be either compressed or not.
+# It will also include any necessary headers to be bootable.
 export KBUILD_IMAGE ?= barebox.bin
+# KBUILD_BINARY: Raw barebox binary
+# This variable is set in case the architecture prepends a header and
+# points to a binary that can be loaded directly into RAM and executed.
+export KBUILD_BINARY ?= barebox.bin
+# KBUILD_IMAGE and _BINARY may be overruled on the command line or
+# set in the environment.
+# Also any assignments in arch/$(ARCH)/Makefile take precedence over
+# the default value.
 
 barebox-flash-image: $(KBUILD_IMAGE)
 	$(call if_changed,ln)
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 8e660be..94ee073 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -179,7 +179,7 @@ barebox.netx: $(KBUILD_BINARY)
 
 ifeq ($(machine-y),netx)
 KBUILD_TARGET := barebox.netx
-KBUILD_BINARY := $(KBUILD_TARGET)
+KBUILD_IMAGE := barebox.netx
 endif
 
 barebox.s5p: $(KBUILD_BINARY)
@@ -187,7 +187,7 @@ barebox.s5p: $(KBUILD_BINARY)
 
 ifeq ($(CONFIG_ARCH_S5PCxx),y)
 KBUILD_TARGET := barebox.s5p
-KBUILD_BINARY := $(KBUILD_TARGET)
+KBUILD_IMAGE := barebox.s5p
 endif
 
 quiet_cmd_mlo ?= IFT     $@
@@ -199,7 +199,7 @@ MLO: $(KBUILD_BINARY)
 
 ifeq ($(CONFIG_OMAP_BUILD_IFT),y)
 KBUILD_TARGET := MLO
-KBUILD_BINARY := $(KBUILD_TARGET)
+KBUILD_IMAGE := MLO
 endif
 
 barebox.ubl: $(KBUILD_BINARY)
@@ -209,7 +209,7 @@ barebox.ubl: $(KBUILD_BINARY)
 
 ifeq ($(CONFIG_ARCH_DAVINCI),y)
 KBUILD_TARGET := barebox.ubl
-KBUILD_BINARY := $(KBUILD_TARGET)
+KBUILD_IMAGE := barebox.ubl
 endif
 
 pbl := arch/arm/pbl
@@ -219,7 +219,7 @@ zbarebox.S zbarebox.bin zbarebox: barebox.bin
 archclean:
 	$(MAKE) $(clean)=$(pbl)
 
-KBUILD_IMAGE := $(KBUILD_BINARY)
+KBUILD_IMAGE ?= $(KBUILD_BINARY)
 
 archprepare: maketools
 maketools:
-- 
1.7.10.4


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

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

* [PATCH 2/2] Makefile: add target to produce a SPL compatible uImage
  2012-09-06 10:20 [PATCH 1/2] kbuild: keep the barebox binary accessible Jan Luebbe
@ 2012-09-06 10:20 ` Jan Luebbe
  2012-09-06 10:32   ` Jean-Christophe PLAGNIOL-VILLARD
  2012-09-06 12:41   ` [PATCH v5] xload: get barebox size from barebox_arm_head Jan Weitzel
  2012-09-06 17:32 ` [PATCH 1/2] kbuild: keep the barebox binary accessible Sascha Hauer
  1 sibling, 2 replies; 8+ messages in thread
From: Jan Luebbe @ 2012-09-06 10:20 UTC (permalink / raw)
  To: barebox

This is mostly useful during the initial port of barebox to a new
board which is supported by u-boot. It also allows starting barebox
from a SRAM-based u-boot SPL.

A different load address can be set like this:
make barebox.uimage UIMAGE_BASE=0x80000000

This patch was developed together with Sascha Hauer. Thanks!

Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
---
 Makefile |   16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/Makefile b/Makefile
index 0f1a319..9381e77 100644
--- a/Makefile
+++ b/Makefile
@@ -686,6 +686,22 @@ ifndef CONFIG_PBL_IMAGE
 	$(call cmd,check_file_size,$(CONFIG_BAREBOX_MAX_IMAGE_SIZE))
 endif
 
+# By default the uImage load address is 2MB below CONFIG_TEXT_BASE,
+# leaving space for the compressed PBL image at 1MB below CONFIG_TEXT_BASE.
+UIMAGE_BASE ?= $(shell printf "0x%08x" $$(($(CONFIG_TEXT_BASE) - 0x200000)))
+
+# For development provide a target which makes barebox loadable by an
+# unmodified u-boot
+quiet_cmd_barebox_mkimage = MKIMAGE $@
+      cmd_barebox_mkimage = $(srctree)/scripts/mkimage -A $(ARCH) -T firmware -C none \
+       -O barebox -a $(UIMAGE_BASE) -e $(UIMAGE_BASE) \
+       -n "barebox $(KERNELRELEASE)" -d $< $@
+
+# barebox.uimage is build from the raw barebox binary, without any other
+# headers.
+barebox.uimage: $(KBUILD_BINARY) FORCE
+	$(call if_changed,barebox_mkimage)
+
 ifdef CONFIG_X86
 barebox.S: barebox
 ifdef CONFIG_X86_HDBOOT
-- 
1.7.10.4


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

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

* Re: [PATCH 2/2] Makefile: add target to produce a SPL compatible uImage
  2012-09-06 10:20 ` [PATCH 2/2] Makefile: add target to produce a SPL compatible uImage Jan Luebbe
@ 2012-09-06 10:32   ` Jean-Christophe PLAGNIOL-VILLARD
  2012-09-06 12:41   ` [PATCH v5] xload: get barebox size from barebox_arm_head Jan Weitzel
  1 sibling, 0 replies; 8+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-09-06 10:32 UTC (permalink / raw)
  To: Jan Luebbe; +Cc: barebox

On 12:20 Thu 06 Sep     , Jan Luebbe wrote:
> This is mostly useful during the initial port of barebox to a new
> board which is supported by u-boot. It also allows starting barebox
> from a SRAM-based u-boot SPL.
> 
> A different load address can be set like this:
> make barebox.uimage UIMAGE_BASE=0x80000000
> 
> This patch was developed together with Sascha Hauer. Thanks!
> 
> Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
> ---
>  Makefile |   16 ++++++++++++++++
missing gitignore and clean

Best Regards,
J.

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

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

* [PATCH v5] xload: get barebox size from barebox_arm_head
  2012-09-06 10:20 ` [PATCH 2/2] Makefile: add target to produce a SPL compatible uImage Jan Luebbe
  2012-09-06 10:32   ` Jean-Christophe PLAGNIOL-VILLARD
@ 2012-09-06 12:41   ` Jan Weitzel
  2012-09-06 13:23     ` Jean-Christophe PLAGNIOL-VILLARD
                       ` (2 more replies)
  1 sibling, 3 replies; 8+ messages in thread
From: Jan Weitzel @ 2012-09-06 12:41 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
v5: mv devines to include/filetype.h

 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                       |    2 +-
 include/filetype.h                      |   16 +++++++++
 4 files changed, 71 insertions(+), 6 deletions(-)

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..0afeea9 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 <filetype.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 + ARM_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 e736d43..6306fdc 100644
--- a/common/filetype.c
+++ b/common/filetype.c
@@ -75,7 +75,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;
diff --git a/include/filetype.h b/include/filetype.h
index 179ec0f..6ac1c1c 100644
--- a/include/filetype.h
+++ b/include/filetype.h
@@ -25,4 +25,20 @@ const char *file_type_to_string(enum filetype f);
 enum filetype file_detect_type(void *_buf);
 enum filetype file_name_detect_type(const char *filename);
 
+#define ARM_HEAD_SIZE			0x30
+#define ARM_HEAD_MAGICWORD_OFFSET	0x20
+#define ARM_HEAD_SIZE_OFFSET		0x2C
+
+#ifdef CONFIG_ARM
+static inline int is_barebox_arm_head(const char *head)
+{
+	return !strcmp(head + ARM_HEAD_MAGICWORD_OFFSET, "barebox");
+}
+#else
+static inline int is_barebox_arm_head(const char *head)
+{
+	return 0
+}
+#endif
+
 #endif /* __FILE_TYPE_H */
-- 
1.7.0.4


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

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

* Re: [PATCH v5] xload: get barebox size from barebox_arm_head
  2012-09-06 12:41   ` [PATCH v5] xload: get barebox size from barebox_arm_head Jan Weitzel
@ 2012-09-06 13:23     ` Jean-Christophe PLAGNIOL-VILLARD
  2012-09-06 17:39     ` Sascha Hauer
  2012-09-07 10:25     ` Sascha Hauer
  2 siblings, 0 replies; 8+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-09-06 13:23 UTC (permalink / raw)
  To: Jan Weitzel; +Cc: barebox

On 14:41 Thu 06 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
> v5: mv devines to include/filetype.h
> 
>  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                       |    2 +-
>  include/filetype.h                      |   16 +++++++++
>  4 files changed, 71 insertions(+), 6 deletions(-)
> 
> 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..0afeea9 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 <filetype.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 + ARM_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");
I'd map 8M so can boot a kernel directly too

Best Regards,
J.

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

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

* Re: [PATCH 1/2] kbuild: keep the barebox binary accessible
  2012-09-06 10:20 [PATCH 1/2] kbuild: keep the barebox binary accessible Jan Luebbe
  2012-09-06 10:20 ` [PATCH 2/2] Makefile: add target to produce a SPL compatible uImage Jan Luebbe
@ 2012-09-06 17:32 ` Sascha Hauer
  1 sibling, 0 replies; 8+ messages in thread
From: Sascha Hauer @ 2012-09-06 17:32 UTC (permalink / raw)
  To: Jan Luebbe; +Cc: barebox

On Thu, Sep 06, 2012 at 12:20:15PM +0200, Jan Luebbe wrote:
> When building a special image  from the original (compressed or
> not) binary, to not overwrite KBUILD_BINARY.
> 
> This allows producing multiple images (such as MLO, UBL, ...)
> from the (z)barebox.bin. In the case where no special image is
> used, KBUILD_IMAGE is set to KBUILD_BINARY.
> 
> This patch was developed together with Sascha Hauer. Thanks!
> 
> Signed-off-by: Jan Luebbe <jlu@pengutronix.de>

Applied (only this one for now), thanks

Sascha

> ---
>  Makefile          |   16 +++++++++++-----
>  arch/arm/Makefile |   10 +++++-----
>  2 files changed, 16 insertions(+), 10 deletions(-)
> 
> diff --git a/Makefile b/Makefile
> index c6264d3..0f1a319 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -462,12 +462,18 @@ CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
>  # disable pointer signed / unsigned warnings in gcc 4.0
>  CFLAGS += $(call cc-option,-Wno-pointer-sign,)
>  
> -# Default kernel image to build when no specific target is given.
> -# KBUILD_IMAGE may be overruled on the command line or
> -# set in the environment
> -# Also any assignments in arch/$(ARCH)/Makefile take precedence over
> -# this default value
> +# KBUILD_IMAGE: Default barebox image to build
> +# Depending on the architecture, this can be either compressed or not.
> +# It will also include any necessary headers to be bootable.
>  export KBUILD_IMAGE ?= barebox.bin
> +# KBUILD_BINARY: Raw barebox binary
> +# This variable is set in case the architecture prepends a header and
> +# points to a binary that can be loaded directly into RAM and executed.
> +export KBUILD_BINARY ?= barebox.bin
> +# KBUILD_IMAGE and _BINARY may be overruled on the command line or
> +# set in the environment.
> +# Also any assignments in arch/$(ARCH)/Makefile take precedence over
> +# the default value.
>  
>  barebox-flash-image: $(KBUILD_IMAGE)
>  	$(call if_changed,ln)
> diff --git a/arch/arm/Makefile b/arch/arm/Makefile
> index 8e660be..94ee073 100644
> --- a/arch/arm/Makefile
> +++ b/arch/arm/Makefile
> @@ -179,7 +179,7 @@ barebox.netx: $(KBUILD_BINARY)
>  
>  ifeq ($(machine-y),netx)
>  KBUILD_TARGET := barebox.netx
> -KBUILD_BINARY := $(KBUILD_TARGET)
> +KBUILD_IMAGE := barebox.netx
>  endif
>  
>  barebox.s5p: $(KBUILD_BINARY)
> @@ -187,7 +187,7 @@ barebox.s5p: $(KBUILD_BINARY)
>  
>  ifeq ($(CONFIG_ARCH_S5PCxx),y)
>  KBUILD_TARGET := barebox.s5p
> -KBUILD_BINARY := $(KBUILD_TARGET)
> +KBUILD_IMAGE := barebox.s5p
>  endif
>  
>  quiet_cmd_mlo ?= IFT     $@
> @@ -199,7 +199,7 @@ MLO: $(KBUILD_BINARY)
>  
>  ifeq ($(CONFIG_OMAP_BUILD_IFT),y)
>  KBUILD_TARGET := MLO
> -KBUILD_BINARY := $(KBUILD_TARGET)
> +KBUILD_IMAGE := MLO
>  endif
>  
>  barebox.ubl: $(KBUILD_BINARY)
> @@ -209,7 +209,7 @@ barebox.ubl: $(KBUILD_BINARY)
>  
>  ifeq ($(CONFIG_ARCH_DAVINCI),y)
>  KBUILD_TARGET := barebox.ubl
> -KBUILD_BINARY := $(KBUILD_TARGET)
> +KBUILD_IMAGE := barebox.ubl
>  endif
>  
>  pbl := arch/arm/pbl
> @@ -219,7 +219,7 @@ zbarebox.S zbarebox.bin zbarebox: barebox.bin
>  archclean:
>  	$(MAKE) $(clean)=$(pbl)
>  
> -KBUILD_IMAGE := $(KBUILD_BINARY)
> +KBUILD_IMAGE ?= $(KBUILD_BINARY)
>  
>  archprepare: maketools
>  maketools:
> -- 
> 1.7.10.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] 8+ messages in thread

* Re: [PATCH v5] xload: get barebox size from barebox_arm_head
  2012-09-06 12:41   ` [PATCH v5] xload: get barebox size from barebox_arm_head Jan Weitzel
  2012-09-06 13:23     ` Jean-Christophe PLAGNIOL-VILLARD
@ 2012-09-06 17:39     ` Sascha Hauer
  2012-09-07 10:25     ` Sascha Hauer
  2 siblings, 0 replies; 8+ messages in thread
From: Sascha Hauer @ 2012-09-06 17:39 UTC (permalink / raw)
  To: Jan Weitzel; +Cc: barebox

On Thu, Sep 06, 2012 at 02:41:11PM +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.
> 
> Signed-off-by: Jan Weitzel <j.weitzel@phytec.de>

Applied, thanks.

The current code explicitely checks for a barebox image, so no need to
increase the partition size. If someone wants to boot the kernel
directly here there's more work to do anyway.

Sascha


> ---
> v2: remove fall back if header read fail 
> v3: fix header check, rebase master 
> v4: factorize barebox detection
> v5: mv devines to include/filetype.h
> 
>  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                       |    2 +-
>  include/filetype.h                      |   16 +++++++++
>  4 files changed, 71 insertions(+), 6 deletions(-)
> 
> 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..0afeea9 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 <filetype.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 + ARM_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 e736d43..6306fdc 100644
> --- a/common/filetype.c
> +++ b/common/filetype.c
> @@ -75,7 +75,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;
> diff --git a/include/filetype.h b/include/filetype.h
> index 179ec0f..6ac1c1c 100644
> --- a/include/filetype.h
> +++ b/include/filetype.h
> @@ -25,4 +25,20 @@ const char *file_type_to_string(enum filetype f);
>  enum filetype file_detect_type(void *_buf);
>  enum filetype file_name_detect_type(const char *filename);
>  
> +#define ARM_HEAD_SIZE			0x30
> +#define ARM_HEAD_MAGICWORD_OFFSET	0x20
> +#define ARM_HEAD_SIZE_OFFSET		0x2C
> +
> +#ifdef CONFIG_ARM
> +static inline int is_barebox_arm_head(const char *head)
> +{
> +	return !strcmp(head + ARM_HEAD_MAGICWORD_OFFSET, "barebox");
> +}
> +#else
> +static inline int is_barebox_arm_head(const char *head)
> +{
> +	return 0
> +}
> +#endif
> +
>  #endif /* __FILE_TYPE_H */
> -- 
> 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] 8+ messages in thread

* Re: [PATCH v5] xload: get barebox size from barebox_arm_head
  2012-09-06 12:41   ` [PATCH v5] xload: get barebox size from barebox_arm_head Jan Weitzel
  2012-09-06 13:23     ` Jean-Christophe PLAGNIOL-VILLARD
  2012-09-06 17:39     ` Sascha Hauer
@ 2012-09-07 10:25     ` Sascha Hauer
  2 siblings, 0 replies; 8+ messages in thread
From: Sascha Hauer @ 2012-09-07 10:25 UTC (permalink / raw)
  To: Jan Weitzel; +Cc: barebox

On Thu, Sep 06, 2012 at 02:41:11PM +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.
> 
> 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
> v5: mv devines to include/filetype.h
> 
>  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                       |    2 +-
>  include/filetype.h                      |   16 +++++++++
>  4 files changed, 71 insertions(+), 6 deletions(-)
> 
> 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..0afeea9 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 <filetype.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 + ARM_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 e736d43..6306fdc 100644
> --- a/common/filetype.c
> +++ b/common/filetype.c
> @@ -75,7 +75,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;
> diff --git a/include/filetype.h b/include/filetype.h
> index 179ec0f..6ac1c1c 100644
> --- a/include/filetype.h
> +++ b/include/filetype.h
> @@ -25,4 +25,20 @@ const char *file_type_to_string(enum filetype f);
>  enum filetype file_detect_type(void *_buf);
>  enum filetype file_name_detect_type(const char *filename);
>  
> +#define ARM_HEAD_SIZE			0x30
> +#define ARM_HEAD_MAGICWORD_OFFSET	0x20
> +#define ARM_HEAD_SIZE_OFFSET		0x2C
> +
> +#ifdef CONFIG_ARM
> +static inline int is_barebox_arm_head(const char *head)
> +{
> +	return !strcmp(head + ARM_HEAD_MAGICWORD_OFFSET, "barebox");
> +}
> +#else
> +static inline int is_barebox_arm_head(const char *head)
> +{
> +	return 0
> +}

Added the missing semicolon here to fix compilation on !ARM.

Sascha

> +#endif
> +
>  #endif /* __FILE_TYPE_H */
> -- 
> 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] 8+ messages in thread

end of thread, other threads:[~2012-09-07 10:25 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-09-06 10:20 [PATCH 1/2] kbuild: keep the barebox binary accessible Jan Luebbe
2012-09-06 10:20 ` [PATCH 2/2] Makefile: add target to produce a SPL compatible uImage Jan Luebbe
2012-09-06 10:32   ` Jean-Christophe PLAGNIOL-VILLARD
2012-09-06 12:41   ` [PATCH v5] xload: get barebox size from barebox_arm_head Jan Weitzel
2012-09-06 13:23     ` Jean-Christophe PLAGNIOL-VILLARD
2012-09-06 17:39     ` Sascha Hauer
2012-09-07 10:25     ` Sascha Hauer
2012-09-06 17:32 ` [PATCH 1/2] kbuild: keep the barebox binary accessible Sascha Hauer

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