summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Hilber <sparkie@lowbyte.de>2009-05-30 06:34:42 +0200
committerPaul Menzel <paulepanter@users.sourceforge.net>2009-06-06 11:27:19 +0200
commit9ed612b65e5590f5d82b6822f19b6881edff0e97 (patch)
tree4c8faf9ae4bef063624c4789c3dd3bd18c217824
parentc6322b3e8d28cb5a6987e119f27eae70a73ca72f (diff)
downloadxf86-video-intel-frc-9ed612b65e5590f5d82b6822f19b6881edff0e97.tar.gz
xf86-video-intel-frc-9ed612b65e5590f5d82b6822f19b6881edff0e97.tar.bz2
Improved field timing debug support.
Signed-off-by: Thomas Hilber <sparkie@lowbyte.de> Signed-off-by: Paul Menzel <paulepanter@users.sourceforge.net>
-rw-r--r--src/i810_driver.c2
-rw-r--r--src/i830.h2
-rw-r--r--src/i830_driver.c20
-rw-r--r--src/i830_video.c27
4 files changed, 33 insertions, 18 deletions
diff --git a/src/i810_driver.c b/src/i810_driver.c
index eb4c547e..76582992 100644
--- a/src/i810_driver.c
+++ b/src/i810_driver.c
@@ -275,7 +275,7 @@ static const OptionInfoRec I810Options[] = {
{OPTION_YRGB_VPHASE, "SF_YRGB_VPhase",OPTV_INTEGER, {0}, FALSE},
{OPTION_UV_VPHASE, "SF_UV_VPhase", OPTV_INTEGER, {0}, FALSE},
{OPTION_SCHED_PRIO, "SF_SchedPrio", OPTV_INTEGER, {0}, FALSE},
- {OPTION_SYF_DEBUG, "SF_Debug", OPTV_BOOLEAN, {0}, FALSE},
+ {OPTION_SYF_DEBUG, "SF_Debug", OPTV_INTEGER, {0}, FALSE},
{-1, NULL, OPTV_NONE, {0}, FALSE}
};
/* *INDENT-ON* */
diff --git a/src/i830.h b/src/i830.h
index 895a5c5a..56ef3041 100644
--- a/src/i830.h
+++ b/src/i830.h
@@ -528,7 +528,7 @@ typedef struct _I830Rec {
int YRGB_vphase;
int UV_vphase;
int SchedPrio;
- Bool SYF_debug;
+ int SYF_debug;
/* EXA render state */
float scale_units[2][2];
diff --git a/src/i830_driver.c b/src/i830_driver.c
index 7de87691..98723aa7 100644
--- a/src/i830_driver.c
+++ b/src/i830_driver.c
@@ -352,7 +352,7 @@ static OptionInfoRec I830Options[] = {
{OPTION_YRGB_VPHASE, "SF_YRGB_VPhase",OPTV_INTEGER, {0}, FALSE},
{OPTION_UV_VPHASE, "SF_UV_VPhase", OPTV_INTEGER, {0}, FALSE},
{OPTION_SCHED_PRIO, "SF_SchedPrio", OPTV_INTEGER, {0}, FALSE},
- {OPTION_SYF_DEBUG, "SF_Debug", OPTV_BOOLEAN, {0}, FALSE},
+ {OPTION_SYF_DEBUG, "SF_Debug", OPTV_INTEGER, {0}, FALSE},
{-1, NULL, OPTV_NONE, {0}, FALSE}
};
/* *INDENT-ON* */
@@ -1721,11 +1721,11 @@ I830PreInit(ScrnInfoPtr pScrn, int flags)
&(pI830->SYF_debug))) {
from = X_CONFIG;
} else {
- pI830->SYF_debug = FALSE;
+ pI830->SYF_debug = 0;
from = X_DEFAULT;
}
- xf86DrvMsg(pScrn->scrnIndex, from, "sync fields debug %sactivated\n",
- pI830->SYF_debug ? "" : "de");
+ xf86DrvMsg(pScrn->scrnIndex, from, "sync fields debug %sactivated: %d\n",
+ pI830->SYF_debug ? "" : "de", pI830->SYF_debug);
}
/* --- SYNC FIELDS setup --- */
@@ -1831,9 +1831,12 @@ I830PreInit(ScrnInfoPtr pScrn, int flags)
xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Cannot support sync fields with current timing, disabled\n");
pI830->sync_fields = 0;
}
+
+#define MAX_SCHEDPRIO_1CORE -20
+
if (pI830->sync_fields) {
if (pI830->SchedPrio != ~0) {
- if (pI830->SchedPrio < -20) {
+ if (pI830->SchedPrio < MAX_SCHEDPRIO_1CORE) {
struct sched_param sched;
sched.sched_priority = -pI830->SchedPrio;
@@ -1865,15 +1868,14 @@ I830PreInit(ScrnInfoPtr pScrn, int flags)
if (f = fopen("/proc/cpuinfo", "r")) {
char buf[256];
while (fgets(buf, 255, f)) {
+#if 0 /* do not change the default priority at the moment */
sscanf(buf, "processor : %d", &cores);
+#endif
}
fclose(f);
}
-
-#define DFLT_SCHEDPRIO_1CORE -20
-
if (!cores) {
- if (setpriority(PRIO_PROCESS, 0, DFLT_SCHEDPRIO_1CORE)) {
+ if (setpriority(PRIO_PROCESS, 0, MAX_SCHEDPRIO_1CORE)) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"failed to set scheduling priority (single core system): %s\n", strerror(errno));
} else {
diff --git a/src/i830_video.c b/src/i830_video.c
index 5d14c5d7..deb16169 100644
--- a/src/i830_video.c
+++ b/src/i830_video.c
@@ -3117,6 +3117,7 @@ struct _I830_s {
#endif
+#include <time.h>
#include <unistd.h>
#define OC_FIELD (1 << 19)
@@ -3124,6 +3125,7 @@ struct _I830_s {
typedef struct _syf {
int cnt;
int trim;
+ int warn;
int drift;
int spoint;
} syf_t;
@@ -3233,10 +3235,10 @@ vga_sync_fields(pI830)
}
if (pI830->SYF_debug) {
if (abs(vbl_usec - vbl_usec_prev) > SYF_WARN_RANGE) {
- log_graph(vbl_usec - vbl_usec_prev, '%');
+ log_graph(vbl_usec - vbl_usec_prev, '%'); ++syf.warn;
}
if (abs(vbl_usec - SYF_SYNC_POINT) > SYF_WARN_RANGE) {
- log_graph(vbl_usec - SYF_SYNC_POINT, ':');
+ log_graph(vbl_usec - SYF_SYNC_POINT, ':'); ++syf.warn;
}
}
@@ -3269,14 +3271,25 @@ vga_sync_fields(pI830)
syf.trim = max(syf.trim, -SYF_MAX_TRIM_REL);
syf.trim = min(syf.trim, SYF_MAX_TRIM_REL);
if (pI830->SYF_debug) {
- log_graph(0, '+');
- log_graph(syf.spoint, '|');
- log_graph(syf.drift, '*');
- log_graph(0, 1);
- ErrorF("%7d %7d [%3d%+4d]\n", syf.drift, syf.spoint, (char)(trim & 0xff), syf.trim);
+ if (pI830->SYF_debug < 5 && syf.warn) {
+ time_t t;
+ struct tm *tm;
+
+ time(&t);
+ tm = localtime(&t);
+ ErrorF("%02d:%02d:%02d ", tm->tm_hour, tm->tm_min, tm->tm_sec);
+ }
+ if (pI830->SYF_debug < 5 && syf.warn || pI830->SYF_debug >= 5) {
+ log_graph(0, '+');
+ log_graph(syf.spoint, '|');
+ log_graph(syf.drift, '*');
+ log_graph(0, 1);
+ ErrorF("%7d %7d [%3d%+4d]\n", syf.drift, syf.spoint, (char)(trim & 0xff), syf.trim);
+ }
}
syf.spoint = 0;
syf.drift = 0;
+ syf.warn = 0;
}
if (B(1) && syf.trim) {
int t = (char)(trim & 0xff);