cacheflush.S 1.5 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/*
 * vDSO provided cache flush routines
 *
 * Copyright (C) 2004 Benjamin Herrenschmuidt (benh@kernel.crashing.org),
 *                    IBM Corp.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version
 * 2 of the License, or (at your option) any later version.
 */
#include <linux/config.h>
#include <asm/processor.h>
#include <asm/ppc_asm.h>
#include <asm/vdso.h>
16
#include <asm/asm-offsets.h>
L
Linus Torvalds 已提交
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49

	.text

/*
 * Default "generic" version of __kernel_sync_dicache.
 *
 * void __kernel_sync_dicache(unsigned long start, unsigned long end)
 *
 * Flushes the data cache & invalidate the instruction cache for the
 * provided range [start, end[
 *
 * Note: all CPUs supported by this kernel have a 128 bytes cache
 * line size so we don't have to peek that info from the datapage
 */
V_FUNCTION_BEGIN(__kernel_sync_dicache)
  .cfi_startproc
	li	r5,127
	andc	r6,r3,r5		/* round low to line bdy */
	subf	r8,r6,r4		/* compute length */
	add	r8,r8,r5		/* ensure we get enough */
	srwi.	r8,r8,7			/* compute line count */
	beqlr				/* nothing to do? */
	mtctr	r8
	mr	r3,r6
1:	dcbst	0,r3
	addi	r3,r3,128
	bdnz	1b
	sync
	mtctr	r8
1:	icbi	0,r6
	addi	r6,r6,128
	bdnz	1b
	isync
50
	li	r3,0
L
Linus Torvalds 已提交
51 52 53 54 55 56 57 58 59 60 61 62
	blr
  .cfi_endproc
V_FUNCTION_END(__kernel_sync_dicache)


/*
 * POWER5 version of __kernel_sync_dicache
 */
V_FUNCTION_BEGIN(__kernel_sync_dicache_p5)
  .cfi_startproc
	sync
	isync
63
	li	r3,0
L
Linus Torvalds 已提交
64 65 66 67
	blr
  .cfi_endproc
V_FUNCTION_END(__kernel_sync_dicache_p5)