[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 2/2] ieee1275: set real-base in the PowerPC IEEE1275 Note to
From: |
Michael Chang |
Subject: |
Re: [PATCH 2/2] ieee1275: set real-base in the PowerPC IEEE1275 Note to 32MB |
Date: |
Tue, 16 Nov 2021 16:25:56 +0800 |
User-agent: |
Mutt/1.10.1 (2018-07-13) |
On Tue, Nov 16, 2021 at 02:42:05PM +1100, Daniel Axtens wrote:
> Background
> ----------
>
> Figuring out how to lay out memory in powerpc OpenFirmware is a bit
> of a complicate dance.
>
> Firstly, firmware needs to reserve a little bit of space for things
> like interrupt vectors that live at a fixed address. This is usually
> 0x4000 bytes. PFW calls this "stage 1" (of the firmware, not the
> bootloader!)
>
> As discussed in the previous patch, the ELF image is loaded at
> 'load-base' before it's unpacked. load-base is, by default, set at the
> end of stage 1. From there, the ELF loader unpacks the binary to
> wherever the program headers say and the program is executed.
>
> Next in memory, we need space for the rest of firmware. (PFW calls
> this "stage 2" of firmware.) The starting address begins at
> 'real-base'.* We need to not run past real-base when loading our ELF
> binary.
>
> load-base and real-base have defaults from firmware, and may be
> configurable in various ways.
>
> On PFW:
>
> - real-base defaults to 12MB (0xc00000)
>
> - real-base is configurable with the IEEE1275 ELF note.
>
> - a proprietary OS bootloader configures real-base to
> 0x2000000 (32MB).
>
> On SLOF:
>
> - real-base is set dynamically towards the end of accessible memory.
>
> - real-base is not configurable.
>
> On 32-bit, I'm not sure quite what the story is. I don't have any
> 32-bit Apple hardware to test with. However, with this change, grub
> still loads and runs, including when I hack up the tests to install
> the note by default.
>
> * I'm assuming here that the firmware doesn't do virtual mode. This is
> true on Power for both PFW and SLOF; Apple OF implementations may do
> things differently.
>
> Moving real-base
> ----------------
>
> To account for growing grub binary sizes, we want to try to expand the
> amount of memory that we have to work with. We have the following
> constraints and inputs:
>
> - A good practical limit for the size of the grub binary is 8MB, as
> that's about the size of the PReP partition on a number of distro
> setups. (See previous patch.)
>
> - We also want things to work if people forget to include the
> note. Even if distros build it in to signed images, people
> running grub-install will probably forget to set it and we don't
> want to break their systems. (Helpfully, if you're running
> grub-install manually there's a decent chance you're not building
> in a bunch of modules so things are likely to be smaller anyway.)
>
> - We want to avoid doing anything too novel with enterprise software.
>
> So when the note is included, set real-base to 32MB.
>
> Results
> -------
>
> This means that:
>
> - The ELF file will be loaded at 0x4000 and have just short of 8MB to
> fit into. (This is entirely the work of the previous patch - the
> 8MB limitation is because we now load at 8MB instead of 2MB.)
>
> - Nothing changes on SLOF, because SLOF ignores the note. We have
> oodles of space in SLOF.
>
> - On PFW when the note is not installed, we have about 4MB of space
> for ELF loader to put the program into (the gap between 8MB and the
> default real-base of 12MB). This is well more than any current grub
> image uses.
>
> - On PFW when the note _is_ installed, we will have about 24MB of
> space to put the program bits into. This is well more than we're
> likely to use unless people start putting very large arrays in BSS,
> but it means we're aligned with a proprietary bootloader and
> therefore we can be assured that some testing has been done.
May I ask why 'proprietary' is used here to describe the usecase ? Does
it possess any meaningful words like supportability to the firmware
vendor that OS vendor have to think over before enabling the note for a
'general' feature like powerpc secure boot ?
Thanks,
Michael
>
> Signed-off-by: Daniel Axtens <dja@axtens.net>
> ---
> util/grub-mkimagexx.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/util/grub-mkimagexx.c b/util/grub-mkimagexx.c
> index d78fa3e53308..2ac40b82a22d 100644
> --- a/util/grub-mkimagexx.c
> +++ b/util/grub-mkimagexx.c
> @@ -467,7 +467,7 @@ SUFFIX (grub_mkimage_generate_elf) (const struct
> grub_install_image_target_desc
> note_ptr->header.n_type = grub_host_to_target32
> (GRUB_IEEE1275_NOTE_TYPE);
> strcpy (note_ptr->name, GRUB_IEEE1275_NOTE_NAME);
> note_ptr->descriptor.real_mode = grub_host_to_target32 (0xffffffff);
> - note_ptr->descriptor.real_base = grub_host_to_target32 (0x00c00000);
> + note_ptr->descriptor.real_base = grub_host_to_target32 (0x02000000);
> note_ptr->descriptor.real_size = grub_host_to_target32 (0xffffffff);
> note_ptr->descriptor.virt_base = grub_host_to_target32 (0xffffffff);
> note_ptr->descriptor.virt_size = grub_host_to_target32 (0xffffffff);
> --
> 2.32.0
>
>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> https://lists.gnu.org/mailman/listinfo/grub-devel
- [PATCH 1/2] powerpc-ieee1275: load grub at 8MB, not 2MB, (continued)
- [PATCH 1/2] powerpc-ieee1275: load grub at 8MB, not 2MB, Daniel Axtens, 2021/11/15
- Re: [PATCH 1/2] powerpc-ieee1275: load grub at 8MB, not 2MB, Robbie Harwood, 2021/11/16
- Re: [PATCH 1/2] powerpc-ieee1275: load grub at 8MB, not 2MB, Vladimir 'phcoder' Serbinenko, 2021/11/16
- Re: [PATCH 1/2] powerpc-ieee1275: load grub at 8MB, not 2MB, Robbie Harwood, 2021/11/16
- Re: [PATCH 1/2] powerpc-ieee1275: load grub at 8MB, not 2MB, John Paul Adrian Glaubitz, 2021/11/16
- Re: [PATCH 1/2] powerpc-ieee1275: load grub at 8MB, not 2MB, John Paul Adrian Glaubitz, 2021/11/16
- Re: [PATCH 1/2] powerpc-ieee1275: load grub at 8MB, not 2MB, Robbie Harwood, 2021/11/16
- Re: [PATCH 1/2] powerpc-ieee1275: load grub at 8MB, not 2MB, Vladimir 'phcoder' Serbinenko, 2021/11/16
- Re: [PATCH 1/2] powerpc-ieee1275: load grub at 8MB, not 2MB, John Paul Adrian Glaubitz, 2021/11/22
[PATCH 2/2] ieee1275: set real-base in the PowerPC IEEE1275 Note to 32MB, Daniel Axtens, 2021/11/15
- Re: [PATCH 2/2] ieee1275: set real-base in the PowerPC IEEE1275 Note to 32MB,
Michael Chang <=
Re: [PATCH 0/2] powerpc-ieee1275: support larger core.elf images, John Paul Adrian Glaubitz, 2021/11/23