mirror of
https://github.com/Dasharo/linux.git
synced 2026-03-06 15:25:10 -08:00
firmware: Add support for Qualcomm UEFI Secure Application
On platforms using the Qualcomm UEFI Secure Application (uefisecapp), EFI variables cannot be accessed via the standard interface in EFI runtime mode. The respective functions return EFI_UNSUPPORTED. On these platforms, we instead need to talk to uefisecapp. This commit provides support for this and registers the respective efivars operations to access EFI variables from the kernel. Communication with uefisecapp follows the Qualcomm QSEECOM / Secure OS conventions via the respective SCM call interface. This is also the reason why variable access works normally while boot services are active. During this time, said SCM interface is managed by the boot services. When calling ExitBootServices(), the ownership is transferred to the kernel. Therefore, UEFI must not use that interface itself (as multiple parties accessing this interface at the same time may lead to complications) and cannot access variables for us. Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com> Acked-by: Ard Biesheuvel <ardb@kernel.org> Reviewed-by: Johan Hovold <johan+linaro@kernel.org> Link: https://lore.kernel.org/r/20230827211408.689076-4-luzmaximilian@gmail.com Signed-off-by: Bjorn Andersson <andersson@kernel.org>
This commit is contained in:
committed by
Bjorn Andersson
parent
00b1248606
commit
759e7a2b62
@@ -17806,6 +17806,12 @@ L: linux-arm-msm@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/firmware/qcom_qseecom.c
|
||||
|
||||
QUALCOMM QSEECOM UEFISECAPP DRIVER
|
||||
M: Maximilian Luz <luzmaximilian@gmail.com>
|
||||
L: linux-arm-msm@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/firmware/qcom_qseecom_uefisecapp.c
|
||||
|
||||
QUALCOMM RMNET DRIVER
|
||||
M: Subash Abhinov Kasiviswanathan <quic_subashab@quicinc.com>
|
||||
M: Sean Tranchetti <quic_stranche@quicinc.com>
|
||||
|
||||
@@ -242,6 +242,22 @@ config QCOM_QSEECOM
|
||||
|
||||
Select Y here to enable the QSEECOM interface driver.
|
||||
|
||||
config QCOM_QSEECOM_UEFISECAPP
|
||||
bool "Qualcomm SEE UEFI Secure App client driver"
|
||||
depends on QCOM_QSEECOM
|
||||
depends on EFI
|
||||
help
|
||||
Various Qualcomm SoCs do not allow direct access to EFI variables.
|
||||
Instead, these need to be accessed via the UEFI Secure Application
|
||||
(uefisecapp), residing in the Secure Execution Environment (SEE).
|
||||
|
||||
This module provides a client driver for uefisecapp, installing efivar
|
||||
operations to allow the kernel accessing EFI variables, and via that also
|
||||
provide user-space with access to EFI variables via efivarfs.
|
||||
|
||||
Select Y here to provide access to EFI variables on the aforementioned
|
||||
platforms.
|
||||
|
||||
config SYSFB
|
||||
bool
|
||||
select BOOT_VESA_SUPPORT
|
||||
|
||||
@@ -21,6 +21,7 @@ obj-$(CONFIG_FW_CFG_SYSFS) += qemu_fw_cfg.o
|
||||
obj-$(CONFIG_QCOM_SCM) += qcom-scm.o
|
||||
qcom-scm-objs += qcom_scm.o qcom_scm-smc.o qcom_scm-legacy.o
|
||||
obj-$(CONFIG_QCOM_QSEECOM) += qcom_qseecom.o
|
||||
obj-$(CONFIG_QCOM_QSEECOM_UEFISECAPP) += qcom_qseecom_uefisecapp.o
|
||||
obj-$(CONFIG_SYSFB) += sysfb.o
|
||||
obj-$(CONFIG_SYSFB_SIMPLEFB) += sysfb_simplefb.o
|
||||
obj-$(CONFIG_TI_SCI_PROTOCOL) += ti_sci.o
|
||||
|
||||
@@ -83,7 +83,9 @@ static int qseecom_client_register(struct platform_device *qseecom_dev,
|
||||
* assuming the app has already been loaded (usually by firmware bootloaders)
|
||||
* and its ID can be queried successfully.
|
||||
*/
|
||||
static const struct qseecom_app_desc qcom_qseecom_apps[] = {};
|
||||
static const struct qseecom_app_desc qcom_qseecom_apps[] = {
|
||||
{ "qcom.tz.uefisecapp", "uefisecapp" },
|
||||
};
|
||||
|
||||
static int qcom_qseecom_probe(struct platform_device *qseecom_dev)
|
||||
{
|
||||
|
||||
871
drivers/firmware/qcom_qseecom_uefisecapp.c
Normal file
871
drivers/firmware/qcom_qseecom_uefisecapp.c
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user