All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net 0/2] net: ipa: HOLB register write fixes
@ 2021-11-12 22:22 Alex Elder
  2021-11-12 22:22 ` [PATCH net 1/2] net: ipa: HOLB register sometimes must be written twice Alex Elder
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Alex Elder @ 2021-11-12 22:22 UTC (permalink / raw)
  To: davem, kuba
  Cc: pkurapat, avuyyuru, bjorn.andersson, cpratapa, subashab, evgreen,
	elder, netdev, linux-kernel

This small series fixes two recently identified bugs related to the
way two registers must be written.  The registers define whether and
when to drop packets if a head-of-line blocking condition is
encountered.  The "enable" (dropping packets) register must be
written twice for newer versions of hardware.  And the timer
register must not be written while dropping is enabled.

					-Alex

Alex Elder (2):
  net: ipa: HOLB register sometimes must be written twice
  net: ipa: disable HOLB drop when updating timer

 drivers/net/ipa/ipa_endpoint.c | 5 +++++
 1 file changed, 5 insertions(+)

-- 
2.32.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH net 1/2] net: ipa: HOLB register sometimes must be written twice
  2021-11-12 22:22 [PATCH net 0/2] net: ipa: HOLB register write fixes Alex Elder
@ 2021-11-12 22:22 ` Alex Elder
  2021-11-12 22:22 ` [PATCH net 2/2] net: ipa: disable HOLB drop when updating timer Alex Elder
  2021-11-15 13:30 ` [PATCH net 0/2] net: ipa: HOLB register write fixes patchwork-bot+netdevbpf
  2 siblings, 0 replies; 4+ messages in thread
From: Alex Elder @ 2021-11-12 22:22 UTC (permalink / raw)
  To: davem, kuba
  Cc: pkurapat, avuyyuru, bjorn.andersson, cpratapa, subashab, evgreen,
	elder, netdev, linux-kernel

Starting with IPA v4.5, the HOL_BLOCK_EN register must be written
twice when enabling head-of-line blocking avoidance.

Fixes: 84f9bd12d46db ("soc: qcom: ipa: IPA endpoints")
Signed-off-by: Alex Elder <elder@linaro.org>
---
 drivers/net/ipa/ipa_endpoint.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/ipa/ipa_endpoint.c b/drivers/net/ipa/ipa_endpoint.c
index 5528d97110d56..006da4642a0ba 100644
--- a/drivers/net/ipa/ipa_endpoint.c
+++ b/drivers/net/ipa/ipa_endpoint.c
@@ -868,6 +868,9 @@ ipa_endpoint_init_hol_block_enable(struct ipa_endpoint *endpoint, bool enable)
 	val = enable ? HOL_BLOCK_EN_FMASK : 0;
 	offset = IPA_REG_ENDP_INIT_HOL_BLOCK_EN_N_OFFSET(endpoint_id);
 	iowrite32(val, endpoint->ipa->reg_virt + offset);
+	/* When enabling, the register must be written twice for IPA v4.5+ */
+	if (enable && endpoint->ipa->version >= IPA_VERSION_4_5)
+		iowrite32(val, endpoint->ipa->reg_virt + offset);
 }
 
 void ipa_endpoint_modem_hol_block_clear_all(struct ipa *ipa)
