diff --git a/src/northbridge/intel/nehalem/raminit.c b/src/northbridge/intel/nehalem/raminit.c
index dcf9b7b..403af78 100644
--- a/src/northbridge/intel/nehalem/raminit.c
+++ b/src/northbridge/intel/nehalem/raminit.c
@@ -14,13 +14,6 @@
  * GNU General Public License for more details.
  */
 
-/* Please don't remove this. It's needed for debugging and reverse
- * engineering more nehalem variants in the future. */
-#ifndef REAL
-#define REAL 1
-#endif
-
-#if REAL
 #include <stdlib.h>
 #include <compiler.h>
 #include <console/console.h>
@@ -45,22 +38,11 @@
 #include <cpu/intel/turbo.h>
 #include <mrc_cache.h>
 #include <arch/early_variables.h>
-#endif
-
-#if !REAL
-typedef unsigned char u8;
-typedef unsigned short u16;
-typedef unsigned int u32;
-typedef u32 device_t;
-#endif
 
 #include "nehalem.h"
 
 #include <southbridge/intel/ibexpeak/me.h>
-
-#if REAL
 #include <delay.h>
-#endif
 
 #define NORTHBRIDGE PCI_DEV(0, 0, 0)
 #define SOUTHBRIDGE PCI_DEV(0, 0x1f, 0)
@@ -112,10 +94,6 @@
 	u32 reg_6e8;
 };
 
-#if !REAL
-#include "raminit_fake.c"
-#else
-
 #include <lib.h>		/* Prototypes */
 
 static inline void write_mchbar32(u32 addr, u32 val)
@@ -171,8 +149,6 @@
 	out[1] = ret.hi;
 }
 
-#endif
-
 /* OK */
 static void write_1d0(u32 val, u16 addr, int bits, int flag)
 {
@@ -215,9 +191,7 @@
 
 static void sfence(void)
 {
-#if REAL
 	asm volatile ("sfence");
-#endif
 }
 
 static inline u16 get_lane_offset(int slot, int rank, int lane)
@@ -232,7 +206,6 @@
 	return get_lane_offset(slot, rank, lane) + offs[(tm + 3) % 4];
 }
 
-#if REAL
 static u32 gav_real(int line, u32 in)
 {
 	//  printk (BIOS_DEBUG, "%d: GAV: %x\n", line, in);
@@ -240,7 +213,7 @@
 }
 
 #define gav(x) gav_real (__LINE__, (x))
-#endif
+
 struct raminfo {
 	u16 clock_speed_index;	/* clock_speed (REAL, not DDR) / 133.(3) - 3 */
 	u16 fsb_frequency;	/* in 1.(1)/2 MHz.  */
@@ -1497,7 +1470,6 @@
 
 	memset(memory_map, 0, sizeof(memory_map));
 
-#if REAL
 	if (info->uma_enabled) {
 		u16 t = pci_read_config16(NORTHBRIDGE, D0F0_GGC);
 		gav(t);
@@ -1512,7 +1484,6 @@
 		uma_size_igd = uma_sizes_igd[(t >> 4) & 0xF];
 		uma_size_gtt = uma_sizes_gtt[(t >> 8) & 0xF];
 	}
-#endif
 
 	mmio_size = get_mmio_size();
 
@@ -1543,23 +1514,6 @@
 	if (memory_remap)
 		TOUUD -= quickpath_reserved;
 
-#if !REAL
-	if (info->uma_enabled) {
-		u16 t = pci_read_config16(NORTHBRIDGE, D0F0_GGC);
-		gav(t);
-		const int uma_sizes_gtt[16] =
-		    { 0, 1, 0, 2, 0, 0, 0, 0, 0, 2, 3, 4, 42, 42, 42, 42 };
-		/* Igd memory */
-		const int uma_sizes_igd[16] = {
-			0, 0, 0, 0, 0, 32, 48, 64, 128, 256, 96, 160, 224, 352,
-			    256, 512
-		};
-
-		uma_size_igd = uma_sizes_igd[(t >> 4) & 0xF];
-		uma_size_gtt = uma_sizes_gtt[(t >> 8) & 0xF];
-	}
-#endif
-
 	uma_base_igd = TOLUD - uma_size_igd;
 	uma_base_gtt = uma_base_igd - uma_size_gtt;
 	tseg_base = ALIGN_DOWN(uma_base_gtt, 64) - (CONFIG_SMM_TSEG_SIZE >> 20);
@@ -1685,7 +1639,6 @@
 
 static void dump_timings(struct raminfo *info)
 {
-#if REAL
 	int channel, slot, rank, lane, i;
 	printk(BIOS_DEBUG, "Timings:\n");
 	FOR_POPULATED_RANKS {
@@ -1710,7 +1663,6 @@
 	       info->training.reg_178);
 	printk(BIOS_DEBUG, "[10b] = %x (%x)\n", read_1d0(0x10b, 6),
 	       info->training.reg_10b);
-#endif
 }
 
 /* Read timings and other registers that need to be restored verbatim and
@@ -1750,7 +1702,6 @@
 			&train, sizeof(train));
 }
 
-#if REAL
 static const struct ram_training *get_cached_training(void)
 {
 	struct region_device rdev;
@@ -1759,7 +1710,6 @@
 		return 0;
 	return (void *)rdev_mmap_full(&rdev);
 }
-#endif
 
 /* FIXME: add timeout.  */
 static void wait_heci_ready(void)
@@ -1842,10 +1792,6 @@
 	write32(DEFAULT_HECIBAR + 0x4, read32(DEFAULT_HECIBAR + 0x4) | 2);
 	do {
 		csr.raw = read32(DEFAULT_HECIBAR + 0xc);
-#if !REAL
-		if (i++ > 346)
-			return -1;
-#endif
 	}
 	while (csr.csr.buffer_write_ptr == csr.csr.buffer_read_ptr);
 	*(u32 *) head = read32(DEFAULT_HECIBAR + 0x8);
@@ -3789,7 +3735,6 @@
 		write_mchbar8(0x2ca9, read_mchbar8(0x2ca9) & ~1);
 }
 
