• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * This file is subject to the terms and conditions of the GNU General Public
3  * License.  See the file "COPYING" in the main directory of this archive
4  * for more details.
5  *
6  * Copyright (C) 2013 Cavium, Inc.
7  */
8 
9 #include <linux/kernel.h>
10 #include <linux/kvm_para.h>
11 
12 #include <asm/reboot.h>
13 #include <asm/bootinfo.h>
14 #include <asm/smp-ops.h>
15 #include <asm/time.h>
16 
17 extern const struct plat_smp_ops paravirt_smp_ops;
18 
get_system_type(void)19 const char *get_system_type(void)
20 {
21 	return "MIPS Para-Virtualized Guest";
22 }
23 
plat_time_init(void)24 void __init plat_time_init(void)
25 {
26 	mips_hpt_frequency = kvm_hypercall0(KVM_HC_MIPS_GET_CLOCK_FREQ);
27 
28 	preset_lpj = mips_hpt_frequency / (2 * HZ);
29 }
30 
pv_machine_halt(void)31 static void pv_machine_halt(void)
32 {
33 	kvm_hypercall0(KVM_HC_MIPS_EXIT_VM);
34 }
35 
36 /*
37  * Early entry point for arch setup
38  */
prom_init(void)39 void __init prom_init(void)
40 {
41 	int i;
42 	int argc = fw_arg0;
43 	char **argv = (char **)fw_arg1;
44 
45 #ifdef CONFIG_32BIT
46 	set_io_port_base(KSEG1ADDR(0x1e000000));
47 #else /* CONFIG_64BIT */
48 	set_io_port_base(PHYS_TO_XKSEG_UNCACHED(0x1e000000));
49 #endif
50 
51 	for (i = 0; i < argc; i++) {
52 		strlcat(arcs_cmdline, argv[i], COMMAND_LINE_SIZE);
53 		if (i < argc - 1)
54 			strlcat(arcs_cmdline, " ", COMMAND_LINE_SIZE);
55 	}
56 	_machine_halt = pv_machine_halt;
57 	register_smp_ops(&paravirt_smp_ops);
58 }
59 
plat_mem_setup(void)60 void __init plat_mem_setup(void)
61 {
62 	/* Do nothing, the "mem=???" parser handles our memory. */
63 }
64 
prom_free_prom_memory(void)65 void __init prom_free_prom_memory(void)
66 {
67 }
68