diff --git a/src/northbridge/intel/sandybridge/early_init.c b/src/northbridge/intel/sandybridge/early_init.c
index 74ae4f5..e966095c 100644
--- a/src/northbridge/intel/sandybridge/early_init.c
+++ b/src/northbridge/intel/sandybridge/early_init.c
@@ -34,10 +34,10 @@
 		return;
 
 	/* setup BARs */
-	MCHBAR32(0x5404) = IOMMU_BASE1 >> 32;
-	MCHBAR32(0x5400) = IOMMU_BASE1 | 1;
-	MCHBAR32(0x5414) = IOMMU_BASE2 >> 32;
-	MCHBAR32(0x5410) = IOMMU_BASE2 | 1;
+	MCHBAR32(VTD1_BASE + 4) = IOMMU_BASE1 >> 32;
+	MCHBAR32(VTD1_BASE)     = IOMMU_BASE1 | 1;
+	MCHBAR32(VTD2_BASE + 4) = IOMMU_BASE2 >> 32;
+	MCHBAR32(VTD2_BASE)     = IOMMU_BASE2 | 1;
 
 	/* lock policies */
 	write32((void *)(IOMMU_BASE1 + 0xff0), 0x80000000);
@@ -126,13 +126,13 @@
 	pci_write_config8(PCI_DEV(0, 2, 0), MSAC, reg8);
 
 	/* Erratum workarounds */
-	reg32 = MCHBAR32(0x5f00);
+	reg32 = MCHBAR32(SAPMCTL);
 	reg32 |= (1 << 9)|(1 << 10);
-	MCHBAR32(0x5f00) = reg32;
+	MCHBAR32(SAPMCTL) = reg32;
 
 	/* Enable SA Clock Gating */
-	reg32 = MCHBAR32(0x5f00);
-	MCHBAR32(0x5f00) = reg32 | 1;
+	reg32 = MCHBAR32(SAPMCTL);
+	MCHBAR32(SAPMCTL) = reg32 | 1;
 
 	/* GPU RC6 workaround for sighting 366252 */
 	reg32 = MCHBAR32(0x5d14);
@@ -144,9 +144,9 @@
 	reg32 &= ~(1 << 0);
 	MCHBAR32(0x6120) = reg32;
 
-	reg32 = MCHBAR32(0x5418);
+	reg32 = MCHBAR32(PAIR_CTL);
 	reg32 |= (1 << 4) | (1 << 5);
-	MCHBAR32(0x5418) = reg32;
+	MCHBAR32(PAIR_CTL) = reg32;
 }
 
 static void start_peg_link_training(void)
diff --git a/src/northbridge/intel/sandybridge/finalize.c b/src/northbridge/intel/sandybridge/finalize.c
index e07c6c2..e338372 100644
--- a/src/northbridge/intel/sandybridge/finalize.c
+++ b/src/northbridge/intel/sandybridge/finalize.c
@@ -34,16 +34,16 @@
 	pci_or_config32(PCI_DEV_SNB, TSEGMB, 1 << 0);
 	pci_or_config32(PCI_DEV_SNB, TOLUD, 1 << 0);
 
-	MCHBAR32_OR(0x5500, 1 << 0);	/* PAVP */
-	MCHBAR32_OR(0x5f00, 1 << 31);	/* SA PM */
-	MCHBAR32_OR(0x6020, 1 << 0);	/* UMA GFX */
-	MCHBAR32_OR(0x63fc, 1 << 0);	/* VTDTRK */
+	MCHBAR32_OR(MMIO_PAVP_CTL, 1 << 0);	/* PAVP */
+	MCHBAR32_OR(SAPMCTL, 1 << 31);		/* SA PM */
+	MCHBAR32_OR(0x6020, 1 << 0);		/* UMA GFX */
+	MCHBAR32_OR(0x63fc, 1 << 0);		/* VTDTRK */
 	MCHBAR32_OR(0x6800, 1 << 31);
 	MCHBAR32_OR(0x7000, 1 << 31);
 	MCHBAR32_OR(0x77fc, 1 << 0);
 
 	/* Memory Controller Lockdown */
-	MCHBAR8(0x50fc) = 0x8f;
+	MCHBAR8(MC_LOCK) = 0x8f;
 
 	/* Read+write the following */
 	MCHBAR32(0x6030) = MCHBAR32(0x6030);
diff --git a/src/northbridge/intel/sandybridge/northbridge.c b/src/northbridge/intel/sandybridge/northbridge.c
index 5ff123e..a9b1c25 100644
--- a/src/northbridge/intel/sandybridge/northbridge.c
+++ b/src/northbridge/intel/sandybridge/northbridge.c
@@ -391,15 +391,15 @@
 
 	northbridge_dmi_init(dev);
 
-	bridge_type = MCHBAR32(0x5f10);
+	bridge_type = MCHBAR32(SAPMTIMERS);
 	bridge_type &= ~0xff;
 
 	if ((bridge_silicon_revision() & BASE_REV_MASK) == BASE_REV_IVB) {
 		/* Enable Power Aware Interrupt Routing */
-		u8 pair = MCHBAR8(0x5418);
+		u8 pair = MCHBAR8(PAIR_CTL);
 		pair &= ~0xf;	/* Clear 3:0 */
 		pair |= 0x4;	/* Fixed Priority */
-		MCHBAR8(0x5418) = pair;
+		MCHBAR8(PAIR_CTL) = pair;
 
 		/* 30h for IvyBridge */
 		bridge_type |= 0x30;
@@ -407,7 +407,7 @@
 		/* 20h for Sandybridge */
 		bridge_type |= 0x20;
 	}
-	MCHBAR32(0x5f10) = bridge_type;
+	MCHBAR32(SAPMTIMERS) = bridge_type;
 
 	/* Turn off unused devices. Has to be done before
 	 * setting BIOS_RESET_CPL.
@@ -433,12 +433,12 @@
 	 */
 	if (cpu_config_tdp_levels()) {
 		msr_t msr = rdmsr(MSR_PKG_POWER_LIMIT);
-		MCHBAR32(0x59A0) = msr.lo;
-		MCHBAR32(0x59A4) = msr.hi;
+		MCHBAR32(MC_TURBO_PL1) = msr.lo;
+		MCHBAR32(MC_TURBO_PL2) = msr.hi;
 	}
 
 	/* Set here before graphics PM init */
-	MCHBAR32(0x5500) = 0x00100001;
+	MCHBAR32(MMIO_PAVP_CTL) = 0x00100001;
 }
 
 void northbridge_write_smram(u8 smram)
diff --git a/src/northbridge/intel/sandybridge/raminit.c b/src/northbridge/intel/sandybridge/raminit.c
index de6a542..4ec8492 100644
--- a/src/northbridge/intel/sandybridge/raminit.c
+++ b/src/northbridge/intel/sandybridge/raminit.c
@@ -293,7 +293,7 @@
 	int err;
 	u32 cpu;
 
-	MCHBAR32(0x5f00) |= 1;
+	MCHBAR32(SAPMCTL) |= 1;
 
 	/* Wait for ME to be ready */
 	intel_early_me_init();
@@ -404,12 +404,12 @@
 	if (err)
 		die("raminit failed");
 
-	/* FIXME: should be hardware revision-dependent.  */
-	MCHBAR32(0x5024) = 0x00a030ce;
+	/* FIXME: should be hardware revision-dependent. The register only exists on IVB. */
+	MCHBAR32(CHANNEL_HASH) = 0x00a030ce;
 
 	set_scrambling_seed(&ctrl);
 
-	set_42a0(&ctrl);
+	set_normal_operation(&ctrl);
 
 	final_registers(&ctrl);
 
diff --git a/src/northbridge/intel/sandybridge/raminit_common.c b/src/northbridge/intel/sandybridge/raminit_common.c
index da12718..43e9e91 100644
--- a/src/northbridge/intel/sandybridge/raminit_common.c
+++ b/src/northbridge/intel/sandybridge/raminit_common.c
@@ -33,38 +33,162 @@
 /* FIXME: no support for 3-channel chipsets.  */
 
 /*
- * Register description:
+ * ### IOSAV command queue notes ###
+ *
  * Intel provides a command queue of depth four.
- * Every command is configured by using multiple registers.
- * On executing the command queue you have to provide the depth used.
+ * Every command is configured by using multiple MCHBAR registers.
+ * On executing the command queue, you have to specify its depth (number of commands).
  *
- * Known registers:
- * Channel X = [0, 1]
- * Command queue index Y = [0, 1, 2, 3]
+ * The macros for these registers can take some integer parameters, within these bounds:
+ *   channel:   [0..1]
+ *   index:     [0..3]
+ *   lane:      [0..8]
  *
- * DEFAULT_MCHBAR + 0x4220 + 0x400 * X + 4 * Y: command io register
- *  Controls the DRAM command signals
- *  Bit 0: !RAS
- *  Bit 1: !CAS
- *  Bit 2: !WE
+ * Note that these ranges are 'closed': both endpoints are included.
  *
- * DEFAULT_MCHBAR + 0x4200 + 0x400 * X + 4 * Y: addr bankslot io register
- *  Controls the address, bank address and slotrank signals
- *  Bit 0-15 : Address
- *  Bit 20-22: Bank Address
- *  Bit 24-25: slotrank
  *
- * DEFAULT_MCHBAR + 0x4230 + 0x400 * X + 4 * Y: idle register
- *  Controls the idle time after issuing this DRAM command
- *  Bit 16-32: number of clock-cylces to idle
  *
- * DEFAULT_MCHBAR + 0x4284 + channel * 0x400: execute command queue
- *  Starts to execute all queued commands
- *  Bit 0    : start DRAM command execution
- *  Bit 18-19 : number of queued commands - 1
+ * ### Register description ###
+ *
+ * IOSAV_n_SP_CMD_ADDR_ch(channel, index)
+ *   Sub-sequence command addresses. Controls the address, bank address and slotrank signals.
+ *
+ *   Bitfields:
+ *   [0..15]    Row / Column Address.
+ *   [16..18]   The result of (10 + [16..18]) is the number of valid row bits.
+ *                  Note: Value 1 is not implemented. Not that it really matters, though.
+ *                        Value 7 is reserved, as the hardware does not support it.
+ *   [20..22]   Bank Address.
+ *   [24..25]   Rank select. Let's call it "ranksel", as it is mentioned later.
+ *
+ * IOSAV_n_ADDR_UPD_ch(channel, index)
+ *   How the address shall be updated after executing the sub-sequence command.
+ *
+ *   Bitfields:
+ *   [0]        Increment CAS/RAS by 1.
+ *   [1]        Increment CAS/RAS by 8.
+ *   [2]        Increment bank select by 1.
+ *   [3..4]     Increment rank select by 1, 2 or 3.
+ *   [5..9]     Known as "addr_wrap". Address bits will wrap around the [addr_wrap..0] range.
+ *   [10..11]   LFSR update:
+ *                  00: Do not use the LFSR function.
+ *                  01: Undefined, treat as Reserved.
+ *                  10: Apply LFSR on the [addr_wrap..0] bit range.
+ *                  11: Apply LFSR on the [addr_wrap..3] bit range.
+ *
+ *   [12..15]   Update rate. The number of command runs between address updates. For example:
+ *                  0: Update every command run.
+ *                  1: Update every second command run. That is, half of the command rate.
+ *                  N: Update after N command runs without updates.
+ *
+ *   [16..17]   LFSR behavior on the deselect cycles (when no sub-seq command is issued):
+ *                  0: No change w.r.t. the last issued command.
+ *                  1: LFSR XORs with address & command (excluding CS), but does not update.
+ *                  2: LFSR XORs with address & command (excluding CS), and updates.
+ *
+ * IOSAV_n_SP_CMD_CTL_ch(channel, index)
+ *   Special command control register. Controls the DRAM command signals.
+ *
+ *   Bitfields:
+ *   [0]        !RAS signal.
+ *   [1]        !CAS signal.
+ *   [2]        !WE  signal.
+ *   [4..7]     CKE, per rank and channel.
+ *   [8..11]    ODT, per rank and channel.
+ *   [12]       Chip Select mode control.
+ *   [13..16]   Chip select, per rank and channel. It works as follows:
+ *
+ *          entity CS_BLOCK is
+ *              port (
+ *                  MODE    : in  std_logic;                -- Mode select at [12]
+ *                  RANKSEL : in  std_logic_vector(0 to 3); -- Decoded "ranksel" value
+ *                  CS_CTL  : in  std_logic_vector(0 to 3); -- Chip select control at [13..16]
+ *                  CS_Q    : out std_logic_vector(0 to 3)  -- CS signals
+ *              );
+ *          end entity CS_BLOCK;
+ *
+ *          architecture RTL of CS_BLOCK is
+ *          begin
+ *              if MODE = '1' then
+ *                  CS_Q <= not RANKSEL and CS_CTL;
+ *              else
+ *                  CS_Q <= CS_CTL;
+ *              end if;
+ *          end architecture RTL;
+ *
+ *   [17]       Auto Precharge. Only valid when using 10 row bits!
+ *
+ * IOSAV_n_SUBSEQ_CTL_ch(channel, index)
+ *   Sub-sequence parameters. Controls repetititons, delays and data orientation.
+ *
+ *   Bitfields:
+ *   [0..8]     Number of repetitions of the sub-sequence command.
+ *   [10..14]   Gap, number of clock-cycles to wait before sending the next command.
+ *   [16..24]   Number of clock-cycles to idle between sub-sequence commands.
+ *   [26..27]   The direction of the data.
+ *                  00: None, does not handle data
+ *                  01: Read
+ *                  10: Write
+ *                  11: Read & Write
+ *
+ * IOSAV_n_ADDRESS_LFSR_ch(channel, index)
+ *   23-bit LFSR state register. It is written into the LFSR when the sub-sequence is loaded,
+ *   and then read back from the LFSR when the sub-sequence is done.
+ *
+ *   Bitfields:
+ *   [0..22]    LFSR state.
+ *
+ * IOSAV_SEQ_CTL_ch(channel)
+ *   Control the sequence level in IOSAV: number of sub-sequences, iterations, maintenance...
+ *
+ *   Bitfields:
+ *   [0..7]     Number of full sequence executions. When this field becomes non-zero, then the
+ *              sequence starts running immediately. This value is decremented after completing
+ *              a full sequence iteration. When it is zero, the sequence is done. No decrement
+ *              is done if this field is set to 0xff. This is the "infinite repeat" mode, and
+ *              it is manually aborted by clearing this field.
+ *
+ *   [8..16]    Number of wait cycles after each sequence iteration. This wait's purpose is to
+ *              allow performing maintenance in infinite loops. When non-zero, RCOMP, refresh
+ *              and ZQXS operations can take place.
+ *
+ *   [17]       Stop-on-error mode: Whether to stop sequence execution when an error occurs.
+ *   [18..19]   Number of sub-sequences. The programmed value is the index of the last sub-seq.
+ *   [20]       If set, keep refresh disabled until the next sequence execution.
+ *                  DANGER: Refresh must be re-enabled within the (9 * tREFI) period!
+ *
+ *   [22]       If set, sequence execution will not prevent refresh. This cannot be set when
+ *              bit [20] is also set, or was set on the previous sequence. This bit exists so
+ *              that the sequence machine can be used as a timer without affecting the memory.
+ *
+ *   [23]       If set, a output pin is asserted on the first detected error. This output can
+ *              be used as a trigger for an oscilloscope or a logic analyzer, which is handy.
+ *
+ * IOSAV_DATA_CTL_ch(channel)
+ *   Data-related controls in IOSAV mode.
+ *
+ *   Bitfields:
+ *   [0..7]     WDB (Write Data Buffer) pattern length: [0..7] = (length / 8) - 1;
+ *   [8..15]    WDB read pointer. Points at the data used for IOSAV write transactions.
+ *   [16..23]   Comparison pointer. Used to compare data from IOSAV read transactions.
+ *   [24]       If set, increment pointers only when micro-breakpoint is active.
+ *
+ * IOSAV_STATUS_ch(channel)
+ *   State of the IOSAV sequence machine. Should be polled after sending an IOSAV sequence.
+ *
+ *   Bitfields:
+ *   [0]        IDLE:  IOSAV is sleeping.
+ *   [1]        BUSY:  IOSAV is running a sequence.
+ *   [2]        DONE:  IOSAV has completed a sequence.
+ *   [3]        ERROR: IOSAV detected an error and stopped on it, when using Stop-on-error.
+ *   [4]        PANIC: The refresh machine issued a Panic Refresh, and IOSAV was aborted.
+ *   [5]        RCOMP: RComp failure. Unused, consider Reserved.
+ *   [6]        Cleared with a new sequence, and set when done and refresh counter is drained.
+ *
  */
 
-#define RUN_QUEUE_4284(x)	((((x) - 1) << 18) | 1)	// 0 <= x < 4
+/* length:      [1..4] */
+#define IOSAV_RUN_ONCE(length)	((((length) - 1) << 18) | 1)
 
 static void sfence(void)
 {
@@ -73,10 +197,10 @@
 
 static void toggle_io_reset(void) {
 	/* toggle IO reset bit */
-	u32 r32 = MCHBAR32(0x5030);
-	MCHBAR32(0x5030) = r32 | 0x20;
+	u32 r32 = MCHBAR32(MC_INIT_STATE_G);
+	MCHBAR32(MC_INIT_STATE_G) = r32 | 0x20;
 	udelay(1);
-	MCHBAR32(0x5030) = r32 & ~0x20;
+	MCHBAR32(MC_INIT_STATE_G) = r32 & ~0x20;
 	udelay(1);
 }
 
@@ -171,7 +295,7 @@
 		die("No valid DIMMs found");
 }
 
-void dram_xover(ramctr_timing * ctrl)
+void dram_xover(ramctr_timing *ctrl)
 {
 	u32 reg;
 	int channel;
@@ -179,15 +303,13 @@
 	FOR_ALL_CHANNELS {
 		// enable xover clk
 		reg = get_XOVER_CLK(ctrl->rankmap[channel]);
-		printram("XOVER CLK [%x] = %x\n", 0xc14 + channel * 0x100,
-			 reg);
-		MCHBAR32(0xc14 + channel * 0x100) = reg;
+		printram("XOVER CLK [%x] = %x\n", GDCRCKPICODE_ch(channel), reg);
+		MCHBAR32(GDCRCKPICODE_ch(channel)) = reg;
 
 		// enable xover ctl & xover cmd
 		reg = get_XOVER_CMD(ctrl->rankmap[channel]);
-		printram("XOVER CMD [%x] = %x\n", 0x320c + channel * 0x100,
-			 reg);
-		MCHBAR32(0x320c + channel * 0x100) = reg;
+		printram("XOVER CMD [%x] = %x\n", GDCRCMDPICODING_ch(channel), reg);
+		MCHBAR32(GDCRCMDPICODING_ch(channel)) = reg;
 	}
 }
 
@@ -202,14 +324,14 @@
 	if (IS_SANDY_CPU(cpu) && IS_SANDY_CPU_C(cpu)) {
 		if (stretch == 2)
 			stretch = 3;
-		addr = 0x401c + channel * 0x400;
+		addr = SCHED_SECOND_CBIT_ch(channel);
 		MCHBAR32_AND_OR(addr, 0xffffc3ff,
 			(stretch << 12) | (stretch << 10));
 		printk(RAM_DEBUG, "OTHP Workaround [%x] = %x\n", addr,
 			MCHBAR32(addr));
 	} else {
 		// OTHP
-		addr = 0x400c + channel * 0x400;
+		addr = TC_OTHP_ch(channel);
 		MCHBAR32_AND_OR(addr, 0xfff0ffff,
 			(stretch << 16) | (stretch << 18));
 		printk(RAM_DEBUG, "OTHP [%x] = %x\n", addr, MCHBAR32(addr));
@@ -229,8 +351,8 @@
 		reg |= (ctrl->CAS << 8);
 		reg |= (ctrl->CWL << 12);
 		reg |= (ctrl->tRAS << 16);
-		printram("DBP [%x] = %x\n", TC_DBP_C0 + channel * 0x400, reg);
-		MCHBAR32(TC_DBP_C0 + channel * 0x400) = reg;
+		printram("DBP [%x] = %x\n", TC_DBP_ch(channel), reg);
+		MCHBAR32(TC_DBP_ch(channel)) = reg;
 
 		// RAP
 		reg = 0;
@@ -241,11 +363,11 @@
 		reg |= (ctrl->tFAW << 16);
 		reg |= (ctrl->tWR << 24);
 		reg |= (3 << 30);
-		printram("RAP [%x] = %x\n", TC_RAP_C0 + channel * 0x400, reg);
-		MCHBAR32(TC_RAP_C0 + channel * 0x400) = reg;
+		printram("RAP [%x] = %x\n", TC_RAP_ch(channel), reg);
+		MCHBAR32(TC_RAP_ch(channel)) = reg;
 
 		// OTHP
-		addr = 0x400c + channel * 0x400;
+		addr = TC_OTHP_ch(channel);
 		reg = 0;
 		reg |= ctrl->tXPDLL;
 		reg |= (ctrl->tXP << 5);
@@ -271,10 +393,10 @@
 		reg = ((ctrl->tREFI & 0xffff) << 0) |
 			((ctrl->tRFC & 0x1ff) << 16) |
 			(((val32 / 1024) & 0x7f) << 25);
-		printram("REFI [%x] = %x\n", TC_RFTP_C0 + channel * 0x400, reg);
-		MCHBAR32(TC_RFTP_C0 + channel * 0x400) = reg;
+		printram("REFI [%x] = %x\n", TC_RFTP_ch(channel), reg);
+		MCHBAR32(TC_RFTP_ch(channel)) = reg;
 
-		MCHBAR32_OR(TC_RFP_C0 + channel * 0x400,  0xff);
+		MCHBAR32_OR(TC_RFP_ch(channel),  0xff);
 
 		// SRFTP
 		reg = 0;
@@ -286,9 +408,9 @@
 		reg = (reg & ~0x3ff0000) | (val32 << 16);
 		val32 = ctrl->tMOD - 8;
 		reg = (reg & ~0xf0000000) | (val32 << 28);
-		printram("SRFTP [%x] = %x\n", 0x42a4 + channel * 0x400,
+		printram("SRFTP [%x] = %x\n", TC_SRFTP_ch(channel),
 		       reg);
-		MCHBAR32(0x42a4 + channel * 0x400) = reg;
+		MCHBAR32(TC_SRFTP_ch(channel)) = reg;
 	}
 }
 
