Thread struct qcom_scm through the driver's internal helpers
instead of reaching into the __scm singleton. Recover the
instance from the SCM device where a callback only provides
struct device or reset_controller_dev.

Exported function signatures are unchanged; the wrappers still
use __scm internally.

Signed-off-by: Albert Esteve <[email protected]>
---
 drivers/firmware/qcom/qcom_scm.c | 416 +++++++++++++++++++++++++--------------
 1 file changed, 263 insertions(+), 153 deletions(-)

diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c
index 3eaa4c9ccf3c..eac779f4855d 100644
--- a/drivers/firmware/qcom/qcom_scm.c
+++ b/drivers/firmware/qcom/qcom_scm.c
@@ -176,69 +176,69 @@ static const char * const download_mode_name[] = {
 
 static struct qcom_scm *__scm;
 
-static int qcom_scm_clk_enable(void)
+static int qcom_scm_clk_enable(struct qcom_scm *scm)
 {
        int ret;
 
-       ret = clk_prepare_enable(__scm->core_clk);
+       ret = clk_prepare_enable(scm->core_clk);
        if (ret)
                goto bail;
 
-       ret = clk_prepare_enable(__scm->iface_clk);
+       ret = clk_prepare_enable(scm->iface_clk);
        if (ret)
                goto disable_core;
 
-       ret = clk_prepare_enable(__scm->bus_clk);
+       ret = clk_prepare_enable(scm->bus_clk);
        if (ret)
                goto disable_iface;
 
        return 0;
 
 disable_iface:
-       clk_disable_unprepare(__scm->iface_clk);
+       clk_disable_unprepare(scm->iface_clk);
 disable_core:
-       clk_disable_unprepare(__scm->core_clk);
+       clk_disable_unprepare(scm->core_clk);
 bail:
        return ret;
 }
 
-static void qcom_scm_clk_disable(void)
+static void qcom_scm_clk_disable(struct qcom_scm *scm)
 {
-       clk_disable_unprepare(__scm->core_clk);
-       clk_disable_unprepare(__scm->iface_clk);
-       clk_disable_unprepare(__scm->bus_clk);
+       clk_disable_unprepare(scm->core_clk);
+       clk_disable_unprepare(scm->iface_clk);
+       clk_disable_unprepare(scm->bus_clk);
 }
 
-static int qcom_scm_bw_enable(void)
+static int qcom_scm_bw_enable(struct qcom_scm *scm)
 {
        int ret = 0;
 
-       if (!__scm->path)
+       if (!scm->path)
                return 0;
 
-       guard(mutex)(&__scm->scm_bw_lock);
+       guard(mutex)(&scm->scm_bw_lock);
 
-       if (!__scm->scm_vote_count) {
-               ret = icc_set_bw(__scm->path, 0, UINT_MAX);
+       if (!scm->scm_vote_count) {
+               ret = icc_set_bw(scm->path, 0, UINT_MAX);
                if (ret < 0) {
-                       dev_err(__scm->dev, "failed to set bandwidth 
request\n");
+                       dev_err(scm->dev, "failed to set bandwidth request\n");
                        return ret;
                }
        }
-       __scm->scm_vote_count++;
+       scm->scm_vote_count++;
 
        return 0;
 }
 
-static void qcom_scm_bw_disable(void)
+static void qcom_scm_bw_disable(struct qcom_scm *scm)
 {
-       if (!__scm->path)
+       if (!scm->path)
                return;
 
-       mutex_lock(&__scm->scm_bw_lock);
-       if (__scm->scm_vote_count-- == 1)
-               icc_set_bw(__scm->path, 0, 0);
-       mutex_unlock(&__scm->scm_bw_lock);
+       mutex_lock(&scm->scm_bw_lock);
+       if (scm->scm_vote_count-- == 1)
+               icc_set_bw(scm->path, 0, 0);
+       mutex_unlock(&scm->scm_bw_lock);
 }
 
 enum qcom_scm_convention qcom_scm_convention = SMC_CONVENTION_UNKNOWN;
@@ -252,7 +252,7 @@ struct qcom_tzmem_pool *qcom_scm_get_tzmem_pool(void)
        return __scm->mempool;
 }
 
-static enum qcom_scm_convention __get_convention(void)
+static enum qcom_scm_convention __get_convention(struct device *dev)
 {
        unsigned long flags;
        struct qcom_scm_desc desc = {
@@ -294,7 +294,7 @@ static enum qcom_scm_convention __get_convention(void)
         * early calls into the firmware on these SoCs so the device pointer
         * will be valid here to check if the compatible matches.
         */
-       if (of_device_is_compatible(__scm ? __scm->dev->of_node : NULL, 
"qcom,scm-sc7180")) {
+       if (of_device_is_compatible(dev ? dev->of_node : NULL, 
"qcom,scm-sc7180")) {
                forced = true;
                goto found;
        }
@@ -332,7 +332,7 @@ static int qcom_scm_call(struct device *dev, const struct 
qcom_scm_desc *desc,
                         struct qcom_scm_res *res)
 {
        might_sleep();
-       switch (__get_convention()) {
+       switch (__get_convention(dev)) {
        case SMC_CONVENTION_ARM_32:
        case SMC_CONVENTION_ARM_64:
                return scm_smc_call(dev, desc, res, false);
@@ -357,7 +357,7 @@ static int qcom_scm_call_atomic(struct device *dev,
                                const struct qcom_scm_desc *desc,
                                struct qcom_scm_res *res)
 {
-       switch (__get_convention()) {
+       switch (__get_convention(dev)) {
        case SMC_CONVENTION_ARM_32:
        case SMC_CONVENTION_ARM_64:
                return scm_smc_call(dev, desc, res, true);
@@ -381,7 +381,7 @@ static bool __qcom_scm_is_call_available(struct device 
*dev, u32 svc_id,
        struct qcom_scm_res res;
 
        desc.arginfo = QCOM_SCM_ARGS(1);
-       switch (__get_convention()) {
+       switch (__get_convention(dev)) {
        case SMC_CONVENTION_ARM_32:
        case SMC_CONVENTION_ARM_64:
                desc.args[0] = SCM_SMC_FNID(svc_id, cmd_id) |
@@ -400,7 +400,7 @@ static bool __qcom_scm_is_call_available(struct device 
*dev, u32 svc_id,
        return ret ? false : !!res.result[0];
 }
 
-static int qcom_scm_set_boot_addr(void *entry, const u8 *cpu_bits)
+static int qcom_scm_set_boot_addr(struct qcom_scm *scm, void *entry, const u8 
*cpu_bits)
 {
        int cpu;
        unsigned int flags = 0;
@@ -420,10 +420,10 @@ static int qcom_scm_set_boot_addr(void *entry, const u8 
*cpu_bits)
        desc.args[0] = flags;
        desc.args[1] = virt_to_phys(entry);
 
-       return qcom_scm_call_atomic(__scm ? __scm->dev : NULL, &desc, NULL);
+       return qcom_scm_call_atomic(scm ? scm->dev : NULL, &desc, NULL);
 }
 
-static int qcom_scm_set_boot_addr_mc(void *entry, unsigned int flags)
+static int qcom_scm_set_boot_addr_mc(struct qcom_scm *scm, void *entry, 
unsigned int flags)
 {
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_BOOT,
@@ -439,10 +439,10 @@ static int qcom_scm_set_boot_addr_mc(void *entry, 
unsigned int flags)
        };
 
        /* Need a device for DMA of the additional arguments */
-       if (!__scm || __get_convention() == SMC_CONVENTION_LEGACY)
+       if (!scm || __get_convention(scm->dev) == SMC_CONVENTION_LEGACY)
                return -EOPNOTSUPP;
 
-       return qcom_scm_call(__scm->dev, &desc, NULL);
+       return qcom_scm_call(scm->dev, &desc, NULL);
 }
 
 /**
@@ -454,9 +454,11 @@ static int qcom_scm_set_boot_addr_mc(void *entry, unsigned 
int flags)
  */
 int qcom_scm_set_warm_boot_addr(void *entry)
 {
-       if (qcom_scm_set_boot_addr_mc(entry, QCOM_SCM_BOOT_MC_FLAG_WARMBOOT))
+       struct qcom_scm *scm = __scm;
+
+       if (qcom_scm_set_boot_addr_mc(scm, entry, 
QCOM_SCM_BOOT_MC_FLAG_WARMBOOT))
                /* Fallback to old SCM call */
-               return qcom_scm_set_boot_addr(entry, qcom_scm_cpu_warm_bits);
+               return qcom_scm_set_boot_addr(scm, entry, 
qcom_scm_cpu_warm_bits);
        return 0;
 }
 EXPORT_SYMBOL_GPL(qcom_scm_set_warm_boot_addr);
@@ -467,9 +469,11 @@ EXPORT_SYMBOL_GPL(qcom_scm_set_warm_boot_addr);
  */
 int qcom_scm_set_cold_boot_addr(void *entry)
 {
-       if (qcom_scm_set_boot_addr_mc(entry, QCOM_SCM_BOOT_MC_FLAG_COLDBOOT))
+       struct qcom_scm *scm = __scm;
+
+       if (qcom_scm_set_boot_addr_mc(scm, entry, 
QCOM_SCM_BOOT_MC_FLAG_COLDBOOT))
                /* Fallback to old SCM call */
-               return qcom_scm_set_boot_addr(entry, qcom_scm_cpu_cold_bits);
+               return qcom_scm_set_boot_addr(scm, entry, 
qcom_scm_cpu_cold_bits);
        return 0;
 }
 EXPORT_SYMBOL_GPL(qcom_scm_set_cold_boot_addr);
@@ -484,6 +488,8 @@ EXPORT_SYMBOL_GPL(qcom_scm_set_cold_boot_addr);
  */
 void qcom_scm_cpu_power_down(u32 flags)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_BOOT,
                .cmd = QCOM_SCM_BOOT_TERMINATE_PC,
@@ -492,11 +498,11 @@ void qcom_scm_cpu_power_down(u32 flags)
                .owner = ARM_SMCCC_OWNER_SIP,
        };
 
-       qcom_scm_call_atomic(__scm ? __scm->dev : NULL, &desc, NULL);
+       qcom_scm_call_atomic(scm ? scm->dev : NULL, &desc, NULL);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_cpu_power_down);
 
-static int qcom_scm_disable_sdi(void)
+static int qcom_scm_disable_sdi(struct qcom_scm *scm)
 {
        int ret;
        struct qcom_scm_desc desc = {
@@ -509,17 +515,17 @@ static int qcom_scm_disable_sdi(void)
        };
        struct qcom_scm_res res;
 
-       ret = qcom_scm_clk_enable();
+       ret = qcom_scm_clk_enable(scm);
        if (ret)
                return ret;
-       ret = qcom_scm_call(__scm->dev, &desc, &res);
+       ret = qcom_scm_call(scm->dev, &desc, &res);
 
-       qcom_scm_clk_disable();
+       qcom_scm_clk_disable(scm);
 
        return ret ? : res.result[0];
 }
 
-static int __qcom_scm_set_dload_mode(struct device *dev, bool enable)
+static int __qcom_scm_set_dload_mode(struct qcom_scm *scm, bool enable)
 {
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_BOOT,
@@ -531,10 +537,11 @@ static int __qcom_scm_set_dload_mode(struct device *dev, 
bool enable)
 
        desc.args[1] = enable ? QCOM_SCM_BOOT_SET_DLOAD_MODE : 0;
 
-       return qcom_scm_call_atomic(__scm->dev, &desc, NULL);
+       return qcom_scm_call_atomic(scm->dev, &desc, NULL);
 }
 
-static int qcom_scm_io_rmw(phys_addr_t addr, unsigned int mask, unsigned int 
val)
+static int qcom_scm_io_rmw(struct qcom_scm *scm, phys_addr_t addr,
+                          unsigned int mask, unsigned int val)
 {
        unsigned int old;
        unsigned int new;
@@ -554,11 +561,11 @@ static void qcom_scm_set_download_mode(struct qcom_scm 
*scm, u32 dload_mode)
        int ret = 0;
 
        if (scm->dload_mode_addr) {
-               ret = qcom_scm_io_rmw(scm->dload_mode_addr, QCOM_DLOAD_MASK,
+               ret = qcom_scm_io_rmw(scm, scm->dload_mode_addr, 
QCOM_DLOAD_MASK,
                                      FIELD_PREP(QCOM_DLOAD_MASK, dload_mode));
        } else if (__qcom_scm_is_call_available(scm->dev, QCOM_SCM_SVC_BOOT,
                                                QCOM_SCM_BOOT_SET_DLOAD_MODE)) {
-               ret = __qcom_scm_set_dload_mode(scm->dev, !!dload_mode);
+               ret = __qcom_scm_set_dload_mode(scm, !!dload_mode);
        } else if (dload_mode) {
                dev_err(scm->dev,
                        "No available mechanism for setting download mode\n");
@@ -607,23 +614,24 @@ static int __qcom_scm_pas_init_image(struct device *dev, 
u32 pas_id,
                .args[0] = pas_id,
                .owner = ARM_SMCCC_OWNER_SIP,
        };
+       struct qcom_scm *scm = dev_get_drvdata(dev);
        int ret;
 
-       ret = qcom_scm_clk_enable();
+       ret = qcom_scm_clk_enable(scm);
        if (ret)
                return ret;
 
-       ret = qcom_scm_bw_enable();
+       ret = qcom_scm_bw_enable(scm);
        if (ret)
                goto disable_clk;
 
        desc.args[1] = mdata_phys;
 
        ret = qcom_scm_call(dev, &desc, res);
-       qcom_scm_bw_disable();
+       qcom_scm_bw_disable(scm);
 
 disable_clk:
-       qcom_scm_clk_disable();
+       qcom_scm_clk_disable(scm);
 
        return ret;
 }
@@ -632,12 +640,13 @@ static int qcom_scm_pas_prep_and_init_image(struct device 
*dev,
                                            struct qcom_pas_context *ctx,
                                            const void *metadata, size_t size)
 {
+       struct qcom_scm *scm = dev_get_drvdata(dev);
        struct qcom_scm_res res;
        phys_addr_t mdata_phys;
        void *mdata_buf;
        int ret;
 
-       mdata_buf = qcom_tzmem_alloc(__scm->mempool, size, GFP_KERNEL);
+       mdata_buf = qcom_tzmem_alloc(scm->mempool, size, GFP_KERNEL);
        if (!mdata_buf)
                return -ENOMEM;
 
@@ -698,7 +707,9 @@ static int __qcom_scm_pas_init_image2(struct device *dev, 
u32 pas_id,
 int qcom_scm_pas_init_image(u32 pas_id, const void *metadata, size_t size,
                            struct qcom_scm_pas_context *ctx)
 {
-       return __qcom_scm_pas_init_image2(__scm->dev, pas_id, metadata, size,
+       struct qcom_scm *scm = __scm;
+
+       return __qcom_scm_pas_init_image2(scm->dev, pas_id, metadata, size,
                                          (struct qcom_pas_context *)ctx);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_pas_init_image);
@@ -716,7 +727,9 @@ static void __qcom_scm_pas_metadata_release(struct device 
*dev,
 
 void qcom_scm_pas_metadata_release(struct qcom_scm_pas_context *ctx)
 {
-       __qcom_scm_pas_metadata_release(__scm->dev,
+       struct qcom_scm *scm = __scm;
+
+       __qcom_scm_pas_metadata_release(scm->dev,
                                        (struct qcom_pas_context *)ctx);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_pas_metadata_release);
@@ -724,6 +737,7 @@ EXPORT_SYMBOL_GPL(qcom_scm_pas_metadata_release);
 static int __qcom_scm_pas_mem_setup(struct device *dev, u32 pas_id,
                                    phys_addr_t addr, phys_addr_t size)
 {
+       struct qcom_scm *scm = dev_get_drvdata(dev);
        int ret;
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_PIL,
@@ -736,26 +750,28 @@ static int __qcom_scm_pas_mem_setup(struct device *dev, 
u32 pas_id,
        };
        struct qcom_scm_res res;
 
-       ret = qcom_scm_clk_enable();
+       ret = qcom_scm_clk_enable(scm);
        if (ret)
                return ret;
 
-       ret = qcom_scm_bw_enable();
+       ret = qcom_scm_bw_enable(scm);
        if (ret)
                goto disable_clk;
 
        ret = qcom_scm_call(dev, &desc, &res);
-       qcom_scm_bw_disable();
+       qcom_scm_bw_disable(scm);
 
 disable_clk:
-       qcom_scm_clk_disable();
+       qcom_scm_clk_disable(scm);
 
        return ret ? : res.result[0];
 }
 
 int qcom_scm_pas_mem_setup(u32 pas_id, phys_addr_t addr, phys_addr_t size)
 {
-       return __qcom_scm_pas_mem_setup(__scm->dev, pas_id, addr, size);
+       struct qcom_scm *scm = __scm;
+
+       return __qcom_scm_pas_mem_setup(scm->dev, pas_id, addr, size);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_pas_mem_setup);
 
@@ -764,6 +780,7 @@ static void *__qcom_scm_pas_get_rsc_table(struct device 
*dev, u32 pas_id,
                                          size_t input_rt_size,
                                          size_t *output_rt_size)
 {
+       struct qcom_scm *scm = dev_get_drvdata(dev);
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_PIL,
                .cmd = QCOM_SCM_PIL_PAS_GET_RSCTABLE,
@@ -776,7 +793,7 @@ static void *__qcom_scm_pas_get_rsc_table(struct device 
*dev, u32 pas_id,
        void *output_rt_tzm;
        int ret;
 
-       output_rt_tzm = qcom_tzmem_alloc(__scm->mempool, *output_rt_size, 
GFP_KERNEL);
+       output_rt_tzm = qcom_tzmem_alloc(scm->mempool, *output_rt_size, 
GFP_KERNEL);
        if (!output_rt_tzm)
                return ERR_PTR(-ENOMEM);
 
@@ -818,6 +835,7 @@ static void *__qcom_scm_pas_get_rsc_table2(struct device 
*dev,
                                           size_t input_rt_size,
                                           size_t *output_rt_size)
 {
+       struct qcom_scm *scm = dev_get_drvdata(dev);
        struct resource_table empty_rsc = {};
        size_t size = SZ_16K;
        void *output_rt_tzm;
@@ -825,11 +843,11 @@ static void *__qcom_scm_pas_get_rsc_table2(struct device 
*dev,
        void *tbl_ptr;
        int ret;
 
-       ret = qcom_scm_clk_enable();
+       ret = qcom_scm_clk_enable(scm);
        if (ret)
                return ERR_PTR(ret);
 
-       ret = qcom_scm_bw_enable();
+       ret = qcom_scm_bw_enable(scm);
        if (ret)
                goto disable_clk;
 
@@ -843,7 +861,7 @@ static void *__qcom_scm_pas_get_rsc_table2(struct device 
*dev,
                input_rt_size = sizeof(empty_rsc);
        }
 
-       input_rt_tzm = qcom_tzmem_alloc(__scm->mempool, input_rt_size, 
GFP_KERNEL);
+       input_rt_tzm = qcom_tzmem_alloc(scm->mempool, input_rt_size, 
GFP_KERNEL);
        if (!input_rt_tzm) {
                ret = -ENOMEM;
                goto disable_scm_bw;
@@ -879,10 +897,10 @@ static void *__qcom_scm_pas_get_rsc_table2(struct device 
*dev,
        qcom_tzmem_free(input_rt_tzm);
 
 disable_scm_bw:
-       qcom_scm_bw_disable();
+       qcom_scm_bw_disable(scm);
 
 disable_clk:
-       qcom_scm_clk_disable();
+       qcom_scm_clk_disable(scm);
 
        return ret ? ERR_PTR(ret) : tbl_ptr;
 }
@@ -892,7 +910,9 @@ struct resource_table *qcom_scm_pas_get_rsc_table(struct 
qcom_scm_pas_context *c
                                                  size_t input_rt_size,
                                                  size_t *output_rt_size)
 {
-       return __qcom_scm_pas_get_rsc_table2(__scm->dev,
+       struct qcom_scm *scm = __scm;
+
+       return __qcom_scm_pas_get_rsc_table2(scm->dev,
                                             (struct qcom_pas_context *)ctx,
                                             input_rt, input_rt_size,
                                             output_rt_size);
@@ -901,6 +921,7 @@ EXPORT_SYMBOL_GPL(qcom_scm_pas_get_rsc_table);
 
 static int __qcom_scm_pas_auth_and_reset(struct device *dev, u32 pas_id)
 {
+       struct qcom_scm *scm = dev_get_drvdata(dev);
        int ret;
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_PIL,
@@ -911,26 +932,28 @@ static int __qcom_scm_pas_auth_and_reset(struct device 
*dev, u32 pas_id)
        };
        struct qcom_scm_res res;
 
-       ret = qcom_scm_clk_enable();
+       ret = qcom_scm_clk_enable(scm);
        if (ret)
                return ret;
 
-       ret = qcom_scm_bw_enable();
+       ret = qcom_scm_bw_enable(scm);
        if (ret)
                goto disable_clk;
 
        ret = qcom_scm_call(dev, &desc, &res);
-       qcom_scm_bw_disable();
+       qcom_scm_bw_disable(scm);
 
 disable_clk:
-       qcom_scm_clk_disable();
+       qcom_scm_clk_disable(scm);
 
        return ret ? : res.result[0];
 }
 
 int qcom_scm_pas_auth_and_reset(u32 pas_id)
 {
-       return __qcom_scm_pas_auth_and_reset(__scm->dev, pas_id);
+       struct qcom_scm *scm = __scm;
+
+       return __qcom_scm_pas_auth_and_reset(scm->dev, pas_id);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_pas_auth_and_reset);
 
@@ -964,7 +987,9 @@ static int __qcom_scm_pas_prepare_and_auth_reset(struct 
device *dev,
 
 int qcom_scm_pas_prepare_and_auth_reset(struct qcom_scm_pas_context *ctx)
 {
-       return __qcom_scm_pas_prepare_and_auth_reset(__scm->dev,
+       struct qcom_scm *scm = __scm;
+
+       return __qcom_scm_pas_prepare_and_auth_reset(scm->dev,
                                                     (struct qcom_pas_context 
*)ctx);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_pas_prepare_and_auth_reset);
@@ -990,12 +1015,15 @@ static int __qcom_scm_pas_set_remote_state(struct device 
*dev, u32 state,
 
 int qcom_scm_set_remote_state(u32 state, u32 id)
 {
-       return __qcom_scm_pas_set_remote_state(__scm->dev, state, id);
+       struct qcom_scm *scm = __scm;
+
+       return __qcom_scm_pas_set_remote_state(scm->dev, state, id);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_set_remote_state);
 
 static int __qcom_scm_pas_shutdown(struct device *dev, u32 pas_id)
 {
+       struct qcom_scm *scm = dev_get_drvdata(dev);
        int ret;
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_PIL,
@@ -1006,26 +1034,28 @@ static int __qcom_scm_pas_shutdown(struct device *dev, 
u32 pas_id)
        };
        struct qcom_scm_res res;
 
-       ret = qcom_scm_clk_enable();
+       ret = qcom_scm_clk_enable(scm);
        if (ret)
                return ret;
 
-       ret = qcom_scm_bw_enable();
+       ret = qcom_scm_bw_enable(scm);
        if (ret)
                goto disable_clk;
 
        ret = qcom_scm_call(dev, &desc, &res);
-       qcom_scm_bw_disable();
+       qcom_scm_bw_disable(scm);
 
 disable_clk:
-       qcom_scm_clk_disable();
+       qcom_scm_clk_disable(scm);
 
        return ret ? : res.result[0];
 }
 
 int qcom_scm_pas_shutdown(u32 pas_id)
 {
-       return __qcom_scm_pas_shutdown(__scm->dev, pas_id);
+       struct qcom_scm *scm = __scm;
+
+       return __qcom_scm_pas_shutdown(scm->dev, pas_id);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_pas_shutdown);
 
@@ -1052,7 +1082,9 @@ static bool __qcom_scm_pas_supported(struct device *dev, 
u32 pas_id)
 
 bool qcom_scm_pas_supported(u32 pas_id)
 {
-       return __qcom_scm_pas_supported(__scm->dev, pas_id);
+       struct qcom_scm *scm = __scm;
+
+       return __qcom_scm_pas_supported(scm->dev, pas_id);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_pas_supported);
 
@@ -1075,16 +1107,16 @@ static struct qcom_pas_ops qcom_pas_ops_scm = {
  *
  * Returns true if PAS is available, otherwise false.
  */
-static bool qcom_scm_is_pas_available(void)
+static bool qcom_scm_is_pas_available(struct qcom_scm *scm)
 {
-       if (!__qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_PIL,
+       if (!__qcom_scm_is_call_available(scm->dev, QCOM_SCM_SVC_PIL,
                                          QCOM_SCM_PIL_PAS_AUTH_AND_RESET))
                return false;
 
        return true;
 }
 
-static int __qcom_scm_pas_mss_reset(struct device *dev, bool reset)
+static int __qcom_scm_pas_mss_reset(struct qcom_scm *scm, bool reset)
 {
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_PIL,
@@ -1097,7 +1129,7 @@ static int __qcom_scm_pas_mss_reset(struct device *dev, 
bool reset)
        struct qcom_scm_res res;
        int ret;
 
-       ret = qcom_scm_call(__scm->dev, &desc, &res);
+       ret = qcom_scm_call(scm->dev, &desc, &res);
 
        return ret ? : res.result[0];
 }
@@ -1105,19 +1137,23 @@ static int __qcom_scm_pas_mss_reset(struct device *dev, 
bool reset)
 static int qcom_scm_pas_reset_assert(struct reset_controller_dev *rcdev,
                                     unsigned long idx)
 {
+       struct qcom_scm *scm = container_of(rcdev, struct qcom_scm, reset);
+
        if (idx != 0)
                return -EINVAL;
 
-       return __qcom_scm_pas_mss_reset(__scm->dev, 1);
+       return __qcom_scm_pas_mss_reset(scm, 1);
 }
 
 static int qcom_scm_pas_reset_deassert(struct reset_controller_dev *rcdev,
                                       unsigned long idx)
 {
+       struct qcom_scm *scm = container_of(rcdev, struct qcom_scm, reset);
+
        if (idx != 0)
                return -EINVAL;
 
-       return __qcom_scm_pas_mss_reset(__scm->dev, 0);
+       return __qcom_scm_pas_mss_reset(scm, 0);
 }
 
 static const struct reset_control_ops qcom_scm_pas_reset_ops = {
@@ -1127,6 +1163,8 @@ static const struct reset_control_ops 
qcom_scm_pas_reset_ops = {
 
 int qcom_scm_io_readl(phys_addr_t addr, unsigned int *val)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_IO,
                .cmd = QCOM_SCM_IO_READ,
@@ -1138,7 +1176,7 @@ int qcom_scm_io_readl(phys_addr_t addr, unsigned int *val)
        int ret;
 
 
-       ret = qcom_scm_call_atomic(__scm->dev, &desc, &res);
+       ret = qcom_scm_call_atomic(scm->dev, &desc, &res);
        if (ret >= 0)
                *val = res.result[0];
 
@@ -1148,6 +1186,8 @@ EXPORT_SYMBOL_GPL(qcom_scm_io_readl);
 
 int qcom_scm_io_writel(phys_addr_t addr, unsigned int val)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_IO,
                .cmd = QCOM_SCM_IO_WRITE,
@@ -1157,7 +1197,7 @@ int qcom_scm_io_writel(phys_addr_t addr, unsigned int val)
                .owner = ARM_SMCCC_OWNER_SIP,
        };
 
-       return qcom_scm_call_atomic(__scm->dev, &desc, NULL);
+       return qcom_scm_call_atomic(scm->dev, &desc, NULL);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_io_writel);
 
@@ -1169,13 +1209,17 @@ EXPORT_SYMBOL_GPL(qcom_scm_io_writel);
  */
 bool qcom_scm_restore_sec_cfg_available(void)
 {
-       return __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_MP,
+       struct qcom_scm *scm = __scm;
+
+       return __qcom_scm_is_call_available(scm->dev, QCOM_SCM_SVC_MP,
                                            QCOM_SCM_MP_RESTORE_SEC_CFG);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_restore_sec_cfg_available);
 
 int qcom_scm_restore_sec_cfg(u32 device_id, u32 spare)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_MP,
                .cmd = QCOM_SCM_MP_RESTORE_SEC_CFG,
@@ -1187,7 +1231,7 @@ int qcom_scm_restore_sec_cfg(u32 device_id, u32 spare)
        struct qcom_scm_res res;
        int ret;
 
-       ret = qcom_scm_call(__scm->dev, &desc, &res);
+       ret = qcom_scm_call(scm->dev, &desc, &res);
 
        return ret ? : res.result[0];
 }
@@ -1197,13 +1241,17 @@ EXPORT_SYMBOL_GPL(qcom_scm_restore_sec_cfg);
 
 bool qcom_scm_set_gpu_smmu_aperture_is_available(void)
 {
-       return __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_MP,
+       struct qcom_scm *scm = __scm;
+
+       return __qcom_scm_is_call_available(scm->dev, QCOM_SCM_SVC_MP,
                                            QCOM_SCM_MP_CP_SMMU_APERTURE_ID);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_set_gpu_smmu_aperture_is_available);
 
 int qcom_scm_set_gpu_smmu_aperture(unsigned int context_bank)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_MP,
                .cmd = QCOM_SCM_MP_CP_SMMU_APERTURE_ID,
@@ -1215,12 +1263,14 @@ int qcom_scm_set_gpu_smmu_aperture(unsigned int 
context_bank)
                .owner = ARM_SMCCC_OWNER_SIP
        };
 
-       return qcom_scm_call(__scm->dev, &desc, NULL);
+       return qcom_scm_call(scm->dev, &desc, NULL);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_set_gpu_smmu_aperture);
 
 int qcom_scm_iommu_secure_ptbl_size(u32 spare, size_t *size)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_MP,
                .cmd = QCOM_SCM_MP_IOMMU_SECURE_PTBL_SIZE,
@@ -1231,7 +1281,7 @@ int qcom_scm_iommu_secure_ptbl_size(u32 spare, size_t 
*size)
        struct qcom_scm_res res;
        int ret;
 
-       ret = qcom_scm_call(__scm->dev, &desc, &res);
+       ret = qcom_scm_call(scm->dev, &desc, &res);
 
        if (size)
                *size = res.result[0];
@@ -1242,6 +1292,8 @@ EXPORT_SYMBOL_GPL(qcom_scm_iommu_secure_ptbl_size);
 
 int qcom_scm_iommu_secure_ptbl_init(u64 addr, u32 size, u32 spare)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_MP,
                .cmd = QCOM_SCM_MP_IOMMU_SECURE_PTBL_INIT,
@@ -1254,7 +1306,7 @@ int qcom_scm_iommu_secure_ptbl_init(u64 addr, u32 size, 
u32 spare)
        };
        int ret;
 
-       ret = qcom_scm_call(__scm->dev, &desc, NULL);
+       ret = qcom_scm_call(scm->dev, &desc, NULL);
 
        /* the pg table has been initialized already, ignore the error */
        if (ret == -EPERM)
@@ -1266,6 +1318,8 @@ EXPORT_SYMBOL_GPL(qcom_scm_iommu_secure_ptbl_init);
 
 int qcom_scm_iommu_set_cp_pool_size(u32 spare, u32 size)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_MP,
                .cmd = QCOM_SCM_MP_IOMMU_SET_CP_POOL_SIZE,
@@ -1275,7 +1329,7 @@ int qcom_scm_iommu_set_cp_pool_size(u32 spare, u32 size)
                .owner = ARM_SMCCC_OWNER_SIP,
        };
 
-       return qcom_scm_call(__scm->dev, &desc, NULL);
+       return qcom_scm_call(scm->dev, &desc, NULL);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_iommu_set_cp_pool_size);
 
@@ -1283,6 +1337,8 @@ int qcom_scm_mem_protect_video_var(u32 cp_start, u32 
cp_size,
                                   u32 cp_nonpixel_start,
                                   u32 cp_nonpixel_size)
 {
+       struct qcom_scm *scm = __scm;
+
        int ret;
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_MP,
@@ -1297,7 +1353,7 @@ int qcom_scm_mem_protect_video_var(u32 cp_start, u32 
cp_size,
        };
        struct qcom_scm_res res;
 
-       ret = qcom_scm_call(__scm->dev, &desc, &res);
+       ret = qcom_scm_call(scm->dev, &desc, &res);
 
        return ret ? : res.result[0];
 }
@@ -1347,6 +1403,8 @@ int qcom_scm_assign_mem(phys_addr_t mem_addr, size_t 
mem_sz,
                        const struct qcom_scm_vmperm *newvm,
                        unsigned int dest_cnt)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_current_perm_info *destvm;
        struct qcom_scm_mem_map_info *mem_to_map;
        phys_addr_t mem_to_map_phys;
@@ -1367,7 +1425,7 @@ int qcom_scm_assign_mem(phys_addr_t mem_addr, size_t 
mem_sz,
        ptr_sz = ALIGN(src_sz, SZ_64) + ALIGN(mem_to_map_sz, SZ_64) +
                        ALIGN(dest_sz, SZ_64);
 
-       void *ptr __free(qcom_tzmem) = qcom_tzmem_alloc(__scm->mempool,
+       void *ptr __free(qcom_tzmem) = qcom_tzmem_alloc(scm->mempool,
                                                        ptr_sz, GFP_KERNEL);
        if (!ptr)
                return -ENOMEM;
@@ -1400,10 +1458,10 @@ int qcom_scm_assign_mem(phys_addr_t mem_addr, size_t 
mem_sz,
                next_vm |= BIT(newvm->vmid);
        }
 
-       ret = __qcom_scm_assign_mem(__scm->dev, mem_to_map_phys, mem_to_map_sz,
+       ret = __qcom_scm_assign_mem(scm->dev, mem_to_map_phys, mem_to_map_sz,
                                    ptr_phys, src_sz, dest_phys, dest_sz);
        if (ret) {
-               dev_err(__scm->dev,
+               dev_err(scm->dev,
                        "Assign memory protection call failed %d\n", ret);
                return ret;
        }
@@ -1418,7 +1476,9 @@ EXPORT_SYMBOL_GPL(qcom_scm_assign_mem);
  */
 bool qcom_scm_ocmem_lock_available(void)
 {
-       return __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_OCMEM,
+       struct qcom_scm *scm = __scm;
+
+       return __qcom_scm_is_call_available(scm->dev, QCOM_SCM_SVC_OCMEM,
                                            QCOM_SCM_OCMEM_LOCK_CMD);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_ocmem_lock_available);
@@ -1435,6 +1495,8 @@ EXPORT_SYMBOL_GPL(qcom_scm_ocmem_lock_available);
 int qcom_scm_ocmem_lock(enum qcom_scm_ocmem_client id, u32 offset, u32 size,
                        u32 mode)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_OCMEM,
                .cmd = QCOM_SCM_OCMEM_LOCK_CMD,
@@ -1445,7 +1507,7 @@ int qcom_scm_ocmem_lock(enum qcom_scm_ocmem_client id, 
u32 offset, u32 size,
                .arginfo = QCOM_SCM_ARGS(4),
        };
 
-       return qcom_scm_call(__scm->dev, &desc, NULL);
+       return qcom_scm_call(scm->dev, &desc, NULL);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_ocmem_lock);
 
@@ -1459,6 +1521,8 @@ EXPORT_SYMBOL_GPL(qcom_scm_ocmem_lock);
  */
 int qcom_scm_ocmem_unlock(enum qcom_scm_ocmem_client id, u32 offset, u32 size)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_OCMEM,
                .cmd = QCOM_SCM_OCMEM_UNLOCK_CMD,
@@ -1468,7 +1532,7 @@ int qcom_scm_ocmem_unlock(enum qcom_scm_ocmem_client id, 
u32 offset, u32 size)
                .arginfo = QCOM_SCM_ARGS(3),
        };
 
-       return qcom_scm_call(__scm->dev, &desc, NULL);
+       return qcom_scm_call(scm->dev, &desc, NULL);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_ocmem_unlock);
 
@@ -1480,9 +1544,11 @@ EXPORT_SYMBOL_GPL(qcom_scm_ocmem_unlock);
  */
 bool qcom_scm_ice_available(void)
 {
-       return __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_ES,
+       struct qcom_scm *scm = __scm;
+
+       return __qcom_scm_is_call_available(scm->dev, QCOM_SCM_SVC_ES,
                                            QCOM_SCM_ES_INVALIDATE_ICE_KEY) &&
-               __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_ES,
+               __qcom_scm_is_call_available(scm->dev, QCOM_SCM_SVC_ES,
                                             QCOM_SCM_ES_CONFIG_SET_ICE_KEY);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_ice_available);
@@ -1501,6 +1567,8 @@ EXPORT_SYMBOL_GPL(qcom_scm_ice_available);
  */
 int qcom_scm_ice_invalidate_key(u32 index)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_ES,
                .cmd = QCOM_SCM_ES_INVALIDATE_ICE_KEY,
@@ -1509,7 +1577,7 @@ int qcom_scm_ice_invalidate_key(u32 index)
                .owner = ARM_SMCCC_OWNER_SIP,
        };
 
-       return qcom_scm_call(__scm->dev, &desc, NULL);
+       return qcom_scm_call(scm->dev, &desc, NULL);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_ice_invalidate_key);
 
@@ -1537,6 +1605,8 @@ EXPORT_SYMBOL_GPL(qcom_scm_ice_invalidate_key);
 int qcom_scm_ice_set_key(u32 index, const u8 *key, u32 key_size,
                         enum qcom_scm_ice_cipher cipher, u32 data_unit_size)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_ES,
                .cmd = QCOM_SCM_ES_CONFIG_SET_ICE_KEY,
@@ -1552,7 +1622,7 @@ int qcom_scm_ice_set_key(u32 index, const u8 *key, u32 
key_size,
 
        int ret;
 
-       void *keybuf __free(qcom_tzmem) = qcom_tzmem_alloc(__scm->mempool,
+       void *keybuf __free(qcom_tzmem) = qcom_tzmem_alloc(scm->mempool,
                                                           key_size,
                                                           GFP_KERNEL);
        if (!keybuf)
@@ -1560,7 +1630,7 @@ int qcom_scm_ice_set_key(u32 index, const u8 *key, u32 
key_size,
        memcpy(keybuf, key, key_size);
        desc.args[1] = qcom_tzmem_to_phys(keybuf);
 
-       ret = qcom_scm_call(__scm->dev, &desc, NULL);
+       ret = qcom_scm_call(scm->dev, &desc, NULL);
 
        memzero_explicit(keybuf, key_size);
 
@@ -1570,13 +1640,15 @@ EXPORT_SYMBOL_GPL(qcom_scm_ice_set_key);
 
 bool qcom_scm_has_wrapped_key_support(void)
 {
-       return __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_ES,
+       struct qcom_scm *scm = __scm;
+
+       return __qcom_scm_is_call_available(scm->dev, QCOM_SCM_SVC_ES,
                                            QCOM_SCM_ES_DERIVE_SW_SECRET) &&
-              __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_ES,
+              __qcom_scm_is_call_available(scm->dev, QCOM_SCM_SVC_ES,
                                            QCOM_SCM_ES_GENERATE_ICE_KEY) &&
-              __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_ES,
+              __qcom_scm_is_call_available(scm->dev, QCOM_SCM_SVC_ES,
                                            QCOM_SCM_ES_PREPARE_ICE_KEY) &&
-              __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_ES,
+              __qcom_scm_is_call_available(scm->dev, QCOM_SCM_SVC_ES,
                                            QCOM_SCM_ES_IMPORT_ICE_KEY);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_has_wrapped_key_support);
@@ -1600,6 +1672,8 @@ EXPORT_SYMBOL_GPL(qcom_scm_has_wrapped_key_support);
 int qcom_scm_derive_sw_secret(const u8 *eph_key, size_t eph_key_size,
                              u8 *sw_secret, size_t sw_secret_size)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_ES,
                .cmd = QCOM_SCM_ES_DERIVE_SW_SECRET,
@@ -1609,13 +1683,13 @@ int qcom_scm_derive_sw_secret(const u8 *eph_key, size_t 
eph_key_size,
        };
        int ret;
 
-       void *eph_key_buf __free(qcom_tzmem) = qcom_tzmem_alloc(__scm->mempool,
+       void *eph_key_buf __free(qcom_tzmem) = qcom_tzmem_alloc(scm->mempool,
                                                                eph_key_size,
                                                                GFP_KERNEL);
        if (!eph_key_buf)
                return -ENOMEM;
 
-       void *sw_secret_buf __free(qcom_tzmem) = 
qcom_tzmem_alloc(__scm->mempool,
+       void *sw_secret_buf __free(qcom_tzmem) = qcom_tzmem_alloc(scm->mempool,
                                                                  
sw_secret_size,
                                                                  GFP_KERNEL);
        if (!sw_secret_buf)
@@ -1627,7 +1701,7 @@ int qcom_scm_derive_sw_secret(const u8 *eph_key, size_t 
eph_key_size,
        desc.args[2] = qcom_tzmem_to_phys(sw_secret_buf);
        desc.args[3] = sw_secret_size;
 
-       ret = qcom_scm_call(__scm->dev, &desc, NULL);
+       ret = qcom_scm_call(scm->dev, &desc, NULL);
        if (!ret)
                memcpy(sw_secret, sw_secret_buf, sw_secret_size);
 
@@ -1650,6 +1724,8 @@ EXPORT_SYMBOL_GPL(qcom_scm_derive_sw_secret);
  */
 int qcom_scm_generate_ice_key(u8 *lt_key, size_t lt_key_size)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_ES,
                .cmd =  QCOM_SCM_ES_GENERATE_ICE_KEY,
@@ -1658,7 +1734,7 @@ int qcom_scm_generate_ice_key(u8 *lt_key, size_t 
lt_key_size)
        };
        int ret;
 
-       void *lt_key_buf __free(qcom_tzmem) = qcom_tzmem_alloc(__scm->mempool,
+       void *lt_key_buf __free(qcom_tzmem) = qcom_tzmem_alloc(scm->mempool,
                                                               lt_key_size,
                                                               GFP_KERNEL);
        if (!lt_key_buf)
@@ -1667,7 +1743,7 @@ int qcom_scm_generate_ice_key(u8 *lt_key, size_t 
lt_key_size)
        desc.args[0] = qcom_tzmem_to_phys(lt_key_buf);
        desc.args[1] = lt_key_size;
 
-       ret = qcom_scm_call(__scm->dev, &desc, NULL);
+       ret = qcom_scm_call(scm->dev, &desc, NULL);
        if (!ret)
                memcpy(lt_key, lt_key_buf, lt_key_size);
 
@@ -1692,6 +1768,8 @@ EXPORT_SYMBOL_GPL(qcom_scm_generate_ice_key);
 int qcom_scm_prepare_ice_key(const u8 *lt_key, size_t lt_key_size,
                             u8 *eph_key, size_t eph_key_size)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_ES,
                .cmd =  QCOM_SCM_ES_PREPARE_ICE_KEY,
@@ -1701,13 +1779,13 @@ int qcom_scm_prepare_ice_key(const u8 *lt_key, size_t 
lt_key_size,
        };
        int ret;
 
-       void *lt_key_buf __free(qcom_tzmem) = qcom_tzmem_alloc(__scm->mempool,
+       void *lt_key_buf __free(qcom_tzmem) = qcom_tzmem_alloc(scm->mempool,
                                                               lt_key_size,
                                                               GFP_KERNEL);
        if (!lt_key_buf)
                return -ENOMEM;
 
-       void *eph_key_buf __free(qcom_tzmem) = qcom_tzmem_alloc(__scm->mempool,
+       void *eph_key_buf __free(qcom_tzmem) = qcom_tzmem_alloc(scm->mempool,
                                                                eph_key_size,
                                                                GFP_KERNEL);
        if (!eph_key_buf)
@@ -1719,7 +1797,7 @@ int qcom_scm_prepare_ice_key(const u8 *lt_key, size_t 
lt_key_size,
        desc.args[2] = qcom_tzmem_to_phys(eph_key_buf);
        desc.args[3] = eph_key_size;
 
-       ret = qcom_scm_call(__scm->dev, &desc, NULL);
+       ret = qcom_scm_call(scm->dev, &desc, NULL);
        if (!ret)
                memcpy(eph_key, eph_key_buf, eph_key_size);
 
@@ -1745,6 +1823,8 @@ EXPORT_SYMBOL_GPL(qcom_scm_prepare_ice_key);
 int qcom_scm_import_ice_key(const u8 *raw_key, size_t raw_key_size,
                            u8 *lt_key, size_t lt_key_size)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_ES,
                .cmd =  QCOM_SCM_ES_IMPORT_ICE_KEY,
@@ -1754,13 +1834,13 @@ int qcom_scm_import_ice_key(const u8 *raw_key, size_t 
raw_key_size,
        };
        int ret;
 
-       void *raw_key_buf __free(qcom_tzmem) = qcom_tzmem_alloc(__scm->mempool,
+       void *raw_key_buf __free(qcom_tzmem) = qcom_tzmem_alloc(scm->mempool,
                                                                raw_key_size,
                                                                GFP_KERNEL);
        if (!raw_key_buf)
                return -ENOMEM;
 
-       void *lt_key_buf __free(qcom_tzmem) = qcom_tzmem_alloc(__scm->mempool,
+       void *lt_key_buf __free(qcom_tzmem) = qcom_tzmem_alloc(scm->mempool,
                                                               lt_key_size,
                                                               GFP_KERNEL);
        if (!lt_key_buf)
@@ -1772,7 +1852,7 @@ int qcom_scm_import_ice_key(const u8 *raw_key, size_t 
raw_key_size,
        desc.args[2] = qcom_tzmem_to_phys(lt_key_buf);
        desc.args[3] = lt_key_size;
 
-       ret = qcom_scm_call(__scm->dev, &desc, NULL);
+       ret = qcom_scm_call(scm->dev, &desc, NULL);
        if (!ret)
                memcpy(lt_key, lt_key_buf, lt_key_size);
 
@@ -1789,16 +1869,18 @@ EXPORT_SYMBOL_GPL(qcom_scm_import_ice_key);
  */
 bool qcom_scm_hdcp_available(void)
 {
+       struct qcom_scm *scm = __scm;
+
        bool avail;
-       int ret = qcom_scm_clk_enable();
+       int ret = qcom_scm_clk_enable(scm);
 
        if (ret)
                return ret;
 
-       avail = __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_HDCP,
+       avail = __qcom_scm_is_call_available(scm->dev, QCOM_SCM_SVC_HDCP,
                                                QCOM_SCM_HDCP_INVOKE);
 
-       qcom_scm_clk_disable();
+       qcom_scm_clk_disable(scm);
 
        return avail;
 }
@@ -1814,6 +1896,8 @@ EXPORT_SYMBOL_GPL(qcom_scm_hdcp_available);
  */
 int qcom_scm_hdcp_req(struct qcom_scm_hdcp_req *req, u32 req_cnt, u32 *resp)
 {
+       struct qcom_scm *scm = __scm;
+
        int ret;
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_HDCP,
@@ -1838,14 +1922,14 @@ int qcom_scm_hdcp_req(struct qcom_scm_hdcp_req *req, 
u32 req_cnt, u32 *resp)
        if (req_cnt > QCOM_SCM_HDCP_MAX_REQ_CNT)
                return -ERANGE;
 
-       ret = qcom_scm_clk_enable();
+       ret = qcom_scm_clk_enable(scm);
        if (ret)
                return ret;
 
-       ret = qcom_scm_call(__scm->dev, &desc, &res);
+       ret = qcom_scm_call(scm->dev, &desc, &res);
        *resp = res.result[0];
 
-       qcom_scm_clk_disable();
+       qcom_scm_clk_disable(scm);
 
        return ret;
 }
@@ -1853,6 +1937,8 @@ EXPORT_SYMBOL_GPL(qcom_scm_hdcp_req);
 
 int qcom_scm_iommu_set_pt_format(u32 sec_id, u32 ctx_num, u32 pt_fmt)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_SMMU_PROGRAM,
                .cmd = QCOM_SCM_SMMU_PT_FORMAT,
@@ -1863,12 +1949,14 @@ int qcom_scm_iommu_set_pt_format(u32 sec_id, u32 
ctx_num, u32 pt_fmt)
                .owner = ARM_SMCCC_OWNER_SIP,
        };
 
-       return qcom_scm_call(__scm->dev, &desc, NULL);
+       return qcom_scm_call(scm->dev, &desc, NULL);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_iommu_set_pt_format);
 
 int qcom_scm_qsmmu500_wait_safe_toggle(bool en)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_SMMU_PROGRAM,
                .cmd = QCOM_SCM_SMMU_CONFIG_ERRATA1,
@@ -1879,13 +1967,15 @@ int qcom_scm_qsmmu500_wait_safe_toggle(bool en)
        };
 
 
-       return qcom_scm_call_atomic(__scm->dev, &desc, NULL);
+       return qcom_scm_call_atomic(scm->dev, &desc, NULL);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_qsmmu500_wait_safe_toggle);
 
 bool qcom_scm_lmh_dcvsh_available(void)
 {
-       return __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_LMH, 
QCOM_SCM_LMH_LIMIT_DCVSH);
+       struct qcom_scm *scm = __scm;
+
+       return __qcom_scm_is_call_available(scm->dev, QCOM_SCM_SVC_LMH, 
QCOM_SCM_LMH_LIMIT_DCVSH);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_lmh_dcvsh_available);
 
@@ -1927,6 +2017,8 @@ int qcom_scm_shm_bridge_create(u64 pfn_and_ns_perm_flags,
                               u64 ipfn_and_s_perm_flags, u64 size_and_flags,
                               u64 ns_vmids, u64 *handle)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_MP,
                .cmd = QCOM_SCM_MP_SHM_BRIDGE_CREATE,
@@ -1942,7 +2034,7 @@ int qcom_scm_shm_bridge_create(u64 pfn_and_ns_perm_flags,
        struct qcom_scm_res res;
        int ret;
 
-       ret = qcom_scm_call(__scm->dev, &desc, &res);
+       ret = qcom_scm_call(scm->dev, &desc, &res);
 
        if (handle && !ret)
                *handle = res.result[1];
@@ -1953,6 +2045,8 @@ EXPORT_SYMBOL_GPL(qcom_scm_shm_bridge_create);
 
 int qcom_scm_shm_bridge_delete(u64 handle)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_MP,
                .cmd = QCOM_SCM_MP_SHM_BRIDGE_DELETE,
@@ -1961,12 +2055,14 @@ int qcom_scm_shm_bridge_delete(u64 handle)
                .arginfo = QCOM_SCM_ARGS(1, QCOM_SCM_VAL),
        };
 
-       return qcom_scm_call(__scm->dev, &desc, NULL);
+       return qcom_scm_call(scm->dev, &desc, NULL);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_shm_bridge_delete);
 
 int qcom_scm_lmh_profile_change(u32 profile_id)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_LMH,
                .cmd = QCOM_SCM_LMH_LIMIT_PROFILE_CHANGE,
@@ -1975,13 +2071,15 @@ int qcom_scm_lmh_profile_change(u32 profile_id)
                .owner = ARM_SMCCC_OWNER_SIP,
        };
 
-       return qcom_scm_call(__scm->dev, &desc, NULL);
+       return qcom_scm_call(scm->dev, &desc, NULL);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_lmh_profile_change);
 
 int qcom_scm_lmh_dcvsh(u32 payload_fn, u32 payload_reg, u32 payload_val,
                       u64 limit_node, u32 node_id, u64 version)
 {
+       struct qcom_scm *scm = __scm;
+
        int ret, payload_size = 5 * sizeof(u32);
 
        struct qcom_scm_desc desc = {
@@ -1996,7 +2094,7 @@ int qcom_scm_lmh_dcvsh(u32 payload_fn, u32 payload_reg, 
u32 payload_val,
                .owner = ARM_SMCCC_OWNER_SIP,
        };
 
-       u32 *payload_buf __free(qcom_tzmem) = qcom_tzmem_alloc(__scm->mempool,
+       u32 *payload_buf __free(qcom_tzmem) = qcom_tzmem_alloc(scm->mempool,
                                                               payload_size,
                                                               GFP_KERNEL);
        if (!payload_buf)
@@ -2010,7 +2108,7 @@ int qcom_scm_lmh_dcvsh(u32 payload_fn, u32 payload_reg, 
u32 payload_val,
 
        desc.args[0] = qcom_tzmem_to_phys(payload_buf);
 
-       ret = qcom_scm_call(__scm->dev, &desc, NULL);
+       ret = qcom_scm_call(scm->dev, &desc, NULL);
 
        return ret;
 }
@@ -2018,6 +2116,8 @@ EXPORT_SYMBOL_GPL(qcom_scm_lmh_dcvsh);
 
 int qcom_scm_gpu_init_regs(u32 gpu_req)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_GPU,
                .cmd = QCOM_SCM_SVC_GPU_INIT_REGS,
@@ -2026,7 +2126,7 @@ int qcom_scm_gpu_init_regs(u32 gpu_req)
                .owner = ARM_SMCCC_OWNER_SIP,
        };
 
-       return qcom_scm_call(__scm->dev, &desc, NULL);
+       return qcom_scm_call(scm->dev, &desc, NULL);
 }
 EXPORT_SYMBOL_GPL(qcom_scm_gpu_init_regs);
 
@@ -2084,7 +2184,8 @@ static int qcom_scm_find_dload_address(struct device 
*dev, u64 *addr)
 /* Lock for QSEECOM SCM call executions */
 static DEFINE_MUTEX(qcom_scm_qseecom_call_lock);
 
-static int __qcom_scm_qseecom_call(const struct qcom_scm_desc *desc,
+static int __qcom_scm_qseecom_call(struct qcom_scm *scm,
+                                  const struct qcom_scm_desc *desc,
                                   struct qcom_scm_qseecom_resp *res)
 {
        struct qcom_scm_res scm_res = {};
@@ -2096,7 +2197,7 @@ static int __qcom_scm_qseecom_call(const struct 
qcom_scm_desc *desc,
         */
        lockdep_assert_held(&qcom_scm_qseecom_call_lock);
 
-       status = qcom_scm_call(__scm->dev, desc, &scm_res);
+       status = qcom_scm_call(scm->dev, desc, &scm_res);
 
        res->result = scm_res.result[0];
        res->resp_type = scm_res.result[1];
@@ -2118,7 +2219,8 @@ static int __qcom_scm_qseecom_call(const struct 
qcom_scm_desc *desc,
  *
  * Return: Zero on success, nonzero on failure.
  */
-static int qcom_scm_qseecom_call(const struct qcom_scm_desc *desc,
+static int qcom_scm_qseecom_call(struct qcom_scm *scm,
+                                const struct qcom_scm_desc *desc,
                                 struct qcom_scm_qseecom_resp *res)
 {
        int status;
@@ -2130,15 +2232,15 @@ static int qcom_scm_qseecom_call(const struct 
qcom_scm_desc *desc,
         */
 
        mutex_lock(&qcom_scm_qseecom_call_lock);
-       status = __qcom_scm_qseecom_call(desc, res);
+       status = __qcom_scm_qseecom_call(scm, desc, res);
        mutex_unlock(&qcom_scm_qseecom_call_lock);
 
-       dev_dbg(__scm->dev, "%s: owner=%x, svc=%x, cmd=%x, result=%lld, 
type=%llx, data=%llx\n",
+       dev_dbg(scm->dev, "%s: owner=%x, svc=%x, cmd=%x, result=%lld, 
type=%llx, data=%llx\n",
                __func__, desc->owner, desc->svc, desc->cmd, res->result,
                res->resp_type, res->data);
 
        if (status) {
-               dev_err(__scm->dev, "qseecom: scm call failed with error %d\n", 
status);
+               dev_err(scm->dev, "qseecom: scm call failed with error %d\n", 
status);
                return status;
        }
 
@@ -2165,7 +2267,7 @@ static int qcom_scm_qseecom_call(const struct 
qcom_scm_desc *desc,
  *
  * Return: Zero on success, nonzero on failure.
  */
-static int qcom_scm_qseecom_get_version(u32 *version)
+static int qcom_scm_qseecom_get_version(struct qcom_scm *scm, u32 *version)
 {
        struct qcom_scm_desc desc = {};
        struct qcom_scm_qseecom_resp res = {};
@@ -2178,7 +2280,7 @@ static int qcom_scm_qseecom_get_version(u32 *version)
        desc.arginfo = QCOM_SCM_ARGS(1, QCOM_SCM_VAL);
        desc.args[0] = feature;
 
-       ret = qcom_scm_qseecom_call(&desc, &res);
+       ret = qcom_scm_qseecom_call(scm, &desc, &res);
        if (ret)
                return ret;
 
@@ -2200,6 +2302,8 @@ static int qcom_scm_qseecom_get_version(u32 *version)
  */
 int qcom_scm_qseecom_app_get_id(const char *app_name, u32 *app_id)
 {
+       struct qcom_scm *scm = __scm;
+
        unsigned long name_buf_size = QSEECOM_MAX_APP_NAME_SIZE;
        unsigned long app_name_len = strlen(app_name);
        struct qcom_scm_desc desc = {};
@@ -2209,7 +2313,7 @@ int qcom_scm_qseecom_app_get_id(const char *app_name, u32 
*app_id)
        if (app_name_len >= name_buf_size)
                return -EINVAL;
 
-       char *name_buf __free(qcom_tzmem) = qcom_tzmem_alloc(__scm->mempool,
+       char *name_buf __free(qcom_tzmem) = qcom_tzmem_alloc(scm->mempool,
                                                             name_buf_size,
                                                             GFP_KERNEL);
        if (!name_buf)
@@ -2224,7 +2328,7 @@ int qcom_scm_qseecom_app_get_id(const char *app_name, u32 
*app_id)
        desc.args[0] = qcom_tzmem_to_phys(name_buf);
        desc.args[1] = app_name_len;
 
-       status = qcom_scm_qseecom_call(&desc, &res);
+       status = qcom_scm_qseecom_call(scm, &desc, &res);
 
        if (status)
                return status;
@@ -2262,6 +2366,8 @@ EXPORT_SYMBOL_GPL(qcom_scm_qseecom_app_get_id);
 int qcom_scm_qseecom_app_send(u32 app_id, void *req, size_t req_size,
                              void *rsp, size_t rsp_size)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_qseecom_resp res = {};
        struct qcom_scm_desc desc = {};
        phys_addr_t req_phys;
@@ -2283,7 +2389,7 @@ int qcom_scm_qseecom_app_send(u32 app_id, void *req, 
size_t req_size,
        desc.args[3] = rsp_phys;
        desc.args[4] = rsp_size;
 
-       status = qcom_scm_qseecom_call(&desc, &res);
+       status = qcom_scm_qseecom_call(scm, &desc, &res);
 
        if (status)
                return status;
@@ -2363,7 +2469,7 @@ static int qcom_scm_qseecom_init(struct qcom_scm *scm)
         * be safe as downstream sources indicate that the version query is
         * neither blocking nor reentrant.
         */
-       ret = qcom_scm_qseecom_get_version(&version);
+       ret = qcom_scm_qseecom_get_version(scm, &version);
        if (ret)
                return 0;
 
@@ -2420,6 +2526,8 @@ int qcom_scm_qtee_invoke_smc(phys_addr_t inbuf, size_t 
inbuf_size,
                             phys_addr_t outbuf, size_t outbuf_size,
                             u64 *result, u64 *response_type)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_SMCINVOKE,
                .cmd = QCOM_SCM_SMCINVOKE_INVOKE,
@@ -2434,7 +2542,7 @@ int qcom_scm_qtee_invoke_smc(phys_addr_t inbuf, size_t 
inbuf_size,
        struct qcom_scm_res res;
        int ret;
 
-       ret = qcom_scm_call(__scm->dev, &desc, &res);
+       ret = qcom_scm_call(scm->dev, &desc, &res);
        if (ret)
                return ret;
 
@@ -2462,6 +2570,8 @@ EXPORT_SYMBOL(qcom_scm_qtee_invoke_smc);
 int qcom_scm_qtee_callback_response(phys_addr_t buf, size_t buf_size,
                                    u64 *result, u64 *response_type)
 {
+       struct qcom_scm *scm = __scm;
+
        struct qcom_scm_desc desc = {
                .svc = QCOM_SCM_SVC_SMCINVOKE,
                .cmd = QCOM_SCM_SMCINVOKE_CB_RSP,
@@ -2473,7 +2583,7 @@ int qcom_scm_qtee_callback_response(phys_addr_t buf, 
size_t buf_size,
        struct qcom_scm_res res;
        int ret;
 
-       ret = qcom_scm_call(__scm->dev, &desc, &res);
+       ret = qcom_scm_call(scm->dev, &desc, &res);
        if (ret)
                return ret;
 
@@ -2902,9 +3012,9 @@ static int qcom_scm_probe(struct platform_device *pdev)
         */
        smp_store_release(&__scm, scm);
 
-       __get_convention();
+       __get_convention(scm->dev);
 
-       if (qcom_scm_is_pas_available()) {
+       if (qcom_scm_is_pas_available(scm)) {
                qcom_pas_ops_scm.dev = scm->dev;
                qcom_pas_ops_register(&qcom_pas_ops_scm);
        }
@@ -2920,7 +3030,7 @@ static int qcom_scm_probe(struct platform_device *pdev)
         * Disable SDI if indicated by DT that it is enabled by default.
         */
        if (of_property_read_bool(pdev->dev.of_node, "qcom,sdi-enabled") || 
!download_mode)
-               qcom_scm_disable_sdi();
+               qcom_scm_disable_sdi(scm);
 
        /*
         * Initialize the QSEECOM interface.

-- 
2.55.0

Reply via email to