diff mbox

[edk2] ArmVirtPkg/ArmVirtQemuKernel: increase slack space for DTB

Message ID 20170404144553.17976-1-ard.biesheuvel@linaro.org
State Accepted
Commit 4d2ea2616e948cca34e03d90d9f094f11e42c00b
Headers show

Commit Message

Ard Biesheuvel April 4, 2017, 2:45 p.m. UTC
The relocatable build of ArmVirtQemuKernel is designed to be executed
from RAM, and contains some scratch memory at the start of the image
to use as a stack very early on, and to preserve the DTB image received
from QEMU while it discovers and initializes memory.

It turns out that 8 KB is a bit on the small side here, especially when
executing with secure world emulation enabled, in which case there are
additional nodes present.

So increase the slack space to 32 KB.

While at it, remove a stale Xen reference that was copy/pasted when this
file was created.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

---
 ArmVirtPkg/ArmVirtQemuKernel.fdf | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

-- 
2.9.3

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Comments

Laszlo Ersek April 4, 2017, 2:59 p.m. UTC | #1
On 04/04/17 16:45, Ard Biesheuvel wrote:
> The relocatable build of ArmVirtQemuKernel is designed to be executed

> from RAM, and contains some scratch memory at the start of the image

> to use as a stack very early on, and to preserve the DTB image received

> from QEMU while it discovers and initializes memory.

> 

> It turns out that 8 KB is a bit on the small side here, especially when

> executing with secure world emulation enabled, in which case there are

> additional nodes present.

> 

> So increase the slack space to 32 KB.

> 

> While at it, remove a stale Xen reference that was copy/pasted when this

> file was created.

> 

> Contributed-under: TianoCore Contribution Agreement 1.0

> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

> ---

>  ArmVirtPkg/ArmVirtQemuKernel.fdf | 12 ++++++------

>  1 file changed, 6 insertions(+), 6 deletions(-)

> 

> diff --git a/ArmVirtPkg/ArmVirtQemuKernel.fdf b/ArmVirtPkg/ArmVirtQemuKernel.fdf

> index 7bc62f6b0b48..55541a1075d8 100644

> --- a/ArmVirtPkg/ArmVirtQemuKernel.fdf

> +++ b/ArmVirtPkg/ArmVirtQemuKernel.fdf

> @@ -52,15 +52,15 @@ [FD.QEMU_EFI]

>  ################################################################################

>  

>  #

> -# Implement the Linux kernel header layout so that the Xen loader will identify

> +# Implement the Linux kernel header layout so that the loader will identify

>  # it as something bootable, and execute it with a FDT pointer in x0 or r2.

> -# This area will be reused to store a copy of the FDT so round it up to 8 KB.

> +# This area will be reused to store a copy of the FDT so round it up to 32 KB.

>  #

> -0x00000000|0x00002000

> +0x00000000|0x00008000

>  DATA = {

>  !if $(ARCH) == AARCH64

>    0x01, 0x00, 0x00, 0x10,                         # code0: adr x1, .

> -  0xff, 0x07, 0x00, 0x14,                         # code1: b 0x2000

> +  0xff, 0x1f, 0x00, 0x14,                         # code1: b 0x8000

>    0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, # text_offset: 512 KB

>    0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, # image_size: 2 MB

>    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, # flags

> @@ -79,7 +79,7 @@ [FD.QEMU_EFI]

>    0x00, 0x00, 0xa0, 0xe1, # nop

>    0x00, 0x00, 0xa0, 0xe1, # nop

>  

> -  0xf6, 0x07, 0x00, 0xea, # b 0x2000

> +  0xf6, 0x1f, 0x00, 0xea, # b 0x8000

>    0x18, 0x28, 0x6f, 0x01, # magic

>    0x00, 0x00, 0x00, 0x00, # start

>    0x00, 0x00, 0x20, 0x00, # image size: 2 MB

> @@ -87,7 +87,7 @@ [FD.QEMU_EFI]

>  !endif

>  }

>  

> -0x00002000|0x001fe000

> +0x00008000|0x001f8000

>  gArmTokenSpaceGuid.PcdFvBaseAddress|gArmTokenSpaceGuid.PcdFvSize

>  FV = FVMAIN_COMPACT

>  

> 


Acked-by: Laszlo Ersek <lersek@redhat.com>

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Ard Biesheuvel April 4, 2017, 3:02 p.m. UTC | #2
On 4 April 2017 at 15:59, Laszlo Ersek <lersek@redhat.com> wrote:
> On 04/04/17 16:45, Ard Biesheuvel wrote:

>> The relocatable build of ArmVirtQemuKernel is designed to be executed

>> from RAM, and contains some scratch memory at the start of the image

>> to use as a stack very early on, and to preserve the DTB image received

>> from QEMU while it discovers and initializes memory.

