How do I get the xf86-video-intel to work on a DELL D610 under
FreeBSD 6.4?
Mark Andrews
Mark_Andrews at isc.org
Wed Jan 21 06:23:42 PST 2009
In message <1232507970.1860.9.camel at wombat.2hip.net>, Robert Noland writes:
>
> --=-vgnUuZBqAt2Vb45jVePh
> Content-Type: text/plain
> Content-Transfer-Encoding: quoted-printable
>
> On Wed, 2009-01-21 at 13:59 +1100, Mark Andrews wrote:
> > In message <200901210247.n0L2l7qw002241 at drugs.dv.isc.org>, Mark Andrews w=
> rites:
> > >=20
> > > In message <200901210237.n0L2bgIj002006 at drugs.dv.isc.org>, Mark Andrews=
> write
> > > s:
> > > > > On Wed, 2009-01-21 at 13:19 +1100, Mark Andrews wrote:
> > > > > > > Ok, I think maybe I see what is going on. Try not loading
> > > > > > acpi_video.
> > > > > > > 6 doesn't appear to have vgapci which iirc, is needed for both =
> acpi
> > > > > > and
> > > > > > > agp to attach to the device.
> > > > > > >=3D20
> > > > > > > robert.
> > > > > >=3D20
> > > > > > That did it. Thanks.
> > > > > >=3D20
> > > > > > Now where is the best place to record this bit of informa=
> tion
> > > > > > for others to find?
> > > > >=20
> > > > > Looking at the tree, acpi_video looks like it has been in 6 for a l=
> ong
> > > > > time... at least 2 years. I'm not sure why vgapci was never MFC'd.
> > > > > This is only an issue on 6. 7 and 8 will allow both to attach via
> > > > > vgapci.
> > > > >=20
> > > > > robert.
> > > >=20
> > > > Do I need to file a PR for this?
> > > =20
> > > I knew I had acpi_video in there for a reason.
> > > Shutting the lid gives a blank screen otherwise.
> > >=20
> > > #!/bin/sh
> > > # deal with lid switch events
> > >=20
> > > if [ "x$1" =3D x0x00 ]; then
> > > /usr/bin/logger -t Lid Closed at `/bin/date`
> > > /sbin/sysctl hw.acpi.video.lcd0.active=3D0
> > > else
> > > /usr/bin/logger -t Lid Opened at `/bin/date`
> > > /sbin/sysctl hw.acpi.video.lcd0.active=3D1
> > > fi
> >=20
> > Should I just copy the driver from 7 or will it need to be
> > modified? I'm willing to test.
>
> You could try it, I can't think of anything off hand that would prevent
> it from working, but in order to MFC it, I would have to pull 6 trees
> and at least build test as well.
>
> robert.
I got it working using the following changes and
$FreeBSD: src/sys/dev/pci/vga_pci.c,v 1.3 2005/12/20 22:41:33 jhb Exp$.
I havn't tested to see if I can get away without the change to drm_pciids.h.
That was mention in some email to stable as getting agp to work with the
same chipset on a different Dell box.
Mark
Index: sys/conf/files
===================================================================
RCS file: /home/ncvs/src/sys/conf/files,v
retrieving revision 1.1031.2.78
diff -u -r1.1031.2.78 files
--- sys/conf/files 14 Jan 2009 10:17:35 -0000 1.1031.2.78
+++ sys/conf/files 21 Jan 2009 03:44:03 -0000
@@ -837,6 +837,7 @@
dev/pci/pci_pci.c optional pci
dev/pci/pci_user.c optional pci
dev/pci/pcib_if.m standard
+dev/pci/vga_pci.c optional pci
dev/pdq/if_fea.c optional fea eisa
dev/pdq/if_fpa.c optional fpa pci
dev/pdq/pdq.c optional fea eisa nowerror
Index: sys/dev/acpica/acpi_video.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/acpica/acpi_video.c,v
retrieving revision 1.10.2.2
diff -u -r1.10.2.2 acpi_video.c
--- sys/dev/acpica/acpi_video.c 16 Aug 2006 13:51:05 -0000 1.10.2.2
+++ sys/dev/acpica/acpi_video.c 21 Jan 2009 13:57:25 -0000
@@ -70,6 +70,7 @@
/* interfaces */
static int acpi_video_modevent(struct module*, int, void *);
+static void acpi_video_identify(driver_t *driver, device_t parent);
static int acpi_video_probe(device_t);
static int acpi_video_attach(device_t);
static int acpi_video_detach(device_t);
@@ -143,6 +144,7 @@
#define DSS_COMMIT (1 << 31)
static device_method_t acpi_video_methods[] = {
+ DEVMETHOD(device_identify, acpi_video_identify),
DEVMETHOD(device_probe, acpi_video_probe),
DEVMETHOD(device_attach, acpi_video_attach),
DEVMETHOD(device_detach, acpi_video_detach),
@@ -158,7 +160,7 @@
static devclass_t acpi_video_devclass;
-DRIVER_MODULE(acpi_video, pci, acpi_video_driver, acpi_video_devclass,
+DRIVER_MODULE(acpi_video, vgapci, acpi_video_driver, acpi_video_devclass,
acpi_video_modevent, NULL);
MODULE_DEPEND(acpi_video, acpi, 1, 1, 1);
@@ -196,6 +198,14 @@
return (err);
}
+static void
+acpi_video_identify(driver_t *driver, device_t parent)
+{
+
+ if (device_find_child(parent, "acpi_video", -1) == NULL)
+ device_add_child(parent, "acpi_video", -1);
+}
+
static int
acpi_video_probe(device_t dev)
{
Index: sys/dev/drm/drm_pciids.h
===================================================================
RCS file: /home/ncvs/src/sys/dev/drm/drm_pciids.h,v
retrieving revision 1.2.2.6
diff -u -r1.2.2.6 drm_pciids.h
--- sys/dev/drm/drm_pciids.h 24 Mar 2008 10:43:41 -0000 1.2.2.6
+++ sys/dev/drm/drm_pciids.h 20 Jan 2009 12:27:23 -0000
@@ -287,6 +287,7 @@
{0x8086, 0x2572, 0, "Intel i865G GMCH"}, \
{0x8086, 0x2582, 0, "Intel i915G"}, \
{0x8086, 0x2592, 0, "Intel i915GM"}, \
+ {0x8086, 0x2792, 0, "Intel i915GML"}, \
{0x8086, 0x2772, 0, "Intel i945G"}, \
{0x8086, 0x27A2, 0, "Intel i945GM"}, \
{0x8086, 0x2972, 0, "Intel i946GZ"}, \
Index: sys/dev/drm/i915_drv.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/drm/i915_drv.c,v
retrieving revision 1.1.2.2
diff -u -r1.1.2.2 i915_drv.c
--- sys/dev/drm/i915_drv.c 17 May 2006 07:40:11 -0000 1.1.2.2
+++ sys/dev/drm/i915_drv.c 21 Jan 2009 13:13:12 -0000
@@ -100,7 +100,7 @@
};
static driver_t i915_driver = {
-#if __FreeBSD_version >= 700010
+#if __FreeBSD_version >= 604100
"drm",
#else
"drmsub",
@@ -110,7 +110,7 @@
};
extern devclass_t drm_devclass;
-#if __FreeBSD_version >= 700010
+#if __FreeBSD_version >= 604100
DRIVER_MODULE(i915, vgapci, i915_driver, drm_devclass, 0, 0);
#else
DRIVER_MODULE(i915, agp, i915_driver, drm_devclass, 0, 0);
Index: sys/dev/drm/mach64_drv.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/drm/mach64_drv.c,v
retrieving revision 1.1.2.2
diff -u -r1.1.2.2 mach64_drv.c
--- sys/dev/drm/mach64_drv.c 17 May 2006 07:40:11 -0000 1.1.2.2
+++ sys/dev/drm/mach64_drv.c 21 Jan 2009 08:48:39 -0000
@@ -109,7 +109,7 @@
};
extern devclass_t drm_devclass;
-#if __FreeBSD_version >= 700010
+#if __FreeBSD_version >= 604100
DRIVER_MODULE(mach64, vgapci, mach64_driver, drm_devclass, 0, 0);
#else
DRIVER_MODULE(mach64, pci, mach64_driver, drm_devclass, 0, 0);
Index: sys/dev/drm/mga_drv.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/drm/mga_drv.c,v
retrieving revision 1.9.2.2
diff -u -r1.9.2.2 mga_drv.c
--- sys/dev/drm/mga_drv.c 17 May 2006 07:40:11 -0000 1.9.2.2
+++ sys/dev/drm/mga_drv.c 21 Jan 2009 12:16:49 -0000
@@ -74,7 +74,7 @@
* device is 0x0021 (HB6 Universal PCI-PCI bridge), we reject the
* device.
*/
-#if __FreeBSD_version >= 700010
+#if __FreeBSD_version >= 604100
bus = device_get_parent(device_get_parent(dev->device));
#else
bus = device_get_parent(dev->device);
@@ -155,7 +155,7 @@
};
extern devclass_t drm_devclass;
-#if __FreeBSD_version >= 700010
+#if __FreeBSD_version >= 604100
DRIVER_MODULE(mga, vgapci, mga_driver, drm_devclass, 0, 0);
#else
DRIVER_MODULE(mga, pci, mga_driver, drm_devclass, 0, 0);
Index: sys/dev/drm/r128_drv.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/drm/r128_drv.c,v
retrieving revision 1.9.2.2
diff -u -r1.9.2.2 r128_drv.c
--- sys/dev/drm/r128_drv.c 17 May 2006 07:40:11 -0000 1.9.2.2
+++ sys/dev/drm/r128_drv.c 21 Jan 2009 08:48:49 -0000
@@ -109,7 +109,7 @@
};
extern devclass_t drm_devclass;
-#if __FreeBSD_version >= 700010
+#if __FreeBSD_version >= 604100
DRIVER_MODULE(r128, vgapci, r128_driver, drm_devclass, 0, 0);
#else
DRIVER_MODULE(r128, pci, r128_driver, drm_devclass, 0, 0);
Index: sys/dev/drm/radeon_drv.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/drm/radeon_drv.c,v
retrieving revision 1.12.2.2
diff -u -r1.12.2.2 radeon_drv.c
--- sys/dev/drm/radeon_drv.c 17 May 2006 07:40:11 -0000 1.12.2.2
+++ sys/dev/drm/radeon_drv.c 21 Jan 2009 08:48:54 -0000
@@ -114,7 +114,7 @@
};
extern devclass_t drm_devclass;
-#if __FreeBSD_version >= 700010
+#if __FreeBSD_version >= 604100
DRIVER_MODULE(radeon, vgapci, radeon_driver, drm_devclass, 0, 0);
#else
DRIVER_MODULE(radeon, pci, radeon_driver, drm_devclass, 0, 0);
Index: sys/dev/drm/savage_drv.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/drm/savage_drv.c,v
retrieving revision 1.1.2.2
diff -u -r1.1.2.2 savage_drv.c
--- sys/dev/drm/savage_drv.c 17 May 2006 07:40:11 -0000 1.1.2.2
+++ sys/dev/drm/savage_drv.c 21 Jan 2009 08:49:02 -0000
@@ -99,7 +99,7 @@
};
extern devclass_t drm_devclass;
-#if __FreeBSD_version >= 700010
+#if __FreeBSD_version >= 604100
DRIVER_MODULE(savage, vgapci, savage_driver, drm_devclass, 0, 0);
#else
DRIVER_MODULE(savage, pci, savage_driver, drm_devclass, 0, 0);
Index: sys/dev/drm/sis_drv.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/drm/sis_drv.c,v
retrieving revision 1.5.2.2
diff -u -r1.5.2.2 sis_drv.c
--- sys/dev/drm/sis_drv.c 17 May 2006 07:40:11 -0000 1.5.2.2
+++ sys/dev/drm/sis_drv.c 21 Jan 2009 08:49:09 -0000
@@ -92,7 +92,7 @@
};
extern devclass_t drm_devclass;
-#if __FreeBSD_version >= 700010
+#if __FreeBSD_version >= 604100
DRIVER_MODULE(sisdrm, vgapci, sis_driver, drm_devclass, 0, 0);
#else
DRIVER_MODULE(sisdrm, pci, sis_driver, drm_devclass, 0, 0);
Index: sys/pci/agp_i810.c
===================================================================
RCS file: /home/ncvs/src/sys/pci/Attic/agp_i810.c,v
retrieving revision 1.32.2.4
diff -u -r1.32.2.4 agp_i810.c
--- sys/pci/agp_i810.c 8 Nov 2007 20:50:13 -0000 1.32.2.4
+++ sys/pci/agp_i810.c 21 Jan 2009 13:40:05 -0000
@@ -188,7 +188,8 @@
devid -= 0x20000;
break;
};
- if (device_get_children(device_get_parent(dev), &children, &nchildren))
+ if (device_get_children(device_get_parent(device_get_parent(dev)),
+ &children, &nchildren))
return 0;
for (i = 0; i < nchildren; i++) {
@@ -203,6 +204,15 @@
return 0;
}
+static void
+agp_i810_identify(driver_t *driver, device_t parent)
+{
+
+ if (device_find_child(parent, "agp", -1) == NULL &&
+ agp_i810_match(parent))
+ device_add_child(parent, "agp", -1);
+}
+
static int
agp_i810_probe(device_t dev)
{
@@ -273,7 +283,6 @@
return ENXIO;
}
- device_verbose(dev);
device_set_desc(dev, desc);
return BUS_PROBE_DEFAULT;
}
@@ -485,18 +494,13 @@
gatt->ag_physical = pgtblctl & ~1;
}
- /* Add a device for the drm to attach to */
- if (!device_add_child( dev, "drmsub", -1 ))
- printf("out of memory...\n");
-
- return bus_generic_attach(dev);
+ return 0;
}
static int
agp_i810_detach(device_t dev)
{
struct agp_i810_softc *sc = device_get_softc(dev);
- device_t child;
agp_free_cdev(dev);
@@ -531,10 +535,6 @@
}
agp_free_res(dev);
- child = device_find_child( dev, "drmsub", 0 );
- if (child)
- device_delete_child( dev, child );
-
return 0;
}
@@ -920,26 +920,12 @@
return 0;
}
-static int
-agp_i810_print_child(device_t dev, device_t child)
-{
- int retval = 0;
-
- retval += bus_print_child_header(dev, child);
- retval += printf(": (child of agp_i810.c)");
- retval += bus_print_child_footer(dev, child);
-
- return retval;
-}
-
static device_method_t agp_i810_methods[] = {
/* Device interface */
+ DEVMETHOD(device_identify, agp_i810_identify),
DEVMETHOD(device_probe, agp_i810_probe),
DEVMETHOD(device_attach, agp_i810_attach),
DEVMETHOD(device_detach, agp_i810_detach),
- DEVMETHOD(device_shutdown, bus_generic_shutdown),
- DEVMETHOD(device_suspend, bus_generic_suspend),
- DEVMETHOD(device_resume, bus_generic_resume),
/* AGP interface */
DEVMETHOD(agp_get_aperture, agp_i810_get_aperture),
@@ -953,14 +939,6 @@
DEVMETHOD(agp_bind_memory, agp_i810_bind_memory),
DEVMETHOD(agp_unbind_memory, agp_i810_unbind_memory),
- /* bus methods */
- DEVMETHOD(bus_print_child, agp_i810_print_child),
- DEVMETHOD(bus_alloc_resource, bus_generic_alloc_resource),
- DEVMETHOD(bus_release_resource, bus_generic_release_resource),
- DEVMETHOD(bus_activate_resource, bus_generic_activate_resource),
- DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource),
- DEVMETHOD(bus_setup_intr, bus_generic_setup_intr),
- DEVMETHOD(bus_teardown_intr, bus_generic_teardown_intr),
{ 0, 0 }
};
@@ -972,6 +950,6 @@
static devclass_t agp_devclass;
-DRIVER_MODULE(agp_i810, pci, agp_i810_driver, agp_devclass, 0, 0);
+DRIVER_MODULE(agp_i810, vgapci, agp_i810_driver, agp_devclass, 0, 0);
MODULE_DEPEND(agp_i810, agp, 1, 1, 1);
MODULE_DEPEND(agp_i810, pci, 1, 1, 1);
--
Mark Andrews, ISC
1 Seymour St., Dundas Valley, NSW 2117, Australia
PHONE: +61 2 9871 4742 INTERNET: Mark_Andrews at isc.org
More information about the freebsd-x11
mailing list