[coreboot] New patch to review for coreboot: d365f7a link/graphics: New state machine

Stefan Reinauer (stefan.reinauer@coreboot.org) gerrit at coreboot.org
Tue Mar 19 21:14:43 CET 2013


Stefan Reinauer (stefan.reinauer at coreboot.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/2836

-gerrit

commit d365f7afffe76a8c834a57749a9202f911971edd
Author: Ronald G. Minnich <rminnich at gmail.com>
Date:   Tue Mar 5 17:07:40 2013 -0800

    link/graphics: New state machine
    
    This is a new state machine. It is more programmatic, in the
    case of auxio, and has much more symbolic naming, and very few
    "magic" numbers, except in the case of undocumented settings.
    
    As before, the 'pre-computed' IO ops are encoded in the iodefs
    table. A function, run, is passed and index into the table and
    runs the ops.
    
    A new operator, I, has been added. When the I operator is hit,
    run() returns the index of the next operator in the table.
    
    The i915lightup function runs the table. All the AUX channel ops
    have been removed from the table, however, and are now called as
    functions, using the previously committed auxio function.
    
    The iodefs table has been grouped into blocks of ops, which end in
    an I operator. As the lightup function progresses through startup,
    and the run() returns, the lightup function performs aux channel
    operations.
    
    This code is symbolic enough, I hope, that it will make haswell
    graphics bringup simpler.
    
    i915io.c, and the core of the code in i915lightup.c, were
    programatically generated, starting with IO logs from the DRM
    startup code in the kernel. It is possible to apply the tools that
    do this generation to newer IO logs from the kernel.
    
    Change-Id: I8a8e121dc0d9674f0c6a866343b28e179a1e3d8a
    Signed-off-by: Ronald G. Minnich <rminnich at gmail.com>
---
 src/mainboard/google/link/drm_dp_helper.h | 239 +++++++++
 src/mainboard/google/link/i915.c          | 204 +++++---
 src/mainboard/google/link/i915io.c        | 813 ++++++++++++------------------
 src/mainboard/google/link/i915io.h        |  31 +-
 src/mainboard/google/link/intel_dp.c      |  22 +-
 5 files changed, 755 insertions(+), 554 deletions(-)

diff --git a/src/mainboard/google/link/drm_dp_helper.h b/src/mainboard/google/link/drm_dp_helper.h
new file mode 100644
index 0000000..f2e06c3
--- /dev/null
+++ b/src/mainboard/google/link/drm_dp_helper.h
@@ -0,0 +1,239 @@
+/*
+ * Copyright 2013 Google Inc.
+ * Copyright © 2008 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that copyright
+ * notice and this permission notice appear in supporting documentation, and
+ * that the name of the copyright holders not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission.  The copyright holders make no representations
+ * about the suitability of this software for any purpose.  It is provided "as
+ * is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+#ifndef _DRM_DP_HELPER_H_
+#define _DRM_DP_HELPER_H_
+
+/* From the VESA DisplayPort spec */
+
+#define AUX_NATIVE_WRITE	0x8
+#define AUX_NATIVE_READ		0x9
+#define AUX_I2C_WRITE		0x0
+#define AUX_I2C_READ		0x1
+#define AUX_I2C_STATUS		0x2
+#define AUX_I2C_MOT		0x4
+
+#define AUX_NATIVE_REPLY_ACK	(0x0 << 4)
+#define AUX_NATIVE_REPLY_NACK	(0x1 << 4)
+#define AUX_NATIVE_REPLY_DEFER	(0x2 << 4)
+#define AUX_NATIVE_REPLY_MASK	(0x3 << 4)
+
+#define AUX_I2C_REPLY_ACK	(0x0 << 6)
+#define AUX_I2C_REPLY_NACK	(0x1 << 6)
+#define AUX_I2C_REPLY_DEFER	(0x2 << 6)
+#define AUX_I2C_REPLY_MASK	(0x3 << 6)
+
+/* AUX CH addresses */
+/* DPCD */
+#define DP_DPCD_REV                         0x000
+
+#define DP_MAX_LINK_RATE                    0x001
+
+#define DP_MAX_LANE_COUNT                   0x002
+# define DP_MAX_LANE_COUNT_MASK		    0x1f
+# define DP_TPS3_SUPPORTED		    (1 << 6)
+# define DP_ENHANCED_FRAME_CAP		    (1 << 7)
+
+#define DP_MAX_DOWNSPREAD                   0x003
+# define DP_NO_AUX_HANDSHAKE_LINK_TRAINING  (1 << 6)
+
+#define DP_NORP                             0x004
+
+#define DP_DOWNSTREAMPORT_PRESENT           0x005
+# define DP_DWN_STRM_PORT_PRESENT           (1 << 0)
+# define DP_DWN_STRM_PORT_TYPE_MASK         0x06
+/* 00b = DisplayPort */
+/* 01b = Analog */
+/* 10b = TMDS or HDMI */
+/* 11b = Other */
+# define DP_FORMAT_CONVERSION               (1 << 3)
+
+#define DP_MAIN_LINK_CHANNEL_CODING         0x006
+
+#define DP_EDP_CONFIGURATION_CAP            0x00d
+#define DP_TRAINING_AUX_RD_INTERVAL         0x00e
+
+#define DP_PSR_SUPPORT                      0x070
+# define DP_PSR_IS_SUPPORTED                1
+#define DP_PSR_CAPS                         0x071
+# define DP_PSR_NO_TRAIN_ON_EXIT            1
+# define DP_PSR_SETUP_TIME_330              (0 << 1)
+# define DP_PSR_SETUP_TIME_275              (1 << 1)
+# define DP_PSR_SETUP_TIME_220              (2 << 1)
+# define DP_PSR_SETUP_TIME_165              (3 << 1)
+# define DP_PSR_SETUP_TIME_110              (4 << 1)
+# define DP_PSR_SETUP_TIME_55               (5 << 1)
+# define DP_PSR_SETUP_TIME_0                (6 << 1)
+# define DP_PSR_SETUP_TIME_MASK             (7 << 1)
+# define DP_PSR_SETUP_TIME_SHIFT            1
+
+/* link configuration */
+#define	DP_LINK_BW_SET		            0x100
+# define DP_LINK_BW_1_62		    0x06
+# define DP_LINK_BW_2_7			    0x0a
+# define DP_LINK_BW_5_4			    0x14
+
+#define DP_LANE_COUNT_SET	            0x101
+# define DP_LANE_COUNT_MASK		    0x0f
+# define DP_LANE_COUNT_ENHANCED_FRAME_EN    (1 << 7)
+
+#define DP_TRAINING_PATTERN_SET	            0x102
+# define DP_TRAINING_PATTERN_DISABLE	    0
+# define DP_TRAINING_PATTERN_1		    1
+# define DP_TRAINING_PATTERN_2		    2
+# define DP_TRAINING_PATTERN_3		    3
+# define DP_TRAINING_PATTERN_MASK	    0x3
+
+# define DP_LINK_QUAL_PATTERN_DISABLE	    (0 << 2)
+# define DP_LINK_QUAL_PATTERN_D10_2	    (1 << 2)
+# define DP_LINK_QUAL_PATTERN_ERROR_RATE    (2 << 2)
+# define DP_LINK_QUAL_PATTERN_PRBS7	    (3 << 2)
+# define DP_LINK_QUAL_PATTERN_MASK	    (3 << 2)
+
+# define DP_RECOVERED_CLOCK_OUT_EN	    (1 << 4)
+# define DP_LINK_SCRAMBLING_DISABLE	    (1 << 5)
+
+# define DP_SYMBOL_ERROR_COUNT_BOTH	    (0 << 6)
+# define DP_SYMBOL_ERROR_COUNT_DISPARITY    (1 << 6)
+# define DP_SYMBOL_ERROR_COUNT_SYMBOL	    (2 << 6)
+# define DP_SYMBOL_ERROR_COUNT_MASK	    (3 << 6)
+
+#define DP_TRAINING_LANE0_SET		    0x103
+#define DP_TRAINING_LANE1_SET		    0x104
+#define DP_TRAINING_LANE2_SET		    0x105
+#define DP_TRAINING_LANE3_SET		    0x106
+
+# define DP_TRAIN_VOLTAGE_SWING_MASK	    0x3
+# define DP_TRAIN_VOLTAGE_SWING_SHIFT	    0
+# define DP_TRAIN_MAX_SWING_REACHED	    (1 << 2)
+# define DP_TRAIN_VOLTAGE_SWING_400	    (0 << 0)
+# define DP_TRAIN_VOLTAGE_SWING_600	    (1 << 0)
+# define DP_TRAIN_VOLTAGE_SWING_800	    (2 << 0)
+# define DP_TRAIN_VOLTAGE_SWING_1200	    (3 << 0)
+
+# define DP_TRAIN_PRE_EMPHASIS_MASK	    (3 << 3)
+# define DP_TRAIN_PRE_EMPHASIS_0	    (0 << 3)
+# define DP_TRAIN_PRE_EMPHASIS_3_5	    (1 << 3)
+# define DP_TRAIN_PRE_EMPHASIS_6	    (2 << 3)
+# define DP_TRAIN_PRE_EMPHASIS_9_5	    (3 << 3)
+
+# define DP_TRAIN_PRE_EMPHASIS_SHIFT	    3
+# define DP_TRAIN_MAX_PRE_EMPHASIS_REACHED  (1 << 5)
+
+#define DP_DOWNSPREAD_CTRL		    0x107
+# define DP_SPREAD_AMP_0_5		    (1 << 4)
+
+#define DP_MAIN_LINK_CHANNEL_CODING_SET	    0x108
+# define DP_SET_ANSI_8B10B		    (1 << 0)
+
+#define DP_PSR_EN_CFG			    0x170
+# define DP_PSR_ENABLE			    (1 << 0)
+# define DP_PSR_MAIN_LINK_ACTIVE	    (1 << 1)
+# define DP_PSR_CRC_VERIFICATION	    (1 << 2)
+# define DP_PSR_FRAME_CAPTURE		    (1 << 3)
+
+#define DP_DEVICE_SERVICE_IRQ_VECTOR	    0x201
+# define DP_REMOTE_CONTROL_COMMAND_PENDING  (1 << 0)
+# define DP_AUTOMATED_TEST_REQUEST	    (1 << 1)
+# define DP_CP_IRQ			    (1 << 2)
+# define DP_SINK_SPECIFIC_IRQ		    (1 << 6)
+
+#define DP_EDP_CONFIGURATION_SET            0x10a
+
+#define DP_LANE0_1_STATUS		    0x202
+#define DP_LANE2_3_STATUS		    0x203
+# define DP_LANE_CR_DONE		    (1 << 0)
+# define DP_LANE_CHANNEL_EQ_DONE	    (1 << 1)
+# define DP_LANE_SYMBOL_LOCKED		    (1 << 2)
+
+#define DP_CHANNEL_EQ_BITS (DP_LANE_CR_DONE |		\
+			    DP_LANE_CHANNEL_EQ_DONE |	\
+			    DP_LANE_SYMBOL_LOCKED)
+
+#define DP_LANE_ALIGN_STATUS_UPDATED	    0x204
+
+#define DP_INTERLANE_ALIGN_DONE		    (1 << 0)
+#define DP_DOWNSTREAM_PORT_STATUS_CHANGED   (1 << 6)
+#define DP_LINK_STATUS_UPDATED		    (1 << 7)
+
+#define DP_SINK_STATUS			    0x205
+
+#define DP_RECEIVE_PORT_0_STATUS	    (1 << 0)
+#define DP_RECEIVE_PORT_1_STATUS	    (1 << 1)
+
+#define DP_ADJUST_REQUEST_LANE0_1	    0x206
+#define DP_ADJUST_REQUEST_LANE2_3	    0x207
+# define DP_ADJUST_VOLTAGE_SWING_LANE0_MASK  0x03
+# define DP_ADJUST_VOLTAGE_SWING_LANE0_SHIFT 0
+# define DP_ADJUST_PRE_EMPHASIS_LANE0_MASK   0x0c
+# define DP_ADJUST_PRE_EMPHASIS_LANE0_SHIFT  2
+# define DP_ADJUST_VOLTAGE_SWING_LANE1_MASK  0x30
+# define DP_ADJUST_VOLTAGE_SWING_LANE1_SHIFT 4
+# define DP_ADJUST_PRE_EMPHASIS_LANE1_MASK   0xc0
+# define DP_ADJUST_PRE_EMPHASIS_LANE1_SHIFT  6
+
+#define DP_TEST_REQUEST			    0x218
+# define DP_TEST_LINK_TRAINING		    (1 << 0)
+# define DP_TEST_LINK_PATTERN		    (1 << 1)
+# define DP_TEST_LINK_EDID_READ		    (1 << 2)
+# define DP_TEST_LINK_PHY_TEST_PATTERN	    (1 << 3) /* DPCD >= 1.1 */
+
+#define DP_TEST_LINK_RATE		    0x219
+# define DP_LINK_RATE_162		    (0x6)
+# define DP_LINK_RATE_27		    (0xa)
+
+#define DP_TEST_LANE_COUNT		    0x220
+
+#define DP_TEST_PATTERN			    0x221
+
+#define DP_TEST_RESPONSE		    0x260
+# define DP_TEST_ACK			    (1 << 0)
+# define DP_TEST_NAK			    (1 << 1)
+# define DP_TEST_EDID_CHECKSUM_WRITE	    (1 << 2)
+
+#define DP_SET_POWER                        0x600
+# define DP_SET_POWER_D0                    0x1
+# define DP_SET_POWER_D3                    0x2
+
+#define DP_PSR_ERROR_STATUS                 0x2006
+# define DP_PSR_LINK_CRC_ERROR              (1 << 0)
+# define DP_PSR_RFB_STORAGE_ERROR           (1 << 1)
+
+#define DP_PSR_ESI                          0x2007
+# define DP_PSR_CAPS_CHANGE                 (1 << 0)
+
+#define DP_PSR_STATUS                       0x2008
+# define DP_PSR_SINK_INACTIVE               0
+# define DP_PSR_SINK_ACTIVE_SRC_SYNCED      1
+# define DP_PSR_SINK_ACTIVE_RFB             2
+# define DP_PSR_SINK_ACTIVE_SINK_SYNCED     3
+# define DP_PSR_SINK_ACTIVE_RESYNC          4
+# define DP_PSR_SINK_INTERNAL_ERROR         7
+# define DP_PSR_SINK_STATE_MASK             0x07
+
+#define MODE_I2C_START	1
+#define MODE_I2C_WRITE	2
+#define MODE_I2C_READ	4
+#define MODE_I2C_STOP	8
+
+#endif /* _DRM_DP_HELPER_H_ */
diff --git a/src/mainboard/google/link/i915.c b/src/mainboard/google/link/i915.c
index 1441e3a..aef5565 100644
--- a/src/mainboard/google/link/i915.c
+++ b/src/mainboard/google/link/i915.c
@@ -19,6 +19,7 @@
 
 #include <types.h>
 #include <string.h>
+#include <stdlib.h>
 #include <device/device.h>
 #include <device/device.h>
 #include <device/pci_def.h>
@@ -62,18 +63,27 @@ extern int oprom_is_loaded;
 #define READ32(addr) io_i915_READ32(addr)
 #define WRITE32(val, addr) io_i915_WRITE32(val, addr)
 
+static char *regname(unsigned long addr)
+{
+	static char name[16];
+	sprintf(name, "0x%lx", addr);
+	return name;
+}
+
 unsigned long io_i915_READ32(unsigned long addr)
 {
-       unsigned long val;
-       outl(addr, addrport);
-       val = inl(dataport);
-       return val;
+	unsigned long val;
+	outl(addr, addrport);
+	val = inl(dataport);
+	if (verbose & vio)printk(BIOS_SPEW, "%s: Got %08lx\n", regname(addr), val);
+	return val;
 }
 
 void io_i915_WRITE32(unsigned long val, unsigned long addr)
 {
-       outl(addr, addrport);
-       outl(val, dataport);
+	if (verbose & vio)printk(BIOS_SPEW, "%s: outl %08lx\n", regname(addr), val);
+	outl(addr, addrport);
+	outl(val, dataport);
 }
 
 
@@ -101,13 +111,6 @@ setgtt(int start, int end, unsigned long base, int inc)
         }
 }
 
-static char *regname(unsigned long addr)
-{
-	static char name[16];
-	sprintf(name, "0x%lx", addr);
-	return name;
-}
-
 static unsigned long tickspermicrosecond = 1795;
 static unsigned long long globalstart;
 
@@ -125,6 +128,7 @@ static unsigned long globalmicroseconds(void)
 }
 
 extern struct iodef iodefs[];
+extern int niodefs;
 
 static int i915_init_done = 0;
 
@@ -135,10 +139,6 @@ static void palette(void)
 	unsigned long color = 0;
 
 	for(i = 0; i < 256; i++, color += 0x010101){
-	  if (verbose & vio)printk(BIOS_SPEW,
-				   "_LGC_PALETTE_A+%08x: outl %08lx\n",
-				   i<<2, color);
-
 		io_i915_WRITE32(color, _LGC_PALETTE_A + (i<<2));
 	}
 }
@@ -169,31 +169,15 @@ void fill_lb_framebuffer(struct lb_framebuffer *framebuffer)
 
 }
 
-int i915lightup(unsigned int physbase, unsigned int iobase, unsigned int mmio,
-	unsigned int gfx);
+static unsigned long times[4096];
 
-int i915lightup(unsigned int pphysbase,
-	unsigned int piobase,
-	unsigned int pmmio,
-	unsigned int pgfx)
+static int run(int index)
 {
 	int i, prev = 0;
 	struct iodef *id, *lastidread = 0;
 	unsigned long u, t;
-	static unsigned long times[4096];
-	mmio = (void *)pmmio;
-	addrport = piobase;
-	dataport = addrport + 4;
-	physbase = pphysbase;
-	graphics = pgfx;
-	printk(BIOS_SPEW,
-		"i915lightup: graphics %p mmio %p"
-		"addrport %04x physbase %08x\n",
-			(void *)graphics, mmio, addrport, physbase);
-	globalstart = rdtscll();
-
 	/* state machine! */
-	for(i = 0, id = iodefs; id->op; i++, id++){
+	for(i = index, id = &iodefs[i]; id->op; i++, id++){
 		switch(id->op){
 		case M:
 			if (verbose & vmsg) printk(BIOS_SPEW, "%ld: %s\n",
@@ -204,8 +188,8 @@ int i915lightup(unsigned int pphysbase,
 			break;
 		case R:
 			u = READ32(id->addr);
-			if (verbose & vio)printk(BIOS_SPEW, "%s: Got %08lx, expect %08lx\n",
-				regname(id->addr), u, id->data);
+			if (verbose & vio)
+				printk(BIOS_SPEW, "\texpect %08lx\n", id->data);
 			/* we're looking for something. */
 			if (lastidread->addr == id->addr){
 				/* they're going to be polling.
@@ -222,14 +206,16 @@ int i915lightup(unsigned int pphysbase,
 			lastidread = id;
 			break;
 		case W:
-			if (verbose & vio)printk(BIOS_SPEW, "%s: outl %08lx\n", regname(id->addr),
-									id->data);
 			WRITE32(id->data, id->addr);
 			if (id->addr == PCH_PP_CONTROL){
+				if (verbose & vio)
+					printk(BIOS_SPEW, "PCH_PP_CONTROL\n");
 				switch(id->data & 0xf){
 					case 8: break;
 					case 7: break;
 					default: udelay(100000);
+						if (verbose & vio)
+							printk(BIOS_SPEW, "U %d\n", 100000);
 				}
 			}
 			break;
@@ -240,8 +226,11 @@ int i915lightup(unsigned int pphysbase,
 			} else {
 				verbose = prev;
 			}
+			printk(BIOS_SPEW, "Change verbosity to %d\n", verbose);
 			break;
 		case I:
+		  printk(BIOS_SPEW, "run: return %d\n", i+1);
+			return i+1;
 			break;
 		default:
 			printk(BIOS_SPEW, "BAD TABLE, opcode %d @ %d\n", id->op, i);
@@ -249,27 +238,126 @@ int i915lightup(unsigned int pphysbase,
 		}
 		if (id->udelay)
 			udelay(id->udelay);
-		times[i] = globalmicroseconds();
-	}
-	/* optional, we don't even want to take timestamp overhead
-	 * if we can avoid it. */
-	if (0)
-	for(i = 0, id = iodefs; id->op; i++, id++){
-		switch(id->op){
-		case R:
-			printk(BIOS_SPEW, "%ld: R %08lx\n", times[i], id->addr);
-			break;
-		case W:
-			printk(BIOS_SPEW, "%ld: W %08lx %08lx\n", times[i],
-				id->addr, id->data);
-			break;
-		}
+		if (i < ARRAY_SIZE(times))
+			times[i] = globalmicroseconds();
 	}
+	printk(BIOS_SPEW, "run: return %d\n", i);
+	return i+1;
+}
+
+int i915lightup(unsigned int physbase, unsigned int iobase, unsigned int mmio,
+	unsigned int gfx);
+
+int i915lightup(unsigned int pphysbase, unsigned int piobase,
+	unsigned int pmmio, unsigned int pgfx)
+{
+	int index;
+	u32 auxin[16], auxout[16];
+	mmio = (void *)pmmio;
+	addrport = piobase;
+	dataport = addrport + 4;
+	physbase = pphysbase;
+	graphics = pgfx;
+	printk(BIOS_SPEW,
+		"i915lightup: graphics %p mmio %p"
+		"addrport %04x physbase %08x\n",
+			(void *)graphics, mmio, addrport, physbase);
+	globalstart = rdtscll();
+
+	printk(BIOS_SPEW, "Table has %d elements\n", niodefs);
+	index = run(0);
+	printk(BIOS_SPEW, "Run returns %d\n", index);
+	auxout[0] = 1<<31 /* dp */|0x1<<28/*R*/|DP_DPCD_REV<<8|0xe;
+	intel_dp_aux_ch(DPA_AUX_CH_CTL, DPA_AUX_CH_DATA1, auxout, 4, auxin, 14);
+	auxout[0] = 0<<31 /* i2c */|1<<30|0x0<<28/*W*/|0x0<<8|0x0;
+	intel_dp_aux_ch(DPA_AUX_CH_CTL, DPA_AUX_CH_DATA1, auxout, 3, auxin, 0);
+	index = run(index);
+	printk(BIOS_SPEW, "Run returns %d\n", index);
+	auxout[0] = 0<<31 /* i2c */|0<<30|0x0<<28/*W*/|0x0<<8|0x0;
+	intel_dp_aux_ch(DPA_AUX_CH_CTL, DPA_AUX_CH_DATA1, auxout, 3, auxin, 0);
+	index = run(index);
+	printk(BIOS_SPEW, "Run returns %d\n", index);
+	auxout[0] = 1<<31 /* dp */|0x0<<28/*W*/|DP_SET_POWER<<8|0x0;
+	auxout[1] = 0x01000000;
+	/* DP_SET_POWER_D0 | DP_PSR_SINK_INACTIVE |
+	 * 	(0x0<<13602104)|0x00000001*/ /* broken, fix. */
+	intel_dp_aux_ch(DPA_AUX_CH_CTL, DPA_AUX_CH_DATA1, auxout, 5, auxin, 0);
+	index = run(index);
+	auxout[0] = 1<<31 /* dp */|0x0<<28/*W*/|DP_LINK_BW_SET<<8|0x8;
+	auxout[1] = 0x0a840000;
+	/*( DP_LINK_BW_2_7 &0xa)|0x0000840a*/
+	auxout[2] = 0x00000000;
+	auxout[3] = 0x01000000;
+	intel_dp_aux_ch(DPA_AUX_CH_CTL, DPA_AUX_CH_DATA1, auxout, 13, auxin, 0);
+	index = run(index);
+	auxout[0] = 1<<31 /* dp */|0x0<<28/*W*/|DP_TRAINING_PATTERN_SET<<8|0x0;
+	auxout[1] = 0x21000000;
+	/* DP_TRAINING_PATTERN_1 | DP_LINK_SCRAMBLING_DISABLE |
+	 * 	DP_SYMBOL_ERROR_COUNT_BOTH |0x00000021*/
+	intel_dp_aux_ch(DPA_AUX_CH_CTL, DPA_AUX_CH_DATA1, auxout, 5, auxin, 0);
+	index = run(index);
+	auxout[0] = 1<<31 /* dp */|0x0<<28/*W*/|DP_TRAINING_LANE0_SET<<8|0x3;
+	auxout[1] = 0x00000000;
+	/* DP_TRAIN_VOLTAGE_SWING_400 | DP_TRAIN_PRE_EMPHASIS_0 |0x00000000*/
+	intel_dp_aux_ch(DPA_AUX_CH_CTL, DPA_AUX_CH_DATA1, auxout, 8, auxin, 0);
+	index = run(index);
+	auxout[0] = 1<<31 /* dp */|0x1<<28/*R*/|DP_LANE0_1_STATUS<<8|0x5;
+	intel_dp_aux_ch(DPA_AUX_CH_CTL, DPA_AUX_CH_DATA1, auxout, 4, auxin, 5);
+	index = run(index);
+	auxout[0] = 1<<31 /* dp */|0x0<<28/*W*/|DP_TRAINING_PATTERN_SET<<8|0x0;
+	auxout[1] = 0x22000000;
+	/* DP_TRAINING_PATTERN_2 | DP_LINK_SCRAMBLING_DISABLE |
+	 * 	DP_SYMBOL_ERROR_COUNT_BOTH |0x00000022*/
+	intel_dp_aux_ch(DPA_AUX_CH_CTL, DPA_AUX_CH_DATA1, auxout, 5, auxin, 0);
+	index = run(index);
+	auxout[0] = 1<<31 /* dp */|0x0<<28/*W*/|DP_TRAINING_LANE0_SET<<8|0x3;
+	auxout[1] = 0x00000000;
+	/* DP_TRAIN_VOLTAGE_SWING_400 | DP_TRAIN_PRE_EMPHASIS_0 |0x00000000*/
+	intel_dp_aux_ch(DPA_AUX_CH_CTL, DPA_AUX_CH_DATA1, auxout, 8, auxin, 0);
+	index = run(index);
+	auxout[0] = 1<<31 /* dp */|0x1<<28/*R*/|DP_LANE0_1_STATUS<<8|0x5;
+	intel_dp_aux_ch(DPA_AUX_CH_CTL, DPA_AUX_CH_DATA1, auxout, 4, auxin, 5);
+	index = run(index);
+	auxout[0] = 1<<31 /* dp */|0x0<<28/*W*/|DP_TRAINING_PATTERN_SET<<8|0x0;
+	auxout[1] = 0x00000000;
+	/* DP_TRAINING_PATTERN_DISABLE | DP_LINK_QUAL_PATTERN_DISABLE |
+	 * 	DP_SYMBOL_ERROR_COUNT_BOTH |0x00000000*/
+	intel_dp_aux_ch(DPA_AUX_CH_CTL, DPA_AUX_CH_DATA1, auxout, 5, auxin, 0);
+	index = run(index);
 
-	setgtt(0, 4520, physbase, 4096);
+	if (index != niodefs)
+		printk(BIOS_ERR, "Left over IO work in i915_lightup"
+				" -- this is likely a table error. "
+				"Only %d of %d were done.\n", index, niodefs);
+	printk(BIOS_SPEW, "DONE startup\n");
+	verbose = 0;
+	/* GTT is the Global Translation Table for the graphics pipeline.
+	 * It is used to translate graphics addresses to physical
+	 * memory addresses. As in the CPU, GTTs map 4K pages.
+	 * There are 32 bits per pixel, or 4 bytes,
+	 * which means 1024 pixels per page.
+	 * There are 4250 GTTs on Link:
+	 * 2650 (X) * 1700 (Y) pixels / 1024 pixels per page.
+	 * The setgtt function adds a further bit of flexibility:
+	 * it allows you to set a range (the first two parameters) to point
+	 * to a physical address (third parameter);the physical address is
+	 * incremented by a count (fourth parameter) for each GTT in the
+	 * range.
+	 * Why do it this way? For ultrafast startup,
+	 * we can point all the GTT entries to point to one page,
+	 * and set that page to 0s:
+	 * memset(physbase, 0, 4096);
+	 * setgtt(0, 4250, physbase, 0);
+	 * this takes about 2 ms, and is a win because zeroing
+	 * the page takes a up to 200 ms. We will be exploiting this
+	 * trick in a later rev of this code.
+	 * This call sets the GTT to point to a linear range of pages
+	 * starting at physbase.
+	 */
+	setgtt(0, FRAME_BUFFER_PAGES, physbase, 4096);
 	printk(BIOS_SPEW, "memset %p to 0 for %d bytes\n",
-				(void *)graphics, 4520*4096);
-	memset((void *)graphics, 0, 4520*4096);
+				(void *)graphics, FRAME_BUFFER_BYTES);
+	memset((void *)graphics, 0, FRAME_BUFFER_BYTES);
 	printk(BIOS_SPEW, "%ld microseconds\n", globalmicroseconds());
 	i915_init_done = 1;
 	oprom_is_loaded = 1;
diff --git a/src/mainboard/google/link/i915io.c b/src/mainboard/google/link/i915io.c
index eaa2e94..308ace6 100644
--- a/src/mainboard/google/link/i915io.c
+++ b/src/mainboard/google/link/i915io.c
@@ -16,485 +16,342 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
+
 #include <stdint.h>
 #include "i915io.h"
 
 struct iodef iodefs[] = {
-{V,0,},
-//{V, 7, },
-{W, 1, "", PCH_GMBUS0, 0x00000000, },
-{R, 1, "", PP_ON_DELAYS, 0x00000000, },
-{R, 1, "", PP_OFF_DELAYS, 0x00000000, },
-{W, 1, "", PP_ON_DELAYS, 0x019007d0, },
-{W, 1, "", PP_OFF_DELAYS, 0x015e07d0, },
-{M, 1, "[drm:intel_detect_pch], Found PatherPoint PCH"},
-{M, 1, "[drm:i915_load_modeset_init], failed to find VBIOS tables"},
-{R, 50, "", 0x130040, 0x00000001,  10},
-{W, 1, "", 0xa188, 0x00010001, },
-{R, 1, "", 0xa188, 0x00010001, },
-{R, 1, "", 0x130040, 0x00000001, },
-{R, 1, "", 0x13805c, 0x40000000, },
-{R, 1, "", 0xa180, 0x84100020, },
-{W, 1, "", 0xa188, 0x00010000, },
-{R, 1, "", 0x120000, 0x00000000, },
-{M, 1, "[drm:intel_init_display], Using MT version of forcewake"},
-{R, 1, "", 0x145d10, 0x2010040c, },
-{M, 1, "[drm:intel_modeset_init], 3 display pipes available."},
-{R, 1, "", _PIPEACONF, 0x00000000, },
-{W, 1, "", _PIPEACONF, 0x00000000, },
-{R, 1, "", _PIPEBCONF, 0x00000000, },
-{W, 1, "", _PIPEBCONF, 0x00000000, },
-{R, 1, "", 0x72008, 0x00000000, },
-{W, 1, "", 0x72008, 0x00000000, },
-{R, 1, "", _PIPEACONF, 0x00000000, },
-{W, 1, "", _PIPEACONF, 0x00000000, },
-{R, 1, "", _PIPEBCONF, 0x00000000, },
-{W, 1, "", _PIPEBCONF, 0x00000000, },
-{R, 1, "", 0x72008, 0x00000000, },
-{W, 1, "", 0x72008, 0x00000000, },
-{R, 1, "", _PIPEACONF, 0x00000000, },
-{W, 1, "", _PIPEACONF, 0x00000000, },
-{R, 1, "", _PIPEBCONF, 0x00000000, },
-{W, 1, "", _PIPEBCONF, 0x00000000, },
-{R, 1, "", 0x72008, 0x00000000, },
-{W, 1, "", 0x72008, 0x00000000,  300},
-{W, 1, "", CPU_VGACNTRL, 0x80000000, },
-{R, 1, "", CPU_VGACNTRL, 0x80000000, },
-{R, 1, "", 0x64000, 0x0000001c, },
-{R, 1, "", PCH_PP_ON_DELAYS, 0x47d007d0, },
-{R, 1, "", PCH_PP_OFF_DELAYS, 0x01f407d0, },
-{R, 1, "", PCH_PP_DIVISOR, 0x00186906, },
-{M, 1, "[drm:intel_dp_init], cur t1_t3 2000 t8 2000 t9 2000 t10 500"
-    "t11_t12 6000"},
-{M, 1, "[drm:intel_dp_init], vbt t1_t3 0 t8 0 t9 0 t10 0 t11_t12 0"},
-{M, 1, "[drm:intel_dp_init], panel power up delay 200,"
-    "power down delay 50, power cycle delay 600"},
-{M, 1, "[drm:intel_dp_init], backlight on delay 200, off delay 200"},
-{M, 1, "[drm:ironlake_edp_panel_vdd_on], Turn eDP VDD on"},
-{R, 1, "", PCH_PP_CONTROL, 0x00000000, },
-{R, 1, "", PCH_PP_STATUS, 0x00000000, },
-{M, 1, "[drm:ironlake_wait_panel_power_cycle], Wait for panel power cycle"},
-{M, 1, "[drm:ironlake_wait_panel_status], R PCH_PP_CONTROL:00000000"},
-{R, 2, "", PCH_PP_STATUS, 0x00000000, },
-{R, 1, "", PCH_PP_CONTROL, 0x00000000, },
-{W, 1, "", PCH_PP_CONTROL, 0xabcd0008, },
-{R, 1, "", PCH_PP_CONTROL, 0xabcd0008, },
-{M, 1, "[drm:ironlake_edp_panel_vdd_on], R PCH_PP_CONTROL:abcd0008"},
-{R, 2, "", PCH_PP_STATUS, 0x00000000, },
-{M, 1, "[drm:ironlake_edp_panel_vdd_on], eDP was not running"},
-{R, 1, "", PCH_PP_STATUS, 0x00000000, },
-{R, 1, "", PCH_PP_CONTROL, 0xabcd0008, },
-{R, 1, "", PCH_PP_STATUS, 0x00000000, },
-{R, 1, "", PCH_PP_CONTROL, 0xabcd0008, },
-{R, 1, "", DPA_AUX_CH_CTL, 0x014300c8, },
-{W, 1, "", DPA_AUX_CH_DATA1, 0x9000000e, },
-{W, 1, "", DPA_AUX_CH_CTL, 0xd24500c8, },
-{R, 2, "", DPA_AUX_CH_CTL, 0x814500c8,  100},
-{R, 1, "", DPA_AUX_CH_CTL, 0x807500c8,  100},
-{R, 1, "", DPA_AUX_CH_CTL, 0x810500c8,  100},
-{R, 1, "", DPA_AUX_CH_CTL, 0x410500c8, },
-{W, 1, "", DPA_AUX_CH_CTL, 0x530500c8, },
-{R, 1, "", DPA_AUX_CH_DATA1, 0x00110a84, },
-{R, 1, "", DPA_AUX_CH_DATA2, 0x41000001, },
-{R, 1, "", DPA_AUX_CH_DATA3, 0xc0020000, },
-{R, 1, "", DPA_AUX_CH_DATA4, 0x001f0000, },
-{M, 1, "[drm:intel_dp_i2c_init], i2c_init DPDDC-A"},
-{R, 1, "", PCH_PP_STATUS, 0x00000000, },
-{R, 1, "", PCH_PP_CONTROL, 0xabcd0008, },
-{R, 1, "", PCH_PP_STATUS, 0x00000000, },
-{R, 1, "", PCH_PP_CONTROL, 0xabcd0008, },
-{R, 1, "", DPA_AUX_CH_CTL, 0x010500c8, },
-{W, 1, "", DPA_AUX_CH_DATA1, 0x40000000, },
-{W, 1, "", DPA_AUX_CH_CTL, 0xd23500c8, },
-{R, 2, "", DPA_AUX_CH_CTL, 0x810500c8,  100},
-{R, 1, "", DPA_AUX_CH_CTL, 0x401500c8, },
-{W, 1, "", DPA_AUX_CH_CTL, 0x521500c8, },
-{R, 1, "", DPA_AUX_CH_DATA1, 0x00000000, },
-{R, 1, "", PCH_PP_STATUS, 0x00000000, },
-{R, 1, "", PCH_PP_CONTROL, 0xabcd0008, },
-{R, 1, "", PCH_PP_STATUS, 0x00000000, },
-{R, 1, "", PCH_PP_CONTROL, 0xabcd0008, },
-{R, 1, "", DPA_AUX_CH_CTL, 0x001500c8, },
-{W, 1, "", DPA_AUX_CH_DATA1, 0x00000000, },
-{W, 1, "", DPA_AUX_CH_CTL, 0xd23500c8, },
-{R, 2, "", DPA_AUX_CH_CTL, 0x801500c8,  100},
-{R, 1, "", DPA_AUX_CH_CTL, 0x401500c8, },
-{W, 1, "", DPA_AUX_CH_CTL, 0x521500c8, },
-{R, 1, "", DPA_AUX_CH_DATA1, 0x00000000, },
-{M, 1, "[drm:ironlake_edp_panel_vdd_off], Turn eDP VDD off 1"},
-{R, 1, "", BLC_PWM_CPU_CTL, 0x000010ce, },
-{M, 1, "[drm:intel_panel_get_backlight], get backlight PWM = 4302"},
-{M, 1, "[drm:intel_dp_aux_ch], dp_aux_ch timeout status 0x5145003f"},
-{M, 1, "[drm:intel_dp_i2c_aux_ch], aux_ch failed -110"},
-{M, 1,
-"[drm:ironlake_init_pch_refclk], has_panel 1 has_lvds 0 has_pch_edp 0"
-    "has_cpu_edp 1 has_ck505 0"},
-{R, 1, "", PCH_DREF_CONTROL, 0x00000000, },
-{M, 1, "[drm:ironlake_init_pch_refclk], Using SSC on panel"},
-{W, 1, "", PCH_DREF_CONTROL, 0x00001402, },
-{R, 1, "", PCH_DREF_CONTROL, 0x00001402,  200},
-{M, 1, "[drm:ironlake_init_pch_refclk], Using SSC on eDP"},
-{W, 1, "", PCH_DREF_CONTROL, 0x00005402, },
-{R, 1, "", PCH_DREF_CONTROL, 0x00005402,  200},
-{W, 1, "", ILK_DSPCLK_GATE, 0x10000000, },
-{W, 1, "", WM3_LP_ILK, 0x00000000, },
-{W, 1, "", WM2_LP_ILK, 0x00000000, },
-{W, 1, "", WM1_LP_ILK, 0x00000000, },
-{W, 1, "", 0x9404, 0x00002000, },
-{W, 1, "", ILK_DSPCLK_GATE, 0x10000000, },
-{W, 1, "", IVB_CHICKEN3, 0x00000024, },
-{W, 1, "", 0x7010, 0x04000400, },
-{W, 1, "", 0xb01c, 0x3c4fff8c, },
-{W, 1, "", 0xb030, 0x20000000, },
-{R, 1, "", 0x9030, 0x00000000, },
-{W, 1, "", 0x9030, 0x00000800, },
-{R, 1, "", _DSPACNTR, 0x00000000, },
-{W, 1, "", _DSPACNTR, 0x00004000, },
-{R, 1, "", _DSPAADDR, 0x00000000, },
-{W, 1, "", _DSPAADDR, 0x00000000, },
-{R, 1, "", _DSPASIZE+0xc, 0x00000000, },
-{W, 1, "", _DSPASIZE+0xc, 0x00000000, },
-{R, 1, "", _DSPBCNTR, 0x00000000, },
-{W, 1, "", _DSPBCNTR, 0x00004000, },
-{R, 1, "", _DSPBADDR, 0x00000000, },
-{W, 1, "", _DSPBADDR, 0x00000000, },
-{R, 1, "", _DSPBSURF, 0x00000000, },
-{W, 1, "", _DSPBSURF, 0x00000000, },
-{R, 1, "", _DVSACNTR, 0x00000000, },
-{W, 1, "", _DVSACNTR, 0x00004000, },
-{R, 1, "", _DVSALINOFF, 0x00000000, },
-{W, 1, "", _DVSALINOFF, 0x00000000, },
-{R, 1, "", _DVSASURF, 0x00000000, },
-{W, 1, "", _DVSASURF, 0x00000000, },
-{W, 1, "", SOUTH_DSPCLK_GATE_D, 0x20000000, },
-{R, 1, "", SOUTH_CHICKEN2, 0x00000000, },
-{W, 1, "", SOUTH_CHICKEN2, 0x00000001, },
-{W, 1, "", _TRANSA_CHICKEN2, 0x80000000, },
-{W, 1, "", _TRANSB_CHICKEN2, 0x80000000, },
-/* to here, it works ok  with v0 */
-//{V, 7,},
-{M, 1, "[drm:drm_edid_to_eld], ELD:no CEA Extension found"},
-{M, 1, "[drm:drm_helper_probe_single_connector_modes], [CONNECTOR:6:eDP-1]"
-    "probed modes :"},
-{M, 1, "[drm:drm_mode_debug_printmodeline],"
-"Modeline 0:\"2560x1700\" 60 285250 2560 2608 2640 2720 1700 1703 1713 1749"
-"0x48 0xa"},
-{M, 1, "[drm:drm_setup_crtcs], "},
-{M, 1, "[drm:drm_enable_connectors], connector 6 enabled? yes"},
-{M, 1, "[drm:drm_setup_crtcs], picking CRTCs for 8192x8192 config"},
-{M, 1, "[drm:drm_setup_crtcs], desired mode 2560x1700 set on crtc 3"},
-{M, 1, "[drm:drm_helper_probe_single_connector_modes], [CONNECTOR:6:eDP-1]"},
-{M, 1, "[drm:intel_dp_detect], DPCD:110a8441000001c0"},
-{M, 1, "[drm:ironlake_edp_panel_vdd_on], Turn eDP VDD on"},
-//{V, 7,},
-{M, 1, "[drm:intel_dp_detect], DPCD:110a8441000001c0"},
-{M, 1, "[drm:drm_enable_connectors], connector 6 enabled? yes"},
-{M, 1, "[drm:intel_get_load_detect_pipe], [CONNECTOR:6:eDP-1],"
-"[ENCODER:7:TMDS-7]"},
-{M, 1, "[drm:intel_dp_mode_fixup], Display port link bw 0a lane count 4"
-"clock 270000"},
-{M, 1, "[drm:drm_crtc_helper_set_mode], [CRTC:3]"},
-{R, 1, "", PCH_PP_STATUS, 0x00000000, },
-{R, 1, "", PCH_PP_CONTROL, 0xabcd0008, },
-{R, 1, "", PCH_PP_STATUS, 0x00000000, },
-{R, 1, "", PCH_PP_CONTROL, 0xabcd0008, },
-{R, 1, "", DPA_AUX_CH_CTL, 0x001500c8, },
-{W, 1, "", DPA_AUX_CH_DATA1, 0x80060000, },
-{W, 1, "", DPA_AUX_CH_DATA2, 0x01000000, },
-{W, 1, "", DPA_AUX_CH_CTL, 0xd25500c8, },
-{R, 2, "", DPA_AUX_CH_CTL, 0x801500c8,  100},
-{R, 1, "", DPA_AUX_CH_CTL, 0x401500c8, },
-{W, 1, "", DPA_AUX_CH_CTL, 0x521500c8, },
-{R, 1, "", DPA_AUX_CH_DATA1, 0x00000000, },
-{R, 1, "", 0x64000, 0x0000001c, },
-{M, 1, "[drm:ironlake_edp_panel_vdd_off], Turn eDP VDD off 1"},
-#if 0
-/* I hope we never try to use this. It is left here as a documentation thing. */
-/* SCALING HACK */
-/* these were determined by reading registers.
- * They should stretch the display.
- * They don't.
- * From u-boot? After vbios?
- */
-{V, 7, },
-{M, 1, "Turning on panel fitter (must be done before power cycle)"},
-{W, 1, "Enabled,PIPEA,Hardcoded edge enhance", _PFA_CTL_1,    0x80800000, },
-/* status: can't ever set vscale.
- * Which may be why we get no display at all if we try. */
-{W, 1, "stretch", _PFA_VSCALE,   /*0x00004000*/0xffffffff, },
-{W, 1, "stretch", _PFA_HSCALE,   /*0x00004000*/0xffffffff, },
-{W, 1, "2560x1700", _PFA_WIN_SZ,   0x0a0006a4, },
-//{W, 1, "2560x1700", _PFA_WIN_SZ,   0x05000352, },
-{W, 1, "@[0,0]", _PFA_WIN_POS,  0x00000000, },
-{R, 1, "Vstretch", _PFA_VSCALE,   0x00004000, },
-{R, 1, "Hstretch", _PFA_HSCALE,   0x00004000, },
-{R, 1, "2560x1700", _PFA_WIN_SZ,   0x0a0006a4, },
-{R, 1, "@[0,0]", _PFA_WIN_POS,  0x00000000, },
-{R, 1, "Enabled,PIPEA,Hardcoded edge enhance", _PFA_CTL_1,    0x80800000, },
-{V,0,},
-/* END SCALING HACK */
-#endif
-{R, 2, "", PCH_DP_D, 0x00000004, },
-{R, 1, "", _PIPEACONF, 0x00000000, },
-{W, 1, "", _PIPEACONF, 0x00000040, },
-{R, 1, "", _PIPEACONF, 0x00000040, },
-{M, 1, "[drm:ironlake_crtc_mode_set], Mode for pipe 0:"},
-{M, 1, "[drm:drm_mode_debug_printmodeline],"
-"Modeline 0:\"2560x1700\" 60 285250 2560 2608 2640 2720 1700 1703 1713 1749"
-" 0x48 0xa"},
-{W, 1, "", _TRANSA_DATA_M1, 0x00000000, },
-{W, 1, "", _TRANSA_DATA_N1, 0x00000000, },
-{W, 1, "", _TRANSA_DP_LINK_M1, 0x00000000, },
-{W, 1, "", _TRANSA_DP_LINK_N1, 0x00000000, },
-{W, 1, "", _PCH_FPA1, 0x00020e08, },
-{W, 1, "", _VSYNCSHIFT_A, 0x00000000, },
-{W, 1, "", _HTOTAL_A, 0x0a9f09ff, },
-{W, 1, "", _HBLANK_A, 0x0a9f09ff, },
-{W, 1, "", _HSYNC_A, 0x0a4f0a2f, },
-{W, 1, "", _VTOTAL_A, 0x06d406a3, },
-{W, 1, "", _VBLANK_A, 0x06d406a3, },
-{W, 1, "", _VSYNC_A, 0x06b006a6, },
-{W, 1, "", _PIPEASRC, 0x09ff06a3, },
-{W, 1, "", _PIPEA_DATA_M1, 0x7e4e58a4, },
-{W, 1, "", _PIPEA_DATA_N1, 0x0083d600, },
-{W, 1, "", _PIPEA_LINK_M1, 0x00045a42, },
-{W, 1, "", _PIPEA_LINK_N1, 0x00041eb0, },
-{M, 1, "[drm:ironlake_set_pll_edp], eDP PLL enable for clock 270000"},
-{R, 1, "", 0x64000, 0x0000001c, },
-{W, 1, "", 0x64000, 0x0000001c, },
-{R, 1, "", 0x64000, 0x0000001c,  500},
-{W, 1, "", _PIPEACONF, 0x00000050, },
-{R, 1, "", _PIPEACONF, 0x00000050, },
-{R, 1, "", _PIPEASTAT, 0x00000000, },
-{W, 1, "", _PIPEASTAT, 0x00000002, },
-{R, 4562, "", _PIPEASTAT, 0x00000000, },
-{M, 1, "[drm:intel_wait_for_vblank], vblank wait timed out"},
-{W, 1, "", _DSPACNTR, 0x40000000, },
-{R, 2, "", _DSPACNTR, 0x40000000, },
-{W, 1, "", _DSPACNTR, 0x58004000, },
-{M, 1, "[drm:ironlake_update_plane], Writing base 00000000 00000000 0 0 10240"},
-{W, 1, "", _DSPASTRIDE, 0x00002800, },
-{W, 1, "", _DSPASIZE+0xc, 0x00000000, },
-{W, 1, "", _DSPACNTR+0x24, 0x00000000, },
-{W, 1, "", _DSPAADDR, 0x00000000, },
-{R, 1, "", _DSPACNTR, 0x58004000, },
-{R, 1, "", 0x145d10, 0x2010040c, },
-{R, 1, "", WM0_PIPEA_ILK, 0x00783818, },
-{W, 1, "", WM0_PIPEA_ILK, 0x00183806, },
-{M, 1, "[drm:sandybridge_update_wm], FIFO watermarks For pipe A - plane 24,"
-"cursor:6"},
-{W, 1, "", WM3_LP_ILK, 0x00000000, },
-{W, 1, "", WM2_LP_ILK, 0x00000000, },
-{W, 1, "", WM1_LP_ILK, 0x00000000, },
-{R, 1, "", 0x145d10, 0x2010040c, },
-{M, 1, "[drm:ironlake_check_srwm], watermark 1:display plane 38, fbc lines 3,"
-"cursor 6"},
-{R, 1, "", 0x145d10, 0x2010040c, },
-{W, 1, "", WM1_LP_ILK, 0x84302606, },
-{R, 1, "", 0x145d10, 0x2010040c, },
-{M, 1,"[drm:ironlake_check_srwm], watermark 2:display plane 145, fbc lines 3,"
-    "cursor 6"},
-{R, 1, "", 0x145d10, 0x2010040c, },
-{W, 1, "", WM2_LP_ILK, 0x90309106, },
-{R, 1, "", 0x145d10, 0x2010040c, },
-{M, 1, "[drm:ironlake_check_srwm], watermark 3:display plane 288, fbc lines 4,"
-    "cursor 10"},
-{R, 1, "", 0x145d10, 0x2010040c, },
-{W, 1, "", WM3_LP_ILK, 0xa041200a, },
-{M, 1, "[drm:drm_crtc_helper_set_mode], [ENCODER:7:TMDS-7]"
-    "set [MODE:0:2560x1700]"},
-{M, 1, "[drm:ironlake_edp_pll_on], "},
-{R, 1, "", 0x64000, 0x0000001c, },
-{W, 1, "", 0x64000, 0x0000401c, },
-{R, 1, "", 0x64000, 0x0000401c,  200},
-{R, 1, "", 0x64000, 0x0000401c, },
-{R, 1, "", 0x145d10, 0x2010040c, },
-{R, 1, "", WM0_PIPEA_ILK, 0x00183806, },
-{W, 1, "", WM0_PIPEA_ILK, 0x00183806, },
-{M, 1, "[drm:sandybridge_update_wm], FIFO watermarks For pipe A - plane 24,"
-"cursor:6"},
-{W, 1, "", WM3_LP_ILK, 0x00000000, },
-{W, 1, "", WM2_LP_ILK, 0x00000000, },
-{W, 1, "", WM1_LP_ILK, 0x00000000, },
-{R, 1, "", 0x145d10, 0x2010040c, },
-{M, 1, "[drm:ironlake_check_srwm], watermark 1:display plane 38, fbc lines 3,"
-    "cursor 6"},
-{R, 1, "", 0x145d10, 0x2010040c, },
-{W, 1, "", WM1_LP_ILK, 0x84302606, },
-{R, 1, "", 0x145d10, 0x2010040c, },
-{M, 1, "[drm:ironlake_check_srwm], watermark 2:display plane 145, fbc lines 3,"
-    "cursor 6"},
-{R, 1, "", 0x145d10, 0x2010040c, },
-{W, 1, "", WM2_LP_ILK, 0x90309106, },
-{R, 1, "", 0x145d10, 0x2010040c, },
-{M, 1, "[drm:ironlake_check_srwm], watermark 3:display plane 288, fbc lines 4,"
-    "cursor 10"},
-{R, 1, "", 0x145d10, 0x2010040c, },
-{W, 1, "", WM3_LP_ILK, 0xa041200a, },
-{R, 1, "", _FDI_TXA_CTL, 0x00040000, },
-{W, 1, "", _FDI_TXA_CTL, 0x00040000, },
-{R, 1, "", _FDI_TXA_CTL, 0x00040000, },
-{R, 1, "", _FDI_RXA_CTL, 0x00000040, },
-{R, 1, "", _PIPEACONF, 0x00000050, },
-{W, 1, "", _FDI_RXA_CTL, 0x00020040, },
-{R, 1, "", _FDI_RXA_CTL, 0x00020040,  100},
-{R, 1, "", SOUTH_CHICKEN1, 0x00000000, },
-{W, 2, "", SOUTH_CHICKEN1, 0x00000000, },
-{R, 1, "", SOUTH_CHICKEN1, 0x00000000, },
-{R, 1, "", _FDI_TXA_CTL, 0x00040000, },
-{W, 1, "", _FDI_TXA_CTL, 0x00040000, },
-{R, 1, "", _FDI_RXA_CTL, 0x00020040, },
-{R, 1, "", _PIPEACONF, 0x00000050, },
-{W, 1, "", _FDI_RXA_CTL, 0x00020040, },
-{R, 1, "", _FDI_RXA_CTL, 0x00020040,  100},
-{P, 1, "Set palette", },
-{R, 1, "", _PIPEACONF, 0x00000050, },
-{W, 1, "", _PIPEACONF, 0x80000050, },
-{R, 1, "", _PIPEASTAT, 0x00000000, },
-{W, 1, "", _PIPEASTAT, 0x00000002, },
-{R, 4533, "", _PIPEASTAT, 0x00000000, },
-{M, 1, "[drm:intel_wait_for_vblank], vblank wait timed out"},
-{R, 1, "", _PIPEACONF, 0xc0000050, },
-{R, 1, "", _DSPACNTR, 0x58004000, },
-{W, 1, "", _DSPACNTR, 0xd8004000, },
-{R, 1, "", _DSPAADDR, 0x00000000, },
-{W, 1, "", _DSPAADDR, 0x00000000, },
-{R, 1, "", _DSPASIZE+0xc, 0x00000000, },
-{W, 1, "", _DSPASIZE+0xc, 0x00000000, },
-{R, 1, "", _PIPEASTAT, 0x00000000, },
-{W, 1, "", _PIPEASTAT, 0x00000002, },
-{R, 4392, "", _PIPEASTAT, 0x00000000, },
-{M, 1, "[drm:intel_wait_for_vblank], vblank wait timed out"},
-{M, 1, "[drm:ironlake_edp_panel_vdd_on], Turn eDP VDD on"},
-{R, 1, "", PCH_PP_CONTROL, 0xabcd0008, },
-{M, 1, "[drm:ironlake_edp_panel_on], Turn eDP power on"},
-{R, 1, "", PCH_PP_STATUS, 0x00000000, },
-{M, 1, "[drm:ironlake_wait_panel_power_cycle], Wait for panel power cycle"},
-{M, 1, "[drm:ironlake_wait_panel_status], R PCH_PP_CONTROL:abcd0008"},
-{R, 2, "", PCH_PP_STATUS, 0x00000000, },
-{R, 1, "", PCH_PP_CONTROL, 0xabcd0008, },
-{W, 1, "", PCH_PP_CONTROL, 0xabcd000b, },
-{R, 1, "", PCH_PP_CONTROL, 0xabcd000b, },
-{M, 1, "[drm:ironlake_wait_panel_on], Wait for panel power on"},
-{M, 1, "[drm:ironlake_wait_panel_status], R PCH_PP_CONTROL:abcd000b"},
-{R, 4, "", PCH_PP_STATUS, 0x0000000a, },
-{R, 16983, "", PCH_PP_STATUS, 0x9000000a, },
-{R, 17839, "", PCH_PP_STATUS, 0x90000009, },
-{R, 1, "", PCH_PP_STATUS, 0x80000008, },
-//{V, 7,},
-{M, 1, "[drm:ironlake_edp_panel_vdd_off], Turn eDP VDD off 1"},
-{R, 2, "", PCH_PP_CONTROL, 0xabcd000b, },
-{W, 1, "", PCH_PP_CONTROL, 0xabcd0003, },
-{R, 1, "", PCH_PP_CONTROL, 0xabcd0003, },
-{M, 1, "[drm:ironlake_panel_vdd_off_sync], R PCH_PP_CONTROL:abcd0003"},
-{R, 1, "", PCH_PP_STATUS, 0x80000008, },
-{W, 1, "", 0x64000, 0x8e1c4104, },
-{R, 1, "", 0x64000, 0x8e1c4104, },
-{R, 2, "", PCH_PP_STATUS, 0x80000008, },
-{R, 1, "", 0x64000, 0x8cdc4104, },
-{M, 1, "[drm:intel_dp_link_down], "},
-{W, 1, "", 0x64000, 0x8e1c0004, },
-{R, 1, "", 0x64000, 0x8e1c0004,  100},
-{W, 1, "", 0x64000, 0x8e1c0204, },
-{R, 1, "", 0x64000, 0x8e1c0204, },
-{W, 1, "", 0x64000, 0x0e1c0304, },
-{R, 2, "", 0x64000, 0x0e1c0304, },
-{R, 2, "", PCH_PP_STATUS, 0x80000008, },
-{R, 1, "", DPA_AUX_CH_CTL, 0x007500c8, },
-{W, 1, "", DPA_AUX_CH_DATA1, 0x80010008, },
-{W, 1, "", DPA_AUX_CH_DATA2, 0x0a840000, },
-{W, 1, "", DPA_AUX_CH_DATA3, 0x00000000, },
-{W, 1, "", DPA_AUX_CH_DATA4, 0x01000000, },
-{W, 1, "", DPA_AUX_CH_CTL, 0xd2d500c8, },
-{R, 3, "", DPA_AUX_CH_CTL, 0x807500c8,  100},
-{R, 1, "", DPA_AUX_CH_CTL, 0x401500c8, },
-{W, 1, "", DPA_AUX_CH_CTL, 0x521500c8, },
-{R, 1, "", DPA_AUX_CH_DATA1, 0x00000000, },
-{W, 1, "", 0x64000, 0x891c4004, },
-{R, 1, "", 0x64000, 0x891c4004, },
-{R, 2, "", PCH_PP_STATUS, 0x80000008, },
-{R, 1, "", DPA_AUX_CH_CTL, 0x001500c8, },
-{W, 1, "", DPA_AUX_CH_DATA1, 0x80010200, },
-{W, 1, "", DPA_AUX_CH_DATA2, 0x21000000, },
-{W, 1, "", DPA_AUX_CH_CTL, 0xd25500c8, },
-{R, 2, "", DPA_AUX_CH_CTL, 0x801500c8,  100},
-{R, 1, "", DPA_AUX_CH_CTL, 0x401500c8, },
-{W, 1, "", DPA_AUX_CH_CTL, 0x521500c8, },
-{R, 1, "", DPA_AUX_CH_DATA1, 0x00000000, },
-{R, 2, "", PCH_PP_STATUS, 0x80000008, },
-{R, 1, "", DPA_AUX_CH_CTL, 0x001500c8, },
-{W, 1, "", DPA_AUX_CH_DATA1, 0x80010303, },
-{W, 1, "", DPA_AUX_CH_DATA2, 0x00000000, },
-{W, 1, "", DPA_AUX_CH_CTL, 0xd28500c8, },
-{R, 3, "", DPA_AUX_CH_CTL, 0x801500c8,  100},
-{R, 1, "", DPA_AUX_CH_CTL, 0x401500c8, },
-{W, 1, "", DPA_AUX_CH_CTL, 0x521500c8, },
-{R, 1, "", DPA_AUX_CH_DATA1, 0x00000000,  100},
-{R, 2, "", PCH_PP_STATUS, 0x80000008, },
-{R, 1, "", DPA_AUX_CH_CTL, 0x001500c8, },
-{W, 1, "", DPA_AUX_CH_DATA1, 0x90020205, },
-{W, 1, "", DPA_AUX_CH_CTL, 0xd24500c8, },
-{R, 2, "", DPA_AUX_CH_CTL, 0x801500c8,  100},
-{R, 1, "", DPA_AUX_CH_CTL, 0x804500c8,  100},
-{R, 1, "", DPA_AUX_CH_CTL, 0x407500c8, },
-{W, 1, "", DPA_AUX_CH_CTL, 0x527500c8, },
-{R, 1, "", DPA_AUX_CH_DATA1, 0x00111180, },
-{R, 1, "", DPA_AUX_CH_DATA2, 0x02000000, },
-{M, 1, "[drm:intel_dp_start_link_train], clock recovery OK"},
-{W, 1, "", 0x64000, 0x891c4104, },
-{R, 1, "", 0x64000, 0x891c4104, },
-{R, 2, "", PCH_PP_STATUS, 0x80000008, },
-{R, 1, "", DPA_AUX_CH_CTL, 0x007500c8, },
-{W, 1, "", DPA_AUX_CH_DATA1, 0x80010200, },
-{W, 1, "", DPA_AUX_CH_DATA2, 0x22000000, },
-{W, 1, "", DPA_AUX_CH_CTL, 0xd25500c8, },
-{R, 2, "", DPA_AUX_CH_CTL, 0x807500c8,  100},
-{R, 1, "", DPA_AUX_CH_CTL, 0x401500c8, },
-{W, 1, "", DPA_AUX_CH_CTL, 0x521500c8, },
-{R, 1, "", DPA_AUX_CH_DATA1, 0x00000000, },
-{R, 2, "", PCH_PP_STATUS, 0x80000008, },
-{R, 1, "", DPA_AUX_CH_CTL, 0x001500c8, },
-{W, 1, "", DPA_AUX_CH_DATA1, 0x80010303, },
-{W, 1, "", DPA_AUX_CH_DATA2, 0x00000000, },
-{W, 1, "", DPA_AUX_CH_CTL, 0xd28500c8, },
-{R, 2, "", DPA_AUX_CH_CTL, 0x801500c8,  100},
-{R, 1, "", DPA_AUX_CH_CTL, 0x800500c8,  100},
-{R, 1, "", DPA_AUX_CH_CTL, 0x401500c8, },
-{W, 1, "", DPA_AUX_CH_CTL, 0x521500c8, },
-{R, 1, "", DPA_AUX_CH_DATA1, 0x00000000,  400},
-{R, 2, "", PCH_PP_STATUS, 0x80000008, },
-{R, 1, "", DPA_AUX_CH_CTL, 0x001500c8, },
-{W, 1, "", DPA_AUX_CH_DATA1, 0x90020205, },
-{W, 1, "", DPA_AUX_CH_CTL, 0xd24500c8, },
-{R, 2, "", DPA_AUX_CH_CTL, 0x801500c8,  100},
-{R, 1, "", DPA_AUX_CH_CTL, 0x804500c8,  100},
-{R, 1, "", DPA_AUX_CH_CTL, 0x407500c8, },
-{W, 1, "", DPA_AUX_CH_CTL, 0x527500c8, },
-{R, 1, "", DPA_AUX_CH_DATA1, 0x00777781, },
-{R, 1, "", DPA_AUX_CH_DATA2, 0x02000000, },
-{W, 1, "", 0x64000, 0x891c4304, },
-{R, 1, "", 0x64000, 0x891c4304, },
-{R, 2, "", PCH_PP_STATUS, 0x80000008, },
-{R, 1, "", DPA_AUX_CH_CTL, 0x007500c8, },
-{W, 1, "", DPA_AUX_CH_DATA1, 0x80010200, },
-{W, 1, "", DPA_AUX_CH_DATA2, 0x00000000, },
-{W, 1, "", DPA_AUX_CH_CTL, 0xd25500c8, },
-{R, 2, "", DPA_AUX_CH_CTL, 0x807500c8,  100},
-{R, 1, "", DPA_AUX_CH_CTL, 0x401500c8, },
-{W, 1, "", DPA_AUX_CH_CTL, 0x521500c8, },
-{R, 1, "", DPA_AUX_CH_DATA1, 0x00000000, },
-{M, 1, "[drm:ironlake_edp_backlight_on], "},
-{R, 1, "", PCH_PP_CONTROL, 0xabcd0003, },
-{W, 1, "", PCH_PP_CONTROL, 0xabcd0007, },
-{R, 1, "", PCH_PP_CONTROL, 0xabcd0007, },
-{R, 1, "", _PIPEADSL, 0x00000633,  500},
-{R, 1, "", _PIPEADSL, 0x00000652, },
-{R, 1, "", _PIPEASTAT, 0x00000000, },
-{W, 1, "", _PIPEASTAT, 0x00000002, },
-{R, 5085, "", _PIPEASTAT, 0x00000000, },
-{M, 1, "[drm:intel_wait_for_vblank], vblank wait timed out"},
-{M, 1, "[drm:intel_dp_mode_fixup], Display port link bw 0a lane count 4"
-    "clock 270000"},
-{M, 1, "[drm:drm_crtc_helper_set_mode], [CRTC:3]"},
-{0,},
-};
+{V, 0},
+{W, 1, "", PCH_GMBUS0, 0x00000000, 0},
+{R, 1, "", PP_ON_DELAYS, ( /* T2 */ 0x0 << 16) | ( /* T5 */ 0x0 << 0) | 0x00000000, 0},
+{R, 1, "", PP_OFF_DELAYS, ( /* T3 */ 0x0 << 16) | ( /* Tx */ 0x0 << 0) | 0x00000000, 0},
+{W, 1, "", PP_ON_DELAYS, ( /* T2 */ 0x190 << 16) | ( /* T5 */ 0x7d0 << 0) | 0x019007d0, 0},
+{W, 1, "", PP_OFF_DELAYS, ( /* T3 */ 0x15e << 16) | ( /* Tx */ 0x7d0 << 0) | 0x015e07d0, 0},
+{M, 1, "[drm:intel_detect_pch], Found PatherPoint PCH", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:i915_load_modeset_init], failed to find VBIOS tables", 0x0, 0xcf8e64, 0},
+{R, 50, "", FORCEWAKE_MT_ACK, 0x00000001, 10},
+{W, 1, "", FORCEWAKE_MT, 0x00010001, 0},
+{R, 1, "", FORCEWAKE_MT, 0x00010001, 0},
+{R, 1, "", FORCEWAKE_MT_ACK, 0x00000001, 0},
+{R, 1, "", 0x13805c, 0x40000000, 0},
+{R, 1, "", 0xa180, 0x84100020, 0},
+{W, 1, "", FORCEWAKE_MT, 0x00010000, 0},
+{R, 1, "", 0x120000, 0x00000000, 0},
+{M, 1, "[drm:intel_init_display], Using MT version of forcewake", 0x0, 0xcf8e64, 0},
+{R, 1, "", 0x145d10, 0x2010040c, 0},
+{M, 1, "[drm:intel_modeset_init], 3 display pipes available.", 0x0, 0xcf8e64, 0},
+{R, 1, "", _PIPEACONF, ( /* PIPECONF_FRAME_START_DELAY_MASK */ 0x0 << 27) | PIPECONF_BPP_8 | PIPECONF_DITHER_TYPE_SP | 0x00000000, 0},
+{W, 1, "", _PIPEACONF, ( /* PIPECONF_FRAME_START_DELAY_MASK */ 0x0 << 27) | PIPECONF_BPP_8 | PIPECONF_DITHER_TYPE_SP | 0x00000000, 0},
+{R, 1, "", _PIPEBCONF, 0x00000000, 0},
+{W, 1, "", _PIPEBCONF, 0x00000000, 0},
+{R, 1, "", 0x72008, 0x00000000, 0},
+{W, 1, "", 0x72008, 0x00000000, 0},
+{R, 1, "", _PIPEACONF, ( /* PIPECONF_FRAME_START_DELAY_MASK */ 0x0 << 27) | PIPECONF_BPP_8 | PIPECONF_DITHER_TYPE_SP | 0x00000000, 0},
+{W, 1, "", _PIPEACONF, ( /* PIPECONF_FRAME_START_DELAY_MASK */ 0x0 << 27) | PIPECONF_BPP_8 | PIPECONF_DITHER_TYPE_SP | 0x00000000, 0},
+{R, 1, "", _PIPEBCONF, 0x00000000, 0},
+{W, 1, "", _PIPEBCONF, 0x00000000, 0},
+{R, 1, "", 0x72008, 0x00000000, 0},
+{W, 1, "", 0x72008, 0x00000000, 0},
+{R, 1, "", _PIPEACONF, ( /* PIPECONF_FRAME_START_DELAY_MASK */ 0x0 << 27) | PIPECONF_BPP_8 | PIPECONF_DITHER_TYPE_SP | 0x00000000, 0},
+{W, 1, "", _PIPEACONF, ( /* PIPECONF_FRAME_START_DELAY_MASK */ 0x0 << 27) | PIPECONF_BPP_8 | PIPECONF_DITHER_TYPE_SP | 0x00000000, 0},
+{R, 1, "", _PIPEBCONF, 0x00000000, 0},
+{W, 1, "", _PIPEBCONF, 0x00000000, 0},
+{R, 1, "", 0x72008, 0x00000000, 0},
+{W, 1, "", 0x72008, 0x00000000, 300},
+{W, 1, "", CPU_VGACNTRL, 0x80000000, 0},
+{R, 1, "", CPU_VGACNTRL, 0x80000000, 0},
+{R, 1, "", DP_A, DP_LINK_TRAIN_PAT_1 | DP_LINK_TRAIN_PAT_1_CPT | DP_VOLTAGE_0_4 | DP_PRE_EMPHASIS_0 | DP_PORT_WIDTH_1 | DP_PLL_FREQ_270MHZ | DP_SYNC_VS_HIGH | DP_SYNC_HS_HIGH | DP_DETECTED | 0x0000001c, 0},
+{R, 1, "", PCH_PP_ON_DELAYS, PANEL_PORT_SELECT_DPA | ( /* PANEL_POWER_UP_DELAY */ 0x7d0 << 16) | ( /* PANEL_LIGHT_ON_DELAY */ 0x7d0 << 0) | 0x47d007d0, 0},
+{R, 1, "", PCH_PP_OFF_DELAYS, ( /* PANEL_POWER_DOWN_DELAY */ 0x1f4 << 16) | ( /* PANEL_LIGHT_OFF_DELAY */ 0x7d0 << 0) | 0x01f407d0, 0},
+{R, 1, "", PCH_PP_DIVISOR, 0x00186906, 0},
+{M, 1, "[drm:intel_dp_init], cur t1_t3 2000 t8 2000 t9 2000 t10 500t11_t12 6000", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:intel_dp_init], vbt t1_t3 0 t8 0 t9 0 t10 0 t11_t12 0", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:intel_dp_init], panel power up delay 200,power down" "delay 50, power cycle delay 600", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:intel_dp_init], backlight on delay 200, off delay 200", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:ironlake_edp_panel_vdd_on], Turn eDP VDD on", 0x0, 0xcf8e64, 0},
+{R, 1, "", PCH_PP_CONTROL, 0x00000000, 0},
+{R, 1, "", PCH_PP_STATUS, 0x00000000, 0},
+{M, 1, "[drm:ironlake_wait_panel_power_cycle], Wait for panel power cycle", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:ironlake_wait_panel_status], R PCH_PP_CONTROL:00000000", 0x0, 0xcf8e64, 0},
+{R, 2, "", PCH_PP_STATUS, 0x00000000, 0},
+{R, 1, "", PCH_PP_CONTROL, 0x00000000, 0},
+{W, 1, "", PCH_PP_CONTROL, (PCH_PP_UNLOCK & 0xabcd0000) | EDP_FORCE_VDD | 0xabcd0008, 0},
+{R, 1, "", PCH_PP_CONTROL, (PCH_PP_UNLOCK & 0xabcd0000) | EDP_FORCE_VDD | 0xabcd0008, 0},
+{M, 1, "[drm:ironlake_edp_panel_vdd_on], R PCH_PP_CONTROL:abcd0008", 0x0, 0xcf8e64, 0},
+{R, 2, "", PCH_PP_STATUS, 0x00000000, 0},
+{M, 1, "[drm:ironlake_edp_panel_vdd_on], eDP was not running", 0x0, 0xcf8e64, 0},
+{R, 1, "", PCH_PP_STATUS, 0x00000000, 0},
+{R, 1, "", PCH_PP_CONTROL, (PCH_PP_UNLOCK & 0xabcd0000) | EDP_FORCE_VDD | 0xabcd0008, 0},
+{R, 1, "", PCH_PP_STATUS, 0x00000000, 0},
+{R, 1, "", PCH_PP_CONTROL, (PCH_PP_UNLOCK & 0xabcd0000) | EDP_FORCE_VDD | 0xabcd0008, 0},
+{M, 1, "[drm:intel_dp_i2c_init], i2c_init DPDDC-A", 0x0, 0x00000000, 0},
+{R, 1, "", PCH_PP_STATUS, 0x00000000, 0},
+{R, 1, "", PCH_PP_CONTROL, (PCH_PP_UNLOCK & 0xabcd0000) | EDP_FORCE_VDD | 0xabcd0008, 0},
+{R, 1, "", PCH_PP_STATUS, 0x00000000, 0},
+{R, 1, "", PCH_PP_CONTROL, (PCH_PP_UNLOCK & 0xabcd0000) | EDP_FORCE_VDD | 0xabcd0008, 0},
+{R, 1, "", PCH_PP_STATUS, 0x00000000, 0},
+{R, 1, "", PCH_PP_CONTROL, (PCH_PP_UNLOCK & 0xabcd0000) | EDP_FORCE_VDD | 0xabcd0008, 0},
+{R, 1, "", PCH_PP_STATUS, 0x00000000, 0},
+{R, 1, "", PCH_PP_CONTROL, (PCH_PP_UNLOCK & 0xabcd0000) | EDP_FORCE_VDD | 0xabcd0008, 0},
+{I,},
+{M, 1, "[drm:ironlake_edp_panel_vdd_off], Turn eDP VDD off 1", 0x0, 0x00000000, 0},
+{R, 1, "", BLC_PWM_CPU_CTL, 0x000010ce, 0},
+{M, 1, "[drm:intel_panel_get_backlight], get backlight PWM = 4302", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:intel_dp_aux_ch], dp_aux_ch timeout status 0x5145003f", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:intel_dp_i2c_aux_ch], aux_ch failed -110", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:ironlake_init_pch_refclk], has_panel 1 has_lvds 0 " "has_pch_edp 0has_cpu_edp 1 has_ck505 0", 0x0, 0xcf8e64, 0},
+{R, 1, "", PCH_DREF_CONTROL, 0x00000000, 0},
+{M, 1, "[drm:ironlake_init_pch_refclk], Using SSC on panel", 0x0, 0xcf8e64, 0},
+{W, 1, "", PCH_DREF_CONTROL, DREF_SSC_SOURCE_ENABLE | DREF_NONSPREAD_SOURCE_ENABLE | DREF_SSC1_ENABLE | 0x00001402, 0},
+{R, 1, "", PCH_DREF_CONTROL, DREF_SSC_SOURCE_ENABLE | DREF_NONSPREAD_SOURCE_ENABLE | DREF_SSC1_ENABLE | 0x00001402, 200},
+{M, 1, "[drm:ironlake_init_pch_refclk], Using SSC on eDP", 0x0, 0xcf8e64, 0},
+{W, 1, "", PCH_DREF_CONTROL, DREF_CPU_SOURCE_OUTPUT_DOWNSPREAD | DREF_SSC_SOURCE_ENABLE | DREF_NONSPREAD_SOURCE_ENABLE | DREF_SSC1_ENABLE | 0x00005402, 0},
+{R, 1, "", PCH_DREF_CONTROL, DREF_CPU_SOURCE_OUTPUT_DOWNSPREAD | DREF_SSC_SOURCE_ENABLE | DREF_NONSPREAD_SOURCE_ENABLE | DREF_SSC1_ENABLE | 0x00005402, 200},
+{W, 1, "", ILK_DSPCLK_GATE, IVB_VRHUNIT_CLK_GATE | 0x10000000, 0},
+{W, 1, "", WM3_LP_ILK, ( /* WMx_LP_LATENCY */ 0x0 << 24) | ( /* WMx_LP_FBC */ 0x0 << 20) | ( /* WMx_LP_SR */ 0x0 << 8) | ( /* WMx_LP_CURSOR */ 0x0 << 0) | 0x00000000, 0},
+{W, 1, "", WM2_LP_ILK, ( /* WMx_LP_LATENCY */ 0x0 << 24) | ( /* WMx_LP_FBC */ 0x0 << 20) | ( /* WMx_LP_SR */ 0x0 << 8) | ( /* WMx_LP_CURSOR */ 0x0 << 0) | 0x00000000, 0},
+{W, 1, "", WM1_LP_ILK, ( /* WMx_LP_LATENCY */ 0x0 << 24) | ( /* WMx_LP_FBC */ 0x0 << 20) | ( /* WMx_LP_SR */ 0x0 << 8) | ( /* WMx_LP_CURSOR */ 0x0 << 0) | 0x00000000, 0},
+{W, 1, "", 0x9404, 0x00002000, 0},
+{W, 1, "", ILK_DSPCLK_GATE, IVB_VRHUNIT_CLK_GATE | 0x10000000, 0},
+{W, 1, "", IVB_CHICKEN3, 0x00000024, 0},
+{W, 1, "", GEN7_COMMON_SLICE_CHICKEN1, 0x04000400, 0},
+{W, 1, "", 0xb01c, 0x3c4fff8c, 0},
+{W, 1, "", GEN7_L3_CHICKEN_MODE_REGISTER, 0x20000000, 0},
+{R, 1, "", GEN7_SQ_CHICKEN_MBCUNIT_CONFIG, 0x00000000, 0},
+{W, 1, "", GEN7_SQ_CHICKEN_MBCUNIT_CONFIG, 0x00000800, 0},
+{R, 1, "", _DSPACNTR, ( /* DISPPLANE_SEL_PIPE(0=A,1=B) */ 0x0 << 24) | 0x00000000, 0},
+{W, 1, "", _DSPACNTR, ( /* DISPPLANE_SEL_PIPE(0=A,1=B) */ 0x0 << 24) | DISPPLANE_TRICKLE_FEED_DISABLE /* Ironlake */  | 0x00004000, 0},
+{R, 1, "", _DSPAADDR, 0x00000000, 0},
+{W, 1, "", _DSPAADDR, 0x00000000, 0},
+{R, 1, "", _DSPASIZE + 0xc, 0x00000000, 0},
+{W, 1, "", _DSPASIZE + 0xc, 0x00000000, 0},
+{R, 1, "", _DSPBCNTR, 0x00000000, 0},
+{W, 1, "", _DSPBCNTR, 0x00004000, 0},
+{R, 1, "", _DSPBADDR, 0x00000000, 0},
+{W, 1, "", _DSPBADDR, 0x00000000, 0},
+{R, 1, "", _DSPBSURF, 0x00000000, 0},
+{W, 1, "", _DSPBSURF, 0x00000000, 0},
+{R, 1, "", _DVSACNTR, 0x00000000, 0},
+{W, 1, "", _DVSACNTR, DVS_TRICKLE_FEED_DISABLE | 0x00004000, 0},
+{R, 1, "", _DVSALINOFF, 0x00000000, 0},
+{W, 1, "", _DVSALINOFF, 0x00000000, 0},
+{R, 1, "", _DVSASURF, 0x00000000, 0},
+{W, 1, "", _DVSASURF, 0x00000000, 0},
+{W, 1, "", SOUTH_DSPCLK_GATE_D, PCH_DPLSUNIT_CLOCK_GATE_DISABLE | 0x20000000, 0},
+{R, 1, "", SOUTH_CHICKEN2, 0x00000000, 0},
+{W, 1, "", SOUTH_CHICKEN2, DPLS_EDP_PPS_FIX_DIS | 0x00000001, 0},
+{W, 1, "", _TRANSA_CHICKEN2, 0x80000000, 0},
+{W, 1, "", _TRANSB_CHICKEN2, TRANS_AUTOTRAIN_GEN_STALL_DIS | 0x80000000, 0},
+{M, 1, "[drm:drm_edid_to_eld], ELD:no CEA Extension found", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:drm_helper_probe_single_connector_modes], " "[CONNECTOR:6:eDP-1]probed modes :", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:drm_mode_debug_printmodeline],Modeline 0:\"2560x1700\" " "60 285250 2560 2608 2640 2720 1700 1703 1713 17490x48 0xa", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:drm_setup_crtcs], ", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:drm_enable_connectors], connector 6 enabled? yes", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:drm_setup_crtcs], picking CRTCs for 8192x8192 config", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:drm_setup_crtcs], desired mode 2560x1700 set on crtc 3", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:drm_helper_probe_single_connector_modes], [CONNECTOR:6:eDP-1]", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:intel_dp_detect], DPCD:110a8441000001c0", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:ironlake_edp_panel_vdd_on], Turn eDP VDD on", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:intel_dp_detect], DPCD:110a8441000001c0", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:drm_enable_connectors], connector 6 enabled? yes", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:intel_get_load_detect_pipe], [CONNECTOR:6:eDP-1],[ENCODER:7:TMDS-7]", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:intel_dp_mode_fixup], Display port link bw 0a lane count 4clock 270000", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:drm_crtc_helper_set_mode], [CRTC:3]", 0x0, 0xcf8e64, 0},
+{R, 1, "", PCH_PP_STATUS, 0x00000000, 0},
+{R, 1, "", PCH_PP_CONTROL, (PCH_PP_UNLOCK & 0xabcd0000) | EDP_FORCE_VDD | 0xabcd0008, 0},
+{R, 1, "", PCH_PP_STATUS, 0x00000000, 0},
+{R, 1, "", PCH_PP_CONTROL, (PCH_PP_UNLOCK & 0xabcd0000) | EDP_FORCE_VDD | 0xabcd0008, 0},
+{I,},
+{R, 1, "", DP_A, DP_LINK_TRAIN_PAT_1 | DP_LINK_TRAIN_PAT_1_CPT | DP_VOLTAGE_0_4 | DP_PRE_EMPHASIS_0 | DP_PORT_WIDTH_1 | DP_PLL_FREQ_270MHZ | DP_SYNC_VS_HIGH | DP_SYNC_HS_HIGH | DP_DETECTED | 0x0000001c, 0},
+{M, 1, "[drm:ironlake_edp_panel_vdd_off], Turn eDP VDD off 1", 0x0, 0xcf8e64, 0},
+{R, 2, "", PCH_DP_D, 0x00000004, 0},
+{R, 1, "", _PIPEACONF, ( /* PIPECONF_FRAME_START_DELAY_MASK */ 0x0 << 27) | PIPECONF_BPP_8 | PIPECONF_DITHER_TYPE_SP | 0x00000000, 0},
+{W, 1, "", _PIPEACONF, ( /* PIPECONF_FRAME_START_DELAY_MASK */ 0x0 << 27) | PIPECONF_BPP_6 | PIPECONF_DITHER_TYPE_SP | 0x00000040, 0},
+{R, 1, "", _PIPEACONF, ( /* PIPECONF_FRAME_START_DELAY_MASK */ 0x0 << 27) | PIPECONF_BPP_6 | PIPECONF_DITHER_TYPE_SP | 0x00000040, 0},
+{M, 1, "[drm:ironlake_crtc_mode_set], Mode for pipe 0:", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:drm_mode_debug_printmodeline],Modeline 0:\"2560x1700\" " "60 285250 2560 2608 2640 2720 1700 1703 1713 1749 0x48 0xa", 0x0, 0xcf8e64, 0},
+{W, 1, "", _TRANSA_DATA_M1, 0x00000000, 0},
+{W, 1, "", _TRANSA_DATA_N1, 0x00000000, 0},
+{W, 1, "", _TRANSA_DP_LINK_M1, 0x00000000, 0},
+{W, 1, "", _TRANSA_DP_LINK_N1, 0x00000000, 0},
+{W, 1, "", _PCH_FPA1, 0x00020e08, 0},
+{W, 1, "", _VSYNCSHIFT_A, 0x00000000, 0},
+{W, 1, "", _HTOTAL_A, 0x0a9f09ff, 0},
+{W, 1, "", _HBLANK_A, 0x0a9f09ff, 0},
+{W, 1, "", _HSYNC_A, 0x0a4f0a2f, 0},
+{W, 1, "", _VTOTAL_A, 0x06d406a3, 0},
+{W, 1, "", _VBLANK_A, 0x06d406a3, 0},
+{W, 1, "", _VSYNC_A, 0x06b006a6, 0},
+{W, 1, "", _PIPEASRC, 0x09ff06a3, 0},
+{W, 1, "", _PIPEA_DATA_M1, 0x7e4e58a4, 0},
+{W, 1, "", _PIPEA_DATA_N1, 0x0083d600, 0},
+{W, 1, "", _PIPEA_LINK_M1, 0x00045a42, 0},
+{W, 1, "", _PIPEA_LINK_N1, 0x00041eb0, 0},
+{M, 1, "[drm:ironlake_set_pll_edp], eDP PLL enable for clock 270000", 0x0, 0xcf8e64, 0},
+{R, 1, "", DP_A, DP_LINK_TRAIN_PAT_1 | DP_LINK_TRAIN_PAT_1_CPT | DP_VOLTAGE_0_4 | DP_PRE_EMPHASIS_0 | DP_PORT_WIDTH_1 | DP_PLL_FREQ_270MHZ | DP_SYNC_VS_HIGH | DP_SYNC_HS_HIGH | DP_DETECTED | 0x0000001c, 0},
+{W, 1, "", DP_A, DP_LINK_TRAIN_PAT_1 | DP_LINK_TRAIN_PAT_1_CPT | DP_VOLTAGE_0_4 | DP_PRE_EMPHASIS_0 | DP_PORT_WIDTH_1 | DP_PLL_FREQ_270MHZ | DP_SYNC_VS_HIGH | DP_SYNC_HS_HIGH | DP_DETECTED | 0x0000001c, 0},
+{R, 1, "", DP_A, DP_LINK_TRAIN_PAT_1 | DP_LINK_TRAIN_PAT_1_CPT | DP_VOLTAGE_0_4 | DP_PRE_EMPHASIS_0 | DP_PORT_WIDTH_1 | DP_PLL_FREQ_270MHZ | DP_SYNC_VS_HIGH | DP_SYNC_HS_HIGH | DP_DETECTED | 0x0000001c, 500},
+{W, 1, "", _PIPEACONF, ( /* PIPECONF_FRAME_START_DELAY_MASK */ 0x0 << 27) | PIPECONF_BPP_6 | PIPECONF_DITHER_EN | PIPECONF_DITHER_TYPE_SP | 0x00000050, 0},
+{R, 1, "", _PIPEACONF, ( /* PIPECONF_FRAME_START_DELAY_MASK */ 0x0 << 27) | PIPECONF_BPP_6 | PIPECONF_DITHER_EN | PIPECONF_DITHER_TYPE_SP | 0x00000050, 0},
+{R, 1, "", _PIPEASTAT, 0x00000000, 0},
+{W, 1, "", _PIPEASTAT, PIPE_VBLANK_INTERRUPT_STATUS | 0x00000002, 0},
+{R, 4562, "", _PIPEASTAT, 0x00000000, 0},
+{M, 1, "[drm:intel_wait_for_vblank], vblank wait timed out", 0x0, 0xcf8e64, 0},
+{W, 1, "", _DSPACNTR, DISPPLANE_GAMMA_ENABLE | ( /* DISPPLANE_SEL_PIPE(0=A,1=B) */ 0x0 << 24) | 0x40000000, 0},
+{R, 2, "", _DSPACNTR, DISPPLANE_GAMMA_ENABLE | ( /* DISPPLANE_SEL_PIPE(0=A,1=B) */ 0x0 << 24) | 0x40000000, 0},
+{W, 1, "", _DSPACNTR, DISPPLANE_GAMMA_ENABLE | (DISPPLANE_32BPP_NO_ALPHA & 0x18000000) | ( /* DISPPLANE_SEL_PIPE(0=A,1=B) */ 0x0 << 24) | DISPPLANE_TRICKLE_FEED_DISABLE /* Ironlake */  | 0x58004000, 0},
+{M, 1, "[drm:ironlake_update_plane], Writing base 00000000 00000000 0 0 10240", 0x0, 0xcf8e64, 0},
+{W, 1, "", _DSPASTRIDE, 0x00002800, 0},
+{W, 1, "", _DSPASIZE + 0xc, 0x00000000, 0},
+{W, 1, "", _DSPACNTR + 0x24, 0x00000000, 0},
+{W, 1, "", _DSPAADDR, 0x00000000, 0},
+{R, 1, "", _DSPACNTR, DISPPLANE_GAMMA_ENABLE | (DISPPLANE_32BPP_NO_ALPHA & 0x18000000) | ( /* DISPPLANE_SEL_PIPE(0=A,1=B) */ 0x0 << 24) | DISPPLANE_TRICKLE_FEED_DISABLE /* Ironlake */  | 0x58004000, 0},
+{R, 1, "", 0x145d10, 0x2010040c, 0},
+{R, 1, "", WM0_PIPEA_ILK, 0x00783818, 0},
+{W, 1, "", WM0_PIPEA_ILK, 0x00183806, 0},
+{M, 1, "[drm:sandybridge_update_wm], FIFO watermarks For pipe A - plane 24,cursor:6", 0x0, 0xcf8e64, 0},
+{W, 1, "", WM3_LP_ILK, ( /* WMx_LP_LATENCY */ 0x0 << 24) | ( /* WMx_LP_FBC */ 0x0 << 20) | ( /* WMx_LP_SR */ 0x0 << 8) | ( /* WMx_LP_CURSOR */ 0x0 << 0) | 0x00000000, 0},
+{W, 1, "", WM2_LP_ILK, ( /* WMx_LP_LATENCY */ 0x0 << 24) | ( /* WMx_LP_FBC */ 0x0 << 20) | ( /* WMx_LP_SR */ 0x0 << 8) | ( /* WMx_LP_CURSOR */ 0x0 << 0) | 0x00000000, 0},
+{W, 1, "", WM1_LP_ILK, ( /* WMx_LP_LATENCY */ 0x0 << 24) | ( /* WMx_LP_FBC */ 0x0 << 20) | ( /* WMx_LP_SR */ 0x0 << 8) | ( /* WMx_LP_CURSOR */ 0x0 << 0) | 0x00000000, 0},
+{R, 1, "", 0x145d10, 0x2010040c, 0},
+{M, 1, "[drm:ironlake_check_srwm], watermark 1:display plane 38, fbc lines 3,cursor 6", 0x0, 0xcf8e64, 0},
+{R, 1, "", 0x145d10, 0x2010040c, 0},
+{W, 1, "", WM1_LP_ILK, WMx_LP_SR_EN | ( /* WMx_LP_LATENCY */ 0x4 << 24) | ( /* WMx_LP_FBC */ 0x3 << 20) | ( /* WMx_LP_SR */ 0x26 << 8) | ( /* WMx_LP_CURSOR */ 0x6 << 0) | 0x84302606, 0},
+{R, 1, "", 0x145d10, 0x2010040c, 0},
+{M, 1, "[drm:ironlake_check_srwm], watermark 2:display plane 145, " "fbc lines 3,cursor 6", 0x0, 0xcf8e64, 0},
+{R, 1, "", 0x145d10, 0x2010040c, 0},
+{W, 1, "", WM2_LP_ILK, WMx_LP_SR_EN | ( /* WMx_LP_LATENCY */ 0x10 << 24) | ( /* WMx_LP_FBC */ 0x3 << 20) | ( /* WMx_LP_SR */ 0x91 << 8) | ( /* WMx_LP_CURSOR */ 0x6 << 0) | 0x90309106, 0},
+{R, 1, "", 0x145d10, 0x2010040c, 0},
+{M, 1, "[drm:ironlake_check_srwm], watermark 3:display plane " "288, fbc lines 4,cursor 10", 0x0, 0xcf8e64, 0},
+{R, 1, "", 0x145d10, 0x2010040c, 0},
+{W, 1, "", WM3_LP_ILK, WMx_LP_SR_EN | ( /* WMx_LP_LATENCY */ 0x20 << 24) | ( /* WMx_LP_FBC */ 0x4 << 20) | ( /* WMx_LP_SR */ 0x120 << 8) | ( /* WMx_LP_CURSOR */ 0xa << 0) | 0xa041200a, 0},
+{M, 1, "[drm:drm_crtc_helper_set_mode], [ENCODER:7:TMDS-7]set [MODE:0:2560x1700]", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:ironlake_edp_pll_on], ", 0x0, 0xcf8e64, 0},
+{R, 1, "", DP_A, DP_LINK_TRAIN_PAT_1 | DP_LINK_TRAIN_PAT_1_CPT | DP_VOLTAGE_0_4 | DP_PRE_EMPHASIS_0 | DP_PORT_WIDTH_1 | DP_PLL_FREQ_270MHZ | DP_SYNC_VS_HIGH | DP_SYNC_HS_HIGH | DP_DETECTED | 0x0000001c, 0},
+{W, 1, "", DP_A, DP_LINK_TRAIN_PAT_1 | DP_LINK_TRAIN_PAT_1_CPT | DP_VOLTAGE_0_4 | DP_PRE_EMPHASIS_0 | DP_PORT_WIDTH_1 | DP_PLL_FREQ_270MHZ | DP_PLL_ENABLE | DP_SYNC_VS_HIGH | DP_SYNC_HS_HIGH | DP_DETECTED | 0x0000401c, 0},
+{R, 1, "", DP_A, DP_LINK_TRAIN_PAT_1 | DP_LINK_TRAIN_PAT_1_CPT | DP_VOLTAGE_0_4 | DP_PRE_EMPHASIS_0 | DP_PORT_WIDTH_1 | DP_PLL_FREQ_270MHZ | DP_PLL_ENABLE | DP_SYNC_VS_HIGH | DP_SYNC_HS_HIGH | DP_DETECTED | 0x0000401c, 200},
+{R, 1, "", DP_A, DP_LINK_TRAIN_PAT_1 | DP_LINK_TRAIN_PAT_1_CPT | DP_VOLTAGE_0_4 | DP_PRE_EMPHASIS_0 | DP_PORT_WIDTH_1 | DP_PLL_FREQ_270MHZ | DP_PLL_ENABLE | DP_SYNC_VS_HIGH | DP_SYNC_HS_HIGH | DP_DETECTED | 0x0000401c, 0},
+{R, 1, "", 0x145d10, 0x2010040c, 0},
+{R, 1, "", WM0_PIPEA_ILK, 0x00183806, 0},
+{W, 1, "", WM0_PIPEA_ILK, 0x00183806, 0},
+{M, 1, "[drm:sandybridge_update_wm], FIFO watermarks For pipe A - plane 24,cursor:6", 0x0, 0xcf8e64, 0},
+{W, 1, "", WM3_LP_ILK, ( /* WMx_LP_LATENCY */ 0x0 << 24) | ( /* WMx_LP_FBC */ 0x0 << 20) | ( /* WMx_LP_SR */ 0x0 << 8) | ( /* WMx_LP_CURSOR */ 0x0 << 0) | 0x00000000, 0},
+{W, 1, "", WM2_LP_ILK, ( /* WMx_LP_LATENCY */ 0x0 << 24) | ( /* WMx_LP_FBC */ 0x0 << 20) | ( /* WMx_LP_SR */ 0x0 << 8) | ( /* WMx_LP_CURSOR */ 0x0 << 0) | 0x00000000, 0},
+{W, 1, "", WM1_LP_ILK, ( /* WMx_LP_LATENCY */ 0x0 << 24) | ( /* WMx_LP_FBC */ 0x0 << 20) | ( /* WMx_LP_SR */ 0x0 << 8) | ( /* WMx_LP_CURSOR */ 0x0 << 0) | 0x00000000, 0},
+{R, 1, "", 0x145d10, 0x2010040c, 0},
+{M, 1, "[drm:ironlake_check_srwm], watermark 1:display plane 38, fbc lines 3,cursor 6", 0x0, 0xcf8e64, 0},
+{R, 1, "", 0x145d10, 0x2010040c, 0},
+{W, 1, "", WM1_LP_ILK, WMx_LP_SR_EN | ( /* WMx_LP_LATENCY */ 0x4 << 24) | ( /* WMx_LP_FBC */ 0x3 << 20) |( /* WMx_LP_SR */ 0x26 << 8) | ( /* WMx_LP_CURSOR */ 0x6 << 0) | 0x84302606, 0},
+{R, 1, "", 0x145d10, 0x2010040c, 0},
+{M, 1, "[drm:ironlake_check_srwm], watermark 2:display plane 145, " "fbc lines 3,cursor 6", 0x0, 0xcf8e64, 0},
+{R, 1, "", 0x145d10, 0x2010040c, 0},
+{W, 1, "", WM2_LP_ILK, WMx_LP_SR_EN | ( /* WMx_LP_LATENCY */ 0x10 << 24) | ( /* WMx_LP_FBC */ 0x3 << 20) |( /* WMx_LP_SR */ 0x91 << 8) | ( /* WMx_LP_CURSOR */ 0x6 << 0) | 0x90309106, 0},
+{R, 1, "", 0x145d10, 0x2010040c, 0},
+{M, 1, "[drm:ironlake_check_srwm], watermark 3:display plane 288, " "fbc lines 4,cursor 10", 0x0, 0xcf8e64, 0},
+{R, 1, "", 0x145d10, 0x2010040c, 0},
+{W, 1, "", WM3_LP_ILK, WMx_LP_SR_EN | ( /* WMx_LP_LATENCY */ 0x20 << 24) | ( /* WMx_LP_FBC */ 0x4 << 20) |( /* WMx_LP_SR */ 0x120 << 8) | ( /* WMx_LP_CURSOR */ 0xa << 0) | 0xa041200a, 0},
+{R, 1, "", _FDI_TXA_CTL, 0x00040000, 0},
+{W, 1, "", _FDI_TXA_CTL, 0x00040000, 0},
+{R, 1, "", _FDI_TXA_CTL, 0x00040000, 0},
+{R, 1, "", _FDI_RXA_CTL, 0x00000040, 0},
+{R, 1, "", _PIPEACONF, ( /* PIPECONF_FRAME_START_DELAY_MASK */ 0x0 << 27) | PIPECONF_BPP_6 | PIPECONF_DITHER_EN | PIPECONF_DITHER_TYPE_SP | 0x00000050, 0},
+{W, 1, "", _FDI_RXA_CTL, 0x00020040, 0},
+{R, 1, "", _FDI_RXA_CTL, 0x00020040, 100},
+{R, 1, "", SOUTH_CHICKEN1, 0x00000000, 0},
+{W, 2, "", SOUTH_CHICKEN1, 0x00000000, 0},
+{R, 1, "", SOUTH_CHICKEN1, 0x00000000, 0},
+{R, 1, "", _FDI_TXA_CTL, 0x00040000, 0},
+{W, 1, "", _FDI_TXA_CTL, 0x00040000, 0},
+{R, 1, "", _FDI_RXA_CTL, 0x00020040, 0},
+{R, 1, "", _PIPEACONF, ( /* PIPECONF_FRAME_START_DELAY_MASK */ 0x0 << 27) | PIPECONF_BPP_6 | PIPECONF_DITHER_EN | PIPECONF_DITHER_TYPE_SP | 0x00000050, 0},
+{W, 1, "", _FDI_RXA_CTL, 0x00020040, 0},
+{R, 1, "", _FDI_RXA_CTL, 0x00020040, 100},
+{P, 1, "Set Palette"},
+{R, 1, "", _PIPEACONF, ( /* PIPECONF_FRAME_START_DELAY_MASK */ 0x0 << 27) | PIPECONF_BPP_6 | PIPECONF_DITHER_EN | PIPECONF_DITHER_TYPE_SP | 0x00000050, 0},
+{W, 1, "", _PIPEACONF, PIPECONF_ENABLE | ( /* PIPECONF_FRAME_START_DELAY_MASK */ 0x0 << 27) | PIPECONF_BPP_6 | PIPECONF_DITHER_EN | PIPECONF_DITHER_TYPE_SP | 0x80000050, 0},
+{R, 1, "", _PIPEASTAT, 0x00000000, 0},
+{W, 1, "", _PIPEASTAT, PIPE_VBLANK_INTERRUPT_STATUS | 0x00000002, 0},
+{R, 4533, "", _PIPEASTAT, 0x00000000, 0},
+{M, 1, "[drm:intel_wait_for_vblank], vblank wait timed out", 0x0, 0xcf8e64, 0},
+{R, 1, "", _PIPEACONF, PIPECONF_ENABLE | PIPECONF_DOUBLE_WIDE | ( /* PIPECONF_FRAME_START_DELAY_MASK */ 0x0 << 27) | PIPECONF_BPP_6 | PIPECONF_DITHER_EN | PIPECONF_DITHER_TYPE_SP |0xc0000050, 0},
+{R, 1, "", _DSPACNTR, DISPPLANE_GAMMA_ENABLE | (DISPPLANE_32BPP_NO_ALPHA & 0x18000000) | ( /* DISPPLANE_SEL_PIPE(0=A,1=B) */ 0x0 << 24) | DISPPLANE_TRICKLE_FEED_DISABLE /* Ironlake */  | 0x58004000, 0},
+{W, 1, "", _DSPACNTR, DISPLAY_PLANE_ENABLE | DISPPLANE_GAMMA_ENABLE | (DISPPLANE_32BPP_NO_ALPHA & 0x18000000) | ( /* DISPPLANE_SEL_PIPE(0=A,1=B) */ 0x0 << 24) | DISPPLANE_TRICKLE_FEED_DISABLE /* Ironlake */  | 0xd8004000, 0},
+{R, 1, "", _DSPAADDR, 0x00000000, 0},
+{W, 1, "", _DSPAADDR, 0x00000000, 0},
+{R, 1, "", _DSPASIZE + 0xc, 0x00000000, 0},
+{W, 1, "", _DSPASIZE + 0xc, 0x00000000, 0},
+{R, 1, "", _PIPEASTAT, 0x00000000, 0},
+{W, 1, "", _PIPEASTAT, PIPE_VBLANK_INTERRUPT_STATUS | 0x00000002, 0},
+{R, 4392, "", _PIPEASTAT, 0x00000000, 0},
+{M, 1, "[drm:intel_wait_for_vblank], vblank wait timed out", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:ironlake_edp_panel_vdd_on], Turn eDP VDD on", 0x0, 0xcf8e64, 0},
+{R, 1, "", PCH_PP_CONTROL, (PCH_PP_UNLOCK & 0xabcd0000) | EDP_FORCE_VDD | 0xabcd0008, 0},
+{M, 1, "[drm:ironlake_edp_panel_on], Turn eDP power on", 0x0, 0xcf8e64, 0},
+{R, 1, "", PCH_PP_STATUS, 0x00000000, 0},
+{M, 1, "[drm:ironlake_wait_panel_power_cycle], Wait for panel power cycle", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:ironlake_wait_panel_status], R PCH_PP_CONTROL:abcd0008", 0x0, 0xcf8e64, 0},
+{R, 2, "", PCH_PP_STATUS, 0x00000000, 0},
+{R, 1, "", PCH_PP_CONTROL, (PCH_PP_UNLOCK & 0xabcd0000) | EDP_FORCE_VDD | 0xabcd0008, 0},
+{W, 1, "", PCH_PP_CONTROL, (PCH_PP_UNLOCK & 0xabcd0000) | EDP_FORCE_VDD | PANEL_POWER_RESET | PANEL_POWER_ON | 0xabcd000b, 0},
+{R, 1, "", PCH_PP_CONTROL, (PCH_PP_UNLOCK & 0xabcd0000) | EDP_FORCE_VDD | PANEL_POWER_RESET | PANEL_POWER_ON | 0xabcd000b, 0},
+{M, 1, "[drm:ironlake_wait_panel_on], Wait for panel power on", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:ironlake_wait_panel_status], R PCH_PP_CONTROL:abcd000b", 0x0, 0xcf8e64, 0},
+{R, 4, "", PCH_PP_STATUS, /*undocbit3 | undocbit1 | */ 0x0000000a, 0},
+{R, 16983, "", PCH_PP_STATUS, PP_ON | PP_SEQUENCE_POWER_UP | /*undocbit3 | undocbit1 | */ 0x9000000a, 0},
+{R, 17839, "", PCH_PP_STATUS, PP_ON | PP_SEQUENCE_POWER_UP | /*undocbit3 | undocbit0 | */ 0x90000009, 0},
+{R, 1, "", PCH_PP_STATUS, PP_ON | /*undocbit3 | */ 0x80000008, 0},
+{M, 1, "[drm:ironlake_edp_panel_vdd_off], Turn eDP VDD off 1", 0x0, 0xcf8e64, 0},
+{R, 2, "", PCH_PP_CONTROL, (PCH_PP_UNLOCK & 0xabcd0000) | EDP_FORCE_VDD | PANEL_POWER_RESET | PANEL_POWER_ON | 0xabcd000b, 0},
+{W, 1, "", PCH_PP_CONTROL, (PCH_PP_UNLOCK & 0xabcd0000) | PANEL_POWER_RESET | PANEL_POWER_ON | 0xabcd0003, 0},
+{R, 1, "", PCH_PP_CONTROL, (PCH_PP_UNLOCK & 0xabcd0000) | PANEL_POWER_RESET | PANEL_POWER_ON | 0xabcd0003, 0},
+{M, 1, "[drm:ironlake_panel_vdd_off_sync], R PCH_PP_CONTROL:abcd0003", 0x0, 0xcf8e64, 0},
+{R, 1, "", PCH_PP_STATUS, PP_ON | /*undocbit3 | */ 0x80000008, 0},
+{W, 1, "", DP_A, DP_PORT_EN | DP_LINK_TRAIN_PAT_1 | DP_LINK_TRAIN_PAT_2_CPT | DP_PRE_EMPHASIS_0 | (DP_PORT_WIDTH_4 & 0x180000) | DP_ENHANCED_FRAMING | DP_PLL_FREQ_270MHZ | DP_PLL_ENABLE | DP_DETECTED | 0x8e1c4104, 0},
+{R, 1, "", DP_A, DP_PORT_EN | DP_LINK_TRAIN_PAT_1 | DP_LINK_TRAIN_PAT_2_CPT | DP_PRE_EMPHASIS_0 | (DP_PORT_WIDTH_4 & 0x180000) | DP_ENHANCED_FRAMING | DP_PLL_FREQ_270MHZ | DP_PLL_ENABLE | DP_DETECTED | 0x8e1c4104, 0},
+{R, 2, "", PCH_PP_STATUS, PP_ON | /*undocbit3 | */ 0x80000008, 0},
+{R, 1, "", DP_A, DP_PORT_EN | DP_LINK_TRAIN_PAT_1 | DP_LINK_TRAIN_PAT_2_CPT | (DP_PRE_EMPHASIS_9_5 & 0xc00000) | (DP_PORT_WIDTH_4 & 0x180000) | DP_ENHANCED_FRAMING | DP_PLL_FREQ_270MHZ | DP_PLL_ENABLE | DP_DETECTED | 0x8cdc4104, 0},
+{M, 1, "[drm:intel_dp_link_down], ", 0x0, 0xcf8e64, 0},
+{W, 1, "", DP_A, DP_PORT_EN | DP_LINK_TRAIN_PAT_1 | DP_LINK_TRAIN_PAT_1_CPT | DP_PRE_EMPHASIS_0 | (DP_PORT_WIDTH_4 & 0x180000) | DP_ENHANCED_FRAMING | DP_PLL_FREQ_270MHZ | DP_DETECTED | 0x8e1c0004, 0},
+{R, 1, "", DP_A, DP_PORT_EN | DP_LINK_TRAIN_PAT_1 | DP_LINK_TRAIN_PAT_1_CPT | DP_PRE_EMPHASIS_0 | (DP_PORT_WIDTH_4 & 0x180000) | DP_ENHANCED_FRAMING | DP_PLL_FREQ_270MHZ | DP_DETECTED | 0x8e1c0004, 100},
+{W, 1, "", DP_A, DP_PORT_EN | DP_LINK_TRAIN_PAT_1 | DP_LINK_TRAIN_PAT_IDLE_CPT | DP_PRE_EMPHASIS_0 | (DP_PORT_WIDTH_4 & 0x180000) | DP_ENHANCED_FRAMING | DP_PLL_FREQ_270MHZ | DP_DETECTED | 0x8e1c0204, 0},
+{R, 1, "", DP_A, DP_PORT_EN | DP_LINK_TRAIN_PAT_1 | DP_LINK_TRAIN_PAT_IDLE_CPT | DP_PRE_EMPHASIS_0 | (DP_PORT_WIDTH_4 & 0x180000) | DP_ENHANCED_FRAMING | DP_PLL_FREQ_270MHZ | DP_DETECTED | 0x8e1c0204, 0},
+{W, 1, "", DP_A, DP_LINK_TRAIN_PAT_1 | (DP_LINK_TRAIN_OFF_CPT & 0x300) | DP_PRE_EMPHASIS_0 | (DP_PORT_WIDTH_4 & 0x180000) | DP_ENHANCED_FRAMING | DP_PLL_FREQ_270MHZ | DP_DETECTED | 0x0e1c0304, 0},
+{R, 2, "", DP_A, DP_LINK_TRAIN_PAT_1 | (DP_LINK_TRAIN_OFF_CPT & 0x300) | DP_PRE_EMPHASIS_0 | (DP_PORT_WIDTH_4 & 0x180000) | DP_ENHANCED_FRAMING | DP_PLL_FREQ_270MHZ | DP_DETECTED | 0x0e1c0304, 0},
+{R, 2, "", PCH_PP_STATUS, PP_ON | /*undocbit3 | */ 0x80000008, 0},
+{I,},
+{W, 1, "", DP_A, DP_PORT_EN | DP_LINK_TRAIN_PAT_1 | DP_LINK_TRAIN_PAT_1_CPT | (DP_PORT_WIDTH_4 & 0x180000) | DP_ENHANCED_FRAMING | DP_PLL_FREQ_270MHZ | DP_PLL_ENABLE | DP_DETECTED | 0x891c4004, 0},
+{R, 1, "", DP_A, DP_PORT_EN | DP_LINK_TRAIN_PAT_1 | DP_LINK_TRAIN_PAT_1_CPT | (DP_PORT_WIDTH_4 & 0x180000) | DP_ENHANCED_FRAMING | DP_PLL_FREQ_270MHZ | DP_PLL_ENABLE | DP_DETECTED | 0x891c4004, 0},
+{R, 2, "", PCH_PP_STATUS, PP_ON | /*undocbit3 | */ 0x80000008, 0},
+{I,},
+{R, 2, "", PCH_PP_STATUS, PP_ON | /*undocbit3 | */ 0x80000008, 0},
+{I,},
+{R, 2, "", PCH_PP_STATUS, PP_ON | /*undocbit3 | */ 0x80000008, 0},
+{I,},
+{M, 1, "[drm:intel_dp_start_link_train], clock recovery OK", 0x0, 0x00000000, 0},
+{W, 1, "", DP_A, DP_PORT_EN | DP_LINK_TRAIN_PAT_1 | DP_LINK_TRAIN_PAT_2_CPT | (DP_PORT_WIDTH_4 & 0x180000) | DP_ENHANCED_FRAMING | DP_PLL_FREQ_270MHZ | DP_PLL_ENABLE | DP_DETECTED | 0x891c4104, 0},
+{R, 1, "", DP_A, DP_PORT_EN | DP_LINK_TRAIN_PAT_1 | DP_LINK_TRAIN_PAT_2_CPT | (DP_PORT_WIDTH_4 & 0x180000) | DP_ENHANCED_FRAMING | DP_PLL_FREQ_270MHZ | DP_PLL_ENABLE | DP_DETECTED | 0x891c4104, 0},
+{R, 2, "", PCH_PP_STATUS, PP_ON | /* undocbit3 | */ 0x80000008, 0},
+{I,},
+{R, 2, "", PCH_PP_STATUS, PP_ON | /* undocbit3 | */ 0x80000008, 0},
+{I,},
+{R, 2, "", PCH_PP_STATUS, PP_ON | /* undocbit3 | */ 0x80000008, 0},
+{I,},
+{W, 1, "", DP_A, DP_PORT_EN | DP_LINK_TRAIN_PAT_1 | (DP_LINK_TRAIN_OFF_CPT & 0x300) | (DP_PORT_WIDTH_4 & 0x180000) | DP_ENHANCED_FRAMING | DP_PLL_FREQ_270MHZ | DP_PLL_ENABLE | DP_DETECTED | 0x891c4304, 0},
+{R, 1, "", DP_A, DP_PORT_EN | DP_LINK_TRAIN_PAT_1 | (DP_LINK_TRAIN_OFF_CPT & 0x300) | (DP_PORT_WIDTH_4 & 0x180000) | DP_ENHANCED_FRAMING | DP_PLL_FREQ_270MHZ | DP_PLL_ENABLE | DP_DETECTED | 0x891c4304, 0},
+{R, 2, "", PCH_PP_STATUS, PP_ON | /* undocbit3 | */ 0x80000008, 0},
+{I,},
+{M, 1, "[drm:ironlake_edp_backlight_on], ", 0x0, 0x00000000, 0},
+{R, 1, "", PCH_PP_CONTROL, (PCH_PP_UNLOCK & 0xabcd0000) | PANEL_POWER_RESET | PANEL_POWER_ON | 0xabcd0003, 0},
+{W, 1, "", PCH_PP_CONTROL, (PCH_PP_UNLOCK & 0xabcd0000) | EDP_BLC_ENABLE | PANEL_POWER_RESET | PANEL_POWER_ON | 0xabcd0007, 0},
+{R, 1, "", PCH_PP_CONTROL, (PCH_PP_UNLOCK & 0xabcd0000) | EDP_BLC_ENABLE | PANEL_POWER_RESET | PANEL_POWER_ON | 0xabcd0007, 0},
+{R, 1, "", _PIPEADSL, 0x00000633, 500},
+{R, 1, "", _PIPEADSL, 0x00000652, 0},
+{R, 1, "", _PIPEASTAT, 0x00000000, 0},
+{W, 1, "", _PIPEASTAT, PIPE_VBLANK_INTERRUPT_STATUS | 0x00000002, 0},
+{R, 5085, "", _PIPEASTAT, 0x00000000, 0},
+{M, 1, "[drm:intel_wait_for_vblank], vblank wait timed out", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:intel_dp_mode_fixup], Display port link bw 0a lane count 4clock 270000", 0x0, 0xcf8e64, 0},
+{M, 1, "[drm:drm_crtc_helper_set_mode], [CRTC:3]", 0x0, 0xcf8e64, 0},
+{I, 0, "(null)", 0x0, 0xcf8e64, 0}, };
+
+int niodefs = sizeof (iodefs) / sizeof (iodefs[0]);
diff --git a/src/mainboard/google/link/i915io.h b/src/mainboard/google/link/i915io.h
index 06114c4..dd97fff 100644
--- a/src/mainboard/google/link/i915io.h
+++ b/src/mainboard/google/link/i915io.h
@@ -18,6 +18,21 @@
  */
 
 #include "i915_reg.h"