>>

>> It turns out that 8 KB is a bit on the small side here, especially when

>> executing with secure world emulation enabled, in which case there are

>> additional nodes present.

>>

>> So increase the slack space to 32 KB.

>>

>> While at it, remove a stale Xen reference that was copy/pasted when this

>> file was created.

>>

>> Contributed-under: TianoCore Contribution Agreement 1.0

>> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

>> ---

>>  ArmVirtPkg/ArmVirtQemuKernel.fdf | 12 ++++++------

>>  1 file changed, 6 insertions(+), 6 deletions(-)

>>

>> diff --git a/ArmVirtPkg/ArmVirtQemuKernel.fdf b/ArmVirtPkg/ArmVirtQemuKernel.fdf

>> index 7bc62f6b0b48..55541a1075d8 100644

>> --- a/ArmVirtPkg/ArmVirtQemuKernel.fdf

>> +++ b/ArmVirtPkg/ArmVirtQemuKernel.fdf

>> @@ -52,15 +52,15 @@ [FD.QEMU_EFI]

>>  ################################################################################

>>

>>  #

>> -# Implement the Linux kernel header layout so that the Xen loader will identify

>> +# Implement the Linux kernel header layout so that the loader will identify

>>  # it as something bootable, and execute it with a FDT pointer in x0 or r2.

>> -# This area will be reused to store a copy of the FDT so round it up to 8 KB.

>> +# This area will be reused to store a copy of the FDT so round it up to 32 KB.

>>  #

>> -0x00000000|0x00002000

>> +0x00000000|0x00008000

>>  DATA = {

>>  !if $(ARCH) == AARCH64

>>    0x01, 0x00, 0x00, 0x10,                         # code0: adr x1, .

>> -  0xff, 0x07, 0x00, 0x14,                         # code1: b 0x2000

>> +  0xff, 0x1f, 0x00, 0x14,                         # code1: b 0x8000

>>    0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, # text_offset: 512 KB

>>    0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, # image_size: 2 MB

>>    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, # flags

>> @@ -79,7 +79,7 @@ [FD.QEMU_EFI]

>>    0x00, 0x00, 0xa0, 0xe1, # nop

>>    0x00, 0x00, 0xa0, 0xe1, # nop

>>

>> -  0xf6, 0x07, 0x00, 0xea, # b 0x2000

>> +  0xf6, 0x1f, 0x00, 0xea, # b 0x8000

>>    0x18, 0x28, 0x6f, 0x01, # magic

>>    0x00, 0x00, 0x00, 0x00, # start

>>    0x00, 0x00, 0x20, 0x00, # image size: 2 MB

>> @@ -87,7 +87,7 @@ [FD.QEMU_EFI]

>>  !endif

>>  }

>>

>> -0x00002000|0x001fe000

>> +0x00008000|0x001f8000

>>  gArmTokenSpaceGuid.PcdFvBaseAddress|gArmTokenSpaceGuid.PcdFvSize

>>  FV = FVMAIN_COMPACT

>>

>>

>

> Acked-by: Laszlo Ersek <lersek@redhat.com>


Thanks. Pushed as 4d2ea2616e94
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Michael Zimmermann April 14, 2017, 6:04 a.m. UTC | #3
"contains some scratch memory at the start of the image to use as a
stack very early on"
When does this happen? I didn't see any edk2-code which sets SP to the
slack space.

Thanks
Michael

On Tue, Apr 4, 2017 at 5:02 PM, Ard Biesheuvel
<ard.biesheuvel@linaro.org> wrote:
> On 4 April 2017 at 15:59, Laszlo Ersek <lersek@redhat.com> wrote:

>> On 04/04/17 16:45, Ard Biesheuvel wrote:

>>> The relocatable build of ArmVirtQemuKernel is designed to be executed

>>> from RAM, and contains some scratch memory at the start of the image

>>> to use as a stack very early on, and to preserve the DTB image received

>>> from QEMU while it discovers and initializes memory.

>>>

>>> It turns out that 8 KB is a bit on the small side here, especially when

>>> executing with secure world emulation enabled, in which case there are

>>> additional nodes present.

>>>

>>> So increase the slack space to 32 KB.

>>>

>>> While at it, remove a stale Xen reference that was copy/pasted when this

>>> file was created.

>>>

>>> Contributed-under: TianoCore Contribution Agreement 1.0

>>> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

>>> ---

>>>  ArmVirtPkg/ArmVirtQemuKernel.fdf | 12 ++++++------

>>>  1 file changed, 6 insertions(+), 6 deletions(-)

>>>

>>> diff --git a/ArmVirtPkg/ArmVirtQemuKernel.fdf b/ArmVirtPkg/ArmVirtQemuKernel.fdf

>>> index 7bc62f6b0b48..55541a1075d8 100644

