summaryrefslogtreecommitdiff
AgeCommit message (Expand)Author
2009-02-10drm/nv50: use a slightly different initial context for nv96Ben Skeggs
2009-02-10drm/nv50: correct ramfc pointer in channel headerBen Skeggs
2009-02-10drm/nv50: let the card handle the initial context switchBen Skeggs
2009-02-07nouveau: don't try to traverse non-existent listsStuart Bennett
2009-02-05nouveau: fix some issues where buffer objects never get freedBen Skeggs
2009-02-04modetest: Add syntax to also specify a crtc when setting a mode.Kristian Høgsberg
2009-02-04nouveau: install libdrm_nouveau with libdrmBen Skeggs
2009-02-04nouveau: bring in new mm api definitions, without the actual mm codeBen Skeggs
2009-02-03modetest: Use cairo (if available) to paint a better pattern.Kristian Høgsberg
2009-02-03modetest: Don't sleep when just dumping state, wait for key for modeset.Kristian Høgsberg
2009-02-03modetest: Handle setting modes on multiple crtcs with one fb.Kristian Høgsberg
2009-02-03modetest: Use a more interesting test pattern.Kristian Høgsberg
2009-02-02Remove the "nv" driver.Stephane Marchesin
2009-02-02No need to pin buffer anymore in modetest.cKristian Høgsberg
2009-01-29nouveau: don't save channel context if it has recently become invalidStuart Bennett
2009-01-29nouveau: no suspend support for nv50+Stuart Bennett
2009-01-27Clean up README for the current state of kernel module affairs.Eric Anholt
2009-01-27intel: don't count fences on 965 and later, as they don't use them.Eric Anholt
2009-01-27intel: Fix under-counting of fences registers required in check_aperture.Eric Anholt
2009-01-27intel: libdrm support for fence management in execbufJesse Barnes
2009-01-27drm compat: fix euid for >=2.6.28Pekka Paalanen
2009-01-27nv50: support chipset NV96Ben Skeggs
2009-01-27nv04-nv40: correct RAMHT sizeBen Skeggs
2009-01-19drm: remove drmstat/dristat from linux-core buildDave Airlie
2009-01-14bump version to 2.4.4Eric Anholt
2009-01-14intel: Retry pin ioctl on -EINTR.Eric Anholt
2009-01-13Don't use DRM_BO_FLAG_NO_MOVE in bufmgr fake. It's a ttm flag.Owain G. Ainsworth
2009-01-12Remove drmModeReplaceFb after it was removed from the kernel.Owain G. Ainsworth
2009-01-12nv50: ack nsource to prevent continuous protection fault irqsBen Skeggs
2009-01-07libdrm: add autoconf check for clock_gettimeJesse Barnes
2009-01-07libdrm: only check for vblank timeout if we caught EINTRJesse Barnes
2009-01-07libdrm: add timeout handling to drmWaitVBlankJesse Barnes
2008-12-29Remove executable from modeprint test dirJesse Barnes
2008-12-23[FreeBSD] Fix build on FreeBSD after modesetting import.Robert Noland
2008-12-23radeon: only write irq regs if irq is enabledDave Airlie
2008-12-22intel: Rename plane[AB]* back to pipe[AB]*.Eric Anholt
2008-12-22intel: Remove linux build of i915 DRM, as it's unmaintained and a user trap.Eric Anholt
2008-12-22intel: Sync GEM ioctl comments for easier diffing against the kernel.Eric Anholt
2008-12-18modetest: Print more stuff. Prettier.Kristian Høgsberg
2008-12-17libdrm: Fix modetest/modeprint to use automake stuff.Eric Anholt
2008-12-17intel: Cache tiling/swizzle state in user mode. Reset tiling on reuse.Keith Packard
2008-12-17intel: Debug output %u vs uint64_t warning fixKeith Packard
2008-12-17intel: return error status from drm_intel_gem_bo_mapKeith Packard
2008-12-17intel: Dump out memory usage information when the kernel fails to pinKeith Packard
2008-12-17libdrm: add mode setting filesJesse Barnes
2008-12-14intel: don't skip set_domain on mapping of shared buffers.Eric Anholt
2008-12-14intel: don't let named buffers into the BO cache.Eric Anholt
2008-12-14intel: Remove the mapped flag, which is adequately covered by bo_gem->virtual.Eric Anholt
2008-12-10Revert "Merge branch 'modesetting-gem'"Jesse Barnes
2008-12-10Bump version to 2.4.3 to reflect addition of mode setting headerJesse Barnes
n356'>356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401
/* From Linux kernel: drm_edid.c */
/*
 * Copyright (c) 2006 Luc Verhaegen (quirks list)
 * Copyright (c) 2007-2008 Intel Corporation
 *   Jesse Barnes <jesse.barnes@intel.com>
 * Copyright 2010 Red Hat, Inc.
 *
 * DDC probing routines (drm_ddc_read & drm_do_probe_ddc_edid) originally from
 * FB layer.
 *   Copyright (C) 2006 Dennis Munsie <dmunsie@cecropia.com>
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sub license,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice (including the
 * next paragraph) shall be included in all copies or substantial portions
 * of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 */

