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

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(+)
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)) {

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
participants (2)
-
Fabio Estevam
-
Shawn Guo