diff mbox

[i-g-t,1/2] lib/kms: Turn the based_edid into a template

Message ID 1449238110-30732-1-git-send-email-ville.syrjala@linux.intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Ville Syrjälä Dec. 4, 2015, 2:08 p.m. UTC
From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 lib/Makefile.sources    |  1 +
 lib/igt_edid_template.h | 74 ++++++++++++++++++++++++++++++++++++++++
 lib/igt_kms.c           | 90 +++++++++++--------------------------------------
 3 files changed, 95 insertions(+), 70 deletions(-)
 create mode 100644 lib/igt_edid_template.h

Comments

Thomas Wood Dec. 7, 2015, 4:38 p.m. UTC | #1
based_edid should be "base edid"?


On 4 December 2015 at 14:08,  <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  lib/Makefile.sources    |  1 +
>  lib/igt_edid_template.h | 74 ++++++++++++++++++++++++++++++++++++++++
>  lib/igt_kms.c           | 90 +++++++++++--------------------------------------
>  3 files changed, 95 insertions(+), 70 deletions(-)
>  create mode 100644 lib/igt_edid_template.h
>
> diff --git a/lib/Makefile.sources b/lib/Makefile.sources
> index cb20f030cbec..4999868052b1 100644
> --- a/lib/Makefile.sources
> +++ b/lib/Makefile.sources
> @@ -11,6 +11,7 @@ libintel_tools_la_SOURCES =   \
>         igt_debugfs.h           \
>         igt_aux.c               \
>         igt_aux.h               \
> +       igt_edid_template.h     \

Since this new header doesn't have any public API, please add it to
IGNORE_HFILES in docs/reference/intel-gpu-tools/Makefile.am


>         igt_gt.c                \
>         igt_gt.h                \
>         igt_stats.c             \
> diff --git a/lib/igt_edid_template.h b/lib/igt_edid_template.h
> new file mode 100644
> index 000000000000..de421e080a88
> --- /dev/null
> +++ b/lib/igt_edid_template.h
> @@ -0,0 +1,74 @@
> +#define GAMMA(x) (((x) * 100) - 100)
> +
> +#define MANUFACTURER_ID(a, b, c) (a - '@') << 2 | (b - '@') >> 3, \
> +                                (b - '@') << 5 | (c - '@')
> +
> +
> +#define ab(x, y) ((x) & 0xff), ((y) & 0xff), (((x) & 0xf00) >> 4) | (((y) & 0xf00) >> 8)
> +#define op(ho, hp, vo, vp) ((ho) & 0xff), ((hp) & 0xff), \
> +               (((vo) & 0xf) << 4) | ((vp) & 0xf), \
> +               (((ho) & 0x300) >> 2) | (((hp) & 0x300) >> 4) \
> +               | (((vo) & 0x30) >> 2) | ((vp) & 0x30 >> 4)
> +
> +static unsigned char EDID_NAME[EDID_LENGTH] = {
> +       0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, /* header */
> +       MANUFACTURER_ID('I', 'G', 'T'),
> +       /* product code, serial number, week and year of manufacture */
> +       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +       0x01, 0x03, /* edid version (1.3) */
> +       /* basic display parameters */
> +       /* digital display, maximum horizontal image size, maximum vertical
> +        * image size, gamma, features: RGB 4:4:4, native pixel format and
> +        * refresh rate in descriptor 1 */
> +       0x80, HSIZE, VSIZE, GAMMA(2.20), 0x02,
> +       /* chromaticity coordinates */
> +       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +       /* established timings: 640x480 60Hz, 800x600 60Hz, 1024x768 60Hz */
> +       0x21, 0x08, 0x00,
> +       /* standard timings */
> +       0xd1, 0xc0, /* 1920x1080 60Hz */
> +       0x81, 0xc0, /* 1280x720 60Hz */
> +       0x61, 0x40, /* 1024x768 60Hz */
> +       0x45, 0x40, /* 800x600 60Hz */
> +       0x31, 0x40, /* 640x480 60Hz */
> +       0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
> +       /* descriptor 1 (preferred timing) */
> +       (CLOCK / 10) & 0x00ff, ((CLOCK / 10) & 0xff00) >> 8,
> +       ab(HACTIVE, HBLANK), ab(VACTIVE, VBLANK),
> +       op(HOFFSET, HPULSE, VOFFSET, VPULSE),
> +       ab(HSIZE * 10, VSIZE * 10),
> +       0x00, 0x00, 0x00,
> +       /* descriptor 2 (monitor range limits) */
> +       0x00, 0x00, 0x00, 0xfd, 0x00,
> +       VFREQ - 1, VFREQ + 1, /* minimum, maximum vertical field rate */
> +       (CLOCK / (HACTIVE + HBLANK)) - 1, /* minimum horizontal line rate */
> +       (CLOCK / (HACTIVE + HBLANK)) + 1, /* maximum horizontal line rate */
> +       (CLOCK / 10000) + 1, /* maximum pixel clock rate */
> +       0x00, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
> +       /* descriptor 3 (name descriptor) */
> +       0x00, 0x00, 0x00, 0xfc, 0x00,  'I',  'G',  'T', 0x0a,
> +       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
> +       /* descriptor 4 */
> +       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> +       /* extensions, checksum */
> +       0x00, 0x00
> +};
> +
> +#undef EDID_NAME
> +#undef VFREQ
> +#undef CLOCK
> +#undef HACTIVE
> +#undef HBLANK
> +#undef VACTIVE
> +#undef VBLANK
> +#undef HOFFSET
> +#undef HPULSE
> +#undef VOFFSET
> +#undef VPULSE
> +#undef HSIZE
> +#undef VSIZE
> +#undef GAMMA
> +#undef MANUFACTURER_ID
> +#undef ab
> +#undef op
> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
> index fd4f05e81f3d..da49f5676641 100644
> --- a/lib/igt_kms.c
> +++ b/lib/igt_kms.c
> @@ -53,6 +53,23 @@
>  #define MAX_CONNECTORS 32
>  static char *forced_connectors[MAX_CONNECTORS + 1];
>
> +static void update_edid_csum(unsigned char *edid)
> +{
> +       int i, sum = 0;
> +       struct tm *tm;
> +       time_t t;
> +
> +       /* year of manufacture */
> +       t = time(NULL);
> +       tm = localtime(&t);
> +       edid[17] = tm->tm_year - 90;
> +
> +       /* calculate checksum */
> +       for (i = 0; i < 127; i++) {
> +               sum = sum + edid[i];
> +       }
> +       edid[127] = 256 - sum;
> +}
>
>  #define VFREQ 60
>  #define CLOCK 148500
> @@ -68,62 +85,8 @@ static char *forced_connectors[MAX_CONNECTORS + 1];
>  #define HSIZE 52
>  #define VSIZE 30
>
> -#define GAMMA(x) (x * 100) - 100
> -
> -#define MANUFACTURER_ID(a, b, c) (a - '@') << 2 | (b - '@') >> 3, \
> -                                (b - '@') << 5 | (c - '@')
> -
> -
> -#define ab(x, y) (x & 0xff), (y & 0xff), ((x & 0xf00) >> 4) | ((y & 0xf00) >> 8)
> -#define op(ho, hp, vo, vp) (ho & 0xff), (hp & 0xff), \
> -                          ((vo & 0xf) << 4) | (vp & 0xf), \
> -                          ((ho & 0x300) >> 2) | ((hp & 0x300) >> 4) \
> -                          | ((vo & 0x30) >> 2) | (vp & 0x30 >> 4)
> -
> -static unsigned char base_edid[EDID_LENGTH] = {
> -       0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, /* header */
> -       MANUFACTURER_ID('I', 'G', 'T'),
> -       /* product code, serial number, week and year of manufacture */
> -       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -       0x01, 0x03, /* edid version (1.3) */
> -       /* basic display parameters */
> -       /* digital display, maximum horizontal image size, maximum vertical
> -        * image size, gamma, features: RGB 4:4:4, native pixel format and
> -        * refresh rate in descriptor 1 */
> -       0x80, HSIZE, VSIZE, GAMMA(2.20), 0x02,
> -       /* chromaticity coordinates */
> -       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -       /* established timings: 640x480 60Hz, 800x600 60Hz, 1024x768 60Hz */
> -       0x21, 0x08, 0x00,
> -       /* standard timings */
> -       0xd1, 0xc0, /* 1920x1080 60Hz */
> -       0x81, 0xc0, /* 1280x720 60Hz */
> -       0x61, 0x40, /* 1024x768 60Hz */
> -       0x45, 0x40, /* 800x600 60Hz */
> -       0x31, 0x40, /* 640x480 60Hz */
> -       0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
> -       /* descriptor 1 (preferred timing) */
> -       (CLOCK / 10) & 0x00ff, ((CLOCK / 10) & 0xff00) >> 8,
> -       ab(HACTIVE, HBLANK), ab(VACTIVE, VBLANK),
> -       op(HOFFSET, HPULSE, VOFFSET, VPULSE),
> -       ab(HSIZE * 10, VSIZE * 10),
> -       0x00, 0x00, 0x00,
> -       /* descriptor 2 (monitor range limits) */
> -       0x00, 0x00, 0x00, 0xfd, 0x00,
> -       VFREQ - 1, VFREQ + 1, /* minimum, maximum vertical field rate */
> -       (CLOCK / (HACTIVE + HBLANK)) - 1, /* minimum horizontal line rate */
> -       (CLOCK / (HACTIVE + HBLANK)) + 1, /* maximum horizontal line rate */
> -       (CLOCK / 10000) + 1, /* maximum pixel clock rate */
> -       0x00, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
> -       /* descriptor 3 (name descriptor) */
> -       0x00, 0x00, 0x00, 0xfc, 0x00,  'I',  'G',  'T', 0x0a,
> -       0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
> -       /* descriptor 4 */
> -       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -       /* extensions, checksum */
> -       0x00, 0x00
> -};
> +#define EDID_NAME base_edid
> +#include "igt_edid_template.h"
>
>  /**
>   * igt_kms_get_base_edid:
> @@ -143,20 +106,7 @@ static unsigned char base_edid[EDID_LENGTH] = {
>   */
>  const unsigned char* igt_kms_get_base_edid(void)
>  {
> -       int i, sum = 0;
> -       struct tm *tm;
> -       time_t t;
> -
> -       /* year of manufacture */
> -       t = time(NULL);
> -       tm = localtime(&t);
> -       base_edid[17] = tm->tm_year - 90;
> -
> -       /* calculate checksum */
> -       for (i = 0; i < 127; i++) {
> -               sum = sum + base_edid[i];
> -       }
> -       base_edid[127] = 256 - sum;
> +       update_edid_csum(base_edid);
>
>         return base_edid;
>  }
> --
> 2.4.10
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff mbox

