|
@@ -387,11 +387,7 @@ static void intel_i830_init_gtt_entries(void)
|
|
/* We obtain the size of the GTT, which is also stored (for some
|
|
/* We obtain the size of the GTT, which is also stored (for some
|
|
* reason) at the top of stolen memory. Then we add 4KB to that
|
|
* reason) at the top of stolen memory. Then we add 4KB to that
|
|
* for the video BIOS popup, which is also stored in there. */
|
|
* for the video BIOS popup, which is also stored in there. */
|
|
-
|
|
|
|
- if (IS_I965)
|
|
|
|
- size = 512 + 4;
|
|
|
|
- else
|
|
|
|
- size = agp_bridge->driver->fetch_size() + 4;
|
|
|
|
|
|
+ size = agp_bridge->driver->fetch_size() + 4;
|
|
|
|
|
|
if (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82830_HB ||
|
|
if (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82830_HB ||
|
|
agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82845G_HB) {
|
|
agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82845G_HB) {
|
|
@@ -805,6 +801,26 @@ static int intel_i915_create_gatt_table(struct agp_bridge_data *bridge)
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * The i965 supports 36-bit physical addresses, but to keep
|
|
|
|
+ * the format of the GTT the same, the bits that don't fit
|
|
|
|
+ * in a 32-bit word are shifted down to bits 4..7.
|
|
|
|
+ *
|
|
|
|
+ * Gcc is smart enough to notice that "(addr >> 28) & 0xf0"
|
|
|
|
+ * is always zero on 32-bit architectures, so no need to make
|
|
|
|
+ * this conditional.
|
|
|
|
+ */
|
|
|
|
+static unsigned long intel_i965_mask_memory(struct agp_bridge_data *bridge,
|
|
|
|
+ unsigned long addr, int type)
|
|
|
|
+{
|
|
|
|
+ /* Shift high bits down */
|
|
|
|
+ addr |= (addr >> 28) & 0xf0;
|
|
|
|
+
|
|
|
|
+ /* Type checking must be done elsewhere */
|
|
|
|
+ return addr | bridge->driver->masks[type].mask;
|
|
|
|
+}
|
|
|
|
+
|
|
static int intel_i965_fetch_size(void)
|
|
static int intel_i965_fetch_size(void)
|
|
{
|
|
{
|
|
struct aper_size_info_fixed *values;
|
|
struct aper_size_info_fixed *values;
|
|
@@ -832,7 +848,8 @@ static int intel_i965_fetch_size(void)
|
|
|
|
|
|
agp_bridge->previous_size = agp_bridge->current_size = (void *)(values + offset);
|
|
agp_bridge->previous_size = agp_bridge->current_size = (void *)(values + offset);
|
|
|
|
|
|
- return values[offset].size;
|
|
|
|
|
|
+ /* The i965 GTT is always sized as if it had a 512kB aperture size */
|
|
|
|
+ return 512;
|
|
}
|
|
}
|
|
|
|
|
|
/* The intel i965 automatically initializes the agp aperture during POST.
|
|
/* The intel i965 automatically initializes the agp aperture during POST.
|
|
@@ -1584,7 +1601,7 @@ static struct agp_bridge_driver intel_i965_driver = {
|
|
.fetch_size = intel_i965_fetch_size,
|
|
.fetch_size = intel_i965_fetch_size,
|
|
.cleanup = intel_i915_cleanup,
|
|
.cleanup = intel_i915_cleanup,
|
|
.tlb_flush = intel_i810_tlbflush,
|
|
.tlb_flush = intel_i810_tlbflush,
|
|
- .mask_memory = intel_i810_mask_memory,
|
|
|
|
|
|
+ .mask_memory = intel_i965_mask_memory,
|
|
.masks = intel_i810_masks,
|
|
.masks = intel_i810_masks,
|
|
.agp_enable = intel_i810_agp_enable,
|
|
.agp_enable = intel_i810_agp_enable,
|
|
.cache_flush = global_cache_flush,
|
|
.cache_flush = global_cache_flush,
|