xf86-video-intel: 4 commits - src/sna/gen7_render.c src/sna/sna_accel.c src/sna/sna_display.c

Chris Wilson ickle at kemper.freedesktop.org
Sat Jun 2 03:48:06 PDT 2012


 src/sna/gen7_render.c |    5 ++
 src/sna/sna_accel.c   |    2 +
 src/sna/sna_display.c |   93 +++++++++++++++++++++++++++-----------------------
 3 files changed, 58 insertions(+), 42 deletions(-)

New commits:
commit ce85cd1a36e31795a966ea8983c2d6f803a4eccd
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Sat Jun 2 11:46:06 2012 +0100

    sna: Add some DBG to retreiving EDID
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 2e1be46..c93f472 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -1072,13 +1072,16 @@ sna_output_attach_edid(xf86OutputPtr output)
 	struct sna *sna = to_sna(output->scrn);
 	struct sna_output *sna_output = output->driver_private;
 	drmModeConnectorPtr koutput = sna_output->mode_output;
-	drmModePropertyBlobPtr edid_blob = NULL;
+	void *raw = NULL;
+	int raw_length = 0;
 	xf86MonPtr mon = NULL;
 	int i;
 
 	/* look for an EDID property */
 	for (i = 0; i < koutput->count_props; i++) {
 		struct drm_mode_get_property prop;
+		struct drm_mode_get_blob blob;
+		void *tmp;
 
 		VG_CLEAR(prop);
 		prop.prop_id = koutput->props[i];
@@ -1091,23 +1094,41 @@ sna_output_attach_edid(xf86OutputPtr output)
 		if (strcmp(prop.name, "EDID"))
 			continue;
 
-		drmModeFreePropertyBlob(edid_blob);
-		edid_blob = drmModeGetPropertyBlob(sna->kgem.fd,
-						   koutput->prop_values[i]);
-	}
+		VG_CLEAR(blob);
+		blob.length = 0;
+		blob.data =0;
+		blob.blob_id = koutput->prop_values[i];
+
+		if (drmIoctl(sna->kgem.fd, DRM_IOCTL_MODE_GETPROPBLOB, &blob))
+			continue;
 
-	if (edid_blob) {
-		mon = xf86InterpretEDID(output->scrn->scrnIndex,
-					edid_blob->data);
+		DBG(("%s: retreiving blob (property %d, id=%d, value=%ld), length=%d\n",
+		     __FUNCTION__, i, koutput->props[i], (long)koutput->prop_values[i],
+		     blob.length));
 
-		if (mon && edid_blob->length > 128)
+		tmp = malloc(blob.length);
+		if (tmp == NULL)
+			continue;
+
+		blob.data = (uintptr_t)tmp;
+		if (drmIoctl(sna->kgem.fd, DRM_IOCTL_MODE_GETPROPBLOB, &blob)) {
+			free(tmp);
+			continue;
+		}
+
+		free(raw);
+		raw = tmp;
+		raw_length = blob.length;
+	}
+
+	if (raw) {
+		mon = xf86InterpretEDID(output->scrn->scrnIndex, raw);
+		if (mon && raw_length > 128)
 			mon->flags |= MONITOR_EDID_COMPLETE_RAWDATA;
 	}
 
 	xf86OutputSetEDID(output, mon);
-
-	if (0&&edid_blob)
-		drmModeFreePropertyBlob(edid_blob);
+	free(raw);
 }
 
 static DisplayModePtr
commit e8eb273bd6153c232a9ffc558e3b7fd4beaab01b
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Sat Jun 2 10:43:03 2012 +0100

    sna/gen7: Add DBG for ring switching
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index 2ee5b6f..50eb07e 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -4233,8 +4233,11 @@ gen7_render_context_switch(struct kgem *kgem,
 	if (!new_mode)
 		return;
 
-	if (kgem->mode)
+	if (kgem->mode) {
+		DBG(("%s: switch rings %d -> %d\n",
+		     __FUNCTION__, kgem->mode, new_mode));
 		kgem_submit(kgem);
+	}
 
 	kgem->ring = new_mode;
 }
commit 722afa6bc910a2ccfbb0442872a878d1b6b78315
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Sat Jun 2 10:04:02 2012 +0100

    sna: Remove some unused members from the KMS state tracking
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 9fd59f8..2e1be46 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -54,17 +54,14 @@
 #endif
 
 struct sna_crtc {
-	struct sna *sna;
 	struct drm_mode_modeinfo kmode;
 	PixmapPtr shadow;
 	uint32_t shadow_fb_id;
 	uint32_t cursor;
-	xf86CrtcPtr crtc;
-	int num;
-	int id;
-	int pipe;
-	int plane;
-	int active;
+	uint8_t id;
+	uint8_t pipe;
+	uint8_t plane;
+	uint8_t active;
 	struct list link;
 };
 
@@ -76,12 +73,10 @@ struct sna_property {
 };
 
 struct sna_output {
-	struct sna_mode *mode;
-	int output_id;
+	int id;
 	drmModeConnectorPtr mode_output;
 	int num_props;
 	struct sna_property *props;
-	void *private_data;
 
 	Bool has_panel_limits;
 	int panel_hdisplay;
@@ -91,7 +86,6 @@ struct sna_output {
 	const char *backlight_iface;
 	int backlight_active_level;
 	int backlight_max;
-	xf86OutputPtr output;
 	struct list link;
 };
 
@@ -104,7 +98,7 @@ sna_output_dpms(xf86OutputPtr output, int mode);
  * List of available kernel interfaces in priority order
  */
 static const char *backlight_interfaces[] = {
-	"sna", /* prefer our own native backlight driver */
+	"intel", /* prefer our own native backlight driver */
 	"asus-laptop",
 	"eeepc",
 	"thinkpad_screen",
@@ -493,15 +487,16 @@ sna_crtc_apply(xf86CrtcPtr crtc)
 }
 
 static void
-sna_crtc_restore(struct sna *sna)
+sna_crtc_restore(ScrnInfoPtr scrn)
 {
-	ScrnInfoPtr scrn = sna->scrn;
+	struct sna *sna = to_sna(scrn);
 	xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
 	struct kgem_bo *bo;
 	int i;
 
-	DBG(("%s (fb_pixmap=%d, front=%d)\n", __FUNCTION__,
-	     sna->mode.fb_pixmap, sna->front->drawable.serialNumber));
+	DBG(("%s (fb_pixmap=%ld, front=%ld)\n", __FUNCTION__,
+	     (long)sna->mode.fb_pixmap,
+	     (long)sna->front->drawable.serialNumber));
 
 	if (sna->mode.fb_pixmap == sna->front->drawable.serialNumber)
 		return;
@@ -548,7 +543,7 @@ sna_crtc_dpms(xf86CrtcPtr crtc, int mode)
 	     __FUNCTION__, sna_crtc->pipe, mode, mode == DPMSModeOn));
 
 	if (mode != DPMSModeOff)
-		sna_crtc_restore(sna_crtc->sna);
+		sna_crtc_restore(crtc->scrn);
 	else
 		sna_crtc->active = false;
 }
@@ -984,7 +979,6 @@ sna_crtc_init(ScrnInfoPtr scrn, struct sna_mode *mode, int num)
 	if (sna_crtc == NULL)
 		return;
 
-	sna_crtc->num = num;
 	sna_crtc->id = mode->mode_res->crtcs[num];
 
 	VG_CLEAR(get_pipe);
@@ -1012,8 +1006,6 @@ sna_crtc_init(ScrnInfoPtr scrn, struct sna_mode *mode, int num)
 
 	sna_crtc->cursor = gem_create(sna->kgem.fd, 64*64*4);
 
