public inbox for devicetree@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH RFC 0/4] net: ipa: add support for Eliza SoC (IPA 5.5)
@ 2026-04-16 22:40 Alexander Koskovich
  2026-04-16 22:40 ` [PATCH RFC 1/4] dt-bindings: net: qcom,ipa: document Eliza compatible Alexander Koskovich
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Alexander Koskovich @ 2026-04-16 22:40 UTC (permalink / raw)
  To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Alex Elder
  Cc: linux-arm-msm, netdev, devicetree, linux-kernel,
	Alexander Koskovich

This series adds support to the IPA driver for the Eliza SoC (IPA 5.5).

Wanted some feedback on how best to handle the difference in the Q6 FNR
counters between Eliza & SM8550/SM8650, since it also changes the memory
layout [1].

I was thinking about something like checking firmware version after
loading IPA firmware and if above X version, use increased FnR counters
but I am not sure what firmware version this was introduced in.

For now I am just doing it with a seperate Eliza compatible but this
feels kind of meh. I'm also not sure if it's possible there's some Eliza
variant out there that actually has firmware that is too old, and then
68 for FnR counters is too much.

I also wanted some clarification on the general need to pass hw filter
stats info, downstream this is marked as "optional", but seems very
much needed for Eliza.

Is this actually optional and there is just some other misconfiguration
or is firmware broken? Hard to debug what modem wants since system does
a complete halt shortly after starting IPA if I don't pass this.

[1]: https://git.codelinaro.org/clo/la/platform/vendor/opensource/dataipa/-/commit/0a3c432e4fd294eba6def56378acb6fa39feb400

Signed-off-by: Alexander Koskovich <akoskovich@pm.me>
---
Alexander Koskovich (4):
      dt-bindings: net: qcom,ipa: document Eliza compatible
      net: ipa: fix IPA v5.5 configuration data
      net: ipa: add new QMI request for HW filter stats info
      net: ipa: add Eliza configuration data

 .../devicetree/bindings/net/qcom,ipa.yaml          |   1 +
 drivers/net/ipa/data/ipa_data-v4.5.c               |   1 +
 drivers/net/ipa/data/ipa_data-v4.7.c               |   1 +
 drivers/net/ipa/data/ipa_data-v4.9.c               |   1 +
 drivers/net/ipa/data/ipa_data-v5.0.c               |   1 +
 drivers/net/ipa/data/ipa_data-v5.5.c               | 180 ++++++++++++++++++++-
 drivers/net/ipa/ipa.h                              |   3 +
 drivers/net/ipa/ipa_data.h                         |   4 +
 drivers/net/ipa/ipa_main.c                         |   4 +
 drivers/net/ipa/ipa_mem.c                          |   2 +
 drivers/net/ipa/ipa_qmi.c                          |  18 +++
 drivers/net/ipa/ipa_qmi_msg.c                      |  58 +++++++
 drivers/net/ipa/ipa_qmi_msg.h                      |  15 +-
 13 files changed, 280 insertions(+), 9 deletions(-)
---
base-commit: 936c21068d7ade00325e40d82bfd2f3f29d9f659
change-id: 20260416-eliza-ipa-c26a88213ff3

Best regards,
-- 
Alexander Koskovich <akoskovich@pm.me>



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

* [PATCH RFC 1/4] dt-bindings: net: qcom,ipa: document Eliza compatible
  2026-04-16 22:40 [PATCH RFC 0/4] net: ipa: add support for Eliza SoC (IPA 5.5) Alexander Koskovich
@ 2026-04-16 22:40 ` Alexander Koskovich
  2026-04-17  8:16   ` Konrad Dybcio
  2026-04-16 22:40 ` [PATCH RFC 2/4] net: ipa: fix IPA v5.5 configuration data Alexander Koskovich
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 6+ messages in thread
From: Alexander Koskovich @ 2026-04-16 22:40 UTC (permalink / raw)
  To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Alex Elder
  Cc: linux-arm-msm, netdev, devicetree, linux-kernel,
	Alexander Koskovich

Document the IPA on the Eliza Platform which uses version 5.5.1,
which is a minor revision of v5.5 found on SM8550, thus we can
use the SM8550 bindings as fallback since it shares the same
register mappings.

Signed-off-by: Alexander Koskovich <akoskovich@pm.me>
---
 Documentation/devicetree/bindings/net/qcom,ipa.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/net/qcom,ipa.yaml b/Documentation/devicetree/bindings/net/qcom,ipa.yaml
index fdeaa81b9645..38a5a337c34f 100644
--- a/Documentation/devicetree/bindings/net/qcom,ipa.yaml
+++ b/Documentation/devicetree/bindings/net/qcom,ipa.yaml
@@ -60,6 +60,7 @@ properties:
           - const: qcom,sc7180-ipa
       - items:
           - enum:
