cpu-v4.h (283365) | cpu-v4.h (289759) |
---|---|
1/*- 2 * Copyright 2014 Svatopluk Kraus <onwahe@gmail.com> 3 * Copyright 2014 Michal Meloun <meloun@miracle.cz> 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 10 unchanged lines hidden (view full) --- 19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 * | 1/*- 2 * Copyright 2014 Svatopluk Kraus <onwahe@gmail.com> 3 * Copyright 2014 Michal Meloun <meloun@miracle.cz> 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 10 unchanged lines hidden (view full) --- 19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 * |
27 * $FreeBSD: head/sys/arm/include/cpu-v6.h 283365 2015-05-24 12:12:01Z andrew $ | 27 * $FreeBSD: head/sys/arm/include/cpu-v6.h 289759 2015-10-22 16:38:01Z jah $ |
28 */ 29#ifndef MACHINE_CPU_V6_H 30#define MACHINE_CPU_V6_H 31 32/* There are no user serviceable parts here, they may change without notice */ 33#ifndef _KERNEL 34#error Only include this file in the kernel 35#else --- 430 unchanged lines hidden (view full) --- 466 va &= ~cpuinfo.dcache_line_mask; 467 for ( ; va < eva; va += cpuinfo.dcache_line_size) { 468 _CP15_DCIMVAC(va); 469 } 470 dsb(); 471} 472 473/* | 28 */ 29#ifndef MACHINE_CPU_V6_H 30#define MACHINE_CPU_V6_H 31 32/* There are no user serviceable parts here, they may change without notice */ 33#ifndef _KERNEL 34#error Only include this file in the kernel 35#else --- 430 unchanged lines hidden (view full) --- 466 va &= ~cpuinfo.dcache_line_mask; 467 for ( ; va < eva; va += cpuinfo.dcache_line_size) { 468 _CP15_DCIMVAC(va); 469 } 470 dsb(); 471} 472 473/* |
474 * Discard D-cache lines to PoC, prior to overwrite by DMA engine 475 * 476 * Invalidate caches, discarding data in dirty lines. This is useful 477 * if the memory is about to be overwritten, e.g. by a DMA engine. 478 * Invalidate caches from innermost to outermost to follow the flow 479 * of dirty cachelines. 480 */ 481static __inline void 482dcache_dma_preread(vm_offset_t va, vm_paddr_t pa, vm_size_t size) 483{ 484 vm_offset_t eva = va + size; 485 486 /* invalidate L1 first */ 487 dsb(); 488 va &= ~cpuinfo.dcache_line_mask; 489 for ( ; va < eva; va += cpuinfo.dcache_line_size) { 490 _CP15_DCIMVAC(va); 491 } 492 dsb(); 493 494 /* then L2 */ 495 cpu_l2cache_inv_range(pa, size); 496} 497 498/* |
|
474 * Write back D-cache to PoC 475 * 476 * Caches are written back from innermost to outermost as dirty cachelines 477 * flow in this direction. In given range, no dirty cacheline should remain 478 * in any cache after this operation finishes. 479 */ 480static __inline void 481dcache_wb_poc(vm_offset_t va, vm_paddr_t pa, vm_size_t size) --- 55 unchanged lines hidden --- | 499 * Write back D-cache to PoC 500 * 501 * Caches are written back from innermost to outermost as dirty cachelines 502 * flow in this direction. In given range, no dirty cacheline should remain 503 * in any cache after this operation finishes. 504 */ 505static __inline void 506dcache_wb_poc(vm_offset_t va, vm_paddr_t pa, vm_size_t size) --- 55 unchanged lines hidden --- |