Loading drivers/gud/MobiCoreDriver/main.c +68 −2 Original line number Original line Diff line number Diff line Loading @@ -41,6 +41,7 @@ #include <net/tcp_states.h> #include <net/tcp_states.h> #include <net/af_unix.h> #include <net/af_unix.h> #include "main.h" #include "main.h" #include "fastcall.h" #include "fastcall.h" Loading @@ -52,6 +53,10 @@ #include "logging.h" #include "logging.h" #include "build_tag.h" #include "build_tag.h" #if defined(MC_CRYPTO_CLOCK_MANAGEMENT) && defined(MC_USE_DEVICE_TREE) #include <linux/platform_device.h> #endif /* Define a MobiCore device structure for use with dev_debug() etc */ /* Define a MobiCore device structure for use with dev_debug() etc */ struct device_driver mcd_debug_name = { struct device_driver mcd_debug_name = { .name = "MobiCore" .name = "MobiCore" Loading Loading @@ -434,7 +439,8 @@ int mc_get_buffer(struct mc_instance *instance, MCDRV_DBG_VERBOSE(mcd, "size %ld -> order %d --> %ld (2^n pages)", MCDRV_DBG_VERBOSE(mcd, "size %ld -> order %d --> %ld (2^n pages)", len, order, allocated_size); len, order, allocated_size); addr = (void *)__get_free_pages(GFP_USER | __GFP_ZERO, order); addr = (void *)__get_free_pages(GFP_USER | __GFP_ZERO | __GFP_COMP, order); if (addr == NULL) { if (addr == NULL) { MCDRV_DBG_WARN(mcd, "get_free_pages failed"); MCDRV_DBG_WARN(mcd, "get_free_pages failed"); Loading Loading @@ -1521,9 +1527,69 @@ bool mc_sleep_ready(void) #endif #endif } } /* Linux Driver Module Macros */ #if defined(MC_CRYPTO_CLOCK_MANAGEMENT) && defined(MC_USE_DEVICE_TREE) static int mcd_probe(struct platform_device *pdev) { mcd->of_node = pdev->dev.of_node; mobicore_init(); return 0; } static int mcd_remove(struct platform_device *pdev) { return 0; } static int mcd_suspend(struct platform_device *pdev, pm_message_t state) { return 0; } static int mcd_resume(struct platform_device *pdev) { return 0; } static struct of_device_id mcd_match[] = { { .compatible = "qcom,qcrypto", }, {} }; static struct platform_driver mc_plat_driver = { .probe = mcd_probe, .remove = mcd_remove, .suspend = mcd_suspend, .resume = mcd_resume, .driver = { .name = "mcd", .owner = THIS_MODULE, .of_match_table = mcd_match, }, }; static int mobicore_register(void) { return platform_driver_register(&mc_plat_driver); } static void mobicore_unregister(void) { platform_driver_unregister(&mc_plat_driver); mobicore_exit(); } module_init(mobicore_register); module_exit(mobicore_unregister); #else module_init(mobicore_init); module_init(mobicore_init); module_exit(mobicore_exit); module_exit(mobicore_exit); #endif MODULE_AUTHOR("Trustonic Limited"); MODULE_AUTHOR("Trustonic Limited"); MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2"); MODULE_DESCRIPTION("MobiCore driver"); MODULE_DESCRIPTION("MobiCore driver"); drivers/gud/MobiCoreDriver/platforms/MSM8960_SURF_STD/platform.h +43 −41 Original line number Original line Diff line number Diff line Loading @@ -32,8 +32,8 @@ /*--------------- Implementation -------------- */ /*--------------- Implementation -------------- */ #include <soc/qcom/scm.h> #include <soc/qcom/scm.h> #if defined(CONFIG_ARCH_APQ8084) || defined(CONFIG_ARCH_MSM8916) || defined(CONFIG_ARCH_MSM8994) #if defined(CONFIG_ARCH_APQ8084) || defined(CONFIG_ARCH_MSM8916) || \ //#ifdef CONFIG_ARM64 defined(CONFIG_ARCH_MSM8994) #include <soc/qcom/qseecomi.h> #include <soc/qcom/qseecomi.h> #include <linux/slab.h> #include <linux/slab.h> Loading @@ -42,14 +42,16 @@ #include <asm/cacheflush.h> #include <asm/cacheflush.h> #include <linux/errno.h> #include <linux/errno.h> #define SCM_MOBIOS_FNID(s, c) (((((s) & 0xFF) << 8) | ((c) & 0xFF)) | 0x33000000) #define SCM_MOBIOS_FNID(s, c) (((((s) & 0xFF) << 8) | ((c) & 0xFF)) \ | 0x33000000) #define TZ_EXECUTIVE_EXT_ID_PARAM_ID \ #define TZ_EXECUTIVE_EXT_ID_PARAM_ID \ TZ_SYSCALL_CREATE_PARAM_ID_4( \ TZ_SYSCALL_CREATE_PARAM_ID_4( \ TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL, \ TZ_SYSCALL_PARAM_TYPE_BUF_RW, \ TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL) TZ_SYSCALL_PARAM_TYPE_VAL, \ TZ_SYSCALL_PARAM_TYPE_BUF_RW, \ TZ_SYSCALL_PARAM_TYPE_VAL) //#endif #endif #endif /* from following file */ /* from following file */ Loading @@ -57,14 +59,11 @@ #define SCM_CMD_MOBICORE 1 #define SCM_CMD_MOBICORE 1 extern int scm_call(u32 svc_id, u32 cmd_id, const void *cmd_buf, size_t cmd_len, void *resp_buf, size_t resp_len); static inline int smc_fastcall(void *fc_generic, size_t size) static inline int smc_fastcall(void *fc_generic, size_t size) { { #if defined(CONFIG_ARCH_APQ8084) || defined(CONFIG_ARCH_MSM8916) || defined(CONFIG_ARCH_MSM8994) #if defined(CONFIG_ARCH_APQ8084) || defined(CONFIG_ARCH_MSM8916) || \ if (is_scm_armv8()) defined(CONFIG_ARCH_MSM8994) { if (is_scm_armv8()) { struct scm_desc desc = {0}; struct scm_desc desc = {0}; int ret; int ret; void *scm_buf = NULL; void *scm_buf = NULL; Loading @@ -89,15 +88,14 @@ static inline int smc_fastcall(void *fc_generic, size_t size) memcpy(fc_generic, scm_buf, size); memcpy(fc_generic, scm_buf, size); kfree(scm_buf); kfree(scm_buf); return ret; return ret; } } else { else { #endif #endif return scm_call(SCM_SVC_MOBICORE, SCM_CMD_MOBICORE, return scm_call(SCM_SVC_MOBICORE, SCM_CMD_MOBICORE, fc_generic, size, fc_generic, size, fc_generic, size); fc_generic, size); #if defined(CONFIG_ARCH_APQ8084) || defined(CONFIG_ARCH_MSM8916) || defined(CONFIG_ARCH_MSM8994) #if defined(CONFIG_ARCH_APQ8084) || defined(CONFIG_ARCH_MSM8916) || \ defined(CONFIG_ARCH_MSM8994) } } #endif #endif } } Loading @@ -117,4 +115,8 @@ static inline int smc_fastcall(void *fc_generic, size_t size) #define MC_CRYPTO_CLOCK_MANAGEMENT #define MC_CRYPTO_CLOCK_MANAGEMENT #endif #endif #if defined(CONFIG_ARCH_MSM8916) #define MC_USE_DEVICE_TREE #endif #endif /* _MC_PLATFORM_H_ */ #endif /* _MC_PLATFORM_H_ */ drivers/gud/MobiCoreDriver/pm.c +49 −3 Original line number Original line Diff line number Diff line Loading @@ -41,8 +41,15 @@ struct clk *mc_ce_iface_clk = NULL; struct clk *mc_ce_iface_clk = NULL; struct clk *mc_ce_core_clk = NULL; struct clk *mc_ce_core_clk = NULL; struct clk *mc_ce_bus_clk = NULL; struct clk *mc_ce_bus_clk = NULL; #endif /* MC_CRYPTO_CLOCK_MANAGEMENT */ #endif /* MC_CRYPTO_CLOCK_MANAGEMENT */ #if defined(MC_CRYPTO_CLOCK_MANAGEMENT) && defined(MC_USE_DEVICE_TREE) #include <linux/of.h> #define QSEE_CE_CLK_100MHZ 100000000 struct clk *mc_ce_core_src_clk = NULL; #endif /* MC_CRYPTO_CLOCK_MANAGEMENT && MC_USE_DEVICE_TREE */ #ifdef MC_PM_RUNTIME #ifdef MC_PM_RUNTIME static struct mc_context *ctx; static struct mc_context *ctx; Loading Loading @@ -87,7 +94,7 @@ static int mc_suspend_notifier(struct notifier_block *nb, #ifdef MC_MEM_TRACES #ifdef MC_MEM_TRACES mobicore_log_read(); mobicore_log_read(); #endif #endif /* MC_MEM_TRACES */ switch (event) { switch (event) { case PM_SUSPEND_PREPARE: case PM_SUSPEND_PREPARE: Loading Loading @@ -136,6 +143,7 @@ int mc_pm_initialize(struct mc_context *context) ret = register_pm_notifier(&mc_notif_block); ret = register_pm_notifier(&mc_notif_block); if (ret) if (ret) MCDRV_DBG_ERROR(mcd, "device pm register failed"); MCDRV_DBG_ERROR(mcd, "device pm register failed"); return ret; return ret; } } Loading @@ -161,6 +169,37 @@ int mc_pm_clock_initialize(void) { { int ret = 0; int ret = 0; #ifdef MC_USE_DEVICE_TREE /* Get core clk src */ mc_ce_core_src_clk = clk_get(mcd, "core_clk_src"); if (IS_ERR(mc_ce_core_src_clk)) { ret = PTR_ERR(mc_ce_core_src_clk); MCDRV_DBG_ERROR(mcd, "cannot get core clock src with error: %d", ret); goto error; } else { int ce_opp_freq_hz = QSEE_CE_CLK_100MHZ; if (of_property_read_u32(mcd->of_node, "qcom,ce-opp-freq", &ce_opp_freq_hz)) { ce_opp_freq_hz = QSEE_CE_CLK_100MHZ; MCDRV_DBG_ERROR(mcd, "cannot get ce clock frequency. Using %d", ce_opp_freq_hz); } ret = clk_set_rate(mc_ce_core_src_clk, ce_opp_freq_hz); if (ret) { clk_put(mc_ce_core_src_clk); mc_ce_core_src_clk = NULL; MCDRV_DBG_ERROR(mcd, "cannot set core clock src rate"); ret = -EIO; goto error; } } #endif /* MC_CRYPTO_CLOCK_MANAGEMENT && MC_USE_DEVICE_TREE */ /* Get core clk */ /* Get core clk */ mc_ce_core_clk = clk_get(mcd, "core_clk"); mc_ce_core_clk = clk_get(mcd, "core_clk"); if (IS_ERR(mc_ce_core_clk)) { if (IS_ERR(mc_ce_core_clk)) { Loading @@ -185,6 +224,8 @@ int mc_pm_clock_initialize(void) MCDRV_DBG_ERROR(mcd, "cannot get AXI bus clock"); MCDRV_DBG_ERROR(mcd, "cannot get AXI bus clock"); goto error; goto error; } } MCDRV_DBG(mcd, "obtained crypto clocks"); return ret; return ret; error: error: Loading @@ -197,14 +238,19 @@ error: void mc_pm_clock_finalize(void) void mc_pm_clock_finalize(void) { { if (mc_ce_bus_clk != NULL) clk_put(mc_ce_bus_clk); if (mc_ce_iface_clk != NULL) if (mc_ce_iface_clk != NULL) clk_put(mc_ce_iface_clk); clk_put(mc_ce_iface_clk); if (mc_ce_core_clk != NULL) if (mc_ce_core_clk != NULL) clk_put(mc_ce_core_clk); clk_put(mc_ce_core_clk); if (mc_ce_bus_clk != NULL) #ifdef MC_USE_DEVICE_TREE clk_put(mc_ce_bus_clk); if (mc_ce_core_src_clk != NULL) clk_put(mc_ce_core_src_clk); #endif /* MC_CRYPTO_CLOCK_MANAGEMENT && MC_USE_DEVICE_TREE */ } } int mc_pm_clock_enable(void) int mc_pm_clock_enable(void) Loading Loading
drivers/gud/MobiCoreDriver/main.c +68 −2 Original line number Original line Diff line number Diff line Loading @@ -41,6 +41,7 @@ #include <net/tcp_states.h> #include <net/tcp_states.h> #include <net/af_unix.h> #include <net/af_unix.h> #include "main.h" #include "main.h" #include "fastcall.h" #include "fastcall.h" Loading @@ -52,6 +53,10 @@ #include "logging.h" #include "logging.h" #include "build_tag.h" #include "build_tag.h" #if defined(MC_CRYPTO_CLOCK_MANAGEMENT) && defined(MC_USE_DEVICE_TREE) #include <linux/platform_device.h> #endif /* Define a MobiCore device structure for use with dev_debug() etc */ /* Define a MobiCore device structure for use with dev_debug() etc */ struct device_driver mcd_debug_name = { struct device_driver mcd_debug_name = { .name = "MobiCore" .name = "MobiCore" Loading Loading @@ -434,7 +439,8 @@ int mc_get_buffer(struct mc_instance *instance, MCDRV_DBG_VERBOSE(mcd, "size %ld -> order %d --> %ld (2^n pages)", MCDRV_DBG_VERBOSE(mcd, "size %ld -> order %d --> %ld (2^n pages)", len, order, allocated_size); len, order, allocated_size); addr = (void *)__get_free_pages(GFP_USER | __GFP_ZERO, order); addr = (void *)__get_free_pages(GFP_USER | __GFP_ZERO | __GFP_COMP, order); if (addr == NULL) { if (addr == NULL) { MCDRV_DBG_WARN(mcd, "get_free_pages failed"); MCDRV_DBG_WARN(mcd, "get_free_pages failed"); Loading Loading @@ -1521,9 +1527,69 @@ bool mc_sleep_ready(void) #endif #endif } } /* Linux Driver Module Macros */ #if defined(MC_CRYPTO_CLOCK_MANAGEMENT) && defined(MC_USE_DEVICE_TREE) static int mcd_probe(struct platform_device *pdev) { mcd->of_node = pdev->dev.of_node; mobicore_init(); return 0; } static int mcd_remove(struct platform_device *pdev) { return 0; } static int mcd_suspend(struct platform_device *pdev, pm_message_t state) { return 0; } static int mcd_resume(struct platform_device *pdev) { return 0; } static struct of_device_id mcd_match[] = { { .compatible = "qcom,qcrypto", }, {} }; static struct platform_driver mc_plat_driver = { .probe = mcd_probe, .remove = mcd_remove, .suspend = mcd_suspend, .resume = mcd_resume, .driver = { .name = "mcd", .owner = THIS_MODULE, .of_match_table = mcd_match, }, }; static int mobicore_register(void) { return platform_driver_register(&mc_plat_driver); } static void mobicore_unregister(void) { platform_driver_unregister(&mc_plat_driver); mobicore_exit(); } module_init(mobicore_register); module_exit(mobicore_unregister); #else module_init(mobicore_init); module_init(mobicore_init); module_exit(mobicore_exit); module_exit(mobicore_exit); #endif MODULE_AUTHOR("Trustonic Limited"); MODULE_AUTHOR("Trustonic Limited"); MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2"); MODULE_DESCRIPTION("MobiCore driver"); MODULE_DESCRIPTION("MobiCore driver");
drivers/gud/MobiCoreDriver/platforms/MSM8960_SURF_STD/platform.h +43 −41 Original line number Original line Diff line number Diff line Loading @@ -32,8 +32,8 @@ /*--------------- Implementation -------------- */ /*--------------- Implementation -------------- */ #include <soc/qcom/scm.h> #include <soc/qcom/scm.h> #if defined(CONFIG_ARCH_APQ8084) || defined(CONFIG_ARCH_MSM8916) || defined(CONFIG_ARCH_MSM8994) #if defined(CONFIG_ARCH_APQ8084) || defined(CONFIG_ARCH_MSM8916) || \ //#ifdef CONFIG_ARM64 defined(CONFIG_ARCH_MSM8994) #include <soc/qcom/qseecomi.h> #include <soc/qcom/qseecomi.h> #include <linux/slab.h> #include <linux/slab.h> Loading @@ -42,14 +42,16 @@ #include <asm/cacheflush.h> #include <asm/cacheflush.h> #include <linux/errno.h> #include <linux/errno.h> #define SCM_MOBIOS_FNID(s, c) (((((s) & 0xFF) << 8) | ((c) & 0xFF)) | 0x33000000) #define SCM_MOBIOS_FNID(s, c) (((((s) & 0xFF) << 8) | ((c) & 0xFF)) \ | 0x33000000) #define TZ_EXECUTIVE_EXT_ID_PARAM_ID \ #define TZ_EXECUTIVE_EXT_ID_PARAM_ID \ TZ_SYSCALL_CREATE_PARAM_ID_4( \ TZ_SYSCALL_CREATE_PARAM_ID_4( \ TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL, \ TZ_SYSCALL_PARAM_TYPE_BUF_RW, \ TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL) TZ_SYSCALL_PARAM_TYPE_VAL, \ TZ_SYSCALL_PARAM_TYPE_BUF_RW, \ TZ_SYSCALL_PARAM_TYPE_VAL) //#endif #endif #endif /* from following file */ /* from following file */ Loading @@ -57,14 +59,11 @@ #define SCM_CMD_MOBICORE 1 #define SCM_CMD_MOBICORE 1 extern int scm_call(u32 svc_id, u32 cmd_id, const void *cmd_buf, size_t cmd_len, void *resp_buf, size_t resp_len); static inline int smc_fastcall(void *fc_generic, size_t size) static inline int smc_fastcall(void *fc_generic, size_t size) { { #if defined(CONFIG_ARCH_APQ8084) || defined(CONFIG_ARCH_MSM8916) || defined(CONFIG_ARCH_MSM8994) #if defined(CONFIG_ARCH_APQ8084) || defined(CONFIG_ARCH_MSM8916) || \ if (is_scm_armv8()) defined(CONFIG_ARCH_MSM8994) { if (is_scm_armv8()) { struct scm_desc desc = {0}; struct scm_desc desc = {0}; int ret; int ret; void *scm_buf = NULL; void *scm_buf = NULL; Loading @@ -89,15 +88,14 @@ static inline int smc_fastcall(void *fc_generic, size_t size) memcpy(fc_generic, scm_buf, size); memcpy(fc_generic, scm_buf, size); kfree(scm_buf); kfree(scm_buf); return ret; return ret; } } else { else { #endif #endif return scm_call(SCM_SVC_MOBICORE, SCM_CMD_MOBICORE, return scm_call(SCM_SVC_MOBICORE, SCM_CMD_MOBICORE, fc_generic, size, fc_generic, size, fc_generic, size); fc_generic, size); #if defined(CONFIG_ARCH_APQ8084) || defined(CONFIG_ARCH_MSM8916) || defined(CONFIG_ARCH_MSM8994) #if defined(CONFIG_ARCH_APQ8084) || defined(CONFIG_ARCH_MSM8916) || \ defined(CONFIG_ARCH_MSM8994) } } #endif #endif } } Loading @@ -117,4 +115,8 @@ static inline int smc_fastcall(void *fc_generic, size_t size) #define MC_CRYPTO_CLOCK_MANAGEMENT #define MC_CRYPTO_CLOCK_MANAGEMENT #endif #endif #if defined(CONFIG_ARCH_MSM8916) #define MC_USE_DEVICE_TREE #endif #endif /* _MC_PLATFORM_H_ */ #endif /* _MC_PLATFORM_H_ */
drivers/gud/MobiCoreDriver/pm.c +49 −3 Original line number Original line Diff line number Diff line Loading @@ -41,8 +41,15 @@ struct clk *mc_ce_iface_clk = NULL; struct clk *mc_ce_iface_clk = NULL; struct clk *mc_ce_core_clk = NULL; struct clk *mc_ce_core_clk = NULL; struct clk *mc_ce_bus_clk = NULL; struct clk *mc_ce_bus_clk = NULL; #endif /* MC_CRYPTO_CLOCK_MANAGEMENT */ #endif /* MC_CRYPTO_CLOCK_MANAGEMENT */ #if defined(MC_CRYPTO_CLOCK_MANAGEMENT) && defined(MC_USE_DEVICE_TREE) #include <linux/of.h> #define QSEE_CE_CLK_100MHZ 100000000 struct clk *mc_ce_core_src_clk = NULL; #endif /* MC_CRYPTO_CLOCK_MANAGEMENT && MC_USE_DEVICE_TREE */ #ifdef MC_PM_RUNTIME #ifdef MC_PM_RUNTIME static struct mc_context *ctx; static struct mc_context *ctx; Loading Loading @@ -87,7 +94,7 @@ static int mc_suspend_notifier(struct notifier_block *nb, #ifdef MC_MEM_TRACES #ifdef MC_MEM_TRACES mobicore_log_read(); mobicore_log_read(); #endif #endif /* MC_MEM_TRACES */ switch (event) { switch (event) { case PM_SUSPEND_PREPARE: case PM_SUSPEND_PREPARE: Loading Loading @@ -136,6 +143,7 @@ int mc_pm_initialize(struct mc_context *context) ret = register_pm_notifier(&mc_notif_block); ret = register_pm_notifier(&mc_notif_block); if (ret) if (ret) MCDRV_DBG_ERROR(mcd, "device pm register failed"); MCDRV_DBG_ERROR(mcd, "device pm register failed"); return ret; return ret; } } Loading @@ -161,6 +169,37 @@ int mc_pm_clock_initialize(void) { { int ret = 0; int ret = 0; #ifdef MC_USE_DEVICE_TREE /* Get core clk src */ mc_ce_core_src_clk = clk_get(mcd, "core_clk_src"); if (IS_ERR(mc_ce_core_src_clk)) { ret = PTR_ERR(mc_ce_core_src_clk); MCDRV_DBG_ERROR(mcd, "cannot get core clock src with error: %d", ret); goto error; } else { int ce_opp_freq_hz = QSEE_CE_CLK_100MHZ; if (of_property_read_u32(mcd->of_node, "qcom,ce-opp-freq", &ce_opp_freq_hz)) { ce_opp_freq_hz = QSEE_CE_CLK_100MHZ; MCDRV_DBG_ERROR(mcd, "cannot get ce clock frequency. Using %d", ce_opp_freq_hz); } ret = clk_set_rate(mc_ce_core_src_clk, ce_opp_freq_hz); if (ret) { clk_put(mc_ce_core_src_clk); mc_ce_core_src_clk = NULL; MCDRV_DBG_ERROR(mcd, "cannot set core clock src rate"); ret = -EIO; goto error; } } #endif /* MC_CRYPTO_CLOCK_MANAGEMENT && MC_USE_DEVICE_TREE */ /* Get core clk */ /* Get core clk */ mc_ce_core_clk = clk_get(mcd, "core_clk"); mc_ce_core_clk = clk_get(mcd, "core_clk"); if (IS_ERR(mc_ce_core_clk)) { if (IS_ERR(mc_ce_core_clk)) { Loading @@ -185,6 +224,8 @@ int mc_pm_clock_initialize(void) MCDRV_DBG_ERROR(mcd, "cannot get AXI bus clock"); MCDRV_DBG_ERROR(mcd, "cannot get AXI bus clock"); goto error; goto error; } } MCDRV_DBG(mcd, "obtained crypto clocks"); return ret; return ret; error: error: Loading @@ -197,14 +238,19 @@ error: void mc_pm_clock_finalize(void) void mc_pm_clock_finalize(void) { { if (mc_ce_bus_clk != NULL) clk_put(mc_ce_bus_clk); if (mc_ce_iface_clk != NULL) if (mc_ce_iface_clk != NULL) clk_put(mc_ce_iface_clk); clk_put(mc_ce_iface_clk); if (mc_ce_core_clk != NULL) if (mc_ce_core_clk != NULL) clk_put(mc_ce_core_clk); clk_put(mc_ce_core_clk); if (mc_ce_bus_clk != NULL) #ifdef MC_USE_DEVICE_TREE clk_put(mc_ce_bus_clk); if (mc_ce_core_src_clk != NULL) clk_put(mc_ce_core_src_clk); #endif /* MC_CRYPTO_CLOCK_MANAGEMENT && MC_USE_DEVICE_TREE */ } } int mc_pm_clock_enable(void) int mc_pm_clock_enable(void) Loading