+              - qcom,eliza-ipa
               - qcom,sm8650-ipa
           - const: qcom,sm8550-ipa
 

-- 
2.53.0



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

* [PATCH RFC 2/4] net: ipa: fix IPA v5.5 configuration data
  2026-04-16 22:40 [PATCH RFC 0/4] net: ipa: add support for Eliza SoC (IPA 5.5) Alexander Koskovich
  2026-04-16 22:40 ` [PATCH RFC 1/4] dt-bindings: net: qcom,ipa: document Eliza compatible Alexander Koskovich
@ 2026-04-16 22:40 ` Alexander Koskovich
  2026-04-16 22:41 ` [PATCH RFC 3/4] net: ipa: add new QMI request for HW filter stats info Alexander Koskovich
  2026-04-16 22:41 ` [PATCH RFC 4/4] net: ipa: add Eliza configuration data Alexander Koskovich
  3 siblings, 0 replies; 6+ messages in thread
From: Alexander Koskovich @ 2026-04-16 22:40 UTC (permalink / raw)
  To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Alex Elder
  Cc: linux-arm-msm, netdev, devicetree, linux-kernel,
	Alexander Koskovich

struct ipa_qmb_outstanding {
        u16 ot_reads;
        u16 ot_writes;
        u16 ot_read_beats;
};
[IPA_5_5][IPA_QMB_INSTANCE_DDR] = {16, 12, 0},
[IPA_5_5][IPA_QMB_INSTANCE_PCIE] = {16, 8, 0},

IPA_ENDPOINT_AP_LAN_RX:
        [IPA_5_5][IPA_CLIENT_APPS_LAN_CONS] = {
                        true, IPA_v5_5_GROUP_UL,
                        false,
                        IPA_DPS_HPS_SEQ_TYPE_INVALID,
                        QMB_MASTER_SELECT_DDR,
                        { 17, 14, 9, 9, IPA_EE_AP, GSI_ESCAPE_BUF_ONLY, 0       },
                        IPA_TX_INSTANCE_UL },

IPA_ENDPOINT_AP_MODEM_RX:
        [IPA_5_5][IPA_CLIENT_APPS_WAN_CONS] = {
                        true, IPA_v5_5_GROUP_DL,
                        false,
                        IPA_DPS_HPS_SEQ_TYPE_INVALID,
                        QMB_MASTER_SELECT_DDR,
                        { 24, 1, 9, 9, IPA_EE_AP, GSI_SMART_PRE_FETCH, 3        },
                        IPA_TX_INSTANCE_DL },

IPA_ENDPOINT_MODEM_AP_RX:
        [IPA_5_5][IPA_CLIENT_Q6_WAN_CONS]         = {
                        true, IPA_v5_5_GROUP_UL,
                        false,
                        IPA_DPS_HPS_SEQ_TYPE_INVALID,
                        QMB_MASTER_SELECT_DDR,
                        { 22, 7, 9, 9, IPA_EE_Q6, GSI_ESCAPE_BUF_ONLY, 0 },
                        IPA_TX_INSTANCE_UL },

Signed-off-by: Alexander Koskovich <akoskovich@pm.me>
---
 drivers/net/ipa/data/ipa_data-v5.5.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/net/ipa/data/ipa_data-v5.5.c b/drivers/net/ipa/data/ipa_data-v5.5.c
