* [PATCH v2 0/3] SM8450 IPA support
@ 2026-09-09 3:10 Esteban Urrutia
2026-09-09 3:11 ` [PATCH v2 1/3] dt-bindings: net: qcom,ipa: Add SM8450 compatible Esteban Urrutia
` (3 more replies)
0 siblings, 4 replies; 10+ messages in thread
From: Esteban Urrutia @ 2026-09-09 3:10 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Alex Elder, Bjorn Andersson, Konrad Dybcio
Cc: Esteban Urrutia, Nazar Kompanets, linux-arm-msm, netdev,
devicetree, linux-kernel, phone-devel, Krzysztof Kozlowski
This series has been tested on the following SoCs:
- SM7475
- SM8450
- SM8475
In these the modem works as expected and no crashes occur.
Signed-off-by: Esteban Urrutia <esteuwu@proton.me>
---
Changes in v2:
- Add missing resource limits for DMA and QDSS source groups.
- These are marked as unused downstream, but still have values written
to them.
- Add Nazar as a co-developer.
- We developed independent implementations and are both working on
this series.
- Add the IPA_MEM_MODEM_STATS_DROP memory region.
- Pick tags.
- Rebase against linux-next.
- Remove comment in driver stating smem_size differences.
For both SM8450 and SM8475 SoCs:
- All devices based on these SoCs use an smem_size of 0x9000. [1]
- Specifying an smem_size of 0xb000 causes the modem to assert a
shared memory allocation failure. [2]
- Remove overlapping optional memory regions.
- No comments from anyone regarding these, so remove them.
- Reorder patches. (Dmitry, Krzysztof)
- Sort iommus property in DT. (Krzysztof)
- Specify actual IMEM base and size in DT. (Konrad)
- Update commit messages and cover letter.
- Link to v1: https://patch.msgid.link/20260622-sm8450-ipa-v1-0-532f0299f96e@proton.me
[1] https://github.com/sm8450-mainline/fdt
[2] https://github.com/dopaemon/android_kernel_xiaomi_sm8450-devicetrees/commit/0cff0b070363fb9a312ba6e66244898013e7038f
To: Andrew Lunn <andrew+netdev@lunn.ch>
To: "David S. Miller" <davem@davemloft.net>
To: Eric Dumazet <edumazet@google.com>
To: Jakub Kicinski <kuba@kernel.org>
To: Paolo Abeni <pabeni@redhat.com>
To: Rob Herring <robh@kernel.org>
To: Krzysztof Kozlowski <krzk+dt@kernel.org>
To: Conor Dooley <conor+dt@kernel.org>
To: Alex Elder <elder@kernel.org>
To: Bjorn Andersson <andersson@kernel.org>
To: Konrad Dybcio <konradybcio@kernel.org>
Cc: Nazar Kompanets <xlie7669@gmail.com>
Cc: linux-arm-msm@vger.kernel.org
Cc: netdev@vger.kernel.org
Cc: devicetree@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Cc: phone-devel@vger.kernel.org
---
Esteban Urrutia (3):
dt-bindings: net: qcom,ipa: Add SM8450 compatible
net: ipa: Add IPA v5.1 configuration data
arm64: dts: qcom: sm8450: Add IPA node
.../devicetree/bindings/net/qcom,ipa.yaml | 1 +
arch/arm64/boot/dts/qcom/sm8450.dtsi | 59 ++-
drivers/net/ipa/Makefile | 2 +-
drivers/net/ipa/data/ipa_data-v5.1.c | 476 +++++++++++++++++++++
drivers/net/ipa/gsi_reg.c | 1 +
drivers/net/ipa/ipa_data.h | 1 +
drivers/net/ipa/ipa_main.c | 4 +
drivers/net/ipa/ipa_reg.c | 1 +
8 files changed, 537 insertions(+), 8 deletions(-)
---
base-commit: a9d7ced84989ec05be09b4b8428759ef60450a0f
change-id: 20260908-sm8450-ipa-4dfc931c8ce0
Best regards,
--
Esteban Urrutia <esteuwu@proton.me>
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v2 1/3] dt-bindings: net: qcom,ipa: Add SM8450 compatible
2026-09-09 3:10 [PATCH v2 0/3] SM8450 IPA support Esteban Urrutia
@ 2026-09-09 3:11 ` Esteban Urrutia
2026-09-09 3:11 ` [PATCH v2 2/3] net: ipa: Add IPA v5.1 configuration data Esteban Urrutia
` (2 subsequent siblings)
3 siblings, 0 replies; 10+ messages in thread
From: Esteban Urrutia @ 2026-09-09 3:11 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Alex Elder, Bjorn Andersson, Konrad Dybcio
Cc: Esteban Urrutia, Nazar Kompanets, linux-arm-msm, netdev,
devicetree, linux-kernel, phone-devel, Krzysztof Kozlowski
Add support for the SM8450 SoC, which uses IPA v5.1.
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Co-developed-by: Nazar Kompanets <xlie7669@gmail.com>
Signed-off-by: Nazar Kompanets <xlie7669@gmail.com>
Signed-off-by: Esteban Urrutia <esteuwu@proton.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 68ec76fe4473..db91bfaaf833 100644
--- a/Documentation/devicetree/bindings/net/qcom,ipa.yaml
+++ b/Documentation/devicetree/bindings/net/qcom,ipa.yaml
@@ -53,6 +53,7 @@ properties:
- qcom,sdx65-ipa
- qcom,sm6350-ipa
- qcom,sm8350-ipa
+ - qcom,sm8450-ipa
- qcom,sm8550-ipa
- items:
- enum:
--
2.55.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 2/3] net: ipa: Add IPA v5.1 configuration data
2026-09-09 3:10 [PATCH v2 0/3] SM8450 IPA support Esteban Urrutia
2026-09-09 3:11 ` [PATCH v2 1/3] dt-bindings: net: qcom,ipa: Add SM8450 compatible Esteban Urrutia
@ 2026-09-09 3:11 ` Esteban Urrutia
2026-09-10 3:11 ` sashiko-bot
2026-09-09 3:11 ` [PATCH v2 3/3] arm64: dts: qcom: sm8450: Add IPA node Esteban Urrutia
2026-09-09 3:12 ` [PATCH v2 0/3] SM8450 IPA support Esteban Urrutia
3 siblings, 1 reply; 10+ messages in thread
From: Esteban Urrutia @ 2026-09-09 3:11 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Alex Elder, Bjorn Andersson, Konrad Dybcio
Cc: Esteban Urrutia, Nazar Kompanets, linux-arm-msm, netdev,
devicetree, linux-kernel, phone-devel
Add the configuration data required for IPA v5.1, which is used in the
Qualcomm SM8450 SoC.
Co-developed-by: Nazar Kompanets <xlie7669@gmail.com>
Signed-off-by: Nazar Kompanets <xlie7669@gmail.com>
Signed-off-by: Esteban Urrutia <esteuwu@proton.me>
---
drivers/net/ipa/Makefile | 2 +-
drivers/net/ipa/data/ipa_data-v5.1.c | 476 +++++++++++++++++++++++++++++++++++
drivers/net/ipa/gsi_reg.c | 1 +
drivers/net/ipa/ipa_data.h | 1 +
drivers/net/ipa/ipa_main.c | 4 +
drivers/net/ipa/ipa_reg.c | 1 +
6 files changed, 484 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ipa/Makefile b/drivers/net/ipa/Makefile
index e148ec3c1a10..d4995c2e8ca0 100644
--- a/drivers/net/ipa/Makefile
+++ b/drivers/net/ipa/Makefile
@@ -7,7 +7,7 @@ IPA_REG_VERSIONS := 3.1 3.5.1 4.2 4.5 4.7 4.9 4.11 5.0 5.5
# Some IPA versions can reuse another set of GSI register definitions.
GSI_REG_VERSIONS := 3.1 3.5.1 4.0 4.5 4.9 4.11 5.0
-IPA_DATA_VERSIONS := 3.1 3.5.1 4.2 4.5 4.7 4.9 4.11 5.0 5.2 5.5
+IPA_DATA_VERSIONS := 3.1 3.5.1 4.2 4.5 4.7 4.9 4.11 5.0 5.1 5.2 5.5
obj-$(CONFIG_QCOM_IPA) += ipa.o
diff --git a/drivers/net/ipa/data/ipa_data-v5.1.c b/drivers/net/ipa/data/ipa_data-v5.1.c
new file mode 100644
index 000000000000..7d7bc193b774
--- /dev/null
+++ b/drivers/net/ipa/data/ipa_data-v5.1.c
@@ -0,0 +1,476 @@
+// SPDX-License-Identifier: GPL-2.0
+
+/* Copyright (C) 2023-2024 Linaro Ltd. */
+/* Copyright (C) 2026 Nazar Kompanets <xlie7669@gmail.com> */
+/* Copyright (C) 2026 Esteban Urrutia <esteuwu@proton.me> */
+
+#include <linux/array_size.h>
+#include <linux/log2.h>
+
+#include "../ipa_data.h"
+#include "../ipa_endpoint.h"
+#include "../ipa_mem.h"
+#include "../ipa_version.h"
+
+/** enum ipa_resource_type - IPA resource types for an SoC having IPA v5.1 */
+enum ipa_resource_type {
+ /* Source resource types; first must have value 0 */
+ IPA_RESOURCE_TYPE_SRC_PKT_CONTEXTS = 0,
+ IPA_RESOURCE_TYPE_SRC_DESCRIPTOR_LISTS,
+ IPA_RESOURCE_TYPE_SRC_DESCRIPTOR_BUFF,
+ IPA_RESOURCE_TYPE_SRC_HPS_DMARS,
+ IPA_RESOURCE_TYPE_SRC_ACK_ENTRIES,
+
+ /* Destination resource types; first must have value 0 */
+ IPA_RESOURCE_TYPE_DST_DATA_SECTORS = 0,
+ IPA_RESOURCE_TYPE_DST_DPS_DMARS,
+ IPA_RESOURCE_TYPE_DST_ULSO_SEGMENTS,
+};
+
+/* Resource groups used for an SoC having IPA v5.1 */
+enum ipa_rsrc_group_id {
+ /* Source resource group identifiers */
+ IPA_RSRC_GROUP_SRC_UL = 0,
+ IPA_RSRC_GROUP_SRC_DL,
+ IPA_RSRC_GROUP_SRC_DMA,
+ IPA_RSRC_GROUP_SRC_QDSS,
+ IPA_RSRC_GROUP_SRC_URLLC,
+ IPA_RSRC_GROUP_SRC_U_RX_QC,
+ IPA_RSRC_GROUP_SRC_COUNT, /* Last in set; not a source group */
+
+ /* Destination resource group identifiers */
+ IPA_RSRC_GROUP_DST_UL = 0,
+ IPA_RSRC_GROUP_DST_DL,
+ IPA_RSRC_GROUP_DST_UNUSED_2,
+ IPA_RSRC_GROUP_DST_UNUSED_3,
+ IPA_RSRC_GROUP_DST_UNUSED_4,
+ IPA_RSRC_GROUP_DST_UC,
+ IPA_RSRC_GROUP_DST_DRB_IP,
+ IPA_RSRC_GROUP_DST_COUNT, /* Last; not a destination group */
+};
+
+/* QSB configuration data for an SoC having IPA v5.1 */
+static const struct ipa_qsb_data ipa_qsb_data[] = {
+ [IPA_QSB_MASTER_DDR] = {
+ .max_writes = 0,
+ .max_reads = 0, /* no limit (hardware max) */
+ .max_reads_beats = 0,
+ },
+ [IPA_QSB_MASTER_PCIE] = {
+ .max_writes = 0,
+ .max_reads = 0, /* no limit (hardware max) */
+ .max_reads_beats = 0,
+ },
+};
+
+/* Endpoint configuration data for an SoC having IPA v5.1 */
+static const struct ipa_gsi_endpoint_data ipa_gsi_endpoint_data[] = {
+ [IPA_ENDPOINT_AP_COMMAND_TX] = {
+ .ee_id = GSI_EE_AP,
+ .channel_id = 12,
+ .endpoint_id = 14,
+ .toward_ipa = true,
+ .channel = {
+ .tre_count = 256,
+ .event_count = 256,
+ .tlv_count = 20,
+ },
+ .endpoint = {
+ .config = {
+ .resource_group = IPA_RSRC_GROUP_SRC_UL,
+ .dma_mode = true,
+ .dma_endpoint = IPA_ENDPOINT_AP_LAN_RX,
+ .tx = {
+ .seq_type = IPA_SEQ_DMA,
+ },
+ },
+ },
+ },
+ [IPA_ENDPOINT_AP_LAN_RX] = {
+ .ee_id = GSI_EE_AP,
+ .channel_id = 13,
+ .endpoint_id = 16,
+ .toward_ipa = false,
+ .channel = {
+ .tre_count = 256,
+ .event_count = 256,
+ .tlv_count = 9,
+ },
+ .endpoint = {
+ .config = {
+ .resource_group = IPA_RSRC_GROUP_DST_UL,
+ .aggregation = true,
+ .status_enable = true,
+ .rx = {
+ .buffer_size = 8192,
+ .pad_align = ilog2(sizeof(u32)),
+ .aggr_time_limit = 500,
+ },
+ },
+ },
+ },
+ [IPA_ENDPOINT_AP_MODEM_TX] = {
+ .ee_id = GSI_EE_AP,
+ .channel_id = 11,
+ .endpoint_id = 2,
+ .toward_ipa = true,
+ .channel = {
+ .tre_count = 512,
+ .event_count = 512,
+ .tlv_count = 25,
+ },
+ .endpoint = {
+ .filter_support = true,
+ .config = {
+ .resource_group = IPA_RSRC_GROUP_SRC_UL,
+ .checksum = true,
+ .qmap = true,
+ .status_enable = true,
+ .tx = {
+ .seq_type = IPA_SEQ_2_PASS_SKIP_LAST_UC,
+ .status_endpoint =
+ IPA_ENDPOINT_MODEM_AP_RX,
+ },
+ },
+ },
+ },
+ [IPA_ENDPOINT_AP_MODEM_RX] = {
+ .ee_id = GSI_EE_AP,
+ .channel_id = 1,
+ .endpoint_id = 23,
+ .toward_ipa = false,
+ .channel = {
+ .tre_count = 256,
+ .event_count = 256,
+ .tlv_count = 9,
+ },
+ .endpoint = {
+ .config = {
+ .resource_group = IPA_RSRC_GROUP_DST_UL,
+ .checksum = true,
+ .qmap = true,
+ .aggregation = true,
+ .rx = {
+ .buffer_size = 8192,
+ .aggr_time_limit = 500,
+ .aggr_close_eof = true,
+ },
+ },
+ },
+ },
+ [IPA_ENDPOINT_MODEM_AP_TX] = {
+ .ee_id = GSI_EE_MODEM,
+ .channel_id = 0,
+ .endpoint_id = 12,
+ .toward_ipa = true,
+ .endpoint = {
+ .filter_support = true,
+ },
+ },
+ [IPA_ENDPOINT_MODEM_AP_RX] = {
+ .ee_id = GSI_EE_MODEM,
+ .channel_id = 7,
+ .endpoint_id = 21,
+ .toward_ipa = false,
+ },
+ [IPA_ENDPOINT_MODEM_DL_NLO_TX] = {
+ .ee_id = GSI_EE_MODEM,
+ .channel_id = 2,
+ .endpoint_id = 15,
+ .toward_ipa = true,
+ .endpoint = {
+ .filter_support = true,
+ },
+ },
+};
+
+/* Source resource configuration data for an SoC having IPA v5.1 */
+static const struct ipa_resource ipa_resource_src[] = {
+ [IPA_RESOURCE_TYPE_SRC_PKT_CONTEXTS] = {
+ .limits[IPA_RSRC_GROUP_SRC_UL] = {
+ .min = 7, .max = 12,
+ },
+ .limits[IPA_RSRC_GROUP_SRC_URLLC] = {
+ .min = 1, .max = 63,
+ },
+ .limits[IPA_RSRC_GROUP_SRC_U_RX_QC] = {
+ .min = 0, .max = 63,
+ },
+ },
+ [IPA_RESOURCE_TYPE_SRC_DESCRIPTOR_LISTS] = {
+ .limits[IPA_RSRC_GROUP_SRC_UL] = {
+ .min = 21, .max = 21,
+ },
+ .limits[IPA_RSRC_GROUP_SRC_URLLC] = {
+ .min = 10, .max = 10,
+ },
+ },
+ [IPA_RESOURCE_TYPE_SRC_DESCRIPTOR_BUFF] = {
+ .limits[IPA_RSRC_GROUP_SRC_UL] = {
+ .min = 33, .max = 33,
+ },
+ .limits[IPA_RSRC_GROUP_SRC_URLLC] = {
+ .min = 20, .max = 20,
+ },
+ },
+ [IPA_RESOURCE_TYPE_SRC_HPS_DMARS] = {
+ .limits[IPA_RSRC_GROUP_SRC_UL] = {
+ .min = 0, .max = 63,
+ },
+ /* Marked as unused downstream */
+ .limits[IPA_RSRC_GROUP_SRC_DMA] = {
+ .min = 0, .max = 63,
+ },
+ /* Marked as unused downstream */
+ .limits[IPA_RSRC_GROUP_SRC_QDSS] = {
+ .min = 0, .max = 63,
+ },
+ .limits[IPA_RSRC_GROUP_SRC_URLLC] = {
+ .min = 1, .max = 63,
+ },
+ .limits[IPA_RSRC_GROUP_SRC_U_RX_QC] = {
+ .min = 0, .max = 63,
+ },
+ },
+ [IPA_RESOURCE_TYPE_SRC_ACK_ENTRIES] = {
+ .limits[IPA_RSRC_GROUP_SRC_UL] = {
+ .min = 38, .max = 38,
+ },
+ .limits[IPA_RSRC_GROUP_SRC_URLLC] = {
+ .min = 16, .max = 16,
+ },
+ },
+};
+
+/* Destination resource configuration data for an SoC having IPA v5.1 */
+static const struct ipa_resource ipa_resource_dst[] = {
+ [IPA_RESOURCE_TYPE_DST_DATA_SECTORS] = {
+ .limits[IPA_RSRC_GROUP_DST_UL] = {
+ .min = 6, .max = 6,
+ },
+ .limits[IPA_RSRC_GROUP_DST_DL] = {
+ .min = 5, .max = 5,
+ },
+ .limits[IPA_RSRC_GROUP_DST_DRB_IP] = {
+ .min = 39, .max = 39,
+ },
+ },
+ [IPA_RESOURCE_TYPE_DST_DPS_DMARS] = {
+ .limits[IPA_RSRC_GROUP_DST_UL] = {
+ .min = 0, .max = 3,
+ },
+ .limits[IPA_RSRC_GROUP_DST_DL] = {
+ .min = 0, .max = 3,
+ },
+ },
+ [IPA_RESOURCE_TYPE_DST_ULSO_SEGMENTS] = {
+ .limits[IPA_RSRC_GROUP_DST_UL] = {
+ .min = 0, .max = 63,
+ },
+ .limits[IPA_RSRC_GROUP_DST_DL] = {
+ .min = 0, .max = 63,
+ },
+ },
+};
+
+/* Resource configuration data for an SoC having IPA v5.1 */
+static const struct ipa_resource_data ipa_resource_data = {
+ .rsrc_group_dst_count = IPA_RSRC_GROUP_DST_COUNT,
+ .rsrc_group_src_count = IPA_RSRC_GROUP_SRC_COUNT,
+ .resource_src_count = ARRAY_SIZE(ipa_resource_src),
+ .resource_src = ipa_resource_src,
+ .resource_dst_count = ARRAY_SIZE(ipa_resource_dst),
+ .resource_dst = ipa_resource_dst,
+};
+
+/* IPA-resident memory region data for an SoC having IPA v5.1 */
+static const struct ipa_mem ipa_mem_local_data[] = {
+ {
+ .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 = 0x0ba0,
+ .canary_count = 2,
+ },
+ {
+ .id = IPA_MEM_STATS_DROP,
+ .offset = 0x3870,
+ .size = 0x0020,
+ .canary_count = 0,
+ },
+ {
+ .id = IPA_MEM_MODEM,
+ .offset = 0x3898,
+ .size = 0x0d48,
+ .canary_count = 2,
+ },
+ {
+ .id = IPA_MEM_NAT_TABLE,
+ .offset = 0x45e0,
+ .size = 0x0900,
+ .canary_count = 0,
+ },
+ {
+ .id = IPA_MEM_PDN_CONFIG,
+ .offset = 0x4ee8,
+ .size = 0x0100,
+ .canary_count = 2,
+ },
+ {
+ .id = IPA_MEM_MODEM_STATS_DROP,
+ .offset = 0x4fe8,
+ .size = 0x0018,
+ .canary_count = 0,
+ },
+};
+
+/* Memory configuration data for an SoC having IPA v5.1 */
+static const struct ipa_mem_data ipa_mem_data = {
+ .local_count = ARRAY_SIZE(ipa_mem_local_data),
+ .local = ipa_mem_local_data,
+ .imem_addr = 0x146a8000,
+ .imem_size = 0x00002000,
+ .smem_size = 0x00009000,
+};
+
+/* Interconnect rates are in 1000 byte/second units */
+static const struct ipa_interconnect_data ipa_interconnect_data[] = {
+ {
+ .name = "memory",
+ .peak_bandwidth = 1900000, /* 1.9 GBps */
+ .average_bandwidth = 590000, /* 590 MBps */
+ },
+ /* Average rate is unused for the next interconnect */
+ {
+ .name = "config",
+ .peak_bandwidth = 76800, /* 76.8 MBps */
+ .average_bandwidth = 0, /* unused */
+ },
+};
+
+/* Clock and interconnect configuration data for an SoC having IPA v5.1 */
+static const struct ipa_power_data ipa_power_data = {
+ .core_clock_rate = 120 * 1000 * 1000, /* Hz */
+ .interconnect_count = ARRAY_SIZE(ipa_interconnect_data),
+ .interconnect_data = ipa_interconnect_data,
+};
+
+/* Configuration data for an SoC having IPA v5.1. */
+const struct ipa_data ipa_data_v5_1 = {
+ .version = IPA_VERSION_5_1,
+ .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,
+ .power_data = &ipa_power_data,
+};
diff --git a/drivers/net/ipa/gsi_reg.c b/drivers/net/ipa/gsi_reg.c
index e13cf835a013..a57072ba4bef 100644
--- a/drivers/net/ipa/gsi_reg.c
+++ b/drivers/net/ipa/gsi_reg.c
@@ -110,6 +110,7 @@ static const struct regs *gsi_regs(struct gsi *gsi)
return &gsi_regs_v4_11;
case IPA_VERSION_5_0:
+ case IPA_VERSION_5_1:
case IPA_VERSION_5_2:
case IPA_VERSION_5_5:
return &gsi_regs_v5_0;
diff --git a/drivers/net/ipa/ipa_data.h b/drivers/net/ipa/ipa_data.h
index 3eb9dc2ce339..fe6f7d5bfe88 100644
--- a/drivers/net/ipa/ipa_data.h
+++ b/drivers/net/ipa/ipa_data.h
@@ -253,6 +253,7 @@ extern const struct ipa_data ipa_data_v4_7;
extern const struct ipa_data ipa_data_v4_9;
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_1;
extern const struct ipa_data ipa_data_v5_2;
extern const struct ipa_data ipa_data_v5_5;
diff --git a/drivers/net/ipa/ipa_main.c b/drivers/net/ipa/ipa_main.c
index 14ac2d2faf7c..84bec461d22c 100644
--- a/drivers/net/ipa/ipa_main.c
+++ b/drivers/net/ipa/ipa_main.c
@@ -672,6 +672,10 @@ static const struct of_device_id ipa_match[] = {
.compatible = "qcom,sdx65-ipa",
.data = &ipa_data_v5_0,
},
+ {
+ .compatible = "qcom,sm8450-ipa",
+ .data = &ipa_data_v5_1,
+ },
{
.compatible = "qcom,milos-ipa",
.data = &ipa_data_v5_2,
diff --git a/drivers/net/ipa/ipa_reg.c b/drivers/net/ipa/ipa_reg.c
index 30bd69f4c147..5f22ca6295b1 100644
--- a/drivers/net/ipa/ipa_reg.c
+++ b/drivers/net/ipa/ipa_reg.c
@@ -125,6 +125,7 @@ static const struct regs *ipa_regs(enum ipa_version version)
case IPA_VERSION_4_11:
return &ipa_regs_v4_11;
case IPA_VERSION_5_0:
+ case IPA_VERSION_5_1:
case IPA_VERSION_5_2:
return &ipa_regs_v5_0;
case IPA_VERSION_5_5:
--
2.55.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 3/3] arm64: dts: qcom: sm8450: Add IPA node
2026-09-09 3:10 [PATCH v2 0/3] SM8450 IPA support Esteban Urrutia
2026-09-09 3:11 ` [PATCH v2 1/3] dt-bindings: net: qcom,ipa: Add SM8450 compatible Esteban Urrutia
2026-09-09 3:11 ` [PATCH v2 2/3] net: ipa: Add IPA v5.1 configuration data Esteban Urrutia
@ 2026-09-09 3:11 ` Esteban Urrutia
2026-09-09 19:06 ` Dmitry Baryshkov
2026-09-10 3:11 ` sashiko-bot
2026-09-09 3:12 ` [PATCH v2 0/3] SM8450 IPA support Esteban Urrutia
3 siblings, 2 replies; 10+ messages in thread
From: Esteban Urrutia @ 2026-09-09 3:11 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Alex Elder, Bjorn Andersson, Konrad Dybcio
Cc: Esteban Urrutia, Nazar Kompanets, linux-arm-msm, netdev,
devicetree, linux-kernel, phone-devel
Add the description of the IPA block in the SM8450 SoC.
Co-developed-by: Nazar Kompanets <xlie7669@gmail.com>
Signed-off-by: Nazar Kompanets <xlie7669@gmail.com>
Signed-off-by: Esteban Urrutia <esteuwu@proton.me>
---
arch/arm64/boot/dts/qcom/sm8450.dtsi | 59 +++++++++++++++++++++++++++++++-----
1 file changed, 52 insertions(+), 7 deletions(-)
diff --git a/arch/arm64/boot/dts/qcom/sm8450.dtsi b/arch/arm64/boot/dts/qcom/sm8450.dtsi
index b8793482b181..95b6fd22a846 100644
--- a/arch/arm64/boot/dts/qcom/sm8450.dtsi
+++ b/arch/arm64/boot/dts/qcom/sm8450.dtsi
@@ -2625,6 +2625,47 @@ adreno_smmu: iommu@3da0000 {
dma-coherent;
};
+ ipa: ipa@3f40000 {
+ compatible = "qcom,sm8450-ipa";
+
+ reg = <0 0x3f40000 0 0x10000>,
+ <0 0x3f50000 0 0x5000>,
+ <0 0x3e04000 0 0xfc000>;
+ reg-names = "ipa-reg",
+ "ipa-shared",
+ "gsi";
+ iommus = <&apps_smmu 0x5c0 0x0>,
+ <&apps_smmu 0x5c2 0x0>;
+
+ interrupts-extended = <&intc GIC_SPI 654 IRQ_TYPE_EDGE_RISING>,
+ <&intc GIC_SPI 432 IRQ_TYPE_LEVEL_HIGH>,
+ <&ipa_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
+ <&ipa_smp2p_in 1 IRQ_TYPE_EDGE_RISING>;
+ interrupt-names = "ipa",
+ "gsi",
+ "ipa-clock-query",
+ "ipa-setup-ready";
+
+ clocks = <&rpmhcc RPMH_IPA_CLK>;
+ clock-names = "core";
+
+ interconnects = <&aggre2_noc MASTER_IPA 0 &mc_virt SLAVE_EBI1 0>,
+ <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_IPA_CFG 0>;
+ interconnect-names = "memory",
+ "config";
+
+ qcom,qmp = <&aoss_qmp>;
+
+ qcom,smem-states = <&ipa_smp2p_out 0>,
+ <&ipa_smp2p_out 1>;
+ qcom,smem-state-names = "ipa-clock-enabled-valid",
+ "ipa-clock-enabled";
+
+ sram = <&ipa_modem_tables>;
+
+ status = "disabled";
+ };
+
usb_1_hsphy: phy@88e3000 {
compatible = "qcom,sm8450-usb-hs-phy",
"qcom,usb-snps-hs-7nm-phy";
@@ -4957,21 +4998,25 @@ cti@13900000 {
clock-names = "apb_pclk";
};
- sram@146aa000 {
+ sram@14680000 {
compatible = "qcom,sm8450-imem", "syscon", "simple-mfd";
- reg = <0 0x146aa000 0 0x1000>;
- ranges = <0 0 0x146aa000 0x1000>;
+ reg = <0 0x14680000 0 0x40000>;
+ ranges = <0 0 0x14680000 0x40000>;
#address-cells = <1>;
#size-cells = <1>;
- minidump_config: minidump-sram@1c {
- reg = <0x1c 0x4>;
+ ipa_modem_tables: modem-tables@28000 {
+ reg = <0x28000 0x2000>;
+ };
+
+ minidump_config: minidump-sram@2a01c {
+ reg = <0x2a01c 0x4>;
};
- pil-reloc@94c {
+ pil-reloc@2a94c {
compatible = "qcom,pil-reloc-info";
- reg = <0x94c 0xc8>;
+ reg = <0x2a94c 0xc8>;
};
};
--
2.55.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v2 0/3] SM8450 IPA support
2026-09-09 3:10 [PATCH v2 0/3] SM8450 IPA support Esteban Urrutia
` (2 preceding siblings ...)
2026-09-09 3:11 ` [PATCH v2 3/3] arm64: dts: qcom: sm8450: Add IPA node Esteban Urrutia
@ 2026-09-09 3:12 ` Esteban Urrutia
2026-09-09 18:12 ` Simon Horman
3 siblings, 1 reply; 10+ messages in thread
From: Esteban Urrutia @ 2026-09-09 3:12 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Alex Elder, Bjorn Andersson, Konrad Dybcio
Cc: Nazar Kompanets, linux-arm-msm, netdev, devicetree, linux-kernel,
phone-devel, Krzysztof Kozlowski
On 9/9/26 12:10 AM, Esteban Urrutia wrote:
> This series has been tested on the following SoCs:
> - SM7475
> - SM8450
> - SM8475
> In these the modem works as expected and no crashes occur.
I forgot to mention that this series depends on the following patch:
https://lore.kernel.org/all/20260909-ipa-modem-drop-v1-1-0c9664f09c4a@proton.me/
Regards,
Esteban
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 0/3] SM8450 IPA support
2026-09-09 3:12 ` [PATCH v2 0/3] SM8450 IPA support Esteban Urrutia
@ 2026-09-09 18:12 ` Simon Horman
0 siblings, 0 replies; 10+ messages in thread
From: Simon Horman @ 2026-09-09 18:12 UTC (permalink / raw)
To: Esteban Urrutia
Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Alex Elder, Bjorn Andersson, Konrad Dybcio, Nazar Kompanets,
linux-arm-msm, netdev, devicetree, linux-kernel, phone-devel,
Krzysztof Kozlowski
On Wed, Sep 09, 2026 at 03:12:51AM +0000, Esteban Urrutia wrote:
> On 9/9/26 12:10 AM, Esteban Urrutia wrote:
> > This series has been tested on the following SoCs:
> > - SM7475
> > - SM8450
> > - SM8475
> > In these the modem works as expected and no crashes occur.
>
> I forgot to mention that this series depends on the following patch:
> https://lore.kernel.org/all/20260909-ipa-modem-drop-v1-1-0c9664f09c4a@proton.me/
Our CI isn't smart enough to pick up dependencies.
So you'll need to repost once that patch is present in net-next.
As is, patch 2/3 fails to build.
Also, I think the patch-set needs to be split up somehow
so the networking portions can be accepted into net-next
while the other patches go via a different subsystem.
For the net-next portion, please set the target tree in the subject
like this:
Subject: [PATCH v3 net-next] ...
For more information on the Netdev development process, please see:
https://docs.kernel.org/process/maintainer-netdev.html
--
pw-bot: changes-requested
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 3/3] arm64: dts: qcom: sm8450: Add IPA node
2026-09-09 3:11 ` [PATCH v2 3/3] arm64: dts: qcom: sm8450: Add IPA node Esteban Urrutia
@ 2026-09-09 19:06 ` Dmitry Baryshkov
2026-09-09 21:04 ` Esteban Urrutia
2026-09-10 3:11 ` sashiko-bot
1 sibling, 1 reply; 10+ messages in thread
From: Dmitry Baryshkov @ 2026-09-09 19:06 UTC (permalink / raw)
To: Esteban Urrutia
Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Alex Elder, Bjorn Andersson, Konrad Dybcio, Nazar Kompanets,
linux-arm-msm, netdev, devicetree, linux-kernel, phone-devel
On Wed, Sep 09, 2026 at 03:11:39AM +0000, Esteban Urrutia wrote:
> Add the description of the IPA block in the SM8450 SoC.
>
> Co-developed-by: Nazar Kompanets <xlie7669@gmail.com>
> Signed-off-by: Nazar Kompanets <xlie7669@gmail.com>
> Signed-off-by: Esteban Urrutia <esteuwu@proton.me>
> ---
> arch/arm64/boot/dts/qcom/sm8450.dtsi | 59 +++++++++++++++++++++++++++++++-----
> 1 file changed, 52 insertions(+), 7 deletions(-)
>
> diff --git a/arch/arm64/boot/dts/qcom/sm8450.dtsi b/arch/arm64/boot/dts/qcom/sm8450.dtsi
> index b8793482b181..95b6fd22a846 100644
> --- a/arch/arm64/boot/dts/qcom/sm8450.dtsi
> +++ b/arch/arm64/boot/dts/qcom/sm8450.dtsi
> @@ -2625,6 +2625,47 @@ adreno_smmu: iommu@3da0000 {
> dma-coherent;
> };
>
> + ipa: ipa@3f40000 {
> + compatible = "qcom,sm8450-ipa";
> +
> + reg = <0 0x3f40000 0 0x10000>,
> + <0 0x3f50000 0 0x5000>,
> + <0 0x3e04000 0 0xfc000>;
> + reg-names = "ipa-reg",
> + "ipa-shared",
> + "gsi";
> + iommus = <&apps_smmu 0x5c0 0x0>,
> + <&apps_smmu 0x5c2 0x0>;
> +
> + interrupts-extended = <&intc GIC_SPI 654 IRQ_TYPE_EDGE_RISING>,
> + <&intc GIC_SPI 432 IRQ_TYPE_LEVEL_HIGH>,
> + <&ipa_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
> + <&ipa_smp2p_in 1 IRQ_TYPE_EDGE_RISING>;
> + interrupt-names = "ipa",
> + "gsi",
> + "ipa-clock-query",
> + "ipa-setup-ready";
> +
> + clocks = <&rpmhcc RPMH_IPA_CLK>;
> + clock-names = "core";
> +
> + interconnects = <&aggre2_noc MASTER_IPA 0 &mc_virt SLAVE_EBI1 0>,
> + <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_IPA_CFG 0>;
> + interconnect-names = "memory",
> + "config";
> +
> + qcom,qmp = <&aoss_qmp>;
> +
> + qcom,smem-states = <&ipa_smp2p_out 0>,
> + <&ipa_smp2p_out 1>;
> + qcom,smem-state-names = "ipa-clock-enabled-valid",
> + "ipa-clock-enabled";
> +
> + sram = <&ipa_modem_tables>;
No qcom,gsi-loader / memory-region ?
> +
> + status = "disabled";
> + };
> +
> usb_1_hsphy: phy@88e3000 {
> compatible = "qcom,sm8450-usb-hs-phy",
> "qcom,usb-snps-hs-7nm-phy";
Also the device is disabled by default. On which platform did you enable
it? Is it supported upstream?
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 3/3] arm64: dts: qcom: sm8450: Add IPA node
2026-09-09 19:06 ` Dmitry Baryshkov
@ 2026-09-09 21:04 ` Esteban Urrutia
0 siblings, 0 replies; 10+ messages in thread
From: Esteban Urrutia @ 2026-09-09 21:04 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Alex Elder, Bjorn Andersson, Konrad Dybcio, Nazar Kompanets,
linux-arm-msm, netdev, devicetree, linux-kernel, phone-devel
On 9/9/26 4:06 PM, Dmitry Baryshkov wrote:
>> diff --git a/arch/arm64/boot/dts/qcom/sm8450.dtsi b/arch/arm64/boot/dts/qcom/sm8450.dtsi
>> index b8793482b181..95b6fd22a846 100644
>> --- a/arch/arm64/boot/dts/qcom/sm8450.dtsi
>> +++ b/arch/arm64/boot/dts/qcom/sm8450.dtsi
>> @@ -2625,6 +2625,47 @@ adreno_smmu: iommu@3da0000 {
>> dma-coherent;
>> };
>>
>> + ipa: ipa@3f40000 {
>> + compatible = "qcom,sm8450-ipa";
>> +
>> + reg = <0 0x3f40000 0 0x10000>,
>> + <0 0x3f50000 0 0x5000>,
>> + <0 0x3e04000 0 0xfc000>;
>> + reg-names = "ipa-reg",
>> + "ipa-shared",
>> + "gsi";
>> + iommus = <&apps_smmu 0x5c0 0x0>,
>> + <&apps_smmu 0x5c2 0x0>;
>> +
>> + interrupts-extended = <&intc GIC_SPI 654 IRQ_TYPE_EDGE_RISING>,
>> + <&intc GIC_SPI 432 IRQ_TYPE_LEVEL_HIGH>,
>> + <&ipa_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
>> + <&ipa_smp2p_in 1 IRQ_TYPE_EDGE_RISING>;
>> + interrupt-names = "ipa",
>> + "gsi",
>> + "ipa-clock-query",
>> + "ipa-setup-ready";
>> +
>> + clocks = <&rpmhcc RPMH_IPA_CLK>;
>> + clock-names = "core";
>> +
>> + interconnects = <&aggre2_noc MASTER_IPA 0 &mc_virt SLAVE_EBI1 0>,
>> + <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_IPA_CFG 0>;
>> + interconnect-names = "memory",
>> + "config";
>> +
>> + qcom,qmp = <&aoss_qmp>;
>> +
>> + qcom,smem-states = <&ipa_smp2p_out 0>,
>> + <&ipa_smp2p_out 1>;
>> + qcom,smem-state-names = "ipa-clock-enabled-valid",
>> + "ipa-clock-enabled";
>> +
>> + sram = <&ipa_modem_tables>;
>
> No qcom,gsi-loader / memory-region ?
Right. I forgot about this change. I'll add those in v3.
>> +
>> + status = "disabled";
>> + };
>> +
>> usb_1_hsphy: phy@88e3000 {
>> compatible = "qcom,sm8450-usb-hs-phy",
>> "qcom,usb-snps-hs-7nm-phy";
>
>
> Also the device is disabled by default. On which platform did you enable
> it? Is it supported upstream?
Yes, as it should be. It has currently been tested as working in:
- sm7475-realme-senna
- sm8450-oneplus-negroni
- sm8475-motorola-bronco
None of these devices have device trees upstreamed at the moment.
I plan on eventually upstreaming support for motorola-bronco.
Regards,
Esteban
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 2/3] net: ipa: Add IPA v5.1 configuration data
2026-09-09 3:11 ` [PATCH v2 2/3] net: ipa: Add IPA v5.1 configuration data Esteban Urrutia
@ 2026-09-10 3:11 ` sashiko-bot
0 siblings, 0 replies; 10+ messages in thread
From: sashiko-bot @ 2026-09-10 3:11 UTC (permalink / raw)
To: Esteban Urrutia; +Cc: devicetree, robh, conor+dt
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
- [High] The canaries for the IPA_MEM_STATS_FILTER_ROUTE memory region overlap with the IPA_MEM_STATS_TETHERING memory region, causing data corruption.
- [High] The IPA_ENDPOINT_AP_MODEM_RX endpoint is incorrectly assigned to the DST_UL resource group instead of DST_DL.
- [Low] Undeclared identifier 'IPA_MEM_MODEM_STATS_DROP' causes a compilation error.
--
commit 072920040c7663b1214df96432603178023826d5
Author: Esteban Urrutia <esteuwu@proton.me>
net: ipa: Add IPA v5.1 configuration data
This commit adds the configuration data required for IPA v5.1, which is
used in the Qualcomm SM8450 SoC.
> diff --git a/drivers/net/ipa/data/ipa_data-v5.1.c b/drivers/net/ipa/data/ipa_data-v5.1.c
> new file mode 100644
> index 0000000000000..7d7bc193b774c
> --- /dev/null
> +++ b/drivers/net/ipa/data/ipa_data-v5.1.c
> @@ -0,0 +1,476 @@
> +// SPDX-License-Identifier: GPL-2.0
[ ... ]
> +/* Endpoint configuration data for an SoC having IPA v5.1 */
> +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,
> + .toward_ipa = false,
> + .channel = {
> + .tre_count = 256,
> + .event_count = 256,
> + .tlv_count = 9,
> + },
> + .endpoint = {
> + .config = {
> + .resource_group = IPA_RSRC_GROUP_DST_UL,
[Severity: High]
Is the AP_MODEM_RX endpoint incorrectly assigned to the DST_UL resource group
instead of DST_DL?
Looking at the destination resource limits in ipa_resource_dst, it appears
DST_DL is allocated 5 data sectors that remain completely unused by any
endpoint. Meanwhile, DST_UL has only 6 data sectors but must handle both
LAN_RX and MODEM_RX traffic.
Will this cause resource starvation for both datapaths under load?
[ ... ]
> +/* Destination resource configuration data for an SoC having IPA v5.1 */
> +static const struct ipa_resource ipa_resource_dst[] = {
> + [IPA_RESOURCE_TYPE_DST_DATA_SECTORS] = {
> + .limits[IPA_RSRC_GROUP_DST_UL] = {
> + .min = 6, .max = 6,
> + },
> + .limits[IPA_RSRC_GROUP_DST_DL] = {
> + .min = 5, .max = 5,
> + },
[ ... ]
> +/* IPA-resident memory region data for an SoC having IPA v5.1 */
> +static const struct ipa_mem ipa_mem_local_data[] = {
[ ... ]
> + {
> + .id = IPA_MEM_STATS_TETHERING,
> + .offset = 0x2910,
> + .size = 0x03c0,
> + .canary_count = 0,
> + },
> + {
> + .id = IPA_MEM_STATS_FILTER_ROUTE,
> + .offset = 0x2cd0,
> + .size = 0x0ba0,
> + .canary_count = 2,
> + },
[Severity: High]
Is there a risk of memory layout overlap corrupting the tethering statistics?
During initialization in ipa_mem_config(), the driver writes canary values
(0xdeadbeef) before each region's offset. Since IPA_MEM_STATS_FILTER_ROUTE
starts at 0x2cd0 and has a canary_count of 2, eight bytes of canaries will be
written to 0x2cc8 through 0x2ccf.
However, the IPA_MEM_STATS_TETHERING region spans from 0x2910 to 0x2cd0
(size 0x03c0). Can we expect the last 8 bytes of the tethering stats
memory to be overwritten by the next region's canaries?
[ ... ]
> + {
> + .id = IPA_MEM_MODEM_STATS_DROP,
> + .offset = 0x4fe8,
> + .size = 0x0018,
> + .canary_count = 0,
> + },
> +};
[Severity: Low]
Could this result in a compilation error?
It appears that IPA_MEM_MODEM_STATS_DROP is not defined in enum ipa_mem_id,
which would lead to a build failure.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260909-sm8450-ipa-v2-0-2deb8b4e91a5@proton.me?part=2
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 3/3] arm64: dts: qcom: sm8450: Add IPA node
2026-09-09 3:11 ` [PATCH v2 3/3] arm64: dts: qcom: sm8450: Add IPA node Esteban Urrutia
2026-09-09 19:06 ` Dmitry Baryshkov
@ 2026-09-10 3:11 ` sashiko-bot
1 sibling, 0 replies; 10+ messages in thread
From: sashiko-bot @ 2026-09-10 3:11 UTC (permalink / raw)
To: Esteban Urrutia; +Cc: conor+dt, devicetree, robh
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] The newly added `ipa` node is missing the `qcom,gsi-loader` and `memory-region` properties, which violates the `qcom,ipa.yaml` device tree binding schema and causes the driver to fail during probe.
--
commit dced093feda54c054d95c56e0362c394d8a7c590
Author: Esteban Urrutia <esteuwu@proton.me>
arm64: dts: qcom: sm8450: Add IPA node
Add the description of the IPA block in the SM8450 SoC.
> diff --git a/arch/arm64/boot/dts/qcom/sm8450.dtsi b/arch/arm64/boot/dts/qcom/sm8450.dtsi
> index b8793482b1815..95b6fd22a8465 100644
> --- a/arch/arm64/boot/dts/qcom/sm8450.dtsi
> +++ b/arch/arm64/boot/dts/qcom/sm8450.dtsi
[ ... ]
> @@ -2625,6 +2625,47 @@ adreno_smmu: iommu@3da0000 {
> dma-coherent;
> };
>
> + ipa: ipa@3f40000 {
> + compatible = "qcom,sm8450-ipa";
[Severity: Medium]
The newly added ipa node appears to be missing the qcom,gsi-loader and
memory-region properties. This violates the qcom,ipa.yaml device tree
binding schema and causes the driver to fail during probe.
If a board file enables this ipa node, the IPA driver's ipa_firmware_load()
function will unconditionally attempt to fetch the firmware memory region via
of_reserved_mem_region_to_resource(). Without the memory-region property
(which should reference the existing &ipa_fw_mem), this call returns an error
and causes the driver probe to abort, leaving the IPA hardware completely
unusable.
Does this node need the qcom,gsi-loader and memory-region properties added to
ensure it validates correctly and probes successfully?
> +
> + reg = <0 0x3f40000 0 0x10000>,
> + <0 0x3f50000 0 0x5000>,
> + <0 0x3e04000 0 0xfc000>;
> + reg-names = "ipa-reg",
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260909-sm8450-ipa-v2-0-2deb8b4e91a5@proton.me?part=3
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2026-09-10 3:11 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-09 3:10 [PATCH v2 0/3] SM8450 IPA support Esteban Urrutia
2026-09-09 3:11 ` [PATCH v2 1/3] dt-bindings: net: qcom,ipa: Add SM8450 compatible Esteban Urrutia
2026-09-09 3:11 ` [PATCH v2 2/3] net: ipa: Add IPA v5.1 configuration data Esteban Urrutia
2026-09-10 3:11 ` sashiko-bot
2026-09-09 3:11 ` [PATCH v2 3/3] arm64: dts: qcom: sm8450: Add IPA node Esteban Urrutia
2026-09-09 19:06 ` Dmitry Baryshkov
2026-09-09 21:04 ` Esteban Urrutia
2026-09-10 3:11 ` sashiko-bot
2026-09-09 3:12 ` [PATCH v2 0/3] SM8450 IPA support Esteban Urrutia
2026-09-09 18:12 ` Simon Horman
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.