#include "modedb.h"

#include <xf86drm.h>

namespace kms
{

#define DIV_ROUND(n, d) (((n) + (d) / 2) / (d))

#define DRM_MODE(nm, c, hd, hss, hse, ht, hsk, vd, vss, vse, vt, vs, f) \
	.name = nm, .clock = (c), \
	.hdisplay = (hd), .hsync_start = (hss), .hsync_end = (hse), .htotal = (ht), .hskew = (hsk), \
	.vdisplay = (vd), .vsync_start = (vss), .vsync_end = (vse), .vtotal = (vt), .vscan = (vs), \
	.vrefresh = DIV_ROUND(c * 1000, ht * vt), .flags = (f), .type = 0

/*
 * Probably taken from CEA-861 spec.
 * This table is converted from xorg's hw/xfree86/modes/xf86EdidModes.c.
 */
const Videomode cea_modes[] = {
	/* 1 - 640x480@60Hz */
	{ DRM_MODE("640x480", 25175, 640, 656,
	  752, 800, 0, 480, 490, 492, 525, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
	},
	/* 2 - 720x480@60Hz */
	{ DRM_MODE("720x480", 27000, 720, 736,
	  798, 858, 0, 480, 489, 495, 525, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
	},
	/* 3 - 720x480@60Hz */
	{ DRM_MODE("720x480", 27000, 720, 736,
	  798, 858, 0, 480, 489, 495, 525, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
	},
	/* 4 - 1280x720@60Hz */
	{ DRM_MODE("1280x720", 74250, 1280, 1390,
	  1430, 1650, 0, 720, 725, 730, 750, 0,
	  DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
	},
	/* 5 - 1920x1080i@60Hz */
	{ DRM_MODE("1920x1080i", 74250, 1920, 2008,
	  2052, 2200, 0, 1080, 1084, 1094, 1125, 0,
	  DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
	  DRM_MODE_FLAG_INTERLACE),
	},
	/* 6 - 720(1440)x480i@60Hz */
	{ DRM_MODE("720x480i", 13500, 720, 739,
	  801, 858, 0, 480, 488, 494, 525, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
	  DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
	},
	/* 7 - 720(1440)x480i@60Hz */
	{ DRM_MODE("720x480i", 13500, 720, 739,
	  801, 858, 0, 480, 488, 494, 525, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
	  DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
	},
	/* 8 - 720(1440)x240@60Hz */
	{ DRM_MODE("720x240", 13500, 720, 739,
	  801, 858, 0, 240, 244, 247, 262, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
	  DRM_MODE_FLAG_DBLCLK),
	},
	/* 9 - 720(1440)x240@60Hz */
	{ DRM_MODE("720x240", 13500, 720, 739,
	  801, 858, 0, 240, 244, 247, 262, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
	  DRM_MODE_FLAG_DBLCLK),
	},
	/* 10 - 2880x480i@60Hz */
	{ DRM_MODE("2880x480i", 54000, 2880, 2956,
	  3204, 3432, 0, 480, 488, 494, 525, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
	  DRM_MODE_FLAG_INTERLACE),
	},
	/* 11 - 2880x480i@60Hz */
	{ DRM_MODE("2880x480i", 54000, 2880, 2956,
	  3204, 3432, 0, 480, 488, 494, 525, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
	  DRM_MODE_FLAG_INTERLACE),
	},
	/* 12 - 2880x240@60Hz */
	{ DRM_MODE("2880x240", 54000, 2880, 2956,
	  3204, 3432, 0, 240, 244, 247, 262, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
	},
	/* 13 - 2880x240@60Hz */
	{ DRM_MODE("2880x240", 54000, 2880, 2956,
	  3204, 3432, 0, 240, 244, 247, 262, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
	},
	/* 14 - 1440x480@60Hz */
	{ DRM_MODE("1440x480", 54000, 1440, 1472,
	  1596, 1716, 0, 480, 489, 495, 525, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
	},
	/* 15 - 1440x480@60Hz */
	{ DRM_MODE("1440x480", 54000, 1440, 1472,
	  1596, 1716, 0, 480, 489, 495, 525, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
	},
	/* 16 - 1920x1080@60Hz */
	{ DRM_MODE("1920x1080", 148500, 1920, 2008,
	  2052, 2200, 0, 1080, 1084, 1089, 1125, 0,
	  DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
	},
	/* 17 - 720x576@50Hz */
	{ DRM_MODE("720x576", 27000, 720, 732,
	  796, 864, 0, 576, 581, 586, 625, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
	},
	/* 18 - 720x576@50Hz */
	{ DRM_MODE("720x576", 27000, 720, 732,
	  796, 864, 0, 576, 581, 586, 625, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
	},
	/* 19 - 1280x720@50Hz */
	{ DRM_MODE("1280x720", 74250, 1280, 1720,
	  1760, 1980, 0, 720, 725, 730, 750, 0,
	  DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
	},
	/* 20 - 1920x1080i@50Hz */
	{ DRM_MODE("1920x1080i", 74250, 1920, 2448,
	  2492, 2640, 0, 1080, 1084, 1094, 1125, 0,
	  DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
	  DRM_MODE_FLAG_INTERLACE),
	},
	/* 21 - 720(1440)x576i@50Hz */
	{ DRM_MODE("720x576i", 13500, 720, 732,
	  795, 864, 0, 576, 580, 586, 625, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
	  DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
	},
	/* 22 - 720(1440)x576i@50Hz */
	{ DRM_MODE("720x576i", 13500, 720, 732,
	  795, 864, 0, 576, 580, 586, 625, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
	  DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
	},
	/* 23 - 720(1440)x288@50Hz */
	{ DRM_MODE("720x288", 13500, 720, 732,
	  795, 864, 0, 288, 290, 293, 312, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
	  DRM_MODE_FLAG_DBLCLK),
	},
	/* 24 - 720(1440)x288@50Hz */
	{ DRM_MODE("720x288", 13500, 720, 732,
	  795, 864, 0, 288, 290, 293, 312, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
	  DRM_MODE_FLAG_DBLCLK),
	},
	/* 25 - 2880x576i@50Hz */
	{ DRM_MODE("2880x576i", 54000, 2880, 2928,
	  3180, 3456, 0, 576, 580, 586, 625, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
	  DRM_MODE_FLAG_INTERLACE),
	},
	/* 26 - 2880x576i@50Hz */
	{ DRM_MODE("2880x576i", 54000, 2880, 2928,
	  3180, 3456, 0, 576, 580, 586, 625, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
	  DRM_MODE_FLAG_INTERLACE),
	},
	/* 27 - 2880x288@50Hz */
	{ DRM_MODE("2880x288", 54000, 2880, 2928,
	  3180, 3456, 0, 288, 290, 293, 312, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
	},
	/* 28 - 2880x288@50Hz */
	{ DRM_MODE("2880x288", 54000, 2880, 2928,
	  3180, 3456, 0, 288, 290, 293, 312, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
	},
	/* 29 - 1440x576@50Hz */
	{ DRM_MODE("1440x576", 54000, 1440, 1464,
	  1592, 1728, 0, 576, 581, 586, 625, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
	},
	/* 30 - 1440x576@50Hz */
	{ DRM_MODE("1440x576", 54000, 1440, 1464,
	  1592, 1728, 0, 576, 581, 586, 625, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
	},
	/* 31 - 1920x1080@50Hz */
	{ DRM_MODE("1920x1080", 148500, 1920, 2448,
	  2492, 2640, 0, 1080, 1084, 1089, 1125, 0,
	  DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
	},
	/* 32 - 1920x1080@24Hz */
	{ DRM_MODE("1920x1080", 74250, 1920, 2558,
	  2602, 2750, 0, 1080, 1084, 1089, 1125, 0,
	  DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
	},
	/* 33 - 1920x1080@25Hz */
	{ DRM_MODE("1920x1080", 74250, 1920, 2448,
	  2492, 2640, 0, 1080, 1084, 1089, 1125, 0,
	  DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
	},
	/* 34 - 1920x1080@30Hz */
	{ DRM_MODE("1920x1080", 74250, 1920, 2008,
	  2052, 2200, 0, 1080, 1084, 1089, 1125, 0,
	  DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
	},
	/* 35 - 2880x480@60Hz */
	{ DRM_MODE("2880x480", 108000, 2880, 2944,
	  3192, 3432, 0, 480, 489, 495, 525, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
	},
	/* 36 - 2880x480@60Hz */
	{ DRM_MODE("2880x480", 108000, 2880, 2944,
	  3192, 3432, 0, 480, 489, 495, 525, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
	},
	/* 37 - 2880x576@50Hz */
	{ DRM_MODE("2880x576", 108000, 2880, 2928,
	  3184, 3456, 0, 576, 581, 586, 625, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
	},
	/* 38 - 2880x576@50Hz */
	{ DRM_MODE("2880x576", 108000, 2880, 2928,
	  3184, 3456, 0, 576, 581, 586, 625, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
	},
	/* 39 - 1920x1080i@50Hz */
	{ DRM_MODE("1920x1080i", 72000, 1920, 1952,
	  2120, 2304, 0, 1080, 1126, 1136, 1250, 0,
	  DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC |
	  DRM_MODE_FLAG_INTERLACE),
	},
	/* 40 - 1920x1080i@100Hz */
	{ DRM_MODE("1920x1080i", 148500, 1920, 2448,
	  2492, 2640, 0, 1080, 1084, 1094, 1125, 0,
	  DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
	  DRM_MODE_FLAG_INTERLACE),
	},
	/* 41 - 1280x720@100Hz */
	{ DRM_MODE("1280x720", 148500, 1280, 1720,
	  1760, 1980, 0, 720, 725, 730, 750, 0,
	  DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
	},
	/* 42 - 720x576@100Hz */
	{ DRM_MODE("720x576", 54000, 720, 732,
	  796, 864, 0, 576, 581, 586, 625, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
	},
	/* 43 - 720x576@100Hz */
	{ DRM_MODE("720x576", 54000, 720, 732,
	  796, 864, 0, 576, 581, 586, 625, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
	},
	/* 44 - 720(1440)x576i@100Hz */
	{ DRM_MODE("720x576i", 27000, 720, 732,
	  795, 864, 0, 576, 580, 586, 625, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
	  DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
	},
	/* 45 - 720(1440)x576i@100Hz */
	{ DRM_MODE("720x576i", 27000, 720, 732,
	  795, 864, 0, 576, 580, 586, 625, 0,
	  DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC |
	  DRM_MODE_FLAG_INTERLACE | DRM_MODE_FLAG_DBLCLK),
	},
	/* 46 - 1920x1080i@120Hz */
	{ DRM_MODE("1920x1080i", 148500, 1920, 2008,
	  2052, 2200, 0, 1080, 1084, 1094, 1125, 0,
	  DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
	  DRM_MODE_FLAG_INTERLACE),
	},
	/* 47 - 1280x720@120Hz */
	{ DRM_MODE("1280x720", 148500, 1280, 1390,
	  1430, 1650, 0, 720, 725, 730, 750, 0,
	  DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC),
	},
	/* 48 - 720x480@120Hz */
	{ DRM_MODE("720x480", 54000, 720, 736,