* [PATCH net v2 1/4] net: ipa: reg: include <linux/bug.h>
2023-03-15 19:35 [PATCH net v2 0/4] net: ipa: minor bug fixes Alex Elder
@ 2023-03-15 19:35 ` Alex Elder
2023-03-15 19:35 ` [PATCH net v2 2/4] net: ipa: add two missing declarations Alex Elder
` (2 subsequent siblings)
3 siblings, 0 replies; 6+ messages in thread
From: Alex Elder @ 2023-03-15 19:35 UTC (permalink / raw)
To: davem, edumazet, kuba, pabeni
Cc: caleb.connolly, mka, evgreen, andersson, quic_cpratapa,
quic_avuyyuru, quic_jponduru, quic_subashab, elder, netdev,
linux-arm-msm, linux-kernel
When "reg.h" got created, it included calls to WARN() and WARN_ON().
Those macros are defined via <linux/bug.h>. In addition, it uses
is_power_of_2(), which is defined in <linux/log2.h>. Include those
files so IPA "reg.h" has access to all definitions it requires.
Meanwhile, <linux/bits.h> is included but nothing defined therein
is required directly in "reg.h", so get rid of that.
Fixes: 81772e444dbe ("net: ipa: start generalizing "ipa_reg"")
Signed-off-by: Alex Elder <elder@linaro.org>
---
v2: Correct the "Fixes" commit hash.
drivers/net/ipa/reg.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ipa/reg.h b/drivers/net/ipa/reg.h
index 57b457f39b6e2..2ee07eebca677 100644
--- a/drivers/net/ipa/reg.h
+++ b/drivers/net/ipa/reg.h
@@ -6,7 +6,8 @@
#define _REG_H_
#include <linux/types.h>
-#include <linux/bits.h>
+#include <linux/log2.h>
+#include <linux/bug.h>
/**
* struct reg - A register descriptor
--
2.34.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH net v2 2/4] net: ipa: add two missing declarations
2023-03-15 19:35 [PATCH net v2 0/4] net: ipa: minor bug fixes Alex Elder
2023-03-15 19:35 ` [PATCH net v2 1/4] net: ipa: reg: include <linux/bug.h> Alex Elder
@ 2023-03-15 19:35 ` Alex Elder
2023-03-15 19:35 ` [PATCH net v2 3/4] net: ipa: kill FILT_ROUT_CACHE_CFG IPA register Alex Elder
2023-03-15 19:35 ` [PATCH net v2 4/4] net: ipa: fix some register validity checks Alex Elder
3 siblings, 0 replies; 6+ messages in thread
From: Alex Elder @ 2023-03-15 19:35 UTC (permalink / raw)
To: davem, edumazet, kuba, pabeni
Cc: caleb.connolly, mka, evgreen, andersson, quic_cpratapa,
quic_avuyyuru, quic_jponduru, quic_subashab, elder, netdev,
linux-arm-msm, linux-kernel
When gsi_reg_init() got added, its declaration was added to
"gsi_reg.h" without declaring the two struct pointer types it uses.
Add these struct declarations to "gsi_reg.h".
Fixes: 3c506add35c7 ("net: ipa: introduce gsi_reg_init()")
Signed-off-by: Alex Elder <elder@linaro.org>
---
v2: Correct the "Fixes" commit hash.
drivers/net/ipa/gsi_reg.h | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/net/ipa/gsi_reg.h b/drivers/net/ipa/gsi_reg.h
index f62f0a5c653d1..48fde65fa2e8a 100644
--- a/drivers/net/ipa/gsi_reg.h
+++ b/drivers/net/ipa/gsi_reg.h
@@ -10,6 +10,10 @@
#include <linux/bits.h>
+struct platform_device;
+
+struct gsi;
+
/**
* DOC: GSI Registers
*
--
2.34.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH net v2 3/4] net: ipa: kill FILT_ROUT_CACHE_CFG IPA register
2023-03-15 19:35 [PATCH net v2 0/4] net: ipa: minor bug fixes Alex Elder
2023-03-15 19:35 ` [PATCH net v2 1/4] net: ipa: reg: include <linux/bug.h> Alex Elder
2023-03-15 19:35 ` [PATCH net v2 2/4] net: ipa: add two missing declarations Alex Elder
@ 2023-03-15 19:35 ` Alex Elder
2023-03-15 21:19 ` Alex Elder
2023-03-15 19:35 ` [PATCH net v2 4/4] net: ipa: fix some register validity checks Alex Elder
3 siblings, 1 reply; 6+ messages in thread
From: Alex Elder @ 2023-03-15 19:35 UTC (permalink / raw)
To: davem, edumazet, kuba, pabeni
Cc: caleb.connolly, mka, evgreen, andersson, quic_cpratapa,
quic_avuyyuru, quic_jponduru, quic_subashab, elder, netdev,
linux-arm-msm, linux-kernel
A recent commit defined a few IPA registers used for IPA v5.0+.
One of those was a mistake. Although the filter and router caches
get *flushed* using a single register, they use distinct registers
(ENDP_FILTER_CACHE_CFG and ENDP_ROUTER_CACHE_CFG) for configuration.
And although there *exists* a FILT_ROUT_CACHE_CFG register, it is
not needed in upstream code. So get rid of definitions related to
FILT_ROUT_CACHE_CFG, because they are not needed.
Fixes: de101ca79f97 ("net: ipa: define IPA v5.0+ registers")
Signed-off-by: Alex Elder <elder@linaro.org>
---
drivers/net/ipa/ipa_reg.c | 4 ++--
drivers/net/ipa/ipa_reg.h | 9 ---------
2 files changed, 2 insertions(+), 11 deletions(-)
diff --git a/drivers/net/ipa/ipa_reg.c b/drivers/net/ipa/ipa_reg.c
index 735fa65916097..463a31dfa9f47 100644
--- a/drivers/net/ipa/ipa_reg.c
+++ b/drivers/net/ipa/ipa_reg.c
@@ -39,7 +39,8 @@ static bool ipa_reg_id_valid(struct ipa *ipa, enum ipa_reg_id reg_id)
return version <= IPA_VERSION_3_1;
case ENDP_FILTER_ROUTER_HSH_CFG:
- return version != IPA_VERSION_4_2;
+ return version < IPA_VERSION_5_0 &&
+ version != IPA_VERSION_4_2;
case IRQ_SUSPEND_EN:
case IRQ_SUSPEND_CLR:
@@ -52,7 +53,6 @@ static bool ipa_reg_id_valid(struct ipa *ipa, enum ipa_reg_id reg_id)
case QSB_MAX_WRITES:
case QSB_MAX_READS:
case FILT_ROUT_HASH_EN:
- case FILT_ROUT_CACHE_CFG:
case FILT_ROUT_HASH_FLUSH:
case FILT_ROUT_CACHE_FLUSH:
case STATE_AGGR_ACTIVE:
diff --git a/drivers/net/ipa/ipa_reg.h b/drivers/net/ipa/ipa_reg.h
index 28aa1351dd488..ff2be8be0f683 100644
--- a/drivers/net/ipa/ipa_reg.h
+++ b/drivers/net/ipa/ipa_reg.h
@@ -61,7 +61,6 @@ enum ipa_reg_id {
QSB_MAX_WRITES,
QSB_MAX_READS,
FILT_ROUT_HASH_EN, /* Not IPA v5.0+ */
- FILT_ROUT_CACHE_CFG, /* IPA v5.0+ */
FILT_ROUT_HASH_FLUSH, /* Not IPA v5.0+ */
FILT_ROUT_CACHE_FLUSH, /* IPA v5.0+ */
STATE_AGGR_ACTIVE,
@@ -206,14 +205,6 @@ enum ipa_reg_qsb_max_reads_field_id {
GEN_QMB_1_MAX_READS_BEATS, /* IPA v4.0+ */
};
-/* FILT_ROUT_CACHE_CFG register */
-enum ipa_reg_filt_rout_cache_cfg_field_id {
- ROUTER_CACHE_EN,
- FILTER_CACHE_EN,
- LOW_PRI_HASH_HIT_DISABLE,
- LRU_EVICTION_THRESHOLD,
-};
-
/* FILT_ROUT_HASH_EN and FILT_ROUT_HASH_FLUSH registers */
enum ipa_reg_filt_rout_hash_field_id {
IPV6_ROUTER_HASH,
--
2.34.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH net v2 3/4] net: ipa: kill FILT_ROUT_CACHE_CFG IPA register
2023-03-15 19:35 ` [PATCH net v2 3/4] net: ipa: kill FILT_ROUT_CACHE_CFG IPA register Alex Elder
@ 2023-03-15 21:19 ` Alex Elder
0 siblings, 0 replies; 6+ messages in thread
From: Alex Elder @ 2023-03-15 21:19 UTC (permalink / raw)
To: davem, edumazet, kuba, pabeni
Cc: caleb.connolly, mka, evgreen, andersson, quic_cpratapa,
quic_avuyyuru, quic_jponduru, quic_subashab, elder, netdev,
linux-arm-msm, linux-kernel
On 3/15/23 2:35 PM, Alex Elder wrote:
> A recent commit defined a few IPA registers used for IPA v5.0+.
> One of those was a mistake. Although the filter and router caches
> get *flushed* using a single register, they use distinct registers
> (ENDP_FILTER_CACHE_CFG and ENDP_ROUTER_CACHE_CFG) for configuration.
>
> And although there *exists* a FILT_ROUT_CACHE_CFG register, it is
> not needed in upstream code. So get rid of definitions related to
> FILT_ROUT_CACHE_CFG, because they are not needed.
>
> Fixes: de101ca79f97 ("net: ipa: define IPA v5.0+ registers")'
AGAIN! This is a bad commit ID. It should be 8ba59716d16a.
I've got a new series ready to go but I'll wait until
tomorrow to post it.
Sorry for the noise.
-Alex
> Signed-off-by: Alex Elder <elder@linaro.org>
> ---
> drivers/net/ipa/ipa_reg.c | 4 ++--
> drivers/net/ipa/ipa_reg.h | 9 ---------
> 2 files changed, 2 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/net/ipa/ipa_reg.c b/drivers/net/ipa/ipa_reg.c
> index 735fa65916097..463a31dfa9f47 100644
> --- a/drivers/net/ipa/ipa_reg.c
> +++ b/drivers/net/ipa/ipa_reg.c
> @@ -39,7 +39,8 @@ static bool ipa_reg_id_valid(struct ipa *ipa, enum ipa_reg_id reg_id)
> return version <= IPA_VERSION_3_1;
>
> case ENDP_FILTER_ROUTER_HSH_CFG:
> - return version != IPA_VERSION_4_2;
> + return version < IPA_VERSION_5_0 &&
> + version != IPA_VERSION_4_2;
>
> case IRQ_SUSPEND_EN:
> case IRQ_SUSPEND_CLR:
> @@ -52,7 +53,6 @@ static bool ipa_reg_id_valid(struct ipa *ipa, enum ipa_reg_id reg_id)
> case QSB_MAX_WRITES:
> case QSB_MAX_READS:
> case FILT_ROUT_HASH_EN:
> - case FILT_ROUT_CACHE_CFG:
> case FILT_ROUT_HASH_FLUSH:
> case FILT_ROUT_CACHE_FLUSH:
> case STATE_AGGR_ACTIVE:
> diff --git a/drivers/net/ipa/ipa_reg.h b/drivers/net/ipa/ipa_reg.h
> index 28aa1351dd488..ff2be8be0f683 100644
> --- a/drivers/net/ipa/ipa_reg.h
> +++ b/drivers/net/ipa/ipa_reg.h
> @@ -61,7 +61,6 @@ enum ipa_reg_id {
> QSB_MAX_WRITES,
> QSB_MAX_READS,
> FILT_ROUT_HASH_EN, /* Not IPA v5.0+ */
> - FILT_ROUT_CACHE_CFG, /* IPA v5.0+ */
> FILT_ROUT_HASH_FLUSH, /* Not IPA v5.0+ */
> FILT_ROUT_CACHE_FLUSH, /* IPA v5.0+ */
> STATE_AGGR_ACTIVE,
> @@ -206,14 +205,6 @@ enum ipa_reg_qsb_max_reads_field_id {
> GEN_QMB_1_MAX_READS_BEATS, /* IPA v4.0+ */
> };
>
> -/* FILT_ROUT_CACHE_CFG register */
> -enum ipa_reg_filt_rout_cache_cfg_field_id {
> - ROUTER_CACHE_EN,
> - FILTER_CACHE_EN,
> - LOW_PRI_HASH_HIT_DISABLE,
> - LRU_EVICTION_THRESHOLD,
> -};
> -
> /* FILT_ROUT_HASH_EN and FILT_ROUT_HASH_FLUSH registers */
> enum ipa_reg_filt_rout_hash_field_id {
> IPV6_ROUTER_HASH,
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH net v2 4/4] net: ipa: fix some register validity checks
2023-03-15 19:35 [PATCH net v2 0/4] net: ipa: minor bug fixes Alex Elder
` (2 preceding siblings ...)
2023-03-15 19:35 ` [PATCH net v2 3/4] net: ipa: kill FILT_ROUT_CACHE_CFG IPA register Alex Elder
@ 2023-03-15 19:35 ` Alex Elder
3 siblings, 0 replies; 6+ messages in thread
From: Alex Elder @ 2023-03-15 19:35 UTC (permalink / raw)
To: davem, edumazet, kuba, pabeni
Cc: caleb.connolly, mka, evgreen, andersson, quic_cpratapa,
quic_avuyyuru, quic_jponduru, quic_subashab, elder, netdev,
linux-arm-msm, linux-kernel
A recent commit defined HW_PARAM_4 as a GSI register ID but did not
add it to gsi_reg_id_valid() to indicate it's valid (for IPA v5.0+).
Add version checks for the HW_PARAM_2 and INTER_EE IRQ GSI registers
there as well.
IPA v5.0 supports up to 8 source and destination resource groups.
Update the validity check (and the comments where the register IDs
are defined) to reflect that. Similarly update comments and
validity checks for the hash/cache-related registers.
Note that this patch fixes an omission and constrains things
further, but these don't technically represent bugs.
Fixes: f651334e1ef5 ("net: ipa: add HW_PARAM_4 GSI register")
Signed-off-by: Alex Elder <elder@linaro.org>
---
drivers/net/ipa/gsi_reg.c | 9 ++++++++-
drivers/net/ipa/ipa_reg.c | 24 ++++++++++++++++--------
drivers/net/ipa/ipa_reg.h | 12 ++++++------
3 files changed, 30 insertions(+), 15 deletions(-)
diff --git a/drivers/net/ipa/gsi_reg.c b/drivers/net/ipa/gsi_reg.c
index 1412b67304c8e..1651fbad4bd54 100644
--- a/drivers/net/ipa/gsi_reg.c
+++ b/drivers/net/ipa/gsi_reg.c
@@ -15,6 +15,14 @@ static bool gsi_reg_id_valid(struct gsi *gsi, enum gsi_reg_id reg_id)
switch (reg_id) {
case INTER_EE_SRC_CH_IRQ_MSK:
case INTER_EE_SRC_EV_CH_IRQ_MSK:
+ return gsi->version >= IPA_VERSION_3_5;
+
+ case HW_PARAM_2:
+ return gsi->version >= IPA_VERSION_3_5_1;
+
+ case HW_PARAM_4:
+ return gsi->version >= IPA_VERSION_5_0;
+
case CH_C_CNTXT_0:
case CH_C_CNTXT_1:
case CH_C_CNTXT_2:
@@ -43,7 +51,6 @@ static bool gsi_reg_id_valid(struct gsi *gsi, enum gsi_reg_id reg_id)
case CH_CMD:
case EV_CH_CMD:
case GENERIC_CMD:
- case HW_PARAM_2:
case CNTXT_TYPE_IRQ:
case CNTXT_TYPE_IRQ_MSK:
case CNTXT_SRC_CH_IRQ:
diff --git a/drivers/net/ipa/ipa_reg.c b/drivers/net/ipa/ipa_reg.c
index 463a31dfa9f47..3f475428ddddb 100644
--- a/drivers/net/ipa/ipa_reg.c
+++ b/drivers/net/ipa/ipa_reg.c
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-2.0
/* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
- * Copyright (C) 2019-2022 Linaro Ltd.
+ * Copyright (C) 2019-2023 Linaro Ltd.
*/
#include <linux/io.h>
@@ -15,6 +15,17 @@ static bool ipa_reg_id_valid(struct ipa *ipa, enum ipa_reg_id reg_id)
enum ipa_version version = ipa->version;
switch (reg_id) {
+ case FILT_ROUT_HASH_EN:
+ return version == IPA_VERSION_4_2;
+
+ case FILT_ROUT_HASH_FLUSH:
+ return version < IPA_VERSION_5_0 && version != IPA_VERSION_4_2;
+
+ case FILT_ROUT_CACHE_FLUSH:
+ case ENDP_FILTER_CACHE_CFG:
+ case ENDP_ROUTER_CACHE_CFG:
+ return version >= IPA_VERSION_5_0;
+
case IPA_BCR:
case COUNTER_CFG:
return version < IPA_VERSION_4_5;
@@ -32,11 +43,13 @@ static bool ipa_reg_id_valid(struct ipa *ipa, enum ipa_reg_id reg_id)
case SRC_RSRC_GRP_45_RSRC_TYPE:
case DST_RSRC_GRP_45_RSRC_TYPE:
return version <= IPA_VERSION_3_1 ||
- version == IPA_VERSION_4_5;
+ version == IPA_VERSION_4_5 ||
+ version == IPA_VERSION_5_0;
case SRC_RSRC_GRP_67_RSRC_TYPE:
case DST_RSRC_GRP_67_RSRC_TYPE:
- return version <= IPA_VERSION_3_1;
+ return version <= IPA_VERSION_3_1 ||
+ version == IPA_VERSION_5_0;
case ENDP_FILTER_ROUTER_HSH_CFG:
return version < IPA_VERSION_5_0 &&
@@ -52,9 +65,6 @@ static bool ipa_reg_id_valid(struct ipa *ipa, enum ipa_reg_id reg_id)
case SHARED_MEM_SIZE:
case QSB_MAX_WRITES:
case QSB_MAX_READS:
- case FILT_ROUT_HASH_EN:
- case FILT_ROUT_HASH_FLUSH:
- case FILT_ROUT_CACHE_FLUSH:
case STATE_AGGR_ACTIVE:
case LOCAL_PKT_PROC_CNTXT:
case AGGR_FORCE_CLOSE:
@@ -76,8 +86,6 @@ static bool ipa_reg_id_valid(struct ipa *ipa, enum ipa_reg_id reg_id)
case ENDP_INIT_RSRC_GRP:
case ENDP_INIT_SEQ:
case ENDP_STATUS:
- case ENDP_FILTER_CACHE_CFG:
- case ENDP_ROUTER_CACHE_CFG:
case IPA_IRQ_STTS:
case IPA_IRQ_EN:
case IPA_IRQ_CLR:
diff --git a/drivers/net/ipa/ipa_reg.h b/drivers/net/ipa/ipa_reg.h
index ff2be8be0f683..7dd65d39333dd 100644
--- a/drivers/net/ipa/ipa_reg.h
+++ b/drivers/net/ipa/ipa_reg.h
@@ -60,8 +60,8 @@ enum ipa_reg_id {
SHARED_MEM_SIZE,
QSB_MAX_WRITES,
QSB_MAX_READS,
- FILT_ROUT_HASH_EN, /* Not IPA v5.0+ */
- FILT_ROUT_HASH_FLUSH, /* Not IPA v5.0+ */
+ FILT_ROUT_HASH_EN, /* IPA v4.2 */
+ FILT_ROUT_HASH_FLUSH, /* Not IPA v4.2 nor IPA v5.0+ */
FILT_ROUT_CACHE_FLUSH, /* IPA v5.0+ */
STATE_AGGR_ACTIVE,
IPA_BCR, /* Not IPA v4.5+ */
@@ -76,12 +76,12 @@ enum ipa_reg_id {
TIMERS_PULSE_GRAN_CFG, /* IPA v4.5+ */
SRC_RSRC_GRP_01_RSRC_TYPE,
SRC_RSRC_GRP_23_RSRC_TYPE,
- SRC_RSRC_GRP_45_RSRC_TYPE, /* Not IPA v3.5+, IPA v4.5 */
- SRC_RSRC_GRP_67_RSRC_TYPE, /* Not IPA v3.5+ */
+ SRC_RSRC_GRP_45_RSRC_TYPE, /* Not IPA v3.5+; IPA v4.5, IPA v5.0 */
+ SRC_RSRC_GRP_67_RSRC_TYPE, /* Not IPA v3.5+; IPA v5.0 */
DST_RSRC_GRP_01_RSRC_TYPE,
DST_RSRC_GRP_23_RSRC_TYPE,
- DST_RSRC_GRP_45_RSRC_TYPE, /* Not IPA v3.5+, IPA v4.5 */
- DST_RSRC_GRP_67_RSRC_TYPE, /* Not IPA v3.5+ */
+ DST_RSRC_GRP_45_RSRC_TYPE, /* Not IPA v3.5+; IPA v4.5, IPA v5.0 */
+ DST_RSRC_GRP_67_RSRC_TYPE, /* Not IPA v3.5+; IPA v5.0 */
ENDP_INIT_CTRL, /* Not IPA v4.2+ for TX, not IPA v4.0+ for RX */
ENDP_INIT_CFG,
ENDP_INIT_NAT, /* TX only */
--
2.34.1
^ permalink raw reply related [flat|nested] 6+ messages in thread