All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yicong Yang <yangyicong@huawei.com>
To: Ard Biesheuvel <ardb@kernel.org>, <linux-efi@vger.kernel.org>
Cc: <yangyicong@hisilicon.com>,
	<linux-arm-kernel@lists.infradead.org>, <mark.rutland@arm.com>,
	<probinson@gmail.com>, <andersson@kernel.org>,
	<catalin.marinas@arm.com>, <will@kernel.org>,
	Linuxarm <linuxarm@huawei.com>
Subject: Re: [PATCH] efi/libstub: arm64: avoid SetVirtualAddressMap() when possible
Date: Wed, 19 Oct 2022 11:24:03 +0800	[thread overview]
Message-ID: <56877644-8173-d2ed-ed00-7973734a3698@huawei.com> (raw)
In-Reply-To: <20220916101843.495879-1-ardb@kernel.org>

Hi Ard,

After entering 6.1-rc1 the efi runtime services is not working on my platform:

[    0.054039] Remapping and enabling EFI services.
[    0.054043] UEFI virtual mapping missing or invalid -- runtime services will not be available

Not sure this patch is the root cause since I see some refactor of efi codes in 6.1-rc1,
but simply reverting this make EFI runtime services works again. Tested on HiSilicon's
Kunpeng 920 arm64 server using 48 bit VA address:

CONFIG_ARM64_VA_BITS_48=y
CONFIG_ARM64_VA_BITS=48

Thanks.

On 2022/9/16 18:18, Ard Biesheuvel wrote:
> EFI's SetVirtualAddressMap() runtime service is a horrid hack that we'd
> like to avoid using, if possible. For 64-bit architectures such as
> arm64, the user and kernel mappings are entirely disjoint, and given
> that we use the user region for mapping the UEFI runtime regions when
> running under the OS, we don't rely on SetVirtualAddressMap() in the
> conventional way, i.e., to permit kernel mappings of the OS to coexist
> with kernel region mappings of the firmware regions. This means that, in
> principle, we should be able to avoid SetVirtualAddressMap() altogether,
> and simply use the 1:1 mapping that UEFI uses at boot time. (Note that
> omitting SetVirtualAddressMap() is explicitly permitted by the UEFI
> spec).
> 
> However, there is a corner case on arm64, which, if configured for
> 3-level paging (or 2-level paging when using 64k pages), may not be able
> to cover the entire range of firmware mappings (which might contain both
> memory and MMIO peripheral mappings).
> 
> So let's avoid SetVirtualAddressMap() on arm64, but only if the VA space
> is guaranteed to be of sufficient size.
> 
> Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
> ---
>  drivers/firmware/efi/libstub/arm64-stub.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/drivers/firmware/efi/libstub/arm64-stub.c b/drivers/firmware/efi/libstub/arm64-stub.c
> index cd3bea25c762..4fff6c32899e 100644
> --- a/drivers/firmware/efi/libstub/arm64-stub.c
> +++ b/drivers/firmware/efi/libstub/arm64-stub.c
> @@ -31,6 +31,15 @@ efi_status_t check_platform_features(void)
>  			efi_err("This 16 KB granular kernel is not supported by your CPU\n");
>  		return EFI_UNSUPPORTED;
>  	}
> +
> +	/*
> +	 * If we have 48 bits of VA space for TTBR0 mappings, we can map the
> +	 * UEFI runtime regions 1:1 and so calling SetVirtualAddressMap() is
> +	 * unnecessary.
> +	 */
> +	if (VA_BITS_MIN >= 48)
> +		efi_novamap = true;
> +
>  	return EFI_SUCCESS;
>  }
>  
> 

WARNING: multiple messages have this Message-ID (diff)
From: Yicong Yang <yangyicong@huawei.com>
To: Ard Biesheuvel <ardb@kernel.org>, <linux-efi@vger.kernel.org>
Cc: <yangyicong@hisilicon.com>,
	<linux-arm-kernel@lists.infradead.org>, <mark.rutland@arm.com>,
	<probinson@gmail.com>, <andersson@kernel.org>,
	<catalin.marinas@arm.com>, <will@kernel.org>,
	Linuxarm <linuxarm@huawei.com>
Subject: Re: [PATCH] efi/libstub: arm64: avoid SetVirtualAddressMap() when possible
Date: Wed, 19 Oct 2022 11:24:03 +0800	[thread overview]
Message-ID: <56877644-8173-d2ed-ed00-7973734a3698@huawei.com> (raw)
In-Reply-To: <20220916101843.495879-1-ardb@kernel.org>

Hi Ard,

After entering 6.1-rc1 the efi runtime services is not working on my platform:

[    0.054039] Remapping and enabling EFI services.
[    0.054043] UEFI virtual mapping missing or invalid -- runtime services will not be available

Not sure this patch is the root cause since I see some refactor of efi codes in 6.1-rc1,
but simply reverting this make EFI runtime services works again. Tested on HiSilicon's
Kunpeng 920 arm64 server using 48 bit VA address:

CONFIG_ARM64_VA_BITS_48=y
CONFIG_ARM64_VA_BITS=48

Thanks.

On 2022/9/16 18:18, Ard Biesheuvel wrote:
> EFI's SetVirtualAddressMap() runtime service is a horrid hack that we'd
> like to avoid using, if possible. For 64-bit architectures such as
> arm64, the user and kernel mappings are entirely disjoint, and given
> that we use the user region for mapping the UEFI runtime regions when
> running under the OS, we don't rely on SetVirtualAddressMap() in the
> conventional way, i.e., to permit kernel mappings of the OS to coexist
> with kernel region mappings of the firmware regions. This means that, in
> principle, we should be able to avoid SetVirtualAddressMap() altogether,
> and simply use the 1:1 mapping that UEFI uses at boot time. (Note that
> omitting SetVirtualAddressMap() is explicitly permitted by the UEFI
> spec).
> 
> However, there is a corner case on arm64, which, if configured for
> 3-level paging (or 2-level paging when using 64k pages), may not be able
> to cover the entire range of firmware mappings (which might contain both
> memory and MMIO peripheral mappings).
> 
> So let's avoid SetVirtualAddressMap() on arm64, but only if the VA space
> is guaranteed to be of sufficient size.
> 
> Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
> ---
>  drivers/firmware/efi/libstub/arm64-stub.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/drivers/firmware/efi/libstub/arm64-stub.c b/drivers/firmware/efi/libstub/arm64-stub.c
> index cd3bea25c762..4fff6c32899e 100644
> --- a/drivers/firmware/efi/libstub/arm64-stub.c
> +++ b/drivers/firmware/efi/libstub/arm64-stub.c
> @@ -31,6 +31,15 @@ efi_status_t check_platform_features(void)
>  			efi_err("This 16 KB granular kernel is not supported by your CPU\n");
>  		return EFI_UNSUPPORTED;
>  	}
> +
> +	/*
> +	 * If we have 48 bits of VA space for TTBR0 mappings, we can map the
> +	 * UEFI runtime regions 1:1 and so calling SetVirtualAddressMap() is
> +	 * unnecessary.
> +	 */
> +	if (VA_BITS_MIN >= 48)
> +		efi_novamap = true;
> +
>  	return EFI_SUCCESS;
>  }
>  
> 

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2022-10-19  3:24 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-16 10:18 [PATCH] efi/libstub: arm64: avoid SetVirtualAddressMap() when possible Ard Biesheuvel
2022-09-16 10:18 ` Ard Biesheuvel
2022-09-16 10:20 ` Ard Biesheuvel
2022-09-16 10:20   ` Ard Biesheuvel
2022-10-19  3:24 ` Yicong Yang [this message]
2022-10-19  3:24   ` Yicong Yang
2022-10-20 12:39   ` Thorsten Leemhuis
2022-10-20 12:39     ` Thorsten Leemhuis
2022-10-20 13:04     ` Ard Biesheuvel
2022-10-20 13:04       ` Ard Biesheuvel
2022-10-21  1:59       ` Yicong Yang
2022-10-21  1:59         ` Yicong Yang
2022-10-23 14:58     ` [PATCH] efi/libstub: arm64: avoid SetVirtualAddressMap() when possible #forregzbot Thorsten Leemhuis
2022-10-23 14:58       ` Thorsten Leemhuis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=56877644-8173-d2ed-ed00-7973734a3698@huawei.com \
    --to=yangyicong@huawei.com \
    --cc=andersson@kernel.org \
    --cc=ardb@kernel.org \
    --cc=catalin.marinas@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-efi@vger.kernel.org \
    --cc=linuxarm@huawei.com \
    --cc=mark.rutland@arm.com \
    --cc=probinson@gmail.com \
    --cc=will@kernel.org \
    --cc=yangyicong@hisilicon.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.