Loading drivers/media/platform/msm/vpu/vpu_configuration.c +70 −75 Original line number Diff line number Diff line Loading @@ -893,126 +893,121 @@ int __calculate_session_load(struct vpu_dev_session *session) return load_bits_per_sec; } int commit_initial_config(struct vpu_dev_session *session) static int __configure_input_port(struct vpu_dev_session *session) { struct vpu_prop_session_input in_param; struct vpu_prop_session_output out_param; struct vpu_ctrl_auto_manual *nr; int ret = 0; if (session->commit_state == COMMITED) return 0; nr = get_control(session->controller, VPU_CTRL_NOISE_REDUCTION); ret = configure_nr_buffers(session, nr); if (ret) { pr_err("Failed to configure nr\n"); goto exit_commit; return ret; } translate_input_format_to_hfi(&session->port_info[INPUT_PORT], &in_param); ret = vpu_hw_session_s_input_params(session->id, &in_param); if (ret) { pr_err("Failed to set port 0 config\n"); goto exit_commit; pr_err("Failed to set input port config\n"); return ret; } return 0; } static int __configure_output_port(struct vpu_dev_session *session) { struct vpu_prop_session_output out_param; int ret = 0; translate_output_format_to_hfi(&session->port_info[OUTPUT_PORT], &out_param); ret = vpu_hw_session_s_output_params(session->id, &out_param); if (ret) { pr_err("Failed to set port 1 config\n"); goto exit_commit; pr_err("Failed to set output port config\n"); return ret; } /* calculate and store the newly computed session load */ return 0; } static int __do_commit(struct vpu_dev_session *session, enum commit_type commit_type, int new_load) { int ret; if (new_load) session->load = __calculate_session_load(session); ret = vpu_hw_session_commit(session->id, CH_COMMIT_AT_ONCE, ret = vpu_hw_session_commit(session->id, commit_type, __get_vpu_load(session->core)); if (ret) { pr_err("Commit Failed (err %d)\n", ret); notify_vpu_event_session(session, VPU_EVENT_INVALID_CONFIG, NULL, 0); goto exit_commit; if (ret) pr_err("Commit Failed\n"); else pr_debug("Commit successful\n"); return ret; } session->commit_state = COMMITED; pr_debug("Initial configuration committed successfully\n"); int commit_initial_config(struct vpu_dev_session *session) { int ret = 0; exit_commit: if (session->commit_state == COMMITED) return 0; ret = __configure_input_port(session); if (ret) return ret; ret = __configure_output_port(session); if (ret) return ret; ret = __do_commit(session, CH_COMMIT_AT_ONCE, 1); if (ret) return ret; session->commit_state = COMMITED; return 0; } int commit_port_config(struct vpu_dev_session *session, int port, int new_load) { struct vpu_prop_session_input in_param; struct vpu_prop_session_output out_param; int ret = 0; if (session->commit_state != COMMITED) return 0; /* wait for initial configuration */ /* defer to initial session commit if not streaming */ if (session->streaming_state != ALL_STREAMING) { session->commit_state = 0; return 0; } if (port == INPUT_PORT) { struct vpu_ctrl_auto_manual *nr = get_control( session->controller, VPU_CTRL_NOISE_REDUCTION); ret = configure_nr_buffers(session, nr); if (ret) { pr_err("Failed to configure nr\n"); ret = __configure_input_port(session); if (ret) return ret; } translate_input_format_to_hfi(&session->port_info[INPUT_PORT], &in_param); ret = vpu_hw_session_s_input_params(session->id, &in_param); } else if (port == OUTPUT_PORT) { translate_output_format_to_hfi(&session->port_info[OUTPUT_PORT], &out_param); ret = vpu_hw_session_s_output_params(session->id, &out_param); } else return -EINVAL; if (ret) { pr_err("Failed to set port config\n"); goto exit_commit; } if (new_load) session->load = __calculate_session_load(session); ret = __configure_output_port(session); if (ret) return ret; ret = vpu_hw_session_commit(session->id, CH_COMMIT_IN_ORDER, __get_vpu_load(session->core)); if (ret) { pr_err("Commit Failed\n"); if (ret == -EIO) ret = -EAGAIN; /* special runtime commit fail retval */ goto exit_commit; } else { return -EINVAL; } exit_commit: return ret; return __do_commit(session, CH_COMMIT_IN_ORDER, new_load); } int commit_control(struct vpu_dev_session *session, int new_load) { int ret = 0; if (session->commit_state != COMMITED) return 0; /* wait for initial configuration */ if (new_load) session->load = __calculate_session_load(session); ret = vpu_hw_session_commit(session->id, CH_COMMIT_AT_ONCE, __get_vpu_load(session->core)); if (ret) { pr_err("Commit Failed\n"); if (ret == -EIO) ret = -EAGAIN; /* special runtime commit fail retval */ goto exit_commit; /* defer to initial session commit if not streaming */ if (session->streaming_state != ALL_STREAMING) { session->commit_state = 0; return 0; } exit_commit: return ret; return __do_commit(session, CH_COMMIT_AT_ONCE, new_load); } drivers/media/platform/msm/vpu/vpu_ioctl.c +4 −4 Original line number Diff line number Diff line Loading @@ -548,10 +548,6 @@ int vpu_set_fmt(struct vpu_client *client, struct v4l2_format *f) translate_v4l2_scan_mode(pix_mp->field); ret = commit_port_config(session, port, 1); if (ret) { pr_err("commit_port_config failed (err %d)\n", ret); return -EINVAL; } mutex_unlock(&session->lock); return ret; Loading Loading @@ -675,6 +671,8 @@ int vpu_set_input(struct vpu_client *client, unsigned int i) ret = call_port_op(session, INPUT_PORT, attach); } ret = commit_port_config(session, INPUT_PORT, 1); exit_s_input: mutex_unlock(&session->lock); return ret; Loading Loading @@ -716,6 +714,8 @@ int vpu_set_output(struct vpu_client *client, unsigned int i) ret = call_port_op(session, OUTPUT_PORT, attach); } ret = commit_port_config(session, OUTPUT_PORT, 1); exit_s_output: mutex_unlock(&session->lock); return ret; Loading Loading
drivers/media/platform/msm/vpu/vpu_configuration.c +70 −75 Original line number Diff line number Diff line Loading @@ -893,126 +893,121 @@ int __calculate_session_load(struct vpu_dev_session *session) return load_bits_per_sec; } int commit_initial_config(struct vpu_dev_session *session) static int __configure_input_port(struct vpu_dev_session *session) { struct vpu_prop_session_input in_param; struct vpu_prop_session_output out_param; struct vpu_ctrl_auto_manual *nr; int ret = 0; if (session->commit_state == COMMITED) return 0; nr = get_control(session->controller, VPU_CTRL_NOISE_REDUCTION); ret = configure_nr_buffers(session, nr); if (ret) { pr_err("Failed to configure nr\n"); goto exit_commit; return ret; } translate_input_format_to_hfi(&session->port_info[INPUT_PORT], &in_param); ret = vpu_hw_session_s_input_params(session->id, &in_param); if (ret) { pr_err("Failed to set port 0 config\n"); goto exit_commit; pr_err("Failed to set input port config\n"); return ret; } return 0; } static int __configure_output_port(struct vpu_dev_session *session) { struct vpu_prop_session_output out_param; int ret = 0; translate_output_format_to_hfi(&session->port_info[OUTPUT_PORT], &out_param); ret = vpu_hw_session_s_output_params(session->id, &out_param); if (ret) { pr_err("Failed to set port 1 config\n"); goto exit_commit; pr_err("Failed to set output port config\n"); return ret; } /* calculate and store the newly computed session load */ return 0; } static int __do_commit(struct vpu_dev_session *session, enum commit_type commit_type, int new_load) { int ret; if (new_load) session->load = __calculate_session_load(session); ret = vpu_hw_session_commit(session->id, CH_COMMIT_AT_ONCE, ret = vpu_hw_session_commit(session->id, commit_type, __get_vpu_load(session->core)); if (ret) { pr_err("Commit Failed (err %d)\n", ret); notify_vpu_event_session(session, VPU_EVENT_INVALID_CONFIG, NULL, 0); goto exit_commit; if (ret) pr_err("Commit Failed\n"); else pr_debug("Commit successful\n"); return ret; } session->commit_state = COMMITED; pr_debug("Initial configuration committed successfully\n"); int commit_initial_config(struct vpu_dev_session *session) { int ret = 0; exit_commit: if (session->commit_state == COMMITED) return 0; ret = __configure_input_port(session); if (ret) return ret; ret = __configure_output_port(session); if (ret) return ret; ret = __do_commit(session, CH_COMMIT_AT_ONCE, 1); if (ret) return ret; session->commit_state = COMMITED; return 0; } int commit_port_config(struct vpu_dev_session *session, int port, int new_load) { struct vpu_prop_session_input in_param; struct vpu_prop_session_output out_param; int ret = 0; if (session->commit_state != COMMITED) return 0; /* wait for initial configuration */ /* defer to initial session commit if not streaming */ if (session->streaming_state != ALL_STREAMING) { session->commit_state = 0; return 0; } if (port == INPUT_PORT) { struct vpu_ctrl_auto_manual *nr = get_control( session->controller, VPU_CTRL_NOISE_REDUCTION); ret = configure_nr_buffers(session, nr); if (ret) { pr_err("Failed to configure nr\n"); ret = __configure_input_port(session); if (ret) return ret; } translate_input_format_to_hfi(&session->port_info[INPUT_PORT], &in_param); ret = vpu_hw_session_s_input_params(session->id, &in_param); } else if (port == OUTPUT_PORT) { translate_output_format_to_hfi(&session->port_info[OUTPUT_PORT], &out_param); ret = vpu_hw_session_s_output_params(session->id, &out_param); } else return -EINVAL; if (ret) { pr_err("Failed to set port config\n"); goto exit_commit; } if (new_load) session->load = __calculate_session_load(session); ret = __configure_output_port(session); if (ret) return ret; ret = vpu_hw_session_commit(session->id, CH_COMMIT_IN_ORDER, __get_vpu_load(session->core)); if (ret) { pr_err("Commit Failed\n"); if (ret == -EIO) ret = -EAGAIN; /* special runtime commit fail retval */ goto exit_commit; } else { return -EINVAL; } exit_commit: return ret; return __do_commit(session, CH_COMMIT_IN_ORDER, new_load); } int commit_control(struct vpu_dev_session *session, int new_load) { int ret = 0; if (session->commit_state != COMMITED) return 0; /* wait for initial configuration */ if (new_load) session->load = __calculate_session_load(session); ret = vpu_hw_session_commit(session->id, CH_COMMIT_AT_ONCE, __get_vpu_load(session->core)); if (ret) { pr_err("Commit Failed\n"); if (ret == -EIO) ret = -EAGAIN; /* special runtime commit fail retval */ goto exit_commit; /* defer to initial session commit if not streaming */ if (session->streaming_state != ALL_STREAMING) { session->commit_state = 0; return 0; } exit_commit: return ret; return __do_commit(session, CH_COMMIT_AT_ONCE, new_load); }
drivers/media/platform/msm/vpu/vpu_ioctl.c +4 −4 Original line number Diff line number Diff line Loading @@ -548,10 +548,6 @@ int vpu_set_fmt(struct vpu_client *client, struct v4l2_format *f) translate_v4l2_scan_mode(pix_mp->field); ret = commit_port_config(session, port, 1); if (ret) { pr_err("commit_port_config failed (err %d)\n", ret); return -EINVAL; } mutex_unlock(&session->lock); return ret; Loading Loading @@ -675,6 +671,8 @@ int vpu_set_input(struct vpu_client *client, unsigned int i) ret = call_port_op(session, INPUT_PORT, attach); } ret = commit_port_config(session, INPUT_PORT, 1); exit_s_input: mutex_unlock(&session->lock); return ret; Loading Loading @@ -716,6 +714,8 @@ int vpu_set_output(struct vpu_client *client, unsigned int i) ret = call_port_op(session, OUTPUT_PORT, attach); } ret = commit_port_config(session, OUTPUT_PORT, 1); exit_s_output: mutex_unlock(&session->lock); return ret; Loading