>>> --- a/ArmVirtPkg/ArmVirtQemuKernel.fdf

>>> +++ b/ArmVirtPkg/ArmVirtQemuKernel.fdf

>>> @@ -52,15 +52,15 @@ [FD.QEMU_EFI]

>>>  ################################################################################

>>>

>>>  #

>>> -# Implement the Linux kernel header layout so that the Xen loader will identify

>>> +# Implement the Linux kernel header layout so that the loader will identify

>>>  # it as something bootable, and execute it with a FDT pointer in x0 or r2.

>>> -# This area will be reused to store a copy of the FDT so round it up to 8 KB.

>>> +# This area will be reused to store a copy of the FDT so round it up to 32 KB.

>>>  #

>>> -0x00000000|0x00002000

>>> +0x00000000|0x00008000

>>>  DATA = {

>>>  !if $(ARCH) == AARCH64

>>>    0x01, 0x00, 0x00, 0x10,                         # code0: adr x1, .

>>> -  0xff, 0x07, 0x00, 0x14,                         # code1: b 0x2000

>>> +  0xff, 0x1f, 0x00, 0x14,                         # code1: b 0x8000

>>>    0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, # text_offset: 512 KB

>>>    0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, # image_size: 2 MB

>>>    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, # flags

>>> @@ -79,7 +79,7 @@ [FD.QEMU_EFI]

>>>    0x00, 0x00, 0xa0, 0xe1, # nop

>>>    0x00, 0x00, 0xa0, 0xe1, # nop

>>>

>>> -  0xf6, 0x07, 0x00, 0xea, # b 0x2000

>>> +  0xf6, 0x1f, 0x00, 0xea, # b 0x8000

>>>    0x18, 0x28, 0x6f, 0x01, # magic

>>>    0x00, 0x00, 0x00, 0x00, # start

>>>    0x00, 0x00, 0x20, 0x00, # image size: 2 MB

>>> @@ -87,7 +87,7 @@ [FD.QEMU_EFI]

>>>  !endif

>>>  }

>>>

>>> -0x00002000|0x001fe000

>>> +0x00008000|0x001f8000

>>>  gArmTokenSpaceGuid.PcdFvBaseAddress|gArmTokenSpaceGuid.PcdFvSize

>>>  FV = FVMAIN_COMPACT

>>>

>>>

>>

>> Acked-by: Laszlo Ersek <lersek@redhat.com>

>

> Thanks. Pushed as 4d2ea2616e94

> _______________________________________________

> edk2-devel mailing list

> edk2-devel@lists.01.org

> https://lists.01.org/mailman/listinfo/edk2-devel

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Michael Zimmermann April 14, 2017, 6:19 a.m. UTC | #4
Ok I've found it in "RelocatableVirtHelper.S".

Thanks
Michael

On Fri, Apr 14, 2017 at 8:04 AM, Michael Zimmermann
<sigmaepsilon92@gmail.com> wrote:
> "contains some scratch memory at the start of the image to use as a

> stack very early on"

> When does this happen? I didn't see any edk2-code which sets SP to the

> slack space.

>

> Thanks

> Michael

>

> On Tue, Apr 4, 2017 at 5:02 PM, Ard Biesheuvel

> <ard.biesheuvel@linaro.org> wrote:

>> On 4 April 2017 at 15:59, Laszlo Ersek <lersek@redhat.com> wrote:

>>> On 04/04/17 16:45, Ard Biesheuvel wrote:

>>>> The relocatable build of ArmVirtQemuKernel is designed to be executed

>>>> from RAM, and contains some scratch memory at the start of the image

>>>> to use as a stack very early on, and to preserve the DTB image received

>>>> from QEMU while it discovers and initializes memory.

>>>>

>>>> It turns out that 8 KB is a bit on the small side here, especially when

>>>> executing with secure world emulation enabled, in which case there are

>>>> additional nodes present.

>>>>

>>>> So increase the slack space to 32 KB.

>>>>

>>>> While at it, remove a stale Xen reference that was copy/pasted when this

>>>> file was created.

>>>>

>>>> Contributed-under: TianoCore Contribution Agreement 1.0

>>>> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

>>>> ---

>>>>  ArmVirtPkg/ArmVirtQemuKernel.fdf | 12 ++++++------

>>>>  1 file changed, 6 insertions(+), 6 deletions(-)

>>>>

>>>> diff --git a/ArmVirtPkg/ArmVirtQemuKernel.fdf b/ArmVirtPkg/ArmVirtQemuKernel.fdf

>>>> index 7bc62f6b0b48..55541a1075d8 100644

>>>> --- a/ArmVirtPkg/ArmVirtQemuKernel.fdf

>>>> +++ b/ArmVirtPkg/ArmVirtQemuKernel.fdf

