Update needed to Fedora13 Kernel Source

Paoloni, Gabriele gabriele.paoloni at intel.com
Tue Feb 8 13:20:02 UTC 2011


In the Fedora13 Kernel Source there is an issue with the Intel AGP driver that does not allow the X server to start on some Sandybrige platform. The issue has been solved in the Vanilla 2.6.35 according to the commits inline below and as consequence also in the latest updated Fedora14 kernel.

http://www.spinics.net/lists/stable-commits/msg08831.html

http://www.spinics.net/lists/stable-commits/msg08832.html

http://www.spinics.net/lists/stable-commits/msg08833.html

For compatibility and reliability reasons we are working on Fedora13 and we would like to have such changes included in the Fedora 13 Kernel Source as well.



Is it possible to have it integrated in the Fedora13 branch?

When is the expected release date?



Thanks and Regards



Gabriele Paoloni



Find inline below the patch generated against the Fedora13 2.6.34.7 Kernel



************************************************************************************************************

************************************************************************************************************



Signed-off-by: Gabriele Paoloni <gabriele.paoloni at intel.com<mailto:gabriele.paoloni at intel.com>> <paoloni.gabriele at gmail.com<mailto:paoloni.gabriele at gmail.com>>



diff -urN a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c

--- a/drivers/char/agp/intel-agp.c  2011-02-07 19:48:44.463536867 +0000

+++ b/drivers/char/agp/intel-agp.c  2011-02-07 19:46:35.656668212 +0000

@@ -815,17 +815,27 @@

          "HD Graphics", NULL, &intel_i965_driver },

      { PCI_DEVICE_ID_INTEL_IRONLAKE_MC2_HB, PCI_DEVICE_ID_INTEL_IRONLAKE_M_IG,

          "HD Graphics", NULL, &intel_i965_driver },

-     { PCI_DEVICE_ID_INTEL_SANDYBRIDGE_HB, PCI_DEVICE_ID_INTEL_SANDYBRIDGE_IG,

-         "Sandybridge", NULL, &intel_i965_driver },

-     { PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB, PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_IG,

-         "Sandybridge", NULL, &intel_i965_driver },

+     { PCI_DEVICE_ID_INTEL_SANDYBRIDGE_HB, PCI_DEVICE_ID_INTEL_SANDYBRIDGE_GT1_IG,

+         "Sandybridge", NULL, &intel_gen6_driver },

+     { PCI_DEVICE_ID_INTEL_SANDYBRIDGE_HB, PCI_DEVICE_ID_INTEL_SANDYBRIDGE_GT2_IG,

+         "Sandybridge", NULL, &intel_gen6_driver },

+     { PCI_DEVICE_ID_INTEL_SANDYBRIDGE_HB, PCI_DEVICE_ID_INTEL_SANDYBRIDGE_GT2_PLUS_IG,

+         "Sandybridge", NULL, &intel_gen6_driver },

+     { PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB, PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_GT1_IG,

+         "Sandybridge", NULL, &intel_gen6_driver },

+     { PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB, PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_GT2_IG,

+         "Sandybridge", NULL, &intel_gen6_driver },

+     { PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB, PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_GT2_PLUS_IG,

+         "Sandybridge", NULL, &intel_gen6_driver },