+#include "drm_dp_helper.h"
+
+/* things that are, strangely, not defined anywhere? */
+#define PCH_PP_UNLOCK 0xabcd0000
+#define WMx_LP_SR_EN (1<<31)
+
+/* Google Link-specific defines */
+/* how many 4096-byte pages do we need for the framebuffer?
+ * There are 32 bits per pixel, or 4 bytes,
+ * which means 1024 pixels per page.
+ * HencetThere are 4250 GTTs on Link:
+ * 2650 (X) * 1700 (Y) pixels / 1024 pixels per page.
+ */
+#define FRAME_BUFFER_PAGES ((2560*1700)/1024)
+#define FRAME_BUFFER_BYTES (FRAME_BUFFER_PAGES*4096)
 
 /* One-letter commands for code not meant to be ready for humans.
  * The code was generated by a set of programs/scripts.
@@ -46,10 +61,10 @@
  */
 #define M 1
 #define R 2
-#define W 3
-#define V 4
-#define I 8
-#define P 16
+#define W 4
+#define V 8
+#define I 16
+#define P 32
 
 struct iodef {
 	unsigned char op;
@@ -65,8 +80,8 @@ unsigned long io_i915_READ32(unsigned long addr);
 void io_i915_WRITE32(unsigned long val, unsigned long addr);
 
 /* intel_dp.c */
-u32 pack_aux(u8 *src, int src_bytes);
-void unpack_aux(u32 src, u8 *dst, int dst_bytes);
-int intel_dp_aux_ch(u32 ch_ctl, u32 ch_data, u8 *send, int send_bytes,
-	u8 *recv, int recv_size);
+u32 pack_aux(u32 *src, int src_bytes);
+void unpack_aux(u32 src, u32 *dst, int dst_bytes);
+int intel_dp_aux_ch(u32 ch_ctl, u32 ch_data, u32 *send, int send_bytes,
+	u32 *recv, int recv_size);
 
diff --git a/src/mainboard/google/link/intel_dp.c b/src/mainboard/google/link/intel_dp.c
index b2160a1..9fb66f6 100644
--- a/src/mainboard/google/link/intel_dp.c
+++ b/src/mainboard/google/link/intel_dp.c
@@ -32,8 +32,9 @@
 #include "i915io.h"
 
 u32
-pack_aux(u8 *src, int src_bytes)
+pack_aux(u32 *src32, int src_bytes)
 {
+	u8 *src = (u8 *)src32;
 	int	i;
 	u32 v = 0;
 
@@ -45,8 +46,10 @@ pack_aux(u8 *src, int src_bytes)
 }
 
 void
-unpack_aux(u32 src, u8 *dst, int dst_bytes)
+unpack_aux(u32 src, u32 *dst32, int dst_bytes)
 {
+	u8 *dst = (u8 *)dst32;
+
 	int i;
 	if (dst_bytes > 4)
 		dst_bytes = 4;
@@ -55,8 +58,8 @@ unpack_aux(u32 src, u8 *dst, int dst_bytes)
 }
 
 int
-intel_dp_aux_ch(u32 ch_ctl, u32 ch_data, u8 *send, int send_bytes,
-		u8 *recv, int recv_size)
+intel_dp_aux_ch(u32 ch_ctl, u32 ch_data, u32 *send, int send_bytes,
+		u32 *recv, int recv_size)
 {
 	int i;
 	int recv_bytes;
@@ -93,11 +96,10 @@ intel_dp_aux_ch(u32 ch_ctl, u32 ch_data, u8 *send, int send_bytes,
 	for (try = 0; try < 5; try++) {
 		/* Load the send data into the aux channel data registers */
 		for (i = 0; i < send_bytes; i += 4)
-			io_i915_WRITE32(ch_data + i,
-				   pack_aux(send + i, send_bytes - i));
+			io_i915_WRITE32(send[i], ch_data + i);
 
 		/* Send the command and wait for it to complete */
-		io_i915_WRITE32(ch_ctl,
+		io_i915_WRITE32(
 			   DP_AUX_CH_CTL_SEND_BUSY |
 			   DP_AUX_CH_CTL_TIME_OUT_400us |
 			   (send_bytes << DP_AUX_CH_CTL_MESSAGE_SIZE_SHIFT) |
@@ -105,7 +107,7 @@ intel_dp_aux_ch(u32 ch_ctl, u32 ch_data, u8 *send, int send_bytes,
 			   (aux_clock_divider << DP_AUX_CH_CTL_BIT_CLOCK_2X_SHIFT) |
 			   DP_AUX_CH_CTL_DONE |
 			   DP_AUX_CH_CTL_TIME_OUT_ERROR |
-			   DP_AUX_CH_CTL_RECEIVE_ERROR);
+			   DP_AUX_CH_CTL_RECEIVE_ERROR, ch_ctl);
 		for (;;) {
 			status = io_i915_READ32(ch_ctl);
 			if ((status & DP_AUX_CH_CTL_SEND_BUSY) == 0)
@@ -114,11 +116,11 @@ intel_dp_aux_ch(u32 ch_ctl, u32 ch_data, u8 *send, int send_bytes,
 		}
 
 		/* Clear done status and any errors */
-		io_i915_WRITE32(ch_ctl,
+		io_i915_WRITE32(
 			   status |
 			   DP_AUX_CH_CTL_DONE |
 			   DP_AUX_CH_CTL_TIME_OUT_ERROR |
-			   DP_AUX_CH_CTL_RECEIVE_ERROR);
+			   DP_AUX_CH_CTL_RECEIVE_ERROR, ch_ctl);
 
 		if (status & (DP_AUX_CH_CTL_TIME_OUT_ERROR |
 			      DP_AUX_CH_CTL_RECEIVE_ERROR))



More information about the coreboot mailing list