>>>> @@ -52,15 +52,15 @@ [FD.QEMU_EFI]

>>>>  ################################################################################

>>>>

>>>>  #

>>>> -# Implement the Linux kernel header layout so that the Xen loader will identify

>>>> +# Implement the Linux kernel header layout so that the loader will identify

>>>>  # it as something bootable, and execute it with a FDT pointer in x0 or r2.

>>>> -# This area will be reused to store a copy of the FDT so round it up to 8 KB.

>>>> +# This area will be reused to store a copy of the FDT so round it up to 32 KB.

>>>>  #

>>>> -0x00000000|0x00002000

>>>> +0x00000000|0x00008000

>>>>  DATA = {

>>>>  !if $(ARCH) == AARCH64

>>>>    0x01, 0x00, 0x00, 0x10,                         # code0: adr x1, .

>>>> -  0xff, 0x07, 0x00, 0x14,                         # code1: b 0x2000

>>>> +  0xff, 0x1f, 0x00, 0x14,                         # code1: b 0x8000

>>>>    0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, # text_offset: 512 KB

>>>>    0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, # image_size: 2 MB

>>>>    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, # flags

>>>> @@ -79,7 +79,7 @@ [FD.QEMU_EFI]

>>>>    0x00, 0x00, 0xa0, 0xe1, # nop

>>>>    0x00, 0x00, 0xa0, 0xe1, # nop

>>>>

>>>> -  0xf6, 0x07, 0x00, 0xea, # b 0x2000

>>>> +  0xf6, 0x1f, 0x00, 0xea, # b 0x8000

>>>>    0x18, 0x28, 0x6f, 0x01, # magic

>>>>    0x00, 0x00, 0x00, 0x00, # start

>>>>    0x00, 0x00, 0x20, 0x00, # image size: 2 MB

>>>> @@ -87,7 +87,7 @@ [FD.QEMU_EFI]

>>>>  !endif

>>>>  }

>>>>

>>>> -0x00002000|0x001fe000

>>>> +0x00008000|0x001f8000

>>>>  gArmTokenSpaceGuid.PcdFvBaseAddress|gArmTokenSpaceGuid.PcdFvSize

>>>>  FV = FVMAIN_COMPACT

>>>>

>>>>

>>>

>>> Acked-by: Laszlo Ersek <lersek@redhat.com>

>>

>> Thanks. Pushed as 4d2ea2616e94

>> _______________________________________________

>> edk2-devel mailing list

>> edk2-devel@lists.01.org

>> https://lists.01.org/mailman/listinfo/edk2-devel

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
diff mbox

Patch

diff --git a/ArmVirtPkg/ArmVirtQemuKernel.fdf b/ArmVirtPkg/ArmVirtQemuKernel.fdf
index 7bc62f6b0b48..55541a1075d8 100644
--- a/ArmVirtPkg/ArmVirtQemuKernel.fdf
+++ b/ArmVirtPkg/ArmVirtQemuKernel.fdf
@@ -52,15 +52,15 @@  [FD.QEMU_EFI]
 ################################################################################
 
 #
-# Implement the Linux kernel header layout so that the Xen loader will identify
+# Implement the Linux kernel header layout so that the loader will identify
 # it as something bootable, and execute it with a FDT pointer in x0 or r2.
-# This area will be reused to store a copy of the FDT so round it up to 8 KB.
+# This area will be reused to store a copy of the FDT so round it up to 32 KB.
 #
-0x00000000|0x00002000
+0x00000000|0x00008000
 DATA = {
 !if $(ARCH) == AARCH64
   0x01, 0x00, 0x00, 0x10,                         # code0: adr x1, .
-  0xff, 0x07, 0x00, 0x14,                         # code1: b 0x2000
+  0xff, 0x1f, 0x00, 0x14,                         # code1: b 0x8000
   0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, # text_offset: 512 KB
   0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, # image_size: 2 MB
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, # flags
@@ -79,7 +79,7 @@  [FD.QEMU_EFI]
   0x00, 0x00, 0xa0, 0xe1, # nop
   0x00, 0x00, 0xa0, 0xe1, # nop
 
-  0xf6, 0x07, 0x00, 0xea, # b 0x2000
+  0xf6, 0x1f, 0x00, 0xea, # b 0x8000
   0x18, 0x28, 0x6f, 0x01, # magic
   0x00, 0x00, 0x00, 0x00, # start
   0x00, 0x00, 0x20, 0x00, # image size: 2 MB
@@ -87,7 +87,7 @@  [FD.QEMU_EFI]
 !endif
 }
 
-0x00002000|0x001fe000
+0x00008000|0x001f8000
 gArmTokenSpaceGuid.PcdFvBaseAddress|gArmTokenSpaceGuid.PcdFvSize
 FV = FVMAIN_COMPACT