* [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