From: Sascha Hauer <s.hauer@pengutronix.de>
To: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Cc: barebox@lists.infradead.org
Subject: Re: [PATCH 6/7] compressed: rename barebox target to zbarebox and zbarebox.bin
Date: Mon, 23 Jul 2012 08:35:23 +0200 [thread overview]
Message-ID: <20120723063523.GV30009@pengutronix.de> (raw)
In-Reply-To: <1343017563-27932-6-git-send-email-plagnioj@jcrosoft.com>
On Mon, Jul 23, 2012 at 06:26:02AM +0200, Jean-Christophe PLAGNIOL-VILLARD wrote:
> Today we link to whole barebox and rely on gcc to cleanup via it's garbage
> collector.
> Now we specify only what is needed and introduce a new directory with source
> only related to the compressed target.
>
> Build it in arch/<arm>/compressed
> Rebuild all the needed object.
>
> Keep the previous target untouched.
> This fix the modules support and allow custom flags for each file.
>
> Import string functions from linux 3.4 (arch/arm/boot/compressed/string.c) and
> implement a dummy panic.
This does not work on all targets having a lowlevel init:
arch/arm/compressed/start.o: In function `reset':
start.c:(.text_bare_init.text+0x28): undefined reference to `board_init_lowlevel'
Why don't we simply do this:
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 647c536..12869b3 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -150,11 +150,9 @@ TEXT_BASE = $(CONFIG_TEXT_BASE)
CPPFLAGS += -DTEXT_BASE=$(TEXT_BASE)
-ifndef CONFIG_MODULES
# Add cleanup flags
CPPFLAGS += -fdata-sections -ffunction-sections
LDFLAGS_barebox += -static --gc-sections
-endif
barebox.netx: barebox.bin
$(Q)scripts/gen_netx_image -i barebox.bin -o barebox.netx \
>
> +void barebox_decompress(uint32_t offset)
> +{
> + uint32_t compressed_start, compressed_end, len;
> + void (*uncompress)(void *compressed_start, unsigned int len);
> +
> + compressed_start = (uint32_t)&input_data - offset;
> + compressed_end = (uint32_t)&input_data_end - offset;
> + len = compressed_end - compressed_start;
> +
> + uncompress = barebox_uncompress;
> +
> + /* call barebox_uncompress with its absolute address */
> + __asm__ __volatile__(
> + "mov r0, %1\n"
> + "mov r1, %2\n"
> + "mov pc, %0\n"
> + :
> + : "r"(uncompress), "r"(compressed_start), "r"(len)
> + : "r0", "r1");
> +}
> +#else
> +void barebox_decompress(uint32_t offset) {}
> +#endif
>
> /*
> * Board code can jump here by either returning from board_init_lowlevel
> @@ -137,8 +161,6 @@ void barebox_uncompress(void *compressed_start, unsigned int len)
> void __naked __section(.text_ll_return) board_init_lowlevel_return(void)
> {
> uint32_t r, addr, offset;
> - uint32_t compressed_start, compressed_end, len;
> - void (*uncompress)(void *compressed_start, unsigned int len);
>
> /*
> * Get runtime address of this function. Do not
> @@ -169,20 +191,7 @@ void __naked __section(.text_ll_return) board_init_lowlevel_return(void)
> __asm__ __volatile__("mcr p15, 0, %0, c7, c5, 0" : : "r" (0));
>
> if (IS_ENABLED(CONFIG_IMAGE_COMPRESSION)) {
> - compressed_start = (uint32_t)&input_data - offset;
> - compressed_end = (uint32_t)&input_data_end - offset;
> - len = compressed_end - compressed_start;
> -
> - uncompress = barebox_uncompress;
> -
> - /* call barebox_uncompress with its absolute address */
> - __asm__ __volatile__(
> - "mov r0, %1\n"
> - "mov r1, %2\n"
> - "mov pc, %0\n"
> - :
> - : "r"(uncompress), "r"(compressed_start), "r"(len)
> - : "r0", "r1");
> + barebox_decompress(offset);
With this you don't call the decompressor with it's absolute address
anymore, which means that the decompressor won't run at the address it's
linked at.
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
next prev parent reply other threads:[~2012-07-23 6:35 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-23 4:20 [PATCH 0/7 V2] compressed image update Jean-Christophe PLAGNIOL-VILLARD
2012-07-23 4:25 ` [PATCH 1/7] stddev: make it selectable via Kconfig Jean-Christophe PLAGNIOL-VILLARD
2012-07-23 4:25 ` [PATCH 2/7] decompress_unlzo: define decompress_unlzo as decompress Jean-Christophe PLAGNIOL-VILLARD
2012-07-23 4:25 ` [PATCH 3/7] compressed image: factorise compressor type Jean-Christophe PLAGNIOL-VILLARD
2012-07-23 4:26 ` [PATCH 4/7] decompressor: import malloc/free implementation for linux 3.4 Jean-Christophe PLAGNIOL-VILLARD
2012-07-23 4:26 ` [PATCH 5/7] ARM: add early malloc support needed by the decompressor Jean-Christophe PLAGNIOL-VILLARD
2012-07-23 4:26 ` [PATCH 6/7] compressed: rename barebox target to zbarebox and zbarebox.bin Jean-Christophe PLAGNIOL-VILLARD
2012-07-23 6:35 ` Sascha Hauer [this message]
2012-07-23 6:41 ` Jean-Christophe PLAGNIOL-VILLARD
2012-07-23 7:16 ` Sascha Hauer
2012-07-23 8:02 ` Jean-Christophe PLAGNIOL-VILLARD
2012-07-23 8:05 ` Sascha Hauer
2012-07-23 8:18 ` Jean-Christophe PLAGNIOL-VILLARD
2012-07-23 8:22 ` Sascha Hauer
2012-07-23 9:08 ` Jean-Christophe PLAGNIOL-VILLARD
2012-07-23 9:05 ` Jean-Christophe PLAGNIOL-VILLARD
2012-07-23 4:26 ` [PATCH 7/7] compressed image: add gzip support Jean-Christophe PLAGNIOL-VILLARD
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120723063523.GV30009@pengutronix.de \
--to=s.hauer@pengutronix.de \
--cc=barebox@lists.infradead.org \
--cc=plagnioj@jcrosoft.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox