diff options
Diffstat (limited to 'arch/ia64/mm/ioremap.c')
| -rw-r--r-- | arch/ia64/mm/ioremap.c | 14 | 
1 files changed, 9 insertions, 5 deletions
diff --git a/arch/ia64/mm/ioremap.c b/arch/ia64/mm/ioremap.c index 3dccdd8eb27..43964cde621 100644 --- a/arch/ia64/mm/ioremap.c +++ b/arch/ia64/mm/ioremap.c @@ -16,7 +16,7 @@  #include <asm/meminit.h>  static inline void __iomem * -__ioremap (unsigned long phys_addr) +__ioremap_uc(unsigned long phys_addr)  {  	return (void __iomem *) (__IA64_UNCACHED_OFFSET | phys_addr);  } @@ -24,7 +24,11 @@ __ioremap (unsigned long phys_addr)  void __iomem *  early_ioremap (unsigned long phys_addr, unsigned long size)  { -	return __ioremap(phys_addr); +	u64 attr; +	attr = kern_mem_attribute(phys_addr, size); +	if (attr & EFI_MEMORY_WB) +		return (void __iomem *) phys_to_virt(phys_addr); +	return __ioremap_uc(phys_addr);  }  void __iomem * @@ -47,7 +51,7 @@ ioremap (unsigned long phys_addr, unsigned long size)  	if (attr & EFI_MEMORY_WB)  		return (void __iomem *) phys_to_virt(phys_addr);  	else if (attr & EFI_MEMORY_UC) -		return __ioremap(phys_addr); +		return __ioremap_uc(phys_addr);  	/*  	 * Some chipsets don't support UC access to memory.  If @@ -93,7 +97,7 @@ ioremap (unsigned long phys_addr, unsigned long size)  		return (void __iomem *) (offset + (char __iomem *)addr);  	} -	return __ioremap(phys_addr); +	return __ioremap_uc(phys_addr);  }  EXPORT_SYMBOL(ioremap); @@ -103,7 +107,7 @@ ioremap_nocache (unsigned long phys_addr, unsigned long size)  	if (kern_mem_attribute(phys_addr, size) & EFI_MEMORY_WB)  		return NULL; -	return __ioremap(phys_addr); +	return __ioremap_uc(phys_addr);  }  EXPORT_SYMBOL(ioremap_nocache);  |