From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 7B339C433EF for ; Mon, 22 Nov 2021 07:50:08 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id B51BE83691; Mon, 22 Nov 2021 08:50:05 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=foss.st.com header.i=@foss.st.com header.b="LD5LpbGf"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 61C32835F9; Mon, 22 Nov 2021 08:50:02 +0100 (CET) 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 phobos.denx.de (Postfix) with ESMTPS id ACFBA83680 for ; Mon, 22 Nov 2021 08:49:56 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=prvs=5960d79c8b=patrice.chotard@foss.st.com Received: from pps.filterd (m0046660.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 1AM7j9Ij008818; Mon, 22 Nov 2021 08:49:55 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h=subject : to : cc : references : from : message-id : date : mime-version : in-reply-to : content-type : content-transfer-encoding; s=selector1; bh=Or0xdMpkvNPK0enS75zjLuJ9ZPoL4tHsw3x7I1AvF3Y=; b=LD5LpbGfppdlZ1Ishcuk+Af0fqrqt+D/mGqZhRxbfG8J5R0OdyXGeipDP6mx3DXh2m5e cGflifwOPfH4F59cocRCzm4Qo/hI6Josdq45a58KZXZQ2xBFhWNTSlBI3an4EETOFACQ TgOvTjumt7socYBlgOWNBwEWwsb+WTgfFSQUURXyiXJyjWlTF0it9zfFE/hIuczhYKta xf5LBLvhwnpIouKS52er3zK0YFp0EL/8a3HFEYgo6nP81KHhTIAS43xfUWinyKQNquXg fi7OyzF5I9U6UT251RXYjohXt86GZBSv7wXhVK2CY2Pel5P9yjQ+lFY7bdy2LMEkOJBM 7w== Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 3cg73g0111-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 22 Nov 2021 08:49:55 +0100 Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 0B286100034; Mon, 22 Nov 2021 08:49:55 +0100 (CET) Received: from Webmail-eu.st.com (sfhdag2node2.st.com [10.75.127.5]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 017B82122F5; Mon, 22 Nov 2021 08:49:55 +0100 (CET) Received: from lmecxl0573.lme.st.com (10.75.127.44) by SFHDAG2NODE2.st.com (10.75.127.5) with Microsoft SMTP Server (TLS) id 15.0.1497.26; Mon, 22 Nov 2021 08:49:54 +0100 Subject: Re: [PATCH 2/3] stm32mp1: ram: remove the support of calibration result To: Patrick Delaunay , CC: Jagan Teki , Matteo Lisi , U-Boot STM32 References: <20211115153214.1.I1a0a5850a0ac39ae33620ed14822892c394b1a98@changeid> <20211115153214.2.Ia98f9adf88d8183fa061a16ed9af4219f875bda5@changeid> From: Patrice CHOTARD Message-ID: <247218ab-f43b-f67f-4b22-58e789e15688@foss.st.com> Date: Mon, 22 Nov 2021 08:49:54 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 MIME-Version: 1.0 In-Reply-To: <20211115153214.2.Ia98f9adf88d8183fa061a16ed9af4219f875bda5@changeid> Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.75.127.44] X-ClientProxiedBy: SFHDAG1NODE3.st.com (10.75.127.3) To SFHDAG2NODE2.st.com (10.75.127.5) X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.790,Hydra:6.0.425,FMLib:17.0.607.475 definitions=2021-11-22_03,2021-11-22_01,2020-04-07_01 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.37 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.2 at phobos.denx.de X-Virus-Status: Clean Hi Patrick On 11/15/21 3:32 PM, Patrick Delaunay wrote: > The support of a predefined DDR PHY tuning result is removed for > STM32MP1 driver because it is not needed at the supported frequency > when built-in calibration is executed. > > The calibration parameters were provided in the device tree by the > optional node "st,phy-cal", activated in ddr helper file by the > compilation flag DDR_PHY_CAL_SKIP and filled with values generated > by the CubeMX DDR utilities. > > This patch > - updates the binding file to remove "st,phy-cal" support > - updates the device trees and remove the associated defines > - simplifies the STM32MP1 DDR driver and remove the support of > the optional parameter "st,phy-cal" > > After this patch, the built-in calibration is always executed > and the calibration registers are moved in the phy dynamic part; > that allows manual tests. > > Signed-off-by: Patrick Delaunay > --- > > arch/arm/dts/stm32mp15-ddr.dtsi | 30 --------- > .../dts/stm32mp15-ddr3-1x4Gb-1066-binG.dtsi | 12 ---- > .../dts/stm32mp15-ddr3-2x4Gb-1066-binG.dtsi | 12 ---- > .../stm32mp15-ddr3-dhsom-2x1Gb-1066-binG.dtsi | 12 ---- > .../stm32mp15-ddr3-dhsom-2x2Gb-1066-binG.dtsi | 12 ---- > .../stm32mp15-ddr3-dhsom-2x4Gb-1066-binG.dtsi | 12 ---- > .../stm32mp15-ddr3-icore-1x4Gb-1066-binG.dtsi | 12 ---- > .../memory-controllers/st,stm32mp1-ddr.txt | 32 --------- > drivers/ram/stm32mp1/stm32mp1_ddr.c | 65 +++++++------------ > drivers/ram/stm32mp1/stm32mp1_ddr.h | 17 ----- > drivers/ram/stm32mp1/stm32mp1_interactive.c | 15 +---- > drivers/ram/stm32mp1/stm32mp1_ram.c | 22 +------ > 12 files changed, 27 insertions(+), 226 deletions(-) > > diff --git a/arch/arm/dts/stm32mp15-ddr.dtsi b/arch/arm/dts/stm32mp15-ddr.dtsi > index 2a139c54e9..0aac9131a6 100644 > --- a/arch/arm/dts/stm32mp15-ddr.dtsi > +++ b/arch/arm/dts/stm32mp15-ddr.dtsi > @@ -116,24 +116,6 @@ > DDR_MR3 > >; > > -#ifdef DDR_PHY_CAL_SKIP > - st,phy-cal = < > - DDR_DX0DLLCR > - DDR_DX0DQTR > - DDR_DX0DQSTR > - DDR_DX1DLLCR > - DDR_DX1DQTR > - DDR_DX1DQSTR > - DDR_DX2DLLCR > - DDR_DX2DQTR > - DDR_DX2DQSTR > - DDR_DX3DLLCR > - DDR_DX3DQTR > - DDR_DX3DQSTR > - >; > - > -#endif > - > status = "okay"; > }; > }; > @@ -224,18 +206,6 @@ > #undef DDR_ODTCR > #undef DDR_ZQ0CR1 > #undef DDR_DX0GCR > -#undef DDR_DX0DLLCR > -#undef DDR_DX0DQTR > -#undef DDR_DX0DQSTR > #undef DDR_DX1GCR > -#undef DDR_DX1DLLCR > -#undef DDR_DX1DQTR > -#undef DDR_DX1DQSTR > #undef DDR_DX2GCR > -#undef DDR_DX2DLLCR > -#undef DDR_DX2DQTR > -#undef DDR_DX2DQSTR > #undef DDR_DX3GCR > -#undef DDR_DX3DLLCR > -#undef DDR_DX3DQTR > -#undef DDR_DX3DQSTR > diff --git a/arch/arm/dts/stm32mp15-ddr3-1x4Gb-1066-binG.dtsi b/arch/arm/dts/stm32mp15-ddr3-1x4Gb-1066-binG.dtsi > index 978331b279..e60d0ae606 100644 > --- a/arch/arm/dts/stm32mp15-ddr3-1x4Gb-1066-binG.dtsi > +++ b/arch/arm/dts/stm32mp15-ddr3-1x4Gb-1066-binG.dtsi > @@ -100,20 +100,8 @@ > #define DDR_ODTCR 0x00010000 > #define DDR_ZQ0CR1 0x00000038 > #define DDR_DX0GCR 0x0000CE81 > -#define DDR_DX0DLLCR 0x40000000 > -#define DDR_DX0DQTR 0xFFFFFFFF > -#define DDR_DX0DQSTR 0x3DB02000 > #define DDR_DX1GCR 0x0000CE81 > -#define DDR_DX1DLLCR 0x40000000 > -#define DDR_DX1DQTR 0xFFFFFFFF > -#define DDR_DX1DQSTR 0x3DB02000 > #define DDR_DX2GCR 0x0000CE80 > -#define DDR_DX2DLLCR 0x40000000 > -#define DDR_DX2DQTR 0xFFFFFFFF > -#define DDR_DX2DQSTR 0x3DB02000 > #define DDR_DX3GCR 0x0000CE80 > -#define DDR_DX3DLLCR 0x40000000 > -#define DDR_DX3DQTR 0xFFFFFFFF > -#define DDR_DX3DQSTR 0x3DB02000 > > #include "stm32mp15-ddr.dtsi" > diff --git a/arch/arm/dts/stm32mp15-ddr3-2x4Gb-1066-binG.dtsi b/arch/arm/dts/stm32mp15-ddr3-2x4Gb-1066-binG.dtsi > index 426be21f42..1a6fa80edf 100644 > --- a/arch/arm/dts/stm32mp15-ddr3-2x4Gb-1066-binG.dtsi > +++ b/arch/arm/dts/stm32mp15-ddr3-2x4Gb-1066-binG.dtsi > @@ -100,20 +100,8 @@ > #define DDR_ODTCR 0x00010000 > #define DDR_ZQ0CR1 0x00000038 > #define DDR_DX0GCR 0x0000CE81 > -#define DDR_DX0DLLCR 0x40000000 > -#define DDR_DX0DQTR 0xFFFFFFFF > -#define DDR_DX0DQSTR 0x3DB02000 > #define DDR_DX1GCR 0x0000CE81 > -#define DDR_DX1DLLCR 0x40000000 > -#define DDR_DX1DQTR 0xFFFFFFFF > -#define DDR_DX1DQSTR 0x3DB02000 > #define DDR_DX2GCR 0x0000CE81 > -#define DDR_DX2DLLCR 0x40000000 > -#define DDR_DX2DQTR 0xFFFFFFFF > -#define DDR_DX2DQSTR 0x3DB02000 > #define DDR_DX3GCR 0x0000CE81 > -#define DDR_DX3DLLCR 0x40000000 > -#define DDR_DX3DQTR 0xFFFFFFFF > -#define DDR_DX3DQSTR 0x3DB02000 > > #include "stm32mp15-ddr.dtsi" > diff --git a/arch/arm/dts/stm32mp15-ddr3-dhsom-2x1Gb-1066-binG.dtsi b/arch/arm/dts/stm32mp15-ddr3-dhsom-2x1Gb-1066-binG.dtsi > index b3eb280f96..0a277cd675 100644 > --- a/arch/arm/dts/stm32mp15-ddr3-dhsom-2x1Gb-1066-binG.dtsi > +++ b/arch/arm/dts/stm32mp15-ddr3-dhsom-2x1Gb-1066-binG.dtsi > @@ -101,20 +101,8 @@ > #define DDR_ODTCR 0x00010000 > #define DDR_ZQ0CR1 0x00000038 > #define DDR_DX0GCR 0x0000CE81 > -#define DDR_DX0DLLCR 0x40000000 > -#define DDR_DX0DQTR 0xFFFFFFFF > -#define DDR_DX0DQSTR 0x3DB02000 > #define DDR_DX1GCR 0x0000CE81 > -#define DDR_DX1DLLCR 0x40000000 > -#define DDR_DX1DQTR 0xFFFFFFFF > -#define DDR_DX1DQSTR 0x3DB02000 > #define DDR_DX2GCR 0x0000CE81 > -#define DDR_DX2DLLCR 0x40000000 > -#define DDR_DX2DQTR 0xFFFFFFFF > -#define DDR_DX2DQSTR 0x3DB02000 > #define DDR_DX3GCR 0x0000CE81 > -#define DDR_DX3DLLCR 0x40000000 > -#define DDR_DX3DQTR 0xFFFFFFFF > -#define DDR_DX3DQSTR 0x3DB02000 > > #include "stm32mp15-ddr.dtsi" > diff --git a/arch/arm/dts/stm32mp15-ddr3-dhsom-2x2Gb-1066-binG.dtsi b/arch/arm/dts/stm32mp15-ddr3-dhsom-2x2Gb-1066-binG.dtsi > index ed3a5248f8..92774fffb9 100644 > --- a/arch/arm/dts/stm32mp15-ddr3-dhsom-2x2Gb-1066-binG.dtsi > +++ b/arch/arm/dts/stm32mp15-ddr3-dhsom-2x2Gb-1066-binG.dtsi > @@ -101,20 +101,8 @@ > #define DDR_ODTCR 0x00010000 > #define DDR_ZQ0CR1 0x00000038 > #define DDR_DX0GCR 0x0000CE81 > -#define DDR_DX0DLLCR 0x40000000 > -#define DDR_DX0DQTR 0xFFFFFFFF > -#define DDR_DX0DQSTR 0x3DB02000 > #define DDR_DX1GCR 0x0000CE81 > -#define DDR_DX1DLLCR 0x40000000 > -#define DDR_DX1DQTR 0xFFFFFFFF > -#define DDR_DX1DQSTR 0x3DB02000 > #define DDR_DX2GCR 0x0000CE81 > -#define DDR_DX2DLLCR 0x40000000 > -#define DDR_DX2DQTR 0xFFFFFFFF > -#define DDR_DX2DQSTR 0x3DB02000 > #define DDR_DX3GCR 0x0000CE81 > -#define DDR_DX3DLLCR 0x40000000 > -#define DDR_DX3DQTR 0xFFFFFFFF > -#define DDR_DX3DQSTR 0x3DB02000 > > #include "stm32mp15-ddr.dtsi" > diff --git a/arch/arm/dts/stm32mp15-ddr3-dhsom-2x4Gb-1066-binG.dtsi b/arch/arm/dts/stm32mp15-ddr3-dhsom-2x4Gb-1066-binG.dtsi > index d5813d64b0..e53ab18a69 100644 > --- a/arch/arm/dts/stm32mp15-ddr3-dhsom-2x4Gb-1066-binG.dtsi > +++ b/arch/arm/dts/stm32mp15-ddr3-dhsom-2x4Gb-1066-binG.dtsi > @@ -101,20 +101,8 @@ > #define DDR_ODTCR 0x00010000 > #define DDR_ZQ0CR1 0x00000038 > #define DDR_DX0GCR 0x0000CE81 > -#define DDR_DX0DLLCR 0x40000000 > -#define DDR_DX0DQTR 0xFFFFFFFF > -#define DDR_DX0DQSTR 0x3DB02000 > #define DDR_DX1GCR 0x0000CE81 > -#define DDR_DX1DLLCR 0x40000000 > -#define DDR_DX1DQTR 0xFFFFFFFF > -#define DDR_DX1DQSTR 0x3DB02000 > #define DDR_DX2GCR 0x0000CE81 > -#define DDR_DX2DLLCR 0x40000000 > -#define DDR_DX2DQTR 0xFFFFFFFF > -#define DDR_DX2DQSTR 0x3DB02000 > #define DDR_DX3GCR 0x0000CE81 > -#define DDR_DX3DLLCR 0x40000000 > -#define DDR_DX3DQTR 0xFFFFFFFF > -#define DDR_DX3DQSTR 0x3DB02000 > > #include "stm32mp15-ddr.dtsi" > diff --git a/arch/arm/dts/stm32mp15-ddr3-icore-1x4Gb-1066-binG.dtsi b/arch/arm/dts/stm32mp15-ddr3-icore-1x4Gb-1066-binG.dtsi > index 24c81269b0..ff582ac6af 100644 > --- a/arch/arm/dts/stm32mp15-ddr3-icore-1x4Gb-1066-binG.dtsi > +++ b/arch/arm/dts/stm32mp15-ddr3-icore-1x4Gb-1066-binG.dtsi > @@ -100,20 +100,8 @@ > #define DDR_ODTCR 0x00010000 > #define DDR_ZQ0CR1 0x00000038 > #define DDR_DX0GCR 0x0000CE81 > -#define DDR_DX0DLLCR 0x40000000 > -#define DDR_DX0DQTR 0xFFFFFFFF > -#define DDR_DX0DQSTR 0x3DB02000 > #define DDR_DX1GCR 0x0000CE81 > -#define DDR_DX1DLLCR 0x40000000 > -#define DDR_DX1DQTR 0xFFFFFFFF > -#define DDR_DX1DQSTR 0x3DB02000 > #define DDR_DX2GCR 0x0000CE81 > -#define DDR_DX2DLLCR 0x40000000 > -#define DDR_DX2DQTR 0xFFFFFFFF > -#define DDR_DX2DQSTR 0x3DB02000 > #define DDR_DX3GCR 0x0000CE81 > -#define DDR_DX3DLLCR 0x40000000 > -#define DDR_DX3DQTR 0xFFFFFFFF > -#define DDR_DX3DQSTR 0x3DB02000 > > #include "stm32mp15-ddr.dtsi" > diff --git a/doc/device-tree-bindings/memory-controllers/st,stm32mp1-ddr.txt b/doc/device-tree-bindings/memory-controllers/st,stm32mp1-ddr.txt > index ac6a7df432..926e3e83b3 100644 > --- a/doc/device-tree-bindings/memory-controllers/st,stm32mp1-ddr.txt > +++ b/doc/device-tree-bindings/memory-controllers/st,stm32mp1-ddr.txt > @@ -128,23 +128,6 @@ phyc attributes: > MR2 > MR3 > > -- st,phy-cal : phy cal depending of calibration or tuning of DDR > - This parameter is optional; when it is absent the built-in PHY > - calibration is done. > - for STM32MP15x: 12 values are requested in this order > - DX0DLLCR > - DX0DQTR > - DX0DQSTR > - DX1DLLCR > - DX1DQTR > - DX1DQSTR > - DX2DLLCR > - DX2DQTR > - DX2DQSTR > - DX3DLLCR > - DX3DQTR > - DX3DQSTR > - > Example: > > / { > @@ -280,21 +263,6 @@ Example: > 0x00000000 /*MR3*/ > >; > > - st,phy-cal = < > - 0x40000000 /*DX0DLLCR*/ > - 0xFFFFFFFF /*DX0DQTR*/ > - 0x3DB02000 /*DX0DQSTR*/ > - 0x40000000 /*DX1DLLCR*/ > - 0xFFFFFFFF /*DX1DQTR*/ > - 0x3DB02000 /*DX1DQSTR*/ > - 0x40000000 /*DX2DLLCR*/ > - 0xFFFFFFFF /*DX2DQTR*/ > - 0x3DB02000 /*DX2DQSTR*/ > - 0x40000000 /*DX3DLLCR*/ > - 0xFFFFFFFF /*DX3DQTR*/ > - 0x3DB02000 /*DX3DQSTR*/ > - >; > - > status = "okay"; > }; > }; > diff --git a/drivers/ram/stm32mp1/stm32mp1_ddr.c b/drivers/ram/stm32mp1/stm32mp1_ddr.c > index 1f8422518b..9d086601a4 100644 > --- a/drivers/ram/stm32mp1/stm32mp1_ddr.c > +++ b/drivers/ram/stm32mp1/stm32mp1_ddr.c > @@ -68,7 +68,6 @@ struct reg_desc { > > #define DDRPHY_REG_REG_SIZE 11 /* st,phy-reg */ > #define DDRPHY_REG_TIMING_SIZE 10 /* st,phy-timing */ > -#define DDRPHY_REG_CAL_SIZE 12 /* st,phy-cal */ > > #define DDRCTL_REG_REG(x) DDRCTL_REG(x, stm32mp1_ddrctrl_reg) > static const struct reg_desc ddr_reg[DDRCTL_REG_REG_SIZE] = { > @@ -178,22 +177,6 @@ static const struct reg_desc ddrphy_timing[DDRPHY_REG_TIMING_SIZE] = { > DDRPHY_REG_TIMING(mr3), > }; > > -#define DDRPHY_REG_CAL(x) DDRPHY_REG(x, stm32mp1_ddrphy_cal) > -static const struct reg_desc ddrphy_cal[DDRPHY_REG_CAL_SIZE] = { > - DDRPHY_REG_CAL(dx0dllcr), > - DDRPHY_REG_CAL(dx0dqtr), > - DDRPHY_REG_CAL(dx0dqstr), > - DDRPHY_REG_CAL(dx1dllcr), > - DDRPHY_REG_CAL(dx1dqtr), > - DDRPHY_REG_CAL(dx1dqstr), > - DDRPHY_REG_CAL(dx2dllcr), > - DDRPHY_REG_CAL(dx2dqtr), > - DDRPHY_REG_CAL(dx2dqstr), > - DDRPHY_REG_CAL(dx3dllcr), > - DDRPHY_REG_CAL(dx3dqtr), > - DDRPHY_REG_CAL(dx3dqstr), > -}; > - > /************************************************************** > * DYNAMIC REGISTERS: only used for debug purpose (read/modify) > **************************************************************/ > @@ -218,12 +201,24 @@ static const struct reg_desc ddrphy_dyn[] = { > DDRPHY_REG_DYN(zq0sr1), > DDRPHY_REG_DYN(dx0gsr0), > DDRPHY_REG_DYN(dx0gsr1), > + DDRPHY_REG_DYN(dx0dllcr), > + DDRPHY_REG_DYN(dx0dqtr), > + DDRPHY_REG_DYN(dx0dqstr), > DDRPHY_REG_DYN(dx1gsr0), > DDRPHY_REG_DYN(dx1gsr1), > + DDRPHY_REG_DYN(dx1dllcr), > + DDRPHY_REG_DYN(dx1dqtr), > + DDRPHY_REG_DYN(dx1dqstr), > DDRPHY_REG_DYN(dx2gsr0), > DDRPHY_REG_DYN(dx2gsr1), > + DDRPHY_REG_DYN(dx2dllcr), > + DDRPHY_REG_DYN(dx2dqtr), > + DDRPHY_REG_DYN(dx2dqstr), > DDRPHY_REG_DYN(dx3gsr0), > DDRPHY_REG_DYN(dx3gsr1), > + DDRPHY_REG_DYN(dx3dllcr), > + DDRPHY_REG_DYN(dx3dqtr), > + DDRPHY_REG_DYN(dx3dqstr), > }; > > #define DDRPHY_REG_DYN_SIZE ARRAY_SIZE(ddrphy_dyn) > @@ -240,7 +235,6 @@ enum reg_type { > REG_MAP, > REGPHY_REG, > REGPHY_TIMING, > - REGPHY_CAL, > #ifdef CONFIG_STM32MP1_DDR_INTERACTIVE > /* dynamic registers => managed in driver or not changed, > * can be dumped in interactive mode > @@ -264,8 +258,6 @@ struct ddr_reg_info { > enum base_type base; > }; > > -#define DDRPHY_REG_CAL(x) DDRPHY_REG(x, stm32mp1_ddrphy_cal) > - > const struct ddr_reg_info ddr_registers[REG_TYPE_NB] = { > [REG_REG] = { > "static", ddr_reg, DDRCTL_REG_REG_SIZE, DDR_BASE}, > @@ -279,8 +271,6 @@ const struct ddr_reg_info ddr_registers[REG_TYPE_NB] = { > "static", ddrphy_reg, DDRPHY_REG_REG_SIZE, DDRPHY_BASE}, > [REGPHY_TIMING] = { > "timing", ddrphy_timing, DDRPHY_REG_TIMING_SIZE, DDRPHY_BASE}, > -[REGPHY_CAL] = { > - "cal", ddrphy_cal, DDRPHY_REG_CAL_SIZE, DDRPHY_BASE}, > #ifdef CONFIG_STM32MP1_DDR_INTERACTIVE > [REG_DYN] = { > "dyn", ddr_dyn, DDR_REG_DYN_SIZE, DDR_BASE}, > @@ -456,9 +446,6 @@ static u32 get_par_addr(const struct stm32mp1_ddr_config *config, > case REGPHY_TIMING: > par_addr = (u32)&config->p_timing; > break; > - case REGPHY_CAL: > - par_addr = (u32)&config->p_cal; > - break; > case REG_DYN: > case REGPHY_DYN: > case REG_TYPE_NB: > @@ -774,8 +761,6 @@ start: > */ > set_reg(priv, REGPHY_REG, &config->p_reg); > set_reg(priv, REGPHY_TIMING, &config->p_timing); > - if (config->p_cal_present) > - set_reg(priv, REGPHY_CAL, &config->p_cal); > > if (INTERACTIVE(STEP_PHY_INIT)) > goto start; > @@ -810,36 +795,32 @@ start: > > wait_operating_mode(priv, DDRCTRL_STAT_OPERATING_MODE_NORMAL); > > - if (config->p_cal_present) { > - log_debug("DDR DQS training skipped.\n"); > - } else { > - log_debug("DDR DQS training : "); > + log_debug("DDR DQS training : "); > /* 8. Disable Auto refresh and power down by setting > * - RFSHCTL3.dis_au_refresh = 1 > * - PWRCTL.powerdown_en = 0 > * - DFIMISC.dfiinit_complete_en = 0 > */ > - stm32mp1_refresh_disable(priv->ctl); > + stm32mp1_refresh_disable(priv->ctl); > > /* 9. Program PUBL PGCR to enable refresh during training and rank to train > * not done => keep the programed value in PGCR > */ > > /* 10. configure PUBL PIR register to specify which training step to run */ > - /* RVTRN is excuted only on LPDDR2/LPDDR3 */ > - if (config->c_reg.mstr & DDRCTRL_MSTR_DDR3) > - pir = DDRPHYC_PIR_QSTRN; > - else > - pir = DDRPHYC_PIR_QSTRN | DDRPHYC_PIR_RVTRN; > - stm32mp1_ddrphy_init(priv->phy, pir); > + /* RVTRN is excuted only on LPDDR2/LPDDR3 */ > + if (config->c_reg.mstr & DDRCTRL_MSTR_DDR3) > + pir = DDRPHYC_PIR_QSTRN; > + else > + pir = DDRPHYC_PIR_QSTRN | DDRPHYC_PIR_RVTRN; > + stm32mp1_ddrphy_init(priv->phy, pir); > > /* 11. monitor PUB PGSR.IDONE to poll cpmpletion of training sequence */ > - ddrphy_idone_wait(priv->phy); > + ddrphy_idone_wait(priv->phy); > > /* 12. set back registers in step 8 to the orginal values if desidered */ > - stm32mp1_refresh_restore(priv->ctl, config->c_reg.rfshctl3, > - config->c_reg.pwrctl); > - } /* if (config->p_cal_present) */ > + stm32mp1_refresh_restore(priv->ctl, config->c_reg.rfshctl3, > + config->c_reg.pwrctl); > > /* enable uMCTL2 AXI port 0 and 1 */ > setbits_le32(&priv->ctl->pctrl_0, DDRCTRL_PCTRL_N_PORT_EN); > diff --git a/drivers/ram/stm32mp1/stm32mp1_ddr.h b/drivers/ram/stm32mp1/stm32mp1_ddr.h > index 4998f04439..3bfcb85a8f 100644 > --- a/drivers/ram/stm32mp1/stm32mp1_ddr.h > +++ b/drivers/ram/stm32mp1/stm32mp1_ddr.h > @@ -140,21 +140,6 @@ struct stm32mp1_ddrphy_timing { > u32 mr3; > }; > > -struct stm32mp1_ddrphy_cal { > - u32 dx0dllcr; > - u32 dx0dqtr; > - u32 dx0dqstr; > - u32 dx1dllcr; > - u32 dx1dqtr; > - u32 dx1dqstr; > - u32 dx2dllcr; > - u32 dx2dqtr; > - u32 dx2dqstr; > - u32 dx3dllcr; > - u32 dx3dqtr; > - u32 dx3dqstr; > -}; > - > struct stm32mp1_ddr_info { > const char *name; > u32 speed; /* in kHZ */ > @@ -169,8 +154,6 @@ struct stm32mp1_ddr_config { > struct stm32mp1_ddrctrl_perf c_perf; > struct stm32mp1_ddrphy_reg p_reg; > struct stm32mp1_ddrphy_timing p_timing; > - struct stm32mp1_ddrphy_cal p_cal; > - bool p_cal_present; > }; > > int stm32mp1_ddr_clk_enable(struct ddr_info *priv, u32 mem_speed); > diff --git a/drivers/ram/stm32mp1/stm32mp1_interactive.c b/drivers/ram/stm32mp1/stm32mp1_interactive.c > index 8c2310ac90..a667d49cff 100644 > --- a/drivers/ram/stm32mp1/stm32mp1_interactive.c > +++ b/drivers/ram/stm32mp1/stm32mp1_interactive.c > @@ -111,7 +111,7 @@ static void stm32mp1_do_usage(void) > "help displays help\n" > "info displays DDR information\n" > "info changes DDR information\n" > - " with = step, name, size, speed or cal\n" > + " with = step, name, size or speed\n" > "freq displays the DDR PHY frequency in kHz\n" > "freq changes the DDR PHY frequency\n" > "param [type|reg] prints input parameters\n" > @@ -132,7 +132,7 @@ static void stm32mp1_do_usage(void) > "\nwith for [type|reg]:\n" > " all registers if absent\n" > " = ctl, phy\n" > - " or one category (static, timing, map, perf, cal, dyn)\n" > + " or one category (static, timing, map, perf, dyn)\n" > " = name of the register\n" > }; > > @@ -165,7 +165,6 @@ static void stm32mp1_do_info(struct ddr_info *priv, > printf("name = %s\n", config->info.name); > printf("size = 0x%x\n", config->info.size); > printf("speed = %d kHz\n", config->info.speed); > - printf("cal = %d\n", config->p_cal_present); > return; > } > > @@ -214,16 +213,6 @@ static void stm32mp1_do_info(struct ddr_info *priv, > } > return; > } > - if (!strcmp(argv[1], "cal")) { > - if (strict_strtoul(argv[2], 10, &value) < 0 || > - (value != 0 && value != 1)) { > - printf("invalid value %s\n", argv[2]); > - } else { > - config->p_cal_present = value; > - printf("cal = %d\n", config->p_cal_present); > - } > - return; > - } > printf("argument %s invalid\n", argv[1]); > } > > diff --git a/drivers/ram/stm32mp1/stm32mp1_ram.c b/drivers/ram/stm32mp1/stm32mp1_ram.c > index 98fa1f4f11..3b65269b98 100644 > --- a/drivers/ram/stm32mp1/stm32mp1_ram.c > +++ b/drivers/ram/stm32mp1/stm32mp1_ram.c > @@ -95,26 +95,22 @@ static __maybe_unused int stm32mp1_ddr_setup(struct udevice *dev) > { .name = x, \ > .offset = offsetof(struct stm32mp1_ddr_config, y), \ > .size = sizeof(config.y) / sizeof(u32), \ > - .present = z, \ > } > > #define CTL_PARAM(x) PARAM("st,ctl-"#x, c_##x, NULL) > #define PHY_PARAM(x) PARAM("st,phy-"#x, p_##x, NULL) > -#define PHY_PARAM_OPT(x) PARAM("st,phy-"#x, p_##x, &config.p_##x##_present) > > const struct { > const char *name; /* name in DT */ > const u32 offset; /* offset in config struct */ > const u32 size; /* size of parameters */ > - bool * const present; /* presence indication for opt */ > } param[] = { > CTL_PARAM(reg), > CTL_PARAM(timing), > CTL_PARAM(map), > CTL_PARAM(perf), > PHY_PARAM(reg), > - PHY_PARAM(timing), > - PHY_PARAM_OPT(cal) > + PHY_PARAM(timing) > }; > > config.info.speed = ofnode_read_u32_default(node, "st,mem-speed", 0); > @@ -133,25 +129,11 @@ static __maybe_unused int stm32mp1_ddr_setup(struct udevice *dev) > param[idx].size); > dev_dbg(dev, "%s: %s[0x%x] = %d\n", __func__, > param[idx].name, param[idx].size, ret); > - if (ret && > - (ret != -FDT_ERR_NOTFOUND || !param[idx].present)) { > + if (ret) { > dev_err(dev, "Cannot read %s, error=%d\n", > param[idx].name, ret); > return -EINVAL; > } > - if (param[idx].present) { > - /* save presence of optional parameters */ > - *param[idx].present = true; > - if (ret == -FDT_ERR_NOTFOUND) { > - *param[idx].present = false; > -#ifdef CONFIG_STM32MP1_DDR_INTERACTIVE > - /* reset values if used later */ > - memset((void *)((u32)&config + > - param[idx].offset), > - 0, param[idx].size * sizeof(u32)); > -#endif > - } > - } > } > > ret = clk_get_by_name(dev, "axidcg", &axidcg); > Reviewed-by: Patrice Chotard Thanks Patrice