[RESEND PATCH v5 02/12] firmware: qcom: scm: enable the TZ mem allocator

Prasad Sodagudi quic_psodagud at quicinc.com
Mon Nov 20 22:35:00 PST 2023


On 11/20/2023 5:21 AM, Bartosz Golaszewski wrote:
> From: Bartosz Golaszewski <bartosz.golaszewski at linaro.org>
>
> Select the TrustZone memory allocator in Kconfig and create a pool of
> memory shareable with the TrustZone when probing the SCM driver.
>
> This will allow a gradual conversion of all relevant SCM calls to using
> the dedicated allocator.
>
> Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski at linaro.org>
> Reviewed-by: Andrew Halaney <ahalaney at redhat.com>
> Tested-by: Andrew Halaney <ahalaney at redhat.com> # sc8280xp-lenovo-thinkpad-x13s
> ---
>   drivers/firmware/qcom/Kconfig    |  1 +
>   drivers/firmware/qcom/qcom_scm.c | 16 ++++++++++++++++
>   2 files changed, 17 insertions(+)
>
> diff --git a/drivers/firmware/qcom/Kconfig b/drivers/firmware/qcom/Kconfig
> index b80269a28224..237da40de832 100644
> --- a/drivers/firmware/qcom/Kconfig
> +++ b/drivers/firmware/qcom/Kconfig
> @@ -7,6 +7,7 @@
>   menu "Qualcomm firmware drivers"
>   
>   config QCOM_SCM
> +	select QCOM_TZMEM
>   	tristate
>   
>   config QCOM_TZMEM
> diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c
> index 520de9b5633a..0d4c028be0c1 100644
> --- a/drivers/firmware/qcom/qcom_scm.c
> +++ b/drivers/firmware/qcom/qcom_scm.c
> @@ -8,8 +8,10 @@
>   #include <linux/completion.h>
>   #include <linux/cpumask.h>
>   #include <linux/dma-mapping.h>
> +#include <linux/err.h>
>   #include <linux/export.h>
>   #include <linux/firmware/qcom/qcom_scm.h>
> +#include <linux/firmware/qcom/qcom_tzmem.h>
>   #include <linux/init.h>
>   #include <linux/interconnect.h>
>   #include <linux/interrupt.h>
> @@ -20,9 +22,11 @@
>   #include <linux/of_platform.h>
>   #include <linux/platform_device.h>
>   #include <linux/reset-controller.h>
> +#include <linux/sizes.h>
>   #include <linux/types.h>
>   
>   #include "qcom_scm.h"
> +#include "qcom_tzmem.h"
>   
>   static bool download_mode = IS_ENABLED(CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT);
>   module_param(download_mode, bool, 0);
> @@ -41,6 +45,8 @@ struct qcom_scm {
>   	int scm_vote_count;
>   
>   	u64 dload_mode_addr;
> +
> +	struct qcom_tzmem_pool *mempool;
>   };
>   
>   struct qcom_scm_current_perm_info {
> @@ -1887,6 +1893,16 @@ static int qcom_scm_probe(struct platform_device *pdev)
>   	if (of_property_read_bool(pdev->dev.of_node, "qcom,sdi-enabled"))
>   		qcom_scm_disable_sdi();
>   
> +	ret = qcom_tzmem_enable(__scm->dev);
> +	if (ret)
> +		return dev_err_probe(__scm->dev, ret,
> +				     "Failed to enable the TrustZone memory allocator\n");

Based on my knowledge shmbridge is supported from sm8250 SoC in the 
firmware.

sdm845 and couple of other targets may not have support shmbridge 
support and probe will be fail for these targets right?

> +
> +	__scm->mempool = devm_qcom_tzmem_pool_new(__scm->dev, SZ_256K);
> +	if (IS_ERR(__scm->mempool))
> +		return dev_err_probe(__scm->dev, PTR_ERR(__scm->mempool),
> +				     "Failed to create the SCM memory pool\n");
> +
>   	/*
>   	 * Initialize the QSEECOM interface.
>   	 *



More information about the linux-arm-kernel mailing list