+     { PCI_DEVICE_ID_INTEL_SANDYBRIDGE_S_HB, PCI_DEVICE_ID_INTEL_SANDYBRIDGE_S_IG,

+         "Sandybridge", NULL, &intel_gen6_driver },

      { 0, 0, NULL, NULL, NULL }

 };



 static int __devinit intel_gmch_probe(struct pci_dev *pdev,

                              struct agp_bridge_data *bridge)  {

-     int i;

+     int i, mask;

      bridge->driver = NULL;



      for (i = 0; intel_agp_chipsets[i].name != NULL; i++) { @@ -845,14 +855,19 @@



      dev_info(&pdev->dev, "Intel %s Chipset\n", intel_agp_chipsets[i].name);



-     if (bridge->driver->mask_memory == intel_i965_mask_memory) {

-           if (pci_set_dma_mask(intel_private.pcidev, DMA_BIT_MASK(36)))

-                 dev_err(&intel_private.pcidev->dev,

-                       "set gfx device dma mask 36bit failed!\n");

-           else

-                 pci_set_consistent_dma_mask(intel_private.pcidev,

-                                       DMA_BIT_MASK(36));

-     }

+     if (bridge->driver->mask_memory == intel_gen6_mask_memory)

+           mask = 40;

+     else if (bridge->driver->mask_memory == intel_i965_mask_memory)

+           mask = 36;

+     else

+           mask = 32;

+

+     if (pci_set_dma_mask(intel_private.pcidev, DMA_BIT_MASK(mask)))

+           dev_err(&intel_private.pcidev->dev,

+                 "set gfx device dma mask %d-bit failed!\n", mask);

+     else

+           pci_set_consistent_dma_mask(intel_private.pcidev,

+                                 DMA_BIT_MASK(mask));



      return 1;

 }

@@ -1036,6 +1051,7 @@

      ID(PCI_DEVICE_ID_INTEL_IRONLAKE_MC2_HB),

      ID(PCI_DEVICE_ID_INTEL_SANDYBRIDGE_HB),

      ID(PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB),

+     ID(PCI_DEVICE_ID_INTEL_SANDYBRIDGE_S_HB),

      { }

 };



diff -urN a/drivers/char/agp/intel-agp.h b/drivers/char/agp/intel-agp.h

--- a/drivers/char/agp/intel-agp.h  2011-02-07 19:48:44.463536867 +0000

+++ b/drivers/char/agp/intel-agp.h  2011-02-07 19:46:37.030332262 +0000

@@ -194,10 +194,17 @@

 #define PCI_DEVICE_ID_INTEL_IRONLAKE_MA_HB         0x0062

 #define PCI_DEVICE_ID_INTEL_IRONLAKE_MC2_HB    0x006a

 #define PCI_DEVICE_ID_INTEL_IRONLAKE_M_IG          0x0046

-#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_HB  0x0100 -#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_IG  0x0102 -#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB  0x0104 -#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_IG  0x0106

+#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_HB           0x0100  /* Desktop */

+#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_GT1_IG       0x0102

+#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_GT2_IG       0x0112

+#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_GT2_PLUS_IG  0x0122

+#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB         0x0104  /* Mobile */

+#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_GT1_IG     0x0106

+#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_GT2_IG     0x0116

+#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_GT2_PLUS_IG      0x0126

+#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_S_HB         0x0108  /* Server */

+#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_S_IG         0x010A

+



 /* cover 915 and 945 variants */

 #define IS_I915 (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_E7221_HB || \ @@ -224,7 +231,8 @@

            agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_PINEVIEW_HB)



 #define IS_SNB (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_SANDYBRIDGE_HB || \

-           agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB)

+           agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB || \

+           agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_SANDYBRIDGE_S_HB)



 #define IS_G4X (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_EAGLELAKE_HB || \

            agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_Q45_HB || \ diff -urN a/drivers/char/agp/intel-gtt.c b/drivers/char/agp/intel-gtt.c

--- a/drivers/char/agp/intel-gtt.c  2011-02-07 19:48:44.620861708 +0000

+++ b/drivers/char/agp/intel-gtt.c  2011-02-07 19:46:38.141107459 +0000

@@ -581,8 +581,7 @@

                  gtt_entries = 0;

                  break;

            }

-     } else if (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_SANDYBRIDGE_HB ||

-              agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB) {

+     } else if (IS_SNB) {

            /*

             * SandyBridge has new memory control reg at 0x50.w

             */

@@ -1309,6 +1308,16 @@

      return addr | bridge->driver->masks[type].mask;  }



+static unsigned long intel_gen6_mask_memory(struct agp_bridge_data *bridge,

+                                 dma_addr_t addr, int type)

+{

+     /* gen6 has bit11-4 for physical addr bit39-32 */

+     addr |= (addr >> 28) & 0xff0;

+

+     /* Type checking must be done elsewhere */

+     return addr | bridge->driver->masks[type].mask; }

