Currently, the start address of physical memory is obtained by masking
the program counter with a fixed mask of 0xf8000000. This mask value
was chosen as a balance between the requirements of different platforms.
However, this does require that the start address of physical memory is
a multiple of 128 MiB, precluding booting Linux on platforms where this
requirement is not fulfilled.
Fix this limitation by obtaining the start address from the DTB instead,
if available (either explicitly passed, or appended to the kernel).
Fall back to the traditional method when needed.
This allows to boot Linux on r7s9210/rza2mevb using the 64 MiB of SDRAM
on the RZA2MEVB sub board, which is located at 0x0C000000 (CS3 space),
i.e. not at a multiple of 128 MiB.
Suggested-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
Against arm/for-next.
Tested with the following configurations:
- zImage + DTB (r8a7791/koelsch),
- uImage + DTB (r8a73a4/ape6evm, r7s72100/rskrza1, r7s9210/rza2mevb),
- zImage with appended DTB (r8a7740/armadillo, sh73a0/kzm9g).
v2:
- Use "cmp r0, #-1", instead of "cmn r0, #1",
- Add missing stack setup,
- Support appended DTBs.
v1: https://lore.kernel.org/linux-arm-kernel/20200121192741.20597-1-geert+renesas@glider.be/
---
arch/arm/boot/compressed/Makefile | 6 ++-
arch/arm/boot/compressed/fdt_get_mem_start.c | 52 ++++++++++++++++++++
arch/arm/boot/compressed/head.S | 52 +++++++++++++++++++-
3 files changed, 108 insertions(+), 2 deletions(-)
create mode 100644 arch/arm/boot/compressed/fdt_get_mem_start.c
@@ -0,0 +1,52 @@+// SPDX-License-Identifier: GPL-2.0-only++#include<libfdt.h>++staticconstvoid*getprop(constvoid*fdt,constchar*node_path,+constchar*property)+{+intoffset=fdt_path_offset(fdt,node_path);++if(offset==-FDT_ERR_NOTFOUND)+returnNULL;++returnfdt_getprop(fdt,offset,property,NULL);+}++staticuint32_tget_addr_size(constvoid*fdt)+{+const__be32*addr_len=getprop(fdt,"/","#address-cells");++if(!addr_len){+/* default */+return1;+}++returnfdt32_to_cpu(*addr_len);+}++/*+*Getthestartofphysicalmemory+*/++unsignedlongfdt_get_mem_start(constvoid*fdt)+{+const__be32*memory;+uint32_taddr_size;++if(!fdt)+return-1;++if(*(__be32*)fdt!=cpu_to_fdt32(FDT_MAGIC))+return-1;++/* Find the first memory node */+memory=getprop(fdt,"/memory","reg");+if(!memory)+return-1;++/* There may be multiple cells on LPAE platforms */+addr_size=get_addr_size(fdt);++returnfdt32_to_cpu(memory[addr_size-1]);+}
From: Nicolas Pitre <nico@fluxnic.net> Date: 2020-01-27 14:36:53
On Mon, 27 Jan 2020, Geert Uytterhoeven wrote:
Currently, the start address of physical memory is obtained by masking
the program counter with a fixed mask of 0xf8000000. This mask value
was chosen as a balance between the requirements of different platforms.
However, this does require that the start address of physical memory is
a multiple of 128 MiB, precluding booting Linux on platforms where this
requirement is not fulfilled.
Fix this limitation by obtaining the start address from the DTB instead,
if available (either explicitly passed, or appended to the kernel).
Fall back to the traditional method when needed.
This allows to boot Linux on r7s9210/rza2mevb using the 64 MiB of SDRAM
on the RZA2MEVB sub board, which is located at 0x0C000000 (CS3 space),
i.e. not at a multiple of 128 MiB.
Suggested-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Nicolas Pitre <nico@fluxnic.net>
quoted hunk
---
Against arm/for-next.
Tested with the following configurations:
- zImage + DTB (r8a7791/koelsch),
- uImage + DTB (r8a73a4/ape6evm, r7s72100/rskrza1, r7s9210/rza2mevb),
- zImage with appended DTB (r8a7740/armadillo, sh73a0/kzm9g).
v2:
- Use "cmp r0, #-1", instead of "cmn r0, #1",
- Add missing stack setup,
- Support appended DTBs.
v1: https://lore.kernel.org/linux-arm-kernel/20200121192741.20597-1-geert+renesas@glider.be/
---
arch/arm/boot/compressed/Makefile | 6 ++-
arch/arm/boot/compressed/fdt_get_mem_start.c | 52 ++++++++++++++++++++
arch/arm/boot/compressed/head.S | 52 +++++++++++++++++++-
3 files changed, 108 insertions(+), 2 deletions(-)
create mode 100644 arch/arm/boot/compressed/fdt_get_mem_start.c
@@ -0,0 +1,52 @@+// SPDX-License-Identifier: GPL-2.0-only++#include<libfdt.h>++staticconstvoid*getprop(constvoid*fdt,constchar*node_path,+constchar*property)+{+intoffset=fdt_path_offset(fdt,node_path);++if(offset==-FDT_ERR_NOTFOUND)+returnNULL;++returnfdt_getprop(fdt,offset,property,NULL);+}++staticuint32_tget_addr_size(constvoid*fdt)+{+const__be32*addr_len=getprop(fdt,"/","#address-cells");++if(!addr_len){+/* default */+return1;+}++returnfdt32_to_cpu(*addr_len);+}++/*+*Getthestartofphysicalmemory+*/++unsignedlongfdt_get_mem_start(constvoid*fdt)+{+const__be32*memory;+uint32_taddr_size;++if(!fdt)+return-1;++if(*(__be32*)fdt!=cpu_to_fdt32(FDT_MAGIC))+return-1;++/* Find the first memory node */+memory=getprop(fdt,"/memory","reg");+if(!memory)+return-1;++/* There may be multiple cells on LPAE platforms */+addr_size=get_addr_size(fdt);++returnfdt32_to_cpu(memory[addr_size-1]);+}
From: Marek Szyprowski <m.szyprowski@samsung.com> Date: 2020-02-25 11:24:14
Hi Geert,
On 27.01.2020 15:07, Geert Uytterhoeven wrote:
Currently, the start address of physical memory is obtained by masking
the program counter with a fixed mask of 0xf8000000. This mask value
was chosen as a balance between the requirements of different platforms.
However, this does require that the start address of physical memory is
a multiple of 128 MiB, precluding booting Linux on platforms where this
requirement is not fulfilled.
Fix this limitation by obtaining the start address from the DTB instead,
if available (either explicitly passed, or appended to the kernel).
Fall back to the traditional method when needed.
This allows to boot Linux on r7s9210/rza2mevb using the 64 MiB of SDRAM
on the RZA2MEVB sub board, which is located at 0x0C000000 (CS3 space),
i.e. not at a multiple of 128 MiB.
Suggested-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Nicolas Pitre <nico@fluxnic.net>
---
Against arm/for-next.
This patch landed recently in linux-next. It breaks legacy booting from
the zImage + appended DT + cmdline/memory info provided via ATAGs. I
will debug it further once I find some spare time. What I noticed so
far, the cmdline/memory info is not read from the ATAGs, only the values
provided via appended DT are used.
quoted hunk
Tested with the following configurations:
- zImage + DTB (r8a7791/koelsch),
- uImage + DTB (r8a73a4/ape6evm, r7s72100/rskrza1, r7s9210/rza2mevb),
- zImage with appended DTB (r8a7740/armadillo, sh73a0/kzm9g).
v2:
- Use "cmp r0, #-1", instead of "cmn r0, #1",
- Add missing stack setup,
- Support appended DTBs.
v1: https://lore.kernel.org/linux-arm-kernel/20200121192741.20597-1-geert+renesas@glider.be/
---
arch/arm/boot/compressed/Makefile | 6 ++-
arch/arm/boot/compressed/fdt_get_mem_start.c | 52 ++++++++++++++++++++
arch/arm/boot/compressed/head.S | 52 +++++++++++++++++++-
3 files changed, 108 insertions(+), 2 deletions(-)
create mode 100644 arch/arm/boot/compressed/fdt_get_mem_start.c
@@ -0,0 +1,52 @@+// SPDX-License-Identifier: GPL-2.0-only++#include<libfdt.h>++staticconstvoid*getprop(constvoid*fdt,constchar*node_path,+constchar*property)+{+intoffset=fdt_path_offset(fdt,node_path);++if(offset==-FDT_ERR_NOTFOUND)+returnNULL;++returnfdt_getprop(fdt,offset,property,NULL);+}++staticuint32_tget_addr_size(constvoid*fdt)+{+const__be32*addr_len=getprop(fdt,"/","#address-cells");++if(!addr_len){+/* default */+return1;+}++returnfdt32_to_cpu(*addr_len);+}++/*+*Getthestartofphysicalmemory+*/++unsignedlongfdt_get_mem_start(constvoid*fdt)+{+const__be32*memory;+uint32_taddr_size;++if(!fdt)+return-1;++if(*(__be32*)fdt!=cpu_to_fdt32(FDT_MAGIC))+return-1;++/* Find the first memory node */+memory=getprop(fdt,"/memory","reg");+if(!memory)+return-1;++/* There may be multiple cells on LPAE platforms */+addr_size=get_addr_size(fdt);++returnfdt32_to_cpu(memory[addr_size-1]);+}
Best regards
--
Marek Szyprowski, PhD
Samsung R&D Institute Poland
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Hi Marek,
On Tue, Feb 25, 2020 at 12:24 PM Marek Szyprowski
[off-list ref] wrote:
On 27.01.2020 15:07, Geert Uytterhoeven wrote:
quoted
Currently, the start address of physical memory is obtained by masking
the program counter with a fixed mask of 0xf8000000. This mask value
was chosen as a balance between the requirements of different platforms.
However, this does require that the start address of physical memory is
a multiple of 128 MiB, precluding booting Linux on platforms where this
requirement is not fulfilled.
Fix this limitation by obtaining the start address from the DTB instead,
if available (either explicitly passed, or appended to the kernel).
Fall back to the traditional method when needed.
This allows to boot Linux on r7s9210/rza2mevb using the 64 MiB of SDRAM
on the RZA2MEVB sub board, which is located at 0x0C000000 (CS3 space),
i.e. not at a multiple of 128 MiB.
Suggested-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Nicolas Pitre <nico@fluxnic.net>
---
Against arm/for-next.
This patch landed recently in linux-next. It breaks legacy booting from
the zImage + appended DT + cmdline/memory info provided via ATAGs. I
will debug it further once I find some spare time. What I noticed so
far, the cmdline/memory info is not read from the ATAGs, only the values
provided via appended DT are used.
Oops, something happening like this was one of my biggest worries when
posting this patch... Sorry for the breakage.
IIUIC, the kernel still boots, but just doesn't use the info passed by ATAGs?
I'll have a closer look later today.
In the mean time, I've sent some debug code I used when developing
this patch, which may be useful, hopefully.
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Hi Marek,
On Tue, Feb 25, 2020 at 12:24 PM Marek Szyprowski
[off-list ref] wrote:
quoted
On 27.01.2020 15:07, Geert Uytterhoeven wrote:
quoted
Currently, the start address of physical memory is obtained by masking
the program counter with a fixed mask of 0xf8000000. This mask value
was chosen as a balance between the requirements of different platforms.
However, this does require that the start address of physical memory is
a multiple of 128 MiB, precluding booting Linux on platforms where this
requirement is not fulfilled.
Fix this limitation by obtaining the start address from the DTB instead,
if available (either explicitly passed, or appended to the kernel).
Fall back to the traditional method when needed.
This allows to boot Linux on r7s9210/rza2mevb using the 64 MiB of SDRAM
on the RZA2MEVB sub board, which is located at 0x0C000000 (CS3 space),
i.e. not at a multiple of 128 MiB.
Suggested-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Nicolas Pitre <nico@fluxnic.net>
---
Against arm/for-next.
This patch landed recently in linux-next. It breaks legacy booting from
the zImage + appended DT + cmdline/memory info provided via ATAGs. I
will debug it further once I find some spare time. What I noticed so
far, the cmdline/memory info is not read from the ATAGs, only the values
provided via appended DT are used.
Oops, something happening like this was one of my biggest worries when
posting this patch... Sorry for the breakage.
IIUIC, the kernel still boots, but just doesn't use the info passed by ATAGs?
I'll have a closer look later today.
In the mean time, I've sent some debug code I used when developing
this patch, which may be useful, hopefully.
Hello,
NVIDIA Tegra is also affected by this patch. A week ago an updated
version of the patch was pushed into linux-next and now machine doesn't
boot at all.
I couldn't find v3 on the ML, so replying to the v2. Please take a look
and fix the problem, or revert/drop the offending patch, thanks in advance.
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Hi Dmitry,
On Thu, Mar 19, 2020 at 2:11 AM Dmitry Osipenko [off-list ref] wrote:
25.02.2020 14:40, Geert Uytterhoeven пишет:
quoted
On Tue, Feb 25, 2020 at 12:24 PM Marek Szyprowski
[off-list ref] wrote:
quoted
On 27.01.2020 15:07, Geert Uytterhoeven wrote:
quoted
Currently, the start address of physical memory is obtained by masking
the program counter with a fixed mask of 0xf8000000. This mask value
was chosen as a balance between the requirements of different platforms.
However, this does require that the start address of physical memory is
a multiple of 128 MiB, precluding booting Linux on platforms where this
requirement is not fulfilled.
Fix this limitation by obtaining the start address from the DTB instead,
if available (either explicitly passed, or appended to the kernel).
Fall back to the traditional method when needed.
This allows to boot Linux on r7s9210/rza2mevb using the 64 MiB of SDRAM
on the RZA2MEVB sub board, which is located at 0x0C000000 (CS3 space),
i.e. not at a multiple of 128 MiB.
Suggested-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Nicolas Pitre <nico@fluxnic.net>
---
Against arm/for-next.
This patch landed recently in linux-next. It breaks legacy booting from
the zImage + appended DT + cmdline/memory info provided via ATAGs. I
will debug it further once I find some spare time. What I noticed so
far, the cmdline/memory info is not read from the ATAGs, only the values
provided via appended DT are used.
Oops, something happening like this was one of my biggest worries when
posting this patch... Sorry for the breakage.
IIUIC, the kernel still boots, but just doesn't use the info passed by ATAGs?
I'll have a closer look later today.
In the mean time, I've sent some debug code I used when developing
this patch, which may be useful, hopefully.
NVIDIA Tegra is also affected by this patch. A week ago an updated
version of the patch was pushed into linux-next and now machine doesn't
boot at all.
I'm sorry to hear that.
Did v2 work for you?
Are you sure this updated version is the culprit? There are several other
recent changes to head.S in arm/for-next.
Do you boot a separate DTB or an appended DTB?
Do you use ATAGS?
I couldn't find v3 on the ML, so replying to the v2. Please take a look
and fix the problem, or revert/drop the offending patch, thanks in advance.
V3 is v2 combined with "[PATCH] ARM: boot: Fix ATAGs with appended DTB"
(https://lore.kernel.org/linux-renesas-soc/20200225144749.19815-1-geert+renesas@glider.be/).
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
From: Russell King - ARM Linux admin <linux@armlinux.org.uk> Date: 2020-03-19 09:26:24
On Thu, Mar 19, 2020 at 04:11:00AM +0300, Dmitry Osipenko wrote:
25.02.2020 14:40, Geert Uytterhoeven пишет:
quoted
Hi Marek,
On Tue, Feb 25, 2020 at 12:24 PM Marek Szyprowski
[off-list ref] wrote:
quoted
On 27.01.2020 15:07, Geert Uytterhoeven wrote:
quoted
Currently, the start address of physical memory is obtained by masking
the program counter with a fixed mask of 0xf8000000. This mask value
was chosen as a balance between the requirements of different platforms.
However, this does require that the start address of physical memory is
a multiple of 128 MiB, precluding booting Linux on platforms where this
requirement is not fulfilled.
Fix this limitation by obtaining the start address from the DTB instead,
if available (either explicitly passed, or appended to the kernel).
Fall back to the traditional method when needed.
This allows to boot Linux on r7s9210/rza2mevb using the 64 MiB of SDRAM
on the RZA2MEVB sub board, which is located at 0x0C000000 (CS3 space),
i.e. not at a multiple of 128 MiB.
Suggested-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Nicolas Pitre <nico@fluxnic.net>
---
Against arm/for-next.
This patch landed recently in linux-next. It breaks legacy booting from
the zImage + appended DT + cmdline/memory info provided via ATAGs. I
will debug it further once I find some spare time. What I noticed so
far, the cmdline/memory info is not read from the ATAGs, only the values
provided via appended DT are used.
Oops, something happening like this was one of my biggest worries when
posting this patch... Sorry for the breakage.
IIUIC, the kernel still boots, but just doesn't use the info passed by ATAGs?
I'll have a closer look later today.
In the mean time, I've sent some debug code I used when developing
this patch, which may be useful, hopefully.
Hello,
NVIDIA Tegra is also affected by this patch. A week ago an updated
version of the patch was pushed into linux-next and now machine doesn't
boot at all.
I couldn't find v3 on the ML, so replying to the v2. Please take a look
and fix the problem, or revert/drop the offending patch, thanks in advance.
I'll drop the patch. It's clear that this is going to be difficult,
so I would ask you to test the next version, rather than waiting for
it to appear in linux-next.
Thanks.
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line in suburbia: sync at 10.2Mbps down 587kbps up
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Hi Dmitry,
On Thu, Mar 19, 2020 at 2:11 AM Dmitry Osipenko [off-list ref] wrote:
quoted
25.02.2020 14:40, Geert Uytterhoeven пишет:
quoted
On Tue, Feb 25, 2020 at 12:24 PM Marek Szyprowski
[off-list ref] wrote:
quoted
On 27.01.2020 15:07, Geert Uytterhoeven wrote:
quoted
Currently, the start address of physical memory is obtained by masking
the program counter with a fixed mask of 0xf8000000. This mask value
was chosen as a balance between the requirements of different platforms.
However, this does require that the start address of physical memory is
a multiple of 128 MiB, precluding booting Linux on platforms where this
requirement is not fulfilled.
Fix this limitation by obtaining the start address from the DTB instead,
if available (either explicitly passed, or appended to the kernel).
Fall back to the traditional method when needed.
This allows to boot Linux on r7s9210/rza2mevb using the 64 MiB of SDRAM
on the RZA2MEVB sub board, which is located at 0x0C000000 (CS3 space),
i.e. not at a multiple of 128 MiB.
Suggested-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Nicolas Pitre <nico@fluxnic.net>
---
Against arm/for-next.
This patch landed recently in linux-next. It breaks legacy booting from
the zImage + appended DT + cmdline/memory info provided via ATAGs. I
will debug it further once I find some spare time. What I noticed so
far, the cmdline/memory info is not read from the ATAGs, only the values
provided via appended DT are used.
Oops, something happening like this was one of my biggest worries when
posting this patch... Sorry for the breakage.
IIUIC, the kernel still boots, but just doesn't use the info passed by ATAGs?
I'll have a closer look later today.
In the mean time, I've sent some debug code I used when developing
this patch, which may be useful, hopefully.
NVIDIA Tegra is also affected by this patch. A week ago an updated
version of the patch was pushed into linux-next and now machine doesn't
boot at all.
I'm sorry to hear that.
Did v2 work for you?
Same as it was for Marek.
Are you sure this updated version is the culprit? There are several other
recent changes to head.S in arm/for-next.
Yes
Do you boot a separate DTB or an appended DTB?
Appended
Do you use ATAGS?
Yes
quoted
I couldn't find v3 on the ML, so replying to the v2. Please take a look
and fix the problem, or revert/drop the offending patch, thanks in advance.
Thank you for the clarification.
I recalled that CONFIG_THUMB2_KERNEL=y is set in my kernel's config and
disabling thumb2 build fixes the problem. Please correct it in the next
version of the patch, thanks in advance.
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
19.03.2020 12:25, Russell King - ARM Linux admin пишет:
On Thu, Mar 19, 2020 at 04:11:00AM +0300, Dmitry Osipenko wrote:
quoted
25.02.2020 14:40, Geert Uytterhoeven пишет:
quoted
Hi Marek,
On Tue, Feb 25, 2020 at 12:24 PM Marek Szyprowski
[off-list ref] wrote:
quoted
On 27.01.2020 15:07, Geert Uytterhoeven wrote:
quoted
Currently, the start address of physical memory is obtained by masking
the program counter with a fixed mask of 0xf8000000. This mask value
was chosen as a balance between the requirements of different platforms.
However, this does require that the start address of physical memory is
a multiple of 128 MiB, precluding booting Linux on platforms where this
requirement is not fulfilled.
Fix this limitation by obtaining the start address from the DTB instead,
if available (either explicitly passed, or appended to the kernel).
Fall back to the traditional method when needed.
This allows to boot Linux on r7s9210/rza2mevb using the 64 MiB of SDRAM
on the RZA2MEVB sub board, which is located at 0x0C000000 (CS3 space),
i.e. not at a multiple of 128 MiB.
Suggested-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Nicolas Pitre <nico@fluxnic.net>
---
Against arm/for-next.
This patch landed recently in linux-next. It breaks legacy booting from
the zImage + appended DT + cmdline/memory info provided via ATAGs. I
will debug it further once I find some spare time. What I noticed so
far, the cmdline/memory info is not read from the ATAGs, only the values
provided via appended DT are used.
Oops, something happening like this was one of my biggest worries when
posting this patch... Sorry for the breakage.
IIUIC, the kernel still boots, but just doesn't use the info passed by ATAGs?
I'll have a closer look later today.
In the mean time, I've sent some debug code I used when developing
this patch, which may be useful, hopefully.
Hello,
NVIDIA Tegra is also affected by this patch. A week ago an updated
version of the patch was pushed into linux-next and now machine doesn't
boot at all.
I couldn't find v3 on the ML, so replying to the v2. Please take a look
and fix the problem, or revert/drop the offending patch, thanks in advance.
I'll drop the patch. It's clear that this is going to be difficult,
so I would ask you to test the next version, rather than waiting for
it to appear in linux-next.
Thank you very much! I'll be happy to try v4, please feel free to CC me.
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Hi Dmitry,
On Thu, Mar 19, 2020 at 3:35 PM Dmitry Osipenko [off-list ref] wrote:
19.03.2020 11:18, Geert Uytterhoeven пишет:
quoted
On Thu, Mar 19, 2020 at 2:11 AM Dmitry Osipenko [off-list ref] wrote:
quoted
25.02.2020 14:40, Geert Uytterhoeven пишет:
quoted
On Tue, Feb 25, 2020 at 12:24 PM Marek Szyprowski
[off-list ref] wrote:
quoted
On 27.01.2020 15:07, Geert Uytterhoeven wrote:
quoted
Currently, the start address of physical memory is obtained by masking
the program counter with a fixed mask of 0xf8000000. This mask value
was chosen as a balance between the requirements of different platforms.
However, this does require that the start address of physical memory is
a multiple of 128 MiB, precluding booting Linux on platforms where this
requirement is not fulfilled.
Fix this limitation by obtaining the start address from the DTB instead,
if available (either explicitly passed, or appended to the kernel).
Fall back to the traditional method when needed.
This allows to boot Linux on r7s9210/rza2mevb using the 64 MiB of SDRAM
on the RZA2MEVB sub board, which is located at 0x0C000000 (CS3 space),
i.e. not at a multiple of 128 MiB.
Suggested-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Nicolas Pitre <nico@fluxnic.net>
---
Against arm/for-next.
This patch landed recently in linux-next. It breaks legacy booting from
the zImage + appended DT + cmdline/memory info provided via ATAGs. I
will debug it further once I find some spare time. What I noticed so
far, the cmdline/memory info is not read from the ATAGs, only the values
provided via appended DT are used.
Oops, something happening like this was one of my biggest worries when
posting this patch... Sorry for the breakage.
IIUIC, the kernel still boots, but just doesn't use the info passed by ATAGs?
I'll have a closer look later today.
In the mean time, I've sent some debug code I used when developing
this patch, which may be useful, hopefully.
NVIDIA Tegra is also affected by this patch. A week ago an updated
version of the patch was pushed into linux-next and now machine doesn't
boot at all.
I'm sorry to hear that.
Did v2 work for you?
Same as it was for Marek.
quoted
Are you sure this updated version is the culprit? There are several other
recent changes to head.S in arm/for-next.
Yes
quoted
Do you boot a separate DTB or an appended DTB?
Appended
quoted
Do you use ATAGS?
Yes
Thanks for the info!
I recalled that CONFIG_THUMB2_KERNEL=y is set in my kernel's config and
disabling thumb2 build fixes the problem. Please correct it in the next
version of the patch, thanks in advance.
Interesting. I enabled CONFIG_THUMB2_KERNEL=y, and it doesn't make
a difference for the few board combos I've tried (with/without appended DTB).
So it must be related to ATAGS. Will dive deeper...
P.S. I never realized CONFIG_THUMB2_KERNEL=y had such a big size
impact: my kernel shrunk by ca. 1 MiB.
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
I recalled that CONFIG_THUMB2_KERNEL=y is set in my kernel's config and
disabling thumb2 build fixes the problem. Please correct it in the next
version of the patch, thanks in advance.
Interesting. I enabled CONFIG_THUMB2_KERNEL=y, and it doesn't make
a difference for the few board combos I've tried (with/without appended DTB).
So it must be related to ATAGS. Will dive deeper...
P.S. I never realized CONFIG_THUMB2_KERNEL=y had such a big size
impact: my kernel shrunk by ca. 1 MiB.
Hi Dmitry et al,
On Fri, Mar 20, 2020 at 10:18 AM Geert Uytterhoeven
[off-list ref] wrote:
On Thu, Mar 19, 2020 at 3:35 PM Dmitry Osipenko [off-list ref] wrote:
quoted
19.03.2020 11:18, Geert Uytterhoeven пишет:
quoted
On Thu, Mar 19, 2020 at 2:11 AM Dmitry Osipenko [off-list ref] wrote:
quoted
25.02.2020 14:40, Geert Uytterhoeven пишет:
quoted
On Tue, Feb 25, 2020 at 12:24 PM Marek Szyprowski
[off-list ref] wrote:
quoted
On 27.01.2020 15:07, Geert Uytterhoeven wrote:
quoted
Currently, the start address of physical memory is obtained by masking
the program counter with a fixed mask of 0xf8000000. This mask value
was chosen as a balance between the requirements of different platforms.
However, this does require that the start address of physical memory is
a multiple of 128 MiB, precluding booting Linux on platforms where this
requirement is not fulfilled.
Fix this limitation by obtaining the start address from the DTB instead,
if available (either explicitly passed, or appended to the kernel).
Fall back to the traditional method when needed.
This allows to boot Linux on r7s9210/rza2mevb using the 64 MiB of SDRAM
on the RZA2MEVB sub board, which is located at 0x0C000000 (CS3 space),
i.e. not at a multiple of 128 MiB.
Suggested-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Nicolas Pitre <nico@fluxnic.net>
---
Against arm/for-next.
This patch landed recently in linux-next. It breaks legacy booting from
the zImage + appended DT + cmdline/memory info provided via ATAGs. I
will debug it further once I find some spare time. What I noticed so
far, the cmdline/memory info is not read from the ATAGs, only the values
provided via appended DT are used.
Oops, something happening like this was one of my biggest worries when
posting this patch... Sorry for the breakage.
IIUIC, the kernel still boots, but just doesn't use the info passed by ATAGs?
I'll have a closer look later today.
In the mean time, I've sent some debug code I used when developing
this patch, which may be useful, hopefully.
NVIDIA Tegra is also affected by this patch. A week ago an updated
version of the patch was pushed into linux-next and now machine doesn't
boot at all.
quoted
I recalled that CONFIG_THUMB2_KERNEL=y is set in my kernel's config and
disabling thumb2 build fixes the problem. Please correct it in the next
version of the patch, thanks in advance.
Interesting. I enabled CONFIG_THUMB2_KERNEL=y, and it doesn't make
a difference for the few board combos I've tried (with/without appended DTB).
So it must be related to ATAGS. Will dive deeper...
I managed to reproduce it without ATAGS.
Turns out to be a bad interaction with commit 184bf653a7a452c1 ("ARM:
decompressor: factor out routine to obtain the inflated image size"),
which removed one entry from the data array at LC0. While that commit
updated all then-existing users, merging Ard's pull request didn't take
into account that a new user had emerged, which also needed updating.
When CONFIG_THUMB2_KERNEL=y, the stack pointer becomes 2-byte
instead of 4-byte aligned, causing a crash.
When CONFIG_THUMB2_KERNEL=n, it still works, probably by accident.
adr r0, LC0
ldr r1, [r0] @ get absolute LC0
- ldr sp, [r0, #28] @ get stack location
+ ldr sp, [r0, #24] @ get stack location
in arch/arm/boot/compressed/head.S fixes the issue for me.
Will send v4 shortly.
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel