MIPS: Add code for new system 'paravirt'
For para-virtualized guests running under KVM or other equivalent hypervisor. Signed-off-by: David Daney <david.daney@cavium.com> Signed-off-by: Andreas Herrmann <andreas.herrmann@caviumnetworks.com> Cc: linux-mips@linux-mips.org Cc: James Hogan <james.hogan@imgtec.com> Cc: kvm@vger.kernel.org Patchwork: https://patchwork.linux-mips.org/patch/7004/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:

committed by
Ralf Baechle

parent
90dfdc7ceb
commit
18280edafe
36
arch/mips/include/asm/mach-paravirt/cpu-feature-overrides.h
Normal file
36
arch/mips/include/asm/mach-paravirt/cpu-feature-overrides.h
Normal file
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2013 Cavium, Inc.
|
||||
*/
|
||||
#ifndef __ASM_MACH_PARAVIRT_CPU_FEATURE_OVERRIDES_H
|
||||
#define __ASM_MACH_PARAVIRT_CPU_FEATURE_OVERRIDES_H
|
||||
|
||||
#define cpu_has_4kex 1
|
||||
#define cpu_has_3k_cache 0
|
||||
#define cpu_has_tx39_cache 0
|
||||
#define cpu_has_counter 1
|
||||
#define cpu_has_llsc 1
|
||||
/*
|
||||
* We Disable LL/SC on non SMP systems as it is faster to disable
|
||||
* interrupts for atomic access than a LL/SC.
|
||||
*/
|
||||
#ifdef CONFIG_SMP
|
||||
# define kernel_uses_llsc 1
|
||||
#else
|
||||
# define kernel_uses_llsc 0
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CPU_CAVIUM_OCTEON
|
||||
#define cpu_dcache_line_size() 128
|
||||
#define cpu_icache_line_size() 128
|
||||
#define cpu_has_octeon_cache 1
|
||||
#define cpu_has_4k_cache 0
|
||||
#else
|
||||
#define cpu_has_octeon_cache 0
|
||||
#define cpu_has_4k_cache 1
|
||||
#endif
|
||||
|
||||
#endif /* __ASM_MACH_PARAVIRT_CPU_FEATURE_OVERRIDES_H */
|
19
arch/mips/include/asm/mach-paravirt/irq.h
Normal file
19
arch/mips/include/asm/mach-paravirt/irq.h
Normal file
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2013 Cavium, Inc.
|
||||
*/
|
||||
#ifndef __ASM_MACH_PARAVIRT_IRQ_H__
|
||||
#define __ASM_MACH_PARAVIRT_IRQ_H__
|
||||
|
||||
#define NR_IRQS 64
|
||||
#define MIPS_CPU_IRQ_BASE 1
|
||||
|
||||
#define MIPS_IRQ_PCIA (MIPS_CPU_IRQ_BASE + 8)
|
||||
|
||||
#define MIPS_IRQ_MBOX0 (MIPS_CPU_IRQ_BASE + 32)
|
||||
#define MIPS_IRQ_MBOX1 (MIPS_CPU_IRQ_BASE + 33)
|
||||
|
||||
#endif /* __ASM_MACH_PARAVIRT_IRQ_H__ */
|
50
arch/mips/include/asm/mach-paravirt/kernel-entry-init.h
Normal file
50
arch/mips/include/asm/mach-paravirt/kernel-entry-init.h
Normal file
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2013 Cavium, Inc
|
||||
*/
|
||||
#ifndef __ASM_MACH_PARAVIRT_KERNEL_ENTRY_H
|
||||
#define __ASM_MACH_PARAVIRT_KERNEL_ENTRY_H
|
||||
|
||||
#define CP0_EBASE $15, 1
|
||||
|
||||
.macro kernel_entry_setup
|
||||
mfc0 t0, CP0_EBASE
|
||||
andi t0, t0, 0x3ff # CPUNum
|
||||
beqz t0, 1f
|
||||
# CPUs other than zero goto smp_bootstrap
|
||||
j smp_bootstrap
|
||||
|
||||
1:
|
||||
.endm
|
||||
|
||||
/*
|
||||
* Do SMP slave processor setup necessary before we can safely execute
|
||||
* C code.
|
||||
*/
|
||||
.macro smp_slave_setup
|
||||
mfc0 t0, CP0_EBASE
|
||||
andi t0, t0, 0x3ff # CPUNum
|
||||
slti t1, t0, NR_CPUS
|
||||
bnez t1, 1f
|
||||
2:
|
||||
di
|
||||
wait
|
||||
b 2b # Unknown CPU, loop forever.
|
||||
1:
|
||||
PTR_LA t1, paravirt_smp_sp
|
||||
PTR_SLL t0, PTR_SCALESHIFT
|
||||
PTR_ADDU t1, t1, t0
|
||||
3:
|
||||
PTR_L sp, 0(t1)
|
||||
beqz sp, 3b # Spin until told to proceed.
|
||||
|
||||
PTR_LA t1, paravirt_smp_gp
|
||||
PTR_ADDU t1, t1, t0
|
||||
sync
|
||||
PTR_L gp, 0(t1)
|
||||
.endm
|
||||
|
||||
#endif /* __ASM_MACH_PARAVIRT_KERNEL_ENTRY_H */
|
25
arch/mips/include/asm/mach-paravirt/war.h
Normal file
25
arch/mips/include/asm/mach-paravirt/war.h
Normal file
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 2002, 2004, 2007 by Ralf Baechle <ralf@linux-mips.org>
|
||||
* Copyright (C) 2013 Cavium Networks <support@caviumnetworks.com>
|
||||
*/
|
||||
#ifndef __ASM_MIPS_MACH_PARAVIRT_WAR_H
|
||||
#define __ASM_MIPS_MACH_PARAVIRT_WAR_H
|
||||
|
||||
#define R4600_V1_INDEX_ICACHEOP_WAR 0
|
||||
#define R4600_V1_HIT_CACHEOP_WAR 0
|
||||
#define R4600_V2_HIT_CACHEOP_WAR 0
|
||||
#define R5432_CP0_INTERRUPT_WAR 0
|
||||
#define BCM1250_M3_WAR 0
|
||||
#define SIBYTE_1956_WAR 0
|
||||
#define MIPS4K_ICACHE_REFILL_WAR 0
|
||||
#define MIPS_CACHE_SYNC_WAR 0
|
||||
#define TX49XX_ICACHE_INDEX_INV_WAR 0
|
||||
#define ICACHE_REFILLS_WORKAROUND_WAR 0
|
||||
#define R10000_LLSC_WAR 0
|
||||
#define MIPS34K_MISSED_ITLB_WAR 0
|
||||
|
||||
#endif /* __ASM_MIPS_MACH_PARAVIRT_WAR_H */
|
Reference in New Issue
Block a user