From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4C1DFC54EE9 for ; Sun, 25 Sep 2022 15:07:26 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id EE38F84D7B; Sun, 25 Sep 2022 17:04:27 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.b="ZzgSZT70"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id B9FB484AA2; Sun, 25 Sep 2022 17:03:46 +0200 (CEST) Received: from mail-il1-x12e.google.com (mail-il1-x12e.google.com [IPv6:2607:f8b0:4864:20::12e]) (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 E340784BFC for ; Sun, 25 Sep 2022 17:03:43 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=sjg@chromium.org Received: by mail-il1-x12e.google.com with SMTP id v1so2430319ilq.1 for ; Sun, 25 Sep 2022 08:03:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date; bh=uPnyvgjcKKnI8cwjJyQ8VvAbumD8YNf3UQPfUhDLSUU=; b=ZzgSZT70TxTs2blA7Wbvg3cInTL6gwKH3Yvk91Mn2iAep76BAAjPJ8tqQjIyGBHFEQ 9YAXvL8w5/hIgD+kMj1R7NoECY/wARUbej0DDagKeByCSN232Zu4xPbi06PjR6XfiBsI L3psdsdJZug7FGAi+CTujiwpa9yjBbdN58yVU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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; bh=uPnyvgjcKKnI8cwjJyQ8VvAbumD8YNf3UQPfUhDLSUU=; b=mvR+boLIipnessStNn3cei87OyI/LFzj/uked0POYHsCeOvGZvg3PMish4GtS9bdp9 Oq1Yvqo+U4uH34WKm2Dkre+quLAZTt6Q2kaxrz/x9szbleJKKDKbunEBG57GpkyRCQyk 56vrewH9pCS1XhRhL4E8FvoV8cm9g2IfgrKX3Cq9lVvfBsUzL4YrCN3j+W7MED1ZyCzK VqGzfy+O5jcQUpFhUmFJSO7CchIPo7YuESZX2B5g92mMEAa9j1CPI4Bfa+/RfqpPPLSi K99zBaK71E/ubhp3UmP8ftJ0hdTE2B9S80g3wvrIpaTMrrFpHIw2Y4tSdi1zQwXR0aA2 LaRw== X-Gm-Message-State: ACrzQf21WuUzWcHQ7pmAoNOIHRFVgulopJn2kD0rz/arTe4tahJFG6cV htWUIgvtpGnugTPhkXP5cUkZjSAM2DFfKA== X-Google-Smtp-Source: AMsMyM5MYifd8dUtcmLjJ9F/cjdsMBmrVtcYPd1q3liBJ28hsXzLvIn3iEwQ4spN1z9SpxHbQwSXIg== X-Received: by 2002:a05:6e02:1d18:b0:2f6:65c9:91 with SMTP id i24-20020a056e021d1800b002f665c90091mr8392179ila.164.1664118223157; Sun, 25 Sep 2022 08:03:43 -0700 (PDT) Received: from sjg1.roam.corp.google.com (c-67-190-102-125.hsd1.co.comcast.net. [67.190.102.125]) by smtp.gmail.com with ESMTPSA id u19-20020a926013000000b002f19d9838c6sm5360578ilb.25.2022.09.25.08.03.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Sep 2022 08:03:42 -0700 (PDT) From: Simon Glass To: U-Boot Mailing List Cc: Tom Rini , Simon Glass , Alper Nebi Yasak , =?UTF-8?q?Marek=20Beh=C3=BAn?= , =?UTF-8?q?Pali=20Roh=C3=A1r?= , Stefan Roese Subject: [PATCH 31/45] spl: Allow multiple loaders of the same type Date: Sun, 25 Sep 2022 09:02:34 -0600 Message-Id: <20220925150248.2524421-32-sjg@chromium.org> X-Mailer: git-send-email 2.37.3.998.g577e59143f-goog In-Reply-To: <20220925150248.2524421-1-sjg@chromium.org> References: <20220925150248.2524421-1-sjg@chromium.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean At present we only support a single loader of each time. Extra ones are ignored. This means that only one BOOT_DEVICE_BOARD can be used in the SPL image. This is inconvenient since we sometimes want to provide several board-specific drivers, albeit at different priorties. Add support for this. This should have no functional change for existing boards. Signed-off-by: Simon Glass --- common/spl/spl.c | 55 +++++++++++++++++++++--------------------------- 1 file changed, 24 insertions(+), 31 deletions(-) diff --git a/common/spl/spl.c b/common/spl/spl.c index cc982d6a9d1..545cc0c65d8 100644 --- a/common/spl/spl.c +++ b/common/spl/spl.c @@ -609,23 +609,6 @@ __weak void board_boot_order(u32 *spl_boot_list) spl_boot_list[0] = spl_boot_device(); } -static struct spl_image_loader *spl_ll_find_loader(uint boot_device) -{ - struct spl_image_loader *drv = - ll_entry_start(struct spl_image_loader, spl_image_loader); - const int n_ents = - ll_entry_count(struct spl_image_loader, spl_image_loader); - struct spl_image_loader *entry; - - for (entry = drv; entry != drv + n_ents; entry++) { - if (boot_device == entry->boot_device) - return entry; - } - - /* Not found */ - return NULL; -} - __weak int spl_check_board_image(struct spl_image_info *spl_image, const struct spl_boot_device *bootdev) { @@ -684,6 +667,10 @@ static inline bool spl_show_output(void) static int boot_from_devices(struct spl_image_info *spl_image, u32 spl_boot_list[], int count) { + struct spl_image_loader *drv = + ll_entry_start(struct spl_image_loader, spl_image_loader); + const int n_ents = + ll_entry_count(struct spl_image_loader, spl_image_loader); int ret = -ENODEV; int i; @@ -693,20 +680,26 @@ static int boot_from_devices(struct spl_image_info *spl_image, if (CONFIG_IS_ENABLED(SHOW_ERRORS)) ret = -ENXIO; - loader = spl_ll_find_loader(bootdev); - if (spl_show_output()) { - if (loader) - printf("Trying to boot from %s\n", - spl_loader_name(loader)); - else if (CONFIG_IS_ENABLED(SHOW_ERRORS)) - printf(SPL_TPL_PROMPT - "Unsupported Boot Device %d\n", bootdev); - else - puts(SPL_TPL_PROMPT "Unsupported Boot Device!\n"); - } - if (loader && !spl_load_image(spl_image, loader)) { - spl_image->boot_device = bootdev; - return 0; + for (loader = drv; loader != drv + n_ents; loader++) { + if (bootdev != loader->boot_device) + continue; + if (spl_show_output()) { + if (loader) + printf("Trying to boot from %s\n", + spl_loader_name(loader)); + else if (CONFIG_IS_ENABLED(SHOW_ERRORS)) { + printf(SPL_TPL_PROMPT + "Unsupported Boot Device %d\n", + bootdev); + } else { + puts(SPL_TPL_PROMPT + "Unsupported Boot Device!\n"); + } + } + if (loader && !spl_load_image(spl_image, loader)) { + spl_image->boot_device = bootdev; + return 0; + } } } -- 2.37.3.998.g577e59143f-goog