From patchwork Wed Nov 8 16:48:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861701 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=SBzTYVNr; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWJh3pstz1yQl for ; Thu, 9 Nov 2023 03:49:24 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 94512871C0; Wed, 8 Nov 2023 17:49:09 +0100 (CET) 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="SBzTYVNr"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 985718749D; Wed, 8 Nov 2023 17:49:07 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.2 Received: from mail-qv1-xf2f.google.com (mail-qv1-xf2f.google.com [IPv6:2607:f8b0:4864:20::f2f]) (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 F1BFC874A3 for ; Wed, 8 Nov 2023 17:49:03 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-qv1-xf2f.google.com with SMTP id 6a1803df08f44-66d76904928so43392896d6.2 for ; Wed, 08 Nov 2023 08:49:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462142; x=1700066942; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=TAPTkJa4tN6E8ZgahKgZs1nUvVGwc9xebnkrI6bMXfI=; b=SBzTYVNr7myGNDGe0rWxwjaT4IBrVIVTIlOLxZchHXGgZzS1beXC3lqGjtVSlBz1IY pXQfSmARQ8pRpnTDJQEX+KWxllbDJH0eTu3Q7Eg1soIldmYKLcZOZZ9ft6rer4gMSTuE 3PaetN0EttImpdulLSSEXL1tKUdA3AeljZFfA/zF6+84I/cUafuKI/q3DbNnitnmCcB6 rlc6s1iZZIeOlh0YoBdglZiXu3PhnxN/YfwJ0QdwrOrO8Dgar8GUdYP/0QcOPvNv+jgT kKSGRB1LfrSw3ZvupVYAp/+vtlvOQU0toxgsHtjS8KlIi4jBQ5c2uPT6c/c3syDTdlYU J7Vw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462142; x=1700066942; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TAPTkJa4tN6E8ZgahKgZs1nUvVGwc9xebnkrI6bMXfI=; b=hOufA7fO/ovgcijnaJWM2hmvhfnbHZRuSR51dewCnryB16eyfRj+KrXWQmNzPq40An SCLQz6D776Mz0kO3sbD+EZ2o4R14BZH2ks34nCJqXIh59XKXP1e/ZeovTxr7WKqLU14n cyBdu+ATnjOYkWz7RZJKiFwpeYKRldwzc/Sfv3UTGQNsz1kAxD2oJdQ8nm7YblFlkq2e s1vRGAlyVzzOhAJcIe04tdqsrff27w+GqGLt26d0dh11pTwhNMr2sUeUw81fGEfNnaaZ LsNQVz4PDgFxPJcyDKv3QRrI69K+PnMeEdzVj3ZH/IiozcK4/CkpeVjNegNtjEOJNVcn 3SNQ== X-Gm-Message-State: AOJu0Ywgkpc1aVWCYzzFs+6HTsIRj/NN/6UYClONWlyWXDIwqLR7Qjjj otHaVIOBw90N4s6xC4GwTG8= X-Google-Smtp-Source: AGHT+IEIdwHsHwHD2l7DwjxCO6N9qylmSPPk84tfsek2nU5PhY+OfkXz/w15UO3ZRLw9zIGC3/WpNQ== X-Received: by 2002:a05:6214:29e5:b0:66d:6266:40d3 with SMTP id jv5-20020a05621429e500b0066d626640d3mr2430828qvb.27.1699462142565; Wed, 08 Nov 2023 08:49:02 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id m21-20020ae9f215000000b00767177a5bebsm1207491qkg.56.2023.11.08.08.49.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:02 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson , Mayuresh Chitale Subject: [PATCH v7 01/26] spl: blk_fs: Fix uninitialized return value when we can't get a blk_desc Date: Wed, 8 Nov 2023 11:48:33 -0500 Message-Id: <20231108164858.3497420-2-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean Initialize ret to avoid returning garbage if blk_get_devnum_by_uclass_id fails. Fixes: 8ce6a2e1757 ("spl: blk: Support loading images from fs") Signed-off-by: Sean Anderson Reviewed-by: Simon Glass --- (no changes since v6) Changes in v6: - New common/spl/spl_blk_fs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/spl/spl_blk_fs.c b/common/spl/spl_blk_fs.c index 63825d620d1..144c8a65b5d 100644 --- a/common/spl/spl_blk_fs.c +++ b/common/spl/spl_blk_fs.c @@ -50,7 +50,7 @@ int spl_blk_load_image(struct spl_image_info *spl_image, struct blk_desc *blk_desc; loff_t actlen, filesize; struct blk_dev dev; - int ret; + int ret = -ENODEV; blk_desc = blk_get_devnum_by_uclass_id(uclass_id, devnum); if (!blk_desc) { From patchwork Wed Nov 8 16:48:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861702 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=gAD6EA+V; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWK22rk6z1yQl for ; Thu, 9 Nov 2023 03:49:42 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 73160874BD; Wed, 8 Nov 2023 17:49:10 +0100 (CET) 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="gAD6EA+V"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id B0B488749D; Wed, 8 Nov 2023 17:49:07 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-yw1-x1133.google.com (mail-yw1-x1133.google.com [IPv6:2607:f8b0:4864:20::1133]) (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 1C75D87527 for ; Wed, 8 Nov 2023 17:49:05 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-yw1-x1133.google.com with SMTP id 00721157ae682-5a7dd65052aso87480117b3.0 for ; Wed, 08 Nov 2023 08:49:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462144; x=1700066944; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=VgRFOaK8aMR5yh9ksEtOoDSyTkzOJnCkG2arOa0oT+8=; b=gAD6EA+VFtvM21tK/+ZoG38qGALD7dll1X51Rb/BLP6x98pg1aOgCLhxEfi4+BqtiL G8/bQUSa/Z6hEYEDZmXqHbY0vB3w05WLbEoiaiQ7Aq09VmILF/ZiabRvHhxydmS5mKcq PBc3tIaiPLj9ZsxqqkXaK1x84QlCoQciO3QHx+rjCQ3c1Et6BwHfntyCUVz/vUZbGQft rgp5MEB6Ys24Pg44L8IZig27O/fWWU7IIPGbRoonQmSbcN451ptV0Aw1VLAbSNvSpVY+ GmSiCaxp3tr/rld1MhGTzPYL7OAYxRvjVZ9jdv9MW6dmhyj23Agv+ySKhC0qifQ0om8A lbDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462144; x=1700066944; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VgRFOaK8aMR5yh9ksEtOoDSyTkzOJnCkG2arOa0oT+8=; b=LrxiHTuJl1iYuARS2jrIjdChx1sHC+UdrJDqSRGYv0StoAOGtTsVWlzXok/iJ/kUI+ wMgp3Z+YmzqebkIGSi9dXNhkwWeYL3fxKyM5M5pLKLO5+oDfiTHgJbza3kjrXSdjwcf/ NiSbZLSS05+M6Pbrqjf6uDdfxlEoNkHWV6TJjBAaRkWIwVatmc+0sB7pHv3Hy0jadEaa 7GOp9p2LYVfJGjh0z2OhziOQVlAsDBr9yYDgE6K6KS58wJaukQTpo5A7AK9TMrkrYMXV zyjGgfceLtMI9VA8rN1AH3R7qjsOXg/4IZCIUWLS2jDuFHKpzOxIKcFaTfXHXCtPaGvY Amkg== X-Gm-Message-State: AOJu0YxVeSsBN25VUM+pjmu2eR1fb5hk5U9Lmbxa6h6/H4riad+49RB2 TwkkDM7me1xpMALkUCNG+1E= X-Google-Smtp-Source: AGHT+IGxErf9iAcVRzjvBseB2t5dwMgWth2rFpk9nhbqcQ3OB6yl6M8uhjzIhWglQNgjJpxe94yyRQ== X-Received: by 2002:a81:5f87:0:b0:5a7:e6fb:39b with SMTP id t129-20020a815f87000000b005a7e6fb039bmr2258009ywb.1.1699462143808; Wed, 08 Nov 2023 08:49:03 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id y5-20020a056214016500b0065b229ecb8dsm1250603qvs.3.2023.11.08.08.49.03 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:03 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson , Michal Simek Subject: [PATCH v7 02/26] arm: Disable SPL_FS_FAT when it isn't used Date: Wed, 8 Nov 2023 11:48:34 -0500 Message-Id: <20231108164858.3497420-3-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean Several boards enable SPL_FS_FAT and SPL_LIBDISK_SUPPORT when they can't be used (as there is no block device support enabled). Disable these configs. The list of boards was generated with the following command: $ tools/qconfig.py -f SPL SPL_FS_FAT ~SPL_MMC ~SPL_BLK_FS ~SPL_SATA \ ~SPL_USB_STORAGE ~ENV_IS_IN_FAT ~EFI LIBDISK was left enabled for the am* boards, since it seems to result in actual size reduction, indicating that partitions are being used for something. Signed-off-by: Sean Anderson Reviewed-by: Simon Glass Reviewed-by: Michal Simek --- Changes in v7: - Disable FS_FAT for the zynq(mp) boards as well, as suggested by Michal Changes in v6: - New configs/am335x_evm_spiboot_defconfig | 2 +- configs/am65x_evm_r5_usbdfu_defconfig | 1 - configs/xilinx_zynqmp_mini_qspi_defconfig | 3 ++- configs/zynq_cse_nand_defconfig | 2 ++ configs/zynq_cse_nor_defconfig | 2 ++ configs/zynq_cse_qspi_defconfig | 2 ++ 6 files changed, 9 insertions(+), 3 deletions(-) diff --git a/configs/am335x_evm_spiboot_defconfig b/configs/am335x_evm_spiboot_defconfig index b5b11fb62c8..fff5265e56a 100644 --- a/configs/am335x_evm_spiboot_defconfig +++ b/configs/am335x_evm_spiboot_defconfig @@ -13,6 +13,7 @@ CONFIG_CLOCK_SYNTHESIZER=y # CONFIG_OF_LIBFDT_OVERLAY is not set # CONFIG_SPL_MMC is not set CONFIG_SPL=y +# CONFIG_SPL_FS_FAT is not set CONFIG_SPL_SPI_FLASH_SUPPORT=y CONFIG_SPL_SPI=y CONFIG_TIMESTAMP=y @@ -27,7 +28,6 @@ CONFIG_SPL_SYS_MALLOC=y CONFIG_SPL_SYS_MALLOC_SIZE=0x800000 CONFIG_SPL_FIT_IMAGE_TINY=y # CONFIG_SPL_FS_EXT4 is not set -CONFIG_SPL_FS_LOAD_PAYLOAD_NAME="u-boot.img" CONFIG_SPL_MTD=y # CONFIG_SPL_NAND_SUPPORT is not set CONFIG_SPL_DM_SPI_FLASH=y diff --git a/configs/am65x_evm_r5_usbdfu_defconfig b/configs/am65x_evm_r5_usbdfu_defconfig index f610b2dd94e..6b0bb120d10 100644 --- a/configs/am65x_evm_r5_usbdfu_defconfig +++ b/configs/am65x_evm_r5_usbdfu_defconfig @@ -21,7 +21,6 @@ CONFIG_SPL_DRIVERS_MISC=y CONFIG_SPL_STACK_R_ADDR=0x82000000 CONFIG_SPL_SIZE_LIMIT=0x7ec00 CONFIG_SPL_SIZE_LIMIT_PROVIDE_STACK=0x2000 -CONFIG_SPL_FS_FAT=y CONFIG_SPL_LIBDISK_SUPPORT=y # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set CONFIG_SPL_LOAD_FIT=y diff --git a/configs/xilinx_zynqmp_mini_qspi_defconfig b/configs/xilinx_zynqmp_mini_qspi_defconfig index a1adfb9e5d1..b044743474d 100644 --- a/configs/xilinx_zynqmp_mini_qspi_defconfig +++ b/configs/xilinx_zynqmp_mini_qspi_defconfig @@ -11,6 +11,8 @@ CONFIG_ENV_SIZE=0x80 CONFIG_DEFAULT_DEVICE_TREE="zynqmp-mini-qspi" CONFIG_SPL_STACK=0xfffffffc CONFIG_SPL=y +# CONFIG_SPL_FS_FAT is not set +# CONFIG_SPL_LIBDISK_SUPPORT is not set CONFIG_SYS_MEM_RSVD_FOR_MMU=y CONFIG_ZYNQMP_NO_DDR=y # CONFIG_PSCI_RESET is not set @@ -89,7 +91,6 @@ CONFIG_SPI_FLASH_WINBOND=y CONFIG_ARM_DCC=y CONFIG_SPI=y CONFIG_ZYNQMP_GQSPI=y -# CONFIG_FAT_WRITE is not set CONFIG_PANIC_HANG=y # CONFIG_GZIP is not set # CONFIG_LMB is not set diff --git a/configs/zynq_cse_nand_defconfig b/configs/zynq_cse_nand_defconfig index 19f653f40d0..2eb45e1242e 100644 --- a/configs/zynq_cse_nand_defconfig +++ b/configs/zynq_cse_nand_defconfig @@ -13,6 +13,8 @@ CONFIG_DEFAULT_DEVICE_TREE="zynq-cse-nand" CONFIG_SPL_STACK_R_ADDR=0x200000 CONFIG_SPL_STACK=0xfffffe00 CONFIG_SPL=y +# CONFIG_SPL_FS_FAT is not set +# CONFIG_SPL_LIBDISK_SUPPORT is not set CONFIG_SYS_LOAD_ADDR=0x0 CONFIG_REMAKE_ELF=y CONFIG_SYS_CUSTOM_LDSCRIPT=y diff --git a/configs/zynq_cse_nor_defconfig b/configs/zynq_cse_nor_defconfig index 64df1f0b83e..c5a28f28b9d 100644 --- a/configs/zynq_cse_nor_defconfig +++ b/configs/zynq_cse_nor_defconfig @@ -13,6 +13,8 @@ CONFIG_DEFAULT_DEVICE_TREE="zynq-cse-nor" CONFIG_SPL_STACK_R_ADDR=0x200000 CONFIG_SPL_STACK=0xfffffe00 CONFIG_SPL=y +# CONFIG_SPL_FS_FAT is not set +# CONFIG_SPL_LIBDISK_SUPPORT is not set CONFIG_SYS_LOAD_ADDR=0x0 CONFIG_REMAKE_ELF=y CONFIG_SYS_CUSTOM_LDSCRIPT=y diff --git a/configs/zynq_cse_qspi_defconfig b/configs/zynq_cse_qspi_defconfig index 9368fb4ffbc..9a2770af20e 100644 --- a/configs/zynq_cse_qspi_defconfig +++ b/configs/zynq_cse_qspi_defconfig @@ -16,6 +16,8 @@ CONFIG_SPL_STACK=0xfffffe00 CONFIG_SPL=y CONFIG_DEBUG_UART_BASE=0x0 CONFIG_DEBUG_UART_CLOCK=0 +# CONFIG_SPL_FS_FAT is not set +# CONFIG_SPL_LIBDISK_SUPPORT is not set # CONFIG_ZYNQ_DDRC_INIT is not set # CONFIG_CMD_ZYNQ is not set CONFIG_SYS_LOAD_ADDR=0x0 From patchwork Wed Nov 8 16:48:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861703 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=NpIlPXl4; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWKH5zDBz1yQl for ; Thu, 9 Nov 2023 03:49:55 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 0C479876C3; Wed, 8 Nov 2023 17:49:11 +0100 (CET) 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="NpIlPXl4"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 63FCB875F3; Wed, 8 Nov 2023 17:49:08 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-qk1-x732.google.com (mail-qk1-x732.google.com [IPv6:2607:f8b0:4864:20::732]) (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 46826871A2 for ; Wed, 8 Nov 2023 17:49:06 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-qk1-x732.google.com with SMTP id af79cd13be357-7788f513872so454952185a.1 for ; Wed, 08 Nov 2023 08:49:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462145; x=1700066945; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1IZa+E6XnMsce4VW6tpuXKynbvhTxY0ngBp61aIS5Os=; b=NpIlPXl4I0Fz8ii7oWAC1N+Te409DbfQNDRnNVkBa7iL/HY+43GuajkvaEZ/C2BAQ/ gM61hZxlgdg/21SvJWvWT5dHxtqvv2lYZYlNcIJgLy8W4Op7uP621LLlWDWvX1luQSco DqA78cAcWoMQZL19Y/XhVQ0MIXS2gKKNvEYURJY6bHUmufAqbBup2LfpF/ZNg2Qghl4r +jg5qxK3df+6Zn4IHtdvn3icyXiyAyNoUx1i6Hml8cbzEqu+mYbHkEeCLvrJolcUcU14 U5Q8LwS8ij0h/8r7cuinJJIki/a/6aCRvmuyZ63EKGDzoQ/VIgtz8IT3BNQH7WodOXK3 sxJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462145; x=1700066945; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1IZa+E6XnMsce4VW6tpuXKynbvhTxY0ngBp61aIS5Os=; b=cJH/4sN+CRRiMvw+MjEWiVzUoF4W5ku/xyz8VBJhR+xBUfWCpD+h4Slfgpdeb+vYc6 0SpbQuP668G9w7l/dLm86ZDcHNS6m4QJrxNUlZcJhcwqxV8UbtUhKNVvF0Tu7FeYaGPq v5S7SGSvln6U2/KjBnBvlZWayDQHnpW0Fw7J3T+sq7HOkHGvjBt5DiNtLgexXkPOSutP MaTSXNWIb4N0IEZy2mkQAHYIZoXspfNHcz/Mx7Bro4HtDJKGqM/6S+CTBDdSPUvmPje+ OLb2BcN1fRor3evzcokPXv6v/Wky0LjcBzUOgscBg8LmuuCe8y+sC9ktPxrNqh39/bHi zXfg== X-Gm-Message-State: AOJu0YyHMWdpld9to6Dsq72IE4aIOVhTjsuHdQTqZkJNU2Tjay6WybxW qFoPG6X4XSf56d62/rnxz04= X-Google-Smtp-Source: AGHT+IGfNjnKQLtj3s3109pgN0CZ08CshZaAVxJwz8n7WfvbkKfaITKrxdCC+XpCGsSYg4hT5QKk2w== X-Received: by 2002:a05:620a:2445:b0:773:b50f:c6f3 with SMTP id h5-20020a05620a244500b00773b50fc6f3mr2136507qkn.52.1699462145065; Wed, 08 Nov 2023 08:49:05 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id e26-20020a37ac1a000000b00767e98535b7sm1224609qkm.67.2023.11.08.08.49.04 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:04 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson Subject: [PATCH v7 03/26] spl: Make SHOW_ERRORS depend on LIBCOMMON Date: Wed, 8 Nov 2023 11:48:35 -0500 Message-Id: <20231108164858.3497420-4-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean The purpose of SHOW_ERRORS is to print extra information. Make it depend on LIBCOMMON to avoid having to check for two configs. Signed-off-by: Sean Anderson Reviewed-by: Tom Rini Reviewed-by: Simon Glass --- (no changes since v5) Changes in v5: - New common/spl/Kconfig | 1 + common/spl/spl.c | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/common/spl/Kconfig b/common/spl/Kconfig index 00332cf243a..e929f1bbae1 100644 --- a/common/spl/Kconfig +++ b/common/spl/Kconfig @@ -183,6 +183,7 @@ config SPL_SYS_REPORT_STACK_F_USAGE config SPL_SHOW_ERRORS bool "Show more information when something goes wrong" + depends on SPL_LIBCOMMON_SUPPORT help This enabled more verbose error messages and checking when something goes wrong in SPL. For example, it shows the error code when U-Boot diff --git a/common/spl/spl.c b/common/spl/spl.c index 732d90d39e6..7ce38ce46d4 100644 --- a/common/spl/spl.c +++ b/common/spl/spl.c @@ -718,8 +718,7 @@ void board_init_r(gd_t *dummy1, ulong dummy2) ret = boot_from_devices(&spl_image, spl_boot_list, ARRAY_SIZE(spl_boot_list)); if (ret) { - if (CONFIG_IS_ENABLED(SHOW_ERRORS) && - CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT)) + if (CONFIG_IS_ENABLED(SHOW_ERRORS)) printf(SPL_TPL_PROMPT "failed to boot from all boot devices (err=%d)\n", ret); else From patchwork Wed Nov 8 16:48:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861704 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=jJp1bTv/; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWKV4xsGz1yQl for ; Thu, 9 Nov 2023 03:50:06 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 863B087702; Wed, 8 Nov 2023 17:49:11 +0100 (CET) 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="jJp1bTv/"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id EDFA6875A7; Wed, 8 Nov 2023 17:49:09 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-qk1-x730.google.com (mail-qk1-x730.google.com [IPv6:2607:f8b0:4864:20::730]) (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 A44C0874A3 for ; Wed, 8 Nov 2023 17:49:07 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-qk1-x730.google.com with SMTP id af79cd13be357-778a47bc09aso468154485a.3 for ; Wed, 08 Nov 2023 08:49:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462146; x=1700066946; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KAiLrTR09Hyw6FI6W2h/8n3Ex89Q4lC2JliMV02w6uw=; b=jJp1bTv/VUQy2Euy8o7UVtihkJk0Vx3Y5Iw1uIeMlFWTiziPYW9Q1PfXH8pL4mthtO +Paf6OeiQOEDlHTIgaQzCRqSstOcY7nkIvfBcstDlXtgyqvfsnmObT8h7dL7ggaHe6wg hOXgvcRvKlEO/WZF0vjrheCpAn8VBVAPhEcuOgyqMU42ZDY1CPUmlP5tgiXaINl8Tfl+ srlKRYU1TxS2ZyKaJVbM130CbYTWEBlezS6cD6VGuPS86N1jlKe9qzppkpyqDt/YkzK8 djlDP0EDtkgOcwFwEhz3k1AyNsaJ//WDTOlM7wGDNkDrpb4Gv6Ah199Wj+j0NtqA5OYr aC7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462146; x=1700066946; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KAiLrTR09Hyw6FI6W2h/8n3Ex89Q4lC2JliMV02w6uw=; b=ASLYYJc9J0cRE/LqIGfmBAKdlmNkuy9UbmRSg2W5EmHojZk0BMdNTC5kd8FQFRzOSB b7+oBs9/qQwUi7wyGpcCqFviwtoht75PaCT+CNJEkmBCl7qCfv5cmfVnDfVqmX0fS9Kn SjO2Zxv1JV8zBGzMOR1Gkbzsm6u40HcrN283wvljXRAZgb/23twuQqDjzseAv9xo1U5C XgP2i10MkrlZ4SM5OU/Rpx4qBZWKnw89PubTzVaF+xI35a4pH26pqRiyP9JiHOzxaPVN CtriAMRCCvfKKNcPMjMQtER3w6cFEaZEJ1+a4REriAP7U8Y8aAGJdD9jORY2auETf+pt iq1g== X-Gm-Message-State: AOJu0YxoQ6kVsl2q6/dX8tqr6bb5ppMcdCrcjU08SJ7b+ejFbRsCC1PF 4Dw03sNzZAwYv78WW12PSS4= X-Google-Smtp-Source: AGHT+IFwcOuAu3p7SNeZRR0hgE+61E29VkMi9z/+cuSMdgHDKYlwPUGyMd5woFLKWfmXPh174tJ+Lg== X-Received: by 2002:a05:620a:248a:b0:775:c335:1ee8 with SMTP id i10-20020a05620a248a00b00775c3351ee8mr2333900qkn.54.1699462146383; Wed, 08 Nov 2023 08:49:06 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id vq25-20020a05620a559900b007756c0853a5sm1218342qkn.58.2023.11.08.08.49.05 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:05 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson Subject: [PATCH v7 04/26] spl: semihosting: Don't close fd before spl_load_simple_fit Date: Wed, 8 Nov 2023 11:48:36 -0500 Message-Id: <20231108164858.3497420-5-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean On real hardware, semihosting calls tend to have a large constant overhead (on the order of tens of milliseconds). Reduce the number of calls by one by reusing the existing fd in smh_fit_read, and closing it at the end of spl_smh_load_image. Signed-off-by: Sean Anderson Reviewed-by: Simon Glass --- Changes in v7: - Fix typo in commit message Changes in v6: - New common/spl/spl_semihosting.c | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/common/spl/spl_semihosting.c b/common/spl/spl_semihosting.c index f7dd289286d..8f11c29913f 100644 --- a/common/spl/spl_semihosting.c +++ b/common/spl/spl_semihosting.c @@ -24,18 +24,14 @@ static int smh_read_full(long fd, void *memp, size_t len) static ulong smh_fit_read(struct spl_load_info *load, ulong file_offset, ulong size, void *buf) { - long fd; + long fd = *(long *)load->priv; ulong ret; - fd = smh_open(load->filename, MODE_READ | MODE_BINARY); - if (fd < 0) { - log_debug("could not open %s: %ld\n", load->filename, fd); + if (smh_seek(fd, file_offset)) return 0; - } + ret = smh_read(fd, buf, size); - smh_close(fd); - - return ret; + return ret < 0 ? 0 : ret; } static int spl_smh_load_image(struct spl_image_info *spl_image, @@ -73,11 +69,11 @@ static int spl_smh_load_image(struct spl_image_info *spl_image, debug("Found FIT\n"); load.read = smh_fit_read; load.bl_len = 1; - load.filename = filename; - load.priv = NULL; - smh_close(fd); + load.filename = NULL; + load.priv = &fd; - return spl_load_simple_fit(spl_image, &load, 0, header); + ret = spl_load_simple_fit(spl_image, &load, 0, header); + goto out; } ret = spl_parse_image_header(spl_image, bootdev, header); From patchwork Wed Nov 8 16:48:37 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861705 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=Byt/uhLt; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWKk0Gd9z1yQK for ; Thu, 9 Nov 2023 03:50:18 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 1E47E8770E; Wed, 8 Nov 2023 17:49:14 +0100 (CET) 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="Byt/uhLt"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 8C623876F1; Wed, 8 Nov 2023 17:49:11 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-qk1-x736.google.com (mail-qk1-x736.google.com [IPv6:2607:f8b0:4864:20::736]) (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 14F168765C for ; Wed, 8 Nov 2023 17:49:09 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-qk1-x736.google.com with SMTP id af79cd13be357-77897c4ac1fso449494985a.3 for ; Wed, 08 Nov 2023 08:49:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462148; x=1700066948; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=UQuJSijJ2gUz8WD/omHLN1x7Bo3MifMlX9GtPA9ila8=; b=Byt/uhLtMUqhHoe1HK7yuag4HwydU0PlAhwZ3WfdPYBwYekr9bVu/J44gHC7dz00L/ r7V0APKZdstXs/P+4CyTpXDsXAPQi+GO7JhXEBLK1fb3FeJcvgf3Ebk0BHzcsBH0dGdq JaOfq7W29oxFs0U4827SYy33SrfVR7NEH0HuFeEjzc/oRBcTLqkjeV+ig8akDWk4ZwBR +WXzi4lxTxUipKR5u4DayeMLSGepueI4qOOjmRuvdvwSTcxbKmzUP5t9lq0iy75aeGAN LGsZPmQe26iXlcIi6cUD+dtSffgIsXHtZi1Byg2SNTe9AwjpcXZS2j4iGP/UymgTSMoC IMVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462148; x=1700066948; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UQuJSijJ2gUz8WD/omHLN1x7Bo3MifMlX9GtPA9ila8=; b=UJik0oUZhYuPgyx/6nBRrWD2zAhXCjB/y5bE4BAd0a5CRHDGVW31KrFdtDwnXolG1q d+/UqotdAdq2MS2cy5/zt8SCjiStNEKMm2deavDJWtbDcW1Qgn3DmzECqYNFVBMIRz1K XxCcCn6IC9p/6GX8aEHLZHBYvyNF0gtPWd1Ha433sOu83UsnocW6ubFpsGJLBKpuM/Fq NeSubtE6WK0SGadSfYp140q87YN2rpFEqy+Nblc1ruETFmaGhxgBq7sWygdW8Gbt7DyX 5lk9B1ZVi8qRM0gLSBFD0onTLfxo8OqJFQjQlTXFmyHLQpr5AYN4EaqNbG/qDKWW9EZF +vLA== X-Gm-Message-State: AOJu0YwkBGIM0/weZCJ8oPuEtoezYKDOsSNwY/6USObgj9dVRFltTZOu U/gG5kRe8IhwkVrEz3WitukvlcpbSV4= X-Google-Smtp-Source: AGHT+IF896egc6IZxSuV+QvC9B/HJDA9zJhpsdDnSNygmVqq+VIfVvcGegqWNluMvecN7xrnhlPnLg== X-Received: by 2002:a05:620a:1a0f:b0:774:3540:89ee with SMTP id bk15-20020a05620a1a0f00b00774354089eemr2403324qkb.61.1699462147876; Wed, 08 Nov 2023 08:49:07 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id pc37-20020a05620a842500b00765ab6d3e81sm1216196qkn.122.2023.11.08.08.49.06 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:07 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson Subject: [PATCH v7 05/26] spl: Remove NULL assignments in spl_load_info Date: Wed, 8 Nov 2023 11:48:37 -0500 Message-Id: <20231108164858.3497420-6-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean Remove NULL assignments to fields in spl_load_info when .load doesn't reference these fields. This can result in more efficient code. filename must stay even if it is unused, since load_simple_fit uses it. Signed-off-by: Sean Anderson Reviewed-by: Simon Glass --- (no changes since v6) Changes in v6: - New arch/arm/mach-sunxi/spl_spi_sunxi.c | 2 -- common/spl/spl_fat.c | 1 - common/spl/spl_mmc.c | 2 -- common/spl/spl_nand.c | 4 ---- common/spl/spl_spi.c | 2 -- common/spl/spl_ymodem.c | 1 - 6 files changed, 12 deletions(-) diff --git a/arch/arm/mach-sunxi/spl_spi_sunxi.c b/arch/arm/mach-sunxi/spl_spi_sunxi.c index c2410dd7bb1..896aba69c32 100644 --- a/arch/arm/mach-sunxi/spl_spi_sunxi.c +++ b/arch/arm/mach-sunxi/spl_spi_sunxi.c @@ -354,8 +354,6 @@ static int spl_spi_load_image(struct spl_image_info *spl_image, struct spl_load_info load; debug("Found FIT image\n"); - load.dev = NULL; - load.priv = NULL; load.filename = NULL; load.bl_len = 1; load.read = spi_load_read; diff --git a/common/spl/spl_fat.c b/common/spl/spl_fat.c index 014074f85be..6172e7bcd48 100644 --- a/common/spl/spl_fat.c +++ b/common/spl/spl_fat.c @@ -99,7 +99,6 @@ int spl_load_image_fat(struct spl_image_info *spl_image, load.read = spl_fit_read; load.bl_len = 1; load.filename = (void *)filename; - load.priv = NULL; return spl_load_simple_fit(spl_image, &load, 0, header); } else { diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c index 82689da1401..6d9137c32e0 100644 --- a/common/spl/spl_mmc.c +++ b/common/spl/spl_mmc.c @@ -106,7 +106,6 @@ int mmc_load_image_raw_sector(struct spl_image_info *spl_image, debug("Found FIT\n"); load.dev = mmc; - load.priv = NULL; load.filename = NULL; load.bl_len = mmc->read_bl_len; load.read = h_spl_load_read; @@ -116,7 +115,6 @@ int mmc_load_image_raw_sector(struct spl_image_info *spl_image, struct spl_load_info load; load.dev = mmc; - load.priv = NULL; load.filename = NULL; load.bl_len = mmc->read_bl_len; load.read = h_spl_load_read; diff --git a/common/spl/spl_nand.c b/common/spl/spl_nand.c index b8cd6403ba4..9a5a5ffa04a 100644 --- a/common/spl/spl_nand.c +++ b/common/spl/spl_nand.c @@ -91,7 +91,6 @@ static int spl_nand_load_element(struct spl_image_info *spl_image, struct spl_load_info load; debug("Found FIT\n"); - load.dev = NULL; load.priv = &offset; load.filename = NULL; load.bl_len = bl_len; @@ -101,7 +100,6 @@ static int spl_nand_load_element(struct spl_image_info *spl_image, valid_container_hdr((void *)header)) { struct spl_load_info load; - load.dev = NULL; load.priv = &offset; load.filename = NULL; load.bl_len = bl_len; @@ -112,8 +110,6 @@ static int spl_nand_load_element(struct spl_image_info *spl_image, struct spl_load_info load; debug("Found legacy image\n"); - load.dev = NULL; - load.priv = NULL; load.filename = NULL; load.bl_len = IS_ENABLED(CONFIG_SPL_LZMA) ? bl_len : 1; load.read = spl_nand_legacy_read; diff --git a/common/spl/spl_spi.c b/common/spl/spl_spi.c index 3ac4b1b5091..d83d70f2f33 100644 --- a/common/spl/spl_spi.c +++ b/common/spl/spl_spi.c @@ -152,7 +152,6 @@ static int spl_spi_load_image(struct spl_image_info *spl_image, debug("Found FIT\n"); load.dev = flash; - load.priv = NULL; load.filename = NULL; load.bl_len = 1; load.read = spl_spi_fit_read; @@ -164,7 +163,6 @@ static int spl_spi_load_image(struct spl_image_info *spl_image, struct spl_load_info load; load.dev = flash; - load.priv = NULL; load.filename = NULL; load.bl_len = 1; load.read = spl_spi_fit_read; diff --git a/common/spl/spl_ymodem.c b/common/spl/spl_ymodem.c index 038b4438457..8616cb3e915 100644 --- a/common/spl/spl_ymodem.c +++ b/common/spl/spl_ymodem.c @@ -134,7 +134,6 @@ int spl_ymodem_load_image(struct spl_image_info *spl_image, struct ymodem_fit_info info; debug("Found FIT\n"); - load.dev = NULL; load.priv = (void *)&info; load.filename = NULL; load.bl_len = 1; From patchwork Wed Nov 8 16:48:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861706 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=JDVPxG2U; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWKx0Lf2z1yQK for ; Thu, 9 Nov 2023 03:50:29 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id AD36D871AB; Wed, 8 Nov 2023 17:49:19 +0100 (CET) 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="JDVPxG2U"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id DE8448770B; Wed, 8 Nov 2023 17:49:12 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-qk1-x734.google.com (mail-qk1-x734.google.com [IPv6:2607:f8b0:4864:20::734]) (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 98C0E87527 for ; Wed, 8 Nov 2023 17:49:10 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-qk1-x734.google.com with SMTP id af79cd13be357-7781bc3783fso490104085a.1 for ; Wed, 08 Nov 2023 08:49:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462149; x=1700066949; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=fbU5kwOhbE+bF4VXIJD0gQ+Ake6xIn9tyXeA08FSocg=; b=JDVPxG2UU00CsayfX80WqNQn77i5cqLJztSd2qoYT/jgUN7kBH4RoLXvivAE6pXopg bN9zh0ELhaPm7Wjbtkbau58/Pe5R+qp3ksaXfdE31RClxH+NdwU+Twh/jCIq6+Wh3+4G RU/FAO9Xax3w7yqgo1/SdBf0lqMQxOdKj/BX2fUb+Mc4f6yfavY1uOXOrVxJfw3fVUiA iqXg6fRq5Tw666r/656CRTXg3MfxSshxmNU+bdINJXqZYPpPbjq509RWcaqcLwX65Pfk fmrL/OLbBKuzDyFH1YHtBocUpoHeIt6J6wQat/U8jUKv6jVqwnfppFqcCGwMt3Jbka8c ++ZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462149; x=1700066949; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=fbU5kwOhbE+bF4VXIJD0gQ+Ake6xIn9tyXeA08FSocg=; b=HusksMXwfd/D152oKTTh9vSirEIB83C6oZpE9cTa8/AMH9N8qGYWt4gCJcSuPPfWhu phPevn6CCTSK9LayGMEZBxwIxxXQiwXJX0C2dv7Kb3/Ici/011LYet8rGSDdWxLUboRI hxu49X+6bWn3d+uk6ByUVHOyDxSV6rV5WOVinz9Djv29WryYueTHMs1nPYLqt4Ob2jqB T45ABVy7Cx/jpic4jy6hAtjX+jcye3VWzPi+V3vr4BBItZ4NDk06Bvz5GoPFOQ3/YonJ gxkXVOppyGMlKKmZZGow7LXof+zMoFLHHeNQ1A5Ru26gh6sCJjvcHdxXwUCUcAbTTBgt +ieg== X-Gm-Message-State: AOJu0YwOy8QAbr1Wa7aGucQqXrh/C2Liv8YkBqzNMcoRpo5lzpvxp7n1 XgZLcAJYPlHrDgcfFek64GM= X-Google-Smtp-Source: AGHT+IHSY5m9WLSuE33eM1M8y0rMCI7br6y3VcVw2KfDyt11h3M8XKkiNfjNpgimPf8moCWcT5Y4wg== X-Received: by 2002:a05:620a:25cb:b0:779:e02b:26e2 with SMTP id y11-20020a05620a25cb00b00779e02b26e2mr2316652qko.25.1699462149336; Wed, 08 Nov 2023 08:49:09 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id v3-20020a05620a0a8300b0075ca4cd03d4sm1221852qkg.64.2023.11.08.08.49.08 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:08 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson Subject: [PATCH v7 06/26] spl: Remove dev from spl_load_info Date: Wed, 8 Nov 2023 11:48:38 -0500 Message-Id: <20231108164858.3497420-7-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean dev and priv serve the same purpose, and are never set at the same time. Remove dev and convert all users to priv. While we're at it, reorder bl_len to be last for better alignment. Signed-off-by: Sean Anderson Reviewed-by: Simon Glass --- Changes in v7: - Fix typo in commit message Changes in v6: - New common/spl/spl_mmc.c | 6 +++--- common/spl/spl_spi.c | 6 +++--- drivers/usb/gadget/f_sdp.c | 6 +++--- include/spl.h | 4 +--- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c index 6d9137c32e0..3d7551a7dae 100644 --- a/common/spl/spl_mmc.c +++ b/common/spl/spl_mmc.c @@ -65,7 +65,7 @@ static int mmc_load_legacy(struct spl_image_info *spl_image, static ulong h_spl_load_read(struct spl_load_info *load, ulong sector, ulong count, void *buf) { - struct mmc *mmc = load->dev; + struct mmc *mmc = load->priv; return blk_dread(mmc_get_blk_desc(mmc), sector, count, buf); } @@ -105,7 +105,7 @@ int mmc_load_image_raw_sector(struct spl_image_info *spl_image, struct spl_load_info load; debug("Found FIT\n"); - load.dev = mmc; + load.priv = mmc; load.filename = NULL; load.bl_len = mmc->read_bl_len; load.read = h_spl_load_read; @@ -114,7 +114,7 @@ int mmc_load_image_raw_sector(struct spl_image_info *spl_image, valid_container_hdr((void *)header)) { struct spl_load_info load; - load.dev = mmc; + load.priv = mmc; load.filename = NULL; load.bl_len = mmc->read_bl_len; load.read = h_spl_load_read; diff --git a/common/spl/spl_spi.c b/common/spl/spl_spi.c index d83d70f2f33..af7a28e7c25 100644 --- a/common/spl/spl_spi.c +++ b/common/spl/spl_spi.c @@ -59,7 +59,7 @@ static int spi_load_image_os(struct spl_image_info *spl_image, static ulong spl_spi_fit_read(struct spl_load_info *load, ulong sector, ulong count, void *buf) { - struct spi_flash *flash = load->dev; + struct spi_flash *flash = load->priv; ulong ret; ret = spi_flash_read(flash, sector, count, buf); @@ -151,7 +151,7 @@ static int spl_spi_load_image(struct spl_image_info *spl_image, struct spl_load_info load; debug("Found FIT\n"); - load.dev = flash; + load.priv = flash; load.filename = NULL; load.bl_len = 1; load.read = spl_spi_fit_read; @@ -162,7 +162,7 @@ static int spl_spi_load_image(struct spl_image_info *spl_image, valid_container_hdr((void *)header)) { struct spl_load_info load; - load.dev = flash; + load.priv = flash; load.filename = NULL; load.bl_len = 1; load.read = spl_spi_fit_read; diff --git a/drivers/usb/gadget/f_sdp.c b/drivers/usb/gadget/f_sdp.c index ee9384fb37e..1b16b7eb452 100644 --- a/drivers/usb/gadget/f_sdp.c +++ b/drivers/usb/gadget/f_sdp.c @@ -744,7 +744,7 @@ static ulong sdp_load_read(struct spl_load_info *load, ulong sector, { debug("%s: sector %lx, count %lx, buf %lx\n", __func__, sector, count, (ulong)buf); - memcpy(buf, (void *)(load->dev + sector), count); + memcpy(buf, (void *)(load->priv + sector), count); return count; } @@ -844,7 +844,7 @@ static int sdp_handle_in_ep(struct spl_image_info *spl_image, struct spl_load_info load; debug("Found FIT\n"); - load.dev = header; + load.priv = header; load.bl_len = 1; load.read = sdp_load_read; spl_load_simple_fit(spl_image, &load, 0, @@ -857,7 +857,7 @@ static int sdp_handle_in_ep(struct spl_image_info *spl_image, valid_container_hdr((void *)header)) { struct spl_load_info load; - load.dev = header; + load.priv = header; load.bl_len = 1; load.read = sdp_load_read; spl_load_imx_container(spl_image, &load, 0); diff --git a/include/spl.h b/include/spl.h index 8ff20adc28e..951e136b9ea 100644 --- a/include/spl.h +++ b/include/spl.h @@ -285,16 +285,13 @@ static inline void *spl_image_fdt_addr(struct spl_image_info *info) /** * Information required to load data from a device * - * @dev: Pointer to the device, e.g. struct mmc * * @priv: Private data for the device * @bl_len: Block length for reading in bytes * @filename: Name of the fit image file. * @read: Function to call to read from the device */ struct spl_load_info { - void *dev; void *priv; - int bl_len; const char *filename; /** * read() - Read from device @@ -307,6 +304,7 @@ struct spl_load_info { */ ulong (*read)(struct spl_load_info *load, ulong sector, ulong count, void *buf); + int bl_len; }; /* From patchwork Wed Nov 8 16:48:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861707 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=m1NBK3CF; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWL76n3pz1yQK for ; Thu, 9 Nov 2023 03:50:39 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id CF5BC86E2F; Wed, 8 Nov 2023 17:49:22 +0100 (CET) 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="m1NBK3CF"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 52AB687546; Wed, 8 Nov 2023 17:49:14 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.2 Received: from mail-qk1-x72a.google.com (mail-qk1-x72a.google.com [IPv6:2607:f8b0:4864:20::72a]) (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 AB5DC876F1 for ; Wed, 8 Nov 2023 17:49:11 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-qk1-x72a.google.com with SMTP id af79cd13be357-7781b176131so385278785a.1 for ; Wed, 08 Nov 2023 08:49:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462150; x=1700066950; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=x4/nJDtJzFruXZDy2Na7Ni+YAVb2R0HJrlj5vS/qcUM=; b=m1NBK3CFLIAu6KnxweE7h/nxprCaHEvd8BnvQVKTBshAeBoZE8zjSj1u25k71ctROJ gjTKBOFeTKyNe2KabRWIFrCy4g/H6lZ69bH6CptTVCSYS0iVtdkHqGfViDHTbJnPSYTI RmtsJ9KZqn93Ye9S/isyc0xyaeJ7EhlTuYO2euigt+xpp0M1CVxu6yyaT2KhjNWMKI4F BWOMB7VjYPbFyxtU853p0Hbpg3+LUVGoOOJdZKJ6Y3k7lcolAK9l6S/n8uq3QFMhnaYE GjtWESGKuzZjQGtQ/tekPqgGoejEhnR0+NcmCSymxwixlhY9LJtB76GLTjxTvDjbhvE7 4QEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462150; x=1700066950; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=x4/nJDtJzFruXZDy2Na7Ni+YAVb2R0HJrlj5vS/qcUM=; b=FLh/MKA6k7lva35XWlmPlY5CqsX99y+S9gBqbyKWWR+z9WUih7S0OuJsEbKFReMeXP +KneBxBN4WaSJQCqBw0Z8CiOxaHL89jj9iVsR3loaLizEDP2DsMxrxkedkvZWD67xjfb 5w76yjskqC/T/E+RnaiudjTX0vZBjgsZ4+kyb3JPPJBhydGppkB7zq6V7wL3DQuH14f4 lm5Aw5US5IjzqrCSU4m9JmIxoLPcPUuY6OJVi1wqHMlktJ+JfD4GoFbwUYHH2QJby5dl urGiIMQqlkALVfTkBKwm738muH8cUmai2WlBAjsByIXT3NP2/9L8yMj4KIFrCy9XTPmT sjLg== X-Gm-Message-State: AOJu0Yy1YVvctZLiDfCZI0jIPEbdXr2Ftolq3JBNOOM1bMhQqD0VdJRz 1g/9E0mpAivEqKGge2CqG0M= X-Google-Smtp-Source: AGHT+IEhGB3bEJhbasaW6TuAQKAslddJLn0yTELEQ8aDBMKqSTuRLcQ71IXwz4/cULV+Fb6sBjrGLw== X-Received: by 2002:ae9:e515:0:b0:777:fec:5741 with SMTP id w21-20020ae9e515000000b007770fec5741mr2093387qkf.33.1699462150516; Wed, 08 Nov 2023 08:49:10 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id bj9-20020a05620a190900b0077772296f9dsm1216712qkb.126.2023.11.08.08.49.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:10 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson , Fabio Estevam , Stefano Babic , uboot-imx@nxp.com Subject: [PATCH v7 07/26] spl: Take advantage of bl_len's power-of-twoness Date: Wed, 8 Nov 2023 11:48:39 -0500 Message-Id: <20231108164858.3497420-8-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean bl_len must be a power of two, so we can use ALIGN instead of roundup and similar tricks to avoid divisions. Signed-off-by: Sean Anderson Reviewed-by: Simon Glass --- (no changes since v6) Changes in v6: - New common/spl/spl_fit.c | 2 +- common/spl/spl_imx_container.c | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c index 70d8d5942d9..6084ead0919 100644 --- a/common/spl/spl_fit.c +++ b/common/spl/spl_fit.c @@ -194,7 +194,7 @@ static int get_aligned_image_overhead(struct spl_load_info *info, int offset) if (info->filename) return offset & (ARCH_DMA_MINALIGN - 1); - return offset % info->bl_len; + return offset & (info->bl_len - 1); } static int get_aligned_image_size(struct spl_load_info *info, int data_size, diff --git a/common/spl/spl_imx_container.c b/common/spl/spl_imx_container.c index 127802f5cb7..1cc51782766 100644 --- a/common/spl/spl_imx_container.c +++ b/common/spl/spl_imx_container.c @@ -33,13 +33,13 @@ static struct boot_img_t *read_auth_image(struct spl_image_info *spl_image, images = (struct boot_img_t *)((u8 *)container + sizeof(struct container_hdr)); - if (images[image_index].offset % info->bl_len) { + if (!IS_ALIGNED(images[image_index].offset, info->bl_len)) { printf("%s: image%d offset not aligned to %u\n", __func__, image_index, info->bl_len); return NULL; } - sectors = roundup(images[image_index].size, info->bl_len) / + sectors = ALIGN(images[image_index].size, info->bl_len) / info->bl_len; sector = images[image_index].offset / info->bl_len + container_sector; @@ -69,7 +69,7 @@ static int read_auth_container(struct spl_image_info *spl_image, u32 sectors; int i, size, ret = 0; - size = roundup(CONTAINER_HDR_ALIGNMENT, info->bl_len); + size = ALIGN(CONTAINER_HDR_ALIGNMENT, info->bl_len); sectors = size / info->bl_len; /* @@ -103,7 +103,7 @@ static int read_auth_container(struct spl_image_info *spl_image, debug("Container length %u\n", length); if (length > CONTAINER_HDR_ALIGNMENT) { - size = roundup(length, info->bl_len); + size = ALIGN(length, info->bl_len); sectors = size / info->bl_len; free(container); From patchwork Wed Nov 8 16:48:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861708 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=C/SxUnw2; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWLY2zwpz1yQK for ; Thu, 9 Nov 2023 03:51:01 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 3B00E8773B; Wed, 8 Nov 2023 17:49:26 +0100 (CET) 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="C/SxUnw2"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id E5D518749D; Wed, 8 Nov 2023 17:49:20 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.2 Received: from mail-yb1-xb30.google.com (mail-yb1-xb30.google.com [IPv6:2607:f8b0:4864:20::b30]) (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 3712D876BE for ; Wed, 8 Nov 2023 17:49:13 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-yb1-xb30.google.com with SMTP id 3f1490d57ef6-d9a58f5f33dso7313476276.1 for ; Wed, 08 Nov 2023 08:49:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462152; x=1700066952; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=kHG1+1cNJMH7DiUj903ORAO8CSZRXA090MQSd4mQk1s=; b=C/SxUnw2mrzItIman3sj+AYW9szRmNFuxi0WBXkcx1dS4DQCkQxky+xtg5hR1kdLoo FJcT0u325pNcQM5rgI0J84dx7KmsNPAFw6xMl5KY+iPanQkIx5g3O+lZDt2gBgTHizNf 2vxRMnDAMZEHUOPMuf7A/+U0jUb6RXTiT6KRCs0yrxqd10E750rpB/A5/HlZ8xeyKqfB 7JHp72mH65W/QTRQO8aPPw2a/0AJWzqNIMW5J8TyeT9RXDqKoeBXHdx7xkebRFOXVl4+ SRHh1d77gVL/0JYmXyqKtVuaQXAfXed6w0mk9dkGPNsU2imjIyMGZQQja58oibzaquuW e1CQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462152; x=1700066952; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kHG1+1cNJMH7DiUj903ORAO8CSZRXA090MQSd4mQk1s=; b=h9fJC0JXmm24w6Xcc3WRsTopTr2oqySYyXWh9GxUtjNN87UdiCK3a2CYqO8SFb3MxF r+NhxLa3V/k/45VabS4LkFLOg5+fx4VDgQTTvZOfTC5OEiZ5yod6lVjAO/4AoA98kcf1 omX94qL5vEm0YFbAmndnRb+ABMl1bePDaVLCsnH4f9YiL9ssg7LFfBhKJdsui2zL9rF0 j3X2VASgRL3la+yDy4LLIamfwMuwqaxaq9Xvtoe/187uUbcaYNWmp7MJjnsEWcqFH2/l fD1YqP/mCMdcjoYvMasvy+OBuyN3b7v45JwgiYR906gmAr6m8OsCpGx6xpG0rWSwSNBG gROA== X-Gm-Message-State: AOJu0Yx0FSaZ+d8Z99Of2qwaH7Pfn0egunrXNMU70tdXSo088tDce3pS XX4N8VMO2luiTZttTzOBkvI= X-Google-Smtp-Source: AGHT+IEKZUQyDVVFEfU8vwzEJh7/Plzxi1JOTsnVOujYr1r2XJSdcZGP7lqy+M50l8jhWO6S26D+3g== X-Received: by 2002:a25:ad92:0:b0:d9a:5021:4f34 with SMTP id z18-20020a25ad92000000b00d9a50214f34mr2258867ybi.15.1699462151888; Wed, 08 Nov 2023 08:49:11 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id k9-20020a05621414e900b006263a9e7c63sm1234222qvw.104.2023.11.08.08.49.11 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:11 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson , Fabio Estevam , Stefano Babic , uboot-imx@nxp.com Subject: [PATCH v7 08/26] spl: Refactor spl_load_info->read to use units of bytes Date: Wed, 8 Nov 2023 11:48:40 -0500 Message-Id: <20231108164858.3497420-9-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean Simplify things a bit for callers of spl_load_info->read by refactoring it to use units of bytes instead of bl_len. This generally simplifies the logic, as MMC is the only loader which actually works in sectors. It will also allow further refactoring to remove the special-case handling of filename. spl_load_legacy_img already works in units of bytes (oops) so it doesn't need to be changed. Signed-off-by: Sean Anderson Reviewed-by: Simon Glass --- Changes in v7: - Reword documentation for spl_load_info Changes in v6: - New arch/arm/mach-imx/spl_imx_romapi.c | 16 +++------- common/spl/spl_fit.c | 51 +++++++++++++++--------------- common/spl/spl_imx_container.c | 45 +++++++++++--------------- common/spl/spl_mmc.c | 24 ++++++++------ common/spl/spl_nand.c | 8 ++--- include/spl.h | 18 +++++++---- test/image/spl_load_os.c | 13 ++++---- 7 files changed, 82 insertions(+), 93 deletions(-) diff --git a/arch/arm/mach-imx/spl_imx_romapi.c b/arch/arm/mach-imx/spl_imx_romapi.c index 93d48e56aca..d7f6cb4b5ba 100644 --- a/arch/arm/mach-imx/spl_imx_romapi.c +++ b/arch/arm/mach-imx/spl_imx_romapi.c @@ -53,16 +53,10 @@ static int is_boot_from_stream_device(u32 boot) } static ulong spl_romapi_read_seekable(struct spl_load_info *load, - ulong sector, ulong count, + ulong offset, ulong byte, void *buf) { - u32 pagesize = *(u32 *)load->priv; - ulong byte = count * pagesize; - u32 offset; - - offset = sector * pagesize; - - return spl_romapi_raw_seekable_read(offset, byte, buf) / pagesize; + return spl_romapi_raw_seekable_read(offset, byte, buf); } static int spl_romapi_load_image_seekable(struct spl_image_info *spl_image, @@ -109,8 +103,7 @@ static int spl_romapi_load_image_seekable(struct spl_image_info *spl_image, memset(&load, 0, sizeof(load)); load.bl_len = pagesize; load.read = spl_romapi_read_seekable; - load.priv = &pagesize; - return spl_load_simple_fit(spl_image, &load, offset / pagesize, header); + return spl_load_simple_fit(spl_image, &load, offset, header); } else if (IS_ENABLED(CONFIG_SPL_LOAD_IMX_CONTAINER) && valid_container_hdr((void *)header)) { struct spl_load_info load; @@ -118,9 +111,8 @@ static int spl_romapi_load_image_seekable(struct spl_image_info *spl_image, memset(&load, 0, sizeof(load)); load.bl_len = pagesize; load.read = spl_romapi_read_seekable; - load.priv = &pagesize; - ret = spl_load_imx_container(spl_image, &load, offset / pagesize); + ret = spl_load_imx_container(spl_image, &load, offset); } else { /* TODO */ puts("Can't support legacy image\n"); diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c index 6084ead0919..ce7ef0efd0d 100644 --- a/common/spl/spl_fit.c +++ b/common/spl/spl_fit.c @@ -180,7 +180,7 @@ static int get_aligned_image_offset(struct spl_load_info *info, int offset) if (info->filename) return offset & ~(ARCH_DMA_MINALIGN - 1); - return offset / info->bl_len; + return ALIGN_DOWN(offset, info->bl_len); } static int get_aligned_image_overhead(struct spl_load_info *info, int offset) @@ -205,7 +205,7 @@ static int get_aligned_image_size(struct spl_load_info *info, int data_size, if (info->filename) return data_size; - return (data_size + info->bl_len - 1) / info->bl_len; + return ALIGN(data_size, info->bl_len); } /** @@ -222,7 +222,7 @@ static int get_aligned_image_size(struct spl_load_info *info, int data_size, * * Return: 0 on success or a negative error number. */ -static int load_simple_fit(struct spl_load_info *info, ulong sector, +static int load_simple_fit(struct spl_load_info *info, ulong fit_offset, const struct spl_fit_info *ctx, int node, struct spl_image_info *image_info) { @@ -234,7 +234,6 @@ static int load_simple_fit(struct spl_load_info *info, ulong sector, void *load_ptr; void *src; ulong overhead; - int nr_sectors; uint8_t image_comp = -1, type = -1; const void *data; const void *fit = ctx->fit; @@ -291,11 +290,12 @@ static int load_simple_fit(struct spl_load_info *info, ulong sector, length = len; overhead = get_aligned_image_overhead(info, offset); - nr_sectors = get_aligned_image_size(info, length, offset); + size = get_aligned_image_size(info, length, offset); if (info->read(info, - sector + get_aligned_image_offset(info, offset), - nr_sectors, src_ptr) != nr_sectors) + fit_offset + + get_aligned_image_offset(info, offset), size, + src_ptr) != size) return -EIO; debug("External data: dst=%p, offset=%x, size=%lx\n", @@ -380,7 +380,7 @@ __weak int board_spl_fit_append_fdt_skip(const char *name) } static int spl_fit_append_fdt(struct spl_image_info *spl_image, - struct spl_load_info *info, ulong sector, + struct spl_load_info *info, ulong offset, const struct spl_fit_info *ctx) { struct spl_image_info image_info; @@ -414,7 +414,7 @@ static int spl_fit_append_fdt(struct spl_image_info *spl_image, spl_image->fdt_addr = map_sysmem(image_info.load_addr, size); memcpy(spl_image->fdt_addr, gd->fdt_blob, size); } else { - ret = load_simple_fit(info, sector, ctx, node, &image_info); + ret = load_simple_fit(info, offset, ctx, node, &image_info); if (ret < 0) return ret; @@ -465,7 +465,7 @@ static int spl_fit_append_fdt(struct spl_image_info *spl_image, __func__); } image_info.load_addr = (ulong)tmpbuffer; - ret = load_simple_fit(info, sector, ctx, node, + ret = load_simple_fit(info, offset, ctx, node, &image_info); if (ret < 0) break; @@ -642,7 +642,7 @@ static int spl_fit_upload_fpga(struct spl_fit_info *ctx, int node, } static int spl_fit_load_fpga(struct spl_fit_info *ctx, - struct spl_load_info *info, ulong sector) + struct spl_load_info *info, ulong offset) { int node, ret; @@ -657,7 +657,7 @@ static int spl_fit_load_fpga(struct spl_fit_info *ctx, warn_deprecated("'fpga' property in config node. Use 'loadables'"); /* Load the image and set up the fpga_image structure */ - ret = load_simple_fit(info, sector, ctx, node, &fpga_image); + ret = load_simple_fit(info, offset, ctx, node, &fpga_image); if (ret) { printf("%s: Cannot load the FPGA: %i\n", __func__, ret); return ret; @@ -667,11 +667,10 @@ static int spl_fit_load_fpga(struct spl_fit_info *ctx, } static int spl_simple_fit_read(struct spl_fit_info *ctx, - struct spl_load_info *info, ulong sector, + struct spl_load_info *info, ulong offset, const void *fit_header) { unsigned long count, size; - int sectors; void *buf; /* @@ -690,13 +689,13 @@ static int spl_simple_fit_read(struct spl_fit_info *ctx, * For FIT with data embedded, data is loaded as part of FIT image. * For FIT with external data, data is not loaded in this step. */ - sectors = get_aligned_image_size(info, size, 0); - buf = board_spl_fit_buffer_addr(size, sectors, info->bl_len); + size = get_aligned_image_size(info, size, 0); + buf = board_spl_fit_buffer_addr(size, size, 1); - count = info->read(info, sector, sectors, buf); + count = info->read(info, offset, size, buf); ctx->fit = buf; - debug("fit read sector %lx, sectors=%d, dst=%p, count=%lu, size=0x%lx\n", - sector, sectors, buf, count, size); + debug("fit read offset %lx, size=%lu, dst=%p, count=%lu\n", + offset, size, buf, count); return (count == 0) ? -EIO : 0; } @@ -728,7 +727,7 @@ static int spl_simple_fit_parse(struct spl_fit_info *ctx) } int spl_load_simple_fit(struct spl_image_info *spl_image, - struct spl_load_info *info, ulong sector, void *fit) + struct spl_load_info *info, ulong offset, void *fit) { struct spl_image_info image_info; struct spl_fit_info ctx; @@ -737,7 +736,7 @@ int spl_load_simple_fit(struct spl_image_info *spl_image, int index = 0; int firmware_node; - ret = spl_simple_fit_read(&ctx, info, sector, fit); + ret = spl_simple_fit_read(&ctx, info, offset, fit); if (ret < 0) return ret; @@ -752,7 +751,7 @@ int spl_load_simple_fit(struct spl_image_info *spl_image, return ret; if (IS_ENABLED(CONFIG_SPL_FPGA)) - spl_fit_load_fpga(&ctx, info, sector); + spl_fit_load_fpga(&ctx, info, offset); /* * Find the U-Boot image using the following search order: @@ -782,7 +781,7 @@ int spl_load_simple_fit(struct spl_image_info *spl_image, } /* Load the image and set up the spl_image structure */ - ret = load_simple_fit(info, sector, &ctx, node, spl_image); + ret = load_simple_fit(info, offset, &ctx, node, spl_image); if (ret) return ret; @@ -800,7 +799,7 @@ int spl_load_simple_fit(struct spl_image_info *spl_image, * We allow this to fail, as the U-Boot image might embed its FDT. */ if (os_takes_devicetree(spl_image->os)) { - ret = spl_fit_append_fdt(spl_image, info, sector, &ctx); + ret = spl_fit_append_fdt(spl_image, info, offset, &ctx); if (ret < 0 && spl_image->os != IH_OS_U_BOOT) return ret; } @@ -823,7 +822,7 @@ int spl_load_simple_fit(struct spl_image_info *spl_image, continue; image_info.load_addr = 0; - ret = load_simple_fit(info, sector, &ctx, node, &image_info); + ret = load_simple_fit(info, offset, &ctx, node, &image_info); if (ret < 0) { printf("%s: can't load image loadables index %d (ret = %d)\n", __func__, index, ret); @@ -837,7 +836,7 @@ int spl_load_simple_fit(struct spl_image_info *spl_image, debug("Loadable is %s\n", genimg_get_os_name(os_type)); if (os_takes_devicetree(os_type)) { - spl_fit_append_fdt(&image_info, info, sector, &ctx); + spl_fit_append_fdt(&image_info, info, offset, &ctx); spl_image->fdt_addr = image_info.fdt_addr; } diff --git a/common/spl/spl_imx_container.c b/common/spl/spl_imx_container.c index 1cc51782766..ad89a99fb23 100644 --- a/common/spl/spl_imx_container.c +++ b/common/spl/spl_imx_container.c @@ -19,11 +19,10 @@ static struct boot_img_t *read_auth_image(struct spl_image_info *spl_image, struct spl_load_info *info, struct container_hdr *container, int image_index, - u32 container_sector) + ulong container_offset) { struct boot_img_t *images; - ulong sector; - u32 sectors; + ulong offset, overhead, size; if (image_index > container->num_images) { debug("Invalid image number\n"); @@ -39,16 +38,14 @@ static struct boot_img_t *read_auth_image(struct spl_image_info *spl_image, return NULL; } - sectors = ALIGN(images[image_index].size, info->bl_len) / - info->bl_len; - sector = images[image_index].offset / info->bl_len + - container_sector; + size = ALIGN(images[image_index].size, info->bl_len); + offset = images[image_index].offset + container_offset; - debug("%s: container: %p sector: %lu sectors: %u\n", __func__, - container, sector, sectors); - if (info->read(info, sector, sectors, - map_sysmem(images[image_index].dst, - images[image_index].size)) != sectors) { + debug("%s: container: %p offset: %lu size: %lu\n", __func__, + container, offset, size); + if (info->read(info, offset, size, + map_sysmem(images[image_index].dst - overhead, + images[image_index].size)) != size) { printf("%s wrong\n", __func__); return NULL; } @@ -62,15 +59,13 @@ static struct boot_img_t *read_auth_image(struct spl_image_info *spl_image, } static int read_auth_container(struct spl_image_info *spl_image, - struct spl_load_info *info, ulong sector) + struct spl_load_info *info, ulong offset) { struct container_hdr *container = NULL; u16 length; - u32 sectors; int i, size, ret = 0; size = ALIGN(CONTAINER_HDR_ALIGNMENT, info->bl_len); - sectors = size / info->bl_len; /* * It will not override the ATF code, so safe to use it here, @@ -80,9 +75,9 @@ static int read_auth_container(struct spl_image_info *spl_image, if (!container) return -ENOMEM; - debug("%s: container: %p sector: %lu sectors: %u\n", __func__, - container, sector, sectors); - if (info->read(info, sector, sectors, container) != sectors) { + debug("%s: container: %p offset: %lu size: %u\n", __func__, + container, offset, size); + if (info->read(info, offset, size, container) != size) { ret = -EIO; goto end; } @@ -104,17 +99,15 @@ static int read_auth_container(struct spl_image_info *spl_image, if (length > CONTAINER_HDR_ALIGNMENT) { size = ALIGN(length, info->bl_len); - sectors = size / info->bl_len; free(container); container = malloc(size); if (!container) return -ENOMEM; - debug("%s: container: %p sector: %lu sectors: %u\n", - __func__, container, sector, sectors); - if (info->read(info, sector, sectors, container) != - sectors) { + debug("%s: container: %p offset: %lu size: %u\n", + __func__, container, offset, size); + if (info->read(info, offset, size, container) != size) { ret = -EIO; goto end; } @@ -129,7 +122,7 @@ static int read_auth_container(struct spl_image_info *spl_image, for (i = 0; i < container->num_images; i++) { struct boot_img_t *image = read_auth_image(spl_image, info, container, i, - sector); + offset); if (!image) { ret = -EINVAL; @@ -154,7 +147,7 @@ end: } int spl_load_imx_container(struct spl_image_info *spl_image, - struct spl_load_info *info, ulong sector) + struct spl_load_info *info, ulong offset) { - return read_auth_container(spl_image, info, sector); + return read_auth_container(spl_image, info, offset); } diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c index 3d7551a7dae..9f41ea648ce 100644 --- a/common/spl/spl_mmc.c +++ b/common/spl/spl_mmc.c @@ -62,12 +62,14 @@ static int mmc_load_legacy(struct spl_image_info *spl_image, return 0; } -static ulong h_spl_load_read(struct spl_load_info *load, ulong sector, - ulong count, void *buf) +static ulong h_spl_load_read(struct spl_load_info *load, ulong off, + ulong size, void *buf) { - struct mmc *mmc = load->priv; + struct blk_desc *bd = load->priv; + lbaint_t sector = off >> bd->log2blksz; + lbaint_t count = size >> bd->log2blksz; - return blk_dread(mmc_get_blk_desc(mmc), sector, count, buf); + return blk_dread(bd, sector, count, buf) << bd->log2blksz; } static __maybe_unused unsigned long spl_mmc_raw_uboot_offset(int part) @@ -105,21 +107,23 @@ int mmc_load_image_raw_sector(struct spl_image_info *spl_image, struct spl_load_info load; debug("Found FIT\n"); - load.priv = mmc; + load.priv = bd; load.filename = NULL; - load.bl_len = mmc->read_bl_len; + load.bl_len = bd->blksz; load.read = h_spl_load_read; - ret = spl_load_simple_fit(spl_image, &load, sector, header); + ret = spl_load_simple_fit(spl_image, &load, + sector << bd->log2blksz, header); } else if (IS_ENABLED(CONFIG_SPL_LOAD_IMX_CONTAINER) && valid_container_hdr((void *)header)) { struct spl_load_info load; - load.priv = mmc; + load.priv = bd; load.filename = NULL; - load.bl_len = mmc->read_bl_len; + load.bl_len = bd->blksz; load.read = h_spl_load_read; - ret = spl_load_imx_container(spl_image, &load, sector); + ret = spl_load_imx_container(spl_image, &load, + sector << bd->log2blksz); } else { ret = mmc_load_legacy(spl_image, bootdev, mmc, sector, header); } diff --git a/common/spl/spl_nand.c b/common/spl/spl_nand.c index 9a5a5ffa04a..1fcc89fa660 100644 --- a/common/spl/spl_nand.c +++ b/common/spl/spl_nand.c @@ -49,14 +49,12 @@ static ulong spl_nand_fit_read(struct spl_load_info *load, ulong offs, ulong sector; sector = *(int *)load->priv; - offs *= load->bl_len; - size *= load->bl_len; offs = sector + nand_spl_adjust_offset(sector, offs - sector); err = nand_spl_load_image(offs, size, dst); if (err) return 0; - return size / load->bl_len; + return size; } static ulong spl_nand_legacy_read(struct spl_load_info *load, ulong offs, @@ -95,7 +93,7 @@ static int spl_nand_load_element(struct spl_image_info *spl_image, load.filename = NULL; load.bl_len = bl_len; load.read = spl_nand_fit_read; - return spl_load_simple_fit(spl_image, &load, offset / bl_len, header); + return spl_load_simple_fit(spl_image, &load, offset, header); } else if (IS_ENABLED(CONFIG_SPL_LOAD_IMX_CONTAINER) && valid_container_hdr((void *)header)) { struct spl_load_info load; @@ -104,7 +102,7 @@ static int spl_nand_load_element(struct spl_image_info *spl_image, load.filename = NULL; load.bl_len = bl_len; load.read = spl_nand_fit_read; - return spl_load_imx_container(spl_image, &load, offset / bl_len); + return spl_load_imx_container(spl_image, &load, offset); } else if (IS_ENABLED(CONFIG_SPL_LEGACY_IMAGE_FORMAT) && image_get_magic(header) == IH_MAGIC) { struct spl_load_info load; diff --git a/include/spl.h b/include/spl.h index 951e136b9ea..5a355e0a1e0 100644 --- a/include/spl.h +++ b/include/spl.h @@ -297,10 +297,12 @@ struct spl_load_info { * read() - Read from device * * @load: Information about the load state - * @sector: Sector number to read from (each @load->bl_len bytes) - * @count: Number of sectors to read + * @offset: Offset to read from in bytes. This must be a multiple of + * @load->bl_len. + * @count: Number of bytes to read. This must be a multiple of + * @load->bl_len. * @buf: Buffer to read into - * @return number of sectors read, 0 on error + * @return number of bytes read, 0 on error */ ulong (*read)(struct spl_load_info *load, ulong sector, ulong count, void *buf); @@ -368,7 +370,8 @@ void *spl_load_simple_fit_fix_load(const void *fit); * spl_load_simple_fit() - Loads a fit image from a device. * @spl_image: Image description to set up * @info: Structure containing the information required to load data. - * @sector: Sector number where FIT image is located in the device + * @offset: Offset where FIT image is located in the device. Must be aligned + * to the device's bl_len. * @fdt: Pointer to the copied FIT header. * * Reads the FIT image @sector in the device. Loads u-boot image to @@ -376,7 +379,7 @@ void *spl_load_simple_fit_fix_load(const void *fit); * Returns 0 on success. */ int spl_load_simple_fit(struct spl_image_info *spl_image, - struct spl_load_info *info, ulong sector, void *fdt); + struct spl_load_info *info, ulong offset, void *fdt); #define SPL_COPY_PAYLOAD_ONLY 1 #define SPL_FIT_FOUND 2 @@ -402,13 +405,14 @@ int spl_load_legacy_img(struct spl_image_info *spl_image, * spl_load_imx_container() - Loads a imx container image from a device. * @spl_image: Image description to set up * @info: Structure containing the information required to load data. - * @sector: Sector number where container image is located in the device + * @sector: Offset where container image is located in the device. Must be + * aligned to the device block size. * * Reads the container image @sector in the device. Loads u-boot image to * specified load address. */ int spl_load_imx_container(struct spl_image_info *spl_image, - struct spl_load_info *info, ulong sector); + struct spl_load_info *info, ulong offset); /* SPL common functions */ void preloader_console_init(void); diff --git a/test/image/spl_load_os.c b/test/image/spl_load_os.c index 49edf152d78..794cfad4e70 100644 --- a/test/image/spl_load_os.c +++ b/test/image/spl_load_os.c @@ -16,14 +16,13 @@ struct text_ctx { int fd; }; -static ulong read_fit_image(struct spl_load_info *load, ulong sector, - ulong count, void *buf) +static ulong read_fit_image(struct spl_load_info *load, ulong offset, + ulong size, void *buf) { struct text_ctx *text_ctx = load->priv; - off_t offset, ret; + off_t ret; ssize_t res; - offset = sector * load->bl_len; ret = os_lseek(text_ctx->fd, offset, OS_SEEK_SET); if (ret != offset) { printf("Failed to seek to %zx, got %zx (errno=%d)\n", offset, @@ -31,14 +30,14 @@ static ulong read_fit_image(struct spl_load_info *load, ulong sector, return 0; } - res = os_read(text_ctx->fd, buf, count * load->bl_len); + res = os_read(text_ctx->fd, buf, size); if (res == -1) { printf("Failed to read %lx bytes, got %ld (errno=%d)\n", - count * load->bl_len, res, errno); + size, res, errno); return 0; } - return count; + return size; } static int spl_test_load(struct unit_test_state *uts) From patchwork Wed Nov 8 16:48:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861709 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=Sh4QCEqg; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWLb0gWkz1yQK for ; Thu, 9 Nov 2023 03:51:02 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 77BC987730; Wed, 8 Nov 2023 17:49:25 +0100 (CET) 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="Sh4QCEqg"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 296D786E2F; Wed, 8 Nov 2023 17:49:17 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-qt1-x82d.google.com (mail-qt1-x82d.google.com [IPv6:2607:f8b0:4864:20::82d]) (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 BDB1A87546 for ; Wed, 8 Nov 2023 17:49:14 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-qt1-x82d.google.com with SMTP id d75a77b69052e-41cbd2cf3bbso8680971cf.0 for ; Wed, 08 Nov 2023 08:49:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462153; x=1700066953; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=cVcfh+9U1YAaK5NsmxqeYiLId8fc06J6tu303NomJNU=; b=Sh4QCEqgnQFOc3lOFOQhLVjG7FNKRILAw5QqDnD3CfB4SqcqbgoBI2Hlo27sUNLB0I 0MXHS2wkVoLtx8k3gjTDJd5hwY3YDpIZfnopCo51W6QcKgDOjAqGoK5Rzt/9telHy2iV NvadbpTOgaSa+1rZfbnU0TmRp0MTCdm9QTlC7C+mFr7tpLm/4AfvzYVeiU5r2jxm+vJv C5kXpcIqhSEqKq9LPLdV0FvD8pmMylhWf7JGCJpsatK8+4JBVEfKE/kdMVzPXIWqmyn/ 3l6v5JO4BGb4vGDbCZDPwVRHjTtg3UWvtK+y2iBMiieALcKXk88obNXQ4PY84rYTPUL7 yAyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462153; x=1700066953; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cVcfh+9U1YAaK5NsmxqeYiLId8fc06J6tu303NomJNU=; b=j19BfobozgjdPezDUeEw+es6TrLepu8PcyW5sM356AedG9kz/xFcqgYBpx3pbG1/GJ /5dkgvIGOwTGKVK/YiYWzvFVj9RaKKNI+7VRycZWsO+MLrEsHvEuaykAdcD6gY4jEsHn yJSqzvAUXoOkkFCzjGfqLinLyH//M19t1dx350vL9spats8L3wvye1uofhQKu2VJXhOq /5nr1a9NdSpAe8sZ7kHiY01fmRoO3EKXwQ3gjgM1k/4oyTmKWyNGhP1uWwbe267vQGXR 6Tsu7msgaX1QegGbaQV7ateLYuMAY7pW5gbzR4sJ7c1jLPYZuFbvL+/EE06sHKiIJCDD 7C0Q== X-Gm-Message-State: AOJu0YzkNS5d3UFpbZS0tYQCMh0OLg6njI4b4TC1N4OvUOe6BAkNbWjk g0zEbl/cY35gUVGQJVDjlRI= X-Google-Smtp-Source: AGHT+IFXlrG3fTwNMUthq0qFk0exr0Rxr2Tjp9clBM8tvGrq/yXw3TVFcj1wb2KcqDyEsX3gGdh7yw== X-Received: by 2002:ac8:7e95:0:b0:417:af0a:70a0 with SMTP id w21-20020ac87e95000000b00417af0a70a0mr9112659qtj.14.1699462153012; Wed, 08 Nov 2023 08:49:13 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id t11-20020ac865cb000000b003f6ac526568sm1064525qto.39.2023.11.08.08.49.12 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:12 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson Subject: [PATCH v7 09/26] spl: Set FAT bl_len to ARCH_DMA_MINALIGN Date: Wed, 8 Nov 2023 11:48:41 -0500 Message-Id: <20231108164858.3497420-10-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean Instead of relying on the presence of filename to determine whether we are dealing with a FAT filesystem (and should DMA-align the buffer), have FAT set bl_len to ARCH_DMA_MINALIGN instead. With this done, we can remove the special-case logic checking for the presence of filename. Because filesystems are not block-based, we may read less than the size passed to spl_load_info.read. This can happen if the file size is not DMA-aligned. This is fine as long as we read the amount we originally wanted to. Modify the conditions for callers of spl_load_info.read to check against the original, unaligned size to avoid failing spuriously. Signed-off-by: Sean Anderson Reviewed-by: Simon Glass --- Changes in v7: - Split off from the removal of filename common/spl/spl_blk_fs.c | 3 ++- common/spl/spl_fat.c | 2 +- common/spl/spl_fit.c | 23 +---------------------- common/spl/spl_imx_container.c | 8 +++++--- 4 files changed, 9 insertions(+), 27 deletions(-) diff --git a/common/spl/spl_blk_fs.c b/common/spl/spl_blk_fs.c index 144c8a65b5d..c105c55877a 100644 --- a/common/spl/spl_blk_fs.c +++ b/common/spl/spl_blk_fs.c @@ -9,6 +9,7 @@ #include #include #include +#include #include struct blk_dev { @@ -85,7 +86,7 @@ int spl_blk_load_image(struct spl_image_info *spl_image, debug("Found FIT\n"); load.read = spl_fit_read; - load.bl_len = 1; + load.bl_len = ARCH_DMA_MINALIGN; load.filename = (void *)filename; load.priv = &dev; diff --git a/common/spl/spl_fat.c b/common/spl/spl_fat.c index 6172e7bcd48..5b723456478 100644 --- a/common/spl/spl_fat.c +++ b/common/spl/spl_fat.c @@ -97,7 +97,7 @@ int spl_load_image_fat(struct spl_image_info *spl_image, debug("Found FIT\n"); load.read = spl_fit_read; - load.bl_len = 1; + load.bl_len = ARCH_DMA_MINALIGN; load.filename = (void *)filename; return spl_load_simple_fit(spl_image, &load, 0, header); diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c index ce7ef0efd0d..0df4e6d1484 100644 --- a/common/spl/spl_fit.c +++ b/common/spl/spl_fit.c @@ -14,7 +14,6 @@ #include #include #include -#include #include #include #include @@ -172,28 +171,11 @@ static int spl_fit_get_image_node(const struct spl_fit_info *ctx, static int get_aligned_image_offset(struct spl_load_info *info, int offset) { - /* - * If it is a FS read, get the first address before offset which is - * aligned to ARCH_DMA_MINALIGN. If it is raw read return the - * block number to which offset belongs. - */ - if (info->filename) - return offset & ~(ARCH_DMA_MINALIGN - 1); - return ALIGN_DOWN(offset, info->bl_len); } static int get_aligned_image_overhead(struct spl_load_info *info, int offset) { - /* - * If it is a FS read, get the difference between the offset and - * the first address before offset which is aligned to - * ARCH_DMA_MINALIGN. If it is raw read return the offset within the - * block. - */ - if (info->filename) - return offset & (ARCH_DMA_MINALIGN - 1); - return offset & (info->bl_len - 1); } @@ -202,9 +184,6 @@ static int get_aligned_image_size(struct spl_load_info *info, int data_size, { data_size = data_size + get_aligned_image_overhead(info, offset); - if (info->filename) - return data_size; - return ALIGN(data_size, info->bl_len); } @@ -295,7 +274,7 @@ static int load_simple_fit(struct spl_load_info *info, ulong fit_offset, if (info->read(info, fit_offset + get_aligned_image_offset(info, offset), size, - src_ptr) != size) + src_ptr) < length) return -EIO; debug("External data: dst=%p, offset=%x, size=%lx\n", diff --git a/common/spl/spl_imx_container.c b/common/spl/spl_imx_container.c index ad89a99fb23..7cd674f835f 100644 --- a/common/spl/spl_imx_container.c +++ b/common/spl/spl_imx_container.c @@ -45,7 +45,8 @@ static struct boot_img_t *read_auth_image(struct spl_image_info *spl_image, container, offset, size); if (info->read(info, offset, size, map_sysmem(images[image_index].dst - overhead, - images[image_index].size)) != size) { + images[image_index].size)) < + images[image_index].size) { printf("%s wrong\n", __func__); return NULL; } @@ -77,7 +78,8 @@ static int read_auth_container(struct spl_image_info *spl_image, debug("%s: container: %p offset: %lu size: %u\n", __func__, container, offset, size); - if (info->read(info, offset, size, container) != size) { + if (info->read(info, offset, size, container) < + CONTAINER_HDR_ALIGNMENT) { ret = -EIO; goto end; } @@ -107,7 +109,7 @@ static int read_auth_container(struct spl_image_info *spl_image, debug("%s: container: %p offset: %lu size: %u\n", __func__, container, offset, size); - if (info->read(info, offset, size, container) != size) { + if (info->read(info, offset, size, container) < length) { ret = -EIO; goto end; } From patchwork Wed Nov 8 16:48:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861713 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=NI7gV6X6; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWMN27Nbz1yQK for ; Thu, 9 Nov 2023 03:51:44 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 1F0958771E; Wed, 8 Nov 2023 17:49:36 +0100 (CET) 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="NI7gV6X6"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 3A836871E7; Wed, 8 Nov 2023 17:49:32 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-yw1-x112d.google.com (mail-yw1-x112d.google.com [IPv6:2607:f8b0:4864:20::112d]) (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 CB8C38770A for ; Wed, 8 Nov 2023 17:49:20 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-yw1-x112d.google.com with SMTP id 00721157ae682-5a7af52ee31so84721677b3.2 for ; Wed, 08 Nov 2023 08:49:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462154; x=1700066954; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=qGXrXTEK/aMFR78112awB2nl71ssOSwzBi5kQmcKoTI=; b=NI7gV6X6Am7HfRxgKv/3D9zdkig005ECXYetlc1Hff2O2RgYVs70KNnZqjFp6oYbUr MYlLB13YMTNv9nwo7bPuPBKC6QqbvCtz6GHGjOIXI1MQ8DL65CR753n3+Cnqskp0uZ0J AuYrI5WtEjMYm3cDaWk0I2mfCS5HWNmKuYEhikedvK+FDmFTlx2vrwl0dIF6Ayxqqupz Tw1MHV6JZ9PFpXfeF6G7ZSHohgn2Eh46aErc63AaTYKJn3/GYrANuLXi4f5BBaWT2VBl XERUtCTHxGbeO3FgMOGTiqBA5vPPhWw45S26pi5esmIWf9zuRy/nrWAKMP+PwS6Y8Ijq aCwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462154; x=1700066954; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qGXrXTEK/aMFR78112awB2nl71ssOSwzBi5kQmcKoTI=; b=IhfhAqnQQ5Tym+SiZRi1pz4QFdSg4gBsOMJ3vi92yt5xgZkweCD+4TkOj/Ul1ZY11v 8SsAOHFngcJXI+lHsOSn1L8xI7lA6zDsjCav5EN9BRNYdb48ykAqNICsG+w76nGcMwE6 YgQlLVVS9ajgGEMD34oWZWr5Lcv060cVSgsaXtZkRdUeiQ6mM415ny1kuJzGnPi0PdYr QBDbO+g5TX6SCoh2bK2jZDxYDNMp9Drk4nV5YLpbdqPNohHL8KN/HcTrdTZjsEOR+BP9 4LghXeeRoVQJgIe40AmyE25qGKxsknlRL2Imcm/ukZ2tYL6eQLsqPQbFB+vcX4sTSG22 rG6Q== X-Gm-Message-State: AOJu0Yyg20poJt2SmJPe+baJcp7duh3q33Kq93f1/UkarvHUHwud25xg u5owmepumGK3io5QyDbIZUY= X-Google-Smtp-Source: AGHT+IHC0BKJ97fFE2gUAe/AXYl0eRAOJkRmyNR28lqborEw92oqpkuld+PTt43J5mtLtmkUFIOX5w== X-Received: by 2002:a0d:d856:0:b0:5a9:27c8:edbc with SMTP id a83-20020a0dd856000000b005a927c8edbcmr2518343ywe.28.1699462154148; Wed, 08 Nov 2023 08:49:14 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id mz16-20020a0562142d1000b0066d1540f9ecsm1246208qvb.77.2023.11.08.08.49.13 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:13 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson Subject: [PATCH v7 10/26] spl: Remove filename from spl_load_info Date: Wed, 8 Nov 2023 11:48:42 -0500 Message-Id: <20231108164858.3497420-11-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean For filesystems, filename serves the same purpose as priv. However, spl_load_fit_image also uses it to determine whether to use a DMA-aligned buffer. This is beneficial for FAT, which uses a bounce-buffer if the destination is not DMA-aligned. However, this is unnecessary now that filesystems set bl_len to ARCH_DMA_MINALIGN instead. With this done, we can remove filename entirely. Signed-off-by: Sean Anderson Reviewed-by: Simon Glass --- Changes in v7: - Split off setting bl_len to ARCH_DMA_MINALIGN from filename removal Changes in v6: - New arch/arm/mach-sunxi/spl_spi_sunxi.c | 1 - common/spl/spl_blk_fs.c | 7 ++++--- common/spl/spl_fat.c | 4 ++-- common/spl/spl_mmc.c | 2 -- common/spl/spl_nand.c | 3 --- common/spl/spl_semihosting.c | 1 - common/spl/spl_spi.c | 2 -- common/spl/spl_ymodem.c | 1 - include/spl.h | 2 -- test/image/spl_load_os.c | 1 - 10 files changed, 6 insertions(+), 18 deletions(-) diff --git a/arch/arm/mach-sunxi/spl_spi_sunxi.c b/arch/arm/mach-sunxi/spl_spi_sunxi.c index 896aba69c32..5e7fba0c8e4 100644 --- a/arch/arm/mach-sunxi/spl_spi_sunxi.c +++ b/arch/arm/mach-sunxi/spl_spi_sunxi.c @@ -354,7 +354,6 @@ static int spl_spi_load_image(struct spl_image_info *spl_image, struct spl_load_info load; debug("Found FIT image\n"); - load.filename = NULL; load.bl_len = 1; load.read = spi_load_read; ret = spl_load_simple_fit(spl_image, &load, diff --git a/common/spl/spl_blk_fs.c b/common/spl/spl_blk_fs.c index c105c55877a..4975ce4d6ec 100644 --- a/common/spl/spl_blk_fs.c +++ b/common/spl/spl_blk_fs.c @@ -14,6 +14,7 @@ struct blk_dev { const char *ifname; + const char *filename; char dev_part_str[8]; }; @@ -31,11 +32,11 @@ static ulong spl_fit_read(struct spl_load_info *load, ulong file_offset, return ret; } - ret = fs_read(load->filename, virt_to_phys(buf), file_offset, size, + ret = fs_read(dev->filename, virt_to_phys(buf), file_offset, size, &actlen); if (ret < 0) { printf("spl: error reading image %s. Err - %d\n", - load->filename, ret); + dev->filename, ret); return ret; } @@ -87,8 +88,8 @@ int spl_blk_load_image(struct spl_image_info *spl_image, debug("Found FIT\n"); load.read = spl_fit_read; load.bl_len = ARCH_DMA_MINALIGN; - load.filename = (void *)filename; load.priv = &dev; + dev.filename = filename; return spl_load_simple_fit(spl_image, &load, 0, header); } diff --git a/common/spl/spl_fat.c b/common/spl/spl_fat.c index 5b723456478..8a2c4e3af49 100644 --- a/common/spl/spl_fat.c +++ b/common/spl/spl_fat.c @@ -51,7 +51,7 @@ static ulong spl_fit_read(struct spl_load_info *load, ulong file_offset, { loff_t actread; int ret; - char *filename = (char *)load->filename; + char *filename = load->priv; ret = fat_read_file(filename, buf, file_offset, size, &actread); if (ret) @@ -98,7 +98,7 @@ int spl_load_image_fat(struct spl_image_info *spl_image, debug("Found FIT\n"); load.read = spl_fit_read; load.bl_len = ARCH_DMA_MINALIGN; - load.filename = (void *)filename; + load.priv = (void *)filename; return spl_load_simple_fit(spl_image, &load, 0, header); } else { diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c index 9f41ea648ce..8c4ffe743d5 100644 --- a/common/spl/spl_mmc.c +++ b/common/spl/spl_mmc.c @@ -108,7 +108,6 @@ int mmc_load_image_raw_sector(struct spl_image_info *spl_image, debug("Found FIT\n"); load.priv = bd; - load.filename = NULL; load.bl_len = bd->blksz; load.read = h_spl_load_read; ret = spl_load_simple_fit(spl_image, &load, @@ -118,7 +117,6 @@ int mmc_load_image_raw_sector(struct spl_image_info *spl_image, struct spl_load_info load; load.priv = bd; - load.filename = NULL; load.bl_len = bd->blksz; load.read = h_spl_load_read; diff --git a/common/spl/spl_nand.c b/common/spl/spl_nand.c index 1fcc89fa660..45d7c5f6cfb 100644 --- a/common/spl/spl_nand.c +++ b/common/spl/spl_nand.c @@ -90,7 +90,6 @@ static int spl_nand_load_element(struct spl_image_info *spl_image, debug("Found FIT\n"); load.priv = &offset; - load.filename = NULL; load.bl_len = bl_len; load.read = spl_nand_fit_read; return spl_load_simple_fit(spl_image, &load, offset, header); @@ -99,7 +98,6 @@ static int spl_nand_load_element(struct spl_image_info *spl_image, struct spl_load_info load; load.priv = &offset; - load.filename = NULL; load.bl_len = bl_len; load.read = spl_nand_fit_read; return spl_load_imx_container(spl_image, &load, offset); @@ -108,7 +106,6 @@ static int spl_nand_load_element(struct spl_image_info *spl_image, struct spl_load_info load; debug("Found legacy image\n"); - load.filename = NULL; load.bl_len = IS_ENABLED(CONFIG_SPL_LZMA) ? bl_len : 1; load.read = spl_nand_legacy_read; diff --git a/common/spl/spl_semihosting.c b/common/spl/spl_semihosting.c index 8f11c29913f..24a3d9fd1c9 100644 --- a/common/spl/spl_semihosting.c +++ b/common/spl/spl_semihosting.c @@ -69,7 +69,6 @@ static int spl_smh_load_image(struct spl_image_info *spl_image, debug("Found FIT\n"); load.read = smh_fit_read; load.bl_len = 1; - load.filename = NULL; load.priv = &fd; ret = spl_load_simple_fit(spl_image, &load, 0, header); diff --git a/common/spl/spl_spi.c b/common/spl/spl_spi.c index af7a28e7c25..373caea322a 100644 --- a/common/spl/spl_spi.c +++ b/common/spl/spl_spi.c @@ -152,7 +152,6 @@ static int spl_spi_load_image(struct spl_image_info *spl_image, debug("Found FIT\n"); load.priv = flash; - load.filename = NULL; load.bl_len = 1; load.read = spl_spi_fit_read; err = spl_load_simple_fit(spl_image, &load, @@ -163,7 +162,6 @@ static int spl_spi_load_image(struct spl_image_info *spl_image, struct spl_load_info load; load.priv = flash; - load.filename = NULL; load.bl_len = 1; load.read = spl_spi_fit_read; diff --git a/common/spl/spl_ymodem.c b/common/spl/spl_ymodem.c index 8616cb3e915..3f92b9b0036 100644 --- a/common/spl/spl_ymodem.c +++ b/common/spl/spl_ymodem.c @@ -135,7 +135,6 @@ int spl_ymodem_load_image(struct spl_image_info *spl_image, debug("Found FIT\n"); load.priv = (void *)&info; - load.filename = NULL; load.bl_len = 1; info.buf = buf; info.image_read = BUF_SIZE; diff --git a/include/spl.h b/include/spl.h index 5a355e0a1e0..fec656d3018 100644 --- a/include/spl.h +++ b/include/spl.h @@ -287,12 +287,10 @@ static inline void *spl_image_fdt_addr(struct spl_image_info *info) * * @priv: Private data for the device * @bl_len: Block length for reading in bytes - * @filename: Name of the fit image file. * @read: Function to call to read from the device */ struct spl_load_info { void *priv; - const char *filename; /** * read() - Read from device * diff --git a/test/image/spl_load_os.c b/test/image/spl_load_os.c index 794cfad4e70..f46df907c63 100644 --- a/test/image/spl_load_os.c +++ b/test/image/spl_load_os.c @@ -57,7 +57,6 @@ static int spl_test_load(struct unit_test_state *uts) ret = sandbox_find_next_phase(fname, sizeof(fname), true); if (ret) ut_assertf(0, "%s not found, error %d\n", fname, ret); - load.filename = fname; header = spl_get_load_buffer(-sizeof(*header), sizeof(*header)); From patchwork Wed Nov 8 16:48:43 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861711 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=UfEO5i15; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWLy1PFbz1yQK for ; Thu, 9 Nov 2023 03:51:22 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id CCCC08774B; Wed, 8 Nov 2023 17:49:34 +0100 (CET) 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="UfEO5i15"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 39D8387708; Wed, 8 Nov 2023 17:49:24 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.2 Received: from mail-qk1-x730.google.com (mail-qk1-x730.google.com [IPv6:2607:f8b0:4864:20::730]) (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 DBEC3876F1 for ; Wed, 8 Nov 2023 17:49:16 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-qk1-x730.google.com with SMTP id af79cd13be357-77a453eb01cso460926985a.0 for ; Wed, 08 Nov 2023 08:49:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462155; x=1700066955; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Vb9TeMjgCJMXrSfCekq4VVOR5ZGrEzp0d15fy1rbYuk=; b=UfEO5i15FEGMzEX9ZAfsPG1qNIs6nUWwyxq65sjciBn5SMwhKjQfx+vanhRqGFSIGa g07tImclnqMIrSlZsQHOYLdZCLwYQ2WAEihBoSjbh7Xlryb86VlTXv6blon1JnWxP5ra rlgA+3HWowrObHzFOapXEVwsW4DmeEPN0Q++BWTEhrh838C6bMnc+TTo+Ai+Adsi4cI3 Nu0hSGDg+rOz2Qmq42fmoNOlwn1erXuX1OvcHwVte2zE0og6HLsCZmuueFohO6KzigSB t+MIlVy2/1EgoDW+8jHZZQJrfUaEVTnbypwsVw/ubFW/ffRfA9kovirzKiidyDKORDR0 MFvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462155; x=1700066955; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Vb9TeMjgCJMXrSfCekq4VVOR5ZGrEzp0d15fy1rbYuk=; b=UmTxoTcNFBNzqSI4r6DRp8bLjJ5j6D+6HgdzIBgaSx5i+iDq2GZVGIWc6xP/4mgFT7 YjxWgDrNMs3TtFzFqAy4H+AbTZcPpGT+TZ7djGGxgfrgBOINHqyMe84raKAmnzCTzIqt WPijWJzlCLchhmgyH0nD3bG9aisU04qnbPQjzTfE5I0mduyTzUT25ceb7pgweGHRAALq SHek/eADb7GQUbhzpQm5UhlwP1IT7ae5mlhb0GZ74MjU8JVfB+Scb3OrzUV4GWRqa/aY Q145nEK0pyS32S3eTd+8umUjThtLKTb0AZTOIg1oZ673yPiHpq805D2hS6gedog5KTH1 cjhQ== X-Gm-Message-State: AOJu0Yyy7OLXvTejECPmhuX2nnHRa4xG10WcYpIUE2SH1tW9yxpWGyq8 cUzmQMyPaTfagzri2gOMQFVDK5tN1no= X-Google-Smtp-Source: AGHT+IFOqFnyGwszlrkUasKPLlQXpgaTqRDyx9J8METdVTnN5Ez9JkyQ4aTayqTynWoEBKSmoc2mLg== X-Received: by 2002:a05:620a:4002:b0:77a:2520:2793 with SMTP id h2-20020a05620a400200b0077a25202793mr2600758qko.2.1699462155443; Wed, 08 Nov 2023 08:49:15 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id m18-20020ae9e012000000b007757f6558b3sm1217313qkk.95.2023.11.08.08.49.14 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:15 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson Subject: [PATCH v7 11/26] spl: Only support bl_len when we have to Date: Wed, 8 Nov 2023 11:48:43 -0500 Message-Id: <20231108164858.3497420-12-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean Aligning addresses and sizes causes overhead which is unnecessary when we are not loading from block devices. Remove bl_len when it is not needed. For example, on iot2050 we save 144 bytes with this patch (once the rest of this series is applied): add/remove: 0/0 grow/shrink: 0/3 up/down: 0/-144 (-144) Function old new delta spl_load_simple_fit 920 904 -16 load_simple_fit 496 444 -52 spl_spi_load_image 384 308 -76 Total: Before=87431, After=87287, chg -0.16% We use panic() instead of BUILD_BUG_ON in spl_set_bl_len because we still need to be able to compile it for things like mmc_load_image_raw_sector, even if that function will not be used. Signed-off-by: Sean Anderson Reviewed-by: Simon Glass --- (no changes since v6) Changes in v6: - New arch/arm/mach-imx/spl_imx_romapi.c | 8 ++++---- arch/arm/mach-sunxi/spl_spi_sunxi.c | 2 +- common/spl/Kconfig | 14 +++++++++++++- common/spl/spl_blk_fs.c | 2 +- common/spl/spl_fat.c | 2 +- common/spl/spl_fit.c | 6 +++--- common/spl/spl_imx_container.c | 10 +++++----- common/spl/spl_legacy.c | 4 ++-- common/spl/spl_mmc.c | 4 ++-- common/spl/spl_nand.c | 6 +++--- common/spl/spl_net.c | 2 +- common/spl/spl_nor.c | 8 ++++---- common/spl/spl_ram.c | 2 +- common/spl/spl_semihosting.c | 2 +- common/spl/spl_spi.c | 4 ++-- common/spl/spl_ymodem.c | 2 +- drivers/usb/gadget/f_sdp.c | 4 ++-- include/spl.h | 25 +++++++++++++++++++++++++ test/image/Kconfig | 1 + test/image/spl_load.c | 9 ++++----- test/image/spl_load_os.c | 2 +- 21 files changed, 78 insertions(+), 41 deletions(-) diff --git a/arch/arm/mach-imx/spl_imx_romapi.c b/arch/arm/mach-imx/spl_imx_romapi.c index d7f6cb4b5ba..9f0968cdf71 100644 --- a/arch/arm/mach-imx/spl_imx_romapi.c +++ b/arch/arm/mach-imx/spl_imx_romapi.c @@ -101,7 +101,7 @@ static int spl_romapi_load_image_seekable(struct spl_image_info *spl_image, struct spl_load_info load; memset(&load, 0, sizeof(load)); - load.bl_len = pagesize; + spl_set_bl_len(&load, pagesize); load.read = spl_romapi_read_seekable; return spl_load_simple_fit(spl_image, &load, offset, header); } else if (IS_ENABLED(CONFIG_SPL_LOAD_IMX_CONTAINER) && @@ -109,7 +109,7 @@ static int spl_romapi_load_image_seekable(struct spl_image_info *spl_image, struct spl_load_info load; memset(&load, 0, sizeof(load)); - load.bl_len = pagesize; + spl_set_bl_len(&load, pagesize); load.read = spl_romapi_read_seekable; ret = spl_load_imx_container(spl_image, &load, offset); @@ -334,7 +334,7 @@ static int spl_romapi_load_image_stream(struct spl_image_info *spl_image, ss.pagesize = pagesize; memset(&load, 0, sizeof(load)); - load.bl_len = 1; + spl_set_bl_len(&load, 1); load.read = spl_romapi_read_stream; load.priv = &ss; @@ -358,7 +358,7 @@ static int spl_romapi_load_image_stream(struct spl_image_info *spl_image, printf("ROM download failure %d\n", imagesize); memset(&load, 0, sizeof(load)); - load.bl_len = 1; + spl_set_bl_len(&load, 1); load.read = spl_ram_load_read; if (IS_ENABLED(CONFIG_SPL_LOAD_IMX_CONTAINER)) diff --git a/arch/arm/mach-sunxi/spl_spi_sunxi.c b/arch/arm/mach-sunxi/spl_spi_sunxi.c index 5e7fba0c8e4..267cb0b1aba 100644 --- a/arch/arm/mach-sunxi/spl_spi_sunxi.c +++ b/arch/arm/mach-sunxi/spl_spi_sunxi.c @@ -354,7 +354,7 @@ static int spl_spi_load_image(struct spl_image_info *spl_image, struct spl_load_info load; debug("Found FIT image\n"); - load.bl_len = 1; + spl_set_bl_len(&load, 1); load.read = spi_load_read; ret = spl_load_simple_fit(spl_image, &load, load_offset, header); diff --git a/common/spl/Kconfig b/common/spl/Kconfig index e929f1bbae1..0bc57d5fedb 100644 --- a/common/spl/Kconfig +++ b/common/spl/Kconfig @@ -280,8 +280,15 @@ config SPL_BOARD_INIT spl_board_init() from board_init_r(). This function should be provided by the board. +config SPL_LOAD_BLOCK + bool + help + Support loading images from block devices. This adds a bl_len member + to struct spl_load_info. + config SPL_BOOTROM_SUPPORT bool "Support returning to the BOOTROM" + select SPL_LOAD_BLOCK if MACH_IMX help Some platforms (e.g. the Rockchip RK3368) provide support in their ROM for loading the next boot-stage after performing basic setup @@ -482,6 +489,7 @@ config SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR ARCH_AT91 || ARCH_ZYNQ || ARCH_KEYSTONE || OMAP34XX || \ OMAP44XX || OMAP54XX || AM33XX || AM43XX || \ TARGET_SIFIVE_UNLEASHED || TARGET_SIFIVE_UNMATCHED + select SPL_LOAD_BLOCK if SPL_MMC help Use sector number for specifying U-Boot location on MMC/SD in raw mode. @@ -518,6 +526,7 @@ config SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET config SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION bool "MMC Raw mode: by partition" + select SPL_LOAD_BLOCK if SPL_MMC help Use a partition for loading U-Boot when using MMC/SD in raw mode. @@ -678,6 +687,7 @@ config SPL_FS_SQUASHFS config SPL_FS_FAT bool "Support FAT filesystems" select FS_FAT + select SPL_LOAD_BLOCK help Enable support for FAT and VFAT filesystems with SPL. This permits U-Boot (or Linux in Falcon mode) to be loaded from a FAT @@ -877,6 +887,7 @@ config SPL_MUSB_NEW config SPL_NAND_SUPPORT bool "Support NAND flash" + select SPL_LOAD_BLOCK help Enable support for NAND (Negative AND) flash in SPL. NAND flash can be used to allow SPL to load U-Boot from supported devices. @@ -1102,6 +1113,7 @@ config SYS_OS_BASE config SPL_FALCON_BOOT_MMCSD bool "Enable Falcon boot from MMC or SD media" depends on SPL_OS_BOOT && SPL_MMC + select SPL_LOAD_BLOCK help Select this if the Falcon mode OS image mode is on MMC or SD media. @@ -1260,9 +1272,9 @@ config SPL_SATA_RAW_U_BOOT_SECTOR config SPL_NVME bool "NVM Express device support" depends on BLK - select HAVE_BLOCK_DEVICE select FS_LOADER select SPL_BLK_FS + select SPL_LOAD_BLOCK help This option enables support for NVM Express devices. It supports basic functions of NVMe (read/write). diff --git a/common/spl/spl_blk_fs.c b/common/spl/spl_blk_fs.c index 4975ce4d6ec..53b8e1b11b4 100644 --- a/common/spl/spl_blk_fs.c +++ b/common/spl/spl_blk_fs.c @@ -87,7 +87,7 @@ int spl_blk_load_image(struct spl_image_info *spl_image, debug("Found FIT\n"); load.read = spl_fit_read; - load.bl_len = ARCH_DMA_MINALIGN; + spl_set_bl_len(&load, ARCH_DMA_MINALIGN); load.priv = &dev; dev.filename = filename; diff --git a/common/spl/spl_fat.c b/common/spl/spl_fat.c index 8a2c4e3af49..a0c34eba48f 100644 --- a/common/spl/spl_fat.c +++ b/common/spl/spl_fat.c @@ -97,7 +97,7 @@ int spl_load_image_fat(struct spl_image_info *spl_image, debug("Found FIT\n"); load.read = spl_fit_read; - load.bl_len = ARCH_DMA_MINALIGN; + spl_set_bl_len(&load, ARCH_DMA_MINALIGN); load.priv = (void *)filename; return spl_load_simple_fit(spl_image, &load, 0, header); diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c index 0df4e6d1484..872df0c0fe8 100644 --- a/common/spl/spl_fit.c +++ b/common/spl/spl_fit.c @@ -171,12 +171,12 @@ static int spl_fit_get_image_node(const struct spl_fit_info *ctx, static int get_aligned_image_offset(struct spl_load_info *info, int offset) { - return ALIGN_DOWN(offset, info->bl_len); + return ALIGN_DOWN(offset, spl_get_bl_len(info)); } static int get_aligned_image_overhead(struct spl_load_info *info, int offset) { - return offset & (info->bl_len - 1); + return offset & (spl_get_bl_len(info) - 1); } static int get_aligned_image_size(struct spl_load_info *info, int data_size, @@ -184,7 +184,7 @@ static int get_aligned_image_size(struct spl_load_info *info, int data_size, { data_size = data_size + get_aligned_image_overhead(info, offset); - return ALIGN(data_size, info->bl_len); + return ALIGN(data_size, spl_get_bl_len(info)); } /** diff --git a/common/spl/spl_imx_container.c b/common/spl/spl_imx_container.c index 7cd674f835f..b4ea9241d68 100644 --- a/common/spl/spl_imx_container.c +++ b/common/spl/spl_imx_container.c @@ -32,13 +32,13 @@ static struct boot_img_t *read_auth_image(struct spl_image_info *spl_image, images = (struct boot_img_t *)((u8 *)container + sizeof(struct container_hdr)); - if (!IS_ALIGNED(images[image_index].offset, info->bl_len)) { + if (!IS_ALIGNED(images[image_index].offset, spl_get_bl_len(info))) { printf("%s: image%d offset not aligned to %u\n", - __func__, image_index, info->bl_len); + __func__, image_index, spl_get_bl_len(info)); return NULL; } - size = ALIGN(images[image_index].size, info->bl_len); + size = ALIGN(images[image_index].size, spl_get_bl_len(info)); offset = images[image_index].offset + container_offset; debug("%s: container: %p offset: %lu size: %lu\n", __func__, @@ -66,7 +66,7 @@ static int read_auth_container(struct spl_image_info *spl_image, u16 length; int i, size, ret = 0; - size = ALIGN(CONTAINER_HDR_ALIGNMENT, info->bl_len); + size = ALIGN(CONTAINER_HDR_ALIGNMENT, spl_get_bl_len(info)); /* * It will not override the ATF code, so safe to use it here, @@ -100,7 +100,7 @@ static int read_auth_container(struct spl_image_info *spl_image, debug("Container length %u\n", length); if (length > CONTAINER_HDR_ALIGNMENT) { - size = ALIGN(length, info->bl_len); + size = ALIGN(length, spl_get_bl_len(info)); free(container); container = malloc(size); diff --git a/common/spl/spl_legacy.c b/common/spl/spl_legacy.c index 9189576b774..75d9d822337 100644 --- a/common/spl/spl_legacy.c +++ b/common/spl/spl_legacy.c @@ -139,9 +139,9 @@ int spl_load_legacy_img(struct spl_image_info *spl_image, lzma_len = LZMA_LEN; /* dataptr points to compressed payload */ - dataptr = ALIGN_DOWN(sizeof(*hdr), load->bl_len); + dataptr = ALIGN_DOWN(sizeof(*hdr), spl_get_bl_len(load)); overhead = sizeof(*hdr) - dataptr; - size = ALIGN(spl_image->size + overhead, load->bl_len); + size = ALIGN(spl_image->size + overhead, spl_get_bl_len(load)); dataptr += offset; debug("LZMA: Decompressing %08lx to %08lx\n", diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c index 8c4ffe743d5..91272c03d3f 100644 --- a/common/spl/spl_mmc.c +++ b/common/spl/spl_mmc.c @@ -108,7 +108,7 @@ int mmc_load_image_raw_sector(struct spl_image_info *spl_image, debug("Found FIT\n"); load.priv = bd; - load.bl_len = bd->blksz; + spl_set_bl_len(&load, bd->blksz); load.read = h_spl_load_read; ret = spl_load_simple_fit(spl_image, &load, sector << bd->log2blksz, header); @@ -117,7 +117,7 @@ int mmc_load_image_raw_sector(struct spl_image_info *spl_image, struct spl_load_info load; load.priv = bd; - load.bl_len = bd->blksz; + spl_set_bl_len(&load, bd->blksz); load.read = h_spl_load_read; ret = spl_load_imx_container(spl_image, &load, diff --git a/common/spl/spl_nand.c b/common/spl/spl_nand.c index 45d7c5f6cfb..281211b7f24 100644 --- a/common/spl/spl_nand.c +++ b/common/spl/spl_nand.c @@ -90,7 +90,7 @@ static int spl_nand_load_element(struct spl_image_info *spl_image, debug("Found FIT\n"); load.priv = &offset; - load.bl_len = bl_len; + spl_set_bl_len(&load, bl_len); load.read = spl_nand_fit_read; return spl_load_simple_fit(spl_image, &load, offset, header); } else if (IS_ENABLED(CONFIG_SPL_LOAD_IMX_CONTAINER) && @@ -98,7 +98,7 @@ static int spl_nand_load_element(struct spl_image_info *spl_image, struct spl_load_info load; load.priv = &offset; - load.bl_len = bl_len; + spl_set_bl_len(&load, bl_len); load.read = spl_nand_fit_read; return spl_load_imx_container(spl_image, &load, offset); } else if (IS_ENABLED(CONFIG_SPL_LEGACY_IMAGE_FORMAT) && @@ -106,7 +106,7 @@ static int spl_nand_load_element(struct spl_image_info *spl_image, struct spl_load_info load; debug("Found legacy image\n"); - load.bl_len = IS_ENABLED(CONFIG_SPL_LZMA) ? bl_len : 1; + spl_set_bl_len(&load, IS_ENABLED(CONFIG_SPL_LZMA) ? bl_len : 1); load.read = spl_nand_legacy_read; return spl_load_legacy_img(spl_image, bootdev, &load, offset, header); diff --git a/common/spl/spl_net.c b/common/spl/spl_net.c index f01d4df8bc6..47994e28165 100644 --- a/common/spl/spl_net.c +++ b/common/spl/spl_net.c @@ -54,7 +54,7 @@ static int spl_net_load_image(struct spl_image_info *spl_image, struct spl_load_info load; debug("Found FIT\n"); - load.bl_len = 1; + spl_set_bl_len(&load, 1); load.read = spl_net_load_read; rv = spl_load_simple_fit(spl_image, &load, 0, header); } else { diff --git a/common/spl/spl_nor.c b/common/spl/spl_nor.c index 236b0718283..aad230db4d3 100644 --- a/common/spl/spl_nor.c +++ b/common/spl/spl_nor.c @@ -49,7 +49,7 @@ static int spl_nor_load_image(struct spl_image_info *spl_image, int ret; debug("Found FIT\n"); - load.bl_len = 1; + spl_set_bl_len(&load, 1); load.read = spl_nor_load_read; ret = spl_load_simple_fit(spl_image, &load, @@ -97,7 +97,7 @@ static int spl_nor_load_image(struct spl_image_info *spl_image, #ifdef CONFIG_SPL_LOAD_FIT if (image_get_magic(header) == FDT_MAGIC) { debug("Found FIT format U-Boot\n"); - load.bl_len = 1; + spl_set_bl_len(&load, 1); load.read = spl_nor_load_read; return spl_load_simple_fit(spl_image, &load, spl_nor_get_uboot_base(), @@ -106,7 +106,7 @@ static int spl_nor_load_image(struct spl_image_info *spl_image, #endif if (IS_ENABLED(CONFIG_SPL_LOAD_IMX_CONTAINER) && valid_container_hdr((void *)header)) { - load.bl_len = 1; + spl_set_bl_len(&load, 1); load.read = spl_nor_load_read; return spl_load_imx_container(spl_image, &load, spl_nor_get_uboot_base()); @@ -114,7 +114,7 @@ static int spl_nor_load_image(struct spl_image_info *spl_image, /* Legacy image handling */ if (IS_ENABLED(CONFIG_SPL_LEGACY_IMAGE_FORMAT)) { - load.bl_len = 1; + spl_set_bl_len(&load, 1); load.read = spl_nor_load_read; return spl_load_legacy_img(spl_image, bootdev, &load, spl_nor_get_uboot_base(), diff --git a/common/spl/spl_ram.c b/common/spl/spl_ram.c index 4158ed1c32d..8aeda237be1 100644 --- a/common/spl/spl_ram.c +++ b/common/spl/spl_ram.c @@ -70,7 +70,7 @@ static int spl_ram_load_image(struct spl_image_info *spl_image, struct spl_load_info load; debug("Found FIT\n"); - load.bl_len = 1; + spl_set_bl_len(&load, 1); load.read = spl_ram_load_read; ret = spl_load_simple_fit(spl_image, &load, 0, header); } else { diff --git a/common/spl/spl_semihosting.c b/common/spl/spl_semihosting.c index 24a3d9fd1c9..9b0610b8fc8 100644 --- a/common/spl/spl_semihosting.c +++ b/common/spl/spl_semihosting.c @@ -68,7 +68,7 @@ static int spl_smh_load_image(struct spl_image_info *spl_image, debug("Found FIT\n"); load.read = smh_fit_read; - load.bl_len = 1; + spl_set_bl_len(&load, 1); load.priv = &fd; ret = spl_load_simple_fit(spl_image, &load, 0, header); diff --git a/common/spl/spl_spi.c b/common/spl/spl_spi.c index 373caea322a..3e08ac7c1a2 100644 --- a/common/spl/spl_spi.c +++ b/common/spl/spl_spi.c @@ -152,7 +152,7 @@ static int spl_spi_load_image(struct spl_image_info *spl_image, debug("Found FIT\n"); load.priv = flash; - load.bl_len = 1; + spl_set_bl_len(&load, 1); load.read = spl_spi_fit_read; err = spl_load_simple_fit(spl_image, &load, payload_offs, @@ -162,7 +162,7 @@ static int spl_spi_load_image(struct spl_image_info *spl_image, struct spl_load_info load; load.priv = flash; - load.bl_len = 1; + spl_set_bl_len(&load, 1); load.read = spl_spi_fit_read; err = spl_load_imx_container(spl_image, &load, diff --git a/common/spl/spl_ymodem.c b/common/spl/spl_ymodem.c index 3f92b9b0036..1faaa2c938d 100644 --- a/common/spl/spl_ymodem.c +++ b/common/spl/spl_ymodem.c @@ -135,7 +135,7 @@ int spl_ymodem_load_image(struct spl_image_info *spl_image, debug("Found FIT\n"); load.priv = (void *)&info; - load.bl_len = 1; + spl_set_bl_len(&load, 1); info.buf = buf; info.image_read = BUF_SIZE; load.read = ymodem_read_fit; diff --git a/drivers/usb/gadget/f_sdp.c b/drivers/usb/gadget/f_sdp.c index 1b16b7eb452..ca2760c00d0 100644 --- a/drivers/usb/gadget/f_sdp.c +++ b/drivers/usb/gadget/f_sdp.c @@ -845,7 +845,7 @@ static int sdp_handle_in_ep(struct spl_image_info *spl_image, debug("Found FIT\n"); load.priv = header; - load.bl_len = 1; + spl_set_bl_len(&load, 1); load.read = sdp_load_read; spl_load_simple_fit(spl_image, &load, 0, header); @@ -858,7 +858,7 @@ static int sdp_handle_in_ep(struct spl_image_info *spl_image, struct spl_load_info load; load.priv = header; - load.bl_len = 1; + spl_set_bl_len(&load, 1); load.read = sdp_load_read; spl_load_imx_container(spl_image, &load, 0); return SDP_EXIT; diff --git a/include/spl.h b/include/spl.h index fec656d3018..03c5c5c66b4 100644 --- a/include/spl.h +++ b/include/spl.h @@ -304,9 +304,34 @@ struct spl_load_info { */ ulong (*read)(struct spl_load_info *load, ulong sector, ulong count, void *buf); +#if IS_ENABLED(CONFIG_SPL_LOAD_BLOCK) int bl_len; }; +static inline int spl_get_bl_len(struct spl_load_info *info) +{ + return info->bl_len; +} + +static inline void spl_set_bl_len(struct spl_load_info *info, int bl_len) +{ + info->bl_len = bl_len; +} +#else +}; + +static inline int spl_get_bl_len(struct spl_load_info *info) +{ + return 1; +} + +static inline void spl_set_bl_len(struct spl_load_info *info, int bl_len) +{ + if (bl_len != 1) + panic("CONFIG_SPL_LOAD_BLOCK not enabled"); +} +#endif + /* * We need to know the position of U-Boot in memory so we can jump to it. We * allow any U-Boot binary to be used (u-boot.bin, u-boot-nodtb.bin, diff --git a/test/image/Kconfig b/test/image/Kconfig index 6f0bb81f835..45b6e8c52e6 100644 --- a/test/image/Kconfig +++ b/test/image/Kconfig @@ -52,6 +52,7 @@ config SPL_UT_LOAD_SPI config SPL_UT_LOAD_OS bool "Test loading from the host OS" depends on SANDBOX && SPL_LOAD_FIT + select SPL_LOAD_BLOCK default y help Smoke test to ensure that loading U-boot works in sandbox. diff --git a/test/image/spl_load.c b/test/image/spl_load.c index ab4c14d6491..35ceed67756 100644 --- a/test/image/spl_load.c +++ b/test/image/spl_load.c @@ -342,12 +342,11 @@ static int spl_test_image(struct unit_test_state *uts, const char *test_name, if (check_image_info(uts, &info_write, &info_read)) return CMD_RET_FAILURE; } else { - struct spl_load_info load = { - .bl_len = 1, - .priv = img, - .read = spl_test_read, - }; + struct spl_load_info load; + spl_set_bl_len(&load, 1); + load.priv = img; + load.read = spl_test_read; if (type == IMX8) ut_assertok(spl_load_imx_container(&info_read, &load, 0)); diff --git a/test/image/spl_load_os.c b/test/image/spl_load_os.c index f46df907c63..26228a8a4a9 100644 --- a/test/image/spl_load_os.c +++ b/test/image/spl_load_os.c @@ -51,7 +51,7 @@ static int spl_test_load(struct unit_test_state *uts) int fd; memset(&load, '\0', sizeof(load)); - load.bl_len = 512; + spl_set_bl_len(&load, 512); load.read = read_fit_image; ret = sandbox_find_next_phase(fname, sizeof(fname), true); From patchwork Wed Nov 8 16:48:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861710 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=MzMJwLrm; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWLn3t05z1yQK for ; Thu, 9 Nov 2023 03:51:13 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 1BD1787718; Wed, 8 Nov 2023 17:49:34 +0100 (CET) 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="MzMJwLrm"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id CA00C8755C; Wed, 8 Nov 2023 17:49:22 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-qv1-xf33.google.com (mail-qv1-xf33.google.com [IPv6:2607:f8b0:4864:20::f33]) (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 354CF86E2F for ; Wed, 8 Nov 2023 17:49:18 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-qv1-xf33.google.com with SMTP id 6a1803df08f44-66d093265dfso43458526d6.3 for ; Wed, 08 Nov 2023 08:49:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462157; x=1700066957; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=RTV8aKgJfsuixiVpqbdXPlBLnCGCi6YmUouOrdiRWk4=; b=MzMJwLrmCeAdEojqGEU61SiqJsoC0+mFfFL8gXMV6tKPaxBtoFjORtl9hWn41smzeW RDQb4BS4/vWILVLv+JY8FLwT1n4pY+spYPmmwZhgNZVxNSyXCg7uy2fWe/4lYm6EpwBH ykUHd9pXe6BXSFdG7lIDcSEky+rQiazP+qQA+Gs0PTz3KwFeOX+iE7eW5KBePYANjhYq b79xbRMx0tP//56+zYLpFHnt6zTqyaFWOybxt0DTwej4HraeqkNL9aH/1ZUZdP+mj4fK n9pYQ24dnydRRxn3uyVVQ2pJ4qGiOPKq8ZXwUS48AFdx1surG2L9aBUKc/ZwP+UNVbTG lYRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462157; x=1700066957; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=RTV8aKgJfsuixiVpqbdXPlBLnCGCi6YmUouOrdiRWk4=; b=c/JmFpIPacYigTZziIDFhA/i6ng9+PWhKufjfZ2rD0Y49euokn0MA/RosJRI1YdYLQ 945NC6T6bOZ22Wq/ZHZkmlNX5SgEAJ+zU11dmYc3VVVB/Yruk1MBXxJ1N4OizNqGTVER jWNGMZnhG7rS0UpA8FApWTbJ9gtsW54ZkPNmE0FIMA1/gBEfQqgQJd2l/5Wx89noW27r FcdPjXpcVHiDHN/4vqQfjfCjKITKMtjQq7isZ1bMRY08kIm7nwNXC7QPnaRylG/5eVKG Z4u7QU0tp/kMj4Ge5tj6dDUcTs71/yiWpNmCJ5N8Cp5nSMsg/ZYXnx6cfPpQ1vOZQIxZ 0CDQ== X-Gm-Message-State: AOJu0YxZC/9QjzW1OoLAyNREmtOjkmDrCUPjFJ5923OtLNpcZEyB0bN3 pXdOS0RuvkRou6f9eLa0Q32JDir0TA0= X-Google-Smtp-Source: AGHT+IF4LIjNJgKwhmB7SdbWrDYwMkGSJd8sGtkU3i+hTBgp9N3rMqxNhtYSEQPaVygSEoii8dPNPg== X-Received: by 2002:a05:6214:493:b0:66d:9d84:611a with SMTP id pt19-20020a056214049300b0066d9d84611amr3345261qvb.8.1699462157012; Wed, 08 Nov 2023 08:49:17 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id y12-20020a0cec0c000000b006731d3380f1sm1248078qvo.15.2023.11.08.08.49.16 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:16 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson , Dario Binacchi , Michael Trimarchi Subject: [PATCH v7 12/26] spl: nand: Remove spl_nand_legacy_read Date: Wed, 8 Nov 2023 11:48:44 -0500 Message-Id: <20231108164858.3497420-13-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean Now that spl_nand_fit_read works in units of bytes, it can be combined with spl_nand_legacy_read. Rename the resulting function spl_nand_read, since it is no longer FIT-specific. Signed-off-by: Sean Anderson Reviewed-by: Simon Glass --- (no changes since v6) Changes in v6: - New common/spl/spl_nand.c | 33 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/common/spl/spl_nand.c b/common/spl/spl_nand.c index 281211b7f24..91fa7674f17 100644 --- a/common/spl/spl_nand.c +++ b/common/spl/spl_nand.c @@ -42,29 +42,22 @@ static int spl_nand_load_image(struct spl_image_info *spl_image, } #else -static ulong spl_nand_fit_read(struct spl_load_info *load, ulong offs, - ulong size, void *dst) +__weak u32 nand_spl_adjust_offset(u32 sector, u32 offs) +{ + return offs; +} + +static ulong spl_nand_read(struct spl_load_info *load, ulong offs, ulong size, + void *dst) { int err; ulong sector; - sector = *(int *)load->priv; - offs = sector + nand_spl_adjust_offset(sector, offs - sector); - err = nand_spl_load_image(offs, size, dst); - if (err) - return 0; - - return size; -} - -static ulong spl_nand_legacy_read(struct spl_load_info *load, ulong offs, - ulong size, void *dst) -{ - int err; - debug("%s: offs %lx, size %lx, dst %p\n", __func__, offs, size, dst); + sector = *(int *)load->priv; + offs = sector + nand_spl_adjust_offset(sector, offs - sector); err = nand_spl_load_image(offs, size, dst); if (err) return 0; @@ -91,7 +84,7 @@ static int spl_nand_load_element(struct spl_image_info *spl_image, debug("Found FIT\n"); load.priv = &offset; spl_set_bl_len(&load, bl_len); - load.read = spl_nand_fit_read; + load.read = spl_nand_read; return spl_load_simple_fit(spl_image, &load, offset, header); } else if (IS_ENABLED(CONFIG_SPL_LOAD_IMX_CONTAINER) && valid_container_hdr((void *)header)) { @@ -99,16 +92,16 @@ static int spl_nand_load_element(struct spl_image_info *spl_image, load.priv = &offset; spl_set_bl_len(&load, bl_len); - load.read = spl_nand_fit_read; + load.read = spl_nand_read; return spl_load_imx_container(spl_image, &load, offset); } else if (IS_ENABLED(CONFIG_SPL_LEGACY_IMAGE_FORMAT) && image_get_magic(header) == IH_MAGIC) { struct spl_load_info load; debug("Found legacy image\n"); + load.priv = &offset; spl_set_bl_len(&load, IS_ENABLED(CONFIG_SPL_LZMA) ? bl_len : 1); - load.read = spl_nand_legacy_read; - + load.read = spl_nand_read; return spl_load_legacy_img(spl_image, bootdev, &load, offset, header); } else { err = spl_parse_image_header(spl_image, bootdev, header); From patchwork Wed Nov 8 16:48:45 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861712 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=NHEm7AmA; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWMB6bTpz1yQK for ; Thu, 9 Nov 2023 03:51:34 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 4D0FC8776E; Wed, 8 Nov 2023 17:49:35 +0100 (CET) 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="NHEm7AmA"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id E258A87747; Wed, 8 Nov 2023 17:49:28 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-qk1-x733.google.com (mail-qk1-x733.google.com [IPv6:2607:f8b0:4864:20::733]) (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 508FE87675 for ; Wed, 8 Nov 2023 17:49:19 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-qk1-x733.google.com with SMTP id af79cd13be357-778a6c440faso384407285a.3 for ; Wed, 08 Nov 2023 08:49:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462158; x=1700066958; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=A+mesTBxYW9aGZ4ycWCSC/Q22ZLWjxvplLaDHdLRBsQ=; b=NHEm7AmAAHK+LvmDpbnwcgClrJ0Pc7bGSMp9+co91Zc6SdGMlTow1SwW9KYpJvvwAX LMcnSkrWTU+4yl2tEUXJ/sftuF+tCNIGP/ms87rv5Re8Zuucj8U2KoLngEGqOQ9mtuNP 1uVcZztDZ7CDIxO3Pw+yo58EXOwPKP59ndzXDyT8ygXIMvO+oc64mAYThw33gwfzL45S bVBYZQkJWZHReNxSBS0XszVFAOlv7MkEMxECQ1RxB3ZcZrKMf9bfqYZIom+c8G/+Ic9P NvkObReMdUaVzXAQEz+mMKOVao43iFmFfs5mw2luR5ACAP84liMq5GNw8SAOeDgGrkWy imcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462158; x=1700066958; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=A+mesTBxYW9aGZ4ycWCSC/Q22ZLWjxvplLaDHdLRBsQ=; b=pokBzCTqS21kKTPYo/04iWJumHalsSPSzAkL+pqacLzpLDp7r1x7HcCtTQAR09CdLV sQID120jou184Et+FboNmSaqby5mhSD7jc1RDRRGg+Iea46wNQ7Tfu86ZAcJ2f/rj0YB qK5XvFsH77EVwNfWwWZVsf/tgFpMnbQJVt2Xqt4P5gb8lp+EFdCC3LG3ifekz9KPNM9W h9asHCLua9ZEq4xcB21ILULjA2MVfzHx/6rl2Ua2DZCseVPpls14iKD3Mgjs0IKqVNO9 Z4Fk6NM1AyefKMEkBkJyo1tkDDhjr536tGWAd/oyngVkb+w0t5NIQ7er8O5o6xTf5ynt mn3Q== X-Gm-Message-State: AOJu0YxsgGKQqufsCeCviRzGTNtoAZ10vLQN9s/3VGmahe7wtpzTCB12 bRpkM0h6/Cyepi86i6nN24k= X-Google-Smtp-Source: AGHT+IFC9KkG34aDQXpmr98uo7gmN0jt26t/7KbF/qz/b2PN7RzF6aqHJLg3GRqKnADnaC3gLovn9g== X-Received: by 2002:a05:620a:2913:b0:76a:db80:121d with SMTP id m19-20020a05620a291300b0076adb80121dmr2083690qkp.6.1699462158116; Wed, 08 Nov 2023 08:49:18 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id f16-20020ae9ea10000000b0076ee973b9a7sm1223066qkg.27.2023.11.08.08.49.17 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:17 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson Subject: [PATCH v7 13/26] spl: legacy: Split off LZMA decompression into its own function Date: Wed, 8 Nov 2023 11:48:45 -0500 Message-Id: <20231108164858.3497420-14-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean To allow for easier reuse of this functionality, split it off into its own function. Signed-off-by: Sean Anderson Reviewed-by: Simon Glass --- (no changes since v6) Changes in v6: - New common/spl/spl_legacy.c | 73 ++++++++++++++++++++++------------------- include/spl.h | 13 ++++++++ 2 files changed, 52 insertions(+), 34 deletions(-) diff --git a/common/spl/spl_legacy.c b/common/spl/spl_legacy.c index 75d9d822337..a561939b4f0 100644 --- a/common/spl/spl_legacy.c +++ b/common/spl/spl_legacy.c @@ -82,6 +82,43 @@ int spl_parse_legacy_header(struct spl_image_info *spl_image, return 0; } +int spl_load_legacy_lzma(struct spl_image_info *spl_image, + struct spl_load_info *load, ulong offset) +{ + SizeT lzma_len = LZMA_LEN; + void *src; + ulong dataptr, overhead, size; + int ret; + + /* dataptr points to compressed payload */ + dataptr = ALIGN_DOWN(sizeof(struct legacy_img_hdr), + spl_get_bl_len(load)); + overhead = sizeof(struct legacy_img_hdr) - dataptr; + size = ALIGN(spl_image->size + overhead, spl_get_bl_len(load)); + dataptr += offset; + + debug("LZMA: Decompressing %08lx to %08lx\n", + dataptr, spl_image->load_addr); + src = malloc(size); + if (!src) { + printf("Unable to allocate %d bytes for LZMA\n", + spl_image->size); + return -ENOMEM; + } + + load->read(load, dataptr, size, src); + ret = lzmaBuffToBuffDecompress(map_sysmem(spl_image->load_addr, + spl_image->size), &lzma_len, + src + overhead, spl_image->size); + if (ret) { + printf("LZMA decompression error: %d\n", ret); + return ret; + } + + spl_image->size = lzma_len; + return 0; +} + /* * This function is added explicitly to avoid code size increase, when * no compression method is enabled. The compiler will optimize the @@ -101,8 +138,6 @@ int spl_load_legacy_img(struct spl_image_info *spl_image, struct spl_load_info *load, ulong offset, struct legacy_img_hdr *hdr) { - __maybe_unused SizeT lzma_len; - __maybe_unused void *src; ulong dataptr; int ret; @@ -133,39 +168,9 @@ int spl_load_legacy_img(struct spl_image_info *spl_image, map_sysmem(spl_image->load_addr, spl_image->size)); break; - case IH_COMP_LZMA: { - ulong overhead, size; + case IH_COMP_LZMA: + return spl_load_legacy_lzma(spl_image, load, offset); - lzma_len = LZMA_LEN; - - /* dataptr points to compressed payload */ - dataptr = ALIGN_DOWN(sizeof(*hdr), spl_get_bl_len(load)); - overhead = sizeof(*hdr) - dataptr; - size = ALIGN(spl_image->size + overhead, spl_get_bl_len(load)); - dataptr += offset; - - debug("LZMA: Decompressing %08lx to %08lx\n", - dataptr, spl_image->load_addr); - src = malloc(size); - if (!src) { - printf("Unable to allocate %d bytes for LZMA\n", - spl_image->size); - return -ENOMEM; - } - - load->read(load, dataptr, size, src); - ret = lzmaBuffToBuffDecompress(map_sysmem(spl_image->load_addr, - spl_image->size), - &lzma_len, src + overhead, - spl_image->size); - if (ret) { - printf("LZMA decompression error: %d\n", ret); - return ret; - } - - spl_image->size = lzma_len; - break; - } default: debug("Compression method %s is not supported\n", genimg_get_comp_short_name(image_get_comp(hdr))); diff --git a/include/spl.h b/include/spl.h index 03c5c5c66b4..09521889014 100644 --- a/include/spl.h +++ b/include/spl.h @@ -407,6 +407,19 @@ int spl_load_simple_fit(struct spl_image_info *spl_image, #define SPL_COPY_PAYLOAD_ONLY 1 #define SPL_FIT_FOUND 2 +/** + * spl_load_legacy_lzma() - Load an LZMA-compressed legacy image + * @spl_image: Image description (already set up) + * @load: Structure containing the information required to load data. + * @offset: Pointer to image + * + * Load/decompress an LZMA-compressed legacy image from the device. + * + * Return: 0 on success, or a negative error on failure + */ +int spl_load_legacy_lzma(struct spl_image_info *spl_image, + struct spl_load_info *load, ulong offset); + /** * spl_load_legacy_img() - Loads a legacy image from a device. * @spl_image: Image description to set up From patchwork Wed Nov 8 16:48:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861714 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=F6RlnaLT; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWMb0g8hz1yQK for ; Thu, 9 Nov 2023 03:51:55 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 8C0FE87527; Wed, 8 Nov 2023 17:49:39 +0100 (CET) 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="F6RlnaLT"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id B124287725; Wed, 8 Nov 2023 17:49:34 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-ot1-x332.google.com (mail-ot1-x332.google.com [IPv6:2607:f8b0:4864:20::332]) (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 582728771B for ; Wed, 8 Nov 2023 17:49:22 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-ot1-x332.google.com with SMTP id 46e09a7af769-6ce2c71c61fso3747353a34.1 for ; Wed, 08 Nov 2023 08:49:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462159; x=1700066959; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=JWTuI0gh1iIFFh4Vk9Vtj/V6O0RVT3ioWKE0tYndafM=; b=F6RlnaLT37XLH6EUSiXqCzN2X946f6HSV/MmJYxm9deXfqpuR3h4lW0T7HpuCa3Hnz HY7kQAPuquZm6megWAxfL7dLeaPon6resh7nseU+S42vpDbjl1ZxAOcijgf575+2/sP+ Wd+C4RrZGFGkxwffYieDBYdWKH/WIWWx+2dgnFjPHR1ECnxm4oQSqOfmIpaQSj1wnZrT pTkCP634trOB5kbJK+6E+p0KqLVREStPJhtYSq4i37iIsxji1YZ5R8/OvzCWoovNsQ6O hyvG9GJX7YoemqGzqdJdTFr9v2E0nfwg+wZkM3SwQfQ4a2On4vlUTMjRf1+b57qGxNvX 4BQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462159; x=1700066959; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JWTuI0gh1iIFFh4Vk9Vtj/V6O0RVT3ioWKE0tYndafM=; b=Wm3BnAsKzIeLK6lnnrx4zdEjG8R0K+OthgJPKF0lXH5Kxj4rR3PFwVPy2RP4TIsmpj HAyd5L78FC17DECDzFOQV69Jsb5Pn/KAi46dbPM6u7lLKRlglGSdMZQpNyPchN+8fFvd ybmEkNaKCXhFM3THwBD7oO29WqwjW2X9H6mja4obWWE92Bl6GZoGRJZsclJy2tXiFmAG xtj2IsU37ibtrqAuc5hf2nU4bCyl4uikit07socNN+HmucwD/o3LUN/YDLlPR7jcuyDV +cuGz+N0QM+JgUAOM9i0EHjux/+wNhhYUVwnlBxpjAxlZO2WAl0aOb6KxoZ9ymotMiRW hkJQ== X-Gm-Message-State: AOJu0YzHIuHOI2/wZWanKKHI0hMitzFg9xf99D05lSMBBfSBDYQZ9vk0 +SMKy/nNHDl++DXhmPqUnjc= X-Google-Smtp-Source: AGHT+IGwJAlFeX2ZzGdwVPxdlQzni6PWQ+ZydXqiIPF9vSQax1stEVnJwqX3+o6OO5xjy1ysr2yqCg== X-Received: by 2002:a9d:65ca:0:b0:6d4:6ca8:5794 with SMTP id z10-20020a9d65ca000000b006d46ca85794mr2258899oth.35.1699462159509; Wed, 08 Nov 2023 08:49:19 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id jt56-20020a05622aa03800b0041cb8732d57sm1071861qtb.38.2023.11.08.08.49.18 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:18 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson Subject: [PATCH v7 14/26] test: spl: Support testing LEGACY_LZMA filesystem images Date: Wed, 8 Nov 2023 11:48:46 -0500 Message-Id: <20231108164858.3497420-15-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean These will soon be supported, so we need to be able to test it. Export the lzma data and generally use the same process in spl_test_mmc_fs as do_spl_test_load. If we end up needing this in third place in the future, it would probably be good to refactor things out. Signed-off-by: Sean Anderson Reviewed-by: Simon Glass --- (no changes since v6) Changes in v6: - New include/test/spl.h | 4 ++++ test/image/spl_load.c | 4 +++- test/image/spl_load_fs.c | 23 ++++++++++++++++++----- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/include/test/spl.h b/include/test/spl.h index c1f64658502..a2a5f33e328 100644 --- a/include/test/spl.h +++ b/include/test/spl.h @@ -81,6 +81,10 @@ size_t create_image(void *dst, enum spl_test_image type, int check_image_info(struct unit_test_state *uts, struct spl_image_info *info1, struct spl_image_info *info2); +/* Some compressed data and it size */ +extern const char lzma_compressed[]; +extern const size_t lzma_compressed_size; + /** * typedef write_image_t - Callback for writing an image * @uts: Current unit test state diff --git a/test/image/spl_load.c b/test/image/spl_load.c index 35ceed67756..e1036eff28c 100644 --- a/test/image/spl_load.c +++ b/test/image/spl_load.c @@ -374,7 +374,7 @@ SPL_IMG_TEST(spl_test_image, FIT_EXTERNAL, 0); * LZMA is too complex to generate on the fly, so let's use some data I put in * the oven^H^H^H^H compressed earlier */ -static const char lzma_compressed[] = { +const char lzma_compressed[] = { 0x5d, 0x00, 0x00, 0x80, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x02, 0x05, 0x55, 0x4e, 0x82, 0xbc, 0xc2, 0x42, 0xf6, 0x88, 0x6c, 0x99, 0xd6, 0x82, 0x48, 0xa6, 0x06, 0x67, 0xf8, 0x46, 0x7c, 0xe9, @@ -610,6 +610,8 @@ static const char lzma_compressed[] = { 0x1e, 0xff, 0xff, 0x80, 0x8e, 0x00, 0x00 }; +const size_t lzma_compressed_size = sizeof(lzma_compressed); + int do_spl_test_load(struct unit_test_state *uts, const char *test_name, enum spl_test_image type, struct spl_image_loader *loader, int (*write_image)(struct unit_test_state *, void *, size_t)) diff --git a/test/image/spl_load_fs.c b/test/image/spl_load_fs.c index 297ab08a820..59d0244d44b 100644 --- a/test/image/spl_load_fs.c +++ b/test/image/spl_load_fs.c @@ -320,10 +320,11 @@ static int spl_test_mmc_fs(struct unit_test_state *uts, const char *test_name, const char *filename = CONFIG_SPL_FS_LOAD_PAYLOAD_NAME; struct blk_desc *dev_desc; size_t fs_size, fs_data, img_size, img_data, - data_size = SPL_TEST_DATA_SIZE; + plain_size = SPL_TEST_DATA_SIZE; struct spl_image_info info_write = { .name = test_name, - .size = data_size, + .size = type == LEGACY_LZMA ? lzma_compressed_size : + plain_size, }, info_read = { }; struct disk_partition part = { .start = 1, @@ -335,7 +336,7 @@ static int spl_test_mmc_fs(struct unit_test_state *uts, const char *test_name, .boot_device = loader->boot_device, }; void *fs; - char *data; + char *data, *plain; img_size = create_image(NULL, type, &info_write, &img_data); ut_assert(img_size); @@ -345,7 +346,15 @@ static int spl_test_mmc_fs(struct unit_test_state *uts, const char *test_name, ut_assertnonnull(fs); data = fs + fs_data + img_data; - generate_data(data, data_size, test_name); + if (type == LEGACY_LZMA) { + plain = malloc(plain_size); + ut_assertnonnull(plain); + generate_data(plain, plain_size, "lzma"); + memcpy(data, lzma_compressed, lzma_compressed_size); + } else { + plain = data; + generate_data(plain, plain_size, test_name); + } ut_asserteq(img_size, create_image(fs + fs_data, type, &info_write, NULL)); ut_asserteq(fs_size, create_fs(fs, img_size, filename, NULL)); @@ -366,8 +375,12 @@ static int spl_test_mmc_fs(struct unit_test_state *uts, const char *test_name, ut_assertok(loader->load_image(&info_read, &bootdev)); if (check_image_info(uts, &info_write, &info_read)) return CMD_RET_FAILURE; - ut_asserteq_mem(data, phys_to_virt(info_write.load_addr), data_size); + if (type == LEGACY_LZMA) + ut_asserteq(plain_size, info_read.size); + ut_asserteq_mem(plain, phys_to_virt(info_write.load_addr), plain_size); + if (type == LEGACY_LZMA) + free(plain); free(fs); return 0; } From patchwork Wed Nov 8 16:48:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861716 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=L/mf+PZi; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWMz2r3Dz1yQK for ; Thu, 9 Nov 2023 03:52:15 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 7DFD187722; Wed, 8 Nov 2023 17:49:40 +0100 (CET) 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="L/mf+PZi"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 1756E87761; Wed, 8 Nov 2023 17:49:36 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-qk1-x730.google.com (mail-qk1-x730.google.com [IPv6:2607:f8b0:4864:20::730]) (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 782BC8771E for ; Wed, 8 Nov 2023 17:49:22 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-qk1-x730.google.com with SMTP id af79cd13be357-77891c236fcso493753285a.3 for ; Wed, 08 Nov 2023 08:49:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462161; x=1700066961; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=j6uYTUqNSfnWHH4Rj4bzLVx0dlvn2LQOIzsr/QBlOEE=; b=L/mf+PZiQgreokT4QGPzhc4F5nfc3HREGPR/EfQMJX2yN9ZhINJ2DenhHhP7VB8LdA cfyXCPuXZkf3Y5anMrRTn4DXqCuG8qtj+PjhkzXmPu/t+fQr/q7USkfYULfEUmD+WMfG ZYmnRK+eAVNZ+906zeCJG+wI4ewR9teDd7QxYwewHRrTN32d73I2wdc7e1xtYRrmZYEB 1Ntwgpbx98FCBlB7o5UIMaNAkzS2B1COneNpkOlSCZudYC1F+2RW5HNcUldlPTReSku/ NqKGMXaQOb/YA6sYKPVtv6T+VXyH5lbYHQN2S3EJQcESHFrg9ip61buRnt5M4pyONXRd VIiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462161; x=1700066961; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=j6uYTUqNSfnWHH4Rj4bzLVx0dlvn2LQOIzsr/QBlOEE=; b=BrvvreDTUrB3a8rX3uF6UTzX8Kcmg+NzKlfpcDOgs/u1rAYuCD0i7Nf8e/vqmxmV2y saHOgw3S5uq7dHuhhaI05R+ibMz2MyV+rpfqa/2R4q0nQujbbNO09qBDa9k3s1KUHi3n KFH8OdXuE6uVS2nFQ9iUCFAbV801YT3XWdP6+Ium4VUvCsf9oEpmZIdXc3ogcHNo/YNe TZdGVt2zObQvDASOfXBmS1GXDJHqJTeSZMXI4Z/A+b0j44/EPnDt4XloCb5u1L3rhBuw 5fJtNKAh8GSHBv3Kb6PvKwTNSEEiVvThkv1xEnJc5YQEBpwVUkx9tdJmEsxvkbDJAPwj O1rg== X-Gm-Message-State: AOJu0Yyf71v9kskrrnSISmslVr186k0rdUTlm7NoBCuZthiP5cqZPDPI 0E2KYKscEI5nP/2l5/Htz9k= X-Google-Smtp-Source: AGHT+IHEcpcRWh/0QF87Dq60gIEc16cZarQWRyXBMayI27HC71GltXM39idW1CEWSuSURFW7wF3yTA== X-Received: by 2002:a05:620a:17ac:b0:765:aac3:7667 with SMTP id ay44-20020a05620a17ac00b00765aac37667mr2597807qkb.0.1699462160763; Wed, 08 Nov 2023 08:49:20 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id m26-20020ae9e71a000000b007758d87524esm1224643qka.3.2023.11.08.08.49.20 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:20 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson Subject: [PATCH v7 15/26] spl: Add generic spl_load function Date: Wed, 8 Nov 2023 11:48:47 -0500 Message-Id: <20231108164858.3497420-16-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean Implementers of SPL_LOAD_IMAGE_METHOD have to correctly determine what type of image is being loaded and then call the appropriate image load function correctly. This is tricky, because some image load functions expect the whole image to already be loaded (CONFIG_SPL_LOAD_FIT_FULL), some will load the image automatically using spl_load_info.read() (CONFIG_SPL_LOAD_FIT/CONFIG_SPL_LOAD_IMX_CONTAINER), and some just parse the header and expect the caller to do the actual loading afterwards (legacy/raw images). Load methods often only support a subset of the above methods, meaning that not all image types can be used with all load methods. Further, the code to invoke these functions is duplicated between different load functions. To address this problem, this commit introduces a "spl_load" function. It aims to handle image detection and correct invocation of each of the parse/load functions. Although this function generally results in a size reduction with several users, it tends to bloat boards with only a single user. This is generally because programmers open-coding the contents of this function can make optimizations based on the specific loader. For example, NOR flash is memory-mapped, so it never bothers calling load->read. The compiler can't really make these optimizations across translation units. LTO solves this, but it is only available on some arches. To address this, perform "pseudo-LTO" by inlining spl_load when there are one or fewer users. At the moment, there are no users, so define SPL_LOAD_USERS to be 0. Signed-off-by: Sean Anderson Reviewed-by: Simon Glass --- (no changes since v6) Changes in v6: - Use pseudo-LTO for spl_load - Align reads to bl_len Changes in v5: - Load the header in spl_load as well - Don't bother trying to DMA-align the buffer, since we can't really fix it. Changes in v4: - Fix format specifiers in debug prints - Reword/fix some of the doc comments for spl_load Changes in v3: - Fix using ffs instead of fls - Fix using not initializing bl_len when info->filename was NULL Changes in v2: - Use reverse-xmas-tree style for locals in spl_simple_read. This is not complete, since overhead depends on bl_mask. common/spl/spl.c | 10 ++++ include/spl_load.h | 135 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 145 insertions(+) create mode 100644 include/spl_load.h diff --git a/common/spl/spl.c b/common/spl/spl.c index 7ce38ce46d4..3ce5bfeec8b 100644 --- a/common/spl/spl.c +++ b/common/spl/spl.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -352,6 +353,15 @@ int spl_parse_image_header(struct spl_image_info *spl_image, return 0; } +#if SPL_LOAD_USERS > 1 +int spl_load(struct spl_image_info *spl_image, + const struct spl_boot_device *bootdev, struct spl_load_info *info, + size_t size, size_t offset) +{ + return _spl_load(spl_image, bootdev, info, size, offset); +} +#endif + __weak void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image) { typedef void __noreturn (*image_entry_noargs_t)(void); diff --git a/include/spl_load.h b/include/spl_load.h new file mode 100644 index 00000000000..406f8b577b2 --- /dev/null +++ b/include/spl_load.h @@ -0,0 +1,135 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright (C) Sean Anderson + */ +#ifndef _SPL_LOAD_H_ +#define _SPL_LOAD_H_ + +#include +#include +#include +#include + +static inline int _spl_load(struct spl_image_info *spl_image, + const struct spl_boot_device *bootdev, + struct spl_load_info *info, size_t size, + size_t offset) +{ + struct legacy_img_hdr *header = + spl_get_load_buffer(-sizeof(*header), sizeof(*header)); + ulong base_offset, image_offset, overhead; + int read, ret; + + read = info->read(info, offset, ALIGN(sizeof(*header), + spl_get_bl_len(info)), header); + if (read < sizeof(*header)) + return -EIO; + + if (image_get_magic(header) == FDT_MAGIC) { + if (IS_ENABLED(CONFIG_SPL_LOAD_FIT_FULL)) { + void *buf; + + /* + * In order to support verifying images in the FIT, we + * need to load the whole FIT into memory. Try and + * guess how much we need to load by using the total + * size. This will fail for FITs with external data, + * but there's not much we can do about that. + */ + if (!size) + size = round_up(fdt_totalsize(header), 4); + buf = map_sysmem(CONFIG_SYS_LOAD_ADDR, size); + read = info->read(info, offset, + ALIGN(size, spl_get_bl_len(info)), + buf); + if (read < size) + return -EIO; + + return spl_parse_image_header(spl_image, bootdev, buf); + } + + if (IS_ENABLED(CONFIG_SPL_LOAD_FIT)) + return spl_load_simple_fit(spl_image, info, offset, + header); + } + + if (IS_ENABLED(CONFIG_SPL_LOAD_IMX_CONTAINER) && + valid_container_hdr((void *)header)) + return spl_load_imx_container(spl_image, info, offset); + + if (IS_ENABLED(CONFIG_SPL_LZMA) && + image_get_magic(header) == IH_MAGIC && + image_get_comp(header) == IH_COMP_LZMA) { + spl_image->flags |= SPL_COPY_PAYLOAD_ONLY; + ret = spl_parse_image_header(spl_image, bootdev, header); + if (ret) + return ret; + + return spl_load_legacy_lzma(spl_image, info, offset); + } + + ret = spl_parse_image_header(spl_image, bootdev, header); + if (ret) + return ret; + + base_offset = spl_image->offset; + /* Only NOR sets this flag. */ + if (IS_ENABLED(CONFIG_SPL_NOR_SUPPORT) && + spl_image->flags & SPL_COPY_PAYLOAD_ONLY) + base_offset += sizeof(*header); + image_offset = ALIGN_DOWN(base_offset, spl_get_bl_len(info)); + overhead = base_offset - image_offset; + size = ALIGN(spl_image->size + overhead, spl_get_bl_len(info)); + + read = info->read(info, offset + image_offset, size, + map_sysmem(spl_image->load_addr - overhead, size)); + return read < spl_image->size ? -EIO : 0; +} + +/* + * Although spl_load results in size reduction for callers, this is generally + * not enough to counteract the bloat if there is only one caller. The core + * problem is that the compiler can't optimize across translation units. The + * general solution to this is CONFIG_LTO, but that is not available on all + * architectures. Perform a pseudo-LTO just for this function by declaring it + * inline if there is one caller, and extern otherwise. + */ +#define SPL_LOAD_USERS \ + 0 + +#if SPL_LOAD_USERS > 1 +/** + * spl_load() - Parse a header and load the image + * @spl_image: Image data which will be filled in by this function + * @bootdev: The device to load from + * @info: Describes how to load additional information from @bootdev. At the + * minimum, read() and bl_len must be populated. + * @size: The size of the image, in bytes, if it is known in advance. Some boot + * devices (such as filesystems) know how big an image is before parsing + * the header. If 0, then the size will be determined from the header. + * @offset: The offset from the start of @bootdev, in bytes. This should have + * the offset @header was loaded from. It will be added to any offsets + * passed to @info->read(). + * + * This function determines the image type (FIT, legacy, i.MX, raw, etc), calls + * the appropriate parsing function, determines the load address, and the loads + * the image from storage. It is designed to replace ad-hoc image loading which + * may not support all image types (especially when config options are + * involved). + * + * Return: 0 on success, or a negative error on failure + */ +int spl_load(struct spl_image_info *spl_image, + const struct spl_boot_device *bootdev, struct spl_load_info *info, + size_t size, size_t offset); +#else +static inline int spl_load(struct spl_image_info *spl_image, + const struct spl_boot_device *bootdev, + struct spl_load_info *info, size_t size, + size_t offset) +{ + return _spl_load(spl_image, bootdev, info, size, offset); +} +#endif + +#endif /* _SPL_LOAD_H_ */ From patchwork Wed Nov 8 16:48:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861715 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=PgewAhke; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWMn2ff2z1yQK for ; Thu, 9 Nov 2023 03:52:05 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 15F8C8771B; Wed, 8 Nov 2023 17:49:40 +0100 (CET) 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="PgewAhke"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id F3BFB8775F; Wed, 8 Nov 2023 17:49:35 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-yw1-x1129.google.com (mail-yw1-x1129.google.com [IPv6:2607:f8b0:4864:20::1129]) (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 DA6E4875A7 for ; Wed, 8 Nov 2023 17:49:23 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-yw1-x1129.google.com with SMTP id 00721157ae682-5a7eef0b931so84094367b3.0 for ; Wed, 08 Nov 2023 08:49:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462162; x=1700066962; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2fY5TCMWDMTNUYdkBtkEG3ITBz2UWidoNRP9rmFOPpY=; b=PgewAhkexBvo/EPM36S+hoDBpSZU3tr7lHle9FeARymFcsnBZDEoxrGx27sYMbmlX+ beTZ5rDbfGoFKAT0IMhEZr1FGJJ1msM8kH46fuL6x5aRKYKd5lZLjh5QmK6yTwERzznq vTLLV8pyOXZPZf+7CXIC8mqWDbzVSsG0ZwBRGkMWQ1wdGcsSsmB+PDT5QYw7mo4Kz/QJ 4pIs2S2/feSMZVMKHgA8uCgABX9EyABlFi/ro2GG33PVcFrRzLiQGYkN9plTPsbrDwFH /wbQehbv8BGzIOu/xFnyOUPkl9hnnjiAecmcWtiFDdMuR3CeIeuxndnD1peip+Fo1Rbu YCdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462162; x=1700066962; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2fY5TCMWDMTNUYdkBtkEG3ITBz2UWidoNRP9rmFOPpY=; b=c7kYKX3qH/cqPq/qh16RXbU8mNxQYortsPADKv19S346CGQl4+kh0Y+vb0B0ZqF2dm Q9SXExULKuaf7O1M7hNmMiiqXu3Bfct8yJ6WMW/isll7FaGf4k04+BJcsd3++zyO0T6X BXlFHx7JydELy7o1BrQUS9pdlBQxoyCDQ+ZVSWUUlhNA5jqH2SrCaP3qhuDQ84KWTrgn Ydr73wVeXMS/HFBs5VaxT9oV1kMnfELq3l8na3B1cwzUJSTXG3I3TRCPTTpIi+UfbORL 890MxtYa1x1XyuvMenFUSK/s5HWaq1n6dd0Dx0KC7KHhpT/5bkaaYw69VQ5vtQmPvd2/ foPQ== X-Gm-Message-State: AOJu0YyA5AA94BP+2vqMqXWyL/A796ccp0F1Wsm8MwNX3oi94vhZUhnC Nr9hJRzdLAFakT4A8bp4XrI= X-Google-Smtp-Source: AGHT+IFF1u43u9CPoN3MnafGMk6+oqDobJjKgFw/cnewnhPLHAZrmw6Aiy60jhig80ixLm5JAnq+4w== X-Received: by 2002:a81:6cd6:0:b0:5a7:f002:4fe4 with SMTP id h205-20020a816cd6000000b005a7f0024fe4mr2312692ywc.23.1699462161900; Wed, 08 Nov 2023 08:49:21 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id g4-20020a0cd7c4000000b00658266be23fsm1244342qvj.41.2023.11.08.08.49.21 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:21 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson Subject: [PATCH v7 16/26] spl: Convert ext to use spl_load Date: Wed, 8 Nov 2023 11:48:48 -0500 Message-Id: <20231108164858.3497420-17-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean This converts the ext load method to use spl_load. As a consequence, it also adds support for FIT and IMX images. Signed-off-by: Sean Anderson Reviewed-by: Simon Glass --- (no changes since v6) Changes in v6: - Explicitly initialize load_info members Changes in v5: - Rework to load header in spl_load common/spl/spl_ext.c | 36 ++++++++++++++++++------------------ include/spl_load.h | 1 + test/image/spl_load_fs.c | 9 ++++++--- 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/common/spl/spl_ext.c b/common/spl/spl_ext.c index af836ca15b8..d280b69c387 100644 --- a/common/spl/spl_ext.c +++ b/common/spl/spl_ext.c @@ -2,25 +2,35 @@ #include #include -#include #include #include +#include #include #include #include #include +static ulong spl_fit_read(struct spl_load_info *load, ulong file_offset, + ulong size, void *buf) +{ + int ret; + loff_t actlen; + + ret = ext4fs_read(buf, file_offset, size, &actlen); + if (ret) + return ret; + return actlen; +} + int spl_load_image_ext(struct spl_image_info *spl_image, struct spl_boot_device *bootdev, struct blk_desc *block_dev, int partition, const char *filename) { s32 err; - struct legacy_img_hdr *header; - loff_t filelen, actlen; + loff_t filelen; struct disk_partition part_info = {}; - - header = spl_get_load_buffer(-sizeof(*header), sizeof(*header)); + struct spl_load_info load; if (part_get_info(block_dev, partition, &part_info)) { printf("spl: no partition table found\n"); @@ -42,20 +52,10 @@ int spl_load_image_ext(struct spl_image_info *spl_image, puts("spl: ext4fs_open failed\n"); goto end; } - err = ext4fs_read((char *)header, 0, sizeof(struct legacy_img_hdr), &actlen); - if (err < 0) { - puts("spl: ext4fs_read failed\n"); - goto end; - } - err = spl_parse_image_header(spl_image, bootdev, header); - if (err < 0) { - puts("spl: ext: failed to parse image header\n"); - goto end; - } - - err = ext4fs_read(map_sysmem(spl_image->load_addr, filelen), 0, filelen, - &actlen); + spl_set_bl_len(&load, 1); + load.read = spl_fit_read; + err = spl_load(spl_image, bootdev, &load, filelen, 0); end: #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT diff --git a/include/spl_load.h b/include/spl_load.h index 406f8b577b2..65aa6bb4493 100644 --- a/include/spl_load.h +++ b/include/spl_load.h @@ -95,6 +95,7 @@ static inline int _spl_load(struct spl_image_info *spl_image, * inline if there is one caller, and extern otherwise. */ #define SPL_LOAD_USERS \ + IS_ENABLED(CONFIG_SPL_FS_EXT4) + \ 0 #if SPL_LOAD_USERS > 1 diff --git a/test/image/spl_load_fs.c b/test/image/spl_load_fs.c index 59d0244d44b..01559e98c4f 100644 --- a/test/image/spl_load_fs.c +++ b/test/image/spl_load_fs.c @@ -422,20 +422,23 @@ static int spl_test_mmc(struct unit_test_state *uts, const char *test_name, spl_mmc_clear_cache(); spl_fat_force_reregister(); - if (type == LEGACY && - spl_test_mmc_fs(uts, test_name, type, create_ext2, false)) + if (spl_test_mmc_fs(uts, test_name, type, create_ext2, false)) return CMD_RET_FAILURE; - if (type != IMX8 && + if (type != IMX8 && type != LEGACY_LZMA && spl_test_mmc_fs(uts, test_name, type, create_fat, false)) return CMD_RET_FAILURE; + if (type == LEGACY_LZMA) + return 0; + return do_spl_test_load(uts, test_name, type, SPL_LOAD_IMAGE_GET(0, BOOT_DEVICE_MMC1, spl_mmc_load_image), spl_test_mmc_write_image); } SPL_IMG_TEST(spl_test_mmc, LEGACY, DM_FLAGS); +SPL_IMG_TEST(spl_test_mmc, LEGACY_LZMA, DM_FLAGS); SPL_IMG_TEST(spl_test_mmc, IMX8, DM_FLAGS); SPL_IMG_TEST(spl_test_mmc, FIT_EXTERNAL, DM_FLAGS); SPL_IMG_TEST(spl_test_mmc, FIT_INTERNAL, DM_FLAGS); From patchwork Wed Nov 8 16:48:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861717 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=QXKa7nJj; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWND4yzqz1yQK for ; Thu, 9 Nov 2023 03:52:28 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 70DA38774D; Wed, 8 Nov 2023 17:49:41 +0100 (CET) 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="QXKa7nJj"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 129C1874D5; Wed, 8 Nov 2023 17:49:38 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-qv1-xf31.google.com (mail-qv1-xf31.google.com [IPv6:2607:f8b0:4864:20::f31]) (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 CF76D8772A for ; Wed, 8 Nov 2023 17:49:24 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-qv1-xf31.google.com with SMTP id 6a1803df08f44-6707401e1edso43471066d6.1 for ; Wed, 08 Nov 2023 08:49:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462163; x=1700066963; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=e1P4FVB5CvJVhW1BQiEyhoJmMznB3qckZWf8YgYQH0o=; b=QXKa7nJjsmHci7kmSiOvdlv60yTmi92m9z+dzhe1NcLfNTf9gzHgjiGi8Nx+XFlsg+ yRLqiNf6F5vbsEg0TDTJr32goAO2bsDXnJ3Wb9iiKIjY3OwOBZ/Lv4Pg1a0atogVK9ag xMVw9sYkNU5gE3ixv+Vx5VH5+xd/IEa//SaaxG8X3gkNijSabHJndk2WD+d03y/9KiLC tIN5TnKeL7WmLR8nnnRBN8edIuTKlceuKc4nwAfwjkTXZ3aGmK1FeVAQnWMNqStvv647 E1XxfXx9sRYxJhtjDZw1fWrolDwfECuT15X3iqqLLGiww+BrHHMWQJXPlWok8Rrzz7Zi 25sA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462163; x=1700066963; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=e1P4FVB5CvJVhW1BQiEyhoJmMznB3qckZWf8YgYQH0o=; b=eS4ES8jR5tE3nOTw1ywj39hu+Mw2NOWpwd4EXhtIN+41tz8X9G3LlreOBevM16W3Y4 Wecx76QRrokEJv7cQAxYWke1G9c9W+zeefUKkKM5Qcv0s5oODipaC0YFX+aKuJHhYlGI CzRyiBEHktXeeGe4XQ2zJXKMrYyx/t0BkSQQi7Ny7gCLKCVeAPUZjnCy9VO79J07+nN2 I3+UMRiO4idET8cQ61F/jHpzkajJzsVV1dnh203OePUFMb5oe/nh5II/bU9HKEQx3gNS asILmNoathiYfWGDc6PkvghW8N3T+MMSuIeQrnxPVX366JDaPtrDJIBh2VuRYNLDfaoc E1xQ== X-Gm-Message-State: AOJu0YzgC/sHX/dzgz11wRVweE0d+KUTOYz5SoX8+qFKPj7D0OYWJcvi NeQZrPnJ7Q+WzJDJo1EWG1w= X-Google-Smtp-Source: AGHT+IFSvKAgZHQOfkSAOXnTZYD6Oa7DeBCp7dYwXXQpC0+Q7UrNRGK5ZEEH0KjHJcAtCriLqQT9Ew== X-Received: by 2002:ad4:4eee:0:b0:66d:14ca:4bcb with SMTP id dv14-20020ad44eee000000b0066d14ca4bcbmr3129734qvb.62.1699462163149; Wed, 08 Nov 2023 08:49:23 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id cv4-20020ad44d84000000b0066d15724feesm1244869qvb.68.2023.11.08.08.49.22 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:22 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson Subject: [PATCH v7 17/26] spl: Convert fat to spl_load Date: Wed, 8 Nov 2023 11:48:49 -0500 Message-Id: <20231108164858.3497420-18-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean This converts the fat loader to use spl_load. Some platforms are very tight on space, so we take care to only include the code we really need. Signed-off-by: Sean Anderson Reviewed-by: Simon Glass --- (no changes since v5) Changes in v5: - Rework to load header in spl_load Changes in v3: - Fix failing on success common/spl/spl_fat.c | 56 +++++++++++++--------------------------- include/spl_load.h | 1 + test/image/spl_load_fs.c | 3 +-- 3 files changed, 20 insertions(+), 40 deletions(-) diff --git a/common/spl/spl_fat.c b/common/spl/spl_fat.c index a0c34eba48f..569f2b32928 100644 --- a/common/spl/spl_fat.c +++ b/common/spl/spl_fat.c @@ -11,8 +11,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -66,58 +66,38 @@ int spl_load_image_fat(struct spl_image_info *spl_image, const char *filename) { int err; - struct legacy_img_hdr *header; + loff_t size; + struct spl_load_info load; err = spl_register_fat_device(block_dev, partition); if (err) goto end; - header = spl_get_load_buffer(-sizeof(*header), sizeof(*header)); - - err = file_fat_read(filename, header, sizeof(struct legacy_img_hdr)); - if (err <= 0) - goto end; - - if (IS_ENABLED(CONFIG_SPL_LOAD_FIT_FULL) && - image_get_magic(header) == FDT_MAGIC) { - err = file_fat_read(filename, - map_sysmem(CONFIG_SYS_LOAD_ADDR, 0), 0); - if (err <= 0) - goto end; - err = spl_parse_image_header(spl_image, bootdev, - map_sysmem(CONFIG_SYS_LOAD_ADDR, - err)); - if (err == -EAGAIN) - return err; - if (err == 0) - err = 1; - } else if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) && - image_get_magic(header) == FDT_MAGIC) { - struct spl_load_info load; - - debug("Found FIT\n"); - load.read = spl_fit_read; - spl_set_bl_len(&load, ARCH_DMA_MINALIGN); - load.priv = (void *)filename; - - return spl_load_simple_fit(spl_image, &load, 0, header); - } else { - err = spl_parse_image_header(spl_image, bootdev, header); + /* + * Avoid pulling in this function for other image types since we are + * very short on space on some boards. + */ + if (IS_ENABLED(CONFIG_SPL_LOAD_FIT_FULL)) { + err = fat_size(filename, &size); if (err) goto end; - - err = file_fat_read(filename, map_sysmem(spl_image->load_addr, - spl_image->size), 0); + } else { + size = 0; } + load.read = spl_fit_read; + spl_set_bl_len(&load, ARCH_DMA_MINALIGN); + load.priv = (void *)filename; + err = spl_load(spl_image, bootdev, &load, size, 0); + end: #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT - if (err <= 0) + if (err < 0) printf("%s: error reading image %s, err - %d\n", __func__, filename, err); #endif - return (err <= 0); + return err; } #if CONFIG_IS_ENABLED(OS_BOOT) diff --git a/include/spl_load.h b/include/spl_load.h index 65aa6bb4493..5e0460d956d 100644 --- a/include/spl_load.h +++ b/include/spl_load.h @@ -96,6 +96,7 @@ static inline int _spl_load(struct spl_image_info *spl_image, */ #define SPL_LOAD_USERS \ IS_ENABLED(CONFIG_SPL_FS_EXT4) + \ + IS_ENABLED(CONFIG_SPL_FS_FAT) + \ 0 #if SPL_LOAD_USERS > 1 diff --git a/test/image/spl_load_fs.c b/test/image/spl_load_fs.c index 01559e98c4f..333df2dfb53 100644 --- a/test/image/spl_load_fs.c +++ b/test/image/spl_load_fs.c @@ -425,8 +425,7 @@ static int spl_test_mmc(struct unit_test_state *uts, const char *test_name, if (spl_test_mmc_fs(uts, test_name, type, create_ext2, false)) return CMD_RET_FAILURE; - if (type != IMX8 && type != LEGACY_LZMA && - spl_test_mmc_fs(uts, test_name, type, create_fat, false)) + if (spl_test_mmc_fs(uts, test_name, type, create_fat, false)) return CMD_RET_FAILURE; if (type == LEGACY_LZMA) From patchwork Wed Nov 8 16:48:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861718 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=YnlCmv1F; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWNd2nYCz1yQK for ; Thu, 9 Nov 2023 03:52:49 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id A021B8771C; Wed, 8 Nov 2023 17:49:42 +0100 (CET) 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="YnlCmv1F"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id EB3C58771B; Wed, 8 Nov 2023 17:49:39 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.2 Received: from mail-qk1-x72d.google.com (mail-qk1-x72d.google.com [IPv6:2607:f8b0:4864:20::72d]) (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 9E55B87732 for ; Wed, 8 Nov 2023 17:49:25 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-qk1-x72d.google.com with SMTP id af79cd13be357-778940531dbso456276085a.0 for ; Wed, 08 Nov 2023 08:49:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462164; x=1700066964; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=UUUV9CS/j/m5CaOB+meeMRAiO4/JyZBcd+IHFG5dMuI=; b=YnlCmv1Fwe4jyJeDdTC1tP+U2PNTb9FERSVoKgcm0qm7fPxEWIZiD1ydB6hCM0EXJa GxQuNbSRVX/G4qSBA/U+mxMdXSBsBTr/huS2JEMZtp34vhBC2/VBcjgt6wFGgxQrBrWp ckYE5kTtP/bVrk8QeuLUriFGma7LJwYgI6e9NJsnlX8bwBf4IZvh1U8+/Y5q3dQWQqqH qeuZR+rVz117LAz4LgGH1Ut6ZRANvpBLvap59zhcqNd8jgqlLdZDRw8I9o9FMw1C64Vk 02aU7VLtSb2nXDNu8yV1NiavKXH6Zv4Ggw/VbuNIeN+ZguzaUAdOVwP0cZpaT8vRi+ra pCBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462164; x=1700066964; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UUUV9CS/j/m5CaOB+meeMRAiO4/JyZBcd+IHFG5dMuI=; b=vdEMy+2ddVqY4gO3EFSUVe1FXBqBOHhhEtQ9rtoRsp7snZvW7AN0+ZRxOnHcTXDlYv u55pJR+DpUcI7iW5FJV82QDUwLEXFpE7bhEgv1ekqWn5KLxFzq6YSrqv6gptLAAFK+f6 kPAXU5NfLzHbmIGvrvwgTHFnKcmc4iihr+ysnONRUx6TfZNqHcWWBk/vkzcS1CiP9j2d yK6gfexa/MHwlgFfUHZ9IcbGIA4mOotKqefLP3xwALIedQ2OOdqbdPsMjlu/EiUqe7aW AskPaT9CZ/cS3b7iZtHanmkkYkGGvkVHw3QnA1IAOOXx5TTmS9xuB//xTPVr34hp6oXR Vlnw== X-Gm-Message-State: AOJu0YwpLil/92537uRaMIRvuySdJvDGJfmUq8mlVmzFN5nsFVuornaB 72tqSuG5UM9QKX8IQsKdShj3ZhE2OAQ= X-Google-Smtp-Source: AGHT+IFcOc9fBdmBoGLdsv9jp+PUKEKdPqUAOMx8Q3kYEkALauTPF3y2PkxOy/QYUksCtyW21x6SUg== X-Received: by 2002:a05:620a:25d4:b0:775:73f6:1b39 with SMTP id y20-20020a05620a25d400b0077573f61b39mr2134286qko.25.1699462164295; Wed, 08 Nov 2023 08:49:24 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id m12-20020a05620a24cc00b007770673e757sm1217646qkn.94.2023.11.08.08.49.23 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:24 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson , Jaehoon Chung , Peng Fan Subject: [PATCH v7 18/26] spl: Convert mmc to spl_load Date: Wed, 8 Nov 2023 11:48:50 -0500 Message-Id: <20231108164858.3497420-19-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean This converts the mmc loader to spl_load. Legacy images are handled by spl_load (via spl_parse_image_header), so mmc_load_legacy can be omitted. To accurately determine whether mmc_load_image_raw_sector is used (which might not be the case if SYS_MMCSD_FS_BOOT is enabled), we introduce a helper config SYS_MMCSD_RAW_MODE. This ensures we can inline spl_load correctly when a board only boots from filesystems. We still need to check for SPL_MMC, since some boards enable configure raw mode even without MMC support. Signed-off-by: Sean Anderson Reviewed-by: Simon Glass --- (no changes since v6) Changes in v6: - Add SYS_MMCSD_RAW_MODE to help determine whether SPL_MMC loads anything directly. - Explicitly initialize load_info members Changes in v5: - Rework to load header in spl_load common/spl/Kconfig | 8 ++++ common/spl/spl_mmc.c | 89 ++++------------------------------------ include/spl_load.h | 1 + test/image/spl_load_fs.c | 3 -- 4 files changed, 16 insertions(+), 85 deletions(-) diff --git a/common/spl/Kconfig b/common/spl/Kconfig index 0bc57d5fedb..b93526904eb 100644 --- a/common/spl/Kconfig +++ b/common/spl/Kconfig @@ -481,6 +481,11 @@ config SPL_DISPLAY_PRINT banner ("U-Boot SPL ..."). This function should be provided by the board. +config SPL_SYS_MMCSD_RAW_MODE + bool + help + Support booting from an MMC without a filesystem. + config SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR bool "MMC raw mode: by sector" default y if ARCH_SUNXI || ARCH_DAVINCI || ARCH_UNIPHIER || \ @@ -490,6 +495,7 @@ config SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR OMAP44XX || OMAP54XX || AM33XX || AM43XX || \ TARGET_SIFIVE_UNLEASHED || TARGET_SIFIVE_UNMATCHED select SPL_LOAD_BLOCK if SPL_MMC + select SPL_SYS_MMCSD_RAW_MODE if SPL_MMC help Use sector number for specifying U-Boot location on MMC/SD in raw mode. @@ -527,6 +533,7 @@ config SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET config SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION bool "MMC Raw mode: by partition" select SPL_LOAD_BLOCK if SPL_MMC + select SPL_SYS_MMCSD_RAW_MODE if SPL_MMC help Use a partition for loading U-Boot when using MMC/SD in raw mode. @@ -1114,6 +1121,7 @@ config SPL_FALCON_BOOT_MMCSD bool "Enable Falcon boot from MMC or SD media" depends on SPL_OS_BOOT && SPL_MMC select SPL_LOAD_BLOCK + select SPL_SYS_MMCSD_RAW_MODE help Select this if the Falcon mode OS image mode is on MMC or SD media. diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c index 91272c03d3f..3d032bb27ce 100644 --- a/common/spl/spl_mmc.c +++ b/common/spl/spl_mmc.c @@ -8,9 +8,9 @@ #include #include #include -#include #include #include +#include #include #include #include @@ -19,49 +19,6 @@ #include #include -static int mmc_load_legacy(struct spl_image_info *spl_image, - struct spl_boot_device *bootdev, - struct mmc *mmc, - ulong sector, struct legacy_img_hdr *header) -{ - u32 image_offset_sectors; - u32 image_size_sectors; - unsigned long count; - u32 image_offset; - int ret; - - ret = spl_parse_image_header(spl_image, bootdev, header); - if (ret) - return ret; - - /* convert offset to sectors - round down */ - image_offset_sectors = spl_image->offset / mmc->read_bl_len; - /* calculate remaining offset */ - image_offset = spl_image->offset % mmc->read_bl_len; - - /* convert size to sectors - round up */ - image_size_sectors = (spl_image->size + mmc->read_bl_len - 1) / - mmc->read_bl_len; - - /* Read the header too to avoid extra memcpy */ - count = blk_dread(mmc_get_blk_desc(mmc), - sector + image_offset_sectors, - image_size_sectors, - map_sysmem(spl_image->load_addr, - image_size_sectors * mmc->read_bl_len)); - debug("read %x sectors to %lx\n", image_size_sectors, - spl_image->load_addr); - if (count != image_size_sectors) - return -EIO; - - if (image_offset) - memmove((void *)(ulong)spl_image->load_addr, - (void *)(ulong)spl_image->load_addr + image_offset, - spl_image->size); - - return 0; -} - static ulong h_spl_load_read(struct spl_load_info *load, ulong off, ulong size, void *buf) { @@ -87,46 +44,14 @@ int mmc_load_image_raw_sector(struct spl_image_info *spl_image, struct spl_boot_device *bootdev, struct mmc *mmc, unsigned long sector) { - unsigned long count; - struct legacy_img_hdr *header; + int ret; struct blk_desc *bd = mmc_get_blk_desc(mmc); - int ret = 0; + struct spl_load_info load; - header = spl_get_load_buffer(-sizeof(*header), bd->blksz); - - /* read image header to find the image size & load address */ - count = blk_dread(bd, sector, 1, header); - debug("hdr read sector %lx, count=%lu\n", sector, count); - if (count == 0) { - ret = -EIO; - goto end; - } - - if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) && - image_get_magic(header) == FDT_MAGIC) { - struct spl_load_info load; - - debug("Found FIT\n"); - load.priv = bd; - spl_set_bl_len(&load, bd->blksz); - load.read = h_spl_load_read; - ret = spl_load_simple_fit(spl_image, &load, - sector << bd->log2blksz, header); - } else if (IS_ENABLED(CONFIG_SPL_LOAD_IMX_CONTAINER) && - valid_container_hdr((void *)header)) { - struct spl_load_info load; - - load.priv = bd; - spl_set_bl_len(&load, bd->blksz); - load.read = h_spl_load_read; - - ret = spl_load_imx_container(spl_image, &load, - sector << bd->log2blksz); - } else { - ret = mmc_load_legacy(spl_image, bootdev, mmc, sector, header); - } - -end: + load.priv = bd; + spl_set_bl_len(&load, bd->blksz); + load.read = h_spl_load_read; + ret = spl_load(spl_image, bootdev, &load, 0, sector << bd->log2blksz); if (ret) { #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT puts("mmc_load_image_raw_sector: mmc block read error\n"); diff --git a/include/spl_load.h b/include/spl_load.h index 5e0460d956d..d55a47ae7d7 100644 --- a/include/spl_load.h +++ b/include/spl_load.h @@ -97,6 +97,7 @@ static inline int _spl_load(struct spl_image_info *spl_image, #define SPL_LOAD_USERS \ IS_ENABLED(CONFIG_SPL_FS_EXT4) + \ IS_ENABLED(CONFIG_SPL_FS_FAT) + \ + IS_ENABLED(CONFIG_SPL_SYS_MMCSD_RAW_MODE) + \ 0 #if SPL_LOAD_USERS > 1 diff --git a/test/image/spl_load_fs.c b/test/image/spl_load_fs.c index 333df2dfb53..67c19da95e7 100644 --- a/test/image/spl_load_fs.c +++ b/test/image/spl_load_fs.c @@ -428,9 +428,6 @@ static int spl_test_mmc(struct unit_test_state *uts, const char *test_name, if (spl_test_mmc_fs(uts, test_name, type, create_fat, false)) return CMD_RET_FAILURE; - if (type == LEGACY_LZMA) - return 0; - return do_spl_test_load(uts, test_name, type, SPL_LOAD_IMAGE_GET(0, BOOT_DEVICE_MMC1, spl_mmc_load_image), From patchwork Wed Nov 8 16:48:51 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861719 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=VfE9TFBG; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWNr497Lz1yQK for ; Thu, 9 Nov 2023 03:53:00 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 155238774A; Wed, 8 Nov 2023 17:49:43 +0100 (CET) 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="VfE9TFBG"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id E668F8772D; Wed, 8 Nov 2023 17:49:40 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.2 Received: from mail-qt1-x82b.google.com (mail-qt1-x82b.google.com [IPv6:2607:f8b0:4864:20::82b]) (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 B20A58770B for ; Wed, 8 Nov 2023 17:49:26 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-qt1-x82b.google.com with SMTP id d75a77b69052e-41cc75c55f0so8517471cf.1 for ; Wed, 08 Nov 2023 08:49:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462165; x=1700066965; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=hGQ9inhUcGYpil4IPWM6lUxnFpf62MFsqTMPqEnE7G0=; b=VfE9TFBGLu1LY5YSewZXKIxr57WijP4tOB1AEjww06Q70yB8cbXtFVK9JrnMf9fyr/ XP9LCCfkrt5Mq7GvqcGxsJzhd4rvOU4OXgPWEgugOuewdJBlETlLM5nEQpmATSXmifSM RjUund+IHORNKicBGcN4e5WvgUJxmTGG4yOeVHHwEHGky5aoKME7iPsEzPEpE6/Fgnz9 /x8GVnaeCtiuHPLMdzDTErQhKUDMKptqwuqOZOpGcidT4X5hSR/0EOK/+BK3aU/7Tqt2 rNM7t8z5A9f1qD7XmAdh583MXA/VdrhIbYApv+VaQqbLwPFzJuR1wyg4QUDfpV9JI/fi 63/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462165; x=1700066965; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hGQ9inhUcGYpil4IPWM6lUxnFpf62MFsqTMPqEnE7G0=; b=sH5M/u8GCyTGs4MYZpOn6Y1R5REN+zO4NKU2FuzqX9OTnWmJOw6kINL9CerVRZiyN7 wprgcDHjRJAt6reZ23PG/VxZ4JnfOM8F+6zCUHfO9QfnHkrjtzPpD9kVdNErK1Bwj9tz 86/RO9AQggTCQ66FbKIZksyR2W/Q6ilPdiqaX2Nnk+KNkzIqa4030z1mknBWhutK51F1 yZQT+OBUUq5u39YoGbbZ6ivFNr1IlSh2LHdScc7abpnvMSw1iSufg/hM8uuCgZxe9LIw /iJRJUI8dGFtsEHH4arwuj4xOTraoRQhuFxmPBIPmothG5lmR1p/fZMygzOVQPBvSShU RRGw== X-Gm-Message-State: AOJu0Yzr4od/0iilBZPeJUDEcNpuh8b5AbjzAEVHDwYpYABFxXVtpuL3 SXPRYeG+8uRjDwQvciOVTqDDGngPNqE= X-Google-Smtp-Source: AGHT+IE2OzOR3YfcZe8hs7knJckMPmV7iRi2TLXwkfizS2QQrLsRNyXkXck0c01qsoHgE8e2l+gY8g== X-Received: by 2002:a05:622a:170e:b0:403:f389:5793 with SMTP id h14-20020a05622a170e00b00403f3895793mr3418484qtk.32.1699462165477; Wed, 08 Nov 2023 08:49:25 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id k16-20020ac84750000000b004033c3948f9sm1062220qtp.42.2023.11.08.08.49.24 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:25 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson , Dario Binacchi , Michael Trimarchi Subject: [PATCH v7 19/26] spl: Convert nand to spl_load Date: Wed, 8 Nov 2023 11:48:51 -0500 Message-Id: <20231108164858.3497420-20-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean This converts the nand load method to use spl_load. nand_page_size may not be valid until after nand_spl_load_image is called (see e.g. fsl_ifc_spl), so we set bl_len in spl_nand_read. Since spl_load reads the header for us, we can remove that argument from spl_nand_load_element. There are two possible regressions which could result from this commit. First, we ask for a negative address from spl_get_load_buffer. That is, instead of header = spl_get_load_buffer(0, sizeof(*header)); we do header = spl_get_load_buffer(-sizeof(*header), sizeof(*header)); this could cause a problem if spl_get_load_buffer does not return valid memory for negative offsets. Second, we now set bl_len for legacy images. This can cause memory up to a bl_len - 1 before the image load address to be written, which might not have been the case before. If this turns out to be a problem, we can add an option for a bounce buffer. We can't load FITs with external data with SPL_LOAD_FIT_FULL, so disable the test in that case. No boards enable SPL_NAND_SUPPORT and SPL_LOAD_FIT_FULL, so this is not a regression. Signed-off-by: Sean Anderson Reviewed-by: Simon Glass --- (no changes since v6) Changes in v6: - New common/spl/spl_nand.c | 70 +++++++++----------------------------- include/spl_load.h | 1 + test/image/spl_load_nand.c | 2 ++ 3 files changed, 19 insertions(+), 54 deletions(-) diff --git a/common/spl/spl_nand.c b/common/spl/spl_nand.c index 91fa7674f17..3b0a1524238 100644 --- a/common/spl/spl_nand.c +++ b/common/spl/spl_nand.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -59,6 +60,7 @@ static ulong spl_nand_read(struct spl_load_info *load, ulong offs, ulong size, sector = *(int *)load->priv; offs = sector + nand_spl_adjust_offset(sector, offs - sector); err = nand_spl_load_image(offs, size, dst); + spl_set_bl_len(load, nand_page_size()); if (err) return 0; @@ -66,60 +68,20 @@ static ulong spl_nand_read(struct spl_load_info *load, ulong offs, ulong size, } static int spl_nand_load_element(struct spl_image_info *spl_image, - struct spl_boot_device *bootdev, - int offset, struct legacy_img_hdr *header) + struct spl_boot_device *bootdev, int offset) { - int bl_len; - int err; + struct spl_load_info load; - err = nand_spl_load_image(offset, sizeof(*header), (void *)header); - if (err) - return err; - - bl_len = nand_page_size(); - if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) && - image_get_magic(header) == FDT_MAGIC) { - struct spl_load_info load; - - debug("Found FIT\n"); - load.priv = &offset; - spl_set_bl_len(&load, bl_len); - load.read = spl_nand_read; - return spl_load_simple_fit(spl_image, &load, offset, header); - } else if (IS_ENABLED(CONFIG_SPL_LOAD_IMX_CONTAINER) && - valid_container_hdr((void *)header)) { - struct spl_load_info load; - - load.priv = &offset; - spl_set_bl_len(&load, bl_len); - load.read = spl_nand_read; - return spl_load_imx_container(spl_image, &load, offset); - } else if (IS_ENABLED(CONFIG_SPL_LEGACY_IMAGE_FORMAT) && - image_get_magic(header) == IH_MAGIC) { - struct spl_load_info load; - - debug("Found legacy image\n"); - load.priv = &offset; - spl_set_bl_len(&load, IS_ENABLED(CONFIG_SPL_LZMA) ? bl_len : 1); - load.read = spl_nand_read; - return spl_load_legacy_img(spl_image, bootdev, &load, offset, header); - } else { - err = spl_parse_image_header(spl_image, bootdev, header); - if (err) - return err; - return nand_spl_load_image(offset, spl_image->size, - map_sysmem(spl_image->load_addr, - spl_image->size)); - } + load.priv = &offset; + spl_set_bl_len(&load, 1); + load.read = spl_nand_read; + return spl_load(spl_image, bootdev, &load, 0, offset); } static int spl_nand_load_image(struct spl_image_info *spl_image, struct spl_boot_device *bootdev) { int err; - struct legacy_img_hdr *header; - int *src __attribute__((unused)); - int *dst __attribute__((unused)); #ifdef CONFIG_SPL_NAND_SOFTECC debug("spl: nand - using sw ecc\n"); @@ -128,10 +90,12 @@ static int spl_nand_load_image(struct spl_image_info *spl_image, #endif nand_init(); - header = spl_get_load_buffer(0, sizeof(*header)); - #if CONFIG_IS_ENABLED(OS_BOOT) if (!spl_start_uboot()) { + int *src, *dst; + struct legacy_img_hdr *header = + spl_get_load_buffer(0, sizeof(*header)); + /* * load parameter image * load to temp position since nand_spl_load_image reads @@ -174,20 +138,18 @@ static int spl_nand_load_image(struct spl_image_info *spl_image, } #endif #ifdef CONFIG_NAND_ENV_DST - spl_nand_load_element(spl_image, bootdev, CONFIG_ENV_OFFSET, header); + spl_nand_load_element(spl_image, bootdev, CONFIG_ENV_OFFSET); #ifdef CONFIG_ENV_OFFSET_REDUND - spl_nand_load_element(spl_image, bootdev, CONFIG_ENV_OFFSET_REDUND, header); + spl_nand_load_element(spl_image, bootdev, CONFIG_ENV_OFFSET_REDUND); #endif #endif /* Load u-boot */ - err = spl_nand_load_element(spl_image, bootdev, spl_nand_get_uboot_raw_page(), - header); + err = spl_nand_load_element(spl_image, bootdev, spl_nand_get_uboot_raw_page()); #ifdef CONFIG_SYS_NAND_U_BOOT_OFFS_REDUND #if CONFIG_SYS_NAND_U_BOOT_OFFS != CONFIG_SYS_NAND_U_BOOT_OFFS_REDUND if (err) err = spl_nand_load_element(spl_image, bootdev, - CONFIG_SYS_NAND_U_BOOT_OFFS_REDUND, - header); + CONFIG_SYS_NAND_U_BOOT_OFFS_REDUND); #endif #endif nand_deselect(); diff --git a/include/spl_load.h b/include/spl_load.h index d55a47ae7d7..38294a21ad0 100644 --- a/include/spl_load.h +++ b/include/spl_load.h @@ -98,6 +98,7 @@ static inline int _spl_load(struct spl_image_info *spl_image, IS_ENABLED(CONFIG_SPL_FS_EXT4) + \ IS_ENABLED(CONFIG_SPL_FS_FAT) + \ IS_ENABLED(CONFIG_SPL_SYS_MMCSD_RAW_MODE) + \ + (IS_ENABLED(CONFIG_SPL_NAND_SUPPORT) && !IS_ENABLED(CONFIG_SPL_UBI)) + \ 0 #if SPL_LOAD_USERS > 1 diff --git a/test/image/spl_load_nand.c b/test/image/spl_load_nand.c index 30179de98e7..ec242207948 100644 --- a/test/image/spl_load_nand.c +++ b/test/image/spl_load_nand.c @@ -51,4 +51,6 @@ SPL_IMG_TEST(spl_test_nand, LEGACY, DM_FLAGS); SPL_IMG_TEST(spl_test_nand, LEGACY_LZMA, DM_FLAGS); SPL_IMG_TEST(spl_test_nand, IMX8, DM_FLAGS); SPL_IMG_TEST(spl_test_nand, FIT_INTERNAL, DM_FLAGS); +#if !IS_ENABLED(CONFIG_SPL_LOAD_FIT_FULL) SPL_IMG_TEST(spl_test_nand, FIT_EXTERNAL, DM_FLAGS); +#endif From patchwork Wed Nov 8 16:48:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861721 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=ZkUtYTVU; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWPH3rzqz1yQK for ; Thu, 9 Nov 2023 03:53:23 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 15A6887675; Wed, 8 Nov 2023 17:49:45 +0100 (CET) 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="ZkUtYTVU"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 248AE8774C; Wed, 8 Nov 2023 17:49:43 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.2 Received: from mail-qt1-x82d.google.com (mail-qt1-x82d.google.com [IPv6:2607:f8b0:4864:20::82d]) (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 E07B787748 for ; Wed, 8 Nov 2023 17:49:27 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-qt1-x82d.google.com with SMTP id d75a77b69052e-41cc7b67419so48036981cf.2 for ; Wed, 08 Nov 2023 08:49:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462166; x=1700066966; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=uHNEEm3MccHpPyLAYzw2BuGWM8S6BmovX39pCc07NdE=; b=ZkUtYTVUl992x7QS3clzOk+vTiBGXXF7id+0oAYopFf5UeA8tmMB+rCGb9MM1Mxe+g ImVU0OQyVX0TPV145QkutNuDRNWnhFMWItW1uBKql09uMLNlpTkrznPO3tt0qGrKMC0E KJXPbvG960Kw4rrNNrntwK+dfayzkxJ5M6nu878cGkA3C609fl/FvOL1YGVtfR4DyMaL CXJ1zRPRxqr6DeWneKwA3mT083wkQjN72zx8j3VvQkCbv2Suogp3WXtxsYu4aw9sko9Y Hm5xDXCQdXqLOzTeX10aU/UKZvyXDC6O76qdSq6nPGuakLqvev7/3N6Ah4OUJOqfL+xO muyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462166; x=1700066966; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=uHNEEm3MccHpPyLAYzw2BuGWM8S6BmovX39pCc07NdE=; b=wzo9xG0/K8H1wfef7+QkGN4TrIO6QoxfG5Ll5R45GThFxgj8uHW6mAZzdoJYRzBhAR bYYbBYM3jL5KcGA4kUXI/iE3hoFlWrPDSwWtCo22AuC9lfpr7WEXVctdoKNKdjiNFZcD RDCb7cs85Cnvehhf4wrTVZu9nGdnAAQTHPyfwgOiyfT7L991xmr1JIZZ3hQRm3hDj5tj h11Y09Xw1psozUk4iQDi1aT7PdHHAkkgWWAG2jfMmATIFcGDUyBFGZxDUX/vmdVAmLYw PXeuTxsS8tMU+Z/YWxyvV3ysKl1pFHZ5AkbD4gr00TTqvb5HBJrBcGc67o1kdfakdQZ+ 8Hng== X-Gm-Message-State: AOJu0Yyu9MkGE7R8wCnlTFY8CwCbP9kVqS/gaVDmlt7+7yUvKsThpaXQ /ISc5JZbD3jSdTdqD/udF7s= X-Google-Smtp-Source: AGHT+IGsv60QjxAIPgGonO5jDuP2TdLuE+hCA26k2NfeTtUhzxWkHn50lnpiqLPIRlXkic5z21SYzg== X-Received: by 2002:a05:622a:1494:b0:419:5309:20fd with SMTP id t20-20020a05622a149400b00419530920fdmr2799004qtx.25.1699462166655; Wed, 08 Nov 2023 08:49:26 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id a17-20020a05622a065100b00407906a4c6fsm1061886qtb.71.2023.11.08.08.49.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:26 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson , Joe Hershberger , Ramon Fried Subject: [PATCH v7 20/26] spl: Convert net to spl_load Date: Wed, 8 Nov 2023 11:48:52 -0500 Message-Id: <20231108164858.3497420-21-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean This converts the net load method to use spl_load. As a result, it also adds support for LOAD_FIT_FULL and IMX images. Signed-off-by: Sean Anderson Reviewed-by: Simon Glass --- (no changes since v6) Changes in v6: - Explicitly initialize load_info members Changes in v5: - Rework to load header in spl_load common/spl/spl_net.c | 29 +++++------------------------ include/spl_load.h | 1 + test/image/spl_load_net.c | 2 ++ 3 files changed, 8 insertions(+), 24 deletions(-) diff --git a/common/spl/spl_net.c b/common/spl/spl_net.c index 47994e28165..898f9df705a 100644 --- a/common/spl/spl_net.c +++ b/common/spl/spl_net.c @@ -11,8 +11,8 @@ #include #include #include -#include #include +#include #include #include @@ -29,8 +29,7 @@ static ulong spl_net_load_read(struct spl_load_info *load, ulong sector, static int spl_net_load_image(struct spl_image_info *spl_image, struct spl_boot_device *bootdev) { - struct legacy_img_hdr *header = map_sysmem(image_load_addr, - sizeof(*header)); + struct spl_load_info load; int rv; env_init(); @@ -49,27 +48,9 @@ static int spl_net_load_image(struct spl_image_info *spl_image, return rv; } - if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) && - image_get_magic(header) == FDT_MAGIC) { - struct spl_load_info load; - - debug("Found FIT\n"); - spl_set_bl_len(&load, 1); - load.read = spl_net_load_read; - rv = spl_load_simple_fit(spl_image, &load, 0, header); - } else { - debug("Legacy image\n"); - - rv = spl_parse_image_header(spl_image, bootdev, header); - if (rv) - return rv; - - memcpy(map_sysmem(spl_image->load_addr, spl_image->size), - map_sysmem(image_load_addr, spl_image->size), - spl_image->size); - } - - return rv; + spl_set_bl_len(&load, 1); + load.read = spl_net_load_read; + return spl_load(spl_image, bootdev, &load, 0, 0); } #endif diff --git a/include/spl_load.h b/include/spl_load.h index 38294a21ad0..4777f84ac6b 100644 --- a/include/spl_load.h +++ b/include/spl_load.h @@ -99,6 +99,7 @@ static inline int _spl_load(struct spl_image_info *spl_image, IS_ENABLED(CONFIG_SPL_FS_FAT) + \ IS_ENABLED(CONFIG_SPL_SYS_MMCSD_RAW_MODE) + \ (IS_ENABLED(CONFIG_SPL_NAND_SUPPORT) && !IS_ENABLED(CONFIG_SPL_UBI)) + \ + IS_ENABLED(CONFIG_SPL_NET) + \ 0 #if SPL_LOAD_USERS > 1 diff --git a/test/image/spl_load_net.c b/test/image/spl_load_net.c index f570cef163f..9d067a7a592 100644 --- a/test/image/spl_load_net.c +++ b/test/image/spl_load_net.c @@ -248,5 +248,7 @@ static int spl_test_net(struct unit_test_state *uts, const char *test_name, return ret; } SPL_IMG_TEST(spl_test_net, LEGACY, DM_FLAGS); +SPL_IMG_TEST(spl_test_net, LEGACY_LZMA, DM_FLAGS); +SPL_IMG_TEST(spl_test_net, IMX8, DM_FLAGS); SPL_IMG_TEST(spl_test_net, FIT_INTERNAL, DM_FLAGS); SPL_IMG_TEST(spl_test_net, FIT_EXTERNAL, DM_FLAGS); From patchwork Wed Nov 8 16:48:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861722 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=J5Zygc8k; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWPW2Ng3z1yQK for ; Thu, 9 Nov 2023 03:53:35 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 9DC788774F; Wed, 8 Nov 2023 17:49:45 +0100 (CET) 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="J5Zygc8k"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 492A387741; Wed, 8 Nov 2023 17:49:44 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-qk1-x734.google.com (mail-qk1-x734.google.com [IPv6:2607:f8b0:4864:20::734]) (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 0E38B8774F for ; Wed, 8 Nov 2023 17:49:31 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-qk1-x734.google.com with SMTP id af79cd13be357-7788ebea620so455261785a.3 for ; Wed, 08 Nov 2023 08:49:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462168; x=1700066968; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=108RtrjqkYbK2yKirtGLw/AxsyaY4n3hdSUMdgZyd+o=; b=J5Zygc8kYGQK+e8UGLrg8KtDjpw1IFVDx9NfvyvNJ9vniRp4heFOK6VbLKKlVdXzoe eZdKBOVzpXtwB1Avavi1uM0BKmYkjTk802XP6fxKqebUJnN54C/qOaPI9grJhToyXZGF fWLldIEJACvYizr1QDVEg9B9J4E8nt1PSiHcwFRylCRId+nI4NkHeA3rPr98Vqw4UB1a 0BfAz9rGHAyGU+hX2/fVjfD9Oe32R8OpWVp9m4MQDbpJHC543lgcNQYHmr2VwDmUJaeg LlG0h/iyR3lflNFhbCr997+ffLDj2mUILVSl45isnAnxiCzNLpJckpjosCNkYx3Xu9RT M5wQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462168; x=1700066968; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=108RtrjqkYbK2yKirtGLw/AxsyaY4n3hdSUMdgZyd+o=; b=f53pUYlGvOmw9w02nnE3fVyFfVbbk6KSTIoMvQSj1pXTxdacnKWSAL2SY5OaCnUlPK 23JeYBbmX6dvnQq1ciU81Y3usAnKLz+XKoxtgNoP1mA30iSlE9ZnfAxSaxP3Q8tOo5Uy a0wO7iPRkcj7TOKW3om7R9MAQWm912fDNCEOonh3BBBq3QB42HrTZRXORPSZO7bIzgCM 0hb6CEkikAQVcxfOJkkZQ5IBncW5fVLoxv/hjUMAAB8te3bZNp7EvlsiLOpU8q4giXcq 2bVO3wjo1u4HumaNnN8ewkwJG/p09a77Eig5SlN9r3GD3cXIHoS4cxoOxWOu1vx5Yk0W SMiw== X-Gm-Message-State: AOJu0YzLnzHFRF7Je1ZJTPrY3xpDSWPaLvMkaQHHYg4ALXjWA28zj39s kN233ojwBIYlndAJ8Hwy8Eo= X-Google-Smtp-Source: AGHT+IEvi2KffJlB5gywJMf3SeiZB673qlL0kkn2Bx5z8Pz74gJLQzmp1jS9e6OfnqGBu93mX7WdeA== X-Received: by 2002:a05:620a:240a:b0:76f:1eac:e726 with SMTP id d10-20020a05620a240a00b0076f1eace726mr2402254qkn.15.1699462167913; Wed, 08 Nov 2023 08:49:27 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id b6-20020a05620a0f8600b007758b25ac3bsm1216774qkn.82.2023.11.08.08.49.27 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:27 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson Subject: [PATCH v7 21/26] spl: Convert nor to spl_load Date: Wed, 8 Nov 2023 11:48:53 -0500 Message-Id: <20231108164858.3497420-22-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean This converts the nor load method to use spl_load. As a result it also adds support for LOAD_FIT_FULL. Since this is the last caller of spl_load_legacy_img, it has been removed. We can't load FITs with external data with SPL_LOAD_FIT_FULL, so disable the test in that case. No boards enable SPL_NOR_SUPPORT and SPL_LOAD_FIT_FULL, so this is not a regression. Signed-off-by: Sean Anderson Reviewed-by: Simon Glass --- (no changes since v6) Changes in v6: - Fix LZMA support - Fix load address - Explicitly initialize load_info members Changes in v5: - Rework to load header in spl_load common/spl/spl_legacy.c | 61 --------------------------------------- common/spl/spl_nor.c | 40 +++++-------------------- include/spl_load.h | 1 + test/image/spl_load_nor.c | 2 ++ 4 files changed, 10 insertions(+), 94 deletions(-) diff --git a/common/spl/spl_legacy.c b/common/spl/spl_legacy.c index a561939b4f0..08687ca8f6c 100644 --- a/common/spl/spl_legacy.c +++ b/common/spl/spl_legacy.c @@ -118,64 +118,3 @@ int spl_load_legacy_lzma(struct spl_image_info *spl_image, spl_image->size = lzma_len; return 0; } - -/* - * This function is added explicitly to avoid code size increase, when - * no compression method is enabled. The compiler will optimize the - * following switch/case statement in spl_load_legacy_img() away due to - * Dead Code Elimination. - */ -static inline int spl_image_get_comp(const struct legacy_img_hdr *hdr) -{ - if (IS_ENABLED(CONFIG_SPL_LZMA)) - return image_get_comp(hdr); - - return IH_COMP_NONE; -} - -int spl_load_legacy_img(struct spl_image_info *spl_image, - struct spl_boot_device *bootdev, - struct spl_load_info *load, ulong offset, - struct legacy_img_hdr *hdr) -{ - ulong dataptr; - int ret; - - /* - * If the payload is compressed, the decompressed data should be - * directly write to its load address. - */ - if (spl_image_get_comp(hdr) != IH_COMP_NONE) - spl_image->flags |= SPL_COPY_PAYLOAD_ONLY; - - ret = spl_parse_image_header(spl_image, bootdev, hdr); - if (ret) - return ret; - - /* Read image */ - switch (spl_image_get_comp(hdr)) { - case IH_COMP_NONE: - dataptr = offset; - - /* - * Image header will be skipped only if SPL_COPY_PAYLOAD_ONLY - * is set - */ - if (spl_image->flags & SPL_COPY_PAYLOAD_ONLY) - dataptr += sizeof(*hdr); - - load->read(load, dataptr, spl_image->size, - map_sysmem(spl_image->load_addr, spl_image->size)); - break; - - case IH_COMP_LZMA: - return spl_load_legacy_lzma(spl_image, load, offset); - - default: - debug("Compression method %s is not supported\n", - genimg_get_comp_short_name(image_get_comp(hdr))); - return -EINVAL; - } - - return 0; -} diff --git a/common/spl/spl_nor.c b/common/spl/spl_nor.c index aad230db4d3..70745114efe 100644 --- a/common/spl/spl_nor.c +++ b/common/spl/spl_nor.c @@ -7,8 +7,8 @@ #include #include #include -#include #include +#include static ulong spl_nor_load_read(struct spl_load_info *load, ulong sector, ulong count, void *buf) @@ -28,8 +28,7 @@ unsigned long __weak spl_nor_get_uboot_base(void) static int spl_nor_load_image(struct spl_image_info *spl_image, struct spl_boot_device *bootdev) { - struct legacy_img_hdr *header; - __maybe_unused struct spl_load_info load; + struct spl_load_info load; /* * Loading of the payload to SDRAM is done with skipping of @@ -43,7 +42,8 @@ static int spl_nor_load_image(struct spl_image_info *spl_image, * Load Linux from its location in NOR flash to its defined * location in SDRAM */ - header = (void *)CONFIG_SYS_OS_BASE; + const struct legacy_img_hdr *header = + (const struct legacy_img_hdr *)CONFIG_SYS_OS_BASE; #ifdef CONFIG_SPL_LOAD_FIT if (image_get_magic(header) == FDT_MAGIC) { int ret; @@ -93,34 +93,8 @@ static int spl_nor_load_image(struct spl_image_info *spl_image, * Load real U-Boot from its location in NOR flash to its * defined location in SDRAM */ - header = map_sysmem(spl_nor_get_uboot_base(), sizeof(*header)); -#ifdef CONFIG_SPL_LOAD_FIT - if (image_get_magic(header) == FDT_MAGIC) { - debug("Found FIT format U-Boot\n"); - spl_set_bl_len(&load, 1); - load.read = spl_nor_load_read; - return spl_load_simple_fit(spl_image, &load, - spl_nor_get_uboot_base(), - (void *)header); - } -#endif - if (IS_ENABLED(CONFIG_SPL_LOAD_IMX_CONTAINER) && - valid_container_hdr((void *)header)) { - spl_set_bl_len(&load, 1); - load.read = spl_nor_load_read; - return spl_load_imx_container(spl_image, &load, - spl_nor_get_uboot_base()); - } - - /* Legacy image handling */ - if (IS_ENABLED(CONFIG_SPL_LEGACY_IMAGE_FORMAT)) { - spl_set_bl_len(&load, 1); - load.read = spl_nor_load_read; - return spl_load_legacy_img(spl_image, bootdev, &load, - spl_nor_get_uboot_base(), - header); - } - - return -EINVAL; + spl_set_bl_len(&load, 1); + load.read = spl_nor_load_read; + return spl_load(spl_image, bootdev, &load, 0, spl_nor_get_uboot_base()); } SPL_LOAD_IMAGE_METHOD("NOR", 0, BOOT_DEVICE_NOR, spl_nor_load_image); diff --git a/include/spl_load.h b/include/spl_load.h index 4777f84ac6b..b48f80324bb 100644 --- a/include/spl_load.h +++ b/include/spl_load.h @@ -100,6 +100,7 @@ static inline int _spl_load(struct spl_image_info *spl_image, IS_ENABLED(CONFIG_SPL_SYS_MMCSD_RAW_MODE) + \ (IS_ENABLED(CONFIG_SPL_NAND_SUPPORT) && !IS_ENABLED(CONFIG_SPL_UBI)) + \ IS_ENABLED(CONFIG_SPL_NET) + \ + IS_ENABLED(CONFIG_SPL_NOR_SUPPORT) + \ 0 #if SPL_LOAD_USERS > 1 diff --git a/test/image/spl_load_nor.c b/test/image/spl_load_nor.c index a62bb60d253..de5686343b9 100644 --- a/test/image/spl_load_nor.c +++ b/test/image/spl_load_nor.c @@ -36,4 +36,6 @@ SPL_IMG_TEST(spl_test_nor, LEGACY, 0); SPL_IMG_TEST(spl_test_nor, LEGACY_LZMA, 0); SPL_IMG_TEST(spl_test_nor, IMX8, 0); SPL_IMG_TEST(spl_test_nor, FIT_INTERNAL, 0); +#if !IS_ENABLED(CONFIG_SPL_LOAD_FIT_FULL) SPL_IMG_TEST(spl_test_nor, FIT_EXTERNAL, 0); +#endif From patchwork Wed Nov 8 16:48:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861720 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=k5Xu91yy; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWP34TjNz1yQK for ; Thu, 9 Nov 2023 03:53:11 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 8AB1687761; Wed, 8 Nov 2023 17:49:43 +0100 (CET) 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="k5Xu91yy"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 603F58771C; Wed, 8 Nov 2023 17:49:42 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-yb1-xb29.google.com (mail-yb1-xb29.google.com [IPv6:2607:f8b0:4864:20::b29]) (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 18C6F8774E for ; Wed, 8 Nov 2023 17:49:31 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-yb1-xb29.google.com with SMTP id 3f1490d57ef6-d9fe0a598d8so7080894276.2 for ; Wed, 08 Nov 2023 08:49:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462169; x=1700066969; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=kAwW6mxBnQ4ZlCX5clPm7R/vvbYnTwepI6dZufRl0Ys=; b=k5Xu91yyRL2KZeAC28P43UW+8FT9XiHF/TKz12Xc3DOyLb+fWya3MwC4IgULpJeGC/ PpsCjbXo+iPsYCB5GzY+wWOtq+Di3XrJ6SDPCxuGalvwn8AVamhAOVZtyQCm9n2EQx1B MiE8LAFS4yw3Hob/iIobfrsULLcHVzUWiPYb7wm1HMDLzxDor7AoEm8Qka/G7iBT5R95 hHBmzpyMJ7J8Z08D5w9iYAB5L1BonQr93+O+ajCuR8tN5j576RmYG/J8zKKGmZRmYrmn NyNId+n9Jx6/bZld3WMQ65+kPAPZtB/Dm9x2YFyDasm8kX974AZHCq4r7LEIRX77S/Y7 49YA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462169; x=1700066969; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kAwW6mxBnQ4ZlCX5clPm7R/vvbYnTwepI6dZufRl0Ys=; b=LYKvn617tbIRQuGBvIuOK70pYf0ErMcSIBrdK1KH5JTc0ByNZYqOaNxd45c9TU/1qp 4/Gb3Y4Fh5+4t2nkSUwJn76UWQHfAmsL52N2Zvk8UR3xQ9ufHwivZZbgqj7h1U9M5PKl bXYpi11QamDq3t7/8Wo0GZc+PEV5nGph7X13Tk5aCU2gmFUjoCFuTjELKdRNcAN55750 cExbLwZhKZ8wXdqy6ZuJNLadhI/gu+PjXvUkgxC/4Z9yBYDUomio0YcU2AF+nfNay9zi OfImJVIMtHaeDtbBOhxR1wb+cnyWLbU+wgwJPPLnU5BUfSrWlg3XIqmadrlTeZ3uje8H 7gzA== X-Gm-Message-State: AOJu0YyaD+U9bLNO3W+JOlLQOxJ5hpvmQnxWvlw1Hi1gToVie6xRclbB JwghqVFqCkRfLT/jeObs6txv+840oZM= X-Google-Smtp-Source: AGHT+IEdZGGRh5E+oQkWSXjCreR6GzY/fcCKlzz3F1f36zUDytxmOfcwv1/pCGZLYhgZ/1JMAwTQrQ== X-Received: by 2002:a25:29c4:0:b0:d81:504f:f879 with SMTP id p187-20020a2529c4000000b00d81504ff879mr2015326ybp.28.1699462169122; Wed, 08 Nov 2023 08:49:29 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id px9-20020a056214050900b0065b08bb01afsm1233888qvb.124.2023.11.08.08.49.28 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:28 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson , Mayuresh Chitale Subject: [PATCH v7 22/26] spl: Convert NVMe to spl_load Date: Wed, 8 Nov 2023 11:48:54 -0500 Message-Id: <20231108164858.3497420-23-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean This converts the blk load method (used exclusively by NVMe) to use spl_load. As a consequence, it also adds support for LOAD_FIT_FULL and IMX images. Signed-off-by: Sean Anderson Reviewed-by: Simon Glass --- (no changes since v6) Changes in v6: - Fix invalid return from spl_blk_load_image - Explicitly initialize load_info members Changes in v5: - New common/spl/spl_blk_fs.c | 66 +++++++--------------------------------- include/spl_load.h | 1 + test/image/spl_load_fs.c | 2 ++ 3 files changed, 14 insertions(+), 55 deletions(-) diff --git a/common/spl/spl_blk_fs.c b/common/spl/spl_blk_fs.c index 53b8e1b11b4..ac267ab979b 100644 --- a/common/spl/spl_blk_fs.c +++ b/common/spl/spl_blk_fs.c @@ -7,6 +7,7 @@ #include #include +#include #include #include #include @@ -48,11 +49,11 @@ int spl_blk_load_image(struct spl_image_info *spl_image, enum uclass_id uclass_id, int devnum, int partnum) { const char *filename = CONFIG_SPL_FS_LOAD_PAYLOAD_NAME; - struct legacy_img_hdr *header; struct blk_desc *blk_desc; - loff_t actlen, filesize; + loff_t filesize; struct blk_dev dev; - int ret = -ENODEV; + struct spl_load_info load; + int ret; blk_desc = blk_get_devnum_by_uclass_id(uclass_id, devnum); if (!blk_desc) { @@ -61,8 +62,8 @@ int spl_blk_load_image(struct spl_image_info *spl_image, } blk_show_device(uclass_id, devnum); - header = spl_get_load_buffer(-sizeof(*header), sizeof(*header)); + dev.filename = filename; dev.ifname = blk_get_uclass_name(uclass_id); snprintf(dev.dev_part_str, sizeof(dev.dev_part_str) - 1, "%x:%x", devnum, partnum); @@ -70,63 +71,18 @@ int spl_blk_load_image(struct spl_image_info *spl_image, if (ret) { printf("spl: unable to set blk_dev %s %s. Err - %d\n", dev.ifname, dev.dev_part_str, ret); - goto out; - } - - ret = fs_read(filename, virt_to_phys(header), 0, - sizeof(struct legacy_img_hdr), &actlen); - if (ret) { - printf("spl: unable to read file %s. Err - %d\n", filename, - ret); - goto out; - } - - if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) && - image_get_magic(header) == FDT_MAGIC) { - struct spl_load_info load; - - debug("Found FIT\n"); - load.read = spl_fit_read; - spl_set_bl_len(&load, ARCH_DMA_MINALIGN); - load.priv = &dev; - dev.filename = filename; - - return spl_load_simple_fit(spl_image, &load, 0, header); - } - - ret = spl_parse_image_header(spl_image, bootdev, header); - if (ret) { - printf("spl: unable to parse image header. Err - %d\n", - ret); - goto out; - } - - ret = fs_set_blk_dev(dev.ifname, dev.dev_part_str, FS_TYPE_ANY); - if (ret) { - printf("spl: unable to set blk_dev %s %s. Err - %d\n", - dev.ifname, dev.dev_part_str, ret); - goto out; + return ret; } ret = fs_size(filename, &filesize); if (ret) { printf("spl: unable to get file size: %s. Err - %d\n", filename, ret); - goto out; + return ret; } - ret = fs_set_blk_dev(dev.ifname, dev.dev_part_str, FS_TYPE_ANY); - if (ret) { - printf("spl: unable to set blk_dev %s %s. Err - %d\n", - dev.ifname, dev.dev_part_str, ret); - goto out; - } - - ret = fs_read(filename, (ulong)spl_image->load_addr, 0, filesize, - &actlen); - if (ret) - printf("spl: unable to read file %s. Err - %d\n", - filename, ret); -out: - return ret; + load.read = spl_fit_read; + spl_set_bl_len(&load, ARCH_DMA_MINALIGN); + load.priv = &dev; + return spl_load(spl_image, bootdev, &load, filesize, 0); } diff --git a/include/spl_load.h b/include/spl_load.h index b48f80324bb..2618109cee0 100644 --- a/include/spl_load.h +++ b/include/spl_load.h @@ -95,6 +95,7 @@ static inline int _spl_load(struct spl_image_info *spl_image, * inline if there is one caller, and extern otherwise. */ #define SPL_LOAD_USERS \ + IS_ENABLED(CONFIG_SPL_BLK_FS) + \ IS_ENABLED(CONFIG_SPL_FS_EXT4) + \ IS_ENABLED(CONFIG_SPL_FS_FAT) + \ IS_ENABLED(CONFIG_SPL_SYS_MMCSD_RAW_MODE) + \ diff --git a/test/image/spl_load_fs.c b/test/image/spl_load_fs.c index 67c19da95e7..5f1de5486f4 100644 --- a/test/image/spl_load_fs.c +++ b/test/image/spl_load_fs.c @@ -395,6 +395,8 @@ static int spl_test_blk(struct unit_test_state *uts, const char *test_name, return spl_test_mmc_fs(uts, test_name, type, create_ext2, true); } SPL_IMG_TEST(spl_test_blk, LEGACY, DM_FLAGS); +SPL_IMG_TEST(spl_test_blk, LEGACY_LZMA, DM_FLAGS); +SPL_IMG_TEST(spl_test_blk, IMX8, DM_FLAGS); SPL_IMG_TEST(spl_test_blk, FIT_EXTERNAL, DM_FLAGS); SPL_IMG_TEST(spl_test_blk, FIT_INTERNAL, DM_FLAGS); From patchwork Wed Nov 8 16:48:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861723 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=F8BbdykC; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWPm0Vkrz1yQK for ; Thu, 9 Nov 2023 03:53:48 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 3E0DF87745; Wed, 8 Nov 2023 17:49:48 +0100 (CET) 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="F8BbdykC"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id B94BD87741; Wed, 8 Nov 2023 17:49:44 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.2 Received: from mail-vk1-xa35.google.com (mail-vk1-xa35.google.com [IPv6:2607:f8b0:4864:20::a35]) (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 7C9D88770C for ; Wed, 8 Nov 2023 17:49:31 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-vk1-xa35.google.com with SMTP id 71dfb90a1353d-4a06fb5331bso2624654e0c.0 for ; Wed, 08 Nov 2023 08:49:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462170; x=1700066970; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=M4O93SIEutyf2e5iQZQwfIsnGixZNdti9wmiK2pAFk4=; b=F8BbdykCE3xEFpApqytbtKvy8enQ6ypCTrCsnzFXef26uRv9NBy89Aq+RUHTsAn08j Jbr8uuGi020Muhh2/j88RJUf9xYmlz5DtjpPTvqgMCRoHExlOtgE1I9fvMqyG4OdSYYQ //95Tuazq1Z2nE9aRb/OazwVnu/TGFzyTQHSKrCOOMwdsIxk8XGqFRRMqwZZV8L1oa0C feyzkiY51J1mTqzqPNKqGt9q9LYcY0FR2AdpKAjb54mmsofgLTKl6uQuZakEATY2E8fE 0QN1XULXcMy/LJfxlu1EY9vzItEGZYUD0/Qdmd6Px7r3Zh2IHVj5giDphqtLSbJYvMtb IZyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462170; x=1700066970; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=M4O93SIEutyf2e5iQZQwfIsnGixZNdti9wmiK2pAFk4=; b=chszI39yBaBJQhndfxCQ/IWce/pwFkptbgNT8vaoKeAhXMk0xqLF4Gf2EkrErCIDi1 zZtd4lo1L/3oydfcqcjUT1m4TqFt5p5c2hHF9WUO0F3jh7s271GvNONLkkb3Le8ntYbs JCCgjqbdUUV8rUDCn4y5VwWRV5VtDfS5P0E2lc2iZnJ7a+OrCVQLYAk1Cmpf/uWWXtXm t0S+jhQHo8hW4+90XcrSCQ5BHEhakbCRajKiZDgUU3/Tobo6JGcVNTNW9q8zMU1eePvC mbYXxjVFJ4/3cG7ep+6iAMEzcvAJb9sSFwUKx+Cd3z3tIciDuE2jVOgX05mN4+J5KfC9 AEqA== X-Gm-Message-State: AOJu0Yz47aiIl5e1KiObSU/uXB4fffYxMKypgrOLd110DSLq+mLvyMMb z2DwRhsr0sgfExOLAR0ifUs= X-Google-Smtp-Source: AGHT+IHynx3iRdE7nTPQ80woiP8TUMzjC4yCe9PChASl98yFF2xcHZn94ABbkiZGEIB1iLEPy43SeQ== X-Received: by 2002:a1f:2415:0:b0:49d:c1f5:d491 with SMTP id k21-20020a1f2415000000b0049dc1f5d491mr2337068vkk.15.1699462170253; Wed, 08 Nov 2023 08:49:30 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id c10-20020a05621401ea00b0066d04196c3dsm1251200qvu.49.2023.11.08.08.49.29 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:29 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson Subject: [PATCH v7 23/26] spl: Convert semihosting to spl_load Date: Wed, 8 Nov 2023 11:48:55 -0500 Message-Id: <20231108164858.3497420-24-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean This converts the semihosting load method to use spl_load. As a result, it also adds support for LOAD_FIT_FULL and IMX images. Signed-off-by: Sean Anderson --- (no changes since v6) Changes in v6: - Explicitly initialize load_info members Changes in v5: - Rework to load header in spl_load Changes in v2: - New common/spl/spl_semihosting.c | 52 +++++------------------------------- include/spl_load.h | 1 + 2 files changed, 7 insertions(+), 46 deletions(-) diff --git a/common/spl/spl_semihosting.c b/common/spl/spl_semihosting.c index 9b0610b8fc8..941fa911040 100644 --- a/common/spl/spl_semihosting.c +++ b/common/spl/spl_semihosting.c @@ -8,18 +8,7 @@ #include #include #include - -static int smh_read_full(long fd, void *memp, size_t len) -{ - long read; - - read = smh_read(fd, memp, len); - if (read < 0) - return read; - if (read != len) - return -EIO; - return 0; -} +#include static ulong smh_fit_read(struct spl_load_info *load, ulong file_offset, ulong size, void *buf) @@ -40,8 +29,7 @@ static int spl_smh_load_image(struct spl_image_info *spl_image, const char *filename = CONFIG_SPL_FS_LOAD_PAYLOAD_NAME; int ret; long fd, len; - struct legacy_img_hdr *header = - spl_get_load_buffer(-sizeof(*header), sizeof(*header)); + struct spl_load_info load; fd = smh_open(filename, MODE_READ | MODE_BINARY); if (fd < 0) { @@ -56,38 +44,10 @@ static int spl_smh_load_image(struct spl_image_info *spl_image, } len = ret; - ret = smh_read_full(fd, header, sizeof(struct legacy_img_hdr)); - if (ret) { - log_debug("could not read image header: %d\n", ret); - goto out; - } - - if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) && - image_get_magic(header) == FDT_MAGIC) { - struct spl_load_info load; - - debug("Found FIT\n"); - load.read = smh_fit_read; - spl_set_bl_len(&load, 1); - load.priv = &fd; - - ret = spl_load_simple_fit(spl_image, &load, 0, header); - goto out; - } - - ret = spl_parse_image_header(spl_image, bootdev, header); - if (ret) { - log_debug("failed to parse image header: %d\n", ret); - goto out; - } - - ret = smh_seek(fd, 0); - if (ret) { - log_debug("could not seek to start of image: %d\n", ret); - goto out; - } - - ret = smh_read_full(fd, (void *)spl_image->load_addr, len); + load.read = smh_fit_read; + spl_set_bl_len(&load, 1); + load.priv = &fd; + ret = spl_load(spl_image, bootdev, &load, len, 0); if (ret) log_debug("could not read %s: %d\n", filename, ret); out: diff --git a/include/spl_load.h b/include/spl_load.h index 2618109cee0..2a20e866cd8 100644 --- a/include/spl_load.h +++ b/include/spl_load.h @@ -102,6 +102,7 @@ static inline int _spl_load(struct spl_image_info *spl_image, (IS_ENABLED(CONFIG_SPL_NAND_SUPPORT) && !IS_ENABLED(CONFIG_SPL_UBI)) + \ IS_ENABLED(CONFIG_SPL_NET) + \ IS_ENABLED(CONFIG_SPL_NOR_SUPPORT) + \ + IS_ENABLED(CONFIG_SPL_SEMIHOSTING) + \ 0 #if SPL_LOAD_USERS > 1 From patchwork Wed Nov 8 16:48:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861726 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=d8ZZIdnh; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWQW5KJYz1yQK for ; Thu, 9 Nov 2023 03:54:27 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id F1003871C0; Wed, 8 Nov 2023 17:49:52 +0100 (CET) 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="d8ZZIdnh"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 9D5B3876F4; Wed, 8 Nov 2023 17:49:47 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-qv1-xf2b.google.com (mail-qv1-xf2b.google.com [IPv6:2607:f8b0:4864:20::f2b]) (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 A2A7287756 for ; Wed, 8 Nov 2023 17:49:32 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-qv1-xf2b.google.com with SMTP id 6a1803df08f44-66d0ceba445so40468706d6.0 for ; Wed, 08 Nov 2023 08:49:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462171; x=1700066971; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=uew6qvj5K56A/ylRo/rbr0WPj/Np6zUULbJNkW2e9S8=; b=d8ZZIdnhpPUaVbHPgUwwNG8L+QMI2JVksheWhLvG4DgRbQOWfghGByq66weMeTp314 /BzcM2zNW1d2sROVyLyacyhTwQ0mQAB1NbrPfQHf6kFvp/3wBg6tTbr8VRs7WSkmoxKp nhUZHPvm52476ejBj6oFDeB3cZ0yllG6pEXLfczLr3K3R0cG+OlixyqUztu0ufnWrpNH I9sikSO4PxAdhWrDVkrXWuxgfBStJVgN/0lg0q30pemYAEFF079c3n/awQelqjNKIeT/ 5Phy17eu9fak1KFy+ZJJ0iRcGCdR8JVebUyFsCygQlTDqu8JjIaBE4pnOudIq/FVZSyi PKNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462171; x=1700066971; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=uew6qvj5K56A/ylRo/rbr0WPj/Np6zUULbJNkW2e9S8=; b=eXC/u7OB96QnbgN36gb/av5G+bwYWgfZ0zmEuHC5M9wrm0Xkhf83pN+GG5+Qgi2rn3 rD0KZu5bCxgWxv/nIKF4P1HWJkjeQZ3jmQ4DVz1qce39heNlZ7tLdd+K9XAx+8/qeJoy raklp0HdFw2IjoEpvB7sHr4WQNIa8Wdfga+TMGAkJO3SZh7+ZW27rfHem+31GZnV49T+ xDOOUReD2TNk27AYpKLNwy0P8ANCGljx+TA9tOFRqPwVt9S36I89XfyZM/iX7W7VWH4G TgK3yuTIu+NzURkjTtw5+sDHdyOJ77kXS084xbZGYmYaOAl48kjX2PB/sc6R9HA7zoB+ w9bw== X-Gm-Message-State: AOJu0Yy4PeyrN8Kuu+4qhs7TkFkf8G85/1cO4vO456UfElLJjk2M1iyo L0vL5nZDtN+RTYkgJsSeXXyW+Ww8D0Y= X-Google-Smtp-Source: AGHT+IE5bopBmAp5vJDfUksG9GVyM6lgn/E62FMNjPOm6uC4ieSOnyrMlxcck0oopsEWXTkA3My3cw== X-Received: by 2002:ad4:5be2:0:b0:66d:a22a:464f with SMTP id k2-20020ad45be2000000b0066da22a464fmr2327612qvc.16.1699462171389; Wed, 08 Nov 2023 08:49:31 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id x8-20020ae9f808000000b0077402573fb4sm1212951qkh.124.2023.11.08.08.49.30 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:31 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson , Jagan Teki , Vignesh R Subject: [PATCH v7 24/26] spl: Convert spi to spl_load Date: Wed, 8 Nov 2023 11:48:56 -0500 Message-Id: <20231108164858.3497420-25-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean This converts the spi load method to use spl_load. The address used for LOAD_FIT_FULL may be different, but there are no in-tree users of that config. Since payload_offs is only used without OS_BOOT, we defer its initialization. Signed-off-by: Sean Anderson Reviewed-by: Simon Glass --- (no changes since v6) Changes in v6: - Fix soft reset after loading from SPI Changes in v5: - Rework to load header in spl_load common/spl/spl_spi.c | 80 +++++++-------------------------------- include/spl_load.h | 1 + test/image/spl_load_spi.c | 1 + 3 files changed, 15 insertions(+), 67 deletions(-) diff --git a/common/spl/spl_spi.c b/common/spl/spl_spi.c index 3e08ac7c1a2..f49e534b749 100644 --- a/common/spl/spl_spi.c +++ b/common/spl/spl_spi.c @@ -12,11 +12,11 @@ #include #include #include -#include #include #include #include #include +#include #include #include #include @@ -95,9 +95,9 @@ static int spl_spi_load_image(struct spl_image_info *spl_image, int err = 0; unsigned int payload_offs; struct spi_flash *flash; - struct legacy_img_hdr *header; unsigned int sf_bus = spl_spi_boot_bus(); unsigned int sf_cs = spl_spi_boot_cs(); + struct spl_load_info load; /* * Load U-Boot image from SPI flash into RAM @@ -112,77 +112,23 @@ static int spl_spi_load_image(struct spl_image_info *spl_image, return -ENODEV; } +#if CONFIG_IS_ENABLED(OS_BOOT) + if (!spl_start_uboot() && !spi_load_image_os(spl_image, bootdev, flash, header)) + return 0; +#endif + payload_offs = spl_spi_get_uboot_offs(flash); - - header = spl_get_load_buffer(-sizeof(*header), sizeof(*header)); - if (CONFIG_IS_ENABLED(OF_REAL)) { payload_offs = ofnode_conf_read_int("u-boot,spl-payload-offset", payload_offs); } -#if CONFIG_IS_ENABLED(OS_BOOT) - if (spl_start_uboot() || spi_load_image_os(spl_image, bootdev, flash, header)) -#endif - { - /* Load u-boot, mkimage header is 64 bytes. */ - err = spi_flash_read(flash, payload_offs, sizeof(*header), - (void *)header); - if (err) { - debug("%s: Failed to read from SPI flash (err=%d)\n", - __func__, err); - return err; - } - - if (IS_ENABLED(CONFIG_SPL_LOAD_FIT_FULL) && - image_get_magic(header) == FDT_MAGIC) { - u32 size = roundup(fdt_totalsize(header), 4); - - err = spi_flash_read(flash, payload_offs, - size, - map_sysmem(CONFIG_SYS_LOAD_ADDR, - size)); - if (err) - return err; - err = spl_parse_image_header(spl_image, bootdev, - phys_to_virt(CONFIG_SYS_LOAD_ADDR)); - } else if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) && - image_get_magic(header) == FDT_MAGIC) { - struct spl_load_info load; - - debug("Found FIT\n"); - load.priv = flash; - spl_set_bl_len(&load, 1); - load.read = spl_spi_fit_read; - err = spl_load_simple_fit(spl_image, &load, - payload_offs, - header); - } else if (IS_ENABLED(CONFIG_SPL_LOAD_IMX_CONTAINER) && - valid_container_hdr((void *)header)) { - struct spl_load_info load; - - load.priv = flash; - spl_set_bl_len(&load, 1); - load.read = spl_spi_fit_read; - - err = spl_load_imx_container(spl_image, &load, - payload_offs); - } else { - err = spl_parse_image_header(spl_image, bootdev, header); - if (err) - return err; - err = spi_flash_read(flash, payload_offs + spl_image->offset, - spl_image->size, - map_sysmem(spl_image->load_addr, - spl_image->size)); - } - if (IS_ENABLED(CONFIG_SPI_FLASH_SOFT_RESET)) { - err = spi_nor_remove(flash); - if (err) - return err; - } - } - + load.priv = flash; + spl_set_bl_len(&load, 1); + load.read = spl_spi_fit_read; + err = spl_load(spl_image, bootdev, &load, 0, payload_offs); + if (IS_ENABLED(CONFIG_SPI_FLASH_SOFT_RESET)) + err = spi_nor_remove(flash); return err; } /* Use priorty 1 so that boards can override this */ diff --git a/include/spl_load.h b/include/spl_load.h index 2a20e866cd8..1c2b296c0a2 100644 --- a/include/spl_load.h +++ b/include/spl_load.h @@ -103,6 +103,7 @@ static inline int _spl_load(struct spl_image_info *spl_image, IS_ENABLED(CONFIG_SPL_NET) + \ IS_ENABLED(CONFIG_SPL_NOR_SUPPORT) + \ IS_ENABLED(CONFIG_SPL_SEMIHOSTING) + \ + IS_ENABLED(CONFIG_SPL_SPI_LOAD) + \ 0 #if SPL_LOAD_USERS > 1 diff --git a/test/image/spl_load_spi.c b/test/image/spl_load_spi.c index 8f9b6e0139b..54a95465e23 100644 --- a/test/image/spl_load_spi.c +++ b/test/image/spl_load_spi.c @@ -34,6 +34,7 @@ static int spl_test_spi(struct unit_test_state *uts, const char *test_name, spl_test_spi_write_image); } SPL_IMG_TEST(spl_test_spi, LEGACY, DM_FLAGS); +SPL_IMG_TEST(spl_test_spi, LEGACY_LZMA, DM_FLAGS); SPL_IMG_TEST(spl_test_spi, IMX8, DM_FLAGS); SPL_IMG_TEST(spl_test_spi, FIT_INTERNAL, DM_FLAGS); #if !IS_ENABLED(CONFIG_SPL_LOAD_FIT_FULL) From patchwork Wed Nov 8 16:48:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861724 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=MyeghV46; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWQ36MSTz1yQK for ; Thu, 9 Nov 2023 03:54:03 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id B1F6D8774C; Wed, 8 Nov 2023 17:49:48 +0100 (CET) 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="MyeghV46"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id C143687779; Wed, 8 Nov 2023 17:49:46 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-qk1-x734.google.com (mail-qk1-x734.google.com [IPv6:2607:f8b0:4864:20::734]) (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 C56228775A for ; Wed, 8 Nov 2023 17:49:33 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-qk1-x734.google.com with SMTP id af79cd13be357-77ba6d5123fso85693185a.0 for ; Wed, 08 Nov 2023 08:49:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462172; x=1700066972; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=DDJpeARA2DJ3ql+iLRwDlROKXAe8WFHY4BlMsBuTzhc=; b=MyeghV46/AX1VRqnaqHP5DEd8kcerpJbjYg5xtVkoQ63LOiq5WGVZ//OjTLL47weaO Fpi6K7pQ0pQQ8piOdnw63ao1OJOJMcVm7AhZ6JBN0vvTr0E4vShv5OwDQ0kws3cjimRp /TLm0hzeC8lj5RFJcPuciJtSpXgx/hcv716DnjsTR+JL+sTZpdGaPNwW45aQvbtHl6yK 4hNEQv8VOY1UNxYPpPHdfxcZE8ss4T+N9JON1wjyiw/oEeYETJ+MP1kcX4FOX3X5Uf/n 40RuqWmaaHY9aY7K/fmbaZGFvXl9pOljjpg0QqB8bM5D6mD+ZZBDD2Kt8SnGTP1FP16r ousw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462172; x=1700066972; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DDJpeARA2DJ3ql+iLRwDlROKXAe8WFHY4BlMsBuTzhc=; b=oEAGb8ww8Jsm9bFFzZAB7kfduW4m0xu7CAcFBHPWPFOviuPchTROkDrNHaA70zrz4i fHkDTgEdVkzPsolDeHLDZi1AAdq7hU9HAVkKUDmEOyPM8yrlbEWkiR8LELPbv6kpMBmx VCLl44pm7GSYqdptc2Su16MkjVz/roOV2i2l+xxa3SJr+CMYJzHsWd+dVRYbY7rV7pAf lhIzR+sbqZLGsj2jsweyjM9QTIYeUuRw5R8fhKs3Q0CHpaa8FlmGcKTf5Ri/dOxev7hy c4C089+RTyJwtP8QeCpfo0dHax7c/9BmTpmBfA1vEVfqhXW3r7IiG9T+aFQ5oL043Nr3 3ErQ== X-Gm-Message-State: AOJu0YyHl1tRZqIs4A7pavRN09zFBuSX1orvhGHzejpBCdQF5one8Rrf omGhCi98grIVHf1lsQMnZao= X-Google-Smtp-Source: AGHT+IHU3v2BOxpLr7VO4RCUekAbNOzQoBCw+n91iX2ru6jfqK1Ed3UsuOGAXjm/c+Ss/+I6MrkJOA== X-Received: by 2002:a05:6214:1249:b0:66f:b0c0:93bc with SMTP id r9-20020a056214124900b0066fb0c093bcmr3595464qvv.22.1699462172591; Wed, 08 Nov 2023 08:49:32 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id w16-20020a0cef90000000b0066d15e2b73fsm1228043qvr.145.2023.11.08.08.49.31 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:32 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson , Jagan Teki , Nathan Barrett-Morrison , Vignesh R Subject: [PATCH v7 25/26] spl: spi: Consolidate spi_load_image_os into spl_spi_load_image Date: Wed, 8 Nov 2023 11:48:57 -0500 Message-Id: <20231108164858.3497420-26-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean spi_load_image_os performs almost the same steps as the non-falcon-boot path of spl_spi_load_image. The load address is different, and it also loads a device tree, but that's it. Refactor the boot process so that they can both use the same load function. Signed-off-by: Sean Anderson Reviewed-by: Simon Glass --- (no changes since v5) Changes in v5: - Rework to load header in spl_load Changes in v2: - New common/spl/spl_spi.c | 54 ++++++++++++-------------------------------- 1 file changed, 14 insertions(+), 40 deletions(-) diff --git a/common/spl/spl_spi.c b/common/spl/spl_spi.c index f49e534b749..89de73c726c 100644 --- a/common/spl/spl_spi.c +++ b/common/spl/spl_spi.c @@ -21,41 +21,6 @@ #include #include -#if CONFIG_IS_ENABLED(OS_BOOT) -/* - * Load the kernel, check for a valid header we can parse, and if found load - * the kernel and then device tree. - */ -static int spi_load_image_os(struct spl_image_info *spl_image, - struct spl_boot_device *bootdev, - struct spi_flash *flash, - struct legacy_img_hdr *header) -{ - int err; - - /* Read for a header, parse or error out. */ - spi_flash_read(flash, CFG_SYS_SPI_KERNEL_OFFS, sizeof(*header), - (void *)header); - - if (image_get_magic(header) != IH_MAGIC) - return -1; - - err = spl_parse_image_header(spl_image, bootdev, header); - if (err) - return err; - - spi_flash_read(flash, CFG_SYS_SPI_KERNEL_OFFS, - spl_image->size, (void *)spl_image->load_addr); - - /* Read device tree. */ - spi_flash_read(flash, CFG_SYS_SPI_ARGS_OFFS, - CFG_SYS_SPI_ARGS_SIZE, - (void *)CONFIG_SPL_PAYLOAD_ARGS_ADDR); - - return 0; -} -#endif - static ulong spl_spi_fit_read(struct spl_load_info *load, ulong sector, ulong count, void *buf) { @@ -112,9 +77,21 @@ static int spl_spi_load_image(struct spl_image_info *spl_image, return -ENODEV; } + load.priv = flash; + spl_set_bl_len(&load, 1); + load.read = spl_spi_fit_read; + #if CONFIG_IS_ENABLED(OS_BOOT) - if (!spl_start_uboot() && !spi_load_image_os(spl_image, bootdev, flash, header)) - return 0; + if (spl_start_uboot()) { + int err = spl_load(spl_image, bootdev, &load, 0, + CFG_SYS_SPI_KERNEL_OFFS); + + if (!err) + /* Read device tree. */ + return spi_flash_read(flash, CFG_SYS_SPI_ARGS_OFFS, + CFG_SYS_SPI_ARGS_SIZE, + (void *)CONFIG_SPL_PAYLOAD_ARGS_ADDR); + } #endif payload_offs = spl_spi_get_uboot_offs(flash); @@ -123,9 +100,6 @@ static int spl_spi_load_image(struct spl_image_info *spl_image, payload_offs); } - load.priv = flash; - spl_set_bl_len(&load, 1); - load.read = spl_spi_fit_read; err = spl_load(spl_image, bootdev, &load, 0, payload_offs); if (IS_ENABLED(CONFIG_SPI_FLASH_SOFT_RESET)) err = spi_nor_remove(flash); From patchwork Wed Nov 8 16:48:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1861725 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=BJjEtu5g; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SQWQG3ZnJz1yQK for ; Thu, 9 Nov 2023 03:54:14 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 230AD8777C; Wed, 8 Nov 2023 17:49:49 +0100 (CET) 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="BJjEtu5g"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 4FD7E876F4; Wed, 8 Nov 2023 17:49:47 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-qk1-x736.google.com (mail-qk1-x736.google.com [IPv6:2607:f8b0:4864:20::736]) (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 E141687765 for ; Wed, 8 Nov 2023 17:49:34 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-qk1-x736.google.com with SMTP id af79cd13be357-778940531dbso456285485a.0 for ; Wed, 08 Nov 2023 08:49:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1699462173; x=1700066973; darn=lists.denx.de; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SR9gQ2NZLuht645C+/bQTxCHkjB4V+qVePs4jBrx+vg=; b=BJjEtu5g1rmUvMVV9CwC9+hPzmvoLKN/xyIKwtrNvAOEnoUmWQcGf29nh71NtDs7lv U8TnAsuVsSOgAC+lmdGoWoVlq8f3v+25ykEbf/xKSxeMny2f0MIrpI3q9ATkUyTX2jRX 8s7Dm/1SqJ0k2DyE3gwroPboIVWVDHh3t/SI6/snXUMTX/gzVqyQ0IlApnB4UaTB5Zb7 0gbAwuNS+0mXWObwhRwnX7HFx+7cgOYu1u5YSVFo/GkqQ77T//TpL8Amkfjla6BhKAgv Pk8Tt7twKFPW6157eKHROlJawiQy4UyPaNpmCBLC0RzBUXuQ/8+E1VI34JULtwr2GIT5 0hag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699462173; x=1700066973; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SR9gQ2NZLuht645C+/bQTxCHkjB4V+qVePs4jBrx+vg=; b=DCAxrH6W4byoB0UheaxP3tuTkZT/62LfQixPT5ajnuDq0Ks61XGUzy3qiwbHHy/EC/ URs3eTN+Oidh6poqyXfHqvVz2EMDtJ3+/jmAZ/fa+OB2w73Kbt1uV1uKIFAC5gDqRIeI vocH0TjpPWFxWPCdmUDQBCdXrIVxlerKkDQB8EyCYnrjhWLUzZVNDEwTJq9iARDDdq1K BLJ1Vuw+rBTOEoD6JNR8PWGE6EtjVzfNWR/riB4ARRVY4DcwCihNgPxG1C36G13+ooQD QQDVeIbfwY6KnuROumdm0Nr/jETiSBCsKUp7gBVw+cCD4vtYWThCShGWknZJ1ne9V6sT XVKw== X-Gm-Message-State: AOJu0Yx41QEMiUy+QoNmg//LbswWewlOlMGxKsS9fmbm/iQ8AUwuKxb2 X5pCXOVaULRK4VweSktz/Ug= X-Google-Smtp-Source: AGHT+IHtuVV2tqA8O1Pa23dGWPYSu3vaP+xMg6qmqWRWLaxp3fjHEG2JxArR5UlUXUSbTrt/O5NPAg== X-Received: by 2002:a05:620a:430e:b0:775:da1a:67da with SMTP id u14-20020a05620a430e00b00775da1a67damr2270999qko.53.1699462173685; Wed, 08 Nov 2023 08:49:33 -0800 (PST) Received: from localhost (pool-108-48-157-169.washdc.fios.verizon.net. [108.48.157.169]) by smtp.gmail.com with UTF8SMTPSA id bl1-20020a05620a1a8100b007776c520488sm1226164qkb.9.2023.11.08.08.49.33 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Nov 2023 08:49:33 -0800 (PST) From: Sean Anderson To: Tom Rini , u-boot@lists.denx.de Cc: =?utf-8?q?Marek_Beh=C3=BAn?= , Xavier Drudis Ferran , Marek Vasut , Heinrich Schuchardt , Simon Glass , Stefan Roese , Sean Anderson Subject: [PATCH v7 26/26] spl: fat: Add option to disable DMA alignment Date: Wed, 8 Nov 2023 11:48:58 -0500 Message-Id: <20231108164858.3497420-27-seanga2@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20231108164858.3497420-1-seanga2@gmail.com> References: <20231108164858.3497420-1-seanga2@gmail.com> MIME-Version: 1.0 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.8 at phobos.denx.de X-Virus-Status: Clean If we don't DMA-align buffers we pass to FAT, it will align them itself. This behaviour likely should be deprecated in favor of CONFIG_BOUNCE_BUFFER, but that's a task for another series. For the meantime, don't bother aligning the buffer unless we had been doing so in the past. Signed-off-by: Sean Anderson Reviewed-by: Simon Glass --- (no changes since v6) Changes in v6: - New common/spl/Kconfig | 18 ++++++++++++++++-- common/spl/spl_blk_fs.c | 5 ++++- common/spl/spl_fat.c | 5 ++++- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/common/spl/Kconfig b/common/spl/Kconfig index b93526904eb..fc284a5bffc 100644 --- a/common/spl/Kconfig +++ b/common/spl/Kconfig @@ -694,13 +694,28 @@ config SPL_FS_SQUASHFS config SPL_FS_FAT bool "Support FAT filesystems" select FS_FAT - select SPL_LOAD_BLOCK help Enable support for FAT and VFAT filesystems with SPL. This permits U-Boot (or Linux in Falcon mode) to be loaded from a FAT filesystem from within SPL. Support for the underlying block device (e.g. MMC or USB) must be enabled separately. +config SPL_FS_FAT_DMA_ALIGN + bool "Use DMA-aligned buffers with FAT" + depends on SPL_FS_FAT + select SPL_LOAD_BLOCK + default y if SPL_LOAD_FIT + help + The FAT filesystem driver tries to ensure that the reads it issues to + the block subsystem use DMA-aligned buffers. If the supplied buffer is + not DMA-aligned, the FAT driver will use a bounce-buffer and read + block-by-block. This is separate from the bounce-buffer used by the + block subsystem (CONFIG_BOUNCE_BUFFER). + + Enable this config to align buffers passed to the FAT filesystem + driver. This will speed up reads, but will increase the size of U-Boot + by around 60 bytes. + config SPL_FS_LOAD_PAYLOAD_NAME string "File to load for U-Boot from the filesystem" depends on SPL_FS_EXT4 || SPL_FS_FAT || SPL_FS_SQUASHFS || SPL_SEMIHOSTING @@ -1282,7 +1297,6 @@ config SPL_NVME depends on BLK select FS_LOADER select SPL_BLK_FS - select SPL_LOAD_BLOCK help This option enables support for NVM Express devices. It supports basic functions of NVMe (read/write). diff --git a/common/spl/spl_blk_fs.c b/common/spl/spl_blk_fs.c index ac267ab979b..04eac6f306b 100644 --- a/common/spl/spl_blk_fs.c +++ b/common/spl/spl_blk_fs.c @@ -82,7 +82,10 @@ int spl_blk_load_image(struct spl_image_info *spl_image, } load.read = spl_fit_read; - spl_set_bl_len(&load, ARCH_DMA_MINALIGN); + if (IS_ENABLED(CONFIG_SPL_FS_FAT_DMA_ALIGN)) + spl_set_bl_len(&load, ARCH_DMA_MINALIGN); + else + spl_set_bl_len(&load, 1); load.priv = &dev; return spl_load(spl_image, bootdev, &load, filesize, 0); } diff --git a/common/spl/spl_fat.c b/common/spl/spl_fat.c index 569f2b32928..a52f9e178e6 100644 --- a/common/spl/spl_fat.c +++ b/common/spl/spl_fat.c @@ -86,7 +86,10 @@ int spl_load_image_fat(struct spl_image_info *spl_image, } load.read = spl_fit_read; - spl_set_bl_len(&load, ARCH_DMA_MINALIGN); + if (IS_ENABLED(CONFIG_SPL_FS_FAT_DMA_ALIGN)) + spl_set_bl_len(&load, ARCH_DMA_MINALIGN); + else + spl_set_bl_len(&load, 1); load.priv = (void *)filename; err = spl_load(spl_image, bootdev, &load, size, 0);