Loading drivers/platform/msm/ipa/ipa_v2/ipa_i.h +1 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ #define IPA_UC_FINISH_MAX 6 #define IPA_UC_WAIT_MIN_SLEEP 1000 #define IPA_UC_WAII_MAX_SLEEP 1200 #define IPA_BAM_STOP_MAX_RETRY 10 #define IPA_MAX_STATUS_STAT_NUM 30 Loading drivers/platform/msm/ipa/ipa_v2/ipa_uc.c +15 −0 Original line number Diff line number Diff line Loading @@ -590,6 +590,7 @@ int ipa_uc_send_cmd(u32 cmd, u32 opcode, u32 expected_status, { int index; union IpaHwCpuCmdCompletedResponseData_t uc_rsp; int retries = 0; mutex_lock(&ipa_ctx->uc_ctx.uc_lock); Loading @@ -599,6 +600,7 @@ int ipa_uc_send_cmd(u32 cmd, u32 opcode, u32 expected_status, return -EBADF; } send_cmd: init_completion(&ipa_ctx->uc_ctx.uc_completion); ipa_ctx->uc_ctx.uc_sram_mmio->cmdParams = cmd; Loading Loading @@ -658,6 +660,19 @@ int ipa_uc_send_cmd(u32 cmd, u32 opcode, u32 expected_status, } if (ipa_ctx->uc_ctx.uc_status != expected_status) { if (IPA_HW_2_CPU_WDI_RX_FSM_TRANSITION_ERROR == ipa_ctx->uc_ctx.uc_status) { retries++; if (retries == IPA_BAM_STOP_MAX_RETRY) { IPAERR("Failed after %d tries\n", retries); } else { /* sleep for short period to flush IPA */ usleep_range(IPA_UC_WAIT_MIN_SLEEP, IPA_UC_WAII_MAX_SLEEP); goto send_cmd; } } IPAERR("Recevied status %u, Expected status %u\n", ipa_ctx->uc_ctx.uc_status, expected_status); ipa_ctx->uc_ctx.pending_cmd = -1; Loading drivers/platform/msm/ipa/ipa_v2/ipa_uc_offload_i.h +43 −2 Original line number Diff line number Diff line /* Copyright (c) 2016, The Linux Foundation. All rights reserved. /* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -441,7 +441,7 @@ enum ipa_hw_offload_channel_states { /** * enum ipa_hw_2_cpu_cmd_resp_status - Values that represent * enum ipa_hw_2_cpu_offload_cmd_resp_status - Values that represent * offload related command response status to be sent to CPU. */ enum ipa_hw_2_cpu_offload_cmd_resp_status { Loading Loading @@ -477,6 +477,47 @@ enum ipa_hw_2_cpu_offload_cmd_resp_status { FEATURE_ENUM_VAL(IPA_HW_FEATURE_OFFLOAD, 14), }; /** * enum ipa_hw_2_cpu_cmd_resp_status - Values that represent WDI related * command response status to be sent to CPU. */ enum ipa_hw_2_cpu_cmd_resp_status { IPA_HW_2_CPU_WDI_CMD_STATUS_SUCCESS = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 0), IPA_HW_2_CPU_MAX_WDI_TX_CHANNELS = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 1), IPA_HW_2_CPU_WDI_CE_RING_OVERRUN_POSSIBILITY = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 2), IPA_HW_2_CPU_WDI_CE_RING_SET_UP_FAILURE = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 3), IPA_HW_2_CPU_WDI_CE_RING_PARAMS_UNALIGNED = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 4), IPA_HW_2_CPU_WDI_COMP_RING_OVERRUN_POSSIBILITY = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 5), IPA_HW_2_CPU_WDI_COMP_RING_SET_UP_FAILURE = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 6), IPA_HW_2_CPU_WDI_COMP_RING_PARAMS_UNALIGNED = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 7), IPA_HW_2_CPU_WDI_UNKNOWN_TX_CHANNEL = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 8), IPA_HW_2_CPU_WDI_TX_INVALID_FSM_TRANSITION = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 9), IPA_HW_2_CPU_WDI_TX_FSM_TRANSITION_ERROR = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 10), IPA_HW_2_CPU_MAX_WDI_RX_CHANNELS = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 11), IPA_HW_2_CPU_WDI_RX_RING_PARAMS_UNALIGNED = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 12), IPA_HW_2_CPU_WDI_RX_RING_SET_UP_FAILURE = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 13), IPA_HW_2_CPU_WDI_UNKNOWN_RX_CHANNEL = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 14), IPA_HW_2_CPU_WDI_RX_INVALID_FSM_TRANSITION = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 15), IPA_HW_2_CPU_WDI_RX_FSM_TRANSITION_ERROR = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 16), }; /** * struct IpaHwSetUpCmd - * Loading drivers/platform/msm/ipa/ipa_v2/ipa_uc_wdi.c +0 −41 Original line number Diff line number Diff line Loading @@ -109,47 +109,6 @@ enum ipa_cpu_2_hw_wdi_commands { FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 7), }; /** * enum ipa_hw_2_cpu_cmd_resp_status - Values that represent WDI related * command response status to be sent to CPU. */ enum ipa_hw_2_cpu_cmd_resp_status { IPA_HW_2_CPU_WDI_CMD_STATUS_SUCCESS = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 0), IPA_HW_2_CPU_MAX_WDI_TX_CHANNELS = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 1), IPA_HW_2_CPU_WDI_CE_RING_OVERRUN_POSSIBILITY = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 2), IPA_HW_2_CPU_WDI_CE_RING_SET_UP_FAILURE = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 3), IPA_HW_2_CPU_WDI_CE_RING_PARAMS_UNALIGNED = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 4), IPA_HW_2_CPU_WDI_COMP_RING_OVERRUN_POSSIBILITY = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 5), IPA_HW_2_CPU_WDI_COMP_RING_SET_UP_FAILURE = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 6), IPA_HW_2_CPU_WDI_COMP_RING_PARAMS_UNALIGNED = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 7), IPA_HW_2_CPU_WDI_UNKNOWN_TX_CHANNEL = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 8), IPA_HW_2_CPU_WDI_TX_INVALID_FSM_TRANSITION = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 9), IPA_HW_2_CPU_WDI_TX_FSM_TRANSITION_ERROR = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 10), IPA_HW_2_CPU_MAX_WDI_RX_CHANNELS = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 11), IPA_HW_2_CPU_WDI_RX_RING_PARAMS_UNALIGNED = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 12), IPA_HW_2_CPU_WDI_RX_RING_SET_UP_FAILURE = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 13), IPA_HW_2_CPU_WDI_UNKNOWN_RX_CHANNEL = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 14), IPA_HW_2_CPU_WDI_RX_INVALID_FSM_TRANSITION = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 15), IPA_HW_2_CPU_WDI_RX_FSM_TRANSITION_ERROR = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 16), }; /** * enum ipa_hw_wdi_errors - WDI specific error types. * @IPA_HW_WDI_ERROR_NONE : No error persists Loading Loading
drivers/platform/msm/ipa/ipa_v2/ipa_i.h +1 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ #define IPA_UC_FINISH_MAX 6 #define IPA_UC_WAIT_MIN_SLEEP 1000 #define IPA_UC_WAII_MAX_SLEEP 1200 #define IPA_BAM_STOP_MAX_RETRY 10 #define IPA_MAX_STATUS_STAT_NUM 30 Loading
drivers/platform/msm/ipa/ipa_v2/ipa_uc.c +15 −0 Original line number Diff line number Diff line Loading @@ -590,6 +590,7 @@ int ipa_uc_send_cmd(u32 cmd, u32 opcode, u32 expected_status, { int index; union IpaHwCpuCmdCompletedResponseData_t uc_rsp; int retries = 0; mutex_lock(&ipa_ctx->uc_ctx.uc_lock); Loading @@ -599,6 +600,7 @@ int ipa_uc_send_cmd(u32 cmd, u32 opcode, u32 expected_status, return -EBADF; } send_cmd: init_completion(&ipa_ctx->uc_ctx.uc_completion); ipa_ctx->uc_ctx.uc_sram_mmio->cmdParams = cmd; Loading Loading @@ -658,6 +660,19 @@ int ipa_uc_send_cmd(u32 cmd, u32 opcode, u32 expected_status, } if (ipa_ctx->uc_ctx.uc_status != expected_status) { if (IPA_HW_2_CPU_WDI_RX_FSM_TRANSITION_ERROR == ipa_ctx->uc_ctx.uc_status) { retries++; if (retries == IPA_BAM_STOP_MAX_RETRY) { IPAERR("Failed after %d tries\n", retries); } else { /* sleep for short period to flush IPA */ usleep_range(IPA_UC_WAIT_MIN_SLEEP, IPA_UC_WAII_MAX_SLEEP); goto send_cmd; } } IPAERR("Recevied status %u, Expected status %u\n", ipa_ctx->uc_ctx.uc_status, expected_status); ipa_ctx->uc_ctx.pending_cmd = -1; Loading
drivers/platform/msm/ipa/ipa_v2/ipa_uc_offload_i.h +43 −2 Original line number Diff line number Diff line /* Copyright (c) 2016, The Linux Foundation. All rights reserved. /* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -441,7 +441,7 @@ enum ipa_hw_offload_channel_states { /** * enum ipa_hw_2_cpu_cmd_resp_status - Values that represent * enum ipa_hw_2_cpu_offload_cmd_resp_status - Values that represent * offload related command response status to be sent to CPU. */ enum ipa_hw_2_cpu_offload_cmd_resp_status { Loading Loading @@ -477,6 +477,47 @@ enum ipa_hw_2_cpu_offload_cmd_resp_status { FEATURE_ENUM_VAL(IPA_HW_FEATURE_OFFLOAD, 14), }; /** * enum ipa_hw_2_cpu_cmd_resp_status - Values that represent WDI related * command response status to be sent to CPU. */ enum ipa_hw_2_cpu_cmd_resp_status { IPA_HW_2_CPU_WDI_CMD_STATUS_SUCCESS = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 0), IPA_HW_2_CPU_MAX_WDI_TX_CHANNELS = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 1), IPA_HW_2_CPU_WDI_CE_RING_OVERRUN_POSSIBILITY = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 2), IPA_HW_2_CPU_WDI_CE_RING_SET_UP_FAILURE = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 3), IPA_HW_2_CPU_WDI_CE_RING_PARAMS_UNALIGNED = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 4), IPA_HW_2_CPU_WDI_COMP_RING_OVERRUN_POSSIBILITY = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 5), IPA_HW_2_CPU_WDI_COMP_RING_SET_UP_FAILURE = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 6), IPA_HW_2_CPU_WDI_COMP_RING_PARAMS_UNALIGNED = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 7), IPA_HW_2_CPU_WDI_UNKNOWN_TX_CHANNEL = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 8), IPA_HW_2_CPU_WDI_TX_INVALID_FSM_TRANSITION = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 9), IPA_HW_2_CPU_WDI_TX_FSM_TRANSITION_ERROR = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 10), IPA_HW_2_CPU_MAX_WDI_RX_CHANNELS = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 11), IPA_HW_2_CPU_WDI_RX_RING_PARAMS_UNALIGNED = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 12), IPA_HW_2_CPU_WDI_RX_RING_SET_UP_FAILURE = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 13), IPA_HW_2_CPU_WDI_UNKNOWN_RX_CHANNEL = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 14), IPA_HW_2_CPU_WDI_RX_INVALID_FSM_TRANSITION = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 15), IPA_HW_2_CPU_WDI_RX_FSM_TRANSITION_ERROR = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 16), }; /** * struct IpaHwSetUpCmd - * Loading
drivers/platform/msm/ipa/ipa_v2/ipa_uc_wdi.c +0 −41 Original line number Diff line number Diff line Loading @@ -109,47 +109,6 @@ enum ipa_cpu_2_hw_wdi_commands { FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 7), }; /** * enum ipa_hw_2_cpu_cmd_resp_status - Values that represent WDI related * command response status to be sent to CPU. */ enum ipa_hw_2_cpu_cmd_resp_status { IPA_HW_2_CPU_WDI_CMD_STATUS_SUCCESS = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 0), IPA_HW_2_CPU_MAX_WDI_TX_CHANNELS = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 1), IPA_HW_2_CPU_WDI_CE_RING_OVERRUN_POSSIBILITY = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 2), IPA_HW_2_CPU_WDI_CE_RING_SET_UP_FAILURE = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 3), IPA_HW_2_CPU_WDI_CE_RING_PARAMS_UNALIGNED = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 4), IPA_HW_2_CPU_WDI_COMP_RING_OVERRUN_POSSIBILITY = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 5), IPA_HW_2_CPU_WDI_COMP_RING_SET_UP_FAILURE = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 6), IPA_HW_2_CPU_WDI_COMP_RING_PARAMS_UNALIGNED = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 7), IPA_HW_2_CPU_WDI_UNKNOWN_TX_CHANNEL = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 8), IPA_HW_2_CPU_WDI_TX_INVALID_FSM_TRANSITION = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 9), IPA_HW_2_CPU_WDI_TX_FSM_TRANSITION_ERROR = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 10), IPA_HW_2_CPU_MAX_WDI_RX_CHANNELS = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 11), IPA_HW_2_CPU_WDI_RX_RING_PARAMS_UNALIGNED = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 12), IPA_HW_2_CPU_WDI_RX_RING_SET_UP_FAILURE = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 13), IPA_HW_2_CPU_WDI_UNKNOWN_RX_CHANNEL = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 14), IPA_HW_2_CPU_WDI_RX_INVALID_FSM_TRANSITION = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 15), IPA_HW_2_CPU_WDI_RX_FSM_TRANSITION_ERROR = FEATURE_ENUM_VAL(IPA_HW_FEATURE_WDI, 16), }; /** * enum ipa_hw_wdi_errors - WDI specific error types. * @IPA_HW_WDI_ERROR_NONE : No error persists Loading