nb/intel/sandybridge: Fix VBOOT

The VBOOT code can be compiled but it asserts with:
ASSERTION ERROR: file 'src/security/vboot/common.c', line 40

Start VBOOT in bootblock to fix the assertion.

Tested on Lenovo X220:
The assertion is gone, the platform boots again.

Change-Id: I48365e911b4f43aecba3b1f950178b7ceed5b2e9
Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/39160
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
diff --git a/src/mainboard/google/butterfly/Kconfig b/src/mainboard/google/butterfly/Kconfig
index 92fc236..33a840f 100644
--- a/src/mainboard/google/butterfly/Kconfig
+++ b/src/mainboard/google/butterfly/Kconfig
@@ -20,6 +20,7 @@
 	select HAVE_ME_BIN
 	select GFX_GMA_INTERNAL_IS_LVDS
 	select MAINBOARD_HAS_LIBGFXINIT
+	select SANDYBRIDGE_VBOOT_IN_ROMSTAGE
 
 config VBOOT
 	select VBOOT_VBNV_CMOS
diff --git a/src/mainboard/google/parrot/Kconfig b/src/mainboard/google/parrot/Kconfig
index 0169bea..c5b680c 100644
--- a/src/mainboard/google/parrot/Kconfig
+++ b/src/mainboard/google/parrot/Kconfig
@@ -21,6 +21,7 @@
 	# This board also feature sandy-bridge CPU's so must have LVDS
 	select GFX_GMA_INTERNAL_IS_LVDS
 	select MAINBOARD_HAS_LIBGFXINIT
+	select SANDYBRIDGE_VBOOT_IN_ROMSTAGE
 
 config VBOOT
 	select VBOOT_VBNV_CMOS
diff --git a/src/mainboard/google/stout/Kconfig b/src/mainboard/google/stout/Kconfig
index a77964b..f945cc0 100644
--- a/src/mainboard/google/stout/Kconfig
+++ b/src/mainboard/google/stout/Kconfig
@@ -19,6 +19,7 @@
 	select GFX_GMA_INTERNAL_IS_LVDS
 	select HAVE_IFD_BIN
 	select HAVE_ME_BIN
+	select SANDYBRIDGE_VBOOT_IN_ROMSTAGE
 
 config VBOOT
 	select VBOOT_VBNV_CMOS
diff --git a/src/mainboard/samsung/lumpy/Kconfig b/src/mainboard/samsung/lumpy/Kconfig
index f87ba8f..56304c9 100644
--- a/src/mainboard/samsung/lumpy/Kconfig
+++ b/src/mainboard/samsung/lumpy/Kconfig
@@ -23,6 +23,7 @@
 	select SUPERIO_SMSC_LPC47N207
 	select DRIVERS_GENERIC_IOAPIC
 	select INTEL_INT15
+	select SANDYBRIDGE_VBOOT_IN_ROMSTAGE
 
 config VBOOT
 	select VBOOT_VBNV_CMOS
diff --git a/src/mainboard/samsung/stumpy/Kconfig b/src/mainboard/samsung/stumpy/Kconfig
index 5deb0f0..67cc67e 100644
--- a/src/mainboard/samsung/stumpy/Kconfig
+++ b/src/mainboard/samsung/stumpy/Kconfig
@@ -19,6 +19,7 @@
 # not on board, should be made selectable.
 	select SUPERIO_SMSC_LPC47N207
 	select INTEL_INT15
+	select SANDYBRIDGE_VBOOT_IN_ROMSTAGE
 
 config VBOOT
 	select VBOOT_VBNV_CMOS
diff --git a/src/northbridge/intel/sandybridge/Kconfig b/src/northbridge/intel/sandybridge/Kconfig
index 7a27d09..06fdc4a 100644
--- a/src/northbridge/intel/sandybridge/Kconfig
+++ b/src/northbridge/intel/sandybridge/Kconfig
@@ -23,8 +23,32 @@
 
 if NORTHBRIDGE_INTEL_SANDYBRIDGE
 
+config SANDYBRIDGE_VBOOT_IN_ROMSTAGE
+	bool
+	default n
+	help
+	  Selected by boards to force VBOOT_STARTS_IN_ROMSTAGE.
+
+config SANDYBRIDGE_VBOOT_IN_BOOTBLOCK
+	depends on VBOOT
+	depends on !SANDYBRIDGE_VBOOT_IN_ROMSTAGE
+	bool "Start verstage in bootblock"
+	default y
+	select VBOOT_STARTS_IN_BOOTBLOCK
+	select VBOOT_SEPARATE_VERSTAGE
+	help
+	  Sandy Bridge can either start verstage in a separate stage
+	  right after the bootblock has run or it can start it
+	  after romstage for compatibility reasons.
+	  Sandy Bridge however uses a mrc.bin to initialize memory which
+	  needs to be located at a fixed offset. Therefore even with
+	  a separate verstage starting after the bootblock that same
+	  binary is used meaning a jump is made from RW to the RO region
+	  and back to the RW region after the binary is done.
+
 config VBOOT
-	select VBOOT_STARTS_IN_ROMSTAGE
+	select VBOOT_MUST_REQUEST_DISPLAY
+	select VBOOT_STARTS_IN_ROMSTAGE if !SANDYBRIDGE_VBOOT_IN_BOOTBLOCK
 
 config USE_NATIVE_RAMINIT
 	bool "Use native raminit"