Lines Matching +full:tcsr +full:- +full:mutex
1 // SPDX-License-Identifier: GPL-2.0-only
6 #include <linux/arm-smccc.h>
13 #include <linux/dma-mapping.h>
29 #include <linux/reset-controller.h>
48 struct mutex scm_bw_lock;
70 * struct qcom_scm_qseecom_resp - QSEECOM SCM call response.
153 ret = clk_prepare_enable(__scm->core_clk); in qcom_scm_clk_enable()
157 ret = clk_prepare_enable(__scm->iface_clk); in qcom_scm_clk_enable()
161 ret = clk_prepare_enable(__scm->bus_clk); in qcom_scm_clk_enable()
168 clk_disable_unprepare(__scm->iface_clk); in qcom_scm_clk_enable()
170 clk_disable_unprepare(__scm->core_clk); in qcom_scm_clk_enable()
177 clk_disable_unprepare(__scm->core_clk); in qcom_scm_clk_disable()
178 clk_disable_unprepare(__scm->iface_clk); in qcom_scm_clk_disable()
179 clk_disable_unprepare(__scm->bus_clk); in qcom_scm_clk_disable()
186 if (!__scm->path) in qcom_scm_bw_enable()
189 mutex_lock(&__scm->scm_bw_lock); in qcom_scm_bw_enable()
190 if (!__scm->scm_vote_count) { in qcom_scm_bw_enable()
191 ret = icc_set_bw(__scm->path, 0, UINT_MAX); in qcom_scm_bw_enable()
193 dev_err(__scm->dev, "failed to set bandwidth request\n"); in qcom_scm_bw_enable()
197 __scm->scm_vote_count++; in qcom_scm_bw_enable()
199 mutex_unlock(&__scm->scm_bw_lock); in qcom_scm_bw_enable()
206 if (!__scm->path) in qcom_scm_bw_disable()
209 mutex_lock(&__scm->scm_bw_lock); in qcom_scm_bw_disable()
210 if (__scm->scm_vote_count-- == 1) in qcom_scm_bw_disable()
211 icc_set_bw(__scm->path, 0, 0); in qcom_scm_bw_disable()
212 mutex_unlock(&__scm->scm_bw_lock); in qcom_scm_bw_disable()
223 return __scm->mempool; in qcom_scm_get_tzmem_pool()
247 * Per the "SMC calling convention specification", the 64-bit calling in __get_convention()
248 * convention can only be used when the client is 64-bit, otherwise in __get_convention()
253 * Device isn't required as there is only one argument - no device in __get_convention()
268 if (of_device_is_compatible(__scm ? __scm->dev->of_node : NULL, "qcom,scm-sc7180")) { in __get_convention()
294 * qcom_scm_call() - Invoke a syscall in the secure world
300 * This should *only* be called in pre-emptible context.
314 return -EINVAL; in qcom_scm_call()
319 * qcom_scm_call_atomic() - atomic variation of qcom_scm_call()
339 return -EINVAL; in qcom_scm_call_atomic()
387 return -EINVAL; in qcom_scm_set_boot_addr()
394 return qcom_scm_call_atomic(__scm ? __scm->dev : NULL, &desc, NULL); in qcom_scm_set_boot_addr()
414 return -EOPNOTSUPP; in qcom_scm_set_boot_addr_mc()
416 return qcom_scm_call(__scm->dev, &desc, NULL); in qcom_scm_set_boot_addr_mc()
420 * qcom_scm_set_warm_boot_addr() - Set the warm boot address for all cpus
436 * qcom_scm_set_cold_boot_addr() - Set the cold boot address for all cpus
449 * qcom_scm_cpu_power_down() - Power down the cpu
466 qcom_scm_call_atomic(__scm ? __scm->dev : NULL, &desc, NULL); in qcom_scm_cpu_power_down()
483 ret = qcom_scm_call(__scm->dev, &desc, &res); in qcom_scm_set_remote_state()
505 ret = qcom_scm_call(__scm->dev, &desc, &res); in qcom_scm_disable_sdi()
524 return qcom_scm_call_atomic(__scm->dev, &desc, NULL); in __qcom_scm_set_dload_mode()
546 if (__scm->dload_mode_addr) { in qcom_scm_set_download_mode()
547 ret = qcom_scm_io_rmw(__scm->dload_mode_addr, QCOM_DLOAD_MASK, in qcom_scm_set_download_mode()
549 } else if (__qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_BOOT, in qcom_scm_set_download_mode()
551 ret = __qcom_scm_set_dload_mode(__scm->dev, !!dload_mode); in qcom_scm_set_download_mode()
553 dev_err(__scm->dev, in qcom_scm_set_download_mode()
558 dev_err(__scm->dev, "failed to set download mode: %d\n", ret); in qcom_scm_set_download_mode()
562 * qcom_scm_pas_init_image() - Initialize peripheral authentication service
596 * non-cachable to avoid XPU violations. in qcom_scm_pas_init_image()
605 mdata_buf = dma_alloc_coherent(__scm->dev, size, &mdata_phys, in qcom_scm_pas_init_image()
608 return -ENOMEM; in qcom_scm_pas_init_image()
622 ret = qcom_scm_call(__scm->dev, &desc, &res); in qcom_scm_pas_init_image()
630 dma_free_coherent(__scm->dev, size, mdata_buf, mdata_phys); in qcom_scm_pas_init_image()
632 ctx->ptr = mdata_buf; in qcom_scm_pas_init_image()
633 ctx->phys = mdata_phys; in qcom_scm_pas_init_image()
634 ctx->size = size; in qcom_scm_pas_init_image()
642 * qcom_scm_pas_metadata_release() - release metadata context
647 if (!ctx->ptr) in qcom_scm_pas_metadata_release()
650 dma_free_coherent(__scm->dev, ctx->size, ctx->ptr, ctx->phys); in qcom_scm_pas_metadata_release()
652 ctx->ptr = NULL; in qcom_scm_pas_metadata_release()
653 ctx->phys = 0; in qcom_scm_pas_metadata_release()
654 ctx->size = 0; in qcom_scm_pas_metadata_release()
659 * qcom_scm_pas_mem_setup() - Prepare the memory related to a given peripheral
689 ret = qcom_scm_call(__scm->dev, &desc, &res); in qcom_scm_pas_mem_setup()
700 * qcom_scm_pas_auth_and_reset() - Authenticate the given peripheral firmware
726 ret = qcom_scm_call(__scm->dev, &desc, &res); in qcom_scm_pas_auth_and_reset()
737 * qcom_scm_pas_shutdown() - Shut down the remote processor
762 ret = qcom_scm_call(__scm->dev, &desc, &res); in qcom_scm_pas_shutdown()
773 * qcom_scm_pas_supported() - Check if the peripheral authentication service is
791 if (!__qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_PIL, in qcom_scm_pas_supported()
795 ret = qcom_scm_call(__scm->dev, &desc, &res); in qcom_scm_pas_supported()
814 ret = qcom_scm_call(__scm->dev, &desc, &res); in __qcom_scm_pas_mss_reset()
823 return -EINVAL; in qcom_scm_pas_reset_assert()
825 return __qcom_scm_pas_mss_reset(__scm->dev, 1); in qcom_scm_pas_reset_assert()
832 return -EINVAL; in qcom_scm_pas_reset_deassert()
834 return __qcom_scm_pas_mss_reset(__scm->dev, 0); in qcom_scm_pas_reset_deassert()
855 ret = qcom_scm_call_atomic(__scm->dev, &desc, &res); in qcom_scm_io_readl()
874 return qcom_scm_call_atomic(__scm->dev, &desc, NULL); in qcom_scm_io_writel()
879 * qcom_scm_restore_sec_cfg_available() - Check if secure environment
882 * Return true if restore-cfg interface is supported, false if not.
886 return __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_MP, in qcom_scm_restore_sec_cfg_available()
904 ret = qcom_scm_call(__scm->dev, &desc, &res); in qcom_scm_restore_sec_cfg()
914 return __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_MP, in qcom_scm_set_gpu_smmu_aperture_is_available()
932 return qcom_scm_call(__scm->dev, &desc, NULL); in qcom_scm_set_gpu_smmu_aperture()
948 ret = qcom_scm_call(__scm->dev, &desc, &res); in qcom_scm_iommu_secure_ptbl_size()
971 ret = qcom_scm_call(__scm->dev, &desc, NULL); in qcom_scm_iommu_secure_ptbl_init()
974 if (ret == -EPERM) in qcom_scm_iommu_secure_ptbl_init()
992 return qcom_scm_call(__scm->dev, &desc, NULL); in qcom_scm_iommu_set_cp_pool_size()
1014 ret = qcom_scm_call(__scm->dev, &desc, &res); in qcom_scm_mem_protect_video_var()
1048 * qcom_scm_assign_mem() - Make a secure call to reassign memory ownership
1084 void *ptr __free(qcom_tzmem) = qcom_tzmem_alloc(__scm->mempool, in qcom_scm_assign_mem()
1087 return -ENOMEM; in qcom_scm_assign_mem()
1102 mem_to_map->mem_addr = cpu_to_le64(mem_addr); in qcom_scm_assign_mem()
1103 mem_to_map->mem_size = cpu_to_le64(mem_sz); in qcom_scm_assign_mem()
1110 destvm->vmid = cpu_to_le32(newvm->vmid); in qcom_scm_assign_mem()
1111 destvm->perm = cpu_to_le32(newvm->perm); in qcom_scm_assign_mem()
1112 destvm->ctx = 0; in qcom_scm_assign_mem()
1113 destvm->ctx_size = 0; in qcom_scm_assign_mem()
1114 next_vm |= BIT(newvm->vmid); in qcom_scm_assign_mem()
1117 ret = __qcom_scm_assign_mem(__scm->dev, mem_to_map_phys, mem_to_map_sz, in qcom_scm_assign_mem()
1120 dev_err(__scm->dev, in qcom_scm_assign_mem()
1122 return -EINVAL; in qcom_scm_assign_mem()
1131 * qcom_scm_ocmem_lock_available() - is OCMEM lock/unlock interface available
1135 return __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_OCMEM, in qcom_scm_ocmem_lock_available()
1141 * qcom_scm_ocmem_lock() - call OCMEM lock interface to assign an OCMEM
1162 return qcom_scm_call(__scm->dev, &desc, NULL); in qcom_scm_ocmem_lock()
1167 * qcom_scm_ocmem_unlock() - call OCMEM unlock interface to release an OCMEM
1185 return qcom_scm_call(__scm->dev, &desc, NULL); in qcom_scm_ocmem_unlock()
1190 * qcom_scm_ice_available() - Is the ICE key programming interface available?
1197 return __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_ES, in qcom_scm_ice_available()
1199 __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_ES, in qcom_scm_ice_available()
1205 * qcom_scm_ice_invalidate_key() - Invalidate an inline encryption key
1214 * Return: 0 on success; -errno on failure.
1226 return qcom_scm_call(__scm->dev, &desc, NULL); in qcom_scm_ice_invalidate_key()
1231 * qcom_scm_ice_set_key() - Set an inline encryption key
1237 * individual plaintext and ciphertext. Given in 512-byte
1249 * Return: 0 on success; -errno on failure.
1269 void *keybuf __free(qcom_tzmem) = qcom_tzmem_alloc(__scm->mempool, in qcom_scm_ice_set_key()
1273 return -ENOMEM; in qcom_scm_ice_set_key()
1277 ret = qcom_scm_call(__scm->dev, &desc, NULL); in qcom_scm_ice_set_key()
1287 return __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_ES, in qcom_scm_has_wrapped_key_support()
1289 __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_ES, in qcom_scm_has_wrapped_key_support()
1291 __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_ES, in qcom_scm_has_wrapped_key_support()
1293 __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_ES, in qcom_scm_has_wrapped_key_support()
1299 * qcom_scm_derive_sw_secret() - Derive software secret from wrapped key
1300 * @eph_key: an ephemerally-wrapped key
1305 * Derive a software secret from an ephemerally-wrapped key for software crypto
1309 * For more information on sw_secret, see the "Hardware-wrapped keys" section of
1310 * Documentation/block/inline-encryption.rst.
1312 * Return: 0 on success; -errno on failure.
1326 void *eph_key_buf __free(qcom_tzmem) = qcom_tzmem_alloc(__scm->mempool, in qcom_scm_derive_sw_secret()
1330 return -ENOMEM; in qcom_scm_derive_sw_secret()
1332 void *sw_secret_buf __free(qcom_tzmem) = qcom_tzmem_alloc(__scm->mempool, in qcom_scm_derive_sw_secret()
1336 return -ENOMEM; in qcom_scm_derive_sw_secret()
1344 ret = qcom_scm_call(__scm->dev, &desc, NULL); in qcom_scm_derive_sw_secret()
1355 * qcom_scm_generate_ice_key() - Generate a wrapped key for storage encryption
1356 * @lt_key: output buffer for the long-term wrapped key
1360 * Generate a key using the built-in HW module in the SoC. The resulting key is
1361 * returned wrapped with the platform-specific Key Encryption Key.
1363 * Return: 0 on success; -errno on failure.
1375 void *lt_key_buf __free(qcom_tzmem) = qcom_tzmem_alloc(__scm->mempool, in qcom_scm_generate_ice_key()
1379 return -ENOMEM; in qcom_scm_generate_ice_key()
1384 ret = qcom_scm_call(__scm->dev, &desc, NULL); in qcom_scm_generate_ice_key()
1394 * qcom_scm_prepare_ice_key() - Re-wrap a key with the per-boot ephemeral key
1395 * @lt_key: a long-term wrapped key
1397 * @eph_key: output buffer for the ephemerally-wrapped key
1401 * Given a long-term wrapped key, re-wrap it with the per-boot ephemeral key for
1404 * Return: 0 on success; -errno on failure.
1418 void *lt_key_buf __free(qcom_tzmem) = qcom_tzmem_alloc(__scm->mempool, in qcom_scm_prepare_ice_key()
1422 return -ENOMEM; in qcom_scm_prepare_ice_key()
1424 void *eph_key_buf __free(qcom_tzmem) = qcom_tzmem_alloc(__scm->mempool, in qcom_scm_prepare_ice_key()
1428 return -ENOMEM; in qcom_scm_prepare_ice_key()
1436 ret = qcom_scm_call(__scm->dev, &desc, NULL); in qcom_scm_prepare_ice_key()
1447 * qcom_scm_import_ice_key() - Import key for storage encryption
1450 * @lt_key: output buffer for the long-term wrapped key
1454 * Import a raw key and return a long-term wrapped key. Uses the SoC's HWKM to
1455 * wrap the raw key using the platform-specific Key Encryption Key.
1457 * Return: 0 on success; -errno on failure.
1471 void *raw_key_buf __free(qcom_tzmem) = qcom_tzmem_alloc(__scm->mempool, in qcom_scm_import_ice_key()
1475 return -ENOMEM; in qcom_scm_import_ice_key()
1477 void *lt_key_buf __free(qcom_tzmem) = qcom_tzmem_alloc(__scm->mempool, in qcom_scm_import_ice_key()
1481 return -ENOMEM; in qcom_scm_import_ice_key()
1489 ret = qcom_scm_call(__scm->dev, &desc, NULL); in qcom_scm_import_ice_key()
1500 * qcom_scm_hdcp_available() - Check if secure environment supports HDCP.
1512 avail = __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_HDCP, in qcom_scm_hdcp_available()
1522 * qcom_scm_hdcp_req() - Send HDCP request.
1553 return -ERANGE; in qcom_scm_hdcp_req()
1559 ret = qcom_scm_call(__scm->dev, &desc, &res); in qcom_scm_hdcp_req()
1576 .args[2] = pt_fmt, /* 0: LPAE AArch32 - 1: AArch64 */ in qcom_scm_iommu_set_pt_format()
1580 return qcom_scm_call(__scm->dev, &desc, NULL); in qcom_scm_iommu_set_pt_format()
1596 return qcom_scm_call_atomic(__scm->dev, &desc, NULL); in qcom_scm_qsmmu500_wait_safe_toggle()
1602 return __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_LMH, QCOM_SCM_LMH_LIMIT_DCVSH); in qcom_scm_lmh_dcvsh_available()
1618 if (!__qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_MP, in qcom_scm_shm_bridge_enable()
1620 return -EOPNOTSUPP; in qcom_scm_shm_bridge_enable()
1622 ret = qcom_scm_call(__scm->dev, &desc, &res); in qcom_scm_shm_bridge_enable()
1628 return -EOPNOTSUPP; in qcom_scm_shm_bridge_enable()
1653 ret = qcom_scm_call(__scm->dev, &desc, &res); in qcom_scm_shm_bridge_create()
1672 return qcom_scm_call(__scm->dev, &desc, NULL); in qcom_scm_shm_bridge_delete()
1686 return qcom_scm_call(__scm->dev, &desc, NULL); in qcom_scm_lmh_profile_change()
1707 u32 *payload_buf __free(qcom_tzmem) = qcom_tzmem_alloc(__scm->mempool, in qcom_scm_lmh_dcvsh()
1711 return -ENOMEM; in qcom_scm_lmh_dcvsh()
1721 ret = qcom_scm_call(__scm->dev, &desc, NULL); in qcom_scm_lmh_dcvsh()
1737 return qcom_scm_call(__scm->dev, &desc, NULL); in qcom_scm_gpu_init_regs()
1743 struct device_node *tcsr; in qcom_scm_find_dload_address() local
1744 struct device_node *np = dev->of_node; in qcom_scm_find_dload_address()
1749 tcsr = of_parse_phandle(np, "qcom,dload-mode", 0); in qcom_scm_find_dload_address()
1750 if (!tcsr) in qcom_scm_find_dload_address()
1753 ret = of_address_to_resource(tcsr, 0, &res); in qcom_scm_find_dload_address()
1754 of_node_put(tcsr); in qcom_scm_find_dload_address()
1758 ret = of_property_read_u32_index(np, "qcom,dload-mode", 1, &offset); in qcom_scm_find_dload_address()
1784 status = qcom_scm_call(__scm->dev, desc, &scm_res); in __qcom_scm_qseecom_call()
1786 res->result = scm_res.result[0]; in __qcom_scm_qseecom_call()
1787 res->resp_type = scm_res.result[1]; in __qcom_scm_qseecom_call()
1788 res->data = scm_res.result[2]; in __qcom_scm_qseecom_call()
1797 * qcom_scm_qseecom_call() - Perform a QSEECOM SCM call.
1821 dev_dbg(__scm->dev, "%s: owner=%x, svc=%x, cmd=%x, result=%lld, type=%llx, data=%llx\n", in qcom_scm_qseecom_call()
1822 __func__, desc->owner, desc->svc, desc->cmd, res->result, in qcom_scm_qseecom_call()
1823 res->resp_type, res->data); in qcom_scm_qseecom_call()
1826 dev_err(__scm->dev, "qseecom: scm call failed with error %d\n", status); in qcom_scm_qseecom_call()
1838 WARN_ON(res->result == QSEECOM_RESULT_INCOMPLETE); in qcom_scm_qseecom_call()
1839 WARN_ON(res->result == QSEECOM_RESULT_BLOCKED_ON_LISTENER); in qcom_scm_qseecom_call()
1845 * qcom_scm_qseecom_get_version() - Query the QSEECOM version.
1875 * qcom_scm_qseecom_app_get_id() - Query the app ID for a given QSEE app name.
1883 * Return: Zero on success, nonzero on failure, -ENOENT if the app has not been
1895 return -EINVAL; in qcom_scm_qseecom_app_get_id()
1897 char *name_buf __free(qcom_tzmem) = qcom_tzmem_alloc(__scm->mempool, in qcom_scm_qseecom_app_get_id()
1901 return -ENOMEM; in qcom_scm_qseecom_app_get_id()
1918 return -ENOENT; in qcom_scm_qseecom_app_get_id()
1921 return -EINVAL; in qcom_scm_qseecom_app_get_id()
1924 return -EINVAL; in qcom_scm_qseecom_app_get_id()
1932 * qcom_scm_qseecom_app_send() - Send to and receive data from a given QSEE app.
1942 * respective (app-specific) request data. The QSEE app reads this and returns
1977 return -EIO; in qcom_scm_qseecom_app_send()
1984 * We do not yet support re-entrant calls via the qseecom interface. To prevent
1988 { .compatible = "asus,vivobook-s15" },
1989 { .compatible = "dell,xps13-9345" },
1990 { .compatible = "hp,omnibook-x14" },
1992 { .compatible = "lenovo,flex-5g" },
1993 { .compatible = "lenovo,thinkpad-t14s" },
1994 { .compatible = "lenovo,thinkpad-x13s", },
1995 { .compatible = "lenovo,yoga-slim7x" },
2000 { .compatible = "qcom,sc8180x-primus" },
2001 { .compatible = "qcom,x1e001de-devkit" },
2002 { .compatible = "qcom,x1e80100-crd" },
2003 { .compatible = "qcom,x1e80100-qcp" },
2004 { .compatible = "qcom,x1p42100-crd" },
2052 dev_info(scm->dev, "qseecom: found qseecom with version 0x%x\n", version); in qcom_scm_qseecom_init()
2055 dev_info(scm->dev, "qseecom: untested machine, skipping\n"); in qcom_scm_qseecom_init()
2063 qseecom_dev = platform_device_alloc("qcom_qseecom", -1); in qcom_scm_qseecom_init()
2065 return -ENOMEM; in qcom_scm_qseecom_init()
2067 qseecom_dev->dev.parent = scm->dev; in qcom_scm_qseecom_init()
2075 return devm_add_action_or_reset(scm->dev, qcom_scm_qseecom_free, qseecom_dev); in qcom_scm_qseecom_init()
2088 * qcom_scm_is_available() - Checks if SCM is available
2104 dev_err(__scm->dev, "Firmware unexpectedly passed non-zero wq_ctx\n"); in qcom_scm_assert_valid_wq_ctx()
2105 return -EINVAL; in qcom_scm_assert_valid_wq_ctx()
2119 wait_for_completion(&__scm->waitq_comp); in qcom_scm_wait_for_wq_completion()
2132 complete(&__scm->waitq_comp); in qcom_scm_waitq_wakeup()
2146 dev_err(scm->dev, "GET_WQ_CTX SMC call failed: %d\n", ret); in qcom_scm_irq_handler()
2151 dev_err(scm->dev, "Invalid flags received for wq_ctx: %u\n", flags); in qcom_scm_irq_handler()
2209 scm = devm_kzalloc(&pdev->dev, sizeof(*scm), GFP_KERNEL); in qcom_scm_probe()
2211 return -ENOMEM; in qcom_scm_probe()
2213 scm->dev = &pdev->dev; in qcom_scm_probe()
2214 ret = qcom_scm_find_dload_address(&pdev->dev, &scm->dload_mode_addr); in qcom_scm_probe()
2218 init_completion(&scm->waitq_comp); in qcom_scm_probe()
2219 mutex_init(&scm->scm_bw_lock); in qcom_scm_probe()
2221 scm->path = devm_of_icc_get(&pdev->dev, NULL); in qcom_scm_probe()
2222 if (IS_ERR(scm->path)) in qcom_scm_probe()
2223 return dev_err_probe(&pdev->dev, PTR_ERR(scm->path), in qcom_scm_probe()
2226 scm->core_clk = devm_clk_get_optional(&pdev->dev, "core"); in qcom_scm_probe()
2227 if (IS_ERR(scm->core_clk)) in qcom_scm_probe()
2228 return PTR_ERR(scm->core_clk); in qcom_scm_probe()
2230 scm->iface_clk = devm_clk_get_optional(&pdev->dev, "iface"); in qcom_scm_probe()
2231 if (IS_ERR(scm->iface_clk)) in qcom_scm_probe()
2232 return PTR_ERR(scm->iface_clk); in qcom_scm_probe()
2234 scm->bus_clk = devm_clk_get_optional(&pdev->dev, "bus"); in qcom_scm_probe()
2235 if (IS_ERR(scm->bus_clk)) in qcom_scm_probe()
2236 return PTR_ERR(scm->bus_clk); in qcom_scm_probe()
2238 scm->reset.ops = &qcom_scm_pas_reset_ops; in qcom_scm_probe()
2239 scm->reset.nr_resets = 1; in qcom_scm_probe()
2240 scm->reset.of_node = pdev->dev.of_node; in qcom_scm_probe()
2241 ret = devm_reset_controller_register(&pdev->dev, &scm->reset); in qcom_scm_probe()
2246 ret = clk_set_rate(scm->core_clk, INT_MAX); in qcom_scm_probe()
2255 if (irq != -ENXIO) { in qcom_scm_probe()
2260 ret = devm_request_threaded_irq(__scm->dev, irq, NULL, qcom_scm_irq_handler, in qcom_scm_probe()
2261 IRQF_ONESHOT, "qcom-scm", __scm); in qcom_scm_probe()
2263 dev_err_probe(scm->dev, ret, "Failed to request qcom-scm irq\n"); in qcom_scm_probe()
2280 if (of_property_read_bool(pdev->dev.of_node, "qcom,sdi-enabled") || !download_mode) in qcom_scm_probe()
2283 ret = of_reserved_mem_device_init(__scm->dev); in qcom_scm_probe()
2284 if (ret && ret != -ENODEV) { in qcom_scm_probe()
2285 dev_err_probe(__scm->dev, ret, in qcom_scm_probe()
2290 ret = qcom_tzmem_enable(__scm->dev); in qcom_scm_probe()
2292 dev_err_probe(__scm->dev, ret, in qcom_scm_probe()
2302 __scm->mempool = devm_qcom_tzmem_pool_new(__scm->dev, &pool_config); in qcom_scm_probe()
2303 if (IS_ERR(__scm->mempool)) { in qcom_scm_probe()
2304 ret = dev_err_probe(__scm->dev, PTR_ERR(__scm->mempool), in qcom_scm_probe()
2312 * Note: QSEECOM is fairly self-contained and this only adds the in qcom_scm_probe()
2314 * lifting). So any errors returned here should be either -ENOMEM or in qcom_scm_probe()
2315 * -EINVAL (with the latter only in case there's a bug in our code). in qcom_scm_probe()
2341 { .compatible = "qcom,scm-apq8064" },
2342 { .compatible = "qcom,scm-apq8084" },
2343 { .compatible = "qcom,scm-ipq4019" },
2344 { .compatible = "qcom,scm-msm8953" },
2345 { .compatible = "qcom,scm-msm8974" },
2346 { .compatible = "qcom,scm-msm8996" },