162306a36Sopenharmony_ci/*
262306a36Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public
362306a36Sopenharmony_ci * License.  See the file "COPYING" in the main directory of this archive
462306a36Sopenharmony_ci * for more details.
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Copyright (C) 2004 Cavium Networks
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci#ifndef __ASM_MACH_CAVIUM_OCTEON_CPU_FEATURE_OVERRIDES_H
962306a36Sopenharmony_ci#define __ASM_MACH_CAVIUM_OCTEON_CPU_FEATURE_OVERRIDES_H
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include <linux/types.h>
1262306a36Sopenharmony_ci#include <asm/mipsregs.h>
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci/*
1562306a36Sopenharmony_ci * Cavium Octeons are MIPS64v2 processors
1662306a36Sopenharmony_ci */
1762306a36Sopenharmony_ci#define cpu_dcache_line_size()	128
1862306a36Sopenharmony_ci#define cpu_icache_line_size()	128
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci#define cpu_has_4kex		1
2262306a36Sopenharmony_ci#define cpu_has_3k_cache	0
2362306a36Sopenharmony_ci#define cpu_has_4k_cache	0
2462306a36Sopenharmony_ci#define cpu_has_counter		1
2562306a36Sopenharmony_ci#define cpu_has_watch		1
2662306a36Sopenharmony_ci#define cpu_has_divec		1
2762306a36Sopenharmony_ci#define cpu_has_vce		0
2862306a36Sopenharmony_ci#define cpu_has_cache_cdex_p	0
2962306a36Sopenharmony_ci#define cpu_has_cache_cdex_s	0
3062306a36Sopenharmony_ci#define cpu_has_prefetch	1
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci#define cpu_has_llsc		1
3362306a36Sopenharmony_ci/*
3462306a36Sopenharmony_ci * We Disable LL/SC on non SMP systems as it is faster to disable
3562306a36Sopenharmony_ci * interrupts for atomic access than a LL/SC.
3662306a36Sopenharmony_ci */
3762306a36Sopenharmony_ci#ifdef CONFIG_SMP
3862306a36Sopenharmony_ci# define kernel_uses_llsc	1
3962306a36Sopenharmony_ci#else
4062306a36Sopenharmony_ci# define kernel_uses_llsc	0
4162306a36Sopenharmony_ci#endif
4262306a36Sopenharmony_ci#define cpu_has_vtag_icache	1
4362306a36Sopenharmony_ci#define cpu_has_dc_aliases	0
4462306a36Sopenharmony_ci#define cpu_has_ic_fills_f_dc	0
4562306a36Sopenharmony_ci#define cpu_has_64bits		1
4662306a36Sopenharmony_ci#define cpu_has_octeon_cache	1
4762306a36Sopenharmony_ci#define cpu_has_mips32r1	1
4862306a36Sopenharmony_ci#define cpu_has_mips32r2	1
4962306a36Sopenharmony_ci#define cpu_has_mips64r1	1
5062306a36Sopenharmony_ci#define cpu_has_mips64r2	1
5162306a36Sopenharmony_ci#define cpu_has_dsp		0
5262306a36Sopenharmony_ci#define cpu_has_dsp2		0
5362306a36Sopenharmony_ci#define cpu_has_mipsmt		0
5462306a36Sopenharmony_ci#define cpu_has_vint		0
5562306a36Sopenharmony_ci#define cpu_has_veic		0
5662306a36Sopenharmony_ci#define cpu_hwrena_impl_bits	(MIPS_HWRENA_IMPL1 | MIPS_HWRENA_IMPL2)
5762306a36Sopenharmony_ci#define cpu_has_wsbh            1
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci#define cpu_has_rixi		(cpu_data[0].cputype != CPU_CAVIUM_OCTEON)
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci#define PREFETCH_STRIDE 128
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci#ifdef __OCTEON__
6462306a36Sopenharmony_ci/*
6562306a36Sopenharmony_ci * All gcc versions that have OCTEON support define __OCTEON__ and have the
6662306a36Sopenharmony_ci *  __builtin_popcount support.
6762306a36Sopenharmony_ci */
6862306a36Sopenharmony_ci#define ARCH_HAS_USABLE_BUILTIN_POPCOUNT 1
6962306a36Sopenharmony_ci#endif
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci/*
7262306a36Sopenharmony_ci * The last 256MB are reserved for device to device mappings and the
7362306a36Sopenharmony_ci * BAR1 hole.
7462306a36Sopenharmony_ci */
7562306a36Sopenharmony_ci#define MAX_DMA32_PFN (((1ULL << 32) - (1ULL << 28)) >> PAGE_SHIFT)
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci#endif
78