index 741ae21d9d78..f6ba3b944700 100644
--- a/drivers/net/ipa/data/ipa_data-v5.5.c
+++ b/drivers/net/ipa/data/ipa_data-v5.5.c
@@ -50,13 +50,13 @@ enum ipa_rsrc_group_id {
 /* QSB configuration data for an SoC having IPA v5.5 */
 static const struct ipa_qsb_data ipa_qsb_data[] = {
 	[IPA_QSB_MASTER_DDR] = {
-		.max_writes		= 0,	/* Unlimited */
-		.max_reads		= 12,
+		.max_writes		= 12,
+		.max_reads		= 0,	/* Unlimited */
 		.max_reads_beats	= 0,
 	},
 	[IPA_QSB_MASTER_PCIE] = {
-		.max_writes		= 0,	/* Unlimited */
-		.max_reads		= 8,
+		.max_writes		= 8,
+		.max_reads		= 0,	/* Unlimited */
 		.max_reads_beats	= 0,
 	},
 };
@@ -86,8 +86,8 @@ static const struct ipa_gsi_endpoint_data ipa_gsi_endpoint_data[] = {
 	},
 	[IPA_ENDPOINT_AP_LAN_RX] = {
 		.ee_id		= GSI_EE_AP,
-		.channel_id	= 13,
-		.endpoint_id	= 16,
+		.channel_id	= 14,
+		.endpoint_id	= 17,
 		.toward_ipa	= false,
 		.channel = {
 			.tre_count	= 256,
@@ -135,7 +135,7 @@ static const struct ipa_gsi_endpoint_data ipa_gsi_endpoint_data[] = {
 	[IPA_ENDPOINT_AP_MODEM_RX] = {
 		.ee_id		= GSI_EE_AP,
 		.channel_id	= 1,
-		.endpoint_id	= 23,
+		.endpoint_id	= 24,
 		.toward_ipa	= false,
 		.channel = {
 			.tre_count	= 256,
@@ -168,7 +168,7 @@ static const struct ipa_gsi_endpoint_data ipa_gsi_endpoint_data[] = {
 	[IPA_ENDPOINT_MODEM_AP_RX] = {
 		.ee_id		= GSI_EE_MODEM,
 		.channel_id	= 7,
-		.endpoint_id	= 21,
+		.endpoint_id	= 22,
 		.toward_ipa	= false,
 	},
 	[IPA_ENDPOINT_MODEM_DL_NLO_TX] = {

-- 
2.53.0



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

* [PATCH RFC 3/4] net: ipa: add new QMI request for HW filter stats info
  2026-04-16 22:40 [PATCH RFC 0/4] net: ipa: add support for Eliza SoC (IPA 5.5) Alexander Koskovich
  2026-04-16 22:40 ` [PATCH RFC 1/4] dt-bindings: net: qcom,ipa: document Eliza compatible Alexander Koskovich
  2026-04-16 22:40 ` [PATCH RFC 2/4] net: ipa: fix IPA v5.5 configuration data Alexander Koskovich
@ 2026-04-16 22:41 ` Alexander Koskovich
  2026-04-16 22:41 ` [PATCH RFC 4/4] net: ipa: add Eliza configuration data Alexander Koskovich
  3 siblings, 0 replies; 6+ messages in thread
From: Alexander Koskovich @ 2026-04-16 22:41 UTC (permalink / raw)
  To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Alex Elder
  Cc: linux-arm-msm, netdev, devicetree, linux-kernel,
	Alexander Koskovich

Some IPA firmware versions on IPA 5.5 require ipa_filter_stats_info in
the init_modem_driver QMI request. For example on Eliza, if this is not
passed then shortly after IPA init the system will halt and reboot
shortly after.

Downstream this is marked as optional but does not seem to be the case
on newer IPA firmware versions.

Signed-off-by: Alexander Koskovich <akoskovich@pm.me>
---
 drivers/net/ipa/data/ipa_data-v4.5.c |  1 +
 drivers/net/ipa/data/ipa_data-v4.7.c |  1 +
 drivers/net/ipa/data/ipa_data-v4.9.c |  1 +
 drivers/net/ipa/data/ipa_data-v5.0.c |  1 +
 drivers/net/ipa/data/ipa_data-v5.5.c |  1 +
 drivers/net/ipa/ipa.h                |  3 ++
 drivers/net/ipa/ipa_data.h           |  3 ++
 drivers/net/ipa/ipa_mem.c            |  2 ++
 drivers/net/ipa/ipa_qmi.c            | 18 +++++++++++
 drivers/net/ipa/ipa_qmi_msg.c        | 58 ++++++++++++++++++++++++++++++++++++
 drivers/net/ipa/ipa_qmi_msg.h        | 15 +++++++++-
 11 files changed, 103 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ipa/data/ipa_data-v4.5.c b/drivers/net/ipa/data/ipa_data-v4.5.c
index 730d8c43a45c..25eceffdd9f7 100644
--- a/drivers/net/ipa/data/ipa_data-v4.5.c
+++ b/drivers/net/ipa/data/ipa_data-v4.5.c
@@ -419,6 +419,7 @@ static const struct ipa_mem_data ipa_mem_data = {
 	.imem_addr	= 0x14688000,
 	.imem_size	= 0x00003000,
 	.smem_size	= 0x00009000,
+	.fnr_idx_cnt	= 52,
 };
 
 /* Interconnect rates are in 1000 byte/second units */
diff --git a/drivers/net/ipa/data/ipa_data-v4.7.c b/drivers/net/ipa/data/ipa_data-v4.7.c
index 5e1d9049c62b..ef4695ee1b2d 100644
--- a/drivers/net/ipa/data/ipa_data-v4.7.c
+++ b/drivers/net/ipa/data/ipa_data-v4.7.c
@@ -361,6 +361,7 @@ static const struct ipa_mem_data ipa_mem_data = {
 	.imem_addr	= 0x146a8000,
 	.imem_size	= 0x00002000,
 	.smem_size	= 0x00009000,
+	.fnr_idx_cnt	= 52,
 };
 
 /* Interconnect rates are in 1000 byte/second units */
diff --git a/drivers/net/ipa/data/ipa_data-v4.9.c b/drivers/net/ipa/data/ipa_data-v4.9.c
index da472a2a2e29..0e2e521d98bb 100644
--- a/drivers/net/ipa/data/ipa_data-v4.9.c
+++ b/drivers/net/ipa/data/ipa_data-v4.9.c
@@ -417,6 +417,7 @@ static const struct ipa_mem_data ipa_mem_data = {
 	.imem_addr	= 0x146bd000,
 	.imem_size	= 0x00002000,
 	.smem_size	= 0x00009000,
+	.fnr_idx_cnt	= 52,
 };
 
 /* Interconnect rates are in 1000 byte/second units */
diff --git a/drivers/net/ipa/data/ipa_data-v5.0.c b/drivers/net/ipa/data/ipa_data-v5.0.c
index bc5722e4b053..9f7aaf37b8fd 100644
--- a/drivers/net/ipa/data/ipa_data-v5.0.c
+++ b/drivers/net/ipa/data/ipa_data-v5.0.c
@@ -443,6 +443,7 @@ static const struct ipa_mem_data ipa_mem_data = {
 	.imem_addr	= 0x14688000,
 	.imem_size	= 0x00003000,
 	.smem_size	= 0x00009000,
+	.fnr_idx_cnt    = 52,
 };
 
 /* Interconnect rates are in 1000 byte/second units */
diff --git a/drivers/net/ipa/data/ipa_data-v5.5.c b/drivers/net/ipa/data/ipa_data-v5.5.c
index f6ba3b944700..44a9df7346b7 100644
--- a/drivers/net/ipa/data/ipa_data-v5.5.c
+++ b/drivers/net/ipa/data/ipa_data-v5.5.c
@@ -449,6 +449,7 @@ static const struct ipa_mem_data ipa_mem_data = {
 	.imem_addr	= 0x14688000,
 	.imem_size	= 0x00002000,
 	.smem_size	= 0x0000b000,
+	.fnr_idx_cnt	= 52,
 };
 
 /* Interconnect rates are in 1000 byte/second units */
diff --git a/drivers/net/ipa/ipa.h b/drivers/net/ipa/ipa.h
index 7ef10a4ff35e..d2ceaea31635 100644
--- a/drivers/net/ipa/ipa.h
+++ b/drivers/net/ipa/ipa.h
@@ -69,6 +69,7 @@ struct ipa_smp2p;
  * @modem_state:	State of modem (stopped, running)
  * @modem_netdev:	Network device structure used for modem
  * @qmi:		QMI information
+ * @fnr_idx_cnt:	Number of FnR counters
  */
 struct ipa {
 	struct gsi gsi;
@@ -129,6 +130,8 @@ struct ipa {
 	atomic_t modem_state;		/* enum ipa_modem_state */
 	struct net_device *modem_netdev;
 	struct ipa_qmi qmi;
+
+	u8 fnr_idx_cnt;
 };
 
 /**
diff --git a/drivers/net/ipa/ipa_data.h b/drivers/net/ipa/ipa_data.h
index 3eb9dc2ce339..f7566c8edabd 100644
--- a/drivers/net/ipa/ipa_data.h
+++ b/drivers/net/ipa/ipa_data.h
@@ -181,6 +181,7 @@ struct ipa_resource_data {
  * @imem_addr:		physical address of IPA region within IMEM
  * @imem_size:		size in bytes of IPA IMEM region
  * @smem_size:		size in bytes of the IPA SMEM region
+ * @fnr_idx_cnt:	Number of FnR counters
  */
 struct ipa_mem_data {
 	u32 local_count;
@@ -193,6 +194,8 @@ struct ipa_mem_data {
 	u32 imem_size; /* DEPRECATED */
 
 	u32 smem_size;
+
+	u8 fnr_idx_cnt;
 };
 
 /**
diff --git a/drivers/net/ipa/ipa_mem.c b/drivers/net/ipa/ipa_mem.c
index 078d32a18dbf..fb04f953bf7a 100644
--- a/drivers/net/ipa/ipa_mem.c
+++ b/drivers/net/ipa/ipa_mem.c
@@ -631,6 +631,8 @@ int ipa_mem_init(struct ipa *ipa, struct platform_device *pdev,
 	ipa->mem_count = mem_data->local_count;
 	ipa->mem = mem_data->local;
 
+	ipa->fnr_idx_cnt = mem_data->fnr_idx_cnt;
+
 	/* Check the route and filter table memory regions */
 	if (!ipa_table_mem_valid(ipa, false))
 		return -EINVAL;
diff --git a/drivers/net/ipa/ipa_qmi.c b/drivers/net/ipa/ipa_qmi.c
index d771f3a71f94..a5a5572c9ccd 100644
--- a/drivers/net/ipa/ipa_qmi.c
+++ b/drivers/net/ipa/ipa_qmi.c
@@ -74,6 +74,8 @@
 #define IPA_MODEM_SERVICE_INS_ID	2
 #define IPA_MODEM_SVC_VERS		1
 
+#define IPA_MODEM_FNR_IDX_START		128
+
 #define QMI_INIT_DRIVER_TIMEOUT		60000	/* A minute in milliseconds */
 
 /* Send an INIT_COMPLETE indication message to the modem */
@@ -394,6 +396,22 @@ init_modem_driver_req(struct ipa_qmi *ipa_qmi)
 		}
 	}
 
+	if (ipa->version >= IPA_VERSION_4_5 && ipa->fnr_idx_cnt) {
+		mem = ipa_mem_find(ipa, IPA_MEM_STATS_FILTER_ROUTE);
+		if (mem && mem->size) {
+			req.hw_stats_filter_info_valid = 1;
+			req.hw_stats_filter_info.start_addr =
+				ipa->mem_offset + mem->offset;
+			req.hw_stats_filter_info.size =
+				ipa->fnr_idx_cnt * 16;
+			req.hw_stats_filter_info.start_index =
+				IPA_MODEM_FNR_IDX_START;
+			req.hw_stats_filter_info.end_index =
+				IPA_MODEM_FNR_IDX_START +
+				ipa->fnr_idx_cnt - 1;
+		}
+	}
+
 	return &req;
 }
 
diff --git a/drivers/net/ipa/ipa_qmi_msg.c b/drivers/net/ipa/ipa_qmi_msg.c
index 51dc13a577a5..160c0d207691 100644
--- a/drivers/net/ipa/ipa_qmi_msg.c
+++ b/drivers/net/ipa/ipa_qmi_msg.c
@@ -250,6 +250,43 @@ const struct qmi_elem_info ipa_mem_range_ei[] = {
 	},
 };
 
+/* QMI message structure definition for struct ipa_stats_filter */
+const struct qmi_elem_info ipa_stats_filter_ei[] = {
+	{
+		.data_type	= QMI_UNSIGNED_4_BYTE,
+		.elem_len	= 1,
+		.elem_size	=
+			sizeof_field(struct ipa_stats_filter, start_addr),
+		.offset		= offsetof(struct ipa_stats_filter,
+					   start_addr),
+	},
+	{
+		.data_type	= QMI_UNSIGNED_4_BYTE,
+		.elem_len	= 1,
+		.elem_size	=
+			sizeof_field(struct ipa_stats_filter, size),
+		.offset		= offsetof(struct ipa_stats_filter, size),
+	},
+	{
+		.data_type	= QMI_UNSIGNED_1_BYTE,
+		.elem_len	= 1,
+		.elem_size	=
+			sizeof_field(struct ipa_stats_filter, start_index),
+		.offset		= offsetof(struct ipa_stats_filter,
+					   start_index),
+	},
+	{
+		.data_type	= QMI_UNSIGNED_1_BYTE,
+		.elem_len	= 1,
+		.elem_size	=
+			sizeof_field(struct ipa_stats_filter, end_index),
+		.offset		= offsetof(struct ipa_stats_filter, end_index),
+	},
+	{
+		.data_type	= QMI_EOTI,
+	},
+};
+
 /* QMI message structure definition for struct ipa_init_modem_driver_req */
 const struct qmi_elem_info ipa_init_modem_driver_req_ei[] = {
 	{
@@ -640,6 +677,27 @@ const struct qmi_elem_info ipa_init_modem_driver_req_ei[] = {
 		.offset		= offsetof(struct ipa_init_modem_driver_req,
 					   hw_stats_drop_size),
 	},
+	{
+		.data_type	= QMI_OPT_FLAG,
+		.elem_len	= 1,
+		.elem_size	=
+			sizeof_field(struct ipa_init_modem_driver_req,
+				     hw_stats_filter_info_valid),
+		.tlv_type	= 0x23,
+		.offset		= offsetof(struct ipa_init_modem_driver_req,
+					   hw_stats_filter_info_valid),
+	},
+	{
+		.data_type	= QMI_STRUCT,
+		.elem_len	= 1,
+		.elem_size	=
+			sizeof_field(struct ipa_init_modem_driver_req,
+				     hw_stats_filter_info),
+		.tlv_type	= 0x23,
+		.offset		= offsetof(struct ipa_init_modem_driver_req,
+					   hw_stats_filter_info),
+		.ei_array	= ipa_stats_filter_ei,
+	},
 	{
 		.data_type	= QMI_EOTI,
 	},
diff --git a/drivers/net/ipa/ipa_qmi_msg.h b/drivers/net/ipa/ipa_qmi_msg.h
index 644b8c27108b..3a2205c213d1 100644
--- a/drivers/net/ipa/ipa_qmi_msg.h
+++ b/drivers/net/ipa/ipa_qmi_msg.h
@@ -27,7 +27,7 @@
  */
 #define IPA_QMI_INDICATION_REGISTER_REQ_SZ	20	/* -> server handle */
 #define IPA_QMI_INDICATION_REGISTER_RSP_SZ	7	/* <- server handle */
-#define IPA_QMI_INIT_DRIVER_REQ_SZ		162	/* client handle -> */
+#define IPA_QMI_INIT_DRIVER_REQ_SZ		186	/* client handle -> */
 #define IPA_QMI_INIT_DRIVER_RSP_SZ		25	/* client handle <- */
 #define IPA_QMI_INIT_COMPLETE_IND_SZ		7	/* <- server handle */
 #define IPA_QMI_DRIVER_INIT_COMPLETE_REQ_SZ	4	/* -> server handle */
@@ -119,6 +119,13 @@ struct ipa_mem_range {
 	u32 size;
 };
 
+struct ipa_stats_filter {
+	u32 start_addr;
+	u32 size;
+	u8 start_index;
+	u8 end_index;
+};
+
 /* The message for the IPA_QMI_INIT_DRIVER request contains information
  * from the AP that affects modem initialization.
  */
@@ -216,6 +223,11 @@ struct ipa_init_modem_driver_req {
 	u32			hw_stats_drop_base_addr;
 	u8			hw_stats_drop_size_valid;
 	u32			hw_stats_drop_size;
+
+	/* Hardware filter statistics information. (IPA v4.5 and above)
+	 */
+	u8			hw_stats_filter_info_valid;
+	struct ipa_stats_filter	hw_stats_filter_info;
 };
 
 /* The response to a IPA_QMI_INIT_DRIVER request begins with a standard
@@ -256,6 +268,7 @@ extern const struct qmi_elem_info ipa_init_complete_ind_ei[];
 extern const struct qmi_elem_info ipa_mem_bounds_ei[];
 extern const struct qmi_elem_info ipa_mem_array_ei[];
 extern const struct qmi_elem_info ipa_mem_range_ei[];
+extern const struct qmi_elem_info ipa_stats_filter_ei[];
 extern const struct qmi_elem_info ipa_init_modem_driver_req_ei[];
 extern const struct qmi_elem_info ipa_init_modem_driver_rsp_ei[];
 

-- 
2.53.0



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

* [PATCH RFC 4/4] net: ipa: add Eliza configuration data
  2026-04-16 22:40 [PATCH RFC 0/4] net: ipa: add support for Eliza SoC (IPA 5.5) Alexander Koskovich
                   ` (2 preceding siblings ...)
  2026-04-16 22:41 ` [PATCH RFC 3/4] net: ipa: add new QMI request for HW filter stats info Alexander Koskovich
@ 2026-04-16 22:41 ` Alexander Koskovich
  3 siblings, 0 replies; 6+ messages in thread
From: Alexander Koskovich @ 2026-04-16 22:41 UTC (permalink / raw)
  To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Alex Elder
  Cc: linux-arm-msm, netdev, devicetree, linux-kernel,
	Alexander Koskovich

Add the configuration data required for Eliza, which uses IPA v5.5. The
difference over other platforms that use IPA 5.5 is the Q6 FnR counters
have been increased on the firmware version it uses, which results in a
different memory layout.

Signed-off-by: Alexander Koskovich <akoskovich@pm.me>
---
 drivers/net/ipa/data/ipa_data-v5.5.c | 163 +++++++++++++++++++++++++++++++++++
 drivers/net/ipa/ipa_data.h           |   1 +
 drivers/net/ipa/ipa_main.c           |   4 +
 3 files changed, 168 insertions(+)

diff --git a/drivers/net/ipa/data/ipa_data-v5.5.c b/drivers/net/ipa/data/ipa_data-v5.5.c
index 44a9df7346b7..e1454454bde9 100644
--- a/drivers/net/ipa/data/ipa_data-v5.5.c
+++ b/drivers/net/ipa/data/ipa_data-v5.5.c
@@ -288,6 +288,148 @@ static const struct ipa_resource_data ipa_resource_data = {
 	.resource_dst		= ipa_resource_dst,
 };
 
+/* IPA-resident memory region data for the Eliza SoC */
+static const struct ipa_mem ipa_mem_local_data_eliza[] = {
+	{
+		.id		= IPA_MEM_UC_EVENT_RING,
+		.offset		= 0x0000,
+		.size		= 0x1000,
+		.canary_count	= 0,
+	},
+	{
+		.id		= IPA_MEM_UC_SHARED,
+		.offset		= 0x1000,
+		.size		= 0x0080,
+		.canary_count	= 0,
+	},
+	{
+		.id		= IPA_MEM_UC_INFO,
+		.offset		= 0x1080,
+		.size		= 0x0200,
+		.canary_count	= 0,
+	},
+	{
+		.id		= IPA_MEM_V4_FILTER_HASHED,
+		.offset		= 0x1288,
+		.size		= 0x0078,
+		.canary_count	= 2,
+	},
+	{
+		.id		= IPA_MEM_V4_FILTER,
+		.offset		= 0x1308,
+		.size		= 0x0078,
+		.canary_count	= 2,
+	},
+	{
+		.id		= IPA_MEM_V6_FILTER_HASHED,
+		.offset		= 0x1388,
+		.size		= 0x0078,
+		.canary_count	= 2,
+	},
+	{
+		.id		= IPA_MEM_V6_FILTER,
+		.offset		= 0x1408,
+		.size		= 0x0078,
+		.canary_count	= 2,
+	},
+	{
+		.id		= IPA_MEM_V4_ROUTE_HASHED,
+		.offset		= 0x1488,
+		.size		= 0x0098,
+		.canary_count	= 2,
+	},
+	{
+		.id		= IPA_MEM_V4_ROUTE,
+		.offset		= 0x1528,
+		.size		= 0x0098,
+		.canary_count	= 2,
+	},
+	{
+		.id		= IPA_MEM_V6_ROUTE_HASHED,
+		.offset		= 0x15c8,
+		.size		= 0x0098,
+		.canary_count	= 2,
+	},
+	{
+		.id		= IPA_MEM_V6_ROUTE,
+		.offset		= 0x1668,
+		.size		= 0x0098,
+		.canary_count	= 2,
+	},
+	{
+		.id		= IPA_MEM_MODEM_HEADER,
+		.offset		= 0x1708,
+		.size		= 0x0240,
+		.canary_count	= 2,
+	},
+	{
+		.id		= IPA_MEM_AP_HEADER,
+		.offset		= 0x1948,
+		.size		= 0x01e0,
+		.canary_count	= 0,
+	},
+	{
+		.id		= IPA_MEM_MODEM_PROC_CTX,
+		.offset		= 0x1b40,
+		.size		= 0x0b20,
+		.canary_count	= 2,
+	},
+	{
+		.id		= IPA_MEM_AP_PROC_CTX,
+		.offset		= 0x2660,
+		.size		= 0x0200,
+		.canary_count	= 0,
+	},
+	{
+		.id		= IPA_MEM_STATS_QUOTA_MODEM,
+		.offset		= 0x2868,
+		.size		= 0x0060,
+		.canary_count	= 2,
+	},
+	{
+		.id		= IPA_MEM_STATS_QUOTA_AP,
+		.offset		= 0x28c8,
+		.size		= 0x0048,
+		.canary_count	= 0,
+	},
+	{
+		.id		= IPA_MEM_STATS_TETHERING,
+		.offset		= 0x2910,
+		.size		= 0x03c0,
+		.canary_count	= 0,
+	},
+	{
+		.id		= IPA_MEM_STATS_FILTER_ROUTE,
+		.offset		= 0x2cd0,
+		.size		= 0x0c40,
+		.canary_count	= 2,
+	},
+	{
+		.id		= IPA_MEM_STATS_DROP,
+		.offset		= 0x3910,
+		.size		= 0x0020,
+		.canary_count	= 0,
+	},
+	{
+		.id		= IPA_MEM_MODEM,
+		.offset		= 0x3938,
+		.size		= 0x0d48,
+		.canary_count	= 2,
+	},
+	{
+		.id		= IPA_MEM_NAT_TABLE,
+		.offset		= 0x4680,
+		.size		= 0x0900,
+		.canary_count	= 0,
+	},
+	{
+		.id		= IPA_MEM_PDN_CONFIG,
+		.offset		= 0x4f88,
+		.size		= 0x0050,
+		.canary_count	= 2,
+	},
+};
+
 /* IPA-resident memory region data for an SoC having IPA v5.5 */
 static const struct ipa_mem ipa_mem_local_data[] = {
 	{
@@ -442,6 +584,14 @@ static const struct ipa_mem ipa_mem_local_data[] = {
 	},
 };
 
+/* Memory configuration data for the Eliza SoC */
+static const struct ipa_mem_data ipa_mem_data_eliza = {
+	.local_count	= ARRAY_SIZE(ipa_mem_local_data_eliza),
+	.local		= ipa_mem_local_data_eliza,
+	.smem_size	= 0x0000b000,
+	.fnr_idx_cnt	= 68,
+};
+
 /* Memory configuration data for an SoC having IPA v5.5 */
 static const struct ipa_mem_data ipa_mem_data = {
 	.local_count	= ARRAY_SIZE(ipa_mem_local_data),
@@ -486,3 +636,16 @@ const struct ipa_data ipa_data_v5_5 = {
 	.mem_data		= &ipa_mem_data,
 	.power_data		= &ipa_power_data,
 };
+
+/* Configuration data for the Eliza SoC (IPA v5.5). */
+const struct ipa_data ipa_data_v5_5_eliza = {
+	.version		= IPA_VERSION_5_5,
+	.qsb_count		= ARRAY_SIZE(ipa_qsb_data),
+	.qsb_data		= ipa_qsb_data,
+	.modem_route_count	= 11,
+	.endpoint_count		= ARRAY_SIZE(ipa_gsi_endpoint_data),
+	.endpoint_data		= ipa_gsi_endpoint_data,
+	.resource_data		= &ipa_resource_data,
+	.mem_data		= &ipa_mem_data_eliza,
+	.power_data		= &ipa_power_data,
+};
diff --git a/drivers/net/ipa/ipa_data.h b/drivers/net/ipa/ipa_data.h
index f7566c8edabd..da01fc84edac 100644
--- a/drivers/net/ipa/ipa_data.h
+++ b/drivers/net/ipa/ipa_data.h
@@ -258,5 +258,6 @@ extern const struct ipa_data ipa_data_v4_11;
 extern const struct ipa_data ipa_data_v5_0;
 extern const struct ipa_data ipa_data_v5_2;
 extern const struct ipa_data ipa_data_v5_5;
+extern const struct ipa_data ipa_data_v5_5_eliza;
 
 #endif /* _IPA_DATA_H_ */
diff --git a/drivers/net/ipa/ipa_main.c b/drivers/net/ipa/ipa_main.c
index 788dd99af2a4..981be8b538d0 100644
--- a/drivers/net/ipa/ipa_main.c
+++ b/drivers/net/ipa/ipa_main.c
@@ -637,6 +637,10 @@ static int ipa_firmware_load(struct device *dev)
 }
 
 static const struct of_device_id ipa_match[] = {
+	{
+		.compatible	= "qcom,eliza-ipa",
+		.data		= &ipa_data_v5_5_eliza,
+	},
 	{
 		.compatible	= "qcom,msm8998-ipa",
 		.data		= &ipa_data_v3_1,

-- 
2.53.0



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

* Re: [PATCH RFC 1/4] dt-bindings: net: qcom,ipa: document Eliza compatible
  2026-04-16 22:40 ` [PATCH RFC 1/4] dt-bindings: net: qcom,ipa: document Eliza compatible Alexander Koskovich
@ 2026-04-17  8:16   ` Konrad Dybcio
  0 siblings, 0 replies; 6+ messages in thread
From: Konrad Dybcio @ 2026-04-17  8:16 UTC (permalink / raw)
  To: Alexander Koskovich, Andrew Lunn, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Alex Elder
  Cc: linux-arm-msm, netdev, devicetree, linux-kernel

On 4/17/26 12:40 AM, Alexander Koskovich wrote:
> Document the IPA on the Eliza Platform which uses version 5.5.1,
> which is a minor revision of v5.5 found on SM8550, thus we can
> use the SM8550 bindings as fallback since it shares the same
> register mappings.
> 
> Signed-off-by: Alexander Koskovich <akoskovich@pm.me>
> ---
>  Documentation/devicetree/bindings/net/qcom,ipa.yaml | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/Documentation/devicetree/bindings/net/qcom,ipa.yaml b/Documentation/devicetree/bindings/net/qcom,ipa.yaml
> index fdeaa81b9645..38a5a337c34f 100644
> --- a/Documentation/devicetree/bindings/net/qcom,ipa.yaml
> +++ b/Documentation/devicetree/bindings/net/qcom,ipa.yaml
> @@ -60,6 +60,7 @@ properties:
>            - const: qcom,sc7180-ipa
>        - items:
>            - enum:
> +              - qcom,eliza-ipa
>                - qcom,sm8650-ipa
>            - const: qcom,sm8550-ipa

FWIW:

8650 -> v5.5.1

eliza
8750
and a couple others
-> 5.5.2

Konrad

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

end of thread, other threads:[~2026-04-17  8:16 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-16 22:40 [PATCH RFC 0/4] net: ipa: add support for Eliza SoC (IPA 5.5) Alexander Koskovich
2026-04-16 22:40 ` [PATCH RFC 1/4] dt-bindings: net: qcom,ipa: document Eliza compatible Alexander Koskovich
2026-04-17  8:16   ` Konrad Dybcio
2026-04-16 22:40 ` [PATCH RFC 2/4] net: ipa: fix IPA v5.5 configuration data Alexander Koskovich
2026-04-16 22:41 ` [PATCH RFC 3/4] net: ipa: add new QMI request for HW filter stats info Alexander Koskovich
2026-04-16 22:41 ` [PATCH RFC 4/4] net: ipa: add Eliza configuration data Alexander Koskovich

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox