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 2213AC433EF for ; Fri, 22 Apr 2022 12:33:10 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 34FC083C70; Fri, 22 Apr 2022 14:33:07 +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="Rivt0sTH"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 72EDD839DF; Fri, 22 Apr 2022 14:33:04 +0200 (CEST) Received: from mail-pl1-x62d.google.com (mail-pl1-x62d.google.com [IPv6:2607:f8b0: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 95367831CA for ; Fri, 22 Apr 2022 14:33:00 +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=jh80.chung@gmail.com Received: by mail-pl1-x62d.google.com with SMTP id q3so10557871plg.3 for ; Fri, 22 Apr 2022 05:33:00 -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:subject:content-language:to :cc:references:from:in-reply-to:content-transfer-encoding; bh=82YHmMJ+YoFjvPXN9k7+SKffwHOg78ZGiYJlCxBM3rk=; b=Rivt0sTHVXc7RIPUlBdxfK6YOO30rgZb+sRx2aniG88UxF+Q/+H9Sw1FxVZIkRIWIW /c3gsqO7uNQyqldG/ExCbgW6wFyQvV3ro4GnA8fsGbulC0wKRam0Xoo7CZn8uRQwQVaz Vnc5HHEE8vXL01KIclyriLFdko366EM2qaA/pGvHMioE4a4fxQM5H5jh12NeZ8Ra30t6 HJte/mnIKeFyblPsTSLlZn3Lyff997sPVtGrTrVhIelohdBdgQfQSeg/5dtAGava2j+p tY0WIbsVZYzUobEGSNzZtZmxw9MoGiaDsscedYQLfx7Z6HYfnZ7kc1HaWpk6Q3sfeP/z NPmw== 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:subject :content-language:to:cc:references:from:in-reply-to :content-transfer-encoding; bh=82YHmMJ+YoFjvPXN9k7+SKffwHOg78ZGiYJlCxBM3rk=; b=QjdB7tJB5T0ljxrckGlH18TcHsGB+8Dq/J4rsFPFxJXJoQzqyyKaobajL8K7HDDOf9 Amv5Rn69jsUfngec/1DMMxwN9viXgQ0zUXiUveZyrodPd6FbyRfeGxDem9BbXLiyoC3t +uXB7h3dqxSOpDhaXTeLS96ImoYzdaUPrVnj1FTj8Qfe3i9apWcBz+mvntGleZKBne9A OqyN5njuDw7XoSq5MNqI72YVewOGIur9zxBE0GRz+E74slztSzsNV/Yit9CVPlWnCaw+ TB9e/AFUx48fngXP9W1I+yjqlXd+fhL5OnpsTlRMPxuhgXcd28fJ78Z/UCB7HUesibFQ Yh6Q== X-Gm-Message-State: AOAM530OsynZplvDBfQ/f8icIWJzMlpcxT5mRXBwfVMjHeYuH1T/neFC LeVRHWTkGL3u9fwhctrZlhk= X-Google-Smtp-Source: ABdhPJzi/y6ow5boQsW2WlAZl3+kAK+jbsS6Tf/m73VKnxz5G23+y00QQ2L6+7HZ2TFUlz6UGmvFjQ== X-Received: by 2002:a17:90b:3b4f:b0:1d2:7117:d758 with SMTP id ot15-20020a17090b3b4f00b001d27117d758mr15905083pjb.105.1650630779006; Fri, 22 Apr 2022 05:32:59 -0700 (PDT) Received: from [192.168.0.19] ([183.99.112.216]) by smtp.gmail.com with ESMTPSA id bw22-20020a056a00409600b0050a8e795672sm2429847pfb.29.2022.04.22.05.32.56 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 22 Apr 2022 05:32:57 -0700 (PDT) Message-ID: Date: Fri, 22 Apr 2022 21:32:54 +0900 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.7.0 Subject: Re: [PATCH] mmc: fsl_esdhc_spl: pre-PBL: implement redundancy support Content-Language: en-US To: =?UTF-8?Q?Pali_Roh=c3=a1r?= , Priyanka Jain , Peng Fan , Jaehoon Chung Cc: u-boot@lists.denx.de References: <20220404163311.5853-1-pali@kernel.org> From: Jaehoon Chung In-Reply-To: <20220404163311.5853-1-pali@kernel.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 4/5/22 01:33, Pali Rohár wrote: > QorIQ pre-PBL BootROM scans first 24 SD card sectors (each with fixed 512 > bytes length) for boot signature. Implement same redundancy behavior in > fsl_esdhc_spl driver to allow loading proper U-Boot when boot sector is not > the first one. > > Signed-off-by: Pali Rohár > --- > drivers/mmc/fsl_esdhc_spl.c | 25 ++++++++++++++++++------- > 1 file changed, 18 insertions(+), 7 deletions(-) > > diff --git a/drivers/mmc/fsl_esdhc_spl.c b/drivers/mmc/fsl_esdhc_spl.c > index 0146a231b221..ea8f4cd66964 100644 > --- a/drivers/mmc/fsl_esdhc_spl.c > +++ b/drivers/mmc/fsl_esdhc_spl.c > @@ -20,7 +20,6 @@ > #define ESDHC_BOOT_IMAGE_ADDR 0x50 > #define MBRDBR_BOOT_SIG_55 0x1fe > #define MBRDBR_BOOT_SIG_AA 0x1ff > -#define CONFIG_CFG_DATA_SECTOR 0 > > > void mmc_spl_load_image(uint32_t offs, unsigned int size, void *vdst) > @@ -62,11 +61,13 @@ void __noreturn mmc_boot(void) > #ifndef CONFIG_FSL_CORENET > uchar *tmp_buf; > u32 blklen; > + u32 blk_off; > uchar val; > #ifndef CONFIG_SPL_FSL_PBL > u32 val32; > #endif > uint i, byte_num; > + u32 sector; > #endif > u32 offset, code_len; > struct mmc *mmc; > @@ -86,30 +87,37 @@ void __noreturn mmc_boot(void) > offset = CONFIG_SYS_MMC_U_BOOT_OFFS; > #else > blklen = mmc->read_bl_len; > + if (blklen < 512) > + blklen = 512; > tmp_buf = malloc(blklen); > if (!tmp_buf) { > puts("spl: malloc memory failed!!\n"); > hang(); > } > + > + sector = 0; Why does it assign to 0 at here? Doesn't initialize this at above? Does it need to check whether CONFIG_SPL_FSL_PBL enabled or not? Best Regards, Jaehoon Chung > +again: > memset(tmp_buf, 0, blklen); > > /* > * Read source addr from sd card > */ > - err = mmc->block_dev.block_read(&mmc->block_dev, > - CONFIG_CFG_DATA_SECTOR, 1, tmp_buf); > + blk_start = (sector * 512) / mmc->read_bl_len; > + blk_off = (sector * 512) % mmc->read_bl_len; > + blk_cnt = DIV_ROUND_UP(512, mmc->read_bl_len); > + err = mmc->block_dev.block_read(&mmc->block_dev, blk_start, blk_cnt, tmp_buf); > if (err != 1) { > puts("spl: mmc read failed!!\n"); > hang(); > } > > #ifdef CONFIG_SPL_FSL_PBL > - val = *(tmp_buf + MBRDBR_BOOT_SIG_55); > + val = *(tmp_buf + blk_off + MBRDBR_BOOT_SIG_55); > if (0x55 != val) { > puts("spl: mmc MBR/DBR signature is not valid!!\n"); > hang(); > } > - val = *(tmp_buf + MBRDBR_BOOT_SIG_AA); > + val = *(tmp_buf + blk_off + MBRDBR_BOOT_SIG_AA); > if (0xAA != val) { > puts("spl: mmc MBR/DBR signature is not valid!!\n"); > hang(); > @@ -123,10 +131,13 @@ void __noreturn mmc_boot(void) > byte_num = 4; > val32 = 0; > for (i = 0; i < byte_num; i++) { > - val = *(tmp_buf + ESDHC_BOOT_SIGNATURE_OFF + i); > + val = *(tmp_buf + blk_off + ESDHC_BOOT_SIGNATURE_OFF + i); > val32 = (val32 << 8) + val; > } > if (val32 != ESDHC_BOOT_SIGNATURE) { > + /* BOOT signature may be on the first 24 sectors (each being 512 bytes) */ > + if (++sector < 24) > + goto again; > puts("spl: mmc BOOT signature is not valid!!\n"); > hang(); > } > @@ -135,7 +146,7 @@ void __noreturn mmc_boot(void) > byte_num = 4; > offset = 0; > for (i = 0; i < byte_num; i++) { > - val = *(tmp_buf + ESDHC_BOOT_IMAGE_ADDR + i); > + val = *(tmp_buf + blk_off + ESDHC_BOOT_IMAGE_ADDR + i); > offset = (offset << 8) + val; > } > offset += CONFIG_SYS_MMC_U_BOOT_OFFS;