All of lore.kernel.org
 help / color / mirror / Atom feed
From: Simon Glass <sjg@chromium.org>
To: u-boot@lists.denx.de
Subject: [RESEND PATCH v3 7/7] x86: Use the existing stack when chain-loading
Date: Wed,  8 Apr 2020 12:57:55 -0600	[thread overview]
Message-ID: <20200408185755.116336-7-sjg@chromium.org> (raw)
In-Reply-To: <20200408185755.116336-1-sjg@chromium.org>

With chromebook_coral we normally run TPL->SPL->U-Boot. This is the
'bare metal' case.

When running from coreboot we put u-boot.bin in the RW_LEGACY portion
of the image, e.g. with:

   cbfstool image-coral.serial.bin add-flat-binary -r RW_LEGACY \
	-f /tmp/b/chromebook_coral/u-boot.bin -n altfw/u-boot \
	-c lzma -l 0x1110000 -e 0x1110000

In this case U-Boot is run from coreboot (actually Depthcharge, its
payload) so we cannot access CAR. Use the existing stack instead.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v3: None
Changes in v2: None

 arch/x86/cpu/start_from_spl.S | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/arch/x86/cpu/start_from_spl.S b/arch/x86/cpu/start_from_spl.S
index 22cab2dd6ce..75c328fd7a8 100644
--- a/arch/x86/cpu/start_from_spl.S
+++ b/arch/x86/cpu/start_from_spl.S
@@ -14,18 +14,30 @@
 .globl _start
 .type _start, @function
 _start:
-	/* Set up memory using the existing stack */
+	/*
+	 * If running from coreboot, CAR is no-longer available. Use the
+	 * existing stack, which is large enough.
+	 */
+	call	x86_detect_coreboot
+	cmp	$0, %eax
+	jne	use_existing_stack
+
 	movl	$(CONFIG_SYS_CAR_ADDR + CONFIG_SYS_CAR_SIZE - 4), %eax
 #ifdef CONFIG_DCACHE_RAM_MRC_VAR_SIZE
 	subl	$CONFIG_DCACHE_RAM_MRC_VAR_SIZE, %eax
 #endif
+	jmp	2f
 	/*
-	 * We don't subject CONFIG_DCACHE_RAM_MRC_VAR_SIZE since memory is
+	 * We don't subtract CONFIG_DCACHE_RAM_MRC_VAR_SIZE since memory is
 	 * already set up. This has the happy side-effect of putting gd in a
 	 * new place separate from SPL, so the memset() in
 	 * board_init_f_init_reserve() does not cause any problems (otherwise
 	 * it would zero out the gd and crash)
 	 */
+	/* Set up memory using the existing stack */
+use_existing_stack:
+	mov	%esp, %eax
+2:
 	call	board_init_f_alloc_reserve
 	mov	%eax, %esp
 
-- 
2.26.0.292.g33ef6b2f38-goog

  parent reply	other threads:[~2020-04-08 18:57 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-08 18:57 [RESEND PATCH v3 0/7] x86: Improve support for chain-loading U-Boot Simon Glass
2020-04-08 18:57 ` [RESEND PATCH v3 1/7] x86: fsp: Allow skipping init code when chain loading Simon Glass
2020-04-08 18:57 ` [RESEND PATCH v3 2/7] x86: apl: Skip " Simon Glass
2020-04-08 18:57 ` [RESEND PATCH v3 3/7] x86: cpu: " Simon Glass
2020-04-08 18:57 ` [RESEND PATCH v3 4/7] pci: Avoid auto-config " Simon Glass
2020-04-08 18:57 ` [RESEND PATCH v3 5/7] board: Add a gd flag for " Simon Glass
2020-04-23 11:03   ` Bin Meng
2020-04-23 14:00     ` Bin Meng
2020-04-26 19:45       ` Simon Glass
2020-04-08 18:57 ` [RESEND PATCH v3 6/7] x86: Add a way to detect running from coreboot Simon Glass
2020-04-23 11:02   ` Bin Meng
2020-04-08 18:57 ` Simon Glass [this message]
2020-04-23 11:06 ` [RESEND PATCH v3 0/7] x86: Improve support for chain-loading U-Boot Bin Meng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200408185755.116336-7-sjg@chromium.org \
    --to=sjg@chromium.org \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.