diff --git a/src/northbridge/intel/ironlake/early_init.c b/src/northbridge/intel/ironlake/early_init.c
index 767db0d..1e4d0dc 100644
--- a/src/northbridge/intel/ironlake/early_init.c
+++ b/src/northbridge/intel/ironlake/early_init.c
@@ -112,7 +112,7 @@
 
 	/* Magic for S3 resume. Must be done early.  */
 	if (s3_resume) {
-		MCHBAR32(0x1e8) = (MCHBAR32(0x1e8) & ~1) | 6;
-		MCHBAR32(0x1e8) = (MCHBAR32(0x1e8) & ~3) | 4;
+		mchbar_clrsetbits32(0x1e8, 1, 6);
+		mchbar_clrsetbits32(0x1e8, 3, 4);
 	}
 }
diff --git a/src/northbridge/intel/ironlake/northbridge.c b/src/northbridge/intel/ironlake/northbridge.c
index 9dc38ec..b5ad824 100644
--- a/src/northbridge/intel/ironlake/northbridge.c
+++ b/src/northbridge/intel/ironlake/northbridge.c
@@ -146,23 +146,15 @@
 
 static void northbridge_init(struct device *dev)
 {
-	u32 reg32;
-
 	/* Clear error status bits */
-	DMIBAR32(DMIUESTS) = 0xffffffff;
-	DMIBAR32(DMICESTS) = 0xffffffff;
+	dmibar_write32(DMIUESTS, 0xffffffff);
+	dmibar_write32(DMICESTS, 0xffffffff);
 
-	reg32 = DMIBAR32(DMILLTC);
-	reg32 |= (1 << 29);
-	DMIBAR32(DMILLTC) = reg32;
+	dmibar_setbits32(DMILLTC, 1 << 29);
 
-	reg32 = DMIBAR32(0x1f8);
-	reg32 |= (1 << 16);
-	DMIBAR32(0x1f8) = reg32;
+	dmibar_setbits32(0x1f8, 1 << 16);
 
-	reg32 = DMIBAR32(DMILCTL);
-	reg32 |= (1 << 1) | (1 << 0);
-	DMIBAR32(DMILCTL) = reg32;
+	dmibar_setbits32(DMILCTL, 1 << 1 | 1 << 0);
 }
 
 /* Disable unused PEG devices based on devicetree before PCI enumeration */
diff --git a/src/northbridge/intel/ironlake/quickpath.c b/src/northbridge/intel/ironlake/quickpath.c
index 82fc1e7..e0e6f66 100644
--- a/src/northbridge/intel/ironlake/quickpath.c
+++ b/src/northbridge/intel/ironlake/quickpath.c
@@ -172,9 +172,9 @@
 					  2 * info->cas_latency - 7 + 11);
 		delay_d_ps += info->revision >= 8 ? 2758 : 4428;
 
-		MCHBAR32_AND_OR(0x140, 0xfaffffff, 0x2000000);
-		MCHBAR32_AND_OR(0x138, 0xfaffffff, 0x2000000);
-		if ((MCHBAR8(0x144) & 0x1f) > 0x13)
+		mchbar_clrsetbits32(0x140, 7 << 24, 2 << 24);
+		mchbar_clrsetbits32(0x138, 7 << 24, 2 << 24);
+		if ((mchbar_read8(0x144) & 0x1f) > 0x13)
 			delay_d_ps += 650;
 		delay_c_ps = delay_d_ps + 1800;
 		if (delay_c_ps <= delay_a_ps)
@@ -233,16 +233,16 @@
 	int channel;
 
 	for (channel = 0; channel < NUM_CHANNELS; channel++) {
-		MCHBAR32((channel << 10) + 0x274) =
+		mchbar_write32((channel << 10) + 0x274,
 			(training->reg274265[channel][0] << 16) |
-			training->reg274265[channel][1];
-		MCHBAR16((channel << 10) + 0x265) =
-			training->reg274265[channel][2] << 8;
+			training->reg274265[channel][1]);
+		mchbar_write16((channel << 10) + 0x265,
+			training->reg274265[channel][2] << 8);
 	}
 	if (training->reg2ca9_bit0)
-		MCHBAR8_OR(0x2ca9, 1);
+		mchbar_setbits8(0x2ca9, 1 << 0);
 	else
-		MCHBAR8_AND(0x2ca9, ~1);
+		mchbar_clrbits8(0x2ca9, 1 << 0);
 
 	printk(RAM_SPEW, "reg2ca9_bit0 = %x\n", training->reg2ca9_bit0);
 
@@ -288,11 +288,11 @@
 									 << 16)
 	    | (vv.divisor_f4_to_f2 << 20) | (vv.freq_min_reduced << 24);
 	if (reverse) {
-		MCHBAR32(reg) = y;
-		MCHBAR32(reg + 4) = x;
+		mchbar_write32(reg + 0, y);
+		mchbar_write32(reg + 4, x);
 	} else {
-		MCHBAR32(reg + 4) = y;
-		MCHBAR32(reg) = x;
+		mchbar_write32(reg + 4, y);
+		mchbar_write32(reg + 0, x);
 	}
 }
 
@@ -315,10 +315,10 @@
 		       | (ratios1.divisor_f4_to_fmax << 16) | (ratios2.
 							       divisor_f4_to_fmax
 							       << 20));
-	MCHBAR32(reg) = ratios1.freq4_to_max_remainder |
-		(ratios2.freq4_to_max_remainder << 8) |
-		(ratios1.divisor_f4_to_fmax << 16) |
-		(ratios2.divisor_f4_to_fmax << 20);
+	mchbar_write32(reg, ratios1.freq4_to_max_remainder |
+		ratios2.freq4_to_max_remainder << 8 |
+		ratios1.divisor_f4_to_fmax << 16 |
+		ratios2.divisor_f4_to_fmax << 20);
 }
 
 static void
@@ -331,33 +331,38 @@
 				 round_it, add_freqs, &ratios);
 	switch (mode) {
 	case 0:
-		MCHBAR32(reg + 4) = ratios.freq_diff_reduced |
-			(ratios.freqs_reversed << 8);
-		MCHBAR32(reg) = ratios.freq3_to_2_remainder |
-			(ratios.freq4_to_max_remainder << 8) |
-			(ratios.divisor_f3_to_fmax << 16) |
-			(ratios.divisor_f4_to_fmax << 20) |
-			(ratios.freq_min_reduced << 24);
+		mchbar_write32(reg + 4,
+			ratios.freq_diff_reduced |
+			ratios.freqs_reversed << 8);
+		mchbar_write32(reg,
+			ratios.freq3_to_2_remainder |
+			ratios.freq4_to_max_remainder << 8 |
+			ratios.divisor_f3_to_fmax << 16 |
+			ratios.divisor_f4_to_fmax << 20 |
+			ratios.freq_min_reduced << 24);
 		break;
 
 	case 1:
-		MCHBAR32(reg) = ratios.freq3_to_2_remainder |
-			(ratios.divisor_f3_to_fmax << 16);
+		mchbar_write32(reg,
+			ratios.freq3_to_2_remainder |
+			ratios.divisor_f3_to_fmax << 16);
 		break;
 
 	case 2:
-		MCHBAR32(reg) = ratios.freq3_to_2_remainder |
-			(ratios.freq4_to_max_remainder << 8) |
-			(ratios.divisor_f3_to_fmax << 16) |
-			(ratios.divisor_f4_to_fmax << 20);
+		mchbar_write32(reg,
+			ratios.freq3_to_2_remainder |
+			ratios.freq4_to_max_remainder << 8 |
+			ratios.divisor_f3_to_fmax << 16 |
+			ratios.divisor_f4_to_fmax << 20);
 		break;
 
 	case 4:
-		MCHBAR32(reg) = (ratios.divisor_f3_to_fmax << 4) |
-			(ratios.divisor_f4_to_fmax << 8) |
-			(ratios.freqs_reversed << 12) |
-			(ratios.freq_min_reduced << 16) |
-			(ratios.freq_diff_reduced << 24);
+		mchbar_write32(reg,
+			ratios.divisor_f3_to_fmax << 4 |
+			ratios.divisor_f4_to_fmax << 8 |
+			ratios.freqs_reversed << 12 |
+			ratios.freq_min_reduced << 16 |
+			ratios.freq_diff_reduced << 24);
 		break;
 	}
 }
@@ -393,7 +398,7 @@
 	if (s3resume) {
 		printk(RAM_SPEW, "[6dc] <= %x\n",
 			info->cached_training->reg_6dc);
-		MCHBAR32(0x6dc) = info->cached_training->reg_6dc;
+		mchbar_write32(0x6dc, info->cached_training->reg_6dc);
 	} else
 		set_6d_reg(info, 0x6dc, 2 * info->fsb_frequency, frequency_11(info), 0,
 			   info->delay46_ps[0], 0,
@@ -405,7 +410,7 @@
 	if (s3resume) {
 		printk(RAM_SPEW, "[6e8] <= %x\n",
 			info->cached_training->reg_6e8);
-		MCHBAR32(0x6e8) = info->cached_training->reg_6e8;
+		mchbar_write32(0x6e8, info->cached_training->reg_6e8);
 	} else
 		set_6d_reg(info, 0x6e8, 2 * info->fsb_frequency, frequency_11(info), 0,
 			   info->delay46_ps[1], 0,
@@ -425,15 +430,15 @@
 	set_2d5x_reg(info, 0x2da8, 0x195, frequency_11(info), 1060, 775, 484,
 		     480, 0);
 	set_2d5x_reg(info, 0x2db0, 0x195, 0x78, 4183, 6023, 2217, 2048, 0);
-	MCHBAR32(0x2dbc) = ((frequency_11(info) / 2) - 1) | 0xe00000;
-	MCHBAR32(0x2db8) = ((info->fsb_frequency - 1) << 16) | 0x77;
+	mchbar_write32(0x2dbc, ((frequency_11(info) / 2) - 1) | 0xe00000);
+	mchbar_write32(0x2db8, (info->fsb_frequency - 1) << 16 | 0x77);
 }
 
 static u16 quickpath_configure_pll_ratio(struct raminfo *info, const u8 x2ca8)
 {
-	MCHBAR32_OR(0x18b4, 0x210000);
-	MCHBAR32_OR(0x1890, 0x2000000);
-	MCHBAR32_OR(0x18b4, 0x8000);
+	mchbar_setbits32(0x18b4, 1 << 21 | 1 << 16);
+	mchbar_setbits32(0x1890, 1 << 25);
+	mchbar_setbits32(0x18b4, 1 << 15);
 
 	/* Get maximum supported PLL ratio */
 	u16 qpi_pll_ratio = (pci_read_config32(QPI_PHY_0, QPI_PLL_STATUS) >> 24 & 0x7f);
@@ -455,13 +460,13 @@
 	/* Finally, program the ratio */
 	pci_write_config8(QPI_PHY_0, QPI_PLL_RATIO, qpi_pll_ratio);
 
-	const u16 csipll0 = MCHBAR16(0x2c10);
-	MCHBAR16(0x2c10) = (qpi_pll_ratio > 26) << 11 | 0x400 | qpi_pll_ratio;
+	const u16 csipll0 = mchbar_read16(0x2c10);
+	mchbar_write16(0x2c10, (qpi_pll_ratio > 26) << 11 | 1 << 10 | qpi_pll_ratio);
 
-	if (csipll0 != MCHBAR16(0x2c10) && x2ca8 == 0)
-		MCHBAR8_OR(0x2ca8, 1);
+	if (csipll0 != mchbar_read16(0x2c10) && x2ca8 == 0)
+		mchbar_setbits8(0x2ca8, 1 << 0);
 
-	MCHBAR16_OR(0x2c12, 0x100);
+	mchbar_setbits16(0x2c12, 1 << 8);
 
 	return qpi_pll_ratio;
 }
@@ -473,46 +478,46 @@
 
 	/* Initialize DDR MPLL first */
 	if (x2ca8 == 0) {
-		MCHBAR8_AND_OR(0x164, 0xd9, info->clock_speed_index == 0 ? 0x24 : 0x26);
+		mchbar_clrsetbits8(0x164, 0x26, info->clock_speed_index == 0 ? 0x24 : 0x26);
 
 		/* Program DDR MPLL feedback divider ratio */
-		MCHBAR16(0x2c20) = (info->clock_speed_index + 3) * 4;
+		mchbar_write16(0x2c20, (info->clock_speed_index + 3) * 4);
 	}
 
 	const u16 qpi_pll_ratio = quickpath_configure_pll_ratio(info, x2ca8);
 
-	MCHBAR32_AND_OR(0x1804, 0xfffffffc, 0x8400080);
+	mchbar_clrsetbits32(0x1804, 0x3, 0x8400080);
 	pci_update_config32(QPI_PHY_0, QPI_PHY_CONTROL, 0xfffffffc, 0x400080);
 
-	const u32 x1c04 = MCHBAR32(0x1c04) & 0xc01080;
-	const u32 x1804 = MCHBAR32(0x1804) & 0xc01080;
+	const u32 x1c04 = mchbar_read32(0x1c04) & 0xc01080;
+	const u32 x1804 = mchbar_read32(0x1804) & 0xc01080;
 
 	if (x1c04 != x1804 && x2ca8 == 0)
-		MCHBAR8_OR(0x2ca8, 1);
+		mchbar_setbits8(0x2ca8, 1 << 0);
 
-	MCHBAR32(0x18d8) = 0x120000;
-	MCHBAR32(0x18dc) = 0x30a484a;
+	mchbar_write32(0x18d8, 0x120000);
+	mchbar_write32(0x18dc, 0x30a484a);
 	pci_write_config32(QPI_PHY_0, QPI_PHY_EP_SELECT, 0x0);
 	pci_write_config32(QPI_PHY_0, QPI_PHY_EP_MCTR, 0x9444a);
-	MCHBAR32(0x18d8) = 0x40000;
-	MCHBAR32(0x18dc) = 0xb000000;
+	mchbar_write32(0x18d8, 0x40000);
+	mchbar_write32(0x18dc, 0xb000000);
 	pci_write_config32(QPI_PHY_0, QPI_PHY_EP_SELECT, 0x60000);
 	pci_write_config32(QPI_PHY_0, QPI_PHY_EP_MCTR, 0x0);
-	MCHBAR32(0x18d8) = 0x180000;
-	MCHBAR32(0x18dc) = 0xc0000142;
+	mchbar_write32(0x18d8, 0x180000);
+	mchbar_write32(0x18dc, 0xc0000142);
 	pci_write_config32(QPI_PHY_0, QPI_PHY_EP_SELECT, 0x20000);
 	pci_write_config32(QPI_PHY_0, QPI_PHY_EP_MCTR, 0x142);
-	MCHBAR32(0x18d8) = 0x1e0000;
+	mchbar_write32(0x18d8, 0x1e0000);
 
-	const u32 x18dc = MCHBAR32(0x18dc);
-	MCHBAR32(0x18dc) = qpi_pll_ratio < 18 ? 2 : 3;
+	const u32 x18dc = mchbar_read32(0x18dc);
+	mchbar_write32(0x18dc, qpi_pll_ratio < 18 ? 2 : 3);
 
-	if (x18dc != MCHBAR32(0x18dc) && x2ca8 == 0)
-		MCHBAR8_OR(0x2ca8, 1);
+	if (x18dc != mchbar_read32(0x18dc) && x2ca8 == 0)
+		mchbar_setbits8(0x2ca8, 1 << 0);
 
 	reg8 = qpi_pll_ratio > 20 ? 10 : 9;
 
-	MCHBAR32(0x188c) = 0x20bc00 | reg8;
+	mchbar_write32(0x188c, 0x20bc00 | reg8);
 	pci_write_config32(QPI_PHY_0, QPI_PHY_PWR_MGMT, 0x40b0c00 | reg8);
 
 	if (qpi_pll_ratio <= 14)
@@ -522,28 +527,28 @@
 	else
 		reg8 = 0x51;
 
-	MCHBAR32(0x1a10) = reg8 << 24 | qpi_pll_ratio * 60;
-	MCHBAR32_OR(0x18b8, 0x200);
-	MCHBAR32_OR(0x1918, 0x300);
+	mchbar_write32(0x1a10, reg8 << 24 | qpi_pll_ratio * 60);
+	mchbar_setbits32(0x18b8, 0x200);
+	mchbar_setbits32(0x1918, 0x300);
 
 	if (info->revision > 0x17)
-		MCHBAR32_OR(0x18b8, 0xc00);
+		mchbar_setbits32(0x18b8, 0xc00);
 
 	reg32 = ((qpi_pll_ratio > 20) + 1) << 16;
 
-	MCHBAR32_AND_OR(0x182c, 0xfff0f0ff, reg32 | 0x200);
+	mchbar_clrsetbits32(0x182c, ~0xfff0f0ff, reg32 | 0x200);
 	pci_update_config32(QPI_PHY_0, QPI_PHY_PRIM_TIMEOUT, 0xfff0f0ff, reg32 | 0x200);
-	MCHBAR32_AND(0x1a1c, 0x8fffffff);
-	MCHBAR32_OR(0x1a70, 0x100000);
+	mchbar_clrbits32(0x1a1c, 7 << 28);
+	mchbar_setbits32(0x1a70, 1 << 20);
 
-	MCHBAR32_AND(0x18b4, 0xffff7fff);
-	MCHBAR32_AND_OR(0x1a68, 0xffebc03f, 0x143800);
+	mchbar_clrbits32(0x18b4, 1 << 15);
+	mchbar_clrsetbits32(0x1a68, 0x00143fc0, 0x143800);
 
-	const u32 x1e68 = MCHBAR32(0x1e68) & 0x143fc0;
-	const u32 x1a68 = MCHBAR32(0x1a68) & 0x143fc0;
+	const u32 x1e68 = mchbar_read32(0x1e68) & 0x143fc0;
+	const u32 x1a68 = mchbar_read32(0x1a68) & 0x143fc0;
 
 	if (x1e68 != x1a68 && x2ca8 == 0)
-		MCHBAR8_OR(0x2ca8, 1);
+		mchbar_setbits8(0x2ca8, 1 << 0);
 
 	pci_update_config32(QPI_LINK_0, QPI_QPILCL, 0xffffff3f, 0x140000);
 
@@ -551,21 +556,21 @@
 	pci_write_config32(QPI_LINK_0, QPI_DEF_RMT_VN_CREDITS, (reg32 & 0xfffe4555) | 0x64555);
 
 	if (reg32 != pci_read_config32(QPI_LINK_0, QPI_DEF_RMT_VN_CREDITS) && x2ca8 == 0)
-		MCHBAR8_OR(0x2ca8, 1);
+		mchbar_setbits8(0x2ca8, 1 << 0);
 
 	pci_update_config32(QPI_NON_CORE, MIRROR_PORT_CTL, ~3, 0x80 * 3);
 
-	reg32 = MCHBAR32(0x1af0);
-	MCHBAR32(0x1af0) = (reg32 & 0xfdffcf) | 0x1f020000;
+	reg32 = mchbar_read32(0x1af0);
+	mchbar_write32(0x1af0, (reg32 & 0xfdffcf) | 0x1f020000);
 
-	if (reg32 != MCHBAR32(0x1af0) && x2ca8 == 0)
-		MCHBAR8_OR(0x2ca8, 1);
+	if (reg32 != mchbar_read32(0x1af0) && x2ca8 == 0)
+		mchbar_setbits8(0x2ca8, 1 << 0);
 
-	MCHBAR32_AND(0x1890, 0xfdffffff);
-	MCHBAR32_AND_OR(0x18b4, 0xffff6fff, 0x6000);
-	MCHBAR32(0x18a4) = 0x22222222;
-	MCHBAR32(0x18a8) = 0x22222222;
-	MCHBAR32(0x18ac) = 0x22222;
+	mchbar_clrbits32(0x1890, 1 << 25);
+	mchbar_clrsetbits32(0x18b4, 0xf << 12, 0x6 << 12);
+	mchbar_write32(0x18a4, 0x22222222);
+	mchbar_write32(0x18a8, 0x22222222);
+	mchbar_write32(0x18ac, 0x22222);
 }
 
 void late_quickpath_init(struct raminfo *info, const int s3resume)
@@ -582,204 +587,204 @@
 	set_2dxx_series(info, s3resume);
 
 	if (!(deven & 8)) {
-		MCHBAR32_AND_OR(0x2cb0, 0, 0x40);
+		mchbar_clrsetbits32(0x2cb0, ~0, 0x40);
 	}
 
 	udelay(1000);
 
 	if (deven & 8) {
-		MCHBAR32_OR(0xff8, 0x1800);
-		MCHBAR32_AND(0x2cb0, 0x00);
+		mchbar_setbits32(0xff8, 3 << 11);
+		mchbar_clrbits32(0x2cb0, ~0);
 		pci_read_config8(PCI_DEV (0, 0x2, 0x0), 0x4c);
 		pci_read_config8(PCI_DEV (0, 0x2, 0x0), 0x4c);
 		pci_read_config8(PCI_DEV (0, 0x2, 0x0), 0x4e);
 
-		MCHBAR8(0x1150);
-		MCHBAR8(0x1151);
-		MCHBAR8(0x1022);
-		MCHBAR8(0x16d0);
-		MCHBAR32(0x1300) = 0x60606060;
-		MCHBAR32(0x1304) = 0x60606060;
-		MCHBAR32(0x1308) = 0x78797a7b;
-		MCHBAR32(0x130c) = 0x7c7d7e7f;
-		MCHBAR32(0x1310) = 0x60606060;
-		MCHBAR32(0x1314) = 0x60606060;
-		MCHBAR32(0x1318) = 0x60606060;
-		MCHBAR32(0x131c) = 0x60606060;
-		MCHBAR32(0x1320) = 0x50515253;
-		MCHBAR32(0x1324) = 0x54555657;
-		MCHBAR32(0x1328) = 0x58595a5b;
-		MCHBAR32(0x132c) = 0x5c5d5e5f;
-		MCHBAR32(0x1330) = 0x40414243;
-		MCHBAR32(0x1334) = 0x44454647;
-		MCHBAR32(0x1338) = 0x48494a4b;
-		MCHBAR32(0x133c) = 0x4c4d4e4f;
-		MCHBAR32(0x1340) = 0x30313233;
-		MCHBAR32(0x1344) = 0x34353637;
-		MCHBAR32(0x1348) = 0x38393a3b;
-		MCHBAR32(0x134c) = 0x3c3d3e3f;
-		MCHBAR32(0x1350) = 0x20212223;
-		MCHBAR32(0x1354) = 0x24252627;
-		MCHBAR32(0x1358) = 0x28292a2b;
-		MCHBAR32(0x135c) = 0x2c2d2e2f;
-		MCHBAR32(0x1360) = 0x10111213;
-		MCHBAR32(0x1364) = 0x14151617;
-		MCHBAR32(0x1368) = 0x18191a1b;
-		MCHBAR32(0x136c) = 0x1c1d1e1f;
-		MCHBAR32(0x1370) = 0x10203;
-		MCHBAR32(0x1374) = 0x4050607;
-		MCHBAR32(0x1378) = 0x8090a0b;
-		MCHBAR32(0x137c) = 0xc0d0e0f;
-		MCHBAR8(0x11cc) = 0x4e;
-		MCHBAR32(0x1110) = 0x73970404;
-		MCHBAR32(0x1114) = 0x72960404;
-		MCHBAR32(0x1118) = 0x6f950404;
-		MCHBAR32(0x111c) = 0x6d940404;
-		MCHBAR32(0x1120) = 0x6a930404;
-		MCHBAR32(0x1124) = 0x68a41404;
-		MCHBAR32(0x1128) = 0x66a21404;
-		MCHBAR32(0x112c) = 0x63a01404;
-		MCHBAR32(0x1130) = 0x609e1404;
-		MCHBAR32(0x1134) = 0x5f9c1404;
-		MCHBAR32(0x1138) = 0x5c961404;
-		MCHBAR32(0x113c) = 0x58a02404;
-		MCHBAR32(0x1140) = 0x54942404;
-		MCHBAR32(0x1190) = 0x900080a;
-		MCHBAR16(0x11c0) = 0xc40b;
-		MCHBAR16(0x11c2) = 0x303;
-		MCHBAR16(0x11c4) = 0x301;
-		MCHBAR32_AND_OR(0x1190, 0, 0x8900080a);
-		MCHBAR32(0x11b8) = 0x70c3000;
-		MCHBAR8(0x11ec) = 0xa;
-		MCHBAR16(0x1100) = 0x800;
-		MCHBAR32_AND_OR(0x11bc, 0, 0x1e84800);
-		MCHBAR16(0x11ca) = 0xfa;
-		MCHBAR32(0x11e4) = 0x4e20;
-		MCHBAR8(0x11bc) = 0xf;
-		MCHBAR16(0x11da) = 0x19;
-		MCHBAR16(0x11ba) = 0x470c;
-		MCHBAR32(0x1680) = 0xe6ffe4ff;
-		MCHBAR32(0x1684) = 0xdeffdaff;
-		MCHBAR32(0x1688) = 0xd4ffd0ff;
-		MCHBAR32(0x168c) = 0xccffc6ff;
-		MCHBAR32(0x1690) = 0xc0ffbeff;
-		MCHBAR32(0x1694) = 0xb8ffb0ff;
-		MCHBAR32(0x1698) = 0xa8ff0000;
-		MCHBAR32(0x169c) = 0xc00;
-		MCHBAR32(0x1290) = 0x5000000;
+		mchbar_read8(0x1150);
+		mchbar_read8(0x1151);
+		mchbar_read8(0x1022);
+		mchbar_read8(0x16d0);
+		mchbar_write32(0x1300, 0x60606060);
+		mchbar_write32(0x1304, 0x60606060);
+		mchbar_write32(0x1308, 0x78797a7b);
+		mchbar_write32(0x130c, 0x7c7d7e7f);
+		mchbar_write32(0x1310, 0x60606060);
+		mchbar_write32(0x1314, 0x60606060);
+		mchbar_write32(0x1318, 0x60606060);
+		mchbar_write32(0x131c, 0x60606060);
+		mchbar_write32(0x1320, 0x50515253);
+		mchbar_write32(0x1324, 0x54555657);
+		mchbar_write32(0x1328, 0x58595a5b);
+		mchbar_write32(0x132c, 0x5c5d5e5f);
+		mchbar_write32(0x1330, 0x40414243);
+		mchbar_write32(0x1334, 0x44454647);
+		mchbar_write32(0x1338, 0x48494a4b);
+		mchbar_write32(0x133c, 0x4c4d4e4f);
+		mchbar_write32(0x1340, 0x30313233);
+		mchbar_write32(0x1344, 0x34353637);
+		mchbar_write32(0x1348, 0x38393a3b);
+		mchbar_write32(0x134c, 0x3c3d3e3f);
+		mchbar_write32(0x1350, 0x20212223);
+		mchbar_write32(0x1354, 0x24252627);
+		mchbar_write32(0x1358, 0x28292a2b);
+		mchbar_write32(0x135c, 0x2c2d2e2f);
+		mchbar_write32(0x1360, 0x10111213);
+		mchbar_write32(0x1364, 0x14151617);
+		mchbar_write32(0x1368, 0x18191a1b);
+		mchbar_write32(0x136c, 0x1c1d1e1f);
+		mchbar_write32(0x1370, 0x10203);
+		mchbar_write32(0x1374, 0x4050607);
+		mchbar_write32(0x1378, 0x8090a0b);
+		mchbar_write32(0x137c, 0xc0d0e0f);
+		mchbar_write8(0x11cc, 0x4e);
+		mchbar_write32(0x1110, 0x73970404);
+		mchbar_write32(0x1114, 0x72960404);
+		mchbar_write32(0x1118, 0x6f950404);
+		mchbar_write32(0x111c, 0x6d940404);
+		mchbar_write32(0x1120, 0x6a930404);
+		mchbar_write32(0x1124, 0x68a41404);
+		mchbar_write32(0x1128, 0x66a21404);
+		mchbar_write32(0x112c, 0x63a01404);
+		mchbar_write32(0x1130, 0x609e1404);
+		mchbar_write32(0x1134, 0x5f9c1404);
+		mchbar_write32(0x1138, 0x5c961404);
+		mchbar_write32(0x113c, 0x58a02404);
+		mchbar_write32(0x1140, 0x54942404);
+		mchbar_write32(0x1190, 0x900080a);
+		mchbar_write16(0x11c0, 0xc40b);
+		mchbar_write16(0x11c2, 0x303);
+		mchbar_write16(0x11c4, 0x301);
+		mchbar_clrsetbits32(0x1190, ~0, 0x8900080a);
+		mchbar_write32(0x11b8, 0x70c3000);
+		mchbar_write8(0x11ec, 0xa);
+		mchbar_write16(0x1100, 0x800);
+		mchbar_clrsetbits32(0x11bc, ~0, 0x1e84800);
+		mchbar_write16(0x11ca, 0xfa);
+		mchbar_write32(0x11e4, 0x4e20);
+		mchbar_write8(0x11bc, 0xf);
+		mchbar_write16(0x11da, 0x19);
+		mchbar_write16(0x11ba, 0x470c);
+		mchbar_write32(0x1680, 0xe6ffe4ff);
+		mchbar_write32(0x1684, 0xdeffdaff);
+		mchbar_write32(0x1688, 0xd4ffd0ff);
+		mchbar_write32(0x168c, 0xccffc6ff);
+		mchbar_write32(0x1690, 0xc0ffbeff);
+		mchbar_write32(0x1694, 0xb8ffb0ff);
+		mchbar_write32(0x1698, 0xa8ff0000);
+		mchbar_write32(0x169c, 0xc00);
+		mchbar_write32(0x1290, 0x5000000);
 	}
 
-	MCHBAR32(0x124c) = 0x15040d00;
-	MCHBAR32(0x1250) = 0x7f0000;
-	MCHBAR32(0x1254) = 0x1e220004;
-	MCHBAR32(0x1258) = 0x4000004;
-	MCHBAR32(0x1278) = 0x0;
-	MCHBAR32(0x125c) = 0x0;
-	MCHBAR32(0x1260) = 0x0;
-	MCHBAR32(0x1264) = 0x0;
-	MCHBAR32(0x1268) = 0x0;
-	MCHBAR32(0x126c) = 0x0;
-	MCHBAR32(0x1270) = 0x0;
-	MCHBAR32(0x1274) = 0x0;
+	mchbar_write32(0x124c, 0x15040d00);
+	mchbar_write32(0x1250, 0x7f0000);
+	mchbar_write32(0x1254, 0x1e220004);
+	mchbar_write32(0x1258, 0x4000004);
+	mchbar_write32(0x1278, 0x0);
+	mchbar_write32(0x125c, 0x0);
+	mchbar_write32(0x1260, 0x0);
+	mchbar_write32(0x1264, 0x0);
+	mchbar_write32(0x1268, 0x0);
+	mchbar_write32(0x126c, 0x0);
+	mchbar_write32(0x1270, 0x0);
+	mchbar_write32(0x1274, 0x0);
 
 	if (deven & 8) {
-		MCHBAR16(0x1214) = 0x320;
-		MCHBAR32(0x1600) = 0x40000000;
-		MCHBAR32_AND_OR(0x11f4, 0, 0x10000000);
-		MCHBAR16_AND_OR(0x1230, 0, 0x8000);
-		MCHBAR32(0x1400) = 0x13040020;
-		MCHBAR32(0x1404) = 0xe090120;
-		MCHBAR32(0x1408) = 0x5120220;
-		MCHBAR32(0x140c) = 0x5120330;
-		MCHBAR32(0x1410) = 0xe090220;
-		MCHBAR32(0x1414) = 0x1010001;
-		MCHBAR32(0x1418) = 0x1110000;
-		MCHBAR32(0x141c) = 0x9020020;
-		MCHBAR32(0x1420) = 0xd090220;
-		MCHBAR32(0x1424) = 0x2090220;
-		MCHBAR32(0x1428) = 0x2090330;
-		MCHBAR32(0x142c) = 0xd090220;
-		MCHBAR32(0x1430) = 0x1010001;
-		MCHBAR32(0x1434) = 0x1110000;
-		MCHBAR32(0x1438) = 0x11040020;
-		MCHBAR32(0x143c) = 0x4030220;
-		MCHBAR32(0x1440) = 0x1060220;
-		MCHBAR32(0x1444) = 0x1060330;
-		MCHBAR32(0x1448) = 0x4030220;
-		MCHBAR32(0x144c) = 0x1010001;
-		MCHBAR32(0x1450) = 0x1110000;
-		MCHBAR32(0x1454) = 0x4010020;
-		MCHBAR32(0x1458) = 0xb090220;
-		MCHBAR32(0x145c) = 0x1090220;
-		MCHBAR32(0x1460) = 0x1090330;
-		MCHBAR32(0x1464) = 0xb090220;
-		MCHBAR32(0x1468) = 0x1010001;
-		MCHBAR32(0x146c) = 0x1110000;
-		MCHBAR32(0x1470) = 0xf040020;
-		MCHBAR32(0x1474) = 0xa090220;
-		MCHBAR32(0x1478) = 0x1120220;
-		MCHBAR32(0x147c) = 0x1120330;
-		MCHBAR32(0x1480) = 0xa090220;
-		MCHBAR32(0x1484) = 0x1010001;
-		MCHBAR32(0x1488) = 0x1110000;
-		MCHBAR32(0x148c) = 0x7020020;
-		MCHBAR32(0x1490) = 0x1010220;
-		MCHBAR32(0x1494) = 0x10210;
-		MCHBAR32(0x1498) = 0x10320;
-		MCHBAR32(0x149c) = 0x1010220;
-		MCHBAR32(0x14a0) = 0x1010001;
-		MCHBAR32(0x14a4) = 0x1110000;
-		MCHBAR32(0x14a8) = 0xd040020;
-		MCHBAR32(0x14ac) = 0x8090220;
-		MCHBAR32(0x14b0) = 0x1111310;
-		MCHBAR32(0x14b4) = 0x1111420;
-		MCHBAR32(0x14b8) = 0x8090220;
-		MCHBAR32(0x14bc) = 0x1010001;
-		MCHBAR32(0x14c0) = 0x1110000;
-		MCHBAR32(0x14c4) = 0x3010020;
-		MCHBAR32(0x14c8) = 0x7090220;
-		MCHBAR32(0x14cc) = 0x1081310;
-		MCHBAR32(0x14d0) = 0x1081420;
-		MCHBAR32(0x14d4) = 0x7090220;
-		MCHBAR32(0x14d8) = 0x1010001;
-		MCHBAR32(0x14dc) = 0x1110000;
-		MCHBAR32(0x14e0) = 0xb040020;
-		MCHBAR32(0x14e4) = 0x2030220;
-		MCHBAR32(0x14e8) = 0x1051310;
-		MCHBAR32(0x14ec) = 0x1051420;
-		MCHBAR32(0x14f0) = 0x2030220;
-		MCHBAR32(0x14f4) = 0x1010001;
-		MCHBAR32(0x14f8) = 0x1110000;
-		MCHBAR32(0x14fc) = 0x5020020;
-		MCHBAR32(0x1500) = 0x5090220;
-		MCHBAR32(0x1504) = 0x2071310;
-		MCHBAR32(0x1508) = 0x2071420;
-		MCHBAR32(0x150c) = 0x5090220;
-		MCHBAR32(0x1510) = 0x1010001;
-		MCHBAR32(0x1514) = 0x1110000;
-		MCHBAR32(0x1518) = 0x7040120;
-		MCHBAR32(0x151c) = 0x2090220;
-		MCHBAR32(0x1520) = 0x70b1210;
-		MCHBAR32(0x1524) = 0x70b1310;
-		MCHBAR32(0x1528) = 0x2090220;
-		MCHBAR32(0x152c) = 0x1010001;
-		MCHBAR32(0x1530) = 0x1110000;
-		MCHBAR32(0x1534) = 0x1010110;
-		MCHBAR32(0x1538) = 0x1081310;
-		MCHBAR32(0x153c) = 0x5041200;
-		MCHBAR32(0x1540) = 0x5041310;
-		MCHBAR32(0x1544) = 0x1081310;
-		MCHBAR32(0x1548) = 0x1010001;
-		MCHBAR32(0x154c) = 0x1110000;
-		MCHBAR32(0x1550) = 0x1040120;
-		MCHBAR32(0x1554) = 0x4051210;
-		MCHBAR32(0x1558) = 0xd051200;
-		MCHBAR32(0x155c) = 0xd051200;
-		MCHBAR32(0x1560) = 0x4051210;
-		MCHBAR32(0x1564) = 0x1010001;
-		MCHBAR32(0x1568) = 0x1110000;
-		MCHBAR16(0x1222) = 0x220a;
-		MCHBAR16(0x123c) = 0x1fc0;
-		MCHBAR16(0x1220) = 0x1388;
+		mchbar_write16(0x1214, 0x320);
+		mchbar_write32(0x1600, 0x40000000);
+		mchbar_clrsetbits32(0x11f4, ~0, 1 << 28);
+		mchbar_clrsetbits16(0x1230, ~0, 1 << 15);
+		mchbar_write32(0x1400, 0x13040020);
+		mchbar_write32(0x1404, 0xe090120);
+		mchbar_write32(0x1408, 0x5120220);
+		mchbar_write32(0x140c, 0x5120330);
+		mchbar_write32(0x1410, 0xe090220);
+		mchbar_write32(0x1414, 0x1010001);
+		mchbar_write32(0x1418, 0x1110000);
+		mchbar_write32(0x141c, 0x9020020);
+		mchbar_write32(0x1420, 0xd090220);
+		mchbar_write32(0x1424, 0x2090220);
+		mchbar_write32(0x1428, 0x2090330);
+		mchbar_write32(0x142c, 0xd090220);
+		mchbar_write32(0x1430, 0x1010001);
+		mchbar_write32(0x1434, 0x1110000);
+		mchbar_write32(0x1438, 0x11040020);
+		mchbar_write32(0x143c, 0x4030220);
+		mchbar_write32(0x1440, 0x1060220);
+		mchbar_write32(0x1444, 0x1060330);
+		mchbar_write32(0x1448, 0x4030220);
+		mchbar_write32(0x144c, 0x1010001);
+		mchbar_write32(0x1450, 0x1110000);
+		mchbar_write32(0x1454, 0x4010020);
+		mchbar_write32(0x1458, 0xb090220);
+		mchbar_write32(0x145c, 0x1090220);
+		mchbar_write32(0x1460, 0x1090330);
+		mchbar_write32(0x1464, 0xb090220);
+		mchbar_write32(0x1468, 0x1010001);
+		mchbar_write32(0x146c, 0x1110000);
+		mchbar_write32(0x1470, 0xf040020);
+		mchbar_write32(0x1474, 0xa090220);
+		mchbar_write32(0x1478, 0x1120220);
+		mchbar_write32(0x147c, 0x1120330);
+		mchbar_write32(0x1480, 0xa090220);
+		mchbar_write32(0x1484, 0x1010001);
+		mchbar_write32(0x1488, 0x1110000);
+		mchbar_write32(0x148c, 0x7020020);
+		mchbar_write32(0x1490, 0x1010220);
+		mchbar_write32(0x1494, 0x10210);
+		mchbar_write32(0x1498, 0x10320);
+		mchbar_write32(0x149c, 0x1010220);
+		mchbar_write32(0x14a0, 0x1010001);
+		mchbar_write32(0x14a4, 0x1110000);
+		mchbar_write32(0x14a8, 0xd040020);
+		mchbar_write32(0x14ac, 0x8090220);
+		mchbar_write32(0x14b0, 0x1111310);
+		mchbar_write32(0x14b4, 0x1111420);
+		mchbar_write32(0x14b8, 0x8090220);
+		mchbar_write32(0x14bc, 0x1010001);
+		mchbar_write32(0x14c0, 0x1110000);
+		mchbar_write32(0x14c4, 0x3010020);
+		mchbar_write32(0x14c8, 0x7090220);
+		mchbar_write32(0x14cc, 0x1081310);
+		mchbar_write32(0x14d0, 0x1081420);
+		mchbar_write32(0x14d4, 0x7090220);
+		mchbar_write32(0x14d8, 0x1010001);
+		mchbar_write32(0x14dc, 0x1110000);
+		mchbar_write32(0x14e0, 0xb040020);
+		mchbar_write32(0x14e4, 0x2030220);
+		mchbar_write32(0x14e8, 0x1051310);
+		mchbar_write32(0x14ec, 0x1051420);
+		mchbar_write32(0x14f0, 0x2030220);
+		mchbar_write32(0x14f4, 0x1010001);
+		mchbar_write32(0x14f8, 0x1110000);
+		mchbar_write32(0x14fc, 0x5020020);
+		mchbar_write32(0x1500, 0x5090220);
+		mchbar_write32(0x1504, 0x2071310);
+		mchbar_write32(0x1508, 0x2071420);
+		mchbar_write32(0x150c, 0x5090220);
+		mchbar_write32(0x1510, 0x1010001);
+		mchbar_write32(0x1514, 0x1110000);
+		mchbar_write32(0x1518, 0x7040120);
+		mchbar_write32(0x151c, 0x2090220);
+		mchbar_write32(0x1520, 0x70b1210);
+		mchbar_write32(0x1524, 0x70b1310);
+		mchbar_write32(0x1528, 0x2090220);
+		mchbar_write32(0x152c, 0x1010001);
+		mchbar_write32(0x1530, 0x1110000);
+		mchbar_write32(0x1534, 0x1010110);
+		mchbar_write32(0x1538, 0x1081310);
+		mchbar_write32(0x153c, 0x5041200);
+		mchbar_write32(0x1540, 0x5041310);
+		mchbar_write32(0x1544, 0x1081310);
+		mchbar_write32(0x1548, 0x1010001);
+		mchbar_write32(0x154c, 0x1110000);
+		mchbar_write32(0x1550, 0x1040120);
+		mchbar_write32(0x1554, 0x4051210);
+		mchbar_write32(0x1558, 0xd051200);
+		mchbar_write32(0x155c, 0xd051200);
+		mchbar_write32(0x1560, 0x4051210);
+		mchbar_write32(0x1564, 0x1010001);
+		mchbar_write32(0x1568, 0x1110000);
+		mchbar_write16(0x1222, 0x220a);
+		mchbar_write16(0x123c, 0x1fc0);
+		mchbar_write16(0x1220, 0x1388);
 	}
 }
diff --git a/src/northbridge/intel/ironlake/raminit.c b/src/northbridge/intel/ironlake/raminit.c
index af835e2..4d8fa13 100644
--- a/src/northbridge/intel/ironlake/raminit.c
+++ b/src/northbridge/intel/ironlake/raminit.c
@@ -86,13 +86,12 @@
 /* OK */
 static void write_1d0(u32 val, u16 addr, int bits, int flag)
 {
-	MCHBAR32(0x1d0) = 0;
-	while (MCHBAR32(0x1d0) & 0x800000)
+	mchbar_write32(0x1d0, 0);
+	while (mchbar_read32(0x1d0) & (1 << 23))
 		;
-	MCHBAR32(0x1d4) =
-		(val & ((1 << bits) - 1)) | (2 << bits) | (flag << bits);
-	MCHBAR32(0x1d0) = 0x40000000 | addr;
-	while (MCHBAR32(0x1d0) & 0x800000)
+	mchbar_write32(0x1d4, (val & ((1 << bits) - 1)) | 2 << bits | flag << bits);
+	mchbar_write32(0x1d0, 1 << 30 | addr);
+	while (mchbar_read32(0x1d0) & (1 << 23))
 		;
 }
 
@@ -100,14 +99,13 @@
 static u16 read_1d0(u16 addr, int split)
 {
 	u32 val;
-	MCHBAR32(0x1d0) = 0;
-	while (MCHBAR32(0x1d0) & 0x800000)
+	mchbar_write32(0x1d0, 0);
+	while (mchbar_read32(0x1d0) & (1 << 23))
 		;
-	MCHBAR32(0x1d0) =
-		0x80000000 | (((MCHBAR8(0x246) >> 2) & 3) + 0x361 - addr);
-	while (MCHBAR32(0x1d0) & 0x800000)
+	mchbar_write32(0x1d0, 1 << 31 | (((mchbar_read8(0x246) >> 2) & 3) + 0x361 - addr));
+	while (mchbar_read32(0x1d0) & (1 << 23))
 		;
-	val = MCHBAR32(0x1d8);
+	val = mchbar_read32(0x1d8);
 	write_1d0(0, 0x33d, 0, 0);
 	write_1d0(0, 0x33d, 0, 0);
 	val &= ((1 << split) - 1);
@@ -148,16 +146,15 @@
 read_500(struct raminfo *info, int channel, u16 addr, int split)
 {
 	u32 val;
-	info->last_500_command[channel] = 0x80000000;
-	MCHBAR32(0x500 + (channel << 10)) = 0;
-	while (MCHBAR32(0x500 + (channel << 10)) & 0x800000)
+	info->last_500_command[channel] = 1 << 31;
+	mchbar_write32(0x500 + (channel << 10), 0);
+	while (mchbar_read32(0x500 + (channel << 10)) & (1 << 23))
 		;
-	MCHBAR32(0x500 + (channel << 10)) =
-		0x80000000 | (((MCHBAR8(0x246 + (channel << 10)) >> 2) & 3)
-		+ 0xb88 - addr);
-	while (MCHBAR32(0x500 + (channel << 10)) & 0x800000)
+	mchbar_write32(0x500 + (channel << 10),
+		1 << 31 | (((mchbar_read8(0x246 + (channel << 10)) >> 2) & 3) + 0xb88 - addr));
+	while (mchbar_read32(0x500 + (channel << 10)) & (1 << 23))
 		;
-	val = MCHBAR32(0x508 + (channel << 10));
+	val = mchbar_read32(0x508 + (channel << 10));
 	return val & ((1 << split) - 1);
 }
 
@@ -166,17 +163,17 @@
 write_500(struct raminfo *info, int channel, u32 val, u16 addr, int bits,
 	  int flag)
 {
-	if (info->last_500_command[channel] == 0x80000000) {
-		info->last_500_command[channel] = 0x40000000;
+	if (info->last_500_command[channel] == 1 << 31) {
+		info->last_500_command[channel] = 1 << 30;
 		write_500(info, channel, 0, 0xb61, 0, 0);
 	}
-	MCHBAR32(0x500 + (channel << 10)) = 0;
-	while (MCHBAR32(0x500 + (channel << 10)) & 0x800000)
+	mchbar_write32(0x500 + (channel << 10), 0);
+	while (mchbar_read32(0x500 + (channel << 10)) & (1 << 23))
 		;
-	MCHBAR32(0x504 + (channel << 10)) =
-		(val & ((1 << bits) - 1)) | (2 << bits) | (flag << bits);
-	MCHBAR32(0x500 + (channel << 10)) = 0x40000000 | addr;
-	while (MCHBAR32(0x500 + (channel << 10)) & 0x800000)
+	mchbar_write32(0x504 + (channel << 10),
+		(val & ((1 << bits) - 1)) | 2 << bits | flag << bits);
+	mchbar_write32(0x500 + (channel << 10), 1 << 30 | addr);
+	while (mchbar_read32(0x500 + (channel << 10)) & (1 << 23))
 		;
 }
 
@@ -246,9 +243,9 @@
 
 static void write_26c(int channel, u16 si)
 {
-	MCHBAR32(0x26c + (channel << 10)) = 0x03243f35;
-	MCHBAR32(0x268 + (channel << 10)) = 0xcfc00000 | (si << 9);
-	MCHBAR16(0x2b9 + (channel << 10)) = si;
+	mchbar_write32(0x26c + (channel << 10), 0x03243f35);
+	mchbar_write32(0x268 + (channel << 10), 0xcfc00000 | si << 9);
+	mchbar_write16(0x2b9 + (channel << 10), si);
 }
 
 static void toggle_1d0_142_5ff(void)
@@ -257,8 +254,8 @@
 	if (reg32 & (1 << 1))
 		write_1d0(0, 0x142, 3, 1);
 
-	MCHBAR8(0x5ff) = 0x0;
-	MCHBAR8(0x5ff) = 0x80;
+	mchbar_write8(0x5ff, 0);
+	mchbar_write8(0x5ff, 1 << 7);
 	if (reg32 & (1 << 1))
 		write_1d0(0x2, 0x142, 3, 1);
 }
@@ -267,11 +264,11 @@
 {
 	u32 ret;
 	toggle_1d0_142_5ff();
-	MCHBAR32(0x580 + (channel << 10)) = 0x8493c012 | addr;
-	MCHBAR8_OR(0x580 + (channel << 10), 1);
-	while (!((ret = MCHBAR32(0x580 + (channel << 10))) & 0x10000))
+	mchbar_write32(0x580 + (channel << 10), 0x8493c012 | addr);
+	mchbar_setbits8(0x580 + (channel << 10), 1 << 0);
+	while (!((ret = mchbar_read32(0x580 + (channel << 10))) & (1 << 16)))
 		;
-	MCHBAR8_AND(0x580 + (channel << 10), ~1);
+	mchbar_clrbits8(0x580 + (channel << 10), 1 << 0);
 	return ret;
 }
 
@@ -364,8 +361,8 @@
 	gav(get_580(channel, 0xc | (rank << 5)));
 	gav(read_1d0(0x142, 3));
 
-	MCHBAR8(0x5ff) = 0x0;
-	MCHBAR8(0x5ff) = 0x80;
+	mchbar_write8(0x5ff, 0);
+	mchbar_write8(0x5ff, 1 << 7);
 }
 
 static void set_4cf(struct raminfo *info, int channel, u8 bit, u8 val)
@@ -396,28 +393,26 @@
 				c = 0x5f5f;
 
 			for (k = 0; k < 2; k++) {
-				MCHBAR32(0x138 + 8 * k) =
-					(channel << 26) | (j << 24);
+				mchbar_write32(0x138 + 8 * k, channel << 26 | j << 24);
 				gav(vd8[1][(channel << 3) | (j << 1) | k] =
-				    MCHBAR32(0x138 + 8 * k));
+				    mchbar_read32(0x138 + 8 * k));
 				gav(vd8[0][(channel << 3) | (j << 1) | k] =
-				    MCHBAR32(0x13c + 8 * k));
+				    mchbar_read32(0x13c + 8 * k));
 			}
 
-			MCHBAR32(0x334 + (channel << 10) + (j * 0x44)) =
-				zero ? 0 : val3[j];
-			MCHBAR32(0x32c + (channel << 10) + (j * 0x44)) =
-				zero ? 0 : (0x18191819 & lmask);
-			MCHBAR16(0x34a + (channel << 10) + (j * 0x44)) = c;
-			MCHBAR32(0x33c + (channel << 10) + (j * 0x44)) =
-				zero ? 0 : (a & lmask);
-			MCHBAR32(0x344 + (channel << 10) + (j * 0x44)) =
-				zero ? 0 : (a & lmask);
+			mchbar_write32(0x334 + (channel << 10) + j * 0x44, zero ? 0 : val3[j]);
+			mchbar_write32(0x32c + (channel << 10) + j * 0x44,
+					zero ? 0 : 0x18191819 & lmask);
+			mchbar_write16(0x34a + (channel << 10) + j * 0x44, c);
+			mchbar_write32(0x33c + (channel << 10) + j * 0x44,
+					zero ? 0 : a & lmask);
+			mchbar_write32(0x344 + (channel << 10) + j * 0x44,
+					zero ? 0 : a & lmask);
 		}
 	}
 
-	MCHBAR32_OR(0x130, 1);
-	while (MCHBAR8(0x130) & 1)
+	mchbar_setbits32(0x130, 1 << 0);
+	while (mchbar_read8(0x130) & 1)
 		;
 }
 
@@ -798,11 +793,11 @@
 	else
 		info->max_slots_used_in_channel = 1;
 	for (channel = 0; channel < 2; channel++)
-		MCHBAR32(0x244 + (channel << 10)) =
+		mchbar_write32(0x244 + (channel << 10),
 			((info->revision < 8) ? 1 : 0x200) |
 			((2 - info->max_slots_used_in_channel) << 17) |
 			(channel << 21) |
-			(info->some_delay_1_cycle_floor << 18) | 0x9510;
+			(info->some_delay_1_cycle_floor << 18) | 0x9510);
 	if (info->max_slots_used_in_channel == 1) {
 		info->mode4030[0] = (count_ranks_in_channel(info, 0) == 2);
 		info->mode4030[1] = (count_ranks_in_channel(info, 1) == 2);
@@ -925,8 +920,9 @@
 	if ((rank & 1) && (info->spd[channel][slot][RANK1_ADDRESS_MAPPING] & 1))
 		addr3 = (addr3 & 0xCF) | ((addr3 & 0x10) << 1) |
 			((addr3 >> 1) & 0x10);
-	MCHBAR8(0x271) = addr3 | (MCHBAR8(0x271) & 0xC1);
-	MCHBAR8(0x671) = addr3 | (MCHBAR8(0x671) & 0xC1);
+
+	mchbar_clrsetbits8(0x271, 0x1f << 1, addr3);
+	mchbar_clrsetbits8(0x671, 0x1f << 1, addr3);
 
 	/* Handle mirrored mapping.  */
 	if ((rank & 1) && (info->spd[channel][slot][RANK1_ADDRESS_MAPPING] & 1))
@@ -936,8 +932,8 @@
 
 	read32p((value << 3) | (total_rank << 28));
 
-	MCHBAR8(0x271) = (MCHBAR8(0x271) & 0xC3) | 2;
-	MCHBAR8(0x671) = (MCHBAR8(0x671) & 0xC3) | 2;
+	mchbar_clrsetbits8(0x271, 0x1f << 1, 1 << 1);
+	mchbar_clrsetbits8(0x671, 0x1f << 1, 1 << 1);
 
 	read32p(total_rank << 28);
 }
@@ -1018,11 +1014,11 @@
 			}
 		}
 
-		MCHBAR16(0x588 + (channel << 10)) = 0x0;
-		MCHBAR16(0x58a + (channel << 10)) = 0x4;
-		MCHBAR16(0x58c + (channel << 10)) = rtt | MR1_ODS34OHM;
-		MCHBAR16(0x58e + (channel << 10)) = rzq_reg58e | 0x82;
-		MCHBAR16(0x590 + (channel << 10)) = 0x1282;
+		mchbar_write16(0x588 + (channel << 10), 0);
+		mchbar_write16(0x58a + (channel << 10), 4);
+		mchbar_write16(0x58c + (channel << 10), rtt | MR1_ODS34OHM);
+		mchbar_write16(0x58e + (channel << 10), rzq_reg58e | 0x82);
+		mchbar_write16(0x590 + (channel << 10), 0x1282);
 
 		for (slot = 0; slot < NUM_SLOTS; slot++)
 			for (rank = 0; rank < NUM_RANKS; rank++)
@@ -1064,14 +1060,14 @@
 			    pre_jedec ? 256 : (256 << info->
 					       density[channel][slot] >> info->
 					       is_x16_module[channel][slot]);
-			MCHBAR8(0x208 + rank + 2 * slot + (channel << 10)) =
+			mchbar_write8(0x208 + rank + 2 * slot + (channel << 10),
 				(pre_jedec ? (1 | ((1 + 1) << 1)) :
 				(info->is_x16_module[channel][slot] |
 				((info->density[channel][slot] + 1) << 1))) |
-				0x80;
+				0x80);
 		}
-		MCHBAR16(0x200 + (channel << 10) + 4 * slot + 2 * rank) =
-			total_mb[channel] >> 6;
+		mchbar_write16(0x200 + (channel << 10) + 4 * slot + 2 * rank,
+			total_mb[channel] >> 6);
 	}
 
 	info->total_memory_mb = total_mb[0] + total_mb[1];
@@ -1081,10 +1077,9 @@
 	info->non_interleaved_part_mb =
 	    total_mb[0] + total_mb[1] - info->interleaved_part_mb;
 	channel_0_non_interleaved = total_mb[0] - info->interleaved_part_mb / 2;
-	MCHBAR32(0x100) = channel_0_non_interleaved |
-		(info->non_interleaved_part_mb << 16);
+	mchbar_write32(0x100, channel_0_non_interleaved | info->non_interleaved_part_mb << 16);
 	if (!pre_jedec)
-		MCHBAR16(0x104) = info->interleaved_part_mb;
+		mchbar_write16(0x104, info->interleaved_part_mb);
 }
 
 static void program_board_delay(struct raminfo *info)
@@ -1123,13 +1118,11 @@
 			|| info->silicon_revision == 3))
 			rmw_1d0(0x116, 5, 2, 4);
 	}
-	MCHBAR32(0x120) = (1 << (info->max_slots_used_in_channel + 28)) |
-		0x188e7f9f;
+	mchbar_write32(0x120, 1 << (info->max_slots_used_in_channel + 28) | 0x188e7f9f);
 
-	MCHBAR8(0x124) = info->board_lane_delay[4] +
-		((frequency_01(info) + 999) / 1000);
-	MCHBAR16(0x125) = 0x1360;
-	MCHBAR8(0x127) = 0x40;
+	mchbar_write8(0x124, info->board_lane_delay[4] + (frequency_01(info) + 999) / 1000);
+	mchbar_write16(0x125, 0x1360);
+	mchbar_write8(0x127, 0x40);
 	if (info->fsb_frequency < frequency_11(info) / 2) {
 		unsigned int some_delay_2_half_cycles;
 		high_multiplier = 1;
@@ -1153,33 +1146,32 @@
 			 (frequency_11(info) * 2 -
 			  4 * (info->fsb_frequency))) >> 3, 7);
 	}
-	if (MCHBAR8(0x2ca9) & 1)
+	if (mchbar_read8(0x2ca9) & 1)
 		some_delay_3_half_cycles = 3;
 	for (channel = 0; channel < NUM_CHANNELS; channel++) {
-		MCHBAR32_OR(0x220 + (channel << 10), 0x18001117);
-		MCHBAR32(0x224 + (channel << 10)) =
+		mchbar_setbits32(0x220 + (channel << 10), 0x18001117);
+		mchbar_write32(0x224 + (channel << 10),
 			(info->max_slots_used_in_channel - 1) |
-			((info->cas_latency - 5 - info->clock_speed_index)
-			<< 21) | ((info->max_slots_used_in_channel +
-			info->cas_latency - cas_latency_shift - 4) << 16) |
-			((info->cas_latency - cas_latency_shift - 4) << 26) |
-			((info->cas_latency - info->clock_speed_index +
+			(info->cas_latency - 5 - info->clock_speed_index)
+			<< 21 | (info->max_slots_used_in_channel +
+			info->cas_latency - cas_latency_shift - 4) << 16 |
+			(info->cas_latency - cas_latency_shift - 4) << 26 |
+			(info->cas_latency - info->clock_speed_index +
 			info->max_slots_used_in_channel - 6) << 8);
-		MCHBAR32(0x228 + (channel << 10)) =
-			info->max_slots_used_in_channel;
-		MCHBAR8(0x239 + (channel << 10)) = 32;
-		MCHBAR32(0x248 + (channel << 10)) = (high_multiplier << 24) |
-			(some_delay_3_half_cycles << 25) | 0x840000;
-		MCHBAR32(0x278 + (channel << 10)) = 0xc362042;
-		MCHBAR32(0x27c + (channel << 10)) = 0x8b000062;
-		MCHBAR32(0x24c + (channel << 10)) =
-			((!!info->clock_speed_index) << 17) |
-			(((2 + info->clock_speed_index -
-			(!!info->clock_speed_index))) << 12) | 0x10200;
+		mchbar_write32(0x228 + (channel << 10), info->max_slots_used_in_channel);
+		mchbar_write8(0x239 + (channel << 10), 32);
+		mchbar_write32(0x248 + (channel << 10), high_multiplier << 24 |
+			some_delay_3_half_cycles << 25 | 0x840000);
+		mchbar_write32(0x278 + (channel << 10), 0xc362042);
+		mchbar_write32(0x27c + (channel << 10), 0x8b000062);
+		mchbar_write32(0x24c + (channel << 10),
+			(!!info->clock_speed_index) << 17 |
+			((2 + info->clock_speed_index -
+			(!!info->clock_speed_index))) << 12 | 0x10200);
 
-		MCHBAR8(0x267 + (channel << 10)) = 0x4;
-		MCHBAR16(0x272 + (channel << 10)) = 0x155;
-		MCHBAR32_AND_OR(0x2bc + (channel << 10), 0xFF000000, 0x707070);
+		mchbar_write8(0x267 + (channel << 10), 4);
+		mchbar_write16(0x272 + (channel << 10), 0x155);
+		mchbar_clrsetbits32(0x2bc + (channel << 10), 0xffffff, 0x707070);
 
 		write_500(info, channel,
 			  ((!info->populated_ranks[channel][1][1])
@@ -1189,7 +1181,7 @@
 			  0x4c9, 4, 1);
 	}
 
-	MCHBAR8(0x2c4) = ((1 + (info->clock_speed_index != 0)) << 6) | 0xC;
+	mchbar_write8(0x2c4, (1 + (info->clock_speed_index != 0)) << 6 | 0xc);
 	{
 		u8 freq_divisor = 2;
 		if (info->fsb_frequency == frequency_11(info))
@@ -1198,7 +1190,7 @@
 			freq_divisor = 1;
 		else
 			freq_divisor = 2;
-		MCHBAR32(0x2c0) = (freq_divisor << 11) | 0x6009c400;
+		mchbar_write32(0x2c0, freq_divisor << 11 | 0x6009c400);
 	}
 
 	if (info->board_lane_delay[3] <= 10) {
@@ -1213,48 +1205,46 @@
 	if (info->clock_speed_index > 1)
 		cas_latency_derived++;
 	for (channel = 0; channel < NUM_CHANNELS; channel++) {
-		MCHBAR32(0x240 + (channel << 10)) =
+		mchbar_write32(0x240 + (channel << 10),
 			((info->clock_speed_index == 0) * 0x11000) |
-			0x1002100 | ((2 + info->clock_speed_index) << 4) |
-			(info->cas_latency - 3);
+			0x1002100 | (2 + info->clock_speed_index) << 4 |
+			(info->cas_latency - 3));
 		write_500(info, channel, (info->clock_speed_index << 1) | 1,
 			  0x609, 6, 1);
 		write_500(info, channel,
 			  info->clock_speed_index + 2 * info->cas_latency - 7,
 			  0x601, 6, 1);
 
-		MCHBAR32(0x250 + (channel << 10)) =
-			((lane_3_delay + info->clock_speed_index + 9) << 6) |
-			(info->board_lane_delay[7] << 2) |
-			(info->board_lane_delay[4] << 16) |
-			(info->board_lane_delay[1] << 25) |
-			(info->board_lane_delay[1] << 29) | 1;
-		MCHBAR32(0x254 + (channel << 10)) =
-			(info->board_lane_delay[1] >> 3) |
-			((info->board_lane_delay[8] + 4 * info->use_ecc) << 6) |
-			0x80 | (info->board_lane_delay[6] << 1) |
-			(info->board_lane_delay[2] << 28) |
-			(cas_latency_derived << 16) | 0x4700000;
-		MCHBAR32(0x258 + (channel << 10)) =
-			((info->board_lane_delay[5] + info->clock_speed_index +
-			9) << 12) | ((info->clock_speed_index -
-			info->cas_latency + 12) << 8) |
-			(info->board_lane_delay[2] << 17) |
-			(info->board_lane_delay[4] << 24) | 0x47;
-		MCHBAR32(0x25c + (channel << 10)) =
-			(info->board_lane_delay[1] << 1) |
-			(info->board_lane_delay[0] << 8) | 0x1da50000;
-		MCHBAR8(0x264 + (channel << 10)) = 0xff;
-		MCHBAR8(0x5f8 + (channel << 10)) =
-			(cas_latency_shift << 3) | info->use_ecc;
+		mchbar_write32(0x250 + (channel << 10),
+			(lane_3_delay + info->clock_speed_index + 9) << 6 |
+			info->board_lane_delay[7] << 2 |
+			info->board_lane_delay[4] << 16 |
+			info->board_lane_delay[1] << 25 |
+			info->board_lane_delay[1] << 29 | 1);
+		mchbar_write32(0x254 + (channel << 10),
+			info->board_lane_delay[1] >> 3 |
+			(info->board_lane_delay[8] + 4 * info->use_ecc) << 6 |
+			0x80 | info->board_lane_delay[6] << 1 |
+			info->board_lane_delay[2] << 28 |
+			cas_latency_derived << 16 | 0x4700000);
+		mchbar_write32(0x258 + (channel << 10),
+			(info->board_lane_delay[5] + info->clock_speed_index + 9) << 12 |
+			(info->clock_speed_index - info->cas_latency + 12) << 8 |
+			info->board_lane_delay[2] << 17 |
+			info->board_lane_delay[4] << 24 | 0x47);
+		mchbar_write32(0x25c + (channel << 10),
+			info->board_lane_delay[1] << 1 |
+			info->board_lane_delay[0] << 8 | 0x1da50000);
+		mchbar_write8(0x264 + (channel << 10), 0xff);
+		mchbar_write8(0x5f8 + (channel << 10), cas_latency_shift << 3 | info->use_ecc);
 	}
 
 	program_modules_memory_map(info, 1);
 
-	MCHBAR16(0x610) = (MIN(ns_to_cycles(info, some_delay_ns) / 2, 127) << 9)
-		| (MCHBAR16(0x610) & 0x1C3) | 0x3C;
-	MCHBAR16_OR(0x612, 0x100);
-	MCHBAR16_OR(0x214, 0x3E00);
+	mchbar_clrsetbits16(0x610, 0xfe3c,
+		MIN(ns_to_cycles(info, some_delay_ns) / 2, 127) << 9 | 0x3c);
+	mchbar_setbits16(0x612, 1 << 8);
+	mchbar_setbits16(0x214, 0x3e00);
 	for (i = 0; i < 8; i++) {
 		pci_write_config32(QPI_SAD, SAD_DRAM_RULE(i),
 			       (info->total_memory_mb - 64) | !i | 2);
@@ -1491,15 +1481,14 @@
 
 	for (channel = 0; channel < NUM_CHANNELS; channel++) {
 		u32 reg32;
-		reg32 = MCHBAR32((channel << 10) + 0x274);
+		reg32 = mchbar_read32((channel << 10) + 0x274);
 		train.reg274265[channel][0] = reg32 >> 16;
 		train.reg274265[channel][1] = reg32 & 0xffff;
-		train.reg274265[channel][2] =
-			MCHBAR16((channel << 10) + 0x265) >> 8;
+		train.reg274265[channel][2] = mchbar_read16((channel << 10) + 0x265) >> 8;
 	}
-	train.reg2ca9_bit0 = MCHBAR8(0x2ca9) & 1;
-	train.reg_6dc = MCHBAR32(0x6dc);
-	train.reg_6e8 = MCHBAR32(0x6e8);
+	train.reg2ca9_bit0 = mchbar_read8(0x2ca9) & 1;
+	train.reg_6dc = mchbar_read32(0x6dc);
+	train.reg_6e8 = mchbar_read32(0x6e8);
 
 	printk(RAM_SPEW, "[6dc] = %x\n", train.reg_6dc);
 	printk(RAM_SPEW, "[6e8] = %x\n", train.reg_6e8);
@@ -1710,23 +1699,23 @@
 
 	pci_read_config32(NORTHBRIDGE, DMIBAR);
 	if (info->memory_reserved_for_heci_mb) {
-		DMIBAR32(DMIVC0RCTL) &= ~0x80;
+		dmibar_clrbits32(DMIVC0RCTL, 1 << 7);
 		RCBA32(0x14) &= ~0x80;
-		DMIBAR32(DMIVC1RCTL) &= ~0x80;
+		dmibar_clrbits32(DMIVC1RCTL, 1 << 7);
 		RCBA32(0x20) &= ~0x80;
-		DMIBAR32(DMIVCPRCTL) &= ~0x80;
+		dmibar_clrbits32(DMIVCPRCTL, 1 << 7);
 		RCBA32(0x30) &= ~0x80;
-		DMIBAR32(DMIVCMRCTL) &= ~0x80;
+		dmibar_clrbits32(DMIVCMRCTL, 1 << 7);
 		RCBA32(0x40) &= ~0x80;
 
 		RCBA32(0x40) = 0x87000080;	// OK
-		DMIBAR32(DMIVCMRCTL) = 0x87000080;	// OK
+		dmibar_write32(DMIVCMRCTL, 0x87000080);	// OK
 
-		while ((RCBA16(0x46) & 2) && DMIBAR16(DMIVCMRSTS) & VCMNP)
+		while ((RCBA16(0x46) & 2) && dmibar_read16(DMIVCMRSTS) & VCMNP)
 			;
 	}
 
-	MCHBAR32(0x24) = 0x10000 + info->memory_reserved_for_heci_mb;
+	mchbar_write32(0x24, 0x10000 + info->memory_reserved_for_heci_mb);
 
 	send_heci_uma_message(heci_uma_addr, info->memory_reserved_for_heci_mb);
 
@@ -2126,7 +2115,7 @@
 		write_1d0(reg1b3 ^ 32, 0x1b3, 6, 1);
 		write_1d0(reg1b3 ^ 32, 0x1a3, 6, 1);
 		failmask = check_testing(info, total_rank, 0);
-		MCHBAR32_OR(0xfb0, 0x00030000);
+		mchbar_setbits32(0xfb0, 3 << 16);
 		do_fsm(state, count, failmask, 5, 47, lower_usable,
 		       upper_usable, reg1b3);
 	}
@@ -2191,7 +2180,7 @@
 				    check_testing_type2(info, total_rank, 3, i,
 							1);
 			}
-			MCHBAR32_OR(0xfb0, 0x00030000);
+			mchbar_setbits32(0xfb0, 3 << 16);
 			for (lane = 0; lane < 8; lane++)
 				if (num_successfully_checked[lane] != 0xffff) {
 					if ((1 << lane) & failmask) {
@@ -2292,7 +2281,7 @@
 							1);
 			}
 
-			MCHBAR32_OR(0xfb0, 0x00030000);
+			mchbar_setbits32(0xfb0, 3 << 16);
 			for (lane = 0; lane < 8; lane++) {
 				if (num_successfully_checked[lane] != 0xffff) {
 					if ((1 << lane) & failmask) {
@@ -2414,12 +2403,12 @@
 	int channel;
 	for (channel = 0; channel < NUM_CHANNELS; channel++) {
 		u8 t;
-		t = MCHBAR8((channel << 10) + 0x5f8);
+		t = mchbar_read8((channel << 10) + 0x5f8);
 		if (onoff)
 			t |= 1;
 		else
 			t &= ~1;
-		MCHBAR8((channel << 10) + 0x5f8) = t;
+		mchbar_write8((channel << 10) + 0x5f8, t);
 	}
 }
 
@@ -2719,10 +2708,10 @@
 	       sizeof(info->training.timing_offset));
 
 	write_1d0(2, 0x142, 3, 1);
-	saved_243[0] = MCHBAR8(0x243);
-	saved_243[1] = MCHBAR8(0x643);
-	MCHBAR8(0x243) = saved_243[0] | 2;
-	MCHBAR8(0x643) = saved_243[1] | 2;
+	saved_243[0] = mchbar_read8(0x243);
+	saved_243[1] = mchbar_read8(0x643);
+	mchbar_write8(0x243, saved_243[0] | 2);
+	mchbar_write8(0x643, saved_243[1] | 2);
 	set_ecc(0);
 	pci_write_config16(NORTHBRIDGE, 0xc8, 3);
 	if (read_1d0(0x10b, 6) & 1)
@@ -2830,8 +2819,8 @@
 	write_1d0(0, 0x1bb, 6, 1);
 	write_1d0(0, 0x1b3, 6, 1);
 	write_1d0(0, 0x1a3, 6, 1);
-	MCHBAR8(0x243) = saved_243[0];
-	MCHBAR8(0x643) = saved_243[1];
+	mchbar_write8(0x243, saved_243[0]);
+	mchbar_write8(0x643, saved_243[1]);
 
 	return 1;
 
@@ -2845,8 +2834,8 @@
 	write_1d0(0, 0x1bb, 6, 1);
 	write_1d0(0, 0x1b3, 6, 1);
 	write_1d0(0, 0x1a3, 6, 1);
-	MCHBAR8(0x243) = saved_243[0];
-	MCHBAR8(0x643) = saved_243[1];
+	mchbar_write8(0x243, saved_243[0]);
+	mchbar_write8(0x643, saved_243[1]);
 
 	return 0;
 }
@@ -2863,10 +2852,10 @@
 	u8 reg178_center;
 
 	write_1d0(2, 0x142, 3, 1);
-	saved_243[0] = MCHBAR8(0x243);
-	saved_243[1] = MCHBAR8(0x643);
-	MCHBAR8(0x243) = saved_243[0] | 2;
-	MCHBAR8(0x643) = saved_243[1] | 2;
+	saved_243[0] = mchbar_read8(0x243);
+	saved_243[1] = mchbar_read8(0x643);
+	mchbar_write8(0x243, saved_243[0] | 2);
+	mchbar_write8(0x643, saved_243[1] | 2);
 	switch (info->clock_speed_index) {
 	case 0:
 		niter = 5;
@@ -3033,8 +3022,8 @@
 		try_timing_offsets(info, channel, slot, rank, totalrank);
 		totalrank++;
 	}
-	MCHBAR8(0x243) = saved_243[0];
-	MCHBAR8(0x643) = saved_243[1];
+	mchbar_write8(0x243, saved_243[0]);
+	mchbar_write8(0x643, saved_243[1]);
 	write_1d0(0, 0x142, 3, 1);
 	info->training.reg178_center = reg178_center;
 }
@@ -3043,8 +3032,8 @@
 {
 	u16 saved_fc4;
 
-	saved_fc4 = MCHBAR16(0xfc4);
-	MCHBAR16(0xfc4) = 0xffff;
+	saved_fc4 = mchbar_read16(0xfc4);
+	mchbar_write16(0xfc4, 0xffff);
 
 	if (info->revision >= 8)
 		read_4090(info);
@@ -3054,7 +3043,7 @@
 	if ((info->silicon_revision == 2 || info->silicon_revision == 3)
 	    && info->clock_speed_index < 2)
 		set_10b(info, 1);
-	MCHBAR16(0xfc4) = saved_fc4;
+	mchbar_write16(0xfc4, saved_fc4);
 }
 
 u16 get_max_timing(struct raminfo *info, int channel)
@@ -3062,7 +3051,7 @@
 	int slot, rank, lane;
 	u16 ret = 0;
 
-	if ((MCHBAR8(0x2ca8) >> 2) < 1)
+	if ((mchbar_read8(0x2ca8) >> 2) < 1)
 		return 384;
 
 	if (info->revision < 8)
@@ -3081,12 +3070,12 @@
 
 static void dmi_setup(void)
 {
-	gav(DMIBAR8(0x254));
-	DMIBAR8(0x254) = 0x1;
-	DMIBAR16(0x1b8) = 0x18f2;
-	MCHBAR16_AND_OR(0x48, 0, 0x2);
+	gav(dmibar_read8(0x254));
+	dmibar_write8(0x254, 1 << 0);
+	dmibar_write16(0x1b8, 0x18f2);
+	mchbar_clrsetbits16(0x48, ~0, 1 << 1);
 
-	DMIBAR32(0xd68) |= 0x08000000;
+	dmibar_setbits32(0xd68, 1 << 27);
 
 	outl((gav(inl(DEFAULT_GPIOBASE | 0x38)) & ~0x140000) | 0x400000,
 	     DEFAULT_GPIOBASE | 0x38);
@@ -3099,19 +3088,19 @@
 	u16 ggc;
 	u8 gfxsize;
 
-	x2ca8 = MCHBAR8(0x2ca8);
+	x2ca8 = mchbar_read8(0x2ca8);
 	if ((x2ca8 & 1) || (x2ca8 == 8 && !s3resume)) {
 		printk(BIOS_DEBUG, "soft reset detected, rebooting properly\n");
-		MCHBAR8(0x2ca8) = 0;
+		mchbar_write8(0x2ca8, 0);
 		system_reset();
 	}
 
 	dmi_setup();
 
-	MCHBAR16(0x1170) = 0xa880;
-	MCHBAR8(0x11c1) = 0x1;
-	MCHBAR16(0x1170) = 0xb880;
-	MCHBAR8_AND_OR(0x1210, 0, 0x84);
+	mchbar_write16(0x1170, 0xa880);
+	mchbar_write8(0x11c1, 1 << 0);
+	mchbar_write16(0x1170, 0xb880);
+	mchbar_clrsetbits8(0x1210, ~0, 0x84);
 
 	if (get_option(&gfxsize, "gfx_uma_size") != CB_SUCCESS) {
 		/* 0 for 32MB */
@@ -3126,11 +3115,11 @@
 	deven = pci_read_config16(NORTHBRIDGE, DEVEN);	// = 0x3
 
 	if (deven & 8) {
-		MCHBAR8(0x2c30) = 0x20;
+		mchbar_write8(0x2c30, 1 << 5);
 		pci_read_config8(NORTHBRIDGE, 0x8);	// = 0x18
-		MCHBAR16_OR(0x2c30, 0x200);
-		MCHBAR16(0x2c32) = 0x434;
-		MCHBAR32_AND_OR(0x2c44, 0, 0x1053687);
+		mchbar_setbits16(0x2c30, 1 << 9);
+		mchbar_write16(0x2c32, 0x434);
+		mchbar_clrsetbits32(0x2c44, ~0, 0x1053687);
 		pci_read_config8(GMA, MSAC);	// = 0x2
 		pci_write_config8(GMA, MSAC, 0x2);
 		RCBA8(0x2318);
@@ -3139,7 +3128,7 @@
 		RCBA8(0x2320) = 0xfc;
 	}
 
-	MCHBAR32_AND_OR(0x30, 0, 0x40);
+	mchbar_clrsetbits32(0x30, ~0, 0x40);
 
 	pci_write_config16(NORTHBRIDGE, GGC, ggc);
 	gav(RCBA32(0x3428));
@@ -3162,7 +3151,7 @@
 	u8 x2ca8;
 	int cbmem_wasnot_inited;
 
-	x2ca8 = MCHBAR8(0x2ca8);
+	x2ca8 = mchbar_read8(0x2ca8);
 
 	printk(RAM_DEBUG, "Scratchpad MCHBAR8(0x2ca8): 0x%04x\n", x2ca8);
 
@@ -3300,7 +3289,7 @@
 	/* after SPD  */
 	timestamp_add_now(102);
 
-	MCHBAR8_AND(0x2ca8, 0xfc);
+	mchbar_clrbits8(0x2ca8, 1 << 1 | 1 << 0);
 
 	collect_system_info(&info);
 	calculate_timings(&info);
@@ -3337,14 +3326,14 @@
 	if (x2ca8 == 0)
 		late_quickpath_init(&info, s3resume);
 
-	MCHBAR32_OR(0x2c80, (1 << 24));
-	MCHBAR32(0x1804) = MCHBAR32(0x1c04) & ~(1 << 27);
+	mchbar_setbits32(0x2c80, 1 << 24);
+	mchbar_write32(0x1804, mchbar_read32(0x1c04) & ~(1 << 27));
 
-	MCHBAR8(0x2ca8);	// !!!!
+	mchbar_read8(0x2ca8);	// !!!!
 
 	if (x2ca8 == 0) {
-		MCHBAR8_AND(0x2ca8, ~3);
-		MCHBAR8(0x2ca8) = MCHBAR8(0x2ca8) + 4;	// "+" or  "|"?
+		mchbar_clrbits8(0x2ca8, 3);
+		mchbar_write8(0x2ca8, mchbar_read8(0x2ca8) + 4);	// "+" or  "|"?
 		/* This issues a CPU reset without resetting the platform */
 		printk(BIOS_DEBUG, "Issuing a CPU reset\n");
 		/* Write back the S3 state to PM1_CNT to let the reset CPU
@@ -3352,26 +3341,26 @@
 		if (s3resume)
 			write_pmbase32(PM1_CNT, read_pmbase32(PM1_CNT)
 				       | (SLP_TYP_S3 << 10));
-		MCHBAR32_OR(0x1af0, 0x10);
+		mchbar_setbits32(0x1af0, 1 << 4);
 		halt();
 	}
 
-	MCHBAR8(0x2ca8) = MCHBAR8(0x2ca8);	// !!!!
+	mchbar_clrbits8(0x2ca8, 0);	// !!!!
 
-	MCHBAR32_AND(0x2c80, ~(1 << 24));
+	mchbar_clrbits32(0x2c80, 1 << 24);
 
 	pci_write_config32(QPI_NON_CORE, MAX_RTIDS, 0x20220);
 
 	{
-		u8 x2c20 = (MCHBAR16(0x2c20) >> 8) & 3;
-		u16 x2c10 = MCHBAR16(0x2c10);
-		u16 value = MCHBAR16(0x2c00);
+		u8 x2c20 = (mchbar_read16(0x2c20) >> 8) & 3;
+		u16 x2c10 = mchbar_read16(0x2c10);
+		u16 value = mchbar_read16(0x2c00);
 		if (x2c20 == 0 && (x2c10 & 0x300) == 0)
 			value |= (1 << 7);
 		else
 			value &= ~(1 << 0);
 
-		MCHBAR16(0x2c00) = value;
+		mchbar_write16(0x2c00, value);
 	}
 
 	udelay(1000);	// !!!!
@@ -3379,32 +3368,32 @@
 	write_1d0(0, 0x33d, 0, 0);
 	write_500(&info, 0, 0, 0xb61, 0, 0);
 	write_500(&info, 1, 0, 0xb61, 0, 0);
-	MCHBAR32(0x1a30) = 0x0;
-	MCHBAR32(0x1a34) = 0x0;
-	MCHBAR16(0x614) = 0xb5b | (info.populated_ranks[1][0][0] * 0x404) |
-		(info.populated_ranks[0][0][0] * 0xa0);
-	MCHBAR16(0x616) = 0x26a;
-	MCHBAR32(0x134) = 0x856000;
-	MCHBAR32(0x160) = 0x5ffffff;
-	MCHBAR32_AND_OR(0x114, 0, 0xc2024440);	// !!!!
-	MCHBAR32_AND_OR(0x118, 0, 0x4);	// !!!!
+	mchbar_write32(0x1a30, 0);
+	mchbar_write32(0x1a34, 0);
+	mchbar_write16(0x614, 0xb5b | (info.populated_ranks[1][0][0] * 0x404) |
+		(info.populated_ranks[0][0][0] * 0xa0));
+	mchbar_write16(0x616, 0x26a);
+	mchbar_write32(0x134, 0x856000);
+	mchbar_write32(0x160, 0x5ffffff);
+	mchbar_clrsetbits32(0x114, ~0, 0xc2024440);	// !!!!
+	mchbar_clrsetbits32(0x118, ~0, 0x4);	// !!!!
 	for (channel = 0; channel < NUM_CHANNELS; channel++)
-		MCHBAR32(0x260 + (channel << 10)) = 0x30809ff |
-			((info.populated_ranks_mask[channel] & 3) << 20);
+		mchbar_write32(0x260 + (channel << 10), 0x30809ff |
+			(info.populated_ranks_mask[channel] & 3) << 20);
 	for (channel = 0; channel < NUM_CHANNELS; channel++) {
-		MCHBAR16(0x31c + (channel << 10)) = 0x101;
-		MCHBAR16(0x360 + (channel << 10)) = 0x909;
-		MCHBAR16(0x3a4 + (channel << 10)) = 0x101;
-		MCHBAR16(0x3e8 + (channel << 10)) = 0x101;
-		MCHBAR32(0x320 + (channel << 10)) = 0x29002900;
-		MCHBAR32(0x324 + (channel << 10)) = 0x0;
-		MCHBAR32(0x368 + (channel << 10)) = 0x32003200;
-		MCHBAR16(0x352 + (channel << 10)) = 0x505;
-		MCHBAR16(0x354 + (channel << 10)) = 0x3c3c;
-		MCHBAR16(0x356 + (channel << 10)) = 0x1040;
-		MCHBAR16(0x39a + (channel << 10)) = 0x73e4;
-		MCHBAR16(0x3de + (channel << 10)) = 0x77ed;
-		MCHBAR16(0x422 + (channel << 10)) = 0x1040;
+		mchbar_write16(0x31c + (channel << 10), 0x101);
+		mchbar_write16(0x360 + (channel << 10), 0x909);
+		mchbar_write16(0x3a4 + (channel << 10), 0x101);
+		mchbar_write16(0x3e8 + (channel << 10), 0x101);
+		mchbar_write32(0x320 + (channel << 10), 0x29002900);
+		mchbar_write32(0x324 + (channel << 10), 0);
+		mchbar_write32(0x368 + (channel << 10), 0x32003200);
+		mchbar_write16(0x352 + (channel << 10), 0x505);
+		mchbar_write16(0x354 + (channel << 10), 0x3c3c);
+		mchbar_write16(0x356 + (channel << 10), 0x1040);
+		mchbar_write16(0x39a + (channel << 10), 0x73e4);
+		mchbar_write16(0x3de + (channel << 10), 0x77ed);
+		mchbar_write16(0x422 + (channel << 10), 0x1040);
 	}
 
 	write_1d0(0x4, 0x151, 4, 1);
@@ -3420,15 +3409,15 @@
 							      [0][0]) << 0),
 		  0x1d1, 3, 1);
 	for (channel = 0; channel < NUM_CHANNELS; channel++) {
-		MCHBAR16(0x38e + (channel << 10)) = 0x5f5f;
-		MCHBAR16(0x3d2 + (channel << 10)) = 0x5f5f;
+		mchbar_write16(0x38e + (channel << 10), 0x5f5f);
+		mchbar_write16(0x3d2 + (channel << 10), 0x5f5f);
 	}
 
 	set_334(0);
 
 	program_base_timings(&info);
 
-	MCHBAR8_OR(0x5ff, 0x80);
+	mchbar_setbits8(0x5ff, 1 << 7);
 
 	write_1d0(0x2, 0x1d5, 2, 1);
 	write_1d0(0x20, 0x166, 7, 1);
@@ -3479,20 +3468,20 @@
 		write_1d0(info.cached_training->reg_10b, 0x10b, 6, 1);
 	}
 
-	MCHBAR32_AND_OR(0x1f4, 0, 0x20000);	// !!!!
-	MCHBAR32(0x1f0) = 0x1d000200;
-	MCHBAR8_OR(0x1f0, 0x1);
-	while (MCHBAR8(0x1f0) & 1)
+	mchbar_clrsetbits32(0x1f4, ~0, 1 << 17);	// !!!!
+	mchbar_write32(0x1f0, 0x1d000200);
+	mchbar_setbits8(0x1f0, 1 << 0);
+	while (mchbar_read8(0x1f0) & 1)
 		;
 
 	program_board_delay(&info);
 
-	MCHBAR8(0x5ff) = 0x0;
-	MCHBAR8(0x5ff) = 0x80;
-	MCHBAR8(0x5f4) = 0x1;
+	mchbar_write8(0x5ff, 0);
+	mchbar_write8(0x5ff, 1 << 7);
+	mchbar_write8(0x5f4, 1 << 0);
 
-	MCHBAR32_AND(0x130, 0xfffffffd);	// | 2 when ?
-	while (MCHBAR32(0x130) & 1)
+	mchbar_clrbits32(0x130, 1 << 1);	// | 2 when ?
+	while (mchbar_read32(0x130) & 1)
 		;
 
 	rmw_1d0(0x14b, 0x47, 0x30, 7);
@@ -3505,13 +3494,13 @@
 	rmw_1d0(0x116, 0xe,  0, 4);
 	rmw_1d0(0xae,  0x3e, 0, 6);
 	rmw_1d0(0x300, 0x3e, 0, 6);
-	MCHBAR16_AND(0x356, 0x7fff);
-	MCHBAR16_AND(0x756, 0x7fff);
-	MCHBAR32_AND(0x140, ~0x07000000);
-	MCHBAR32_AND(0x138, ~0x07000000);
-	MCHBAR32(0x130) = 0x31111301;
+	mchbar_clrbits16(0x356, 1 << 15);
+	mchbar_clrbits16(0x756, 1 << 15);
+	mchbar_clrbits32(0x140, 7 << 24);
+	mchbar_clrbits32(0x138, 7 << 24);
+	mchbar_write32(0x130, 0x31111301);
 	/* Wait until REG130b0 is 1.  */
-	while (MCHBAR32(0x130) & 1)
+	while (mchbar_read32(0x130) & 1)
 		;
 
 	u8 value_a1;
@@ -3529,7 +3518,7 @@
 
 	rmw_1d0(0x116, 0xe, 1, 4);	// = 0x4040432 // !!!!
 	{
-		if ((MCHBAR32(0x144) & 0x1f) < 0x13)
+		if ((mchbar_read32(0x144) & 0x1f) < 0x13)
 			value_a1 += 2;
 		else
 			value_a1 += 1;
@@ -3547,9 +3536,9 @@
 	for (channel = 0; channel < NUM_CHANNELS; channel++)
 		set_4cf(&info, channel, 2, 0);
 
-	MCHBAR32(0x130) = 0x11111301 | (info.populated_ranks[1][0][0] << 30) |
-		(info.populated_ranks[0][0][0] << 29);
-	while (MCHBAR8(0x130) & 1)
+	mchbar_write32(0x130, 0x11111301 | info.populated_ranks[1][0][0] << 30 |
+		info.populated_ranks[0][0][0] << 29);
+	while (mchbar_read8(0x130) & 1)
 		;
 
 	{
@@ -3564,7 +3553,7 @@
 
 	set_334(1);
 
-	MCHBAR8(0x1e8) = 0x4;
+	mchbar_write8(0x1e8, 1 << 2);
 
 	for (channel = 0; channel < NUM_CHANNELS; channel++) {
 		write_500(&info, channel,
@@ -3572,29 +3561,29 @@
 			  1);
 		write_500(&info, channel, 0x3, 0x69b, 2, 1);
 	}
-	MCHBAR32_AND_OR(0x2d0, 0xff2c01ff, 0x200000);
-	MCHBAR16(0x6c0) = 0x14a0;
-	MCHBAR32_AND_OR(0x6d0, 0xff0080ff, 0x8000);
-	MCHBAR16(0x232) = 0x8;
+	mchbar_clrsetbits32(0x2d0, ~0xff0c01ff, 0x200000);
+	mchbar_write16(0x6c0, 0x14a0);
+	mchbar_clrsetbits32(0x6d0, ~0xff0000ff, 0x8000);
+	mchbar_write16(0x232, 1 << 3);
 	/* 0x40004 or 0 depending on ? */
-	MCHBAR32_AND_OR(0x234, 0xfffbfffb, 0x40004);
-	MCHBAR32_AND_OR(0x34, 0xfffffffd, 5);
-	MCHBAR32(0x128) = 0x2150d05;
-	MCHBAR8(0x12c) = 0x1f;
-	MCHBAR8(0x12d) = 0x56;
-	MCHBAR8(0x12e) = 0x31;
-	MCHBAR8(0x12f) = 0x0;
-	MCHBAR8(0x271) = 0x2;
-	MCHBAR8(0x671) = 0x2;
-	MCHBAR8(0x1e8) = 0x4;
+	mchbar_clrsetbits32(0x234, 0x40004, 0x40004);
+	mchbar_clrsetbits32(0x34, 0x7, 5);
+	mchbar_write32(0x128, 0x2150d05);
+	mchbar_write8(0x12c, 0x1f);
+	mchbar_write8(0x12d, 0x56);
+	mchbar_write8(0x12e, 0x31);
+	mchbar_write8(0x12f, 0);
+	mchbar_write8(0x271, 1 << 1);
+	mchbar_write8(0x671, 1 << 1);
+	mchbar_write8(0x1e8, 1 << 2);
 	for (channel = 0; channel < NUM_CHANNELS; channel++)
-		MCHBAR32(0x294 + (channel << 10)) =
-			(info.populated_ranks_mask[channel] & 3) << 16;
-	MCHBAR32_AND_OR(0x134, 0xfc01ffff, 0x10000);
-	MCHBAR32_AND_OR(0x134, 0xfc85ffff, 0x850000);
+		mchbar_write32(0x294 + (channel << 10),
+			(info.populated_ranks_mask[channel] & 3) << 16);
+	mchbar_clrsetbits32(0x134, ~0xfc01ffff, 0x10000);
+	mchbar_clrsetbits32(0x134, ~0xfc85ffff, 0x850000);
 	for (channel = 0; channel < NUM_CHANNELS; channel++)
-		MCHBAR32_AND_OR(0x260 + (channel << 10), ~0xf00000, 0x8000000 |
-			((info.populated_ranks_mask[channel] & 3) << 20));
+		mchbar_clrsetbits32(0x260 + (channel << 10), 0xf << 20, 1 << 27 |
+			(info.populated_ranks_mask[channel] & 3) << 20);
 
 	if (!s3resume)
 		jedec_init(&info);
@@ -3609,28 +3598,28 @@
 					totalrank++;
 				}
 
-	MCHBAR8(0x12c) = 0x9f;
+	mchbar_write8(0x12c, 0x9f);
 
-	MCHBAR8_AND_OR(0x271, 0xcf, 0xe);
-	MCHBAR8_AND_OR(0x671, 0xcf, 0xe);
+	mchbar_clrsetbits8(0x271, 0x3e, 0x0e);
+	mchbar_clrsetbits8(0x671, 0x3e, 0x0e);
 
 	if (!s3resume) {
 		for (channel = 0; channel < NUM_CHANNELS; channel++) {
-			MCHBAR32(0x294 + (channel << 10)) =
-				(info.populated_ranks_mask[channel] & 3) << 16;
-			MCHBAR16(0x298 + (channel << 10)) =
+			mchbar_write32(0x294 + (channel << 10),
+				(info.populated_ranks_mask[channel] & 3) << 16);
+			mchbar_write16(0x298 + (channel << 10),
 				info.populated_ranks[channel][0][0] |
-				(info.populated_ranks[channel][0][1] << 5);
-			MCHBAR32(0x29c + (channel << 10)) = 0x77a;
+				info.populated_ranks[channel][0][1] << 5);
+			mchbar_write32(0x29c + (channel << 10), 0x77a);
 		}
-		MCHBAR32_AND_OR(0x2c0, 0, 0x6009cc00);	// !!!!
+		mchbar_clrsetbits32(0x2c0, ~0, 0x6009cc00);	// !!!!
 
 		{
 			u8 a, b;
-			a = MCHBAR8(0x243);
-			b = MCHBAR8(0x643);
-			MCHBAR8(0x243) = a | 2;
-			MCHBAR8(0x643) = b | 2;
+			a = mchbar_read8(0x243);
+			b = mchbar_read8(0x643);
+			mchbar_write8(0x243, a | 2);
+			mchbar_write8(0x643, b | 2);
 		}
 
 		write_1d0(7, 0x19b, 3, 1);
@@ -3638,8 +3627,8 @@
 		write_1d0(4, 0x1c6, 4, 1);
 		write_1d0(4, 0x1cc, 4, 1);
 		rmw_1d0(0x151, 0xf, 0x4, 4);
-		MCHBAR32(0x584) = 0xfffff;
-		MCHBAR32(0x984) = 0xfffff;
+		mchbar_write32(0x584, 0xfffff);
+		mchbar_write32(0x984, 0xfffff);
 
 		for (channel = 0; channel < NUM_CHANNELS; channel++)
 			for (slot = 0; slot < NUM_SLOTS; slot++)
@@ -3651,31 +3640,31 @@
 							    channel, slot,
 							    rank);
 
-		MCHBAR8(0x243) = 0x1;
-		MCHBAR8(0x643) = 0x1;
+		mchbar_write8(0x243, 1);
+		mchbar_write8(0x643, 1);
 	}
 
 	/* was == 1 but is common */
 	pci_write_config16(NORTHBRIDGE, 0xc8, 3);
 	write_26c(0, 0x820);
 	write_26c(1, 0x820);
-	MCHBAR32_OR(0x130, 2);
+	mchbar_setbits32(0x130, 1 << 1);
 	/* end */
 
 	if (s3resume) {
 		for (channel = 0; channel < NUM_CHANNELS; channel++) {
-			MCHBAR32(0x294 + (channel << 10)) =
-				(info.populated_ranks_mask[channel] & 3) << 16;
-			MCHBAR16(0x298 + (channel << 10)) =
+			mchbar_write32(0x294 + (channel << 10),
+				(info.populated_ranks_mask[channel] & 3) << 16);
+			mchbar_write16(0x298 + (channel << 10),
 				info.populated_ranks[channel][0][0] |
-				(info.populated_ranks[channel][0][1] << 5);
-			MCHBAR32(0x29c + (channel << 10)) = 0x77a;
+				info.populated_ranks[channel][0][1] << 5);
+			mchbar_write32(0x29c + (channel << 10), 0x77a);
 		}
-		MCHBAR32_AND_OR(0x2c0, 0, 0x6009cc00);	// !!!!
+		mchbar_clrsetbits32(0x2c0, ~0, 0x6009cc00);	// !!!!
 	}
 
-	MCHBAR32_AND(0xfa4, ~0x01000002);
-	MCHBAR32(0xfb0) = 0x2000e019;
+	mchbar_clrbits32(0xfa4, 1 << 24 | 1 << 1);
+	mchbar_write32(0xfb0, 0x2000e019);
 
 	/* Before training. */
 	timestamp_add_now(103);
@@ -3692,32 +3681,32 @@
 	program_total_memory_map(&info);
 
 	if (info.non_interleaved_part_mb != 0 && info.interleaved_part_mb != 0)
-		MCHBAR8(0x111) = 0x20 | (0 << 2) | (1 << 6) | (0 << 7);
+		mchbar_write8(0x111, 0 << 2 | 1 << 5 | 1 << 6 | 0 << 7);
 	else if (have_match_ranks(&info, 0, 4) && have_match_ranks(&info, 1, 4))
-		MCHBAR8(0x111) = 0x20 | (3 << 2) | (0 << 6) | (1 << 7);
+		mchbar_write8(0x111, 3 << 2 | 1 << 5 | 0 << 6 | 1 << 7);
 	else if (have_match_ranks(&info, 0, 2) && have_match_ranks(&info, 1, 2))
-		MCHBAR8(0x111) = 0x20 | (3 << 2) | (0 << 6) | (0 << 7);
+		mchbar_write8(0x111, 3 << 2 | 1 << 5 | 0 << 6 | 0 << 7);
 	else
-		MCHBAR8(0x111) = 0x20 | (3 << 2) | (1 << 6) | (0 << 7);
+		mchbar_write8(0x111, 3 << 2 | 1 << 5 | 1 << 6 | 0 << 7);
 
-	MCHBAR32_AND(0xfac, ~0x80000000);
-	MCHBAR32(0xfb4) = 0x4800;
-	MCHBAR32(0xfb8) = (info.revision < 8) ? 0x20 : 0x0;
-	MCHBAR32(0xe94) = 0x7ffff;
-	MCHBAR32(0xfc0) = 0x80002040;
-	MCHBAR32(0xfc4) = 0x701246;
-	MCHBAR8_AND(0xfc8, ~0x70);
-	MCHBAR32_OR(0xe5c, 0x1000000);
-	MCHBAR32_AND_OR(0x1a70, ~0x00100000, 0x00200000);
-	MCHBAR32(0x50) = 0x700b0;
-	MCHBAR32(0x3c) = 0x10;
-	MCHBAR8(0x1aa8) = (MCHBAR8(0x1aa8) & ~0x35) | 0xa;
-	MCHBAR8_OR(0xff4, 0x2);
-	MCHBAR32_AND_OR(0xff8, ~0xe008, 0x1020);
+	mchbar_clrbits32(0xfac, 1 << 31);
+	mchbar_write32(0xfb4, 0x4800);
+	mchbar_write32(0xfb8, (info.revision < 8) ? 0x20 : 0x0);
+	mchbar_write32(0xe94, 0x7ffff);
+	mchbar_write32(0xfc0, 0x80002040);
+	mchbar_write32(0xfc4, 0x701246);
+	mchbar_clrbits8(0xfc8, 0x70);
+	mchbar_setbits32(0xe5c, 1 << 24);
+	mchbar_clrsetbits32(0x1a70, 3 << 20, 2 << 20);
+	mchbar_write32(0x50, 0x700b0);
+	mchbar_write32(0x3c, 0x10);
+	mchbar_clrsetbits8(0x1aa8, 0x3f, 0xa);
+	mchbar_setbits8(0xff4, 1 << 1);
+	mchbar_clrsetbits32(0xff8, 0xe008, 0x1020);
 
-	MCHBAR32(0xd00) = IOMMU_BASE2 | 1;
-	MCHBAR32(0xd40) = IOMMU_BASE1 | 1;
-	MCHBAR32(0xdc0) = IOMMU_BASE4 | 1;
+	mchbar_write32(0xd00, IOMMU_BASE2 | 1);
+	mchbar_write32(0xd40, IOMMU_BASE1 | 1);
+	mchbar_write32(0xdc0, IOMMU_BASE4 | 1);
 
 	write32p(IOMMU_BASE1 | 0xffc, 0x80000000);
 	write32p(IOMMU_BASE2 | 0xffc, 0xc0000000);
@@ -3727,28 +3716,28 @@
 		u32 eax;
 
 		eax = info.fsb_frequency / 9;
-		MCHBAR32_AND_OR(0xfcc, 0xfffc0000,
+		mchbar_clrsetbits32(0xfcc, 0x3ffff,
 			(eax * 0x280) | (eax * 0x5000) | eax | 0x40000);
-		MCHBAR32(0x20) = 0x33001;
+		mchbar_write32(0x20, 0x33001);
 	}
 
 	for (channel = 0; channel < NUM_CHANNELS; channel++) {
-		MCHBAR32_AND(0x220 + (channel << 10), ~0x7770);
+		mchbar_clrbits32(0x220 + (channel << 10), 0x7770);
 		if (info.max_slots_used_in_channel == 1)
-			MCHBAR16_OR(0x237 + (channel << 10), 0x0201);
+			mchbar_setbits16(0x237 + (channel << 10), 0x0201);
 		else
-			MCHBAR16_AND(0x237 + (channel << 10), ~0x0201);
+			mchbar_clrbits16(0x237 + (channel << 10), 0x0201);
 
-		MCHBAR8_OR(0x241 + (channel << 10), 1);
+		mchbar_setbits8(0x241 + (channel << 10), 1 << 0);
 
 		if (info.clock_speed_index <= 1 && (info.silicon_revision == 2
 			|| info.silicon_revision == 3))
-			MCHBAR32_OR(0x248 + (channel << 10), 0x00102000);
+			mchbar_setbits32(0x248 + (channel << 10), 0x00102000);
 		else
-			MCHBAR32_AND(0x248 + (channel << 10), ~0x00102000);
+			mchbar_clrbits32(0x248 + (channel << 10), 0x00102000);
 	}
 
-	MCHBAR32_OR(0x115, 0x1000000);
+	mchbar_setbits32(0x115, 1 << 24);
 
 	{
 		u8 al;
@@ -3756,63 +3745,63 @@
 		if (!(info.silicon_revision == 0 || info.silicon_revision == 1))
 			al += 2;
 		al |= ((1 << (info.max_slots_used_in_channel - 1)) - 1) << 4;
-		MCHBAR32(0x210) = (al << 16) | 0x20;
+		mchbar_write32(0x210, al << 16 | 0x20);
 	}
 
 	for (channel = 0; channel < NUM_CHANNELS; channel++) {
-		MCHBAR32(0x288 + (channel << 10)) = 0x70605040;
-		MCHBAR32(0x28c + (channel << 10)) = 0xfffec080;
-		MCHBAR32(0x290 + (channel << 10)) = 0x282091c |
-			((info.max_slots_used_in_channel - 1) << 0x16);
+		mchbar_write32(0x288 + (channel << 10), 0x70605040);
+		mchbar_write32(0x28c + (channel << 10), 0xfffec080);
+		mchbar_write32(0x290 + (channel << 10), 0x282091c |
+			(info.max_slots_used_in_channel - 1) << 0x16);
 	}
 	u32 reg1c;
 	pci_read_config32(NORTHBRIDGE, 0x40);	// = DEFAULT_EPBAR | 0x001 // OK
-	reg1c = EPBAR32(EPVC1RCAP);	// = 0x8001 // OK
+	reg1c = epbar_read32(EPVC1RCAP);	// = 0x8001 // OK
 	pci_read_config32(NORTHBRIDGE, 0x40);	// = DEFAULT_EPBAR | 0x001 // OK
-	EPBAR32(EPVC1RCAP) = reg1c;	// OK
-	MCHBAR8(0xe08);	// = 0x0
+	epbar_write32(EPVC1RCAP, reg1c);	// OK
+	mchbar_read8(0xe08);	// = 0x0
 	pci_read_config32(NORTHBRIDGE, 0xe4);	// = 0x316126
-	MCHBAR8_OR(0x1210, 2);
-	MCHBAR32(0x1200) = 0x8800440;
-	MCHBAR32(0x1204) = 0x53ff0453;
-	MCHBAR32(0x1208) = 0x19002043;
-	MCHBAR16(0x1214) = 0x320;
+	mchbar_setbits8(0x1210, 1 << 1);
+	mchbar_write32(0x1200, 0x8800440);
+	mchbar_write32(0x1204, 0x53ff0453);
+	mchbar_write32(0x1208, 0x19002043);
+	mchbar_write16(0x1214, 0x320);
 
 	if (info.revision == 0x10 || info.revision == 0x11) {
-		MCHBAR16(0x1214) = 0x220;
-		MCHBAR8_OR(0x1210, 0x40);
+		mchbar_write16(0x1214, 0x220);
+		mchbar_setbits8(0x1210, 1 << 6);
 	}
 
-	MCHBAR8_OR(0x1214, 0x4);
-	MCHBAR8(0x120c) = 0x1;
-	MCHBAR8(0x1218) = 0x3;
-	MCHBAR8(0x121a) = 0x3;
-	MCHBAR8(0x121c) = 0x3;
-	MCHBAR16(0xc14) = 0x0;
-	MCHBAR16(0xc20) = 0x0;
-	MCHBAR32(0x1c) = 0x0;
+	mchbar_setbits8(0x1214, 1 << 2);
+	mchbar_write8(0x120c, 1);
+	mchbar_write8(0x1218, 3);
+	mchbar_write8(0x121a, 3);
+	mchbar_write8(0x121c, 3);
+	mchbar_write16(0xc14, 0);
+	mchbar_write16(0xc20, 0);
+	mchbar_write32(0x1c, 0);
 
 	/* revision dependent here.  */
 
-	MCHBAR16_OR(0x1230, 0x1f07);
+	mchbar_setbits16(0x1230, 0x1f07);
 
 	if (info.uma_enabled)
-		MCHBAR32_OR(0x11f4, 0x10000000);
+		mchbar_setbits32(0x11f4, 1 << 28);
 
-	MCHBAR16_OR(0x1230, 0x8000);
-	MCHBAR8_OR(0x1214, 1);
+	mchbar_setbits16(0x1230, 1 << 15);
+	mchbar_setbits8(0x1214, 1 << 0);
 
 	u8 bl, ebpb;
 	u16 reg_1020;
 
-	reg_1020 = MCHBAR32(0x1020);	// = 0x6c733c  // OK
-	MCHBAR8(0x1070) = 0x1;
+	reg_1020 = mchbar_read32(0x1020);	// = 0x6c733c  // OK
+	mchbar_write8(0x1070, 1);
 
-	MCHBAR32(0x1000) = 0x100;
-	MCHBAR8(0x1007) = 0x0;
+	mchbar_write32(0x1000, 0x100);
+	mchbar_write8(0x1007, 0);
 
 	if (reg_1020 != 0) {
-		MCHBAR16(0x1018) = 0x0;
+		mchbar_write16(0x1018, 0);
 		bl = reg_1020 >> 8;
 		ebpb = reg_1020 & 0xff;
 	} else {
@@ -3822,42 +3811,42 @@
 
 	rdmsr(0x1a2);
 
-	MCHBAR32(0x1014) = 0xffffffff;
+	mchbar_write32(0x1014, 0xffffffff);
 
-	MCHBAR32(0x1010) = ((((ebpb + 0x7d) << 7) / bl) & 0xff) * (!!reg_1020);
+	mchbar_write32(0x1010, ((((ebpb + 0x7d) << 7) / bl) & 0xff) * !!reg_1020);
 
-	MCHBAR8(0x101c) = 0xb8;
+	mchbar_write8(0x101c, 0xb8);
 
-	MCHBAR8(0x123e) = (MCHBAR8(0x123e) & 0xf) | 0x60;
+	mchbar_clrsetbits8(0x123e, 0xf0, 0x60);
 	if (reg_1020 != 0) {
-		MCHBAR32_AND_OR(0x123c, ~0x00900000, 0x600000);
-		MCHBAR8(0x101c) = 0xb8;
+		mchbar_clrsetbits32(0x123c, 0xf << 20, 0x6 << 20);
+		mchbar_write8(0x101c, 0xb8);
 	}
 
 	setup_heci_uma(&info);
 
 	if (info.uma_enabled) {
 		u16 ax;
-		MCHBAR32_OR(0x11b0, 0x4000);
-		MCHBAR32_OR(0x11b4, 0x4000);
-		MCHBAR16_OR(0x1190, 0x4000);
+		mchbar_setbits32(0x11b0, 1 << 14);
+		mchbar_setbits32(0x11b4, 1 << 14);
+		mchbar_setbits16(0x1190, 1 << 14);
 
-		ax = MCHBAR16(0x1190) & 0xf00;	// = 0x480a  // OK
-		MCHBAR16(0x1170) = ax | (MCHBAR16(0x1170) & 0x107f) | 0x4080;
-		MCHBAR16_OR(0x1170, 0x1000);
+		ax = mchbar_read16(0x1190) & 0xf00;	// = 0x480a  // OK
+		mchbar_write16(0x1170, ax | (mchbar_read16(0x1170) & 0x107f) | 0x4080);
+		mchbar_setbits16(0x1170, 1 << 12);
 
 		udelay(1000);
 
 		u16 ecx;
-		for (ecx = 0xffff; ecx && (MCHBAR16(0x1170) & 0x1000); ecx--)
+		for (ecx = 0xffff; ecx && (mchbar_read16(0x1170) & (1 << 12)); ecx--)
 			;
-		MCHBAR16_AND(0x1190, ~0x4000);
+		mchbar_clrbits16(0x1190, 1 << 14);
 	}
 
 	pci_write_config8(SOUTHBRIDGE, GEN_PMCON_2,
 		      pci_read_config8(SOUTHBRIDGE, GEN_PMCON_2) & ~0x80);
 	udelay(10000);
-	MCHBAR16(0x2ca8) = 0x8;
+	mchbar_write16(0x2ca8, 1 << 3);
 
 	udelay(1000);
 	dump_timings(&info);
