Update to Intel driver 2.2.1. But change default accelmethod to XAA.
Tested by landry@, oga@, steven@, jakemsr@.
This commit is contained in:
parent
da6f5be7c3
commit
67a3a88d68
20
driver/xf86-video-intel/configure
vendored
20
driver/xf86-video-intel/configure
vendored
@ -1,6 +1,6 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Guess values for system-dependent variables and create Makefiles.
|
# Guess values for system-dependent variables and create Makefiles.
|
||||||
# Generated by GNU Autoconf 2.59 for xf86-video-intel 2.2.0.90.
|
# Generated by GNU Autoconf 2.59 for xf86-video-intel 2.2.1.
|
||||||
#
|
#
|
||||||
# Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>.
|
# Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>.
|
||||||
#
|
#
|
||||||
@ -423,8 +423,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
|
|||||||
# Identity of this package.
|
# Identity of this package.
|
||||||
PACKAGE_NAME='xf86-video-intel'
|
PACKAGE_NAME='xf86-video-intel'
|
||||||
PACKAGE_TARNAME='xf86-video-intel'
|
PACKAGE_TARNAME='xf86-video-intel'
|
||||||
PACKAGE_VERSION='2.2.0.90'
|
PACKAGE_VERSION='2.2.1'
|
||||||
PACKAGE_STRING='xf86-video-intel 2.2.0.90'
|
PACKAGE_STRING='xf86-video-intel 2.2.1'
|
||||||
PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg'
|
PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg'
|
||||||
|
|
||||||
ac_unique_file="Makefile.am"
|
ac_unique_file="Makefile.am"
|
||||||
@ -990,7 +990,7 @@ if test "$ac_init_help" = "long"; then
|
|||||||
# Omit some internal or obsolete options to make the list less imposing.
|
# Omit some internal or obsolete options to make the list less imposing.
|
||||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||||
cat <<_ACEOF
|
cat <<_ACEOF
|
||||||
\`configure' configures xf86-video-intel 2.2.0.90 to adapt to many kinds of systems.
|
\`configure' configures xf86-video-intel 2.2.1 to adapt to many kinds of systems.
|
||||||
|
|
||||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||||
|
|
||||||
@ -1056,7 +1056,7 @@ fi
|
|||||||
|
|
||||||
if test -n "$ac_init_help"; then
|
if test -n "$ac_init_help"; then
|
||||||
case $ac_init_help in
|
case $ac_init_help in
|
||||||
short | recursive ) echo "Configuration of xf86-video-intel 2.2.0.90:";;
|
short | recursive ) echo "Configuration of xf86-video-intel 2.2.1:";;
|
||||||
esac
|
esac
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
|
|
||||||
@ -1218,7 +1218,7 @@ fi
|
|||||||
test -n "$ac_init_help" && exit 0
|
test -n "$ac_init_help" && exit 0
|
||||||
if $ac_init_version; then
|
if $ac_init_version; then
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
xf86-video-intel configure 2.2.0.90
|
xf86-video-intel configure 2.2.1
|
||||||
generated by GNU Autoconf 2.59
|
generated by GNU Autoconf 2.59
|
||||||
|
|
||||||
Copyright (C) 2003 Free Software Foundation, Inc.
|
Copyright (C) 2003 Free Software Foundation, Inc.
|
||||||
@ -1232,7 +1232,7 @@ cat >&5 <<_ACEOF
|
|||||||
This file contains any messages produced by compilers while
|
This file contains any messages produced by compilers while
|
||||||
running configure, to aid debugging if configure makes a mistake.
|
running configure, to aid debugging if configure makes a mistake.
|
||||||
|
|
||||||
It was created by xf86-video-intel $as_me 2.2.0.90, which was
|
It was created by xf86-video-intel $as_me 2.2.1, which was
|
||||||
generated by GNU Autoconf 2.59. Invocation command line was
|
generated by GNU Autoconf 2.59. Invocation command line was
|
||||||
|
|
||||||
$ $0 $@
|
$ $0 $@
|
||||||
@ -1835,7 +1835,7 @@ fi
|
|||||||
|
|
||||||
# Define the identity of the package.
|
# Define the identity of the package.
|
||||||
PACKAGE='xf86-video-intel'
|
PACKAGE='xf86-video-intel'
|
||||||
VERSION='2.2.0.90'
|
VERSION='2.2.1'
|
||||||
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
cat >>confdefs.h <<_ACEOF
|
||||||
@ -21878,7 +21878,7 @@ _ASBOX
|
|||||||
} >&5
|
} >&5
|
||||||
cat >&5 <<_CSEOF
|
cat >&5 <<_CSEOF
|
||||||
|
|
||||||
This file was extended by xf86-video-intel $as_me 2.2.0.90, which was
|
This file was extended by xf86-video-intel $as_me 2.2.1, which was
|
||||||
generated by GNU Autoconf 2.59. Invocation command line was
|
generated by GNU Autoconf 2.59. Invocation command line was
|
||||||
|
|
||||||
CONFIG_FILES = $CONFIG_FILES
|
CONFIG_FILES = $CONFIG_FILES
|
||||||
@ -21941,7 +21941,7 @@ _ACEOF
|
|||||||
|
|
||||||
cat >>$CONFIG_STATUS <<_ACEOF
|
cat >>$CONFIG_STATUS <<_ACEOF
|
||||||
ac_cs_version="\\
|
ac_cs_version="\\
|
||||||
xf86-video-intel config.status 2.2.0.90
|
xf86-video-intel config.status 2.2.1
|
||||||
configured by $0, generated by GNU Autoconf 2.59,
|
configured by $0, generated by GNU Autoconf 2.59,
|
||||||
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
|
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
AC_PREREQ(2.57)
|
AC_PREREQ(2.57)
|
||||||
AC_INIT([xf86-video-intel],
|
AC_INIT([xf86-video-intel],
|
||||||
2.2.0.90,
|
2.2.1,
|
||||||
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
|
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
|
||||||
xf86-video-intel)
|
xf86-video-intel)
|
||||||
|
|
||||||
|
@ -441,6 +441,8 @@ extern int I810_DEBUG;
|
|||||||
#define IS_MOBILE(pI810) (IS_I830(pI810) || IS_I85X(pI810) || IS_I915GM(pI810) || IS_I945GM(pI810) || IS_I965GM(pI810) || IS_IGD_GM(pI810))
|
#define IS_MOBILE(pI810) (IS_I830(pI810) || IS_I85X(pI810) || IS_I915GM(pI810) || IS_I945GM(pI810) || IS_I965GM(pI810) || IS_IGD_GM(pI810))
|
||||||
/* mark chipsets for using gfx VM offset for overlay */
|
/* mark chipsets for using gfx VM offset for overlay */
|
||||||
#define OVERLAY_NOPHYSICAL(pI810) (IS_G33CLASS(pI810))
|
#define OVERLAY_NOPHYSICAL(pI810) (IS_G33CLASS(pI810))
|
||||||
|
/* chipsets require graphics mem for hardware status page */
|
||||||
|
#define HWS_NEED_GFX(pI810) (IS_G33CLASS(pI810) || IS_IGD_GM(pI810))
|
||||||
|
|
||||||
#define GTT_PAGE_SIZE KB(4)
|
#define GTT_PAGE_SIZE KB(4)
|
||||||
#define ROUND_TO(x, y) (((x) + (y) - 1) / (y) * (y))
|
#define ROUND_TO(x, y) (((x) + (y) - 1) / (y) * (y))
|
||||||
|
@ -365,7 +365,10 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||||||
|
|
||||||
#define CACHE_MODE_0 0x2120
|
#define CACHE_MODE_0 0x2120
|
||||||
#define CACHE_MODE_1 0x2124
|
#define CACHE_MODE_1 0x2124
|
||||||
|
#define MI_MODE 0x209c
|
||||||
|
#define MI_DISPLAY_POWER_DOWN 0x20e0
|
||||||
#define MI_ARB_STATE 0x20e4
|
#define MI_ARB_STATE 0x20e4
|
||||||
|
#define MI_RDRET_STATE 0x20fc
|
||||||
|
|
||||||
/* Start addresses for each of the primary rings:
|
/* Start addresses for each of the primary rings:
|
||||||
*/
|
*/
|
||||||
@ -976,6 +979,13 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||||||
|
|
||||||
#define D_STATE 0x6104
|
#define D_STATE 0x6104
|
||||||
#define DSPCLK_GATE_D 0x6200
|
#define DSPCLK_GATE_D 0x6200
|
||||||
|
# define DPUNIT_B_CLOCK_GATE_DISABLE (1 << 30) /* 965 */
|
||||||
|
# define VSUNIT_CLOCK_GATE_DISABLE (1 << 29) /* 965 */
|
||||||
|
# define VRHUNIT_CLOCK_GATE_DISABLE (1 << 28) /* 965 */
|
||||||
|
# define VRDUNIT_CLOCK_GATE_DISABLE (1 << 27) /* 965 */
|
||||||
|
# define AUDUNIT_CLOCK_GATE_DISABLE (1 << 26) /* 965 */
|
||||||
|
# define DPUNIT_A_CLOCK_GATE_DISABLE (1 << 25) /* 965 */
|
||||||
|
# define DPCUNIT_CLOCK_GATE_DISABLE (1 << 24) /* 965 */
|
||||||
# define TVRUNIT_CLOCK_GATE_DISABLE (1 << 23) /* 915-945 */
|
# define TVRUNIT_CLOCK_GATE_DISABLE (1 << 23) /* 915-945 */
|
||||||
# define TVCUNIT_CLOCK_GATE_DISABLE (1 << 22) /* 915-945 */
|
# define TVCUNIT_CLOCK_GATE_DISABLE (1 << 22) /* 915-945 */
|
||||||
# define TVFUNIT_CLOCK_GATE_DISABLE (1 << 21) /* 915-945 */
|
# define TVFUNIT_CLOCK_GATE_DISABLE (1 << 21) /* 915-945 */
|
||||||
@ -990,7 +1000,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||||||
# define DPLUNIT_CLOCK_GATE_DISABLE (1 << 12) /* 915-945 */
|
# define DPLUNIT_CLOCK_GATE_DISABLE (1 << 12) /* 915-945 */
|
||||||
# define DPOUNIT_CLOCK_GATE_DISABLE (1 << 11)
|
# define DPOUNIT_CLOCK_GATE_DISABLE (1 << 11)
|
||||||
# define DPBUNIT_CLOCK_GATE_DISABLE (1 << 10)
|
# define DPBUNIT_CLOCK_GATE_DISABLE (1 << 10)
|
||||||
# define DPCUNIT_CLOCK_GATE_DISABLE (1 << 9)
|
# define DCUNIT_CLOCK_GATE_DISABLE (1 << 9)
|
||||||
# define DPUNIT_CLOCK_GATE_DISABLE (1 << 8)
|
# define DPUNIT_CLOCK_GATE_DISABLE (1 << 8)
|
||||||
# define VRUNIT_CLOCK_GATE_DISABLE (1 << 7) /* 915+: reserved */
|
# define VRUNIT_CLOCK_GATE_DISABLE (1 << 7) /* 915+: reserved */
|
||||||
# define OVHUNIT_CLOCK_GATE_DISABLE (1 << 6) /* 830-865 */
|
# define OVHUNIT_CLOCK_GATE_DISABLE (1 << 6) /* 830-865 */
|
||||||
@ -1995,6 +2005,32 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||||||
#define PIPEAGCMAXGREEN 0x70014
|
#define PIPEAGCMAXGREEN 0x70014
|
||||||
#define PIPEAGCMAXBLUE 0x70018
|
#define PIPEAGCMAXBLUE 0x70018
|
||||||
#define PIPEASTAT 0x70024
|
#define PIPEASTAT 0x70024
|
||||||
|
# define FIFO_UNDERRUN (1 << 31)
|
||||||
|
# define CRC_ERROR_ENABLE (1 << 29)
|
||||||
|
# define CRC_DONE_ENABLE (1 << 28)
|
||||||
|
# define GMBUS_EVENT_ENABLE (1 << 27)
|
||||||
|
# define VSYNC_INT_ENABLE (1 << 25)
|
||||||
|
# define DLINE_COMPARE_ENABLE (1 << 24)
|
||||||
|
# define DPST_EVENT_ENABLE (1 << 23)
|
||||||
|
# define LBLC_EVENT_ENABLE (1 << 22)
|
||||||
|
# define OFIELD_INT_ENABLE (1 << 21)
|
||||||
|
# define EFIELD_INT_ENABLE (1 << 20)
|
||||||
|
# define SVBLANK_INT_ENABLE (1 << 18)
|
||||||
|
# define VBLANK_INT_ENABLE (1 << 17)
|
||||||
|
# define OREG_UPDATE_ENABLE (1 << 16)
|
||||||
|
# define CRC_ERROR_INT_STATUS (1 << 13)
|
||||||
|
# define CRC_DONE_INT_STATUS (1 << 12)
|
||||||
|
# define GMBUS_INT_STATUS (1 << 11)
|
||||||
|
# define VSYNC_INT_STATUS (1 << 9)
|
||||||
|
# define DLINE_COMPARE_STATUS (1 << 8)
|
||||||
|
# define DPST_EVENT_STATUS (1 << 7)
|
||||||
|
# define LBLC_EVENT_STATUS (1 << 6)
|
||||||
|
# define OFIELD_INT_STATUS (1 << 5)
|
||||||
|
# define EFIELD_INT_STATUS (1 << 4)
|
||||||
|
# define SVBLANK_INT_STATUS (1 << 2)
|
||||||
|
# define VBLANK_INT_STATUS (1 << 1)
|
||||||
|
# define OREG_UPDATE_STATUS (1 << 0)
|
||||||
|
|
||||||
|
|
||||||
#define DSPARB 0x70030
|
#define DSPARB 0x70030
|
||||||
#define DSPFW1 0x70034
|
#define DSPFW1 0x70034
|
||||||
@ -2134,7 +2170,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||||||
#define I830_GMCH_MEM_64M 0x1
|
#define I830_GMCH_MEM_64M 0x1
|
||||||
#define I830_GMCH_MEM_128M 0
|
#define I830_GMCH_MEM_128M 0
|
||||||
|
|
||||||
#define I830_GMCH_GMS_MASK 0xF0
|
#define I830_GMCH_GMS_MASK 0x70
|
||||||
#define I830_GMCH_GMS_DISABLED 0x00
|
#define I830_GMCH_GMS_DISABLED 0x00
|
||||||
#define I830_GMCH_GMS_LOCAL 0x10
|
#define I830_GMCH_GMS_LOCAL 0x10
|
||||||
#define I830_GMCH_GMS_STOLEN_512 0x20
|
#define I830_GMCH_GMS_STOLEN_512 0x20
|
||||||
@ -2145,7 +2181,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||||||
#define I830_RDRAM_ND(x) (((x) & 0x20) >> 5)
|
#define I830_RDRAM_ND(x) (((x) & 0x20) >> 5)
|
||||||
#define I830_RDRAM_DDT(x) (((x) & 0x18) >> 3)
|
#define I830_RDRAM_DDT(x) (((x) & 0x18) >> 3)
|
||||||
|
|
||||||
#define I855_GMCH_GMS_MASK (0x7 << 4)
|
#define I855_GMCH_GMS_MASK (0xF << 4)
|
||||||
#define I855_GMCH_GMS_DISABLED 0x00
|
#define I855_GMCH_GMS_DISABLED 0x00
|
||||||
#define I855_GMCH_GMS_STOLEN_1M (0x1 << 4)
|
#define I855_GMCH_GMS_STOLEN_1M (0x1 << 4)
|
||||||
#define I855_GMCH_GMS_STOLEN_4M (0x2 << 4)
|
#define I855_GMCH_GMS_STOLEN_4M (0x2 << 4)
|
||||||
|
@ -696,7 +696,9 @@ extern Bool I830DRIFinishScreenInit(ScreenPtr pScreen);
|
|||||||
extern void I830DRIUnlock(ScrnInfoPtr pScrn);
|
extern void I830DRIUnlock(ScrnInfoPtr pScrn);
|
||||||
extern Bool I830DRILock(ScrnInfoPtr pScrn);
|
extern Bool I830DRILock(ScrnInfoPtr pScrn);
|
||||||
extern Bool I830DRISetVBlankInterrupt (ScrnInfoPtr pScrn, Bool on);
|
extern Bool I830DRISetVBlankInterrupt (ScrnInfoPtr pScrn, Bool on);
|
||||||
Bool i830_update_dri_buffers(ScrnInfoPtr pScrn);
|
extern Bool i830_update_dri_buffers(ScrnInfoPtr pScrn);
|
||||||
|
extern Bool I830DRISetHWS(ScrnInfoPtr pScrn);
|
||||||
|
extern Bool I830DRIInstIrqHandler(ScrnInfoPtr pScrn);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
unsigned long intel_get_pixmap_offset(PixmapPtr pPix);
|
unsigned long intel_get_pixmap_offset(PixmapPtr pPix);
|
||||||
@ -838,6 +840,7 @@ extern const int I830CopyROP[16];
|
|||||||
#define QUIRK_IGNORE_LVDS 0x00000002
|
#define QUIRK_IGNORE_LVDS 0x00000002
|
||||||
#define QUIRK_IGNORE_MACMINI_LVDS 0x00000004
|
#define QUIRK_IGNORE_MACMINI_LVDS 0x00000004
|
||||||
#define QUIRK_PIPEA_FORCE 0x00000008
|
#define QUIRK_PIPEA_FORCE 0x00000008
|
||||||
|
#define QUIRK_IVCH_NEED_DVOB 0x00000010
|
||||||
extern void i830_fixup_devices(ScrnInfoPtr);
|
extern void i830_fixup_devices(ScrnInfoPtr);
|
||||||
|
|
||||||
#endif /* _I830_H_ */
|
#endif /* _I830_H_ */
|
||||||
|
@ -88,6 +88,61 @@ DEBUGSTRING(i830_debug_pipeconf)
|
|||||||
return XNFprintf("%s, %s", enabled, bit30);
|
return XNFprintf("%s, %s", enabled, bit30);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEBUGSTRING(i830_debug_pipestat)
|
||||||
|
{
|
||||||
|
char *_FIFO_UNDERRUN = val & FIFO_UNDERRUN ? " FIFO_UNDERRUN" : "";
|
||||||
|
char *_CRC_ERROR_ENABLE = val & CRC_ERROR_ENABLE ? " CRC_ERROR_ENABLE" : "";
|
||||||
|
char *_CRC_DONE_ENABLE = val & CRC_DONE_ENABLE ? " CRC_DONE_ENABLE" : "";
|
||||||
|
char *_GMBUS_EVENT_ENABLE = val & GMBUS_EVENT_ENABLE ? " GMBUS_EVENT_ENABLE" : "";
|
||||||
|
char *_VSYNC_INT_ENABLE = val & VSYNC_INT_ENABLE ? " VSYNC_INT_ENABLE" : "";
|
||||||
|
char *_DLINE_COMPARE_ENABLE = val & DLINE_COMPARE_ENABLE ? " DLINE_COMPARE_ENABLE" : "";
|
||||||
|
char *_DPST_EVENT_ENABLE = val & DPST_EVENT_ENABLE ? " DPST_EVENT_ENABLE" : "";
|
||||||
|
char *_LBLC_EVENT_ENABLE = val & LBLC_EVENT_ENABLE ? " LBLC_EVENT_ENABLE" : "";
|
||||||
|
char *_OFIELD_INT_ENABLE = val & OFIELD_INT_ENABLE ? " OFIELD_INT_ENABLE" : "";
|
||||||
|
char *_EFIELD_INT_ENABLE = val & EFIELD_INT_ENABLE ? " EFIELD_INT_ENABLE" : "";
|
||||||
|
char *_SVBLANK_INT_ENABLE = val & SVBLANK_INT_ENABLE ? " SVBLANK_INT_ENABLE" : "";
|
||||||
|
char *_VBLANK_INT_ENABLE = val & VBLANK_INT_ENABLE ? " VBLANK_INT_ENABLE" : "";
|
||||||
|
char *_OREG_UPDATE_ENABLE = val & OREG_UPDATE_ENABLE ? " OREG_UPDATE_ENABLE" : "";
|
||||||
|
char *_CRC_ERROR_INT_STATUS = val & CRC_ERROR_INT_STATUS ? " CRC_ERROR_INT_STATUS" : "";
|
||||||
|
char *_CRC_DONE_INT_STATUS = val & CRC_DONE_INT_STATUS ? " CRC_DONE_INT_STATUS" : "";
|
||||||
|
char *_GMBUS_INT_STATUS = val & GMBUS_INT_STATUS ? " GMBUS_INT_STATUS" : "";
|
||||||
|
char *_VSYNC_INT_STATUS = val & VSYNC_INT_STATUS ? " VSYNC_INT_STATUS" : "";
|
||||||
|
char *_DLINE_COMPARE_STATUS = val & DLINE_COMPARE_STATUS ? " DLINE_COMPARE_STATUS" : "";
|
||||||
|
char *_DPST_EVENT_STATUS = val & DPST_EVENT_STATUS ? " DPST_EVENT_STATUS" : "";
|
||||||
|
char *_LBLC_EVENT_STATUS = val & LBLC_EVENT_STATUS ? " LBLC_EVENT_STATUS" : "";
|
||||||
|
char *_OFIELD_INT_STATUS = val & OFIELD_INT_STATUS ? " OFIELD_INT_STATUS" : "";
|
||||||
|
char *_EFIELD_INT_STATUS = val & EFIELD_INT_STATUS ? " EFIELD_INT_STATUS" : "";
|
||||||
|
char *_SVBLANK_INT_STATUS = val & SVBLANK_INT_STATUS ? " SVBLANK_INT_STATUS" : "";
|
||||||
|
char *_VBLANK_INT_STATUS = val & VBLANK_INT_STATUS ? " VBLANK_INT_STATUS" : "";
|
||||||
|
char *_OREG_UPDATE_STATUS = val & OREG_UPDATE_STATUS ? " OREG_UPDATE_STATUS" : "";
|
||||||
|
return XNFprintf("status:%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
|
||||||
|
_FIFO_UNDERRUN,
|
||||||
|
_CRC_ERROR_ENABLE,
|
||||||
|
_CRC_DONE_ENABLE,
|
||||||
|
_GMBUS_EVENT_ENABLE,
|
||||||
|
_VSYNC_INT_ENABLE,
|
||||||
|
_DLINE_COMPARE_ENABLE,
|
||||||
|
_DPST_EVENT_ENABLE,
|
||||||
|
_LBLC_EVENT_ENABLE,
|
||||||
|
_OFIELD_INT_ENABLE,
|
||||||
|
_EFIELD_INT_ENABLE,
|
||||||
|
_SVBLANK_INT_ENABLE,
|
||||||
|
_VBLANK_INT_ENABLE,
|
||||||
|
_OREG_UPDATE_ENABLE,
|
||||||
|
_CRC_ERROR_INT_STATUS,
|
||||||
|
_CRC_DONE_INT_STATUS,
|
||||||
|
_GMBUS_INT_STATUS,
|
||||||
|
_VSYNC_INT_STATUS,
|
||||||
|
_DLINE_COMPARE_STATUS,
|
||||||
|
_DPST_EVENT_STATUS,
|
||||||
|
_LBLC_EVENT_STATUS,
|
||||||
|
_OFIELD_INT_STATUS,
|
||||||
|
_EFIELD_INT_STATUS,
|
||||||
|
_SVBLANK_INT_STATUS,
|
||||||
|
_VBLANK_INT_STATUS,
|
||||||
|
_OREG_UPDATE_STATUS);
|
||||||
|
}
|
||||||
|
|
||||||
DEBUGSTRING(i830_debug_hvtotal)
|
DEBUGSTRING(i830_debug_hvtotal)
|
||||||
{
|
{
|
||||||
return XNFprintf("%d active, %d total", (val & 0xffff) + 1,
|
return XNFprintf("%d active, %d total", (val & 0xffff) + 1,
|
||||||
@ -340,6 +395,76 @@ DEBUGSTRING(i830_debug_sdvo)
|
|||||||
enable, pipe, stall, detected, sdvoextra, gang);
|
enable, pipe, stall, detected, sdvoextra, gang);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEBUGSTRING(i830_debug_dspclk_gate_d)
|
||||||
|
{
|
||||||
|
char *DPUNIT_B = val & DPUNIT_B_CLOCK_GATE_DISABLE ? " DPUNIT_B" : "";
|
||||||
|
char *VSUNIT = val & VSUNIT_CLOCK_GATE_DISABLE ? " VSUNIT" : "";
|
||||||
|
char *VRHUNIT = val & VRHUNIT_CLOCK_GATE_DISABLE ? " VRHUNIT" : "";
|
||||||
|
char *VRDUNIT = val & VRDUNIT_CLOCK_GATE_DISABLE ? " VRDUNIT" : "";
|
||||||
|
char *AUDUNIT = val & AUDUNIT_CLOCK_GATE_DISABLE ? " AUDUNIT" : "";
|
||||||
|
char *DPUNIT_A = val & DPUNIT_A_CLOCK_GATE_DISABLE ? " DPUNIT_A" : "";
|
||||||
|
char *DPCUNIT = val & DPCUNIT_CLOCK_GATE_DISABLE ? " DPCUNIT" : "";
|
||||||
|
char *TVRUNIT = val & TVRUNIT_CLOCK_GATE_DISABLE ? " TVRUNIT" : "";
|
||||||
|
char *TVCUNIT = val & TVCUNIT_CLOCK_GATE_DISABLE ? " TVCUNIT" : "";
|
||||||
|
char *TVFUNIT = val & TVFUNIT_CLOCK_GATE_DISABLE ? " TVFUNIT" : "";
|
||||||
|
char *TVEUNIT = val & TVEUNIT_CLOCK_GATE_DISABLE ? " TVEUNIT" : "";
|
||||||
|
char *DVSUNIT = val & DVSUNIT_CLOCK_GATE_DISABLE ? " DVSUNIT" : "";
|
||||||
|
char *DSSUNIT = val & DSSUNIT_CLOCK_GATE_DISABLE ? " DSSUNIT" : "";
|
||||||
|
char *DDBUNIT = val & DDBUNIT_CLOCK_GATE_DISABLE ? " DDBUNIT" : "";
|
||||||
|
char *DPRUNIT = val & DPRUNIT_CLOCK_GATE_DISABLE ? " DPRUNIT" : "";
|
||||||
|
char *DPFUNIT = val & DPFUNIT_CLOCK_GATE_DISABLE ? " DPFUNIT" : "";
|
||||||
|
char *DPBMUNIT = val & DPBMUNIT_CLOCK_GATE_DISABLE ? " DPBMUNIT" : "";
|
||||||
|
char *DPLSUNIT = val & DPLSUNIT_CLOCK_GATE_DISABLE ? " DPLSUNIT" : "";
|
||||||
|
char *DPLUNIT = val & DPLUNIT_CLOCK_GATE_DISABLE ? " DPLUNIT" : "";
|
||||||
|
char *DPOUNIT = val & DPOUNIT_CLOCK_GATE_DISABLE ? " DPOUNIT" : "";
|
||||||
|
char *DPBUNIT = val & DPBUNIT_CLOCK_GATE_DISABLE ? " DPBUNIT" : "";
|
||||||
|
char *DCUNIT = val & DCUNIT_CLOCK_GATE_DISABLE ? " DCUNIT" : "";
|
||||||
|
char *DPUNIT = val & DPUNIT_CLOCK_GATE_DISABLE ? " DPUNIT" : "";
|
||||||
|
char *VRUNIT = val & VRUNIT_CLOCK_GATE_DISABLE ? " VRUNIT" : "";
|
||||||
|
char *OVHUNIT = val & OVHUNIT_CLOCK_GATE_DISABLE ? " OVHUNIT" : "";
|
||||||
|
char *DPIOUNIT = val & DPIOUNIT_CLOCK_GATE_DISABLE ? " DPIOUNIT" : "";
|
||||||
|
char *OVFUNIT = val & OVFUNIT_CLOCK_GATE_DISABLE ? " OVFUNIT" : "";
|
||||||
|
char *OVBUNIT = val & OVBUNIT_CLOCK_GATE_DISABLE ? " OVBUNIT" : "";
|
||||||
|
char *OVRUNIT = val & OVRUNIT_CLOCK_GATE_DISABLE ? " OVRUNIT" : "";
|
||||||
|
char *OVCUNIT = val & OVCUNIT_CLOCK_GATE_DISABLE ? " OVCUNIT" : "";
|
||||||
|
char *OVUUNIT = val & OVUUNIT_CLOCK_GATE_DISABLE ? " OVUUNIT" : "";
|
||||||
|
char *OVLUNIT = val & OVLUNIT_CLOCK_GATE_DISABLE ? " OVLUNIT" : "";
|
||||||
|
|
||||||
|
return XNFprintf ("clock gates disabled:%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
|
||||||
|
DPUNIT_B,
|
||||||
|
VSUNIT,
|
||||||
|
VRHUNIT,
|
||||||
|
VRDUNIT,
|
||||||
|
AUDUNIT,
|
||||||
|
DPUNIT_A,
|
||||||
|
DPCUNIT,
|
||||||
|
TVRUNIT,
|
||||||
|
TVCUNIT,
|
||||||
|
TVFUNIT,
|
||||||
|
TVEUNIT,
|
||||||
|
DVSUNIT,
|
||||||
|
DSSUNIT,
|
||||||
|
DDBUNIT,
|
||||||
|
DPRUNIT,
|
||||||
|
DPFUNIT,
|
||||||
|
DPBMUNIT,
|
||||||
|
DPLSUNIT,
|
||||||
|
DPLUNIT,
|
||||||
|
DPOUNIT,
|
||||||
|
DPBUNIT,
|
||||||
|
DCUNIT,
|
||||||
|
DPUNIT,
|
||||||
|
VRUNIT,
|
||||||
|
OVHUNIT,
|
||||||
|
DPIOUNIT,
|
||||||
|
OVFUNIT,
|
||||||
|
OVBUNIT,
|
||||||
|
OVRUNIT,
|
||||||
|
OVCUNIT,
|
||||||
|
OVUUNIT,
|
||||||
|
OVLUNIT);
|
||||||
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
DEBUGSTRING(i810_debug_fence_new)
|
DEBUGSTRING(i810_debug_fence_new)
|
||||||
{
|
{
|
||||||
@ -368,8 +493,9 @@ static struct i830SnapshotRec {
|
|||||||
DEFINEREG2(VCLK_DIVISOR_VGA1, i830_debug_fp),
|
DEFINEREG2(VCLK_DIVISOR_VGA1, i830_debug_fp),
|
||||||
DEFINEREG2(VCLK_POST_DIV, i830_debug_vga_pd),
|
DEFINEREG2(VCLK_POST_DIV, i830_debug_vga_pd),
|
||||||
DEFINEREG2(DPLL_TEST, i830_debug_dpll_test),
|
DEFINEREG2(DPLL_TEST, i830_debug_dpll_test),
|
||||||
|
DEFINEREG(CACHE_MODE_0),
|
||||||
DEFINEREG(D_STATE),
|
DEFINEREG(D_STATE),
|
||||||
DEFINEREG(DSPCLK_GATE_D),
|
DEFINEREG2(DSPCLK_GATE_D, i830_debug_dspclk_gate_d),
|
||||||
DEFINEREG(RENCLK_GATE_D1),
|
DEFINEREG(RENCLK_GATE_D1),
|
||||||
DEFINEREG(RENCLK_GATE_D2),
|
DEFINEREG(RENCLK_GATE_D2),
|
||||||
/* DEFINEREG(RAMCLK_GATE_D), CRL only */
|
/* DEFINEREG(RAMCLK_GATE_D), CRL only */
|
||||||
@ -408,6 +534,7 @@ static struct i830SnapshotRec {
|
|||||||
DEFINEREG(DSPATILEOFF),
|
DEFINEREG(DSPATILEOFF),
|
||||||
DEFINEREG2(PIPEACONF, i830_debug_pipeconf),
|
DEFINEREG2(PIPEACONF, i830_debug_pipeconf),
|
||||||
DEFINEREG2(PIPEASRC, i830_debug_yxminus1),
|
DEFINEREG2(PIPEASRC, i830_debug_yxminus1),
|
||||||
|
DEFINEREG2(PIPEASTAT, i830_debug_pipestat),
|
||||||
|
|
||||||
DEFINEREG(FBC_CFB_BASE),
|
DEFINEREG(FBC_CFB_BASE),
|
||||||
DEFINEREG(FBC_LL_BASE),
|
DEFINEREG(FBC_LL_BASE),
|
||||||
@ -440,6 +567,7 @@ static struct i830SnapshotRec {
|
|||||||
DEFINEREG(DSPBTILEOFF),
|
DEFINEREG(DSPBTILEOFF),
|
||||||
DEFINEREG2(PIPEBCONF, i830_debug_pipeconf),
|
DEFINEREG2(PIPEBCONF, i830_debug_pipeconf),
|
||||||
DEFINEREG2(PIPEBSRC, i830_debug_yxminus1),
|
DEFINEREG2(PIPEBSRC, i830_debug_yxminus1),
|
||||||
|
DEFINEREG2(PIPEBSTAT, i830_debug_pipestat),
|
||||||
|
|
||||||
DEFINEREG2(FPB0, i830_debug_fp),
|
DEFINEREG2(FPB0, i830_debug_fp),
|
||||||
DEFINEREG2(FPB1, i830_debug_fp),
|
DEFINEREG2(FPB1, i830_debug_fp),
|
||||||
@ -494,6 +622,11 @@ static struct i830SnapshotRec {
|
|||||||
DEFINEREG(TV_H_CHROMA_0),
|
DEFINEREG(TV_H_CHROMA_0),
|
||||||
DEFINEREG(TV_H_CHROMA_59),
|
DEFINEREG(TV_H_CHROMA_59),
|
||||||
|
|
||||||
|
DEFINEREG(MI_MODE),
|
||||||
|
DEFINEREG(MI_DISPLAY_POWER_DOWN),
|
||||||
|
DEFINEREG(MI_ARB_STATE),
|
||||||
|
DEFINEREG(MI_RDRET_STATE),
|
||||||
|
DEFINEREG(ECOSKPD),
|
||||||
#if 0
|
#if 0
|
||||||
DEFINEREG2(FENCE_NEW + 0, i810_debug_fence_new),
|
DEFINEREG2(FENCE_NEW + 0, i810_debug_fence_new),
|
||||||
DEFINEREG2(FENCE_NEW + 8, i810_debug_fence_new),
|
DEFINEREG2(FENCE_NEW + 8, i810_debug_fence_new),
|
||||||
@ -601,6 +734,7 @@ static void i830DumpAR(ScrnInfoPtr pScrn)
|
|||||||
}
|
}
|
||||||
INREG8(st01);
|
INREG8(st01);
|
||||||
OUTREG8(0x3c0, orig_arx);
|
OUTREG8(0x3c0, orig_arx);
|
||||||
|
INREG8(st01); /* switch back to index mode */
|
||||||
}
|
}
|
||||||
|
|
||||||
void i830DumpRegs (ScrnInfoPtr pScrn)
|
void i830DumpRegs (ScrnInfoPtr pScrn)
|
||||||
|
@ -637,6 +637,7 @@ i830_use_fb_compression(xf86CrtcPtr crtc)
|
|||||||
|
|
||||||
/* Here we disable it to catch one->two pipe enabled configs */
|
/* Here we disable it to catch one->two pipe enabled configs */
|
||||||
if (count > 1) {
|
if (count > 1) {
|
||||||
|
if (i830_fb_compression_supported(pI830))
|
||||||
i830_disable_fb_compression(crtc);
|
i830_disable_fb_compression(crtc);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -1639,10 +1640,11 @@ i830_crtc_clock_get(ScrnInfoPtr pScrn, xf86CrtcPtr crtc)
|
|||||||
clock.p1 = ffs((dpll & DPLL_FPA01_P1_POST_DIV_MASK_I830_LVDS) >>
|
clock.p1 = ffs((dpll & DPLL_FPA01_P1_POST_DIV_MASK_I830_LVDS) >>
|
||||||
DPLL_FPA01_P1_POST_DIV_SHIFT);
|
DPLL_FPA01_P1_POST_DIV_SHIFT);
|
||||||
|
|
||||||
|
/* if LVDS is dual-channel, p2 = 7 */
|
||||||
if ((INREG(LVDS) & LVDS_CLKB_POWER_MASK) == LVDS_CLKB_POWER_UP)
|
if ((INREG(LVDS) & LVDS_CLKB_POWER_MASK) == LVDS_CLKB_POWER_UP)
|
||||||
clock.p2 = I8XX_P2_LVDS_SLOW;
|
clock.p2 = 7;
|
||||||
else
|
else
|
||||||
clock.p2 = I8XX_P2_LVDS_FAST;
|
clock.p2 = 14;
|
||||||
|
|
||||||
if ((dpll & PLL_REF_INPUT_MASK) == PLLB_REF_INPUT_SPREADSPECTRUMIN)
|
if ((dpll & PLL_REF_INPUT_MASK) == PLLB_REF_INPUT_SPREADSPECTRUMIN)
|
||||||
i8xx_clock(66000, &clock); /* XXX: might not be 66MHz */
|
i8xx_clock(66000, &clock); /* XXX: might not be 66MHz */
|
||||||
|
@ -236,18 +236,18 @@ I830SetParam(ScrnInfoPtr pScrn, int param, int value)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Bool
|
Bool
|
||||||
I830SetHWS(ScrnInfoPtr pScrn, int addr)
|
I830DRISetHWS(ScrnInfoPtr pScrn)
|
||||||
{
|
{
|
||||||
I830Ptr pI830 = I830PTR(pScrn);
|
I830Ptr pI830 = I830PTR(pScrn);
|
||||||
drmI830HWS hws;
|
drmI830HWS hws;
|
||||||
|
|
||||||
hws.addr = addr;
|
hws.addr = pI830->hw_status->offset;
|
||||||
|
|
||||||
if (drmCommandWrite(pI830->drmSubFD, DRM_I830_HWS_PAGE_ADDR,
|
if (drmCommandWrite(pI830->drmSubFD, DRM_I830_HWS_PAGE_ADDR,
|
||||||
&hws, sizeof(drmI830HWS))) {
|
&hws, sizeof(drmI830HWS))) {
|
||||||
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
|
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
|
||||||
"G33 status page initialization Failed\n");
|
"hw status page initialization Failed\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -813,12 +813,6 @@ I830DRIDoMappings(ScreenPtr pScreen)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IS_G33CLASS(pI830)) {
|
|
||||||
if (!I830SetHWS(pScrn, pI830->hw_status->offset)) {
|
|
||||||
DRICloseScreen(pScreen);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* init to zero to be safe */
|
/* init to zero to be safe */
|
||||||
sarea->front_handle = 0;
|
sarea->front_handle = 0;
|
||||||
sarea->back_handle = 0;
|
sarea->back_handle = 0;
|
||||||
@ -881,17 +875,11 @@ I830DRIDoMappings(ScreenPtr pScreen)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Bool
|
Bool
|
||||||
I830DRIResume(ScreenPtr pScreen)
|
I830DRIInstIrqHandler(ScrnInfoPtr pScrn)
|
||||||
{
|
{
|
||||||
ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
|
|
||||||
I830Ptr pI830 = I830PTR(pScrn);
|
I830Ptr pI830 = I830PTR(pScrn);
|
||||||
I830DRIPtr pI830DRI = (I830DRIPtr) pI830->pDRIInfo->devPrivate;
|
I830DRIPtr pI830DRI = (I830DRIPtr) pI830->pDRIInfo->devPrivate;
|
||||||
|
|
||||||
DPRINTF(PFX, "I830DRIResume\n");
|
|
||||||
|
|
||||||
I830ResumeDma(pScrn);
|
|
||||||
|
|
||||||
{
|
|
||||||
pI830DRI->irq = drmGetInterruptFromBusID(pI830->drmSubFD,
|
pI830DRI->irq = drmGetInterruptFromBusID(pI830->drmSubFD,
|
||||||
#if XSERVER_LIBPCIACCESS
|
#if XSERVER_LIBPCIACCESS
|
||||||
((pI830->PciInfo->domain << 8) |
|
((pI830->PciInfo->domain << 8) |
|
||||||
@ -913,14 +901,26 @@ I830DRIResume(ScreenPtr pScreen)
|
|||||||
"[drm] failure adding irq handler\n");
|
"[drm] failure adding irq handler\n");
|
||||||
pI830DRI->irq = 0;
|
pI830DRI->irq = 0;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
||||||
"[drm] dma control initialized, using IRQ %d\n",
|
"[drm] dma control initialized, using IRQ %d\n",
|
||||||
pI830DRI->irq);
|
pI830DRI->irq);
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
Bool
|
||||||
|
I830DRIResume(ScreenPtr pScreen)
|
||||||
|
{
|
||||||
|
ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
|
||||||
|
|
||||||
|
DPRINTF(PFX, "I830DRIResume\n");
|
||||||
|
|
||||||
|
I830ResumeDma(pScrn);
|
||||||
|
|
||||||
|
I830DRIInstIrqHandler(pScrn);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -976,47 +976,16 @@ I830DestroyContext(ScreenPtr pScreen, drm_context_t hwContext,
|
|||||||
Bool
|
Bool
|
||||||
I830DRIFinishScreenInit(ScreenPtr pScreen)
|
I830DRIFinishScreenInit(ScreenPtr pScreen)
|
||||||
{
|
{
|
||||||
ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
|
|
||||||
I830Ptr pI830 = I830PTR(pScrn);
|
|
||||||
|
|
||||||
DPRINTF(PFX, "I830DRIFinishScreenInit\n");
|
DPRINTF(PFX, "I830DRIFinishScreenInit\n");
|
||||||
|
|
||||||
if (!DRIFinishScreenInit(pScreen))
|
if (!DRIFinishScreenInit(pScreen))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
/* Okay now initialize the dma engine */
|
/* move irq initialize later in EnterVT, as then we
|
||||||
{
|
* would finish binding possible hw status page, which
|
||||||
I830DRIPtr pI830DRI = (I830DRIPtr) pI830->pDRIInfo->devPrivate;
|
* requires irq ctrl ioctl not be called that early.
|
||||||
|
*/
|
||||||
pI830DRI->irq = drmGetInterruptFromBusID(pI830->drmSubFD,
|
|
||||||
#if XSERVER_LIBPCIACCESS
|
|
||||||
((pI830->PciInfo->domain << 8) |
|
|
||||||
pI830->PciInfo->bus),
|
|
||||||
pI830->PciInfo->dev,
|
|
||||||
pI830->PciInfo->func
|
|
||||||
#else
|
|
||||||
((pciConfigPtr) pI830->
|
|
||||||
PciInfo->thisCard)->busnum,
|
|
||||||
((pciConfigPtr) pI830->
|
|
||||||
PciInfo->thisCard)->devnum,
|
|
||||||
((pciConfigPtr) pI830->
|
|
||||||
PciInfo->thisCard)->funcnum
|
|
||||||
#endif
|
|
||||||
);
|
|
||||||
|
|
||||||
if (drmCtlInstHandler(pI830->drmSubFD, pI830DRI->irq)) {
|
|
||||||
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
|
|
||||||
"[drm] failure adding irq handler\n");
|
|
||||||
pI830DRI->irq = 0;
|
|
||||||
DRICloseScreen(pScreen);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
|
|
||||||
"[drm] dma control initialized, using IRQ %d\n",
|
|
||||||
pI830DRI->irq);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DAMAGE
|
#ifdef DAMAGE
|
||||||
|
@ -495,7 +495,7 @@ I830DetectMemory(ScrnInfoPtr pScrn)
|
|||||||
range = gtt_size + 4;
|
range = gtt_size + 4;
|
||||||
|
|
||||||
if (IS_I85X(pI830) || IS_I865G(pI830) || IS_I9XX(pI830)) {
|
if (IS_I85X(pI830) || IS_I865G(pI830) || IS_I9XX(pI830)) {
|
||||||
switch (gmch_ctrl & I830_GMCH_GMS_MASK) {
|
switch (gmch_ctrl & I855_GMCH_GMS_MASK) {
|
||||||
case I855_GMCH_GMS_STOLEN_1M:
|
case I855_GMCH_GMS_STOLEN_1M:
|
||||||
memsize = MB(1) - KB(range);
|
memsize = MB(1) - KB(range);
|
||||||
break;
|
break;
|
||||||
@ -2120,12 +2120,14 @@ RestoreHWState(ScrnInfoPtr pScrn)
|
|||||||
* enabled if pipe A is actually on (otherwise we have a bug in the initial
|
* enabled if pipe A is actually on (otherwise we have a bug in the initial
|
||||||
* state).
|
* state).
|
||||||
*/
|
*/
|
||||||
if (pI830->saveDSPACNTR & DISPPLANE_SEL_PIPE_A) {
|
if ((pI830->saveDSPACNTR & DISPPLANE_SEL_PIPE_MASK) ==
|
||||||
|
DISPPLANE_SEL_PIPE_A) {
|
||||||
OUTREG(DSPACNTR, pI830->saveDSPACNTR);
|
OUTREG(DSPACNTR, pI830->saveDSPACNTR);
|
||||||
OUTREG(DSPABASE, INREG(DSPABASE));
|
OUTREG(DSPABASE, INREG(DSPABASE));
|
||||||
i830WaitForVblank(pScrn);
|
i830WaitForVblank(pScrn);
|
||||||
}
|
}
|
||||||
if (pI830->saveDSPBCNTR & DISPPLANE_SEL_PIPE_A) {
|
if ((pI830->saveDSPBCNTR & DISPPLANE_SEL_PIPE_MASK) ==
|
||||||
|
DISPPLANE_SEL_PIPE_A) {
|
||||||
OUTREG(DSPBCNTR, pI830->saveDSPBCNTR);
|
OUTREG(DSPBCNTR, pI830->saveDSPBCNTR);
|
||||||
OUTREG(DSPBBASE, INREG(DSPBBASE));
|
OUTREG(DSPBBASE, INREG(DSPBBASE));
|
||||||
i830WaitForVblank(pScrn);
|
i830WaitForVblank(pScrn);
|
||||||
@ -2177,12 +2179,14 @@ RestoreHWState(ScrnInfoPtr pScrn)
|
|||||||
* Note that pipe B may be disabled, and in that case, the plane
|
* Note that pipe B may be disabled, and in that case, the plane
|
||||||
* should also be disabled or we must have had a bad initial state.
|
* should also be disabled or we must have had a bad initial state.
|
||||||
*/
|
*/
|
||||||
if (pI830->saveDSPACNTR & DISPPLANE_SEL_PIPE_B) {
|
if ((pI830->saveDSPACNTR & DISPPLANE_SEL_PIPE_MASK) ==
|
||||||
|
DISPPLANE_SEL_PIPE_B) {
|
||||||
OUTREG(DSPACNTR, pI830->saveDSPACNTR);
|
OUTREG(DSPACNTR, pI830->saveDSPACNTR);
|
||||||
OUTREG(DSPABASE, INREG(DSPABASE));
|
OUTREG(DSPABASE, INREG(DSPABASE));
|
||||||
i830WaitForVblank(pScrn);
|
i830WaitForVblank(pScrn);
|
||||||
}
|
}
|
||||||
if (pI830->saveDSPBCNTR & DISPPLANE_SEL_PIPE_B) {
|
if ((pI830->saveDSPBCNTR & DISPPLANE_SEL_PIPE_MASK) ==
|
||||||
|
DISPPLANE_SEL_PIPE_B) {
|
||||||
OUTREG(DSPBCNTR, pI830->saveDSPBCNTR);
|
OUTREG(DSPBCNTR, pI830->saveDSPBCNTR);
|
||||||
OUTREG(DSPBBASE, INREG(DSPBBASE));
|
OUTREG(DSPBBASE, INREG(DSPBBASE));
|
||||||
i830WaitForVblank(pScrn);
|
i830WaitForVblank(pScrn);
|
||||||
@ -3186,6 +3190,22 @@ I830EnterVT(int scrnIndex, int flags)
|
|||||||
|
|
||||||
#ifdef XF86DRI
|
#ifdef XF86DRI
|
||||||
if (pI830->directRenderingEnabled) {
|
if (pI830->directRenderingEnabled) {
|
||||||
|
/* HW status is fixed, we need to set it up before any drm
|
||||||
|
* operation which accessing that page, like irq install, etc.
|
||||||
|
*/
|
||||||
|
if (pI830->starting) {
|
||||||
|
if (HWS_NEED_GFX(pI830) && !I830DRISetHWS(pScrn)) {
|
||||||
|
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
|
||||||
|
"Fail to setup hardware status page.\n");
|
||||||
|
I830DRICloseScreen(pScrn->pScreen);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (!I830DRIInstIrqHandler(pScrn)) {
|
||||||
|
I830DRICloseScreen(pScrn->pScreen);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Update buffer offsets in sarea and mappings, since buffer offsets
|
/* Update buffer offsets in sarea and mappings, since buffer offsets
|
||||||
* may have changed.
|
* may have changed.
|
||||||
*/
|
*/
|
||||||
|
@ -83,7 +83,7 @@ struct _I830DVODriver i830_dvo_drivers[] =
|
|||||||
.type = I830_OUTPUT_DVO_LVDS,
|
.type = I830_OUTPUT_DVO_LVDS,
|
||||||
.modulename = "ivch",
|
.modulename = "ivch",
|
||||||
.fntablename = "ivch_methods",
|
.fntablename = "ivch_methods",
|
||||||
.dvo_reg = DVOB,
|
.dvo_reg = DVOA,
|
||||||
.address = 0x04, /* Might also be 0x44, 0x84, 0xc4 */
|
.address = 0x04, /* Might also be 0x44, 0x84, 0xc4 */
|
||||||
.symbols = ivch_symbols
|
.symbols = ivch_symbols
|
||||||
},
|
},
|
||||||
@ -398,6 +398,7 @@ i830_dvo_get_current_mode (xf86OutputPtr output)
|
|||||||
void
|
void
|
||||||
i830_dvo_init(ScrnInfoPtr pScrn)
|
i830_dvo_init(ScrnInfoPtr pScrn)
|
||||||
{
|
{
|
||||||
|
I830Ptr pI830 = I830PTR(pScrn);
|
||||||
I830OutputPrivatePtr intel_output;
|
I830OutputPrivatePtr intel_output;
|
||||||
int ret;
|
int ret;
|
||||||
int i;
|
int i;
|
||||||
@ -431,6 +432,11 @@ i830_dvo_init(ScrnInfoPtr pScrn)
|
|||||||
ret_ptr = NULL;
|
ret_ptr = NULL;
|
||||||
drv->vid_rec = LoaderSymbol(drv->fntablename);
|
drv->vid_rec = LoaderSymbol(drv->fntablename);
|
||||||
|
|
||||||
|
if (!strcmp(drv->modulename, "ivch") &&
|
||||||
|
pI830->quirk_flag & QUIRK_IVCH_NEED_DVOB) {
|
||||||
|
drv->dvo_reg = DVOB;
|
||||||
|
}
|
||||||
|
|
||||||
/* Allow the I2C driver info to specify the GPIO to be used in
|
/* Allow the I2C driver info to specify the GPIO to be used in
|
||||||
* special cases, but otherwise default to what's defined in the spec.
|
* special cases, but otherwise default to what's defined in the spec.
|
||||||
*/
|
*/
|
||||||
|
@ -474,6 +474,9 @@ i830_allocator_init(ScrnInfoPtr pScrn, unsigned long offset, unsigned long size)
|
|||||||
/* Can't do TTM on stolen memory */
|
/* Can't do TTM on stolen memory */
|
||||||
mmsize -= pI830->stolen_size;
|
mmsize -= pI830->stolen_size;
|
||||||
|
|
||||||
|
if (HWS_NEED_GFX(pI830) && IS_IGD_GM(pI830))
|
||||||
|
mmsize -= HWSTATUS_PAGE_SIZE;
|
||||||
|
|
||||||
/* Create the aperture allocation */
|
/* Create the aperture allocation */
|
||||||
pI830->memory_manager =
|
pI830->memory_manager =
|
||||||
i830_allocate_aperture(pScrn, "DRI memory manager",
|
i830_allocate_aperture(pScrn, "DRI memory manager",
|
||||||
@ -1636,16 +1639,20 @@ static Bool
|
|||||||
i830_allocate_hwstatus(ScrnInfoPtr pScrn)
|
i830_allocate_hwstatus(ScrnInfoPtr pScrn)
|
||||||
{
|
{
|
||||||
I830Ptr pI830 = I830PTR(pScrn);
|
I830Ptr pI830 = I830PTR(pScrn);
|
||||||
|
int flags;
|
||||||
|
|
||||||
/* The current DRM will leak the HWS mapping if we update the address
|
/* The current DRM will leak the HWS mapping if we update the address
|
||||||
* after init (at best), so allocate it fixed for its lifetime
|
* after init (at best), so allocate it fixed for its lifetime
|
||||||
* (i.e. not through buffer objects).
|
* (i.e. not through buffer objects).
|
||||||
*/
|
*/
|
||||||
pI830->hw_status = i830_allocate_memory(pScrn, "G33 hw status",
|
flags = NEED_LIFETIME_FIXED;
|
||||||
HWSTATUS_PAGE_SIZE, GTT_PAGE_SIZE, NEED_LIFETIME_FIXED);
|
if (IS_IGD_GM(pI830))
|
||||||
|
flags |= NEED_NON_STOLEN;
|
||||||
|
pI830->hw_status = i830_allocate_memory(pScrn, "HW status",
|
||||||
|
HWSTATUS_PAGE_SIZE, GTT_PAGE_SIZE, flags);
|
||||||
if (pI830->hw_status == NULL) {
|
if (pI830->hw_status == NULL) {
|
||||||
xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
|
xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
|
||||||
"Failed to allocate hw status page for G33.\n");
|
"Failed to allocate hw status page.\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -1658,7 +1665,7 @@ i830_allocate_3d_memory(ScrnInfoPtr pScrn)
|
|||||||
|
|
||||||
DPRINTF(PFX, "i830_allocate_3d_memory\n");
|
DPRINTF(PFX, "i830_allocate_3d_memory\n");
|
||||||
|
|
||||||
if (IS_G33CLASS(pI830)) {
|
if (HWS_NEED_GFX(pI830)) {
|
||||||
if (!i830_allocate_hwstatus(pScrn))
|
if (!i830_allocate_hwstatus(pScrn))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,9 @@
|
|||||||
|
|
||||||
#define SUBSYS_ANY (~0)
|
#define SUBSYS_ANY (~0)
|
||||||
|
|
||||||
|
#define DMIID_DIR "/sys/class/dmi/id/"
|
||||||
|
#define DMIID_FILE(x) (DMIID_DIR # x)
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int chipType;
|
int chipType;
|
||||||
int subsysVendor;
|
int subsysVendor;
|
||||||
@ -39,6 +42,125 @@ typedef struct {
|
|||||||
void (*hook)(I830Ptr);
|
void (*hook)(I830Ptr);
|
||||||
} i830_quirk, *i830_quirk_ptr;
|
} i830_quirk, *i830_quirk_ptr;
|
||||||
|
|
||||||
|
enum i830_dmi_data_t {
|
||||||
|
bios_vendor,
|
||||||
|
bios_version,
|
||||||
|
bios_date,
|
||||||
|
sys_vendor,
|
||||||
|
product_name,
|
||||||
|
product_version,
|
||||||
|
product_serial,
|
||||||
|
product_uuid,
|
||||||
|
board_vendor,
|
||||||
|
board_name,
|
||||||
|
board_version,
|
||||||
|
board_serial,
|
||||||
|
board_asset_tag,
|
||||||
|
chassis_vendor,
|
||||||
|
chassis_type,
|
||||||
|
chassis_version,
|
||||||
|
chassis_serial,
|
||||||
|
chassis_asset_tag,
|
||||||
|
dmi_data_max,
|
||||||
|
};
|
||||||
|
|
||||||
|
static char *i830_dmi_data[dmi_data_max];
|
||||||
|
|
||||||
|
#define I830_DMI_FIELD_FUNC(field) \
|
||||||
|
static void i830_dmi_store_##field(void) \
|
||||||
|
{\
|
||||||
|
FILE *f = NULL;\
|
||||||
|
f = fopen(DMIID_FILE(field), "r");\
|
||||||
|
if (f == NULL) {\
|
||||||
|
xfree(i830_dmi_data[field]); i830_dmi_data[field] = NULL;\
|
||||||
|
return;\
|
||||||
|
}\
|
||||||
|
fread(i830_dmi_data[field], 64, 1, f);\
|
||||||
|
fclose(f);\
|
||||||
|
}
|
||||||
|
|
||||||
|
I830_DMI_FIELD_FUNC(bios_vendor);
|
||||||
|
I830_DMI_FIELD_FUNC(bios_version);
|
||||||
|
I830_DMI_FIELD_FUNC(bios_date);
|
||||||
|
I830_DMI_FIELD_FUNC(sys_vendor);
|
||||||
|
I830_DMI_FIELD_FUNC(product_name);
|
||||||
|
I830_DMI_FIELD_FUNC(product_version);
|
||||||
|
I830_DMI_FIELD_FUNC(product_serial);
|
||||||
|
I830_DMI_FIELD_FUNC(product_uuid);
|
||||||
|
I830_DMI_FIELD_FUNC(board_vendor);
|
||||||
|
I830_DMI_FIELD_FUNC(board_name);
|
||||||
|
I830_DMI_FIELD_FUNC(board_version);
|
||||||
|
I830_DMI_FIELD_FUNC(board_serial);
|
||||||
|
I830_DMI_FIELD_FUNC(board_asset_tag);
|
||||||
|
I830_DMI_FIELD_FUNC(chassis_vendor);
|
||||||
|
I830_DMI_FIELD_FUNC(chassis_type);
|
||||||
|
I830_DMI_FIELD_FUNC(chassis_version);
|
||||||
|
I830_DMI_FIELD_FUNC(chassis_serial);
|
||||||
|
I830_DMI_FIELD_FUNC(chassis_asset_tag);
|
||||||
|
|
||||||
|
static void i830_dmi_scan(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < dmi_data_max; i++) {
|
||||||
|
i830_dmi_data[i] = xcalloc(64, sizeof(char));
|
||||||
|
if (!i830_dmi_data[i]) {
|
||||||
|
int j;
|
||||||
|
for (j = 0; j < i; j++) {
|
||||||
|
xfree(i830_dmi_data[j]);
|
||||||
|
i830_dmi_data[i] = NULL;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
i830_dmi_store_bios_vendor();
|
||||||
|
i830_dmi_store_bios_version();
|
||||||
|
i830_dmi_store_bios_date();
|
||||||
|
i830_dmi_store_sys_vendor();
|
||||||
|
i830_dmi_store_product_name();
|
||||||
|
i830_dmi_store_product_version();
|
||||||
|
i830_dmi_store_product_serial();
|
||||||
|
i830_dmi_store_product_uuid();
|
||||||
|
i830_dmi_store_board_vendor();
|
||||||
|
i830_dmi_store_board_name();
|
||||||
|
i830_dmi_store_board_version();
|
||||||
|
i830_dmi_store_board_serial();
|
||||||
|
i830_dmi_store_board_asset_tag();
|
||||||
|
i830_dmi_store_chassis_vendor();
|
||||||
|
i830_dmi_store_chassis_type();
|
||||||
|
i830_dmi_store_chassis_version();
|
||||||
|
i830_dmi_store_chassis_serial();
|
||||||
|
i830_dmi_store_chassis_asset_tag();
|
||||||
|
}
|
||||||
|
|
||||||
|
#define DMIID_DUMP(field) \
|
||||||
|
ErrorF("\t" # field ": %s", i830_dmi_data[field] ?\
|
||||||
|
i830_dmi_data[field] : "unknown")
|
||||||
|
|
||||||
|
static void i830_dmi_dump(void)
|
||||||
|
{
|
||||||
|
ErrorF("i830_dmi_dump:\n");
|
||||||
|
DMIID_DUMP(bios_vendor);
|
||||||
|
DMIID_DUMP(bios_version);
|
||||||
|
DMIID_DUMP(bios_date);
|
||||||
|
DMIID_DUMP(sys_vendor);
|
||||||
|
DMIID_DUMP(product_name);
|
||||||
|
DMIID_DUMP(product_version);
|
||||||
|
DMIID_DUMP(product_serial);
|
||||||
|
DMIID_DUMP(product_uuid);
|
||||||
|
DMIID_DUMP(board_vendor);
|
||||||
|
DMIID_DUMP(board_name);
|
||||||
|
DMIID_DUMP(board_version);
|
||||||
|
DMIID_DUMP(board_serial);
|
||||||
|
DMIID_DUMP(board_asset_tag);
|
||||||
|
DMIID_DUMP(chassis_vendor);
|
||||||
|
DMIID_DUMP(chassis_type);
|
||||||
|
DMIID_DUMP(chassis_version);
|
||||||
|
DMIID_DUMP(chassis_serial);
|
||||||
|
DMIID_DUMP(chassis_asset_tag);
|
||||||
|
}
|
||||||
|
|
||||||
static void quirk_pipea_force (I830Ptr pI830)
|
static void quirk_pipea_force (I830Ptr pI830)
|
||||||
{
|
{
|
||||||
pI830->quirk_flag |= QUIRK_PIPEA_FORCE;
|
pI830->quirk_flag |= QUIRK_PIPEA_FORCE;
|
||||||
@ -59,6 +181,28 @@ static void quirk_mac_mini (I830Ptr pI830)
|
|||||||
pI830->quirk_flag |= QUIRK_IGNORE_MACMINI_LVDS;
|
pI830->quirk_flag |= QUIRK_IGNORE_MACMINI_LVDS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void quirk_lenovo_tv_dmi (I830Ptr pI830)
|
||||||
|
{
|
||||||
|
/* X60, X60s has no TV output.
|
||||||
|
* Z61 has S-video TV output.
|
||||||
|
* And they have same subsys ids...
|
||||||
|
*
|
||||||
|
* http://www-307.ibm.com/pc/support/site.wss/MIGR-45120.html
|
||||||
|
* http://www.thinkwiki.org/wiki/List_of_DMI_IDs
|
||||||
|
*/
|
||||||
|
if (!i830_dmi_data[bios_version]) {
|
||||||
|
ErrorF("Failed to load DMI info, X60 TV quirk not applied.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!strncmp(i830_dmi_data[bios_version], "7B", 2))
|
||||||
|
pI830->quirk_flag |= QUIRK_IGNORE_TV;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void quirk_ivch_dvob (I830Ptr pI830)
|
||||||
|
{
|
||||||
|
pI830->quirk_flag |= QUIRK_IVCH_NEED_DVOB;
|
||||||
|
}
|
||||||
|
|
||||||
/* keep this list sorted by OEM, then by chip ID */
|
/* keep this list sorted by OEM, then by chip ID */
|
||||||
static i830_quirk i830_quirk_list[] = {
|
static i830_quirk i830_quirk_list[] = {
|
||||||
/* Aopen mini pc */
|
/* Aopen mini pc */
|
||||||
@ -77,8 +221,8 @@ static i830_quirk i830_quirk_list[] = {
|
|||||||
/* Dell XPS 1330 */
|
/* Dell XPS 1330 */
|
||||||
{ PCI_CHIP_I965_GM, 0x1028, 0x0209, quirk_ignore_tv },
|
{ PCI_CHIP_I965_GM, 0x1028, 0x0209, quirk_ignore_tv },
|
||||||
|
|
||||||
/* Lenovo X60s has no TV output */
|
/* Lenovo Napa TV (use dmi)*/
|
||||||
{ PCI_CHIP_I945_GM, 0x17aa, 0x201a, quirk_ignore_tv },
|
{ PCI_CHIP_I945_GM, 0x17aa, SUBSYS_ANY, quirk_lenovo_tv_dmi },
|
||||||
/* Lenovo T61 has no TV output */
|
/* Lenovo T61 has no TV output */
|
||||||
{ PCI_CHIP_I965_GM, 0x17aa, 0x20b5, quirk_ignore_tv },
|
{ PCI_CHIP_I965_GM, 0x17aa, 0x20b5, quirk_ignore_tv },
|
||||||
/* Lenovo 3000 v200 */
|
/* Lenovo 3000 v200 */
|
||||||
@ -91,6 +235,8 @@ static i830_quirk i830_quirk_list[] = {
|
|||||||
|
|
||||||
/* Toshiba Satellite U300 has no TV output */
|
/* Toshiba Satellite U300 has no TV output */
|
||||||
{ PCI_CHIP_I965_GM, 0x1179, 0xff50, quirk_ignore_tv },
|
{ PCI_CHIP_I965_GM, 0x1179, 0xff50, quirk_ignore_tv },
|
||||||
|
/* Toshiba i830M laptop (fix bug 11148) */
|
||||||
|
{ PCI_CHIP_I830_M, 0x1179, 0xff00, quirk_ivch_dvob },
|
||||||
|
|
||||||
/* Samsung Q35 has no TV output */
|
/* Samsung Q35 has no TV output */
|
||||||
{ PCI_CHIP_I945_GM, 0x144d, 0xc504, quirk_ignore_tv },
|
{ PCI_CHIP_I945_GM, 0x144d, 0xc504, quirk_ignore_tv },
|
||||||
@ -103,6 +249,9 @@ static i830_quirk i830_quirk_list[] = {
|
|||||||
/* ThinkPad X40 needs pipe A force quirk */
|
/* ThinkPad X40 needs pipe A force quirk */
|
||||||
{ PCI_CHIP_I855_GM, 0x1014, 0x0557, quirk_pipea_force },
|
{ PCI_CHIP_I855_GM, 0x1014, 0x0557, quirk_pipea_force },
|
||||||
|
|
||||||
|
/* Sony vaio PCG-r600HFP (fix bug 13722) */
|
||||||
|
{ PCI_CHIP_I830_M, 0x104d, 0x8100, quirk_ivch_dvob },
|
||||||
|
|
||||||
{ 0, 0, 0, NULL },
|
{ 0, 0, 0, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -110,6 +259,12 @@ void i830_fixup_devices(ScrnInfoPtr scrn)
|
|||||||
{
|
{
|
||||||
I830Ptr pI830 = I830PTR(scrn);
|
I830Ptr pI830 = I830PTR(scrn);
|
||||||
i830_quirk_ptr p = i830_quirk_list;
|
i830_quirk_ptr p = i830_quirk_list;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
i830_dmi_scan();
|
||||||
|
|
||||||
|
if (0)
|
||||||
|
i830_dmi_dump();
|
||||||
|
|
||||||
while (p && p->chipType != 0) {
|
while (p && p->chipType != 0) {
|
||||||
if (DEVICE_ID(pI830->PciInfo) == p->chipType &&
|
if (DEVICE_ID(pI830->PciInfo) == p->chipType &&
|
||||||
@ -119,4 +274,8 @@ void i830_fixup_devices(ScrnInfoPtr scrn)
|
|||||||
p->hook(pI830);
|
p->hook(pI830);
|
||||||
++p;
|
++p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < dmi_data_max; i++)
|
||||||
|
if (i830_dmi_data[i])
|
||||||
|
xfree(i830_dmi_data[i]);
|
||||||
}
|
}
|
||||||
|
@ -475,7 +475,6 @@ i830_overlay_continue(ScrnInfoPtr pScrn, Bool update_filter)
|
|||||||
OVERLAY_DEBUG("overlay_continue\n");
|
OVERLAY_DEBUG("overlay_continue\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
i830_overlay_off(ScrnInfoPtr pScrn)
|
i830_overlay_off(ScrnInfoPtr pScrn)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user