+

 static void intel_i965_get_gtt_range(int *gtt_offset, int *gtt_size)  {

      u16 snb_gmch_ctl;

@@ -1328,6 +1337,7 @@

            break;

      case PCI_DEVICE_ID_INTEL_SANDYBRIDGE_HB:

      case PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB:

+     case PCI_DEVICE_ID_INTEL_SANDYBRIDGE_S_HB:

            *gtt_offset = MB(2);



            pci_read_config_word(intel_private.pcidev, SNB_GMCH_CTRL, &snb_gmch_ctl); @@ -1488,12 +1498,45 @@

      .owner                  = THIS_MODULE,

      .aperture_sizes         = intel_i830_sizes,

      .size_type        = FIXED_APER_SIZE,

+     .num_aperture_sizes     = 4,

+     .needs_scratch_page     = true,

+     .configure        = intel_i9xx_configure,

+     .fetch_size       = intel_i9xx_fetch_size,

+     .cleanup          = intel_i915_cleanup,

+     .mask_memory            = intel_i965_mask_memory,

+     .masks                  = intel_i810_masks,

+     .agp_enable       = intel_i810_agp_enable,

+     .cache_flush            = global_cache_flush,

+     .create_gatt_table      = intel_i965_create_gatt_table,

+     .free_gatt_table  = intel_i830_free_gatt_table,

+     .insert_memory          = intel_i915_insert_entries,

+     .remove_memory          = intel_i915_remove_entries,

+     .alloc_by_type          = intel_i830_alloc_by_type,

+     .free_by_type           = intel_i810_free_by_type,

+     .agp_alloc_page         = agp_generic_alloc_page,

+     .agp_alloc_pages        = agp_generic_alloc_pages,

+     .agp_destroy_page = agp_generic_destroy_page,

+     .agp_destroy_pages      = agp_generic_destroy_pages,

+     .agp_type_to_mask_type  = intel_i830_type_to_mask_type,

+     .chipset_flush          = intel_i915_chipset_flush,

+#ifdef USE_PCI_DMA_API

+     .agp_map_page           = intel_agp_map_page,

+     .agp_unmap_page         = intel_agp_unmap_page,

+     .agp_map_memory         = intel_agp_map_memory,

+     .agp_unmap_memory = intel_agp_unmap_memory,

+#endif

+};

+

+static const struct agp_bridge_driver intel_gen6_driver = {

+     .owner                  = THIS_MODULE,

+     .aperture_sizes         = intel_i830_sizes,

+     .size_type        = FIXED_APER_SIZE,

      .num_aperture_sizes     = 4,

      .needs_scratch_page     = true,

      .configure        = intel_i9xx_configure,

      .fetch_size       = intel_i9xx_fetch_size,

      .cleanup          = intel_i915_cleanup,

-     .mask_memory            = intel_i965_mask_memory,

+     .mask_memory            = intel_gen6_mask_memory,

      .masks                  = intel_i810_masks,

      .agp_enable       = intel_i810_agp_enable,

      .cache_flush            = global_cache_flush,

diff -urN a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c

--- a/drivers/gpu/drm/i915/i915_drv.c     2011-02-07 19:48:44.473799207 +0000

+++ b/drivers/gpu/drm/i915/i915_drv.c     2011-02-07 19:47:18.418493437 +0000

@@ -180,7 +180,12 @@

      INTEL_VGA_DEVICE(0x0042, &intel_ironlake_d_info),

      INTEL_VGA_DEVICE(0x0046, &intel_ironlake_m_info),

      INTEL_VGA_DEVICE(0x0102, &intel_sandybridge_d_info),

+     INTEL_VGA_DEVICE(0x0112, &intel_sandybridge_d_info),

+     INTEL_VGA_DEVICE(0x0122, &intel_sandybridge_d_info),

      INTEL_VGA_DEVICE(0x0106, &intel_sandybridge_m_info),

+     INTEL_VGA_DEVICE(0x0116, &intel_sandybridge_m_info),

+     INTEL_VGA_DEVICE(0x0126, &intel_sandybridge_m_info),

+     INTEL_VGA_DEVICE(0x010A, &intel_sandybridge_d_info),

      {0, 0, 0}
 };
--------------------------------------------------------------
Intel Shannon Limited
Registered in Ireland
Registered Office: Collinstown Industrial Park, Leixlip, County Kildare
Registered Number: 308263
Business address: Dromore House, East Park, Shannon, Co. Clare

This e-mail and any attachments may contain confidential material for the sole use of the intended recipient(s). Any review or distribution by others is strictly prohibited. If you are not the intended recipient, please contact the sender and delete all copies.



More information about the kernel mailing list