From: u.kleine-koenig@pengutronix.de (Uwe Kleine-König)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 4/5] [ARM] Auto calculate ZRELADDR and provide option for exceptions
Date: Thu, 10 Jun 2010 11:00:15 +0200 [thread overview]
Message-ID: <20100610090015.GD3422@pengutronix.de> (raw)
In-Reply-To: <1275550613-9553-5-git-send-email-eric.miao@canonical.com>
On Thu, Jun 03, 2010 at 03:36:52PM +0800, Eric Miao wrote:
> From: Eric Miao <eric.y.miao@gmail.com>
>
> Original idea and prototype came from Nicolas Pitre.
>
> As long as the zImage is placed within the 256MB range from the
> start of the memory, ZRELADDR (Address where the decompressed
> kernel will be placed, usually == PHYS_OFFSET + TEXT_OFFSET)
s/ / /
> can be determined at run-time by masking PC with 0xf000_0000.
>
> Running through all the Makefile.boot, all those zreladdr-y
> address == 0x[0-f]000_0000 + TEXT_OFFSET can be determined at
> run-time.
>
> Option CONFIG_AUTO_ZRELADDR and CONFIG_ZRELADDR are introduced,
> CONFIG_ZRELADDR _must_ be explicitly specified if:
>
> - ((zreladdr-y - TEXT_OFFSET) & ~0xf0000000) != 0, which means
> a maksing of PC with 0xf000_0000 will result an incorrect
s/maksing of/masking/ (note: there are 2 changes)
> address.
>
> - or the assumption of the zImage being loaded by the boot
> loader within 256MB from the start address is simply
> incorrect
Hmmm, this makes the image depending on the bootloader. Not that nice.
> - or when ZBOOT_ROM is used, where the above assumption is
> normally wrong
So guess based on sp :-)
> List of all Makefile.boot:
>
> Hardcoded, and can be auto calculated by masking PC with 0xf000_0000:
>
> arch/arm/mach-cns3xxx/Makefile.boot: zreladdr-y := 0x00008000
> arch/arm/mach-dove/Makefile.boot: zreladdr-y := 0x00008000
> arch/arm/mach-ebsa110/Makefile.boot: zreladdr-y := 0x00008000
> arch/arm/mach-footbridge/Makefile.boot: zreladdr-y := 0x00008000
> arch/arm/mach-integrator/Makefile.boot: zreladdr-y := 0x00008000
> arch/arm/mach-iop13xx/Makefile.boot: zreladdr-y := 0x00008000
> arch/arm/mach-iop33x/Makefile.boot: zreladdr-y := 0x00008000
> arch/arm/mach-ixp2000/Makefile.boot: zreladdr-y := 0x00008000
> arch/arm/mach-ixp23xx/Makefile.boot: zreladdr-y := 0x00008000
> arch/arm/mach-ixp4xx/Makefile.boot: zreladdr-y := 0x00008000
> arch/arm/mach-kirkwood/Makefile.boot: zreladdr-y := 0x00008000
> arch/arm/mach-ks8695/Makefile.boot: zreladdr-y := 0x00008000
> arch/arm/mach-loki/Makefile.boot: zreladdr-y := 0x00008000
> arch/arm/mach-mmp/Makefile.boot: zreladdr-y := 0x00008000
> arch/arm/mach-mv78xx0/Makefile.boot: zreladdr-y := 0x00008000
> arch/arm/mach-nomadik/Makefile.boot: zreladdr-y := 0x00008000
> arch/arm/mach-nuc93x/Makefile.boot: zreladdr-y := 0x00008000
> arch/arm/mach-ns9xxx/Makefile.boot: zreladdr-y := 0x8000
> arch/arm/mach-orion5x/Makefile.boot: zreladdr-y := 0x00008000
> arch/arm/mach-spear3xx/Makefile.boot: zreladdr-y := 0x00008000
> arch/arm/mach-spear6xx/Makefile.boot: zreladdr-y := 0x00008000
> arch/arm/mach-ux500/Makefile.boot: zreladdr-y := 0x00008000
> arch/arm/mach-versatile/Makefile.boot: zreladdr-y := 0x00008000
> arch/arm/mach-w90x900/Makefile.boot: zreladdr-y := 0x00008000
> arch/arm/mach-msm/Makefile.boot: zreladdr-y := 0x10008000
> arch/arm/mach-omap1/Makefile.boot: zreladdr-y := 0x10008000
> arch/arm/mach-rpc/Makefile.boot: zreladdr-y := 0x10008000
> arch/arm/mach-s5p6440/Makefile.boot: zreladdr-y := 0x20008000
> arch/arm/mach-s5p6442/Makefile.boot: zreladdr-y := 0x20008000
> arch/arm/mach-s5pc100/Makefile.boot: zreladdr-y := 0x20008000
> arch/arm/mach-s5pv210/Makefile.boot: zreladdr-y := 0x20008000
> arch/arm/mach-s3c2410/Makefile.boot: zreladdr-y := 0x30008000
> arch/arm/mach-s3c2410/Makefile.boot: zreladdr-y := 0x30108000
> arch/arm/mach-stmp378x/Makefile.boot: zreladdr-y := 0x40008000
> arch/arm/mach-stmp37xx/Makefile.boot: zreladdr-y := 0x40008000
> arch/arm/mach-s3c64xx/Makefile.boot: zreladdr-y := 0x50008000
> arch/arm/mach-vexpress/Makefile.boot: zreladdr-y := 0x60008000
> arch/arm/mach-mx25/Makefile.boot: zreladdr-y := 0x80008000
> arch/arm/mach-mx3/Makefile.boot: zreladdr-y := 0x80008000
> arch/arm/mach-netx/Makefile.boot: zreladdr-y := 0x80008000
> arch/arm/mach-omap2/Makefile.boot: zreladdr-y := 0x80008000
> arch/arm/mach-pnx4008/Makefile.boot: zreladdr-y := 0x80008000
> arch/arm/mach-mx5/Makefile.boot: zreladdr-y := 0x90008000
> arch/arm/mach-mxc91231/Makefile.boot: zreladdr-y := 0x90008000
> arch/arm/mach-iop32x/Makefile.boot: zreladdr-y := 0xa0008000
> arch/arm/mach-pxa/Makefile.boot: zreladdr-y := 0xa0008000
> arch/arm/mach-lh7a40x/Makefile.boot: zreladdr-y := 0xc0008000
> arch/arm/mach-clps711x/Makefile.boot: zreladdr-y := 0xc0028000
> arch/arm/mach-aaec2000/Makefile.boot: zreladdr-y := 0xf0008000
> arch/arm/mach-l7200/Makefile.boot: zreladdr-y := 0xf0008000
>
> Depends on other options/macros, but still can be auto calculated by
> masking PC with 0xf000_0000:
>
> arch/arm/mach-bcmring/Makefile.boot: zreladdr-y := $(CONFIG_BCM_ZRELADDR)
> * refer to arch/arm/configs/bcmring_defconfig:CONFIG_BCM_ZRELADDR=0x8000
> arch/arm/mach-h720x/Makefile.boot: zreladdr-$(CONFIG_ARCH_H720X) := 0x40008000
> arch/arm/mach-shmobile/Makefile.boot: zreladdr-y := $(__ZRELADDR)
> * __ZRELADDR depends on CONFIG_MEMORY_START
> arch/arm/configs/ap4evb_defconfig: CONFIG_MEMORY_START=0x40000000 (SH7372)
> arch/arm/configs/g3evm_defconfig: CONFIG_MEMORY_START=0x50000000 (SH7367)
> arch/arm/configs/g4evm_defconfig: CONFIG_MEMORY_START=0x40000000 (SH7377)
>
> arch/arm/mach-at91/Makefile.boot: zreladdr-y := 0x70008000 (CONFIG_ARCH_AT91CAP9)
> arch/arm/mach-at91/Makefile.boot: zreladdr-y := 0x70008000 (CONFIG_ARCH_AT91SAM9G45)
> arch/arm/mach-at91/Makefile.boot: zreladdr-y := 0x20008000 (CONFIG_ARCH_AT91)
> arch/arm/mach-davinci/Makefile.boot: zreladdr-y := 0xc0008000 (CONFIG_ARCH_DAVINCI_DA8XX)
> arch/arm/mach-davinci/Makefile.boot: zreladdr-y := 0x80008000 (!CONFIG_ARCH_DAVINCI_DA8XX)
> arch/arm/mach-ep93xx/Makefile.boot: zreladdr-$(CONFIG_EP93XX_SDCE3_SYNC_PHYS_OFFSET) := 0x00008000
> arch/arm/mach-ep93xx/Makefile.boot: zreladdr-$(CONFIG_EP93XX_SDCE0_PHYS_OFFSET) := 0xc0008000
> arch/arm/mach-ep93xx/Makefile.boot: zreladdr-$(CONFIG_EP93XX_SDCE1_PHYS_OFFSET) := 0xd0008000
> arch/arm/mach-ep93xx/Makefile.boot: zreladdr-$(CONFIG_EP93XX_SDCE2_PHYS_OFFSET) := 0xe0008000
> arch/arm/mach-ep93xx/Makefile.boot: zreladdr-$(CONFIG_EP93XX_SDCE3_ASYNC_PHYS_OFFSET) := 0xf0008000
> arch/arm/mach-gemini/Makefile.boot: zreladdr-y := 0x00008000 (CONFIG_GEMINI_MEM_SWAP)
> arch/arm/mach-gemini/Makefile.boot: zreladdr-y := 0x10008000 (!CONFIG_GEMINI_MEM_SWAP)
> arch/arm/mach-mx2/Makefile.boot: zreladdr-$(CONFIG_MACH_MX21) := 0xC0008000
> arch/arm/mach-mx2/Makefile.boot: zreladdr-$(CONFIG_MACH_MX27) := 0xA0008000
> arch/arm/mach-realview/Makefile.boot: zreladdr-y := 0x70008000 (CONFIG_REALVIEW_HIGH_PHYS_OFFSET)
> arch/arm/mach-realview/Makefile.boot: zreladdr-y := 0x00008000 (CONFIG_REALVIEW_HIGH_PHYS_OFFSET)
> arch/arm/mach-sa1100/Makefile.boot: zreladdr-y := 0xc0008000
> arch/arm/mach-sa1100/Makefile.boot: zreladdr-$(CONFIG_SA1111) := 0xc0208000
>
> Machines where ZRELADDR cannot be auto calcuated:
>
> arch/arm/mach-mx1/Makefile.boot: zreladdr-y := 0x08008000
> arch/arm/mach-shark/Makefile.boot: zreladdr-y := 0x08008000
> arch/arm/mach-u300/Makefile.boot: zreladdr-y := 0x28E08000
> arch/arm/mach-u300/Makefile.boot: zreladdr-y := 0x48008000
I care about mx1, so I would prefer using 0xf8000000.
What do you think about requiring r4 to be set to physoffset as I did in
my series? This way zImage would already know PHYSOFFSET and so didn't
need to guess ZRELADDR. OK, until most bootloaders are fixed we need
to guess, too. But at least this would provide a way to stop guessing
wrong for the affected platforms.
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-K?nig |
Industrial Linux Solutions | http://www.pengutronix.de/ |
next prev parent reply other threads:[~2010-06-10 9:00 UTC|newest]
Thread overview: 133+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-03 7:36 [PATCH 0/5] Makefile.boot cleanup Eric Miao
2010-06-03 7:36 ` [PATCH 1/5] [ARM] Remove unused PARAMS_PHYS from arch/arm/boot/compressed Eric Miao
2010-06-10 8:48 ` Uwe Kleine-König
2010-06-03 7:36 ` [PATCH 2/5] [ARM] Remove unused INITRD_PHYS " Eric Miao
2010-06-10 8:27 ` Uwe Kleine-König
2010-06-10 9:55 ` Eric Miao
2010-06-03 7:36 ` [PATCH 3/5] [ARM] Make TEXT_OFFSET a configurable option Eric Miao
2010-06-10 8:50 ` Uwe Kleine-König
2010-06-10 9:45 ` Eric Miao
2010-06-10 10:00 ` Uwe Kleine-König
2010-06-03 7:36 ` [PATCH 4/5] [ARM] Auto calculate ZRELADDR and provide option for exceptions Eric Miao
2010-06-07 8:51 ` Tony Lindgren
2010-06-07 15:12 ` Marek Vasut
2010-06-08 6:12 ` Eric Miao
2010-06-10 9:00 ` Uwe Kleine-König [this message]
2010-06-10 9:16 ` Russell King - ARM Linux
2010-06-10 9:35 ` Uwe Kleine-König
2010-06-10 9:38 ` Eric Miao
2010-06-10 9:43 ` Uwe Kleine-König
2010-06-10 9:47 ` Eric Miao
2010-06-10 9:18 ` Eric Miao
2010-06-10 9:58 ` Uwe Kleine-König
2010-06-10 10:20 ` Eric Miao
2010-06-10 22:06 ` Linus Walleij
2010-06-10 22:23 ` Linus Walleij
2010-06-11 1:34 ` Eric Miao
2010-06-10 18:40 ` Nicolas Pitre
2010-06-10 22:17 ` Linus Walleij
2010-06-11 6:37 ` Uwe Kleine-König
2010-06-17 19:33 ` Russell King - ARM Linux
2010-06-11 4:27 ` srinidhi
2010-09-02 21:21 ` Russell King - ARM Linux
2010-09-02 21:27 ` Russell King - ARM Linux
2010-09-03 7:48 ` Uwe Kleine-König
2010-09-03 9:55 ` Uwe Kleine-König
2010-09-03 9:56 ` [PATCH 1/7] ARM: specify ZRELADDR for ARCH_TEGRA Uwe Kleine-König
2010-09-03 17:46 ` Erik Gilling
2010-09-03 19:01 ` Uwe Kleine-König
2010-09-03 19:19 ` Erik Gilling
2010-09-03 19:23 ` Uwe Kleine-König
2010-09-08 9:11 ` Russell King - ARM Linux
2010-09-08 11:56 ` Russell King - ARM Linux
2010-09-08 12:16 ` Uwe Kleine-König
2010-09-08 22:07 ` Russell King - ARM Linux
2010-09-09 7:24 ` Uwe Kleine-König
2010-09-09 16:56 ` Erik Gilling
2010-09-03 9:56 ` [PATCH 2/7] [RFC] ARM: shmobile: remove unneeded hack to calculate zreladdr Uwe Kleine-König
2010-09-03 13:39 ` Eric Miao
2010-09-03 18:53 ` Uwe Kleine-König
2010-09-14 8:08 ` Paul Mundt
2010-09-14 12:23 ` Uwe Kleine-König
2010-09-03 9:56 ` [PATCH 3/7] ARM: specify ZRELADDR for ARCH_H720X Uwe Kleine-König
2010-09-03 13:40 ` Eric Miao
2010-09-03 9:56 ` [PATCH 4/7] ARM: specify ZRELADDR for ARCH_LPC32XX Uwe Kleine-König
2010-09-03 13:41 ` Eric Miao
2010-09-03 9:56 ` [PATCH 5/7] ARM: don't expose CONFIG_ZRELADDR to the users Uwe Kleine-König
2010-09-03 13:30 ` Eric Miao
2010-09-03 18:53 ` Uwe Kleine-König
2010-09-04 8:52 ` Eric Miao
2010-09-07 22:39 ` Mathieu Rondonneau
2010-09-08 5:04 ` Uwe Kleine-König
2010-09-03 9:56 ` [PATCH 6/7] ARM: fix ordering of defaults for config ZRELADDR Uwe Kleine-König
2010-09-03 9:56 ` [PATCH 7/7] ARM: removed unused zreladdr specifications in all Makefile.boot files Uwe Kleine-König
2010-09-03 15:01 ` Eric Miao
2010-09-03 18:48 ` [PATCH 7/7 v2] " Uwe Kleine-König
2010-09-03 20:46 ` [PATCH 4/5] [ARM] Auto calculate ZRELADDR and provide option for exceptions Uwe Kleine-König
2010-09-05 18:52 ` Uwe Kleine-König
2010-09-08 9:14 ` Russell King - ARM Linux
2010-09-08 9:11 ` Russell King - ARM Linux
2010-09-08 20:31 ` Robert Schwebel
2010-09-03 13:33 ` Eric Miao
2010-06-03 7:36 ` [PATCH 5/5] [ARM] Move inclusion of Makefile.boot into arch/arm/boot/bootp Eric Miao
2010-06-10 9:01 ` Uwe Kleine-König
2010-06-03 7:43 ` [PATCH 0/5] Makefile.boot cleanup Eric Miao
2010-06-03 8:00 ` Uwe Kleine-König
2010-06-03 8:27 ` Eric Miao
2010-06-03 7:57 ` Uwe Kleine-König
2010-06-10 18:44 ` Nicolas Pitre
2010-06-11 4:55 ` Uwe Kleine-König
2010-06-17 19:22 ` Nicolas Pitre
2010-06-18 1:31 ` Eric Miao
2010-06-18 2:30 ` Eric Miao
2010-06-10 10:24 ` [PATCH 0/10] cleanup in early boot code Uwe Kleine-König
2010-06-10 10:27 ` [PATCH 01/10] arm/zImage: don't hard code the stack size twice Uwe Kleine-König
2010-06-10 10:31 ` Eric Miao
2010-06-10 18:47 ` Nicolas Pitre
2010-06-10 10:27 ` [PATCH 02/10] arm/zImage: some comments for __armv3_mpu_cache_on Uwe Kleine-König
2010-06-10 21:36 ` Sergei Shtylyov
2010-06-16 3:16 ` Eric Miao
2010-06-16 9:19 ` Russell King - ARM Linux
2010-06-10 10:27 ` [PATCH 03/10] arm/zImage: __armv3_mpu_cache_flush: respect should-be-zero specification Uwe Kleine-König
2010-06-11 1:23 ` Eric Miao
2010-06-10 10:27 ` [PATCH 04/10] arm/zImage: fix comments for cache_on, cache_off and cache_clean_flush Uwe Kleine-König
2010-06-17 9:28 ` Eric Miao
2010-06-10 10:27 ` [PATCH 05/10] arm/zImage: annotate debug functions about corrupted registers Uwe Kleine-König
2010-06-17 9:37 ` Eric Miao
2010-06-17 9:49 ` Uwe Kleine-König
2010-06-10 10:27 ` [PATCH 06/10] arm: remove bit-rotten STANDALONE_DEBUG for decompressor Uwe Kleine-König
2010-06-17 9:50 ` Eric Miao
2010-06-10 10:27 ` [PATCH 07/10] arm/zImage: don't define unused symbol initrd_phys Uwe Kleine-König
2010-06-17 9:19 ` Eric Miao
2010-06-10 10:27 ` [PATCH 08/10] arm: deprecate support for old way to pass kernel parameters Uwe Kleine-König
2010-06-17 9:58 ` Eric Miao
2010-06-17 23:00 ` Russell King - ARM Linux
2010-06-10 10:27 ` [PATCH 09/10] arm/uImage: require passing a LOADADDR when building with RUNTIME_PHYSOFFSET Uwe Kleine-König
2010-06-10 10:27 ` [PATCH 10/10] arm: Allow PHYS_OFFSET to be runtime determined Uwe Kleine-König
2010-06-10 10:28 ` [PATCH 0/10] cleanup in early boot code Eric Miao
2010-07-05 14:13 ` [PATCH 0/5] Makefile.boot cleanup Uwe Kleine-König
2010-07-05 14:15 ` [PATCH 01/11] ARM: zImage: don't hard code the stack size twice Uwe Kleine-König
2010-07-05 14:15 ` [PATCH 02/11] ARM: zImage: some comments for __armv3_mpu_cache_on Uwe Kleine-König
2010-07-05 14:15 ` [PATCH 03/11] ARM: zImage: __armv3_mpu_cache_flush: respect should-be-zero specification Uwe Kleine-König
2010-07-05 14:15 ` [PATCH 04/11] ARM: zImage: fix comments for cache_on, cache_off and cache_clean_flush Uwe Kleine-König
2010-07-05 14:15 ` [PATCH 05/11] ARM: zImage: annotate debug functions about corrupted registers Uwe Kleine-König
2010-07-05 14:15 ` [PATCH 06/11] ARM: remove bit-rotten STANDALONE_DEBUG for decompressor Uwe Kleine-König
2010-07-05 15:36 ` Nicolas Pitre
2010-07-05 14:15 ` [PATCH 07/11] ARM: zImage: don't define unused symbol initrd_phys Uwe Kleine-König
2010-07-05 14:15 ` [PATCH 08/11] ARM: deprecate support for old way to pass kernel parameters Uwe Kleine-König
2010-07-05 14:15 ` [PATCH 09/11] ARM: uImage: require passing a LOADADDR when building with RUNTIME_PHYSOFFSET Uwe Kleine-König
2010-07-05 16:03 ` Nicolas Pitre
2010-07-05 14:15 ` [PATCH 10/11] ARM: Remove unused PARAMS_PHYS from arch/arm/boot/compressed Uwe Kleine-König
2010-07-05 14:15 ` [PATCH 11/11] Auto calculate ZRELADDR and provide option for exceptions Uwe Kleine-König
2010-07-05 15:31 ` Nicolas Pitre
2010-07-06 2:09 ` Eric Miao
2010-07-31 15:54 ` Russell King - ARM Linux
2010-07-31 17:44 ` Nicolas Pitre
2010-08-02 8:42 ` [PATCH] ARM: don't expose CONFIG_ZRELADDR to the users Uwe Kleine-König
2010-07-07 14:45 ` [PATCH 0/5] Makefile.boot cleanup Uwe Kleine-König
2010-07-07 15:54 ` Nicolas Pitre
2010-07-08 7:08 ` Uwe Kleine-König
2010-07-08 20:49 ` Nicolas Pitre
2010-07-10 9:16 ` Eric Miao
2010-07-21 8:20 ` Uwe Kleine-König
2010-07-29 16:17 ` Git pull request, was " Nicolas Pitre
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=20100610090015.GD3422@pengutronix.de \
--to=u.kleine-koenig@pengutronix.de \
--cc=linux-arm-kernel@lists.infradead.org \
/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;
as well as URLs for NNTP newsgroup(s).