From: Alex Elder <elder@linaro.org>
To: davem@davemloft.net, edumazet@google.com, kuba@kernel.org,
pabeni@redhat.com
Cc: mka@chromium.org, andersson@kernel.org,
quic_cpratapa@quicinc.com, quic_avuyyuru@quicinc.com,
quic_jponduru@quicinc.com, quic_subashab@quicinc.com,
elder@kernel.org, netdev@vger.kernel.org,
linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH net-next 4/7] net: ipa: kill the IPA power STOPPED flag
Date: Tue, 30 Jan 2024 13:23:01 -0600 [thread overview]
Message-ID: <20240130192305.250915-5-elder@linaro.org> (raw)
In-Reply-To: <20240130192305.250915-1-elder@linaro.org>
Currently the STOPPED IPA power flag is used to indicate that the
transmit queue has been stopped. Previously this was used to avoid
setting the STARTED flag unless the queue had already been stopped.
It meant transmit queuing would be enabled on resume if it was
stopped by the transmit path--and if so, it ensured it only got
enabled once.
We only stop the transmit queue in the transmit path. The STARTED
flag has been removed, and it causes no real harm to enable
transmits when they're already enabled. So we can get rid of
the STOPPED flag and call netif_wake_queue() unconditionally.
This makes the IPA power spinlock unnecessary, so it can be removed
as well.
Signed-off-by: Alex Elder <elder@linaro.org>
---
drivers/net/ipa/ipa_power.c | 40 +++++--------------------------------
1 file changed, 5 insertions(+), 35 deletions(-)
diff --git a/drivers/net/ipa/ipa_power.c b/drivers/net/ipa/ipa_power.c
index 509c9bfa648e7..e615473d23805 100644
--- a/drivers/net/ipa/ipa_power.c
+++ b/drivers/net/ipa/ipa_power.c
@@ -38,13 +38,11 @@
* enum ipa_power_flag - IPA power flags
* @IPA_POWER_FLAG_RESUMED: Whether resume from suspend has been signaled
* @IPA_POWER_FLAG_SYSTEM: Hardware is system (not runtime) suspended
- * @IPA_POWER_FLAG_STOPPED: Modem TX is disabled by ipa_start_xmit()
* @IPA_POWER_FLAG_COUNT: Number of defined power flags
*/
enum ipa_power_flag {
IPA_POWER_FLAG_RESUMED,
IPA_POWER_FLAG_SYSTEM,
- IPA_POWER_FLAG_STOPPED,
IPA_POWER_FLAG_COUNT, /* Last; not a flag */
};
@@ -53,7 +51,6 @@ enum ipa_power_flag {
* @dev: IPA device pointer
* @core: IPA core clock
* @qmp: QMP handle for AOSS communication
- * @spinlock: Protects modem TX queue enable/disable
* @flags: Boolean state flags
* @interconnect_count: Number of elements in interconnect[]
* @interconnect: Interconnect array
@@ -62,7 +59,6 @@ struct ipa_power {
struct device *dev;
struct clk *core;
struct qmp *qmp;
- spinlock_t spinlock; /* used with STOPPED power flag */
DECLARE_BITMAP(flags, IPA_POWER_FLAG_COUNT);
u32 interconnect_count;
struct icc_bulk_data interconnect[] __counted_by(interconnect_count);
@@ -240,47 +236,22 @@ void ipa_power_suspend_handler(struct ipa *ipa, enum ipa_irq_id irq_id)
* gets sent (or dropped). If power is not ACTIVE, it will eventually
* be, and transmits stay disabled until after it is.
*
- * A flag and a spinlock are used when managing this. If the queue gets
- * stopped, the STOPPED power flag is set.
- *
* The first function stops the modem netdev transmit queue. The second
- * function starts the transmit queue, but only if the STOPPED flag is
- * set. This avoids enabling transmits repeatedly immediately after
- * power has become ACTIVE (not really a big deal). If the STOPPED flag
- * was set, it is cleared by this function.
- *
- * The third function just enables transmits again.
+ * function starts the transmit queue and is used in the power resume
+ * path after power has become ACTIVE. The third function also enables
+ * transmits again, and is used by ipa_start_xmit() once it knows power
+ * is active.
*/
void ipa_power_modem_queue_stop(struct ipa *ipa)
{
- struct ipa_power *power = ipa->power;
- unsigned long flags;
-
- spin_lock_irqsave(&power->spinlock, flags);
-
netif_stop_queue(ipa->modem_netdev);
- __set_bit(IPA_POWER_FLAG_STOPPED, power->flags);
-
- spin_unlock_irqrestore(&power->spinlock, flags);
}
-/* This function starts the modem netdev transmit queue, but only if the
- * STOPPED flag is set. That flag is cleared if it was set.
- */
void ipa_power_modem_queue_wake(struct ipa *ipa)
{
- struct ipa_power *power = ipa->power;
- unsigned long flags;
-
- spin_lock_irqsave(&power->spinlock, flags);
-
- if (__test_and_clear_bit(IPA_POWER_FLAG_STOPPED, power->flags))
- netif_wake_queue(ipa->modem_netdev);
-
- spin_unlock_irqrestore(&power->spinlock, flags);
+ netif_wake_queue(ipa->modem_netdev);
}
-/* This function enables transmits again after power has become ACTIVE. */
void ipa_power_modem_queue_active(struct ipa *ipa)
{
netif_wake_queue(ipa->modem_netdev);
@@ -374,7 +345,6 @@ ipa_power_init(struct device *dev, const struct ipa_power_data *data)
}
power->dev = dev;
power->core = clk;
- spin_lock_init(&power->spinlock);
power->interconnect_count = data->interconnect_count;
ret = ipa_interconnect_init(power, data->interconnect_data);
--
2.40.1
next prev parent reply other threads:[~2024-01-30 19:23 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-30 19:22 [PATCH net-next 0/7] net: ipa: simplify TX power handling Alex Elder
2024-01-30 19:22 ` [PATCH net-next 1/7] net: ipa: stash modem TX and RX endpoints Alex Elder
2024-01-30 19:22 ` [PATCH net-next 2/7] net: ipa: begin simplifying TX queue stop Alex Elder
2024-01-30 19:23 ` [PATCH net-next 3/7] net: ipa: kill the STARTED IPA power flag Alex Elder
2024-01-30 19:23 ` Alex Elder [this message]
2024-01-30 19:23 ` [PATCH net-next 5/7] net: ipa: kill ipa_power_modem_queue_stop() Alex Elder
2024-01-30 19:23 ` [PATCH net-next 6/7] net: ipa: kill ipa_power_modem_queue_active() Alex Elder
2024-01-30 19:23 ` [PATCH net-next 7/7] net: ipa: kill ipa_power_modem_queue_wake() Alex Elder
2024-02-02 5:00 ` [PATCH net-next 0/7] net: ipa: simplify TX power handling patchwork-bot+netdevbpf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240130192305.250915-5-elder@linaro.org \
--to=elder@linaro.org \
--cc=andersson@kernel.org \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=elder@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mka@chromium.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=quic_avuyyuru@quicinc.com \
--cc=quic_cpratapa@quicinc.com \
--cc=quic_jponduru@quicinc.com \
--cc=quic_subashab@quicinc.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).