diff mbox series

ddr: imx: Save the FW loading if it hasn't changed

Message ID 20230102122034.32686-1-shawnguo@kernel.org
State New
Headers show
Series ddr: imx: Save the FW loading if it hasn't changed | expand

Commit Message

Shawn Guo Jan. 2, 2023, 12:20 p.m. UTC
From: Shawn Guo <shawn.guo@linaro.org>

Function ddr_load_train_firmware() is called 4 times in a loop by
ddr_cfg_phy(). The first 3 calls are all '1D' type and just loading the
same FWs.  Let's add a type check and save 2 of them.  This helps to
reduce DDRPHY training time from 269 ms down to 212 ms, and thus speed
up boot time ~ 50 ms.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
---
 drivers/ddr/imx/phy/helper.c | 7 +++++++
 1 file changed, 7 insertions(+)

Comments

Fabio Estevam Jan. 2, 2023, 1:49 p.m. UTC | #1
On Mon, Jan 2, 2023 at 9:21 AM Shawn Guo <shawnguo@kernel.org> wrote:
>
> From: Shawn Guo <shawn.guo@linaro.org>
>
> Function ddr_load_train_firmware() is called 4 times in a loop by
> ddr_cfg_phy(). The first 3 calls are all '1D' type and just loading the
> same FWs.  Let's add a type check and save 2 of them.  This helps to
> reduce DDRPHY training time from 269 ms down to 212 ms, and thus speed
> up boot time ~ 50 ms.
>
> Signed-off-by: Shawn Guo <shawn.guo@linaro.org>

Reviewed-by: Fabio Estevam <festevam@denx.de>
diff mbox series

Patch

diff --git a/drivers/ddr/imx/phy/helper.c b/drivers/ddr/imx/phy/helper.c
index e9e0294f87d3..508e1f0de34f 100644
--- a/drivers/ddr/imx/phy/helper.c
+++ b/drivers/ddr/imx/phy/helper.c
@@ -49,6 +49,13 @@  void ddr_load_train_firmware(enum fw_type type)
 	unsigned long imem_start = (unsigned long)&_end + fw_offset;
 	unsigned long dmem_start;
 	unsigned long imem_len = IMEM_LEN, dmem_len = DMEM_LEN;
+	static enum fw_type last_type = -1;
+
+	/* If FW doesn't change, we can save the loading. */
+	if (last_type == type)
+		return;
+
+	last_type = type;
 
 #ifdef CONFIG_SPL_OF_CONTROL
 	if (gd->fdt_blob && !fdt_check_header(gd->fdt_blob)) {