All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bin Meng <bmeng.cn@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 07/10] x86: fsp: Make sure HOB list is not overwritten by U-Boot
Date: Fri, 11 Dec 2015 02:55:50 -0800	[thread overview]
Message-ID: <1449831353-933-8-git-send-email-bmeng.cn@gmail.com> (raw)
In-Reply-To: <1449831353-933-1-git-send-email-bmeng.cn@gmail.com>

Intel IvyBridge FSP seems to be buggy that it does not report memory
used by FSP itself as reserved in the resource descriptor HOB. The
FSP specification does not describe how resource descriptor HOBs are
generated by the FSP to describe what memory regions. It looks newer
FSPs like Queensbay and BayTrail do not have such issue. This causes
U-Boot relocation overwrites the important boot service data which is
used by FSP, and the subsequent call to fsp_notify() will fail.

To resolve this, we find out the lowest memory base address allocated
by FSP for the boot service data when walking through the HOB list in
fsp_get_usable_lowmem_top(). Check whether the memory top address is
below the FSP HOB list, and if not, use the lowest memory base address
allocated by FSP as the memory top address.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
---

 arch/x86/lib/fsp/fsp_support.c | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/arch/x86/lib/fsp/fsp_support.c b/arch/x86/lib/fsp/fsp_support.c
index 875c96a..d6bbe1a 100644
--- a/arch/x86/lib/fsp/fsp_support.c
+++ b/arch/x86/lib/fsp/fsp_support.c
@@ -223,7 +223,9 @@ u32 fsp_get_usable_lowmem_top(const void *hob_list)
 {
 	const struct hob_header *hdr;
 	struct hob_res_desc *res_desc;
+	struct hob_mem_alloc *res_mem;
 	phys_addr_t phys_start;
+	phys_addr_t mem_base = 0;
 	u32 top;
 
 	/* Get the HOB list for processing */
@@ -242,9 +244,34 @@ u32 fsp_get_usable_lowmem_top(const void *hob_list)
 					top += (u32)(res_desc->len);
 			}
 		}
+
+		/*
+		 * Find out the lowest memory base address allocated by FSP
+		 * for the boot service data
+		 */
+		if (hdr->type == HOB_TYPE_MEM_ALLOC) {
+			res_mem = (struct hob_mem_alloc *)hdr;
+			if (!mem_base)
+				mem_base = res_mem->mem_base;
+			if (res_mem->mem_base < mem_base)
+				mem_base = res_mem->mem_base;
+		}
+
 		hdr = get_next_hob(hdr);
 	}
 
+	/*
+	 * Check whether the memory top address is below the FSP HOB list.
+	 * If not, use the lowest memory base address allocated by FSP as
+	 * the memory top address. This is to prevent U-Boot relocation
+	 * overwrites the important boot service data which is used by FSP,
+	 * otherwise the subsequent call to fsp_notify() will fail.
+	 */
+	if (top > (u32)hob_list) {
+		debug("Adjust memory top address due to a buggy FSP\n");
+		top = (u32)mem_base;
+	}
+
 	return top;
 }
 
-- 
1.8.2.1

  parent reply	other threads:[~2015-12-11 10:55 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-11 10:55 [U-Boot] [PATCH 00/10] x86: ivybridge: Add Intel FSP support Bin Meng
2015-12-11 10:55 ` [U-Boot] [PATCH 01/10] fdtdec: Add compatible string for Intel IvyBridge FSP Bin Meng
2015-12-19  2:51   ` Simon Glass
2015-12-21  2:33     ` Bin Meng
2016-02-06  4:29       ` Bin Meng
2016-02-19 20:56         ` Simon Glass
2015-12-21  7:50     ` Bin Meng
2015-12-11 10:55 ` [U-Boot] [PATCH 02/10] x86: ivybridge: Add FSP support Bin Meng
2015-12-19  2:52   ` Simon Glass
2015-12-21  2:27     ` Bin Meng
2015-12-23 16:44       ` Simon Glass
2015-12-23 22:48         ` Bin Meng
2015-12-11 10:55 ` [U-Boot] [PATCH 03/10] tools: microcode-tool: Support parsing header file with a license block Bin Meng
2015-12-19  2:52   ` Simon Glass
2015-12-21  7:50     ` Bin Meng
2015-12-11 10:55 ` [U-Boot] [PATCH 04/10] x86: ivybridge: Add microcode blobs for all the steppings Bin Meng
2015-12-19  2:52   ` Simon Glass
2015-12-21  7:50     ` Bin Meng
2015-12-11 10:55 ` [U-Boot] [PATCH 05/10] superio: Add SMSC SIO1007 driver Bin Meng
2015-12-19  2:52   ` Simon Glass
2015-12-21  2:42     ` Bin Meng
2016-01-06  0:24       ` Simon Glass
2016-01-26  8:29         ` Bin Meng
2016-01-26 17:03           ` Simon Glass
2015-12-11 10:55 ` [U-Boot] [PATCH 06/10] x86: ivybridge: Do not require HAVE_INTEL_ME Bin Meng
2015-12-19  2:52   ` Simon Glass
2015-12-21  7:50     ` Bin Meng
2015-12-11 10:55 ` Bin Meng [this message]
2015-12-19  2:52   ` [U-Boot] [PATCH 07/10] x86: fsp: Make sure HOB list is not overwritten by U-Boot Simon Glass
2015-12-21  2:36     ` Bin Meng
2015-12-11 10:55 ` [U-Boot] [PATCH 08/10] x86: fsp: Always use hex numbers in the hob command output Bin Meng
2015-12-19  2:52   ` Simon Glass
2015-12-21  7:50     ` Bin Meng
2015-12-11 10:55 ` [U-Boot] [PATCH 09/10] x86: ivybridge: Add macros for LPC decode ranges Bin Meng
2015-12-19  2:52   ` Simon Glass
2015-12-21  7:50     ` Bin Meng
2015-12-11 10:55 ` [U-Boot] [PATCH 10/10] x86: Add Intel Cougar Canyon 2 board Bin Meng
2015-12-19  2:52   ` Simon Glass
2015-12-21  2:34     ` 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=1449831353-933-8-git-send-email-bmeng.cn@gmail.com \
    --to=bmeng.cn@gmail.com \
    --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.