Author: kib
Date: Tue Nov 18 13:01:41 2014
New Revision: 274649
URL: https://svnweb.freebsd.org/changeset/base/274649

Log:
  MFC r274377:
  On 965 and higher, map GTT as write-combining.

Modified:
  stable/10/sys/dev/agp/agp_i810.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/agp/agp_i810.c
==============================================================================
--- stable/10/sys/dev/agp/agp_i810.c    Tue Nov 18 12:53:32 2014        
(r274648)
+++ stable/10/sys/dev/agp/agp_i810.c    Tue Nov 18 13:01:41 2014        
(r274649)
@@ -113,6 +113,8 @@ static int agp_sb_get_gtt_total_entries(
 
 static int agp_i810_install_gatt(device_t dev);
 static int agp_i830_install_gatt(device_t dev);
+static int agp_i965_install_gatt(device_t dev);
+static int agp_g4x_install_gatt(device_t dev);
 
 static void agp_i810_deinstall_gatt(device_t dev);
 static void agp_i830_deinstall_gatt(device_t dev);
@@ -395,7 +397,7 @@ static const struct agp_i810_driver agp_
        .get_stolen_size = agp_i915_get_stolen_size,
        .get_gtt_mappable_entries = agp_i915_get_gtt_mappable_entries,
        .get_gtt_total_entries = agp_i965_get_gtt_total_entries,
-       .install_gatt = agp_i830_install_gatt,
+       .install_gatt = agp_i965_install_gatt,
        .deinstall_gatt = agp_i830_deinstall_gatt,
        .write_gtt = agp_i965_write_gtt,
        .install_gtt_pte = agp_i965_install_gtt_pte,
@@ -464,7 +466,7 @@ static const struct agp_i810_driver agp_
        .get_stolen_size = agp_i915_get_stolen_size,
        .get_gtt_mappable_entries = agp_i915_get_gtt_mappable_entries,
        .get_gtt_total_entries = agp_gen5_get_gtt_total_entries,
-       .install_gatt = agp_i830_install_gatt,
+       .install_gatt = agp_g4x_install_gatt,
        .deinstall_gatt = agp_i830_deinstall_gatt,
        .write_gtt = agp_g4x_write_gtt,
        .install_gtt_pte = agp_g4x_install_gtt_pte,
@@ -487,7 +489,7 @@ static const struct agp_i810_driver agp_
        .get_stolen_size = agp_sb_get_stolen_size,
        .get_gtt_mappable_entries = agp_i915_get_gtt_mappable_entries,
        .get_gtt_total_entries = agp_sb_get_gtt_total_entries,
-       .install_gatt = agp_i830_install_gatt,
+       .install_gatt = agp_g4x_install_gatt,
        .deinstall_gatt = agp_i830_deinstall_gatt,
        .write_gtt = agp_sb_write_gtt,
        .install_gtt_pte = agp_sb_install_gtt_pte,
@@ -1405,14 +1407,11 @@ agp_i810_install_gatt(device_t dev)
        return (0);
 }
 
-static int
-agp_i830_install_gatt(device_t dev)
+static void
+agp_i830_install_gatt_init(struct agp_i810_softc *sc)
 {
-       struct agp_i810_softc *sc;
        uint32_t pgtblctl;
 
-       sc = device_get_softc(dev);
-
        /*
         * The i830 automatically initializes the 128k gatt on boot.
         * GATT address is already in there, make sure it's enabled.
@@ -1422,10 +1421,46 @@ agp_i830_install_gatt(device_t dev)
        bus_write_4(sc->sc_res[0], AGP_I810_PGTBL_CTL, pgtblctl);
        
        sc->gatt->ag_physical = pgtblctl & ~1;
+}
+
+static int
+agp_i830_install_gatt(device_t dev)
+{
+       struct agp_i810_softc *sc;
+
+       sc = device_get_softc(dev);
+       agp_i830_install_gatt_init(sc);
        return (0);
 }
 
 static int
+agp_gen4_install_gatt(device_t dev, const vm_size_t gtt_offset)
+{
+       struct agp_i810_softc *sc;
+
+       sc = device_get_softc(dev);
+       pmap_change_attr((vm_offset_t)rman_get_virtual(sc->sc_res[0]) +
+           gtt_offset, rman_get_size(sc->sc_res[0]) - gtt_offset,
+           VM_MEMATTR_WRITE_COMBINING);
+       agp_i830_install_gatt_init(sc);
+       return (0);
+}
+
+static int
+agp_i965_install_gatt(device_t dev)
+{
+
+       return (agp_gen4_install_gatt(dev, 512 * 1024));
+}
+
+static int
+agp_g4x_install_gatt(device_t dev)
+{
+
+       return (agp_gen4_install_gatt(dev, 2 * 1024 * 1024));
+}
+
+static int
 agp_i810_attach(device_t dev)
 {
        struct agp_i810_softc *sc;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to