* [PATCH] efi: stub: get rid of efi_get_max_fdt_addr()
@ 2020-10-29 13:49 Ard Biesheuvel
2020-10-29 18:01 ` Atish Patra
0 siblings, 1 reply; 2+ messages in thread
From: Ard Biesheuvel @ 2020-10-29 13:49 UTC (permalink / raw)
To: linux-efi; +Cc: atish.patra, Ard Biesheuvel
Now that ARM started following the example of arm64 and RISC-V, and
no longer imposes any restrictions on the placement of the FDT in
memory at boot, we no longer need per-arch implementations of
efi_get_max_fdt_addr() to factor out the differences. So get rid of
it.
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
---
arch/arm/include/asm/efi.h | 6 ------
arch/arm64/include/asm/efi.h | 6 ------
arch/riscv/include/asm/efi.h | 6 ------
drivers/firmware/efi/libstub/efi-stub.c | 1 -
drivers/firmware/efi/libstub/efistub.h | 1 -
drivers/firmware/efi/libstub/fdt.c | 3 +--
6 files changed, 1 insertion(+), 22 deletions(-)
diff --git a/arch/arm/include/asm/efi.h b/arch/arm/include/asm/efi.h
index 3ee4f4381985..0496bc96a092 100644
--- a/arch/arm/include/asm/efi.h
+++ b/arch/arm/include/asm/efi.h
@@ -74,12 +74,6 @@ static inline void efifb_setup_from_dmi(struct screen_info *si, const char *opt)
*/
#define EFI_PHYS_ALIGN SZ_16M
-/* on ARM, the FDT should be located in a lowmem region */
-static inline unsigned long efi_get_max_fdt_addr(unsigned long image_addr)
-{
- return round_down(image_addr, EFI_PHYS_ALIGN) + SZ_512M;
-}
-
/* on ARM, the initrd should be loaded in a lowmem region */
static inline unsigned long efi_get_max_initrd_addr(unsigned long image_addr)
{
diff --git a/arch/arm64/include/asm/efi.h b/arch/arm64/include/asm/efi.h
index 973b14415271..01446a073b2e 100644
--- a/arch/arm64/include/asm/efi.h
+++ b/arch/arm64/include/asm/efi.h
@@ -64,12 +64,6 @@ efi_status_t __efi_rt_asm_wrapper(void *, const char *, ...);
#define EFI_KIMG_ALIGN \
(SEGMENT_ALIGN > THREAD_ALIGN ? SEGMENT_ALIGN : THREAD_ALIGN)
-/* on arm64, the FDT may be located anywhere in system RAM */
-static inline unsigned long efi_get_max_fdt_addr(unsigned long image_addr)
-{
- return ULONG_MAX;
-}
-
/*
* On arm64, we have to ensure that the initrd ends up in the linear region,
* which is a 1 GB aligned region of size '1UL << (VA_BITS_MIN - 1)' that is
diff --git a/arch/riscv/include/asm/efi.h b/arch/riscv/include/asm/efi.h
index 7542282f1141..6d98cd999680 100644
--- a/arch/riscv/include/asm/efi.h
+++ b/arch/riscv/include/asm/efi.h
@@ -27,12 +27,6 @@ int efi_set_mapping_permissions(struct mm_struct *mm, efi_memory_desc_t *md);
#define ARCH_EFI_IRQ_FLAGS_MASK (SR_IE | SR_SPIE)
-/* on RISC-V, the FDT may be located anywhere in system RAM */
-static inline unsigned long efi_get_max_fdt_addr(unsigned long image_addr)
-{
- return ULONG_MAX;
-}
-
/* Load initrd at enough distance from DRAM start */
static inline unsigned long efi_get_max_initrd_addr(unsigned long image_addr)
{
diff --git a/drivers/firmware/efi/libstub/efi-stub.c b/drivers/firmware/efi/libstub/efi-stub.c
index 914a343c7785..ec2f3985bef3 100644
--- a/drivers/firmware/efi/libstub/efi-stub.c
+++ b/drivers/firmware/efi/libstub/efi-stub.c
@@ -273,7 +273,6 @@ efi_status_t __efiapi efi_pe_entry(efi_handle_t handle,
install_memreserve_table();
status = allocate_new_fdt_and_exit_boot(handle, &fdt_addr,
- efi_get_max_fdt_addr(image_addr),
initrd_addr, initrd_size,
cmdline_ptr, fdt_addr, fdt_size);
if (status != EFI_SUCCESS)
diff --git a/drivers/firmware/efi/libstub/efistub.h b/drivers/firmware/efi/libstub/efistub.h
index 2d7abcd99de9..c1c63e847481 100644
--- a/drivers/firmware/efi/libstub/efistub.h
+++ b/drivers/firmware/efi/libstub/efistub.h
@@ -750,7 +750,6 @@ efi_status_t efi_exit_boot_services(void *handle,
efi_status_t allocate_new_fdt_and_exit_boot(void *handle,
unsigned long *new_fdt_addr,
- unsigned long max_addr,
u64 initrd_addr, u64 initrd_size,
char *cmdline_ptr,
unsigned long fdt_addr,
diff --git a/drivers/firmware/efi/libstub/fdt.c b/drivers/firmware/efi/libstub/fdt.c
index 368cd60000ee..365c3a43a198 100644
--- a/drivers/firmware/efi/libstub/fdt.c
+++ b/drivers/firmware/efi/libstub/fdt.c
@@ -238,7 +238,6 @@ static efi_status_t exit_boot_func(struct efi_boot_memmap *map,
efi_status_t allocate_new_fdt_and_exit_boot(void *handle,
unsigned long *new_fdt_addr,
- unsigned long max_addr,
u64 initrd_addr, u64 initrd_size,
char *cmdline_ptr,
unsigned long fdt_addr,
@@ -275,7 +274,7 @@ efi_status_t allocate_new_fdt_and_exit_boot(void *handle,
efi_info("Exiting boot services and installing virtual address map...\n");
map.map = &memory_map;
- status = efi_allocate_pages(MAX_FDT_SIZE, new_fdt_addr, max_addr);
+ status = efi_allocate_pages(MAX_FDT_SIZE, new_fdt_addr, ULONG_MAX);
if (status != EFI_SUCCESS) {
efi_err("Unable to allocate memory for new device tree.\n");
goto fail;
--
2.17.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] efi: stub: get rid of efi_get_max_fdt_addr()
2020-10-29 13:49 [PATCH] efi: stub: get rid of efi_get_max_fdt_addr() Ard Biesheuvel
@ 2020-10-29 18:01 ` Atish Patra
0 siblings, 0 replies; 2+ messages in thread
From: Atish Patra @ 2020-10-29 18:01 UTC (permalink / raw)
To: Ard Biesheuvel; +Cc: linux-efi, Atish Patra
On Thu, Oct 29, 2020 at 6:49 AM Ard Biesheuvel <ardb@kernel.org> wrote:
>
> Now that ARM started following the example of arm64 and RISC-V, and
> no longer imposes any restrictions on the placement of the FDT in
> memory at boot, we no longer need per-arch implementations of
> efi_get_max_fdt_addr() to factor out the differences. So get rid of
> it.
>
> Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
> ---
> arch/arm/include/asm/efi.h | 6 ------
> arch/arm64/include/asm/efi.h | 6 ------
> arch/riscv/include/asm/efi.h | 6 ------
> drivers/firmware/efi/libstub/efi-stub.c | 1 -
> drivers/firmware/efi/libstub/efistub.h | 1 -
> drivers/firmware/efi/libstub/fdt.c | 3 +--
> 6 files changed, 1 insertion(+), 22 deletions(-)
>
> diff --git a/arch/arm/include/asm/efi.h b/arch/arm/include/asm/efi.h
> index 3ee4f4381985..0496bc96a092 100644
> --- a/arch/arm/include/asm/efi.h
> +++ b/arch/arm/include/asm/efi.h
> @@ -74,12 +74,6 @@ static inline void efifb_setup_from_dmi(struct screen_info *si, const char *opt)
> */
> #define EFI_PHYS_ALIGN SZ_16M
>
> -/* on ARM, the FDT should be located in a lowmem region */
> -static inline unsigned long efi_get_max_fdt_addr(unsigned long image_addr)
> -{
> - return round_down(image_addr, EFI_PHYS_ALIGN) + SZ_512M;
> -}
> -
> /* on ARM, the initrd should be loaded in a lowmem region */
> static inline unsigned long efi_get_max_initrd_addr(unsigned long image_addr)
> {
> diff --git a/arch/arm64/include/asm/efi.h b/arch/arm64/include/asm/efi.h
> index 973b14415271..01446a073b2e 100644
> --- a/arch/arm64/include/asm/efi.h
> +++ b/arch/arm64/include/asm/efi.h
> @@ -64,12 +64,6 @@ efi_status_t __efi_rt_asm_wrapper(void *, const char *, ...);
> #define EFI_KIMG_ALIGN \
> (SEGMENT_ALIGN > THREAD_ALIGN ? SEGMENT_ALIGN : THREAD_ALIGN)
>
> -/* on arm64, the FDT may be located anywhere in system RAM */
> -static inline unsigned long efi_get_max_fdt_addr(unsigned long image_addr)
> -{
> - return ULONG_MAX;
> -}
> -
> /*
> * On arm64, we have to ensure that the initrd ends up in the linear region,
> * which is a 1 GB aligned region of size '1UL << (VA_BITS_MIN - 1)' that is
> diff --git a/arch/riscv/include/asm/efi.h b/arch/riscv/include/asm/efi.h
> index 7542282f1141..6d98cd999680 100644
> --- a/arch/riscv/include/asm/efi.h
> +++ b/arch/riscv/include/asm/efi.h
> @@ -27,12 +27,6 @@ int efi_set_mapping_permissions(struct mm_struct *mm, efi_memory_desc_t *md);
>
> #define ARCH_EFI_IRQ_FLAGS_MASK (SR_IE | SR_SPIE)
>
> -/* on RISC-V, the FDT may be located anywhere in system RAM */
> -static inline unsigned long efi_get_max_fdt_addr(unsigned long image_addr)
> -{
> - return ULONG_MAX;
> -}
> -
> /* Load initrd at enough distance from DRAM start */
> static inline unsigned long efi_get_max_initrd_addr(unsigned long image_addr)
> {
> diff --git a/drivers/firmware/efi/libstub/efi-stub.c b/drivers/firmware/efi/libstub/efi-stub.c
> index 914a343c7785..ec2f3985bef3 100644
> --- a/drivers/firmware/efi/libstub/efi-stub.c
> +++ b/drivers/firmware/efi/libstub/efi-stub.c
> @@ -273,7 +273,6 @@ efi_status_t __efiapi efi_pe_entry(efi_handle_t handle,
> install_memreserve_table();
>
> status = allocate_new_fdt_and_exit_boot(handle, &fdt_addr,
> - efi_get_max_fdt_addr(image_addr),
> initrd_addr, initrd_size,
> cmdline_ptr, fdt_addr, fdt_size);
> if (status != EFI_SUCCESS)
> diff --git a/drivers/firmware/efi/libstub/efistub.h b/drivers/firmware/efi/libstub/efistub.h
> index 2d7abcd99de9..c1c63e847481 100644
> --- a/drivers/firmware/efi/libstub/efistub.h
> +++ b/drivers/firmware/efi/libstub/efistub.h
> @@ -750,7 +750,6 @@ efi_status_t efi_exit_boot_services(void *handle,
>
> efi_status_t allocate_new_fdt_and_exit_boot(void *handle,
> unsigned long *new_fdt_addr,
> - unsigned long max_addr,
> u64 initrd_addr, u64 initrd_size,
> char *cmdline_ptr,
> unsigned long fdt_addr,
> diff --git a/drivers/firmware/efi/libstub/fdt.c b/drivers/firmware/efi/libstub/fdt.c
> index 368cd60000ee..365c3a43a198 100644
> --- a/drivers/firmware/efi/libstub/fdt.c
> +++ b/drivers/firmware/efi/libstub/fdt.c
> @@ -238,7 +238,6 @@ static efi_status_t exit_boot_func(struct efi_boot_memmap *map,
>
> efi_status_t allocate_new_fdt_and_exit_boot(void *handle,
> unsigned long *new_fdt_addr,
> - unsigned long max_addr,
> u64 initrd_addr, u64 initrd_size,
> char *cmdline_ptr,
> unsigned long fdt_addr,
> @@ -275,7 +274,7 @@ efi_status_t allocate_new_fdt_and_exit_boot(void *handle,
> efi_info("Exiting boot services and installing virtual address map...\n");
>
> map.map = &memory_map;
> - status = efi_allocate_pages(MAX_FDT_SIZE, new_fdt_addr, max_addr);
> + status = efi_allocate_pages(MAX_FDT_SIZE, new_fdt_addr, ULONG_MAX);
> if (status != EFI_SUCCESS) {
> efi_err("Unable to allocate memory for new device tree.\n");
> goto fail;
> --
> 2.17.1
>
Reviewed-by: Atish Patra <atish.patra@wdc.com>
--
Regards,
Atish
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2020-10-29 18:02 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-10-29 13:49 [PATCH] efi: stub: get rid of efi_get_max_fdt_addr() Ard Biesheuvel
2020-10-29 18:01 ` Atish Patra
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox