lkml.org 
[lkml]   [2023]   [Oct]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v5 05/15] firmware: qcom: scm: enable the TZ mem allocator
    Date
    From: Bartosz Golaszewski <bartosz.golaszewski@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@linaro.org>
    Reviewed-by: Andrew Halaney <ahalaney@redhat.com>
    Tested-by: Andrew Halaney <ahalaney@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");
    +
    + __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.
    *
    --
    2.39.2
    \
     
     \ /
      Last update: 2023-10-17 11:30    [W:7.949 / U:0.456 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site