From nobody Tue Oct 7 08:13:06 2025 Received: from mx08-00178001.pphosted.com (mx08-00178001.pphosted.com [91.207.212.93]) (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 3FE142E9EBF; Fri, 11 Jul 2025 14:51:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.207.212.93 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245504; cv=none; b=J5Roc5RGMjptM1ZHvzEVQlKWezPO/cH+71vXqqVD4/aA1LzePmgsFRPvgsmfm/IELx4217dxD/zVWOXUgSJp3RxhrwYwDvnUV8vBoNRL0tL6W1BfWEUw58z8ga47rvZ4vrllIm0kz9QvVAV57Kh6Fg3ScQexAu/XwNDmMnRCx+U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245504; c=relaxed/simple; bh=Dq2ykfq63wn8VObJtf2Dtv3Y1KpLFKfxnczqmYre38w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=JOICdvCpRAjB9dedxhK/3t6mHCnLYl0LJ4stFIPjCMWO/6s17B97HT5x8kFDolZFSHPa/o9yUnivFvLp0qEWteQdgPRHYoY+EtEAI9u/sKzIA8UISV4SiC6M2uPLohoMKrDkvn8Fy2jT1ugQuXb51BS44kK1SS0Af2qIUCaHW1w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=zEfrgD58; arc=none smtp.client-ip=91.207.212.93 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="zEfrgD58" Received: from pps.filterd (m0369457.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56BEncdU022508; Fri, 11 Jul 2025 16:51:14 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=selector1; bh= 1S+/fxjBGM9OThOsnlJiBdnI+RCOnybmlz6yPJOrPUQ=; b=zEfrgD58iQjnGk67 auh5vjzFlbLNa57MXCDGAFyM7/PNPv/3Csz7zEAB8Gsl/Ptj+d5ojbTylESZCvOg lP3Oq0EJt9H+0P22p7pQDbiPDpkMWJKhqiQJLu8V8vZ2BOPRQtO2ZAw/qmhlHKn1 wK4A0DDZYA+H9YuHYj8ZKjLWWCIl+SM17Z5cyZ1rTMbSHaSotmpsnLDKi3ILkfFH 0r9vdOZDwqXD58xDKKISIXGVSk6kFjDjLk1FiNrKP0MPd3IaHWekwSppS7BgSCu0 Y6hv1RIDAr5UxQFUQIQB78dhijr+2si7MtgoMhQ6d9NgCWu89oU2B+NRgm7GTuFD U8IjPQ== Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 47qf0q4duu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 11 Jul 2025 16:51:13 +0200 (MEST) Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id C3E4C40052; Fri, 11 Jul 2025 16:49:54 +0200 (CEST) Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 18C93B4A8CD; Fri, 11 Jul 2025 16:49:13 +0200 (CEST) Received: from localhost (10.252.16.187) by SHFDAG1NODE2.st.com (10.75.129.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Fri, 11 Jul 2025 16:49:12 +0200 From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= Date: Fri, 11 Jul 2025 16:48:53 +0200 Subject: [PATCH v2 01/16] bus: firewall: move stm32_firewall header file in include folder 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: <20250711-ddrperfm-upstream-v2-1-cdece720348f@foss.st.com> References: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> In-Reply-To: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> To: Will Deacon , Mark Rutland , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Maxime Coquelin , Alexandre Torgue , Philipp Zabel , Jonathan Corbet , Gatien Chevallier , Michael Turquette , Stephen Boyd , Gabriel Fernandez , Krzysztof Kozlowski , Le Goffic CC: , , , , , , , =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= X-Mailer: b4 0.15-dev-7616d X-ClientProxiedBy: SHFCAS1NODE1.st.com (10.75.129.72) To SHFDAG1NODE2.st.com (10.75.129.70) X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-07-11_03,2025-07-09_01,2025-03-28_01 Other driver than rifsc and etzpc can implement firewall ops, such as rcc. In order for them to have access to the ops and type of this framework, we need to get the `stm32_firewall.h` file in the include/ folder. Signed-off-by: Cl=C3=A9ment Le Goffic --- drivers/bus/stm32_etzpc.c | 3 +-- drivers/bus/stm32_firewall.c | 3 +-- drivers/bus/stm32_rifsc.c | 3 +-- {drivers =3D> include/linux}/bus/stm32_firewall.h | 0 4 files changed, 3 insertions(+), 6 deletions(-) diff --git a/drivers/bus/stm32_etzpc.c b/drivers/bus/stm32_etzpc.c index 7fc0f16960be..4918a14e507e 100644 --- a/drivers/bus/stm32_etzpc.c +++ b/drivers/bus/stm32_etzpc.c @@ -5,6 +5,7 @@ =20 #include #include +#include #include #include #include @@ -16,8 +17,6 @@ #include #include =20 -#include "stm32_firewall.h" - /* * ETZPC registers */ diff --git a/drivers/bus/stm32_firewall.c b/drivers/bus/stm32_firewall.c index 2fc9761dadec..ef4988054b44 100644 --- a/drivers/bus/stm32_firewall.c +++ b/drivers/bus/stm32_firewall.c @@ -5,6 +5,7 @@ =20 #include #include +#include #include #include #include @@ -18,8 +19,6 @@ #include #include =20 -#include "stm32_firewall.h" - /* Corresponds to STM32_FIREWALL_MAX_EXTRA_ARGS + firewall ID */ #define STM32_FIREWALL_MAX_ARGS (STM32_FIREWALL_MAX_EXTRA_ARGS + 1) =20 diff --git a/drivers/bus/stm32_rifsc.c b/drivers/bus/stm32_rifsc.c index 4cf1b60014b7..643ddd0a5f54 100644 --- a/drivers/bus/stm32_rifsc.c +++ b/drivers/bus/stm32_rifsc.c @@ -5,6 +5,7 @@ =20 #include #include +#include #include #include #include @@ -16,8 +17,6 @@ #include #include =20 -#include "stm32_firewall.h" - /* * RIFSC offset register */ diff --git a/drivers/bus/stm32_firewall.h b/include/linux/bus/stm32_firewal= l.h similarity index 100% rename from drivers/bus/stm32_firewall.h rename to include/linux/bus/stm32_firewall.h --=20 2.43.0 From nobody Tue Oct 7 08:13:06 2025 Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [185.132.182.106]) (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 2937F2E92AD; Fri, 11 Jul 2025 14:52:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.132.182.106 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245553; cv=none; b=et5DDJIv0x5FGAfV6gUpzBSVNT7G8k5xC5m0PBj0syiTC2cA6XJAg2HB1jmUMoAIIwXWYGbqZaXDASUkYSedCK2sILurNrr6NGLg+E3YhxPhjzHhXQL8IEcf09SrItsf+jZi+28u9ywtvJQgA6XQMvCBSfmBh2R/bnWm8FLmSqg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245553; c=relaxed/simple; bh=2PIpfN3dZvXiQ9iIBgbBu5gRJSTkbuCQSySSFGDtB9c=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=Tk0Ue54xIwbifhoIsHv7TvcOQHM6DAd3R5klqpLAP3jDvPTWIo/7RV8Or/JhGDTLup7xW3oLCLdgZGq6j4kYSUMZdsGAbFn1tMOn85iCqVjd37G7EyfNruZUacEE/nRHbt54OxbRgk5Jt9CJ/VeH5zfqYUKuXdvbROn1Malgyfk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=DgtqeFb0; arc=none smtp.client-ip=185.132.182.106 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="DgtqeFb0" Received: from pps.filterd (m0288072.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56BCHMEZ027003; Fri, 11 Jul 2025 16:52:17 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=selector1; bh= L5U4iOIMzTLQcNGAWLcYUHl7amMuMgZWgZO8MaFVrQk=; b=DgtqeFb0weOrJedN RnVU8286JR+TYdgI2nOeoJVBc3Mac2I12x8bSzsJ2Xy05G/3tAkYbWq1ZvGk3zFi XeFf38dYsQLYjTnKmNjzFhsZ/8xUh3h9WQHTcy+5KjDIc/hjQWec3iQpRCdr+pe1 5lPUg1SwtGng6AdrHfx07jyy03zXqBCtKrH/gfdMgOKyPUlwuaYfKR4qCoqhuztX /W7cyzJ1gHtocVXdzCrdc9xiAth/vdN1i+pv9nFY1x14FM241OXyT0JSKRZ+Oppb o5JWZ/VTrr3Et+2MDj2AD/HTwkQsrKQLSThxV0XspaKukeiQ+8ghrDCSvITb1jZF n7ZC8Q== Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 47psfmyt7c-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 11 Jul 2025 16:52:16 +0200 (MEST) Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id C75EB40048; Fri, 11 Jul 2025 16:50:58 +0200 (CEST) Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 01070B4BE8B; Fri, 11 Jul 2025 16:49:14 +0200 (CEST) Received: from localhost (10.252.16.187) by SHFDAG1NODE2.st.com (10.75.129.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Fri, 11 Jul 2025 16:49:13 +0200 From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= Date: Fri, 11 Jul 2025 16:48:54 +0200 Subject: [PATCH v2 02/16] dt-bindings: stm32: stm32mp25: add `access-controller-cell` property 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: <20250711-ddrperfm-upstream-v2-2-cdece720348f@foss.st.com> References: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> In-Reply-To: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> To: Will Deacon , Mark Rutland , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Maxime Coquelin , Alexandre Torgue , Philipp Zabel , Jonathan Corbet , Gatien Chevallier , Michael Turquette , Stephen Boyd , Gabriel Fernandez , Krzysztof Kozlowski , Le Goffic CC: , , , , , , , =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= X-Mailer: b4 0.15-dev-7616d X-ClientProxiedBy: SHFCAS1NODE1.st.com (10.75.129.72) To SHFDAG1NODE2.st.com (10.75.129.70) X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-07-11_03,2025-07-09_01,2025-03-28_01 RCC is able to check the availability of a clock. Allow to query the RCC with a firewall ID. Signed-off-by: Cl=C3=A9ment Le Goffic --- Documentation/devicetree/bindings/clock/st,stm32mp25-rcc.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Documentation/devicetree/bindings/clock/st,stm32mp25-rcc.yaml = b/Documentation/devicetree/bindings/clock/st,stm32mp25-rcc.yaml index 88e52f10d1ec..4d471e3d89bc 100644 --- a/Documentation/devicetree/bindings/clock/st,stm32mp25-rcc.yaml +++ b/Documentation/devicetree/bindings/clock/st,stm32mp25-rcc.yaml @@ -31,6 +31,11 @@ properties: '#reset-cells': const: 1 =20 + '#access-controller-cells': + const: 1 + description: + Contains the firewall ID associated to the peripheral. + clocks: items: - description: CK_SCMI_HSE High Speed External oscillator (8 to 48 M= Hz) @@ -123,6 +128,7 @@ required: - reg - '#clock-cells' - '#reset-cells' + - '#access-controller-cells' - clocks =20 additionalProperties: false @@ -136,6 +142,7 @@ examples: reg =3D <0x44200000 0x10000>; #clock-cells =3D <1>; #reset-cells =3D <1>; + #access-controller-cells =3D <1>; clocks =3D <&scmi_clk CK_SCMI_HSE>, <&scmi_clk CK_SCMI_HSI>, <&scmi_clk CK_SCMI_MSI>, --=20 2.43.0 From nobody Tue Oct 7 08:13:06 2025 Received: from mx07-00178001.pphosted.com (mx08-00178001.pphosted.com [91.207.212.93]) (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 3FDA12E9EBB; Fri, 11 Jul 2025 14:51:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.207.212.93 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245504; cv=none; b=bgLd/U6TxLot1VDFyelUnEPDJKvUb+tDj34qzQ5GuuS9PsVOsvhAvAP2k1K24kqm2cXGRd2S5JtJjNm3REQGsST1QGcK5vioM2JguP9g/60dHok0+e2bOB/J2pHy1ata0cj8P3PdifJ6ypG0FS40DRttf4V7Z4WWRh/rcJWEUO0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245504; c=relaxed/simple; bh=zHL0/JrntZk6f9z9OaKUCRl5Ve/+xb8bifr4gesVLAc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=a1DzlAXlwi7ggjQSycCk8veOXjYQx9A0/q1epdCy0D0Gp5JPVLT2pJe1j5t/ydHEj3bpn4zNPA8fOQAr5HXB620rOC2pLKDTlQ2YeCvGwgXIoTz25SM4orClQqvw59T7CWQ1PDyA+E0ozSVSVn9KsVKCN8VF/D6k8JcOqGUUpAI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=u7DZO7tr; arc=none smtp.client-ip=91.207.212.93 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="u7DZO7tr" Received: from pps.filterd (m0046660.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56BEdBmp004956; Fri, 11 Jul 2025 16:51:13 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=selector1; bh= c84xGmzk0WDtYO8pxiXJLl1Oz2OVFtl3JU/pJXFAfdc=; b=u7DZO7trtCD/HxZr DyMkaBwMOG0vBJcMLSkdGeLG3hs+0MewWCBbSoV99OhTFVy6+ZuCh8J6/JR/49BI ZsJQx8q+fGVxigrytX4tCGX1ZXPbAVVEhdsD6hMgycSOEC4ya7HIlu/joAmMaZle Ja+jS6+T6JP+Jqkw7xr6ntV1Dj/3xg58Tjqnge4QeWNw60aEKUPrqRU9/79l8FTH T/XQiTl5KMH2qI2oFQ78QasPO/gds8kL0w8t65kWas7MSbiXIGElrhsTCG9YxTSS eB4yM9KNo2IL1JPObbnJlR59XswLyzFIJrp+Af/x4fVa2E/v9j5Eu9j+6OVAWQLR GOHAyw== Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 47ps6ay385-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 11 Jul 2025 16:51:13 +0200 (MEST) Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id 21E2B40055; Fri, 11 Jul 2025 16:49:55 +0200 (CEST) Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id E7C65B4B45D; Fri, 11 Jul 2025 16:49:14 +0200 (CEST) Received: from localhost (10.252.16.187) by SHFDAG1NODE2.st.com (10.75.129.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Fri, 11 Jul 2025 16:49:14 +0200 From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= Date: Fri, 11 Jul 2025 16:48:55 +0200 Subject: [PATCH v2 03/16] clk: stm32mp25: add firewall grant_access ops 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: <20250711-ddrperfm-upstream-v2-3-cdece720348f@foss.st.com> References: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> In-Reply-To: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> To: Will Deacon , Mark Rutland , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Maxime Coquelin , Alexandre Torgue , Philipp Zabel , Jonathan Corbet , Gatien Chevallier , Michael Turquette , Stephen Boyd , Gabriel Fernandez , Krzysztof Kozlowski , Le Goffic CC: , , , , , , , =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= X-Mailer: b4 0.15-dev-7616d X-ClientProxiedBy: SHFCAS1NODE1.st.com (10.75.129.72) To SHFDAG1NODE2.st.com (10.75.129.70) X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-07-11_03,2025-07-09_01,2025-03-28_01 On STM32MP25, the RCC peripheral manages the secure level of resources that are used by other devices such as clocks. Declare this peripheral as a firewall controller. Signed-off-by: Cl=C3=A9ment Le Goffic --- drivers/clk/stm32/clk-stm32mp25.c | 40 +++++++++++++++++++++++++++++++++++= +++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/drivers/clk/stm32/clk-stm32mp25.c b/drivers/clk/stm32/clk-stm3= 2mp25.c index 52f0e8a12926..af4bc06d703a 100644 --- a/drivers/clk/stm32/clk-stm32mp25.c +++ b/drivers/clk/stm32/clk-stm32mp25.c @@ -4,8 +4,10 @@ * Author: Gabriel Fernandez for STMicroel= ectronics. */ =20 +#include #include #include +#include #include #include =20 @@ -1602,6 +1604,11 @@ static int stm32_rcc_get_access(void __iomem *base, = u32 index) return 0; } =20 +static int stm32mp25_rcc_grant_access(struct stm32_firewall_controller *ct= rl, u32 firewall_id) +{ + return stm32_rcc_get_access(ctrl->mmio, firewall_id); +} + static int stm32mp25_check_security(struct device_node *np, void __iomem *= base, const struct clock_config *cfg) { @@ -1970,6 +1977,7 @@ MODULE_DEVICE_TABLE(of, stm32mp25_match_data); =20 static int stm32mp25_rcc_clocks_probe(struct platform_device *pdev) { + struct stm32_firewall_controller *rcc_controller; struct device *dev =3D &pdev->dev; void __iomem *base; int ret; @@ -1982,7 +1990,36 @@ static int stm32mp25_rcc_clocks_probe(struct platfor= m_device *pdev) if (ret) return ret; =20 - return stm32_rcc_init(dev, stm32mp25_match_data, base); + ret =3D stm32_rcc_init(dev, stm32mp25_match_data, base); + if (ret) + return ret; + + rcc_controller =3D devm_kzalloc(&pdev->dev, sizeof(*rcc_controller), GFP_= KERNEL); + if (!rcc_controller) + return -ENOMEM; + + rcc_controller->dev =3D dev; + rcc_controller->mmio =3D base; + rcc_controller->name =3D dev_driver_string(dev); + rcc_controller->type =3D STM32_PERIPHERAL_FIREWALL; + rcc_controller->grant_access =3D stm32mp25_rcc_grant_access; + + platform_set_drvdata(pdev, rcc_controller); + + ret =3D stm32_firewall_controller_register(rcc_controller); + if (ret) { + dev_err(dev, "Couldn't register as a firewall controller: %d\n", ret); + return ret; + } + + return 0; +} + +static void stm32mp25_rcc_clocks_remove(struct platform_device *pdev) +{ + struct stm32_firewall_controller *rcc_controller =3D platform_get_drvdata= (pdev); + + stm32_firewall_controller_unregister(rcc_controller); } =20 static struct platform_driver stm32mp25_rcc_clocks_driver =3D { @@ -1991,6 +2028,7 @@ static struct platform_driver stm32mp25_rcc_clocks_dr= iver =3D { .of_match_table =3D stm32mp25_match_data, }, .probe =3D stm32mp25_rcc_clocks_probe, + .remove =3D stm32mp25_rcc_clocks_remove, }; =20 static int __init stm32mp25_clocks_init(void) --=20 2.43.0 From nobody Tue Oct 7 08:13:06 2025 Received: from mx07-00178001.pphosted.com (mx08-00178001.pphosted.com [91.207.212.93]) (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 7DE9D2E9ECC; Fri, 11 Jul 2025 14:51:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.207.212.93 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245504; cv=none; b=OoX17o6nZVseLGbJ2VM+jgnpbz9ttsRuT0e6VRZzVwsJ8s8EOvyqHG2/dYkCycepMsBU4Y+SbKlYupSk15v8yBNZFsYMEC/lAKANoEQ/hnAIPNGlK7kYEcpKh/03aLWVsGIrjLY13dBYn9PnnqifER4u32i88DUvoxS0PCTEnGs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245504; c=relaxed/simple; bh=d5iWwZQBtscc9/XYMe8rkBSJD76rq7wf56xNPUB+T6Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=RaFztAuu/YyDAFqIaF7BT8OAg+PJ2aVMTL6t9HiqI9PpV2kUXjFVa6IiyHIbatYk1Mpvogr4AHj2y+yhw6N2IB4VcYzyPrnnNcyVXj6jYoBGHBZTnChAznJ5o41GfjTKkEclziCTPOtZMuQNTTs7JQ3ZrqTDx67ZxEgig9a1jNw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=sBXdgpfI; arc=none smtp.client-ip=91.207.212.93 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="sBXdgpfI" Received: from pps.filterd (m0046660.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56BDJ54k003739; Fri, 11 Jul 2025 16:51:13 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=selector1; bh= /Ngm9p3NQD6arEx7d73G9n3PIlBqe76QEjiMrucBWPs=; b=sBXdgpfIq7Z7Rht2 vDs6JavUyauCZrmqmmkBtitgbGmf8txf7RE7Ja0+owdt11CzJssz+J6DyksR9h2N 4hRUmcYPXw9pFOKtoiP94x7rc0AlDO+D9wRYGu0hr7reICqMnJRXu03602s7YOUd QpCYbW+JwxEv/rMUVkgWptWALQHAg3KJdDNIJ8lIR3i38qPnXWNJvoDSdyLk+hT3 LNyqRqFbZlcvdRle4yq2QYirF42sZSBk46IFxANrcxWt0F06o/3VSiuqRP01xwg2 nGtK8IVd8BMUWbelzWaaeko9GhzwuNOEFMKprKbY/H42hoZ5AQgbw/kVECHQObBs gcJ1Tg== Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 47ps6ay384-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 11 Jul 2025 16:51:13 +0200 (MEST) Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id 3428F40056; Fri, 11 Jul 2025 16:49:55 +0200 (CEST) Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id CFD8FB4BEA0; Fri, 11 Jul 2025 16:49:15 +0200 (CEST) Received: from localhost (10.252.16.187) by SHFDAG1NODE2.st.com (10.75.129.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Fri, 11 Jul 2025 16:49:15 +0200 From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= Date: Fri, 11 Jul 2025 16:48:56 +0200 Subject: [PATCH v2 04/16] arm64: dts: st: set rcc as an access-controller 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: <20250711-ddrperfm-upstream-v2-4-cdece720348f@foss.st.com> References: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> In-Reply-To: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> To: Will Deacon , Mark Rutland , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Maxime Coquelin , Alexandre Torgue , Philipp Zabel , Jonathan Corbet , Gatien Chevallier , Michael Turquette , Stephen Boyd , Gabriel Fernandez , Krzysztof Kozlowski , Le Goffic CC: , , , , , , , =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= X-Mailer: b4 0.15-dev-7616d X-ClientProxiedBy: SHFCAS1NODE1.st.com (10.75.129.72) To SHFDAG1NODE2.st.com (10.75.129.70) X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-07-11_03,2025-07-09_01,2025-03-28_01 RCC now implements firewall access ops to check the access to resources. Allow client nodes to query the RCC with one firewall ID. Signed-off-by: Cl=C3=A9ment Le Goffic --- arch/arm64/boot/dts/st/stm32mp251.dtsi | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm64/boot/dts/st/stm32mp251.dtsi b/arch/arm64/boot/dts/s= t/stm32mp251.dtsi index 8d87865850a7..0683c2d5cb6f 100644 --- a/arch/arm64/boot/dts/st/stm32mp251.dtsi +++ b/arch/arm64/boot/dts/st/stm32mp251.dtsi @@ -1153,6 +1153,7 @@ rcc: clock-controller@44200000 { reg =3D <0x44200000 0x10000>; #clock-cells =3D <1>; #reset-cells =3D <1>; + #access-controller-cells =3D <1>; clocks =3D <&scmi_clk CK_SCMI_HSE>, <&scmi_clk CK_SCMI_HSI>, <&scmi_clk CK_SCMI_MSI>, --=20 2.43.0 From nobody Tue Oct 7 08:13:06 2025 Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [185.132.182.106]) (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 98BD418E750; Fri, 11 Jul 2025 15:17:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.132.182.106 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752247033; cv=none; b=hTNphh6HeqtO7gO3VES8JBYYsnYy1EXTBneqdlpEH8VGSuhxCBenBIfOEhh1oacG5avIzN0N0VIioQdYwpdCUKwvcZda3YrzIVWQvXOpVo/kFfp55l5OyR3JNKl62P0QFttYAvht0q33DMvwPIXacR/N7tjBj7XOGezv3OnvaZQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752247033; c=relaxed/simple; bh=0tBuDJRr6ws7oI3s/5XtL5Gs+dqOdkD8ubSy6zGZnyk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=mDvF+pSUSFtrZjhsgNOWvLmp7q+clVXXyVewyDV/ibWMvZkkID6dGIKQb6eFbBIFaRK5Zd84pUCrqCss1DKboa4NgRyaGe29kpEjcfKf5CIrumjuOgOPvZQpOvfcxYiYPYSWBSHE0HXnRGaeYSrA/9nm/tZfslkmHjC3+MIA0VU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=RDp44xPO; arc=none smtp.client-ip=185.132.182.106 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="RDp44xPO" Received: from pps.filterd (m0288072.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56BCHMEO027003; Fri, 11 Jul 2025 16:51:14 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=selector1; bh= EUpYSzydPpFuztaOxz5jpPB1qeEDE88vI+GDfXR2JDs=; b=RDp44xPOWxJZY40z xycNsFnCPzbrvds0kW9WNedRnbvjMu9DdMo7HZCA/Oe/2ZUB0ifhTB6KiNEKtu5y QgMOGjUzgKsMiaiMrOj9wHTiGH261jFmYznzez73rHJZj4kVSvaBuIe9laRuyact 6C6ODWSg+Nvq4qXwhs+sn8iRp6MyAXT06QfQK6op+dEXqRGrI0nuetmuNQSd3m31 UY4sZpJ6siIErRzz8xE0r1xQpJPKVDYQ/iPfGEBl3A7lW+GiHhuVWJbKhdo2GYPZ p7r0q53Vk4dhRqvNPXhgLG1bQGkpYGhlM6yXcfU+hyH/stzsfp10TSDISScdJ1+O PXQqhQ== Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 47psfmyt2p-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 11 Jul 2025 16:51:13 +0200 (MEST) Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id 22BCD40058; Fri, 11 Jul 2025 16:49:56 +0200 (CEST) Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id C2E19B4BEA4; Fri, 11 Jul 2025 16:49:16 +0200 (CEST) Received: from localhost (10.252.16.187) by SHFDAG1NODE2.st.com (10.75.129.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Fri, 11 Jul 2025 16:49:16 +0200 From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= Date: Fri, 11 Jul 2025 16:48:57 +0200 Subject: [PATCH v2 05/16] dt-bindings: memory: add jedec,ddr[3-4]-channel binding 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: <20250711-ddrperfm-upstream-v2-5-cdece720348f@foss.st.com> References: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> In-Reply-To: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> To: Will Deacon , Mark Rutland , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Maxime Coquelin , Alexandre Torgue , Philipp Zabel , Jonathan Corbet , Gatien Chevallier , Michael Turquette , Stephen Boyd , Gabriel Fernandez , Krzysztof Kozlowski , Le Goffic CC: , , , , , , , =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= X-Mailer: b4 0.15-dev-7616d X-ClientProxiedBy: SHFCAS1NODE1.st.com (10.75.129.72) To SHFDAG1NODE2.st.com (10.75.129.70) X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-07-11_03,2025-07-09_01,2025-03-28_01 Introduce as per jedec,lpddrX-channel binding, jdec,ddr[3-4]-channel binding. Signed-off-by: Cl=C3=A9ment Le Goffic --- .../memory-controllers/ddr/jedec,ddr-channel.yaml | 53 ++++++++++++++++++= ++++ 1 file changed, 53 insertions(+) diff --git a/Documentation/devicetree/bindings/memory-controllers/ddr/jedec= ,ddr-channel.yaml b/Documentation/devicetree/bindings/memory-controllers/dd= r/jedec,ddr-channel.yaml new file mode 100644 index 000000000000..31daa22bcd4a --- /dev/null +++ b/Documentation/devicetree/bindings/memory-controllers/ddr/jedec,ddr-ch= annel.yaml @@ -0,0 +1,53 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/memory-controllers/ddr/jedec,ddr-channe= l.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: DDR channel with chip/rank topology description + +description: + A DDR channel is a logical grouping of memory chips that are connected + to a host system. The main purpose of this node is to describe the + overall DDR topology of the system, including the amount of individual + DDR chips. + +maintainers: + - Cl=C3=A9ment Le Goffic + +properties: + compatible: + enum: + - jedec,ddr3-channel + - jedec,ddr4-channel + + io-width: + description: + The number of DQ pins in the channel. If this number is different + from (a multiple of) the io-width of the DDR chip, that means that + multiple instances of that type of chip are wired in parallel on this + channel (with the channel's DQ pins split up between the different + chips, and the CA, CS, etc. pins of the different chips all shorted + together). This means that the total physical memory controlled by a + channel is equal to the sum of the densities of each rank on the + connected DDR chip, times the io-width of the channel divided by + the io-width of the DDR chip. + enum: + - 8 + - 16 + - 32 + - 64 + - 128 + +required: + - compatible + - io-width + +additionalProperties: false + +examples: + - | + ddr_channel: ddr3-channel { + compatible =3D "jedec,ddr3-channel"; + io-width =3D <16>; + }; --=20 2.43.0 From nobody Tue Oct 7 08:13:06 2025 Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [185.132.182.106]) (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 A5C992EA723; Fri, 11 Jul 2025 14:52:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.132.182.106 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245561; cv=none; b=BvF2mLegBZ46Q7DayhuFZRxersx6iKHyRIxbwGHF5OmAwDzrdnwkhGi7Z9QDCcO6/+SA/uKiU/QcdqEL5RWWrybdoHuHyPaQCPPbr5yrRDoEyKHW8ZGbu0AorsvWo3MfW/kDq4lQ8JDDbNkCbdCPcQzNfPQzGTowlzezBj1yO6s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245561; c=relaxed/simple; bh=0JcaeD9w/FTs2PWX7m7HjSrDlSOM+VNnaYfnzeFfOng=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=ZzEDEMKklBf2n7tAOu21XN/PmYowOYIXk1rLObrmmHT5iVy42yRp8JJnQUB4tpXzPDfL/kkKvlvEOPU+hJSSgMvOqL8Wa3p7HIMpET8b56G/BpQRdbMK0crQ8seUI/xYkLrauB1q0BNqoX5HeCxqNtPYZah8DjxCHv3PkiMIkMo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=5RHmSitr; arc=none smtp.client-ip=185.132.182.106 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="5RHmSitr" Received: from pps.filterd (m0288072.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56BCHMEb027003; Fri, 11 Jul 2025 16:52:22 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=selector1; bh= wK2t8o4Ru+Aw4zGxAwIHncImCvb/E/ivuTsfYZBxdwA=; b=5RHmSitrBnhukdhh q7/eznGP898yHbFX0qGQqxonqP70e0jSoai//vpkHhZ1bOa5kgP0D8hKBhlt0w4x NqH5Rv0fhnhFKvr3muQ7QgJT0+CfpjGJqNOeOyto2AwYPfff6vb+mDHP7ieWAPGQ GUyHc3lq5Np37qk0H+Zb3d1tlFoFf20qmszfj6ro15tSBztKByPfSZI/08MAaIn+ rtzAiCawN9x2lWIKj8N5hSKXHAJKGkkRrS5sdyETjgDbq3xKteu2WmU2yibw32CL ZzLIYwDkwEzJR19CQmEsikGfy/DsoWcBFmJW3+/LbOlqRn4epR2/WWqoXCs97r4V +sBvmw== Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 47psfmyt7w-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 11 Jul 2025 16:52:22 +0200 (MEST) Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id 687B540051; Fri, 11 Jul 2025 16:51:03 +0200 (CEST) Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id ADC02B52165; Fri, 11 Jul 2025 16:49:17 +0200 (CEST) Received: from localhost (10.252.16.187) by SHFDAG1NODE2.st.com (10.75.129.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Fri, 11 Jul 2025 16:49:17 +0200 From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= Date: Fri, 11 Jul 2025 16:48:58 +0200 Subject: [PATCH v2 06/16] arm64: dts: st: add LPDDR channel to stm32mp257f-dk board 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: <20250711-ddrperfm-upstream-v2-6-cdece720348f@foss.st.com> References: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> In-Reply-To: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> To: Will Deacon , Mark Rutland , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Maxime Coquelin , Alexandre Torgue , Philipp Zabel , Jonathan Corbet , Gatien Chevallier , Michael Turquette , Stephen Boyd , Gabriel Fernandez , Krzysztof Kozlowski , Le Goffic CC: , , , , , , , =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= X-Mailer: b4 0.15-dev-7616d X-ClientProxiedBy: SHFCAS1NODE1.st.com (10.75.129.72) To SHFDAG1NODE2.st.com (10.75.129.70) X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-07-11_03,2025-07-09_01,2025-03-28_01 Add 32bits LPDDR4 channel to the stm32mp257f-dk board. Signed-off-by: Cl=C3=A9ment Le Goffic --- arch/arm64/boot/dts/st/stm32mp257f-dk.dts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/arm64/boot/dts/st/stm32mp257f-dk.dts b/arch/arm64/boot/dt= s/st/stm32mp257f-dk.dts index a278a1e3ce03..a97b41f14ecc 100644 --- a/arch/arm64/boot/dts/st/stm32mp257f-dk.dts +++ b/arch/arm64/boot/dts/st/stm32mp257f-dk.dts @@ -54,6 +54,13 @@ led-blue { }; }; =20 + lpddr_channel: lpddr4-channel { + #address-cells =3D <1>; + #size-cells =3D <0>; + compatible =3D "jedec,lpddr4-channel"; + io-width =3D <32>; + }; + memory@80000000 { device_type =3D "memory"; reg =3D <0x0 0x80000000 0x1 0x0>; --=20 2.43.0 From nobody Tue Oct 7 08:13:06 2025 Received: from mx07-00178001.pphosted.com (mx08-00178001.pphosted.com [91.207.212.93]) (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 EE3302EAB66; Fri, 11 Jul 2025 14:52:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.207.212.93 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245578; cv=none; b=rABOa43yikRtq3j+S4B9BNJ6Vf4A6jm6VhwyybdS8lmJ25gGnCUqzzeh5bEDCDx8e4wUS+BCTNDP+nM6asfCvyHGaZ88FmfgrG7U5VmTj8HP96/AeJXMhZtogvThNgZ6RYWQ9fMim2VTmwbVI6YU1hIxsPRHNHSj8jncD36rKy4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245578; c=relaxed/simple; bh=bmfBpQxjkhv04INVjijdDWJKCT4N9bvLd3TgXWMCUPM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=OPQLefwZvwWAdwkh2PKmcffpYqhmnKuSb17Ybv7XoyL/SDDSM9f9UDh4bVcmns9lXHmol5owYqU8cntVdnBx/JBYJcoGcX2OVJ5wY5ZaZ2JVwHRa7QDrUfJIAyhwZ9FXE0V1I3KGrUQgLL5E0oIO8JY1rI/ZNugTOh9FWgbAacc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=hPMdaCB2; arc=none smtp.client-ip=91.207.212.93 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="hPMdaCB2" Received: from pps.filterd (m0046660.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56BEZGn6031011; Fri, 11 Jul 2025 16:52:34 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=selector1; bh= eWmIYjT8DzGwwh3O1kQbawehJSurPuvocYs+RzgumjY=; b=hPMdaCB2joT+Q0sv 0aV9y4Fhe8EvtnqfFVl3ER4yAYOsUz2Q4rkIvoAKzPV+0m1nOPQQJqoBDMaKmn6N CkT/gB9Yxp8zqzGn/VGGLzpba2F5iu3NurxI8qQSMAQp7wyjdD41LUfVY9OFxx7N 4u5q/9gIfEcEmmG+f3iZysdF8xggMnGj6oF/Awz6nMFux1FKcDU4hs5Uz3r2WDGj lFnnYjbiqGeqkjIjCwP7IJBslfNOkghxZyHQhIKeJ1uebKJjMEVoQ4UrLMt+gbuc /g8iDuiOsfAM+hFGtroI5w22VJY1DVC7E7aZCspxcETXPrLwytBknqjdwKi6EKGo e5IC1g== Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 47ps6ay3f8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 11 Jul 2025 16:52:34 +0200 (MEST) Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id D15B540045; Fri, 11 Jul 2025 16:51:10 +0200 (CEST) Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 9F165B4BE8F; Fri, 11 Jul 2025 16:49:18 +0200 (CEST) Received: from localhost (10.252.16.187) by SHFDAG1NODE2.st.com (10.75.129.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Fri, 11 Jul 2025 16:49:18 +0200 From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= Date: Fri, 11 Jul 2025 16:48:59 +0200 Subject: [PATCH v2 07/16] arm64: dts: st: add DDR channel to stm32mp257f-ev1 board 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: <20250711-ddrperfm-upstream-v2-7-cdece720348f@foss.st.com> References: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> In-Reply-To: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> To: Will Deacon , Mark Rutland , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Maxime Coquelin , Alexandre Torgue , Philipp Zabel , Jonathan Corbet , Gatien Chevallier , Michael Turquette , Stephen Boyd , Gabriel Fernandez , Krzysztof Kozlowski , Le Goffic CC: , , , , , , , =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= X-Mailer: b4 0.15-dev-7616d X-ClientProxiedBy: SHFCAS1NODE1.st.com (10.75.129.72) To SHFDAG1NODE2.st.com (10.75.129.70) X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-07-11_03,2025-07-09_01,2025-03-28_01 Add 32bits DDR4 channel to the stm32mp257f-dk board. Signed-off-by: Cl=C3=A9ment Le Goffic --- arch/arm64/boot/dts/st/stm32mp257f-ev1.dts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/arm64/boot/dts/st/stm32mp257f-ev1.dts b/arch/arm64/boot/d= ts/st/stm32mp257f-ev1.dts index 2f561ad40665..f987d86d350f 100644 --- a/arch/arm64/boot/dts/st/stm32mp257f-ev1.dts +++ b/arch/arm64/boot/dts/st/stm32mp257f-ev1.dts @@ -41,6 +41,11 @@ pad_clk: pad-clk { }; }; =20 + ddr_channel: ddr4-channel { + compatible =3D "jedec,ddr4-channel"; + io-width =3D <32>; + }; + imx335_2v9: regulator-2v9 { compatible =3D "regulator-fixed"; regulator-name =3D "imx335-avdd"; --=20 2.43.0 From nobody Tue Oct 7 08:13:06 2025 Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [185.132.182.106]) (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 7489F2E92AD; Fri, 11 Jul 2025 14:52:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.132.182.106 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245559; cv=none; b=tEFiVi23bCdPElF/kp618EMfCKkvUTyrpHEvUf3R3TWra+rWFuQSGRyPcOdlCnzcG4bx1qaOHX7n6pDnWmI533t29nI2tX4UJlrqEchbpntKIc9jWxuJ7idSzD/YUhqL+3IMHdYzZz0vHT2NSYAQjm6vnr11zfpgudnMcLauQ4Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245559; c=relaxed/simple; bh=ZLo3mNVzNbVvAP4/5XoYEPKh9ndtjxqdnpGe9hsHCnY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=nvWmML+1wLjkqQmShdAJfcvmJL/49tGt5Yb0gTAbcTPiCHE5HzEf8cy6ZO1jJevwGr8bIhhAuwFV8ADI7mTVVuosVkoW4TM/wB6rBDEcmFWWioLhJnO6AIUhvTK+xRPkRk2U/np1HZiVNaAbLUhQSo+C4mrGDJA2NxB6l9uw2Q0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=1IsJsXu9; arc=none smtp.client-ip=185.132.182.106 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="1IsJsXu9" Received: from pps.filterd (m0288072.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56BChEqB006517; Fri, 11 Jul 2025 16:52:22 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=selector1; bh= Bc/v1axb6utVOQjnTP/Qv3nkmKL0VE0rqaXdGeFNbUU=; b=1IsJsXu9DcR4m3aR SNzkoYkvHSyhhJHIvJeZ0VLT8Twer2llLePGtWpuzXvGtXPCCcFPkqJ2vIbvFDbR 1AOp6UMm+RoVIDrBk7MYYlavG1EWdGL8NA7P28m/tvEg0zmn+27/S3weo7SmVoZi /8J+H3c8IyyL8AzSk+w4QnYml9JCyxyqpAt+eBUP7CMKF3t5pe2JiFK4HxMEjywW 3uVrsWNsNWX03P/xJIYGNU8RD1JCLHAW1XOou0PKpg8mfM/XkOs6onxeoJSNZnyY MXml9+4RKOw878wD82leu0DUio3DPKPju3KL9fEWndmebboqEEMpQnlX3WmyixGV aJn9fw== Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 47psfmyt7v-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 11 Jul 2025 16:52:22 +0200 (MEST) Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id 71BD440049; Fri, 11 Jul 2025 16:51:02 +0200 (CEST) Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 913D4B52715; Fri, 11 Jul 2025 16:49:19 +0200 (CEST) Received: from localhost (10.252.16.187) by SHFDAG1NODE2.st.com (10.75.129.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Fri, 11 Jul 2025 16:49:19 +0200 From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= Date: Fri, 11 Jul 2025 16:49:00 +0200 Subject: [PATCH v2 08/16] dt-bindings: perf: stm32: introduce DDRPERFM dt-bindings 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: <20250711-ddrperfm-upstream-v2-8-cdece720348f@foss.st.com> References: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> In-Reply-To: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> To: Will Deacon , Mark Rutland , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Maxime Coquelin , Alexandre Torgue , Philipp Zabel , Jonathan Corbet , Gatien Chevallier , Michael Turquette , Stephen Boyd , Gabriel Fernandez , Krzysztof Kozlowski , Le Goffic CC: , , , , , , , =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= X-Mailer: b4 0.15-dev-7616d X-ClientProxiedBy: SHFCAS1NODE1.st.com (10.75.129.72) To SHFDAG1NODE2.st.com (10.75.129.70) X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-07-11_03,2025-07-09_01,2025-03-28_01 DDRPERFM is the DDR Performance Monitor embedded in STM32MPU SoC. It allows to monitor DDR events that come from the DDR Controller such as read or write events. Signed-off-by: Cl=C3=A9ment Le Goffic --- .../devicetree/bindings/perf/st,stm32-ddr-pmu.yaml | 87 ++++++++++++++++++= ++++ 1 file changed, 87 insertions(+) diff --git a/Documentation/devicetree/bindings/perf/st,stm32-ddr-pmu.yaml b= /Documentation/devicetree/bindings/perf/st,stm32-ddr-pmu.yaml new file mode 100644 index 000000000000..3c123a4a0e80 --- /dev/null +++ b/Documentation/devicetree/bindings/perf/st,stm32-ddr-pmu.yaml @@ -0,0 +1,87 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/perf/st,stm32-ddr-pmu.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +maintainers: + - Cl=C3=A9ment Le Goffic + +title: STMicroelectronics STM32 DDR Performance Monitor (DDRPERFM) + +properties: + compatible: + enum: + - st,stm32mp131-ddr-pmu + - st,stm32mp151-ddr-pmu + - st,stm32mp251-ddr-pmu + + reg: + maxItems: 1 + + clocks: + maxItems: 1 + + resets: + maxItems: 1 + + access-controllers: + minItems: 1 + maxItems: 2 + + memory-channel: + description: + The memory channel this DDRPERFM is attached to. + $ref: /schemas/types.yaml#/definitions/phandle + +required: + - compatible + - reg + +allOf: + - if: + properties: + compatible: + contains: + const: st,stm32mp131-ddr-pmu + then: + required: + - clocks + - resets + + - if: + properties: + compatible: + contains: + const: st,stm32mp251-ddr-pmu + then: + required: + - access-controllers + - memory-channel + +additionalProperties: false + +examples: + - | + #include + #include + + perf@5a007000 { + compatible =3D "st,stm32mp151-ddr-pmu"; + reg =3D <0x5a007000 0x400>; + clocks =3D <&rcc DDRPERFM>; + resets =3D <&rcc DDRPERFM_R>; + }; + + - | + ddr_channel: ddr3-channel { + compatible =3D "jedec,ddr3-channel"; + io-width =3D <16>; + }; + + perf@48041000 { + compatible =3D "st,stm32mp251-ddr-pmu"; + reg =3D <0x48041000 0x400>; + access-controllers =3D <&rcc 104>; + memory-channel =3D <&ddr_channel>; + }; --=20 2.43.0 From nobody Tue Oct 7 08:13:06 2025 Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [185.132.182.106]) (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 ABF082EA161; Fri, 11 Jul 2025 14:52:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.132.182.106 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245558; cv=none; b=E1cAhjhQ3F3BPKsqP13WfxQrbiOF6yzcyIsGE/SmeVzOeqvTR4xwr7H02MjUpuxNEDb9URg2isxp3ZcAnjmiT8IR8d0E90j/AN/7dQ2HAFmO+eWx79D59cGO+OuLnE1bM7o6b7VDCFb4jgC1695ceB4ye/jBMwDR6KqCJ9om3Go= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245558; c=relaxed/simple; bh=0g7Oa6HLOOIADil1bOYDKnzqhMKw2wgYFARAXRIugtY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=mPG5rcS+0NexoVJVEUxP4yK56GXX2chp2fLJbEmclPwYKOcD8E6NIHcuM6p6vaoYQeIbeuv/SsTbMeqXrUprroDjRE/V4GOJb9UcspMwvaJ+mRZWU/oThHQpVSkakxBzQcouciF/uhRWNZv9ne0fzCKXoY3/sIpSEGSg9nn9FyU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=d+jY9HOw; arc=none smtp.client-ip=185.132.182.106 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="d+jY9HOw" Received: from pps.filterd (m0369458.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56BEWU4V022237; Fri, 11 Jul 2025 16:52:17 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=selector1; bh= BknNkD07mHknRQC5q03gNC2Tm94NXg+uovaY99NGBhA=; b=d+jY9HOwOpBlif4H GhCScqF7mowYfOA3WOr/Lljrej2k1h6dkq/qAsLe8rTHYsFmBuMX9OiStaKc8dzX /RHzD8DPUE7wq+UmFQn4gsRuvNbh8+SZfAIoptsJG+73sTldQAqOZGz5nRQz8opk usTGZootyGXe6YUsaerqwmjIity8JW5MDyvq46CcDG1fFKlJ60H4V27wYXKlKca2 0li2BrFRExvC2EoltCpqKYgaR8hgPDSncTskywLo4lYtt2vxV8UM+p5I215GhEp+ izWwVd9vDAjeuB/XPvWsj7/QaPuWCOjtIGl3Um6SIzj5HinB2mtZYqq6/odep/qX 1a4u3A== Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 47qdm6csej-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 11 Jul 2025 16:52:17 +0200 (MEST) Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id 99F264004F; Fri, 11 Jul 2025 16:51:02 +0200 (CEST) Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 8E6F6B5155A; Fri, 11 Jul 2025 16:49:20 +0200 (CEST) Received: from localhost (10.252.16.187) by SHFDAG1NODE2.st.com (10.75.129.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Fri, 11 Jul 2025 16:49:20 +0200 From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= Date: Fri, 11 Jul 2025 16:49:01 +0200 Subject: [PATCH v2 09/16] perf: stm32: introduce DDRPERFM driver 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: <20250711-ddrperfm-upstream-v2-9-cdece720348f@foss.st.com> References: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> In-Reply-To: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> To: Will Deacon , Mark Rutland , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Maxime Coquelin , Alexandre Torgue , Philipp Zabel , Jonathan Corbet , Gatien Chevallier , Michael Turquette , Stephen Boyd , Gabriel Fernandez , Krzysztof Kozlowski , Le Goffic CC: , , , , , , , =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= X-Mailer: b4 0.15-dev-7616d X-ClientProxiedBy: SHFCAS1NODE1.st.com (10.75.129.72) To SHFDAG1NODE2.st.com (10.75.129.70) X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-07-11_03,2025-07-09_01,2025-03-28_01 Introduce the driver for the DDR Performance Monitor available on STM32MPU SoC. On STM32MP2 platforms, the DDRPERFM allows to monitor up to 8 DDR events that come from the DDR Controller such as read or write events. On STM32MP1 platforms, the DDRPERFM cannot monitor any event on any counter, there is a notion of set of events. Events from different sets cannot be monitored at the same time. The first chosen event selects the set. The set is coded in the first two bytes of the config value which is on 4 bytes. On STM32MP25x series, the DDRPERFM clock is shared with the DDR controller and may be secured by bootloaders. Access controllers allow to check access to a resource. Use the access controller defined in the devicetree to know about the access to the DDRPERFM clock. Signed-off-by: Cl=C3=A9ment Le Goffic --- drivers/perf/Kconfig | 11 + drivers/perf/Makefile | 1 + drivers/perf/stm32_ddr_pmu.c | 910 +++++++++++++++++++++++++++++++++++++++= ++++ 3 files changed, 922 insertions(+) diff --git a/drivers/perf/Kconfig b/drivers/perf/Kconfig index 278c929dc87a..5118535134ee 100644 --- a/drivers/perf/Kconfig +++ b/drivers/perf/Kconfig @@ -198,6 +198,17 @@ config QCOM_L3_PMU Adds the L3 cache PMU into the perf events subsystem for monitoring L3 cache events. =20 +config STM32_DDR_PMU + tristate "STM32 DDR PMU" + depends on ARCH_STM32 || COMPILE_TEST + default m + help + Provides support for the DDR performance monitor on STM32MPU platforms. + The monitor provides counters for memory related events. + It allows developers to analyze and optimize DDR performance. + Enabling this feature is useful for performance tuning and debugging me= mory + subsystem issues on supported hardware. + config THUNDERX2_PMU tristate "Cavium ThunderX2 SoC PMU UNCORE" depends on ARCH_THUNDER2 || COMPILE_TEST diff --git a/drivers/perf/Makefile b/drivers/perf/Makefile index de71d2574857..7f83b50feb71 100644 --- a/drivers/perf/Makefile +++ b/drivers/perf/Makefile @@ -20,6 +20,7 @@ obj-$(CONFIG_RISCV_PMU) +=3D riscv_pmu.o obj-$(CONFIG_RISCV_PMU_LEGACY) +=3D riscv_pmu_legacy.o obj-$(CONFIG_RISCV_PMU_SBI) +=3D riscv_pmu_sbi.o obj-$(CONFIG_STARFIVE_STARLINK_PMU) +=3D starfive_starlink_pmu.o +obj-$(CONFIG_STM32_DDR_PMU) +=3D stm32_ddr_pmu.o obj-$(CONFIG_THUNDERX2_PMU) +=3D thunderx2_pmu.o obj-$(CONFIG_XGENE_PMU) +=3D xgene_pmu.o obj-$(CONFIG_ARM_SPE_PMU) +=3D arm_spe_pmu.o diff --git a/drivers/perf/stm32_ddr_pmu.c b/drivers/perf/stm32_ddr_pmu.c new file mode 100644 index 000000000000..1be5bbe12978 --- /dev/null +++ b/drivers/perf/stm32_ddr_pmu.c @@ -0,0 +1,910 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (C) 2025, STMicroelectronics - All Rights Reserved + * Author: Cl=C3=A9ment Le Goffic for STMic= roelectronics. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#define DRIVER_NAME "stm32_ddr_pmu" + +/* + * The PMU is able to freeze all counters and generate an interrupt when t= here + * is a counter overflow. But, relying on this means that we lose all the + * events that occur between the freeze and the interrupt handler executio= n. + * So we use a polling mechanism to avoid this lost of information. + * The fastest counter can overflow in ~7s @600MHz (that is the maximum DDR + * frequency supported on STM32MP257), so we poll in 3.5s intervals to ens= ure + * we don't reach this limit. + */ +#define POLL_MS 3500 + +#define DDRPERFM_CTRL 0x000 +#define DDRPERFM_CFG 0x004 +#define DDRPERFM_STATUS 0x008 +#define DDRPERFM_CLR 0x00C +#define DDRPERFM_TCNT 0x020 +#define DDRPERFM_EVCNT(X) (0x030 + 8 * (X)) + +#define DDRPERFM_MP2_CFG0 0x010 +#define DDRPERFM_MP2_CFG1 0x014 +#define DDRPERFM_MP2_CFG5 0x024 +#define DDRPERFM_MP2_DRAMINF 0x028 +#define DDRPERFM_MP2_EVCNT(X) (0x040 + 4 * (X)) +#define DDRPERFM_MP2_TCNT 0x060 +#define DDRPERFM_MP2_STATUS 0x080 + +#define MP1_STATUS_BUSY BIT(16) +#define MP2_STATUS_BUSY BIT(31) + +#define CTRL_START BIT(0) +#define CTRL_STOP BIT(1) + +#define CFG_SEL_MSK GENMASK(17, 16) +#define CFG_SEL_SHIFT 16 +#define CFG_EN_MSK GENMASK(3, 0) + +#define MP1_CLR_CNT GENMASK(3, 0) +#define MP1_CLR_TIME BIT(31) +#define MP2_CLR_CNT GENMASK(7, 0) +#define MP2_CLR_TIME BIT(8) + +/* 4 event counters plus 1 dedicated to time */ +#define MP1_CNT_NB (4 + 1) +/* Index of the time dedicated counter */ +#define MP1_TIME_CNT_IDX 4 + +/* 8 event counters plus 1 dedicated to time */ +#define MP2_CNT_NB (8 + 1) +/* Index of the time dedicated counter */ +#define MP2_TIME_CNT_IDX 8 +/* 4 event counters per register */ +#define MP2_CNT_SEL_PER_REG 4 + +/* Arbitrary value used to identify a time event */ +#define TIME_CNT 64 + +struct stm32_ddr_pmu_reg { + unsigned int reg; + u32 mask; +}; + +struct stm32_ddr_cnt { + int idx; + struct perf_event *evt; + struct list_head cnt_list; +}; + +struct stm32_ddr_pmu_regspec { + const struct stm32_ddr_pmu_reg stop; + const struct stm32_ddr_pmu_reg start; + const struct stm32_ddr_pmu_reg enable; + const struct stm32_ddr_pmu_reg status; + const struct stm32_ddr_pmu_reg clear_cnt; + const struct stm32_ddr_pmu_reg clear_time; + const struct stm32_ddr_pmu_reg cfg; + const struct stm32_ddr_pmu_reg cfg0; + const struct stm32_ddr_pmu_reg cfg1; + const struct stm32_ddr_pmu_reg dram_inf; + const struct stm32_ddr_pmu_reg counter_time; + const struct stm32_ddr_pmu_reg counter_evt[]; +}; + +struct stm32_ddr_pmu { + struct pmu pmu; + void __iomem *membase; + struct device *dev; + struct clk *clk; + const struct stm32_ddr_pmu_cfg *cfg; + struct hrtimer hrtimer; + ktime_t poll_period; + int selected_set; + u32 dram_type; + struct list_head counters[]; +}; + +struct stm32_ddr_pmu_cfg { + const struct stm32_ddr_pmu_regspec *regs; + const struct attribute_group **attribute; + u32 counters_nb; + u32 evt_counters_nb; + u32 time_cnt_idx; + struct stm32_ddr_cnt * (*get_counter)(struct stm32_ddr_pmu *p, struct per= f_event *e); +}; + +#define EVENT_NUMBER(group, index) (((group) << 8) | (index)) +#define GROUP_VALUE(event_number) ((event_number) >> 8) +#define EVENT_INDEX(event_number) ((event_number) & 0xFF) + +/* MP1 ddrperfm events */ +enum stm32_ddr_pmu_events_mp1 { + PERF_OP_IS_RD =3D EVENT_NUMBER(0, 0), + PERF_OP_IS_WR =3D EVENT_NUMBER(0, 1), + PERF_OP_IS_ACTIVATE =3D EVENT_NUMBER(0, 2), + CTL_IDLE =3D EVENT_NUMBER(0, 3), + PERF_HPR_REQ_WITH_NO_CREDIT =3D EVENT_NUMBER(1, 0), + PERF_LPR_REQ_WITH_NO_CREDIT =3D EVENT_NUMBER(1, 1), + CACTIVE_DDRC =3D EVENT_NUMBER(1, 3), + PERF_OP_IS_ENTER_POWERDOWN =3D EVENT_NUMBER(2, 0), + PERF_OP_IS_REFRESH =3D EVENT_NUMBER(2, 1), + PERF_SELFRESH_MODE =3D EVENT_NUMBER(2, 2), + DFI_LP_REQ =3D EVENT_NUMBER(2, 3), + PERF_HPR_XACT_WHEN_CRITICAL =3D EVENT_NUMBER(3, 0), + PERF_LPR_XACT_WHEN_CRITICAL =3D EVENT_NUMBER(3, 1), + PERF_WR_XACT_WHEN_CRITICAL =3D EVENT_NUMBER(3, 2), + DFI_LP_REQ_SCND =3D EVENT_NUMBER(3, 3), +}; + +/* MP2 ddrperfm events */ +enum stm32_ddr_pmu_events_mp2 { + DFI_IS_ACT =3D EVENT_NUMBER(0, 0), + DFI_IS_PREPB =3D EVENT_NUMBER(0, 1), + DFI_IS_PREAB =3D EVENT_NUMBER(0, 2), + DFI_IS_RD =3D EVENT_NUMBER(0, 3), + DFI_IS_RDA =3D EVENT_NUMBER(0, 4), + DFI_IS_WR =3D EVENT_NUMBER(0, 6), + DFI_IS_WRA =3D EVENT_NUMBER(0, 7), + DFI_IS_MWR =3D EVENT_NUMBER(0, 9), + DFI_IS_MWRA =3D EVENT_NUMBER(0, 10), + DFI_IS_MRW =3D EVENT_NUMBER(0, 12), + DFI_IS_MRR =3D EVENT_NUMBER(0, 13), + DFI_IS_REFPB =3D EVENT_NUMBER(0, 14), + DFI_IS_REFAB =3D EVENT_NUMBER(0, 15), + DFI_IS_MPC =3D EVENT_NUMBER(0, 16), + PERF_OP_IS_ACT =3D EVENT_NUMBER(0, 32), + PERF_OP_IS_RD_MP2 =3D EVENT_NUMBER(0, 33), + PERF_OP_IS_WR_MP2 =3D EVENT_NUMBER(0, 34), + PERF_OP_IS_MWR =3D EVENT_NUMBER(0, 35), + PERF_OP_IS_REF =3D EVENT_NUMBER(0, 36), + PERF_OP_IS_CRIT_REF =3D EVENT_NUMBER(0, 37), + PERF_OP_IS_SPEC_REF =3D EVENT_NUMBER(0, 38), + PERF_OP_IS_ZQCAL =3D EVENT_NUMBER(0, 39), + PERF_OP_IS_ENTER_POWDN =3D EVENT_NUMBER(0, 40), + PERF_OP_IS_ENTER_SELFREF =3D EVENT_NUMBER(0, 41), + PERF_OP_IS_PRE =3D EVENT_NUMBER(0, 42), + PERF_OP_IS_PRE_FOR_RDWR =3D EVENT_NUMBER(0, 43), + PERF_OP_IS_PRE_FOR_OTHERS =3D EVENT_NUMBER(0, 44), + PERF_OP_IS_RD_ACTIVATE =3D EVENT_NUMBER(0, 45), + PERF_HPR_REQ_WITH_NOCREDIT =3D EVENT_NUMBER(0, 48), + PERF_LPR_REQ_WITH_NOCREDIT =3D EVENT_NUMBER(0, 49), + PERF_HPR_XACT_WHEN_CRITICAL_MP2 =3D EVENT_NUMBER(0, 50), + PERF_LPR_XACT_WHEN_CRITICAL_MP2 =3D EVENT_NUMBER(0, 51), + PERF_WR_XACT_WHEN_CRITICAL_MP2 =3D EVENT_NUMBER(0, 52), + PERF_RDWR_TRANSITIONS =3D EVENT_NUMBER(0, 53), + PERF_WAR_HAZARD =3D EVENT_NUMBER(0, 54), + PERF_RAW_HAZARD =3D EVENT_NUMBER(0, 55), + PERF_WAW_HAZARD =3D EVENT_NUMBER(0, 56), + PERF_RANK =3D EVENT_NUMBER(0, 58), + PERF_READ_BYPASS =3D EVENT_NUMBER(0, 59), + PERF_ACT_BYPASS =3D EVENT_NUMBER(0, 60), + PERF_WINDOW_LIMIT_REACHED_RD =3D EVENT_NUMBER(0, 61), + PERF_WINDOW_LIMIT_REACHED_WR =3D EVENT_NUMBER(0, 62), + NO_EVENT =3D EVENT_NUMBER(0, 63), +}; + +enum stm32_ddr_pmu_memory_type { + STM32_DDR_PMU_LPDDR4, + STM32_DDR_PMU_LPDDR3, + STM32_DDR_PMU_DDR4, + STM32_DDR_PMU_DDR3 +}; + +static struct stm32_ddr_pmu *to_stm32_ddr_pmu(struct pmu *p) +{ + return container_of(p, struct stm32_ddr_pmu, pmu); +} + +static struct stm32_ddr_pmu *hrtimer_to_stm32_ddr_pmu(struct hrtimer *h) +{ + return container_of(h, struct stm32_ddr_pmu, hrtimer); +} + +static void stm32_ddr_start_counters(struct stm32_ddr_pmu *pmu) +{ + const struct stm32_ddr_pmu_regspec *r =3D pmu->cfg->regs; + + writel_relaxed(r->start.mask, pmu->membase + r->start.reg); +} + +static void stm32_ddr_stop_counters(struct stm32_ddr_pmu *pmu) +{ + const struct stm32_ddr_pmu_regspec *r =3D pmu->cfg->regs; + + writel_relaxed(r->stop.mask, pmu->membase + r->stop.reg); +} + +static void stm32_ddr_clear_time_counter(struct stm32_ddr_pmu *pmu) +{ + const struct stm32_ddr_pmu_regspec *r =3D pmu->cfg->regs; + + writel_relaxed(r->clear_time.mask, pmu->membase + r->clear_time.reg); +} + +static void stm32_ddr_clear_event_counter(struct stm32_ddr_pmu *pmu, struc= t stm32_ddr_cnt *counter) +{ + const struct stm32_ddr_pmu_regspec *r =3D pmu->cfg->regs; + + writel_relaxed(r->clear_cnt.mask & BIT(counter->idx), pmu->membase + r->c= lear_cnt.reg); +} + +static void stm32_ddr_clear_counter(struct stm32_ddr_pmu *pmu, struct stm3= 2_ddr_cnt *counter) +{ + const struct stm32_ddr_pmu_regspec *r =3D pmu->cfg->regs; + u32 status =3D readl_relaxed(pmu->membase + r->status.reg); + + if (counter->idx =3D=3D pmu->cfg->time_cnt_idx) + stm32_ddr_clear_time_counter(pmu); + else + stm32_ddr_clear_event_counter(pmu, counter); + + if (status & r->status.mask) + dev_err(pmu->dev, "Failed to clear counter %i because the PMU is busy\n", + counter->idx); +} + +static void stm32_ddr_counter_enable(struct stm32_ddr_pmu *pmu, struct stm= 32_ddr_cnt *counter) +{ + const struct stm32_ddr_pmu_regspec *r =3D pmu->cfg->regs; + u32 val =3D readl_relaxed(pmu->membase + r->enable.reg); + + val |=3D BIT(counter->idx); + writel_relaxed(val, pmu->membase + r->enable.reg); +} + +static void stm32_ddr_counter_disable(struct stm32_ddr_pmu *pmu, struct st= m32_ddr_cnt *counter) +{ + const struct stm32_ddr_pmu_regspec *r =3D pmu->cfg->regs; + u32 val =3D readl_relaxed(pmu->membase + r->enable.reg); + + val &=3D ~BIT(counter->idx); + writel_relaxed(val, pmu->membase + r->enable.reg); +} + +static int stm32_ddr_sel_evnt(struct stm32_ddr_pmu *pmu, struct stm32_ddr_= cnt *counter) +{ + const struct stm32_ddr_pmu_regspec *r =3D pmu->cfg->regs; + u32 cnt_sel_val; + + u32 group_val =3D GROUP_VALUE(counter->evt->attr.config); + u32 evt_val =3D EVENT_INDEX(counter->evt->attr.config); + + if (pmu->selected_set !=3D -1 && pmu->selected_set !=3D group_val) { + dev_err(pmu->dev, "Selected events are from different set\n"); + return -EINVAL; + } + pmu->selected_set =3D group_val; + + if (pmu->cfg->regs->cfg.reg) { + cnt_sel_val =3D readl_relaxed(pmu->membase + r->cfg.reg); + cnt_sel_val &=3D ~CFG_SEL_MSK; + cnt_sel_val |=3D (CFG_SEL_MSK & (group_val << CFG_SEL_SHIFT)); + writel_relaxed(cnt_sel_val, pmu->membase + r->cfg.reg); + + return 0; + } + + /* We assume cfg0 and cfg1 are filled in the match data */ + u32 cnt_idx =3D counter->idx; + u32 cnt_sel_evt_reg =3D r->cfg0.reg; + + if (!(cnt_idx < MP2_CNT_SEL_PER_REG)) { + cnt_sel_evt_reg =3D r->cfg1.reg; + cnt_idx -=3D MP2_CNT_SEL_PER_REG; + } + + cnt_sel_val =3D readl_relaxed(pmu->membase + cnt_sel_evt_reg); + cnt_sel_val &=3D ~GENMASK(8 * cnt_idx + 7, 8 * cnt_idx); + cnt_sel_val |=3D evt_val << (8 * cnt_idx); + + writel_relaxed(cnt_sel_val, pmu->membase + cnt_sel_evt_reg); + + return 0; +} + +static struct stm32_ddr_cnt *stm32_ddr_pmu_get_event_counter_mp1(struct st= m32_ddr_pmu *pmu, + struct perf_event *event) +{ + u32 config =3D event->attr.config; + u32 event_idx =3D EVENT_INDEX(config); + struct stm32_ddr_cnt *cnt; + + cnt =3D kzalloc(sizeof(*cnt), GFP_KERNEL); + if (!cnt) + return ERR_PTR(-ENOMEM); + + cnt->evt =3D event; + cnt->idx =3D event_idx; + event->pmu_private =3D cnt; + list_add(&cnt->cnt_list, &pmu->counters[event_idx]); + + return cnt; +} + +static struct stm32_ddr_cnt *stm32_ddr_pmu_get_event_counter_mp2(struct st= m32_ddr_pmu *pmu, + struct perf_event *event) +{ + struct stm32_ddr_cnt *cnt; + int idx =3D -1; + + /* Loop on all the counters except TIME_CNT_IDX */ + for (int i =3D 0; i < pmu->cfg->evt_counters_nb; i++) { + u64 config; + + if (list_empty(&pmu->counters[i])) { + idx =3D i; + continue; + } + config =3D list_first_entry(&pmu->counters[i], struct stm32_ddr_cnt, + cnt_list)->evt->attr.config; + if (config =3D=3D event->attr.config) { + idx =3D i; + break; + } + } + + if (idx =3D=3D -1) + return ERR_PTR(-ENOENT); + + cnt =3D kzalloc(sizeof(*cnt), GFP_KERNEL); + if (!cnt) + return ERR_PTR(-ENOMEM); + + cnt->evt =3D event; + cnt->idx =3D idx; + event->pmu_private =3D cnt; + + list_add(&cnt->cnt_list, &pmu->counters[idx]); + + return cnt; +} + +static inline struct stm32_ddr_cnt *stm32_get_event_counter(struct stm32_d= dr_pmu *pmu, + struct perf_event *event) +{ + return pmu->cfg->get_counter(pmu, event); +} + +static int stm32_ddr_pmu_get_counter(struct stm32_ddr_pmu *pmu, struct per= f_event *event) +{ + u32 time_cnt_idx =3D pmu->cfg->time_cnt_idx; + u32 config =3D event->attr.config; + struct stm32_ddr_cnt *cnt; + + if (!pmu || !event) + return -EINVAL; + + pmu->selected_set =3D GROUP_VALUE(config); + + if (config =3D=3D TIME_CNT) { + cnt =3D kzalloc(sizeof(*cnt), GFP_KERNEL); + if (!cnt) + return -ENOMEM; + + cnt->evt =3D event; + cnt->idx =3D time_cnt_idx; + event->pmu_private =3D cnt; + list_add(&cnt->cnt_list, &pmu->counters[time_cnt_idx]); + + return 0; + } + + cnt =3D stm32_get_event_counter(pmu, event); + if (IS_ERR(cnt)) + return PTR_ERR(cnt); + + if (list_count_nodes(&cnt->cnt_list) =3D=3D 1) { + stm32_ddr_stop_counters(pmu); + stm32_ddr_sel_evnt(pmu, cnt); + stm32_ddr_counter_enable(pmu, cnt); + stm32_ddr_start_counters(pmu); + } + + return 0; +} + +static void stm32_ddr_pmu_free_counter(struct stm32_ddr_pmu *pmu, + struct stm32_ddr_cnt *counter) +{ + size_t count =3D list_count_nodes(&counter->cnt_list); + + if (counter->evt->attr.config !=3D TIME_CNT && count =3D=3D 1) + stm32_ddr_counter_disable(pmu, counter); + + list_del(&counter->cnt_list); + kfree(counter); +} + +static void stm32_ddr_pmu_event_update_list(struct stm32_ddr_pmu *pmu, str= uct list_head *list) +{ + struct stm32_ddr_cnt *counter =3D list_first_entry(list, struct stm32_ddr= _cnt, cnt_list); + const struct stm32_ddr_pmu_regspec *r =3D pmu->cfg->regs; + u32 val; + + if (counter->evt->attr.config !=3D TIME_CNT) + val =3D readl_relaxed(pmu->membase + r->counter_evt[counter->idx].reg); + else + val =3D readl_relaxed(pmu->membase + r->counter_time.reg); + + stm32_ddr_clear_counter(pmu, counter); + + list_for_each_entry(counter, list, cnt_list) + local64_add(val, &counter->evt->count); +} + +static void stm32_ddr_pmu_event_read(struct perf_event *event) +{ + struct stm32_ddr_pmu *pmu =3D to_stm32_ddr_pmu(event->pmu); + struct stm32_ddr_cnt *cnt =3D event->pmu_private; + + hrtimer_start(&pmu->hrtimer, pmu->poll_period, HRTIMER_MODE_REL_PINNED); + + stm32_ddr_stop_counters(pmu); + + stm32_ddr_pmu_event_update_list(pmu, &pmu->counters[cnt->idx]); + + stm32_ddr_start_counters(pmu); +} + +static void stm32_ddr_pmu_event_start(struct perf_event *event, int flags) +{ + struct stm32_ddr_pmu *pmu =3D to_stm32_ddr_pmu(event->pmu); + struct stm32_ddr_cnt *counter =3D event->pmu_private; + struct hw_perf_event *hw =3D &event->hw; + + if (WARN_ON_ONCE(!(hw->state & PERF_HES_STOPPED))) + return; + + if (flags & PERF_EF_RELOAD) + WARN_ON_ONCE(!(hw->state & PERF_HES_UPTODATE)); + + stm32_ddr_stop_counters(pmu); + + if (list_count_nodes(&counter->cnt_list) =3D=3D 1) + stm32_ddr_clear_counter(pmu, counter); + else + stm32_ddr_pmu_event_update_list(pmu, &pmu->counters[counter->idx]); + + stm32_ddr_start_counters(pmu); + local64_set(&hw->prev_count, 0); + hw->state =3D 0; +} + +static void stm32_ddr_pmu_event_stop(struct perf_event *event, int flags) +{ + struct hw_perf_event *hw =3D &event->hw; + + if (WARN_ON_ONCE(hw->state & PERF_HES_STOPPED)) + return; + + hw->state |=3D PERF_HES_STOPPED; + + if (flags & PERF_EF_UPDATE) { + stm32_ddr_pmu_event_read(event); + hw->state |=3D PERF_HES_UPTODATE; + } +} + +static int stm32_ddr_pmu_event_add(struct perf_event *event, int flags) +{ + struct stm32_ddr_pmu *pmu =3D to_stm32_ddr_pmu(event->pmu); + int ret; + + clk_enable(pmu->clk); + + hrtimer_start(&pmu->hrtimer, pmu->poll_period, HRTIMER_MODE_REL_PINNED); + + ret =3D stm32_ddr_pmu_get_counter(pmu, event); + if (ret) + return ret; + + event->hw.state =3D PERF_HES_STOPPED | PERF_HES_UPTODATE; + + if (flags & PERF_EF_START) + stm32_ddr_pmu_event_start(event, flags); + + return 0; +} + +static void stm32_ddr_pmu_event_del(struct perf_event *event, int flags) +{ + struct stm32_ddr_pmu *pmu =3D to_stm32_ddr_pmu(event->pmu); + struct stm32_ddr_cnt *counter =3D event->pmu_private; + bool events =3D true; + + stm32_ddr_pmu_event_stop(event, PERF_EF_UPDATE); + + stm32_ddr_pmu_free_counter(pmu, counter); + + for (int i =3D 0; i < pmu->cfg->counters_nb; i++) + events =3D !list_empty(&pmu->counters[i]); + + /* If there is activity nothing to do */ + if (events) + return; + + hrtimer_cancel(&pmu->hrtimer); + stm32_ddr_stop_counters(pmu); + + pmu->selected_set =3D -1; + + clk_disable(pmu->clk); +} + +static int stm32_ddr_pmu_event_init(struct perf_event *event) +{ + if (event->attr.type !=3D event->pmu->type) + return -ENOENT; + + if (is_sampling_event(event) || event->attach_state & PERF_ATTACH_TASK) + return -EINVAL; + + return 0; +} + +static enum hrtimer_restart stm32_ddr_pmu_poll(struct hrtimer *hrtimer) +{ + struct stm32_ddr_pmu *pmu =3D hrtimer_to_stm32_ddr_pmu(hrtimer); + + stm32_ddr_stop_counters(pmu); + + for (int i =3D 0; i < MP2_CNT_NB; i++) + if (!list_empty(&pmu->counters[i])) + stm32_ddr_pmu_event_update_list(pmu, &pmu->counters[i]); + + if (list_empty(&pmu->counters[pmu->cfg->time_cnt_idx])) + stm32_ddr_clear_time_counter(pmu); + + stm32_ddr_start_counters(pmu); + + hrtimer_forward_now(hrtimer, pmu->poll_period); + + return HRTIMER_RESTART; +} + +static ssize_t stm32_ddr_pmu_sysfs_show(struct device *dev, struct device_= attribute *attr, + char *buf) +{ + struct perf_pmu_events_attr *pmu_attr; + + pmu_attr =3D container_of(attr, struct perf_pmu_events_attr, attr); + + return sysfs_emit(buf, "event=3D0x%02llx\n", pmu_attr->id); +} + +static int stm32_ddr_pmu_get_memory_type(struct stm32_ddr_pmu *pmu) +{ + struct platform_device *pdev =3D to_platform_device(pmu->dev); + struct device_node *memchan; + + memchan =3D of_parse_phandle(pdev->dev.of_node, "memory-channel", 0); + if (!memchan) + return dev_err_probe(&pdev->dev, -EINVAL, + "Missing device-tree property 'memory-channel'\n"); + + if (of_device_is_compatible(memchan, "jedec,lpddr4-channel")) + pmu->dram_type =3D STM32_DDR_PMU_LPDDR4; + else if (of_device_is_compatible(memchan, "jedec,lpddr3-channel")) + pmu->dram_type =3D STM32_DDR_PMU_LPDDR3; + else if (of_device_is_compatible(memchan, "jedec,ddr4-channel")) + pmu->dram_type =3D STM32_DDR_PMU_DDR4; + else if (of_device_is_compatible(memchan, "jedec,ddr3-channel")) + pmu->dram_type =3D STM32_DDR_PMU_DDR3; + else + return dev_err_probe(&pdev->dev, -EINVAL, "Unsupported memory channel ty= pe\n"); + + if (pmu->dram_type =3D=3D STM32_DDR_PMU_LPDDR3) + dev_warn(&pdev->dev, + "LPDDR3 supported by DDRPERFM but not supported by DDRCTRL/DDRPHY\n"); + + return 0; +} + +#define STM32_DDR_PMU_EVENT_ATTR(_name, _id) \ + PMU_EVENT_ATTR_ID(_name, stm32_ddr_pmu_sysfs_show, _id) + +static struct attribute *stm32_ddr_pmu_events_attrs_mp[] =3D { + STM32_DDR_PMU_EVENT_ATTR(perf_op_is_rd, PERF_OP_IS_RD), + STM32_DDR_PMU_EVENT_ATTR(perf_op_is_wr, PERF_OP_IS_WR), + STM32_DDR_PMU_EVENT_ATTR(perf_op_is_activate, PERF_OP_IS_ACTIVATE), + STM32_DDR_PMU_EVENT_ATTR(ctl_idle, CTL_IDLE), + STM32_DDR_PMU_EVENT_ATTR(perf_hpr_req_with_no_credit, PERF_HPR_REQ_WITH_N= O_CREDIT), + STM32_DDR_PMU_EVENT_ATTR(perf_lpr_req_with_no_credit, PERF_LPR_REQ_WITH_N= O_CREDIT), + STM32_DDR_PMU_EVENT_ATTR(cactive_ddrc, CACTIVE_DDRC), + STM32_DDR_PMU_EVENT_ATTR(perf_op_is_enter_powerdown, PERF_OP_IS_ENTER_POW= ERDOWN), + STM32_DDR_PMU_EVENT_ATTR(perf_op_is_refresh, PERF_OP_IS_REFRESH), + STM32_DDR_PMU_EVENT_ATTR(perf_selfresh_mode, PERF_SELFRESH_MODE), + STM32_DDR_PMU_EVENT_ATTR(dfi_lp_req, DFI_LP_REQ), + STM32_DDR_PMU_EVENT_ATTR(perf_hpr_xact_when_critical, PERF_HPR_XACT_WHEN_= CRITICAL), + STM32_DDR_PMU_EVENT_ATTR(perf_lpr_xact_when_critical, PERF_LPR_XACT_WHEN_= CRITICAL), + STM32_DDR_PMU_EVENT_ATTR(perf_wr_xact_when_critical, PERF_WR_XACT_WHEN_CR= ITICAL), + STM32_DDR_PMU_EVENT_ATTR(dfi_lp_req_cpy, DFI_LP_REQ), /* Suffixed '_cpy'= to allow the + * choice between sets 2 and 3 + */ + STM32_DDR_PMU_EVENT_ATTR(time_cnt, TIME_CNT), + NULL, +}; + +static struct attribute_group stm32_ddr_pmu_events_attrs_group_mp =3D { + .name =3D "events", + .attrs =3D stm32_ddr_pmu_events_attrs_mp, +}; + +static struct attribute *stm32_ddr_pmu_events_attrs_mp2[] =3D { + STM32_DDR_PMU_EVENT_ATTR(dfi_is_act, DFI_IS_ACT), + STM32_DDR_PMU_EVENT_ATTR(dfi_is_prepb, DFI_IS_PREPB), + STM32_DDR_PMU_EVENT_ATTR(dfi_is_preab, DFI_IS_PREAB), + STM32_DDR_PMU_EVENT_ATTR(dfi_is_rd, DFI_IS_RD), + STM32_DDR_PMU_EVENT_ATTR(dfi_is_rda, DFI_IS_RDA), + STM32_DDR_PMU_EVENT_ATTR(dfi_is_wr, DFI_IS_WR), + STM32_DDR_PMU_EVENT_ATTR(dfi_is_wra, DFI_IS_WRA), + STM32_DDR_PMU_EVENT_ATTR(dfi_is_mwr, DFI_IS_MWR), + STM32_DDR_PMU_EVENT_ATTR(dfi_is_mwra, DFI_IS_MWRA), + STM32_DDR_PMU_EVENT_ATTR(dfi_is_mrw, DFI_IS_MRW), + STM32_DDR_PMU_EVENT_ATTR(dfi_is_mrr, DFI_IS_MRR), + STM32_DDR_PMU_EVENT_ATTR(dfi_is_refpb, DFI_IS_REFPB), + STM32_DDR_PMU_EVENT_ATTR(dfi_is_refab, DFI_IS_REFAB), + STM32_DDR_PMU_EVENT_ATTR(dfi_is_mpc, DFI_IS_MPC), + STM32_DDR_PMU_EVENT_ATTR(perf_op_is_act, PERF_OP_IS_ACT), + STM32_DDR_PMU_EVENT_ATTR(perf_op_is_rd, PERF_OP_IS_RD), + STM32_DDR_PMU_EVENT_ATTR(perf_op_is_wr, PERF_OP_IS_WR), + STM32_DDR_PMU_EVENT_ATTR(perf_op_is_mwr, PERF_OP_IS_MWR), + STM32_DDR_PMU_EVENT_ATTR(perf_op_is_ref, PERF_OP_IS_REF), + STM32_DDR_PMU_EVENT_ATTR(perf_op_is_crit_ref, PERF_OP_IS_CRIT_REF), + STM32_DDR_PMU_EVENT_ATTR(perf_op_is_spec_ref, PERF_OP_IS_SPEC_REF), + STM32_DDR_PMU_EVENT_ATTR(perf_op_is_zqcal, PERF_OP_IS_ZQCAL), + STM32_DDR_PMU_EVENT_ATTR(perf_op_is_enter_powdn, PERF_OP_IS_ENTER_POWDN), + STM32_DDR_PMU_EVENT_ATTR(perf_op_is_enter_selfref, PERF_OP_IS_ENTER_SELFR= EF), + STM32_DDR_PMU_EVENT_ATTR(perf_op_is_pre, PERF_OP_IS_PRE), + STM32_DDR_PMU_EVENT_ATTR(perf_op_is_pre_for_rdwr, PERF_OP_IS_PRE_FOR_RDWR= ), + STM32_DDR_PMU_EVENT_ATTR(perf_op_is_pre_for_others, PERF_OP_IS_PRE_FOR_OT= HERS), + STM32_DDR_PMU_EVENT_ATTR(perf_op_is_rd_activate, PERF_OP_IS_RD_ACTIVATE), + STM32_DDR_PMU_EVENT_ATTR(perf_hpr_req_with_nocredit, PERF_HPR_REQ_WITH_NO= CREDIT), + STM32_DDR_PMU_EVENT_ATTR(perf_lpr_req_with_nocredit, PERF_LPR_REQ_WITH_NO= CREDIT), + STM32_DDR_PMU_EVENT_ATTR(perf_hpr_xact_when_critical, PERF_HPR_XACT_WHEN_= CRITICAL), + STM32_DDR_PMU_EVENT_ATTR(perf_lpr_xact_when_critical, PERF_LPR_XACT_WHEN_= CRITICAL), + STM32_DDR_PMU_EVENT_ATTR(perf_wr_xact_when_critical, PERF_WR_XACT_WHEN_CR= ITICAL), + STM32_DDR_PMU_EVENT_ATTR(perf_rdwr_transitions, PERF_RDWR_TRANSITIONS), + STM32_DDR_PMU_EVENT_ATTR(perf_war_hazard, PERF_WAR_HAZARD), + STM32_DDR_PMU_EVENT_ATTR(perf_raw_hazard, PERF_RAW_HAZARD), + STM32_DDR_PMU_EVENT_ATTR(perf_waw_hazard, PERF_WAW_HAZARD), + STM32_DDR_PMU_EVENT_ATTR(perf_rank, PERF_RANK), + STM32_DDR_PMU_EVENT_ATTR(perf_read_bypass, PERF_READ_BYPASS), + STM32_DDR_PMU_EVENT_ATTR(perf_act_bypass, PERF_ACT_BYPASS), + STM32_DDR_PMU_EVENT_ATTR(perf_window_limit_reached_rd, PERF_WINDOW_LIMIT_= REACHED_RD), + STM32_DDR_PMU_EVENT_ATTR(perf_window_limit_reached_wr, PERF_WINDOW_LIMIT_= REACHED_WR), + STM32_DDR_PMU_EVENT_ATTR(time_cnt, TIME_CNT), + NULL +}; + +static struct attribute_group stm32_ddr_pmu_events_attrs_group_mp2 =3D { + .name =3D "events", + .attrs =3D stm32_ddr_pmu_events_attrs_mp2, +}; + +PMU_FORMAT_ATTR(event, "config:0-8"); + +static struct attribute *stm32_ddr_pmu_format_attrs[] =3D { + &format_attr_event.attr, + NULL, +}; + +static const struct attribute_group stm32_ddr_pmu_format_attr_group =3D { + .name =3D "format", + .attrs =3D stm32_ddr_pmu_format_attrs, +}; + +static const struct attribute_group *stm32_ddr_pmu_attr_groups_mp1[] =3D { + &stm32_ddr_pmu_events_attrs_group_mp, + &stm32_ddr_pmu_format_attr_group, + NULL, +}; + +static const struct attribute_group *stm32_ddr_pmu_attr_groups_mp2[] =3D { + &stm32_ddr_pmu_events_attrs_group_mp2, + &stm32_ddr_pmu_format_attr_group, + NULL, +}; + +static int stm32_ddr_pmu_device_probe(struct platform_device *pdev) +{ + struct stm32_firewall firewall; + struct stm32_ddr_pmu *pmu; + struct reset_control *rst; + struct resource *res; + int ret; + + pmu =3D devm_kzalloc(&pdev->dev, struct_size(pmu, counters, MP2_CNT_NB), = GFP_KERNEL); + if (!pmu) + return -ENOMEM; + + platform_set_drvdata(pdev, pmu); + pmu->dev =3D &pdev->dev; + + pmu->cfg =3D device_get_match_data(&pdev->dev); + + pmu->membase =3D devm_platform_get_and_ioremap_resource(pdev, 0, &res); + if (IS_ERR(pmu->membase)) + return PTR_ERR(pmu->membase); + + if (of_property_present(pmu->dev->of_node, "access-controllers")) { + ret =3D stm32_firewall_get_firewall(pmu->dev->of_node, &firewall, 1); + if (ret) + return dev_err_probe(pmu->dev, ret, "Failed to get firewall\n"); + ret =3D stm32_firewall_grant_access_by_id(&firewall, firewall.firewall_i= d); + if (ret) + return dev_err_probe(pmu->dev, ret, "Failed to grant access\n"); + } + + pmu->clk =3D devm_clk_get_optional_prepared(pmu->dev, NULL); + if (IS_ERR(pmu->clk)) + return dev_err_probe(pmu->dev, PTR_ERR(pmu->clk), "Failed to get prepare= clock\n"); + + clk_enable(pmu->clk); + + rst =3D devm_reset_control_get_optional_exclusive(&pdev->dev, NULL); + if (IS_ERR(rst)) { + clk_disable_unprepare(pmu->clk); + return dev_err_probe(&pdev->dev, PTR_ERR(rst), "Failed to get reset\n"); + } + + reset_control_assert(rst); + reset_control_deassert(rst); + + pmu->poll_period =3D ms_to_ktime(POLL_MS); + hrtimer_setup(&pmu->hrtimer, stm32_ddr_pmu_poll, CLOCK_MONOTONIC, HRTIMER= _MODE_REL); + + for (int i =3D 0; i < MP2_CNT_NB; i++) + INIT_LIST_HEAD(&pmu->counters[i]); + + pmu->selected_set =3D -1; + + pmu->pmu =3D (struct pmu) { + .task_ctx_nr =3D perf_invalid_context, + .start =3D stm32_ddr_pmu_event_start, + .stop =3D stm32_ddr_pmu_event_stop, + .add =3D stm32_ddr_pmu_event_add, + .del =3D stm32_ddr_pmu_event_del, + .read =3D stm32_ddr_pmu_event_read, + .event_init =3D stm32_ddr_pmu_event_init, + .attr_groups =3D pmu->cfg->attribute, + .module =3D THIS_MODULE, + }; + + ret =3D perf_pmu_register(&pmu->pmu, DRIVER_NAME, -1); + if (ret) { + clk_disable_unprepare(pmu->clk); + return dev_err_probe(&pdev->dev, ret, + "Couldn't register DDRPERFM driver as a PMU\n"); + } + + if (pmu->cfg->regs->dram_inf.reg) { + ret =3D stm32_ddr_pmu_get_memory_type(pmu); + if (ret) { + perf_pmu_unregister(&pmu->pmu); + clk_disable_unprepare(pmu->clk); + return dev_err_probe(&pdev->dev, ret, "Failed to get memory type\n"); + } + + writel_relaxed(pmu->dram_type, pmu->membase + pmu->cfg->regs->dram_inf.r= eg); + } + + clk_disable(pmu->clk); + + return 0; +} + +static void stm32_ddr_pmu_device_remove(struct platform_device *pdev) +{ + struct stm32_ddr_pmu *stm32_ddr_pmu =3D platform_get_drvdata(pdev); + + perf_pmu_unregister(&stm32_ddr_pmu->pmu); +} + +static int __maybe_unused stm32_ddr_pmu_device_resume(struct device *dev) +{ + struct stm32_ddr_pmu *pmu =3D dev_get_drvdata(dev); + + clk_enable(pmu->clk); + writel_relaxed(pmu->dram_type, pmu->membase + pmu->cfg->regs->dram_inf.re= g); + clk_disable(pmu->clk); + + return 0; +} + +static const struct stm32_ddr_pmu_regspec stm32_ddr_pmu_regspec_mp1 =3D { + .stop =3D { DDRPERFM_CTRL, CTRL_STOP }, + .start =3D { DDRPERFM_CTRL, CTRL_START }, + .enable =3D { DDRPERFM_CFG }, + .cfg =3D { DDRPERFM_CFG }, + .status =3D { DDRPERFM_STATUS, MP1_STATUS_BUSY }, + .clear_cnt =3D { DDRPERFM_CLR, MP1_CLR_CNT}, + .clear_time =3D { DDRPERFM_CLR, MP1_CLR_TIME}, + .counter_time =3D { DDRPERFM_TCNT }, + .counter_evt =3D { + { DDRPERFM_EVCNT(0) }, + { DDRPERFM_EVCNT(1) }, + { DDRPERFM_EVCNT(2) }, + { DDRPERFM_EVCNT(3) }, + }, +}; + +static const struct stm32_ddr_pmu_regspec stm32_ddr_pmu_regspec_mp2 =3D { + .stop =3D { DDRPERFM_CTRL, CTRL_STOP }, + .start =3D { DDRPERFM_CTRL, CTRL_START }, + .status =3D { DDRPERFM_MP2_STATUS, MP2_STATUS_BUSY }, + .clear_cnt =3D { DDRPERFM_CLR, MP2_CLR_CNT}, + .clear_time =3D { DDRPERFM_CLR, MP2_CLR_TIME}, + .cfg0 =3D { DDRPERFM_MP2_CFG0 }, + .cfg1 =3D { DDRPERFM_MP2_CFG1 }, + .enable =3D { DDRPERFM_MP2_CFG5 }, + .dram_inf =3D { DDRPERFM_MP2_DRAMINF }, + .counter_time =3D { DDRPERFM_MP2_TCNT }, + .counter_evt =3D { + { DDRPERFM_MP2_EVCNT(0) }, + { DDRPERFM_MP2_EVCNT(1) }, + { DDRPERFM_MP2_EVCNT(2) }, + { DDRPERFM_MP2_EVCNT(3) }, + { DDRPERFM_MP2_EVCNT(4) }, + { DDRPERFM_MP2_EVCNT(5) }, + { DDRPERFM_MP2_EVCNT(6) }, + { DDRPERFM_MP2_EVCNT(7) }, + }, +}; + +static const struct stm32_ddr_pmu_cfg stm32_ddr_pmu_cfg_mp1 =3D { + .regs =3D &stm32_ddr_pmu_regspec_mp1, + .attribute =3D stm32_ddr_pmu_attr_groups_mp1, + .counters_nb =3D MP1_CNT_NB, + .evt_counters_nb =3D MP1_CNT_NB - 1, /* Time counter is not an event coun= ter */ + .time_cnt_idx =3D MP1_TIME_CNT_IDX, + .get_counter =3D stm32_ddr_pmu_get_event_counter_mp1, +}; + +static const struct stm32_ddr_pmu_cfg stm32_ddr_pmu_cfg_mp2 =3D { + .regs =3D &stm32_ddr_pmu_regspec_mp2, + .attribute =3D stm32_ddr_pmu_attr_groups_mp2, + .counters_nb =3D MP2_CNT_NB, + .evt_counters_nb =3D MP2_CNT_NB - 1, /* Time counter is an event counter = */ + .time_cnt_idx =3D MP2_TIME_CNT_IDX, + .get_counter =3D stm32_ddr_pmu_get_event_counter_mp2, +}; + +static const struct dev_pm_ops stm32_ddr_pmu_pm_ops =3D { + SET_SYSTEM_SLEEP_PM_OPS(NULL, stm32_ddr_pmu_device_resume) +}; + +static const struct of_device_id stm32_ddr_pmu_of_match[] =3D { + { + .compatible =3D "st,stm32mp131-ddr-pmu", + .data =3D &stm32_ddr_pmu_cfg_mp1 + }, + { + .compatible =3D "st,stm32mp251-ddr-pmu", + .data =3D &stm32_ddr_pmu_cfg_mp2 + }, + { }, +}; +MODULE_DEVICE_TABLE(of, stm32_ddr_pmu_of_match); + +static struct platform_driver stm32_ddr_pmu_driver =3D { + .driver =3D { + .name =3D DRIVER_NAME, + .pm =3D pm_sleep_ptr(&stm32_ddr_pmu_pm_ops), + .of_match_table =3D stm32_ddr_pmu_of_match, + }, + .probe =3D stm32_ddr_pmu_device_probe, + .remove =3D stm32_ddr_pmu_device_remove, +}; + +module_platform_driver(stm32_ddr_pmu_driver); + +MODULE_AUTHOR("Cl=C3=A9ment Le Goffic"); +MODULE_DESCRIPTION("STMicroelectronics STM32 DDR performance monitor drive= r"); +MODULE_LICENSE("GPL"); --=20 2.43.0 From nobody Tue Oct 7 08:13:06 2025 Received: from mx07-00178001.pphosted.com (mx08-00178001.pphosted.com [91.207.212.93]) (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 72AED2EBBAB; Fri, 11 Jul 2025 14:52:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.207.212.93 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245569; cv=none; b=PylhOmCmZYibLNaXgdCWDsIBilCwJ4YCy26TyULaTqNYWqy8WD/Di6kTwxLvZzo6OYq7yk/nj02akTXBZIQpq5v19rkqyK6ZsYW01lZ/1wMBhxOSU11G1lBQt0AP1nihSuao+WepmfFfVDnY6MZpwkyYcYsgKR6x9PxfZlKvaIw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245569; c=relaxed/simple; bh=2uEtFVwi+wdX8OeRQHgPRlqO3x1jsKN8u5e4kKD7Awk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=LYbjTDr9+QgWilS6M6UR9pe2gCS2vsK9wxb+VS+PD1SOpAVmzmpvQ789pjCTK6eu/FE+J6nJn+LkjgQltnbX0ZpYABdvPa2Jk+7Wl6Cy4AZsEaB08C3kLteu0VPMPLBCMLuW4+3onBVP0ukwiiPWCZvGnc6BrecoaxGQ3GWxYBM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=1ZURePmn; arc=none smtp.client-ip=91.207.212.93 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="1ZURePmn" Received: from pps.filterd (m0046661.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56BEmNdp005606; Fri, 11 Jul 2025 16:52:34 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=selector1; bh= W7lja2ibWXfiVo4eDJLx4tgeIggbs4JL9GjrFt29DoI=; b=1ZURePmnZeaZ54yK 7qmrdu8IHz9Trtrfydl84qU/yad8TzwZo8Yu1i6zmBEN/lqgDxzUqdhHktrF2TOq g4IJ/U23sLhX829JkG/Fr01o2lG7OTSDCwXZSEkHzZSHijt0ajgjyyrA9ScArOss rpMRpWAKiTFhCh+xCIIV8E2nU8eLlMLVFw/VgOSnlQkxozgC1OTRCqR5UnlP7apb UgqYdmnwViGtsXNaHehCVbXxwIoPRbUmD9wZkalzde+fuVWLEZZj43Z9WjSwu5Z5 4R44KDUC+kVd/Tkf2Nd8awLDK11jnA2Re/cXYB2C88sv8HWkuS+290MPCE6pQ1a3 wMwbDA== Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 47ptxjpx0d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 11 Jul 2025 16:52:34 +0200 (MEST) Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id D01C940050; Fri, 11 Jul 2025 16:51:18 +0200 (CEST) Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 7C16BB55584; Fri, 11 Jul 2025 16:49:21 +0200 (CEST) Received: from localhost (10.252.16.187) by SHFDAG1NODE2.st.com (10.75.129.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Fri, 11 Jul 2025 16:49:21 +0200 From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= Date: Fri, 11 Jul 2025 16:49:02 +0200 Subject: [PATCH v2 10/16] Documentation: perf: stm32: add ddrperfm support 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: <20250711-ddrperfm-upstream-v2-10-cdece720348f@foss.st.com> References: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> In-Reply-To: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> To: Will Deacon , Mark Rutland , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Maxime Coquelin , Alexandre Torgue , Philipp Zabel , Jonathan Corbet , Gatien Chevallier , Michael Turquette , Stephen Boyd , Gabriel Fernandez , Krzysztof Kozlowski , Le Goffic CC: , , , , , , , =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= X-Mailer: b4 0.15-dev-7616d X-ClientProxiedBy: SHFCAS1NODE1.st.com (10.75.129.72) To SHFDAG1NODE2.st.com (10.75.129.70) X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-07-11_03,2025-07-09_01,2025-03-28_01 The DDRPERFM is the DDR Performance Monitor embedded in STM32MPU SoC. This documentation introduces the DDRPERFM, the stm32-ddr-pmu driver supporting it and how to use it with the perf tool. Signed-off-by: Cl=C3=A9ment Le Goffic --- Documentation/admin-guide/perf/index.rst | 1 + Documentation/admin-guide/perf/stm32-ddr-pmu.rst | 86 ++++++++++++++++++++= ++++ 2 files changed, 87 insertions(+) diff --git a/Documentation/admin-guide/perf/index.rst b/Documentation/admin= -guide/perf/index.rst index 072b510385c4..33aedc4ee5c3 100644 --- a/Documentation/admin-guide/perf/index.rst +++ b/Documentation/admin-guide/perf/index.rst @@ -29,3 +29,4 @@ Performance monitor support cxl ampere_cspmu mrvl-pem-pmu + stm32-ddr-pmu diff --git a/Documentation/admin-guide/perf/stm32-ddr-pmu.rst b/Documentati= on/admin-guide/perf/stm32-ddr-pmu.rst new file mode 100644 index 000000000000..5b02bf44dd7a --- /dev/null +++ b/Documentation/admin-guide/perf/stm32-ddr-pmu.rst @@ -0,0 +1,86 @@ +.. SPDX-License-Identifier: GPL-2.0 + +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D +STM32 DDR Performance Monitor (DDRPERFM) +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +The DDRPERFM is the DDR Performance Monitor embedded in STM32MPU SoC. +The DDR controller provides events to DDRPERFM, once selected they are cou= nted in the DDRPERFM +peripheral. + +In MP1 family, the DDRPERFM is able to count 4 different events at the sam= e time. +However, the 4 events must belong to the same set. +One hardware counter is dedicated to the time counter, `time_cnt`. + +In MP2 family, the DDRPERFM is able to select between 44 different DDR eve= nts. +As for MP1, there is a dedicated hardware counter for the time. +It is incremented every 4 DDR clock cycles. +All the other counters can be freely allocated to count any other DDR even= t. + +The stm32-ddr-pmu driver relies on the perf PMU framework to expose the co= unters via sysfs: + +On MP1: + + .. code-block:: bash + + $ ls /sys/bus/event_source/devices/stm32_ddr_pmu/events/ + cactive_ddrc perf_lpr_req_with_no_credit perf_op_= is_wr + ctl_idle perf_lpr_xact_when_critical perf_sel= fresh_mode + dfi_lp_req perf_op_is_activate perf_wr_= xact_when_critical + dfi_lp_req_cpy perf_op_is_enter_powerdown time_cnt + perf_hpr_req_with_no_credit perf_op_is_rd + perf_hpr_xact_when_critical perf_op_is_refresh + +On MP2: + + .. code-block:: bash + + $ ls /sys/bus/event_source/devices/stm32_ddr_pmu/events/ + dfi_is_act perf_hpr_req_with_nocredit perf_op_is_spec_ref + dfi_is_mpc perf_hpr_xact_when_critical perf_op_is_wr + dfi_is_mrr perf_lpr_req_with_nocredit perf_op_is_zqcal + dfi_is_mrw perf_lpr_xact_when_critical perf_rank + dfi_is_mwr perf_op_is_act perf_raw_hazard + dfi_is_mwra perf_op_is_crit_ref perf_rdwr_transitions + dfi_is_preab perf_op_is_enter_powdn perf_read_bypass + dfi_is_prepb perf_op_is_enter_selfref perf_war_hazard + dfi_is_rd perf_op_is_mwr perf_waw_hazard + dfi_is_rda perf_op_is_pre perf_window_limit_re= ached_rd + dfi_is_refab perf_op_is_pre_for_others perf_window_limit_re= ached_wr + dfi_is_refpb perf_op_is_pre_for_rdwr perf_wr_xact_when_cr= itical + dfi_is_wr perf_op_is_rd time_cnt + dfi_is_wra perf_op_is_rd_activate + perf_act_bypass perf_op_is_ref + + +The perf PMU framework is usually invoked via the 'perf stat' tool. + + +Example: + + .. code-block:: bash + + $ perf stat --timeout 60000 -e stm32_ddr_pmu/dfi_is_act/,\ + > stm32_ddr_pmu/dfi_is_rd/,\ + > stm32_ddr_pmu/dfi_is_wr/,\ + > stm32_ddr_pmu/dfi_is_refab/,\ + > stm32_ddr_pmu/dfi_is_mrw/,\ + > stm32_ddr_pmu/dfi_is_rda/,\ + > stm32_ddr_pmu/dfi_is_wra/,\ + > stm32_ddr_pmu/dfi_is_mrr/,\ + > stm32_ddr_pmu/time_cnt/ \ + > -a sleep 5 + + Performance counter stats for 'system wide': + + 481025 stm32_ddr_pmu/dfi_is_act/ + 732166 stm32_ddr_pmu/dfi_is_rd/ + 144926 stm32_ddr_pmu/dfi_is_wr/ + 644154 stm32_ddr_pmu/dfi_is_refab/ + 0 stm32_ddr_pmu/dfi_is_mrw/ + 0 stm32_ddr_pmu/dfi_is_rda/ + 0 stm32_ddr_pmu/dfi_is_wra/ + 0 stm32_ddr_pmu/dfi_is_mrr/ + 752347686 stm32_ddr_pmu/time_cnt/ + + 5.014910750 seconds time elapsed --=20 2.43.0 From nobody Tue Oct 7 08:13:06 2025 Received: from mx07-00178001.pphosted.com (mx08-00178001.pphosted.com [91.207.212.93]) (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 6F2412EACE8; Fri, 11 Jul 2025 14:52:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.207.212.93 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245564; cv=none; b=RYPbfy6yZ0oVrfIr6U5iT5DXHwr3492TLjGvEZWkHURMZpC921AShHwoClfRWnakKec78gVGDkLPAeKPSrsuAz5yhrk+/JQN27dmCv6KgzN9+9McMYDlbYyPSsI4kqN4W6cj9vOh8ME+KC1bDNKV0ESOs1dY/CPPeRilxoLOkas= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245564; c=relaxed/simple; bh=0QvWtLM5QGcIctpRqpI4dot4KDCNsRIMduICeQzwGVI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=b3Upy5c7aoW1OA9WPikdFEXitWIn7FP6pEjr49CzfTQKQOmdzXXn22ISMJcSacFnzcKddqY4xdyhhxBaV6IKkABw8vZCTi2jwxfFNS18eVv73HdX2i+O2wruspFUDSLjlJNCiGCLurtC238C0GXReu3eZHirdJGX7zpEN6OHH/A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=idIFcDLu; arc=none smtp.client-ip=91.207.212.93 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="idIFcDLu" Received: from pps.filterd (m0046661.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56BEmNdo005606; Fri, 11 Jul 2025 16:52:29 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=selector1; bh= +4kf8qwN68I8vr5z32Udkj2vXKggoefUcP+4H7K214E=; b=idIFcDLu1vvRcBd+ DajJUuWiQNAVfAAu0j8EDiCv/nLjNMOI79zeIvmxmt0rdysWA0Q2xrvI99TijKZd YasqbuPoaXBSj3W95ABQjGamFv6AXTNXZRUKzqVEavYYqFRt2DdGz8MG7a2sskus PSpJce30yhM0nzxNaxOWf2GqEkN3ZDJCv8gzu5X0cs89UVEcDpDagbZPECjcw95r d4/JuC/60mjVguA8sTxinEgX4QYbKwzGNq4KDsI9iD+SqawrCoMillRl7Q9P3geL zpob0fyMKFTmUqz+8jClrhCrii4ZiJcrm+T6ZC317jDdoVBRT9yBsPzovbUE5MaX yg80nA== Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 47ptxjpx00-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 11 Jul 2025 16:52:28 +0200 (MEST) Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id D02EF40053; Fri, 11 Jul 2025 16:51:18 +0200 (CEST) Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 64ECCB554DA; Fri, 11 Jul 2025 16:49:22 +0200 (CEST) Received: from localhost (10.252.16.187) by SHFDAG1NODE2.st.com (10.75.129.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Fri, 11 Jul 2025 16:49:22 +0200 From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= Date: Fri, 11 Jul 2025 16:49:03 +0200 Subject: [PATCH v2 11/16] MAINTAINERS: add myself as STM32 DDR PMU maintainer 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: <20250711-ddrperfm-upstream-v2-11-cdece720348f@foss.st.com> References: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> In-Reply-To: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> To: Will Deacon , Mark Rutland , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Maxime Coquelin , Alexandre Torgue , Philipp Zabel , Jonathan Corbet , Gatien Chevallier , Michael Turquette , Stephen Boyd , Gabriel Fernandez , Krzysztof Kozlowski , Le Goffic CC: , , , , , , , =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= X-Mailer: b4 0.15-dev-7616d X-ClientProxiedBy: SHFCAS1NODE1.st.com (10.75.129.72) To SHFDAG1NODE2.st.com (10.75.129.70) X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-07-11_03,2025-07-09_01,2025-03-28_01 Add Cl=C3=A9ment Le Goffic as STM32 DDR PMU maintainer. Signed-off-by: Cl=C3=A9ment Le Goffic --- MAINTAINERS | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index fad6cb025a19..b721d1758db8 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -23491,6 +23491,13 @@ S: Maintained F: Documentation/devicetree/bindings/power/supply/st,stc3117.yaml F: drivers/power/supply/stc3117_fuel_gauge.c =20 +ST STM32 DDR PMU +M: Cl=C3=A9ment Le Goffic +S: Maintained +F: Documentation/admin-guide/perf/stm32-ddr-pmu.rst +F: Documentation/devicetree/bindings/perf/st,stm32-ddr-pmu.yaml +F: drivers/perf/stm32_ddr-pmu.c + ST STM32 FIREWALL M: Gatien Chevallier S: Maintained --=20 2.43.0 From nobody Tue Oct 7 08:13:06 2025 Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [185.132.182.106]) (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 9B6E82EBBB3; Fri, 11 Jul 2025 14:52:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.132.182.106 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245569; cv=none; b=oaqF9HfUkZJTpsprZthm2gIsdtTtW1MrIefVKlzcXPaNqmktiEoq/hss1vjwwKWa0hMce/GyPjLW0ozvhDg1mJX0gvY1azSIDVuoO2bA+0q9gbzclHKSDb6N0ujj9Nsr+xhorEnt1GjI3KK6Kf2kEif7ElkEHJIcPG8x2IzO05c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245569; c=relaxed/simple; bh=gftIvYHzveImR+MPjt/uzTmWFEBJ3zj0CJjUcncYRD4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=nj7n7oe37JtMumqSNAgUbVNVrTsKgkCkez9RtLgyjDj98Q/csqfKq2dCIq2o5I/yXe077RVDbvtMlrvyfBpYCT2UR+9ZzhGq9N5SaesyDITWVbKYYRDqTm0aJE2Xq9mUsBYhZoCHZvHNF6Ms49dHgmei/KgoksrziGLSVf/5bJ0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=6K3QshSG; arc=none smtp.client-ip=185.132.182.106 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="6K3QshSG" Received: from pps.filterd (m0369458.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56BEmR9s016134; Fri, 11 Jul 2025 16:52:33 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=selector1; bh= +oFosf+Y2aWw9hUSMPebh2RDsEkKVFT8bx1JKOIHJNs=; b=6K3QshSG82MHxDKD Cv04rWlAUcy5JsZsHrt0SfF0JPUFq4Qio8SCDOlJ65xczWzDd3bgHbB5wR2OFW51 0hlWLHF2NTC1C5sfxGDb7oTRB4xobDFeEdNpIj6jSsYV4vdKUj7wr163yL/S3+Va XbTKpPa3/xPKbOc8qsieXNJSPh+tiN2z57uqPHjF3op6QKtgoKSeuX6o26wn4lT/ aARy6xGiDSfX4D3Xq1lPxsnkDWWwkDElpa8dEdWkx1n0A1zystiX/A1nam/KOhU7 s+VbzcIZoylG6Qh2Ogyr+mkQzORi/ojguFZArXvxOTQ7pZ08RFHFUBWSRJJnHh0u KjObQQ== Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 47qdm6csfs-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 11 Jul 2025 16:52:33 +0200 (MEST) Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id D027B40052; Fri, 11 Jul 2025 16:51:19 +0200 (CEST) Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 49807B56887; Fri, 11 Jul 2025 16:49:23 +0200 (CEST) Received: from localhost (10.252.16.187) by SHFDAG1NODE2.st.com (10.75.129.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Fri, 11 Jul 2025 16:49:22 +0200 From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= Date: Fri, 11 Jul 2025 16:49:04 +0200 Subject: [PATCH v2 12/16] ARM: dts: stm32: add ddrperfm on stm32mp131 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: <20250711-ddrperfm-upstream-v2-12-cdece720348f@foss.st.com> References: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> In-Reply-To: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> To: Will Deacon , Mark Rutland , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Maxime Coquelin , Alexandre Torgue , Philipp Zabel , Jonathan Corbet , Gatien Chevallier , Michael Turquette , Stephen Boyd , Gabriel Fernandez , Krzysztof Kozlowski , Le Goffic CC: , , , , , , , =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= X-Mailer: b4 0.15-dev-7616d X-ClientProxiedBy: SHFCAS1NODE1.st.com (10.75.129.72) To SHFDAG1NODE2.st.com (10.75.129.70) X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-07-11_03,2025-07-09_01,2025-03-28_01 The DDRPERFM is the DDR Performance Monitor embedded in STM32MP131 SoC. Signed-off-by: Cl=C3=A9ment Le Goffic --- arch/arm/boot/dts/st/stm32mp131.dtsi | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/arm/boot/dts/st/stm32mp131.dtsi b/arch/arm/boot/dts/st/st= m32mp131.dtsi index 492bcf586361..e097723789aa 100644 --- a/arch/arm/boot/dts/st/stm32mp131.dtsi +++ b/arch/arm/boot/dts/st/stm32mp131.dtsi @@ -998,6 +998,13 @@ iwdg2: watchdog@5a002000 { status =3D "disabled"; }; =20 + ddrperfm: perf@5a007000 { + compatible =3D "st,stm32mp131-ddr-pmu"; + reg =3D <0x5a007000 0x400>; + clocks =3D <&rcc DDRPERFM>; + resets =3D <&rcc DDRPERFM_R>; + }; + rtc: rtc@5c004000 { compatible =3D "st,stm32mp1-rtc"; reg =3D <0x5c004000 0x400>; --=20 2.43.0 From nobody Tue Oct 7 08:13:06 2025 Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [185.132.182.106]) (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 72E8C2EAB67; Fri, 11 Jul 2025 14:52:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.132.182.106 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245578; cv=none; b=gNLMvuqAmqA5AeGOCS+3i99X183RBxaEuTrfgTPYCvK8R71zE8pUTQozGPe4wTp5Lvb8sKOiIVUHZxk7whRgg2kantPzv2P4jbBXKzTaEFZIcY54E+aY/xzFbI1ZR85kZpni/BfrZZSj4IRVMSfcO3PPdUaSkVcAeVZ1gGOIQTU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245578; c=relaxed/simple; bh=pay9TmTh3yLow9rYjWJAd2mCiKrqeCMu+ieuOzNTvQs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=UTLXlu7KPDlIsEc3MQlM159NTYL9ZoN952GbS7p15doxn56F39ty91rxIVPrWKm2+t+7iaHePKcR66i96QPHH7Lp9RvtYUceE/8tiCZoOOJtffTHBg/oqhhR4kF8RNgFthmUwQvCm5gK7LyiLqIRJAiGi2wPeCQ5chwR6ASprYo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=X8c6SvFg; arc=none smtp.client-ip=185.132.182.106 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="X8c6SvFg" Received: from pps.filterd (m0241204.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56BEGqSX026533; Fri, 11 Jul 2025 16:52:34 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=selector1; bh= qThLZiY/wcF/wXoPU6DZ22JEMA0Tul4CRJwH6uwAl+U=; b=X8c6SvFgHXeRBrsL /EuyjhqzWS3Cycr2fujRr3oHhCx0RARhnaRISwlWBdHAC/qHPw9xtcBkeKM3yCsd JZCZLEIMcQ6guD6bAI1wFtt6DlLctr0Fy+DmR/EPXOF0kWTB6VyhKa2HskDwFliI XHa90HmHDrtOGaN3p0ZXG+D3hHzyxD8KFSi2CiBOdhE6BJKmT5HXTeW0mMIb+ybK 9vBSzvpBG+9cuLtlK/PBD7s64/AdUJw75g8hDh33lIZ7slHgQbxTKIV5WbHf0KsF tvY9iwCcRmqkX+rknTFkwhqdAfXMWWGn3ysnVNHjvcf/EH4+Q1SXXb8gDFnBLB/4 6MJxWg== Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 47pud3qfk2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 11 Jul 2025 16:52:34 +0200 (MEST) Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id D237F40054; Fri, 11 Jul 2025 16:51:19 +0200 (CEST) Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 2C68FB5688E; Fri, 11 Jul 2025 16:49:24 +0200 (CEST) Received: from localhost (10.252.16.187) by SHFDAG1NODE2.st.com (10.75.129.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Fri, 11 Jul 2025 16:49:23 +0200 From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= Date: Fri, 11 Jul 2025 16:49:05 +0200 Subject: [PATCH v2 13/16] ARM: dts: stm32: add ddrperfm on stm32mp151 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: <20250711-ddrperfm-upstream-v2-13-cdece720348f@foss.st.com> References: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> In-Reply-To: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> To: Will Deacon , Mark Rutland , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Maxime Coquelin , Alexandre Torgue , Philipp Zabel , Jonathan Corbet , Gatien Chevallier , Michael Turquette , Stephen Boyd , Gabriel Fernandez , Krzysztof Kozlowski , Le Goffic CC: , , , , , , , =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= X-Mailer: b4 0.15-dev-7616d X-ClientProxiedBy: SHFCAS1NODE1.st.com (10.75.129.72) To SHFDAG1NODE2.st.com (10.75.129.70) X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-07-11_03,2025-07-09_01,2025-03-28_01 The DDRPERFM is the DDR Performance Monitor embedded in STM32MP151 SoC. Signed-off-by: Cl=C3=A9ment Le Goffic --- arch/arm/boot/dts/st/stm32mp151.dtsi | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/arm/boot/dts/st/stm32mp151.dtsi b/arch/arm/boot/dts/st/st= m32mp151.dtsi index 0daa8ffe2ff5..e121de52a054 100644 --- a/arch/arm/boot/dts/st/stm32mp151.dtsi +++ b/arch/arm/boot/dts/st/stm32mp151.dtsi @@ -383,6 +383,13 @@ usbphyc_port1: usb-phy@1 { }; }; =20 + ddrperfm: perf@5a007000 { + compatible =3D "st,stm32mp151-ddr-pmu", "st,stm32mp131-ddr-pmu"; + reg =3D <0x5a007000 0x400>; + clocks =3D <&rcc DDRPERFM>; + resets =3D <&rcc DDRPERFM_R>; + }; + rtc: rtc@5c004000 { compatible =3D "st,stm32mp1-rtc"; reg =3D <0x5c004000 0x400>; --=20 2.43.0 From nobody Tue Oct 7 08:13:06 2025 Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [185.132.182.106]) (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 8E92A2EACF8; Fri, 11 Jul 2025 14:52:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.132.182.106 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245570; cv=none; b=Wor0gOpf4+a/sO3wVuVnhtQaIT44HYaEvv3Mk10h8gtiZVXRcIxQXfIkEZr3wcfKfJPPJ7kqEtUyEgApNl1c8VgDs6NofL2pqCe2qGbARylCOHe79CDuPMPYzsBV58RwdgDzLj6lmtp0eiW4TIyb63Ph8zaCp5B0mQ47fG7z7Sg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245570; c=relaxed/simple; bh=jDxrKSVKGmymiWgFfc3XLLghQxyNU894E3heEmmTqGc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=OICoAQA7k604hVN5KBROJEBPvCtgGkwrHT604FjAJJ5qna6tBzjZxu0gGCflAjmYXLLPp9sHageb3f2uywezP6HK0wFXCzxjZLSuUwjXCc3q2s/lgHoc4TTtUFaFMaShyWw91sLa3phmesQN0Uf+kuz0NGXCGOJgwrPerX40JaA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=zUm3Eqtb; arc=none smtp.client-ip=185.132.182.106 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="zUm3Eqtb" Received: from pps.filterd (m0288072.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56BEno0u026464; Fri, 11 Jul 2025 16:52:34 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=selector1; bh= SuBSodyyqcKAz1sJaFnr1XdxWrUs+npg1uqS49q9/0Y=; b=zUm3Eqtb/608j2Xc NSBMn+1ICCJx9el4l5BnJr8HgsqU/2eCahIebmKTyzVemnDjf6eZnDPWlid14eN3 HqbWr2RVuJSdAN/MudGb45CAF5PCBAhJd7pYYZv63tX4yQvDh/l8Bj3xahOMKoBx 8uJ/KqLNW6YoCbUXDpdpeGlcBOLx7FWhtjYKTY6f988+64ksrEVgjYP55yjXhktl efEdc3gIc9Z1yfkzXw+5zSACdANGLOArpNaLa7gUYejOQ54k018hfQcM+fenmq1v DhyMvnzmVmR0COb863VJF9V4HaxlupWVC552QE5HtazAVFonDGUUfeMCB4+NidyA OUFjfw== Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 47psfmyt8t-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 11 Jul 2025 16:52:34 +0200 (MEST) Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id D01974004C; Fri, 11 Jul 2025 16:51:19 +0200 (CEST) Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 1812FB56076; Fri, 11 Jul 2025 16:49:25 +0200 (CEST) Received: from localhost (10.252.16.187) by SHFDAG1NODE2.st.com (10.75.129.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Fri, 11 Jul 2025 16:49:24 +0200 From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= Date: Fri, 11 Jul 2025 16:49:06 +0200 Subject: [PATCH v2 14/16] arm64: dts: st: add ddrperfm on stm32mp251 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: <20250711-ddrperfm-upstream-v2-14-cdece720348f@foss.st.com> References: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> In-Reply-To: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> To: Will Deacon , Mark Rutland , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Maxime Coquelin , Alexandre Torgue , Philipp Zabel , Jonathan Corbet , Gatien Chevallier , Michael Turquette , Stephen Boyd , Gabriel Fernandez , Krzysztof Kozlowski , Le Goffic CC: , , , , , , , =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= X-Mailer: b4 0.15-dev-7616d X-ClientProxiedBy: SHFCAS1NODE1.st.com (10.75.129.72) To SHFDAG1NODE2.st.com (10.75.129.70) X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-07-11_03,2025-07-09_01,2025-03-28_01 The DDRPERFM is the DDR Performance Monitor embedded in STM32MP251 SoC. Keep the node disabled at SoC level as it requires the property `st,dram-type` which is provided in board dtsi file. Signed-off-by: Cl=C3=A9ment Le Goffic --- arch/arm64/boot/dts/st/stm32mp251.dtsi | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/arm64/boot/dts/st/stm32mp251.dtsi b/arch/arm64/boot/dts/s= t/stm32mp251.dtsi index 0683c2d5cb6f..7f138324610a 100644 --- a/arch/arm64/boot/dts/st/stm32mp251.dtsi +++ b/arch/arm64/boot/dts/st/stm32mp251.dtsi @@ -1577,5 +1577,12 @@ exti2: interrupt-controller@46230000 { <0>, <&intc GIC_SPI 213 IRQ_TYPE_LEVEL_HIGH>; /* EXTI_70 */ }; + + ddrperfm: perf@48041000 { + compatible =3D "st,stm32mp251-ddr-pmu"; + reg =3D <0x48041000 0x400>; + access-controllers =3D <&rcc 104>; + status =3D "disabled"; + }; }; }; --=20 2.43.0 From nobody Tue Oct 7 08:13:06 2025 Received: from mx07-00178001.pphosted.com (mx08-00178001.pphosted.com [91.207.212.93]) (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 012D22EAB9F; Fri, 11 Jul 2025 14:52:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.207.212.93 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245563; cv=none; b=VSJI3uGZwnqFSr2gYQ0mmUPr9pNC7BZZYZFwIMU9ERuZd1kZrgt2v1Lr7mMtAwsEkp446TeGR+wyUCA7n+fsqFjy4IG+/2mDrb7LQbFrDxyB9FO8e6oHcBj2IYdCFgxclmDv0U70aSPCYWere1p9DpN4bUPhDcyM32rLUgqoN4I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245563; c=relaxed/simple; bh=APnITFI2OlF73fYQnE5tGk6hf/PmhIgfi1CHjJJSw1M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=BzNZAqH74FNi9em3xOiSHc+8XujvPIyNi+QJaQSC0Z/H57TOx7np9wtO6bTSZodZgg7TrqxWhr8S2incIIOtrLAfTU34Qh4H9gecqwX2L8FskqsCypg7gn7KOhrVgc9u2q5WDDHuivZKJrUAO4JwrsKsmB2BaLBs++BatMX/eiI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=8Hd9VdV8; arc=none smtp.client-ip=91.207.212.93 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="8Hd9VdV8" Received: from pps.filterd (m0046661.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56BBCecB004273; Fri, 11 Jul 2025 16:52:28 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=selector1; bh= UlvgFLkq2jemy3eeMnwVN+pbz6Mlls5h0vESyT1iEYI=; b=8Hd9VdV8ctD+bDJz 0gNvrZDTZWQAZN80szPcIQP6ybDSN4IS75EBq4IhYKctMGGpLhsuBzr9XTcdXW9e hr619bgFvR/CkHrwnuMfTtfrCyZhY7Iiad5BdIYBorIuiQEBbgAxRi8Vq9OhA+VJ dc3/0V4W7B7i81ODN3gRNUYW61B0gdlvu9D6z+jvDcN6rwFcx4G9uYyR0trjZUek UV4KsPru/r/bcHOOEfXzRD3oVupugbTg69RlOmui04lBYKGyNnNAPmsxtc/g/GpD FdZJENHqIbn4E4X0ka+RPdbQsLksuBdbAKGoUIWeKQ0sLuW3fNLq507efx0u9lE6 hlAWNw== Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 47ptxjpwyw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 11 Jul 2025 16:52:27 +0200 (MEST) Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id D00E84004B; Fri, 11 Jul 2025 16:51:19 +0200 (CEST) Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 083DBB56890; Fri, 11 Jul 2025 16:49:26 +0200 (CEST) Received: from localhost (10.252.16.187) by SHFDAG1NODE2.st.com (10.75.129.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Fri, 11 Jul 2025 16:49:25 +0200 From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= Date: Fri, 11 Jul 2025 16:49:07 +0200 Subject: [PATCH v2 15/16] arm64: dts: st: support ddrperfm on stm32mp257f-dk 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: <20250711-ddrperfm-upstream-v2-15-cdece720348f@foss.st.com> References: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> In-Reply-To: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> To: Will Deacon , Mark Rutland , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Maxime Coquelin , Alexandre Torgue , Philipp Zabel , Jonathan Corbet , Gatien Chevallier , Michael Turquette , Stephen Boyd , Gabriel Fernandez , Krzysztof Kozlowski , Le Goffic CC: , , , , , , , =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= X-Mailer: b4 0.15-dev-7616d X-ClientProxiedBy: SHFCAS1NODE1.st.com (10.75.129.72) To SHFDAG1NODE2.st.com (10.75.129.70) X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-07-11_03,2025-07-09_01,2025-03-28_01 Configure DDRPERFM node on stm32mp257f-dk board. Disable the node as DDRPERFM will produce an error message if it's clock (shared with the DDRCTRL on STM32MP25x) is secured by common bootloaders. Signed-off-by: Cl=C3=A9ment Le Goffic --- arch/arm64/boot/dts/st/stm32mp257f-dk.dts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/arm64/boot/dts/st/stm32mp257f-dk.dts b/arch/arm64/boot/dt= s/st/stm32mp257f-dk.dts index a97b41f14ecc..d236ebf2bb10 100644 --- a/arch/arm64/boot/dts/st/stm32mp257f-dk.dts +++ b/arch/arm64/boot/dts/st/stm32mp257f-dk.dts @@ -84,6 +84,11 @@ &arm_wdt { status =3D "okay"; }; =20 +&ddrperfm { + memory-channel =3D <&lpddr_channel>; + status =3D "disabled"; +}; + &scmi_regu { scmi_vddio1: regulator@0 { regulator-min-microvolt =3D <1800000>; --=20 2.43.0 From nobody Tue Oct 7 08:13:06 2025 Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [185.132.182.106]) (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 378EF2EACF8; Fri, 11 Jul 2025 14:52:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.132.182.106 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245564; cv=none; b=jmlr8sVIi4MUPmlN5Da/QBJOQl8TxQ+XoWBgvitccIShNC7uamuKTHXrsCt8xadt2yRCrpVuuJ9HaMEkvxsnWtNadoVShTjbGouF6CSpOYNhCWHkIvUC/e1tv6yFNFFsY2mlnnvSELZ8q8IWtUDxGeIIL1euq5yhUg76V+Domy4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752245564; c=relaxed/simple; bh=q/FVeQueIyKVrnp1NcfhHAttXLTMCRvWb2aBdG6Nx4o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=uT8z//fcLfjR8aAyMtoioqmkFhQ7c43JNvIV4PpV5FTV3n5b1q3UCv1wtTRIkS/uucsqhKwebeg+dsPQL6ZuaE3WV7EdmhEnZFlc36iInv+3ohbOtAUFI/1zkmiiG2epdkbHEl6b4su2QFDTEjoPwBxVVTuZpwaRbVjlTATU+Vs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=GLwIa/U4; arc=none smtp.client-ip=185.132.182.106 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="GLwIa/U4" Received: from pps.filterd (m0241204.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56BEHQjM027785; Fri, 11 Jul 2025 16:52:28 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=selector1; bh= F0RaanQr/Y01Kr3e9l6yvosGEYhnzl8fsIwEj1CuG6c=; b=GLwIa/U4Pms3zJYJ Vf6J02Gisg1Ta4puNDbzsRHGlPFLIH6DIxCks5O8Xa1cKnjO0hXVB7a4cISVoN1n q8zYShB0re5FueScRBFZN1aQ5rdOfisRaiYktnzX+qK0abR4UCG1yuGbZJOtEV9I X5W6esz3NDy1OWP4hO6pJLsQfdKxn9BMlNqA/DvYXUBaXY2zfZ+zVPtaL9SuiKU7 vgVx68hnzZUh5nbPyAhp5JPDt/IqI60gLjHi771kfkVnqRYSMjndzDKt1UYCrx0G 6XYxO8IrkeXgCrx0NygjkS++agXq9iYTFatMUGSRUdVHpvE/JGMMdIikmZN92LaN t8o0ag== Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 47pud3qfjm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 11 Jul 2025 16:52:28 +0200 (MEST) Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id B7B5C4004D; Fri, 11 Jul 2025 16:51:21 +0200 (CEST) Received: from Webmail-eu.st.com (shfdag1node2.st.com [10.75.129.70]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id E9575B56893; Fri, 11 Jul 2025 16:49:26 +0200 (CEST) Received: from localhost (10.252.16.187) by SHFDAG1NODE2.st.com (10.75.129.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Fri, 11 Jul 2025 16:49:26 +0200 From: =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= Date: Fri, 11 Jul 2025 16:49:08 +0200 Subject: [PATCH v2 16/16] arm64: dts: st: support ddrperfm on stm32mp257f-ev1 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: <20250711-ddrperfm-upstream-v2-16-cdece720348f@foss.st.com> References: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> In-Reply-To: <20250711-ddrperfm-upstream-v2-0-cdece720348f@foss.st.com> To: Will Deacon , Mark Rutland , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Maxime Coquelin , Alexandre Torgue , Philipp Zabel , Jonathan Corbet , Gatien Chevallier , Michael Turquette , Stephen Boyd , Gabriel Fernandez , Krzysztof Kozlowski , Le Goffic CC: , , , , , , , =?utf-8?q?Cl=C3=A9ment_Le_Goffic?= X-Mailer: b4 0.15-dev-7616d X-ClientProxiedBy: SHFCAS1NODE1.st.com (10.75.129.72) To SHFDAG1NODE2.st.com (10.75.129.70) X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-07-11_03,2025-07-09_01,2025-03-28_01 Configure DDRPERFM node on stm32mp257f-ev1 board. Disable the node as DDRPERFM will produce an error message if it's clock (shared with the DDRCTRL on STM32MP25x) is secured by common bootloaders. Signed-off-by: Cl=C3=A9ment Le Goffic --- arch/arm64/boot/dts/st/stm32mp257f-ev1.dts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/arm64/boot/dts/st/stm32mp257f-ev1.dts b/arch/arm64/boot/d= ts/st/stm32mp257f-ev1.dts index f987d86d350f..7533b500135c 100644 --- a/arch/arm64/boot/dts/st/stm32mp257f-ev1.dts +++ b/arch/arm64/boot/dts/st/stm32mp257f-ev1.dts @@ -128,6 +128,11 @@ csi_source: endpoint { }; }; =20 +&ddrperfm { + memory-channel =3D <&ddr_channel>; + status =3D "disabled"; +}; + &dcmipp { status =3D "okay"; port { --=20 2.43.0