-- 
2.32.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH net 2/2] net: ipa: disable HOLB drop when updating timer
  2021-11-12 22:22 [PATCH net 0/2] net: ipa: HOLB register write fixes Alex Elder
  2021-11-12 22:22 ` [PATCH net 1/2] net: ipa: HOLB register sometimes must be written twice Alex Elder
@ 2021-11-12 22:22 ` Alex Elder
  2021-11-15 13:30 ` [PATCH net 0/2] net: ipa: HOLB register write fixes patchwork-bot+netdevbpf
  2 siblings, 0 replies; 4+ messages in thread
From: Alex Elder @ 2021-11-12 22:22 UTC (permalink / raw)
  To: davem, kuba
  Cc: pkurapat, avuyyuru, bjorn.andersson, cpratapa, subashab, evgreen,
	elder, netdev, linux-kernel

The head-of-line blocking timer should only be modified when
head-of-line drop is disabled.

One of the steps in recovering from a modem crash is to enable
dropping of packets with timeout of 0 (immediate).  We don't know
how the modem configured its endpoints, so before we program the
timer, we need to ensure HOL_BLOCK is disabled.

Fixes: 84f9bd12d46db ("soc: qcom: ipa: IPA endpoints")
Signed-off-by: Alex Elder <elder@linaro.org>
---
 drivers/net/ipa/ipa_endpoint.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/net/ipa/ipa_endpoint.c b/drivers/net/ipa/ipa_endpoint.c
index 006da4642a0ba..ef790fd0ab56a 100644
--- a/drivers/net/ipa/ipa_endpoint.c
+++ b/drivers/net/ipa/ipa_endpoint.c
@@ -853,6 +853,7 @@ static void ipa_endpoint_init_hol_block_timer(struct ipa_endpoint *endpoint,
 	u32 offset;
 	u32 val;
 
+	/* This should only be changed when HOL_BLOCK_EN is disabled */
 	offset = IPA_REG_ENDP_INIT_HOL_BLOCK_TIMER_N_OFFSET(endpoint_id);
 	val = hol_block_timer_val(ipa, microseconds);
 	iowrite32(val, ipa->reg_virt + offset);
@@ -883,6 +884,7 @@ void ipa_endpoint_modem_hol_block_clear_all(struct ipa *ipa)
 		if (endpoint->toward_ipa || endpoint->ee_id != GSI_EE_MODEM)
 			continue;
 
+		ipa_endpoint_init_hol_block_enable(endpoint, false);
 		ipa_endpoint_init_hol_block_timer(endpoint, 0);
 		ipa_endpoint_init_hol_block_enable(endpoint, true);
 	}
-- 
2.32.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH net 0/2] net: ipa: HOLB register write fixes
  2021-11-12 22:22 [PATCH net 0/2] net: ipa: HOLB register write fixes Alex Elder
  2021-11-12 22:22 ` [PATCH net 1/2] net: ipa: HOLB register sometimes must be written twice Alex Elder
  2021-11-12 22:22 ` [PATCH net 2/2] net: ipa: disable HOLB drop when updating timer Alex Elder
@ 2021-11-15 13:30 ` patchwork-bot+netdevbpf
  2 siblings, 0 replies; 4+ messages in thread
From: patchwork-bot+netdevbpf @ 2021-11-15 13:30 UTC (permalink / raw)
  To: Alex Elder
  Cc: davem, kuba, pkurapat, avuyyuru, bjorn.andersson, cpratapa,
	subashab, evgreen, elder, netdev, linux-kernel

Hello:

This series was applied to netdev/net.git (master)
by David S. Miller <davem@davemloft.net>:

On Fri, 12 Nov 2021 16:22:08 -0600 you wrote:
> This small series fixes two recently identified bugs related to the
> way two registers must be written.  The registers define whether and
> when to drop packets if a head-of-line blocking condition is
> encountered.  The "enable" (dropping packets) register must be
> written twice for newer versions of hardware.  And the timer
> register must not be written while dropping is enabled.
> 
> [...]

Here is the summary with links:
  - [net,1/2] net: ipa: HOLB register sometimes must be written twice
    https://git.kernel.org/netdev/net/c/6e228d8cbb1c
  - [net,2/2] net: ipa: disable HOLB drop when updating timer
    https://git.kernel.org/netdev/net/c/816316cacad2

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-11-15 13:31 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-12 22:22 [PATCH net 0/2] net: ipa: HOLB register write fixes Alex Elder
2021-11-12 22:22 ` [PATCH net 1/2] net: ipa: HOLB register sometimes must be written twice Alex Elder
2021-11-12 22:22 ` [PATCH net 2/2] net: ipa: disable HOLB drop when updating timer Alex Elder
2021-11-15 13:30 ` [PATCH net 0/2] net: ipa: HOLB register write fixes patchwork-bot+netdevbpf

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.