Merge branch 'net-ipa-three-bug-fixes'
Alex Elder says: ==================== net: ipa: three bug fixes This series contains three bug fixes for the Qualcomm IPA driver. In practice these bugs are unlikke.y to be harmful, but they do represent incorrect code. Version 2 adds "Fixes" tags to two of the patches and fixes a typo in one (found by checkpatch.pl). ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
0433c93dff
@ -500,6 +500,13 @@ static int gsi_channel_stop_command(struct gsi_channel *channel)
|
||||
int ret;
|
||||
|
||||
state = gsi_channel_state(channel);
|
||||
|
||||
/* Channel could have entered STOPPED state since last call
|
||||
* if it timed out. If so, we're done.
|
||||
*/
|
||||
if (state == GSI_CHANNEL_STATE_STOPPED)
|
||||
return 0;
|
||||
|
||||
if (state != GSI_CHANNEL_STATE_STARTED &&
|
||||
state != GSI_CHANNEL_STATE_STOP_IN_PROC)
|
||||
return -EINVAL;
|
||||
@ -789,20 +796,11 @@ int gsi_channel_start(struct gsi *gsi, u32 channel_id)
|
||||
int gsi_channel_stop(struct gsi *gsi, u32 channel_id)
|
||||
{
|
||||
struct gsi_channel *channel = &gsi->channel[channel_id];
|
||||
enum gsi_channel_state state;
|
||||
u32 retries;
|
||||
int ret;
|
||||
|
||||
gsi_channel_freeze(channel);
|
||||
|
||||
/* Channel could have entered STOPPED state since last call if the
|
||||
* STOP command timed out. We won't stop a channel if stopping it
|
||||
* was successful previously (so we still want the freeze above).
|
||||
*/
|
||||
state = gsi_channel_state(channel);
|
||||
if (state == GSI_CHANNEL_STATE_STOPPED)
|
||||
return 0;
|
||||
|
||||
/* RX channels might require a little time to enter STOPPED state */
|
||||
retries = channel->toward_ipa ? 0 : GSI_CHANNEL_STOP_RX_RETRIES;
|
||||
|
||||
|
@ -586,6 +586,21 @@ u32 ipa_cmd_tag_process_count(void)
|
||||
return 4;
|
||||
}
|
||||
|
||||
void ipa_cmd_tag_process(struct ipa *ipa)
|
||||
{
|
||||
u32 count = ipa_cmd_tag_process_count();
|
||||
struct gsi_trans *trans;
|
||||
|
||||
trans = ipa_cmd_trans_alloc(ipa, count);
|
||||
if (trans) {
|
||||
ipa_cmd_tag_process_add(trans);
|
||||
gsi_trans_commit_wait(trans);
|
||||
} else {
|
||||
dev_err(&ipa->pdev->dev,
|
||||
"error allocating %u entry tag transaction\n", count);
|
||||
}
|
||||
}
|
||||
|
||||
static struct ipa_cmd_info *
|
||||
ipa_cmd_info_alloc(struct ipa_endpoint *endpoint, u32 tre_count)
|
||||
{
|
||||
|
@ -171,6 +171,14 @@ void ipa_cmd_tag_process_add(struct gsi_trans *trans);
|
||||
*/
|
||||
u32 ipa_cmd_tag_process_count(void);
|
||||
|
||||
/**
|
||||
* ipa_cmd_tag_process() - Perform a tag process
|
||||
*
|
||||
* @Return: The number of elements to allocate in a transaction
|
||||
* to hold tag process commands
|
||||
*/
|
||||
void ipa_cmd_tag_process(struct ipa *ipa);
|
||||
|
||||
/**
|
||||
* ipa_cmd_trans_alloc() - Allocate a transaction for the command TX endpoint
|
||||
* @ipa: IPA pointer
|
||||
|
@ -44,7 +44,6 @@ static const struct ipa_gsi_endpoint_data ipa_gsi_endpoint_data[] = {
|
||||
.endpoint = {
|
||||
.seq_type = IPA_SEQ_INVALID,
|
||||
.config = {
|
||||
.checksum = true,
|
||||
.aggregation = true,
|
||||
.status_enable = true,
|
||||
.rx = {
|
||||
|
@ -1450,6 +1450,8 @@ void ipa_endpoint_suspend(struct ipa *ipa)
|
||||
if (ipa->modem_netdev)
|
||||
ipa_modem_suspend(ipa->modem_netdev);
|
||||
|
||||
ipa_cmd_tag_process(ipa);
|
||||
|
||||
ipa_endpoint_suspend_one(ipa->name_map[IPA_ENDPOINT_AP_LAN_RX]);
|
||||
ipa_endpoint_suspend_one(ipa->name_map[IPA_ENDPOINT_AP_COMMAND_TX]);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user