Patch

diff --git a/lib/Makefile.sources b/lib/Makefile.sources
index cb20f030cbec..4999868052b1 100644
--- a/lib/Makefile.sources
+++ b/lib/Makefile.sources
@@ -11,6 +11,7 @@  libintel_tools_la_SOURCES = 	\
 	igt_debugfs.h		\
 	igt_aux.c		\
 	igt_aux.h		\
+	igt_edid_template.h	\
 	igt_gt.c		\
 	igt_gt.h		\
 	igt_stats.c		\
diff --git a/lib/igt_edid_template.h b/lib/igt_edid_template.h
new file mode 100644
index 000000000000..de421e080a88
--- /dev/null
+++ b/lib/igt_edid_template.h
@@ -0,0 +1,74 @@ 
+#define GAMMA(x) (((x) * 100) - 100)
+
+#define MANUFACTURER_ID(a, b, c) (a - '@') << 2 | (b - '@') >> 3, \
+				 (b - '@') << 5 | (c - '@')
+
+
+#define ab(x, y) ((x) & 0xff), ((y) & 0xff), (((x) & 0xf00) >> 4) | (((y) & 0xf00) >> 8)
+#define op(ho, hp, vo, vp) ((ho) & 0xff), ((hp) & 0xff), \
+		(((vo) & 0xf) << 4) | ((vp) & 0xf), \
+		(((ho) & 0x300) >> 2) | (((hp) & 0x300) >> 4) \
+		| (((vo) & 0x30) >> 2) | ((vp) & 0x30 >> 4)
+
+static unsigned char EDID_NAME[EDID_LENGTH] = {
+	0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, /* header */
+	MANUFACTURER_ID('I', 'G', 'T'),
+	/* product code, serial number, week and year of manufacture */
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x01, 0x03, /* edid version (1.3) */
+	/* basic display parameters */
+	/* digital display, maximum horizontal image size, maximum vertical
+	 * image size, gamma, features: RGB 4:4:4, native pixel format and
+	 * refresh rate in descriptor 1 */
+	0x80, HSIZE, VSIZE, GAMMA(2.20), 0x02,
+	/* chromaticity coordinates */
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	/* established timings: 640x480 60Hz, 800x600 60Hz, 1024x768 60Hz */
+	0x21, 0x08, 0x00,
+	/* standard timings */
+	0xd1, 0xc0, /* 1920x1080 60Hz */
+	0x81, 0xc0, /* 1280x720 60Hz */
+	0x61, 0x40, /* 1024x768 60Hz */
+	0x45, 0x40, /* 800x600 60Hz */
+	0x31, 0x40, /* 640x480 60Hz */
+	0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+	/* descriptor 1 (preferred timing) */
+	(CLOCK / 10) & 0x00ff, ((CLOCK / 10) & 0xff00) >> 8,
+	ab(HACTIVE, HBLANK), ab(VACTIVE, VBLANK),
+	op(HOFFSET, HPULSE, VOFFSET, VPULSE),
+	ab(HSIZE * 10, VSIZE * 10),
+	0x00, 0x00, 0x00,
+	/* descriptor 2 (monitor range limits) */
+	0x00, 0x00, 0x00, 0xfd, 0x00,
+	VFREQ - 1, VFREQ + 1, /* minimum, maximum vertical field rate */
+	(CLOCK / (HACTIVE + HBLANK)) - 1, /* minimum horizontal line rate */
+	(CLOCK / (HACTIVE + HBLANK)) + 1, /* maximum horizontal line rate */
+	(CLOCK / 10000) + 1, /* maximum pixel clock rate */
+	0x00, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+	/* descriptor 3 (name descriptor) */
+	0x00, 0x00, 0x00, 0xfc, 0x00,  'I',  'G',  'T', 0x0a,
+	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+	/* descriptor 4 */
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	/* extensions, checksum */
+	0x00, 0x00
+};
+
+#undef EDID_NAME
+#undef VFREQ
+#undef CLOCK
+#undef HACTIVE
+#undef HBLANK
+#undef VACTIVE
+#undef VBLANK
+#undef HOFFSET
+#undef HPULSE
+#undef VOFFSET
+#undef VPULSE
+#undef HSIZE
+#undef VSIZE
+#undef GAMMA
+#undef MANUFACTURER_ID
+#undef ab
+#undef op
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index fd4f05e81f3d..da49f5676641 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -53,6 +53,23 @@ 
 #define MAX_CONNECTORS 32
 static char *forced_connectors[MAX_CONNECTORS + 1];
 
+static void update_edid_csum(unsigned char *edid)
+{
+	int i, sum = 0;
+	struct tm *tm;
+	time_t t;
+
+	/* year of manufacture */
+	t = time(NULL);
+	tm = localtime(&t);
+	edid[17] = tm->tm_year - 90;
+
+	/* calculate checksum */
+	for (i = 0; i < 127; i++) {
+		sum = sum + edid[i];
+	}
+	edid[127] = 256 - sum;
+}
 
 #define VFREQ 60
 #define CLOCK 148500
@@ -68,62 +85,8 @@  static char *forced_connectors[MAX_CONNECTORS + 1];
 #define HSIZE 52
 #define VSIZE 30
 
-#define GAMMA(x) (x * 100) - 100
-
-#define MANUFACTURER_ID(a, b, c) (a - '@') << 2 | (b - '@') >> 3, \
-				 (b - '@') << 5 | (c - '@')
-
-
-#define ab(x, y) (x & 0xff), (y & 0xff), ((x & 0xf00) >> 4) | ((y & 0xf00) >> 8)
-#define op(ho, hp, vo, vp) (ho & 0xff), (hp & 0xff), \
-			   ((vo & 0xf) << 4) | (vp & 0xf), \
-			   ((ho & 0x300) >> 2) | ((hp & 0x300) >> 4) \
-			   | ((vo & 0x30) >> 2) | (vp & 0x30 >> 4)
-
-static unsigned char base_edid[EDID_LENGTH] = {
-	0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, /* header */
-	MANUFACTURER_ID('I', 'G', 'T'),
-	/* product code, serial number, week and year of manufacture */
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x01, 0x03, /* edid version (1.3) */
-	/* basic display parameters */
-	/* digital display, maximum horizontal image size, maximum vertical
-	 * image size, gamma, features: RGB 4:4:4, native pixel format and
-	 * refresh rate in descriptor 1 */
-	0x80, HSIZE, VSIZE, GAMMA(2.20), 0x02,
-	/* chromaticity coordinates */
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	/* established timings: 640x480 60Hz, 800x600 60Hz, 1024x768 60Hz */
-	0x21, 0x08, 0x00,
-	/* standard timings */
-	0xd1, 0xc0, /* 1920x1080 60Hz */
-	0x81, 0xc0, /* 1280x720 60Hz */
-	0x61, 0x40, /* 1024x768 60Hz */
-	0x45, 0x40, /* 800x600 60Hz */
-	0x31, 0x40, /* 640x480 60Hz */
-	0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-	/* descriptor 1 (preferred timing) */
-	(CLOCK / 10) & 0x00ff, ((CLOCK / 10) & 0xff00) >> 8,
-	ab(HACTIVE, HBLANK), ab(VACTIVE, VBLANK),
-	op(HOFFSET, HPULSE, VOFFSET, VPULSE),
-	ab(HSIZE * 10, VSIZE * 10),
-	0x00, 0x00, 0x00,
-	/* descriptor 2 (monitor range limits) */
-	0x00, 0x00, 0x00, 0xfd, 0x00,
-	VFREQ - 1, VFREQ + 1, /* minimum, maximum vertical field rate */
-	(CLOCK / (HACTIVE + HBLANK)) - 1, /* minimum horizontal line rate */
-	(CLOCK / (HACTIVE + HBLANK)) + 1, /* maximum horizontal line rate */
-	(CLOCK / 10000) + 1, /* maximum pixel clock rate */
-	0x00, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-	/* descriptor 3 (name descriptor) */
-	0x00, 0x00, 0x00, 0xfc, 0x00,  'I',  'G',  'T', 0x0a,
-	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-	/* descriptor 4 */
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	/* extensions, checksum */
-	0x00, 0x00
-};
+#define EDID_NAME base_edid
+#include "igt_edid_template.h"
 
 /**
  * igt_kms_get_base_edid:
@@ -143,20 +106,7 @@  static unsigned char base_edid[EDID_LENGTH] = {
  */
 const unsigned char* igt_kms_get_base_edid(void)
 {
-	int i, sum = 0;
-	struct tm *tm;
-	time_t t;
-
-	/* year of manufacture */
-	t = time(NULL);
-	tm = localtime(&t);
-	base_edid[17] = tm->tm_year - 90;
-
-	/* calculate checksum */
-	for (i = 0; i < 127; i++) {
-		sum = sum + base_edid[i];
-	}
-	base_edid[127] = 256 - sum;
+	update_edid_csum(base_edid);
 
 	return base_edid;
 }