Commit f0a679af authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'fixes' of git://ftp.arm.linux.org.uk/~rmk/linux-arm

Pull ARM fixes from Russell King:
 "Another set of small fixes for ARM, covering various areas.

  Laura fixed a long standing issue with virt_addr_valid() failing to
  handle holes in memory.  Steve found a problem with dcache flushing
  for compound pages.  I fixed another bug in footbridge stuff causing
  time to tick slowly, and also a problem with the AES code which can
  cause linker errors.

  A patch from Rob which fixes Xen problems induced by a lack of
  consistency in our naming of ioremap_cache() - which thankfully has
  very few users"

* 'fixes' of git://ftp.arm.linux.org.uk/~rmk/linux-arm:
  ARM: 7933/1: rename ioremap_cached to ioremap_cache
  ARM: fix "bad mode in ... handler" message for undefined instructions
  CRYPTO: Fix more AES build errors
  ARM: 7931/1: Correct virt_addr_valid
  ARM: 7923/1: mm: fix dcache flush logic for compound high pages
  ARM: fix footbridge clockevent device
parents d11739e6 0a5ccc86
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
# define VFP_ABI_FRAME 0 # define VFP_ABI_FRAME 0
# define BSAES_ASM_EXTENDED_KEY # define BSAES_ASM_EXTENDED_KEY
# define XTS_CHAIN_TWEAK # define XTS_CHAIN_TWEAK
# define __ARM_ARCH__ __LINUX_ARM_ARCH__ # define __ARM_ARCH__ 7
#endif #endif
#ifdef __thumb__ #ifdef __thumb__
......
...@@ -701,7 +701,7 @@ $code.=<<___; ...@@ -701,7 +701,7 @@ $code.=<<___;
# define VFP_ABI_FRAME 0 # define VFP_ABI_FRAME 0
# define BSAES_ASM_EXTENDED_KEY # define BSAES_ASM_EXTENDED_KEY
# define XTS_CHAIN_TWEAK # define XTS_CHAIN_TWEAK
# define __ARM_ARCH__ __LINUX_ARM_ARCH__ # define __ARM_ARCH__ 7
#endif #endif
#ifdef __thumb__ #ifdef __thumb__
......
...@@ -329,7 +329,7 @@ extern void _memset_io(volatile void __iomem *, int, size_t); ...@@ -329,7 +329,7 @@ extern void _memset_io(volatile void __iomem *, int, size_t);
*/ */
#define ioremap(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE) #define ioremap(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE)
#define ioremap_nocache(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE) #define ioremap_nocache(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE)
#define ioremap_cached(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE_CACHED) #define ioremap_cache(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE_CACHED)
#define ioremap_wc(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE_WC) #define ioremap_wc(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE_WC)
#define iounmap __arm_iounmap #define iounmap __arm_iounmap
......
...@@ -347,7 +347,8 @@ static inline __deprecated void *bus_to_virt(unsigned long x) ...@@ -347,7 +347,8 @@ static inline __deprecated void *bus_to_virt(unsigned long x)
#define ARCH_PFN_OFFSET PHYS_PFN_OFFSET #define ARCH_PFN_OFFSET PHYS_PFN_OFFSET
#define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
#define virt_addr_valid(kaddr) ((unsigned long)(kaddr) >= PAGE_OFFSET && (unsigned long)(kaddr) < (unsigned long)high_memory) #define virt_addr_valid(kaddr) (((unsigned long)(kaddr) >= PAGE_OFFSET && (unsigned long)(kaddr) < (unsigned long)high_memory) \
&& pfn_valid(__pa(kaddr) >> PAGE_SHIFT) )
#endif #endif
......
...@@ -117,6 +117,6 @@ static inline bool set_phys_to_machine(unsigned long pfn, unsigned long mfn) ...@@ -117,6 +117,6 @@ static inline bool set_phys_to_machine(unsigned long pfn, unsigned long mfn)
return __set_phys_to_machine(pfn, mfn); return __set_phys_to_machine(pfn, mfn);
} }
#define xen_remap(cookie, size) ioremap_cached((cookie), (size)); #define xen_remap(cookie, size) ioremap_cache((cookie), (size));
#endif /* _ASM_ARM_XEN_PAGE_H */ #endif /* _ASM_ARM_XEN_PAGE_H */
...@@ -36,7 +36,13 @@ ...@@ -36,7 +36,13 @@
#include <asm/system_misc.h> #include <asm/system_misc.h>
#include <asm/opcodes.h> #include <asm/opcodes.h>
static const char *handler[]= { "prefetch abort", "data abort", "address exception", "interrupt" }; static const char *handler[]= {
"prefetch abort",
"data abort",
"address exception",
"interrupt",
"undefined instruction",
};
void *vectors_page; void *vectors_page;
......
...@@ -96,11 +96,12 @@ static struct irqaction footbridge_timer_irq = { ...@@ -96,11 +96,12 @@ static struct irqaction footbridge_timer_irq = {
void __init footbridge_timer_init(void) void __init footbridge_timer_init(void)
{ {
struct clock_event_device *ce = &ckevt_dc21285; struct clock_event_device *ce = &ckevt_dc21285;
unsigned rate = DIV_ROUND_CLOSEST(mem_fclk_21285, 16);
clocksource_register_hz(&cksrc_dc21285, (mem_fclk_21285 + 8) / 16); clocksource_register_hz(&cksrc_dc21285, rate);
setup_irq(ce->irq, &footbridge_timer_irq); setup_irq(ce->irq, &footbridge_timer_irq);
ce->cpumask = cpumask_of(smp_processor_id()); ce->cpumask = cpumask_of(smp_processor_id());
clockevents_config_and_register(ce, mem_fclk_21285, 0x4, 0xffffff); clockevents_config_and_register(ce, rate, 0x4, 0xffffff);
} }
...@@ -175,16 +175,16 @@ void __flush_dcache_page(struct address_space *mapping, struct page *page) ...@@ -175,16 +175,16 @@ void __flush_dcache_page(struct address_space *mapping, struct page *page)
unsigned long i; unsigned long i;
if (cache_is_vipt_nonaliasing()) { if (cache_is_vipt_nonaliasing()) {
for (i = 0; i < (1 << compound_order(page)); i++) { for (i = 0; i < (1 << compound_order(page)); i++) {
void *addr = kmap_atomic(page); void *addr = kmap_atomic(page + i);
__cpuc_flush_dcache_area(addr, PAGE_SIZE); __cpuc_flush_dcache_area(addr, PAGE_SIZE);
kunmap_atomic(addr); kunmap_atomic(addr);
} }
} else { } else {
for (i = 0; i < (1 << compound_order(page)); i++) { for (i = 0; i < (1 << compound_order(page)); i++) {
void *addr = kmap_high_get(page); void *addr = kmap_high_get(page + i);
if (addr) { if (addr) {
__cpuc_flush_dcache_area(addr, PAGE_SIZE); __cpuc_flush_dcache_area(addr, PAGE_SIZE);
kunmap_high(page); kunmap_high(page + i);
} }
} }
} }
......
...@@ -73,7 +73,7 @@ static int pxa2xx_flash_probe(struct platform_device *pdev) ...@@ -73,7 +73,7 @@ static int pxa2xx_flash_probe(struct platform_device *pdev)
return -ENOMEM; return -ENOMEM;
} }
info->map.cached = info->map.cached =
ioremap_cached(info->map.phys, info->map.size); ioremap_cache(info->map.phys, info->map.size);
if (!info->map.cached) if (!info->map.cached)
printk(KERN_WARNING "Failed to ioremap cached %s\n", printk(KERN_WARNING "Failed to ioremap cached %s\n",
info->map.name); info->map.name);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment