Commit 759e7a2b authored by Maximilian Luz's avatar Maximilian Luz Committed by Bjorn Andersson
Browse files

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: default avatarMaximilian Luz <luzmaximilian@gmail.com>
Acked-by: default avatarArd Biesheuvel <ardb@kernel.org>
Reviewed-by: default avatarJohan Hovold <johan+linaro@kernel.org>
Link: https://lore.kernel.org/r/20230827211408.689076-4-luzmaximilian@gmail.com


Signed-off-by: default avatarBjorn Andersson <andersson@kernel.org>
parent 00b12486
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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>
+16 −0
Original line number Diff line number Diff line
@@ -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
+1 −0
Original line number Diff line number Diff line
@@ -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
+3 −1
Original line number Diff line number Diff line
@@ -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 −0

File added.

Preview size limit exceeded, changes collapsed.