Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 295179 Details for
Bug 430315
Xorg failed to start on Intel Corporation 82G33/G31 Express Integrated Graphics Controller (rev 02) using kernel-xen
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
drm/i915: Add support for the G33, Q33, and Q35 chipsets to kernel-xen
drm-G33-support.patch (text/plain), 6.46 KB, created by
Saurabh Bathe
on 2008-02-18 16:36:44 UTC
(
hide
)
Description:
drm/i915: Add support for the G33, Q33, and Q35 chipsets to kernel-xen
Filename:
MIME Type:
Creator:
Saurabh Bathe
Created:
2008-02-18 16:36:44 UTC
Size:
6.46 KB
patch
obsolete
>--- a/drivers/char/drm/drm_pciids.h.orig 2008-02-18 20:31:18.000000000 +0530 >+++ b/drivers/char/drm/drm_pciids.h 2008-02-18 20:32:13.000000000 +0530 >@@ -296,6 +296,9 @@ > {0x8086, 0x2982, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ > {0x8086, 0x2992, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ > {0x8086, 0x29a2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ >+ {0x8086, 0x29b2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ >+ {0x8086, 0x29c2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ >+ {0x8086, 0x29d2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ > {0, 0, 0} > > #define nouveau_PCI_IDS \ >--- a/drivers/char/drm/i915_dma.c.orig 2008-02-18 20:32:45.000000000 +0530 >+++ b/drivers/char/drm/i915_dma.c 2008-02-18 20:58:00.000000000 +0530 >@@ -36,6 +36,9 @@ > dev->pci_device == 0x2992 || \ > dev->pci_device == 0x29A2 || \ > dev->pci_device == 0x2A02) >+#define IS_G33(dev) (dev->pci_device == 0x29b2 || \ >+ dev->pci_device == 0x29c2 || \ >+ dev->pci_device == 0x29d2) > > /* Really want an OS-independent resettable timer. Would like to have > * this loop run for (eg) 3 sec, but have the timer reset every time >@@ -105,6 +108,11 @@ > /* Need to rewrite hardware status page */ > I915_WRITE(0x02080, 0x1ffff000); > } >+ if (dev_priv->status_gfx_addr) { >+ dev_priv->status_gfx_addr = 0; >+ drm_core_ioremapfree(&dev_priv->hws_map, dev); >+ I915_WRITE(0x2080, 0x1ffff000); >+ } > > drm_free(dev->dev_private, sizeof(drm_i915_private_t), > DRM_MEM_DRIVER); >@@ -179,22 +187,22 @@ > dev_priv->allow_batchbuffer = 1; > > /* Program Hardware Status Page */ >- dev_priv->status_page_dmah = drm_pci_alloc(dev, PAGE_SIZE, PAGE_SIZE, >- 0xffffffff); >+ if (!IS_G33(dev)) { >+ dev_priv->status_page_dmah = >+ drm_pci_alloc(dev, PAGE_SIZE, PAGE_SIZE, 0xffffffff); >+ >+ if (!dev_priv->status_page_dmah) { >+ dev->dev_private = (void *)dev_priv; >+ i915_dma_cleanup(dev); >+ DRM_ERROR("Can not allocate hardware status page\n"); >+ return DRM_ERR(ENOMEM); >+ } >+ dev_priv->hw_status_page = dev_priv->status_page_dmah->vaddr; >+ dev_priv->dma_status_page = dev_priv->status_page_dmah->busaddr; > >- if (!dev_priv->status_page_dmah) { >- dev->dev_private = (void *)dev_priv; >- i915_dma_cleanup(dev); >- DRM_ERROR("Can not allocate hardware status page\n"); >- return DRM_ERR(ENOMEM); >+ memset(dev_priv->hw_status_page, 0, PAGE_SIZE); >+ I915_WRITE(0x02080, dev_priv->dma_status_page); > } >- dev_priv->hw_status_page = dev_priv->status_page_dmah->vaddr; >- dev_priv->dma_status_page = dev_priv->status_page_dmah->busaddr; >- >- memset(dev_priv->hw_status_page, 0, PAGE_SIZE); >- DRM_DEBUG("hw status page @ %p\n", dev_priv->hw_status_page); >- >- I915_WRITE(0x02080, dev_priv->dma_status_page); > DRM_DEBUG("Enabled hardware status page\n"); > > dev->dev_private = (void *)dev_priv; >@@ -231,7 +239,10 @@ > } > DRM_DEBUG("hw status page @ %p\n", dev_priv->hw_status_page); > >- I915_WRITE(0x02080, dev_priv->dma_status_page); >+ if (dev_priv->status_gfx_addr != 0) >+ I915_WRITE(0x02080, dev_priv->status_gfx_addr); >+ else >+ I915_WRITE(0x02080, dev_priv->dma_status_page); > DRM_DEBUG("Enabled hardware status page\n"); > > return 0; >@@ -739,6 +750,47 @@ > return 0; > } > >+static int i915_set_status_page(DRM_IOCTL_ARGS) >+{ >+ DRM_DEVICE; >+ drm_i915_private_t *dev_priv = dev->dev_private; >+ drm_i915_hws_addr_t hws; >+ >+ if (!dev_priv) { >+ DRM_ERROR("%s called with no initialization\n", __FUNCTION__); >+ return DRM_ERR(EINVAL); >+ } >+ DRM_COPY_FROM_USER_IOCTL(hws, (drm_i915_hws_addr_t __user *) data, >+ sizeof(hws)); >+ printk(KERN_DEBUG "set status page addr 0x%08x\n", (u32)hws.addr); >+ >+ dev_priv->status_gfx_addr = hws.addr & (0x1ffff<<12); >+ >+ dev_priv->hws_map.offset = dev->agp->agp_info.aper_base + hws.addr; >+ dev_priv->hws_map.size = 4*1024; >+ dev_priv->hws_map.type = 0; >+ dev_priv->hws_map.flags = 0; >+ dev_priv->hws_map.mtrr = 0; >+ >+ drm_core_ioremap(&dev_priv->hws_map, dev); >+ if (dev_priv->hws_map.handle == NULL) { >+ dev->dev_private = (void *)dev_priv; >+ i915_dma_cleanup(dev); >+ dev_priv->status_gfx_addr = 0; >+ DRM_ERROR("can not ioremap virtual address for" >+ " G33 hw status page\n"); >+ return DRM_ERR(ENOMEM); >+ } >+ dev_priv->hw_status_page = dev_priv->hws_map.handle; >+ >+ memset(dev_priv->hw_status_page, 0, PAGE_SIZE); >+ I915_WRITE(0x02080, dev_priv->status_gfx_addr); >+ DRM_DEBUG("load hws 0x2080 with gfx mem 0x%x\n", >+ dev_priv->status_gfx_addr); >+ DRM_DEBUG("load hws at %p\n", dev_priv->hw_status_page); >+ return 0; >+} >+ > int i915_driver_load(drm_device_t *dev, unsigned long flags) > { > /* i915 has 4 more counters */ >@@ -785,6 +837,7 @@ > [DRM_IOCTL_NR(DRM_I915_SET_VBLANK_PIPE)] = { i915_vblank_pipe_set, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY }, > [DRM_IOCTL_NR(DRM_I915_GET_VBLANK_PIPE)] = { i915_vblank_pipe_get, DRM_AUTH }, > [DRM_IOCTL_NR(DRM_I915_VBLANK_SWAP)] = {i915_vblank_swap, DRM_AUTH}, >+ [DRM_IOCTL_NR(DRM_I915_HWS_ADDR)] = {i915_set_status_page, DRM_AUTH}, > }; > > int i915_max_ioctl = DRM_ARRAY_SIZE(i915_ioctls); >--- a/drivers/char/drm/i915_drm.h.orig 2008-02-18 20:58:18.000000000 +0530 >+++ b/drivers/char/drm/i915_drm.h 2008-02-18 20:59:24.000000000 +0530 >@@ -142,6 +142,7 @@ > #define DRM_I915_SET_VBLANK_PIPE 0x0d > #define DRM_I915_GET_VBLANK_PIPE 0x0e > #define DRM_I915_VBLANK_SWAP 0x0f >+#define DRM_I915_HWS_ADDR 0x11 > > #define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t) > #define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH) >@@ -262,4 +263,8 @@ > unsigned int sequence; > } drm_i915_vblank_swap_t; > >+typedef struct drm_i915_hws_addr { >+ uint64_t addr; >+} drm_i915_hws_addr_t; >+ > #endif /* _I915_DRM_H_ */ >--- a/drivers/char/drm/i915_drv.h.orig 2008-02-18 21:00:12.000000000 +0530 >+++ b/drivers/char/drm/i915_drv.h 2008-02-18 21:00:40.000000000 +0530 >@@ -91,6 +91,8 @@ > void *hw_status_page; > dma_addr_t dma_status_page; > unsigned long counter; >+ unsigned int status_gfx_addr; >+ drm_local_map_t hws_map; > > unsigned int cpp; > int back_offset;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 430315
:
293027
|
295178
| 295179 |
298497
|
298498
|
298717
|
298720