@@ -336,7 +458,7 @@
 	}
 }
 
-void dram_dimm_set_mapping(ramctr_timing * ctrl)
+void dram_dimm_set_mapping(ramctr_timing *ctrl)
 {
 	int channel;
 	FOR_ALL_CHANNELS {
@@ -344,7 +466,7 @@
 	}
 }
 
-void dram_zones(ramctr_timing * ctrl, int training)
+void dram_zones(ramctr_timing *ctrl, int training)
 {
 	u32 reg, ch0size, ch1size;
 	u8 val;
@@ -359,18 +481,18 @@
 	}
 
 	if (ch0size >= ch1size) {
-		reg = MCHBAR32(0x5014);
+		reg = MCHBAR32(MAD_ZR);
 		val = ch1size / 256;
 		reg = (reg & ~0xff000000) | val << 24;
 		reg = (reg & ~0xff0000) | (2 * val) << 16;
-		MCHBAR32(0x5014) = reg;
+		MCHBAR32(MAD_ZR) = reg;
 		MCHBAR32(MAD_CHNL) = 0x24;
 	} else {
-		reg = MCHBAR32(0x5014);
+		reg = MCHBAR32(MAD_ZR);
 		val = ch0size / 256;
 		reg = (reg & ~0xff000000) | val << 24;
 		reg = (reg & ~0xff0000) | (2 * val) << 16;
-		MCHBAR32(0x5014) = reg;
+		MCHBAR32(MAD_ZR) = reg;
 		MCHBAR32(MAD_CHNL) = 0x21;
 	}
 }
@@ -462,7 +584,7 @@
 		return cfg->pci_mmio_size;
 }
 
-void dram_memorymap(ramctr_timing * ctrl, int me_uma_size)
+void dram_memorymap(ramctr_timing *ctrl, int me_uma_size)
 {
 	u32 reg, val, reclaim;
 	u32 tom, gfxstolen, gttsize;
@@ -615,69 +737,69 @@
 	}
 }
 
-static void wait_428c(int channel)
+static void wait_for_iosav(int channel)
 {
 	while (1) {
-		if (MCHBAR32(0x428c + channel * 0x400) & 0x50)
+		if (MCHBAR32(IOSAV_STATUS_ch(channel)) & 0x50)
 			return;
 	}
 }
 
-static void write_reset(ramctr_timing * ctrl)
+static void write_reset(ramctr_timing *ctrl)
 {
 	int channel, slotrank;
 
 	/* choose a populated channel.  */
 	channel = (ctrl->rankmap[0]) ? 0 : 1;
 
-	wait_428c(channel);
+	wait_for_iosav(channel);
 
 	/* choose a populated rank.  */
 	slotrank = (ctrl->rankmap[channel] & 1) ? 0 : 2;
 
 	/* DRAM command ZQCS */
-	MCHBAR32(0x4220 + channel * 0x400) = 0x0f003;
-	MCHBAR32(0x4230 + channel * 0x400) = 0x80c01;
-	MCHBAR32(0x4200 + channel * 0x400) = (slotrank << 24) | 0x60000;
-	MCHBAR32(0x4210 + channel * 0x400) = 0;
+	MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 0)) = 0x0f003;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 0)) = 0x80c01;
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 0)) = (slotrank << 24) | 0x60000;
+	MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 0)) = 0;
 
 	// execute command queue - why is bit 22 set here?!
-	MCHBAR32(0x4284 + channel * 0x400) = (1 << 22) | RUN_QUEUE_4284(1);
+	MCHBAR32(IOSAV_SEQ_CTL_ch(channel)) = (1 << 22) | IOSAV_RUN_ONCE(1);
 
-	wait_428c(channel);
+	wait_for_iosav(channel);
 }
 
-void dram_jedecreset(ramctr_timing * ctrl)
+void dram_jedecreset(ramctr_timing *ctrl)
 {
 	u32 reg;
 	int channel;
 
-	while (!(MCHBAR32(0x5084) & 0x10000));
+	while (!(MCHBAR32(RCOMP_TIMER) & 0x10000));
 	do {
-		reg = MCHBAR32(0x428c);
+		reg = MCHBAR32(IOSAV_STATUS_ch(0));
 	} while ((reg & 0x14) == 0);
 
 	// Set state of memory controller
 	reg = 0x112;
-	MCHBAR32(0x5030) = reg;
-	MCHBAR32(0x4ea0) = 0;
+	MCHBAR32(MC_INIT_STATE_G) = reg;
+	MCHBAR32(MC_INIT_STATE) = 0;
 	reg |= 2;		//ddr reset
-	MCHBAR32(0x5030) = reg;
+	MCHBAR32(MC_INIT_STATE_G) = reg;
 
 	// Assert dimm reset signal
-	MCHBAR32_AND(0x5030, ~0x2);
+	MCHBAR32_AND(MC_INIT_STATE_G, ~0x2);
 
 	// Wait 200us
 	udelay(200);
 
 	// Deassert dimm reset signal
-	MCHBAR32_OR(0x5030, 2);
+	MCHBAR32_OR(MC_INIT_STATE_G, 2);
 
 	// Wait 500us
 	udelay(500);
 
 	// Enable DCLK
-	MCHBAR32_OR(0x5030, 4);
+	MCHBAR32_OR(MC_INIT_STATE_G, 4);
 
 	// XXX Wait 20ns
 	udelay(1);
@@ -685,13 +807,13 @@
 	FOR_ALL_CHANNELS {
 		// Set valid rank CKE
 		reg = ctrl->rankmap[channel];
-		MCHBAR32(0x42a0 + channel * 0x400) = reg;
+		MCHBAR32(MC_INIT_STATE_ch(channel)) = reg;
 
 		// Wait 10ns for ranks to settle
 		//udelay(0.01);
 
 		reg = (reg & ~0xf0) | (ctrl->rankmap[channel] << 4);
-		MCHBAR32(0x42a0 + channel * 0x400) = reg;
+		MCHBAR32(MC_INIT_STATE_ch(channel)) = reg;
 
 		// Write reset using a NOP
 		write_reset(ctrl);
@@ -714,7 +836,7 @@
 static void write_mrreg(ramctr_timing *ctrl, int channel, int slotrank,
 			int reg, u32 val)
 {
-	wait_428c(channel);
+	wait_for_iosav(channel);
 
 	if (ctrl->rank_mirror[channel][slotrank]) {
 		/* DDR3 Rank1 Address mirror
@@ -726,31 +848,31 @@
 	}
 
 	/* DRAM command MRS */
-	MCHBAR32(0x4220 + channel * 0x400) = 0x0f000;
-	MCHBAR32(0x4230 + channel * 0x400) = 0x41001;
-	MCHBAR32(0x4200 + channel * 0x400) =
+	MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 0)) = 0x0f000;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 0)) = 0x41001;
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 0)) =
 		(slotrank << 24) | (reg << 20) | val | 0x60000;
-	MCHBAR32(0x4210 + channel * 0x400) = 0;
+	MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 0)) = 0;
 
 	/* DRAM command MRS */
-	MCHBAR32(0x4224 + channel * 0x400) = 0x1f000;
-	MCHBAR32(0x4234 + channel * 0x400) = 0x41001;
-	MCHBAR32(0x4204 + channel * 0x400) =
+	MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 1)) = 0x1f000;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 1)) = 0x41001;
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 1)) =
 		(slotrank << 24) | (reg << 20) | val | 0x60000;
-	MCHBAR32(0x4214 + channel * 0x400) = 0;
+	MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 1)) = 0;
 
 	/* DRAM command MRS */
-	MCHBAR32(0x4228 + channel * 0x400) = 0x0f000;
-	MCHBAR32(0x4238 + channel * 0x400) = 0x1001 | (ctrl->tMOD << 16);
-	MCHBAR32(0x4208 + channel * 0x400) =
+	MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 2)) = 0x0f000;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 2)) = 0x1001 | (ctrl->tMOD << 16);
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 2)) =
 		(slotrank << 24) | (reg << 20) | val | 0x60000;
-	MCHBAR32(0x4218 + channel * 0x400) = 0;
+	MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 2)) = 0;
 
 	// execute command queue
-	MCHBAR32(0x4284 + channel * 0x400) = RUN_QUEUE_4284(3);
+	MCHBAR32(IOSAV_SEQ_CTL_ch(channel)) = IOSAV_RUN_ONCE(3);
 }
 
-static u32 make_mr0(ramctr_timing * ctrl, u8 rank)
+static u32 make_mr0(ramctr_timing *ctrl, u8 rank)
 {
 	u16 mr0reg, mch_cas, mch_wr;
 	static const u8 mch_wr_t[12] = { 1, 2, 3, 4, 0, 5, 0, 6, 0, 7, 0, 0 };
@@ -848,7 +970,7 @@
 	write_mrreg(ctrl, channel, rank, 3, 0);
 }
 
-void dram_mrscommands(ramctr_timing * ctrl)
+void dram_mrscommands(ramctr_timing *ctrl)
 {
 	u8 slotrank;
 	int channel;
@@ -870,51 +992,51 @@
 	}
 
 	/* DRAM command NOP */
-	MCHBAR32(0x4e20) = 0x7;
-	MCHBAR32(0x4e30) = 0xf1001;
-	MCHBAR32(0x4e00) = 0x60002;
-	MCHBAR32(0x4e10) = 0;
+	MCHBAR32(IOSAV_n_SP_CMD_CTL(0)) = 0x7;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL(0)) = 0xf1001;
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR(0)) = 0x60002;
+	MCHBAR32(IOSAV_n_ADDR_UPD(0)) = 0;
 
 	/* DRAM command ZQCL */
-	MCHBAR32(0x4e24) = 0x1f003;
-	MCHBAR32(0x4e34) = 0x1901001;
-	MCHBAR32(0x4e04) = 0x60400;
-	MCHBAR32(0x4e14) = 0x288;
+	MCHBAR32(IOSAV_n_SP_CMD_CTL(1)) = 0x1f003;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL(1)) = 0x1901001;
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR(1)) = 0x60400;
+	MCHBAR32(IOSAV_n_ADDR_UPD(1)) = 0x288;
 
 	// execute command queue on all channels? Why isn't bit 0 set here?
-	MCHBAR32(0x4e84) = 0x40004;
+	MCHBAR32(IOSAV_SEQ_CTL) = 0x40004;
 
 	// Drain
 	FOR_ALL_CHANNELS {
 		// Wait for ref drained
-		wait_428c(channel);
+		wait_for_iosav(channel);
 	}
 
 	// Refresh enable
-	MCHBAR32_OR(0x5030, 8);
+	MCHBAR32_OR(MC_INIT_STATE_G, 8);
 
 	FOR_ALL_POPULATED_CHANNELS {
-		MCHBAR32_AND(0x4020 + channel * 0x400, ~0x200000);
+		MCHBAR32_AND(SCHED_CBIT_ch(channel), ~0x200000);
 
-		wait_428c(channel);
+		wait_for_iosav(channel);
 
 		slotrank = (ctrl->rankmap[channel] & 1) ? 0 : 2;
 
 		// Drain
-		wait_428c(channel);
+		wait_for_iosav(channel);
 
 		/* DRAM command ZQCS */
-		MCHBAR32(0x4220 + channel * 0x400) = 0x0f003;
-		MCHBAR32(0x4230 + channel * 0x400) = 0x659001;
-		MCHBAR32(0x4200 + channel * 0x400) =
+		MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 0)) = 0x0f003;
+		MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 0)) = 0x659001;
+		MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 0)) =
 			(slotrank << 24) | 0x60000;
-		MCHBAR32(0x4210 + channel * 0x400) = 0x3e0;
+		MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 0)) = 0x3e0;
 
 		// execute command queue
-		MCHBAR32(0x4284 + channel * 0x400) = RUN_QUEUE_4284(1);
+		MCHBAR32(IOSAV_SEQ_CTL_ch(channel)) = IOSAV_RUN_ONCE(1);
 
 		// Drain
-		wait_428c(channel);
+		wait_for_iosav(channel);
 	}
 }
 
@@ -924,81 +1046,81 @@
 	0x0800
 };
 
-void program_timings(ramctr_timing * ctrl, int channel)
+void program_timings(ramctr_timing *ctrl, int channel)
 {
-	u32 reg32, reg_4024, reg_c14, reg_c18, reg_io_latency;
+	u32 reg32, reg_roundtrip_latency, reg_pi_code, reg_logic_delay, reg_io_latency;
 	int lane;
 	int slotrank, slot;
 	int full_shift = 0;
-	u16 slot320c[NUM_SLOTS];
+	u16 pi_coding_ctrl[NUM_SLOTS];
 
 	FOR_ALL_POPULATED_RANKS {
-		if (full_shift < -ctrl->timings[channel][slotrank].val_320c)
-			full_shift = -ctrl->timings[channel][slotrank].val_320c;
+		if (full_shift < -ctrl->timings[channel][slotrank].pi_coding)
+			full_shift = -ctrl->timings[channel][slotrank].pi_coding;
 	}
 
 	for (slot = 0; slot < NUM_SLOTS; slot++)
 		switch ((ctrl->rankmap[channel] >> (2 * slot)) & 3) {
 		case 0:
 		default:
-			slot320c[slot] = 0x7f;
+			pi_coding_ctrl[slot] = 0x7f;
 			break;
 		case 1:
-			slot320c[slot] =
-			    ctrl->timings[channel][2 * slot + 0].val_320c +
+			pi_coding_ctrl[slot] =
+			    ctrl->timings[channel][2 * slot + 0].pi_coding +
 			    full_shift;
 			break;
 		case 2:
-			slot320c[slot] =
-			    ctrl->timings[channel][2 * slot + 1].val_320c +
+			pi_coding_ctrl[slot] =
+			    ctrl->timings[channel][2 * slot + 1].pi_coding +
 			    full_shift;
 			break;
 		case 3:
-			slot320c[slot] =
-			    (ctrl->timings[channel][2 * slot].val_320c +
-			    ctrl->timings[channel][2 * slot + 1].val_320c) / 2 +
+			pi_coding_ctrl[slot] =
+			    (ctrl->timings[channel][2 * slot].pi_coding +
+			    ctrl->timings[channel][2 * slot + 1].pi_coding) / 2 +
 			    full_shift;
 			break;
 		}
 
 	/* enable CMD XOVER */
 	reg32 = get_XOVER_CMD(ctrl->rankmap[channel]);
-	reg32 |= ((slot320c[0] & 0x3f) << 6) | ((slot320c[0] & 0x40) << 9);
-	reg32 |= (slot320c[1] & 0x7f) << 18;
+	reg32 |= ((pi_coding_ctrl[0] & 0x3f) << 6) | ((pi_coding_ctrl[0] & 0x40) << 9);
+	reg32 |= (pi_coding_ctrl[1] & 0x7f) << 18;
 	reg32 |= (full_shift & 0x3f) | ((full_shift & 0x40) << 6);
 
-	MCHBAR32(0x320c + channel * 0x100) = reg32;
+	MCHBAR32(GDCRCMDPICODING_ch(channel)) = reg32;
 
 	/* enable CLK XOVER */
-	reg_c14 = get_XOVER_CLK(ctrl->rankmap[channel]);
-	reg_c18 = 0;
+	reg_pi_code = get_XOVER_CLK(ctrl->rankmap[channel]);
+	reg_logic_delay = 0;
 
 	FOR_ALL_POPULATED_RANKS {
 		int shift =
-		    ctrl->timings[channel][slotrank].val_320c + full_shift;
-		int offset_val_c14;
+		    ctrl->timings[channel][slotrank].pi_coding + full_shift;
+		int offset_pi_code;
 		if (shift < 0)
 			shift = 0;
-		offset_val_c14 = ctrl->reg_c14_offset + shift;
+		offset_pi_code = ctrl->pi_code_offset + shift;
 		/* set CLK phase shift */
-		reg_c14 |= (offset_val_c14 & 0x3f) << (6 * slotrank);
-		reg_c18 |= ((offset_val_c14 >> 6) & 1) << slotrank;
+		reg_pi_code |= (offset_pi_code & 0x3f) << (6 * slotrank);
+		reg_logic_delay |= ((offset_pi_code >> 6) & 1) << slotrank;
 	}
 
-	MCHBAR32(0xc14 + channel * 0x100) = reg_c14;
-	MCHBAR32(0xc18 + channel * 0x100) = reg_c18;
+	MCHBAR32(GDCRCKPICODE_ch(channel)) = reg_pi_code;
+	MCHBAR32(GDCRCKLOGICDELAY_ch(channel)) = reg_logic_delay;
 
-	reg_io_latency = MCHBAR32(SC_IO_LATENCY_C0 + channel * 0x400);
+	reg_io_latency = MCHBAR32(SC_IO_LATENCY_ch(channel));
 	reg_io_latency &= 0xffff0000;
 
-	reg_4024 = 0;
+	reg_roundtrip_latency = 0;
 
 	FOR_ALL_POPULATED_RANKS {
 		int post_timA_min_high = 7, post_timA_max_high = 0;
 		int pre_timA_min_high = 7, pre_timA_max_high = 0;
 		int shift_402x = 0;
 		int shift =
-		    ctrl->timings[channel][slotrank].val_320c + full_shift;
+		    ctrl->timings[channel][slotrank].pi_coding + full_shift;
 
 		if (shift < 0)
 			shift = 0;
@@ -1028,8 +1150,8 @@
 		reg_io_latency |=
 		    (ctrl->timings[channel][slotrank].io_latency + shift_402x -
 		     post_timA_min_high) << (4 * slotrank);
-		reg_4024 |=
-		    (ctrl->timings[channel][slotrank].val_4024 +
+		reg_roundtrip_latency |=
+		    (ctrl->timings[channel][slotrank].roundtrip_latency +
 		     shift_402x) << (8 * slotrank);
 
 		FOR_ALL_LANES {
@@ -1064,49 +1186,49 @@
 				timC + shift) & 0x40) << 13));
 		}
 	}
-	MCHBAR32(0x4024 + channel * 0x400) = reg_4024;
-	MCHBAR32(SC_IO_LATENCY_C0 + channel * 0x400) = reg_io_latency;
+	MCHBAR32(SC_ROUNDT_LAT_ch(channel)) = reg_roundtrip_latency;
+	MCHBAR32(SC_IO_LATENCY_ch(channel)) = reg_io_latency;
 }
 
-static void test_timA(ramctr_timing * ctrl, int channel, int slotrank)
+static void test_timA(ramctr_timing *ctrl, int channel, int slotrank)
 {
-	wait_428c(channel);
+	wait_for_iosav(channel);
 
 	/* DRAM command MRS
 	 * write MR3 MPR enable
 	 * in this mode only RD and RDA are allowed
 	 * all reads return a predefined pattern */
-	MCHBAR32(0x4220 + channel * 0x400) = 0x1f000;
-	MCHBAR32(0x4230 + channel * 0x400) = (0xc01 | (ctrl->tMOD << 16));
-	MCHBAR32(0x4200 + channel * 0x400) = (slotrank << 24) | 0x360004;
-	MCHBAR32(0x4210 + channel * 0x400) = 0;
+	MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 0)) = 0x1f000;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 0)) = (0xc01 | (ctrl->tMOD << 16));
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 0)) = (slotrank << 24) | 0x360004;
+	MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 0)) = 0;
 
 	/* DRAM command RD */
-	MCHBAR32(0x4224 + channel * 0x400) = 0x1f105;
-	MCHBAR32(0x4234 + channel * 0x400) = 0x4040c01;
-	MCHBAR32(0x4204 + channel * 0x400) = (slotrank << 24);
-	MCHBAR32(0x4214 + channel * 0x400) = 0;
+	MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 1)) = 0x1f105;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 1)) = 0x4040c01;
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 1)) = (slotrank << 24);
+	MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 1)) = 0;
 
 	/* DRAM command RD */
-	MCHBAR32(0x4228 + channel * 0x400) = 0x1f105;
-	MCHBAR32(0x4238 + channel * 0x400) = 0x100f | ((ctrl->CAS + 36) << 16);
-	MCHBAR32(0x4208 + channel * 0x400) = (slotrank << 24) | 0x60000;
-	MCHBAR32(0x4218 + channel * 0x400) = 0;
+	MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 2)) = 0x1f105;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 2)) = 0x100f | ((ctrl->CAS + 36) << 16);
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 2)) = (slotrank << 24) | 0x60000;
+	MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 2)) = 0;
 
 	/* DRAM command MRS
 	 * write MR3 MPR disable */
-	MCHBAR32(0x422c + channel * 0x400) = 0x1f000;
-	MCHBAR32(0x423c + channel * 0x400) = 0xc01 | (ctrl->tMOD << 16);
-	MCHBAR32(0x420c + channel * 0x400) = (slotrank << 24) | 0x360000;
-	MCHBAR32(0x421c + channel * 0x400) = 0;
+	MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 3)) = 0x1f000;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 3)) = 0xc01 | (ctrl->tMOD << 16);
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 3)) = (slotrank << 24) | 0x360000;
+	MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 3)) = 0;
 
 	// execute command queue
-	MCHBAR32(0x4284 + channel * 0x400) = RUN_QUEUE_4284(4);
+	MCHBAR32(IOSAV_SEQ_CTL_ch(channel)) = IOSAV_RUN_ONCE(4);
 
-	wait_428c(channel);
+	wait_for_iosav(channel);
 }
 
-static int does_lane_work(ramctr_timing * ctrl, int channel, int slotrank,
+static int does_lane_work(ramctr_timing *ctrl, int channel, int slotrank,
 			  int lane)
 {
 	u32 timA = ctrl->timings[channel][slotrank].lanes[lane].timA;
@@ -1156,7 +1278,7 @@
 	return ret;
 }
 
-static void discover_timA_coarse(ramctr_timing * ctrl, int channel,
+static void discover_timA_coarse(ramctr_timing *ctrl, int channel,
 				 int slotrank, int *upperA)
 {
 	int timA;
@@ -1187,7 +1309,7 @@
 	}
 }
 
-static void discover_timA_fine(ramctr_timing * ctrl, int channel, int slotrank,
+static void discover_timA_fine(ramctr_timing *ctrl, int channel, int slotrank,
 			       int *upperA)
 {
 	int timA_delta;
@@ -1251,12 +1373,12 @@
 		if (all_works)
 			return 0;
 		if (!some_works) {
-			if (ctrl->timings[channel][slotrank].val_4024 < 2) {
+			if (ctrl->timings[channel][slotrank].roundtrip_latency < 2) {
 				printk(BIOS_EMERG, "402x discovery failed (1): %d, %d\n",
 				       channel, slotrank);
 				return MAKE_ERR;
 			}
-			ctrl->timings[channel][slotrank].val_4024 -= 2;
+			ctrl->timings[channel][slotrank].roundtrip_latency -= 2;
 			printram("4024 -= 2;\n");
 			continue;
 		}
@@ -1282,7 +1404,7 @@
 	int timA_min_high, timA_max_high;
 };
 
-static void pre_timA_change(ramctr_timing * ctrl, int channel, int slotrank,
+static void pre_timA_change(ramctr_timing *ctrl, int channel, int slotrank,
 			    struct timA_minmax *mnmx)
 {
 	int lane;
@@ -1303,7 +1425,7 @@
 	}
 }
 
-static void post_timA_change(ramctr_timing * ctrl, int channel, int slotrank,
+static void post_timA_change(ramctr_timing *ctrl, int channel, int slotrank,
 			     struct timA_minmax *mnmx)
 {
 	struct timA_minmax post;
@@ -1322,7 +1444,7 @@
 		shift_402x = 0;
 
 	ctrl->timings[channel][slotrank].io_latency += shift_402x;
-	ctrl->timings[channel][slotrank].val_4024 += shift_402x;
+	ctrl->timings[channel][slotrank].roundtrip_latency += shift_402x;
 	printram("4024 += %d;\n", shift_402x);
 	printram("4028 += %d;\n", shift_402x);
 }
@@ -1344,7 +1466,7 @@
  * Once the controller has detected this pattern a bit in the result register is
  * set for the current phase shift.
  */
-int read_training(ramctr_timing * ctrl)
+int read_training(ramctr_timing *ctrl)
 {
 	int channel, slotrank, lane;
 	int err;
@@ -1354,21 +1476,21 @@
 		int upperA[NUM_LANES];
 		struct timA_minmax mnmx;
 
-		wait_428c(channel);
+		wait_for_iosav(channel);
 
 		/* DRAM command PREA */
-		MCHBAR32(0x4220 + channel * 0x400) = 0x1f002;
-		MCHBAR32(0x4230 + channel * 0x400) = 0xc01 | (ctrl->tRP << 16);
-		MCHBAR32(0x4200 + channel * 0x400) = (slotrank << 24) | 0x60400;
-		MCHBAR32(0x4210 + channel * 0x400) = 0;
+		MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 0)) = 0x1f002;
+		MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 0)) = 0xc01 | (ctrl->tRP << 16);
+		MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 0)) = (slotrank << 24) | 0x60400;
+		MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 0)) = 0;
 
 		// execute command queue
-		MCHBAR32(0x4284 + channel * 0x400) = RUN_QUEUE_4284(1);
+		MCHBAR32(IOSAV_SEQ_CTL_ch(channel)) = IOSAV_RUN_ONCE(1);
 
-		MCHBAR32(0x3400) = (slotrank << 2) | 0x8001;
+		MCHBAR32(GDCRTRAININGMOD) = (slotrank << 2) | 0x8001;
 
 		ctrl->timings[channel][slotrank].io_latency = 4;
-		ctrl->timings[channel][slotrank].val_4024 = 55;
+		ctrl->timings[channel][slotrank].roundtrip_latency = 55;
 		program_timings(ctrl, channel);
 
 		discover_timA_coarse(ctrl, channel, slotrank, upperA);
@@ -1393,7 +1515,7 @@
 
 			}
 		} else if (some_high) {
-			ctrl->timings[channel][slotrank].val_4024++;
+			ctrl->timings[channel][slotrank].roundtrip_latency++;
 			ctrl->timings[channel][slotrank].io_latency++;
 			printram("4024++;\n");
 			printram("4028++;\n");
@@ -1424,7 +1546,7 @@
 		post_timA_change(ctrl, channel, slotrank, &mnmx);
 
 		printram("4/8: %d, %d, %x, %x\n", channel, slotrank,
-		       ctrl->timings[channel][slotrank].val_4024,
+		       ctrl->timings[channel][slotrank].roundtrip_latency,
 		       ctrl->timings[channel][slotrank].io_latency);
 
 		printram("final results:\n");
@@ -1433,7 +1555,7 @@
 			    lane,
 			    ctrl->timings[channel][slotrank].lanes[lane].timA);
 
-		MCHBAR32(0x3400) = 0;
+		MCHBAR32(GDCRTRAININGMOD) = 0;
 
 		toggle_io_reset();
 	}
@@ -1442,85 +1564,85 @@
 		program_timings(ctrl, channel);
 	}
 	FOR_ALL_CHANNELS FOR_ALL_POPULATED_RANKS FOR_ALL_LANES {
-		MCHBAR32(0x4080 + channel * 0x400 + lane * 4) = 0;
+		MCHBAR32(IOSAV_By_BW_MASK_ch(channel, lane)) = 0;
 	}
 	return 0;
 }
 
-static void test_timC(ramctr_timing * ctrl, int channel, int slotrank)
+static void test_timC(ramctr_timing *ctrl, int channel, int slotrank)
 {
 	int lane;
 
 	FOR_ALL_LANES {
-		MCHBAR32(0x4340 + channel * 0x400 + lane * 4) = 0;
-		MCHBAR32(0x4140 + channel * 0x400 + lane * 4);
+		MCHBAR32(IOSAV_By_ERROR_COUNT_ch(channel, lane)) = 0;
+		MCHBAR32(IOSAV_By_BW_SERROR_C_ch(channel, lane));
 	}
 
-	wait_428c(channel);
+	wait_for_iosav(channel);
 
 	/* DRAM command ACT */
-	MCHBAR32(0x4220 + channel * 0x400) = 0x1f006;
-	MCHBAR32(0x4230 + channel * 0x400) =
+	MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 0)) = 0x1f006;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 0)) =
 		(MAX((ctrl->tFAW >> 2) + 1, ctrl->tRRD) << 10)
 		| 4 | (ctrl->tRCD << 16);
-	MCHBAR32(0x4200 + channel * 0x400) = (slotrank << 24) | (6 << 16);
-	MCHBAR32(0x4210 + channel * 0x400) = 0x244;
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 0)) = (slotrank << 24) | (6 << 16);
+	MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 0)) = 0x244;
 
 	/* DRAM command NOP */
-	MCHBAR32(0x4224 + channel * 0x400) = 0x1f207;
-	MCHBAR32(0x4234 + channel * 0x400) = 0x8041001;
-	MCHBAR32(0x4204 + channel * 0x400) = (slotrank << 24) | 8;
-	MCHBAR32(0x4214 + channel * 0x400) = 0x3e0;
+	MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 1)) = 0x1f207;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 1)) = 0x8041001;
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 1)) = (slotrank << 24) | 8;
+	MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 1)) = 0x3e0;
 
 	/* DRAM command WR */
-	MCHBAR32(0x4228 + channel * 0x400) = 0x1f201;
-	MCHBAR32(0x4238 + channel * 0x400) = 0x80411f4;
-	MCHBAR32(0x4208 + channel * 0x400) = slotrank << 24;
-	MCHBAR32(0x4218 + channel * 0x400) = 0x242;
+	MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 2)) = 0x1f201;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 2)) = 0x80411f4;
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 2)) = slotrank << 24;
+	MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 2)) = 0x242;
 
 	/* DRAM command NOP */
-	MCHBAR32(0x422c + channel * 0x400) = 0x1f207;
-	MCHBAR32(0x423c + channel * 0x400) =
+	MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 3)) = 0x1f207;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 3)) =
 		0x8000c01 | ((ctrl->CWL + ctrl->tWTR + 5) << 16);
-	MCHBAR32(0x420c + channel * 0x400) = (slotrank << 24) | 8;
-	MCHBAR32(0x421c + channel * 0x400) = 0x3e0;
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 3)) = (slotrank << 24) | 8;
+	MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 3)) = 0x3e0;
 
 	// execute command queue
-	MCHBAR32(0x4284 + channel * 0x400) = RUN_QUEUE_4284(4);
+	MCHBAR32(IOSAV_SEQ_CTL_ch(channel)) = IOSAV_RUN_ONCE(4);
 
-	wait_428c(channel);
+	wait_for_iosav(channel);
 
 	/* DRAM command PREA */
-	MCHBAR32(0x4220 + channel * 0x400) = 0x1f002;
-	MCHBAR32(0x4230 + channel * 0x400) = 0xc01 | (ctrl->tRP << 16);
-	MCHBAR32(0x4200 + channel * 0x400) = (slotrank << 24) | 0x60400;
-	MCHBAR32(0x4210 + channel * 0x400) = 0x240;
+	MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 0)) = 0x1f002;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 0)) = 0xc01 | (ctrl->tRP << 16);
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 0)) = (slotrank << 24) | 0x60400;
+	MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 0)) = 0x240;
 
 	/* DRAM command ACT */
-	MCHBAR32(0x4224 + channel * 0x400) = 0x1f006;
-	MCHBAR32(0x4234 + channel * 0x400) =
+	MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 1)) = 0x1f006;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 1)) =
 		(MAX(ctrl->tRRD, (ctrl->tFAW >> 2) + 1) << 10)
 		| 8 | (ctrl->CAS << 16);
-	MCHBAR32(0x4204 + channel * 0x400) = (slotrank << 24) | 0x60000;
-	MCHBAR32(0x4214 + channel * 0x400) = 0x244;
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 1)) = (slotrank << 24) | 0x60000;
+	MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 1)) = 0x244;
 
 	/* DRAM command RD */
-	MCHBAR32(0x4228 + channel * 0x400) = 0x1f105;
-	MCHBAR32(0x4238 + channel * 0x400) =
+	MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 2)) = 0x1f105;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 2)) =
 		0x40011f4 | (MAX(ctrl->tRTP, 8) << 16);
-	MCHBAR32(0x4208 + channel * 0x400) = (slotrank << 24);
-	MCHBAR32(0x4218 + channel * 0x400) = 0x242;
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 2)) = (slotrank << 24);
+	MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 2)) = 0x242;
 
 	/* DRAM command PREA */
-	MCHBAR32(0x422c + channel * 0x400) = 0x1f002;
-	MCHBAR32(0x423c + channel * 0x400) = 0xc01 | (ctrl->tRP << 16);
-	MCHBAR32(0x420c + channel * 0x400) = (slotrank << 24) | 0x60400;
-	MCHBAR32(0x421c + channel * 0x400) = 0x240;
+	MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 3)) = 0x1f002;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 3)) = 0xc01 | (ctrl->tRP << 16);
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 3)) = (slotrank << 24) | 0x60400;
+	MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 3)) = 0x240;
 
 	// execute command queue
-	MCHBAR32(0x4284 + channel * 0x400) = RUN_QUEUE_4284(4);
+	MCHBAR32(IOSAV_SEQ_CTL_ch(channel)) = IOSAV_RUN_ONCE(4);
 
-	wait_428c(channel);
+	wait_for_iosav(channel);
 }
 
 static void timC_threshold_process(int *data, const int count)
@@ -1547,16 +1669,16 @@
 	int statistics[NUM_LANES][MAX_TIMC + 1];
 	int lane;
 
-	wait_428c(channel);
+	wait_for_iosav(channel);
 
 	/* DRAM command PREA */
-	MCHBAR32(0x4220 + channel * 0x400) = 0x1f002;
-	MCHBAR32(0x4230 + channel * 0x400) = 0xc01 | (ctrl->tRP << 16);
-	MCHBAR32(0x4200 + channel * 0x400) = (slotrank << 24) | 0x60400;
-	MCHBAR32(0x4210 + channel * 0x400) = 0x240;
+	MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 0)) = 0x1f002;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 0)) = 0xc01 | (ctrl->tRP << 16);
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 0)) = (slotrank << 24) | 0x60400;
+	MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 0)) = 0x240;
 
 	// execute command queue
-	MCHBAR32(0x4284 + channel * 0x400) = RUN_QUEUE_4284(1);
+	MCHBAR32(IOSAV_SEQ_CTL_ch(channel)) = IOSAV_RUN_ONCE(1);
 
 	for (timC = 0; timC <= MAX_TIMC; timC++) {
 		FOR_ALL_LANES ctrl->timings[channel][slotrank].lanes[lane].
@@ -1567,7 +1689,7 @@
 
 		FOR_ALL_LANES {
 			statistics[lane][timC] =
-				MCHBAR32(0x4340 + channel * 0x400 + lane * 4);
+				MCHBAR32(IOSAV_By_ERROR_COUNT_ch(channel, lane));
 		}
 	}
 	FOR_ALL_LANES {
@@ -1596,7 +1718,7 @@
 	return 0;
 }
 
-static int get_precedening_channels(ramctr_timing * ctrl, int target_channel)
+static int get_precedening_channels(ramctr_timing *ctrl, int target_channel)
 {
 	int channel, ret = 0;
 	FOR_ALL_POPULATED_CHANNELS if (channel < target_channel)
@@ -1604,7 +1726,7 @@
 	return ret;
 }
 
-static void fill_pattern0(ramctr_timing * ctrl, int channel, u32 a, u32 b)
+static void fill_pattern0(ramctr_timing *ctrl, int channel, u32 a, u32 b)
 {
 	unsigned int j;
 	unsigned int channel_offset =
@@ -1614,7 +1736,7 @@
 	sfence();
 }
 
-static int num_of_channels(const ramctr_timing * ctrl)
+static int num_of_channels(const ramctr_timing *ctrl)
 {
 	int ret = 0;
 	int channel;
@@ -1622,7 +1744,7 @@
 	return ret;
 }
 
-static void fill_pattern1(ramctr_timing * ctrl, int channel)
+static void fill_pattern1(ramctr_timing *ctrl, int channel)
 {
 	unsigned int j;
 	unsigned int channel_offset =
@@ -1635,7 +1757,7 @@
 	sfence();
 }
 
-static void precharge(ramctr_timing * ctrl)
+static void precharge(ramctr_timing *ctrl)
 {
 	int channel, slotrank, lane;
 
@@ -1650,47 +1772,47 @@
 		program_timings(ctrl, channel);
 
 		FOR_ALL_POPULATED_RANKS {
-			wait_428c(channel);
+			wait_for_iosav(channel);
 
 			/* DRAM command MRS
 			 * write MR3 MPR enable
 			 * in this mode only RD and RDA are allowed
 			 * all reads return a predefined pattern */
-			MCHBAR32(0x4220 + channel * 0x400) = 0x1f000;
-			MCHBAR32(0x4230 + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 0)) = 0x1f000;
+			MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 0)) =
 				0xc01 | (ctrl->tMOD << 16);
-			MCHBAR32(0x4200 + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 0)) =
 				(slotrank << 24) | 0x360004;
-			MCHBAR32(0x4210 + channel * 0x400) = 0;
+			MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 0)) = 0;
 
 			/* DRAM command RD */
-			MCHBAR32(0x4224 + channel * 0x400) = 0x1f105;
-			MCHBAR32(0x4234 + channel * 0x400) = 0x4041003;
-			MCHBAR32(0x4204 + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 1)) = 0x1f105;
+			MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 1)) = 0x4041003;
+			MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 1)) =
 				(slotrank << 24) | 0;
-			MCHBAR32(0x4214 + channel * 0x400) = 0;
+			MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 1)) = 0;
 
 			/* DRAM command RD */
-			MCHBAR32(0x4228 + channel * 0x400) = 0x1f105;
-			MCHBAR32(0x4238 + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 2)) = 0x1f105;
+			MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 2)) =
 				0x1001 | ((ctrl->CAS + 8) << 16);
-			MCHBAR32(0x4208 + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 2)) =
 				(slotrank << 24) | 0x60000;
-			MCHBAR32(0x4218 + channel * 0x400) = 0;
+			MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 2)) = 0;
 
 			/* DRAM command MRS
 			 * write MR3 MPR disable */
-			MCHBAR32(0x422c + channel * 0x400) = 0x1f000;
-			MCHBAR32(0x423c + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 3)) = 0x1f000;
+			MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 3)) =
 				0xc01 | (ctrl->tMOD << 16);
-			MCHBAR32(0x420c + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 3)) =
 				(slotrank << 24) | 0x360000;
-			MCHBAR32(0x421c + channel * 0x400) = 0;
+			MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 3)) = 0;
 
 			// execute command queue
-			MCHBAR32(0x4284 + channel * 0x400) = RUN_QUEUE_4284(4);
+			MCHBAR32(IOSAV_SEQ_CTL_ch(channel)) = IOSAV_RUN_ONCE(4);
 
-			wait_428c(channel);
+			wait_for_iosav(channel);
 		}
 
 		FOR_ALL_POPULATED_RANKS FOR_ALL_LANES {
@@ -1703,75 +1825,75 @@
 		program_timings(ctrl, channel);
 
 		FOR_ALL_POPULATED_RANKS {
-			wait_428c(channel);
+			wait_for_iosav(channel);
 			/* DRAM command MRS
 			 * write MR3 MPR enable
 			 * in this mode only RD and RDA are allowed
 			 * all reads return a predefined pattern */
-			MCHBAR32(0x4220 + channel * 0x400) = 0x1f000;
-			MCHBAR32(0x4230 + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 0)) = 0x1f000;
+			MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 0)) =
 				0xc01 | (ctrl->tMOD << 16);
-			MCHBAR32(0x4200 + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 0)) =
 				(slotrank << 24) | 0x360004;
-			MCHBAR32(0x4210 + channel * 0x400) = 0;
+			MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 0)) = 0;
 
 			/* DRAM command RD */
-			MCHBAR32(0x4224 + channel * 0x400) = 0x1f105;
-			MCHBAR32(0x4234 + channel * 0x400) = 0x4041003;
-			MCHBAR32(0x4204 + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 1)) = 0x1f105;
+			MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 1)) = 0x4041003;
+			MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 1)) =
 				(slotrank << 24) | 0;
-			MCHBAR32(0x4214 + channel * 0x400) = 0;
+			MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 1)) = 0;
 
 			/* DRAM command RD */
-			MCHBAR32(0x4228 + channel * 0x400) = 0x1f105;
-			MCHBAR32(0x4238 + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 2)) = 0x1f105;
+			MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 2)) =
 				0x1001 | ((ctrl->CAS + 8) << 16);
-			MCHBAR32(0x4208 + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 2)) =
 				(slotrank << 24) | 0x60000;
-			MCHBAR32(0x4218 + channel * 0x400) = 0;
+			MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 2)) = 0;
 
 			/* DRAM command MRS
 			 * write MR3 MPR disable */
-			MCHBAR32(0x422c + channel * 0x400) = 0x1f000;
-			MCHBAR32(0x423c + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 3)) = 0x1f000;
+			MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 3)) =
 				0xc01 | (ctrl->tMOD << 16);
-			MCHBAR32(0x420c + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 3)) =
 				(slotrank << 24) | 0x360000;
-			MCHBAR32(0x421c + channel * 0x400) = 0;
+			MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 3)) = 0;
 
 			// execute command queue
-			MCHBAR32(0x4284 + channel * 0x400) = RUN_QUEUE_4284(4);
+			MCHBAR32(IOSAV_SEQ_CTL_ch(channel)) = IOSAV_RUN_ONCE(4);
 
-			wait_428c(channel);
+			wait_for_iosav(channel);
 		}
 	}
 }
 
-static void test_timB(ramctr_timing * ctrl, int channel, int slotrank)
+static void test_timB(ramctr_timing *ctrl, int channel, int slotrank)
 {
 	/* enable DQs on this slotrank */
 	write_mrreg(ctrl, channel, slotrank, 1,
 		    0x80 | make_mr1(ctrl, slotrank, channel));
 
-	wait_428c(channel);
+	wait_for_iosav(channel);
 	/* DRAM command NOP */
-	MCHBAR32(0x4220 + channel * 0x400) = 0x1f207;
-	MCHBAR32(0x4230 + channel * 0x400) =
+	MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 0)) = 0x1f207;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 0)) =
 		0x8000c01 | ((ctrl->CWL + ctrl->tWLO) << 16);
-	MCHBAR32(0x4200 + channel * 0x400) = 8 | (slotrank << 24);
-	MCHBAR32(0x4210 + channel * 0x400) = 0;
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 0)) = 8 | (slotrank << 24);
+	MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 0)) = 0;
 
 	/* DRAM command NOP */
-	MCHBAR32(0x4224 + channel * 0x400) = 0x1f107;
-	MCHBAR32(0x4234 + channel * 0x400) =
+	MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 1)) = 0x1f107;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 1)) =
 		0x4000c01 | ((ctrl->CAS + 38) << 16);
-	MCHBAR32(0x4204 + channel * 0x400) = (slotrank << 24) | 4;
-	MCHBAR32(0x4214 + channel * 0x400) = 0;
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 1)) = (slotrank << 24) | 4;
+	MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 1)) = 0;
 
 	// execute command queue
-	MCHBAR32(0x4284 + channel * 0x400) = RUN_QUEUE_4284(2);
+	MCHBAR32(IOSAV_SEQ_CTL_ch(channel)) = IOSAV_RUN_ONCE(2);
 
-	wait_428c(channel);
+	wait_for_iosav(channel);
 
 	/* disable DQs on this slotrank */
 	write_mrreg(ctrl, channel, slotrank, 1,
@@ -1784,7 +1906,7 @@
 	int statistics[NUM_LANES][128];
 	int lane;
 
-	MCHBAR32(0x3400) = 0x108052 | (slotrank << 2);
+	MCHBAR32(GDCRTRAININGMOD) = 0x108052 | (slotrank << 2);
 
 	for (timB = 0; timB < 128; timB++) {
 		FOR_ALL_LANES {
@@ -1850,77 +1972,77 @@
 	return 8;
 }
 
-static void adjust_high_timB(ramctr_timing * ctrl)
+static void adjust_high_timB(ramctr_timing *ctrl)
 {
 	int channel, slotrank, lane, old;
-	MCHBAR32(0x3400) = 0x200;
+	MCHBAR32(GDCRTRAININGMOD) = 0x200;
 	FOR_ALL_POPULATED_CHANNELS {
 		fill_pattern1(ctrl, channel);
-		MCHBAR32(0x4288 + channel * 0x400) = 1;
+		MCHBAR32(IOSAV_DATA_CTL_ch(channel)) = 1;
 	}
 	FOR_ALL_POPULATED_CHANNELS FOR_ALL_POPULATED_RANKS {
 
-		MCHBAR32(0x4288 + channel * 0x400) = 0x10001;
+		MCHBAR32(IOSAV_DATA_CTL_ch(channel)) = 0x10001;
 
-		wait_428c(channel);
+		wait_for_iosav(channel);
 
 		/* DRAM command ACT */
-		MCHBAR32(0x4220 + channel * 0x400) = 0x1f006;
-		MCHBAR32(0x4230 + channel * 0x400) = 0xc01 | (ctrl->tRCD << 16);
-		MCHBAR32(0x4200 + channel * 0x400) = (slotrank << 24) | 0x60000;
-		MCHBAR32(0x4210 + channel * 0x400) = 0;
+		MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 0)) = 0x1f006;
+		MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 0)) = 0xc01 | (ctrl->tRCD << 16);
+		MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 0)) = (slotrank << 24) | 0x60000;
+		MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 0)) = 0;
 
 		/* DRAM command NOP */
-		MCHBAR32(0x4224 + channel * 0x400) = 0x1f207;
-		MCHBAR32(0x4234 + channel * 0x400) = 0x8040c01;
-		MCHBAR32(0x4204 + channel * 0x400) = (slotrank << 24) | 0x8;
-		MCHBAR32(0x4214 + channel * 0x400) = 0x3e0;
+		MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 1)) = 0x1f207;
+		MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 1)) = 0x8040c01;
+		MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 1)) = (slotrank << 24) | 0x8;
+		MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 1)) = 0x3e0;
 
 		/* DRAM command WR */
-		MCHBAR32(0x4228 + channel * 0x400) = 0x1f201;
-		MCHBAR32(0x4238 + channel * 0x400) = 0x8041003;
-		MCHBAR32(0x4208 + channel * 0x400) = (slotrank << 24);
-		MCHBAR32(0x4218 + channel * 0x400) = 0x3e2;
+		MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 2)) = 0x1f201;
+		MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 2)) = 0x8041003;
+		MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 2)) = (slotrank << 24);
+		MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 2)) = 0x3e2;
 
 		/* DRAM command NOP */
-		MCHBAR32(0x422c + channel * 0x400) = 0x1f207;
-		MCHBAR32(0x423c + channel * 0x400) =
+		MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 3)) = 0x1f207;
+		MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 3)) =
 			0x8000c01 | ((ctrl->CWL + ctrl->tWTR + 5) << 16);
-		MCHBAR32(0x420c + channel * 0x400) = (slotrank << 24) | 0x8;
-		MCHBAR32(0x421c + channel * 0x400) = 0x3e0;
+		MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 3)) = (slotrank << 24) | 0x8;
+		MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 3)) = 0x3e0;
 
 		// execute command queue
-		MCHBAR32(0x4284 + channel * 0x400) = RUN_QUEUE_4284(4);
+		MCHBAR32(IOSAV_SEQ_CTL_ch(channel)) = IOSAV_RUN_ONCE(4);
 
-		wait_428c(channel);
+		wait_for_iosav(channel);
 
 		/* DRAM command PREA */
-		MCHBAR32(0x4220 + channel * 0x400) = 0x1f002;
-		MCHBAR32(0x4230 + channel * 0x400) =
+		MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 0)) = 0x1f002;
+		MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 0)) =
 			0xc01 | ((ctrl->tRP) << 16);
-		MCHBAR32(0x4200 + channel * 0x400) =
+		MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 0)) =
 			(slotrank << 24) | 0x60400;
-		MCHBAR32(0x4210 + channel * 0x400) = 0x240;
+		MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 0)) = 0x240;
 
 		/* DRAM command ACT */
-		MCHBAR32(0x4224 + channel * 0x400) = 0x1f006;
-		MCHBAR32(0x4234 + channel * 0x400) =
+		MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 1)) = 0x1f006;
+		MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 1)) =
 			0xc01 | ((ctrl->tRCD) << 16);
-		MCHBAR32(0x4204 + channel * 0x400) = (slotrank << 24) | 0x60000;
-		MCHBAR32(0x4214 + channel * 0x400) = 0;
+		MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 1)) = (slotrank << 24) | 0x60000;
+		MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 1)) = 0;
 
 		/* DRAM command RD */
-		MCHBAR32(0x4228 + channel * 0x400) = 0x3f105;
-		MCHBAR32(0x4238 + channel * 0x400) = 0x4000c01 | ((ctrl->tRP +
-			  ctrl->timings[channel][slotrank].val_4024 +
+		MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 2)) = 0x3f105;
+		MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 2)) = 0x4000c01 | ((ctrl->tRP +
+			  ctrl->timings[channel][slotrank].roundtrip_latency +
 			  ctrl->timings[channel][slotrank].io_latency) << 16);
-		MCHBAR32(0x4208 + channel * 0x400) = (slotrank << 24) | 0x60008;
-		MCHBAR32(0x4218 + channel * 0x400) = 0;
+		MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 2)) = (slotrank << 24) | 0x60008;
+		MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 2)) = 0;
 
 		// execute command queue
-		MCHBAR32(0x4284 + channel * 0x400) = RUN_QUEUE_4284(3);
+		MCHBAR32(IOSAV_SEQ_CTL_ch(channel)) = IOSAV_RUN_ONCE(3);
 
-		wait_428c(channel);
+		wait_for_iosav(channel);
 		FOR_ALL_LANES {
 			u64 res = MCHBAR32(lane_registers[lane] +
 				channel * 0x100 + 4);
@@ -1937,28 +2059,28 @@
 				timB);
 		}
 	}
-	MCHBAR32(0x3400) = 0;
+	MCHBAR32(GDCRTRAININGMOD) = 0;
 }
 
-static void write_op(ramctr_timing * ctrl, int channel)
+static void write_op(ramctr_timing *ctrl, int channel)
 {
 	int slotrank;
 
-	wait_428c(channel);
+	wait_for_iosav(channel);
 
 	/* choose an existing rank.  */
 	slotrank = !(ctrl->rankmap[channel] & 1) ? 2 : 0;
 
 	/* DRAM command ACT */
-	MCHBAR32(0x4220 + channel * 0x400) = 0x0f003;
-	MCHBAR32(0x4230 + channel * 0x400) = 0x41001;
-	MCHBAR32(0x4200 + channel * 0x400) = (slotrank << 24) | 0x60000;
-	MCHBAR32(0x4210 + channel * 0x400) = 0x3e0;
+	MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 0)) = 0x0f003;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 0)) = 0x41001;
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 0)) = (slotrank << 24) | 0x60000;
+	MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 0)) = 0x3e0;
 
 	// execute command queue
-	MCHBAR32(0x4284 + channel * 0x400) = RUN_QUEUE_4284(1);
+	MCHBAR32(IOSAV_SEQ_CTL_ch(channel)) = IOSAV_RUN_ONCE(1);
 
-	wait_428c(channel);
+	wait_for_iosav(channel);
 }
 
 /* Compensate the skew between CMD/ADDR/CLK and DQ/DQS lanes.
@@ -1973,21 +2095,21 @@
  * In this mode the DRAM-chip samples the CLK on every DQS edge and feeds back the
  * sampled value on the data lanes (DQs).
  */
-int write_training(ramctr_timing * ctrl)
+int write_training(ramctr_timing *ctrl)
 {
 	int channel, slotrank, lane;
 	int err;
 
 	FOR_ALL_POPULATED_CHANNELS
-		MCHBAR32_OR(0x4008 + channel * 0x400, 0x8000000);
+		MCHBAR32_OR(TC_RWP_ch(channel), 0x8000000);
 
 	FOR_ALL_POPULATED_CHANNELS {
 		write_op(ctrl, channel);
-		MCHBAR32_OR(0x4020 + channel * 0x400, 0x200000);
+		MCHBAR32_OR(SCHED_CBIT_ch(channel), 0x200000);
 	}
 
 	/* refresh disable */
-	MCHBAR32_AND(0x5030, ~8);
+	MCHBAR32_AND(MC_INIT_STATE_G, ~8);
 	FOR_ALL_POPULATED_CHANNELS {
 		write_op(ctrl, channel);
 	}
@@ -2000,7 +2122,7 @@
 			write_mrreg(ctrl, channel, slotrank, 1,
 				make_mr1(ctrl, slotrank, channel) | 0x1080);
 
-	MCHBAR32(0x3400) = 0x108052;
+	MCHBAR32(GDCRTRAININGMOD) = 0x108052;
 
 	toggle_io_reset();
 
@@ -2016,29 +2138,29 @@
 		write_mrreg(ctrl, channel,
 			slotrank, 1, make_mr1(ctrl, slotrank, channel));
 
-	MCHBAR32(0x3400) = 0;
+	MCHBAR32(GDCRTRAININGMOD) = 0;
 
 	FOR_ALL_POPULATED_CHANNELS
-		wait_428c(channel);
+		wait_for_iosav(channel);
 
 	/* refresh enable */
-	MCHBAR32_OR(0x5030, 8);
+	MCHBAR32_OR(MC_INIT_STATE_G, 8);
 
 	FOR_ALL_POPULATED_CHANNELS {
-		MCHBAR32_AND(0x4020 + channel * 0x400, ~0x00200000);
-		MCHBAR32(0x428c + channel * 0x400);
-		wait_428c(channel);
+		MCHBAR32_AND(SCHED_CBIT_ch(channel), ~0x00200000);
+		MCHBAR32(IOSAV_STATUS_ch(channel));
+		wait_for_iosav(channel);
 
 		/* DRAM command ZQCS */
-		MCHBAR32(0x4220 + channel * 0x400) = 0x0f003;
-		MCHBAR32(0x4230 + channel * 0x400) = 0x659001;
-		MCHBAR32(0x4200 + channel * 0x400) = 0x60000;
-		MCHBAR32(0x4210 + channel * 0x400) = 0x3e0;
+		MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 0)) = 0x0f003;
+		MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 0)) = 0x659001;
+		MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 0)) = 0x60000;
+		MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 0)) = 0x3e0;
 
 		// execute command queue
-		MCHBAR32(0x4284 + channel * 0x400) = RUN_QUEUE_4284(1);
+		MCHBAR32(IOSAV_SEQ_CTL_ch(channel)) = IOSAV_RUN_ONCE(1);
 
-		wait_428c(channel);
+		wait_for_iosav(channel);
 	}
 
 	toggle_io_reset();
@@ -2048,12 +2170,12 @@
 	printram("CPF\n");
 
 	FOR_ALL_CHANNELS FOR_ALL_POPULATED_RANKS FOR_ALL_LANES {
-		MCHBAR32_AND(0x4080 + channel * 0x400 + lane * 4, 0);
+		MCHBAR32_AND(IOSAV_By_BW_MASK_ch(channel, lane), 0);
 	}
 
 	FOR_ALL_POPULATED_CHANNELS {
 		fill_pattern0(ctrl, channel, 0xaaaaaaaa, 0x55555555);
-		MCHBAR32(0x4288 + channel * 0x400) = 0;
+		MCHBAR32(IOSAV_DATA_CTL_ch(channel)) = 0;
 	}
 
 	FOR_ALL_CHANNELS FOR_ALL_POPULATED_RANKS {
@@ -2072,12 +2194,12 @@
 		program_timings(ctrl, channel);
 
 	FOR_ALL_CHANNELS FOR_ALL_POPULATED_RANKS FOR_ALL_LANES {
-		MCHBAR32_AND(0x4080 + channel * 0x400 + lane * 4, 0);
+		MCHBAR32_AND(IOSAV_By_BW_MASK_ch(channel, lane), 0);
 	}
 	return 0;
 }
 
-static int test_320c(ramctr_timing * ctrl, int channel, int slotrank)
+static int test_320c(ramctr_timing *ctrl, int channel, int slotrank)
 {
 	struct ram_rank_timings saved_rt = ctrl->timings[channel][slotrank];
 	int timC_delta;
@@ -2092,49 +2214,49 @@
 		}
 		program_timings(ctrl, channel);
 		FOR_ALL_LANES {
-			MCHBAR32(4 * lane + 0x4f40) = 0;
+			MCHBAR32(IOSAV_By_ERROR_COUNT(lane)) = 0;
 		}
 
-		MCHBAR32(0x4288 + channel * 0x400) = 0x1f;
+		MCHBAR32(IOSAV_DATA_CTL_ch(channel)) = 0x1f;
 
-		wait_428c(channel);
+		wait_for_iosav(channel);
 		/* DRAM command ACT */
-		MCHBAR32(0x4220 + channel * 0x400) = 0x1f006;
-		MCHBAR32(0x4230 + channel * 0x400) =
+		MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 0)) = 0x1f006;
+		MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 0)) =
 			((MAX(ctrl->tRRD, (ctrl->tFAW >> 2) + 1)) << 10)
 			| 8 | (ctrl->tRCD << 16);
-		MCHBAR32(0x4200 + channel * 0x400) =
+		MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 0)) =
 			(slotrank << 24) | ctr | 0x60000;
-		MCHBAR32(0x4210 + channel * 0x400) = 0x244;
+		MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 0)) = 0x244;
 
 		/* DRAM command WR */
-		MCHBAR32(0x4224 + channel * 0x400) = 0x1f201;
-		MCHBAR32(0x4234 + channel * 0x400) =
+		MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 1)) = 0x1f201;
+		MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 1)) =
 			0x8001020 | ((ctrl->CWL + ctrl->tWTR + 8) << 16);
-		MCHBAR32(0x4204 + channel * 0x400) = (slotrank << 24);
-		MCHBAR32(0x4244 + channel * 0x400) = 0x389abcd;
-		MCHBAR32(0x4214 + channel * 0x400) = 0x20e42;
+		MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 1)) = (slotrank << 24);
+		MCHBAR32(IOSAV_n_ADDRESS_LFSR_ch(channel, 1)) = 0x389abcd;
+		MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 1)) = 0x20e42;
 
 		/* DRAM command RD */
-		MCHBAR32(0x4228 + channel * 0x400) = 0x1f105;
-		MCHBAR32(0x4238 + channel * 0x400) =
+		MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 2)) = 0x1f105;
+		MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 2)) =
 			0x4001020 | (MAX(ctrl->tRTP, 8) << 16);
-		MCHBAR32(0x4208 + channel * 0x400) = (slotrank << 24);
-		MCHBAR32(0x4248 + channel * 0x400) = 0x389abcd;
-		MCHBAR32(0x4218 + channel * 0x400) = 0x20e42;
+		MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 2)) = (slotrank << 24);
+		MCHBAR32(IOSAV_n_ADDRESS_LFSR_ch(channel, 2)) = 0x389abcd;
+		MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 2)) = 0x20e42;
 
 		/* DRAM command PRE */
-		MCHBAR32(0x422c + channel * 0x400) = 0x1f002;
-		MCHBAR32(0x423c + channel * 0x400) = 0xf1001;
-		MCHBAR32(0x420c + channel * 0x400) = (slotrank << 24) | 0x60400;
-		MCHBAR32(0x421c + channel * 0x400) = 0x240;
+		MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 3)) = 0x1f002;
+		MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 3)) = 0xf1001;
+		MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 3)) = (slotrank << 24) | 0x60400;
+		MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 3)) = 0x240;
 
 		// execute command queue
-		MCHBAR32(0x4284 + channel * 0x400) = RUN_QUEUE_4284(4);
+		MCHBAR32(IOSAV_SEQ_CTL_ch(channel)) = IOSAV_RUN_ONCE(4);
 
-		wait_428c(channel);
+		wait_for_iosav(channel);
 		FOR_ALL_LANES {
-			u32 r32 = MCHBAR32(0x4340 + channel * 0x400 + lane * 4);
+			u32 r32 = MCHBAR32(IOSAV_By_ERROR_COUNT_ch(channel, lane));
 
 			if (r32 == 0)
 				lanes_ok |= 1 << lane;
@@ -2151,7 +2273,7 @@
 
 #include "raminit_patterns.h"
 
-static void fill_pattern5(ramctr_timing * ctrl, int channel, int patno)
+static void fill_pattern5(ramctr_timing *ctrl, int channel, int patno)
 {
 	unsigned int i, j;
 	unsigned int channel_offset =
@@ -2181,47 +2303,47 @@
 	}
 }
 
-static void reprogram_320c(ramctr_timing * ctrl)
+static void reprogram_320c(ramctr_timing *ctrl)
 {
 	int channel, slotrank;
 
 	FOR_ALL_POPULATED_CHANNELS {
-		wait_428c(channel);
+		wait_for_iosav(channel);
 
 		/* choose an existing rank.  */
 		slotrank = !(ctrl->rankmap[channel] & 1) ? 2 : 0;
 
 		/* DRAM command ZQCS */
-		MCHBAR32(0x4220 + channel * 0x400) = 0x0f003;
-		MCHBAR32(0x4230 + channel * 0x400) = 0x41001;
-		MCHBAR32(0x4200 + channel * 0x400) = (slotrank << 24) | 0x60000;
-		MCHBAR32(0x4210 + channel * 0x400) = 0x3e0;
+		MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 0)) = 0x0f003;
+		MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 0)) = 0x41001;
+		MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 0)) = (slotrank << 24) | 0x60000;
+		MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 0)) = 0x3e0;
 
 		// execute command queue
-		MCHBAR32(0x4284 + channel * 0x400) = RUN_QUEUE_4284(1);
+		MCHBAR32(IOSAV_SEQ_CTL_ch(channel)) = IOSAV_RUN_ONCE(1);
 
-		wait_428c(channel);
-		MCHBAR32_OR(0x4020 + channel * 0x400, 0x200000);
+		wait_for_iosav(channel);
+		MCHBAR32_OR(SCHED_CBIT_ch(channel), 0x200000);
 	}
 
 	/* refresh disable */
-	MCHBAR32_AND(0x5030, ~8);
+	MCHBAR32_AND(MC_INIT_STATE_G, ~8);
 	FOR_ALL_POPULATED_CHANNELS {
-		wait_428c(channel);
+		wait_for_iosav(channel);
 
 		/* choose an existing rank.  */
 		slotrank = !(ctrl->rankmap[channel] & 1) ? 2 : 0;
 
 		/* DRAM command ZQCS */
-		MCHBAR32(0x4220 + channel * 0x400) = 0x0f003;
-		MCHBAR32(0x4230 + channel * 0x400) = 0x41001;
-		MCHBAR32(0x4200 + channel * 0x400) = (slotrank << 24) | 0x60000;
-		MCHBAR32(0x4210 + channel * 0x400) = 0x3e0;
+		MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 0)) = 0x0f003;
+		MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 0)) = 0x41001;
+		MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 0)) = (slotrank << 24) | 0x60000;
+		MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 0)) = 0x3e0;
 
 		// execute command queue
-		MCHBAR32(0x4284 + channel * 0x400) = RUN_QUEUE_4284(1);
+		MCHBAR32(IOSAV_SEQ_CTL_ch(channel)) = IOSAV_RUN_ONCE(1);
 
-		wait_428c(channel);
+		wait_for_iosav(channel);
 	}
 
 	/* jedec reset */
@@ -2251,7 +2373,7 @@
 
 	ctrl->cmd_stretch[channel] = cmd_stretch;
 
-	MCHBAR32(0x4004 + channel * 0x400) =
+	MCHBAR32(TC_RAP_ch(channel)) =
 		ctrl->tRRD
 		| (ctrl->tRTP << 4)
 		| (ctrl->tCKE << 8)
@@ -2266,12 +2388,12 @@
 		delta = 4;
 
 	FOR_ALL_POPULATED_RANKS {
-		ctrl->timings[channel][slotrank].val_4024 -= delta;
+		ctrl->timings[channel][slotrank].roundtrip_latency -= delta;
 	}
 
 	for (c320c = -127; c320c <= 127; c320c++) {
 		FOR_ALL_POPULATED_RANKS {
-			ctrl->timings[channel][slotrank].val_320c = c320c;
+			ctrl->timings[channel][slotrank].pi_coding = c320c;
 		}
 		program_timings(ctrl, channel);
 		reprogram_320c(ctrl);
@@ -2283,7 +2405,7 @@
 	FOR_ALL_POPULATED_RANKS {
 		struct run rn =
 			get_longest_zero_run(stat[slotrank], 255);
-		ctrl->timings[channel][slotrank].val_320c = rn.middle - 127;
+		ctrl->timings[channel][slotrank].pi_coding = rn.middle - 127;
 		printram("cmd_stretch: %d, %d: 0x%02x-0x%02x-0x%02x\n",
 				 channel, slotrank, rn.start, rn.middle, rn.end);
 		if (rn.all || rn.length < MIN_C320C_LEN) {
@@ -2307,7 +2429,7 @@
 
 	FOR_ALL_POPULATED_CHANNELS {
 		fill_pattern5(ctrl, channel, 0);
-		MCHBAR32(0x4288 + channel * 0x400) = 0x1f;
+		MCHBAR32(IOSAV_DATA_CTL_ch(channel)) = 0x1f;
 	}
 
 	FOR_ALL_POPULATED_CHANNELS {
@@ -2371,50 +2493,50 @@
 		program_timings(ctrl, channel);
 
 		FOR_ALL_LANES {
-			MCHBAR32(0x4340 + channel * 0x400 + lane * 4) = 0;
-			MCHBAR32(0x4140 + channel * 0x400 + lane * 4);
+			MCHBAR32(IOSAV_By_ERROR_COUNT_ch(channel, lane)) = 0;
+			MCHBAR32(IOSAV_By_BW_SERROR_C_ch(channel, lane));
 		}
 
-		wait_428c(channel);
+		wait_for_iosav(channel);
 		/* DRAM command MRS
 		 * write MR3 MPR enable
 		 * in this mode only RD and RDA are allowed
 		 * all reads return a predefined pattern */
-		MCHBAR32(0x4220 + channel * 0x400) = 0x1f000;
-		MCHBAR32(0x4230 + channel * 0x400) = 0xc01 | (ctrl->tMOD << 16);
-		MCHBAR32(0x4200 + channel * 0x400) =
+		MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 0)) = 0x1f000;
+		MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 0)) = 0xc01 | (ctrl->tMOD << 16);
+		MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 0)) =
 			(slotrank << 24) | 0x360004;
-		MCHBAR32(0x4210 + channel * 0x400) = 0;
+		MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 0)) = 0;
 
 		/* DRAM command RD */
-		MCHBAR32(0x4224 + channel * 0x400) = 0x1f105;
-		MCHBAR32(0x4234 + channel * 0x400) = 0x40411f4;
-		MCHBAR32(0x4204 + channel * 0x400) = slotrank << 24;
-		MCHBAR32(0x4214 + channel * 0x400) = 0;
+		MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 1)) = 0x1f105;
+		MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 1)) = 0x40411f4;
+		MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 1)) = slotrank << 24;
+		MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 1)) = 0;
 
 		/* DRAM command RD */
-		MCHBAR32(0x4228 + channel * 0x400) = 0x1f105;
-		MCHBAR32(0x4238 + channel * 0x400) =
+		MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 2)) = 0x1f105;
+		MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 2)) =
 			0x1001 | ((ctrl->CAS + 8) << 16);
-		MCHBAR32(0x4208 + channel * 0x400) = (slotrank << 24) | 0x60000;
-		MCHBAR32(0x4218 + channel * 0x400) = 0;
+		MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 2)) = (slotrank << 24) | 0x60000;
+		MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 2)) = 0;
 
 		/* DRAM command MRS
 		 * MR3 disable MPR */
-		MCHBAR32(0x422c + channel * 0x400) = 0x1f000;
-		MCHBAR32(0x423c + channel * 0x400) = 0xc01 | (ctrl->tMOD << 16);
-		MCHBAR32(0x420c + channel * 0x400) =
+		MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 3)) = 0x1f000;
+		MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 3)) = 0xc01 | (ctrl->tMOD << 16);
+		MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 3)) =
 			(slotrank << 24) | 0x360000;
-		MCHBAR32(0x421c + channel * 0x400) = 0;
+		MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 3)) = 0;
 
 		// execute command queue
-		MCHBAR32(0x4284 + channel * 0x400) = RUN_QUEUE_4284(4);
+		MCHBAR32(IOSAV_SEQ_CTL_ch(channel)) = IOSAV_RUN_ONCE(4);
 
-		wait_428c(channel);
+		wait_for_iosav(channel);
 
 		FOR_ALL_LANES {
 			statistics[lane][edge] =
-				MCHBAR32(0x4340 + channel * 0x400 + lane * 4);
+				MCHBAR32(IOSAV_By_ERROR_COUNT_ch(channel, lane));
 		}
 	}
 	FOR_ALL_LANES {
@@ -2439,19 +2561,19 @@
 	int channel, slotrank, lane;
 	int err;
 
-	MCHBAR32(0x3400) = 0;
+	MCHBAR32(GDCRTRAININGMOD) = 0;
 
 	toggle_io_reset();
 
 	FOR_ALL_POPULATED_CHANNELS FOR_ALL_LANES {
-		MCHBAR32(0x4080 + channel * 0x400 + lane * 4) = 0;
+		MCHBAR32(IOSAV_By_BW_MASK_ch(channel, lane)) = 0;
 	}
 
 	FOR_ALL_POPULATED_CHANNELS {
 		fill_pattern0(ctrl, channel, 0, 0);
-		MCHBAR32(0x4288 + channel * 0x400) = 0;
+		MCHBAR32(IOSAV_DATA_CTL_ch(channel)) = 0;
 		FOR_ALL_LANES {
-			MCHBAR32(0x4140 + channel * 0x400 + lane * 4);
+			MCHBAR32(IOSAV_By_BW_SERROR_C_ch(channel, lane));
 		}
 
 		FOR_ALL_POPULATED_RANKS FOR_ALL_LANES {
@@ -2464,48 +2586,48 @@
 		program_timings(ctrl, channel);
 
 		FOR_ALL_POPULATED_RANKS {
-			wait_428c(channel);
+			wait_for_iosav(channel);
 
 			/* DRAM command MRS
 			 * MR3 enable MPR
 			 * write MR3 MPR enable
 			 * in this mode only RD and RDA are allowed
 			 * all reads return a predefined pattern */
-			MCHBAR32(0x4220 + channel * 0x400) = 0x1f000;
-			MCHBAR32(0x4230 + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 0)) = 0x1f000;
+			MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 0)) =
 				0xc01 | (ctrl->tMOD << 16);
-			MCHBAR32(0x4200 + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 0)) =
 				(slotrank << 24) | 0x360004;
-			MCHBAR32(0x4210 + channel * 0x400) = 0;
+			MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 0)) = 0;
 
 			/* DRAM command RD */
-			MCHBAR32(0x4224 + channel * 0x400) = 0x1f105;
-			MCHBAR32(0x4234 + channel * 0x400) = 0x4041003;
-			MCHBAR32(0x4204 + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 1)) = 0x1f105;
+			MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 1)) = 0x4041003;
+			MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 1)) =
 				(slotrank << 24) | 0;
-			MCHBAR32(0x4214 + channel * 0x400) = 0;
+			MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 1)) = 0;
 
 			/* DRAM command RD */
-			MCHBAR32(0x4228 + channel * 0x400) = 0x1f105;
-			MCHBAR32(0x4238 + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 2)) = 0x1f105;
+			MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 2)) =
 				0x1001 | ((ctrl->CAS + 8) << 16);
-			MCHBAR32(0x4208 + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 2)) =
 				(slotrank << 24) | 0x60000;
-			MCHBAR32(0x4218 + channel * 0x400) = 0;
+			MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 2)) = 0;
 
 			/* DRAM command MRS
 			 * MR3 disable MPR */
-			MCHBAR32(0x422c + channel * 0x400) = 0x1f000;
-			MCHBAR32(0x423c + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 3)) = 0x1f000;
+			MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 3)) =
 				0xc01 | (ctrl->tMOD << 16);
-			MCHBAR32(0x420c + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 3)) =
 				(slotrank << 24) | 0x360000;
-			MCHBAR32(0x421c + channel * 0x400) = 0;
+			MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 3)) = 0;
 
 			// execute command queue
-			MCHBAR32(0x4284 + channel * 0x400) = RUN_QUEUE_4284(4);
+			MCHBAR32(IOSAV_SEQ_CTL_ch(channel)) = IOSAV_RUN_ONCE(4);
 
-			wait_428c(channel);
+			wait_for_iosav(channel);
 		}
 
 		/* XXX: check any measured value ? */
@@ -2520,65 +2642,65 @@
 		program_timings(ctrl, channel);
 
 		FOR_ALL_POPULATED_RANKS {
-			wait_428c(channel);
+			wait_for_iosav(channel);
 
 			/* DRAM command MRS
 			 * MR3 enable MPR
 			 * write MR3 MPR enable
 			 * in this mode only RD and RDA are allowed
 			 * all reads return a predefined pattern */
-			MCHBAR32(0x4220 + channel * 0x400) = 0x1f000;
-			MCHBAR32(0x4230 + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 0)) = 0x1f000;
+			MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 0)) =
 				0xc01 | (ctrl->tMOD << 16);
-			MCHBAR32(0x4200 + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 0)) =
 				(slotrank << 24) | 0x360004;
-			MCHBAR32(0x4210 + channel * 0x400) = 0;
+			MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 0)) = 0;
 
 			/* DRAM command RD */
-			MCHBAR32(0x4224 + channel * 0x400) = 0x1f105;
-			MCHBAR32(0x4234 + channel * 0x400) = 0x4041003;
-			MCHBAR32(0x4204 + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 1)) = 0x1f105;
+			MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 1)) = 0x4041003;
+			MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 1)) =
 				(slotrank << 24) | 0;
-			MCHBAR32(0x4214 + channel * 0x400) = 0;
+			MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 1)) = 0;
 
 			/* DRAM command RD */
-			MCHBAR32(0x4228 + channel * 0x400) = 0x1f105;
-			MCHBAR32(0x4238 + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 2)) = 0x1f105;
+			MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 2)) =
 				0x1001 | ((ctrl->CAS + 8) << 16);
-			MCHBAR32(0x4208 + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 2)) =
 				(slotrank << 24) | 0x60000;
-			MCHBAR32(0x4218 + channel * 0x400) = 0;
+			MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 2)) = 0;
 
 			/* DRAM command MRS
 			 * MR3 disable MPR */
-			MCHBAR32(0x422c + channel * 0x400) = 0x1f000;
-			MCHBAR32(0x423c + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 3)) = 0x1f000;
+			MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 3)) =
 				0xc01 | (ctrl->tMOD << 16);
-			MCHBAR32(0x420c + channel * 0x400) =
+			MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 3)) =
 				(slotrank << 24) | 0x360000;
-			MCHBAR32(0x421c + channel * 0x400) = 0;
+			MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 3)) = 0;
 
 			// execute command queue
-			MCHBAR32(0x4284 + channel * 0x400) = RUN_QUEUE_4284(4);
+			MCHBAR32(IOSAV_SEQ_CTL_ch(channel)) = IOSAV_RUN_ONCE(4);
 
-			wait_428c(channel);
+			wait_for_iosav(channel);
 		}
 
 		/* XXX: check any measured value ? */
 
 		FOR_ALL_LANES {
-			MCHBAR32(0x4080 + channel * 0x400 + lane * 4) =
-				~MCHBAR32(0x4040 + channel * 0x400 + lane * 4)
+			MCHBAR32(IOSAV_By_BW_MASK_ch(channel, lane)) =
+				~MCHBAR32(IOSAV_By_BW_SERROR_ch(channel, lane))
 					& 0xff;
 		}
 
 		fill_pattern0(ctrl, channel, 0, 0xffffffff);
-		MCHBAR32(0x4288 + channel * 0x400) = 0;
+		MCHBAR32(IOSAV_DATA_CTL_ch(channel)) = 0;
 	}
 
 	/* FIXME: under some conditions (older chipsets?) vendor BIOS sets both edges to the same value.  */
-	MCHBAR32(0x4eb0) = 0x300;
-	printram("discover falling edges:\n[%x] = %x\n", 0x4eb0, 0x300);
+	MCHBAR32(IOSAV_DC_MASK) = 0x300;
+	printram("discover falling edges:\n[%x] = %x\n", IOSAV_DC_MASK, 0x300);
 
 	FOR_ALL_CHANNELS FOR_ALL_POPULATED_RANKS {
 		err = discover_edges_real(ctrl, channel, slotrank,
@@ -2587,8 +2709,8 @@
 			return err;
 	}
 
-	MCHBAR32(0x4eb0) = 0x200;
-	printram("discover rising edges:\n[%x] = %x\n", 0x4eb0, 0x200);
+	MCHBAR32(IOSAV_DC_MASK) = 0x200;
+	printram("discover rising edges:\n[%x] = %x\n", IOSAV_DC_MASK, 0x200);
 
 	FOR_ALL_CHANNELS FOR_ALL_POPULATED_RANKS {
 		err = discover_edges_real(ctrl, channel, slotrank,
@@ -2597,7 +2719,7 @@
 			return err;
 	}
 
-	MCHBAR32(0x4eb0) = 0;
+	MCHBAR32(IOSAV_DC_MASK) = 0;
 
 	FOR_ALL_CHANNELS FOR_ALL_POPULATED_RANKS FOR_ALL_LANES {
 		ctrl->timings[channel][slotrank].lanes[lane].falling =
@@ -2611,7 +2733,7 @@
 	}
 
 	FOR_ALL_CHANNELS FOR_ALL_POPULATED_RANKS FOR_ALL_LANES {
-		MCHBAR32(0x4080 + channel * 0x400 + lane * 4) = 0;
+		MCHBAR32(IOSAV_By_BW_MASK_ch(channel, lane)) = 0;
 	}
 	return 0;
 }
@@ -2634,12 +2756,12 @@
 	}
 
 	for (i = 0; i < 3; i++) {
-		MCHBAR32(0x3000 + channel * 0x100) = reg3000b24[i] << 24;
+		MCHBAR32(GDCRTRAININGMOD_ch(channel)) = reg3000b24[i] << 24;
 		printram("[%x] = 0x%08x\n",
-		       0x3000 + channel * 0x100, reg3000b24[i] << 24);
+		       GDCRTRAININGMOD_ch(channel), reg3000b24[i] << 24);
 		for (pat = 0; pat < NUM_PATTERNS; pat++) {
 			fill_pattern5(ctrl, channel, pat);
-			MCHBAR32(0x4288 + channel * 0x400) = 0x1f;
+			MCHBAR32(IOSAV_DATA_CTL_ch(channel)) = 0x1f;
 			printram("using pattern %d\n", pat);
 			for (edge = 0; edge <= MAX_EDGE_TIMING; edge++) {
 				FOR_ALL_LANES {
@@ -2651,52 +2773,52 @@
 				program_timings(ctrl, channel);
 
 				FOR_ALL_LANES {
-					MCHBAR32(0x4340 + channel * 0x400 + lane * 4) = 0;
-					MCHBAR32(0x4140 + channel * 0x400 + lane * 4);
+					MCHBAR32(IOSAV_By_ERROR_COUNT_ch(channel, lane)) = 0;
+					MCHBAR32(IOSAV_By_BW_SERROR_C_ch(channel, lane));
 				}
-				wait_428c(channel);
+				wait_for_iosav(channel);
 
 				/* DRAM command ACT */
-				MCHBAR32(0x4220 + channel * 0x400) = 0x1f006;
-				MCHBAR32(0x4230 + channel * 0x400) =
+				MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 0)) = 0x1f006;
+				MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 0)) =
 					0x4 | (ctrl->tRCD << 16) |
 					(MAX(ctrl->tRRD, (ctrl->tFAW >> 2) + 1)
 					<< 10);
-				MCHBAR32(0x4200 + channel * 0x400) =
+				MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 0)) =
 					(slotrank << 24) | 0x60000;
-				MCHBAR32(0x4210 + channel * 0x400) = 0x240;
+				MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 0)) = 0x240;
 
 				/* DRAM command WR */
-				MCHBAR32(0x4224 + channel * 0x400) = 0x1f201;
-				MCHBAR32(0x4234 + channel * 0x400) = 0x8005020 |
+				MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 1)) = 0x1f201;
+				MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 1)) = 0x8005020 |
 					((ctrl->tWTR + ctrl->CWL + 8) << 16);
-				MCHBAR32(0x4204 + channel * 0x400) =
+				MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 1)) =
 					slotrank << 24;
-				MCHBAR32(0x4214 + channel * 0x400) = 0x242;
+				MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 1)) = 0x242;
 
 				/* DRAM command RD */
-				MCHBAR32(0x4228 + channel * 0x400) = 0x1f105;
-				MCHBAR32(0x4238 + channel * 0x400) =
+				MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 2)) = 0x1f105;
+				MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 2)) =
 					0x4005020 | (MAX(ctrl->tRTP, 8) << 16);
-				MCHBAR32(0x4208 + channel * 0x400) =
+				MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 2)) =
 					slotrank << 24;
-				MCHBAR32(0x4218 + channel * 0x400) = 0x242;
+				MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 2)) = 0x242;
 
 				/* DRAM command PRE */
-				MCHBAR32(0x422c + channel * 0x400) = 0x1f002;
-				MCHBAR32(0x423c + channel * 0x400) =
+				MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 3)) = 0x1f002;
+				MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 3)) =
 					0xc01 | (ctrl->tRP << 16);
-				MCHBAR32(0x420c + channel * 0x400) =
+				MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 3)) =
 					(slotrank << 24) | 0x60400;
-				MCHBAR32(0x421c + channel * 0x400) = 0;
+				MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 3)) = 0;
 
 				// execute command queue
-				MCHBAR32(0x4284 + channel * 0x400) =
-					RUN_QUEUE_4284(4);
+				MCHBAR32(IOSAV_SEQ_CTL_ch(channel)) =
+					IOSAV_RUN_ONCE(4);
 
-				wait_428c(channel);
+				wait_for_iosav(channel);
 				FOR_ALL_LANES {
-					MCHBAR32(0x4340 + channel * 0x400 + lane * 4);
+					MCHBAR32(IOSAV_By_ERROR_COUNT_ch(channel, lane));
 				}
 
 				raw_statistics[edge] =
@@ -2727,7 +2849,7 @@
 		}
 	}
 
-	MCHBAR32(0x3000) = 0;
+	MCHBAR32(GDCRTRAININGMOD_ch(0)) = 0;
 	printram("CPA\n");
 	return 0;
 }
@@ -2740,8 +2862,8 @@
 	int err;
 
 	/* FIXME: under some conditions (older chipsets?) vendor BIOS sets both edges to the same value.  */
-	MCHBAR32(0x4eb0) = 0x300;
-	printram("discover falling edges write:\n[%x] = %x\n", 0x4eb0, 0x300);
+	MCHBAR32(IOSAV_DC_MASK) = 0x300;
+	printram("discover falling edges write:\n[%x] = %x\n", IOSAV_DC_MASK, 0x300);
 
 	FOR_ALL_CHANNELS FOR_ALL_POPULATED_RANKS {
 		err = discover_edges_write_real(ctrl, channel, slotrank,
@@ -2750,8 +2872,8 @@
 			return err;
 	}
 
-	MCHBAR32(0x4eb0) = 0x200;
-	printram("discover rising edges write:\n[%x] = %x\n", 0x4eb0, 0x200);
+	MCHBAR32(IOSAV_DC_MASK) = 0x200;
+	printram("discover rising edges write:\n[%x] = %x\n", IOSAV_DC_MASK, 0x200);
 
 	FOR_ALL_CHANNELS FOR_ALL_POPULATED_RANKS {
 		err = discover_edges_write_real(ctrl, channel, slotrank,
@@ -2760,7 +2882,7 @@
 			return err;
 	}
 
-	MCHBAR32(0x4eb0) = 0;
+	MCHBAR32(IOSAV_DC_MASK) = 0;
 
 	FOR_ALL_CHANNELS FOR_ALL_POPULATED_RANKS FOR_ALL_LANES {
 		ctrl->timings[channel][slotrank].lanes[lane].falling =
@@ -2773,47 +2895,47 @@
 		program_timings(ctrl, channel);
 
 	FOR_ALL_CHANNELS FOR_ALL_POPULATED_RANKS FOR_ALL_LANES {
-		MCHBAR32(0x4080 + channel * 0x400 + lane * 4) = 0;
+		MCHBAR32(IOSAV_By_BW_MASK_ch(channel, lane)) = 0;
 	}
 	return 0;
 }
 
 static void test_timC_write(ramctr_timing *ctrl, int channel, int slotrank)
 {
-	wait_428c(channel);
+	wait_for_iosav(channel);
 	/* DRAM command ACT */
-	MCHBAR32(0x4220 + channel * 0x400) = 0x1f006;
-	MCHBAR32(0x4230 + channel * 0x400) =
+	MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 0)) = 0x1f006;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 0)) =
 		(MAX((ctrl->tFAW >> 2) + 1, ctrl->tRRD)
 		 << 10) | (ctrl->tRCD << 16) | 4;
-	MCHBAR32(0x4200 + channel * 0x400) =
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 0)) =
 		(slotrank << 24) | 0x60000;
-	MCHBAR32(0x4210 + channel * 0x400) = 0x244;
+	MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 0)) = 0x244;
 
 	/* DRAM command WR */
-	MCHBAR32(0x4224 + channel * 0x400) = 0x1f201;
-	MCHBAR32(0x4234 + channel * 0x400) =
+	MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 1)) = 0x1f201;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 1)) =
 		0x80011e0 | ((ctrl->tWTR + ctrl->CWL + 8) << 16);
-	MCHBAR32(0x4204 + channel * 0x400) = slotrank << 24;
-	MCHBAR32(0x4214 + channel * 0x400) = 0x242;
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 1)) = slotrank << 24;
+	MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 1)) = 0x242;
 
 	/* DRAM command RD */
-	MCHBAR32(0x4228 + channel * 0x400) = 0x1f105;
-	MCHBAR32(0x4238 + channel * 0x400) =
+	MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 2)) = 0x1f105;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 2)) =
 		0x40011e0 | (MAX(ctrl->tRTP, 8) << 16);
-	MCHBAR32(0x4208 + channel * 0x400) = slotrank << 24;
-	MCHBAR32(0x4218 + channel * 0x400) = 0x242;
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 2)) = slotrank << 24;
+	MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 2)) = 0x242;
 
 	/* DRAM command PRE */
-	MCHBAR32(0x422c + channel * 0x400) = 0x1f002;
-	MCHBAR32(0x423c + channel * 0x400) = 0x1001 | (ctrl->tRP << 16);
-	MCHBAR32(0x420c + channel * 0x400) = (slotrank << 24) | 0x60400;
-	MCHBAR32(0x421c + channel * 0x400) = 0;
+	MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 3)) = 0x1f002;
+	MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 3)) = 0x1001 | (ctrl->tRP << 16);
+	MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 3)) = (slotrank << 24) | 0x60400;
+	MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 3)) = 0;
 
 	// execute command queue
-	MCHBAR32(0x4284 + channel * 0x400) = RUN_QUEUE_4284(4);
+	MCHBAR32(IOSAV_SEQ_CTL_ch(channel)) = IOSAV_RUN_ONCE(4);
 
-	wait_428c(channel);
+	wait_for_iosav(channel);
 }
 
 int discover_timC_write(ramctr_timing *ctrl)
@@ -2830,12 +2952,16 @@
 		upper[channel][slotrank][lane] = MAX_TIMC;
 	}
 
-	MCHBAR32(0x4ea8) = 1;
+	/*
+	 * Enable IOSAV_n_SPECIAL_COMMAND_ADDR optimization.
+	 * FIXME: This must only be done on Ivy Bridge.
+	 */
+	MCHBAR32(MCMNTS_SPARE) = 1;
 	printram("discover timC write:\n");
 
 	for (i = 0; i < 3; i++)
 		FOR_ALL_POPULATED_CHANNELS {
-			MCHBAR32_AND_OR(0xe3c + (channel * 0x100), ~0x3f000000,
+			MCHBAR32_AND_OR(GDCRCMDDEBUGMUXCFG_Cz_S(channel), ~0x3f000000,
 				rege3c_b24[i] << 24);
 			udelay(2);
 			for (pat = 0; pat < NUM_PATTERNS; pat++) {
@@ -2848,7 +2974,7 @@
 					statistics[MAX_TIMC] = 1;
 
 					fill_pattern5(ctrl, channel, pat);
-					MCHBAR32(0x4288 + channel * 0x400) =
+					MCHBAR32(IOSAV_DATA_CTL_ch(channel)) =
 						0x1f;
 					for (timC = 0; timC < MAX_TIMC; timC++) {
 						FOR_ALL_LANES
@@ -2892,11 +3018,15 @@
 		}
 
 	FOR_ALL_CHANNELS {
-		MCHBAR32_AND(0xe3c + (channel * 0x100), ~0x3f000000);
+		MCHBAR32_AND(GDCRCMDDEBUGMUXCFG_Cz_S(channel), ~0x3f000000);
 		udelay(2);
 	}
 
-	MCHBAR32(0x4ea8) = 0;
+	/*
+	 * Disable IOSAV_n_SPECIAL_COMMAND_ADDR optimization.
+	 * FIXME: This must only be done on Ivy Bridge.
+	 */
+	MCHBAR32(MCMNTS_SPARE) = 0;
 
 	printram("CPB\n");
 
@@ -2915,7 +3045,7 @@
 	return 0;
 }
 
-void normalize_training(ramctr_timing * ctrl)
+void normalize_training(ramctr_timing *ctrl)
 {
 	int channel, slotrank, lane;
 	int mat;
@@ -2932,7 +3062,7 @@
 		printram("normalize %d, %d, %d: delta %d\n",
 		    channel, slotrank, lane, delta);
 
-		ctrl->timings[channel][slotrank].val_4024 += delta;
+		ctrl->timings[channel][slotrank].roundtrip_latency += delta;
 		ctrl->timings[channel][slotrank].io_latency += delta;
 	}
 
@@ -2941,7 +3071,7 @@
 	}
 }
 
-void write_controller_mr(ramctr_timing * ctrl)
+void write_controller_mr(ramctr_timing *ctrl)
 {
 	int channel, slotrank;
 
@@ -2959,7 +3089,7 @@
 
 	slotrank = 0;
 	FOR_ALL_POPULATED_CHANNELS
-		if (MCHBAR32(0x42a0 + channel * 0x400) & 0xa000) {
+		if (MCHBAR32(MC_INIT_STATE_ch(channel)) & 0xa000) {
 			printk(BIOS_EMERG, "Mini channel test failed (1): %d\n",
 			       channel);
 			return MAKE_ERR;
@@ -2967,52 +3097,52 @@
 	FOR_ALL_POPULATED_CHANNELS {
 		fill_pattern0(ctrl, channel, 0x12345678, 0x98765432);
 
-		MCHBAR32(0x4288 + channel * 0x400) = 0;
+		MCHBAR32(IOSAV_DATA_CTL_ch(channel)) = 0;
 	}
 
 	for (slotrank = 0; slotrank < 4; slotrank++)
 		FOR_ALL_CHANNELS
 			if (ctrl->rankmap[channel] & (1 << slotrank)) {
 		FOR_ALL_LANES {
-			MCHBAR32(0x4f40 + 4 * lane) = 0;
-			MCHBAR32(0x4d40 + 4 * lane) = 0;
+			MCHBAR32(IOSAV_By_ERROR_COUNT(lane)) = 0;
+			MCHBAR32(IOSAV_By_BW_SERROR_C(lane)) = 0;
 		}
-		wait_428c(channel);
+		wait_for_iosav(channel);
 
 		/* DRAM command ACT */
-		MCHBAR32(0x4220 + channel * 0x400) = 0x0001f006;
-		MCHBAR32(0x4230 + channel * 0x400) = 0x0028a004;
-		MCHBAR32(0x4200 + channel * 0x400) =
+		MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 0)) = 0x0001f006;
+		MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 0)) = 0x0028a004;
+		MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 0)) =
 			0x00060000 | (slotrank << 24);
-		MCHBAR32(0x4210 + channel * 0x400) = 0x00000244;
+		MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 0)) = 0x00000244;
 
 		/* DRAM command WR */
-		MCHBAR32(0x4224 + channel * 0x400) = 0x0001f201;
-		MCHBAR32(0x4234 + channel * 0x400) = 0x08281064;
-		MCHBAR32(0x4204 + channel * 0x400) =
+		MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 1)) = 0x0001f201;
+		MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 1)) = 0x08281064;
+		MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 1)) =
 			0x00000000 | (slotrank << 24);
-		MCHBAR32(0x4214 + channel * 0x400) = 0x00000242;
+		MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 1)) = 0x00000242;
 
 		/* DRAM command RD */
-		MCHBAR32(0x4228 + channel * 0x400) = 0x0001f105;
-		MCHBAR32(0x4238 + channel * 0x400) = 0x04281064;
-		MCHBAR32(0x4208 + channel * 0x400) =
+		MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 2)) = 0x0001f105;
+		MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 2)) = 0x04281064;
+		MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 2)) =
 			0x00000000 | (slotrank << 24);
-		MCHBAR32(0x4218 + channel * 0x400) = 0x00000242;
+		MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 2)) = 0x00000242;
 
 		/* DRAM command PRE */
-		MCHBAR32(0x422c + channel * 0x400) = 0x0001f002;
-		MCHBAR32(0x423c + channel * 0x400) = 0x00280c01;
-		MCHBAR32(0x420c + channel * 0x400) =
+		MCHBAR32(IOSAV_n_SP_CMD_CTL_ch(channel, 3)) = 0x0001f002;
+		MCHBAR32(IOSAV_n_SUBSEQ_CTL_ch(channel, 3)) = 0x00280c01;
+		MCHBAR32(IOSAV_n_SP_CMD_ADDR_ch(channel, 3)) =
 			0x00060400 | (slotrank << 24);
-		MCHBAR32(0x421c + channel * 0x400) = 0x00000240;
+		MCHBAR32(IOSAV_n_ADDR_UPD_ch(channel, 3)) = 0x00000240;
 
 		// execute command queue
-		MCHBAR32(0x4284 + channel * 0x400) = RUN_QUEUE_4284(4);
+		MCHBAR32(IOSAV_SEQ_CTL_ch(channel)) = IOSAV_RUN_ONCE(4);
 
-		wait_428c(channel);
+		wait_for_iosav(channel);
 		FOR_ALL_LANES
-			if (MCHBAR32(0x4340 + channel * 0x400 + lane * 4)) {
+			if (MCHBAR32(IOSAV_By_ERROR_COUNT_ch(channel, lane))) {
 				printk(BIOS_EMERG, "Mini channel test failed (2): %d, %d, %d\n",
 				       channel, slotrank, lane);
 				return MAKE_ERR;
@@ -3021,7 +3151,7 @@
 	return 0;
 }
 
-void set_scrambling_seed(ramctr_timing * ctrl)
+void set_scrambling_seed(ramctr_timing *ctrl)
 {
 	int channel;
 
@@ -3032,10 +3162,10 @@
 		{0x00028bfa, 0x53fe4b49, 0x19ed5483}
 	};
 	FOR_ALL_POPULATED_CHANNELS {
-		MCHBAR32(0x4020 + channel * 0x400) &= ~0x10000000;
-		MCHBAR32(0x4034 + channel * 0x400) = seeds[channel][0];
-		MCHBAR32(0x403c + channel * 0x400) = seeds[channel][1];
-		MCHBAR32(0x4038 + channel * 0x400) = seeds[channel][2];
+		MCHBAR32(SCHED_CBIT_ch(channel)) &= ~0x10000000;
+		MCHBAR32(SCRAMBLING_SEED_1_ch(channel))      = seeds[channel][0];
+		MCHBAR32(SCRAMBLING_SEED_2_HIGH_ch(channel)) = seeds[channel][1];
+		MCHBAR32(SCRAMBLING_SEED_2_LOW_ch(channel))  = seeds[channel][2];
 	}
 }
 
@@ -3045,77 +3175,76 @@
 
 	cpu = cpu_get_cpuid();
 	if (IS_SANDY_CPU(cpu) && (IS_SANDY_CPU_D0(cpu) || IS_SANDY_CPU_D1(cpu))) {
-		MCHBAR32(0x4f8c) = 0x141D1519;
+		MCHBAR32(SC_WDBWM) = 0x141D1519;
 	} else {
-		MCHBAR32(0x4f8c) = 0x551D1519;
+		MCHBAR32(SC_WDBWM) = 0x551D1519;
 	}
 }
 
-void prepare_training(ramctr_timing * ctrl)
+void prepare_training(ramctr_timing *ctrl)
 {
 	int channel;
 
 	FOR_ALL_POPULATED_CHANNELS {
 		// Always drive command bus
-		MCHBAR32_OR(0x4004 + channel * 0x400, 0x20000000);
+		MCHBAR32_OR(TC_RAP_ch(channel), 0x20000000);
 	}
 
 	udelay(1);
 
 	FOR_ALL_POPULATED_CHANNELS {
-		wait_428c(channel);
+		wait_for_iosav(channel);
 	}
 }
 
-void set_4008c(ramctr_timing * ctrl)
+void set_4008c(ramctr_timing *ctrl)
 {
 	int channel, slotrank;
 
 	FOR_ALL_POPULATED_CHANNELS {
 		u32 b20, b4_8_12;
-		int min_320c = 10000;
-		int max_320c = -10000;
+		int min_pi = 10000;
+		int max_pi = -10000;
 
 		FOR_ALL_POPULATED_RANKS {
-			max_320c = MAX(ctrl->timings[channel][slotrank].val_320c, max_320c);
-			min_320c = MIN(ctrl->timings[channel][slotrank].val_320c, min_320c);
+			max_pi = MAX(ctrl->timings[channel][slotrank].pi_coding, max_pi);
+			min_pi = MIN(ctrl->timings[channel][slotrank].pi_coding, min_pi);
 		}
 
-		if (max_320c - min_320c > 51)
+		if (max_pi - min_pi > 51)
 			b20 = 0;
 		else
 			b20 = ctrl->ref_card_offset[channel];
 
-		if (ctrl->reg_320c_range_threshold < max_320c - min_320c)
+		if (ctrl->pi_coding_threshold < max_pi - min_pi)
 			b4_8_12 = 0x3330;
 		else
 			b4_8_12 = 0x2220;
 
 		dram_odt_stretch(ctrl, channel);
 
-		MCHBAR32(0x4008 + channel * 0x400) =
+		MCHBAR32(TC_RWP_ch(channel)) =
 			0x0a000000 | (b20 << 20) |
 			((ctrl->ref_card_offset[channel] + 2) << 16) | b4_8_12;
 	}
 }
 
-void set_42a0(ramctr_timing * ctrl)
+void set_normal_operation(ramctr_timing *ctrl)
 {
 	int channel;
 	FOR_ALL_POPULATED_CHANNELS {
-		MCHBAR32(0x42a0 + channel * 0x400) =
-			0x00001000 | ctrl->rankmap[channel];
-		MCHBAR32_AND(0x4004 + channel * 0x400, ~0x20000000);
+		MCHBAR32(MC_INIT_STATE_ch(channel)) = 0x00001000 | ctrl->rankmap[channel];
+		MCHBAR32_AND(TC_RAP_ch(channel), ~0x20000000);
 	}
 }
 
 static int encode_5d10(int ns)
 {
-  return (ns + 499) / 500;
+	return (ns + 499) / 500;
 }
 
 /* FIXME: values in this function should be hardware revision-dependent.  */
-void final_registers(ramctr_timing * ctrl)
+void final_registers(ramctr_timing *ctrl)
 {
 	const size_t is_mobile = get_platform_type() == PLATFORM_MOBILE;
 
@@ -3124,10 +3253,11 @@
 	int t3_ns;
 	u32 r32;
 
-	MCHBAR32(0x4cd4) = 0x00000046;
+	/* FIXME: This register only exists on Ivy Bridge. */
+	MCHBAR32(WMM_READ_CONFIG) = 0x00000046;
 
 	FOR_ALL_CHANNELS
-		MCHBAR32_AND_OR(0x400c + channel * 0x400, 0xFFFFCFFF, 0x1000);
+		MCHBAR32_AND_OR(TC_OTHP_ch(channel), 0xFFFFCFFF, 0x1000);
 
 	if (is_mobile)
 		/* APD - DLL Off, 64 DCLKs until idle, decision per rank */
@@ -3137,26 +3267,26 @@
 		MCHBAR32(PM_PDWN_CONFIG) = 0x00000340;
 
 	FOR_ALL_CHANNELS
-		MCHBAR32(0x4380 + 0x400 * channel) = 0x00000aaa;
+		MCHBAR32(PM_TRML_M_CONFIG_ch(channel)) = 0x00000aaa;
 
-	MCHBAR32(0x4f88) = 0x5f7003ff;	// OK
-	MCHBAR32(0x5064) = 0x00073000 | ctrl->reg_5064b0; // OK
+	MCHBAR32(PM_BW_LIMIT_CONFIG) = 0x5f7003ff;	// OK
+	MCHBAR32(PM_DLL_CONFIG) = 0x00073000 | ctrl->mdll_wake_delay; // OK
 
 	FOR_ALL_CHANNELS {
 		switch (ctrl->rankmap[channel]) {
 			/* Unpopulated channel.  */
 		case 0:
-			MCHBAR32(0x4384 + channel * 0x400) = 0;
+			MCHBAR32(PM_CMD_PWR_ch(channel)) = 0;
 			break;
 			/* Only single-ranked dimms.  */
 		case 1:
 		case 4:
 		case 5:
-			MCHBAR32(0x4384 + channel * 0x400) = 0x373131;
+			MCHBAR32(PM_CMD_PWR_ch(channel)) = 0x373131;
 			break;
 			/* Dual-ranked dimms present.  */
 		default:
-			MCHBAR32(0x4384 + channel * 0x400) = 0x9b6ea1;
+			MCHBAR32(PM_CMD_PWR_ch(channel)) = 0x9b6ea1;
 			break;
 		}
 	}
@@ -3166,30 +3296,30 @@
 	MCHBAR32_AND(MEM_TRML_INTERRUPT, ~0x1f);
 
 	FOR_ALL_CHANNELS
-		MCHBAR32_AND_OR(TC_RFP_C0 + channel * 0x400, ~0x30000, 1 << 16);
+		MCHBAR32_AND_OR(TC_RFP_ch(channel), ~0x30000, 1 << 16);
 
-	MCHBAR32_OR(0x5030, 1);
-	MCHBAR32_OR(0x5030, 0x80);
-	MCHBAR32(0x5f18) = 0xfa;
+	MCHBAR32_OR(MC_INIT_STATE_G, 1);
+	MCHBAR32_OR(MC_INIT_STATE_G, 0x80);
+	MCHBAR32(BANDTIMERS_SNB) = 0xfa;
 
 	/* Find a populated channel.  */
 	FOR_ALL_POPULATED_CHANNELS
 		break;
 
-	t1_cycles = (MCHBAR32(0x4290 + channel * 0x400) >> 8) & 0xff;
-	r32 = MCHBAR32(0x5064);
+	t1_cycles = (MCHBAR32(TC_ZQCAL_ch(channel)) >> 8) & 0xff;
+	r32 = MCHBAR32(PM_DLL_CONFIG);
 	if (r32 & 0x20000)
 		t1_cycles += (r32 & 0xfff);
-	t1_cycles += MCHBAR32(0x42a4 + channel * 0x400) & 0xfff;
+	t1_cycles += MCHBAR32(TC_SRFTP_ch(channel)) & 0xfff;
 	t1_ns = t1_cycles * ctrl->tCK / 256 + 544;
 	if (!(r32 & 0x20000))
 		t1_ns += 500;
 
-	t2_ns = 10 * ((MCHBAR32(0x5f10) >> 8) & 0xfff);
-	if (MCHBAR32(0x5f00) & 8)
+	t2_ns = 10 * ((MCHBAR32(SAPMTIMERS) >> 8) & 0xfff);
+	if (MCHBAR32(SAPMCTL) & 8)
 	{
-		t3_ns = 10 * ((MCHBAR32(0x5f20) >> 8) & 0xfff);
-		t3_ns += 10 * (MCHBAR32(0x5f18) & 0xff);
+		t3_ns = 10 * ((MCHBAR32(BANDTIMERS_IVB) >> 8) & 0xfff);
+		t3_ns += 10 * (MCHBAR32(SAPMTIMERS2_IVB) & 0xff);
 	}
 	else
 	{
@@ -3203,12 +3333,12 @@
 		encode_5d10(t2_ns) + encode_5d10(t1_ns)) << 24) | 0xc);
 }
 
-void restore_timings(ramctr_timing * ctrl)
+void restore_timings(ramctr_timing *ctrl)
 {
 	int channel, slotrank, lane;
 
 	FOR_ALL_POPULATED_CHANNELS
-	    MCHBAR32(0x4004 + channel * 0x400) =
+	    MCHBAR32(TC_RAP_ch(channel)) =
 		ctrl->tRRD
 		| (ctrl->tRTP << 4)
 		| (ctrl->tCKE << 8)
@@ -3220,25 +3350,25 @@
 	udelay(1);
 
 	FOR_ALL_POPULATED_CHANNELS {
-		wait_428c(channel);
+		wait_for_iosav(channel);
 	}
 
 	FOR_ALL_CHANNELS FOR_ALL_POPULATED_RANKS FOR_ALL_LANES {
-		MCHBAR32(0x4080 + channel * 0x400 + lane * 4) = 0;
+		MCHBAR32(IOSAV_By_BW_MASK_ch(channel, lane)) = 0;
 	}
 
 	FOR_ALL_POPULATED_CHANNELS
-		MCHBAR32_OR(0x4008 + channel * 0x400, 0x8000000);
+		MCHBAR32_OR(TC_RWP_ch(channel), 0x8000000);
 
 	FOR_ALL_POPULATED_CHANNELS {
 		udelay (1);
-		MCHBAR32_OR(0x4020 + channel * 0x400, 0x200000);
+		MCHBAR32_OR(SCHED_CBIT_ch(channel), 0x200000);
 	}
 
 	printram("CPE\n");
 
-	MCHBAR32(0x3400) = 0;
-	MCHBAR32(0x4eb0) = 0;
+	MCHBAR32(GDCRTRAININGMOD) = 0;
+	MCHBAR32(IOSAV_DC_MASK) = 0;
 
 	printram("CP5b\n");
 
@@ -3248,14 +3378,14 @@
 
 	u32 reg, addr;
 
-	while (!(MCHBAR32(0x5084) & 0x10000));
+	while (!(MCHBAR32(RCOMP_TIMER) & 0x10000));
 	do {
-		reg = MCHBAR32(0x428c);
+		reg = MCHBAR32(IOSAV_STATUS_ch(0));
 	} while ((reg & 0x14) == 0);
 
 	// Set state of memory controller
-	MCHBAR32(0x5030) = 0x116;
-	MCHBAR32(0x4ea0) = 0;
+	MCHBAR32(MC_INIT_STATE_G) = 0x116;
+	MCHBAR32(MC_INIT_STATE) = 0;
 
 	// Wait 500us
 	udelay(500);
@@ -3264,7 +3394,7 @@
 		// Set valid rank CKE
 		reg = 0;
 		reg = (reg & ~0xf) | ctrl->rankmap[channel];
-		addr = 0x42a0 + channel * 0x400;
+		addr = MC_INIT_STATE_ch(channel);
 		MCHBAR32(addr) = reg;
 
 		// Wait 10ns for ranks to settle
@@ -3282,12 +3412,17 @@
 
 	printram("CP5c\n");
 
-	MCHBAR32(0x3000) = 0;
+	MCHBAR32(GDCRTRAININGMOD_ch(0)) = 0;
 
 	FOR_ALL_CHANNELS {
-		MCHBAR32_AND(0xe3c + channel * 0x100, ~0x3f000000);
+		MCHBAR32_AND(GDCRCMDDEBUGMUXCFG_Cz_S(channel), ~0x3f000000);
 		udelay(2);
 	}
 
-	MCHBAR32(0x4ea8) = 0;
+	/*
+	 * Disable IOSAV_n_SPECIAL_COMMAND_ADDR optimization.
+	 * FIXME: This must only be done on Ivy Bridge. Moreover, this instance seems to be
+	 *        spurious, because nothing else enabled this optimization before.
+	 */
+	MCHBAR32(MCMNTS_SPARE) = 0;
 }
diff --git a/src/northbridge/intel/sandybridge/raminit_common.h b/src/northbridge/intel/sandybridge/raminit_common.h
index d11c044..194e6db 100644
--- a/src/northbridge/intel/sandybridge/raminit_common.h
+++ b/src/northbridge/intel/sandybridge/raminit_common.h
@@ -52,12 +52,14 @@
 } dimm_info;
 
 struct ram_rank_timings {
-	/* Register 4024. One byte per slotrank.  */
-	u8 val_4024;
-	/* IO_LATENCY register. One nibble per slotrank.  */
+	/* ROUNDT_LAT register. One byte per slotrank. */
+	u8 roundtrip_latency;
+
+	/* IO_LATENCY register. One nibble per slotrank. */
 	u8 io_latency;
 
-	int val_320c;
+	/* Phase interpolator coding for command and control. */
+	int pi_coding;
 
 	struct ram_lane_timings {
 		/* lane register offset 0x10.  */
@@ -96,7 +98,7 @@
 	u32 tCWL;
 	u32 tCMD;
 	/* Latencies in terms of clock cycles
-	 * They are saved separately as they are needed for DRAM MRS commands*/
+	 * They are saved separately as they are needed for DRAM MRS commands */
 	u8 CAS;			/* CAS read latency */
 	u8 CWL;			/* CAS write latency */
 
@@ -109,7 +111,8 @@
 	u32 tXP;
 	u32 tAONPD;
 
-	u16 reg_5064b0; /* bits 0-11. */
+	/* Bits [0..11] of PM_DLL_CONFIG: Master DLL wakeup delay timer. */
+	u16 mdll_wake_delay;
 
 	u8 rankmap[NUM_CHANNELS];
 	int ref_card_offset[NUM_CHANNELS];
@@ -117,8 +120,8 @@
 	int channel_size_mb[NUM_CHANNELS];
 	u32 cmd_stretch[NUM_CHANNELS];
 
-	int reg_c14_offset;
-	int reg_320c_range_threshold;
+	int pi_code_offset;
+	int pi_coding_threshold;
 
 	int edge_offset[3];
 	int timC_offset[3];
@@ -150,33 +153,33 @@
 #define GET_ERR_CHANNEL(x) (x>>16)
 
 u8 get_CWL(u32 tCK);
-void dram_mrscommands(ramctr_timing * ctrl);
-void program_timings(ramctr_timing * ctrl, int channel);
+void dram_mrscommands(ramctr_timing *ctrl);
+void program_timings(ramctr_timing *ctrl, int channel);
 void dram_find_common_params(ramctr_timing *ctrl);
-void dram_xover(ramctr_timing * ctrl);
-void dram_timing_regs(ramctr_timing * ctrl);
+void dram_xover(ramctr_timing *ctrl);
+void dram_timing_regs(ramctr_timing *ctrl);
 void dram_dimm_mapping(ramctr_timing *ctrl);
-void dram_dimm_set_mapping(ramctr_timing * ctrl);
-void dram_zones(ramctr_timing * ctrl, int training);
+void dram_dimm_set_mapping(ramctr_timing *ctrl);
+void dram_zones(ramctr_timing *ctrl, int training);
 unsigned int get_mem_min_tck(void);
-void dram_memorymap(ramctr_timing * ctrl, int me_uma_size);
-void dram_jedecreset(ramctr_timing * ctrl);
-int read_training(ramctr_timing * ctrl);
-int write_training(ramctr_timing * ctrl);
+void dram_memorymap(ramctr_timing *ctrl, int me_uma_size);
+void dram_jedecreset(ramctr_timing *ctrl);
+int read_training(ramctr_timing *ctrl);
+int write_training(ramctr_timing *ctrl);
 int command_training(ramctr_timing *ctrl);
 int discover_edges(ramctr_timing *ctrl);
 int discover_edges_write(ramctr_timing *ctrl);
 int discover_timC_write(ramctr_timing *ctrl);
-void normalize_training(ramctr_timing * ctrl);
-void write_controller_mr(ramctr_timing * ctrl);
+void normalize_training(ramctr_timing *ctrl);
+void write_controller_mr(ramctr_timing *ctrl);
 int channel_test(ramctr_timing *ctrl);
-void set_scrambling_seed(ramctr_timing * ctrl);
+void set_scrambling_seed(ramctr_timing *ctrl);
 void set_4f8c(void);
-void prepare_training(ramctr_timing * ctrl);
-void set_4008c(ramctr_timing * ctrl);
-void set_42a0(ramctr_timing * ctrl);
-void final_registers(ramctr_timing * ctrl);
-void restore_timings(ramctr_timing * ctrl);
+void prepare_training(ramctr_timing *ctrl);
+void set_4008c(ramctr_timing *ctrl);
+void set_normal_operation(ramctr_timing *ctrl);
+void final_registers(ramctr_timing *ctrl);
+void restore_timings(ramctr_timing *ctrl);
 
 int try_init_dram_ddr3_sandy(ramctr_timing *ctrl, int fast_boot,
 		int s3_resume, int me_uma_size);
diff --git a/src/northbridge/intel/sandybridge/raminit_ivy.c b/src/northbridge/intel/sandybridge/raminit_ivy.c
index 7542a37..8013636 100644
--- a/src/northbridge/intel/sandybridge/raminit_ivy.c
+++ b/src/northbridge/intel/sandybridge/raminit_ivy.c
@@ -388,7 +388,7 @@
 		ctrl->timC_offset[0] = 20; //XXX: guessed
 		ctrl->timC_offset[1] = 8;
 		ctrl->timC_offset[2] = 8;
-		ctrl->reg_320c_range_threshold = 10;
+		ctrl->pi_coding_threshold = 10;
 	} else if (ctrl->tCK == TCK_1100MHZ) {
 		ctrl->edge_offset[0] = 17; //XXX: guessed
 		ctrl->edge_offset[1] = 7;
@@ -396,7 +396,7 @@
 		ctrl->timC_offset[0] = 19; //XXX: guessed
 		ctrl->timC_offset[1] = 7;
 		ctrl->timC_offset[2] = 7;
-		ctrl->reg_320c_range_threshold = 13;
+		ctrl->pi_coding_threshold = 13;
 	} else if (ctrl->tCK == TCK_1066MHZ) {
 		ctrl->edge_offset[0] = 16;
 		ctrl->edge_offset[1] = 7;
@@ -404,7 +404,7 @@
 		ctrl->timC_offset[0] = 18;
 		ctrl->timC_offset[1] = 7;
 		ctrl->timC_offset[2] = 7;
-		ctrl->reg_320c_range_threshold = 13;
+		ctrl->pi_coding_threshold = 13;
 	} else if (ctrl->tCK == TCK_1000MHZ) {
 		ctrl->edge_offset[0] = 15; //XXX: guessed
 		ctrl->edge_offset[1] = 6;
@@ -412,7 +412,7 @@
 		ctrl->timC_offset[0] = 17; //XXX: guessed
 		ctrl->timC_offset[1] = 6;
 		ctrl->timC_offset[2] = 6;
-		ctrl->reg_320c_range_threshold = 13;
+		ctrl->pi_coding_threshold = 13;
 	} else if (ctrl->tCK == TCK_933MHZ) {
 		ctrl->edge_offset[0] = 14;
 		ctrl->edge_offset[1] = 6;
@@ -420,7 +420,7 @@
 		ctrl->timC_offset[0] = 15;
 		ctrl->timC_offset[1] = 6;
 		ctrl->timC_offset[2] = 6;
-		ctrl->reg_320c_range_threshold = 15;
+		ctrl->pi_coding_threshold = 15;
 	} else if (ctrl->tCK == TCK_900MHZ) {
 		ctrl->edge_offset[0] = 14; //XXX: guessed
 		ctrl->edge_offset[1] = 6;
@@ -428,7 +428,7 @@
 		ctrl->timC_offset[0] = 15; //XXX: guessed
 		ctrl->timC_offset[1] = 6;
 		ctrl->timC_offset[2] = 6;
-		ctrl->reg_320c_range_threshold = 12;
+		ctrl->pi_coding_threshold = 12;
 	} else if (ctrl->tCK == TCK_800MHZ) {
 		ctrl->edge_offset[0] = 13;
 		ctrl->edge_offset[1] = 5;
@@ -436,7 +436,7 @@
 		ctrl->timC_offset[0] = 14;
 		ctrl->timC_offset[1] = 5;
 		ctrl->timC_offset[2] = 5;
-		ctrl->reg_320c_range_threshold = 15;
+		ctrl->pi_coding_threshold = 15;
 	} else if (ctrl->tCK == TCK_700MHZ) {
 		ctrl->edge_offset[0] = 13; //XXX: guessed
 		ctrl->edge_offset[1] = 5;
@@ -444,7 +444,7 @@
 		ctrl->timC_offset[0] = 14; //XXX: guessed
 		ctrl->timC_offset[1] = 5;
 		ctrl->timC_offset[2] = 5;
-		ctrl->reg_320c_range_threshold = 16;
+		ctrl->pi_coding_threshold = 16;
 	} else if (ctrl->tCK == TCK_666MHZ) {
 		ctrl->edge_offset[0] = 10;
 		ctrl->edge_offset[1] = 4;
@@ -452,7 +452,7 @@
 		ctrl->timC_offset[0] = 11;
 		ctrl->timC_offset[1] = 4;
 		ctrl->timC_offset[2] = 4;
-		ctrl->reg_320c_range_threshold = 16;
+		ctrl->pi_coding_threshold = 16;
 	} else if (ctrl->tCK == TCK_533MHZ) {
 		ctrl->edge_offset[0] = 8;
 		ctrl->edge_offset[1] = 3;
@@ -460,7 +460,7 @@
 		ctrl->timC_offset[0] = 9;
 		ctrl->timC_offset[1] = 3;
 		ctrl->timC_offset[2] = 3;
-		ctrl->reg_320c_range_threshold = 17;
+		ctrl->pi_coding_threshold = 17;
 	} else  { /* TCK_400MHZ */
 		ctrl->edge_offset[0] = 6;
 		ctrl->edge_offset[1] = 2;
@@ -468,14 +468,14 @@
 		ctrl->timC_offset[0] = 6;
 		ctrl->timC_offset[1] = 2;
 		ctrl->timC_offset[2] = 2;
-		ctrl->reg_320c_range_threshold = 17;
+		ctrl->pi_coding_threshold = 17;
 	}
 
 	/* Initial phase between CLK/CMD pins */
-	ctrl->reg_c14_offset = (256000 / ctrl->tCK) / 66;
+	ctrl->pi_code_offset = (256000 / ctrl->tCK) / 66;
 
 	/* DLL_CONFIG_MDLL_W_TIMER */
-	ctrl->reg_5064b0 = (128000 / ctrl->tCK) + 3;
+	ctrl->mdll_wake_delay = (128000 / ctrl->tCK) + 3;
 
 	if (ctrl->tCWL)
 		ctrl->CWL = DIV_ROUND_UP(ctrl->tCWL, ctrl->tCK);
@@ -528,7 +528,7 @@
 	ctrl->tAONPD = get_AONPD(ctrl->tCK, ctrl->base_freq);
 }
 
-static void dram_freq(ramctr_timing * ctrl)
+static void dram_freq(ramctr_timing *ctrl)
 {
 	if (ctrl->tCK > TCK_400MHZ) {
 		printk (BIOS_ERR, "DRAM frequency is under lowest supported "
@@ -582,7 +582,7 @@
 	}
 }
 
-static void dram_ioregs(ramctr_timing * ctrl)
+static void dram_ioregs(ramctr_timing *ctrl)
 {
 	u32 reg, comp2;
 
@@ -590,12 +590,12 @@
 
 	// IO clock
 	FOR_ALL_CHANNELS {
-		MCHBAR32(0xc00 + channel * 0x100) = ctrl->rankmap[channel];
+		MCHBAR32(GDCRCLKRANKSUSED_ch(channel)) = ctrl->rankmap[channel];
 	}
 
 	// IO command
 	FOR_ALL_CHANNELS {
-		MCHBAR32(0x3200 + channel * 0x100) = ctrl->rankmap[channel];
+		MCHBAR32(GDCRCTLRANKSUSED_ch(channel)) = ctrl->rankmap[channel];
 	}
 
 	// IO control
@@ -607,27 +607,27 @@
 	printram("RCOMP...");
 	reg = 0;
 	while (reg == 0) {
-		reg = MCHBAR32(0x5084) & 0x10000;
+		reg = MCHBAR32(RCOMP_TIMER) & 0x10000;
 	}
 	printram("done\n");
 
 	// Set comp2
 	comp2 = get_COMP2(ctrl->tCK, ctrl->base_freq);
-	MCHBAR32(0x3714) = comp2;
+	MCHBAR32(CRCOMPOFST2) = comp2;
 	printram("COMP2 done\n");
 
 	// Set comp1
 	FOR_ALL_POPULATED_CHANNELS {
-		reg = MCHBAR32(0x1810 + channel * 0x100);	//ch0
+		reg = MCHBAR32(CRCOMPOFST1_ch(channel));	//ch0
 		reg = (reg & ~0xe00) | (1 << 9);	//odt
 		reg = (reg & ~0xe00000) | (1 << 21);	//clk drive up
 		reg = (reg & ~0x38000000) | (1 << 27);	//ctl drive up
-		MCHBAR32(0x1810 + channel * 0x100) = reg;
+		MCHBAR32(CRCOMPOFST1_ch(channel)) = reg;
 	}
 	printram("COMP1 done\n");
 
 	printram("FORCE RCOMP and wait 20us...");
-	MCHBAR32(0x5f08) |= 0x100;
+	MCHBAR32(M_COMP) |= 0x100;
 	udelay(20);
 	printram("done\n");
 }
@@ -656,7 +656,7 @@
 	}
 
 	/* Set version register */
-	MCHBAR32(0x5034) = 0xC04EB002;
+	MCHBAR32(MRC_REVISION) = 0xC04EB002;
 
 	/* Enable crossover */
 	dram_xover(ctrl);
@@ -665,16 +665,16 @@
 	dram_timing_regs(ctrl);
 
 	/* Power mode preset */
-	MCHBAR32(0x4e80) = 0x5500;
+	MCHBAR32(PM_THML_STAT) = 0x5500;
 
-	/* Set scheduler parameters */
-	MCHBAR32(0x4c20) = 0x10100005;
+	/* Set scheduler chicken bits */
+	MCHBAR32(SCHED_CBIT) = 0x10100005;
 
 	/* Set CPU specific register */
 	set_4f8c();
 
 	/* Clear IO reset bit */
-	MCHBAR32(0x5030) &= ~0x20;
+	MCHBAR32(MC_INIT_STATE_G) &= ~0x20;
 
 	/* Set MAD-DIMM registers */
 	dram_dimm_set_mapping(ctrl);
diff --git a/src/northbridge/intel/sandybridge/raminit_mrc.c b/src/northbridge/intel/sandybridge/raminit_mrc.c
index 959ea41..8daa9aa 100644
--- a/src/northbridge/intel/sandybridge/raminit_mrc.c
+++ b/src/northbridge/intel/sandybridge/raminit_mrc.c
@@ -249,7 +249,7 @@
 	/* For reference print the System Agent version
 	 * after executing the UEFI PEI stage.
 	 */
-	u32 version = MCHBAR32(0x5034);
+	u32 version = MCHBAR32(MRC_REVISION);
 	printk(BIOS_DEBUG, "System Agent Version %d.%d.%d Build %d\n",
 		version >> 24, (version >> 16) & 0xff,
 		(version >> 8) & 0xff, version & 0xff);
diff --git a/src/northbridge/intel/sandybridge/raminit_sandy.c b/src/northbridge/intel/sandybridge/raminit_sandy.c
index 1191754..8417c2f 100644
--- a/src/northbridge/intel/sandybridge/raminit_sandy.c
+++ b/src/northbridge/intel/sandybridge/raminit_sandy.c
@@ -200,7 +200,7 @@
 		ctrl->timC_offset[0] = 18;
 		ctrl->timC_offset[1] = 7;
 		ctrl->timC_offset[2] = 7;
-		ctrl->reg_320c_range_threshold = 13;
+		ctrl->pi_coding_threshold = 13;
 	} else if (ctrl->tCK == TCK_933MHZ) {
 		ctrl->edge_offset[0] = 14;
 		ctrl->edge_offset[1] = 6;
@@ -208,7 +208,7 @@
 		ctrl->timC_offset[0] = 15;
 		ctrl->timC_offset[1] = 6;
 		ctrl->timC_offset[2] = 6;
-		ctrl->reg_320c_range_threshold = 15;
+		ctrl->pi_coding_threshold = 15;
 	} else if (ctrl->tCK == TCK_800MHZ) {
 		ctrl->edge_offset[0] = 13;
 		ctrl->edge_offset[1] = 5;
@@ -216,7 +216,7 @@
 		ctrl->timC_offset[0] = 14;
 		ctrl->timC_offset[1] = 5;
 		ctrl->timC_offset[2] = 5;
-		ctrl->reg_320c_range_threshold = 15;
+		ctrl->pi_coding_threshold = 15;
 	} else if (ctrl->tCK == TCK_666MHZ) {
 		ctrl->edge_offset[0] = 10;
 		ctrl->edge_offset[1] = 4;
@@ -224,7 +224,7 @@
 		ctrl->timC_offset[0] = 11;
 		ctrl->timC_offset[1] = 4;
 		ctrl->timC_offset[2] = 4;
-		ctrl->reg_320c_range_threshold = 16;
+		ctrl->pi_coding_threshold = 16;
 	} else if (ctrl->tCK == TCK_533MHZ) {
 		ctrl->edge_offset[0] = 8;
 		ctrl->edge_offset[1] = 3;
@@ -232,7 +232,7 @@
 		ctrl->timC_offset[0] = 9;
 		ctrl->timC_offset[1] = 3;
 		ctrl->timC_offset[2] = 3;
-		ctrl->reg_320c_range_threshold = 17;
+		ctrl->pi_coding_threshold = 17;
 	} else  {
 		ctrl->tCK = TCK_400MHZ;
 		ctrl->edge_offset[0] = 6;
@@ -241,14 +241,14 @@
 		ctrl->timC_offset[0] = 6;
 		ctrl->timC_offset[1] = 2;
 		ctrl->timC_offset[2] = 2;
-		ctrl->reg_320c_range_threshold = 17;
+		ctrl->pi_coding_threshold = 17;
 	}
 
 	/* Initial phase between CLK/CMD pins */
-	ctrl->reg_c14_offset = (256000 / ctrl->tCK) / 66;
+	ctrl->pi_code_offset = (256000 / ctrl->tCK) / 66;
 
 	/* DLL_CONFIG_MDLL_W_TIMER */
-	ctrl->reg_5064b0 = (128000 / ctrl->tCK) + 3;
+	ctrl->mdll_wake_delay = (128000 / ctrl->tCK) + 3;
 
 	if (ctrl->tCWL)
 		ctrl->CWL = DIV_ROUND_UP(ctrl->tCWL, ctrl->tCK);
@@ -301,7 +301,7 @@
 	ctrl->tAONPD = get_AONPD(ctrl->tCK);
 }
 
-static void dram_freq(ramctr_timing * ctrl)
+static void dram_freq(ramctr_timing *ctrl)
 {
 
 	if (ctrl->tCK > TCK_400MHZ) {
@@ -353,7 +353,7 @@
 	}
 }
 
-static void dram_ioregs(ramctr_timing * ctrl)
+static void dram_ioregs(ramctr_timing *ctrl)
 {
 	u32 reg, comp2;
 
@@ -361,12 +361,12 @@
 
 	// IO clock
 	FOR_ALL_CHANNELS {
-		MCHBAR32(0xc00 + channel * 0x100) = ctrl->rankmap[channel];
+		MCHBAR32(GDCRCLKRANKSUSED_ch(channel)) = ctrl->rankmap[channel];
 	}
 
 	// IO command
 	FOR_ALL_CHANNELS {
-		MCHBAR32(0x3200 + channel * 0x100) = ctrl->rankmap[channel];
+		MCHBAR32(GDCRCTLRANKSUSED_ch(channel)) = ctrl->rankmap[channel];
 	}
 
 	// IO control
@@ -378,27 +378,27 @@
 	printram("RCOMP...");
 	reg = 0;
 	while (reg == 0) {
-		reg = MCHBAR32(0x5084) & 0x10000;
+		reg = MCHBAR32(RCOMP_TIMER) & 0x10000;
 	}
 	printram("done\n");
 
 	// Set comp2
 	comp2 = get_COMP2(ctrl->tCK);
-	MCHBAR32(0x3714) = comp2;
+	MCHBAR32(CRCOMPOFST2) = comp2;
 	printram("COMP2 done\n");
 
 	// Set comp1
 	FOR_ALL_POPULATED_CHANNELS {
-		reg = MCHBAR32(0x1810 + channel * 0x100);	//ch0
+		reg = MCHBAR32(CRCOMPOFST1_ch(channel));	//ch0
 		reg = (reg & ~0xe00) | (1 << 9);	//odt
 		reg = (reg & ~0xe00000) | (1 << 21);	//clk drive up
 		reg = (reg & ~0x38000000) | (1 << 27);	//ctl drive up
-		MCHBAR32(0x1810 + channel * 0x100) = reg;
+		MCHBAR32(CRCOMPOFST1_ch(channel)) = reg;
 	}
 	printram("COMP1 done\n");
 
 	printram("FORCE RCOMP and wait 20us...");
-	MCHBAR32(0x5f08) |= 0x100;
+	MCHBAR32(M_COMP) |= 0x100;
 	udelay(20);
 	printram("done\n");
 }
@@ -427,7 +427,7 @@
 	}
 
 	/* Set version register */
-	MCHBAR32(0x5034) = 0xC04EB002;
+	MCHBAR32(MRC_REVISION) = 0xC04EB002;
 
 	/* Enable crossover */
 	dram_xover(ctrl);
@@ -436,16 +436,16 @@
 	dram_timing_regs(ctrl);
 
 	/* Power mode preset */
-	MCHBAR32(0x4e80) = 0x5500;
+	MCHBAR32(PM_THML_STAT) = 0x5500;
 
-	/* Set scheduler parameters */
-	MCHBAR32(0x4c20) = 0x10100005;
+	/* Set scheduler chicken bits */
+	MCHBAR32(SCHED_CBIT) = 0x10100005;
 
 	/* Set CPU specific register */
 	set_4f8c();
 
 	/* Clear IO reset bit */
-	MCHBAR32(0x5030) &= ~0x20;
+	MCHBAR32(MC_INIT_STATE_G) &= ~0x20;
 
 	/* Set MAD-DIMM registers */
 	dram_dimm_set_mapping(ctrl);
diff --git a/src/northbridge/intel/sandybridge/sandybridge.h b/src/northbridge/intel/sandybridge/sandybridge.h
index 52d4c5b..d2f76e0 100644
--- a/src/northbridge/intel/sandybridge/sandybridge.h
+++ b/src/northbridge/intel/sandybridge/sandybridge.h
@@ -127,22 +127,217 @@
 #define MCHBAR32_AND(x, and) (MCHBAR32(x) = (MCHBAR32(x) & (and)))
 #define MCHBAR32_AND_OR(x, and, or) (MCHBAR32(x) = (MCHBAR32(x) & (and)) | (or))
 
-#define TC_DBP_C0			0x4000  /* Timing of DDR - bin parameters */
-#define TC_RAP_C0			0x4004  /* Timing of DDR - regular access parameters */
-#define SC_IO_LATENCY_C0		0x4028  /* IO Latency Configuration */
-#define TC_RFP_C0			0x4294  /* Refresh Parameters */
-#define TC_RFTP_C0			0x4298  /* Refresh Timing Parameters */
-#define PM_PDWN_CONFIG			0x4cb0
-#define MAD_CHNL			0x5000  /* Address Decoder Channel Configuration */
-#define MAD_DIMM_CH0			0x5004  /* Address Decode Channel 0 */
-#define MAD_DIMM_CH1			0x5008  /* Address Decode Channel 1 */
+/* Indexed register helper macros */
+#define Gz(r, z)	((r) + ((z) * 0x100))
+#define Ly(r, y)	((r) + ((y) * 4))
+#define Cx(r, x)	((r) + ((x) * 0x400))
+
+/* FIXME: These two are equivalent, but had to be split for reproducibility reasons. */
+#define CxLy(r, x, y)	((r) + ((x) * 0x400) + ((y) * 4))
+#define LyCx(r, x, y)	((r) + ((y) * 4) + ((x) * 0x400))
+
+/* Register definitions */
+#define GDCRCLKRANKSUSED_ch(ch)		Gz(0x0c00, ch) /* Indicates which rank is populated */
+#define GDCRCLKCOMP_ch(ch)		Gz(0x0c04, ch) /* RCOMP result register */
+#define GDCRCKPICODE_ch(ch)		Gz(0x0c14, ch) /* PI coding for DDR CLK pins */
+#define GDCRCKLOGICDELAY_ch(ch)		Gz(0x0c18, ch) /* Logic delay of 1 QCLK in CLK slice */
+#define GDDLLFUSE_ch(ch)		Gz(0x0c20, ch) /* Used for fuse download to the DLLs */
+#define GDCRCLKDEBUGMUXCFG_ch(ch)	Gz(0x0c3c, ch) /* Debug MUX control */
+
+#define GDCRCMDDEBUGMUXCFG_Cz_S(ch)	Gz(0x0e3c, ch) /* Debug MUX control */
+
+#define CRCOMPOFST1_ch(ch)		Gz(0x1810, ch) /* DQ, CTL and CLK Offset values */
+
+#define GDCRTRAININGMOD_ch(ch)		Gz(0x3000, ch) /* Data training mode control */
+#define GDCRTRAININGRESULT1_ch(ch)	Gz(0x3004, ch) /* Training results according to PI */
+#define GDCRTRAININGRESULT2_ch(ch)	Gz(0x3008, ch)
+
+#define GDCRCTLRANKSUSED_ch(ch)		Gz(0x3200, ch) /* Indicates which rank is populated */
+#define GDCRCMDCOMP_ch(ch)		Gz(0x3204, ch) /* COMP values register */
+#define GDCRCMDCTLCOMP_ch(ch)		Gz(0x3208, ch) /* COMP values register */
+#define GDCRCMDPICODING_ch(ch)		Gz(0x320c, ch) /* Command and control PI coding */
+
+#define GDCRTRAININGMOD			0x3400 /* Data training mode control register */
+#define GDCRDATACOMP			0x340c /* COMP values register */
+
+#define CRCOMPOFST2			0x3714 /* CMD DRV, SComp and Static Leg controls */
+
+/* MC per-channel registers */
+#define TC_DBP_ch(ch)			Cx(0x4000, ch) /* Timings: BIN */
+#define TC_RAP_ch(ch)			Cx(0x4004, ch) /* Timings: Regular access */
+#define TC_RWP_ch(ch)			Cx(0x4008, ch) /* Timings: Read / Write */
+#define TC_OTHP_ch(ch)			Cx(0x400c, ch) /* Timings: Other parameters */
+#define SCHED_SECOND_CBIT_ch(ch)	Cx(0x401c, ch) /* More chicken bits */
+#define SCHED_CBIT_ch(ch)		Cx(0x4020, ch) /* Chicken bits in scheduler */
+#define SC_ROUNDT_LAT_ch(ch)		Cx(0x4024, ch) /* Round-trip latency per rank */
+#define SC_IO_LATENCY_ch(ch)		Cx(0x4028, ch) /* IO Latency Configuration */
+#define SCRAMBLING_SEED_1_ch(ch)	Cx(0x4034, ch) /* Scrambling seed 1 */
+#define SCRAMBLING_SEED_2_LOW_ch(ch)	Cx(0x4038, ch) /* Scrambling seed 2 low */
+#define SCRAMBLING_SEED_2_HIGH_ch(ch)	Cx(0x403c, ch) /* Scrambling seed 2 high */
+
+/* IOSAV Bytelane Bit-wise error */
+#define IOSAV_By_BW_SERROR_ch(ch, y)	CxLy(0x4040, ch, y)
+
+/* IOSAV Bytelane Bit-wise compare mask */
+#define IOSAV_By_BW_MASK_ch(ch, y)	CxLy(0x4080, ch, y)
+
+/*
+ * Defines the number of transactions (non-VC1 RD CAS commands) between two priority ticks.
+ * Different counters for transactions that are issued on the ring agents (core or GT) and
+ * transactions issued in the SA.
+ */
+#define SC_PR_CNT_CONFIG_ch(ch)	Cx(0x40a8, ch)
+#define SC_PCIT_ch(ch)		Cx(0x40ac, ch) /* Page-close idle timer setup - 8 bits */
+#define PM_PDWN_CONFIG_ch(ch)	Cx(0x40b0, ch) /* Power-down (CKE-off) operation config */
+#define ECC_INJECT_COUNT_ch(ch)	Cx(0x40b4, ch) /* ECC error injection count */
+#define ECC_DFT_ch(ch)		Cx(0x40b8, ch) /* ECC DFT features (ECC4ANA, error inject) */
+#define SC_WR_ADD_DELAY_ch(ch)	Cx(0x40d0, ch) /* Extra WR delay to overcome WR-flyby issue */
+
+#define IOSAV_By_BW_SERROR_C_ch(ch, y)	CxLy(0x4140, ch, y) /* IOSAV Bytelane Bit-wise error */
+
+/* IOSAV sub-sequence control registers */
+#define IOSAV_n_SP_CMD_ADDR_ch(ch, y)	LyCx(0x4200, ch, y) /* Special command address. */
+#define IOSAV_n_ADDR_UPD_ch(ch, y)	LyCx(0x4210, ch, y) /* Address update control */
+#define IOSAV_n_SP_CMD_CTL_ch(ch, y)	LyCx(0x4220, ch, y) /* Control of command signals */
+#define IOSAV_n_SUBSEQ_CTL_ch(ch, y)	LyCx(0x4230, ch, y) /* Sub-sequence controls */
+#define IOSAV_n_ADDRESS_LFSR_ch(ch, y)	LyCx(0x4240, ch, y) /* 23-bit LFSR state value */
+
+#define PM_THML_STAT_ch(ch)	Cx(0x4280, ch) /* Thermal status of each rank */
+#define IOSAV_SEQ_CTL_ch(ch)	Cx(0x4284, ch) /* IOSAV sequence level control */
+#define IOSAV_DATA_CTL_ch(ch)	Cx(0x4288, ch) /* Data control in IOSAV mode */
+#define IOSAV_STATUS_ch(ch)	Cx(0x428c, ch) /* State of the IOSAV sequence machine */
+#define TC_ZQCAL_ch(ch)		Cx(0x4290, ch) /* ZQCAL control register */
+#define TC_RFP_ch(ch)		Cx(0x4294, ch) /* Refresh Parameters */
+#define TC_RFTP_ch(ch)		Cx(0x4298, ch) /* Refresh Timing Parameters */
+#define TC_MR2_SHADOW_ch(ch)	Cx(0x429c, ch) /* MR2 shadow - copy of DDR configuration */
+#define MC_INIT_STATE_ch(ch)	Cx(0x42a0, ch) /* IOSAV mode control */
+#define TC_SRFTP_ch(ch)		Cx(0x42a4, ch) /* Self-refresh timing parameters */
+#define IOSAV_ERROR_ch(ch)	Cx(0x42ac, ch) /* Data vector count of the first error */
+#define IOSAV_DC_MASK_ch(ch)	Cx(0x42b0, ch) /* IOSAV data check masking */
+
+#define IOSAV_By_ERROR_COUNT_ch(ch, y)	CxLy(0x4340, ch, y) /* Per-byte 16-bit error count */
+#define IOSAV_G_ERROR_COUNT_ch(ch)	Cx(0x4364, ch) /* Global 16-bit error count */
+
+#define PM_TRML_M_CONFIG_ch(ch)		Cx(0x4380, ch) /* Thermal mode configuration */
+#define PM_CMD_PWR_ch(ch)		Cx(0x4384, ch) /* Power contribution of commands */
+#define PM_BW_LIMIT_CONFIG_ch(ch)	Cx(0x4388, ch) /* Bandwidth throttling on overtemp */
+#define SC_WDBWM_ch(ch)			Cx(0x438c, ch) /* Watermarks and starvation counter */
+
+/* MC Channel Broadcast registers */
+#define TC_DBP			0x4c00 /* Timings: BIN */
+#define TC_RAP			0x4c04 /* Timings: Regular access */
+#define TC_RWP			0x4c08 /* Timings: Read / Write */
+#define TC_OTHP			0x4c0c /* Timings: Other parameters */
+#define SCHED_SECOND_CBIT	0x4c1c /* More chicken bits */
+#define SCHED_CBIT		0x4c20 /* Chicken bits in scheduler */
+#define SC_ROUNDT_LAT		0x4c24 /* Round-trip latency per rank */
+#define SC_IO_LATENCY		0x4c28 /* IO Latency Configuration */
+#define SCRAMBLING_SEED_1	0x4c34 /* Scrambling seed 1 */
+#define SCRAMBLING_SEED_2_LOW	0x4c38 /* Scrambling seed 2 low */
+#define SCRAMBLING_SEED_2_HIGH	0x4c3c /* Scrambling seed 2 high */
+
+#define IOSAV_By_BW_SERROR(y)	Ly(0x4c40, y) /* IOSAV Bytelane Bit-wise error */
+#define IOSAV_By_BW_MASK(y)	Ly(0x4c80, y) /* IOSAV Bytelane Bit-wise compare mask */
+
+/*
+ * Defines the number of transactions (non-VC1 RD CAS commands) between two priority ticks.
+ * Different counters for transactions that are issued on the ring agents (core or GT) and
+ * transactions issued in the SA.
+ */
+#define SC_PR_CNT_CONFIG	0x4ca8
+#define SC_PCIT			0x4cac /* Page-close idle timer setup - 8 bits */
+#define PM_PDWN_CONFIG		0x4cb0 /* Power-down (CKE-off) operation config */
+#define ECC_INJECT_COUNT	0x4cb4 /* ECC error injection count */
+#define ECC_DFT			0x4cb8 /* ECC DFT features (ECC4ANA, error inject) */
+#define SC_WR_ADD_DELAY		0x4cd0 /* Extra WR delay to overcome WR-flyby issue */
+
+/* Opportunistic reads configuration during write-major-mode (WMM) */
+#define WMM_READ_CONFIG		0x4cd4 /** WARNING: Only exists on IVB! */
+
+#define IOSAV_By_BW_SERROR_C(y)	Ly(0x4d40, y) /* IOSAV Bytelane Bit-wise error */
+
+#define IOSAV_n_SP_CMD_ADDR(n)	Ly(0x4e00, n) /* Sub-sequence special command address */
+#define IOSAV_n_ADDR_UPD(n)	Ly(0x4e10, n) /* Address update after command execution */
+#define IOSAV_n_SP_CMD_CTL(n)	Ly(0x4e20, n) /* Command signals in sub-sequence command */
+#define IOSAV_n_SUBSEQ_CTL(n)	Ly(0x4e30, n) /* Sub-sequence command parameter control */
+#define IOSAV_n_ADDRESS_LFSR(n)	Ly(0x4e40, n) /* 23-bit LFSR value of the sequence */
+
+#define PM_THML_STAT		0x4e80 /* Thermal status of each rank */
+#define IOSAV_SEQ_CTL		0x4e84 /* IOSAV sequence level control */
+#define IOSAV_DATA_CTL		0x4e88 /* Data control in IOSAV mode */
+#define IOSAV_STATUS		0x4e8c /* State of the IOSAV sequence machine */
+#define TC_ZQCAL		0x4e90 /* ZQCAL control register */
+#define TC_RFP			0x4e94 /* Refresh Parameters */
+#define TC_RFTP			0x4e98 /* Refresh Timing Parameters */
+#define TC_MR2_SHADOW		0x4e9c /* MR2 shadow - copy of DDR configuration */
+#define MC_INIT_STATE		0x4ea0 /* IOSAV mode control */
+#define TC_SRFTP		0x4ea4 /* Self-refresh timing parameters */
+
+/*
+ * Auxiliary register in mcmnts synthesis FUB (Functional Unit Block). Additionally, this
+ * register is also used to enable IOSAV_n_SP_CMD_ADDR optimization on Ivy Bridge.
+ */
+#define MCMNTS_SPARE		0x4ea8 /** WARNING: Reserved, use only on IVB! */
+
+#define IOSAV_ERROR		0x4eac /* Data vector count of the first error */
+#define IOSAV_DC_MASK		0x4eb0 /* IOSAV data check masking */
+
+#define IOSAV_By_ERROR_COUNT(y)	Ly(0x4f40, y) /* Per-byte 16-bit error counter */
+#define IOSAV_G_ERROR_COUNT	0x4f64 /* Global 16-bit error counter */
+
+#define PM_TRML_M_CONFIG	0x4f80 /* Thermal mode configuration */
+#define PM_CMD_PWR		0x4f84 /* Power contribution of commands */
+#define PM_BW_LIMIT_CONFIG	0x4f88 /* Bandwidth throttling on overtemperature */
+#define SC_WDBWM		0x4f8c /* Watermarks and starvation counter config */
+
+#define MAD_CHNL		0x5000 /* Address Decoder Channel Configuration */
+#define MAD_DIMM_CH0		0x5004 /* Address Decode Channel 0 */
+#define MAD_DIMM_CH1		0x5008 /* Address Decode Channel 1 */
+#define MAD_DIMM_CH2		0x500c /* Address Decode Channel 2 (unused on SNB) */
+#define MAD_ZR			0x5014 /* Address Decode Zones */
+#define MCDECS_SPARE		0x5018 /* Spare register in mcdecs synthesis FUB */
+#define MCDECS_CBIT		0x501c /* Chicken bits in mcdecs synthesis FUB */
+
+#define CHANNEL_HASH		0x5024 /** WARNING: Only exists on IVB! */
+
+#define MC_INIT_STATE_G		0x5030 /* High-level behavior in IOSAV mode */
+#define MRC_REVISION		0x5034 /* MRC Revision */
+#define PM_DLL_CONFIG		0x5064 /* Memory Controller I/O DLL config */
+#define RCOMP_TIMER		0x5084 /* RCOMP evaluation timer register */
+
+#define MC_LOCK			0x50fc /* Memory Controlller Lock register */
+
+#define VTD1_BASE		0x5400 /* Base address for IGD */
+#define VTD2_BASE		0x5410 /* Base address for PEG, USB, SATA, etc. */
+#define PAIR_CTL		0x5418 /* Power Aware Interrupt Routing Control */
+
+/* PAVP control register, undocumented. Different from PAVPC on PCI config space. */
+#define MMIO_PAVP_CTL		0x5500 /* Bit 0 locks PAVP settings */
+
 #define MEM_TRML_ESTIMATION_CONFIG	0x5880
 #define MEM_TRML_THRESHOLDS_CONFIG	0x5888
 #define MEM_TRML_INTERRUPT		0x58a8
-#define MC_BIOS_REQ			0x5e00
-#define MC_BIOS_DATA			0x5e04
-#define SSKPD				0x5d14	/* 16bit (scratchpad) */
-#define BIOS_RESET_CPL			0x5da8	/* 8bit */
+
+#define MC_TURBO_PL1		0x59a0 /* Turbo Power Limit 1 parameters */
+#define MC_TURBO_PL2		0x59a4 /* Turbo Power Limit 2 parameters */
+
+#define SSKPD_OK		0x5d10 /* 64-bit scratchpad register */
+#define SSKPD			0x5d14 /* 16bit (scratchpad) */
+#define BIOS_RESET_CPL		0x5da8 /* 8bit */
+
+/* PCODE will sample SAPM-related registers at the end of Phase 4. */
+#define MC_BIOS_REQ		0x5e00 /* Memory frequency request register */
+#define MC_BIOS_DATA		0x5e04 /* Miscellaneous information for BIOS */
+#define SAPMCTL			0x5f00 /* Bit 3 enables DDR EPG (C7i) on IVB */
+#define M_COMP			0x5f08 /* Memory COMP control */
+#define SAPMTIMERS		0x5f10 /* SAPM timers in 10ns (100 MHz) units */
+
+/* WARNING: Only applies to Sandy Bridge! */
+#define BANDTIMERS_SNB		0x5f18 /* MPLL and PPLL time to do self-banding */
+
+/** WARNING: Only applies to Ivy Bridge! */
+#define SAPMTIMERS2_IVB		0x5f18 /** Extra latency for DDRIO EPG exit (C7i) */
+#define BANDTIMERS_IVB		0x5f20 /** MPLL and PPLL time to do self-banding */
 
 /*
  * EPBAR - Egress Port Root Complex Register Block
