From nobody Tue Jun 16 06:31:02 2026 Received: from mail-4322.protonmail.ch (mail-4322.protonmail.ch [185.70.43.22]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 786663876C4; Thu, 16 Apr 2026 22:40:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.70.43.22 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776379253; cv=none; b=F0dNzm9+mzc5mN23lNz6lU5/+HIOa7WH1Erq6IxtccbxrkI0ibcuYX8DAEerfB+9KEPavXKa5PyvqUTQXAFbaS6Yd59iDn3vHqgoMv+GGb2NkWkuS/CAC64IQLeDPl2h96UCt+W28DL7Cyppys/dk+nqFqfWwTG6eZgtn1q+D3A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776379253; c=relaxed/simple; bh=sC+zcrByO+PGlqBAQ8rYqYYaIL1rr++mYDDrX4PXZgs=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=H+onEJEA7u2vI35gfkOT4bPPwiZcs/ADvGajc7fvr57HNOLm5bBKr2ly0JCfzJgW65jyxNrIFRXtWXTxsoWs8CGNHZ0Y6PTX70yoAvdCeIQr1ZTDUXVaSSZUYKdkvgZvLKaVeuDKWdZC9RbKmYzFlK30GnyJS3jYCPfEgt4I0eE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=pm.me; spf=pass smtp.mailfrom=pm.me; dkim=pass (2048-bit key) header.d=pm.me header.i=@pm.me header.b=RCK1HdBg; arc=none smtp.client-ip=185.70.43.22 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=pm.me Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pm.me Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pm.me header.i=@pm.me header.b="RCK1HdBg" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail3; t=1776379250; x=1776638450; bh=+hcirqWTitm0iG+vWSxCcCrg9AcXPeBecN4cQG5hBU0=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=RCK1HdBgleK7OAkuLRCOP6pIHQVCGyf+HYKXEmAOCrBdVLq4MoJZY9KIrwsEByXjm xWQsUeQWBG09dTeGHYfYDEqIHPiKZcNR/2r+hShkyihRPcWFsvtFQUaor4U8vIqfoe 5beR5ELzUD3LyExV48e/RTHsiGr3lwxg0qyShXHHXBJxXRR9rHV+JRgtf9Zj8BXdIg Ff0heUIb0kGTzfBjpYzRCxHbcNAPuC2hlso11kKyTku8GKgo6Jik4zwvNNGz6fdszz LVTH3dBD1/s48ofVYpAi2dAYQCpzk57vGTjqIVSqYrbxZn1AaDDOqlJvnjy2sMmABZ 10VeXGHNxRJ0g== Date: Thu, 16 Apr 2026 22:40:48 +0000 To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Alex Elder From: Alexander Koskovich Cc: linux-arm-msm@vger.kernel.org, netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Alexander Koskovich Subject: [PATCH RFC 1/4] dt-bindings: net: qcom,ipa: document Eliza compatible Message-ID: <20260416-eliza-ipa-v1-1-f4109a8e43c4@pm.me> In-Reply-To: <20260416-eliza-ipa-v1-0-f4109a8e43c4@pm.me> References: <20260416-eliza-ipa-v1-0-f4109a8e43c4@pm.me> Feedback-ID: 37836894:user:proton X-Pm-Message-ID: b1235ab0014dab494a1ff26196651d0f34457f5b Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 --- Documentation/devicetree/bindings/net/qcom,ipa.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/Documentation/devicetree/bindings/net/qcom,ipa.yaml b/Document= ation/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 =20 --=20 2.53.0 From nobody Tue Jun 16 06:31:02 2026 Received: from mail-244116.protonmail.ch (mail-244116.protonmail.ch [109.224.244.116]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6509E38237F for ; Thu, 16 Apr 2026 22:41:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=109.224.244.116 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776379268; cv=none; b=Wp1gGRWA5r/Z6KKINeu5nzQwa6f0fYpQ6X4gDHgZttuw1ee7cKPDystbnAXTY0nmv2iQUopN4QvUIa8Ad57WnKyHfQs/t1ZwgLHmmZCQRTLotKeJsV9Mfl9n3ynxA7vzpd/kEyDwlklw0s8dEJ0YI//VEZIreOftK8GWg9IQGOI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776379268; c=relaxed/simple; bh=nHmEjiaEYFAIVEc4iIy6Jn/r7ND952ytTcb3N2rDNvE=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=JEtqGe5aNpJ3rhxVVAuSdmBCVV7b2RMzWzrxjv+Eex9exRXuoEBKfTsdgy/PWtOPtKDCQuh2oTlCKkNRbAkRJwKBJfWnvjteXwxDowjcwwR6jSihH8bwDCAA6EfA/LF7bo4VippRr+Yb+AeTCVlFGBFe/X8TpWYxW48FpidW/GM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=pm.me; spf=pass smtp.mailfrom=pm.me; dkim=pass (2048-bit key) header.d=pm.me header.i=@pm.me header.b=MpN50Jyr; arc=none smtp.client-ip=109.224.244.116 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=pm.me Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pm.me Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pm.me header.i=@pm.me header.b="MpN50Jyr" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail3; t=1776379259; x=1776638459; bh=o0AMJv9mAwYEESX7/0Q0ql9BjisVYh0Mr/rNKfBIFWk=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=MpN50Jyr9Mn2xANj8zghyNjFShSrzKuw7nLTdRSwt6DYcVfhApn/IqnHMSC1rLDmC cNi1LN2PW/TkQHp9j3rbIrzX593qmD0uttxNtSLN1ZJvsDwLmnNTN0hCnQDL97nb/u iLSPjTeq9Nd9/TDIgwhXgDeFUjmn6J6tn7rwKL96HYTRlos+n8Vz5ZTJfRlJxoxOCo 1TKoeVNoTrEB9n+HjbNNwm2zVVhwr9xYFPK68pPT0NSYoZ9AacYacH0iBbws3fd/QW V057CsTfGetkg2hFB/YRBcVOzvkMg8bw4LzFnoZhDlTNiaZNVeYcEullpcz3aPHejS de5HKOw8V2nbQ== Date: Thu, 16 Apr 2026 22:40:55 +0000 To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Alex Elder From: Alexander Koskovich Cc: linux-arm-msm@vger.kernel.org, netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Alexander Koskovich Subject: [PATCH RFC 2/4] net: ipa: fix IPA v5.5 configuration data Message-ID: <20260416-eliza-ipa-v1-2-f4109a8e43c4@pm.me> In-Reply-To: <20260416-eliza-ipa-v1-0-f4109a8e43c4@pm.me> References: <20260416-eliza-ipa-v1-0-f4109a8e43c4@pm.me> Feedback-ID: 37836894:user:proton X-Pm-Message-ID: 2b8256ccebaa33980c3767e22e9f09f664f9440a Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" struct ipa_qmb_outstanding { u16 ot_reads; u16 ot_writes; u16 ot_read_beats; }; [IPA_5_5][IPA_QMB_INSTANCE_DDR] =3D {16, 12, 0}, [IPA_5_5][IPA_QMB_INSTANCE_PCIE] =3D {16, 8, 0}, IPA_ENDPOINT_AP_LAN_RX: [IPA_5_5][IPA_CLIENT_APPS_LAN_CONS] =3D { 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] =3D { 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] =3D { 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 --- 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/ip= a_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[] =3D { [IPA_QSB_MASTER_DDR] =3D { - .max_writes =3D 0, /* Unlimited */ - .max_reads =3D 12, + .max_writes =3D 12, + .max_reads =3D 0, /* Unlimited */ .max_reads_beats =3D 0, }, [IPA_QSB_MASTER_PCIE] =3D { - .max_writes =3D 0, /* Unlimited */ - .max_reads =3D 8, + .max_writes =3D 8, + .max_reads =3D 0, /* Unlimited */ .max_reads_beats =3D 0, }, }; @@ -86,8 +86,8 @@ static const struct ipa_gsi_endpoint_data ipa_gsi_endpoin= t_data[] =3D { }, [IPA_ENDPOINT_AP_LAN_RX] =3D { .ee_id =3D GSI_EE_AP, - .channel_id =3D 13, - .endpoint_id =3D 16, + .channel_id =3D 14, + .endpoint_id =3D 17, .toward_ipa =3D false, .channel =3D { .tre_count =3D 256, @@ -135,7 +135,7 @@ static const struct ipa_gsi_endpoint_data ipa_gsi_endpo= int_data[] =3D { [IPA_ENDPOINT_AP_MODEM_RX] =3D { .ee_id =3D GSI_EE_AP, .channel_id =3D 1, - .endpoint_id =3D 23, + .endpoint_id =3D 24, .toward_ipa =3D false, .channel =3D { .tre_count =3D 256, @@ -168,7 +168,7 @@ static const struct ipa_gsi_endpoint_data ipa_gsi_endpo= int_data[] =3D { [IPA_ENDPOINT_MODEM_AP_RX] =3D { .ee_id =3D GSI_EE_MODEM, .channel_id =3D 7, - .endpoint_id =3D 21, + .endpoint_id =3D 22, .toward_ipa =3D false, }, [IPA_ENDPOINT_MODEM_DL_NLO_TX] =3D { --=20 2.53.0 From nobody Tue Jun 16 06:31:02 2026 Received: from mail-24418.protonmail.ch (mail-24418.protonmail.ch [109.224.244.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5206D378D96; Thu, 16 Apr 2026 22:41:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=109.224.244.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776379276; cv=none; b=XMy8X+bhQm1fZMtNcECM9Tb0U9pmCyyPv2LEjfVedMEItITfCx8XaaBvpPbeIExcqd5o6mKGz3vlFYhizVzCeSoWeOF71RrdBlWeg6/zSIDyEp3FlFxDcpOznY9Cx8RWMKYXm4FS5zdCb7nLpSFAIFV39IEU9rQ9ESDe4vDxPMA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776379276; c=relaxed/simple; bh=260oGQfUQWy6ynSqaYtEHX4o2NfRoz579B4CSFDiSCQ=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=HwSwZjc3eErBzJNnnEgc9/mus+l+HU3I8m0lobLmWj9v0U7R1tzZb2OGdxxxkWFcxIaluUaOvzaUXSfDoNukoliWNGXTjP442/gJ9CBDFD47eYhj7ViIfc8EdNA81YGl+cN+sFL5rw82wUNs7DJtz9If0V4GmeVL6JPS7fSVLok= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=pm.me; spf=pass smtp.mailfrom=pm.me; dkim=pass (2048-bit key) header.d=pm.me header.i=@pm.me header.b=i4v37xbS; arc=none smtp.client-ip=109.224.244.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=pm.me Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pm.me Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pm.me header.i=@pm.me header.b="i4v37xbS" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail3; t=1776379272; x=1776638472; bh=YMD9aiL/OZgKx/qIxHyMNMf04F5H2aprq44qLV9B2WM=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=i4v37xbShw6TU+bUDpQHNQoqFi7NayOug+nfWkQXORsoczlYoGGxHuLWtGBXLRFvo qek+u4+C/Wi7YxkUbn3vNaxwYY6nnUGDabw9tHS520k2Ub/fdjnPZvMXAnmPt12Elh DpaaiGHHe01QsHViPA3azAS+xm2KpjidXHe7184BQ6JstwdZ/laqwWR4oXgg0z/YO4 cIFyFl/y5KklXsQ4FZSKafvZ5iIYgBdovL7MfY84+IaIaGyt27Rxe7X35Nx7Vo11GT 7OSzvJ8ZSk+VMG3NMmfCBG+n92MM01DdFEG0ZuiYzrnfGWey1FoyBdFAdy52GQjNZJ 0YDwu8/UbuYxA== Date: Thu, 16 Apr 2026 22:41:03 +0000 To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Alex Elder From: Alexander Koskovich Cc: linux-arm-msm@vger.kernel.org, netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Alexander Koskovich Subject: [PATCH RFC 3/4] net: ipa: add new QMI request for HW filter stats info Message-ID: <20260416-eliza-ipa-v1-3-f4109a8e43c4@pm.me> In-Reply-To: <20260416-eliza-ipa-v1-0-f4109a8e43c4@pm.me> References: <20260416-eliza-ipa-v1-0-f4109a8e43c4@pm.me> Feedback-ID: 37836894:user:proton X-Pm-Message-ID: 9f430e3d3750ae660e8b53644727ed970a1aac89 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 --- 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/ip= a_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 =3D { .imem_addr =3D 0x14688000, .imem_size =3D 0x00003000, .smem_size =3D 0x00009000, + .fnr_idx_cnt =3D 52, }; =20 /* 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/ip= a_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 =3D { .imem_addr =3D 0x146a8000, .imem_size =3D 0x00002000, .smem_size =3D 0x00009000, + .fnr_idx_cnt =3D 52, }; =20 /* 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/ip= a_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 =3D { .imem_addr =3D 0x146bd000, .imem_size =3D 0x00002000, .smem_size =3D 0x00009000, + .fnr_idx_cnt =3D 52, }; =20 /* 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/ip= a_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 =3D { .imem_addr =3D 0x14688000, .imem_size =3D 0x00003000, .smem_size =3D 0x00009000, + .fnr_idx_cnt =3D 52, }; =20 /* 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/ip= a_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 =3D { .imem_addr =3D 0x14688000, .imem_size =3D 0x00002000, .smem_size =3D 0x0000b000, + .fnr_idx_cnt =3D 52, }; =20 /* 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; }; =20 /** 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 */ =20 u32 smem_size; + + u8 fnr_idx_cnt; }; =20 /** 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_devic= e *pdev, ipa->mem_count =3D mem_data->local_count; ipa->mem =3D mem_data->local; =20 + ipa->fnr_idx_cnt =3D 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 =20 +#define IPA_MODEM_FNR_IDX_START 128 + #define QMI_INIT_DRIVER_TIMEOUT 60000 /* A minute in milliseconds */ =20 /* Send an INIT_COMPLETE indication message to the modem */ @@ -394,6 +396,22 @@ init_modem_driver_req(struct ipa_qmi *ipa_qmi) } } =20 + if (ipa->version >=3D IPA_VERSION_4_5 && ipa->fnr_idx_cnt) { + mem =3D ipa_mem_find(ipa, IPA_MEM_STATS_FILTER_ROUTE); + if (mem && mem->size) { + req.hw_stats_filter_info_valid =3D 1; + req.hw_stats_filter_info.start_addr =3D + ipa->mem_offset + mem->offset; + req.hw_stats_filter_info.size =3D + ipa->fnr_idx_cnt * 16; + req.hw_stats_filter_info.start_index =3D + IPA_MODEM_FNR_IDX_START; + req.hw_stats_filter_info.end_index =3D + IPA_MODEM_FNR_IDX_START + + ipa->fnr_idx_cnt - 1; + } + } + return &req; } =20 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[] =3D { }, }; =20 +/* QMI message structure definition for struct ipa_stats_filter */ +const struct qmi_elem_info ipa_stats_filter_ei[] =3D { + { + .data_type =3D QMI_UNSIGNED_4_BYTE, + .elem_len =3D 1, + .elem_size =3D + sizeof_field(struct ipa_stats_filter, start_addr), + .offset =3D offsetof(struct ipa_stats_filter, + start_addr), + }, + { + .data_type =3D QMI_UNSIGNED_4_BYTE, + .elem_len =3D 1, + .elem_size =3D + sizeof_field(struct ipa_stats_filter, size), + .offset =3D offsetof(struct ipa_stats_filter, size), + }, + { + .data_type =3D QMI_UNSIGNED_1_BYTE, + .elem_len =3D 1, + .elem_size =3D + sizeof_field(struct ipa_stats_filter, start_index), + .offset =3D offsetof(struct ipa_stats_filter, + start_index), + }, + { + .data_type =3D QMI_UNSIGNED_1_BYTE, + .elem_len =3D 1, + .elem_size =3D + sizeof_field(struct ipa_stats_filter, end_index), + .offset =3D offsetof(struct ipa_stats_filter, end_index), + }, + { + .data_type =3D QMI_EOTI, + }, +}; + /* QMI message structure definition for struct ipa_init_modem_driver_req */ const struct qmi_elem_info ipa_init_modem_driver_req_ei[] =3D { { @@ -640,6 +677,27 @@ const struct qmi_elem_info ipa_init_modem_driver_req_e= i[] =3D { .offset =3D offsetof(struct ipa_init_modem_driver_req, hw_stats_drop_size), }, + { + .data_type =3D QMI_OPT_FLAG, + .elem_len =3D 1, + .elem_size =3D + sizeof_field(struct ipa_init_modem_driver_req, + hw_stats_filter_info_valid), + .tlv_type =3D 0x23, + .offset =3D offsetof(struct ipa_init_modem_driver_req, + hw_stats_filter_info_valid), + }, + { + .data_type =3D QMI_STRUCT, + .elem_len =3D 1, + .elem_size =3D + sizeof_field(struct ipa_init_modem_driver_req, + hw_stats_filter_info), + .tlv_type =3D 0x23, + .offset =3D offsetof(struct ipa_init_modem_driver_req, + hw_stats_filter_info), + .ei_array =3D ipa_stats_filter_ei, + }, { .data_type =3D 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; }; =20 +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; }; =20 /* 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[]; =20 --=20 2.53.0 From nobody Tue Jun 16 06:31:02 2026 Received: from mail-43102.protonmail.ch (mail-43102.protonmail.ch [185.70.43.102]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3F64D378D96; Thu, 16 Apr 2026 22:41:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.70.43.102 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776379281; cv=none; b=BavhuuKOg5x8kQZP+EWvTuiZuXE6PGOgyVbjdwSxk6/R4SjhUFChn8KQq2y4NKzIrEG/FD/46ubebnUq5muahMSH1xNWqE5dZRb/3/dOy0O+EGRiJkMSLtjATXyO+f8JSFcRJr7trLWFA4UKzF2zrCmJWJvtdlqR6KLsoj5Bsqw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776379281; c=relaxed/simple; bh=aUjWVaG/AsZGo9OOyhDKeH9Xa2AzjQV7a3xd7Aa7Wpo=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=i8tMMD+lfyCuITmIrHdg4g5JAhB5+M6ZsIIGllf/v0Kr0h4OTLLqSRDYIyczQMxsyFMVrxyEfEJLahrczmVcn0psaPhIUycSFJdc6+E0ftmHJPYqNxY5SX8qA36qDipTA1HhnSGeh69kEicBXOHvNMEgaGWk4EjlmCbIHVtf9bY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=pm.me; spf=pass smtp.mailfrom=pm.me; dkim=pass (2048-bit key) header.d=pm.me header.i=@pm.me header.b=boddJPt/; arc=none smtp.client-ip=185.70.43.102 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=pm.me Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pm.me Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pm.me header.i=@pm.me header.b="boddJPt/" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pm.me; s=protonmail3; t=1776379278; x=1776638478; bh=6U3qpcWjGRGrSSH0rUcmatHH/KtvKsv8QjT4ZCqboJU=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=boddJPt/VoLwQLuGpu7sZVwn6K2TbAhKxOs9QYvG37DSmCX03K+I4F4fiKxJ92sDa UlfEt2/jHjpeZz14Xo51RhmKbBkGL2H24ryzExX7Ko60ZjYWDa6ow0xoh4/BSC1MRI pSmlZY3tT8nOqS22ri8xpIseWcx4vF8GdHPzrWTOg0OXKldCL4axgVzFDgWTxa5bsD +6qM5rKXhk1xoyTEn30plpXYpgIkcdqhRP5ZZcsmaLuTPjyMmhgkwCq6TgaRc6rz3/ XCHeolzMInae2PZS/QQgCv4dcQBqpm3WQ1JOzkfF8c1B3oRgFEhnTCri8epKL46EEs elBsBhOVB+WAA== Date: Thu, 16 Apr 2026 22:41:13 +0000 To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Alex Elder From: Alexander Koskovich Cc: linux-arm-msm@vger.kernel.org, netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Alexander Koskovich Subject: [PATCH RFC 4/4] net: ipa: add Eliza configuration data Message-ID: <20260416-eliza-ipa-v1-4-f4109a8e43c4@pm.me> In-Reply-To: <20260416-eliza-ipa-v1-0-f4109a8e43c4@pm.me> References: <20260416-eliza-ipa-v1-0-f4109a8e43c4@pm.me> Feedback-ID: 37836894:user:proton X-Pm-Message-ID: fd2c3096340ea8f5b8bd3fd6d1288823295f0b50 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 --- 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/ip= a_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_da= ta =3D { .resource_dst =3D ipa_resource_dst, }; =20 +/* IPA-resident memory region data for the Eliza SoC */ +static const struct ipa_mem ipa_mem_local_data_eliza[] =3D { + { + .id =3D IPA_MEM_UC_EVENT_RING, + .offset =3D 0x0000, + .size =3D 0x1000, + .canary_count =3D 0, + }, + { + .id =3D IPA_MEM_UC_SHARED, + .offset =3D 0x1000, + .size =3D 0x0080, + .canary_count =3D 0, + }, + { + .id =3D IPA_MEM_UC_INFO, + .offset =3D 0x1080, + .size =3D 0x0200, + .canary_count =3D 0, + }, + { + .id =3D IPA_MEM_V4_FILTER_HASHED, + .offset =3D 0x1288, + .size =3D 0x0078, + .canary_count =3D 2, + }, + { + .id =3D IPA_MEM_V4_FILTER, + .offset =3D 0x1308, + .size =3D 0x0078, + .canary_count =3D 2, + }, + { + .id =3D IPA_MEM_V6_FILTER_HASHED, + .offset =3D 0x1388, + .size =3D 0x0078, + .canary_count =3D 2, + }, + { + .id =3D IPA_MEM_V6_FILTER, + .offset =3D 0x1408, + .size =3D 0x0078, + .canary_count =3D 2, + }, + { + .id =3D IPA_MEM_V4_ROUTE_HASHED, + .offset =3D 0x1488, + .size =3D 0x0098, + .canary_count =3D 2, + }, + { + .id =3D IPA_MEM_V4_ROUTE, + .offset =3D 0x1528, + .size =3D 0x0098, + .canary_count =3D 2, + }, + { + .id =3D IPA_MEM_V6_ROUTE_HASHED, + .offset =3D 0x15c8, + .size =3D 0x0098, + .canary_count =3D 2, + }, + { + .id =3D IPA_MEM_V6_ROUTE, + .offset =3D 0x1668, + .size =3D 0x0098, + .canary_count =3D 2, + }, + { + .id =3D IPA_MEM_MODEM_HEADER, + .offset =3D 0x1708, + .size =3D 0x0240, + .canary_count =3D 2, + }, + { + .id =3D IPA_MEM_AP_HEADER, + .offset =3D 0x1948, + .size =3D 0x01e0, + .canary_count =3D 0, + }, + { + .id =3D IPA_MEM_MODEM_PROC_CTX, + .offset =3D 0x1b40, + .size =3D 0x0b20, + .canary_count =3D 2, + }, + { + .id =3D IPA_MEM_AP_PROC_CTX, + .offset =3D 0x2660, + .size =3D 0x0200, + .canary_count =3D 0, + }, + { + .id =3D IPA_MEM_STATS_QUOTA_MODEM, + .offset =3D 0x2868, + .size =3D 0x0060, + .canary_count =3D 2, + }, + { + .id =3D IPA_MEM_STATS_QUOTA_AP, + .offset =3D 0x28c8, + .size =3D 0x0048, + .canary_count =3D 0, + }, + { + .id =3D IPA_MEM_STATS_TETHERING, + .offset =3D 0x2910, + .size =3D 0x03c0, + .canary_count =3D 0, + }, + { + .id =3D IPA_MEM_STATS_FILTER_ROUTE, + .offset =3D 0x2cd0, + .size =3D 0x0c40, + .canary_count =3D 2, + }, + { + .id =3D IPA_MEM_STATS_DROP, + .offset =3D 0x3910, + .size =3D 0x0020, + .canary_count =3D 0, + }, + { + .id =3D IPA_MEM_MODEM, + .offset =3D 0x3938, + .size =3D 0x0d48, + .canary_count =3D 2, + }, + { + .id =3D IPA_MEM_NAT_TABLE, + .offset =3D 0x4680, + .size =3D 0x0900, + .canary_count =3D 0, + }, + { + .id =3D IPA_MEM_PDN_CONFIG, + .offset =3D 0x4f88, + .size =3D 0x0050, + .canary_count =3D 2, + }, +}; + /* IPA-resident memory region data for an SoC having IPA v5.5 */ static const struct ipa_mem ipa_mem_local_data[] =3D { { @@ -442,6 +584,14 @@ static const struct ipa_mem ipa_mem_local_data[] =3D { }, }; =20 +/* Memory configuration data for the Eliza SoC */ +static const struct ipa_mem_data ipa_mem_data_eliza =3D { + .local_count =3D ARRAY_SIZE(ipa_mem_local_data_eliza), + .local =3D ipa_mem_local_data_eliza, + .smem_size =3D 0x0000b000, + .fnr_idx_cnt =3D 68, +}; + /* Memory configuration data for an SoC having IPA v5.5 */ static const struct ipa_mem_data ipa_mem_data =3D { .local_count =3D ARRAY_SIZE(ipa_mem_local_data), @@ -486,3 +636,16 @@ const struct ipa_data ipa_data_v5_5 =3D { .mem_data =3D &ipa_mem_data, .power_data =3D &ipa_power_data, }; + +/* Configuration data for the Eliza SoC (IPA v5.5). */ +const struct ipa_data ipa_data_v5_5_eliza =3D { + .version =3D IPA_VERSION_5_5, + .qsb_count =3D ARRAY_SIZE(ipa_qsb_data), + .qsb_data =3D ipa_qsb_data, + .modem_route_count =3D 11, + .endpoint_count =3D ARRAY_SIZE(ipa_gsi_endpoint_data), + .endpoint_data =3D ipa_gsi_endpoint_data, + .resource_data =3D &ipa_resource_data, + .mem_data =3D &ipa_mem_data_eliza, + .power_data =3D &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; =20 #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) } =20 static const struct of_device_id ipa_match[] =3D { + { + .compatible =3D "qcom,eliza-ipa", + .data =3D &ipa_data_v5_5_eliza, + }, { .compatible =3D "qcom,msm8998-ipa", .data =3D &ipa_data_v3_1, --=20 2.53.0