* defining ZRELADDR as PHYS_OFFSET + TEXT_OFFSET @ 2010-01-27 10:12 Uwe Kleine-König 2010-01-28 0:15 ` Russell King - ARM Linux 0 siblings, 1 reply; 7+ messages in thread From: Uwe Kleine-König @ 2010-01-27 10:12 UTC (permalink / raw) To: linux-arm-kernel Hello, currently all platforms need to define zreladdr-y in arch/arm/mach-$mach/Makefile.boot and PHYS_OFFSET (in arch/arm/mach-$mach/include/mach/memory.h). Constraints for these are: TEXTADDR = PAGE_OFFSET + TEXT_OFFSET __virt_to_phys(virt) = virt - PAGE_OFFSET + PHYS_OFFSET (at least for "small" virtual addresses) ZRELADDR = __virt_to_phys(TEXTADDR) (The equallity for __virt_to_phys only holds "normaly" according to http://lists.arm.linux.org.uk/lurker/message/20010723.185051.94ce743c.en.html. In practice it holds for addresses of the first bank of RAM which is enough for the purposes of this mail.) So we can deduce ZRELADDR = PHYS_OFFSET + TEXT_OFFSET. Is there something I missed or is it possible to get rid of zreladdr-y in .../Makefile.boot and define it according to the equation above? Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-K?nig | Industrial Linux Solutions | http://www.pengutronix.de/ | ^ permalink raw reply [flat|nested] 7+ messages in thread
* defining ZRELADDR as PHYS_OFFSET + TEXT_OFFSET 2010-01-27 10:12 defining ZRELADDR as PHYS_OFFSET + TEXT_OFFSET Uwe Kleine-König @ 2010-01-28 0:15 ` Russell King - ARM Linux 2010-02-01 1:24 ` George G. Davis 0 siblings, 1 reply; 7+ messages in thread From: Russell King - ARM Linux @ 2010-01-28 0:15 UTC (permalink / raw) To: linux-arm-kernel On Wed, Jan 27, 2010 at 11:12:28AM +0100, Uwe Kleine-K?nig wrote: > Hello, > > currently all platforms need to define zreladdr-y in > arch/arm/mach-$mach/Makefile.boot and PHYS_OFFSET (in > arch/arm/mach-$mach/include/mach/memory.h). > > Constraints for these are: > > TEXTADDR = PAGE_OFFSET + TEXT_OFFSET > __virt_to_phys(virt) = virt - PAGE_OFFSET + PHYS_OFFSET (at least for > "small" virtual addresses) > ZRELADDR = __virt_to_phys(TEXTADDR) > > (The equallity for __virt_to_phys only holds "normaly" according to > http://lists.arm.linux.org.uk/lurker/message/20010723.185051.94ce743c.en.html. > In practice it holds for addresses of the first bank of RAM which is > enough for the purposes of this mail.) > > So we can deduce ZRELADDR = PHYS_OFFSET + TEXT_OFFSET. > > Is there something I missed or is it possible to get rid of zreladdr-y > in .../Makefile.boot and define it according to the equation above? You'd need to find some way to get PHYS_OFFSET out of the C code into the makefile. With all sorts of stuff going on in various platforms memory.h files, that doesn't look simple. ^ permalink raw reply [flat|nested] 7+ messages in thread
* defining ZRELADDR as PHYS_OFFSET + TEXT_OFFSET 2010-01-28 0:15 ` Russell King - ARM Linux @ 2010-02-01 1:24 ` George G. Davis 2010-02-01 8:49 ` Uwe Kleine-König 0 siblings, 1 reply; 7+ messages in thread From: George G. Davis @ 2010-02-01 1:24 UTC (permalink / raw) To: linux-arm-kernel Hi, On Thu, Jan 28, 2010 at 12:15:23AM +0000, Russell King - ARM Linux wrote: > On Wed, Jan 27, 2010 at 11:12:28AM +0100, Uwe Kleine-K?nig wrote: > > Hello, > > > > currently all platforms need to define zreladdr-y in > > arch/arm/mach-$mach/Makefile.boot and PHYS_OFFSET (in > > arch/arm/mach-$mach/include/mach/memory.h). > > > > Constraints for these are: > > > > TEXTADDR = PAGE_OFFSET + TEXT_OFFSET > > __virt_to_phys(virt) = virt - PAGE_OFFSET + PHYS_OFFSET (at least for > > "small" virtual addresses) > > ZRELADDR = __virt_to_phys(TEXTADDR) > > > > (The equallity for __virt_to_phys only holds "normaly" according to > > http://lists.arm.linux.org.uk/lurker/message/20010723.185051.94ce743c.en.html. > > In practice it holds for addresses of the first bank of RAM which is > > enough for the purposes of this mail.) > > > > So we can deduce ZRELADDR = PHYS_OFFSET + TEXT_OFFSET. > > > > Is there something I missed or is it possible to get rid of zreladdr-y > > in .../Makefile.boot and define it according to the equation above? > > You'd need to find some way to get PHYS_OFFSET out of the C code > into the makefile. With all sorts of stuff going on in various > platforms memory.h files, that doesn't look simple. How about this?: diff --git a/arch/arm/boot/Makefile b/arch/arm/boot/Makefile index 4a590f4..b79050e 100644 --- a/arch/arm/boot/Makefile +++ b/arch/arm/boot/Makefile @@ -21,7 +21,7 @@ endif # ZRELADDR == virt_to_phys(PAGE_OFFSET + TEXT_OFFSET) # PARAMS_PHYS must be within 4MB of ZRELADDR # INITRD_PHYS must be in RAM -ZRELADDR := $(zreladdr-y) +ZRELADDR := $(shell printf "0x%08x" $$[`echo PHYS_OFFSET + $(TEXT_OFFSET) | $(CPP) $(CPP_FLAGS) -D__ASSEMBLY__ -xc -include arch/arm/include/asm/memory.h - | tail -n 1`]) PARAMS_PHYS := $(params_phys-y) INITRD_PHYS := $(initrd_phys-y) Since params_phys-y is (always?) constant relative to zreladdr-y, it can also be calculated in a similar fashion, e.g. PARAMS_PHYS := $(shell printf "0x%08x" $$[$(ZRELADDR) - 0x7f00]) -- Regards, George ^ permalink raw reply related [flat|nested] 7+ messages in thread
* defining ZRELADDR as PHYS_OFFSET + TEXT_OFFSET 2010-02-01 1:24 ` George G. Davis @ 2010-02-01 8:49 ` Uwe Kleine-König 2010-02-05 8:26 ` George G. Davis 0 siblings, 1 reply; 7+ messages in thread From: Uwe Kleine-König @ 2010-02-01 8:49 UTC (permalink / raw) To: linux-arm-kernel Hallo George, On Sun, Jan 31, 2010 at 08:24:25PM -0500, George G. Davis wrote: > On Thu, Jan 28, 2010 at 12:15:23AM +0000, Russell King - ARM Linux wrote: > > On Wed, Jan 27, 2010 at 11:12:28AM +0100, Uwe Kleine-K?nig wrote: > > > Hello, > > > > > > currently all platforms need to define zreladdr-y in > > > arch/arm/mach-$mach/Makefile.boot and PHYS_OFFSET (in > > > arch/arm/mach-$mach/include/mach/memory.h). > > > > > > Constraints for these are: > > > > > > TEXTADDR = PAGE_OFFSET + TEXT_OFFSET > > > __virt_to_phys(virt) = virt - PAGE_OFFSET + PHYS_OFFSET (at least for > > > "small" virtual addresses) > > > ZRELADDR = __virt_to_phys(TEXTADDR) > > > > > > (The equallity for __virt_to_phys only holds "normaly" according to > > > http://lists.arm.linux.org.uk/lurker/message/20010723.185051.94ce743c.en.html. > > > In practice it holds for addresses of the first bank of RAM which is > > > enough for the purposes of this mail.) > > > > > > So we can deduce ZRELADDR = PHYS_OFFSET + TEXT_OFFSET. > > > > > > Is there something I missed or is it possible to get rid of zreladdr-y > > > in .../Makefile.boot and define it according to the equation above? > > > > You'd need to find some way to get PHYS_OFFSET out of the C code > > into the makefile. With all sorts of stuff going on in various > > platforms memory.h files, that doesn't look simple. > > How about this?: > > diff --git a/arch/arm/boot/Makefile b/arch/arm/boot/Makefile > index 4a590f4..b79050e 100644 > --- a/arch/arm/boot/Makefile > +++ b/arch/arm/boot/Makefile > @@ -21,7 +21,7 @@ endif > # ZRELADDR == virt_to_phys(PAGE_OFFSET + TEXT_OFFSET) > # PARAMS_PHYS must be within 4MB of ZRELADDR > # INITRD_PHYS must be in RAM > -ZRELADDR := $(zreladdr-y) > +ZRELADDR := $(shell printf "0x%08x" $$[`echo PHYS_OFFSET + $(TEXT_OFFSET) | $(CPP) $(CPP_FLAGS) -D__ASSEMBLY__ -xc -include arch/arm/include/asm/memory.h - | tail -n 1`]) > PARAMS_PHYS := $(params_phys-y) > INITRD_PHYS := $(initrd_phys-y) hui! Is this really robust? > Since params_phys-y is (always?) constant relative to zreladdr-y, it can > also be calculated in a similar fashion, e.g. > > PARAMS_PHYS := $(shell printf "0x%08x" $$[$(ZRELADDR) - 0x7f00]) This isn't necessarily true I think. And I'd prefer getting rid of PARAMS_PHYS. This is only used for bootp and maybe if the bootloader doesn't pass r2 properly. Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-K?nig | Industrial Linux Solutions | http://www.pengutronix.de/ | ^ permalink raw reply [flat|nested] 7+ messages in thread
* defining ZRELADDR as PHYS_OFFSET + TEXT_OFFSET 2010-02-01 8:49 ` Uwe Kleine-König @ 2010-02-05 8:26 ` George G. Davis 2010-02-05 9:10 ` Uwe Kleine-König 0 siblings, 1 reply; 7+ messages in thread From: George G. Davis @ 2010-02-05 8:26 UTC (permalink / raw) To: linux-arm-kernel Hi, On Mon, Feb 01, 2010 at 09:49:07AM +0100, Uwe Kleine-K?nig wrote: > Hallo George, > > On Sun, Jan 31, 2010 at 08:24:25PM -0500, George G. Davis wrote: > > On Thu, Jan 28, 2010 at 12:15:23AM +0000, Russell King - ARM Linux wrote: > > > On Wed, Jan 27, 2010 at 11:12:28AM +0100, Uwe Kleine-K?nig wrote: > > > > Hello, > > > > > > > > currently all platforms need to define zreladdr-y in > > > > arch/arm/mach-$mach/Makefile.boot and PHYS_OFFSET (in > > > > arch/arm/mach-$mach/include/mach/memory.h). > > > > > > > > Constraints for these are: > > > > > > > > TEXTADDR = PAGE_OFFSET + TEXT_OFFSET > > > > __virt_to_phys(virt) = virt - PAGE_OFFSET + PHYS_OFFSET (at least for > > > > "small" virtual addresses) > > > > ZRELADDR = __virt_to_phys(TEXTADDR) > > > > > > > > (The equallity for __virt_to_phys only holds "normaly" according to > > > > http://lists.arm.linux.org.uk/lurker/message/20010723.185051.94ce743c.en.html. > > > > In practice it holds for addresses of the first bank of RAM which is > > > > enough for the purposes of this mail.) > > > > > > > > So we can deduce ZRELADDR = PHYS_OFFSET + TEXT_OFFSET. > > > > > > > > Is there something I missed or is it possible to get rid of zreladdr-y > > > > in .../Makefile.boot and define it according to the equation above? > > > > > > You'd need to find some way to get PHYS_OFFSET out of the C code > > > into the makefile. With all sorts of stuff going on in various > > > platforms memory.h files, that doesn't look simple. > > > > How about this?: > > > > diff --git a/arch/arm/boot/Makefile b/arch/arm/boot/Makefile > > index 4a590f4..b79050e 100644 > > --- a/arch/arm/boot/Makefile > > +++ b/arch/arm/boot/Makefile > > @@ -21,7 +21,7 @@ endif > > # ZRELADDR == virt_to_phys(PAGE_OFFSET + TEXT_OFFSET) > > # PARAMS_PHYS must be within 4MB of ZRELADDR > > # INITRD_PHYS must be in RAM > > -ZRELADDR := $(zreladdr-y) > > +ZRELADDR := $(shell printf "0x%08x" $$[`echo PHYS_OFFSET + $(TEXT_OFFSET) | $(CPP) $(CPP_FLAGS) -D__ASSEMBLY__ -xc -include arch/arm/include/asm/memory.h - | tail -n 1`]) > > PARAMS_PHYS := $(params_phys-y) > > INITRD_PHYS := $(initrd_phys-y) > hui! Is this really robust? Apologies for the delay, busy... It can be but it is admittedly rather tricky to get the syntax right. I've no idea how the above worked the first time I tried but it didn't upon further inspection. I came up with this variation on the theme: ZRELADDR = $(shell $(CONFIG_SHELL) -c 'printf "0x%08x" $$[`echo PHYS_OFFSET + $(TEXT_OFFSET) | $(CPP) $(cpp_flags) -D__ASSEMBLY__ -xc -imacros asm/memory.h - 2>/dev/null | tail -1`]') This version seems to work for a number of zImage test builds I did. Alas, it is rather tricky to get the syntax right for all uses, e.g. I think uImage is still broken. > > > Since params_phys-y is (always?) constant relative to zreladdr-y, it can > > also be calculated in a similar fashion, e.g. > > > > PARAMS_PHYS := $(shell printf "0x%08x" $$[$(ZRELADDR) - 0x7f00]) > This isn't necessarily true I think. And I'd prefer getting rid of > PARAMS_PHYS. This is only used for bootp and maybe if the bootloader > doesn't pass r2 properly. If the bootloader is passing params pointer, then sure, disregard. Thanks! -- Regards, George > > Best regards > Uwe > > -- > Pengutronix e.K. | Uwe Kleine-K?nig | > Industrial Linux Solutions | http://www.pengutronix.de/ | ^ permalink raw reply [flat|nested] 7+ messages in thread
* defining ZRELADDR as PHYS_OFFSET + TEXT_OFFSET 2010-02-05 8:26 ` George G. Davis @ 2010-02-05 9:10 ` Uwe Kleine-König 2010-02-05 14:14 ` George G. Davis 0 siblings, 1 reply; 7+ messages in thread From: Uwe Kleine-König @ 2010-02-05 9:10 UTC (permalink / raw) To: linux-arm-kernel Hello, On Fri, Feb 05, 2010 at 03:26:52AM -0500, George G. Davis wrote: > Hi, > > On Mon, Feb 01, 2010 at 09:49:07AM +0100, Uwe Kleine-K?nig wrote: > > Hallo George, > > > > On Sun, Jan 31, 2010 at 08:24:25PM -0500, George G. Davis wrote: > > > On Thu, Jan 28, 2010 at 12:15:23AM +0000, Russell King - ARM Linux wrote: > > > > On Wed, Jan 27, 2010 at 11:12:28AM +0100, Uwe Kleine-K?nig wrote: > > > > > Hello, > > > > > > > > > > currently all platforms need to define zreladdr-y in > > > > > arch/arm/mach-$mach/Makefile.boot and PHYS_OFFSET (in > > > > > arch/arm/mach-$mach/include/mach/memory.h). > > > > > > > > > > Constraints for these are: > > > > > > > > > > TEXTADDR = PAGE_OFFSET + TEXT_OFFSET > > > > > __virt_to_phys(virt) = virt - PAGE_OFFSET + PHYS_OFFSET (at least for > > > > > "small" virtual addresses) > > > > > ZRELADDR = __virt_to_phys(TEXTADDR) > > > > > > > > > > (The equallity for __virt_to_phys only holds "normaly" according to > > > > > http://lists.arm.linux.org.uk/lurker/message/20010723.185051.94ce743c.en.html. > > > > > In practice it holds for addresses of the first bank of RAM which is > > > > > enough for the purposes of this mail.) > > > > > > > > > > So we can deduce ZRELADDR = PHYS_OFFSET + TEXT_OFFSET. > > > > > > > > > > Is there something I missed or is it possible to get rid of zreladdr-y > > > > > in .../Makefile.boot and define it according to the equation above? > > > > > > > > You'd need to find some way to get PHYS_OFFSET out of the C code > > > > into the makefile. With all sorts of stuff going on in various > > > > platforms memory.h files, that doesn't look simple. > > > > > > How about this?: > > > > > > diff --git a/arch/arm/boot/Makefile b/arch/arm/boot/Makefile > > > index 4a590f4..b79050e 100644 > > > --- a/arch/arm/boot/Makefile > > > +++ b/arch/arm/boot/Makefile > > > @@ -21,7 +21,7 @@ endif > > > # ZRELADDR == virt_to_phys(PAGE_OFFSET + TEXT_OFFSET) > > > # PARAMS_PHYS must be within 4MB of ZRELADDR > > > # INITRD_PHYS must be in RAM > > > -ZRELADDR := $(zreladdr-y) > > > +ZRELADDR := $(shell printf "0x%08x" $$[`echo PHYS_OFFSET + $(TEXT_OFFSET) | $(CPP) $(CPP_FLAGS) -D__ASSEMBLY__ -xc -include arch/arm/include/asm/memory.h - | tail -n 1`]) > > > PARAMS_PHYS := $(params_phys-y) > > > INITRD_PHYS := $(initrd_phys-y) > > hui! Is this really robust? > > Apologies for the delay, busy... no problem. > It can be but it is admittedly rather tricky to get the syntax right. I've > no idea how the above worked the first time I tried but it didn't upon > further inspection. I came up with this variation on the theme: > > ZRELADDR = $(shell $(CONFIG_SHELL) -c 'printf "0x%08x" $$[`echo PHYS_OFFSET + $(TEXT_OFFSET) | $(CPP) $(cpp_flags) -D__ASSEMBLY__ -xc -imacros asm/memory.h - 2>/dev/null | tail -1`]') bash(1) has: *Arithmetic Expansion* [...] The format for arithmetic expansion is: $((expression)) The old format $[expression] is deprecated and will be removed upcoming versions of bash. Anyhow I think this yields more trouble than it's worth. Maybe better move PHYS_OFFSET into Makefile.boot or arch/arm/Makefile? Or live with the redundancy? Maybe some time in the future we don't need ZRELADDR any more as it is calculated by zImage based on PHYS_OFFSET. Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-K?nig | Industrial Linux Solutions | http://www.pengutronix.de/ | ^ permalink raw reply [flat|nested] 7+ messages in thread
* defining ZRELADDR as PHYS_OFFSET + TEXT_OFFSET 2010-02-05 9:10 ` Uwe Kleine-König @ 2010-02-05 14:14 ` George G. Davis 0 siblings, 0 replies; 7+ messages in thread From: George G. Davis @ 2010-02-05 14:14 UTC (permalink / raw) To: linux-arm-kernel Hi, On Fri, Feb 05, 2010 at 10:10:42AM +0100, Uwe Kleine-K?nig wrote: > Hello, > > On Fri, Feb 05, 2010 at 03:26:52AM -0500, George G. Davis wrote: > > Hi, > > > > On Mon, Feb 01, 2010 at 09:49:07AM +0100, Uwe Kleine-K?nig wrote: > > > Hallo George, > > > > > > On Sun, Jan 31, 2010 at 08:24:25PM -0500, George G. Davis wrote: > > > > On Thu, Jan 28, 2010 at 12:15:23AM +0000, Russell King - ARM Linux wrote: > > > > > On Wed, Jan 27, 2010 at 11:12:28AM +0100, Uwe Kleine-K?nig wrote: > > > > > > Hello, > > > > > > > > > > > > currently all platforms need to define zreladdr-y in > > > > > > arch/arm/mach-$mach/Makefile.boot and PHYS_OFFSET (in > > > > > > arch/arm/mach-$mach/include/mach/memory.h). > > > > > > > > > > > > Constraints for these are: > > > > > > > > > > > > TEXTADDR = PAGE_OFFSET + TEXT_OFFSET > > > > > > __virt_to_phys(virt) = virt - PAGE_OFFSET + PHYS_OFFSET (at least for > > > > > > "small" virtual addresses) > > > > > > ZRELADDR = __virt_to_phys(TEXTADDR) > > > > > > > > > > > > (The equallity for __virt_to_phys only holds "normaly" according to > > > > > > http://lists.arm.linux.org.uk/lurker/message/20010723.185051.94ce743c.en.html. > > > > > > In practice it holds for addresses of the first bank of RAM which is > > > > > > enough for the purposes of this mail.) > > > > > > > > > > > > So we can deduce ZRELADDR = PHYS_OFFSET + TEXT_OFFSET. > > > > > > > > > > > > Is there something I missed or is it possible to get rid of zreladdr-y > > > > > > in .../Makefile.boot and define it according to the equation above? > > > > > > > > > > You'd need to find some way to get PHYS_OFFSET out of the C code > > > > > into the makefile. With all sorts of stuff going on in various > > > > > platforms memory.h files, that doesn't look simple. > > > > > > > > How about this?: > > > > > > > > diff --git a/arch/arm/boot/Makefile b/arch/arm/boot/Makefile > > > > index 4a590f4..b79050e 100644 > > > > --- a/arch/arm/boot/Makefile > > > > +++ b/arch/arm/boot/Makefile > > > > @@ -21,7 +21,7 @@ endif > > > > # ZRELADDR == virt_to_phys(PAGE_OFFSET + TEXT_OFFSET) > > > > # PARAMS_PHYS must be within 4MB of ZRELADDR > > > > # INITRD_PHYS must be in RAM > > > > -ZRELADDR := $(zreladdr-y) > > > > +ZRELADDR := $(shell printf "0x%08x" $$[`echo PHYS_OFFSET + $(TEXT_OFFSET) | $(CPP) $(CPP_FLAGS) -D__ASSEMBLY__ -xc -include arch/arm/include/asm/memory.h - | tail -n 1`]) > > > > PARAMS_PHYS := $(params_phys-y) > > > > INITRD_PHYS := $(initrd_phys-y) > > > hui! Is this really robust? > > > > Apologies for the delay, busy... > no problem. > > > It can be but it is admittedly rather tricky to get the syntax right. I've > > no idea how the above worked the first time I tried but it didn't upon > > further inspection. I came up with this variation on the theme: > > > > ZRELADDR = $(shell $(CONFIG_SHELL) -c 'printf "0x%08x" $$[`echo PHYS_OFFSET + $(TEXT_OFFSET) | $(CPP) $(cpp_flags) -D__ASSEMBLY__ -xc -imacros asm/memory.h - 2>/dev/null | tail -1`]') > bash(1) has: > > *Arithmetic Expansion* > [...] The format for arithmetic expansion is: > > $((expression)) > > The old format $[expression] is deprecated and will > be removed upcoming versions of bash. Ah, thanks! I noticed there are a number of other cases of the deprecated $[expression] form in Linux kernel build scripts. > Anyhow I think this yields more trouble than it's worth. You're right. > Maybe better move PHYS_OFFSET into Makefile.boot or arch/arm/Makefile? Agreed. > Or live with the redundancy? Maybe some time in the future we don't > need ZRELADDR any more as it is calculated by zImage based on > PHYS_OFFSET. That would be better. Thanks! -- Regards, George > > Best regards > Uwe > > -- > Pengutronix e.K. | Uwe Kleine-K?nig | > Industrial Linux Solutions | http://www.pengutronix.de/ | ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2010-02-05 14:14 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-01-27 10:12 defining ZRELADDR as PHYS_OFFSET + TEXT_OFFSET Uwe Kleine-König 2010-01-28 0:15 ` Russell King - ARM Linux 2010-02-01 1:24 ` George G. Davis 2010-02-01 8:49 ` Uwe Kleine-König 2010-02-05 8:26 ` George G. Davis 2010-02-05 9:10 ` Uwe Kleine-König 2010-02-05 14:14 ` George G. Davis
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).