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 2E4ABC433EF for ; Sun, 22 May 2022 13:59:52 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 0500083F1F; Sun, 22 May 2022 15:59:50 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.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=gmail.com header.i=@gmail.com header.b="ZCJhKZBU"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 1F9AF83E9A; Sun, 22 May 2022 15:59:49 +0200 (CEST) Received: from mail-ej1-x62d.google.com (mail-ej1-x62d.google.com [IPv6:2a00:1450:4864:20::62d]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 42D7D83F48 for ; Sun, 22 May 2022 15:59:42 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=alpernebiyasak@gmail.com Received: by mail-ej1-x62d.google.com with SMTP id jx22so10307563ejb.12 for ; Sun, 22 May 2022 06:59:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:date:mime-version:user-agent:from:subject:to:cc :references:content-language:in-reply-to:content-transfer-encoding; bh=ssJwYEALIdNVrQ9cAAGaSHry1qR0bTz7L2+/NNYfa48=; b=ZCJhKZBUmBR3KUWdRQg9D4JPhlj5aHCH1zaAjbq+nyVppF7ZK4mLEU8rNenc0qSMw3 h0a9h0ux6bFDfL+lBDLQj3kidH2mHmoW1z1xRj1f8G17np0i0cr6jeKuQ/8UO5GjJcXW k2ds7L2v34lWS2a/4J/jV9eXTzteG7ziy38WXwsuQ9nLyHM/gfqoSkdpheuAUFhExF9i umBoZR3V5AjZ6YY6hglwY0/umPB99UpGOczxpsy5K00tUz5gqwhSGsBBPpdD9bhELCHq xgUdU91L4SMLJM8H/r0eHO24YYpApxUnmHYxWhbLnIgdqtowFfx53c42PacXv3RvdUwP zftQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:from :subject:to:cc:references:content-language:in-reply-to :content-transfer-encoding; bh=ssJwYEALIdNVrQ9cAAGaSHry1qR0bTz7L2+/NNYfa48=; b=o5Uy7ylqzM6zxPRfg7ULgtLDjcm8sVKww1DUA08AOj7Gm+aailxwEykiu6AdEOlIb7 /7AwXCNKZYN9+MBBxRS6SaQJkNSoVhGApVdLT8oh7PTx2imemvXtVx6RoHEBR314PNJk VTKCTnTIKHjZ+3k2WsUF26wHkyGqxmQ1CDWRBucN0uLXkdNot2e9Y98sxmES9fSSJmwj XvKTqwvpcrBRSF64RNZL9q8Zsa0Blb/X1UByS4HDN5jlBL2U3oHm6ygWb+uYPkYlw/pq 0p7EUlnGONX3rf+Uu4OqjTguU1YVxdbptZdQE6G9yvyMiKwyrsfi/14rn/kiybOU9Gfq S1gQ== X-Gm-Message-State: AOAM530QNk1RLjGqVdXu5Uz4xl84fboL+ixbDNs+cMF2uJHKYbZQ5b9U 9N0IPU8qT+Mw18S6NGhLPMo= X-Google-Smtp-Source: ABdhPJyRlXPf29mMv0EnXYGaBcFWGmsCJOFTNwjbSt9LvyOdDsqGKKvj9w7POO5tFZHj8NrDnbwgDQ== X-Received: by 2002:a17:907:c22:b0:6fe:bb0d:a259 with SMTP id ga34-20020a1709070c2200b006febb0da259mr6255069ejc.608.1653227981882; Sun, 22 May 2022 06:59:41 -0700 (PDT) Received: from [192.168.0.74] ([178.233.178.185]) by smtp.gmail.com with ESMTPSA id s4-20020a170906500400b006fed787478asm561594ejj.92.2022.05.22.06.59.36 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 22 May 2022 06:59:41 -0700 (PDT) Message-ID: <08a31c30-e119-86e4-7a8b-c8fd8a5dadd7@gmail.com> Date: Sun, 22 May 2022 16:57:41 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux aarch64; rv:91.0) Gecko/20100101 Thunderbird/91.9.0 From: Alper Nebi Yasak Subject: Re: [PATCH V4 6/8] ddr: imx8m: helper: load ddr firmware according to binman symbols To: "Peng Fan (OSS)" Cc: u-boot@lists.denx.de, Peng Fan , sbabic@denx.de, festevam@gmail.com, ariel.dalessandro@collabora.com, michael@amarulasolutions.com, tharvey@gateworks.com, sjg@chromium.org, marek.behun@nic.cz, pali@kernel.org, sr@denx.de, ricardo@foundries.io, patrick.delaunay@foss.st.com, trini@konsulko.com References: <20220520141048.20034-1-peng.fan@oss.nxp.com> <20220520141048.20034-7-peng.fan@oss.nxp.com> Content-Language: en-US In-Reply-To: <20220520141048.20034-7-peng.fan@oss.nxp.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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.5 at phobos.denx.de X-Virus-Status: Clean On 20/05/2022 17:10, Peng Fan (OSS) wrote: > From: Peng Fan > > By reading binman symbols, we no need hard coded IMEM_LEN/DMEM_LEN after > we update the binman dtsi to drop 0x8000/0x4000 length for the firmware. > > And that could save binary size for many KBs. > > Tested-by: Tim Harvey #imx8m[m,n,p]-venice > Signed-off-by: Peng Fan > --- > drivers/ddr/imx/imx8m/helper.c | 51 ++++++++++++++++++++++++++++------ > 1 file changed, 43 insertions(+), 8 deletions(-) > > diff --git a/drivers/ddr/imx/imx8m/helper.c b/drivers/ddr/imx/imx8m/helper.c > index f23904bf712..b3bd57531b7 100644 > --- a/drivers/ddr/imx/imx8m/helper.c > +++ b/drivers/ddr/imx/imx8m/helper.c > @@ -4,6 +4,7 @@ > */ > > #include > +#include > #include > #include > #include > @@ -25,15 +26,30 @@ DECLARE_GLOBAL_DATA_PTR; > #define DMEM_OFFSET_ADDR 0x00054000 > #define DDR_TRAIN_CODE_BASE_ADDR IP2APB_DDRPHY_IPS_BASE_ADDR(0) > > +binman_sym_declare(ulong, blob_ext_1, image_pos); > +binman_sym_declare(ulong, blob_ext_1, size); > + > +binman_sym_declare(ulong, blob_ext_2, image_pos); > +binman_sym_declare(ulong, blob_ext_2, size); > + > +#if !IS_ENABLED(CONFIG_IMX8M_DDR3L) > +binman_sym_declare(ulong, blob_ext_3, image_pos); > +binman_sym_declare(ulong, blob_ext_3, size); > + > +binman_sym_declare(ulong, blob_ext_4, image_pos); > +binman_sym_declare(ulong, blob_ext_4, size); > +#endif > + (Descriptive entry names would make these more meaningful.) > /* We need PHY iMEM PHY is 32KB padded */ > void ddr_load_train_firmware(enum fw_type type) > { > u32 tmp32, i; > u32 error = 0; > unsigned long pr_to32, pr_from32; > - unsigned long fw_offset = type ? IMEM_2D_OFFSET : 0; > - unsigned long imem_start = (unsigned long)&_end + fw_offset; > - unsigned long dmem_start; > + uint32_t fw_offset = type ? IMEM_2D_OFFSET : 0; > + uint32_t imem_start = (unsigned long)&_end + fw_offset; > + uint32_t dmem_start; > + uint32_t imem_len = IMEM_LEN, dmem_len = DMEM_LEN; > > #ifdef CONFIG_SPL_OF_CONTROL > if (gd->fdt_blob && !fdt_check_header(gd->fdt_blob)) { > @@ -43,11 +59,30 @@ void ddr_load_train_firmware(enum fw_type type) > } > #endif > > - dmem_start = imem_start + IMEM_LEN; > + if (CONFIG_IS_ENABLED(BINMAN_SYMBOLS)) { > + switch (type) { > + case FW_1D_IMAGE: > + imem_start = binman_sym(ulong, blob_ext_1, image_pos); > + imem_len = binman_sym(ulong, blob_ext_1, size); > + dmem_start = binman_sym(ulong, blob_ext_2, image_pos); > + dmem_len = binman_sym(ulong, blob_ext_2, size); > + break; > + case FW_2D_IMAGE: > +#if !IS_ENABLED(CONFIG_IMX8M_DDR3L) > + imem_start = binman_sym(ulong, blob_ext_3, image_pos); > + imem_len = binman_sym(ulong, blob_ext_3, size); > + dmem_start = binman_sym(ulong, blob_ext_4, image_pos); > + dmem_len = binman_sym(ulong, blob_ext_4, size); > +#endif > + break; > + } > + } > + > + dmem_start = imem_start + imem_len; This overwrites the values from binman symbols, which looks wrong to me. I think this line should appear before the if block. > > pr_from32 = imem_start; > pr_to32 = DDR_TRAIN_CODE_BASE_ADDR + 4 * IMEM_OFFSET_ADDR; > - for (i = 0x0; i < IMEM_LEN; ) { > + for (i = 0x0; i < imem_len; ) { > tmp32 = readl(pr_from32); > writew(tmp32 & 0x0000ffff, pr_to32); > pr_to32 += 4; > @@ -59,7 +94,7 @@ void ddr_load_train_firmware(enum fw_type type) > > pr_from32 = dmem_start; > pr_to32 = DDR_TRAIN_CODE_BASE_ADDR + 4 * DMEM_OFFSET_ADDR; > - for (i = 0x0; i < DMEM_LEN; ) { > + for (i = 0x0; i < dmem_len; ) { > tmp32 = readl(pr_from32); > writew(tmp32 & 0x0000ffff, pr_to32); > pr_to32 += 4; > @@ -72,7 +107,7 @@ void ddr_load_train_firmware(enum fw_type type) > debug("check ddr_pmu_train_imem code\n"); > pr_from32 = imem_start; > pr_to32 = DDR_TRAIN_CODE_BASE_ADDR + 4 * IMEM_OFFSET_ADDR; > - for (i = 0x0; i < IMEM_LEN; ) { > + for (i = 0x0; i < imem_len; ) { > tmp32 = (readw(pr_to32) & 0x0000ffff); > pr_to32 += 4; > tmp32 += ((readw(pr_to32) & 0x0000ffff) << 16); > @@ -93,7 +128,7 @@ void ddr_load_train_firmware(enum fw_type type) > debug("check ddr4_pmu_train_dmem code\n"); > pr_from32 = dmem_start; > pr_to32 = DDR_TRAIN_CODE_BASE_ADDR + 4 * DMEM_OFFSET_ADDR; > - for (i = 0x0; i < DMEM_LEN;) { > + for (i = 0x0; i < dmem_len;) { > tmp32 = (readw(pr_to32) & 0x0000ffff); > pr_to32 += 4; > tmp32 += ((readw(pr_to32) & 0x0000ffff) << 16);