[ARM] 4554/1: replace consistent_sync() with flush_ioremap_region()
This fixes a regression from around 2.6.18, consistent_sync() will now BUG() under these circumstances. The use of consistent_sync() was a hack, replacing it's usage here with a new function, flush_ioremap_region(). Signed-off-by: Jared Hulbert <jaredeh@gmail.com> Acked-by: Pavel Pisa <pisa@cmp.felk.cvut.cz> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
cb00e99c0a
commit
90833fdab8
3 changed files with 11 additions and 7 deletions
|
@ -15,9 +15,7 @@
|
|||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/map.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
|
@ -26,7 +24,7 @@
|
|||
#include <asm/hardware.h>
|
||||
#include <asm/arch/pxa-regs.h>
|
||||
#include <asm/arch/lubbock.h>
|
||||
|
||||
#include <asm/cacheflush.h>
|
||||
|
||||
#define ROM_ADDR 0x00000000
|
||||
#define FLASH_ADDR 0x04000000
|
||||
|
@ -35,7 +33,7 @@
|
|||
|
||||
static void lubbock_map_inval_cache(struct map_info *map, unsigned long from, ssize_t len)
|
||||
{
|
||||
consistent_sync((char *)map->cached + from, len, DMA_FROM_DEVICE);
|
||||
flush_ioremap_region(map->phys, map->cached, from, len);
|
||||
}
|
||||
|
||||
static struct map_info lubbock_maps[2] = { {
|
||||
|
|
|
@ -15,8 +15,6 @@
|
|||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/map.h>
|
||||
|
@ -26,6 +24,7 @@
|
|||
#include <asm/hardware.h>
|
||||
#include <asm/arch/pxa-regs.h>
|
||||
#include <asm/arch/mainstone.h>
|
||||
#include <asm/cacheflush.h>
|
||||
|
||||
|
||||
#define ROM_ADDR 0x00000000
|
||||
|
@ -36,7 +35,7 @@
|
|||
static void mainstone_map_inval_cache(struct map_info *map, unsigned long from,
|
||||
ssize_t len)
|
||||
{
|
||||
consistent_sync((char *)map->cached + from, len, DMA_FROM_DEVICE);
|
||||
flush_ioremap_region(map->phys, map->cached, from, len);
|
||||
}
|
||||
|
||||
static struct map_info mainstone_maps[2] = { {
|
||||
|
|
|
@ -426,6 +426,13 @@ static inline void flush_anon_page(struct vm_area_struct *vma,
|
|||
*/
|
||||
#define flush_icache_page(vma,page) do { } while (0)
|
||||
|
||||
static inline void flush_ioremap_region(unsigned long phys, void __iomem *virt,
|
||||
unsigned offset, size_t size)
|
||||
{
|
||||
const void *start = (void __force *)virt + offset;
|
||||
dmac_inv_range(start, start + size);
|
||||
}
|
||||
|
||||
#define __cacheid_present(val) (val != read_cpuid(CPUID_ID))
|
||||
#define __cacheid_type_v7(val) ((val & (7 << 29)) == (4 << 29))
|
||||
|
||||
|
|
Loading…
Reference in a new issue