Some agp(4) fixes:
authorHasso Tepper <hasso@dragonflybsd.org>
Fri, 22 Aug 2008 07:08:13 +0000 (07:08 +0000)
committerHasso Tepper <hasso@dragonflybsd.org>
Fri, 22 Aug 2008 07:08:13 +0000 (07:08 +0000)
* Enable the support for G33/Q35/Q33.
* Add resume support to the agp_i810 family.
* Calculate the number of pages the GATT spans in Nvidia chipsets instead
  of harcoding in to 33 pages.

Obtained-from: FreeBSD

sys/dev/agp/agp_i810.c
sys/dev/agp/agp_nvidia.c

index 41298ab..708c769 100644 (file)
@@ -25,7 +25,7 @@
  * SUCH DAMAGE.
  *
  *     $FreeBSD: src/sys/dev/agp/agp_i810.c,v 1.43 2007/11/12 21:51:36 jhb Exp $
- *     $DragonFly: src/sys/dev/agp/agp_i810.c,v 1.17 2008/01/08 04:25:07 hasso Exp $
+ *     $DragonFly: src/sys/dev/agp/agp_i810.c,v 1.18 2008/08/22 07:08:13 hasso Exp $
  */
 
 /*
@@ -158,14 +158,12 @@ static const struct agp_i810_match {
            "Intel Q965 SVGA controller"},
        {0x29a28086, CHIP_I965, 0x00020000,
            "Intel G965 SVGA controller"},
-/*
        {0x29b28086, CHIP_G33, 0x00020000,
            "Intel Q35 SVGA controller"},
        {0x29c28086, CHIP_G33, 0x00020000,
            "Intel G33 SVGA controller"},
        {0x29d28086, CHIP_G33, 0x00020000,
            "Intel Q33 SVGA controller"},
-*/
        {0x2a028086, CHIP_I965, 0x00020000,
            "Intel GM965 SVGA controller"},
        {0x2a128086, CHIP_I965, 0x00020000,
@@ -624,6 +622,21 @@ agp_i810_detach(device_t dev)
        return 0;
 }
 
+static int
+agp_i810_resume(device_t dev)
+{
+       struct agp_i810_softc *sc;
+       sc = device_get_softc(dev);
+
+       AGP_SET_APERTURE(dev, sc->initial_aperture);
+
+       /* Install the GATT. */
+       bus_write_4(sc->sc_res[0], AGP_I810_PGTBL_CTL,
+       sc->gatt->ag_physical | 1);
+
+       return (bus_generic_resume(dev));
+}
+
 /**
  * Sets the PCI resource size of the aperture on i830-class and below chipsets,
  * while returning failure on later chipsets when an actual change is
@@ -984,6 +997,8 @@ static device_method_t agp_i810_methods[] = {
        DEVMETHOD(device_probe,         agp_i810_probe),
        DEVMETHOD(device_attach,        agp_i810_attach),
        DEVMETHOD(device_detach,        agp_i810_detach),
+       DEVMETHOD(device_suspend,       bus_generic_suspend),
+       DEVMETHOD(device_resume,        agp_i810_resume),
 
        /* AGP interface */
        DEVMETHOD(agp_get_aperture,     agp_generic_get_aperture),
index 1b849db..05a6afc 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/dev/agp/agp_nvidia.c,v 1.13 2007/11/12 21:51:37 jhb Exp $
- * $DragonFly: src/sys/dev/agp/agp_nvidia.c,v 1.7 2008/01/07 01:34:58 corecode Exp $
+ * $DragonFly: src/sys/dev/agp/agp_nvidia.c,v 1.8 2008/08/22 07:08:13 hasso Exp $
  */
 
 /*
@@ -339,7 +339,7 @@ agp_nvidia_flush_tlb (device_t dev, int offset)
        struct agp_nvidia_softc *sc;
        u_int32_t wbc_reg, temp;
        volatile u_int32_t *ag_virtual;
-       int i;
+       int i, pages;
 
        sc = (struct agp_nvidia_softc *)device_get_softc(dev);
 
@@ -365,9 +365,10 @@ agp_nvidia_flush_tlb (device_t dev, int offset)
        ag_virtual = (volatile u_int32_t *)sc->gatt->ag_virtual;
 
        /* Flush TLB entries. */
-       for(i = 0; i < 32 + 1; i++)
+       pages = sc->gatt->ag_entries * sizeof(u_int32_t) / PAGE_SIZE;
+       for(i = 0; i < pages; i++)
                temp = ag_virtual[i * PAGE_SIZE / sizeof(u_int32_t)];
-       for(i = 0; i < 32 + 1; i++)
+       for(i = 0; i < pages; i++)
                temp = ag_virtual[i * PAGE_SIZE / sizeof(u_int32_t)];
 
        return (0);