Loading drivers/misc/qseecom.c +21 −10 Original line number Original line Diff line number Diff line Loading @@ -90,6 +90,10 @@ #define PHY_ADDR_4G (1ULL<<32) #define PHY_ADDR_4G (1ULL<<32) #define QSEECOM_STATE_NOT_READY 0 #define QSEECOM_STATE_SUSPEND 1 #define QSEECOM_STATE_READY 2 /* /* * default ce info unit to 0 for * default ce info unit to 0 for * services which * services which Loading Loading @@ -227,7 +231,7 @@ struct qseecom_control { uint32_t app_block_ref_cnt; uint32_t app_block_ref_cnt; wait_queue_head_t app_block_wq; wait_queue_head_t app_block_wq; atomic_t in_suspend; /* 1: in suspend; 0: not in suspend*/ atomic_t qseecom_state; }; }; struct qseecom_sec_buf_fd_info { struct qseecom_sec_buf_fd_info { Loading Loading @@ -3701,8 +3705,9 @@ int qseecom_start_app(struct qseecom_handle **handle, ion_phys_addr_t pa; ion_phys_addr_t pa; uint32_t fw_size, app_arch; uint32_t fw_size, app_arch; if (atomic_read(&qseecom.in_suspend) == 1) { if (atomic_read(&qseecom.qseecom_state) != QSEECOM_STATE_READY) { pr_err("Not allowed to be called in suspend state\n"); pr_err("Not allowed to be called in %d state\n", atomic_read(&qseecom.qseecom_state)); return -EPERM; return -EPERM; } } if (!app_name) { if (!app_name) { Loading Loading @@ -3859,10 +3864,12 @@ int qseecom_shutdown_app(struct qseecom_handle **handle) unsigned long flags = 0; unsigned long flags = 0; bool found_handle = false; bool found_handle = false; if (atomic_read(&qseecom.in_suspend) == 1) { if (atomic_read(&qseecom.qseecom_state) != QSEECOM_STATE_READY) { pr_err("Not allowed to be called in suspend state\n"); pr_err("Not allowed to be called in %d state\n", atomic_read(&qseecom.qseecom_state)); return -EPERM; return -EPERM; } } if ((handle == NULL) || (*handle == NULL)) { if ((handle == NULL) || (*handle == NULL)) { pr_err("Handle is not initialized\n"); pr_err("Handle is not initialized\n"); return -EINVAL; return -EINVAL; Loading Loading @@ -3925,10 +3932,12 @@ int qseecom_send_command(struct qseecom_handle *handle, void *send_buf, struct qseecom_dev_handle *data; struct qseecom_dev_handle *data; bool perf_enabled = false; bool perf_enabled = false; if (atomic_read(&qseecom.in_suspend) == 1) { if (atomic_read(&qseecom.qseecom_state) != QSEECOM_STATE_READY) { pr_err("Not allowed to be called in suspend state\n"); pr_err("Not allowed to be called in %d state\n", atomic_read(&qseecom.qseecom_state)); return -EPERM; return -EPERM; } } if (handle == NULL) { if (handle == NULL) { pr_err("Handle is not initialized\n"); pr_err("Handle is not initialized\n"); return -EINVAL; return -EINVAL; Loading Loading @@ -7528,7 +7537,7 @@ static int qseecom_probe(struct platform_device *pdev) qseecom.ce_drv.ce_clk = NULL; qseecom.ce_drv.ce_clk = NULL; qseecom.ce_drv.ce_core_src_clk = NULL; qseecom.ce_drv.ce_core_src_clk = NULL; qseecom.ce_drv.ce_bus_clk = NULL; qseecom.ce_drv.ce_bus_clk = NULL; atomic_set(&qseecom.in_suspend, 0); atomic_set(&qseecom.qseecom_state, QSEECOM_STATE_NOT_READY); qseecom.app_block_ref_cnt = 0; qseecom.app_block_ref_cnt = 0; init_waitqueue_head(&qseecom.app_block_wq); init_waitqueue_head(&qseecom.app_block_wq); Loading Loading @@ -7743,6 +7752,7 @@ static int qseecom_probe(struct platform_device *pdev) if (!qseecom.qsee_perf_client) if (!qseecom.qsee_perf_client) pr_err("Unable to register bus client\n"); pr_err("Unable to register bus client\n"); atomic_set(&qseecom.qseecom_state, QSEECOM_STATE_READY); return 0; return 0; exit_destroy_ion_client: exit_destroy_ion_client: Loading @@ -7767,6 +7777,7 @@ static int qseecom_remove(struct platform_device *pdev) struct qseecom_ce_pipe_entry *pce_entry; struct qseecom_ce_pipe_entry *pce_entry; struct qseecom_ce_info_use *pce_info_use; struct qseecom_ce_info_use *pce_info_use; atomic_set(&qseecom.qseecom_state, QSEECOM_STATE_NOT_READY); spin_lock_irqsave(&qseecom.registered_kclient_list_lock, flags); spin_lock_irqsave(&qseecom.registered_kclient_list_lock, flags); list_for_each_entry(kclient, &qseecom.registered_kclient_list_head, list_for_each_entry(kclient, &qseecom.registered_kclient_list_head, Loading Loading @@ -7859,7 +7870,7 @@ static int qseecom_suspend(struct platform_device *pdev, pm_message_t state) struct qseecom_clk *qclk; struct qseecom_clk *qclk; qclk = &qseecom.qsee; qclk = &qseecom.qsee; atomic_set(&qseecom.in_suspend, 1); atomic_set(&qseecom.qseecom_state, QSEECOM_STATE_SUSPEND); if (qseecom.no_clock_support) if (qseecom.no_clock_support) return 0; return 0; Loading Loading @@ -7970,7 +7981,7 @@ err: mutex_unlock(&qsee_bw_mutex); mutex_unlock(&qsee_bw_mutex); ret = -EIO; ret = -EIO; exit: exit: atomic_set(&qseecom.in_suspend, 0); atomic_set(&qseecom.qseecom_state, QSEECOM_STATE_READY); return ret; return ret; } } static struct of_device_id qseecom_match[] = { static struct of_device_id qseecom_match[] = { Loading Loading
drivers/misc/qseecom.c +21 −10 Original line number Original line Diff line number Diff line Loading @@ -90,6 +90,10 @@ #define PHY_ADDR_4G (1ULL<<32) #define PHY_ADDR_4G (1ULL<<32) #define QSEECOM_STATE_NOT_READY 0 #define QSEECOM_STATE_SUSPEND 1 #define QSEECOM_STATE_READY 2 /* /* * default ce info unit to 0 for * default ce info unit to 0 for * services which * services which Loading Loading @@ -227,7 +231,7 @@ struct qseecom_control { uint32_t app_block_ref_cnt; uint32_t app_block_ref_cnt; wait_queue_head_t app_block_wq; wait_queue_head_t app_block_wq; atomic_t in_suspend; /* 1: in suspend; 0: not in suspend*/ atomic_t qseecom_state; }; }; struct qseecom_sec_buf_fd_info { struct qseecom_sec_buf_fd_info { Loading Loading @@ -3701,8 +3705,9 @@ int qseecom_start_app(struct qseecom_handle **handle, ion_phys_addr_t pa; ion_phys_addr_t pa; uint32_t fw_size, app_arch; uint32_t fw_size, app_arch; if (atomic_read(&qseecom.in_suspend) == 1) { if (atomic_read(&qseecom.qseecom_state) != QSEECOM_STATE_READY) { pr_err("Not allowed to be called in suspend state\n"); pr_err("Not allowed to be called in %d state\n", atomic_read(&qseecom.qseecom_state)); return -EPERM; return -EPERM; } } if (!app_name) { if (!app_name) { Loading Loading @@ -3859,10 +3864,12 @@ int qseecom_shutdown_app(struct qseecom_handle **handle) unsigned long flags = 0; unsigned long flags = 0; bool found_handle = false; bool found_handle = false; if (atomic_read(&qseecom.in_suspend) == 1) { if (atomic_read(&qseecom.qseecom_state) != QSEECOM_STATE_READY) { pr_err("Not allowed to be called in suspend state\n"); pr_err("Not allowed to be called in %d state\n", atomic_read(&qseecom.qseecom_state)); return -EPERM; return -EPERM; } } if ((handle == NULL) || (*handle == NULL)) { if ((handle == NULL) || (*handle == NULL)) { pr_err("Handle is not initialized\n"); pr_err("Handle is not initialized\n"); return -EINVAL; return -EINVAL; Loading Loading @@ -3925,10 +3932,12 @@ int qseecom_send_command(struct qseecom_handle *handle, void *send_buf, struct qseecom_dev_handle *data; struct qseecom_dev_handle *data; bool perf_enabled = false; bool perf_enabled = false; if (atomic_read(&qseecom.in_suspend) == 1) { if (atomic_read(&qseecom.qseecom_state) != QSEECOM_STATE_READY) { pr_err("Not allowed to be called in suspend state\n"); pr_err("Not allowed to be called in %d state\n", atomic_read(&qseecom.qseecom_state)); return -EPERM; return -EPERM; } } if (handle == NULL) { if (handle == NULL) { pr_err("Handle is not initialized\n"); pr_err("Handle is not initialized\n"); return -EINVAL; return -EINVAL; Loading Loading @@ -7528,7 +7537,7 @@ static int qseecom_probe(struct platform_device *pdev) qseecom.ce_drv.ce_clk = NULL; qseecom.ce_drv.ce_clk = NULL; qseecom.ce_drv.ce_core_src_clk = NULL; qseecom.ce_drv.ce_core_src_clk = NULL; qseecom.ce_drv.ce_bus_clk = NULL; qseecom.ce_drv.ce_bus_clk = NULL; atomic_set(&qseecom.in_suspend, 0); atomic_set(&qseecom.qseecom_state, QSEECOM_STATE_NOT_READY); qseecom.app_block_ref_cnt = 0; qseecom.app_block_ref_cnt = 0; init_waitqueue_head(&qseecom.app_block_wq); init_waitqueue_head(&qseecom.app_block_wq); Loading Loading @@ -7743,6 +7752,7 @@ static int qseecom_probe(struct platform_device *pdev) if (!qseecom.qsee_perf_client) if (!qseecom.qsee_perf_client) pr_err("Unable to register bus client\n"); pr_err("Unable to register bus client\n"); atomic_set(&qseecom.qseecom_state, QSEECOM_STATE_READY); return 0; return 0; exit_destroy_ion_client: exit_destroy_ion_client: Loading @@ -7767,6 +7777,7 @@ static int qseecom_remove(struct platform_device *pdev) struct qseecom_ce_pipe_entry *pce_entry; struct qseecom_ce_pipe_entry *pce_entry; struct qseecom_ce_info_use *pce_info_use; struct qseecom_ce_info_use *pce_info_use; atomic_set(&qseecom.qseecom_state, QSEECOM_STATE_NOT_READY); spin_lock_irqsave(&qseecom.registered_kclient_list_lock, flags); spin_lock_irqsave(&qseecom.registered_kclient_list_lock, flags); list_for_each_entry(kclient, &qseecom.registered_kclient_list_head, list_for_each_entry(kclient, &qseecom.registered_kclient_list_head, Loading Loading @@ -7859,7 +7870,7 @@ static int qseecom_suspend(struct platform_device *pdev, pm_message_t state) struct qseecom_clk *qclk; struct qseecom_clk *qclk; qclk = &qseecom.qsee; qclk = &qseecom.qsee; atomic_set(&qseecom.in_suspend, 1); atomic_set(&qseecom.qseecom_state, QSEECOM_STATE_SUSPEND); if (qseecom.no_clock_support) if (qseecom.no_clock_support) return 0; return 0; Loading Loading @@ -7970,7 +7981,7 @@ err: mutex_unlock(&qsee_bw_mutex); mutex_unlock(&qsee_bw_mutex); ret = -EIO; ret = -EIO; exit: exit: atomic_set(&qseecom.in_suspend, 0); atomic_set(&qseecom.qseecom_state, QSEECOM_STATE_READY); return ret; return ret; } } static struct of_device_id qseecom_match[] = { static struct of_device_id qseecom_match[] = { Loading