-#if REAL
 static void dmi_setup(void)
 {
 	gav(read8(DEFAULT_DMIBAR + 0x254));
@@ -3804,7 +3749,6 @@
 	     DEFAULT_GPIOBASE | 0x38);
 	gav(inb(DEFAULT_GPIOBASE | 0xe));	// = 0xfdcaff6e
 }
-#endif
 
 void chipset_init(const int s3resume)
 {
@@ -3817,14 +3761,9 @@
 		printk(BIOS_DEBUG, "soft reset detected, rebooting properly\n");
 		write_mchbar8(0x2ca8, 0);
 		outb(0x6, 0xcf9);
-#if REAL
 		halt();
-#else
-		printf("CP5\n");
-		exit(0);
-#endif
 	}
-#if !REAL
+#if 0
 	if (!s3resume) {
 		pre_raminit_3(x2ca8);
 	}
@@ -3911,15 +3850,13 @@
 	/* before SPD */
 	timestamp_add_now(101);
 
-	if (!s3resume || REAL) {
+	if (!s3resume || 1) {	// possible error
 		pci_read_config8(SOUTHBRIDGE, GEN_PMCON_2);	// = 0x80
 
 		collect_system_info(&info);
 
-#if REAL
 		/* Enable SMBUS. */
 		enable_smbus();
-#endif
 
 		memset(&info.populated_ranks, 0, sizeof(info.populated_ranks));
 
@@ -4024,14 +3961,11 @@
 	timestamp_add_now(102);
 
 	write_mchbar8(0x2ca8, read_mchbar8(0x2ca8) & 0xfc);
-#if !REAL
-	rdmsr (MTRR_PHYS_MASK (3));
-#endif
 
 	collect_system_info(&info);
 	calculate_timings(&info);
 
-#if !REAL
+#if 0
 	pci_write_config8(NORTHBRIDGE, 0xdf, 0x82);
 #endif
 
@@ -4051,14 +3985,9 @@
 			printk(BIOS_INFO,
 			       "Interrupted RAM init, reset required.\n");
 			outb(0x6, 0xcf9);
-#if REAL
 			halt();
-#endif
 		}
 	}
-#if !REAL
-	gav(read_mchbar8(0x2ca8));	///!!!!
-#endif
 
 	if (!s3resume && x2ca8 == 0)
 		pci_write_config8(SOUTHBRIDGE, GEN_PMCON_2,
@@ -4415,12 +4344,7 @@
 		write_mchbar8(0x2ca8, read_mchbar8(0x2ca8) & ~3);
 		write_mchbar8(0x2ca8, read_mchbar8(0x2ca8) + 4);
 		write_mchbar32(0x1af0, read_mchbar32(0x1af0) | 0x10);
-#if REAL
 		halt();
-#else
-		printf("CP5\n");
-		exit(0);
-#endif
 	}
 
 	write_mchbar8(0x2ca8, read_mchbar8(0x2ca8));
@@ -4515,13 +4439,7 @@
 			reg32 = inl(DEFAULT_PMBASE + 0x04);
 			outl(reg32 & ~(7 << 10), DEFAULT_PMBASE + 0x04);
 			outb(0xe, 0xcf9);
-
-#if REAL
 			halt();
-#else
-			printf("CP5\n");
-			exit(0);
-#endif
 		}
 		int tm;
 		info.training = *info.cached_training;
@@ -4781,10 +4699,6 @@
 	write_mchbar32(0xfa4, read_mchbar32(0xfa4) & ~0x01000002);
 	write_mchbar32(0xfb0, 0x2000e019);
 
-#if !REAL
-	printf("CP16\n");
-#endif
-
 	/* Before training. */
 	timestamp_add_now(103);
 
@@ -4823,7 +4737,7 @@
 	write_mchbar8(0xff4, read_mchbar8(0xff4) | 0x2);	// OK
 	write_mchbar32(0xff8, (read_mchbar32(0xff8) & ~0xe008) | 0x1020);	// OK
 
-#if REAL
+#if 1
 	write_mchbar32(0xd00, IOMMU_BASE2 | 1);
 	write_mchbar32(0xd40, IOMMU_BASE1 | 1);
 	write_mchbar32(0xdc0, IOMMU_BASE4 | 1);
@@ -4963,9 +4877,8 @@
 		ax = read_mchbar16(0x1190) & 0xf00;	// = 0x480a  // OK
 		write_mchbar16(0x1170, ax | (read_mchbar16(0x1170) & 0x107f) | 0x4080);	// OK
 		write_mchbar16(0x1170, read_mchbar16(0x1170) | 0x1000);	// OK
-#if REAL
 		udelay(1000);
-#endif
+
 		u16 ecx;
 		for (ecx = 0xffff; ecx && (read_mchbar16(0x1170) & 0x1000); ecx--);	// OK
 		write_mchbar16(0x1190, read_mchbar16(0x1190) & ~0x4000);	// OK
@@ -4976,7 +4889,6 @@
 	udelay(10000);
 	write_mchbar16(0x2ca8, 0x8);
 
-#if REAL
 	udelay(1000);
 	dump_timings(&info);
 	cbmem_wasnot_inited = cbmem_recovery(s3resume);
@@ -4996,5 +4908,4 @@
 		outb(0xe, 0xcf9);
 		halt();
 	}
-#endif
 }
