summaryrefslogtreecommitdiff
path: root/linux-core
AgeCommit message (Expand)Author
2008-04-09Fixup sysfs output registrationJesse Barnes
2008-04-08Merge branch 'modesetting-101' of ssh://git.freedesktop.org/git/mesa/drm into...Jesse Barnes
2008-04-08Improved DRM sysfs supportJesse Barnes
2008-04-08radeon_ms: command buffer validation use array of function pointerJerome Glisse
2008-04-07Missing KERNEL_VERSION macroPatrice Mandin
2008-04-07radeon_ms: another fb fix reset mode if fb changedJerome Glisse
2008-04-07nouveau: enable accelerated move to sysmemBen Skeggs
2008-04-07nouveau: enable m2mf for tt<->vram moves, fix fence_pollBen Skeggs
2008-04-06radeon_ms: fix framebuffer codeJerome Glisse
2008-04-06Place highmem pages last in the ttm page array.Thomas Hellstrom
2008-04-06Use clflush() when available for cache flushing.Thomas Hellstrom
2008-04-06[I915] Fix VRAM eviction.Thomas Hellstrom
2008-04-06Fix emergency allocation accounting.Thomas Hellstrom
2008-04-03radeon_ms: fixes fb handlingJerome Glisse
2008-03-31radeon_ms: initial pass at command buffer validationJerome Glisse
2008-03-30Initialize the fence::error member.Thomas Hellstrom
2008-03-30[i915] Report buffer state _after_ fence submission to user-space.Thomas Hellstrom
2008-03-30Don't call fence::poll during irq if there are no waiters.Thomas Hellström
2008-03-27radeon_ms: this is a modesetting driver, bring things up to dateJerome Glisse
2008-03-27drm: remove authentication on master exit.Dave Airlie
2008-03-24nouveau: silence warningBen Skeggs
2008-03-20Merge branch 'modesetting-101' of ssh://git.freedesktop.org/git/mesa/drm into...Jerome Glisse
2008-03-20radeon_ms: fix fenceJerome Glisse
2008-03-17Evict cached_mapped relocatee before applying reloc.Thomas Hellstrom
2008-03-17drm: add master set/drop protocolDave Airlie
2008-03-17drm: pick correct master for cleaning upDave Airlie
2008-03-17drm: select the correct master to attempt to remove the lock from.Dave Airlie
2008-03-17drm/pcigart: fix the pci gart to use the drm_pci wrapper.Dave Airlie
2008-03-16[via] Allow a little larger stride for SG DMA DownloadFromScreen.Thomas Hellstrom
2008-03-16ati: fix rs690 igp gart by allocating the page table in 32-bit memoryDave Airlie
2008-03-16drm: this u32 should be a dma_addr_tDave Airlie
2008-03-14fix build problemsAlan Hourihane
2008-03-14drm: Fix race that can lockup the kernelMike Isely
2008-03-13Fix green offsetAlan Hourihane
2008-03-12Merge branch 'intel-post-reloc'Thomas Hellstrom
2008-03-12Merge branch 'master' of git+ssh://git.freedesktop.org/git/mesa/drm into mode...Alan Hourihane
2008-03-12Bug # 14712Thomas Hellstrom
2008-03-12Dont allow !sysadmin clients to alter the memory type ofThomas Hellstrom
2008-03-12Fix for debug memory routinesAlan Hourihane
2008-03-12Add error messageAlan Hourihane
2008-03-12Add an emergency pinnable memory quota for root-only processes.Thomas Hellstrom
2008-03-12Fix kernel crash when we hit OOM conditions.Thomas Hellstrom
2008-03-12Avoid duplicate calls to drm_ttm_bind in some cases.Thomas Hellstrom
2008-03-12Make sure other TTM memory types than TT is really unbound when evicted.Thomas Hellstrom
2008-03-12drm: fix fd closing ordering.Dave Airlie
2008-03-11Add support for monitor hotplug signals/waitsAlan Hourihane
2008-03-11drm: hopefully fix cursors on 965Dave Airlie
2008-03-10Merge branch 'modesetting-101' of ssh://git.freedesktop.org/git/mesa/drm into...Jerome Glisse
2008-03-10rradeon_ms: rework fence code and bring radeon ms up to dateJerome Glisse
2008-03-10remove unneeded load callDave Airlie
struct page *page; int i; int num_pages = 1 << order; DRM_DEBUG("%s\n", __FUNCTION__); page = virt_to_page((unsigned long)address); for (i = 0; i < num_pages; i++, page++) { #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15) __put_page(page); #endif ClearPageReserved(page); } free_pages((unsigned long)address, order); } int drm_ati_pcigart_cleanup(struct drm_device *dev, struct ati_pcigart_info *gart_info) { struct drm_sg_mem *entry = dev->sg; unsigned long pages; int i; int order; int num_pages, max_pages; /* we need to support large memory configurations */ if (!entry) { DRM_ERROR("no scatter/gather memory!\n"); return 0; } order = drm_order((gart_info->table_size + (PAGE_SIZE-1)) / PAGE_SIZE); num_pages = 1 << order; if (gart_info->bus_addr) { if (gart_info->gart_table_location == DRM_ATI_GART_MAIN) { pci_unmap_single(dev->pdev, gart_info->bus_addr, num_pages * PAGE_SIZE, PCI_DMA_TODEVICE); } max_pages = (gart_info->table_size / sizeof(u32)); pages = (entry->pages <= max_pages) ? entry->pages : max_pages; for (i = 0; i < pages; i++) { if (!entry->busaddr[i]) break; pci_unmap_single(dev->pdev, entry->busaddr[i], PAGE_SIZE, PCI_DMA_TODEVICE); } if (gart_info->gart_table_location == DRM_ATI_GART_MAIN) gart_info->bus_addr = 0; } if (gart_info->gart_table_location == DRM_ATI_GART_MAIN && gart_info->addr) { drm_ati_free_pcigart_table(gart_info->addr, order); gart_info->addr = NULL; } return 1; } EXPORT_SYMBOL(drm_ati_pcigart_cleanup); int drm_ati_pcigart_init(struct drm_device *dev, struct ati_pcigart_info *gart_info) { struct drm_sg_mem *entry = dev->sg; void *address = NULL; unsigned long pages; u32 *pci_gart, page_base, bus_address = 0; int i, j, ret = 0; int order; int max_pages; int num_pages; if (!entry) { DRM_ERROR("no scatter/gather memory!\n"); goto done; } if (gart_info->gart_table_location == DRM_ATI_GART_MAIN) { DRM_DEBUG("PCI: no table in VRAM: using normal RAM\n"); order = drm_order((gart_info->table_size + (PAGE_SIZE-1)) / PAGE_SIZE); num_pages = 1 << order; address = drm_ati_alloc_pcigart_table(order); if (!address) { DRM_ERROR("cannot allocate PCI GART page!\n"); goto done; } if (!dev->pdev) { DRM_ERROR("PCI device unknown!\n"); goto done; } bus_address = pci_map_single(dev->pdev, address, num_pages * PAGE_SIZE, PCI_DMA_TODEVICE); if (bus_address == 0) { DRM_ERROR("unable to map PCIGART pages!\n"); order = drm_order((gart_info->table_size + (PAGE_SIZE-1)) / PAGE_SIZE); drm_ati_free_pcigart_table(address, order); address = NULL; goto done; } } else { address = gart_info->addr; bus_address = gart_info->bus_addr; DRM_DEBUG("PCI: Gart Table: VRAM %08X mapped at %08lX\n", bus_address, (unsigned long)address); } pci_gart = (u32 *) address; max_pages = (gart_info->table_size / sizeof(u32)); pages = (entry->pages <= max_pages) ? entry->pages : max_pages; memset(pci_gart, 0, max_pages * sizeof(u32)); for (i = 0; i < pages; i++) { /* we need to support large memory configurations */ entry->busaddr[i] = pci_map_single(dev->pdev, page_address(entry-> pagelist[i]), PAGE_SIZE, PCI_DMA_TODEVICE); if (entry->busaddr[i] == 0) { DRM_ERROR("unable to map PCIGART pages!\n"); drm_ati_pcigart_cleanup(dev, gart_info); address = NULL; bus_address = 0; goto done; } page_base = (u32) entry->busaddr[i]; for (j = 0; j < (PAGE_SIZE / ATI_PCIGART_PAGE_SIZE); j++) { switch(gart_info->gart_reg_if) { case DRM_ATI_GART_IGP: *pci_gart = cpu_to_le32((page_base) | 0xc); break; case DRM_ATI_GART_PCIE: *pci_gart = cpu_to_le32((page_base >> 8) | 0xc); break; default: case DRM_ATI_GART_PCI: *pci_gart = cpu_to_le32(page_base); break; } pci_gart++; page_base += ATI_PCIGART_PAGE_SIZE; } } ret = 1; #if defined(__i386__) || defined(__x86_64__) wbinvd(); #else mb(); #endif done: gart_info->addr = address; gart_info->bus_addr = bus_address; return ret; } EXPORT_SYMBOL(drm_ati_pcigart_init);