History

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). ====================

David S. Miller committed 6 years ago

Commit 0433c932 parents f2ca673 6cb63ea5 files · +32 −10Browse files

Unified · Split

5 files
  1. drivers/net/ipa/gsi.c +7 −9
  2. drivers/net/ipa/ipa_cmd.c +15 −0
  3. drivers/net/ipa/ipa_cmd.h +8 −0
  4. drivers/net/ipa/ipa_data-sdm845.c +0 −1
  5. drivers/net/ipa/ipa_endpoint.c +2 −0
drivers/net/ipa/gsi.c+7−9
@@ -500,6 +500,13 @@ static int gsi_channel_stop_command(struct gsi_channel *channel) · 499 unmodified lines
500 int ret;500 int ret;
501 501
502 state = gsi_channel_state(channel);502 state = gsi_channel_state(channel);
503
504 /* Channel could have entered STOPPED state since last call
505 * if it timed out. If so, we're done.
506 */
507 if (state == GSI_CHANNEL_STATE_STOPPED)
508 return 0;
509
503 if (state != GSI_CHANNEL_STATE_STARTED &&510 if (state != GSI_CHANNEL_STATE_STARTED &&
504 state != GSI_CHANNEL_STATE_STOP_IN_PROC)511 state != GSI_CHANNEL_STATE_STOP_IN_PROC)
505 return -EINVAL;512 return -EINVAL;
@@ -789,20 +796,11 @@ int gsi_channel_start(struct gsi *gsi, u32 channel_id) · 283 unmodified lines
789int gsi_channel_stop(struct gsi *gsi, u32 channel_id)796int gsi_channel_stop(struct gsi *gsi, u32 channel_id)
790{797{
791 struct gsi_channel *channel = &gsi->channel[channel_id];798 struct gsi_channel *channel = &gsi->channel[channel_id];
792 enum gsi_channel_state state;
793 u32 retries;799 u32 retries;
794 int ret;800 int ret;
795 801
796 gsi_channel_freeze(channel);802 gsi_channel_freeze(channel);
797 803
798 /* Channel could have entered STOPPED state since last call if the
799 * STOP command timed out. We won't stop a channel if stopping it
800 * was successful previously (so we still want the freeze above).
801 */
802 state = gsi_channel_state(channel);
803 if (state == GSI_CHANNEL_STATE_STOPPED)
804 return 0;
805
806 /* RX channels might require a little time to enter STOPPED state */804 /* RX channels might require a little time to enter STOPPED state */
807 retries = channel->toward_ipa ? 0 : GSI_CHANNEL_STOP_RX_RETRIES;805 retries = channel->toward_ipa ? 0 : GSI_CHANNEL_STOP_RX_RETRIES;
808 806
drivers/net/ipa/ipa_cmd.c+15−0
@@ -586,6 +586,21 @@ u32 ipa_cmd_tag_process_count(void) · 585 unmodified lines
586 return 4;586 return 4;
587}587}
588 588
589void ipa_cmd_tag_process(struct ipa *ipa)
590{
591 u32 count = ipa_cmd_tag_process_count();
592 struct gsi_trans *trans;
593
594 trans = ipa_cmd_trans_alloc(ipa, count);
595 if (trans) {
596 ipa_cmd_tag_process_add(trans);
597 gsi_trans_commit_wait(trans);
598 } else {
599 dev_err(&ipa->pdev->dev,
600 "error allocating %u entry tag transaction\n", count);
601 }
602}
603
589static struct ipa_cmd_info *604static struct ipa_cmd_info *
590ipa_cmd_info_alloc(struct ipa_endpoint *endpoint, u32 tre_count)605ipa_cmd_info_alloc(struct ipa_endpoint *endpoint, u32 tre_count)
591{606{
drivers/net/ipa/ipa_cmd.h+8−0
@@ -171,6 +171,14 @@ void ipa_cmd_tag_process_add(struct gsi_trans *trans); · 170 unmodified lines
171 */171 */
172u32 ipa_cmd_tag_process_count(void);172u32 ipa_cmd_tag_process_count(void);
173 173
174/**
175 * ipa_cmd_tag_process() - Perform a tag process
176 *
177 * @Return: The number of elements to allocate in a transaction
178 * to hold tag process commands
179 */
180void ipa_cmd_tag_process(struct ipa *ipa);
181
174/**182/**
175 * ipa_cmd_trans_alloc() - Allocate a transaction for the command TX endpoint183 * ipa_cmd_trans_alloc() - Allocate a transaction for the command TX endpoint
176 * @ipa: IPA pointer184 * @ipa: IPA pointer
drivers/net/ipa/ipa_data-sdm845.c+0−1
@@ -44,7 +44,6 @@ static const struct ipa_gsi_endpoint_data ipa_gsi_endpoint_data[] = { · 43 unmodified lines
44 .endpoint = {44 .endpoint = {
45 .seq_type = IPA_SEQ_INVALID,45 .seq_type = IPA_SEQ_INVALID,
46 .config = {46 .config = {
47 .checksum = true,
48 .aggregation = true,47 .aggregation = true,
49 .status_enable = true,48 .status_enable = true,
50 .rx = {49 .rx = {
drivers/net/ipa/ipa_endpoint.c+2−0
@@ -1450,6 +1450,8 @@ void ipa_endpoint_suspend(struct ipa *ipa) · 1449 unmodified lines
1450 if (ipa->modem_netdev)1450 if (ipa->modem_netdev)
1451 ipa_modem_suspend(ipa->modem_netdev);1451 ipa_modem_suspend(ipa->modem_netdev);
1452 1452
1453 ipa_cmd_tag_process(ipa);
1454
1453 ipa_endpoint_suspend_one(ipa->name_map[IPA_ENDPOINT_AP_LAN_RX]);1455 ipa_endpoint_suspend_one(ipa->name_map[IPA_ENDPOINT_AP_LAN_RX]);
1454 ipa_endpoint_suspend_one(ipa->name_map[IPA_ENDPOINT_AP_COMMAND_TX]);1456 ipa_endpoint_suspend_one(ipa->name_map[IPA_ENDPOINT_AP_COMMAND_TX]);
1455}1457}