在 2009-05-08五的 14:30 +0800,Zhang Le写道:
> Signed-off-by: Zhang Le <r0bertz@gentoo.org>
> ---
> arch/mips/pci/pci.c | 8 ++++++--
> 1 files changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/arch/mips/pci/pci.c b/arch/mips/pci/pci.c
> index b0eb9e7..4ca53ef 100644
> --- a/arch/mips/pci/pci.c
> +++ b/arch/mips/pci/pci.c
> @@ -346,10 +346,14 @@ int pci_mmap_page_range(struct pci_dev *dev, struct
> vm_area_struct *vma,
> return -EINVAL;
>
> /*
> - * Ignore write-combine; for now only return uncached mappings.
> + * For write-combine, return uncached accelerated mappings if CPU
> + * supports; otherwise, return uncached mappings.
> */
> prot = pgprot_val(vma->vm_page_prot);
> - prot = (prot & ~_CACHE_MASK) | _CACHE_UNCACHED;
> + if (write_combine && cpu_has_uncached_accelerated)
> + prot = (prot & ~_CACHE_MASK) | _CACHE_UNCACHED_ACCELERATED;
> + else
> + prot = (prot & ~_CACHE_MASK) | _CACHE_UNCACHED;
> vma->vm_page_prot = __pgprot(prot);
This should be definietely wrong for MMIOs.
uncache accelleration should only be enabled for addresses which have no
side effect when doing write combine such as video memory.
>
> return remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff,
|