From: Geoff Gustafson <grgustaf@redhat.com> Date: Tue, 25 Mar 2008 21:34:42 -0400 Subject: [agp] add cantiga ids Message-id: 20080326013442.GB12263@samurai.boston.redhat.com O-Subject: Re: [RHEL5.2 PATCH] add cantiga ids to agpgart driver (bz 438919) Bugzilla: 438919 The intel 2D graphics driver was updated in 5.2 Beta to a version that includes the early Cantiga graphics support (part of the Intel Montevina mobile platform). However, Intel's testing of the Beta revealed that this agpgart code was needed for it to be able to run on Cantiga. I just did this backport of the upstream patch: 4e8b6e25943a22036a6b704ebef634c7dec4c10e I tested it with the 86.el5 kernel on 5.2 Beta on Montevina, and where previously the /dev/agpgart device didn't show up, now it does and so X is able to come up using the intel driver. Note the hunk with "Intel Integrated Graphics Device" differs from upstream because of some reorganization. Please review. - Geoff Acked-by: Adam Jackson <ajackson@redhat.com> diff --git a/drivers/char/agp/agp.h b/drivers/char/agp/agp.h index cfaaa07..d5016d3 100644 --- a/drivers/char/agp/agp.h +++ b/drivers/char/agp/agp.h @@ -229,6 +229,9 @@ struct agp_bridge_data { #define I965_PGETBL_SIZE_512KB (0 << 1) #define I965_PGETBL_SIZE_256KB (1 << 1) #define I965_PGETBL_SIZE_128KB (2 << 1) +#define I965_PGETBL_SIZE_1MB (3 << 1) +#define I965_PGETBL_SIZE_2MB (4 << 1) +#define I965_PGETBL_SIZE_1_5MB (5 << 1) #define G33_PGETBL_SIZE_MASK (3 << 8) #define G33_PGETBL_SIZE_1M (1 << 8) #define G33_PGETBL_SIZE_2M (2 << 8) diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c index 707279e..b587f9e 100644 --- a/drivers/char/agp/intel-agp.c +++ b/drivers/char/agp/intel-agp.c @@ -30,13 +30,16 @@ #define PCI_DEVICE_ID_INTEL_Q35_IG 0x29B2 #define PCI_DEVICE_ID_INTEL_Q33_HB 0x29D0 #define PCI_DEVICE_ID_INTEL_Q33_IG 0x29D2 +#define PCI_DEVICE_ID_INTEL_IGD_HB 0x2A40 +#define PCI_DEVICE_ID_INTEL_IGD_IG 0x2A42 #define IS_I965 (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82946GZ_HB || \ agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965G_1_HB || \ agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965Q_HB || \ agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965G_HB || \ agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965GM_HB || \ - agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965GME_HB) + agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965GME_HB || \ + agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGD_HB) #define IS_G33 (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_G33_HB || \ agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_Q35_HB || \ @@ -430,6 +433,15 @@ static void intel_i830_init_gtt_entries(void) case I965_PGETBL_SIZE_512KB: size = 512; break; + case I965_PGETBL_SIZE_1MB: + size = 1024; + break; + case I965_PGETBL_SIZE_2MB: + size = 2048; + break; + case I965_PGETBL_SIZE_1_5MB: + size = 1024 + 512; + break; default: printk(KERN_INFO PFX "Unknown page table size 0x%x, " "assuming 512KB\n", (pgetbl_ctl & I965_PGETBL_SIZE_MASK)); @@ -925,6 +937,7 @@ static int intel_i965_create_gatt_table(struct agp_bridge_data *bridge) struct aper_size_info_fixed *size; int num_entries; u32 temp; + int gtt_offset, gtt_size; size = agp_bridge->current_size; page_order = size->page_order; @@ -934,7 +947,13 @@ static int intel_i965_create_gatt_table(struct agp_bridge_data *bridge) pci_read_config_dword(intel_i830_private.i830_dev, I915_MMADDR, &temp); temp &= 0xfff00000; - intel_i830_private.gtt = ioremap((temp + (512 * 1024)) , 512 * 1024); + + if (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGD_HB) + gtt_offset = gtt_size = MB(2); + else + gtt_offset = gtt_size = KB(512); + + intel_i830_private.gtt = ioremap((temp + gtt_offset), gtt_size); if (!intel_i830_private.gtt) return -ENOMEM; @@ -1974,6 +1993,13 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev, } else bridge->driver = NULL; break; + case PCI_DEVICE_ID_INTEL_IGD_HB: + if (find_i830(PCI_DEVICE_ID_INTEL_IGD_IG)) { + bridge->driver = &intel_i965_driver; + name = "Intel Integrated Graphics Device"; + } else + bridge->driver = NULL; + break; case PCI_DEVICE_ID_INTEL_7505_0: bridge->driver = &intel_7505_driver; @@ -2148,6 +2174,7 @@ static struct pci_device_id agp_intel_pci_table[] = { ID(PCI_DEVICE_ID_INTEL_G33_HB), ID(PCI_DEVICE_ID_INTEL_Q35_HB), ID(PCI_DEVICE_ID_INTEL_Q33_HB), + ID(PCI_DEVICE_ID_INTEL_IGD_HB), { } };