cache_octeon.c revision 1.4
1/*	$OpenBSD: cache_octeon.c,v 1.4 2012/04/21 12:20:30 miod Exp $	*/
2/*
3 * Copyright (c) 2010 Takuya ASADA.
4 *
5 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17/*
18 * Copyright (c) 1998-2004 Opsycon AB (www.opsycon.se)
19 *
20 * Redistribution and use in source and binary forms, with or without
21 * modification, are permitted provided that the following conditions
22 * are met:
23 * 1. Redistributions of source code must retain the above copyright
24 *    notice, this list of conditions and the following disclaimer.
25 * 2. Redistributions in binary form must reproduce the above copyright
26 *    notice, this list of conditions and the following disclaimer in the
27 *    documentation and/or other materials provided with the distribution.
28 *
29 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
30 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
31 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
32 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
33 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
34 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
35 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
36 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
37 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
38 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
39 * SUCH DAMAGE.
40 *
41 */
42
43#include <sys/param.h>
44#include <sys/systm.h>
45#include <sys/kernel.h>
46
47#include <uvm/uvm_extern.h>
48
49#include <mips64/cache.h>
50#include <machine/cpu.h>
51
52#define SYNC() asm volatile("sync\n" ::: "memory")
53#define SYNCI() \
54	asm volatile( \
55		".set push\n" \
56		".set mips64r2\n" \
57		".word 0x041f0000\n" \
58		"nop\n" \
59		".set pop")
60
61void
62Octeon_ConfigCache(struct cpu_info *ci)
63{
64	ci->ci_cacheways = 4;
65	ci->ci_l1instcachesize = 32 * 1024;
66	ci->ci_l1instcacheline = 128;
67	ci->ci_l1datacachesize = 16 * 1024;
68	ci->ci_l1datacacheline = 128;
69	ci->ci_l2size = 128 * 1024;
70	ci->ci_l3size = 0;
71}
72
73void
74Octeon_SyncCache(struct cpu_info *ci)
75{
76	SYNC();
77}
78
79void
80Octeon_InvalidateICache(struct cpu_info *ci, vaddr_t va, size_t len)
81{
82	/* A SYNCI flushes the entire icache on OCTEON */
83	SYNCI();
84}
85
86void
87Octeon_SyncDCachePage(struct cpu_info *ci, vaddr_t va, paddr_t pa)
88{
89}
90
91void
92Octeon_HitSyncDCache(struct cpu_info *ci, vaddr_t va, size_t len)
93{
94}
95
96void
97Octeon_HitInvalidateDCache(struct cpu_info *ci, vaddr_t va, size_t len)
98{
99}
100
101void
102Octeon_IOSyncDCache(struct cpu_info *ci, vaddr_t va, size_t len, int how)
103{
104	switch (how) {
105	default:
106	case CACHE_SYNC_R:
107		break;
108	case CACHE_SYNC_W: /* writeback */
109	case CACHE_SYNC_X: /* writeback and invalidate */
110		SYNC();
111		break;
112	}
113}
114