On 10:20 Sat 06 Dec , Ralf Baechle wrote: > On Fri, Dec 05, 2008 at 11:43:42PM +0800, Zhang Le wrote: > > > I have tried xorg-server-1.5.2 on loongson 2f recently. > > But I found it doesn't work. > > It's mainly because of this change: > > http://www.x.org/wiki/PciReworkProposal > > > > In short: > > "Rather than duplicating the efforts of kernel developers, X.org needs to use the > > interfaces provided by the kernel as much as possible." > > > > I have read some code of libpciaccess, the new library utilizing kernel function > > to access pci bus. It will try to mmap this file: > > /sys/bus/pci/devices/0000:0x:xx.x/resource0 > > (replace x with any digit appropriate) > > Note there is a 0 at the end of the file name. This file's permission is 600. > > > > However, I found on my loongson system, there is only > > /sys/bus/pci/devices/0000:0x:xx.x/resource > > Note there is no 0 at the end. > > > > Then I tried to read kernel code. I found it seems that for mips linux to have > > this file, HAVE_PCI_MMAP must be defined. However, it is currently not defined. > > > > Since I am not familiar with PCI, yet. > > So could someone please shed some light on this? > > Why HAVE_PCI_MMAP is not defined? > > Here is a quick'n'dirty solution which I've not tested beyond just > compiling. It should work but performance will be bad. Either way, I'm > interested in a test report with X. Thanks, Ralf. I will test it. > Signed-off-by: Ralf Baechle <ralf@xxxxxxxxxxxxxx> > > diff --git a/arch/mips/include/asm/pci.h b/arch/mips/include/asm/pci.h > index 5510c53..053e463 100644 > --- a/arch/mips/include/asm/pci.h > +++ b/arch/mips/include/asm/pci.h > @@ -79,6 +79,11 @@ static inline void pcibios_penalize_isa_irq(int irq, int active) > /* We don't do dynamic PCI IRQ allocation */ > } > > +#define HAVE_PCI_MMAP > + > +extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, > + enum pci_mmap_state mmap_state, int write_combine); > + > /* > * Dynamic DMA mapping stuff. > * MIPS has everything mapped statically. > diff --git a/arch/mips/pci/pci.c b/arch/mips/pci/pci.c > index a377e9d..9233193 100644 > --- a/arch/mips/pci/pci.c > +++ b/arch/mips/pci/pci.c > @@ -354,6 +354,22 @@ EXPORT_SYMBOL(PCIBIOS_MIN_IO); > EXPORT_SYMBOL(PCIBIOS_MIN_MEM); > #endif > > +int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, > + enum pci_mmap_state mmap_state, int write_combine) > +{ > + unsigned long prot; > + > + /* > + * Ignore write-combine; for now only return uncached mappings. > + */ > + prot = pgprot_val(vma->vm_page_prot); > + prot = (prot & ~_CACHE_MASK) | _CACHE_UNCACHED; > + vma->vm_page_prot = __pgprot(prot); > + > + return remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff, > + vma->vm_end - vma->vm_start, vma->vm_page_prot); > +} > + > char * (*pcibios_plat_setup)(char *str) __devinitdata; > > char *__devinit pcibios_setup(char *str) > Zhang, Le