-	sna_crtc->sna = sna;
-	sna_crtc->crtc = crtc;
 	list_add(&sna_crtc->link, &mode->crtcs);
 
 	DBG(("%s: attached crtc[%d] id=%d, pipe=%d\n",
@@ -1039,7 +1031,7 @@ sna_output_detect(xf86OutputPtr output)
 
 	drmModeFreeConnector(sna_output->mode_output);
 	sna_output->mode_output =
-		drmModeGetConnector(sna->kgem.fd, sna_output->output_id);
+		drmModeGetConnector(sna->kgem.fd, sna_output->id);
 
 	switch (sna_output->mode_output->connection) {
 	case DRM_MODE_CONNECTED:
@@ -1286,7 +1278,7 @@ sna_output_dpms(xf86OutputPtr output, int dpms)
 						  dpms);
 
 		drmModeConnectorSetProperty(sna->kgem.fd,
-					    sna_output->output_id,
+					    sna_output->id,
 					    prop.prop_id,
 					    dpms);
 
@@ -1497,7 +1489,7 @@ sna_output_set_property(xf86OutputPtr output, Atom property,
 				return FALSE;
 			val = *(uint32_t *)value->data;
 
-			drmModeConnectorSetProperty(sna->kgem.fd, sna_output->output_id,
+			drmModeConnectorSetProperty(sna->kgem.fd, sna_output->id,
 						    p->mode_prop->prop_id, (uint64_t)val);
 			return TRUE;
 		} else if (p->mode_prop->flags & DRM_MODE_PROP_ENUM) {
@@ -1515,7 +1507,7 @@ sna_output_set_property(xf86OutputPtr output, Atom property,
 			/* search for matching name string, then set its value down */
 			for (j = 0; j < p->mode_prop->count_enums; j++) {
 				if (!strcmp(p->mode_prop->enums[j].name, name)) {
-					drmModeConnectorSetProperty(sna->kgem.fd, sna_output->output_id,
+					drmModeConnectorSetProperty(sna->kgem.fd, sna_output->id,
 								    p->mode_prop->prop_id, p->mode_prop->enums[j].value);
 					return TRUE;
 				}
@@ -1683,9 +1675,8 @@ sna_output_init(ScrnInfoPtr scrn, struct sna_mode *mode, int num)
 	if (!sna_output)
 		goto cleanup_output;
 
-	sna_output->output_id = mode->mode_res->connectors[num];
+	sna_output->id = mode->mode_res->connectors[num];
 	sna_output->mode_output = koutput;
-	sna_output->mode = mode;
 
 	output->mm_width = koutput->mmWidth;
 	output->mm_height = koutput->mmHeight;
@@ -1700,7 +1691,6 @@ sna_output_init(ScrnInfoPtr scrn, struct sna_mode *mode, int num)
 	output->possible_clones = enc.possible_clones;
 	output->interlaceAllowed = TRUE;
 
-	sna_output->output = output;
 	list_add(&sna_output->link, &mode->outputs);
 
 	return;
@@ -1853,11 +1843,11 @@ static int do_page_flip(struct sna *sna, void *data, int ref_crtc_hw_id)
 		 * completion event. All other crtc's events will be discarded.
 		 */
 		evdata = (uintptr_t)data;
-		evdata |= sna_crtc_to_pipe(crtc->crtc) == ref_crtc_hw_id;
+		evdata |= crtc->pipe == ref_crtc_hw_id;
 
 		DBG(("%s: crtc %d [ref? %d] --> fb %d\n",
 		     __FUNCTION__, crtc_id(crtc),
-		     sna_crtc_to_pipe(crtc->crtc) == ref_crtc_hw_id,
+		     crtc->pipe == ref_crtc_hw_id,
 		     sna->mode.fb_id));
 		if (drmModePageFlip(sna->kgem.fd,
 				    crtc_id(crtc),
commit 26e7bb3f25f0c83d39ff505fa7e05bfcb976e39c
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Sat Jun 2 09:16:51 2012 +0100

    sna: Add a DBG message to indicate flushing for GPU idle
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index 7b7190d..eb85cb4 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -12459,9 +12459,11 @@ set_tv:
 
 void sna_accel_wakeup_handler(struct sna *sna, fd_set *ready)
 {
+	DBG(("%s\n", __FUNCTION__));
 	if (sna->kgem.need_retire)
 		kgem_retire(&sna->kgem);
 	if (!sna->kgem.need_retire) {
+		DBG(("%s: GPU idle, flushing\n", __FUNCTION__));
 		kgem_submit(&sna->kgem);
 		sna->kgem.flush_now = 0;
 	}


More information about the xorg-commit mailing list