From nobody Tue Dec 2 00:45:23 2025 Received: from sender3-pp-f112.zoho.com (sender3-pp-f112.zoho.com [136.143.184.112]) (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 82E582F9DA7; Mon, 24 Nov 2025 11:07:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.184.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982445; cv=pass; b=hOib8Lkog7dCQGbCt9/lCQLscOFZoVG73YMilHuUGzH+QLNn6+JoYQbKJapv+RwrvCWz6K7Di20tUDcFGjOdmD0h4RfTd7pbXoBWwDsg/d86pKJ5U7TJ6gG5ZXXY67+dltGuWZtraR0X0i9vjpvR0ZOgSjB8n5qYgWfWPIHfmy8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982445; c=relaxed/simple; bh=9sBWUAD9Rp7utymPqRbVk0RbV6Y/g/789ihlXW4tctY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lGzMHofeKeEHxOVV92RvOxle0RLMf3uMC3WnUFsKKg2xLQMYJjimWZHcIP43IkwE+/+kHAsOGMNDAvF9AlgDFEyNlhzpX4M1gocf+AH5+fUtUe7qkDjKSeBrCxDXVsVScGFax8i8Ar6bz9EgrelHhJNrs/xtjshpwf7B5wknlKI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=GZfYb0dS; arc=pass smtp.client-ip=136.143.184.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="GZfYb0dS" ARC-Seal: i=1; a=rsa-sha256; t=1763982423; cv=none; d=zohomail.com; s=zohoarc; b=i7rP5ZjLeSO6nkbgxYOUQhkXldO7qcIj8jfu4BaZygcBW2lyHvVzEGO1AAeXRVLnSzNBxjwYNDPSxi/r1Z3IadFR4HTLYMNsYMAqjXO98e5LRlrC7SCcLah/u22ret6lcPIPBLCi1+pm4PweQt8Lt2DdzHQ97GusNKpKp1LbDlg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763982423; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=XRJ33nglbvtBwNNO/vd3aaiLejhNH8NgBEXyiE+AIfw=; b=P2JZpc9IwDkX2SfKrG5C25051/c7wzpTRHzAYGPSaSThNN1CWUM5fssxaD5pRvVVeC0sM9vsJRL91DuMDRDnfaY6x2Pcn8yE6fW/ZQag6Rif3mas9QrUBPrQ/XlNG0z91sM6Kp2BliySKv6DAD2K+pZGDQiSnbq+auOB5vnPFXI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1763982422; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=XRJ33nglbvtBwNNO/vd3aaiLejhNH8NgBEXyiE+AIfw=; b=GZfYb0dSk6gySdxdr2gGHFe+onQijhcbzKet3XpTZafQKzK3LN264xLd5NOWCcI/ 9YmcWw3RMOhhnllS3DKizVJ1FueRqwiuYAbD2yuiebLgScNflG3986pLzSkMSbnTZp6 B0iCw3Nlpp4NhlTcaDa6cTKJBGk46qnT3pc3JLTU= Received: by mx.zohomail.com with SMTPS id 1763982420631856.0946779508707; Mon, 24 Nov 2025 03:07:00 -0800 (PST) From: Nicolas Frattaroli Date: Mon, 24 Nov 2025 12:06:50 +0100 Subject: [PATCH v2 01/13] dt-bindings: soc: mediatek: dvfsrc: Add support for MT8196 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251124-mt8196-dvfsrc-v2-1-d9c1334db9f3@collabora.com> References: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> In-Reply-To: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno , Henry Chen , Georgi Djakov Cc: kernel@collabora.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-pm@vger.kernel.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 From: AngeloGioacchino Del Regno Add a compatible for the MediaTek MT8196 Chromebook SoC's DVFSRC hardware, introducing capability to communicate with it. Signed-off-by: AngeloGioacchino Del Regno Signed-off-by: Nicolas Frattaroli --- .../devicetree/bindings/soc/mediatek/mediatek,mt8183-dvfsrc.yaml |= 1 + 1 file changed, 1 insertion(+) diff --git a/Documentation/devicetree/bindings/soc/mediatek/mediatek,mt8183= -dvfsrc.yaml b/Documentation/devicetree/bindings/soc/mediatek/mediatek,mt81= 83-dvfsrc.yaml index 4c96d4917967..5673d242afcb 100644 --- a/Documentation/devicetree/bindings/soc/mediatek/mediatek,mt8183-dvfsrc= .yaml +++ b/Documentation/devicetree/bindings/soc/mediatek/mediatek,mt8183-dvfsrc= .yaml @@ -26,6 +26,7 @@ properties: - mediatek,mt6893-dvfsrc - mediatek,mt8183-dvfsrc - mediatek,mt8195-dvfsrc + - mediatek,mt8196-dvfsrc - items: - const: mediatek,mt8192-dvfsrc - const: mediatek,mt8195-dvfsrc --=20 2.52.0 From nobody Tue Dec 2 00:45:23 2025 Received: from sender3-pp-f112.zoho.com (sender3-pp-f112.zoho.com [136.143.184.112]) (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 82D872566E9; Mon, 24 Nov 2025 11:07:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.184.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982444; cv=pass; b=PSLoXSPASHt4n4EJjMWcjZ30fU0fIHGCCHkhHd7Y2frnHsXOIOXceNdmEpuAQuzPtgoLEuTQSxl4qFiaknF11uX6a0REzbHu6tE8QsFY3UglWB7mUK8XuIcNfeMyKum2AfkWK1tdTlz6RlQ2KN2R19BEaoJXBQk/Oky1qb/J2QM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982444; c=relaxed/simple; bh=ce9o5irmwpfyD6PvU9+tPvHBWgCNiUXyQdvKFSFXd9U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CL3Gyl/6e6nDtBvma1snWM8xLtpgJcbJpnBbhS0Ao3AzgLT2fbCzjohKlLDxO3mEWS5FapyKJ+mrhpTjzIwqzcLiNRuxD9KifJtH5gb93RONfYT1aFTdszgjmVr2KMXIOLK9QBL3Ujz9u9S3vMA6/1MRAhbHqd11305iD5wCr98= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=CHSDHiOX; arc=pass smtp.client-ip=136.143.184.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="CHSDHiOX" ARC-Seal: i=1; a=rsa-sha256; t=1763982425; cv=none; d=zohomail.com; s=zohoarc; b=GIDjin3ux68yiT6EZRYQQur4rqwNVp6nrqgpkzK+fkBKr+OUxBHyE8vwCxoNL5M4VPgn+xe9PJYpWhb0rZryyIA2SE/3K3d/xbZn82OlQzk/s6EfSbDgqnKSGGA4NvG0S3yLf1WW3Yt0NpNDvuINH46Z8roO0/vHb5iDA1sskbY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763982425; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=sDH7HsjdBxRxUiiInPpbiefmMzWljb8Ji5v3kIQhv8U=; b=Lp7Ky71BPDjvNXkeaDUSsxH1y5OfKIFjAUdxYuiRtRcovvfHJuQh4orsexa1Qul/Jp96lljD44uQz8PWoLS2l2Z+f90X2tVpPhKWx2bVLik3K7Zf+h/HAYUDCYkXIFxkqaey2zrjrS5+vGk5c2T8v/UTGF+71HOq/RaH1nhHhiI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1763982424; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=sDH7HsjdBxRxUiiInPpbiefmMzWljb8Ji5v3kIQhv8U=; b=CHSDHiOXDNaqdYcV5n1kT87LkxJ54yOXkEc1brL6ngioDl7xEUX2A+jGr0FWeLBi FvLhxBg+SqTTsvP9FA0YMrUwJah84b00ZtvV5KiDAHtsuyEtonPEq3GPpiqOrOKNrYh Ar937mq5VNlhh1mqE7HRuzjzEpmfsqIrpDuzvf8U= Received: by mx.zohomail.com with SMTPS id 1763982424035518.2881808242608; Mon, 24 Nov 2025 03:07:04 -0800 (PST) From: Nicolas Frattaroli Date: Mon, 24 Nov 2025 12:06:51 +0100 Subject: [PATCH v2 02/13] dt-bindings: soc: mediatek: dvfsrc: Document clock Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251124-mt8196-dvfsrc-v2-2-d9c1334db9f3@collabora.com> References: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> In-Reply-To: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno , Henry Chen , Georgi Djakov Cc: kernel@collabora.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-pm@vger.kernel.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 The DVFSRC hardware has a clock on all platforms. Instead or proliferating the culture of omitting clock descriptions in the clock controller drivers or marking them critical instead of declaring these types of relationships, add this one to the binding. Any device that wishes to use this binding should figure out their incomplete or incorrect clock situation first before piling more features on top. Acked-by: Rob Herring (Arm) Reviewed-by: AngeloGioacchino Del Regno Signed-off-by: Nicolas Frattaroli --- .../devicetree/bindings/soc/mediatek/mediatek,mt8183-dvfsrc.yaml | 6 ++= ++++ 1 file changed, 6 insertions(+) diff --git a/Documentation/devicetree/bindings/soc/mediatek/mediatek,mt8183= -dvfsrc.yaml b/Documentation/devicetree/bindings/soc/mediatek/mediatek,mt81= 83-dvfsrc.yaml index 5673d242afcb..d5c42f992a21 100644 --- a/Documentation/devicetree/bindings/soc/mediatek/mediatek,mt8183-dvfsrc= .yaml +++ b/Documentation/devicetree/bindings/soc/mediatek/mediatek,mt8183-dvfsrc= .yaml @@ -35,6 +35,10 @@ properties: maxItems: 1 description: DVFSRC common register address and length. =20 + clocks: + items: + - description: Clock that drives the DVFSRC MCU + regulators: type: object $ref: /schemas/regulator/mediatek,mt6873-dvfsrc-regulator.yaml# @@ -51,6 +55,7 @@ additionalProperties: false =20 examples: - | + #include soc { #address-cells =3D <2>; #size-cells =3D <2>; @@ -58,6 +63,7 @@ examples: system-controller@10012000 { compatible =3D "mediatek,mt8195-dvfsrc"; reg =3D <0 0x10012000 0 0x1000>; + clocks =3D <&topckgen CLK_TOP_DVFSRC>; =20 regulators { compatible =3D "mediatek,mt8195-dvfsrc-regulator"; --=20 2.52.0 From nobody Tue Dec 2 00:45:23 2025 Received: from sender3-pp-f112.zoho.com (sender3-pp-f112.zoho.com [136.143.184.112]) (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 DDCF22FB999; Mon, 24 Nov 2025 11:07:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.184.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982448; cv=pass; b=RZ/w7c8eFEUVCJqVp5cHfnBcrgfs88JpKJpDQwJ3eJwclrbnT/lbYT96ENPjlYj6yx1C5loEbRgGJx3PtsIxMygZTW7YAbpJYaV4Mo3ggWTDREMJ37WdNMTlDMvc0la2SG8KWzfyvJDNYaqZsfUXp352grwaoBWWuur+GfLfY8U= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982448; c=relaxed/simple; bh=vJQ/dOYU1k8uyx3cFU7cVl8Rmi1oZJTa71aPTxpA8XU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=e5scsdLnM10zkPtFZrDATXcfGUJ2+z86UDMatFlSrrSwzV3jr00r56zLbdYFDtWJgj/krQ9OLXYeQWaVthZVCUoOiJdCA+3lIoMRL9uaTrdQBL0kTe1+CQirHFBO2u3MrYnn5gVxjF9fbKmcrr90B9bDIxcND5Ekk+Lw+P+ZqYg= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=V1FiJuho; arc=pass smtp.client-ip=136.143.184.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="V1FiJuho" ARC-Seal: i=1; a=rsa-sha256; t=1763982429; cv=none; d=zohomail.com; s=zohoarc; b=bFfbTLZfWfaFRzQkfyCkVjo2MZlYw4vaD/R5LoEC8aL4QASSsbE3xZG0EJ6WrFMX8LqWWXXcGaVAeO15iMUcbiJ3vvZMnF6Xs7CWxNAwXAMfBcmwAPyAbyr7JflPJMe+Y9AinrTeTBOv51prp4ewyBLzZ8opVFBgYbndIxnOi14= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763982429; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=Zlmg1xkb7zZ5qt1lQzDBttMbvIYcJyKcwVMP6LG+6Dc=; b=WQVXY+aATl+94dOiXyjf/nTMbVaLf+mro1cBXcFowQDXKO6oUliVPftsEVz+RF7U0Ly55Q1NtlsoBkTsqRCbuO91mxpeJhS/OhQfTrxfWn//wRYMpAuZ7pSH5NogKhC1VWv8BIvv9z1OI+WqsdmKHCuH9K0tj6r4FwyCI1vzp2s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1763982429; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=Zlmg1xkb7zZ5qt1lQzDBttMbvIYcJyKcwVMP6LG+6Dc=; b=V1FiJuhojXdSc/Lp5LfrkqnNi/N8EHUgWdTOHaM8OE5YafmSysvzD6c+Squ/t2oh Sx0q0a+0H9bxGtFFbgr9PuowFFUSpxDfkIchFFN/MANwZnd1Ph4dAL7aaLewo/ZZiK6 9rze27RJd3frip5SsLylUZicelRsG5WA/Ihrz5w8= Received: by mx.zohomail.com with SMTPS id 176398242729632.7829396468984; Mon, 24 Nov 2025 03:07:07 -0800 (PST) From: Nicolas Frattaroli Date: Mon, 24 Nov 2025 12:06:52 +0100 Subject: [PATCH v2 03/13] dt-bindings: interconnect: mt8183-emi: Add support for MT8196 EMI Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251124-mt8196-dvfsrc-v2-3-d9c1334db9f3@collabora.com> References: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> In-Reply-To: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno , Henry Chen , Georgi Djakov Cc: kernel@collabora.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-pm@vger.kernel.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 From: AngeloGioacchino Del Regno Add a new compatible for the External Memory Interface Interconnect found on the MediaTek MT8196 Chromebook SoC. Signed-off-by: AngeloGioacchino Del Regno Acked-by: Rob Herring (Arm) Signed-off-by: Nicolas Frattaroli --- .../bindings/interconnect/mediatek,mt8183-emi.yaml | 1 + include/dt-bindings/interconnect/mediatek,mt8196.h | 48 ++++++++++++++++++= ++++ 2 files changed, 49 insertions(+) diff --git a/Documentation/devicetree/bindings/interconnect/mediatek,mt8183= -emi.yaml b/Documentation/devicetree/bindings/interconnect/mediatek,mt8183-= emi.yaml index 017c8478b2a7..1fb8ccb558fb 100644 --- a/Documentation/devicetree/bindings/interconnect/mediatek,mt8183-emi.ya= ml +++ b/Documentation/devicetree/bindings/interconnect/mediatek,mt8183-emi.ya= ml @@ -40,6 +40,7 @@ properties: enum: - mediatek,mt8183-emi - mediatek,mt8195-emi + - mediatek,mt8196-emi =20 '#interconnect-cells': const: 1 diff --git a/include/dt-bindings/interconnect/mediatek,mt8196.h b/include/d= t-bindings/interconnect/mediatek,mt8196.h new file mode 100644 index 000000000000..de700fa73223 --- /dev/null +++ b/include/dt-bindings/interconnect/mediatek,mt8196.h @@ -0,0 +1,48 @@ +/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ +/* + * Copyright (c) 2025 Collabora Ltd. + * AngeloGioacchino Del Regno + */ + +#ifndef __DT_BINDINGS_INTERCONNECT_MEDIATEK_MT8196_H +#define __DT_BINDINGS_INTERCONNECT_MEDIATEK_MT8196_H + +#define SLAVE_DDR_EMI 0 +#define MASTER_MCUSYS 1 +#define MASTER_MCU_0 2 +#define MASTER_MCU_1 3 +#define MASTER_MCU_2 4 +#define MASTER_MCU_3 5 +#define MASTER_MCU_4 6 +#define MASTER_GPUSYS 7 +#define MASTER_MMSYS 8 +#define MASTER_MM_VPU 9 +#define MASTER_MM_DISP 10 +#define MASTER_MM_VDEC 11 +#define MASTER_MM_VENC 12 +#define MASTER_MM_CAM 13 +#define MASTER_MM_IMG 14 +#define MASTER_MM_MDP 15 +#define MASTER_VPUSYS 16 +#define MASTER_VPU_0 17 +#define MASTER_VPU_1 18 +#define MASTER_MDLASYS 19 +#define MASTER_MDLA_0 20 +#define MASTER_UFS 21 +#define MASTER_PCIE 22 +#define MASTER_USB 23 +#define MASTER_WIFI 24 +#define MASTER_BT 25 +#define MASTER_NETSYS 26 +#define MASTER_DBGIF 27 +#define SLAVE_HRT_DDR_EMI 28 +#define MASTER_HRT_MMSYS 29 +#define MASTER_HRT_MM_DISP 30 +#define MASTER_HRT_MM_VDEC 31 +#define MASTER_HRT_MM_VENC 32 +#define MASTER_HRT_MM_CAM 33 +#define MASTER_HRT_MM_IMG 34 +#define MASTER_HRT_MM_MDP 35 +#define MASTER_HRT_ADSP 36 +#define MASTER_HRT_DBGIF 37 +#endif --=20 2.52.0 From nobody Tue Dec 2 00:45:23 2025 Received: from sender3-pp-f112.zoho.com (sender3-pp-f112.zoho.com [136.143.184.112]) (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 99B352FBE0F; Mon, 24 Nov 2025 11:07:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.184.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982457; cv=pass; b=E6odrqPHL91LIrA7VRN/XqH7p7g9TVJh9u/VZTcy/n45C4WTsrIvHhxaQF5A305qQpXelpeVi7g5HEhlY83sibnzUYFzH2tyOU5sY5aUfuvkxOjc+i17Xor7BZLBd+cGcf4Q4cTh1I72VZe1V7XBsvXtyHicLE6EnGRShkzXLFs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982457; c=relaxed/simple; bh=bDefho51Ly/MOjRWfAzw7rqsqszclECUY7m0unTVEg4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dx4SmydfyNBcHRjQb0uTb/cuHxWL3btKotKagaJv28asRMI3+fRmmRnTUhzIoQqmPWbadduU/DsPTu5Eon5m1UmeM5CxwcUoELpRJqhkSVAA45twqcHx4oQtpwn0Ydh90WwD72U31QFDY9kvnynM7YAENDZENxUdHFXC1UI88aQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=KmZwvMFr; arc=pass smtp.client-ip=136.143.184.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="KmZwvMFr" ARC-Seal: i=1; a=rsa-sha256; t=1763982433; cv=none; d=zohomail.com; s=zohoarc; b=IXS8IHBlRkcxzbrqOTzjgOfUGwHgAeNekmQt1A56O8FmgN29sqvy+RBK5umlrJwt7srj03ctCnkYy6vjpLGhvMKHl25X620EkQzd0BCP9YXPQaSbKWIPTzWTJnzrchnBC1VeMPcv0vXJC22dLwVVmFiVfJwPTy8ceyYWIuMeVhs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763982433; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=qSGx250uhdjdakZcPHoX8Nbq5J4cWyRmd4SLOgVrrcg=; b=EjNhvEdyxDbs/2bwxjR2DwjWci/LOks7rzSYdsVfv/xKZrHfarjhKE4NQ6qJOWbgLkv4uMEw3WltDmWeytXs0zsaBiloWhbbij7AC91gCsfDMYkc3VqZ7jGm4F8ganM+iXLikrnbBV34/P2vgkbvK8isz5C9L3eamqdpnOqvogQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1763982433; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=qSGx250uhdjdakZcPHoX8Nbq5J4cWyRmd4SLOgVrrcg=; b=KmZwvMFrlZHV0mUn6TEmW8GPNOzPiVgf1uruk15TGaZwaVIqiDuh6abQ1aihVGgF ibLFU2sEz51fQy1Yxn/JAwspmO5VUb42f2yUcTl5l7uQAN5tkeLx75vbp5ygLGphK3D MGC7rMq+gPdTd/mirTF7ZHZORoew461w9nxU1bsw= Received: by mx.zohomail.com with SMTPS id 1763982430549222.18364403003534; Mon, 24 Nov 2025 03:07:10 -0800 (PST) From: Nicolas Frattaroli Date: Mon, 24 Nov 2025 12:06:53 +0100 Subject: [PATCH v2 04/13] soc: mediatek: mtk-dvfsrc: Change error check for DVFSRCv4 START cmd Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251124-mt8196-dvfsrc-v2-4-d9c1334db9f3@collabora.com> References: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> In-Reply-To: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno , Henry Chen , Georgi Djakov Cc: kernel@collabora.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-pm@vger.kernel.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 From: AngeloGioacchino Del Regno In preparation for adding support for DVFSRC Version 4, change the error check for the MTK_SIP_DVFSRC_START command in the probe function to error out only if BIT(0) is set: this is still valid for the previous DVFSRC versions, as those always set this bit in a fail reply anyway. Signed-off-by: AngeloGioacchino Del Regno Signed-off-by: Nicolas Frattaroli --- drivers/soc/mediatek/mtk-dvfsrc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/soc/mediatek/mtk-dvfsrc.c b/drivers/soc/mediatek/mtk-d= vfsrc.c index 41add5636b03..7708b07ab2d6 100644 --- a/drivers/soc/mediatek/mtk-dvfsrc.c +++ b/drivers/soc/mediatek/mtk-dvfsrc.c @@ -440,7 +440,7 @@ static int mtk_dvfsrc_probe(struct platform_device *pde= v) /* Everything is set up - make it run! */ arm_smccc_smc(MTK_SIP_DVFSRC_VCOREFS_CONTROL, MTK_SIP_DVFSRC_START, 0, 0, 0, 0, 0, 0, &ares); - if (ares.a0) + if (ares.a0 & BIT(0)) return dev_err_probe(&pdev->dev, -EINVAL, "Cannot start DVFSRC: %lu\n", = ares.a0); =20 return 0; --=20 2.52.0 From nobody Tue Dec 2 00:45:23 2025 Received: from sender3-pp-f112.zoho.com (sender3-pp-f112.zoho.com [136.143.184.112]) (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 496D12FB0B4; Mon, 24 Nov 2025 11:07:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.184.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982453; cv=pass; b=p02KmhPusUZywatG+TUA68tn9fC2tb2qgWq/or83cXedZZF6P0HxhIlHBbj/HQP9vqqiT2c89EHCDOjzcwLLp4jLXl2IUF0zKqdW7NvT1WwITMYcFsVsZFNyw0NDT4s32P1OQR5T/tjHla91Gw//uAomvYJEouA3Oetk821V3p0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982453; c=relaxed/simple; bh=YCzXdLNuiZJ8bxvj5S57gtpR9VUoiBQJnwsZH0XY5jQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MmFFAHXdw/q3ZWL/Omwn0kDYuEbCgo4Rvz+37SPEQUWVCOtDyZfrBX0EuN8gHXEJ4157Ak2kJDGCH7CnM4Db2jWcl7Brj95uWjAb+hlYrZXkHZ6cx77ZWalzzEXA76HvvLOK9Ir3Ub2l1kE8JGJUIuNSO2U0N2Aew8+O3IfCJKU= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=UL/OfK1+; arc=pass smtp.client-ip=136.143.184.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="UL/OfK1+" ARC-Seal: i=1; a=rsa-sha256; t=1763982435; cv=none; d=zohomail.com; s=zohoarc; b=UD0Wb+j5c6m/0ShV/FUC9GVDFrHSx0YYSY7Ziib54ppZ2bsLBPL3Mqf3eVEemtHEIzViarboarRGo6uHGkP2rpG2ZZev5HJ6Bf70LEL1Lj4Prfcpf3SgEZcPfmayA6UA2mjxRsNdLXX1owUt8kAeUDU9rUo22OQpDRJPX4xAU3g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763982435; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=kkFPhvnssFwdabScSzVUBJl7AWvF4qJiRWBgEepccCU=; b=cLxqs0eQDApWct70qGZj5Nq0AN/rozNzHM9+UHr5gxQSQ2wnWlMEh+gfo1GinpDnZGL5I+xXLN82Xpxqdme1QOKnZPphabPYUJidrKE81xfsq4645UxKBtUP9q8xlqAVDq/caLvaByblv+h4DlLAlMrqA0coUrtFNfHr54XGim8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1763982435; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=kkFPhvnssFwdabScSzVUBJl7AWvF4qJiRWBgEepccCU=; b=UL/OfK1+YmvySUgeXnPsXvTKBW33wn2MXm86Q2idLyojW/SEm/LIzgl6MsCati72 tkWCdRkyPXSOAiANpou+h36/mrjCJltyBBgxUW4RCHoGY3zmSQWUNykmkHoVvcgQuzP gVQTPipILgOBHFHOz8EJ6WPKsUNlpoAlbP4bV+g0= Received: by mx.zohomail.com with SMTPS id 1763982434008998.6034952190819; Mon, 24 Nov 2025 03:07:14 -0800 (PST) From: Nicolas Frattaroli Date: Mon, 24 Nov 2025 12:06:54 +0100 Subject: [PATCH v2 05/13] soc: mediatek: mtk-dvfsrc: Add and propagate DVFSRC bandwidth type Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251124-mt8196-dvfsrc-v2-5-d9c1334db9f3@collabora.com> References: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> In-Reply-To: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno , Henry Chen , Georgi Djakov Cc: kernel@collabora.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-pm@vger.kernel.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 From: AngeloGioacchino Del Regno In preparation for adding support for DVFSRC Version 4, add a new mtk_dvfsrc_bw_type enumeration, and propagate it from specific bw setting callbacks to __dvfsrc_set_dram_bw_v1(), which will use it to choose calculation multipliers and dividers in v4 callbacks. Signed-off-by: AngeloGioacchino Del Regno Signed-off-by: Nicolas Frattaroli --- drivers/soc/mediatek/mtk-dvfsrc.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/soc/mediatek/mtk-dvfsrc.c b/drivers/soc/mediatek/mtk-d= vfsrc.c index 7708b07ab2d6..a684e405daf7 100644 --- a/drivers/soc/mediatek/mtk-dvfsrc.c +++ b/drivers/soc/mediatek/mtk-dvfsrc.c @@ -36,6 +36,13 @@ #define MTK_SIP_DVFSRC_INIT 0x0 #define MTK_SIP_DVFSRC_START 0x1 =20 +enum mtk_dvfsrc_bw_type { + DVFSRC_BW_AVG, + DVFSRC_BW_PEAK, + DVFSRC_BW_HRT, + DVFSRC_BW_MAX, +}; + struct dvfsrc_bw_constraints { u16 max_dram_nom_bw; u16 max_dram_peak_bw; @@ -268,7 +275,7 @@ static void dvfsrc_set_vscp_level_v2(struct mtk_dvfsrc = *dvfsrc, u32 level) } =20 static void __dvfsrc_set_dram_bw_v1(struct mtk_dvfsrc *dvfsrc, u32 reg, - u16 max_bw, u16 min_bw, u64 bw) + int type, u16 max_bw, u16 min_bw, u64 bw) { u32 new_bw =3D (u32)div_u64(bw, 100 * 1000); =20 @@ -285,21 +292,21 @@ static void dvfsrc_set_dram_bw_v1(struct mtk_dvfsrc *= dvfsrc, u64 bw) { u64 max_bw =3D dvfsrc->dvd->bw_constraints->max_dram_nom_bw; =20 - __dvfsrc_set_dram_bw_v1(dvfsrc, DVFSRC_SW_BW, max_bw, 0, bw); + __dvfsrc_set_dram_bw_v1(dvfsrc, DVFSRC_SW_BW, DVFSRC_BW_AVG, max_bw, 0, b= w); }; =20 static void dvfsrc_set_dram_peak_bw_v1(struct mtk_dvfsrc *dvfsrc, u64 bw) { u64 max_bw =3D dvfsrc->dvd->bw_constraints->max_dram_peak_bw; =20 - __dvfsrc_set_dram_bw_v1(dvfsrc, DVFSRC_SW_PEAK_BW, max_bw, 0, bw); + __dvfsrc_set_dram_bw_v1(dvfsrc, DVFSRC_SW_PEAK_BW, DVFSRC_BW_PEAK, max_bw= , 0, bw); } =20 static void dvfsrc_set_dram_hrt_bw_v1(struct mtk_dvfsrc *dvfsrc, u64 bw) { u64 max_bw =3D dvfsrc->dvd->bw_constraints->max_dram_hrt_bw; =20 - __dvfsrc_set_dram_bw_v1(dvfsrc, DVFSRC_SW_HRT_BW, max_bw, 0, bw); + __dvfsrc_set_dram_bw_v1(dvfsrc, DVFSRC_SW_HRT_BW, DVFSRC_BW_HRT, max_bw, = 0, bw); } =20 static void dvfsrc_set_opp_level_v1(struct mtk_dvfsrc *dvfsrc, u32 level) --=20 2.52.0 From nobody Tue Dec 2 00:45:23 2025 Received: from sender3-pp-f112.zoho.com (sender3-pp-f112.zoho.com [136.143.184.112]) (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 4103B2FBE0D; Mon, 24 Nov 2025 11:07:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.184.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982457; cv=pass; b=uF5ZWG70SvrbCBd1enf1VDRrEE0nHz8GEt5zA8OvP9zqI92/1h0R1FCSknpjFU3WXhE2XLedGPXUN8UU7+Y1/BDmMHQOmlcH6DJFhpZXgpfuHvThTIP6SlBuxMshxx7E9w+WM5880KYTbPQpTejkvofvoBTrfxfHhxcoQgcuCFU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982457; c=relaxed/simple; bh=6F2kVSEWewRSGTRLy4D+6o7C5e8oIkIlwz3EdliBxTM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rQ1bH6Qszq+cbRxdJULpTjI+jFToNEKlcTDHLxRePbKqcVZpEhRYNcB2tOoBwd4KONc2J+5oLNCru7eqCRCsFfDZjv7cwWEUUhul8K6Drmb+svJU3aIdTKwUjhTnU1XXz07jf8dUr4a7qG0mk1jxwDWMcHciV+ns7w4dBEFUEjs= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=AbFR2dWG; arc=pass smtp.client-ip=136.143.184.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="AbFR2dWG" ARC-Seal: i=1; a=rsa-sha256; t=1763982439; cv=none; d=zohomail.com; s=zohoarc; b=CbICZw+MJLYvDM75sIfnRqr2fQ91fmNYtir5j9yJLOmhLrEZDyZeM0mJ7ETOgQi82FE5ryyxrMo8qwNY+a65frh+aCiYJGMyMhtOC+QYdKZYI4HDUG+YLjF6xDCNm0G2j0svY/ir7cklB4tW6jmeSo6N9v222P1wEb7M1x2lsm4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763982439; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=9c3Qpc7AsTRxWwpMRyYkuInfLdtrj7kwxB62DhZpoe8=; b=i3gBuUhesyaZ61vargUjnt8QzA7kpAtaYe0e5ub4wZ1HtAzRm2az09KbCboHtLBR7zSjSIVCWHZ8cjk0kRm7HeIzv3aMntpZETntLdW7fT2/Wg/XXagLS7jcTLAlnpRlwdF/vOJ2QP66Ypi33D0lzzuHd3hBZNrS6YfbI+DmGKI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1763982439; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=9c3Qpc7AsTRxWwpMRyYkuInfLdtrj7kwxB62DhZpoe8=; b=AbFR2dWGm4T/wE7qV5gHcdokKuzuKOQWD6pN1nurdR3VqNMf1l3314XxXgqbFh3v 1i618vg7bx8ghfIZCoke0Z0LIAMZqu5njm0Ni2j95LELOdD9+VlahcIO1Mj3zAZKYuU HDtZ3s9Dsnlo3N+h5tmE7BkJG2UVXFtgdI2knhKU= Received: by mx.zohomail.com with SMTPS id 1763982437295434.8072143379791; Mon, 24 Nov 2025 03:07:17 -0800 (PST) From: Nicolas Frattaroli Date: Mon, 24 Nov 2025 12:06:55 +0100 Subject: [PATCH v2 06/13] soc: mediatek: mtk-dvfsrc: Add a new callback for calc_dram_bw Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251124-mt8196-dvfsrc-v2-6-d9c1334db9f3@collabora.com> References: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> In-Reply-To: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno , Henry Chen , Georgi Djakov Cc: kernel@collabora.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-pm@vger.kernel.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 From: AngeloGioacchino Del Regno In preparation for adding support for DVFSRC Version 4, add a new callback for calculating the dram bandwidth, assign the current calculation algo to all of the currently supported SoCs, and use this in __dvfsrc_set_dram_bw_v1(). Signed-off-by: AngeloGioacchino Del Regno Signed-off-by: Nicolas Frattaroli --- drivers/soc/mediatek/mtk-dvfsrc.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/soc/mediatek/mtk-dvfsrc.c b/drivers/soc/mediatek/mtk-d= vfsrc.c index a684e405daf7..3cbccbb7469a 100644 --- a/drivers/soc/mediatek/mtk-dvfsrc.c +++ b/drivers/soc/mediatek/mtk-dvfsrc.c @@ -73,6 +73,7 @@ struct mtk_dvfsrc { struct dvfsrc_soc_data { const int *regs; const struct dvfsrc_opp_desc *opps_desc; + u32 (*calc_dram_bw)(struct mtk_dvfsrc *dvfsrc, int type, u64 bw); u32 (*get_target_level)(struct mtk_dvfsrc *dvfsrc); u32 (*get_current_level)(struct mtk_dvfsrc *dvfsrc); u32 (*get_vcore_level)(struct mtk_dvfsrc *dvfsrc); @@ -274,10 +275,15 @@ static void dvfsrc_set_vscp_level_v2(struct mtk_dvfsr= c *dvfsrc, u32 level) dvfsrc_writel(dvfsrc, DVFSRC_VCORE, val); } =20 +static u32 dvfsrc_calc_dram_bw_v1(struct mtk_dvfsrc *dvfsrc, int type, u64= bw) +{ + return (u32)div_u64(bw, 100 * 1000); +} + static void __dvfsrc_set_dram_bw_v1(struct mtk_dvfsrc *dvfsrc, u32 reg, int type, u16 max_bw, u16 min_bw, u64 bw) { - u32 new_bw =3D (u32)div_u64(bw, 100 * 1000); + u32 new_bw =3D dvfsrc->dvd->calc_dram_bw(dvfsrc, type, bw); =20 /* If bw constraints (in mbps) are defined make sure to respect them */ if (max_bw) @@ -519,6 +525,7 @@ static const struct dvfsrc_opp_desc dvfsrc_opp_mt8183_d= esc[] =3D { static const struct dvfsrc_soc_data mt8183_data =3D { .opps_desc =3D dvfsrc_opp_mt8183_desc, .regs =3D dvfsrc_mt8183_regs, + .calc_dram_bw =3D dvfsrc_calc_dram_bw_v1, .get_target_level =3D dvfsrc_get_target_level_v1, .get_current_level =3D dvfsrc_get_current_level_v1, .get_vcore_level =3D dvfsrc_get_vcore_level_v1, @@ -549,6 +556,7 @@ static const struct dvfsrc_opp_desc dvfsrc_opp_mt8195_d= esc[] =3D { static const struct dvfsrc_soc_data mt8195_data =3D { .opps_desc =3D dvfsrc_opp_mt8195_desc, .regs =3D dvfsrc_mt8195_regs, + .calc_dram_bw =3D dvfsrc_calc_dram_bw_v1, .get_target_level =3D dvfsrc_get_target_level_v2, .get_current_level =3D dvfsrc_get_current_level_v2, .get_vcore_level =3D dvfsrc_get_vcore_level_v2, --=20 2.52.0 From nobody Tue Dec 2 00:45:23 2025 Received: from sender3-pp-f112.zoho.com (sender3-pp-f112.zoho.com [136.143.184.112]) (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 9307E2FE04F; Mon, 24 Nov 2025 11:07:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.184.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982460; cv=pass; b=tCOOj77Az+Byms2VZfTu8Dcml7kSyj0ZGVSWYoN/pzN24TIAyZHSPQowaWoN9UoT/wHspYBv+MbNWnDRF9Ro99zVLxHHS8M8SnESdW1ydzZ0qRgYkUVfswsysOWNDD5WScJe1yWCEjU5itLqbbYD1ECEBNIwrTrBMp5lRWFSabw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982460; c=relaxed/simple; bh=0EHxgzdLZD3MHMZWz/fQ/MU14waqgu4mt8DIkMOFSl8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jWZ1btc6Ji/DNUV8MtLtwhliYISRRDmMfUs1DP52FVUq1SBQd6f7+Oa7BaXVJs4lXFA090Q/a8ig6qpkAx2pRk6h0+kDe8CvvtANqw1dnHltgiVgV1VpJHu9A3T3cXHr5HLDFda1KVl99ircBG2ahHTYW2RTEJmpRv5XruPgSbI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=GcDKiOKa; arc=pass smtp.client-ip=136.143.184.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="GcDKiOKa" ARC-Seal: i=1; a=rsa-sha256; t=1763982443; cv=none; d=zohomail.com; s=zohoarc; b=XDzG38gLtIld33aEjX3U7UoiNF4tEDtXnvJ5AnkLgHpTlwa+Z15UWgZOrngE4CgSJdCQ02BWgYWzvsKZSdy0GvtRas0GaEAiIZpwYjSWSAPFfB5jjebGlq2MLQkIdxJQuYyuorJo7YykC/IB2bHgAd2mP+rR/Ugq1CD/2xOPRP4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763982443; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=xvMrnz046uHJZXOiU4VZP36iA2AFstMOvjMGKhiRnuw=; b=f1T1bujkNj6qyW9wVZbcwnh7HC3yOsbDkkU6eyq7+ZOrswF6g+S4/ae51aKXdfQgHH6JV2F6JnOth3lru/tXZV0p1x2ATs5J6NfmuXn5MAhtCu1dwLxGTgj78XCx2WmHMt8JLwPWGWu2lRltEgY2Bndz2aYbNv6YRCJMVkoPA8U= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1763982443; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=xvMrnz046uHJZXOiU4VZP36iA2AFstMOvjMGKhiRnuw=; b=GcDKiOKaTuZBBXVNvzksyE9C81Jfb2uT8G1obHyRPlT3907AZ4qT0/iDVQTB7XHY 1YHVRFU0IrlBA/xzbA0KLqf2ROgPGB/siKj5P93TKBEExPU8lZfFiA0fOMw0S61aqhh d7Nf9xGmQWoRGG9i2s4obY0vlpXqEttcBYypI1F0= Received: by mx.zohomail.com with SMTPS id 1763982440693719.0304302956694; Mon, 24 Nov 2025 03:07:20 -0800 (PST) From: Nicolas Frattaroli Date: Mon, 24 Nov 2025 12:06:56 +0100 Subject: [PATCH v2 07/13] soc: mediatek: mtk-dvfsrc: Write bandwidth to EMI DDR if present Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251124-mt8196-dvfsrc-v2-7-d9c1334db9f3@collabora.com> References: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> In-Reply-To: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno , Henry Chen , Georgi Djakov Cc: kernel@collabora.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-pm@vger.kernel.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 From: AngeloGioacchino Del Regno In preparation for adding support for DVFSRC Version 4, add a new `has_emi_ddr` member to struct dvfsrc_soc_data: if true, write the DRAM bandwidth both to the BW_AVG and to the newly defined EMI_BW register, present only on DVFSRC v4. Currently supported SoCs will not use this, as has_emi_ddr is left out from their platform data, hence reading false. Signed-off-by: AngeloGioacchino Del Regno Signed-off-by: Nicolas Frattaroli --- drivers/soc/mediatek/mtk-dvfsrc.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/soc/mediatek/mtk-dvfsrc.c b/drivers/soc/mediatek/mtk-d= vfsrc.c index 3cbccbb7469a..bf0e7b01d255 100644 --- a/drivers/soc/mediatek/mtk-dvfsrc.c +++ b/drivers/soc/mediatek/mtk-dvfsrc.c @@ -72,6 +72,7 @@ struct mtk_dvfsrc { =20 struct dvfsrc_soc_data { const int *regs; + const bool has_emi_ddr; const struct dvfsrc_opp_desc *opps_desc; u32 (*calc_dram_bw)(struct mtk_dvfsrc *dvfsrc, int type, u64 bw); u32 (*get_target_level)(struct mtk_dvfsrc *dvfsrc); @@ -107,6 +108,7 @@ enum dvfsrc_regs { DVFSRC_SW_BW, DVFSRC_SW_PEAK_BW, DVFSRC_SW_HRT_BW, + DVFSRC_SW_EMI_BW, DVFSRC_VCORE, DVFSRC_REGS_MAX, }; @@ -292,6 +294,9 @@ static void __dvfsrc_set_dram_bw_v1(struct mtk_dvfsrc *= dvfsrc, u32 reg, new_bw =3D max(new_bw, min_bw); =20 dvfsrc_writel(dvfsrc, reg, new_bw); + + if (type =3D=3D DVFSRC_BW_AVG && dvfsrc->dvd->has_emi_ddr) + dvfsrc_writel(dvfsrc, DVFSRC_SW_EMI_BW, bw); } =20 static void dvfsrc_set_dram_bw_v1(struct mtk_dvfsrc *dvfsrc, u64 bw) --=20 2.52.0 From nobody Tue Dec 2 00:45:23 2025 Received: from sender3-pp-f112.zoho.com (sender3-pp-f112.zoho.com [136.143.184.112]) (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 AC9B63009C0; Mon, 24 Nov 2025 11:08:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.184.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982484; cv=pass; b=XcTW86/ydJSzvHfx1FN5O1zXJ3VK4GGliaN/r7uANpgPlDesvrUYKJNO0Knw1VmtJY9XnOBuS7c5sah3V/iHcbi31Mk6dH23ja0+KiwSUxcGJJwVY2pN+sx/NGMfmbkCnPlHQorDHPjdh51/BybIU2FF8YUe7uz22NfaY0M0WGk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982484; c=relaxed/simple; bh=Nbm0LjUJ9bYWwCAluFgbvjlQ6qTTWggMTbF9jFj41+I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=X68aQ4qJrtJHwtVdfOrSm39DxBMBDU3oXsvj2XO9xLVYDwE/t6n1T4dp0WkyoXOuxiClWMiqFNRzqx5OWp3XOt9QoVtEurTTEwLS4tSEqSz4QOXtxq6ffTqqazNn6FtoK1usnRsaGTi7AnDC7FJbiz4HrNy1vizGyYfAUxdI5TM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=VsGgunsi; arc=pass smtp.client-ip=136.143.184.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="VsGgunsi" ARC-Seal: i=1; a=rsa-sha256; t=1763982445; cv=none; d=zohomail.com; s=zohoarc; b=Quob953s73GUiuQ7CgvCwEEUc379Mua9eNs0ZZmu+R2jxKCigLMJSEU4bzrMFmQsVIssU+8dvvQUVJwmDwp7nxvgnEHLB4NjluQ8AEtKcCvoERDgR5f9ybgb2jS8Nn9m/vuDq4zs2Klpz1e1Hj0Dg5dcWGmxF9V0IphnLR8EKso= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763982445; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=tntsHTOJbk/7Ofsa7uCJqIORi4NXk3hwDFFtajhXrjs=; b=dBef0eIhuE2R5v40M/qp0WsuRRKRbbgoR2o55JNLPwr0LOA/ssIcZ76oOL2wcT+K9r/57g0EzepqCFmBzATvvHC72/ME8DCz8POG1p5xZa7zRjO9e8LBCLsO5HzIaaOtkVn6MwFNtF6PzrDuiIX5JQYEIiGrI8609wiN2kt4ozU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1763982445; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=tntsHTOJbk/7Ofsa7uCJqIORi4NXk3hwDFFtajhXrjs=; b=VsGgunsidhwqWHoG1ZOxobaFZRTNo19gnCIyakoRqkj7W7tMaOSv60uISNmqazCW D3/oVrD16i0oOfzRCl3HdBYzTdNyUyKnhC6KndkFFTaR4dCiP3Toj96KPZdsxIFmyHU frI7cX41IT52fvIsAymCUAlbYm0hWLvO8jGAohmE= Received: by mx.zohomail.com with SMTPS id 1763982443965308.2436263698329; Mon, 24 Nov 2025 03:07:23 -0800 (PST) From: Nicolas Frattaroli Date: Mon, 24 Nov 2025 12:06:57 +0100 Subject: [PATCH v2 08/13] soc: mediatek: mtk-dvfsrc: Add support for DVFSRCv4 and MT8196 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251124-mt8196-dvfsrc-v2-8-d9c1334db9f3@collabora.com> References: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> In-Reply-To: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno , Henry Chen , Georgi Djakov Cc: kernel@collabora.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-pm@vger.kernel.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 From: AngeloGioacchino Del Regno Add support for the DVFSRC Version 4 by adding new functions for vcore/dram levels (in v4, called gears instead), and for readout of pre-programmed dvfsrc_opp entries, corresponding to each gear. In the probe function, for v4, the curr_opps is initialized from the get_hw_opps() function instead of platform data. In order to make use of the new DVFSRCv4 code, also add support for the MediaTek MT8196 SoC. Co-developed-by: Nicolas Frattaroli Signed-off-by: Nicolas Frattaroli Signed-off-by: AngeloGioacchino Del Regno --- drivers/soc/mediatek/mtk-dvfsrc.c | 248 ++++++++++++++++++++++++++++++++++= +++- 1 file changed, 247 insertions(+), 1 deletion(-) diff --git a/drivers/soc/mediatek/mtk-dvfsrc.c b/drivers/soc/mediatek/mtk-d= vfsrc.c index bf0e7b01d255..3a83fd4baf54 100644 --- a/drivers/soc/mediatek/mtk-dvfsrc.c +++ b/drivers/soc/mediatek/mtk-dvfsrc.c @@ -15,11 +15,17 @@ #include #include =20 +/* DVFSRC_BASIC_CONTROL */ +#define DVFSRC_V4_BASIC_CTRL_OPP_COUNT GENMASK(26, 20) + /* DVFSRC_LEVEL */ #define DVFSRC_V1_LEVEL_TARGET_LEVEL GENMASK(15, 0) #define DVFSRC_TGT_LEVEL_IDLE 0x00 #define DVFSRC_V1_LEVEL_CURRENT_LEVEL GENMASK(31, 16) =20 +#define DVFSRC_V4_LEVEL_TARGET_LEVEL GENMASK(15, 8) +#define DVFSRC_V4_LEVEL_TARGET_PRESENT BIT(16) + /* DVFSRC_SW_REQ, DVFSRC_SW_REQ2 */ #define DVFSRC_V1_SW_REQ2_DRAM_LEVEL GENMASK(1, 0) #define DVFSRC_V1_SW_REQ2_VCORE_LEVEL GENMASK(3, 2) @@ -27,9 +33,23 @@ #define DVFSRC_V2_SW_REQ_DRAM_LEVEL GENMASK(3, 0) #define DVFSRC_V2_SW_REQ_VCORE_LEVEL GENMASK(6, 4) =20 +#define DVFSRC_V4_SW_REQ_EMI_LEVEL GENMASK(3, 0) +#define DVFSRC_V4_SW_REQ_DRAM_LEVEL GENMASK(15, 12) + /* DVFSRC_VCORE */ #define DVFSRC_V2_VCORE_REQ_VSCP_LEVEL GENMASK(14, 12) =20 +/* DVFSRC_TARGET_GEAR */ +#define DVFSRC_V4_GEAR_TARGET_DRAM GENMASK(7, 0) +#define DVFSRC_V4_GEAR_TARGET_VCORE GENMASK(15, 8) + +/* DVFSRC_GEAR_INFO */ +#define DVFSRC_V4_GEAR_INFO_REG_WIDTH 0x4 +#define DVFSRC_V4_GEAR_INFO_REG_LEVELS 64 +#define DVFSRC_V4_GEAR_INFO_VCORE GENMASK(3, 0) +#define DVFSRC_V4_GEAR_INFO_EMI GENMASK(7, 4) +#define DVFSRC_V4_GEAR_INFO_DRAM GENMASK(15, 12) + #define DVFSRC_POLL_TIMEOUT_US 1000 #define STARTUP_TIME_US 1 =20 @@ -52,6 +72,7 @@ struct dvfsrc_bw_constraints { struct dvfsrc_opp { u32 vcore_opp; u32 dram_opp; + u32 emi_opp; }; =20 struct dvfsrc_opp_desc { @@ -72,6 +93,7 @@ struct mtk_dvfsrc { =20 struct dvfsrc_soc_data { const int *regs; + const u8 *bw_units; const bool has_emi_ddr; const struct dvfsrc_opp_desc *opps_desc; u32 (*calc_dram_bw)(struct mtk_dvfsrc *dvfsrc, int type, u64 bw); @@ -79,6 +101,8 @@ struct dvfsrc_soc_data { u32 (*get_current_level)(struct mtk_dvfsrc *dvfsrc); u32 (*get_vcore_level)(struct mtk_dvfsrc *dvfsrc); u32 (*get_vscp_level)(struct mtk_dvfsrc *dvfsrc); + u32 (*get_opp_count)(struct mtk_dvfsrc *dvfsrc); + int (*get_hw_opps)(struct mtk_dvfsrc *dvfsrc); void (*set_dram_bw)(struct mtk_dvfsrc *dvfsrc, u64 bw); void (*set_dram_peak_bw)(struct mtk_dvfsrc *dvfsrc, u64 bw); void (*set_dram_hrt_bw)(struct mtk_dvfsrc *dvfsrc, u64 bw); @@ -101,6 +125,7 @@ static void dvfsrc_writel(struct mtk_dvfsrc *dvfs, u32 = offset, u32 val) } =20 enum dvfsrc_regs { + DVFSRC_BASIC_CONTROL, DVFSRC_SW_REQ, DVFSRC_SW_REQ2, DVFSRC_LEVEL, @@ -110,6 +135,9 @@ enum dvfsrc_regs { DVFSRC_SW_HRT_BW, DVFSRC_SW_EMI_BW, DVFSRC_VCORE, + DVFSRC_TARGET_GEAR, + DVFSRC_GEAR_INFO_L, + DVFSRC_GEAR_INFO_H, DVFSRC_REGS_MAX, }; =20 @@ -130,6 +158,22 @@ static const int dvfsrc_mt8195_regs[] =3D { [DVFSRC_TARGET_LEVEL] =3D 0xd48, }; =20 +static const int dvfsrc_mt8196_regs[] =3D { + [DVFSRC_BASIC_CONTROL] =3D 0x0, + [DVFSRC_SW_REQ] =3D 0x18, + [DVFSRC_VCORE] =3D 0x80, + [DVFSRC_GEAR_INFO_L] =3D 0xfc, + [DVFSRC_SW_BW] =3D 0x1e8, + [DVFSRC_SW_PEAK_BW] =3D 0x1f4, + [DVFSRC_SW_HRT_BW] =3D 0x20c, + [DVFSRC_LEVEL] =3D 0x5f0, + [DVFSRC_TARGET_LEVEL] =3D 0x5f0, + [DVFSRC_SW_REQ2] =3D 0x604, + [DVFSRC_SW_EMI_BW] =3D 0x60c, + [DVFSRC_TARGET_GEAR] =3D 0x6ac, + [DVFSRC_GEAR_INFO_H] =3D 0x6b0, +}; + static const struct dvfsrc_opp *dvfsrc_get_current_opp(struct mtk_dvfsrc *= dvfsrc) { u32 level =3D dvfsrc->dvd->get_current_level(dvfsrc); @@ -137,6 +181,20 @@ static const struct dvfsrc_opp *dvfsrc_get_current_opp= (struct mtk_dvfsrc *dvfsrc return &dvfsrc->curr_opps->opps[level]; } =20 +static u32 dvfsrc_get_current_target_vcore_gear(struct mtk_dvfsrc *dvfsrc) +{ + u32 val =3D dvfsrc_readl(dvfsrc, DVFSRC_TARGET_GEAR); + + return FIELD_GET(DVFSRC_V4_GEAR_TARGET_VCORE, val); +} + +static u32 dvfsrc_get_current_target_dram_gear(struct mtk_dvfsrc *dvfsrc) +{ + u32 val =3D dvfsrc_readl(dvfsrc, DVFSRC_TARGET_GEAR); + + return FIELD_GET(DVFSRC_V4_GEAR_TARGET_DRAM, val); +} + static bool dvfsrc_is_idle(struct mtk_dvfsrc *dvfsrc) { if (!dvfsrc->dvd->get_target_level) @@ -193,6 +251,24 @@ static int dvfsrc_wait_for_opp_level_v2(struct mtk_dvf= src *dvfsrc, u32 level) return 0; } =20 +static int dvfsrc_wait_for_vcore_level_v4(struct mtk_dvfsrc *dvfsrc, u32 l= evel) +{ + u32 val; + + return readx_poll_timeout_atomic(dvfsrc_get_current_target_vcore_gear, + dvfsrc, val, val >=3D level, + STARTUP_TIME_US, DVFSRC_POLL_TIMEOUT_US); +} + +static int dvfsrc_wait_for_opp_level_v4(struct mtk_dvfsrc *dvfsrc, u32 lev= el) +{ + u32 val; + + return readx_poll_timeout_atomic(dvfsrc_get_current_target_dram_gear, + dvfsrc, val, val >=3D level, + STARTUP_TIME_US, DVFSRC_POLL_TIMEOUT_US); +} + static u32 dvfsrc_get_target_level_v1(struct mtk_dvfsrc *dvfsrc) { u32 val =3D dvfsrc_readl(dvfsrc, DVFSRC_LEVEL); @@ -226,6 +302,27 @@ static u32 dvfsrc_get_current_level_v2(struct mtk_dvfs= rc *dvfsrc) return 0; } =20 +static u32 dvfsrc_get_target_level_v4(struct mtk_dvfsrc *dvfsrc) +{ + u32 val =3D dvfsrc_readl(dvfsrc, DVFSRC_TARGET_LEVEL); + + if (val & DVFSRC_V4_LEVEL_TARGET_PRESENT) + return FIELD_GET(DVFSRC_V4_LEVEL_TARGET_LEVEL, val) + 1; + return 0; +} + +static u32 dvfsrc_get_current_level_v4(struct mtk_dvfsrc *dvfsrc) +{ + u32 level =3D dvfsrc_readl(dvfsrc, DVFSRC_LEVEL) + 1; + + /* Valid levels */ + if (level < dvfsrc->curr_opps->num_opp) + return dvfsrc->curr_opps->num_opp - level; + + /* Zero for level 0 or invalid level */ + return 0; +} + static u32 dvfsrc_get_vcore_level_v1(struct mtk_dvfsrc *dvfsrc) { u32 val =3D dvfsrc_readl(dvfsrc, DVFSRC_SW_REQ2); @@ -277,11 +374,30 @@ static void dvfsrc_set_vscp_level_v2(struct mtk_dvfsr= c *dvfsrc, u32 level) dvfsrc_writel(dvfsrc, DVFSRC_VCORE, val); } =20 +static u32 dvfsrc_get_opp_count_v4(struct mtk_dvfsrc *dvfsrc) +{ + u32 val =3D dvfsrc_readl(dvfsrc, DVFSRC_BASIC_CONTROL); + + return FIELD_GET(DVFSRC_V4_BASIC_CTRL_OPP_COUNT, val) + 1; +} + static u32 dvfsrc_calc_dram_bw_v1(struct mtk_dvfsrc *dvfsrc, int type, u64= bw) { return (u32)div_u64(bw, 100 * 1000); } =20 +static u32 dvfsrc_calc_dram_bw_v4(struct mtk_dvfsrc *dvfsrc, int type, u64= bw) +{ + u8 bw_unit =3D dvfsrc->dvd->bw_units[type]; + u64 bw_mbps; + + if (type < DVFSRC_BW_AVG || type >=3D DVFSRC_BW_MAX) + return 0; + + bw_mbps =3D div_u64(bw, 1000); + return (u32)div_u64((bw_mbps + bw_unit - 1), bw_unit); +} + static void __dvfsrc_set_dram_bw_v1(struct mtk_dvfsrc *dvfsrc, u32 reg, int type, u16 max_bw, u16 min_bw, u64 bw) { @@ -333,6 +449,100 @@ static void dvfsrc_set_opp_level_v1(struct mtk_dvfsrc= *dvfsrc, u32 level) dvfsrc_writel(dvfsrc, DVFSRC_SW_REQ, val); } =20 +static u32 dvfsrc_get_opp_gear(struct mtk_dvfsrc *dvfsrc, u8 level) +{ + u32 reg_ofst, val; + u8 idx; + + /* Calculate register offset and index for requested gear */ + if (level < DVFSRC_V4_GEAR_INFO_REG_LEVELS) { + reg_ofst =3D dvfsrc->dvd->regs[DVFSRC_GEAR_INFO_L]; + idx =3D level; + } else { + reg_ofst =3D dvfsrc->dvd->regs[DVFSRC_GEAR_INFO_H]; + idx =3D level - DVFSRC_V4_GEAR_INFO_REG_LEVELS; + } + reg_ofst +=3D DVFSRC_V4_GEAR_INFO_REG_WIDTH * (level / 2); + + /* Read the corresponding gear register */ + val =3D readl(dvfsrc->regs + reg_ofst); + + /* Each register contains two sets of data, 16 bits per gear */ + val >>=3D 16 * (idx % 2); + + return val; +} + +static int dvfsrc_get_hw_opps_v4(struct mtk_dvfsrc *dvfsrc) +{ + struct dvfsrc_opp *dvfsrc_opps; + struct dvfsrc_opp_desc *desc; + u32 num_opps, gear_info; + u8 num_vcore, num_dram; + u8 num_emi; + int i; + + num_opps =3D dvfsrc_get_opp_count_v4(dvfsrc); + if (num_opps =3D=3D 0) { + dev_err(dvfsrc->dev, "No OPPs programmed in DVFSRC MCU.\n"); + return -EINVAL; + } + + /* + * The first 16 bits set in the gear info table says how many OPPs + * and how many vcore, dram and emi table entries are available. + */ + gear_info =3D dvfsrc_readl(dvfsrc, DVFSRC_GEAR_INFO_L); + if (gear_info =3D=3D 0) { + dev_err(dvfsrc->dev, "No gear info in DVFSRC MCU.\n"); + return -EINVAL; + } + + num_vcore =3D FIELD_GET(DVFSRC_V4_GEAR_INFO_VCORE, gear_info) + 1; + num_dram =3D FIELD_GET(DVFSRC_V4_GEAR_INFO_DRAM, gear_info) + 1; + num_emi =3D FIELD_GET(DVFSRC_V4_GEAR_INFO_EMI, gear_info) + 1; + dev_info(dvfsrc->dev, + "Discovered %u gears and %u vcore, %u dram, %u emi table entries.\n", + num_opps, num_vcore, num_dram, num_emi); + + /* Allocate everything now as anything else after that cannot fail */ + desc =3D devm_kzalloc(dvfsrc->dev, sizeof(*desc), GFP_KERNEL); + if (!desc) + return -ENOMEM; + + dvfsrc_opps =3D devm_kcalloc(dvfsrc->dev, num_opps + 1, + sizeof(*dvfsrc_opps), GFP_KERNEL); + if (!dvfsrc_opps) + return -ENOMEM; + + /* Read the OPP table gear indices */ + for (i =3D 0; i <=3D num_opps; i++) { + gear_info =3D dvfsrc_get_opp_gear(dvfsrc, num_opps - i); + dvfsrc_opps[i].vcore_opp =3D FIELD_GET(DVFSRC_V4_GEAR_INFO_VCORE, gear_i= nfo); + dvfsrc_opps[i].dram_opp =3D FIELD_GET(DVFSRC_V4_GEAR_INFO_DRAM, gear_inf= o); + dvfsrc_opps[i].emi_opp =3D FIELD_GET(DVFSRC_V4_GEAR_INFO_EMI, gear_info); + }; + desc->num_opp =3D num_opps + 1; + desc->opps =3D dvfsrc_opps; + + /* Assign to main structure now that everything is done! */ + dvfsrc->curr_opps =3D desc; + + return 0; +} + +static void dvfsrc_set_dram_level_v4(struct mtk_dvfsrc *dvfsrc, u32 level) +{ + u32 val =3D dvfsrc_readl(dvfsrc, DVFSRC_SW_REQ); + + val &=3D ~DVFSRC_V4_SW_REQ_DRAM_LEVEL; + val |=3D FIELD_PREP(DVFSRC_V4_SW_REQ_DRAM_LEVEL, level); + + dev_dbg(dvfsrc->dev, "%s level=3D%u\n", __func__, level); + + dvfsrc_writel(dvfsrc, DVFSRC_SW_REQ, val); +} + int mtk_dvfsrc_send_request(const struct device *dev, u32 cmd, u64 data) { struct mtk_dvfsrc *dvfsrc =3D dev_get_drvdata(dev); @@ -448,7 +658,14 @@ static int mtk_dvfsrc_probe(struct platform_device *pd= ev) dvfsrc->dram_type =3D ares.a1; dev_dbg(&pdev->dev, "DRAM Type: %d\n", dvfsrc->dram_type); =20 - dvfsrc->curr_opps =3D &dvfsrc->dvd->opps_desc[dvfsrc->dram_type]; + /* Newer versions of the DVFSRC MCU have pre-programmed gear tables */ + if (dvfsrc->dvd->get_hw_opps) { + ret =3D dvfsrc->dvd->get_hw_opps(dvfsrc); + if (ret) + return ret; + } else { + dvfsrc->curr_opps =3D &dvfsrc->dvd->opps_desc[dvfsrc->dram_type]; + } platform_set_drvdata(pdev, dvfsrc); =20 ret =3D devm_of_platform_populate(&pdev->dev); @@ -576,10 +793,39 @@ static const struct dvfsrc_soc_data mt8195_data =3D { .bw_constraints =3D &dvfsrc_bw_constr_v2, }; =20 +static const u8 mt8196_bw_units[] =3D { + [DVFSRC_BW_AVG] =3D 64, + [DVFSRC_BW_PEAK] =3D 64, + [DVFSRC_BW_HRT] =3D 30, +}; + +static const struct dvfsrc_soc_data mt8196_data =3D { + .regs =3D dvfsrc_mt8196_regs, + .bw_units =3D mt8196_bw_units, + .has_emi_ddr =3D true, + .get_target_level =3D dvfsrc_get_target_level_v4, + .get_current_level =3D dvfsrc_get_current_level_v4, + .get_vcore_level =3D dvfsrc_get_vcore_level_v2, + .get_vscp_level =3D dvfsrc_get_vscp_level_v2, + .get_opp_count =3D dvfsrc_get_opp_count_v4, + .get_hw_opps =3D dvfsrc_get_hw_opps_v4, + .calc_dram_bw =3D dvfsrc_calc_dram_bw_v4, + .set_dram_bw =3D dvfsrc_set_dram_bw_v1, + .set_dram_peak_bw =3D dvfsrc_set_dram_peak_bw_v1, + .set_dram_hrt_bw =3D dvfsrc_set_dram_hrt_bw_v1, + .set_opp_level =3D dvfsrc_set_dram_level_v4, + .set_vcore_level =3D dvfsrc_set_vcore_level_v2, + .set_vscp_level =3D dvfsrc_set_vscp_level_v2, + .wait_for_opp_level =3D dvfsrc_wait_for_opp_level_v4, + .wait_for_vcore_level =3D dvfsrc_wait_for_vcore_level_v4, + .bw_constraints =3D &dvfsrc_bw_constr_v1, +}; + static const struct of_device_id mtk_dvfsrc_of_match[] =3D { { .compatible =3D "mediatek,mt6893-dvfsrc", .data =3D &mt6893_data }, { .compatible =3D "mediatek,mt8183-dvfsrc", .data =3D &mt8183_data }, { .compatible =3D "mediatek,mt8195-dvfsrc", .data =3D &mt8195_data }, + { .compatible =3D "mediatek,mt8196-dvfsrc", .data =3D &mt8196_data }, { /* sentinel */ } }; =20 --=20 2.52.0 From nobody Tue Dec 2 00:45:23 2025 Received: from sender3-pp-f112.zoho.com (sender3-pp-f112.zoho.com [136.143.184.112]) (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 E7F852FC891; Mon, 24 Nov 2025 11:07:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.184.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982467; cv=pass; b=WQd0E57nk2VzGHQRSQwzDu9FthlAEwfIKU3WaReFYSB6yPjohq+DbxsxhwdjnvCT7Wca/7i/7+5XkdSCLORxN/NMDk3v27wUOMEjvF5iZgkzNTwAgTy2J1X/unU/X1QEhcOr419b5/rfDpjuWS6J14Lm/kbTcGxPKIONXfvN+rM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982467; c=relaxed/simple; bh=BtODfoHUWJ2VpnwsgnInnskEvhVeok20tlmLapE9Oxc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=joGxKFmedvLHldDepyuiyqX8OrKVZXkBqzz5g9Y+Q/6Mrd7kUZMW+nhvLXa7qmqEvKcsXXiY7E2khLWF+Wu2aTFGYutoRjdJToCaW7w+ZCyHwxOXcAATY5Ueg2S+zc/g+bysKSXOZiXF32KT2EGQ7QpJfVZsx0DQcf6cUjhyFlM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=NE6wb5oH; arc=pass smtp.client-ip=136.143.184.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="NE6wb5oH" ARC-Seal: i=1; a=rsa-sha256; t=1763982449; cv=none; d=zohomail.com; s=zohoarc; b=NUytUdA+SGSrlE63zS/zfKXRiZ1BMSC4p5R5zgwMLh+p4kk192xRuD1LZiEfiETf599/mhCdWFwf56efIffQd0IzTnk3x+4l/wKJNC0YveAQt82Yr+lnv5pnbOza88rDpgQpNqyHtlgmTwJAqchcdAMGc+9IVS1dkr7gHNfvi7c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763982449; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=/xhXPP3gRLRrtXGINvdfz74DYVPN12DyX86RwS57Epc=; b=ZrYTzB4aiMCVcWODLe6FBUB0jF+HCIz2uW/tW/0O8v2elk1hGLCvmLUMI3xdPtblCVYO6BOOhOLu3X7Ir9cvhRVY4jGs3lzQoBG6JoW2S99SLgakutwUr+T1KZbazWnPdoS2I3rLXrUGlR0aR4KKVSTnJ0i3ZrSq6sfBSTPdOyE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1763982449; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=/xhXPP3gRLRrtXGINvdfz74DYVPN12DyX86RwS57Epc=; b=NE6wb5oHc1Tdel5K1oA7ijdBR7yq8P2ILdqZFw2RHEqgBSBUsmD1sIqjsQr6YX67 LhfH99ZTQTFMV+eLuX+PayzAyw2nMEyMIH5nGI7SJXF7qWAOzdnG5u/AaR9HjuBPVZo iXMHS9n6dIqCo2ME41ebNSS+zKhCEZmyX2nH3iT8= Received: by mx.zohomail.com with SMTPS id 1763982447257830.5724130617974; Mon, 24 Nov 2025 03:07:27 -0800 (PST) From: Nicolas Frattaroli Date: Mon, 24 Nov 2025 12:06:58 +0100 Subject: [PATCH v2 09/13] soc: mediatek: mtk-dvfsrc: Get and Enable DVFSRC clock Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251124-mt8196-dvfsrc-v2-9-d9c1334db9f3@collabora.com> References: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> In-Reply-To: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno , Henry Chen , Georgi Djakov Cc: kernel@collabora.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-pm@vger.kernel.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 The DVFSRC has a clock on all platforms. Get and enable it in the probe function, so that Linux's common clock framework knows we're a user of it. Reviewed-by: AngeloGioacchino Del Regno Signed-off-by: Nicolas Frattaroli --- drivers/soc/mediatek/mtk-dvfsrc.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/soc/mediatek/mtk-dvfsrc.c b/drivers/soc/mediatek/mtk-d= vfsrc.c index 3a83fd4baf54..a43d6f913914 100644 --- a/drivers/soc/mediatek/mtk-dvfsrc.c +++ b/drivers/soc/mediatek/mtk-dvfsrc.c @@ -7,6 +7,7 @@ =20 #include #include +#include #include #include #include @@ -83,6 +84,7 @@ struct dvfsrc_opp_desc { struct dvfsrc_soc_data; struct mtk_dvfsrc { struct device *dev; + struct clk *clk; struct platform_device *icc; struct platform_device *regulator; const struct dvfsrc_soc_data *dvd; @@ -650,6 +652,11 @@ static int mtk_dvfsrc_probe(struct platform_device *pd= ev) if (IS_ERR(dvfsrc->regs)) return PTR_ERR(dvfsrc->regs); =20 + dvfsrc->clk =3D devm_clk_get_enabled(&pdev->dev, NULL); + if (IS_ERR(dvfsrc->clk)) + return dev_err_probe(&pdev->dev, PTR_ERR(dvfsrc->clk), + "Couldn't get and enable DVFSRC clock\n"); + arm_smccc_smc(MTK_SIP_DVFSRC_VCOREFS_CONTROL, MTK_SIP_DVFSRC_INIT, 0, 0, 0, 0, 0, 0, &ares); if (ares.a0) --=20 2.52.0 From nobody Tue Dec 2 00:45:23 2025 Received: from sender3-pp-f112.zoho.com (sender3-pp-f112.zoho.com [136.143.184.112]) (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 3EA952FF668; Mon, 24 Nov 2025 11:07:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.184.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982470; cv=pass; b=k50crv/usi/xm0D4N6aZrJoe5VrK7xLiTAfpTI0+7O2OLU921OUaBEeUxwvJKl/OfvsWfznhaBQr9trFL8y6qdCrAUNOw1AmKkxcZDiVPbfGIiLOp6YFTl1nmd82pwPZnVxYtt0Id/pFvPgaMQbTxpCLScA+N/xdStAkW7otplk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982470; c=relaxed/simple; bh=XRN7l5HCuSrAf9FdSg5zMg7Ti3S6RyZaosUN5M0VrsM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DG0TwpsOFCyPvHM+nDnp7nDpue36yt1Naq34tNPURslvxEvuTIi3cLsmjnVn+7dE8DiuuXxlh200IEknrVFT8szrqC8TkItEarZ2AXPgISFTt2s2nv/l32LODd7XBTy7qsHq9aLZ0yX+cFWDZbM9KfbAYDCSDf5a5KYuSy1rljA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=E8LEDUOd; arc=pass smtp.client-ip=136.143.184.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="E8LEDUOd" ARC-Seal: i=1; a=rsa-sha256; t=1763982451; cv=none; d=zohomail.com; s=zohoarc; b=hRaDMdBgpJUWieMHl93K55uMn5+++VP+xmhy5V24ajBKLeAMA81aPwZ3Ib/UZUDt4wiiLh8pif5qO/mwqy1hQG/fcRd80JGejoigiuvSJh4uYBah9Ur2BQ6myEYAh3U3W1ZrgOj6YXvIUxtLX/piyNxOqRI2AzLubocPv0zXIhI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763982451; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=l/jpHg8ggSLyVTybJftVENEdxbGTU3I5XefcjT15QOs=; b=F585uhLOtdK8SsEkgSZWOBkPSvqQ725D/D0vLyQY73Vx583Cy0v6Eh9dMrn02fAqlB7Kx18O82tPzxkcsagmtfUMPPDWrTE70iJiJpRNIP5Tjts105zS/6JUs9Wd7EoX23kM8npD1OGr6+MbckMg+WQ3IkpXGAY8VV12gvMliQ0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1763982451; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=l/jpHg8ggSLyVTybJftVENEdxbGTU3I5XefcjT15QOs=; b=E8LEDUOdHlC34iedGgQowUrAZJeBj0rbdTIcsdpgePSNRR9g2gINi+uKrMkxOLSS PPMhoatYXleKJDP8VoQAJ6li44binP5oEgv9Mn1PoXubr2zlwX2T7FIu3W/QMqXki2u cFIlH5j+1559MMy3QCvKYadWUgwORaMPCMpeN5j4= Received: by mx.zohomail.com with SMTPS id 1763982450499916.9244462379016; Mon, 24 Nov 2025 03:07:30 -0800 (PST) From: Nicolas Frattaroli Date: Mon, 24 Nov 2025 12:06:59 +0100 Subject: [PATCH v2 10/13] soc: mediatek: mtk-dvfsrc: Rework bandwidth calculations Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251124-mt8196-dvfsrc-v2-10-d9c1334db9f3@collabora.com> References: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> In-Reply-To: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno , Henry Chen , Georgi Djakov Cc: kernel@collabora.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-pm@vger.kernel.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 The code, as it is, plays fast and loose with bandwidth units. It also doesn't specify its constraints in the actual maximum hardware value, but as some roundabout thing that then ends up multiplied into the actual hardware value constraint after some indirections. In part, this is due to the use of individual members for storing each limit, instead of making it possible to index them by type. Rework all of this by adding const array members indexed by the bandwidth type enum to the soc_data struct. This array expresses the actual hardware value limitations, not a factor thereof. Use the clamp function macro to clamp the values between the minimum and maximum constraints after all the calculations, which also means the code doesn't write nonsense to a hardware register when the math is wrong, as it'll constrain after all the calculations. Pass the type as the actual enum type as well, and not as an int. If there's some type checking that can be extracted from the function signature, then we may as well use it. Don't needlessly explicitly cast return values to the return type either; this is both unnecessary and makes it harder to spot type safety issues. Reviewed-by: AngeloGioacchino Del Regno Signed-off-by: Nicolas Frattaroli --- drivers/soc/mediatek/mtk-dvfsrc.c | 107 ++++++++++++++++++++++++----------= ---- 1 file changed, 67 insertions(+), 40 deletions(-) diff --git a/drivers/soc/mediatek/mtk-dvfsrc.c b/drivers/soc/mediatek/mtk-d= vfsrc.c index a43d6f913914..548a28f50242 100644 --- a/drivers/soc/mediatek/mtk-dvfsrc.c +++ b/drivers/soc/mediatek/mtk-dvfsrc.c @@ -64,12 +64,6 @@ enum mtk_dvfsrc_bw_type { DVFSRC_BW_MAX, }; =20 -struct dvfsrc_bw_constraints { - u16 max_dram_nom_bw; - u16 max_dram_peak_bw; - u16 max_dram_hrt_bw; -}; - struct dvfsrc_opp { u32 vcore_opp; u32 dram_opp; @@ -98,7 +92,7 @@ struct dvfsrc_soc_data { const u8 *bw_units; const bool has_emi_ddr; const struct dvfsrc_opp_desc *opps_desc; - u32 (*calc_dram_bw)(struct mtk_dvfsrc *dvfsrc, int type, u64 bw); + u32 (*calc_dram_bw)(struct mtk_dvfsrc *dvfsrc, enum mtk_dvfsrc_bw_type ty= pe, u64 bw); u32 (*get_target_level)(struct mtk_dvfsrc *dvfsrc); u32 (*get_current_level)(struct mtk_dvfsrc *dvfsrc); u32 (*get_vcore_level)(struct mtk_dvfsrc *dvfsrc); @@ -113,7 +107,22 @@ struct dvfsrc_soc_data { void (*set_vscp_level)(struct mtk_dvfsrc *dvfsrc, u32 level); int (*wait_for_opp_level)(struct mtk_dvfsrc *dvfsrc, u32 level); int (*wait_for_vcore_level)(struct mtk_dvfsrc *dvfsrc, u32 level); - const struct dvfsrc_bw_constraints *bw_constraints; + + /** + * @bw_max_constraints - array of maximum bandwidth for this hardware + * + * indexed by &enum mtk_dvfsrc_bw_type, storing the maximum permissible + * hardware value for each bandwidth type. + */ + const u32 *const bw_max_constraints; + + /** + * @bw_min_constraints - array of minimum bandwidth for this hardware + * + * indexed by &enum mtk_dvfsrc_bw_type, storing the minimum permissible + * hardware value for each bandwidth type. + */ + const u32 *const bw_min_constraints; }; =20 static u32 dvfsrc_readl(struct mtk_dvfsrc *dvfs, u32 offset) @@ -383,59 +392,62 @@ static u32 dvfsrc_get_opp_count_v4(struct mtk_dvfsrc = *dvfsrc) return FIELD_GET(DVFSRC_V4_BASIC_CTRL_OPP_COUNT, val) + 1; } =20 -static u32 dvfsrc_calc_dram_bw_v1(struct mtk_dvfsrc *dvfsrc, int type, u64= bw) +static u32 +dvfsrc_calc_dram_bw_v1(struct mtk_dvfsrc *dvfsrc, enum mtk_dvfsrc_bw_type = type, u64 bw) { - return (u32)div_u64(bw, 100 * 1000); + return clamp_val(div_u64(bw, 100 * 1000), dvfsrc->dvd->bw_min_constraints= [type], + dvfsrc->dvd->bw_max_constraints[type]); } =20 -static u32 dvfsrc_calc_dram_bw_v4(struct mtk_dvfsrc *dvfsrc, int type, u64= bw) +/** + * dvfsrc_calc_dram_bw_v4 - convert kbps to hardware register bandwidth va= lue + * @dvfsrc: pointer to the &struct mtk_dvfsrc of this driver instance + * @type: one of %DVFSRC_BW_AVG, %DVFSRC_BW_PEAK, or %DVFSRC_BW_HRT + * @bw: the bandwidth in kilobits per second + * + * Returns the hardware register value appropriate for expressing @bw, cla= mped + * to hardware limits. + */ +static u32 +dvfsrc_calc_dram_bw_v4(struct mtk_dvfsrc *dvfsrc, enum mtk_dvfsrc_bw_type = type, u64 bw) { u8 bw_unit =3D dvfsrc->dvd->bw_units[type]; u64 bw_mbps; + u32 bw_hw; =20 if (type < DVFSRC_BW_AVG || type >=3D DVFSRC_BW_MAX) return 0; =20 bw_mbps =3D div_u64(bw, 1000); - return (u32)div_u64((bw_mbps + bw_unit - 1), bw_unit); + bw_hw =3D div_u64((bw_mbps + bw_unit - 1), bw_unit); + return clamp_val(bw_hw, dvfsrc->dvd->bw_min_constraints[type], + dvfsrc->dvd->bw_max_constraints[type]); } =20 static void __dvfsrc_set_dram_bw_v1(struct mtk_dvfsrc *dvfsrc, u32 reg, - int type, u16 max_bw, u16 min_bw, u64 bw) + enum mtk_dvfsrc_bw_type type, u64 bw) { - u32 new_bw =3D dvfsrc->dvd->calc_dram_bw(dvfsrc, type, bw); - - /* If bw constraints (in mbps) are defined make sure to respect them */ - if (max_bw) - new_bw =3D min(new_bw, max_bw); - if (min_bw && new_bw > 0) - new_bw =3D max(new_bw, min_bw); + u32 bw_hw =3D dvfsrc->dvd->calc_dram_bw(dvfsrc, type, bw); =20 - dvfsrc_writel(dvfsrc, reg, new_bw); + dvfsrc_writel(dvfsrc, reg, bw_hw); =20 if (type =3D=3D DVFSRC_BW_AVG && dvfsrc->dvd->has_emi_ddr) - dvfsrc_writel(dvfsrc, DVFSRC_SW_EMI_BW, bw); + dvfsrc_writel(dvfsrc, DVFSRC_SW_EMI_BW, bw_hw); } =20 static void dvfsrc_set_dram_bw_v1(struct mtk_dvfsrc *dvfsrc, u64 bw) { - u64 max_bw =3D dvfsrc->dvd->bw_constraints->max_dram_nom_bw; - - __dvfsrc_set_dram_bw_v1(dvfsrc, DVFSRC_SW_BW, DVFSRC_BW_AVG, max_bw, 0, b= w); + __dvfsrc_set_dram_bw_v1(dvfsrc, DVFSRC_SW_BW, DVFSRC_BW_AVG, bw); }; =20 static void dvfsrc_set_dram_peak_bw_v1(struct mtk_dvfsrc *dvfsrc, u64 bw) { - u64 max_bw =3D dvfsrc->dvd->bw_constraints->max_dram_peak_bw; - - __dvfsrc_set_dram_bw_v1(dvfsrc, DVFSRC_SW_PEAK_BW, DVFSRC_BW_PEAK, max_bw= , 0, bw); + __dvfsrc_set_dram_bw_v1(dvfsrc, DVFSRC_SW_PEAK_BW, DVFSRC_BW_PEAK, bw); } =20 static void dvfsrc_set_dram_hrt_bw_v1(struct mtk_dvfsrc *dvfsrc, u64 bw) { - u64 max_bw =3D dvfsrc->dvd->bw_constraints->max_dram_hrt_bw; - - __dvfsrc_set_dram_bw_v1(dvfsrc, DVFSRC_SW_HRT_BW, DVFSRC_BW_HRT, max_bw, = 0, bw); + __dvfsrc_set_dram_bw_v1(dvfsrc, DVFSRC_SW_HRT_BW, DVFSRC_BW_HRT, bw); } =20 static void dvfsrc_set_opp_level_v1(struct mtk_dvfsrc *dvfsrc, u32 level) @@ -688,11 +700,22 @@ static int mtk_dvfsrc_probe(struct platform_device *p= dev) return 0; } =20 -static const struct dvfsrc_bw_constraints dvfsrc_bw_constr_v1 =3D { 0, 0, = 0 }; -static const struct dvfsrc_bw_constraints dvfsrc_bw_constr_v2 =3D { - .max_dram_nom_bw =3D 255, - .max_dram_peak_bw =3D 255, - .max_dram_hrt_bw =3D 1023, +static const u32 dvfsrc_bw_min_constr_none[DVFSRC_BW_MAX] =3D { + [DVFSRC_BW_AVG] =3D 0, + [DVFSRC_BW_PEAK] =3D 0, + [DVFSRC_BW_HRT] =3D 0, +}; + +static const u32 dvfsrc_bw_max_constr_v1[DVFSRC_BW_MAX] =3D { + [DVFSRC_BW_AVG] =3D U32_MAX, + [DVFSRC_BW_PEAK] =3D U32_MAX, + [DVFSRC_BW_HRT] =3D U32_MAX, +}; + +static const u32 dvfsrc_bw_max_constr_v2[DVFSRC_BW_MAX] =3D { + [DVFSRC_BW_AVG] =3D 65535, + [DVFSRC_BW_PEAK] =3D 65535, + [DVFSRC_BW_HRT] =3D 1023, }; =20 static const struct dvfsrc_opp dvfsrc_opp_mt6893_lp4[] =3D { @@ -725,7 +748,8 @@ static const struct dvfsrc_soc_data mt6893_data =3D { .set_vscp_level =3D dvfsrc_set_vscp_level_v2, .wait_for_opp_level =3D dvfsrc_wait_for_opp_level_v2, .wait_for_vcore_level =3D dvfsrc_wait_for_vcore_level_v1, - .bw_constraints =3D &dvfsrc_bw_constr_v2, + .bw_max_constraints =3D dvfsrc_bw_max_constr_v2, + .bw_min_constraints =3D dvfsrc_bw_min_constr_none, }; =20 static const struct dvfsrc_opp dvfsrc_opp_mt8183_lp4[] =3D { @@ -763,7 +787,8 @@ static const struct dvfsrc_soc_data mt8183_data =3D { .set_vcore_level =3D dvfsrc_set_vcore_level_v1, .wait_for_opp_level =3D dvfsrc_wait_for_opp_level_v1, .wait_for_vcore_level =3D dvfsrc_wait_for_vcore_level_v1, - .bw_constraints =3D &dvfsrc_bw_constr_v1, + .bw_max_constraints =3D dvfsrc_bw_max_constr_v1, + .bw_min_constraints =3D dvfsrc_bw_min_constr_none, }; =20 static const struct dvfsrc_opp dvfsrc_opp_mt8195_lp4[] =3D { @@ -797,7 +822,8 @@ static const struct dvfsrc_soc_data mt8195_data =3D { .set_vscp_level =3D dvfsrc_set_vscp_level_v2, .wait_for_opp_level =3D dvfsrc_wait_for_opp_level_v2, .wait_for_vcore_level =3D dvfsrc_wait_for_vcore_level_v1, - .bw_constraints =3D &dvfsrc_bw_constr_v2, + .bw_max_constraints =3D dvfsrc_bw_max_constr_v2, + .bw_min_constraints =3D dvfsrc_bw_min_constr_none, }; =20 static const u8 mt8196_bw_units[] =3D { @@ -825,7 +851,8 @@ static const struct dvfsrc_soc_data mt8196_data =3D { .set_vscp_level =3D dvfsrc_set_vscp_level_v2, .wait_for_opp_level =3D dvfsrc_wait_for_opp_level_v4, .wait_for_vcore_level =3D dvfsrc_wait_for_vcore_level_v4, - .bw_constraints =3D &dvfsrc_bw_constr_v1, + .bw_max_constraints =3D dvfsrc_bw_max_constr_v2, + .bw_min_constraints =3D dvfsrc_bw_min_constr_none, }; =20 static const struct of_device_id mtk_dvfsrc_of_match[] =3D { --=20 2.52.0 From nobody Tue Dec 2 00:45:23 2025 Received: from sender3-pp-f112.zoho.com (sender3-pp-f112.zoho.com [136.143.184.112]) (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 847F72FF668; Mon, 24 Nov 2025 11:07:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.184.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982477; cv=pass; b=RwmedQyrYJGSLtvUaLq0MR8wvGOAn11XXh8vuiwcS9oj6P41hbnLP9EBrjGBlB5SusAPowL/wFZKVzQ9EGQ5RKfU1gA7Wh0onIxJ+N5aDuQ3Qsc2V+hzraMwduEb9IUX1xXONN1lWLfxFctg0jI2YLVY+0xXiN9DfEYlTlUsw+s= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982477; c=relaxed/simple; bh=ML/QbAT6wuODK9p64mxODmHtL+wQT+HxiQ+NdN8oXYg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qqSXyewyoNJ6apC/T9sJjPTnxzEPP4p2J7dHAs0zW59pPev0WtgN45TVrOZOkhQ34x89U4IgGxMZ0PGqE6KiyRguPx5qSb8CHyAEEE9wLgEM5T9KS0ZdBBomxuNWGM2xM0CbTx089b1yIDd0eDbMSsE1W5iIzixk19PoKWufRBc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=DlCjuok2; arc=pass smtp.client-ip=136.143.184.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="DlCjuok2" ARC-Seal: i=1; a=rsa-sha256; t=1763982455; cv=none; d=zohomail.com; s=zohoarc; b=d1oDUos2HA5s5Qbyvbb1+z4ERO4MBk+x6v7aKIX6DD3mAPj3ncG0wBMiWlBLLprVTB8WkU3i3Ol/97HpcJ+l2oNCjEwAg7OgNi/fnFmJAaAvhvgPPc5pXwL/h9ZmurM9N4587/lAxDRxq9pTlAiQtqmpcSHgG3TC/Sr8kYMIakE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763982455; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=Iiq+HYCmnZ7TcdzmTbexqDQH56XfdBR2ZblfoMLBIoA=; b=kVQHxJpV70E+mipZYoRedcBJu3o96p6imJHncUT9bsEOczmAA4D+niucFPItw4wALF74t6EfPWYBTLzL6MHoS2O4Qp3vDmRgBSrjDioZAmdvz0felAc4TCCZjTi6v6EOMRqZRhudTi8DpYY9ohkNIMqHpMVeKNCc0jIn0b+oJJk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1763982455; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=Iiq+HYCmnZ7TcdzmTbexqDQH56XfdBR2ZblfoMLBIoA=; b=DlCjuok2x3mr2p2TjFTSvPF2ql7+rLYI2n0sUGdHTW2ytuFfBUaaGExuDL+0IbOU MJWt5D+90yb15xkrUU18KBVss4OinmjxZPLhK9FUhZMUYT7N6+2In/2GQJhGksv2Tmv nUjOEp56GLIHljWvxUaOMsP+Dzg1qB5kwyjv1aNg= Received: by mx.zohomail.com with SMTPS id 1763982453777661.8440242348057; Mon, 24 Nov 2025 03:07:33 -0800 (PST) From: Nicolas Frattaroli Date: Mon, 24 Nov 2025 12:07:00 +0100 Subject: [PATCH v2 11/13] interconnect: mediatek: Add support for MediaTek MT8196 EMI ICC Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251124-mt8196-dvfsrc-v2-11-d9c1334db9f3@collabora.com> References: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> In-Reply-To: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno , Henry Chen , Georgi Djakov Cc: kernel@collabora.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-pm@vger.kernel.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 From: AngeloGioacchino Del Regno Add a new driver with data to register the External Memory Interface (EMI) Interconnect on the MediaTek MT8196 Chromebook SoC. Signed-off-by: AngeloGioacchino Del Regno Signed-off-by: Nicolas Frattaroli --- drivers/interconnect/mediatek/Kconfig | 7 + drivers/interconnect/mediatek/Makefile | 1 + drivers/interconnect/mediatek/mt8196.c | 383 +++++++++++++++++++++++++++++= ++++ 3 files changed, 391 insertions(+) diff --git a/drivers/interconnect/mediatek/Kconfig b/drivers/interconnect/m= ediatek/Kconfig index 985c849efac3..9fd3f2170443 100644 --- a/drivers/interconnect/mediatek/Kconfig +++ b/drivers/interconnect/mediatek/Kconfig @@ -27,3 +27,10 @@ config INTERCONNECT_MTK_MT8195 help This is a driver for the MediaTek bus interconnect on MT8195-based platforms. + +config INTERCONNECT_MTK_MT8196 + tristate "MediaTek MT8196 interconnect driver" + depends on INTERCONNECT_MTK_DVFSRC_EMI + help + This is a driver for the MediaTek bus interconnect on MT8196-based + platforms. diff --git a/drivers/interconnect/mediatek/Makefile b/drivers/interconnect/= mediatek/Makefile index 8e2283a9a5b5..6bd656668f5d 100644 --- a/drivers/interconnect/mediatek/Makefile +++ b/drivers/interconnect/mediatek/Makefile @@ -3,3 +3,4 @@ obj-$(CONFIG_INTERCONNECT_MTK_DVFSRC_EMI) +=3D icc-emi.o obj-$(CONFIG_INTERCONNECT_MTK_MT8183) +=3D mt8183.o obj-$(CONFIG_INTERCONNECT_MTK_MT8195) +=3D mt8195.o +obj-$(CONFIG_INTERCONNECT_MTK_MT8195) +=3D mt8196.o diff --git a/drivers/interconnect/mediatek/mt8196.c b/drivers/interconnect/= mediatek/mt8196.c new file mode 100644 index 000000000000..e9af32065be1 --- /dev/null +++ b/drivers/interconnect/mediatek/mt8196.c @@ -0,0 +1,383 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025 Collabora Ltd. + * AngeloGioacchino Del Regno + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "icc-emi.h" + +static struct mtk_icc_node ddr_emi =3D { + .name =3D "ddr-emi", + .id =3D SLAVE_DDR_EMI, + .ep =3D 1, +}; + +static struct mtk_icc_node mcusys =3D { + .name =3D "mcusys", + .id =3D MASTER_MCUSYS, + .ep =3D 0, + .num_links =3D 1, + .links =3D { SLAVE_DDR_EMI } +}; + +static struct mtk_icc_node mcu_port0 =3D { + .name =3D "mcu-port0", + .id =3D MASTER_MCU_0, + .ep =3D 0, + .num_links =3D 1, + .links =3D { SLAVE_DDR_EMI } +}; + +static struct mtk_icc_node mcu_port1 =3D { + .name =3D "mcu-port1", + .id =3D MASTER_MCU_1, + .ep =3D 0, + .num_links =3D 1, + .links =3D { SLAVE_DDR_EMI } +}; + +static struct mtk_icc_node mcu_port2 =3D { + .name =3D "mcu-port2", + .id =3D MASTER_MCU_2, + .ep =3D 0, + .num_links =3D 1, + .links =3D { SLAVE_DDR_EMI } +}; + +static struct mtk_icc_node mcu_port3 =3D { + .name =3D "mcu-port3", + .id =3D MASTER_MCU_3, + .ep =3D 0, + .num_links =3D 1, + .links =3D { SLAVE_DDR_EMI } +}; + +static struct mtk_icc_node mcu_port4 =3D { + .name =3D "mcu-port4", + .id =3D MASTER_MCU_4, + .ep =3D 0, + .num_links =3D 1, + .links =3D { SLAVE_DDR_EMI } +}; + +static struct mtk_icc_node gpu =3D { + .name =3D "gpu", + .id =3D MASTER_GPUSYS, + .ep =3D 0, + .num_links =3D 1, + .links =3D { SLAVE_DDR_EMI } +}; + +static struct mtk_icc_node mmsys =3D { + .name =3D "mmsys", + .id =3D MASTER_MMSYS, + .ep =3D 0, + .num_links =3D 1, + .links =3D { SLAVE_DDR_EMI } +}; + +static struct mtk_icc_node mm_vpu =3D { + .name =3D "mm-vpu", + .id =3D MASTER_MM_VPU, + .ep =3D 0, + .num_links =3D 1, + .links =3D { MASTER_MMSYS } +}; + +static struct mtk_icc_node mm_disp =3D { + .name =3D "mm-disp", + .id =3D MASTER_MM_DISP, + .ep =3D 0, + .num_links =3D 1, + .links =3D { MASTER_MMSYS } +}; + +static struct mtk_icc_node mm_vdec =3D { + .name =3D "mm-vdec", + .id =3D MASTER_MM_VDEC, + .ep =3D 0, + .num_links =3D 1, + .links =3D { MASTER_MMSYS } +}; + +static struct mtk_icc_node mm_venc =3D { + .name =3D "mm-venc", + .id =3D MASTER_MM_VENC, + .ep =3D 0, + .num_links =3D 1, + .links =3D { MASTER_MMSYS } +}; + +static struct mtk_icc_node mm_cam =3D { + .name =3D "mm-cam", + .id =3D MASTER_MM_CAM, + .ep =3D 0, + .num_links =3D 1, + .links =3D { MASTER_MMSYS } +}; + +static struct mtk_icc_node mm_img =3D { + .name =3D "mm-img", + .id =3D MASTER_MM_IMG, + .ep =3D 0, + .num_links =3D 1, + .links =3D { MASTER_MMSYS } +}; + +static struct mtk_icc_node mm_mdp =3D { + .name =3D "mm-mdp", + .id =3D MASTER_MM_MDP, + .ep =3D 0, + .num_links =3D 1, + .links =3D { MASTER_MMSYS } +}; + +static struct mtk_icc_node vpusys =3D { + .name =3D "vpusys", + .id =3D MASTER_VPUSYS, + .ep =3D 0, + .num_links =3D 1, + .links =3D { SLAVE_DDR_EMI } +}; + +static struct mtk_icc_node vpu_port0 =3D { + .name =3D "vpu-port0", + .id =3D MASTER_VPU_0, + .ep =3D 0, + .num_links =3D 1, + .links =3D { MASTER_VPUSYS } +}; + +static struct mtk_icc_node vpu_port1 =3D { + .name =3D "vpu-port1", + .id =3D MASTER_VPU_1, + .ep =3D 0, + .num_links =3D 1, + .links =3D { MASTER_VPUSYS } +}; + +static struct mtk_icc_node mdlasys =3D { + .name =3D "mdlasys", + .id =3D MASTER_MDLASYS, + .ep =3D 0, + .num_links =3D 1, + .links =3D { SLAVE_DDR_EMI } +}; + +static struct mtk_icc_node mdla_port0 =3D { + .name =3D "mdla-port0", + .id =3D MASTER_MDLA_0, + .ep =3D 0, + .num_links =3D 1, + .links =3D { MASTER_MDLASYS } +}; + +static struct mtk_icc_node ufs =3D { + .name =3D "ufs", + .id =3D MASTER_UFS, + .ep =3D 0, + .num_links =3D 1, + .links =3D { SLAVE_DDR_EMI } +}; + +static struct mtk_icc_node pcie =3D { + .name =3D "pcie", + .id =3D MASTER_PCIE, + .ep =3D 0, + .num_links =3D 1, + .links =3D { SLAVE_DDR_EMI } +}; + +static struct mtk_icc_node usb =3D { + .name =3D "usb", + .id =3D MASTER_USB, + .ep =3D 0, + .num_links =3D 1, + .links =3D { SLAVE_DDR_EMI } +}; + +static struct mtk_icc_node wifi =3D { + .name =3D "wifi", + .id =3D MASTER_WIFI, + .ep =3D 0, + .num_links =3D 1, + .links =3D { SLAVE_DDR_EMI } +}; + +static struct mtk_icc_node bt =3D { + .name =3D "bt", + .id =3D MASTER_BT, + .ep =3D 0, + .num_links =3D 1, + .links =3D { SLAVE_DDR_EMI } +}; + +static struct mtk_icc_node netsys =3D { + .name =3D "netsys", + .id =3D MASTER_NETSYS, + .ep =3D 0, + .num_links =3D 1, + .links =3D { SLAVE_DDR_EMI } +}; + +static struct mtk_icc_node dbgif =3D { + .name =3D "dbgif", + .id =3D MASTER_DBGIF, + .ep =3D 0, + .num_links =3D 1, + .links =3D { SLAVE_DDR_EMI } +}; + +static struct mtk_icc_node hrt_ddr_emi =3D { + .name =3D "hrt-ddr-emi", + .id =3D SLAVE_HRT_DDR_EMI, + .ep =3D 2, +}; + +static struct mtk_icc_node hrt_mmsys =3D { + .name =3D "hrt-mmsys", + .id =3D MASTER_HRT_MMSYS, + .ep =3D 0, + .num_links =3D 1, + .links =3D { SLAVE_HRT_DDR_EMI } +}; + +static struct mtk_icc_node hrt_mm_disp =3D { + .name =3D "hrt-mm-disp", + .id =3D MASTER_HRT_MM_DISP, + .ep =3D 0, + .num_links =3D 1, + .links =3D { MASTER_HRT_MMSYS } +}; + +static struct mtk_icc_node hrt_mm_vdec =3D { + .name =3D "hrt-mm-vdec", + .id =3D MASTER_HRT_MM_VDEC, + .ep =3D 0, + .num_links =3D 1, + .links =3D { MASTER_HRT_MMSYS } +}; + +static struct mtk_icc_node hrt_mm_venc =3D { + .name =3D "hrt-mm-venc", + .id =3D MASTER_HRT_MM_VENC, + .ep =3D 0, + .num_links =3D 1, + .links =3D { MASTER_HRT_MMSYS } +}; + +static struct mtk_icc_node hrt_mm_cam =3D { + .name =3D "hrt-mm-cam", + .id =3D MASTER_HRT_MM_CAM, + .ep =3D 0, + .num_links =3D 1, + .links =3D { MASTER_HRT_MMSYS } +}; + +static struct mtk_icc_node hrt_mm_img =3D { + .name =3D "hrt-mm-img", + .id =3D MASTER_HRT_MM_IMG, + .ep =3D 0, + .num_links =3D 1, + .links =3D { MASTER_HRT_MMSYS } +}; + +static struct mtk_icc_node hrt_mm_mdp =3D { + .name =3D "hrt-mm-mdp", + .id =3D MASTER_HRT_MM_MDP, + .ep =3D 0, + .num_links =3D 1, + .links =3D { MASTER_HRT_MMSYS } +}; + +static struct mtk_icc_node hrt_adsp =3D { + .name =3D "hrt-adsp", + .id =3D MASTER_HRT_ADSP, + .ep =3D 0, + .num_links =3D 1, + .links =3D { SLAVE_HRT_DDR_EMI } +}; + +static struct mtk_icc_node hrt_dbgif =3D { + .name =3D "hrt-dbgif", + .id =3D MASTER_HRT_DBGIF, + .ep =3D 0, + .num_links =3D 1, + .links =3D { SLAVE_HRT_DDR_EMI } +}; + +static struct mtk_icc_node *mt8196_emi_icc_nodes[] =3D { + [SLAVE_DDR_EMI] =3D &ddr_emi, + [MASTER_MCUSYS] =3D &mcusys, + [MASTER_MCU_0] =3D &mcu_port0, + [MASTER_MCU_1] =3D &mcu_port1, + [MASTER_MCU_2] =3D &mcu_port2, + [MASTER_MCU_3] =3D &mcu_port3, + [MASTER_MCU_4] =3D &mcu_port4, + [MASTER_GPUSYS] =3D &gpu, + [MASTER_MMSYS] =3D &mmsys, + [MASTER_MM_VPU] =3D &mm_vpu, + [MASTER_MM_DISP] =3D &mm_disp, + [MASTER_MM_VDEC] =3D &mm_vdec, + [MASTER_MM_VENC] =3D &mm_venc, + [MASTER_MM_CAM] =3D &mm_cam, + [MASTER_MM_IMG] =3D &mm_img, + [MASTER_MM_MDP] =3D &mm_mdp, + [MASTER_VPUSYS] =3D &vpusys, + [MASTER_VPU_0] =3D &vpu_port0, + [MASTER_VPU_1] =3D &vpu_port1, + [MASTER_MDLASYS] =3D &mdlasys, + [MASTER_MDLA_0] =3D &mdla_port0, + [MASTER_UFS] =3D &ufs, + [MASTER_PCIE] =3D &pcie, + [MASTER_USB] =3D &usb, + [MASTER_WIFI] =3D &wifi, + [MASTER_BT] =3D &bt, + [MASTER_NETSYS] =3D &netsys, + [MASTER_DBGIF] =3D &dbgif, + [SLAVE_HRT_DDR_EMI] =3D &hrt_ddr_emi, + [MASTER_HRT_MMSYS] =3D &hrt_mmsys, + [MASTER_HRT_MM_DISP] =3D &hrt_mm_disp, + [MASTER_HRT_MM_VDEC] =3D &hrt_mm_vdec, + [MASTER_HRT_MM_VENC] =3D &hrt_mm_venc, + [MASTER_HRT_MM_CAM] =3D &hrt_mm_cam, + [MASTER_HRT_MM_IMG] =3D &hrt_mm_img, + [MASTER_HRT_MM_MDP] =3D &hrt_mm_mdp, + [MASTER_HRT_ADSP] =3D &hrt_adsp, + [MASTER_HRT_DBGIF] =3D &hrt_dbgif +}; + +static struct mtk_icc_desc mt8196_emi_icc =3D { + .nodes =3D mt8196_emi_icc_nodes, + .num_nodes =3D ARRAY_SIZE(mt8196_emi_icc_nodes), +}; + +static const struct of_device_id mtk_mt8196_emi_icc_of_match[] =3D { + { .compatible =3D "mediatek,mt8196-emi", .data =3D &mt8196_emi_icc }, + { /* sentinel */ }, +}; +MODULE_DEVICE_TABLE(of, mtk_mt8196_emi_icc_of_match); + +static struct platform_driver mtk_emi_icc_mt8196_driver =3D { + .driver =3D { + .name =3D "emi-icc-mt8196", + .of_match_table =3D mtk_mt8196_emi_icc_of_match, + .sync_state =3D icc_sync_state, + }, + .probe =3D mtk_emi_icc_probe, + .remove =3D mtk_emi_icc_remove, + +}; +module_platform_driver(mtk_emi_icc_mt8196_driver); + +MODULE_AUTHOR("AngeloGioacchino Del Regno "); +MODULE_DESCRIPTION("MediaTek MT8196 EMI ICC driver"); +MODULE_LICENSE("GPL"); --=20 2.52.0 From nobody Tue Dec 2 00:45:23 2025 Received: from sender3-pp-f112.zoho.com (sender3-pp-f112.zoho.com [136.143.184.112]) (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 0C5362FFFA4; Mon, 24 Nov 2025 11:07:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.184.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982480; cv=pass; b=MON6SA8QVXikS9fzWcoc5KcrTPLwn5yCqKl7i5RxQog/2QUuaw7MeEg8g5r79EK5UYqrqCz0/lBQrpG2FgMT7Qz8x6yCMA6Y2wRw83ju0bETmfVXjOZgFA96wZyOCkea1+WablCY00cCZwVgChOhBHVYYp5znBuMQCNAoTDxfKM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982480; c=relaxed/simple; bh=YvM7R8E45NSo7o8x096Qdk4d+R71z5b0gmTaWzltjrU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hwvEFyqu3DZNvh49jY0Y0dvLi4JCGIA2aeGAPFM6eCRubTXwvDs7QNNGaSpJo/eHi5O8FhYWqQjenEXWqWxFSmTSJosQzyXy2HptlM9ji7fHQSdia7CDHzwtBRIbzfSSUQxuzF/eFyidFFV9ZsCl3BcAp7mmfkvYEbkJekuRX2I= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=BJtohHxv; arc=pass smtp.client-ip=136.143.184.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="BJtohHxv" ARC-Seal: i=1; a=rsa-sha256; t=1763982459; cv=none; d=zohomail.com; s=zohoarc; b=Ex3jGzV73lIUVhhi9LP/QgpWjmoa5ygJYj4xrlQrHBHS1eFv6ifCiokLOIi/jgLUBBkc9IcrG/hYOH/hGBJF0O78S88FQkaWbQ9pf5ImCF2s2FXfphHBPw4cfutnaeI7GoeUsgA6KB3+jgMgpOuLJjjet6DF6LmNaykNY5K6JrM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763982459; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=qoo4mVM5kwudM7/8ap4xpMpg2C8udD4BnzAHqgC7CL8=; b=Jfl9EzPGfi8WwdmKVnZzgqQtA1O96g7+H/+VoIH7/G22Yu4wvFszIY1kinnFoQnnb+XU6iPqs/qIyyBNJFkv0zgZ48FUIRqsA6AjQ3T67bN0TuMvwDVVbOyvykmYxDouh1PrJicsw5NXTjk/r3yRbr2z38nOyxdmLgpX6S16h0A= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1763982459; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=qoo4mVM5kwudM7/8ap4xpMpg2C8udD4BnzAHqgC7CL8=; b=BJtohHxvDVDXP2GbJtXjc50uSSPNEYr6MkjblxkDeFJi2rqoKFS2mcGlf1AjLDa+ z7Id6HehKs/kHLvImNOYlhowRuF2+dzSfC2WSy4yXQEv7p70siafgbePQ4X1vRxvgLS 5h9LolKdHFOwhdOtboV/XsWyFKvtMG5DBt6fG77c= Received: by mx.zohomail.com with SMTPS id 1763982457081364.29471024039515; Mon, 24 Nov 2025 03:07:37 -0800 (PST) From: Nicolas Frattaroli Date: Mon, 24 Nov 2025 12:07:01 +0100 Subject: [PATCH v2 12/13] interconnect: mediatek: Don't hijack parent device Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251124-mt8196-dvfsrc-v2-12-d9c1334db9f3@collabora.com> References: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> In-Reply-To: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno , Henry Chen , Georgi Djakov Cc: kernel@collabora.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-pm@vger.kernel.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 If the intention is that users of the interconnect declare their relationship to the child icc_emi node of the dvfsrc controller, then this code never worked. That's because it uses the parent dvfsrc device as the device it passes to the interconnect core framework, which means all the OF parsing is broken. Use the actual device instead, and pass the dvfsrc parent into the dvfsrc calls. Fixes: b45293799f75 ("interconnect: mediatek: Add MediaTek MT8183/8195 EMI = Interconnect driver") Reviewed-by: AngeloGioacchino Del Regno Signed-off-by: Nicolas Frattaroli --- drivers/interconnect/mediatek/icc-emi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/interconnect/mediatek/icc-emi.c b/drivers/interconnect= /mediatek/icc-emi.c index 7da740b5fa8d..182aa2b0623a 100644 --- a/drivers/interconnect/mediatek/icc-emi.c +++ b/drivers/interconnect/mediatek/icc-emi.c @@ -40,7 +40,7 @@ static int mtk_emi_icc_set(struct icc_node *src, struct i= cc_node *dst) if (unlikely(!src->provider)) return -EINVAL; =20 - dev =3D src->provider->dev; + dev =3D src->provider->dev->parent; =20 switch (node->ep) { case 0: @@ -97,7 +97,7 @@ int mtk_emi_icc_probe(struct platform_device *pdev) if (!data) return -ENOMEM; =20 - provider->dev =3D pdev->dev.parent; + provider->dev =3D dev; provider->set =3D mtk_emi_icc_set; provider->aggregate =3D mtk_emi_icc_aggregate; provider->xlate =3D of_icc_xlate_onecell; --=20 2.52.0 From nobody Tue Dec 2 00:45:23 2025 Received: from sender3-pp-f112.zoho.com (sender3-pp-f112.zoho.com [136.143.184.112]) (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 837E82FB99B; Mon, 24 Nov 2025 11:08:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.184.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982495; cv=pass; b=f+/TqCGLLQAYypCKHpZRzjHNlkbAiTL6U1b3HmtUCHHdY7YOzZDPDwVoaQoBPK0ciAK/0q5CkY3tintastEXB/nO9HTDml2XyFsMjgPquseGmQeE4RYYRIOpLpnt6rm3szEeaHCX/M4LYzNdWc/5PKShm7yUbyqriBFOOi3yzyM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763982495; c=relaxed/simple; bh=V5x8hVM3+HVrOj1QgAtegq88Chg4b2A5o5KIyuCPGg0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lt2GAxkYl+THHmS3X6d0TDaoJvDdCeC0tXTSn3QOaYh9TeKUU0sWQzllMW770Va/equW57SIGLuu8BRsRU3jXKrDE92c+Bi2hUIKa0FqCrL0heGsQZ/7VJISURUzk/vjkDMS+slynbUIBDlpyCHCnHwulV1sbzi5WaU995k0N2I= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b=AVmokdW+; arc=pass smtp.client-ip=136.143.184.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=nicolas.frattaroli@collabora.com header.b="AVmokdW+" ARC-Seal: i=1; a=rsa-sha256; t=1763982473; cv=none; d=zohomail.com; s=zohoarc; b=nzoEES+ACjGpL2CgVFGgU3syBjERBvBzhN2kRTtThhbgqW8+KEXCK0p2EHEHLM5fmYE+JJjSPA5rMq32ZjhglrlDVH9XsrB7yTlhLGUfDHjcClXdhra+EBORdl8w0PuSl/020ArSCO6FfyP5LXSBfp4RiUvmGxyMyk8c7y5PQfM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763982473; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=7+Y/LyMk0RrNOFdGUfyDXTf7l2qJ7k0vXn6vVykaLc8=; b=H4d4NAzp6dvdj1wstSaU088jgygaBkwHcYMTZKSYAtU0LBOWBbgWhkJReakAudE1jNU5tuiH4vIFatz4KtjjpogkVOn3BtxShyAPsWd8D8SRDyk+H4LsMsBiM85QL8wNwqJ8bkgyo8V/lJN/bdd5Eh5c6HveI4ys0+1gaBvbWmQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=nicolas.frattaroli@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1763982473; s=zohomail; d=collabora.com; i=nicolas.frattaroli@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=7+Y/LyMk0RrNOFdGUfyDXTf7l2qJ7k0vXn6vVykaLc8=; b=AVmokdW+EbfVSbxse8mX8JqLaz73oLON4Ix1989B+b1JvAWx4APu8+U9BsER4k0j JRIJ1EUukJeQbhAIW7vtY41USUwALnigG3YDg3pP6vbhyXKgm9y+x+nOodTuzhqnwTS bfeZVLFjt02/L+A6PvQq2xPcbH6lrTv8C9GGOmFU= Received: by mx.zohomail.com with SMTPS id 1763982460325118.87585361846197; Mon, 24 Nov 2025 03:07:40 -0800 (PST) From: Nicolas Frattaroli Date: Mon, 24 Nov 2025 12:07:02 +0100 Subject: [PATCH v2 13/13] interconnect: mediatek: Aggregate bandwidth with saturating add Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251124-mt8196-dvfsrc-v2-13-d9c1334db9f3@collabora.com> References: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> In-Reply-To: <20251124-mt8196-dvfsrc-v2-0-d9c1334db9f3@collabora.com> To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno , Henry Chen , Georgi Djakov Cc: kernel@collabora.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-pm@vger.kernel.org, Nicolas Frattaroli X-Mailer: b4 0.14.3 By using a regular non-overflow-checking add, the MediaTek icc-emi driver will happy wrap at U32_MAX + 1 to 0. As it's common for the interconnect core to fill in INT_MAX values, this is not a hypothetical situation, but something that actually happens in regular use. This would be pretty disasterous if anything used this driver. Replace the addition with an overflow-checked addition from overflow.h, and saturate to U32_MAX if an overflow is detected. Fixes: b45293799f75 ("interconnect: mediatek: Add MediaTek MT8183/8195 EMI = Interconnect driver") Reviewed-by: AngeloGioacchino Del Regno Signed-off-by: Nicolas Frattaroli --- drivers/interconnect/mediatek/icc-emi.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/interconnect/mediatek/icc-emi.c b/drivers/interconnect= /mediatek/icc-emi.c index 182aa2b0623a..dfa3a9cd9399 100644 --- a/drivers/interconnect/mediatek/icc-emi.c +++ b/drivers/interconnect/mediatek/icc-emi.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include =20 @@ -22,7 +23,9 @@ static int mtk_emi_icc_aggregate(struct icc_node *node, u= 32 tag, u32 avg_bw, { struct mtk_icc_node *in =3D node->data; =20 - *agg_avg +=3D avg_bw; + if (check_add_overflow(*agg_avg, avg_bw, agg_avg)) + *agg_avg =3D U32_MAX; + *agg_peak =3D max_t(u32, *agg_peak, peak_bw); =20 in->sum_avg =3D *agg_avg; --=20 2.52.0