powerpc/64: flush_inval_dcache_range() becomes flush_dcache_range()
On most arches having function flush_dcache_range(), including PPC32, this function does a writeback and invalidation of the cache bloc. On PPC64, flush_dcache_range() only does a writeback while flush_inval_dcache_range() does the invalidation in addition. In addition it looks like within arch/powerpc/, there are no PPC64 platforms using flush_dcache_range() This patch drops the existing 64 bits version of flush_dcache_range() and renames flush_inval_dcache_range() into flush_dcache_range(). Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
6c5875843b
commit
1cfb725fb1
|
@ -112,7 +112,6 @@ static inline void invalidate_dcache_range(unsigned long start,
|
||||||
#endif /* CONFIG_PPC32 */
|
#endif /* CONFIG_PPC32 */
|
||||||
#ifdef CONFIG_PPC64
|
#ifdef CONFIG_PPC64
|
||||||
extern void flush_dcache_range(unsigned long start, unsigned long stop);
|
extern void flush_dcache_range(unsigned long start, unsigned long stop);
|
||||||
extern void flush_inval_dcache_range(unsigned long start, unsigned long stop);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
|
#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
|
||||||
|
|
|
@ -121,31 +121,8 @@ EXPORT_SYMBOL(flush_icache_range)
|
||||||
*
|
*
|
||||||
* flush all bytes from start to stop-1 inclusive
|
* flush all bytes from start to stop-1 inclusive
|
||||||
*/
|
*/
|
||||||
|
|
||||||
_GLOBAL_TOC(flush_dcache_range)
|
_GLOBAL_TOC(flush_dcache_range)
|
||||||
|
|
||||||
/*
|
|
||||||
* Flush the data cache to memory
|
|
||||||
*
|
|
||||||
* Different systems have different cache line sizes
|
|
||||||
*/
|
|
||||||
ld r10,PPC64_CACHES@toc(r2)
|
|
||||||
lwz r7,DCACHEL1BLOCKSIZE(r10) /* Get dcache block size */
|
|
||||||
addi r5,r7,-1
|
|
||||||
andc r6,r3,r5 /* round low to line bdy */
|
|
||||||
subf r8,r6,r4 /* compute length */
|
|
||||||
add r8,r8,r5 /* ensure we get enough */
|
|
||||||
lwz r9,DCACHEL1LOGBLOCKSIZE(r10) /* Get log-2 of dcache block size */
|
|
||||||
srw. r8,r8,r9 /* compute line count */
|
|
||||||
beqlr /* nothing to do? */
|
|
||||||
mtctr r8
|
|
||||||
0: dcbst 0,r6
|
|
||||||
add r6,r6,r7
|
|
||||||
bdnz 0b
|
|
||||||
sync
|
|
||||||
blr
|
|
||||||
EXPORT_SYMBOL(flush_dcache_range)
|
|
||||||
|
|
||||||
_GLOBAL(flush_inval_dcache_range)
|
|
||||||
ld r10,PPC64_CACHES@toc(r2)
|
ld r10,PPC64_CACHES@toc(r2)
|
||||||
lwz r7,DCACHEL1BLOCKSIZE(r10) /* Get dcache block size */
|
lwz r7,DCACHEL1BLOCKSIZE(r10) /* Get dcache block size */
|
||||||
addi r5,r7,-1
|
addi r5,r7,-1
|
||||||
|
@ -164,7 +141,7 @@ _GLOBAL(flush_inval_dcache_range)
|
||||||
sync
|
sync
|
||||||
isync
|
isync
|
||||||
blr
|
blr
|
||||||
|
EXPORT_SYMBOL(flush_dcache_range)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Flush a particular page from the data cache to RAM.
|
* Flush a particular page from the data cache to RAM.
|
||||||
|
|
|
@ -23,14 +23,14 @@
|
||||||
void arch_wb_cache_pmem(void *addr, size_t size)
|
void arch_wb_cache_pmem(void *addr, size_t size)
|
||||||
{
|
{
|
||||||
unsigned long start = (unsigned long) addr;
|
unsigned long start = (unsigned long) addr;
|
||||||
flush_inval_dcache_range(start, start + size);
|
flush_dcache_range(start, start + size);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(arch_wb_cache_pmem);
|
EXPORT_SYMBOL(arch_wb_cache_pmem);
|
||||||
|
|
||||||
void arch_invalidate_pmem(void *addr, size_t size)
|
void arch_invalidate_pmem(void *addr, size_t size)
|
||||||
{
|
{
|
||||||
unsigned long start = (unsigned long) addr;
|
unsigned long start = (unsigned long) addr;
|
||||||
flush_inval_dcache_range(start, start + size);
|
flush_dcache_range(start, start + size);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(arch_invalidate_pmem);
|
EXPORT_SYMBOL(arch_invalidate_pmem);
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ long __copy_from_user_flushcache(void *dest, const void __user *src,
|
||||||
unsigned long copied, start = (unsigned long) dest;
|
unsigned long copied, start = (unsigned long) dest;
|
||||||
|
|
||||||
copied = __copy_from_user(dest, src, size);
|
copied = __copy_from_user(dest, src, size);
|
||||||
flush_inval_dcache_range(start, start + size);
|
flush_dcache_range(start, start + size);
|
||||||
|
|
||||||
return copied;
|
return copied;
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,7 @@ void *memcpy_flushcache(void *dest, const void *src, size_t size)
|
||||||
unsigned long start = (unsigned long) dest;
|
unsigned long start = (unsigned long) dest;
|
||||||
|
|
||||||
memcpy(dest, src, size);
|
memcpy(dest, src, size);
|
||||||
flush_inval_dcache_range(start, start + size);
|
flush_dcache_range(start, start + size);
|
||||||
|
|
||||||
return dest;
|
return dest;
|
||||||
}
|
}
|
||||||
|
|
|
@ -125,7 +125,7 @@ int __ref arch_add_memory(int nid, u64 start, u64 size,
|
||||||
start, start + size, rc);
|
start, start + size, rc);
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
}
|
}
|
||||||
flush_inval_dcache_range(start, start + size);
|
flush_dcache_range(start, start + size);
|
||||||
|
|
||||||
return __add_pages(nid, start_pfn, nr_pages, restrictions);
|
return __add_pages(nid, start_pfn, nr_pages, restrictions);
|
||||||
}
|
}
|
||||||
|
@ -151,7 +151,7 @@ void __ref arch_remove_memory(int nid, u64 start, u64 size,
|
||||||
|
|
||||||
/* Remove htab bolted mappings for this section of memory */
|
/* Remove htab bolted mappings for this section of memory */
|
||||||
start = (unsigned long)__va(start);
|
start = (unsigned long)__va(start);
|
||||||
flush_inval_dcache_range(start, start + size);
|
flush_dcache_range(start, start + size);
|
||||||
ret = remove_section_mapping(start, start + size);
|
ret = remove_section_mapping(start, start + size);
|
||||||
WARN_ON_ONCE(ret);
|
WARN_ON_ONCE(ret);
|
||||||
|
|
||||||
|
|
|
@ -158,7 +158,7 @@ static void dart_cache_sync(unsigned int *base, unsigned int count)
|
||||||
unsigned int tmp;
|
unsigned int tmp;
|
||||||
|
|
||||||
/* Perform a standard cache flush */
|
/* Perform a standard cache flush */
|
||||||
flush_inval_dcache_range(start, end);
|
flush_dcache_range(start, end);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Perform the sequence described in the CPC925 manual to
|
* Perform the sequence described in the CPC925 manual to
|
||||||
|
|
|
@ -133,7 +133,7 @@ static void smu_start_cmd(void)
|
||||||
/* Flush command and data to RAM */
|
/* Flush command and data to RAM */
|
||||||
faddr = (unsigned long)smu->cmd_buf;
|
faddr = (unsigned long)smu->cmd_buf;
|
||||||
fend = faddr + smu->cmd_buf->length + 2;
|
fend = faddr + smu->cmd_buf->length + 2;
|
||||||
flush_inval_dcache_range(faddr, fend);
|
flush_dcache_range(faddr, fend);
|
||||||
|
|
||||||
|
|
||||||
/* We also disable NAP mode for the duration of the command
|
/* We also disable NAP mode for the duration of the command
|
||||||
|
@ -195,7 +195,7 @@ static irqreturn_t smu_db_intr(int irq, void *arg)
|
||||||
* reply length (it's only 2 cache lines anyway)
|
* reply length (it's only 2 cache lines anyway)
|
||||||
*/
|
*/
|
||||||
faddr = (unsigned long)smu->cmd_buf;
|
faddr = (unsigned long)smu->cmd_buf;
|
||||||
flush_inval_dcache_range(faddr, faddr + 256);
|
flush_dcache_range(faddr, faddr + 256);
|
||||||
|
|
||||||
/* Now check ack */
|
/* Now check ack */
|
||||||
ack = (~cmd->cmd) & 0xff;
|
ack = (~cmd->cmd) & 0xff;
|
||||||
|
|
Loading…
Reference in New Issue